qxj пре 4 месеци
родитељ
комит
5037fca2cc
100 измењених фајлова са 28640 додато и 25973 уклоњено
  1. BIN
      .DS_Store
  2. 16 0
      .hbuilderx/launch.json
  3. 153 153
      App.vue
  4. 15 15
      api/class.js
  5. 93 93
      api/courseAuto.js
  6. 76 76
      api/courseLook.js
  7. 22 22
      api/index.js
  8. 263 259
      api/manageCompany.js
  9. 38 38
      api/patient.js
  10. 47 47
      api/test.js
  11. 67 67
      api/user.js
  12. 262 262
      assets/css/common.less
  13. 133 133
      assets/css/common.scss
  14. 218 218
      assets/css/commonTheme.css
  15. 31 31
      assets/css/theme.scss
  16. 179 0
      assets/css/tool.css
  17. 140 122
      common/request.js
  18. 472 0
      components/tools.vue
  19. 452 0
      components/tools1.vue
  20. 19 19
      main.js
  21. 6 2
      manifest.json
  22. 17 17
      node_modules/.bin/nanoid.cmd
  23. 17 17
      node_modules/.bin/parser.cmd
  24. 138 0
      node_modules/.vue-global-types/vue_99_0.d.ts
  25. 618 565
      pages.json
  26. 45 45
      pages/about/index.vue
  27. 420 420
      pages/auth/login.vue
  28. 39 39
      pages/course/videovip.vue
  29. 39 39
      pages/healthTest/healthTest.vue
  30. 134 134
      pages/index/index.vue
  31. 416 416
      pages/user/index.vue
  32. 24 24
      pages/user/userAgreement.vue
  33. 10 10
      pages_course/H5reward.vue
  34. 208 208
      pages_course/becomeSale.vue
  35. 641 637
      pages_course/becomeVIP.vue
  36. 704 704
      pages_course/components/commentBox.vue
  37. 65 0
      pages_course/components/courseExpiration.vue
  38. 155 155
      pages_course/components/descInfo.vue
  39. 206 206
      pages_course/components/descInfoNav.vue
  40. 269 269
      pages_course/components/loginPop.vue
  41. 134 134
      pages_course/components/ques.vue
  42. 494 494
      pages_course/feedback.vue
  43. 336 336
      pages_course/learn.vue
  44. 172 172
      pages_course/reward.vue
  45. 273 273
      pages_course/teacherClassroom.vue
  46. 2264 2229
      pages_course/video.vue
  47. 2348 2271
      pages_course/videovip.vue
  48. 109 108
      pages_course/webview.vue
  49. 163 0
      pages_course/yk-screenRecord/yk-screenRecord.vue
  50. 676 676
      pages_index/addEditPatient.vue
  51. 216 216
      pages_index/patient.vue
  52. 223 223
      pages_index/testDetails.vue
  53. 363 363
      pages_index/testResult.vue
  54. 305 0
      pages_index/voice.vue
  55. 489 0
      pages_index/voiceItem.vue
  56. 244 0
      pages_index/voiceList.vue
  57. 298 298
      pages_manage/components/UrgeIndex.vue
  58. 102 102
      pages_manage/components/chart.vue
  59. 520 520
      pages_manage/components/courseIndex.vue
  60. 776 774
      pages_manage/components/courseItem.vue
  61. 747 747
      pages_manage/components/dataIndex.vue
  62. 334 334
      pages_manage/components/dropdownPanel.vue
  63. 766 766
      pages_manage/components/manageIndex.vue
  64. 1977 1974
      pages_manage/components/memberIndex.vue
  65. 437 437
      pages_manage/components/vipUserItem.vue
  66. 651 651
      pages_manage/dataDetails.vue
  67. 277 277
      pages_manage/index.vue
  68. 237 237
      pages_manage/login.vue
  69. 799 799
      pages_manage/manageDataDetail.vue
  70. 898 898
      pages_manage/statistic.vue
  71. 124 124
      pages_managedata/about.vue
  72. 621 621
      pages_managedata/changeVip.vue
  73. 151 151
      pages_managedata/components/tki-tree/style.css
  74. 0 90
      pages_managedata/components/tki-tree/tki-tree.vue
  75. 358 358
      pages_managedata/coursedetail.vue
  76. 11 0
      pages_managedata/coursedetail1.vue
  77. 351 351
      pages_managedata/editUser.vue
  78. 174 174
      pages_managedata/exprotList.vue
  79. 291 291
      pages_managedata/lableSetup.vue
  80. 463 463
      pages_managedata/managedetail.vue
  81. 338 338
      pages_managedata/saleInfo.vue
  82. 257 257
      pages_managedata/userInfo.vue
  83. 680 680
      pages_managedata/users.vue
  84. 304 304
      pages_managedata/vipdetail.vue
  85. BIN
      pages_tool/.DS_Store
  86. 14 0
      pages_tool/@babel/runtime/helpers/defineProperty.js
  87. 8 0
      pages_tool/@babel/runtime/helpers/interopRequireDefault.js
  88. BIN
      pages_tool/images/.DS_Store
  89. BIN
      pages_tool/images/add.png
  90. BIN
      pages_tool/images/christmasHat/.DS_Store
  91. BIN
      pages_tool/images/christmasHat/1.png
  92. BIN
      pages_tool/images/christmasHat/10.png
  93. BIN
      pages_tool/images/christmasHat/2.png
  94. BIN
      pages_tool/images/christmasHat/3.png
  95. BIN
      pages_tool/images/christmasHat/4.png
  96. BIN
      pages_tool/images/christmasHat/5.png
  97. BIN
      pages_tool/images/christmasHat/6.png
  98. BIN
      pages_tool/images/christmasHat/7.png
  99. BIN
      pages_tool/images/christmasHat/8.png
  100. BIN
      pages_tool/images/christmasHat/9.png

+ 16 - 0
.hbuilderx/launch.json

@@ -0,0 +1,16 @@
+{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+  // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+    "version": "0.0",
+    "configurations": [{
+     	"default" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"mp-weixin" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"type" : "uniCloud"
+     }
+    ]
+}

+ 153 - 153
App.vue

@@ -1,154 +1,154 @@
-<script>
-	export default {
-		onLaunch: function() {
-			// console.log('App Launch')
-			this.checkUpdate()
-		},
-		onShow: function() {
-			// console.log('App Show')
-		},
-		onHide: function() {
-			// console.log('App Hide')
-		},
-		methods: {
-			checkUpdate() {
-				const updateManager = uni.getUpdateManager();
-				updateManager.onCheckForUpdate(function(res) {
-					// 请求完新版本信息的回调
-					console.log('是否有新版本:', res.hasUpdate);
-				});
-			
-				updateManager.onUpdateReady(function() {
-					uni.showModal({
-						title: '更新提示',
-						content: '新版本已经准备好,是否重启小程序?',
-						confirmText: '立即重启',
-						confirmColor: '#2179f5',
-						showCancel: false,
-						success(res) {
-							if (res.confirm) {
-								// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
-								updateManager.applyUpdate();
-							}
-						}
-					});
-				});
-			
-				updateManager.onUpdateFailed(function() {
-					// 新的版本下载失败
-					uni.showModal({
-						title: '更新提示',
-						content: '新版本下载失败,请检查网络后重试。',
-						showCancel: false
-					});
-				});
-			},
-		}
-	}
-</script>
-<style lang="less">
-	@import '@/assets/css/common.less';
-	@import './assets/css/tool.css';
-</style>
-<style lang="scss">
-	@import "@/uni_modules/uview-ui/index.scss";
-	@import '@/assets/css/common.scss';
-	@import '@/assets/css/commonTheme.css';
-	page{
-		background-color: #f5f5f5;
-	}
-	::-webkit-scrollbar{
-	    width: 0 !important;
-	    height: 0 !important;
-	    
-	}
-	
-	/*每个页面公共css */
-	.base-color {
-		color: #1773ff;
-	}
-	.colorf{
-		color: #fff;
-	}
-	.bgf{
-		background-color: #fff;
-	}
-	.base-color-2 {
-		color: #e7f1fe;
-	}
-		
-	.base-color-3 {
-		color: #425034;
-	}
-	.base-color-9 {
-		color: #999;
-	}
-	.base-color-8 {
-		color: #f8f8f8;
-	}
-	.base-color-6 {
-		color: #666;
-	}
-	.base-color-gray {
-		color: #DEDFE4;
-	}
-	.base-color-red{
-			color:#ee0a25;
-	}
-	.base-color-dark {
-		color: #313131;
-	}
-		
-	.base-color-dark2 {
-		color: #3E3E3E;
-	}
-		
-	.base-price {
-		color: #FF1212;
-	}
-		
-	.base-success {
-		color: #a3db42;
-	}
-		
-	.base-bg {
-		background: #1773ff;
-	}
-		
-	.base-bg-2 {
-		background: #e7f1fe;
-	}
-	.base-bg-red{
-		background: #ee0a25;
-	}
-	.base-bg-f{
-		background-color:#fff;
-	}
-	.base-bg-f8{
-		background-color:#f8f8f8;
-	}
-	.base-bg-f5{
-		background-color: #f5f5f5;
-	}
-	.base-bg-9{
-		background-color: #f9f9f9;
-	}
-	.base-bg-blue{
-		background:#1677ff;
-	}
-	.base-bg-sure{
-		background:#e7f2fe;
-	}
-	.base-bg-orange{
-		background:#FF7F00;
-	}
-	.base-bg-false{
-		background:#fae7e7;
-	}
-	.bor-blue{
-		border: 2rpx solid #c9e1fb;
-	}
-	.bor-red{
-		border: 2rpx solid #f7a1a1;
-	}
+<script>
+	export default {
+		onLaunch: function() {
+			// console.log('App Launch')
+			this.checkUpdate()
+		},
+		onShow: function() {
+			// console.log('App Show')
+		},
+		onHide: function() {
+			// console.log('App Hide')
+		},
+		methods: {
+			checkUpdate() {
+				const updateManager = uni.getUpdateManager();
+				updateManager.onCheckForUpdate(function(res) {
+					// 请求完新版本信息的回调
+					console.log('是否有新版本:', res.hasUpdate);
+				});
+			
+				updateManager.onUpdateReady(function() {
+					uni.showModal({
+						title: '更新提示',
+						content: '新版本已经准备好,是否重启小程序?',
+						confirmText: '立即重启',
+						confirmColor: '#2179f5',
+						showCancel: false,
+						success(res) {
+							if (res.confirm) {
+								// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
+								updateManager.applyUpdate();
+							}
+						}
+					});
+				});
+			
+				updateManager.onUpdateFailed(function() {
+					// 新的版本下载失败
+					uni.showModal({
+						title: '更新提示',
+						content: '新版本下载失败,请检查网络后重试。',
+						showCancel: false
+					});
+				});
+			},
+		}
+	}
+</script>
+<style lang="less">
+	@import '@/assets/css/common.less';
+	@import './assets/css/tool.css';
+</style>
+<style lang="scss">
+	@import "@/uni_modules/uview-ui/index.scss";
+	@import '@/assets/css/common.scss';
+	@import '@/assets/css/commonTheme.css';
+	page{
+		background-color: #f5f5f5;
+	}
+	::-webkit-scrollbar{
+	    width: 0 !important;
+	    height: 0 !important;
+	    
+	}
+	
+	/*每个页面公共css */
+	.base-color {
+		color: #1773ff;
+	}
+	.colorf{
+		color: #fff;
+	}
+	.bgf{
+		background-color: #fff;
+	}
+	.base-color-2 {
+		color: #e7f1fe;
+	}
+		
+	.base-color-3 {
+		color: #425034;
+	}
+	.base-color-9 {
+		color: #999;
+	}
+	.base-color-8 {
+		color: #f8f8f8;
+	}
+	.base-color-6 {
+		color: #666;
+	}
+	.base-color-gray {
+		color: #DEDFE4;
+	}
+	.base-color-red{
+			color:#ee0a25;
+	}
+	.base-color-dark {
+		color: #313131;
+	}
+		
+	.base-color-dark2 {
+		color: #3E3E3E;
+	}
+		
+	.base-price {
+		color: #FF1212;
+	}
+		
+	.base-success {
+		color: #a3db42;
+	}
+		
+	.base-bg {
+		background: #1773ff;
+	}
+		
+	.base-bg-2 {
+		background: #e7f1fe;
+	}
+	.base-bg-red{
+		background: #ee0a25;
+	}
+	.base-bg-f{
+		background-color:#fff;
+	}
+	.base-bg-f8{
+		background-color:#f8f8f8;
+	}
+	.base-bg-f5{
+		background-color: #f5f5f5;
+	}
+	.base-bg-9{
+		background-color: #f9f9f9;
+	}
+	.base-bg-blue{
+		background:#1677ff;
+	}
+	.base-bg-sure{
+		background:#e7f2fe;
+	}
+	.base-bg-orange{
+		background:#FF7F00;
+	}
+	.base-bg-false{
+		background:#fae7e7;
+	}
+	.bor-blue{
+		border: 2rpx solid #c9e1fb;
+	}
+	.bor-red{
+		border: 2rpx solid #f7a1a1;
+	}
 </style>

+ 15 - 15
api/class.js

@@ -1,16 +1,16 @@
-import Request from '../common/request.js';
-let request = new Request().http
- export function courseList() {
- 	 return request('/course_auto/app/course/getAppletCourse',null,'GET');
- }
- // 课程详情
- export function courseDetails() {
- 	 return request('/course_auto/app/course/getH5CourseByVideoId',data,'GET');
- }
- export function courseListB() {
- 	 return request('/course_auto/app/course/getPrivateCourse',null,'GET');
- }
- //获取销售管理按钮是否显示的状态
-  export function queryIsTownOn(data) {
-  	 return request('/app/index/queryIsTownOn',data,'GET');
+import Request from '../common/request.js';
+let request = new Request().http
+ export function courseList() {
+ 	 return request('/course_auto/app/course/getAppletCourse',null,'GET');
+ }
+ // 课程详情
+ export function courseDetails() {
+ 	 return request('/course_auto/app/course/getH5CourseByVideoId',data,'GET');
+ }
+ export function courseListB() {
+ 	 return request('/course_auto/app/course/getPrivateCourse',null,'GET');
+ }
+ //获取销售管理按钮是否显示的状态
+  export function queryIsTownOn(data) {
+  	 return request('/app/index/queryIsTownOn',data,'GET');
   }

+ 93 - 93
api/courseAuto.js

@@ -1,94 +1,94 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-export function loginByMp(data) {
- 	 return request('/course_auto/app/wx/courseLogin',data,'POST','application/json;charset=UTF-8');
- }
-
-// 获取真实链接
-export function getRealLink(data) {
-	return request('/course_auto/app/course/getRealLink', data, 'GET','');
-}
-
-// h5课程简介
-export function getH5CourseByVideoId(data) {
-	return request('/course_auto/app/course/getH5CourseByVideoId', data, 'GET','');
-}
-
-// h5课程详情加问答
-export function getH5CourseVideoDetails(data) {
-	return request('/course_auto/app/course/getH5CourseVideoDetails', data, 'GET','');
-}
-
-// 答题发红包
-export function courseAnswer(data) {
-	return request('/course_auto/app/course/courseAnswer', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// // 记录看课时间(旧)
-// export function getFinishCourseVideo(data) {
-// 	return request('/course_auto/app/course/getFinishCourseVideo', data, 'POST', 'application/json;charset=UTF-8');
-// }
-
-// 记录看课时间(新)
-export function getFinishCourseVideo(data) {
-	return request('/course_auto/app/course/updateWatchDuration', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 关注客服
-export function getIsAddKf(data) {
-	return request('/course_auto/app/course/isAddKf', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 流量(缓冲百分比)
-export function getInternetTraffic(data) {
-	return request('/course_auto/app/course/getInternetTraffic', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 每十分钟获得积分
-export function getIntegralByH5Video(data) {
-	return request('/course_auto/app/course/getIntegralByH5Video', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 发送奖励
-export function sendReward(data) {
-	return request('/course_auto/app/course/sendReward', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 播放错误上报
-export function getErrMsg(data) {
-	return request('/app/course/getErrMsg', data, 'POST', 'application/x-www-form-urlencoded');
-}
-
-
-// 获取getWxConfig
-export function getWxConfig(data) {
-	return request('/course_auto/app/wx/mp/getWxConfig', data, 'GET','');
-}
-
-// 保存评论数据
-export function saveMsg(data) {
-	return request('/course_auto/app/course/saveMsg', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 撤销评论
-export function revokeMsg(data) {
-	return request('/course_auto/app/course/revokeMsg', data, 'PUT', 'application/json;charset=UTF-8');
-}
-
-// 获取历史评论数据
-export function getComments(data) {
-	return request('/course_auto/app/course/getComments', data, 'GET');
-}
-
-// 企业理念
-export function getConcept() {
-	return request('/course_auto/app/index/getConcept', null, 'GET');
-}
-
- export function getTypeTree(data) {
- 	return request('/course_auto/app/user/complaint/getTypeTree', null, 'GET');
- }
- export function complaintRecord(data) {
- 	return request('/course_auto/app/user/complaint/record', data, 'POST','application/json;charset=UTF-8');
+import Request from '../common/request.js';
+let request = new Request().http
+
+export function loginByMp(data) {
+ 	 return request('/course_auto/app/wx/courseLogin',data,'POST','application/json;charset=UTF-8');
+ }
+
+// 获取真实链接
+export function getRealLink(data) {
+	return request('/course_auto/app/course/getRealLink', data, 'GET','');
+}
+
+// h5课程简介
+export function getH5CourseByVideoId(data) {
+	return request('/course_auto/app/course/getH5CourseByVideoId', data, 'GET','');
+}
+
+// h5课程详情加问答
+export function getH5CourseVideoDetails(data) {
+	return request('/course_auto/app/course/getH5CourseVideoDetails', data, 'GET','');
+}
+
+// 答题发红包
+export function courseAnswer(data) {
+	return request('/course_auto/app/course/courseAnswer', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+// // 记录看课时间(旧)
+// export function getFinishCourseVideo(data) {
+// 	return request('/course_auto/app/course/getFinishCourseVideo', data, 'POST', 'application/json;charset=UTF-8');
+// }
+
+// 记录看课时间(新)
+export function getFinishCourseVideo(data) {
+	return request('/course_auto/app/course/updateWatchDuration', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+// 关注客服
+export function getIsAddKf(data) {
+	return request('/course_auto/app/course/isAddKf', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+// 流量(缓冲百分比)
+export function getInternetTraffic(data) {
+	return request('/course_auto/app/course/getInternetTraffic', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+// 每十分钟获得积分
+export function getIntegralByH5Video(data) {
+	return request('/course_auto/app/course/getIntegralByH5Video', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+// 发送奖励
+export function sendReward(data) {
+	return request('/course_auto/app/course/sendReward', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+// 播放错误上报
+export function getErrMsg(data) {
+	return request('/app/course/getErrMsg', data, 'POST', 'application/x-www-form-urlencoded');
+}
+
+
+// 获取getWxConfig
+export function getWxConfig(data) {
+	return request('/course_auto/app/wx/mp/getWxConfig', data, 'GET','');
+}
+
+// 保存评论数据
+export function saveMsg(data) {
+	return request('/course_auto/app/course/saveMsg', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+// 撤销评论
+export function revokeMsg(data) {
+	return request('/course_auto/app/course/revokeMsg', data, 'PUT', 'application/json;charset=UTF-8');
+}
+
+// 获取历史评论数据
+export function getComments(data) {
+	return request('/course_auto/app/course/getComments', data, 'GET');
+}
+
+// 企业理念
+export function getConcept() {
+	return request('/course_auto/app/index/getConcept', null, 'GET');
+}
+
+ export function getTypeTree(data) {
+ 	return request('/course_auto/app/user/complaint/getTypeTree', null, 'GET');
+ }
+ export function complaintRecord(data) {
+ 	return request('/course_auto/app/user/complaint/record', data, 'POST','application/json;charset=UTF-8');
  }

+ 76 - 76
api/courseLook.js

@@ -1,77 +1,77 @@
-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');
- }
- //h5授权登录
- export function H5logoinApp(data,type) {
-	 if(type&&type==1) {
-		return request('/app/wx/h5/mp/courseLoginByMp',data,'POST','application/json;charset=UTF-8'); 
-	 } else {
-		return request('/app/wx/h5/mp/loginByMp',data,'POST','application/json;charset=UTF-8'); 
-	 }
- }
- 
- //h5授权登录
- export function handleFsUserWx(data) {
- 	 return request('/course_uniapp/app/wx/h5/mp/handleFsUserWx',data,'POST','application/json;charset=UTF-8');
+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');
+ }
+ //h5授权登录
+ export function H5logoinApp(data,type) {
+	 if(type&&type==1) {
+		return request('/app/wx/h5/mp/courseLoginByMp',data,'POST','application/json;charset=UTF-8'); 
+	 } else {
+		return request('/app/wx/h5/mp/loginByMp',data,'POST','application/json;charset=UTF-8'); 
+	 }
+ }
+ 
+ //小程序授权登录
+ export function handleFsUserWx(data) {
+ 	 return request('/course_uniapp/app/wx/h5/mp/handleFsUserWx',data,'POST','application/json;charset=UTF-8');
  }

+ 22 - 22
api/index.js

@@ -1,23 +1,23 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-
-export function getAdvList(data) {
- 	 return request('/app/adv/getAdvList',data,'GET');
-}
- //用户协议
- export function userAgreement() {
- 	 return request('/web/userAgreement',null,'GET');
- }
- //隐私保护
- export function privacyPolicy() {
- 	 return request('/web/privacyPolicy',null,'GET');
- }
- //企业理念
- export function getenterprise(data){
- 	return request('/app/index/getConcept',data,  'GET');
- }
- export function getConfigByKey(data) {
- 	 return request('/app/common/getConfigByKey',data,'GET');
- }
+import Request from '../common/request.js';
+let request = new Request().http
+
+
+export function getAdvList(data) {
+ 	 return request('/app/adv/getAdvList',data,'GET');
+}
+ //用户协议
+ export function userAgreement() {
+ 	 return request('/web/userAgreement',null,'GET');
+ }
+ //隐私保护
+ export function privacyPolicy() {
+ 	 return request('/web/privacyPolicy',null,'GET');
+ }
+ //企业理念
+ export function getenterprise(data){
+ 	return request('/app/index/getConcept',data,  'GET');
+ }
+ export function getConfigByKey(data) {
+ 	 return request('/app/common/getConfigByKey',data,'GET');
+ }
  

+ 263 - 259
api/manageCompany.js

@@ -1,260 +1,264 @@
-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');
-}
-//获取对应的项目编码
-export function getlinkCode(data) {
-	return request('/companyapp/app/fs/course/getProjectCode', data, 'GET', 'application/json;charset=UTF-8');
-}
-//更改课程时间
-export function updataTime(data){
-	return request('/companyapp/app/fs/course/setWatchTime',data, 'POST', 'application/json;charset=UTF-8');
+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');
+}
+//获取对应的项目编码
+export function getlinkCode(data) {
+	return request('/companyapp/app/fs/course/getProjectCode', data, 'GET', 'application/json;charset=UTF-8');
+}
+//更改课程时间
+export function updataTime(data){
+	return request('/companyapp/app/fs/course/setWatchTime',data, 'POST', 'application/json;charset=UTF-8');
+}
+//获取appid配置
+export function getLoginMiniAppId({appId}){
+	return request('/companyapp/app/fs/course/getLoginMiniAppId/'+appId,{},'GET', 'application/json;charset=UTF-8');
 }

+ 38 - 38
api/patient.js

@@ -1,39 +1,39 @@
-import Request from '../common/request.js';
-let request = new Request().http
- export function getPatientList() {
- 	 return request('/app/patient/getPatientList',null,'GET');
- }
- export function getPatientById(data) {
- 	 return request('/app/patient/getPatientById',data,'GET');
- }
- export function delPatient(data) {
- 	return request('/app/patient/delPatient',data,'POST','application/json;charset=UTF-8');
- }
- export function addPatient(data) {
- 	return request('/app/patient/addPatient',data,'POST','application/json;charset=UTF-8');
- }
- export function editPatient(data) {
- 	return request('/app/patient/editPatient',data,'POST','application/json;charset=UTF-8');
- }
- 
- 
- 
- 
- 
-
- 
- 
- 
- 
-  
-  
- 
- 
- 
- 
-
- 
- 
- 
- 
+import Request from '../common/request.js';
+let request = new Request().http
+ export function getPatientList() {
+ 	 return request('/app/patient/getPatientList',null,'GET');
+ }
+ export function getPatientById(data) {
+ 	 return request('/app/patient/getPatientById',data,'GET');
+ }
+ export function delPatient(data) {
+ 	return request('/app/patient/delPatient',data,'POST','application/json;charset=UTF-8');
+ }
+ export function addPatient(data) {
+ 	return request('/app/patient/addPatient',data,'POST','application/json;charset=UTF-8');
+ }
+ export function editPatient(data) {
+ 	return request('/app/patient/editPatient',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ 
+ 
+ 
+
+ 
+ 
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+
+ 
+ 
+ 
+ 
  

+ 47 - 47
api/test.js

@@ -1,48 +1,48 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
- export function getTestList(data) {
- 	 return request('/app/test/getTestList',data,'GET');
- }
- export function getTestDetails(data) {
- 	 return request('/app/test/getTestDetails',data,'GET');
- }
- 
- export function getTestTempDetails(data) {
- 	 return request('/app/test/getTestTempDetails',data,'GET');
- }
- export function getTestReport(data) {
- 	 return request('/app/test/getTestReport',data,'GET');
- }
- export function getTestReportImg(data) {
- 	 return request('/app/test/getTestReportImg',data,'GET');
- }
- export function doReport(data) {
-  	return request('/app/test/doReport',data,'POST','application/json;charset=UTF-8');
- }
- 
-  //语音接口
-  export function addVoicePrintUrl(data) {
-  	 return request('/companyapp/app/companyUser/addVoicePrintUrl',data,'POST','application/json;charset=UTF-8');
-  }
-  //  模板语音上传接口
-  export function companyUserVoiceNew(data) {
-  	 return request('/companyapp/app/companyUser/companyUserVoiceNew',data,'GET','application/json;charset=UTF-8');
-  }
-  // 模板语音上传接口
-  export function companyUserVoice(data) {
-  	 return request('/companyapp/app/companyUser/companyUserVoice',data,'GET','application/json;charset=UTF-8');
-  }
-  // 获取语音列表
-  export function querySopVoiceList(data) {
-  	 return request('/companyapp/app/companyUser/querySopVoiceList',data,'GET','application/json;charset=UTF-8');
-  }
-  // 获取语音详情
-  export function queryDetail(id) {
-  	 return request('/companyapp/app/companyUser/query/'+id,null,'GET','application/json;charset=UTF-8');
-  }
-   
-  export function createUserAllVoice(id) {
-  	 return request('/companyapp/app/companyUser/createUserAllVoice',null,'GET','application/json;charset=UTF-8');
-  }
+import Request from '../common/request.js';
+let request = new Request().http
+
+ export function getTestList(data) {
+ 	 return request('/app/test/getTestList',data,'GET');
+ }
+ export function getTestDetails(data) {
+ 	 return request('/app/test/getTestDetails',data,'GET');
+ }
+ 
+ export function getTestTempDetails(data) {
+ 	 return request('/app/test/getTestTempDetails',data,'GET');
+ }
+ export function getTestReport(data) {
+ 	 return request('/app/test/getTestReport',data,'GET');
+ }
+ export function getTestReportImg(data) {
+ 	 return request('/app/test/getTestReportImg',data,'GET');
+ }
+ export function doReport(data) {
+  	return request('/app/test/doReport',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+  //语音接口
+  export function addVoicePrintUrl(data) {
+  	 return request('/companyapp/app/companyUser/addVoicePrintUrl',data,'POST','application/json;charset=UTF-8');
+  }
+  //  模板语音上传接口
+  export function companyUserVoiceNew(data) {
+  	 return request('/companyapp/app/companyUser/companyUserVoiceNew',data,'GET','application/json;charset=UTF-8');
+  }
+  // 模板语音上传接口
+  export function companyUserVoice(data) {
+  	 return request('/companyapp/app/companyUser/companyUserVoice',data,'GET','application/json;charset=UTF-8');
+  }
+  // 获取语音列表
+  export function querySopVoiceList(data) {
+  	 return request('/companyapp/app/companyUser/querySopVoiceList',data,'GET','application/json;charset=UTF-8');
+  }
+  // 获取语音详情
+  export function queryDetail(id) {
+  	 return request('/companyapp/app/companyUser/query/'+id,null,'GET','application/json;charset=UTF-8');
+  }
+   
+  export function createUserAllVoice(id) {
+  	 return request('/companyapp/app/companyUser/createUserAllVoice',null,'GET','application/json;charset=UTF-8');
+  }
   

+ 67 - 67
api/user.js

@@ -1,68 +1,68 @@
-import Request from '../common/request.js';
-let request = new Request().http
- 
- export function loginByMiniApp(data) {
- 	 return request('/app/wx/loginByMiniApp',data,'POST','application/json;charset=UTF-8');
- }
- export function loginByMp(data) {
- 	 return request('/app/wx/loginByMp',data,'POST','application/json;charset=UTF-8');
- }
- export function getUserInfo() {
- 	 return request('/app/user/getUserInfo',null,'GET');
- }
- 
- export function editUser(data) {
- 	return request('/app/user/editUser',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function getWeixinInfo(data) {
- 	return request('/app/wx/getWeixinInfo',data,'POST','application/json;charset=UTF-8');
- }
- export function checkLogin() {
- 	 return request('/app/user/checkLogin',null,'GET');
- }
- export function getTuiImg() {
- 	 return request('/app/user/getTuiImg',null,'GET');
- }
- export function getMyTuiOrderList(data) {
- 	 return request('/app/user/getMyTuiOrderList',data,'GET');
- }
- export function getTuiMoney() {
- 	 return request('/app/user/getTuiMoney',null,'GET');
- }
- export function getMyTuiList(data) {
- 	 return request('/app/user/getMyTuiList',data,'GET');
- }
- export function getTuiMoneyLogs(data) {
- 	 return request('/app/user/getTuiMoneyLogs',data,'GET');
- }
- 
- export function getProductFoots(data) {
- 	 return request('/app/user/getProductFoots',data,'GET');
- }
- export function delProductFoots(data) {
- 	 return request('/app/user/delProductFoots',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function doExtract(data) {
- 	 return request('/app/user/doExtract',data,'POST','application/json;charset=UTF-8');
- }
- export function getExtractList(data) {
- 	 return request('/app/user/getExtractList',data,'GET');
- }
- export function applyPromoter(data) {
- 	 return request('/app/user/applyPromoter',data,'POST','application/json;charset=UTF-8');
- }
- export function bindPromoter(data) {
- 	 return request('/app/user/bindPromoter',data,'POST','application/json;charset=UTF-8');
- }
- 
- 
- 
- 
- 
- 
- 
- 
- 
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+ export function loginByMiniApp(data) {
+ 	 return request('/app/wx/loginByMiniApp',data,'POST','application/json;charset=UTF-8');
+ }
+ export function loginByMp(data) {
+ 	 return request('/app/wx/loginByMp',data,'POST','application/json;charset=UTF-8');
+ }
+ export function getUserInfo() {
+ 	 return request('/app/user/getUserInfo',null,'GET');
+ }
+ 
+ export function editUser(data) {
+ 	return request('/app/user/editUser',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function getWeixinInfo(data) {
+ 	return request('/app/wx/getWeixinInfo',data,'POST','application/json;charset=UTF-8');
+ }
+ export function checkLogin() {
+ 	 return request('/app/user/checkLogin',null,'GET');
+ }
+ export function getTuiImg() {
+ 	 return request('/app/user/getTuiImg',null,'GET');
+ }
+ export function getMyTuiOrderList(data) {
+ 	 return request('/app/user/getMyTuiOrderList',data,'GET');
+ }
+ export function getTuiMoney() {
+ 	 return request('/app/user/getTuiMoney',null,'GET');
+ }
+ export function getMyTuiList(data) {
+ 	 return request('/app/user/getMyTuiList',data,'GET');
+ }
+ export function getTuiMoneyLogs(data) {
+ 	 return request('/app/user/getTuiMoneyLogs',data,'GET');
+ }
+ 
+ export function getProductFoots(data) {
+ 	 return request('/app/user/getProductFoots',data,'GET');
+ }
+ export function delProductFoots(data) {
+ 	 return request('/app/user/delProductFoots',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ export function doExtract(data) {
+ 	 return request('/app/user/doExtract',data,'POST','application/json;charset=UTF-8');
+ }
+ export function getExtractList(data) {
+ 	 return request('/app/user/getExtractList',data,'GET');
+ }
+ export function applyPromoter(data) {
+ 	 return request('/app/user/applyPromoter',data,'POST','application/json;charset=UTF-8');
+ }
+ export function bindPromoter(data) {
+ 	 return request('/app/user/bindPromoter',data,'POST','application/json;charset=UTF-8');
+ }
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
  

+ 262 - 262
assets/css/common.less

@@ -1,262 +1,262 @@
- 
-page {
-  background: #f5f5f5;
-  height: 100%;
-}
-.containers{
-  height: 100%;
-}
-rich-text {
-  width: 100%;
-  display: block;
-  img,
-  image {
-    display: block;
-    width: 100%;
-  }
-}
-
-/*单行文本溢出省略号*/
-.one-t {
-  overflow: hidden;
-  white-space: nowrap;
-  text-overflow: ellipsis;
-  transition: all linear 0.2s;
-}
-
-/*多行文本溢出省略号*/
-.more-t {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  display: -webkit-box;
-  -webkit-line-clamp: 2;
-  -webkit-box-orient: vertical;
-  transition: all linear 0.2s;
-}
-
-/* ==================
-          flex布局(colorui里面也有相关基础样式)
- ==================== */
-/* x水平排列*/
-.x-f {
-  display: flex;
-  align-items: center;
-}
-
-/*x两端且水平居中*/
-.x-bc {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-}
-
-/*x平分且水平居中*/
-.x-ac {
-  display: flex;
-  justify-content: space-around;
-  align-items: center;
-}
-
-/*x水平靠上对齐*/
-.x-start {
-  display: flex;
-  align-items: flex-start;
-}
-
-/*x水平靠下对齐*/
-.x-end {
-  display: flex;
-  align-items: flex-end;
-}
-
-/*上下左右居中*/
-.x-c {
-  display: flex;
-  justify-content: center;
-  align-items: center;
-}
-
-/*y竖直靠左*/
-.y-start {
-  display: flex;
-  flex-direction: column;
-  align-items: flex-start;
-}
-
-/*y竖直靠右*/
-.y-end {
-  display: flex;
-  flex-direction: column;
-  align-items: flex-end;
-}
-
-/*y竖直居中*/
-.y-f {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-}
-
-// y竖直两端
-.y-b {
-  display: flex;
-  flex-direction: column;
-  justify-content: space-between;
-}
-
-/*y竖直两端居中*/
-.y-bc {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  justify-content: space-between;
-}
-/* layout */
-.acea-row {
-  display: flex;
-  flex-wrap: wrap;
-  /* 辅助类 */
-}
-.acea-row.row-middle {
-  align-items: center;
-}
-.acea-row.row-top {
-  align-items: flex-start;
-}
-.acea-row.row-bottom {
-  align-items: flex-end;
-}
-.acea-row.row-center {
-  justify-content: center;
-}
-.acea-row.row-right {
-  justify-content: flex-end;
-}
-.acea-row.row-left {
-  justify-content: flex-start;
-}
-.acea-row.row-between {
-  justify-content: space-between;
-}
-.acea-row.row-around {
-  justify-content: space-around;
-}
-.acea-row.row-column-around {
-  flex-direction: column;
-  justify-content: space-around;
-}
-.acea-row.row-column {
-  flex-direction: column;
-}
-.acea-row.row-column-between {
-  flex-direction: column;
-  justify-content: space-between;
-}
-/* 上下左右垂直居中 */
-.acea-row.row-center-wrapper {
-  align-items: center;
-  justify-content: center;
-}
-/* 上下两边居中对齐 */
-.acea-row.row-between-wrapper {
-  align-items: center;
-  justify-content: space-between;
-}
-
-/*每个页面公共css */
-.ellipsis{
-	overflow: hidden;
-	text-overflow: ellipsis;
-	white-space: nowrap;
-}
-.ellipsis2{
-	overflow:hidden; 
-	text-overflow:ellipsis;
-	display:-webkit-box; 
-	-webkit-box-orient:vertical;
-	-webkit-line-clamp:2; 
-}
-radio .wx-radio-input{
-  width: 36rpx;
-  height: 36rpx;
-  border: 1px solid #CCCCCC;
-}
-/* 选中后的 背景样式  */
-radio .wx-radio-input.wx-radio-input-checked{
-	background: linear-gradient(135deg, #66b2ef  0%, #2BC7B9 100%);
-	border: 1px solid #2BC7B9;
-}
-/* 选中后的 对勾样式 (白色对勾) */
-radio .wx-radio-input.wx-radio-input-checked::before{
-	color: #ffffff;
-}
-checkbox .wx-checkbox-input{
-	width: 36rpx;
-	height: 36rpx;
-	border: 1px solid #CCCCCC;
-	border-radius: 50%;
-}
-checkbox .wx-checkbox-input.wx-checkbox-input-checked {
-	background: linear-gradient(135deg, #66b2ef 0%, #2BC7B9 100%);
-	border: 1px solid #2BC7B9;
-	border-radius: 50%;
-}
-checkbox .wx-checkbox-input.wx-checkbox-input-checked::before {
-	color: #ffffff;
-}
-::-webkit-scrollbar {
-   width: 0;
-   height: 0;
-   color: transparent;
- }
- /* 暂无数据 */
-.no-data-box{
-	padding: 100upx 50upx;
-	text-align: center;
-	image{
-		width: 372rpx;
-		height: 240rpx;
-	}
-	.empty-title{
-		margin-top: 20rpx;
-		font-size: 32rpx;
-		color: #bbbbbb;
-		 
-	}
-}
-.Loads {
-  height: 0.8*100rpx;
-  font-size: 0.25*100rpx;
-  color: #000;
-}
-.Loads .iconfont {
-  font-size: 0.3*100rpx;
-  margin-right: 0.1*100rpx;
-  height: 0.32*100rpx;
-  line-height: 0.32*100rpx;
-}
-/*加载动画*/
-@keyframes load {
-  from {
-    transform: rotate(0deg);
-  }
-  to {
-    transform: rotate(360deg);
-  }
-}
-.loadingpic {
-  animation: load 3s linear 1s infinite;
-}
-.loading {
-  animation: load linear 1s infinite;
-}
-
- .back-box{
-	position: relative;
-	.title{
-		position: absolute;
-		left: 50%;
-		top: 50%;
-		transform: translate(-50%,-50%);
-	}
-}
+ 
+page {
+  background: #f5f5f5;
+  height: 100%;
+}
+.containers{
+  height: 100%;
+}
+rich-text {
+  width: 100%;
+  display: block;
+  img,
+  image {
+    display: block;
+    width: 100%;
+  }
+}
+
+/*单行文本溢出省略号*/
+.one-t {
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  transition: all linear 0.2s;
+}
+
+/*多行文本溢出省略号*/
+.more-t {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  transition: all linear 0.2s;
+}
+
+/* ==================
+          flex布局(colorui里面也有相关基础样式)
+ ==================== */
+/* x水平排列*/
+.x-f {
+  display: flex;
+  align-items: center;
+}
+
+/*x两端且水平居中*/
+.x-bc {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+/*x平分且水平居中*/
+.x-ac {
+  display: flex;
+  justify-content: space-around;
+  align-items: center;
+}
+
+/*x水平靠上对齐*/
+.x-start {
+  display: flex;
+  align-items: flex-start;
+}
+
+/*x水平靠下对齐*/
+.x-end {
+  display: flex;
+  align-items: flex-end;
+}
+
+/*上下左右居中*/
+.x-c {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+/*y竖直靠左*/
+.y-start {
+  display: flex;
+  flex-direction: column;
+  align-items: flex-start;
+}
+
+/*y竖直靠右*/
+.y-end {
+  display: flex;
+  flex-direction: column;
+  align-items: flex-end;
+}
+
+/*y竖直居中*/
+.y-f {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+
+// y竖直两端
+.y-b {
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+}
+
+/*y竖直两端居中*/
+.y-bc {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: space-between;
+}
+/* layout */
+.acea-row {
+  display: flex;
+  flex-wrap: wrap;
+  /* 辅助类 */
+}
+.acea-row.row-middle {
+  align-items: center;
+}
+.acea-row.row-top {
+  align-items: flex-start;
+}
+.acea-row.row-bottom {
+  align-items: flex-end;
+}
+.acea-row.row-center {
+  justify-content: center;
+}
+.acea-row.row-right {
+  justify-content: flex-end;
+}
+.acea-row.row-left {
+  justify-content: flex-start;
+}
+.acea-row.row-between {
+  justify-content: space-between;
+}
+.acea-row.row-around {
+  justify-content: space-around;
+}
+.acea-row.row-column-around {
+  flex-direction: column;
+  justify-content: space-around;
+}
+.acea-row.row-column {
+  flex-direction: column;
+}
+.acea-row.row-column-between {
+  flex-direction: column;
+  justify-content: space-between;
+}
+/* 上下左右垂直居中 */
+.acea-row.row-center-wrapper {
+  align-items: center;
+  justify-content: center;
+}
+/* 上下两边居中对齐 */
+.acea-row.row-between-wrapper {
+  align-items: center;
+  justify-content: space-between;
+}
+
+/*每个页面公共css */
+.ellipsis{
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+}
+.ellipsis2{
+	overflow:hidden; 
+	text-overflow:ellipsis;
+	display:-webkit-box; 
+	-webkit-box-orient:vertical;
+	-webkit-line-clamp:2; 
+}
+radio .wx-radio-input{
+  width: 36rpx;
+  height: 36rpx;
+  border: 1px solid #CCCCCC;
+}
+/* 选中后的 背景样式  */
+radio .wx-radio-input.wx-radio-input-checked{
+	background: linear-gradient(135deg, #66b2ef  0%, #2BC7B9 100%);
+	border: 1px solid #2BC7B9;
+}
+/* 选中后的 对勾样式 (白色对勾) */
+radio .wx-radio-input.wx-radio-input-checked::before{
+	color: #ffffff;
+}
+checkbox .wx-checkbox-input{
+	width: 36rpx;
+	height: 36rpx;
+	border: 1px solid #CCCCCC;
+	border-radius: 50%;
+}
+checkbox .wx-checkbox-input.wx-checkbox-input-checked {
+	background: linear-gradient(135deg, #66b2ef 0%, #2BC7B9 100%);
+	border: 1px solid #2BC7B9;
+	border-radius: 50%;
+}
+checkbox .wx-checkbox-input.wx-checkbox-input-checked::before {
+	color: #ffffff;
+}
+::-webkit-scrollbar {
+   width: 0;
+   height: 0;
+   color: transparent;
+ }
+ /* 暂无数据 */
+.no-data-box{
+	padding: 100upx 50upx;
+	text-align: center;
+	image{
+		width: 372rpx;
+		height: 240rpx;
+	}
+	.empty-title{
+		margin-top: 20rpx;
+		font-size: 32rpx;
+		color: #bbbbbb;
+		 
+	}
+}
+.Loads {
+  height: 0.8*100rpx;
+  font-size: 0.25*100rpx;
+  color: #000;
+}
+.Loads .iconfont {
+  font-size: 0.3*100rpx;
+  margin-right: 0.1*100rpx;
+  height: 0.32*100rpx;
+  line-height: 0.32*100rpx;
+}
+/*加载动画*/
+@keyframes load {
+  from {
+    transform: rotate(0deg);
+  }
+  to {
+    transform: rotate(360deg);
+  }
+}
+.loadingpic {
+  animation: load 3s linear 1s infinite;
+}
+.loading {
+  animation: load linear 1s infinite;
+}
+
+ .back-box{
+	position: relative;
+	.title{
+		position: absolute;
+		left: 50%;
+		top: 50%;
+		transform: translate(-50%,-50%);
+	}
+}

+ 133 - 133
assets/css/common.scss

@@ -1,137 +1,137 @@
-// 字体
-@for $i from 20 through 100{
-    .fs#{$i} {
-			font-size: #{$i}rpx;
-    }
-}
-// 颜色
+// 字体
+@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;
-	}
-}
+}
+// 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;
+	}
+}

+ 218 - 218
assets/css/commonTheme.css

@@ -1,218 +1,218 @@
-.hb {
-	height: 100%;
-	box-sizing: border-box;
-}
-
-.hidden {
-	overflow: hidden;
-}
-
-.w100 {
-	width: 100%;
-}
-
-.h100 {
-	height: 100%;
-}
-
-.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;
-}
-
-.text-ellipsis {
-	display: -webkit-box;
-	/* 关键属性 */
-	-webkit-box-orient: vertical;
-	/* 排列方向 */
-	-webkit-line-clamp: 2;
-	/* 显示行数 */
-	overflow: hidden;
-	/* 超出隐藏 */
-	text-overflow: ellipsis;
-	/* 超出显示省略号 */
-	word-break: break-all;
-	/* 允许单词断行 */
-}
-
-.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;
-}
-
-.color-price {
-	color: #FF5030;
-}
-.color-white {
-	color: #fff;
-}
-
-.color-orange {
-	color: #FC581C;
-}
-
-.color-red {
-	color: #F22513;
-}
-.color-white{
-	color: #fff;
-}
-
-.color-yellow {
-	color: #FE9000;
-}
-
-.color-pink {
-	color: #FF4545;
-}
-
-.color-text {
-	color: #222426;
-}
-
-.color-text1 {
-	color: #626468;
-}
-
-.color-text2 {
-	color: #898E91;
-}
-
-.color-text3 {
-	color: #B2B2B2;
-}
-
-.bg-color {
-	background-color: #008FD3;
-}
-
-.bg-price {
-	background-color: #FF5030;
-}
-
-.bg-yellow {
-	background-color: #F5A623;
-}
-
-.bg-gree {
-	background-color: #2CAE5C;
-}
-
-.bg-purple {
-	background-color: #7A73E0;
-}
-.bg-white{
-	background-color:#fff;
-}
-.bg-light{
-	background-color:#F5F7FA;
-}
-
-
-.bg-white {
-	background-color: #fff;
-}
+.hb {
+	height: 100%;
+	box-sizing: border-box;
+}
+
+.hidden {
+	overflow: hidden;
+}
+
+.w100 {
+	width: 100%;
+}
+
+.h100 {
+	height: 100%;
+}
+
+.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;
+}
+
+.text-ellipsis {
+	display: -webkit-box;
+	/* 关键属性 */
+	-webkit-box-orient: vertical;
+	/* 排列方向 */
+	-webkit-line-clamp: 2;
+	/* 显示行数 */
+	overflow: hidden;
+	/* 超出隐藏 */
+	text-overflow: ellipsis;
+	/* 超出显示省略号 */
+	word-break: break-all;
+	/* 允许单词断行 */
+}
+
+.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;
+}
+
+.color-price {
+	color: #FF5030;
+}
+.color-white {
+	color: #fff;
+}
+
+.color-orange {
+	color: #FC581C;
+}
+
+.color-red {
+	color: #F22513;
+}
+.color-white{
+	color: #fff;
+}
+
+.color-yellow {
+	color: #FE9000;
+}
+
+.color-pink {
+	color: #FF4545;
+}
+
+.color-text {
+	color: #222426;
+}
+
+.color-text1 {
+	color: #626468;
+}
+
+.color-text2 {
+	color: #898E91;
+}
+
+.color-text3 {
+	color: #B2B2B2;
+}
+
+.bg-color {
+	background-color: #008FD3;
+}
+
+.bg-price {
+	background-color: #FF5030;
+}
+
+.bg-yellow {
+	background-color: #F5A623;
+}
+
+.bg-gree {
+	background-color: #2CAE5C;
+}
+
+.bg-purple {
+	background-color: #7A73E0;
+}
+.bg-white{
+	background-color:#fff;
+}
+.bg-light{
+	background-color:#F5F7FA;
+}
+
+
+.bg-white {
+	background-color: #fff;
+}

+ 31 - 31
assets/css/theme.scss

@@ -1,31 +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;
-
-
+/*自定义主题色 */
+$--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;
+
+

+ 179 - 0
assets/css/tool.css

@@ -0,0 +1,179 @@
+.container {
+    padding: 200rpx 0;
+}
+
+.cHcontainer,
+.container {
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: space-between;
+    box-sizing: border-box;
+}
+
+.fs20 {
+    font-size: 20rpx;
+}
+
+.fs22 {
+    font-size: 22rpx;
+}
+
+.fs24 {
+    font-size: 24rpx;
+}
+
+.fs26 {
+    font-size: 26rpx;
+}
+
+.fs28 {
+    font-size: 28rpx;
+}
+
+.fs30 {
+    font-size: 30rpx;
+}
+
+.fs32 {
+    font-size: 32rpx;
+}
+
+.fs34 {
+    font-size: 34rpx;
+}
+
+.fs36 {
+    font-size: 36rpx;
+}
+
+.fc99 {
+    color: #999;
+}
+
+.fcff {
+    color: #fff;
+}
+
+.fc3d {
+    color: #3d3d3d;
+}
+
+.fc52 {
+    color: #525252;
+}
+
+.pages-box {
+    padding: 30rpx;
+    background-color: #fff;
+    border-radius: 10rpx;
+    box-shadow: 0rpx 2rpx 4rpx 0rpx rgba(0, 0, 0, 0.05);
+}
+
+.inp-box,
+.pages-box {
+    box-sizing: border-box;
+}
+
+.inp-box {
+    padding-top: 30rpx;
+    position: relative;
+}
+
+.inp {
+    border: 3rpx solid #3677f0;
+    height: 80rpx;
+    border-radius: 10rpx;
+    line-height: 80rpx;
+    box-sizing: border-box;
+    padding-left: 130rpx;
+}
+
+.inpimg {
+    width: 120rpx;
+    height: 74rpx;
+    background-color: #f1f2f6;
+    border-top-left-radius: 10rpx;
+    border-bottom-left-radius: 10rpx;
+    position: absolute;
+    top: 33rpx;
+    left: 3rpx;
+}
+
+.pagesimg {
+    width: 40rpx;
+    height: 40rpx;
+    margin-top: 17rpx;
+    margin-left: 38rpx;
+}
+
+.btn-box {
+    margin-top: 30rpx;
+    margin-bottom: 30rpx;
+}
+
+.btn,
+.btn-box {
+    text-align: center;
+}
+
+.btn {
+    width: 200rpx;
+    background-color: #3677f0;
+    color: #fff;
+}
+
+.det-box {
+    margin-top: 20rpx;
+    box-sizing: border-box;
+    padding: 0rpx 30rpx;
+    background-color: #fff;
+    border-radius: 10rpx;
+    box-shadow: 0rpx 2rpx 4rpx 0rpx rgba(0, 0, 0, 0.05);
+}
+
+.pg-t,
+.pglist {
+    padding: 20rpx 0rpx;
+    border-bottom: 1rpx solid #f0f0f0;
+}
+
+.pglist {
+    box-sizing: border-box;
+    display: flex;
+    align-items: center;
+}
+
+.pg-l {
+    width: 30%;
+}
+
+.pg-l,
+.pg-r {
+    display: inline-block;
+}
+
+.pg-r {
+    width: 70%;
+}
+
+.dp-n {
+    display: none;
+}
+
+.clear {
+    clear: both;
+}
+
+.dp-ib {
+    display: inline-block;
+}
+
+.ta-c {
+    text-align: center;
+}
+
+.bd-n {
+    border: none;
+}

+ 140 - 122
common/request.js

@@ -1,124 +1,142 @@
-// uni-app请求封装
-// import {TOKEN_WEXIN} from '@/utils/common.js'
-import {TOKEN_KEYAuto} from '@/utils/courseTool.js'
+// uni-app请求封装
+// import {TOKEN_WEXIN} from '@/utils/common.js'
+import {TOKEN_KEYAuto} from '@/utils/courseTool.js'
+import store from '@/store/index.js'
 export default class Request {
-	http(router, data = {}, method,contentType) {
-		let that = this;
-		let type = 0;
-		// let path = 'https://user.test.ylrztop.com/api'//云联融智
-		// let path = 'https://userappkyt.ylrzcloud.com'//宽益堂
-		// let path = 'https://usercourse.beliyostore.com'//倍力优
-		// let path = 'https://app.bainian1000y.cn/prod-api'//百年康成
-		// let path = 'http://a9e258d6.natappfree.cc'//百年康成本地
-		// let path = 'https://userapp.zkhj6.com'//中康
-		// let path = 'http://192.168.10.158:8007'//中康
-		// let path = 'https://userapp.myks8.com' //恒春来
-		// let path = 'https://userapp.jiuzhouzaixian.com'//九州
-		let path = 'https://userapp.bjyjbao.com'//医健宝
-		// let path = 'https://userapp.yytcdta.com'//晚景如春
-		// let path = 'https://userapp.yixingjian.top'//宏医堂
-		// let path = 'https://userapp.cqsft.vip'//四福堂
-		// let path = 'https://userappjnlzjk.ylrztop.com/prod-api'//济南联志健康
-		// let path = 'https://yjb.mynatapp.cc'//本地
-		// let path = 'https://hatuserapp.ylrzfs.com'//恒安图
-		// let path = 'https://ddgyuserapp.ylrzfs.com'//叮当国医
-		// let path = 'https://userapp.cykbja.cn/prod-api'//纯正堂
-		// let path = 'https://userapp.moonxiang.com/prod-api'//存在文化
-		// let path = 'https://jnsyjauth.ylrztop.com'//顺亿京
-		
-		uni.setStorageSync('requestPath',path)
-		// uni.showLoading({
-		// 	title: '加载中'
-		// });
-		let token = uni.getStorageSync('AppToken');
-		if(router.indexOf("/companyapp")!=-1){
-			type = 1;
-			// router =router.replace('/companyapp','')
-			 // path = 'https://userapp.cykbja.cn'//纯正堂
-			 token = uni.getStorageSync('ManageToken');
-		}
-		if(router.indexOf("/course_uniapp")!=-1){
-			type = 2;
-			router =router.replace('/course_uniapp','')
-			token =uni.getStorageSync('TOKEN_WEXIN')
-		}
-		// 企微看课
-		if(router.indexOf("/course_auto")!=-1){
-			type = 3;
-			router =router.replace('/course_auto','')
-			// path = 'http://a9e258d6.natappfree.cc'//百年康成本地
-			token =uni.getStorageSync(TOKEN_KEYAuto)
-		}
-		return new Promise((resolve, reject) => {
-			// let token = uni.getStorageSync('AppToken');
-			let usertoken = uni.getStorageSync("UserToken")
-			var httpContentType='application/x-www-form-urlencoded';
-			if(contentType!=undefined){
-				//application/json;charset=UTF-8
-				httpContentType=contentType;
-			}
-			var routers=router;
-			// 请求
-			uni.request({
-				header: {
-					// 'Content-Type': 'application/x-www-form-urlencoded',
-					'Content-Type': httpContentType,
-					'AppToken': token,
-					'UserToken':usertoken
-				},
-				url: `${path}${router}`,
-				data: data,
-				method: method,
-				success: (res) => {
-					//收到开发者服务器成功返回的回调函数
-					if(res.data.code==401){//没有权限直接退出到登录界面
-						let pages = getCurrentPages();
-						let currentPage  = pages[ pages.length - 1]; //当前页页面实例
-						
-						 // 条件编译判断平台,设置不同登录页路径
-						  let loginPage = '';
-						  // #ifdef H5
-						  loginPage = '/pages/auth/login';
-						  // #endif
-						  // #ifdef MP-WEIXIN
-						  loginPage = '/pages/enterprise/enterprise';
-						  // #endif
-						  
-						//如果登录界面已打开,自动关闭
-						if (currentPage.route === loginPage.replace(/^\//, '')) {
-						    resolve(res.data);
-						    return;
-						  }
-						uni.reLaunch({
-							url:loginPage,
-							success: () => {
-								uni.hideLoading();
-							},
-							fail: () => {
-								uni.hideLoading();
-							}
-						})
-						return;
-					}
-					if (res.token&&type==0) {
-						uni.setStorageSync(TOKEN_KEY,res.data.token)
-					}
-					resolve(res.data)
-				},
-				fail:(res) =>{
-					//接口调用失败的回调函数
-				},
-				complete:(res) =>{
-					//接口调用结束的回调函数(调用成功、失败都会执行)
-					if (res.data&& res.data.code == 401) {
-						return false
-					}
-					uni.hideLoading();
-				}
-				
-			})
-		})
-		 
+	http(router, data = {}, method,contentType) {
+		let that = this;
+		let type = 0;
+		// let path = 'https://user.test.ylrztop.com/api'//云联融智
+		//let path = 'https://userappkyt.ylrzcloud.com'//宽益堂
+		// let path = 'https://userapp.schstyl.cn'//鸿森堂
+		// let path = 'https://userapp.myks8.com'//恒春来
+		// let path = 'https://userapp.nmghysmytdyf.com'//蒙一堂
+		// let path = 'https://usercourse.beliyostore.com'//倍力优
+		// let path = 'https://app.bainian1000y.cn/prod-api'//百年康成
+		// let path = 'http://a9e258d6.natappfree.cc'//百年康成本地
+		// let path = 'https://userapp.zkhj6.com'//中康
+		// let path = 'http://192.168.10.158:8007'//中康
+		// let path = 'https://userapp.myks8.com' //恒春来
+		// let path = 'https://userapp.jiuzhouzaixian.com'//九州
+		// let path = 'https://userapp.bjyjbao.com'//医健宝
+		// let path = 'https://userapp.yytcdta.com'//晚景如春
+		// let path = 'https://userapp.yixingjian.top'//宏医堂
+		// let path = 'https://userapp.cqsft.vip'//四福堂
+		// let path = 'https://userapp.ljhehualu.com'//济南联志健康
+		// let path = 'https://yjb.mynatapp.cc'//本地
+		// let path = 'https://hatuserapp.ylrzfs.com'//恒安图
+		// let path = 'https://ddgyuserapp.slxinxi.top'//叮当国医
+		// let path = 'https://userapp.cykbja.cn/prod-api'//纯正堂
+		// let path = 'https://userapp.moonxiang.com'//存在文化
+		// let path = 'https://userapp.jilinmaoq.cn'//顺亿景
+		//let path = 'https://userapp.bjyjbao.com'//医健宝
+		let path = 'https://userapp.bainian1000y.cn'//百年康成
+		// let path = 'https://userapp.jilinmaoq.cn'//致医
+		uni.setStorageSync('requestPath',path)
+		// uni.showLoading({
+		// 	title: '加载中'
+		// });
+		let token = uni.getStorageSync('AppToken');
+		if(router.indexOf("/companyapp")!=-1){
+			type = 1;
+			// router =router.replace('/companyapp','')
+			 // path = 'https://companyapp.ljhehualu.com'//济南联志
+			 token = uni.getStorageSync('ManageToken');
+		}
+		if(router.indexOf("/course_uniapp")!=-1){
+			type = 2;
+			router =router.replace('/course_uniapp','')
+			token =uni.getStorageSync('TOKEN_WEXIN')
+		}
+		// 企微看课
+		if(router.indexOf("/course_auto")!=-1){
+			type = 3;
+			router =router.replace('/course_auto','')
+			// path = 'http://a9e258d6.natappfree.cc'//百年康成本地
+			token =uni.getStorageSync(TOKEN_KEYAuto)
+		}
+		return new Promise((resolve, reject) => {
+			// let token = uni.getStorageSync('AppToken');
+			let usertoken = uni.getStorageSync("UserToken")
+			var httpContentType='application/x-www-form-urlencoded';
+			if(contentType!=undefined){
+				//application/json;charset=UTF-8
+				httpContentType=contentType;
+			}
+			var routers=router;
+			// 请求
+			uni.request({
+				header: {
+					// 'Content-Type': 'application/x-www-form-urlencoded',
+					'Content-Type': httpContentType,
+					'AppToken': token,
+					'UserToken':usertoken
+				},
+				url: `${path}${router}`,
+				data: data,
+				method: method,
+				success: (res) => {
+					if(type !==0&&(res.data.code == 401 || res.data.code == 4001||res.data.code == 4004)) {
+						store.commit('setCoureLogin', 2);
+						uni.removeStorageSync("userinfos")
+						// uni.removeStorageSync('userInfo');
+						uni.removeStorageSync('TOKEN_WEXIN');
+						if(type==2) {
+							uni.removeStorageSync(TOKEN_KEYAuto)
+						}
+						if(type==1) {
+							uni.removeStorageSync('ManageToken');
+							uni.navigateTo({
+								url:'/pages_manage/login'
+							})
+						}
+						resolve({ code: 401, data: null });
+						return
+					}
+					//收到开发者服务器成功返回的回调函数
+					if(res.data.code==401){//没有权限直接退出到登录界面
+						let pages = getCurrentPages();
+						let currentPage  = pages[ pages.length - 1]; //当前页页面实例
+						
+						 // 条件编译判断平台,设置不同登录页路径
+						  let loginPage = '';
+						  loginPage = '/pages/enterprise/enterprise';
+						  
+						//如果登录界面已打开,自动关闭
+						if (currentPage.route === loginPage.replace(/^\//, '')) {
+						    resolve(res.data);
+						    return;
+						  }
+						uni.reLaunch({
+							url:loginPage,
+							success: () => {
+								uni.hideLoading();
+							},
+							fail: () => {
+								uni.hideLoading();
+							}
+						})
+						return;
+					}
+					if (res.token&&type==0) {
+						uni.setStorageSync(TOKEN_KEY,res.data.token)
+					}
+					resolve(res.data)
+				},
+				fail:(res) =>{
+					//接口调用失败的回调函数
+				},
+				complete:(res) =>{
+					//接口调用结束的回调函数(调用成功、失败都会执行)
+					if (res.data&& res.data.code == 401) {
+						return false
+					}
+					uni.hideLoading();
+				}
+				
+			})
+		})
+		 
 	}
-	
-}
+	
+}

+ 472 - 0
components/tools.vue

@@ -0,0 +1,472 @@
+<template>
+	<view class="column" style="position: relative">
+		<view class="top-content">
+			<view class="status_bar" :style="{ height: statusBarHeight + 'px' }"></view>
+			<view class="top-title">首页</view>
+		</view>
+	
+	<!-- 	<view class="index-body" :style="{ marginTop: statusBarHeight+64 + 'px' }">
+			<swiper
+				:autoplay="swiper.autoplay"
+				:circular="true"
+				class="swipr-box"
+				:duration="swiper.duration"
+				:easingFunction="swiper.easing"
+				:indicatorActiveColor="swiper.activeColor"
+				:indicatorColor="swiper.color"
+				:indicatorDots="swiper.indicatorDots"
+				:interval="swiper.interval"
+				:nextMargin="swiper.lrmargin"
+				:previousMargin="swiper.lrmargin">
+				<swiper-item class="seiper-smbox" v-for="(item, index) in imgUrls" :key="index">
+					<navigator hoverClass="none" openType="navigate" :url="item.openpath">
+						<image class="slide-image" :src="item.img"></image>
+					</navigator>
+				</swiper-item>
+			</swiper> -->
+
+			<view class="server-box">
+				<view id="tips" class="tips">圣诞帽/五险一金查询最新发布欢迎使用</view>
+				<view class="server-smbox">
+					<view class="server-name">
+						<view class="server-text fc3d fs30">实用工具</view>
+					</view>
+					<view class="tools-grid">
+						<view
+							v-for="(item, idx) in grid9"
+							class="tool-card"
+							@tap="handleNav(item.openpath)">
+							<view class="card-bg"></view>
+							<view class="card-content" :class="{ 'card-content1': idx === 1 }">
+								<view class="icon-wrap">
+									<image class="icon" :src="item.img" mode="aspectFill"></image>
+								</view>
+								<view class="label">{{ item.text }}</view>
+							</view>
+						</view>
+						<view v-if="!grid9 || grid9.length === 0" class="empty-box">
+							<view class="empty-text">暂无工具</view>
+						</view>
+					</view>
+					<view class="clear"></view>
+				</view>
+			</view>
+				
+	</view>
+</template>
+
+<script>
+export default {
+	name: 'tools',
+	data() {
+		return {
+			statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
+			swiper: {
+				indicatorDots: true,
+				autoplay: true,
+				interval: 5000,
+				duration: 1000,
+				lrmargin: '40rpx',
+				easing: 'easeInOutCubic',
+				activeColor: '#fff',
+				color: 'rgba(255, 255, 255, .3)'
+			},
+			imgUrls: [
+				{
+					img: 'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/fs/20250901/55d56de7b34d4450bb39464a16fc591c.jpg',
+					openpath: ''
+				}
+			],
+			recommend: [
+				{
+					img: '/static/images/toolIcon/weather.png',
+					openpath: '../../pages/weather/weather',
+					text: '天气'
+				},
+				{
+					img: '/static/images/toolIcon/qrcode.png',
+					openpath: '../../pages/qrcode/index',
+					text: '生成二维码'
+				},
+				// {
+				// 	img: '/static/images/toolIcon/IP.png',
+				// 	openpath: '../../pages/IP/IP',
+				// 	text: 'IP地址查询'
+				// },
+				{
+					img: '/static/images/toolIcon/hl.png',
+					openpath: '../../pages/cand/index',
+					text: '程序员黄历'
+				}
+			],
+			server: [
+				{
+					img: '/static/images/toolIcon/sdm.png',
+					openpath: '/pages_tool/pages/christmasHat/index/index',
+					text: '圣诞帽'
+				},
+				// {
+				// 	img: '/static/images/toolIcon/qrcode.png',
+				// 	openpath: '../../pages_tool/pages/cloudNote/index/index',
+				// 	text: '云笔记'
+				// },
+				{
+					img: '/static/images/toolIcon/weather.png',
+					openpath: '/pages_tool/pages/wxyj/index',
+					text: '五险一金计算'
+				},
+				{
+					img: '/static/images/toolIcon/gz.png',
+					openpath: '/pages_tool/pages/game/game',
+					text: '摇骰子'
+				},
+				{
+					img: '/static/images/toolIcon/cha.png',
+					openpath: '/pages_tool/pages/pinyin/index',
+					text: '查拼音'
+				},
+				// {
+				// 	img: '/static/images/toolIcon/clac.png',
+				// 	openpath: '/pages_tool/pages/calc/index',
+				// 	text: '计算器'
+				// },
+				// {
+				// 	img: '/static/images/toolIcon/hl.png',
+				// 	openpath: '../../pages_tool/pages/cand/index',
+				// 	text: '程序员黄历'
+				// },
+				
+				{
+					img: '/static/images/toolIcon/wsyt.png',
+					openpath: '/pages_tool/pages/gojuuonn/gojuuonn',
+					text: '五十音图'
+				},
+				{
+					img: '/static/images/toolIcon/sc.png',
+					openpath: '/pages_tool/pages/figure/figure',
+					text: '身材计算'
+				},
+				
+				{
+					img: '/static/images/toolIcon/qrcode.png',
+					openpath: '/pages_tool/pages/qrcode/index',
+					text: '生成二维码'
+				},
+				
+				
+				// {
+				// 	img: '/static/images/toolIcon/weather.png',
+				// 	openpath: '../../pages_tool/pages/weather/weather',
+				// 	text: '天气'
+				// },
+				// {
+				// 	img: '/static/images/toolIcon/IP.png',
+				// 	openpath: '../../pages_tool/pages/IP/IP',
+				// 	text: 'IP地址查询'
+				// },
+				{
+					img: '/static/images/toolIcon/MobileHome.png',
+					openpath: '/pages_tool/pages/MobileHome/MobileHome',
+					text: '手机归属地'
+				},
+				// {
+				// 	img: '/static/images/toolIcon/codePars.png',
+				// 	openpath: '/pages_tool/pages/codePars/codePars',
+				// 	text: '电码查询'
+				// },
+				{
+					img: '/static/images/toolIcon/historyToday.png',
+					openpath: '/pages_tool/pages/historyToday/historyToday',
+					text: '历史今天'
+				}
+			]
+		};
+	},
+computed: {
+    grid9() {
+        return Array.isArray(this.server) ? this.server.slice(0, 9) : [];
+    }
+},
+	methods: {
+		handleNav(url) {
+			if (!url) return;
+			const finalUrl = url.startsWith('/') ? url : `/${url.replace(/^\/+/, '')}`;
+			try {
+				uni.navigateTo({ url: finalUrl });
+			} catch (e) {
+				console.error('navigateTo failed:', e, finalUrl);
+			}
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.top-content {
+	width: 100%;
+	z-index: 10;
+	position: fixed;
+	top: 0;
+	left: 0;
+	background-color: #ffffff;
+	.top-title {
+		height: 88rpx;
+		line-height: 88rpx;
+		font-size: 42rpx;
+		font-family: Source Han Sans CN;
+		font-weight: bold;
+		color: #222222;
+		padding-left: 41rpx;
+		background-color: #ffffff;
+	}
+}
+
+.swipr-box {
+	width: 100%;
+	height: 280rpx;
+	padding: 20rpx 0rpx;
+	background-color: #fff;
+	box-shadow: 0rpx 2rpx 4rpx 0rpx rgba(0, 0, 0, 0.05);
+}
+
+.seiper-smbox {
+	padding: 0rpx 0rpx;
+	box-sizing: border-box;
+	width: 100%;
+}
+
+.slide-image {
+	display: inline-block;
+	width: 100%;
+	height: 280rpx;
+	border-radius: 10rpx;
+}
+
+.recommend-box {
+	margin: 20rpx 0rpx;
+	padding: 0rpx 30rpx;
+}
+
+.recommend-box,
+.recommend-smbox {
+	width: 100%;
+	box-sizing: border-box;
+}
+
+.recommend-smbox {
+	background-color: #fff;
+	border-radius: 10rpx;
+	padding: 30rpx 0rpx;
+	display: flex;
+	justify-content: space-around;
+	box-shadow: 0rpx 2rpx 4rpx 0rpx rgba(0, 0, 0, 0.05);
+}
+
+.col-1 {
+	width: 25%;
+}
+
+.ad-index {
+	width: 100%;
+	box-sizing: border-box;
+	padding: 0rpx 30rpx;
+}
+
+.ad-df {
+	border-radius: 10rpx;
+	overflow: hidden;
+	box-shadow: 0rpx 2rpx 4rpx 0rpx rgba(0, 0, 0, 0.05);
+}
+
+.server-box {
+	width: 100%;
+	padding: 0rpx 30rpx;
+	box-sizing: border-box;
+	margin: 20rpx 0rpx;
+	margin-top: 17vh;
+}
+
+.tips{
+	background-color: #ff5500;
+	color: #fff;
+	height: 60rpx;
+	line-height: 60rpx;
+	border-radius: 10rpx;
+	padding-left: 20rpx;
+}
+
+
+
+.server-smbox {
+	width: 100%;
+	background-color: transparent;
+	border-radius: 10rpx;
+	padding-bottom: 15rpx;
+	box-shadow: inset 0 0 0 1rpx rgba(255,255,255,0.06), 0 16rpx 40rpx rgba(0, 0, 0, 0.18);
+	margin-top: 20rpx;
+}
+
+.server-t {
+	text-align: center;
+}
+
+.server-name {
+	padding: 15rpx 20rpx;
+}
+
+.server-text {
+	border-bottom: 1rpx solid #f6f6f6;
+	font-weight: 700;
+	height: 40rpx;
+	line-height: 40rpx;
+	padding-bottom: 15rpx;
+	margin-top: 60rpx;
+	font-size: 42rpx;
+	margin-left: 40rpx;
+}
+
+.list-server,
+.listbox {
+	box-sizing: border-box;
+}
+
+.listbox {
+	width: 25%;
+	text-align: center;
+	float: left;
+	padding: 15rpx 0rpx;
+}
+
+.listimg {
+	width: 100rpx;
+	height: 100rpx;
+}
+
+.inm {
+	margin-bottom: 60rpx;
+}
+
+.bottomLine {
+	padding: 50rpx 0rpx;
+	font-size: 24rpx;
+	text-align: center;
+	color: #8b8b8b;
+}
+
+/* 科技感九宫格布局与卡片样式 */
+.tools-grid {
+    /* 九宫格:3列,顶部/底部保留 10% 视口高度 */
+    display: grid;
+    grid-template-columns: repeat(3, 1fr);
+    gap: 20rpx;
+    height: 60vh;
+    margin-top: 0vh;
+    
+    padding: 0 24rpx;
+    box-sizing: border-box;
+}
+
+.tool-card {
+    position: relative;
+    margin: 0;
+    border-radius: 20rpx;
+    overflow: hidden;
+    //background: linear-gradient(135deg, #0b1220 0%, #0e1b2e 100%);
+    //box-shadow: 0 10rpx 30rpx rgba(0, 0, 0, 0.28), inset 0 0 0 1rpx rgba(255,255,255,0.06);
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+}
+
+.span-1 { flex: 0 0 33.33%; }
+.span-2 { flex: 0 0 66.66%; }
+
+.card-bg {
+	position: absolute;
+	inset: 0;
+	background-image:
+		repeating-linear-gradient(
+			90deg,
+			rgba(255, 255, 255, 0.04) 0rpx,
+			rgba(255, 255, 255, 0.04) 1rpx,
+			transparent 1rpx,
+			transparent 20rpx
+		),
+		repeating-linear-gradient(
+			0deg,
+			rgba(255, 255, 255, 0.04) 0rpx,
+			rgba(255, 255, 255, 0.04) 1rpx,
+			transparent 1rpx,
+			transparent 20rpx
+		);
+	opacity: 0.75;
+}
+
+.card-content {
+    position: relative;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    padding: 24rpx;
+}
+
+
+.card-content1 {
+    padding: 0rpx;
+}
+
+/* 高亮第二项的内容块(可按需修改效果) */
+.content1 {
+    filter: brightness(1.08);
+}
+
+
+.icon-wrap {
+	width: 96rpx;
+	height: 96rpx;
+	border-radius: 18rpx;
+	background: linear-gradient(180deg, rgba(59,130,246,0.18), rgba(59,130,246,0.06));
+	border: 1rpx solid rgba(59,130,246,0.35);
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	box-shadow: 0 0 28rpx rgba(59,130,246,0.35);
+}
+
+.icon {
+	width: 72rpx;
+	height: 72rpx;
+	border-radius: 14rpx;
+}
+
+.label {
+    margin-left: 0;
+    margin-top: 16rpx;
+    font-size: 30rpx;
+    letter-spacing: 1rpx;
+    color: #333;
+    text-shadow: 0 2rpx 6rpx rgba(0,0,0,0.35);
+    text-align: center;
+}
+
+.tool-card:active .card-bg {
+    filter: brightness(1.08);
+    transform: scale(1.01);
+    transition: all 120ms linear;
+}
+</style>
+<style lang="scss" scoped>
+.empty-box {
+    width: 100%;
+    padding: 60rpx 0;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+.empty-text {
+    color: #9ca3af;
+    font-size: 28rpx;
+}
+</style>

+ 452 - 0
components/tools1.vue

@@ -0,0 +1,452 @@
+<template>
+	   <view class="column" style="position: relative">
+	        <view class="top-content">
+	            <view class="status_bar" :style="{ height: statusBarHeight + 'px' }"></view>
+	            <view class="top-title">首页</view>
+	        </view>
+	    
+	       <!-- <view class="index-body" :style="{ marginTop: statusBarHeight+64 + 'px' }">
+	            <swiper
+	                :autoplay="swiper.autoplay"
+	                :circular="true"
+	                class="swipr-box"
+	                :duration="swiper.duration"
+	                :easingFunction="swiper.easing"
+	                :indicatorActiveColor="swiper.activeColor"
+	                :indicatorColor="swiper.color"
+	                :indicatorDots="swiper.indicatorDots"
+	                :interval="swiper.interval"
+	                :nextMargin="swiper.lrmargin"
+	                :previousMargin="swiper.lrmargin">
+	                <swiper-item class="seiper-smbox" v-for="(item, index) in imgUrls" :key="index">
+	                    <navigator hoverClass="none" openType="navigate" :url="item.openpath">
+	                        <image class="slide-image" :src="item.img"></image>
+	                    </navigator>
+	                </swiper-item>
+	            </swiper> -->
+	            
+	            <!-- 推荐区域 -->
+				<view class="featured-section" :style="{ marginTop: statusBarHeight+64 + 'px' }">
+					<view class="section-title">
+						<span>常用工具</span>
+						<!-- <span class="see-all">查看全部 <i class="material-icons">></i></span> -->
+					</view>
+					
+					<view class="featured-tools">
+						<view class="featured-tool animate-fade" @click="goToNav('../../pages_tool/pages/qrcode/index')">
+							<view class="featured-icon">
+								<image style="width: 35px;height:35px" src="/static/images/toolIcon/qrcode.png"></image>
+							</view>
+							<view class="featured-info">
+								<view class="featured-name">生成二维码</view>
+								<view class="featured-desc">快速生成各种二维码,支持文本、网址等多种格式</view>
+								<!-- <view class="usage-count">
+									<i class="material-icons" style="font-size: 16px; margin-right: 5px;">trending_up</i>
+									12.8万使用
+								</view> -->
+							</view>
+						</view>
+						<!-- 
+						<view class="featured-tool animate-fade delay-1" @click="goToNav('../../pages_tool/pages/figure/figure')">
+							<view class="featured-icon">
+								<image style="width: 35px;height:35px" class="img" src="/static/images/toolIcon/sc.png"></image>
+							</view>
+							<view class="featured-info">
+								<view class="featured-name">身材计算</view>
+								<view class="featured-desc">快速计算BMI指数,了解身体健康状况</view>
+								<view class="usage-count">
+									<i class="material-icons" style="font-size: 16px; margin-right: 5px;">trending_up</i>
+									9.5万使用
+								</view>
+							</view>
+						</view> -->
+					</view>
+				</view>
+				
+				<!-- 工具网格 -->
+				<view class="section-title">所有工具</view>
+				<view class="tools-grid" >
+					<!-- 循环生成工具卡片 -->
+					<view class="tool-card animate-fade" v-for="(item, index) in server" :key="index"  @click="goToNav(item.openpath)">
+						<view class="tool-icon">
+							<image class="img" :src="item.img"></image>
+						</view>
+						<view class="tool-name">{{ item.text }}</view>
+						<view class="tool-badge" v-if="index%4==0">Hot</view>
+					</view>
+				</view>
+				
+				<view style="height:60px"></view>
+				
+				
+			</view>
+
+		</view>
+</template>
+
+<script>
+export default {
+	name: 'tools',
+	data() {
+		return {
+			statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
+			swiper: {
+				indicatorDots: true,
+				autoplay: true,
+				interval: 5000,
+				duration: 1000,
+				lrmargin: '40rpx',
+				easing: 'easeInOutCubic',
+				activeColor: '#fff',
+				color: 'rgba(255, 255, 255, .3)'
+			},
+			imgUrls: [
+				{
+					img: 'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/fs/20250901/55d56de7b34d4450bb39464a16fc591c.jpg',
+					openpath: ''
+				}
+			],
+			recommend: [
+				{
+					img: '/static/images/toolIcon/weather.png',
+					openpath: '../../pages/weather/weather',
+					text: '天气'
+				},
+				{
+					img: '/static/images/toolIcon/qrcode.png',
+					openpath: '../../pages/qrcode/index',
+					text: '生成二维码'
+				},
+				{
+					img: '/static/images/toolIcon/IP.png',
+					openpath: '../../pages/IP/IP',
+					text: 'IP地址查询'
+				},
+				{
+					img: '/static/images/toolIcon/hl.png',
+					openpath: '../../pages/cand/index',
+					text: '程序员黄历'
+				}
+			],
+			server: [
+				{
+					img: '/static/images/toolIcon/sdm.png',
+					openpath: '../../pages_tool/pages/christmasHat/index/index',
+					text: '圣诞帽'
+				},
+				// {
+				// 	img: '/static/images/toolIcon/sc.png',
+				// 	openpath: '../../pages_tool/pages/figure/figure',
+				// 	text: '身材计算'
+				// },
+				{
+					img: '/static/images/toolIcon/wsyt.png',
+					openpath: '../../pages_tool/pages/gojuuonn/gojuuonn',
+					text: '五十音图'
+				},
+				// {
+				// 	img: '/static/images/toolIcon/qrcode.png',
+				// 	openpath: '../../pages_tool/pages/qrcode/index',
+				// 	text: '生成二维码'
+				// },
+				// {
+				// 	img: '/static/images/toolIcon/cha.png',
+				// 	openpath: '../../pages_tool/pages/pinyin/index',
+				// 	text: '查拼音'
+				// },
+				// {
+				// 	img: '/static/images/toolIcon/hl.png',
+				// 	openpath: '../../pages_tool/pages/cand/index',
+				// 	text: '程序员黄历'
+				// },
+				{
+					img: '/static/images/toolIcon/clac.png',
+					openpath: '../../pages_tool/pages/calc/index',
+					text: '计算器'
+				},
+				{
+					img: '/static/images/toolIcon/gz.png',
+					openpath: '../../pages_tool/pages/game/game',
+					text: '摇骰子'
+				},
+				{
+					img: '/static/images/toolIcon/weather.png',
+					openpath: '../../pages_tool/pages/weather/weather',
+					text: '天气'
+				},
+				{
+					img: '/static/images/toolIcon/IP.png',
+					openpath: '../../pages_tool/pages/IP/IP',
+					text: 'IP地址查询'
+				},
+				// {
+				// 	img: '/static/images/toolIcon/MobileHome.png',
+				// 	openpath: '../../pages_tool/pages/MobileHome/MobileHome',
+				// 	text: '手机归属地'
+				// },
+				{
+					img: '/static/images/toolIcon/codePars.png',
+					openpath: '../../pages_tool/pages/codePars/codePars',
+					text: '电码查询'
+				},
+				{
+					img: '/static/images/toolIcon/historyToday.png',
+					openpath: '../../pages_tool/pages/historyToday/historyToday',
+					text: '历史今天'
+				}
+			]
+		};
+	},
+	methods: {
+		goToNav(url){
+			uni.navigateTo({
+				url:url
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.top-content {
+	width: 100%;
+	z-index: 10;
+	position: fixed;
+	top: 0;
+	left: 0;
+	background-color: #ffffff;
+	.top-title {
+		height: 88rpx;
+		line-height: 88rpx;
+		font-size: 42rpx;
+		font-family: Source Han Sans CN;
+		font-weight: bold;
+		color: #222222;
+		padding-left: 41rpx;
+		background-color: #ffffff;
+	}
+}
+
+.swipr-box {
+	width: 100%;
+	height: 280rpx;
+	padding: 20rpx 0rpx;
+	background-color: #fff;
+	box-shadow: 0rpx 2rpx 4rpx 0rpx rgba(0, 0, 0, 0.05);
+}
+
+.seiper-smbox {
+	padding: 0rpx 0rpx;
+	box-sizing: border-box;
+	width: 100%;
+}
+
+.slide-image {
+	display: inline-block;
+	width: 100%;
+	height: 280rpx;
+	border-radius: 10rpx;
+}
+
+</style>
+
+
+<style lang="scss" scoped>
+	 /* 工具网格布局 */
+	 .tools-grid {
+		 display: grid;
+		 grid-template-columns: repeat(3, 1fr);
+		 gap: 15px;
+		 padding: 10px 0;
+	 }
+	 
+	 .tool-card {
+		 background: white;
+		 border-radius: 16px;
+		 padding: 20px 15px;
+		 text-align: center;
+		 box-shadow: 0 4px 12px rgba(0,0,0,0.05);
+		 transition: all 0.3s ease;
+		 cursor: pointer;
+		 display: flex;
+		 flex-direction: column;
+		 align-items: center;
+		 justify-content: center;
+		 position: relative;
+	 }
+	 
+	 .tool-card:hover {
+		 transform: translateY(-5px);
+		 box-shadow: 0 8px 20px rgba(0,0,0,0.1);
+	 }
+	 
+	 .tool-card:active {
+		 transform: translateY(0);
+	 }
+	 
+	 .tool-badge {
+		 position: absolute;
+		 top: -8px;
+		 right: -8px;
+		 background: #ff4757;
+		 color: white;
+		 border-radius: 50%;
+		 width: 22px;
+		 height: 22px;
+		 font-size: 12px;
+		 display: flex;
+		 align-items: center;
+		 justify-content: center;
+	 }
+	 
+	 .tool-icon {
+		 width: 50px;
+		 height: 50px;
+		 border-radius: 50%;
+		 display: flex;
+		 align-items: center;
+		 justify-content: center;
+		 background: #f8f9ff;
+	 }
+	 
+	 .tool-icon .img {
+		 width: 30px;
+		 height: 30px;
+	 }
+	 
+	 .tool-name {
+		 font-size: 14px;
+		 color: #333;
+		 font-weight: 500;
+		 margin-top: 5px;
+	 }
+	 
+	 /* 推荐区域 */
+	 .featured-section {
+		 margin: 30px 0;
+	 }
+	 
+	 .section-title {
+		 font-size: 20px;
+		 font-weight: 600;
+		 margin-bottom: 20rpx;
+		 display: flex;
+		 align-items: center;
+		 justify-content: space-between;
+		 padding-left: 5px;
+	 }
+	 
+	 .see-all {
+		 font-size: 14px;
+		 color: #6e8efb;
+		 display: flex;
+		 align-items: center;
+	 }
+	 
+	 .featured-tools {
+		 display: grid;
+		 grid-template-columns: 1fr;
+		 gap: 15px;
+	 }
+	 
+	 .featured-tool {
+		 background: white;
+		 border-radius: 16px;
+		 overflow: hidden;
+		 box-shadow: 0 4px 12px rgba(0,0,0,0.05);
+		 display: flex;
+		 transition: all 0.3s ease;
+	 }
+	 
+	 .featured-tool:hover {
+		 transform: translateY(-3px);
+		 box-shadow: 0 8px 20px rgba(0,0,0,0.1);
+	 }
+	 
+	 .featured-icon {
+		 width: 80px;
+		 display: flex;
+		 align-items: center;
+		 justify-content: center;
+		 background: #f8f9ff;
+	 }
+	 
+	 .featured-icon .img {
+		 width: 35px;
+		 height: 35px;
+	 }
+	 
+	 .featured-info {
+		 padding: 20px;
+		 flex: 1;
+	 }
+	 
+	 .featured-name {
+		 font-size: 18px;
+		 font-weight: 500;
+		 margin-bottom: 8px;
+	 }
+	 
+	 .featured-desc {
+		 font-size: 14px;
+		 color: #666;
+		 margin-bottom: 12px;
+		 line-height: 1.4;
+	 }
+	 
+	 .usage-count {
+		 font-size: 13px;
+		 color: #888;
+		 display: flex;
+		 align-items: center;
+	 }
+	 
+
+	 .nav-icon {
+		 font-size: 24px;
+		 margin-bottom: 4px;
+	 }
+	 
+	 /* 响应式调整 */
+	// @media (max-width: 480px) {
+		 .tools-grid {
+			 grid-template-columns: repeat(2, 1fr);
+		 }
+		 
+		 .tool-card {
+			 padding: 15px 10px;
+		 }
+		 
+		 .tool-icon {
+			 width: 45px;
+			 height: 45px;
+		 }
+		 
+		 .tool-icon .img {
+			 width: 35px;
+			 height: 35px;
+		 }
+		 
+		 .featured-icon {
+			 width: 70px;
+		 }
+		 
+		 .featured-info {
+			 padding: 15px;
+		 }
+	 //}
+	 
+	 /* 动画效果 */
+	 @keyframes fadeIn {
+		 from { opacity: 0; transform: translateY(20px); }
+		 to { opacity: 1; transform: translateY(0); }
+	 }
+	 
+	 .animate-fade {
+		 animation: fadeIn 0.5s ease forwards;
+	 }
+	 
+	 .delay-1 { animation-delay: 0.1s; }
+	 .delay-2 { animation-delay: 0.2s; }
+	 .delay-3 { animation-delay: 0.3s; }
+</style>

+ 19 - 19
main.js

@@ -1,27 +1,27 @@
 import App from './App'
 
 // #ifndef VUE3
-import Vue from 'vue'
-import uView from '@/uni_modules/uview-ui'
-import store from './store/index.js' // 确保路径正确
+import Vue from 'vue'
+import uView from '@/uni_modules/uview-ui'
+import store from './store/index.js' // 确保路径正确
 Vue.prototype.$store = store;
 Vue.use(uView)
-import './uni.promisify.adaptor'
-import {formatSeconds}from './utils/tools.js'
-Vue.prototype.$formatSeconds = formatSeconds;
-import {isLoginCourse,isLogin} from './utils/common.js'
-Vue.prototype.$isLoginCourse = isLoginCourse
-Vue.prototype.$isLogin = isLogin
-import {isLoginCourseAuto} from './utils/courseTool.js'
-Vue.prototype.$isLoginCourseAuto = isLoginCourseAuto
-
-Vue.use(uView)
-// uni.$u.config.unit = 'rpx'
-  
-import utils from './utils/common.js'
-Vue.prototype.utils = utils;
- 
-import {setData} from './utils/common.js'
+import './uni.promisify.adaptor'
+import {formatSeconds}from './utils/tools.js'
+Vue.prototype.$formatSeconds = formatSeconds;
+import {isLoginCourse,isLogin} from './utils/common.js'
+Vue.prototype.$isLoginCourse = isLoginCourse
+Vue.prototype.$isLogin = isLogin
+import {isLoginCourseAuto} from './utils/courseTool.js'
+Vue.prototype.$isLoginCourseAuto = isLoginCourseAuto
+
+Vue.use(uView)
+// uni.$u.config.unit = 'rpx'
+  
+import utils from './utils/common.js'
+Vue.prototype.utils = utils;
+ 
+import {setData} from './utils/common.js'
 Vue.prototype.setData = setData;
 Vue.config.productionTip = false
 App.mpType = 'app'

+ 6 - 2
manifest.json

@@ -50,12 +50,16 @@
     "quickapp" : {},
     /* 小程序特有相关 */
     "mp-weixin" : {
-        "appid" : "wx2cb27a0b8d154dc9",
+        "appid" : "wx0cc48207ad9a8d72",
         "setting" : {
             "urlCheck" : false,
             "minified" : true
         },
-        "usingComponents" : true
+		"lazyCodeLoading" : "requiredComponents",
+        "usingComponents" : true,
+        "secureNetwork" : {
+            "enable" : false
+        }
     },
     "mp-alipay" : {
         "usingComponents" : true

+ 17 - 17
node_modules/.bin/nanoid.cmd

@@ -1,17 +1,17 @@
-@ECHO off
-GOTO start
-:find_dp0
-SET dp0=%~dp0
-EXIT /b
-:start
-SETLOCAL
-CALL :find_dp0
-
-IF EXIST "%dp0%\node.exe" (
-  SET "_prog=%dp0%\node.exe"
-) ELSE (
-  SET "_prog=node"
-  SET PATHEXT=%PATHEXT:;.JS;=;%
-)
-
-endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%"  "%dp0%\..\nanoid\bin\nanoid.cjs" %*
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%"  "%dp0%\..\nanoid\bin\nanoid.cjs" %*

+ 17 - 17
node_modules/.bin/parser.cmd

@@ -1,17 +1,17 @@
-@ECHO off
-GOTO start
-:find_dp0
-SET dp0=%~dp0
-EXIT /b
-:start
-SETLOCAL
-CALL :find_dp0
-
-IF EXIST "%dp0%\node.exe" (
-  SET "_prog=%dp0%\node.exe"
-) ELSE (
-  SET "_prog=node"
-  SET PATHEXT=%PATHEXT:;.JS;=;%
-)
-
-endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%"  "%dp0%\..\@babel\parser\bin\babel-parser.js" %*
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%"  "%dp0%\..\@babel\parser\bin\babel-parser.js" %*

+ 138 - 0
node_modules/.vue-global-types/vue_99_0.d.ts

@@ -0,0 +1,138 @@
+// @ts-nocheck
+export {};
+
+; declare global {
+	var __VLS_PROPS_FALLBACK: Record<string, unknown>;
+
+	const __VLS_directiveBindingRestFields: { instance: null, oldValue: null, modifiers: any, dir: any };
+	const __VLS_unref: typeof import('vue').unref;
+	const __VLS_placeholder: any;
+	const __VLS_intrinsics: import('vue/jsx-runtime').JSX.IntrinsicElements;
+
+	type __VLS_Elements = __VLS_SpreadMerge<SVGElementTagNameMap, HTMLElementTagNameMap>;
+	type __VLS_GlobalComponents = import('vue').GlobalComponents;
+	type __VLS_GlobalDirectives = import('vue').GlobalDirectives;
+	type __VLS_IsAny<T> = 0 extends 1 & T ? true : false;
+	type __VLS_PickNotAny<A, B> = __VLS_IsAny<A> extends true ? B : A;
+	type __VLS_SpreadMerge<A, B> = Omit<A, keyof B> & B;
+	type __VLS_WithComponent<N0 extends string, LocalComponents, Self, N1 extends string, N2 extends string, N3 extends string> =
+		N1 extends keyof LocalComponents ? { [K in N0]: LocalComponents[N1] } :
+		N2 extends keyof LocalComponents ? { [K in N0]: LocalComponents[N2] } :
+		N3 extends keyof LocalComponents ? { [K in N0]: LocalComponents[N3] } :
+		Self extends object ? { [K in N0]: Self } :
+		N1 extends keyof __VLS_GlobalComponents ? { [K in N0]: __VLS_GlobalComponents[N1] } :
+		N2 extends keyof __VLS_GlobalComponents ? { [K in N0]: __VLS_GlobalComponents[N2] } :
+		N3 extends keyof __VLS_GlobalComponents ? { [K in N0]: __VLS_GlobalComponents[N3] } :
+		{};
+	type __VLS_FunctionalComponentCtx<T, K> = __VLS_PickNotAny<'__ctx' extends keyof __VLS_PickNotAny<K, {}>
+		? K extends { __ctx?: infer Ctx } ? NonNullable<Ctx> : never : any
+		, T extends (props: any, ctx: infer Ctx) => any ? Ctx : any
+	>;
+	type __VLS_FunctionalComponentProps<T, K> = '__ctx' extends keyof __VLS_PickNotAny<K, {}>
+		? K extends { __ctx?: { props?: infer P } } ? NonNullable<P> : never
+		: T extends (props: infer P, ...args: any) => any ? P
+		: {};
+	type __VLS_FunctionalComponent<T> = (props: (T extends { $props: infer Props } ? Props : {}) & Record<string, unknown>, ctx?: any) => import('vue/jsx-runtime').JSX.Element & {
+		__ctx?: {
+			attrs?: any;
+			slots?: T extends { $slots: infer Slots } ? Slots : Record<string, any>;
+			emit?: T extends { $emit: infer Emit } ? Emit : {};
+			props?: typeof props;
+			expose?: (exposed: T) => void;
+		};
+	};
+	type __VLS_IsFunction<T, K> = K extends keyof T
+		? __VLS_IsAny<T[K]> extends false
+		? unknown extends T[K]
+		? false
+		: true
+		: false
+		: false;
+	type __VLS_NormalizeComponentEvent<
+		Props,
+		Emits,
+		onEvent extends keyof Props,
+		Event extends keyof Emits,
+		CamelizedEvent extends keyof Emits,
+	> = __VLS_IsFunction<Props, onEvent> extends true
+		? Props
+		: __VLS_IsFunction<Emits, Event> extends true
+			? { [K in onEvent]?: Emits[Event] }
+			: __VLS_IsFunction<Emits, CamelizedEvent> extends true
+				? { [K in onEvent]?: Emits[CamelizedEvent] }
+				: Props;
+	// fix https://github.com/vuejs/language-tools/issues/926
+	type __VLS_UnionToIntersection<U> = (U extends unknown ? (arg: U) => unknown : never) extends ((arg: infer P) => unknown) ? P : never;
+	type __VLS_OverloadUnionInner<T, U = unknown> = U & T extends (...args: infer A) => infer R
+		? U extends T
+		? never
+		: __VLS_OverloadUnionInner<T, Pick<T, keyof T> & U & ((...args: A) => R)> | ((...args: A) => R)
+		: never;
+	type __VLS_OverloadUnion<T> = Exclude<
+		__VLS_OverloadUnionInner<(() => never) & T>,
+		T extends () => never ? never : () => never
+	>;
+	type __VLS_ConstructorOverloads<T> = __VLS_OverloadUnion<T> extends infer F
+		? F extends (event: infer E, ...args: infer A) => any
+		? { [K in E & string]: (...args: A) => void; }
+		: never
+		: never;
+	type __VLS_NormalizeEmits<T> = __VLS_PrettifyGlobal<
+		__VLS_UnionToIntersection<
+			__VLS_ConstructorOverloads<T> & {
+				[K in keyof T]: T[K] extends any[] ? { (...args: T[K]): void } : never
+			}
+		>
+	>;
+	type __VLS_EmitsToProps<T> = __VLS_PrettifyGlobal<{
+		[K in string & keyof T as `on${Capitalize<K>}`]?:
+			(...args: T[K] extends (...args: infer P) => any ? P : T[K] extends null ? any[] : never) => any;
+	}>;
+	type __VLS_ResolveEmits<
+		Comp,
+		Emits,
+		TypeEmits = Comp extends { __typeEmits?: infer T } ? unknown extends T ? {} : import('vue').ShortEmitsToObject<T> : {},
+		NormalizedEmits = __VLS_NormalizeEmits<Emits> extends infer E ? string extends keyof E ? {} : E : never,
+	> = __VLS_SpreadMerge<NormalizedEmits, TypeEmits>;
+	type __VLS_ResolveDirectives<T> = {
+		[K in keyof T & string as `v${Capitalize<K>}`]: T[K];
+	};
+	type __VLS_PrettifyGlobal<T> = { [K in keyof T as K]: T[K]; } & {};
+	type __VLS_WithDefaultsGlobal<P, D> = {
+		[K in keyof P as K extends keyof D ? K : never]-?: P[K];
+	} & {
+		[K in keyof P as K extends keyof D ? never : K]: P[K];
+	};
+	type __VLS_UseTemplateRef<T> = Readonly<import('vue').ShallowRef<T | null>>;
+	type __VLS_ProxyRefs<T> = import('vue').ShallowUnwrapRef<T>;
+
+	function __VLS_getVForSourceType<T extends number | string | any[] | Iterable<any>>(source: T): [
+		item: T extends number ? number
+			: T extends string ? string
+			: T extends any[] ? T[number]
+			: T extends Iterable<infer T1> ? T1
+			: any,
+		index: number,
+	][];
+	function __VLS_getVForSourceType<T>(source: T): [
+		item: T[keyof T],
+		key: keyof T,
+		index: number,
+	][];
+	function __VLS_getSlotParameters<S, D extends S>(slot: S, decl?: D):
+		D extends (...args: infer P) => any ? P : any[];
+	function __VLS_asFunctionalDirective<T>(dir: T): T extends import('vue').ObjectDirective
+		? NonNullable<T['created' | 'beforeMount' | 'mounted' | 'beforeUpdate' | 'updated' | 'beforeUnmount' | 'unmounted']>
+		: T extends (...args: any) => any
+			? T
+			: (arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown) => void;
+	function __VLS_asFunctionalComponent<T, K = T extends new (...args: any) => any ? InstanceType<T> : unknown>(t: T, instance?: K):
+		T extends new (...args: any) => any ? __VLS_FunctionalComponent<K>
+		: T extends () => any ? (props: {}, ctx?: any) => ReturnType<T>
+		: T extends (...args: any) => any ? T
+		: __VLS_FunctionalComponent<{}>;
+	function __VLS_functionalComponentArgsRest<T extends (...args: any) => any>(t: T): 2 extends Parameters<T>['length'] ? [any] : [];
+	function __VLS_asFunctionalElement<T>(tag: T, endTag?: T): (attrs: T & Record<string, unknown>) => void;
+	function __VLS_asFunctionalSlot<S>(slot: S): S extends () => infer R ? (props: {}) => R : NonNullable<S>;
+	function __VLS_tryAsConstant<const T>(t: T): T;
+}

+ 618 - 565
pages.json

@@ -1,565 +1,618 @@
-{
-	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
-		// {
-		// 	"path": "pages/index/index",
-		// 	"style": {
-		// 		"navigationBarTitleText": "首页"
-		// 	}
-		// },
-		{
-			"path" : "pages/about/index",
-			"style" : 
-			{
-				"navigationBarTitleText" : "工具",
-				"navigationStyle": "custom"
-			}
-		},
-		{
-			"path" : "pages/user/index",
-			"style" : 
-			{
-				"navigationBarTitleText" : "我的"
-			}
-		},
-		{
-			"path" : "pages/user/userAgreement",
-			"style" : 
-			{
-				"navigationBarTitleText" : ""
-			}
-		},
-		{
-			"path" : "pages/course/videovip",
-			"style" : 
-			{
-				"navigationBarTitleText" : ""
-			}
-		},
-		{
-			"path" : "pages/healthTest/healthTest",
-			"style" : 
-			{
-				"navigationBarTitleText" : "关于"
-			}
-		},
-		{
-			"path" : "pages/auth/login",
-			"style" : 
-			{
-				"navigationBarTitleText" : "登录"
-			}
-		}
-	],
-	"subPackages": [
-		{
-			"root": "pages_index",
-			"pages": [
-				{
-					"path": "testDetails",
-					"style": {
-						"navigationBarTitleText": "自测",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "test",
-					"style": {
-						"navigationBarTitleText": "自测",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "patient",
-					"style": {
-						"navigationBarTitleText": "就诊人管理",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "addEditPatient",
-					"style": {
-						"navigationBarTitleText": "新增就诊人",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "testResult",
-					"style": {
-						"navigationBarTitleText": "新增就诊人",
-						"enablePullDownRefresh": false
-					}
-				},{
-					"path": "voice",
-					"style": {
-						"navigationBarTitleText": "声音采集",
-						"enablePullDownRefresh": false,
-						"navigationBarBackgroundColor": "#ffffff",
-						"navigationBarTextStyle": "black",
-						"app-plus": {
-							"bounce": "none" // 页面回弹
-						}
-					}
-				},{
-					"path" : "voiceItem",
-					"style" : 
-					{
-						"navigationBarTitleText" : "声音录制",
-						"enablePullDownRefresh": false,
-						"navigationBarBackgroundColor":"#ffffff",
-						"navigationBarTextStyle":"black",
-						"app-plus": {
-							"bounce": "none" // 页面回弹
-						}
-					}
-				},{
-					"path" : "voiceList",
-					"style" : 
-					{
-						"navigationBarTitleText" : "声音录制",
-						"enablePullDownRefresh": false,
-						"navigationBarBackgroundColor":"#ffffff",
-						"navigationBarTextStyle":"black",
-						"app-plus": {
-							"bounce": "none" // 页面回弹
-						}
-					}
-				}
-			]
-		},
-		{
-			"root": "pages_manage",
-			"pages": [
-				{
-					"path": "login",
-					"style": {
-						"navigationBarTitleText": "登录",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "index",
-					"style": {
-						"navigationBarTitleText": "数据",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "dataDetails",
-					"style": {
-						"navigationBarTitleText": "课程数据详情",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "statistic",
-					"style": {
-						"navigationBarTitleText": "课程统计",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "manageDataDetail",
-					"style": {
-						"navigationBarTitleText": "销售详情",
-						"enablePullDownRefresh": false
-					}
-				}
-			]
-		},
-		{
-			"root": "pages_managedata",
-			"pages": [{
-					"path": "coursedetail",
-					"style": {
-						"navigationBarTitleText": "课程详情",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "vipdetail",
-					"style": {
-						"navigationBarTitleText": "会员详情",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "userInfo",
-					"style": {
-						"navigationBarTitleText": "用户信息",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "editUser",
-					"style": {
-						"navigationBarTitleText": "设置",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "lableSetup",
-					"style": {
-						"navigationBarTitleText": "标签设置",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "about",
-					"style": {
-						"navigationBarTitleText": "关于我们",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "users",
-					"style": {
-						"navigationBarTitleText": "审核销售",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "managedetail",
-					"style": {
-						"navigationBarTitleText": "审核销售",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "exprotList",
-					"style": {
-						"navigationBarTitleText": "审核列表",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "saleInfo",
-					"style": {
-						"navigationBarTitleText": "员工详情",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "changeVip",
-					"style": {
-						"navigationBarTitleText": "更换会员归属",
-						"enablePullDownRefresh": false
-					}
-				}
-			]
-		},
-		{
-			"root": "pages_course",
-			"pages": [{
-					"path": "reward",
-					"style": {
-						"navigationBarTitleText": "领取奖励",
-						"enablePullDownRefresh": false
-					}
-				},{
-					"path": "H5reward",
-					"style": {
-						"navigationBarTitleText": "领取奖励",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "becomeVIP",
-					"style": {
-						"navigationBarTitleText": "注册会员",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "becomeSale",
-					"style": {
-						"navigationBarTitleText": "注册销售",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "webview",
-					"style": {
-						"navigationBarTitleText": "授权登录",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "videovip",
-					"style": {
-						"navigationBarTitleText": "看课详情",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "video",
-					"style": {
-						"navigationBarTitleText": "",
-						"enablePullDownRefresh": false,
-						"navigationStyle": "custom"
-					}
-				},
-				{
-					"path" : "learn",
-					"style" : 
-					{
-						"navigationBarTitleText" : "健康生活方式指导",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path": "teacherClassroom",
-					"style": {
-						"navigationBarTitleText": "名师课堂",
-						"enablePullDownRefresh": false
-					}
-				},
-				{
-					"path" : "feedback",
-					"style" :                                                                                    
-					{
-						"navigationBarTitleText": "投诉反馈",
-						"scrollIndicator": "none",
-						"app-plus": {
-							"bounce": "none",
-							"softinputMode": "adjustResize"
-						}
-					}
-					
-				}
-			]
-		},
-		{
-			"root": "pages_tool",
-			"pages": [
-				
-				{
-					"path": "pages/historyToday/historyToday",
-					"style": {
-						"navigationBarBackgroundColor": "#3677f0",
-						"navigationBarTextStyle": "white",
-						"navigationBarTitleText": "历史今天",
-						"backgroundColor": "#eeeeee",
-						"backgroundTextStyle": "light",
-						"usingComponents": {}
-					}
-				},
-				{
-					"path": "pages/historyToday/details",
-					"style": {
-						"navigationBarBackgroundColor": "#3677f0",
-						"navigationBarTextStyle": "white",
-						"navigationBarTitleText": "详细信息",
-						"backgroundColor": "#eeeeee",
-						"backgroundTextStyle": "light",
-						"usingComponents": {}
-					}
-				},
-				// {
-				// 	"path": "pages/weather/weather",
-				// 	"style": {
-				// 		"navigationBarBackgroundColor": "#fff",
-				// 		"navigationBarTextStyle": "black",
-				// 		"navigationBarTitleText": "天气",
-				// 		"backgroundColor": "#eeeeee",
-				// 		"backgroundTextStyle": "light",
-				// 		"usingComponents": {}
-				// 	}
-				// },
-				{
-					"path": "pages/pinyin/index",
-					"style": {
-						"navigationBarBackgroundColor": "#3677f0",
-						"navigationBarTextStyle": "white",
-						"navigationBarTitleText": "查拼音",
-						"backgroundColor": "#eeeeee",
-						"backgroundTextStyle": "light",
-						"usingComponents": {}
-					}
-				},
-				{
-					"path": "pages/christmasHat/index/index",
-					"style": {
-						"navigationBarBackgroundColor": "#fff",
-						"navigationBarTextStyle": "black",
-						"navigationBarTitleText": "圣诞帽",
-						"backgroundColor": "#eeeeee",
-						"backgroundTextStyle": "light",
-						"usingComponents": {}
-					}
-				},
-				{
-					"path": "pages/gojuuonn/gojuuonn",
-					"style": {
-						"navigationBarBackgroundColor": "#e4bfb6",
-						"navigationBarTextStyle": "white",
-						"navigationBarTitleText": "五十音图",
-						"backgroundColor": "#eeeeee",
-						"backgroundTextStyle": "light",
-						"usingComponents": {}
-					}
-				},
-				
-				{
-					"path": "pages/figure/figure",
-					"style": {
-						"navigationBarBackgroundColor": "#3677f0",
-						"navigationBarTextStyle": "white",
-						"navigationBarTitleText": "身材计算",
-						"backgroundColor": "#eeeeee",
-						"backgroundTextStyle": "light",
-						"usingComponents": {}
-					}
-				},
-				{
-					"path": "pages/cand/index",
-					"style": {
-						"navigationBarBackgroundColor": "#fff",
-						"navigationBarTextStyle": "black",
-						"navigationBarTitleText": "程序员黄历",
-						"backgroundColor": "#eeeeee",
-						"backgroundTextStyle": "light",
-						"usingComponents": {}
-					}
-				},
-				{
-					"path": "pages/game/game",
-					"style": {
-						"navigationBarBackgroundColor": "#1e6d04",
-						"navigationBarTextStyle": "white",
-						"navigationBarTitleText": "摇骰子",
-						"backgroundColor": "#eeeeee",
-						"backgroundTextStyle": "light",
-						"usingComponents": {}
-					}
-				},
-				{
-					"path": "pages/support/support",
-					"style": {
-						"navigationBarTitleText": "关于",
-						"navigationBarBackgroundColor": "#FFF",
-						"navigationBarTextStyle": "black",
-						"backgroundColor": "#fff",
-						"backgroundTextStyle": "dark",
-						"usingComponents": {}
-					}
-				},
-				{
-					"path": "pages/christmasHat/combine/combine",
-					"style": {
-						"navigationBarBackgroundColor": "#fff",
-						"navigationBarTextStyle": "black",
-						"navigationBarTitleText": "圣诞帽",
-						"backgroundColor": "#eeeeee",
-						"backgroundTextStyle": "light",
-						"usingComponents": {}
-					}
-				},
-				{
-					"path": "pages/christmasHat/imageeditor/imageeditor",
-					"style": {
-						"navigationBarBackgroundColor": "#fff",
-						"navigationBarTextStyle": "black",
-						"navigationBarTitleText": "圣诞帽",
-						"backgroundColor": "#eeeeee",
-						"backgroundTextStyle": "light",
-						"usingComponents": {}
-					}
-				},
-				{
-					"path": "pages/qrcode/index",
-					"style": {
-						"navigationBarBackgroundColor": "#fff",
-						"navigationBarTextStyle": "black",
-						"navigationBarTitleText": "二维码生成器",
-						"backgroundColor": "#eeeeee",
-						"backgroundTextStyle": "light",
-						"usingComponents": {}
-					}
-				},
-				{
-					"path": "pages/IP/IP",
-					"style": {
-						"navigationBarBackgroundColor": "#3677f0",
-						"navigationBarTextStyle": "white",
-						"navigationBarTitleText": "IP地址查询",
-						"backgroundColor": "#eeeeee",
-						"backgroundTextStyle": "light",
-						"usingComponents": {}
-					}
-				},
-				{
-					"path": "pages/MobileHome/MobileHome",
-					"style": {
-						"navigationBarBackgroundColor": "#3677f0",
-						"navigationBarTextStyle": "white",
-						"navigationBarTitleText": "手机归属地",
-						"backgroundColor": "#eeeeee",
-						"backgroundTextStyle": "light",
-						"usingComponents": {}
-					}
-				},
-				{
-					"path": "pages/codePars/codePars",
-					"style": {
-						"navigationBarBackgroundColor": "#3677f0",
-						"navigationBarTextStyle": "white",
-						"navigationBarTitleText": "标准电码查询",
-						"backgroundColor": "#eeeeee",
-						"backgroundTextStyle": "light",
-						"usingComponents": {}
-					}
-				}
-				//,{
-				// 	"path": "pages/calc/index",
-				// 	"style": {
-				// 		"usingComponents": {}
-				// 	}
-				// }
-			]
-		}
-	],
-	"globalStyle": {
-		"navigationBarTextStyle": "black",
-		"navigationBarTitleText": "uni-app",
-		"navigationBarBackgroundColor": "#ffffff",
-		"backgroundColor": "#F8F8F8"
-	},
-	"tabBar": {
-		"color": "#666666",
-		"selectedColor": "#008FD3",
-		// "custom": true, 
-		"borderStyle": "white",
-		"backgroundColor": "#ffffff",
-		"height": "64px",
-		"fontSize": "12px",
-		"iconWidth": "18px",
-		"spacing": "4px",
-		"list": [
-			// {
-			// 	"pagePath": "pages/index/index",
-			// 	"iconPath": "/static/tabbar/home.png",
-			// 	"selectedIconPath": "/static/tabbar/home_sel.png",
-			// 	"text": "首页"
-			// },
-			// {
-			// 	"pagePath": "pages/healthTest/healthTest",
-			// 	"iconPath": "/static/tabbar/inquiry.png",
-			// 	"selectedIconPath": "/static/tabbar/inquiry_select.png",
-			// 	"text": "关于"
-			// },
-			{
-				"pagePath": "pages/about/index",
-				"iconPath": "/static/tabbar/health.png",
-				"selectedIconPath": "/static/tabbar/health_sel.png",
-				"text": "工具"
-			},
-			{
-				"pagePath": "pages/user/index",
-				"iconPath": "/static/tabbar/my.png",
-				"selectedIconPath": "/static/tabbar/my_sel.png",
-				"text": "我的"
-			}
-		]
-	},
-	"uniIdRouter": {}
-}
+{
+	"pages": [ 
+		// {
+		// 	"path": "pages/index/index",
+		// 	"style": {
+		// 		"navigationBarTitleText": "首页"
+		// 	}
+		// },
+		
+		{
+			"path" : "pages/about/index",
+			"style" : 
+			{
+				"navigationBarTitleText" : "工具",
+				"navigationStyle": "custom"
+			}
+		},
+		{
+			"path" : "pages/user/index",
+			"style" : 
+			{
+				"navigationBarTitleText" : "我的"
+			}
+		},
+		{
+			"path" : "pages/user/userAgreement",
+			"style" : 
+			{
+				"navigationBarTitleText" : ""
+			}
+		},
+		{
+			"path" : "pages/course/videovip",
+			"style" : 
+			{
+				"navigationBarTitleText" : ""
+			}
+		},
+		{
+			"path" : "pages/healthTest/healthTest",
+			"style" : 
+			{
+				"navigationBarTitleText" : "关于"
+			}
+		},
+		{
+			"path" : "pages/auth/login",
+			"style" : 
+			{
+				"navigationBarTitleText" : "登录"
+			}
+		}
+	],
+	"subPackages": [
+		{
+			"root": "pages_index",
+			"pages": [
+				{
+					"path": "testDetails",
+					"style": {
+						"navigationBarTitleText": "自测",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "test",
+					"style": {
+						"navigationBarTitleText": "自测",
+						"enablePullDownRefresh": false
+					}
+				},
+				// {
+				// 	"path": "patient",
+				// 	"style": {
+				// 		"navigationBarTitleText": "就诊人管理",
+				// 		"enablePullDownRefresh": false
+				// 	}
+				// },
+				// {
+				// 	"path": "addEditPatient",
+				// 	"style": {
+				// 		"navigationBarTitleText": "新增就诊人",
+				// 		"enablePullDownRefresh": false
+				// 	}
+				// },
+				// {
+				// 	"path": "testResult",
+				// 	"style": {
+				// 		"navigationBarTitleText": "新增就诊人",
+				// 		"enablePullDownRefresh": false
+				// 	}
+				// },
+				{
+					"path": "voice",
+					"style": {
+						"navigationBarTitleText": "声音采集",
+						"enablePullDownRefresh": false,
+						"navigationBarBackgroundColor": "#ffffff",
+						"navigationBarTextStyle": "black",
+						"app-plus": {
+							"bounce": "none" // 页面回弹
+						}
+					}
+				},{
+					"path" : "voiceItem",
+					"style" : 
+					{
+						"navigationBarTitleText" : "声音录制",
+						"enablePullDownRefresh": false,
+						"navigationBarBackgroundColor":"#ffffff",
+						"navigationBarTextStyle":"black",
+						"app-plus": {
+							"bounce": "none" // 页面回弹
+						}
+					}
+				},{
+					"path" : "voiceList",
+					"style" : 
+					{
+						"navigationBarTitleText" : "声音录制",
+						"enablePullDownRefresh": false,
+						"navigationBarBackgroundColor":"#ffffff",
+						"navigationBarTextStyle":"black",
+						"app-plus": {
+							"bounce": "none" // 页面回弹
+						}
+					}
+				}
+			]
+		},
+		{
+			"root": "pages_manage",
+			"pages": [
+				{
+					"path": "login",
+					"style": {
+						"navigationBarTitleText": "登录",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "index",
+					"style": {
+						"navigationBarTitleText": "数据",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "dataDetails",
+					"style": {
+						"navigationBarTitleText": "课程数据详情",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "statistic",
+					"style": {
+						"navigationBarTitleText": "课程统计",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "manageDataDetail",
+					"style": {
+						"navigationBarTitleText": "销售详情",
+						"enablePullDownRefresh": false
+					}
+				}
+			]
+		},
+		{
+			"root": "pages_managedata",
+			"pages": [{
+					"path": "coursedetail",
+					"style": {
+						"navigationBarTitleText": "课程详情",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "vipdetail",
+					"style": {
+						"navigationBarTitleText": "会员详情",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "userInfo",
+					"style": {
+						"navigationBarTitleText": "用户信息",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "editUser",
+					"style": {
+						"navigationBarTitleText": "设置",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "lableSetup",
+					"style": {
+						"navigationBarTitleText": "标签设置",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "about",
+					"style": {
+						"navigationBarTitleText": "关于我们",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "users",
+					"style": {
+						"navigationBarTitleText": "审核销售",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "managedetail",
+					"style": {
+						"navigationBarTitleText": "审核销售",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "exprotList",
+					"style": {
+						"navigationBarTitleText": "审核列表",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "saleInfo",
+					"style": {
+						"navigationBarTitleText": "员工详情",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "changeVip",
+					"style": {
+						"navigationBarTitleText": "更换会员归属",
+						"enablePullDownRefresh": false
+					}
+				}
+			]
+		},
+		{
+			"root": "pages_course",
+			"pages": [{
+					"path": "reward",
+					"style": {
+						"navigationBarTitleText": "领取奖励",
+						"enablePullDownRefresh": false
+					}
+				},{
+					"path": "H5reward",
+					"style": {
+						"navigationBarTitleText": "领取奖励",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "becomeVIP",
+					"style": {
+						"navigationBarTitleText": "注册会员",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "becomeSale",
+					"style": {
+						"navigationBarTitleText": "注册销售",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "webview",
+					"style": {
+						"navigationBarTitleText": "授权登录",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "videovip",
+					"style": {
+						"navigationBarTitleText": "看课详情",
+						"enablePullDownRefresh": false,
+						"navigationStyle": "custom",
+						"scrollIndicator": "none",
+						"app-plus": {
+							"bounce": "none",
+							"softinputMode": "adjustResize"
+						}
+					}
+				},
+				{
+					"path": "video",
+					"style": {
+						"navigationBarTitleText": "",
+						"enablePullDownRefresh": false,
+						"navigationStyle": "custom",
+						"scrollIndicator": "none",
+						"app-plus": {
+							"bounce": "none",
+							"softinputMode": "adjustResize"
+						}
+					}
+				},
+				{
+					"path" : "learn",
+					"style" : 
+					{
+						"navigationBarTitleText" : "健康生活方式指导",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path": "teacherClassroom",
+					"style": {
+						"navigationBarTitleText": "名师课堂",
+						"enablePullDownRefresh": false
+					}
+				},
+				{
+					"path" : "feedback",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "投诉反馈",
+						"scrollIndicator": "none",
+						"app-plus": {
+							"bounce": "none",
+							"softinputMode": "adjustResize"
+						}
+					}
+					
+				}
+			]
+		},
+		{
+			"root": "pages_tool",
+			"pages": [
+				{
+					"path": "pages/wxyj/index",
+					"style": {
+						"navigationBarBackgroundColor": "#3677f0",
+						"navigationBarTextStyle": "white",
+						"navigationBarTitleText": "五险一金计算",
+						"backgroundColor": "#eeeeee",
+						"backgroundTextStyle": "light",
+						"usingComponents": {}
+					}
+				},
+				{
+					"path": "pages/cloudNote/edit/index",
+					"style": {
+						"navigationBarTitleText": "编辑",
+						"enablePullDownRefresh": false,
+						"usingComponents": {}
+					}
+				},
+				{
+					"path": "pages/cloudNote/create/index",
+					"style": {
+						"navigationBarTitleText": "新增",
+						"enablePullDownRefresh": false,
+						"usingComponents": {}
+					}
+				},
+				
+				{
+					"path": "pages/cloudNote/index/index",
+					"style": {
+						"navigationBarBackgroundColor": "#3677f0",
+						"navigationBarTextStyle": "white",
+						"navigationBarTitleText": "云笔记",
+						"backgroundColor": "#eeeeee",
+						"backgroundTextStyle": "light",
+						"usingComponents": {}
+					}
+				},
+				
+				
+				{
+					"path": "pages/historyToday/historyToday",
+					"style": {
+						"navigationBarBackgroundColor": "#3677f0",
+						"navigationBarTextStyle": "white",
+						"navigationBarTitleText": "历史今天",
+						"backgroundColor": "#eeeeee",
+						"backgroundTextStyle": "light",
+						"usingComponents": {}
+					}
+				},
+				{
+					"path": "pages/historyToday/details",
+					"style": {
+						"navigationBarBackgroundColor": "#3677f0",
+						"navigationBarTextStyle": "white",
+						"navigationBarTitleText": "详细信息",
+						"backgroundColor": "#eeeeee",
+						"backgroundTextStyle": "light",
+						"usingComponents": {}
+					}
+				},
+				// {
+				// 	"path": "pages/weather/weather",
+				// 	"style": {
+				// 		"navigationBarBackgroundColor": "#fff",
+				// 		"navigationBarTextStyle": "black",
+				// 		"navigationBarTitleText": "天气",
+				// 		"backgroundColor": "#eeeeee",
+				// 		"backgroundTextStyle": "light",
+				// 		"usingComponents": {}
+				// 	}
+				// },
+				{
+					"path": "pages/pinyin/index",
+					"style": {
+						"navigationBarBackgroundColor": "#3677f0",
+						"navigationBarTextStyle": "white",
+						"navigationBarTitleText": "查拼音",
+						"backgroundColor": "#eeeeee",
+						"backgroundTextStyle": "light",
+						"usingComponents": {}
+					}
+				},
+				{
+					"path": "pages/christmasHat/index/index",
+					"style": {
+						"navigationBarBackgroundColor": "#fff",
+						"navigationBarTextStyle": "black",
+						"navigationBarTitleText": "圣诞帽",
+						"backgroundColor": "#eeeeee",
+						"backgroundTextStyle": "light",
+						"usingComponents": {}
+					}
+				},
+				{
+					"path": "pages/gojuuonn/gojuuonn",
+					"style": {
+						"navigationBarBackgroundColor": "#e4bfb6",
+						"navigationBarTextStyle": "white",
+						"navigationBarTitleText": "五十音图",
+						"backgroundColor": "#eeeeee",
+						"backgroundTextStyle": "light",
+						"usingComponents": {}
+					}
+				},
+				
+				{
+					"path": "pages/figure/figure",
+					"style": {
+						"navigationBarBackgroundColor": "#3677f0",
+						"navigationBarTextStyle": "white",
+						"navigationBarTitleText": "身材计算",
+						"backgroundColor": "#eeeeee",
+						"backgroundTextStyle": "light",
+						"usingComponents": {}
+					}
+				},
+				{
+					"path": "pages/cand/index",
+					"style": {
+						"navigationBarBackgroundColor": "#fff",
+						"navigationBarTextStyle": "black",
+						"navigationBarTitleText": "程序员黄历",
+						"backgroundColor": "#eeeeee",
+						"backgroundTextStyle": "light",
+						"usingComponents": {}
+					}
+				},
+				{
+					"path": "pages/game/game",
+					"style": {
+						"navigationBarBackgroundColor": "#1e6d04",
+						"navigationBarTextStyle": "white",
+						"navigationBarTitleText": "摇骰子",
+						"backgroundColor": "#eeeeee",
+						"backgroundTextStyle": "light",
+						"usingComponents": {}
+					}
+				},
+				{
+					"path": "pages/support/support",
+					"style": {
+						"navigationBarTitleText": "关于",
+						"navigationBarBackgroundColor": "#FFF",
+						"navigationBarTextStyle": "black",
+						"backgroundColor": "#fff",
+						"backgroundTextStyle": "dark",
+						"usingComponents": {}
+					}
+				},
+				{
+					"path": "pages/christmasHat/combine/combine",
+					"style": {
+						"navigationBarBackgroundColor": "#fff",
+						"navigationBarTextStyle": "black",
+						"navigationBarTitleText": "圣诞帽",
+						"backgroundColor": "#eeeeee",
+						"backgroundTextStyle": "light",
+						"usingComponents": {}
+					}
+				},
+				{
+					"path": "pages/christmasHat/imageeditor/imageeditor",
+					"style": {
+						"navigationBarBackgroundColor": "#fff",
+						"navigationBarTextStyle": "black",
+						"navigationBarTitleText": "圣诞帽",
+						"backgroundColor": "#eeeeee",
+						"backgroundTextStyle": "light",
+						"usingComponents": {}
+					}
+				},
+				{
+					"path": "pages/qrcode/index",
+					"style": {
+						"navigationBarBackgroundColor": "#fff",
+						"navigationBarTextStyle": "black",
+						"navigationBarTitleText": "二维码生成器",
+						"backgroundColor": "#eeeeee",
+						"backgroundTextStyle": "light",
+						"usingComponents": {}
+					}
+				},
+				{
+					"path": "pages/IP/IP",
+					"style": {
+						"navigationBarBackgroundColor": "#3677f0",
+						"navigationBarTextStyle": "white",
+						"navigationBarTitleText": "IP地址查询",
+						"backgroundColor": "#eeeeee",
+						"backgroundTextStyle": "light",
+						"usingComponents": {}
+					}
+				},
+				{
+					"path": "pages/MobileHome/MobileHome",
+					"style": {
+						"navigationBarBackgroundColor": "#3677f0",
+						"navigationBarTextStyle": "white",
+						"navigationBarTitleText": "手机归属地",
+						"backgroundColor": "#eeeeee",
+						"backgroundTextStyle": "light",
+						"usingComponents": {}
+					}
+				},
+				{
+					"path": "pages/codePars/codePars",
+					"style": {
+						"navigationBarBackgroundColor": "#3677f0",
+						"navigationBarTextStyle": "white",
+						"navigationBarTitleText": "标准电码查询",
+						"backgroundColor": "#eeeeee",
+						"backgroundTextStyle": "light",
+						"usingComponents": {}
+					}
+				}
+				//,{
+				// 	"path": "pages/calc/index",
+				// 	"style": {
+				// 		"usingComponents": {}
+				// 	}
+				// }
+			]
+		}
+	],
+	"globalStyle": {
+		"navigationBarTextStyle": "black",
+		"navigationBarTitleText": "uni-app",
+		"navigationBarBackgroundColor": "#ffffff",
+		"backgroundColor": "#F8F8F8"
+	},
+	"tabBar": {
+		"color": "#666666",
+		"selectedColor": "#008FD3",
+		// "custom": true, 
+		"borderStyle": "white",
+		"backgroundColor": "#ffffff",
+		"height": "64px",
+		"fontSize": "12px",
+		"iconWidth": "18px",
+		"spacing": "4px",
+		"list": [
+			// {
+			// 	"pagePath": "pages/index/index",
+			// 	"iconPath": "/static/tabbar/home.png",
+			// 	"selectedIconPath": "/static/tabbar/home_sel.png",
+			// 	"text": "首页"
+			// },
+			// {
+			// 	"pagePath": "pages/healthTest/healthTest",
+			// 	"iconPath": "/static/tabbar/inquiry.png",
+			// 	"selectedIconPath": "/static/tabbar/inquiry_select.png",
+			// 	"text": "关于"
+			// },
+			{
+				"pagePath": "pages/about/index",
+				"iconPath": "/static/tabbar/health.png",
+				"selectedIconPath": "/static/tabbar/health_sel.png",
+				"text": "首页"
+			},
+			{
+				"pagePath": "pages/user/index",
+				"iconPath": "/static/tabbar/my.png",
+				"selectedIconPath": "/static/tabbar/my_sel.png",
+				"text": "我的"
+			}
+		]
+	},
+	"uniIdRouter": {}
+}

+ 45 - 45
pages/about/index.vue

@@ -1,64 +1,64 @@
 <template>
-	<view class="column scrolly hb">
-		<!-- <scroll-view :scroll-y="true" class="hb">
-			<image :src="enterpriseimg"
-			 mode="widthFix" style="width: 100vw; " class="scrolly flex-1"></image>
-		</scroll-view> -->
-		<tools></tools>
+	<view class="column scrolly hb">
+		<!-- <scroll-view :scroll-y="true" class="hb">
+			<image :src="enterpriseimg"
+			 mode="widthFix" style="width: 100vw; " class="scrolly flex-1"></image>
+		</scroll-view> -->
+		<tools></tools>
 	</view>
 </template>
 
-<script>
-	import{getenterprise} from '@/api/index.js'
-	import tools from '@/components/tools.vue'
-	// import tools from '@/components/tools1.vue'
-	export default {
-		components: {
-			tools,
+<script>
+	import{getenterprise} from '@/api/index.js'
+	import tools from '@/components/tools.vue'
+	// import tools from '@/components/tools1.vue'
+	export default {
+		components: {
+			tools,
 		},
 		data() {
 			return {
 				enterpriseimg:''
 			}
-		},
-		//发送给朋友
-		onShareAppMessage(res) {
-			return {
-				title: this.$store.state.logoname,
-				path: '/pages/about/index',
-				imageUrl: this.$store.state.imgpath+'/app/image/logoshare.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
-			}
-			
-		},
-		//分享到朋友圈
-		onShareTimeline(res) {
-			return {
-				title: this.$store.state.logoname,
-				path: '/pages/about/index',
-				imageUrl: this.$store.state.imgpath+'/app/image/logoshare.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
-			}
-			
-		},
-		mounted() {
-			
-		},
-		onShow() {
-			const enterpriseimg = []
-			this.getenterprise()
+		},
+		//发送给朋友
+		onShareAppMessage(res) {
+			return {
+				title: this.$store.state.logoname,
+				path: '/pages/about/index',
+				imageUrl: this.$store.state.imgpath+'/app/image/logoshare.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+			}
+			
+		},
+		//分享到朋友圈
+		onShareTimeline(res) {
+			return {
+				title: this.$store.state.logoname,
+				path: '/pages/about/index',
+				imageUrl: this.$store.state.imgpath+'/app/image/logoshare.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+			}
+			
+		},
+		mounted() {
+			
+		},
+		onShow() {
+			const enterpriseimg = []
+			this.getenterprise()
 		},
 		methods: {
-			getenterprise(){
-				getenterprise().then(res=>{
-					this.enterpriseimg=res.data.images
-					console.log(res)
-				})
+			getenterprise(){
+				getenterprise().then(res=>{
+					this.enterpriseimg=res.data.images
+					console.log(res)
+				})
 			},
 		}
 	}
 </script>
 
 <style lang="scss">
-.cont{
-	width: 100%;
+.cont{
+	width: 100%;
 }
 </style>

+ 420 - 420
pages/auth/login.vue

@@ -1,420 +1,420 @@
-<template>
-	<view class="content">
-		<view  class="force-login-wrap">
-			<view class="force-login__content y-f">
-				<view class="logo">
-					<view class="logo-img">
-						<image :src="imgPath+'/app/image/logo.png'"></image>
-					</view>
-					<view class="title">{{imgname}}</view>
-				</view>
-				<view class="login-notice">为了提供更优质的服务,请先登录</view>
-				<view class="btns">
-					<!-- <button
-						class="author-btn"
-						open-type="getPhoneNumber"
-						@getphonenumber="phoneLogin"  >微信一键登录</button> -->
-					<!-- <button class="author-btn" v-if="isAgreement==false" @click="handleAgree()">微信一键登录</button> -->
-					<button class="author-btn" @click="handleAgree()">微信一键登录</button>
-				</view>
-				<button class="close-btn" @tap="back">暂不登录</button>
-				<view class="tips">
-							 <checkbox  :checked="isAgreement" @click="handleAgreement()" />
-							 <view  @click="handleAgreement()">您同意并接受</view>
-					<view class="btn"  @click="openContent('userRegister')">《用户协议》</view>
-					<view class="btn" @click="openContent('userPrivacy')">《隐私保护》</view>
-				</view>
-			</view>
-		</view>
-	<!-- 	<u-popup bgColor="#f6f6f6" :safeAreaInsetBottom="false"  :round="15" mode="bottom" :show="wxShow" @close="wxAuthClose" @open="wxAuthOpen">
-			 <view class="wxAuth">
-				 <view class="title">编辑头像和昵称</view>
-				 <wx-auth class="wx-box" @updateUser="updateUser()" ref="wxauth"   ></wx-auth>
-			 </view>
-			 
-		</u-popup> -->
-	</view>
-</template>
-
-<script>
-
-import { wxLogin,loginByMp } from '@/api/user'
-// import {wxAuth} from '../components/wxAuth.vue';
-
-export default {
-	// components:{
-	// 	wxAuth
-	// },
-	data() {
-		return {
-			wxShow:false,
-			isAgreement:false,
-			code:null,
-		}
-	},
-	computed: {
-	    imgPath() {
-	      return this.$store.state.imgpath
-	    },
-		appid() {
-			return this.$store.state.appid
-		},
-		imgname() {
-		  return this.$store.state.logoname
-		},
-	  },
-	// onLoad(option) {
-	// 	uni.$on('refreshLogin', () => {
-	// 		uni.navigateBack({
-	// 			delta:1
-	// 		})
-	// 	})
-	// },
-	onLoad(option) {
-	  uni.$on('refreshLogin', () => {
-	    const pages = getCurrentPages(); // 获取当前页面栈
-	    if (pages.length > 1) {
-	      uni.navigateBack({ delta: 1 }); // 有上一页才返回
-	    } else {
-	      // 如果是首页,跳转到某个默认页面(如首页)
-	      uni.reLaunch({ url: '/pages/index/index' }); // 或者用 switchTab 如果是 tabBar 页面
-	      // 或者直接提示用户
-	      uni.showToast({ title: '已经是首页了', icon: 'none' });
-	    }
-	  });
-	},
-	onUnload() {
-	},
-	mounted() {
-
-	},
-	methods: {
-		gologin(){
-			var that=this;
-			
-			uni.showLoading({
-				title:"处理中"
-			})
-			uni.login({
-				provider: 'weixin',
-				success: async loginRes => {
-					console.log(loginRes)
-					let code = loginRes.code // 获取开发code
-					var tuiUserId=uni.getStorageSync('tuiUserId');
-					loginByMp({
-					   code: code,
-					   tuiUserId:tuiUserId
-					})
-					.then( res => {
-						uni.hideLoading();
-						if(res.code==200){
-							uni.showToast({
-								icon:'none',
-								title: "登录成功",
-							});
-							uni.setStorageSync('userHistoryApp',res.user.historyApp);
-							uni.setStorageSync('AppToken',res.token);
-							uni.setStorageSync('userId',res.user.userId);
-							uni.setStorageSync('avatar',res.user.avatar);
-							uni.setStorageSync('nickName',res.user.nickName);
-							if(res.user.isWeixinAuth==0){
-								that.wxAuthOpen()
-							}
-							else{
-								uni.$emit('refreshLogin');
-								uni.$emit('refreshIM');
-							}
-						}
-						else{
-							uni.showToast({
-								icon:'none',
-								title: "授权登录失败,请重新登录",
-							});
-						}
-					   
-					})
-					.catch(error => {
-						console.log(error)
-						uni.hideLoading();
-						uni.showToast({
-							icon:'none',
-							title: "授权登录失败,请重新登录",
-						});
-					})
-					 
-				}
-			})
-		},
-		updateUser(){
-			this.wxShow=false;
-			uni.$emit('refreshLogin');
-			uni.$emit('refreshIM');
-		},
-		wxAuthOpen(){
-			this.wxShow=true;
-			var that=this;
-			setTimeout(function(){
-				that.$refs.wxauth.getUserInfo();
-			})
-			
-		},
-		wxAuthClose(){
-			this.wxShow=false;
-		},
-		handleAgree(){
-			if(!this.isAgreement){
-			  	uni.showToast({
-			  		icon:'none',
-			  		title: "请先同意协议后再登录",
-			  	});
-				return 
-			}
-			this.gologin()
-		},
-		openContent(type){
-			console.log(type)
-			 
-			uni.navigateTo({
-				url:"/pages_user/agreement?type="+type
-			})
-		},
-		handleAgreement(){
-			this.isAgreement=!this.isAgreement;
-		},
-		// 微信用户手机号登录
-		phoneLogin(e) {
-			var that=this;
-			
-			uni.showLoading({
-				title:"处理中"
-			})
-			
-			console.log(e)
-			// if (e.detail.errMsg == 'getPhoneNumber:ok') {
-			// 	this.$getProvider()
-			// 	.then(provider => {
-			// 		console.log('当前的环境商',provider)
-			// 		if (!provider) {
-			// 		  reject()
-			// 		}
-			// 		// uni登录
-			// 		uni.login({
-			// 			provider: provider,
-			// 			success: async loginRes => {
-			// 				console.log(loginRes)
-			// 				let code = loginRes.code // 获取开发code
-			// 				var tuiUserId=uni.getStorageSync('tuiUserId');
-			// 				wxLogin({
-			// 				   encryptedData: e.detail.encryptedData,
-			// 				   iv: e.detail.iv,
-			// 				   code: code,
-			// 				   tuiUserId:tuiUserId
-			// 				})
-			// 				.then( res => {
-			// 					uni.hideLoading();
-			// 					if(res.code==200){
-			// 						uni.showToast({
-			// 							icon:'none',
-			// 							title: "登录成功",
-			// 						});
-			// 						uni.setStorageSync('userHistoryApp',res.user.historyApp);
-			// 						uni.setStorageSync('AppToken',res.token);
-			// 						uni.setStorageSync('userId',res.user.userId);
-			// 						uni.setStorageSync('avatar',res.user.avatar);
-			// 						uni.setStorageSync('nickName',res.user.nickName);
-			// 						if(res.user.isWeixinAuth==0){
-			// 							that.wxAuthOpen()
-			// 						}
-			// 						else{
-			// 							uni.$emit('refreshLogin');
-			// 							uni.$emit('refreshIM');
-			// 						}
-			// 					}
-			// 					else{
-			// 						uni.showToast({
-			// 							icon:'none',
-			// 							title: "授权登录失败,请重新登录",
-			// 						});
-			// 					}
-							   
-			// 				})
-			// 				.catch(error => {
-			// 					console.log(error)
-			// 					uni.hideLoading();
-			// 					uni.showToast({
-			// 						icon:'none',
-			// 						title: "授权登录失败,请重新登录",
-			// 					});
-			// 				})
-							 
-			// 			}
-			// 		})
-			// 	})
-			// 	.catch(err => {})
-			// } else {
-			// 	uni.showToast({
-			// 		title: '已拒绝授权',
-			// 		icon: 'none',
-			// 		duration: 2000,
-			// 	})
-			// }
-		},
-		back() {
-			// uni.reLaunch({
-			// 	url: '/pages/index/index',
-			// 	animationType: 'pop-in',
-			// 	animationDuration: 100
-			// })
-			uni.navigateBack({
-				delta: 1
-			});
-		}
-	},
-}
-</script>
-
-<style lang="scss">
-.container {
-	flex: 1;
-	display: flex;
-	flex-direction: column;
-	justify-content: flex-start;
-	position: relative;
-	
-}
-
-.force-login-wrap {
-	width: 100%;
-	height: 100%;
-	overflow: hidden;
-	z-index: 11111;
-	top: 0;
-	
-	
-	
-	.force-login__content {
-		position: absolute;
-		left: 50%;
-		top: 40%;
-		transform: translate(-50%, -50%);
-		.logo{
-			display: flex;
-			flex-direction: column;
-			justify-content: center;
-			align-items: center;
-			.logo-img{
-				border: 4upx solid #FFFFFF;
-				box-shadow: 0px 5px 15px 2px rgba(0,0,0,0.1);
-				border-radius: 50%;
-				width: 80px;
-				height: 80px;
-				image{
-					border-radius: 50%;
-					width: 100%;
-					height: 100%;
-					overflow: hidden;
-				}
-			}
-			
-			.title{
-				margin-top: 20rpx;
-				font-size: 35rpx;
-				font-family: PingFang SC;
-				font-weight: bold;
-				color: #000;
-				margin-bottom: 30rpx;
-			}
-		}
-		 
-		.login-notice {
-		  font-size: 28rpx;
-		  font-family: PingFang SC;
-		  font-weight: 400;
-		  color: #000;
-		  line-height: 44rpx;
-		  width: 500rpx;
-		  text-align: center;
-		  margin-bottom: 80rpx;
-		}
-		.btns{
-			position: relative;
-			width: 630rpx;
-			height: 80rpx;
-			.author-btn{				z-index:100;
-				position: absolute;
-				width: 630rpx;
-				height: 80rpx;
-				background: linear-gradient( to right, #2583EB 0%, #6dbae9 100%);
-				background: -moz-linear-gradient(to right, #2583EB 0%, #6dbae9 100%);
-				// box-shadow: 0px 7rpx 6rpx 0px rgba(229, 138, 0, 0.22);
-				border-radius: 40rpx;
-				font-size: 30rpx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: rgba(255, 255, 255, 1);
-			}
-		}
-		.author-btn{
-			z-index:100;
-			// position: absolute;
-			width: 630rpx;
-			height: 80rpx;
-			background: linear-gradient(to right, #2583EB 0%, #6dbae9 100%);
-			background: -moz-linear-gradient(to right, #2583EB 0%, #6dbae9 100%);
-			// box-shadow: 0px 7rpx 6rpx 0px rgba(229, 138, 0, 0.22);
-			border-radius: 40rpx;
-			font-size: 30rpx;
-			font-family: PingFang SC;
-			font-weight: 500;
-			color: rgba(255, 255, 255, 1);
-		}
-		.close-btn {
-		  width: 630rpx;
-		  height: 80rpx;
-		  margin-top: 30rpx;
-		  border-radius: 40rpx;
-		  border: 2rpx solid #2583EB;
-		  background: none;
-		  font-size: 30rpx;
-		  font-family: PingFang SC;
-		  font-weight: 500;
-		  color: #2583EB;
-		}
-	}
-}
-.tips{
-	margin-top: 30rpx;
-	display: flex;
-	justify-content: center;
-	align-items: center;
-	font-size: 28rpx;
-	color: #000;
-	checkbox{
-		
-	}
-	.btn{
-		color: #2583EB;
-	}
-	
-}
-.wxAuth{
-	border-radius: 30rpx;
-	width: 100%;
-	padding: 15rpx;
-	display: flex;
-	flex-direction: column;
-	align-items: center;
-	justify-content: center;
-	background-color: #FFFFFF;
-	.title{
-		font-size: 32rpx;
-		margin: 10rpx 0rpx;
-		font-weight: bold;
-		text-align: center;
-	}
-	.wx-box{
-		width: 100%;
-		padding: 0rpx 30rpx;
-	}
-}
-</style>
+<template>
+	<view class="content">
+		<view  class="force-login-wrap">
+			<view class="force-login__content y-f">
+				<view class="logo">
+					<view class="logo-img">
+						<image :src="imgPath+'/app/image/logo.png'"></image>
+					</view>
+					<view class="title">{{imgname}}</view>
+				</view>
+				<view class="login-notice">为了提供更优质的服务,请先登录</view>
+				<view class="btns">
+					<!-- <button
+						class="author-btn"
+						open-type="getPhoneNumber"
+						@getphonenumber="phoneLogin"  >微信一键登录</button> -->
+					<!-- <button class="author-btn" v-if="isAgreement==false" @click="handleAgree()">微信一键登录</button> -->
+					<button class="author-btn" @click="handleAgree()">微信一键登录</button>
+				</view>
+				<button class="close-btn" @tap="back">暂不登录</button>
+				<view class="tips">
+							 <checkbox  :checked="isAgreement" @click="handleAgreement()" />
+							 <view  @click="handleAgreement()">您同意并接受</view>
+					<view class="btn"  @click="openContent('userRegister')">《用户协议》</view>
+					<view class="btn" @click="openContent('userPrivacy')">《隐私保护》</view>
+				</view>
+			</view>
+		</view>
+	<!-- 	<u-popup bgColor="#f6f6f6" :safeAreaInsetBottom="false"  :round="15" mode="bottom" :show="wxShow" @close="wxAuthClose" @open="wxAuthOpen">
+			 <view class="wxAuth">
+				 <view class="title">编辑头像和昵称</view>
+				 <wx-auth class="wx-box" @updateUser="updateUser()" ref="wxauth"   ></wx-auth>
+			 </view>
+			 
+		</u-popup> -->
+	</view>
+</template>
+
+<script>
+
+import { wxLogin,loginByMp } from '@/api/user'
+// import {wxAuth} from '../components/wxAuth.vue';
+
+export default {
+	// components:{
+	// 	wxAuth
+	// },
+	data() {
+		return {
+			wxShow:false,
+			isAgreement:false,
+			code:null,
+		}
+	},
+	computed: {
+	    imgPath() {
+	      return this.$store.state.imgpath
+	    },
+		appid() {
+			return this.$store.state.appid
+		},
+		imgname() {
+		  return this.$store.state.logoname
+		},
+	  },
+	// onLoad(option) {
+	// 	uni.$on('refreshLogin', () => {
+	// 		uni.navigateBack({
+	// 			delta:1
+	// 		})
+	// 	})
+	// },
+	onLoad(option) {
+	  uni.$on('refreshLogin', () => {
+	    const pages = getCurrentPages(); // 获取当前页面栈
+	    if (pages.length > 1) {
+	      uni.navigateBack({ delta: 1 }); // 有上一页才返回
+	    } else {
+	      // 如果是首页,跳转到某个默认页面(如首页)
+	      uni.reLaunch({ url: '/pages/index/index' }); // 或者用 switchTab 如果是 tabBar 页面
+	      // 或者直接提示用户
+	      uni.showToast({ title: '已经是首页了', icon: 'none' });
+	    }
+	  });
+	},
+	onUnload() {
+	},
+	mounted() {
+
+	},
+	methods: {
+		gologin(){
+			var that=this;
+			
+			uni.showLoading({
+				title:"处理中"
+			})
+			uni.login({
+				provider: 'weixin',
+				success: async loginRes => {
+					console.log(loginRes)
+					let code = loginRes.code // 获取开发code
+					var tuiUserId=uni.getStorageSync('tuiUserId');
+					loginByMp({
+					   code: code,
+					   tuiUserId:tuiUserId
+					})
+					.then( res => {
+						uni.hideLoading();
+						if(res.code==200){
+							uni.showToast({
+								icon:'none',
+								title: "登录成功",
+							});
+							uni.setStorageSync('userHistoryApp',res.user.historyApp);
+							uni.setStorageSync('AppToken',res.token);
+							uni.setStorageSync('userId',res.user.userId);
+							uni.setStorageSync('avatar',res.user.avatar);
+							uni.setStorageSync('nickName',res.user.nickName);
+							if(res.user.isWeixinAuth==0){
+								that.wxAuthOpen()
+							}
+							else{
+								uni.$emit('refreshLogin');
+								uni.$emit('refreshIM');
+							}
+						}
+						else{
+							uni.showToast({
+								icon:'none',
+								title: "授权登录失败,请重新登录",
+							});
+						}
+					   
+					})
+					.catch(error => {
+						console.log(error)
+						uni.hideLoading();
+						uni.showToast({
+							icon:'none',
+							title: "授权登录失败,请重新登录",
+						});
+					})
+					 
+				}
+			})
+		},
+		updateUser(){
+			this.wxShow=false;
+			uni.$emit('refreshLogin');
+			uni.$emit('refreshIM');
+		},
+		wxAuthOpen(){
+			this.wxShow=true;
+			var that=this;
+			setTimeout(function(){
+				that.$refs.wxauth.getUserInfo();
+			})
+			
+		},
+		wxAuthClose(){
+			this.wxShow=false;
+		},
+		handleAgree(){
+			if(!this.isAgreement){
+			  	uni.showToast({
+			  		icon:'none',
+			  		title: "请先同意协议后再登录",
+			  	});
+				return 
+			}
+			this.gologin()
+		},
+		openContent(type){
+			console.log(type)
+			 
+			uni.navigateTo({
+				url:"/pages_user/agreement?type="+type
+			})
+		},
+		handleAgreement(){
+			this.isAgreement=!this.isAgreement;
+		},
+		// 微信用户手机号登录
+		phoneLogin(e) {
+			var that=this;
+			
+			uni.showLoading({
+				title:"处理中"
+			})
+			
+			console.log(e)
+			// if (e.detail.errMsg == 'getPhoneNumber:ok') {
+			// 	this.$getProvider()
+			// 	.then(provider => {
+			// 		console.log('当前的环境商',provider)
+			// 		if (!provider) {
+			// 		  reject()
+			// 		}
+			// 		// uni登录
+			// 		uni.login({
+			// 			provider: provider,
+			// 			success: async loginRes => {
+			// 				console.log(loginRes)
+			// 				let code = loginRes.code // 获取开发code
+			// 				var tuiUserId=uni.getStorageSync('tuiUserId');
+			// 				wxLogin({
+			// 				   encryptedData: e.detail.encryptedData,
+			// 				   iv: e.detail.iv,
+			// 				   code: code,
+			// 				   tuiUserId:tuiUserId
+			// 				})
+			// 				.then( res => {
+			// 					uni.hideLoading();
+			// 					if(res.code==200){
+			// 						uni.showToast({
+			// 							icon:'none',
+			// 							title: "登录成功",
+			// 						});
+			// 						uni.setStorageSync('userHistoryApp',res.user.historyApp);
+			// 						uni.setStorageSync('AppToken',res.token);
+			// 						uni.setStorageSync('userId',res.user.userId);
+			// 						uni.setStorageSync('avatar',res.user.avatar);
+			// 						uni.setStorageSync('nickName',res.user.nickName);
+			// 						if(res.user.isWeixinAuth==0){
+			// 							that.wxAuthOpen()
+			// 						}
+			// 						else{
+			// 							uni.$emit('refreshLogin');
+			// 							uni.$emit('refreshIM');
+			// 						}
+			// 					}
+			// 					else{
+			// 						uni.showToast({
+			// 							icon:'none',
+			// 							title: "授权登录失败,请重新登录",
+			// 						});
+			// 					}
+							   
+			// 				})
+			// 				.catch(error => {
+			// 					console.log(error)
+			// 					uni.hideLoading();
+			// 					uni.showToast({
+			// 						icon:'none',
+			// 						title: "授权登录失败,请重新登录",
+			// 					});
+			// 				})
+							 
+			// 			}
+			// 		})
+			// 	})
+			// 	.catch(err => {})
+			// } else {
+			// 	uni.showToast({
+			// 		title: '已拒绝授权',
+			// 		icon: 'none',
+			// 		duration: 2000,
+			// 	})
+			// }
+		},
+		back() {
+			// uni.reLaunch({
+			// 	url: '/pages/index/index',
+			// 	animationType: 'pop-in',
+			// 	animationDuration: 100
+			// })
+			uni.navigateBack({
+				delta: 1
+			});
+		}
+	},
+}
+</script>
+
+<style lang="scss">
+.container {
+	flex: 1;
+	display: flex;
+	flex-direction: column;
+	justify-content: flex-start;
+	position: relative;
+	
+}
+
+.force-login-wrap {
+	width: 100%;
+	height: 100%;
+	overflow: hidden;
+	z-index: 11111;
+	top: 0;
+	
+	
+	
+	.force-login__content {
+		position: absolute;
+		left: 50%;
+		top: 40%;
+		transform: translate(-50%, -50%);
+		.logo{
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			align-items: center;
+			.logo-img{
+				border: 4upx solid #FFFFFF;
+				box-shadow: 0px 5px 15px 2px rgba(0,0,0,0.1);
+				border-radius: 50%;
+				width: 80px;
+				height: 80px;
+				image{
+					border-radius: 50%;
+					width: 100%;
+					height: 100%;
+					overflow: hidden;
+				}
+			}
+			
+			.title{
+				margin-top: 20rpx;
+				font-size: 35rpx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #000;
+				margin-bottom: 30rpx;
+			}
+		}
+		 
+		.login-notice {
+		  font-size: 28rpx;
+		  font-family: PingFang SC;
+		  font-weight: 400;
+		  color: #000;
+		  line-height: 44rpx;
+		  width: 500rpx;
+		  text-align: center;
+		  margin-bottom: 80rpx;
+		}
+		.btns{
+			position: relative;
+			width: 630rpx;
+			height: 80rpx;
+			.author-btn{				z-index:100;
+				position: absolute;
+				width: 630rpx;
+				height: 80rpx;
+				background: linear-gradient( to right, #2583EB 0%, #6dbae9 100%);
+				background: -moz-linear-gradient(to right, #2583EB 0%, #6dbae9 100%);
+				// box-shadow: 0px 7rpx 6rpx 0px rgba(229, 138, 0, 0.22);
+				border-radius: 40rpx;
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: rgba(255, 255, 255, 1);
+			}
+		}
+		.author-btn{
+			z-index:100;
+			// position: absolute;
+			width: 630rpx;
+			height: 80rpx;
+			background: linear-gradient(to right, #2583EB 0%, #6dbae9 100%);
+			background: -moz-linear-gradient(to right, #2583EB 0%, #6dbae9 100%);
+			// box-shadow: 0px 7rpx 6rpx 0px rgba(229, 138, 0, 0.22);
+			border-radius: 40rpx;
+			font-size: 30rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			color: rgba(255, 255, 255, 1);
+		}
+		.close-btn {
+		  width: 630rpx;
+		  height: 80rpx;
+		  margin-top: 30rpx;
+		  border-radius: 40rpx;
+		  border: 2rpx solid #2583EB;
+		  background: none;
+		  font-size: 30rpx;
+		  font-family: PingFang SC;
+		  font-weight: 500;
+		  color: #2583EB;
+		}
+	}
+}
+.tips{
+	margin-top: 30rpx;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	font-size: 28rpx;
+	color: #000;
+	checkbox{
+		
+	}
+	.btn{
+		color: #2583EB;
+	}
+	
+}
+.wxAuth{
+	border-radius: 30rpx;
+	width: 100%;
+	padding: 15rpx;
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	justify-content: center;
+	background-color: #FFFFFF;
+	.title{
+		font-size: 32rpx;
+		margin: 10rpx 0rpx;
+		font-weight: bold;
+		text-align: center;
+	}
+	.wx-box{
+		width: 100%;
+		padding: 0rpx 30rpx;
+	}
+}
+</style>

+ 39 - 39
pages/course/videovip.vue

@@ -1,21 +1,21 @@
 <template>
 	<view>
-		<view class="video-box" v-if="videoItem">
-			<video
-			id="video-content-box"
-			style="width: 100%;height: 420rpx;"
-			:src="videoItem.videoUrl"
-			>
-			</video>
-		</view>
-		<view class="bg-white p20">
-			<view class="m20">
-				{{videoItem.title}}
-			</view>
-			<view class="color-text1 fs24 ml20">
-				播放时长:{{videoItem.totalDuration}}
-			</view>
-		</view>
+		<view class="video-box" v-if="videoItem">
+			<video
+			id="video-content-box"
+			style="width: 100%;height: 420rpx;"
+			:src="videoItem.videoUrl"
+			>
+			</video>
+		</view>
+		<view class="bg-white p20">
+			<view class="m20">
+				{{videoItem.title}}
+			</view>
+			<view class="color-text1 fs24 ml20">
+				播放时长:{{videoItem.totalDuration}}
+			</view>
+		</view>
 		
 	</view>
 </template>
@@ -24,19 +24,19 @@
 	export default {
 		data() {
 			return {
-				videoItem:{},
-				videoId:null,
+				videoItem:{},
+				videoId:null,
 			}
-		},
-		onLoad(option) {
-			if(option.videoitem){
-				this.videoItem=option.videoitem ? JSON.parse(option.videoitem) : {}
-				this.videoId=this.videoItem.videoId
-				console.log("optionqqq",this.videoItem)
-				console.log("option111",this.videoItem.videoUrl)
-			}
-			console.log("option111",this.videoItem.videoUrl)
-		},
+		},
+		onLoad(option) {
+			if(option.videoitem){
+				this.videoItem=option.videoitem ? JSON.parse(option.videoitem) : {}
+				this.videoId=this.videoItem.videoId
+				console.log("optionqqq",this.videoItem)
+				console.log("option111",this.videoItem.videoUrl)
+			}
+			console.log("option111",this.videoItem.videoUrl)
+		},
 		
 		methods: {
 			
@@ -45,15 +45,15 @@
 </script>
 
 <style lang="scss" scoped>
-.video-box {
-	width: 100%;
-	height: 420rpx;
-	overflow: hidden;
-	position: relative;
-
-	#myVideo {
-		width: 100%;
-		height: 100%;
-	}
-}
+.video-box {
+	width: 100%;
+	height: 420rpx;
+	overflow: hidden;
+	position: relative;
+
+	#myVideo {
+		width: 100%;
+		height: 100%;
+	}
+}
 </style>

+ 39 - 39
pages/healthTest/healthTest.vue

@@ -1,59 +1,59 @@
 <template>
 	<view class="column" style="height: 100%;position: relative;">
-		<!-- <view class="top-content ">
-			<view class="status_bar" :style="{height: statusBarHeight+'px'}"></view>
-			<view class="top-title">关于</view>
-		</view> -->
-		<view>
-			<image :src="enterpriseimg" mode="widthFix" class="pb20" style="width: 100%;"></image>
+		<!-- <view class="top-content ">
+			<view class="status_bar" :style="{height: statusBarHeight+'px'}"></view>
+			<view class="top-title">关于</view>
+		</view> -->
+		<view>
+			<image :src="enterpriseimg" mode="widthFix" class="pb20" style="width: 100%;"></image>
 		</view>
 	</view>
 </template>
 
-<script>
+<script>
 	import{getenterprise} from '@/api/index.js'
 	export default {
 		// name:"enterpriseimg",
 		data() {
 			return {
-				statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
+				statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
 				enterpriseimg:'',
 			};
-		},
-		mounted() {
-			console.log(this.$store.state.imgpath)
-			const imgs = []
-			this.getenterprise()
-		},
-		methods: {
-			getenterprise(){
-				getenterprise().then(res=>{
-					this.enterpriseimg=res.data.images
-					console.log(res)
-				})
-			},
-		}
+		},
+		mounted() {
+			console.log(this.$store.state.imgpath)
+			const imgs = []
+			this.getenterprise()
+		},
+		methods: {
+			getenterprise(){
+				getenterprise().then(res=>{
+					this.enterpriseimg=res.data.images
+					console.log(res)
+				})
+			},
+		}
 		
 	}
 </script>
 
 <style lang="scss" scoped>
-.top-content {
-	width: 100%;
-	z-index: 10;
-	position: fixed;
-	top: 0;
-	left: 0;
-	background-color: #FFFFFF;
-	.top-title {
-		height: 88rpx;
-		line-height: 88rpx;
-		font-size: 42rpx;
-		font-family: Source Han Sans CN;
-		font-weight: bold;
-		color: #222222;
-		padding-left: 41rpx;
-		background-color: #FFFFFF;
-	}
+.top-content {
+	width: 100%;
+	z-index: 10;
+	position: fixed;
+	top: 0;
+	left: 0;
+	background-color: #FFFFFF;
+	.top-title {
+		height: 88rpx;
+		line-height: 88rpx;
+		font-size: 42rpx;
+		font-family: Source Han Sans CN;
+		font-weight: bold;
+		color: #222222;
+		padding-left: 41rpx;
+		background-color: #FFFFFF;
+	}
 }
 </style>

+ 134 - 134
pages/index/index.vue

@@ -1,135 +1,135 @@
-<template>
-	<view class="content p20">
-		<view class="banner" v-if="advImgs.length>0">
-			<u-swiper
-				:list="advImgs"
-				keyName="imageUrl"
-				indicator
-				indicatorMode="line"
-				circular
-				height='166'
-				@click="handleAdvClick"
-			></u-swiper>
-		</view>
-		<view class="p20" style="width: 100%;">
-			<view class="yangshengbox bg-white p20 radius12">
-				<view>养生讲堂</view>
-				<view class="justify-between align-center" @click="goClassList(1)">
-					<view class="fs24">查看更多</view>
-					<u-icon name="arrow-right" size="20"></u-icon>
-				</view>
-			</view>
-			<view class="courseBox">
-				<view class="listbox" v-for="(item,index) in looklist" :key="index" @click="goClass(item.courseId,1)">
-					<view>
-						<image :src="item.imgUrl" mode="aspectFill" ></image> 
-					</view>
-					<view class="mt20 ">
-						<view class="ellipsis bold">{{item.courseName}}</view>
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {getAdvList} from '@/api/index'
-	import {courseList} from '@/api/class'
-	export default {
-		data() {
-			return {
-				title: '',
-				advImgs:[],
-				looklist:[]
-			}
-		},
-		onLoad() {
-			this.getimgList()
-			this.getcourselist()
-		},
-		methods: {
-			goClass(id,type) {
-				console.log(id)
-				uni.navigateTo({
-					url:'/pages_course/learn?courseId='+id+'&type='+type
-				})
-			},
-			goClassList(type) {
-				uni.navigateTo({
-					url: '/pages_course/teacherClassroom?type='+type
-				})
-			},
-			getcourselist(){
-				courseList().then(res=>{
-					if(res.code==200){
-						this.looklist=res.data
-						console.log(res.data)
-						console.log(111,this.looklist)
-					}else{
-						uni.showToast({
-							title: res.msg,
-							icon:'none'
-						});
-					}
-				})
-			},
-			getimgList(){
-				getAdvList().then(res=>{
-					console.log(res)
-					if(res.code==200){
-						this.advImgs=res.data
-					}else{
-						uni.showToast({
-							title: res.msg,
-							icon:'none'
-						});
-					}
-				})
-			},
-			handleAdvClick(){
-				
-			},
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-.content {
-	display: flex;
-	flex-direction: column;
-	align-items: center;
-	justify-content: center;
-	width: calc(100% - 40rpx);
-	.banner{
-		width: 100%;
-		height: 300upx;
-		border-radius: 10upx;
-	}
-	.yangshengbox{
-		margin-top: 40rpx;
-		display: flex;
-		justify-content: space-between;
-	}
-	.courseBox{
-		display: flex;
-		justify-content: start;
-		flex-wrap: wrap;
-		margin-top: 20rpx;
-		.listbox{
-			display: flex;
-			flex-direction: column;
-			background-color: #fff;
-			padding: 20rpx;
-			margin: 10rpx;
-			border-radius: 12rpx;
-			width:  calc(44% - 20rpx);
-			image{
-				width: 100%;
-				height: 360rpx;
-			}
-		}
-	}
-	
-}
+<template>
+	<view class="content p20">
+		<view class="banner" v-if="advImgs.length>0">
+			<u-swiper
+				:list="advImgs"
+				keyName="imageUrl"
+				indicator
+				indicatorMode="line"
+				circular
+				height='166'
+				@click="handleAdvClick"
+			></u-swiper>
+		</view>
+		<view class="p20" style="width: 100%;">
+			<view class="yangshengbox bg-white p20 radius12">
+				<view></view>
+				<view class="justify-between align-center" @click="goClassList(1)">
+					<view class="fs24">查看更多</view>
+					<u-icon name="arrow-right" size="20"></u-icon>
+				</view>
+			</view>
+			<view class="courseBox">
+				<view class="listbox" v-for="(item,index) in looklist" :key="index" @click="goClass(item.courseId,1)">
+					<view>
+						<image :src="item.imgUrl" mode="aspectFill" ></image> 
+					</view>
+					<view class="mt20 ">
+						<view class="ellipsis bold">{{item.courseName}}</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {getAdvList} from '@/api/index'
+	import {courseList} from '@/api/class'
+	export default {
+		data() {
+			return {
+				title: '',
+				advImgs:[],
+				looklist:[]
+			}
+		},
+		onLoad() {
+			this.getimgList()
+			this.getcourselist()
+		},
+		methods: {
+			goClass(id,type) {
+				console.log(id)
+				uni.navigateTo({
+					url:'/pages_course/learn?courseId='+id+'&type='+type
+				})
+			},
+			goClassList(type) {
+				uni.navigateTo({
+					url: '/pages_course/teacherClassroom?type='+type
+				})
+			},
+			getcourselist(){
+				courseList().then(res=>{
+					if(res.code==200){
+						this.looklist=res.data
+						console.log(res.data)
+						console.log(111,this.looklist)
+					}else{
+						uni.showToast({
+							title: res.msg,
+							icon:'none'
+						});
+					}
+				})
+			},
+			getimgList(){
+				getAdvList().then(res=>{
+					console.log(res)
+					if(res.code==200){
+						this.advImgs=res.data
+					}else{
+						uni.showToast({
+							title: res.msg,
+							icon:'none'
+						});
+					}
+				})
+			},
+			handleAdvClick(){
+				
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+.content {
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	justify-content: center;
+	width: calc(100% - 40rpx);
+	.banner{
+		width: 100%;
+		height: 300upx;
+		border-radius: 10upx;
+	}
+	.yangshengbox{
+		margin-top: 40rpx;
+		display: flex;
+		justify-content: space-between;
+	}
+	.courseBox{
+		display: flex;
+		justify-content: start;
+		flex-wrap: wrap;
+		margin-top: 20rpx;
+		.listbox{
+			display: flex;
+			flex-direction: column;
+			background-color: #fff;
+			padding: 20rpx;
+			margin: 10rpx;
+			border-radius: 12rpx;
+			width:  calc(44% - 20rpx);
+			image{
+				width: 100%;
+				height: 360rpx;
+			}
+		}
+	}
+	
+}
 </style>

+ 416 - 416
pages/user/index.vue

@@ -1,438 +1,438 @@
 <template>
 	<view>
-		<view class="user-info">
-			<view class="left justify-start align-center" @click="openPersonInfo()">
-				<!-- <view class="head-img">
-					<image :src="user.avatar==null?'/static/images/detault_head.jpg':user.avatar" mode="aspectFill"></image>
-				</view> -->
-				<u-avatar :src="avatar" ></u-avatar>
-				<view class="name-phone ml20">
-					<view class="name">{{user.nickname?user.nickname:"游客01"}}</view>
-					<!-- <view class="phone" v-if="user.phone!=''">{{utils.parsePhone(user.phone)}}</view> -->
-				</view>
-			</view>
-			<view class="right">
-			</view>
-		</view>
-		<view class="p20" style="margin-top: 40rpx" v-if="isOpen">
-		<!-- <view class="p20" style="margin-top: 40rpx"> -->
-			<view class="menu-box" style="margin-top: -40rpx">
-				<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">
-					<view class="menu-item" @click="navTo()">
-						<image :src="imgPath + '/app/manergevip/chang.png'"></image>
-						<view class="m-name">管理工具</view>
-					</view>
-				</view>
-			</view>
-		</view>
-		<view class="func-box" style="margin-top: 20rpx;">
-			<view class="func-left-box btn-w">
-				<button plain class="btn-ww" openType="share">
-					<image src="/static/images/share.png"></image>
-					<text>我要分享</text>
-				</button>
-			</view>
-			<view class="rightArrow-box">
-				<text></text>
-				<image src="/static/images/rightArrow.png"></image>
-			</view>
-		</view>
-		<view @tap="clearCache" class="func-box">
-			<view class="func-left-box">
-				<image src="/static/images/delete.png"></image>
-				<text>清除缓存</text>
-			</view>
-			<view class="rightArrow-box">
-				<image src="/static/images/rightArrow.png"></image>
-			</view>
-		</view>
-		
-		<view class="func-box bs" data-url="support">
-			<view class="func-left-box">
-				<image src="/static/images/about.png"></image>
-				<text>关于</text>
-			</view>
-			<view class="rightArrow-box">
-				<text>版本号 v{{ version }}</text>
-			</view>
+		<view class="user-info">
+			<view class="left justify-start align-center" @click="openPersonInfo()">
+				<!-- <view class="head-img">
+					<image :src="user.avatar==null?'/static/images/detault_head.jpg':user.avatar" mode="aspectFill"></image>
+				</view> -->
+				<u-avatar :src="avatar" ></u-avatar>
+				<view class="name-phone ml20">
+					<view class="name">{{user.nickname?user.nickname:"游客01"}}</view>
+					<!-- <view class="phone" v-if="user.phone!=''">{{utils.parsePhone(user.phone)}}</view> -->
+				</view>
+			</view>
+			<view class="right">
+			</view>
+		</view>
+		<view class="p20" style="margin-top: 40rpx" v-if="isOpen">
+		<!-- <view class="p20" style="margin-top: 40rpx"> -->
+			<view class="menu-box" style="margin-top: -40rpx">
+				<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">
+					<view class="menu-item" @click="navTo()">
+						<image :src="imgPath + '/app/manergevip/chang.png'"></image>
+						<view class="m-name">管理工具</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="func-box" style="margin-top: 20rpx;">
+			<view class="func-left-box btn-w">
+				<button plain class="btn-ww" openType="share">
+					<image src="/static/images/share.png"></image>
+					<text>我要分享</text>
+				</button>
+			</view>
+			<view class="rightArrow-box">
+				<text></text>
+				<image src="/static/images/rightArrow.png"></image>
+			</view>
+		</view>
+		<view @tap="clearCache" class="func-box">
+			<view class="func-left-box">
+				<image src="/static/images/delete.png"></image>
+				<text>清除缓存</text>
+			</view>
+			<view class="rightArrow-box">
+				<image src="/static/images/rightArrow.png"></image>
+			</view>
+		</view>
+		
+		<view class="func-box bs" data-url="support">
+			<view class="func-left-box">
+				<image src="/static/images/about.png"></image>
+				<text>关于</text>
+			</view>
+			<view class="rightArrow-box">
+				<text>版本号 v{{ version }}</text>
+			</view>
 		</view>
 	</view>
 </template>
 
-<script>
+<script>
 	import {queryIsTownOn} from "@/api/class.js";
 	export default {
 		data() {
 			return {
-				avatar:'',
-				show:false,
-				title:'提示',
-				content:'确认退出吗?',
-				usertoken:'',
-				version:"1.0",
+				avatar:'',
+				show:false,
+				title:'提示',
+				content:'确认退出吗?',
+				usertoken:'',
+				version:"1.0",
 				isOpen:false
 			}
-		},
-		computed: {
-		    imgPath() {
-		      return this.$store.state.imgpath
-		    }
-		},
-		mounted() {
-		   this.getCheckAppId();
-		},
-		onLoad() {
-			const accountInfo = wx.getAccountInfoSync();
-			this.version = accountInfo.miniProgram.version ;
+		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		},
+		mounted() {
+		   this.getCheckAppId();
+		},
+		onLoad() {
+			const accountInfo = wx.getAccountInfoSync();
+			this.version = accountInfo.miniProgram.version ;
 		},
 		methods: {
-			openH5(type){
-				uni.navigateTo({
-					url:"/pages/user/userAgreement?type="+type
-				})
-			},
-			clearCache: function () {
-			    uni.clearStorage();
-			    uni.showToast({
-			        title: '清理成功',
-			        icon: 'none',
-			        duration: 2000
-			    });
-			},
-			getCheckAppId() {
-				console.error('获取AppID', uni.getAccountInfoSync());
-			      try {
-			        const accountInfo = uni.getAccountInfoSync();
-			        if(accountInfo && accountInfo.miniProgram) {
-					   let appId=accountInfo.miniProgram.appId;
-					   this.queryIsTownOn(appId)
-			        }
-			      } catch(e) {
-			          console.error('获取AppID失败', e);
-			      }
-			},
-			queryIsTownOn(appId){
-				queryIsTownOn({"appId":appId}).then(res=>{
-					if(res.date=="001"){
-						this.isOpen=true;
-					}else{
-						this.isOpen=false;
-					}
-				});
-			},
-			navTo(urls){
-				if(!uni.getStorageSync('ManageToken')){
-					uni.navigateTo({
-						url:'/pages_manage/login'
-					})
-				}else{
-					uni.navigateTo({
-						url:'/pages_manage/index'
-					})
-				}
+			openH5(type){
+				uni.navigateTo({
+					url:"/pages/user/userAgreement?type="+type
+				})
+			},
+			clearCache: function () {
+			    uni.clearStorage();
+			    uni.showToast({
+			        title: '清理成功',
+			        icon: 'none',
+			        duration: 2000
+			    });
+			},
+			getCheckAppId() {
+				console.error('获取AppID', uni.getAccountInfoSync());
+			      try {
+			        const accountInfo = uni.getAccountInfoSync();
+			        if(accountInfo && accountInfo.miniProgram) {
+					   let appId=accountInfo.miniProgram.appId;
+					   this.queryIsTownOn(appId)
+			        }
+			      } catch(e) {
+			          console.error('获取AppID失败', e);
+			      }
+			},
+			queryIsTownOn(appId){
+				queryIsTownOn({"appId":appId}).then(res=>{
+					if(res.date=="001"){
+						this.isOpen=true;
+					}else{
+						this.isOpen=false;
+					}
+				});
+			},
+			navTo(urls){
+				if(!uni.getStorageSync('ManageToken')){
+					uni.navigateTo({
+						url:'/pages_manage/login'
+					})
+				}else{
+					uni.navigateTo({
+						url:'/pages_manage/index'
+					})
+				}
 			}
 		}
 	}
 </script>
 
-<style lang="scss" scoped>
-	.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;
-			}
-		}
-	}
-.user-info{
-	padding: 40upx 30upx 0 30upx;
-	display: flex;
-	align-items: center;
-	justify-content: space-between;
-	.left{
-		position: relative;
-		display: flex;
-		.head-img{
-			width: 120upx;
-			height: 120upx;
-			border-radius: 50%;
-			overflow: hidden;
-			margin-right: 30upx;
-			border: 4upx solid #FFFFFF;
-			box-shadow: 0px 5px 15px 2px rgba(0,0,0,0.1);
-			image{
-				width: 100%;
-				height: 100%;
-			}
-		}
-		.name-phone{
-			// padding-top: 15upx;
-			.name{
-				font-size: 40upx;
-				font-family: PingFang SC;
-				font-weight: bold;
-				color: #111111;
-				line-height: 1;
-			}
-			.phone{
-				font-size: 28upx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: #666666;
-				line-height: 1;
-				margin-top: 30upx;
-			}
-		}
-	}
-	.right{
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		.msg-box{
-			margin-left: 10upx;
-			width: 44upx;
-			height: 44upx;
-			image{
-				width: 100%;
-				height: 100%;
-			}
-		}
-		.set{
-			
-			width: 44upx;
-			height: 44upx;
-			image{
-				width: 100%;
-				height: 100%;
-			}
-		}
-	}
-	
-}
-.used-tools{
-		box-sizing: border-box;
-		background: #FFFFFF;
-		border-radius: 16upx;
-		padding: 40upx 30upx;
-		
-		.title{
-			font-size: 34upx;
-			font-family: PingFang SC;
-			font-weight: bold;
-			color: #222222;
-			line-height: 1;
-		}
-		.tools-list{
-			margin-top: 50upx;
-			display: flex;
-			flex-wrap: wrap;
-			width: 100%;
-			.item{
-				box-sizing: border-box;
-				width: 25%;
-				display: flex;
-				flex-direction: column;
-				align-items: center;
-				justify-content: center;
-				margin-bottom: 50upx;
-				position: relative;
-				image{
-					width: 50upx;
-					height: 50upx;
-				}
-				.text{
-					font-size: 24upx;
-					font-family: PingFang SC;
-					font-weight: 500;
-					color: #111111;
-					line-height: 1;
-					margin-top: 10upx;
-				}
-				.contact-btn{
-					display: inline-block;
-					position: absolute;
-					top: 0;
-					left: 0;
-					width: 100%;
-					height: 100%;
-					opacity: 0;
-				}
-			}
-		}
-	}
-	.func-box {
-		box-sizing: border-box;
-		width: 100%;
-		padding: 30rpx 25rpx;
-		background-color: #fff;
-	}
-	
-	.func-box,
-	.rightArrow-box {
-		display: flex;
-		flex-direction: row;
-		justify-content: space-between;
-		align-items: center;
-	}
-	
-	.rightArrow-box image {
-		width: 35rpx;
-		height: 35rpx;
-	}
-	
-	.rightArrow-box text {
-		font-size: 26rpx;
-		color: #5f5f5f;
-		margin-right: 10rpx;
-	}
-	
-	.func-left-box {
-		display: flex;
-		flex-direction: row;
-		justify-content: space-between;
-		align-items: center;
-		padding: 0rpx;
-		margin: 0rpx;
-		height: 40rpx;
-	}
-	
-	.func-left-box image {
-		width: 35rpx;
-		height: 35rpx;
-	}
-	
-	.func-left-box text {
-		font-size: 30rpx;
-		color: #1b1b1b;
-		margin-left: 20rpx;
-	}
-	
-	.func-left-box button {
-		border: none;
-		background-color: #fff;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		padding: 0rpx;
-		margin: 0rpx;
-	}
-	
-	.btn-w {
-		width: 80vw;
-	}
-	
-	.btn-ww {
-		width: 100%;
-		text-align: left;
-		display: flex !important;
-		justify-content: flex-start !important;
-	}
-	
-	.admin {
-		background-color: #fff;
-		box-shadow: 0rpx 2rpx 4rpx 0rpx rgba(0, 0, 0, 0.05);
-	}
-	
-	.welcome {
-		padding: 20rpx 25rpx;
-		font-size: 26rpx;
-		color: #1b1b1b;
-		border-bottom: 1rpx solid #d6eaf7;
-	}
-	
-	.func,
-	.welcome {
-		width: 100%;
-		box-sizing: border-box;
-	}
-	
-	.func {
-		padding: 25rpx;
-		display: flex;
-		justify-content: flex-start;
-		align-items: center;
-	}
-	
-	.func-item {
-		width: 25%;
-		box-sizing: border-box;
-	}
-	
-	.num {
-		font-size: 40rpx;
-		font-weight: 700;
-		color: #3452e5;
-	}
-	
-	.name,
-	.num {
-		width: 100%;
-		text-align: center;
-	}
-	
-	.name {
-		margin-top: 10rpx;
-		font-size: 26rpx;
-	}
-	
-	.line {
-		width: 100%;
-		height: 20rpx;
-		background-color: #f3f4f6;
+<style lang="scss" scoped>
+	.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;
+			}
+		}
 	}
-	
-	.bs {
-		box-shadow: 0rpx 2rpx 4rpx 0rpx rgba(0, 0, 0, 0.05);
+.user-info{
+	padding: 40upx 30upx 0 30upx;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	.left{
+		position: relative;
+		display: flex;
+		.head-img{
+			width: 120upx;
+			height: 120upx;
+			border-radius: 50%;
+			overflow: hidden;
+			margin-right: 30upx;
+			border: 4upx solid #FFFFFF;
+			box-shadow: 0px 5px 15px 2px rgba(0,0,0,0.1);
+			image{
+				width: 100%;
+				height: 100%;
+			}
+		}
+		.name-phone{
+			// padding-top: 15upx;
+			.name{
+				font-size: 40upx;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #111111;
+				line-height: 1;
+			}
+			.phone{
+				font-size: 28upx;
+				font-family: PingFang SC;
+				font-weight: 500;
+				color: #666666;
+				line-height: 1;
+				margin-top: 30upx;
+			}
+		}
+	}
+	.right{
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		.msg-box{
+			margin-left: 10upx;
+			width: 44upx;
+			height: 44upx;
+			image{
+				width: 100%;
+				height: 100%;
+			}
+		}
+		.set{
+			
+			width: 44upx;
+			height: 44upx;
+			image{
+				width: 100%;
+				height: 100%;
+			}
+		}
+	}
+	
+}
+.used-tools{
+		box-sizing: border-box;
+		background: #FFFFFF;
+		border-radius: 16upx;
+		padding: 40upx 30upx;
+		
+		.title{
+			font-size: 34upx;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #222222;
+			line-height: 1;
+		}
+		.tools-list{
+			margin-top: 50upx;
+			display: flex;
+			flex-wrap: wrap;
+			width: 100%;
+			.item{
+				box-sizing: border-box;
+				width: 25%;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				justify-content: center;
+				margin-bottom: 50upx;
+				position: relative;
+				image{
+					width: 50upx;
+					height: 50upx;
+				}
+				.text{
+					font-size: 24upx;
+					font-family: PingFang SC;
+					font-weight: 500;
+					color: #111111;
+					line-height: 1;
+					margin-top: 10upx;
+				}
+				.contact-btn{
+					display: inline-block;
+					position: absolute;
+					top: 0;
+					left: 0;
+					width: 100%;
+					height: 100%;
+					opacity: 0;
+				}
+			}
+		}
+	}
+	.func-box {
+		box-sizing: border-box;
+		width: 100%;
+		padding: 30rpx 25rpx;
+		background-color: #fff;
+	}
+	
+	.func-box,
+	.rightArrow-box {
+		display: flex;
+		flex-direction: row;
+		justify-content: space-between;
+		align-items: center;
+	}
+	
+	.rightArrow-box image {
+		width: 35rpx;
+		height: 35rpx;
+	}
+	
+	.rightArrow-box text {
+		font-size: 26rpx;
+		color: #5f5f5f;
+		margin-right: 10rpx;
+	}
+	
+	.func-left-box {
+		display: flex;
+		flex-direction: row;
+		justify-content: space-between;
+		align-items: center;
+		padding: 0rpx;
+		margin: 0rpx;
+		height: 40rpx;
+	}
+	
+	.func-left-box image {
+		width: 35rpx;
+		height: 35rpx;
+	}
+	
+	.func-left-box text {
+		font-size: 30rpx;
+		color: #1b1b1b;
+		margin-left: 20rpx;
+	}
+	
+	.func-left-box button {
+		border: none;
+		background-color: #fff;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		padding: 0rpx;
+		margin: 0rpx;
+	}
+	
+	.btn-w {
+		width: 80vw;
+	}
+	
+	.btn-ww {
+		width: 100%;
+		text-align: left;
+		display: flex !important;
+		justify-content: flex-start !important;
+	}
+	
+	.admin {
+		background-color: #fff;
+		box-shadow: 0rpx 2rpx 4rpx 0rpx rgba(0, 0, 0, 0.05);
+	}
+	
+	.welcome {
+		padding: 20rpx 25rpx;
+		font-size: 26rpx;
+		color: #1b1b1b;
+		border-bottom: 1rpx solid #d6eaf7;
+	}
+	
+	.func,
+	.welcome {
+		width: 100%;
+		box-sizing: border-box;
+	}
+	
+	.func {
+		padding: 25rpx;
+		display: flex;
+		justify-content: flex-start;
+		align-items: center;
+	}
+	
+	.func-item {
+		width: 25%;
+		box-sizing: border-box;
+	}
+	
+	.num {
+		font-size: 40rpx;
+		font-weight: 700;
+		color: #3452e5;
+	}
+	
+	.name,
+	.num {
+		width: 100%;
+		text-align: center;
+	}
+	
+	.name {
+		margin-top: 10rpx;
+		font-size: 26rpx;
+	}
+	
+	.line {
+		width: 100%;
+		height: 20rpx;
+		background-color: #f3f4f6;
+	}
+	
+	.bs {
+		box-shadow: 0rpx 2rpx 4rpx 0rpx rgba(0, 0, 0, 0.05);
 	}
 </style>

+ 24 - 24
pages/user/userAgreement.vue

@@ -4,38 +4,38 @@
 	</view>
 </template>
 
-<script>
+<script>
 	import {userAgreement,privacyPolicy} from '@/api/index'
 	export default {
 		data() {
 			return {
-				texturl:'',
+				texturl:'',
 				requestPath:uni.getStorageSync('requestPath')
 			}
+		},
+		onLoad(option) {
+			if(option.type){
+				this.texturl=option.type
+				// this.getuserAgreement()
+				console.log(this.requestPath+this.texturl)
+			}
 		},
-		onLoad(option) {
-			if(option.type){
-				this.texturl=option.type
-				// this.getuserAgreement()
-				console.log(this.requestPath+this.texturl)
-			}
-		},
-		methods: {
-			getuserAgreement(){
-				userAgreement().then(res=>{
-					console.log(res)
-					if(res.code==200){
-						this.texturl=res.data
-					}
-				})
+		methods: {
+			getuserAgreement(){
+				userAgreement().then(res=>{
+					console.log(res)
+					if(res.code==200){
+						this.texturl=res.data
+					}
+				})
 			},
-			getprivacyPolicy(){
-				getprivacyPolicy().then(res=>{
-					console.log(res)
-					if(res.code==200){
-						this.texturl=res.data
-					}
-				})
+			getprivacyPolicy(){
+				getprivacyPolicy().then(res=>{
+					console.log(res)
+					if(res.code==200){
+						this.texturl=res.data
+					}
+				})
 			}
 		}
 	}

+ 10 - 10
pages_course/H5reward.vue

@@ -1,16 +1,16 @@
-<template>
-	<view>
-		<web-view :src="h5viewUrl" ></web-view>
+<template>
+	<view>
+		<web-view :src="h5viewUrl" ></web-view>
 	</view>
 </template>
 
-<script>
-	export default {
-	  data() {
-	    return {
-			h5viewUrl:uni.getStorageSync('h5viewUrl')
-		}
-	 }
+<script>
+	export default {
+	  data() {
+	    return {
+			h5viewUrl:uni.getStorageSync('h5viewUrl')
+		}
+	 }
 	}
 </script>
 

+ 208 - 208
pages_course/becomeSale.vue

@@ -1,208 +1,208 @@
-<template>
-	<view class="centerV hb base-bg-f plr40" >
-		<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:'',
-				companyUserId:''
-			}
-		},
-		computed: {
-			imgPath() {
-			  return this.$store.state.imgpath
-			},
-		  },
-		onLoad(option) {
-			this.companyId = option.id
-			this.companyUserId=option.companyUserId
-		},
-		methods: {
-			close() {},
-			open() {},
-			login(){
-				const data={
-					companyId:this.companyId,
-					phoneNumber:this.phoneNumber,
-					nickName:this.nickName,
-					password:this.password,
-					companyUserId:this.companyUserId
-				}
-				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>
+<template>
+	<view class="centerV hb base-bg-f plr40" >
+		<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:'',
+				companyUserId:''
+			}
+		},
+		computed: {
+			imgPath() {
+			  return this.$store.state.imgpath
+			},
+		  },
+		onLoad(option) {
+			this.companyId = option.id
+			this.companyUserId=option.companyUserId
+		},
+		methods: {
+			close() {},
+			open() {},
+			login(){
+				const data={
+					companyId:this.companyId,
+					phoneNumber:this.phoneNumber,
+					nickName:this.nickName,
+					password:this.password,
+					companyUserId:this.companyUserId
+				}
+				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>

+ 641 - 637
pages_course/becomeVIP.vue

@@ -1,638 +1,642 @@
-<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" @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,loginByMiniApp,checkUserInfo,editUser} from '@/api/user'
-	import {handleFsUserWx,registerCourses} from '@/api/courseLook.js'
-	export default {
-		data() {
-			return {
-				isVip: 0,
-				isWechat: false,
-				isLogin: false,
-				companyid:'',
-				companyUserId:'',
-				userInfo:{},
-				tagIds:[],
-				isbecomevip:0,
-				viptext:'申请成为会员',
-				userlogo:false,
-				userinfos:{
-					nickname:'',
-					avatar:""
-				},
-				headImg:'',
-				authType:0,//0微信登录 1手机号登录
-				userdisabled:false,
-				projectId:'',
-				H5course:{}
-			}
-		},
-		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
-			},
-		},
-		async onLoad(option) {
-			uni.$on('usercode',(data)=>{
-				console.log('huoqu ',data)
-				this.goLogin(data)
-			})
-			uni.$on('vipMsg',(data)=>{
-				console.log('vipMsg ',data)
-				this.viptext=data
-			})
-			// let path = 'https://userapp.fbylive.com'//福本源
-			// let path = 'https://userapp.zkhj6.com'//中康
-			// let path = 'https://company.h5.test.ylrztop.com/api'//云融融智
-			// let path = 'https://userapp.ashyisheng.com'//蜂巢快药
-			let path = 'https://userapp.whhm.ylrzcloud.com/prod-api'//惠名大药房
-			// let path = 'https://userapp.xdtongshuntang.top'//同顺堂
-			// let path = 'https://userapp.liangmiaoedu.com'//良苗
-			// let path = 'https://usercourse.beliyostore.com'//倍力优
-			// let path = 'https://userapp.bainian1000y.cn/prod-api'//百年康城
-			// let path = 'https://userapp.drkzyy.cn/prod-api'//青岛市德瑞康
-			// let path = 'https://userappkyt.ylrzcloud.com'//宽益堂
-			// let path = 'https://userapp.bjyjbao.com'//医建宝
-			uni.setStorageSync('requestPath',path)
-			if(uni.getStorageSync('userInfo')&&uni.getStorageSync('userInfo')!='{}') {
-				this.userInfo = 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
-			this.H5course.companyId=option.companyId
-			this.H5course.companyUserId=option.companyUserId
-			this.H5course.projectId=option.projectId
-			uni.setStorageSync('H5course',this.H5course)
-			//#ifdef MP-WEIXIN
-			// if(this.$store.state.logoname!=='乐氏本源'&&!uni.getStorageSync('userInfos')){
-			// 	this.userlogo=true
-			// }
-			if(!uni.getStorageSync('userinfos')&&this.$store.state.logoname=='乐氏本源'){
-				await this.$store.dispatch('getWebviewUrl');
-				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')&&uni.getStorageSync('userInfo')!='{}') {
-				this.userInfo = uni.getStorageSync('userInfo')
-			} else {
-				this.userInfo = {}
-			}
-			this.userinfos=uni.getStorageSync('userinfos')
-			let obj=uni.getStorageSync('TOKEN_WEXIN');
-			console.log(uni.getStorageSync('userinfos'))
-			this.isLogin = !!obj;
-			if(this.isLogin&&this.isVip!=1) {
-				this.registerCourse()
-			}
-			
-		},
-		methods: {
-			async goLogin(data) {
-				console.log('huoqu111',data)
-				if(data){
-					console.log('huoqu1222',data)
-					uni.showLoading({
-						title: '加载中'
-					})
-					uni.login({
-						provider: "weixin",
-						success: async loginRes => {
-							console.log(loginRes)
-							let code = loginRes.code // 获取开发code
-							handleFsUserWx({
-							   code: code,
-							   appId:this.appid,
-							   userId:data.userId
-							})
-							.then( res => {
-								if(res.code==200){
-									console.log(res)
-									uni.hideLoading();
-									uni.showToast({
-										icon:'none',
-										title: "登录成功",
-									});
-									this.userinfos=uni.getStorageSync('userinfos')
-									uni.getStorageSync('TOKEN_WEXIN');
-									this.userInfo=uni.getStorageSync('userInfo');
-									this.isLogin = true
-									setTimeout(()=>{
-										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,
-									});
-								}
-							   
-							 })
-						},
-					})
-				}else{
-					await this.$store.dispatch('getWebviewUrl');
-					uni.navigateTo({
-						url:'/pages_course/webview?H5course='+uni.getStorageSync('H5course')
-					})
-				}
-				
-			},
-			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
-			},
-			async nato(){
-				await this.$store.dispatch('getWebviewUrl');
-				uni.navigateTo({
-					url:'/pages_course/webview'
-				})
-			},
-			handleAgree(){
-				console.log(144443)
-				if(this.isVip==1){
-					uni.showToast({
-						title: '您已成为会员!',
-						icon: 'none',
-						duration: 2000,
-					})
-				}else{
-					this.goLogin()
-					uni.showToast({
-						title: this.viptext,
-						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>
-	page{
-		background-color: #fff;
-	}
-	.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);
-		}
-	}
+<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" @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,loginByMiniApp,checkUserInfo,editUser} from '@/api/user'
+	import {handleFsUserWx,registerCourses} from '@/api/courseLook.js'
+	export default {
+		data() {
+			return {
+				isVip: 0,
+				isWechat: false,
+				isLogin: false,
+				companyid:'',
+				companyUserId:'',
+				userInfo:{},
+				tagIds:[],
+				isbecomevip:0,
+				viptext:'申请成为会员',
+				userlogo:false,
+				userinfos:{
+					nickname:'',
+					avatar:""
+				},
+				headImg:'',
+				authType:0,//0微信登录 1手机号登录
+				userdisabled:false,
+				projectId:'',
+				H5course:{}
+			}
+		},
+		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
+			},
+		},
+		async onLoad(option) {
+			uni.$on('usercode',(data)=>{
+				console.log('huoqu ',data)
+				this.goLogin(data)
+			})
+			uni.$on('vipMsg',(data)=>{
+				console.log('vipMsg ',data)
+				this.viptext=data
+			})
+			// let path = 'https://userapp.fbylive.com'//福本源
+			// let path = 'https://userapp.zkhj6.com'//中康
+			// let path = 'https://company.h5.test.ylrztop.com/api'//云融融智
+			// let path = 'https://userapp.ashyisheng.com'//蜂巢快药
+			let path = 'https://userapp.whhm.ylrzcloud.com/prod-api'//惠名大药房
+			// let path = 'https://userapp.xdtongshuntang.top'//同顺堂
+			// let path = 'https://userapp.liangmiaoedu.com'//良苗
+			// let path = 'https://usercourse.beliyostore.com'//倍力优
+			// let path = 'https://userapp.bainian1000y.cn/prod-api'//百年康城
+			// let path = 'https://userapp.drkzyy.cn/prod-api'//青岛市德瑞康
+			// let path = 'https://userappkyt.ylrzcloud.com'//宽益堂
+			// let path = 'https://userapp.bjyjbao.com'//医建宝
+			uni.setStorageSync('requestPath',path)
+			if(uni.getStorageSync('userInfo')&&uni.getStorageSync('userInfo')!='{}') {
+				this.userInfo = 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;
+			let becomeVip=''
+			if(!option.becomeVip){
+				const keys = decodeURIComponent(Object.keys(option)[0]);
+				becomeVip=JSON.parse(keys.split('becomeVip=')[1])
+				console.log(becomeVip)
+			}else{
+				becomeVip = option.becomeVip ? JSON.parse(option.becomeVip) : {}
+			}
+			console.log(becomeVip)
+			this.isLogin = !!obj;
+			this.companyid = becomeVip.companyId || ''
+			this.companyUserId=becomeVip.companyUserId || 0
+			this.projectId=becomeVip.projectId
+			this.H5course.companyId=becomeVip.companyId
+			this.H5course.companyUserId=becomeVip.companyUserId
+			this.H5course.projectId=becomeVip.projectId
+			uni.setStorageSync('H5course',this.H5course)
+			console.log(this.H5course)
+			//#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
+			}
+			//#endif
+			if(becomeVip.tagids==null||becomeVip.tagids==''){
+				this.tagIds=[]
+			}else{
+				this.tagIds=becomeVip.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')&&uni.getStorageSync('userInfo')!='{}') {
+				this.userInfo = uni.getStorageSync('userInfo')
+			} else {
+				this.userInfo = {}
+			}
+			this.userinfos=uni.getStorageSync('userinfos')
+			let obj=uni.getStorageSync('TOKEN_WEXIN');
+			console.log(uni.getStorageSync('userinfos'))
+			this.isLogin = !!obj;
+			if(this.isLogin&&this.isVip!=1) {
+				this.registerCourse()
+			}
+			if(!this.userInfo.userId){
+				this.goLogin()
+			}
+		},
+		methods: {
+			async goLogin(data) {
+				console.log('huoqu111',data)
+				if(data){
+					console.log('huoqu1222',data)
+					uni.showLoading({
+						title: '加载中'
+					})
+					uni.login({
+						provider: "weixin",
+						success: async loginRes => {
+							console.log(loginRes)
+							let code = loginRes.code // 获取开发code
+							handleFsUserWx({
+							   code: code,
+							   appId:this.appid,
+							   userId:data.userId
+							})
+							.then( res => {
+								if(res.code==200){
+									console.log(res)
+									uni.hideLoading();
+									uni.showToast({
+										icon:'none',
+										title: "登录成功",
+									});
+									this.userinfos=uni.getStorageSync('userinfos')
+									uni.getStorageSync('TOKEN_WEXIN');
+									this.userInfo=uni.getStorageSync('userInfo');
+									this.isLogin = true
+									setTimeout(()=>{
+										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,
+									});
+								}
+							   
+							 })
+						},
+					})
+				}else{
+					await this.$store.dispatch('getWebviewUrl');
+					uni.navigateTo({
+						url:'/pages_course/webview?H5course='+uni.getStorageSync('H5course')
+					})
+				}
+				
+			},
+			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
+			},
+			async nato(){
+				await this.$store.dispatch('getWebviewUrl');
+				uni.navigateTo({
+					url:'/pages_course/webview'
+				})
+			},
+			handleAgree(){
+				console.log(144443)
+				if(this.isVip==1){
+					uni.showToast({
+						title: '您已成为会员!',
+						icon: 'none',
+						duration: 2000,
+					})
+				}else{
+					this.goLogin()
+					uni.showToast({
+						title: this.viptext,
+						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>
+	page{
+		background-color: #fff;
+	}
+	.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>

+ 704 - 704
pages_course/components/commentBox.vue

@@ -1,705 +1,705 @@
-<template>
-	<view>
-		<template v-if="openCommentStatus==2">
-			<!-- <text v-for="(item, index) in activeDanmus" :key="item.commentId" class="danmu-item danmuMove"
-				:style="{
-				  top: item.top + 'px',
-				  ...item.style,
-				  'animation-duration': '8s'
-				 }" @animationend="animationend(item,index)">
-				{{ item.content }}
-			</text> -->
-		</template>
-		<view class="container-body" id="msglist" v-if="openCommentStatus==1">
-			<view class="listbox" v-for="(item, index) in msgs" :key="index" :id="'view' + index">
-				<text :class="userId&&item.userId == userId?'list-name my':'list-name'">
-					{{userId&&item.userId == userId ? '我' : item.nickName||'--'}}:
-				</text>
-				<text class="list-con">{{item.content||''}}</text>
-			</view>
-			<view class="empty" v-if="msgs&&msgs.length==0">暂无评论~</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import { saveMsg,revokeMsg,getComments} from "@/api/courseAuto.js"
-	export default {
-		props: {
-			height:{
-				type: String,
-				default:'0px'
-			},
-			urlOption:{
-				type: Object,
-				default:{}
-			},
-			time:{
-				type: [String,Number],
-				default: 0
-			},
-			viewCommentNum:{
-				type: [String,Number],
-				default: 200
-			},
-			openCommentStatus:{
-				type: [String,Number],
-				default: 3
-			},
-			//  用户自己开启关闭弹幕展示 1,展示弹幕,0 关闭的弹幕
-			showDanmu:{
-				type: [String,Number],
-				default: 1
-			},
-		},
-		data() {
-			return {
-				statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
-				scrollTop: 0,
-				inputText:"",
-				isSocketOpen:false,
-				socket:null,
-				isSend:true,
-				commentList:[],
-				msgs: [],
-				pageNum: 1,
-				pageSize: 10,
-				userInfo: {},
-				userId: '',
-				pingpangTimes:null,
-				// 弹幕
-				danmuList: [],
-				tracks:[],
-				activeDanmus:[],
-				flagTime: 0,
-				danmuItemStyle:{
-					color: '#ffffff',
-					fontSize: '16px',
-					border: 'solid 1px #ffffff',
-					borderRadius: '5px',
-					padding: '2px 2px',
-					backgroundColor: 'rgba(255, 255, 255, 0.1)'
-				},
-				ctx: null,
-				danmuIndex:{}
-			}
-		},
-		mounted() {
-			this.getCommentsFun()
-			this.getUser();
-			this.initTracks()
-			if(!this.socket || !this.isSocketOpen) {
-				this.initSocket()
-			}
-		},
-		methods: {
-			back() {
-				uni.navigateBack()
-			},
-			getUser() {
-				const userInfo = uni.getStorageSync('userInfo');
-				if(userInfo&&JSON.stringify(userInfo)!='{}') {
-					this.userInfo = JSON.parse(userInfo)
-					this.userId = this.userInfo.userId || ''
-				}else {
-					this.userInfo = {}
-					this.userId = ''
-				}
-			},
-			getCommentsFun() {
-				let that = this
-				getComments({
-					pageNum: this.openCommentStatus==2 ? 1 : this.pageNum,
-					pageSize: this.openCommentStatus==2 ? this.viewCommentNum : this.pageSize,
-					courseId: this.urlOption.courseId,
-					videoId: this.urlOption.videoId,
-					openCommentStatus: this.openCommentStatus
-				}).then(res=>{
-					if(res.code==200){
-						if(this.openCommentStatus==2) {
-							this.danmuList = res.data.list.map(item=>({
-								commentId: item.commentId,
-								content: item.content,
-								time: item.time || this.time,
-								color: "#FFFFFF",
-								mode: item.mode || "scroll",
-								top: null,
-								style: {
-									color: item.isColor==1 ? item.color || this.danmuItemStyle.color : this.danmuItemStyle.color,//是否彩色1是0否
-									fontSize: item.fontSize || this.danmuItemStyle.fontSize, 
-									padding: this.danmuItemStyle.padding,
-									border:this.userInfo.userId ==item.userId ? item.color ? `solid 1px ${item.color}`: this.danmuItemStyle.border : 'none',
-									borderRadius: this.userInfo.userId==item.userId ? this.danmuItemStyle.borderRadius : 0,
-									backgroundColor: this.userInfo.userId==item.userId ? this.danmuItemStyle.backgroundColor : 'transparent'
-								},
-							}))
-							this.initDanmuIndex()
-							that.$emit('getMore',0)
-						} else if(this.openCommentStatus==1) {
-							this.danmuList = []
-							this.activeDanmus = []
-							this.danmuIndex = {};
-							let list = res.data.list.reverse()
-							if (that.pageNum == 1) {
-								that.commentList = list; 
-								that.handleScrollBottom();
-							} else {
-								that.commentList = that.commentList.concat(list);
-							}
-							that.msgs = [...list,...that.msgs]
-							if(that.commentList.length >= res.data.total || that.commentList.length >= Number(this.viewCommentNum||200)) {
-								that.$emit('getMore',1)
-							} else {
-								this.pageNum++
-								that.$emit('getMore',0)
-							}
-						} else {
-							that.danmuList = []
-							that.activeDanmus = []
-							that.danmuIndex = {};
-							that.commentList = [];
-							that.msgs = that.msgs;
-							that.$emit('getMore',0);
-						}
-					}
-					else{
-						that.danmuList = []
-						that.danmuIndex = {};
-						that.commentList = [];
-						that.msgs = that.msgs;
-						that.$emit('getMore',0);
-					}
-				})
-			},
-			saveMsg() {
-				if (this.inputText == "" || this.inputText.trim() == "") {
-					uni.showToast({
-						title: '请输入评论',
-						icon: "none"
-					})
-					return;
-				}
-				if (!this.isSend) {
-					return;
-				}
-				const param = {
-					userId: this.userId || '',
-					userType: 2, // 1-管理员,2-用户
-					courseId: this.urlOption.courseId,
-					videoId: this.urlOption.videoId,
-					type:1, // 评论类型 1:评论,2:回复,目前没有回复,默认传1就行了
-					content: this.inputText,
-					time: this.time,
-					fontSize: '16px',
-					mode: "scroll",
-					color: "#ffffff",
-				}
-				saveMsg(param).then(res=>{
-					if(res.code == 200) {
-						const status = res.status ? 0 : 1
-						this.sendMsg(param,status);
-					} else {
-						uni.showToast({
-							title: res.msg,
-							icon: "none"
-						})
-					}
-				})
-			},
-			handleInput(val) {
-				this.inputText = val
-				if(!this.isSocketOpen) {
-					// 重新发起会话
-					this.initSocket('reStart')
-				} else {
-					this.saveMsg();
-				}
-			},
-			handleScrollBottom() {
-				setTimeout(() => {
-					const query = uni.createSelectorQuery().in(this);
-					query.select('#msglist')
-						.boundingClientRect((res) => {
-							if(res) {
-								const scrollH = res.height;
-								this.scrollTop = res.height;
-								this.$emit('getScrollTop',this.scrollTop)
-							}
-						}).exec();
-				},500);
-			},
-			initSocket(type) { 
-				//创建一个socket连接
-				var userId = this.userInfo.userId;
-				var that = this;
-				if (this.socket) {
-					this.socket.close()
-					this.socket = null;
-				}
-				this.socket = uni.connectSocket({
-					url: this.$store.state.wsDanmuUrl + "/app/webSocket/" + userId,
-					multiple: true,
-					success: res => {
-						console.log('WebSocket连接已打开1!');
-						that.isSocketOpen = true
-						// 保持心跳
-						if(that.pingpangTimes) {
-							clearInterval(that.pingpangTimes)
-							that.pingpangTimes= null
-						}
-						that.pingpangTimes=setInterval(()=>{
-							let data={
-								userId: that.userId || '',
-								userType: 2, // 1-管理员,2-用户
-								courseId: that.urlOption.courseId,
-								videoId: that.urlOption.videoId,
-								type:1, // 评论类型 1:评论,2:回复,目前没有回复,默认传1就行了
-								// msg: that.inputText,
-								cmd:'heartbeat'
-							};
-							that.socket.send({
-								data: JSON.stringify(data),
-								success: () => {
-									// console.log('WebSocket发送心条数据!');
-								},
-								fail: () => {
-									that.isSocketOpen=false
-								}
-							});
-						},15000)
-					},
-					error: res => {
-						console.log(res)
-					},
-				})
-				this.socket.onMessage((res) => {
-					console.log("收到消息parse",JSON.parse(res.data))
-					const redata = JSON.parse(res.data);
-					if(redata.cmd=="heartbeat"){
-						  //心跳
-						  // console.log("heartbeat")
-					}else if(redata.cmd=="sendMsg"){
-						that.isSend=true;
-						that.addMsg(redata);
-					}
-				})
-				//监听socket打开
-				this.socket.onOpen(() => {
-					console.log('WebSocket连接已打开2!');
-					that.isSocketOpen = true
-					that.isSend = true;
-					if(type=='reStart') {
-						// 重连的时候重新发消息
-						this.saveMsg()
-					}
-				})
-				//监听socket关闭
-				this.socket.onClose(() => {
-					that.isSocketOpen = false
-					that.socket = null
-					console.log('WebSocket连接已关闭!');
-					if(that.pingpangTimes) {
-						clearInterval(that.pingpangTimes)
-						that.pingpangTimes= null
-					}
-				})
-				//监听socket错误
-				this.socket.onError((err) => {
-					console.log("socket err:",err)
-					that.isSocketOpen = false
-					that.socket = null
-					if(that.pingpangTimes) {
-						clearInterval(that.pingpangTimes)
-						that.pingpangTimes= null
-					}
-				})
-			},
-			sendMsg(param,status) {
-				if(status == 1) {
-					this.isSend = true;
-					this.addMsg({msg: param.content,time: param.time},2)
-					return
-				}
-				if (this.isSocketOpen) {
-					var userId = this.userInfo.userId;
-					var data = {
-						userId: this.userId || '',
-						userType: 2, // 1-管理员,2-用户
-						courseId: this.urlOption.courseId,
-						videoId: this.urlOption.videoId,
-						type:1, // 评论类型 1:评论,2:回复,目前没有回复,默认传1就行了
-						msg: param.content,
-						cmd: 'sendMsg',
-						time: param.time,
-						fontSize: '16px',
-						mode: "scroll",
-						color: "#ffffff",
-					};
-					this.socket.send({
-						data: JSON.stringify(data),
-						success: () => {
-							console.log("发送成功")
-							this.isSend = false;
-						},
-						fail: () => {
-							console.log("发送失败")
-						}
-					});
-			
-				}
-			
-			},
-			addMsg(data,type) {
-				let obj  = {}
-				if (type==2) {
-					obj = {
-						content: data.msg,
-						courseId: this.urlOption.courseId,
-						type: 1,
-						userId: this.userId,
-						userType: 2,
-						videoId: this.urlOption.videoId,
-						nickName: '',
-						time: data.time,
-						fontSize: data.fontSize,
-						mode: data.mode,
-						color: data.color,
-					}
-				} else {
-					obj = {
-						content: data.msg,
-						courseId: this.urlOption.courseId,
-						type: data.type,
-						userId: data.userId,
-						userType: data.userType,
-						videoId: this.urlOption.videoId,
-						nickName: data.nickName,
-						time: data.time,
-						fontSize: data.fontSize,
-						mode: data.mode,
-						color: data.color,
-					}
-				}
-				if(this.openCommentStatus == 1){
-					this.msgs.push(obj)
-					this.handleScrollBottom();
-				} else if(this.openCommentStatus == 2) {
-					this.addDanmuMsg(obj)
-				}
-				this.inputText = ""
-				this.$emit("setInputText")
-			},
-			addDanmuMsg(content) {
-				const id = content.userId +'_' + new Date().getTime()
-				const mystyle = {
-					color: content.color || this.danmuItemStyle.color,
-					fontSize: content.fontSize || this.danmuItemStyle.fontSize,
-					border: content.color ? `solid 1px ${content.color}`: this.danmuItemStyle.border,
-					borderRadius: this.danmuItemStyle.borderRadius,
-					padding: this.danmuItemStyle.padding,
-					backgroundColor: this.danmuItemStyle.backgroundColor
-				}
-				const otherstyle = {
-					color: content.color || this.danmuItemStyle.color,
-					fontSize: content.fontSize || this.danmuItemStyle.fontSize,
-					padding: this.danmuItemStyle.padding,
-				}
-				const mode = content.mode || "scroll"
-				const obj = {
-					commentId: content.commentId || id,
-					userId: content.userId,
-					content: content.content,
-					time: this.flagTime + 1,
-					color: content.color || this.danmuItemStyle.color,
-					style: this.userInfo.userId == content.userId ? mystyle : otherstyle,
-					top: null
-				}
-				if(this.showDanmu == 0) return
-
-				// 如果danmuList超过最大大小,移除旧的弹幕
-				const maxDanmuListSize = 10000; // 设置最大大小
-				if (this.danmuList.length >= maxDanmuListSize) {
-					this.danmuList.shift(); // 移除最旧的弹幕
-				}
-				this.danmuList.push(obj);
-			
-				// 更新索引
-				if (!this.danmuIndex[obj.time]) {
-					this.danmuIndex[obj.time] = [];
-				}
-				this.danmuIndex[obj.time].push(obj);
-			},
-			closeWSocket() {
-				if(this.socket!=null){
-					this.socket.close()
-				}
-				if(this.pingpangTimes) {
-					clearInterval(this.pingpangTimes)
-					this.pingpangTimes= null
-				}
-			},
-			initTracks() {
-				this.tracks = [];
-				const trackHeight = 22; // 每行高度
-				const trackCount = 3;
-				for (let i = 0; i < trackCount; i++) {
-					this.tracks.push({
-						top: i * trackHeight + 10,
-						isFree: true,
-						releaseTime: 0 // 轨道释放时间
-					});
-				}
-			},
-			// 获取字体高度
-			getTextWidth(content) {
-				if (!this.ctx) {
-					this.ctx = uni.createCanvasContext('myCanvas')
-				}
-				const metrics = this.ctx.measureText(content)
-				return Math.ceil(metrics.width)
-			},
-			// 分配轨道
-			getFreeTrack(item) {
-				const screenWidth = uni.getSystemInfoSync().screenWidth;
-				const width = this.getTextWidth(item.content);
-				const passWidth = width + screenWidth;
-				const duration = 8; // 持续时间(秒)
-				const currentTime = Date.now();
-			
-				for (let i = 0; i < this.tracks.length; i++) {
-					if (this.tracks[i].isFree || this.tracks[i].releaseTime <= currentTime) {
-						this.tracks[i].isFree = false;
-						this.tracks[i].releaseTime = currentTime + Math.ceil(duration * 1000 / passWidth * width) + 1000;
-						return this.tracks[i].top;
-					}
-				}
-			
-				// 无可用轨道
-				if (this.userInfo.userId && item.userId == this.userInfo.userId) {
-					// console.log("自己发的弹幕");
-					let trackHeight = this.tracks[this.tracks.length - 1].top;
-					return Math.random() * trackHeight + 16; // 自己发的弹幕随机高度
-				} else {
-					// console.log("无可用轨道");
-					return 'abandon';
-				}
-			},
-			// 初始化时建立索引
-			initDanmuIndex() {
-			    this.danmuIndex = {};
-			    this.danmuList.forEach((item) => {
-			        if (!this.danmuIndex[item.time]) {
-			            this.danmuIndex[item.time] = [];
-			        }
-			        this.danmuIndex[item.time].push(item);
-			    });
-			},
-			// 检测并激活弹幕
-			checkDanmu(flagTime) {
-				this.flagTime = flagTime;
-				if(this.showDanmu == 0) return;
-				const newDanmus = this.danmuList.filter((item) => Math.abs(item.time - this.flagTime) < 1);
-				// 分配轨道高度
-				const aliveNewDanmus = newDanmus.map((item) => {
-					if (!item.top) {
-						item.top = this.getFreeTrack(item);
-					}
-					return item;
-				}).filter((item) => item.top !== 'abandon');
-				// 添加到活跃列表
-				this.activeDanmus = [...this.activeDanmus, ...aliveNewDanmus];
-				this.$emit("getActiveDanmus",this.activeDanmus)
-			},
-			animationend(moveItem, i) {
-				// 移除动画结束的弹幕(性能优化)
-				this.activeDanmus = this.activeDanmus.filter((item) => item.commentId !== moveItem.commentId)
-				this.$emit("getActiveDanmus",this.activeDanmus)
-			},
-		},
-		beforeDestroy() {
-			if(this.socket!=null){
-				this.socket.close()
-			}
-			if(this.pingpangTimes) {
-				clearInterval(this.pingpangTimes)
-				this.pingpangTimes= null
-			}
-		}
-	}
-</script>
-
-<style scoped lang="scss">
-	@mixin u-flex($flexD, $alignI, $justifyC) {
-		display: flex;
-		flex-direction: $flexD;
-		align-items: $alignI;
-		justify-content: $justifyC;
-	}
-	.empty {
-		@include u-flex(row, center, center);
-		padding: 24rpx 50rpx;
-		color: #999999;
-	}
-	.listbox {
-		white-space: pre-wrap;
-		letter-spacing: 1px;
-		margin-bottom: 16rpx;
-	}
-	.list-name {
-		flex-shrink: 0;
-		font-family: PingFang SC, PingFang SC;
-		font-weight: 600;
-		font-size: 28rpx;
-		color: #222222;
-		margin-right: 16rpx;
-	}
-	.my {
-		color: #FF5C03;
-	}
-	.list-con {
-		font-family: PingFang SC, PingFang SC;
-		font-size: 28rpx;
-		color: #222222;
-	}
-	.nav-bar {
-		position: fixed;
-		z-index: 9999;
-		top: 0;
-		left: 0;
-		width: 100%;
-		overflow: hidden;
-
-		.nav-bg {
-			width: 100%;
-			height: 100%;
-			position: absolute;
-			left: 0;
-			top: 0;
-			z-index: 1;
-			background-color: #fff;
-		}
-
-		&-box {
-			position: relative;
-			padding: 0 24rpx;
-			@include u-flex(row, center, flex-start);
-			height: 88rpx;
-			box-sizing: border-box;
-			z-index: 3;
-		}
-
-		&-left {
-			width: 100%;
-			@include u-flex(row, center, flex-start);
-			overflow: hidden;
-
-			image {
-				flex-shrink: 0;
-				width: 64rpx;
-				height: 64rpx;
-				border-radius: 12rpx 12rpx 12rpx 12rpx;
-			}
-		}
-
-		&-name {
-			font-family: PingFang SC, PingFang SC;
-			font-weight: 600;
-			font-size: 28rpx;
-			color: #222222;
-		}
-
-		&-head {
-			flex: 1;
-			overflow: hidden;
-			margin-left: 22rpx;
-			margin-right: 22rpx;
-			font-family: PingFang SC, PingFang SC;
-			font-weight: 400;
-			font-size: 23rpx;
-			color: #999999;
-		}
-	}
-
-	.page-bg {
-		position: absolute;
-		top: 0;
-		left: 0;
-	}
-
-	.container-body {
-		padding: 32rpx 30rpx;
-		box-sizing: border-box;
-	}
-
-	.TUI-message-list {
-		width: 100%;
-		box-sizing: border-box;
-	}
-	.chatinput {
-		position: fixed;
-		left: 32rpx;
-		right: 32rpx;
-		z-index: 999;
-		bottom: calc(var(--window-bottom) + 24rpx);
-		height: 96rpx;
-		background-color: green;
-		background: #FFFFFF;
-		box-shadow: 0rpx 8rpx 21rpx 0rpx rgba(0, 0, 0, 0.1);
-		border-radius: 24rpx 24rpx 24rpx 24rpx;
-		@include u-flex(row, center, center);
-		padding: 0 24rpx;
-		box-sizing: border-box;
-		.uni-input {
-			flex: 1;
-			margin-right: 32rpx;
-			font-size: 30rpx;
-		}
-	
-		.send {
-			font-family: PingFang SC, PingFang SC;
-			font-weight: 400;
-			font-size: 28rpx;
-			color: #FFFFFF !important;
-			flex-shrink: 0;
-			padding: 0 20rpx;
-			height: 72rpx;
-			background: #FF5C03 !important;
-			border-radius: 8rpx 8rpx 8rpx 8rpx;
-			&::after {
-				border: none;
-			}
-		}
-	}
-	// .danmu-item {
-	// 	position: absolute;
-	// 	top: 0;
-	// 	white-space: nowrap;
-	// 	font-size: 16px;
-	// 	height: 20px;
-	// 	display: inline-flex;
-	// 	box-sizing: border-box;
-	// 	align-items: center;
-	// }
-	// .danmuMove {
-	// 	// animation: mymove 8s linear forwards;
-	// 	// animation-duration: 8s;
-	// 	animation-timing-function: linear;
-	// 	animation-delay: 0s;
-	// 	animation-iteration-count: 1;
-	// 	animation-direction: normal;
-	// 	animation-fill-mode: forwards;
-	// 	animation-play-state: running;
-	// 	animation-name: mymove;
-	// 	will-change: transform;
-	// }
-	
-	// @keyframes mymove {
-	// 	from {
-	// 		transform: translateX(100vw);
-	// 	}
-	
-	// 	to {
-	// 		transform: translateX(-100%);
-	// 	}
-	// }
+<template>
+	<view>
+		<template v-if="openCommentStatus==2">
+			<!-- <text v-for="(item, index) in activeDanmus" :key="item.commentId" class="danmu-item danmuMove"
+				:style="{
+				  top: item.top + 'px',
+				  ...item.style,
+				  'animation-duration': '8s'
+				 }" @animationend="animationend(item,index)">
+				{{ item.content }}
+			</text> -->
+		</template>
+		<view class="container-body" id="msglist" v-if="openCommentStatus==1">
+			<view class="listbox" v-for="(item, index) in msgs" :key="index" :id="'view' + index">
+				<text :class="userId&&item.userId == userId?'list-name my':'list-name'">
+					{{userId&&item.userId == userId ? '我' : item.nickName||'--'}}:
+				</text>
+				<text class="list-con">{{item.content||''}}</text>
+			</view>
+			<view class="empty" v-if="msgs&&msgs.length==0">暂无评论~</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { saveMsg,revokeMsg,getComments} from "@/api/courseAuto.js"
+	export default {
+		props: {
+			height:{
+				type: String,
+				default:'0px'
+			},
+			urlOption:{
+				type: Object,
+				default:{}
+			},
+			time:{
+				type: [String,Number],
+				default: 0
+			},
+			viewCommentNum:{
+				type: [String,Number],
+				default: 200
+			},
+			openCommentStatus:{
+				type: [String,Number],
+				default: 3
+			},
+			//  用户自己开启关闭弹幕展示 1,展示弹幕,0 关闭的弹幕
+			showDanmu:{
+				type: [String,Number],
+				default: 1
+			},
+		},
+		data() {
+			return {
+				statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
+				scrollTop: 0,
+				inputText:"",
+				isSocketOpen:false,
+				socket:null,
+				isSend:true,
+				commentList:[],
+				msgs: [],
+				pageNum: 1,
+				pageSize: 10,
+				userInfo: {},
+				userId: '',
+				pingpangTimes:null,
+				// 弹幕
+				danmuList: [],
+				tracks:[],
+				activeDanmus:[],
+				flagTime: 0,
+				danmuItemStyle:{
+					color: '#ffffff',
+					fontSize: '16px',
+					border: 'solid 1px #ffffff',
+					borderRadius: '5px',
+					padding: '2px 2px',
+					backgroundColor: 'rgba(255, 255, 255, 0.1)'
+				},
+				ctx: null,
+				danmuIndex:{}
+			}
+		},
+		mounted() {
+			this.getCommentsFun()
+			this.getUser();
+			this.initTracks()
+			if(!this.socket || !this.isSocketOpen) {
+				this.initSocket()
+			}
+		},
+		methods: {
+			back() {
+				uni.navigateBack()
+			},
+			getUser() {
+				const userInfo = uni.getStorageSync('userInfo');
+				if(userInfo&&JSON.stringify(userInfo)!='{}') {
+					this.userInfo = JSON.parse(userInfo)
+					this.userId = this.userInfo.userId || ''
+				}else {
+					this.userInfo = {}
+					this.userId = ''
+				}
+			},
+			getCommentsFun() {
+				let that = this
+				getComments({
+					pageNum: this.openCommentStatus==2 ? 1 : this.pageNum,
+					pageSize: this.openCommentStatus==2 ? this.viewCommentNum : this.pageSize,
+					courseId: this.urlOption.courseId,
+					videoId: this.urlOption.videoId,
+					openCommentStatus: this.openCommentStatus
+				}).then(res=>{
+					if(res.code==200){
+						if(this.openCommentStatus==2) {
+							this.danmuList = res.data.list.map(item=>({
+								commentId: item.commentId,
+								content: item.content,
+								time: item.time || this.time,
+								color: "#FFFFFF",
+								mode: item.mode || "scroll",
+								top: null,
+								style: {
+									color: item.isColor==1 ? item.color || this.danmuItemStyle.color : this.danmuItemStyle.color,//是否彩色1是0否
+									fontSize: item.fontSize || this.danmuItemStyle.fontSize, 
+									padding: this.danmuItemStyle.padding,
+									border:this.userInfo.userId ==item.userId ? item.color ? `solid 1px ${item.color}`: this.danmuItemStyle.border : 'none',
+									borderRadius: this.userInfo.userId==item.userId ? this.danmuItemStyle.borderRadius : 0,
+									backgroundColor: this.userInfo.userId==item.userId ? this.danmuItemStyle.backgroundColor : 'transparent'
+								},
+							}))
+							this.initDanmuIndex()
+							that.$emit('getMore',0)
+						} else if(this.openCommentStatus==1) {
+							this.danmuList = []
+							this.activeDanmus = []
+							this.danmuIndex = {};
+							let list = res.data.list.reverse()
+							if (that.pageNum == 1) {
+								that.commentList = list; 
+								that.handleScrollBottom();
+							} else {
+								that.commentList = that.commentList.concat(list);
+							}
+							that.msgs = [...list,...that.msgs]
+							if(that.commentList.length >= res.data.total || that.commentList.length >= Number(this.viewCommentNum||200)) {
+								that.$emit('getMore',1)
+							} else {
+								this.pageNum++
+								that.$emit('getMore',0)
+							}
+						} else {
+							that.danmuList = []
+							that.activeDanmus = []
+							that.danmuIndex = {};
+							that.commentList = [];
+							that.msgs = that.msgs;
+							that.$emit('getMore',0);
+						}
+					}
+					else{
+						that.danmuList = []
+						that.danmuIndex = {};
+						that.commentList = [];
+						that.msgs = that.msgs;
+						that.$emit('getMore',0);
+					}
+				})
+			},
+			saveMsg() {
+				if (this.inputText == "" || this.inputText.trim() == "") {
+					uni.showToast({
+						title: '请输入评论',
+						icon: "none"
+					})
+					return;
+				}
+				if (!this.isSend) {
+					return;
+				}
+				const param = {
+					userId: this.userId || '',
+					userType: 2, // 1-管理员,2-用户
+					courseId: this.urlOption.courseId,
+					videoId: this.urlOption.videoId,
+					type:1, // 评论类型 1:评论,2:回复,目前没有回复,默认传1就行了
+					content: this.inputText,
+					time: this.time,
+					fontSize: '16px',
+					mode: "scroll",
+					color: "#ffffff",
+				}
+				saveMsg(param).then(res=>{
+					if(res.code == 200) {
+						const status = res.status ? 0 : 1
+						this.sendMsg(param,status);
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: "none"
+						})
+					}
+				})
+			},
+			handleInput(val) {
+				this.inputText = val
+				if(!this.isSocketOpen) {
+					// 重新发起会话
+					this.initSocket('reStart')
+				} else {
+					this.saveMsg();
+				}
+			},
+			handleScrollBottom() {
+				setTimeout(() => {
+					const query = uni.createSelectorQuery().in(this);
+					query.select('#msglist')
+						.boundingClientRect((res) => {
+							if(res) {
+								const scrollH = res.height;
+								this.scrollTop = res.height;
+								this.$emit('getScrollTop',this.scrollTop)
+							}
+						}).exec();
+				},500);
+			},
+			initSocket(type) { 
+				//创建一个socket连接
+				var userId = this.userInfo.userId;
+				var that = this;
+				if (this.socket) {
+					this.socket.close()
+					this.socket = null;
+				}
+				this.socket = uni.connectSocket({
+					url: this.$store.state.wsDanmuUrl + "/app/webSocket/" + userId,
+					multiple: true,
+					success: res => {
+						console.log('WebSocket连接已打开1!');
+						that.isSocketOpen = true
+						// 保持心跳
+						if(that.pingpangTimes) {
+							clearInterval(that.pingpangTimes)
+							that.pingpangTimes= null
+						}
+						that.pingpangTimes=setInterval(()=>{
+							let data={
+								userId: that.userId || '',
+								userType: 2, // 1-管理员,2-用户
+								courseId: that.urlOption.courseId,
+								videoId: that.urlOption.videoId,
+								type:1, // 评论类型 1:评论,2:回复,目前没有回复,默认传1就行了
+								// msg: that.inputText,
+								cmd:'heartbeat'
+							};
+							that.socket.send({
+								data: JSON.stringify(data),
+								success: () => {
+									// console.log('WebSocket发送心条数据!');
+								},
+								fail: () => {
+									that.isSocketOpen=false
+								}
+							});
+						},15000)
+					},
+					error: res => {
+						console.log(res)
+					},
+				})
+				this.socket.onMessage((res) => {
+					console.log("收到消息parse",JSON.parse(res.data))
+					const redata = JSON.parse(res.data);
+					if(redata.cmd=="heartbeat"){
+						  //心跳
+						  // console.log("heartbeat")
+					}else if(redata.cmd=="sendMsg"){
+						that.isSend=true;
+						that.addMsg(redata);
+					}
+				})
+				//监听socket打开
+				this.socket.onOpen(() => {
+					console.log('WebSocket连接已打开2!');
+					that.isSocketOpen = true
+					that.isSend = true;
+					if(type=='reStart') {
+						// 重连的时候重新发消息
+						this.saveMsg()
+					}
+				})
+				//监听socket关闭
+				this.socket.onClose(() => {
+					that.isSocketOpen = false
+					that.socket = null
+					console.log('WebSocket连接已关闭!');
+					if(that.pingpangTimes) {
+						clearInterval(that.pingpangTimes)
+						that.pingpangTimes= null
+					}
+				})
+				//监听socket错误
+				this.socket.onError((err) => {
+					console.log("socket err:",err)
+					that.isSocketOpen = false
+					that.socket = null
+					if(that.pingpangTimes) {
+						clearInterval(that.pingpangTimes)
+						that.pingpangTimes= null
+					}
+				})
+			},
+			sendMsg(param,status) {
+				if(status == 1) {
+					this.isSend = true;
+					this.addMsg({msg: param.content,time: param.time},2)
+					return
+				}
+				if (this.isSocketOpen) {
+					var userId = this.userInfo.userId;
+					var data = {
+						userId: this.userId || '',
+						userType: 2, // 1-管理员,2-用户
+						courseId: this.urlOption.courseId,
+						videoId: this.urlOption.videoId,
+						type:1, // 评论类型 1:评论,2:回复,目前没有回复,默认传1就行了
+						msg: param.content,
+						cmd: 'sendMsg',
+						time: param.time,
+						fontSize: '16px',
+						mode: "scroll",
+						color: "#ffffff",
+					};
+					this.socket.send({
+						data: JSON.stringify(data),
+						success: () => {
+							console.log("发送成功")
+							this.isSend = false;
+						},
+						fail: () => {
+							console.log("发送失败")
+						}
+					});
+			
+				}
+			
+			},
+			addMsg(data,type) {
+				let obj  = {}
+				if (type==2) {
+					obj = {
+						content: data.msg,
+						courseId: this.urlOption.courseId,
+						type: 1,
+						userId: this.userId,
+						userType: 2,
+						videoId: this.urlOption.videoId,
+						nickName: '',
+						time: data.time,
+						fontSize: data.fontSize,
+						mode: data.mode,
+						color: data.color,
+					}
+				} else {
+					obj = {
+						content: data.msg,
+						courseId: this.urlOption.courseId,
+						type: data.type,
+						userId: data.userId,
+						userType: data.userType,
+						videoId: this.urlOption.videoId,
+						nickName: data.nickName,
+						time: data.time,
+						fontSize: data.fontSize,
+						mode: data.mode,
+						color: data.color,
+					}
+				}
+				if(this.openCommentStatus == 1){
+					this.msgs.push(obj)
+					this.handleScrollBottom();
+				} else if(this.openCommentStatus == 2) {
+					this.addDanmuMsg(obj)
+				}
+				this.inputText = ""
+				this.$emit("setInputText")
+			},
+			addDanmuMsg(content) {
+				const id = content.userId +'_' + new Date().getTime()
+				const mystyle = {
+					color: content.color || this.danmuItemStyle.color,
+					fontSize: content.fontSize || this.danmuItemStyle.fontSize,
+					border: content.color ? `solid 1px ${content.color}`: this.danmuItemStyle.border,
+					borderRadius: this.danmuItemStyle.borderRadius,
+					padding: this.danmuItemStyle.padding,
+					backgroundColor: this.danmuItemStyle.backgroundColor
+				}
+				const otherstyle = {
+					color: content.color || this.danmuItemStyle.color,
+					fontSize: content.fontSize || this.danmuItemStyle.fontSize,
+					padding: this.danmuItemStyle.padding,
+				}
+				const mode = content.mode || "scroll"
+				const obj = {
+					commentId: content.commentId || id,
+					userId: content.userId,
+					content: content.content,
+					time: this.flagTime + 1,
+					color: content.color || this.danmuItemStyle.color,
+					style: this.userInfo.userId == content.userId ? mystyle : otherstyle,
+					top: null
+				}
+				if(this.showDanmu == 0) return
+
+				// 如果danmuList超过最大大小,移除旧的弹幕
+				const maxDanmuListSize = 10000; // 设置最大大小
+				if (this.danmuList.length >= maxDanmuListSize) {
+					this.danmuList.shift(); // 移除最旧的弹幕
+				}
+				this.danmuList.push(obj);
+			
+				// 更新索引
+				if (!this.danmuIndex[obj.time]) {
+					this.danmuIndex[obj.time] = [];
+				}
+				this.danmuIndex[obj.time].push(obj);
+			},
+			closeWSocket() {
+				if(this.socket!=null){
+					this.socket.close()
+				}
+				if(this.pingpangTimes) {
+					clearInterval(this.pingpangTimes)
+					this.pingpangTimes= null
+				}
+			},
+			initTracks() {
+				this.tracks = [];
+				const trackHeight = 22; // 每行高度
+				const trackCount = 3;
+				for (let i = 0; i < trackCount; i++) {
+					this.tracks.push({
+						top: i * trackHeight + 10,
+						isFree: true,
+						releaseTime: 0 // 轨道释放时间
+					});
+				}
+			},
+			// 获取字体高度
+			getTextWidth(content) {
+				if (!this.ctx) {
+					this.ctx = uni.createCanvasContext('myCanvas')
+				}
+				const metrics = this.ctx.measureText(content)
+				return Math.ceil(metrics.width)
+			},
+			// 分配轨道
+			getFreeTrack(item) {
+				const screenWidth = uni.getSystemInfoSync().screenWidth;
+				const width = this.getTextWidth(item.content);
+				const passWidth = width + screenWidth;
+				const duration = 8; // 持续时间(秒)
+				const currentTime = Date.now();
+			
+				for (let i = 0; i < this.tracks.length; i++) {
+					if (this.tracks[i].isFree || this.tracks[i].releaseTime <= currentTime) {
+						this.tracks[i].isFree = false;
+						this.tracks[i].releaseTime = currentTime + Math.ceil(duration * 1000 / passWidth * width) + 1000;
+						return this.tracks[i].top;
+					}
+				}
+			
+				// 无可用轨道
+				if (this.userInfo.userId && item.userId == this.userInfo.userId) {
+					// console.log("自己发的弹幕");
+					let trackHeight = this.tracks[this.tracks.length - 1].top;
+					return Math.random() * trackHeight + 16; // 自己发的弹幕随机高度
+				} else {
+					// console.log("无可用轨道");
+					return 'abandon';
+				}
+			},
+			// 初始化时建立索引
+			initDanmuIndex() {
+			    this.danmuIndex = {};
+			    this.danmuList.forEach((item) => {
+			        if (!this.danmuIndex[item.time]) {
+			            this.danmuIndex[item.time] = [];
+			        }
+			        this.danmuIndex[item.time].push(item);
+			    });
+			},
+			// 检测并激活弹幕
+			checkDanmu(flagTime) {
+				this.flagTime = flagTime;
+				if(this.showDanmu == 0) return;
+				const newDanmus = this.danmuList.filter((item) => Math.abs(item.time - this.flagTime) < 1);
+				// 分配轨道高度
+				const aliveNewDanmus = newDanmus.map((item) => {
+					if (!item.top) {
+						item.top = this.getFreeTrack(item);
+					}
+					return item;
+				}).filter((item) => item.top !== 'abandon');
+				// 添加到活跃列表
+				this.activeDanmus = [...this.activeDanmus, ...aliveNewDanmus];
+				this.$emit("getActiveDanmus",this.activeDanmus)
+			},
+			animationend(moveItem, i) {
+				// 移除动画结束的弹幕(性能优化)
+				this.activeDanmus = this.activeDanmus.filter((item) => item.commentId !== moveItem.commentId)
+				this.$emit("getActiveDanmus",this.activeDanmus)
+			},
+		},
+		beforeDestroy() {
+			if(this.socket!=null){
+				this.socket.close()
+			}
+			if(this.pingpangTimes) {
+				clearInterval(this.pingpangTimes)
+				this.pingpangTimes= null
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.empty {
+		@include u-flex(row, center, center);
+		padding: 24rpx 50rpx;
+		color: #999999;
+	}
+	.listbox {
+		white-space: pre-wrap;
+		letter-spacing: 1px;
+		margin-bottom: 16rpx;
+	}
+	.list-name {
+		flex-shrink: 0;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 600;
+		font-size: 28rpx;
+		color: #222222;
+		margin-right: 16rpx;
+	}
+	.my {
+		color: #FF5C03;
+	}
+	.list-con {
+		font-family: PingFang SC, PingFang SC;
+		font-size: 28rpx;
+		color: #222222;
+	}
+	.nav-bar {
+		position: fixed;
+		z-index: 9999;
+		top: 0;
+		left: 0;
+		width: 100%;
+		overflow: hidden;
+
+		.nav-bg {
+			width: 100%;
+			height: 100%;
+			position: absolute;
+			left: 0;
+			top: 0;
+			z-index: 1;
+			background-color: #fff;
+		}
+
+		&-box {
+			position: relative;
+			padding: 0 24rpx;
+			@include u-flex(row, center, flex-start);
+			height: 88rpx;
+			box-sizing: border-box;
+			z-index: 3;
+		}
+
+		&-left {
+			width: 100%;
+			@include u-flex(row, center, flex-start);
+			overflow: hidden;
+
+			image {
+				flex-shrink: 0;
+				width: 64rpx;
+				height: 64rpx;
+				border-radius: 12rpx 12rpx 12rpx 12rpx;
+			}
+		}
+
+		&-name {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 600;
+			font-size: 28rpx;
+			color: #222222;
+		}
+
+		&-head {
+			flex: 1;
+			overflow: hidden;
+			margin-left: 22rpx;
+			margin-right: 22rpx;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 23rpx;
+			color: #999999;
+		}
+	}
+
+	.page-bg {
+		position: absolute;
+		top: 0;
+		left: 0;
+	}
+
+	.container-body {
+		padding: 32rpx 30rpx;
+		box-sizing: border-box;
+	}
+
+	.TUI-message-list {
+		width: 100%;
+		box-sizing: border-box;
+	}
+	.chatinput {
+		position: fixed;
+		left: 32rpx;
+		right: 32rpx;
+		z-index: 999;
+		bottom: calc(var(--window-bottom) + 24rpx);
+		height: 96rpx;
+		background-color: green;
+		background: #FFFFFF;
+		box-shadow: 0rpx 8rpx 21rpx 0rpx rgba(0, 0, 0, 0.1);
+		border-radius: 24rpx 24rpx 24rpx 24rpx;
+		@include u-flex(row, center, center);
+		padding: 0 24rpx;
+		box-sizing: border-box;
+		.uni-input {
+			flex: 1;
+			margin-right: 32rpx;
+			font-size: 30rpx;
+		}
+	
+		.send {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 28rpx;
+			color: #FFFFFF !important;
+			flex-shrink: 0;
+			padding: 0 20rpx;
+			height: 72rpx;
+			background: #FF5C03 !important;
+			border-radius: 8rpx 8rpx 8rpx 8rpx;
+			&::after {
+				border: none;
+			}
+		}
+	}
+	// .danmu-item {
+	// 	position: absolute;
+	// 	top: 0;
+	// 	white-space: nowrap;
+	// 	font-size: 16px;
+	// 	height: 20px;
+	// 	display: inline-flex;
+	// 	box-sizing: border-box;
+	// 	align-items: center;
+	// }
+	// .danmuMove {
+	// 	// animation: mymove 8s linear forwards;
+	// 	// animation-duration: 8s;
+	// 	animation-timing-function: linear;
+	// 	animation-delay: 0s;
+	// 	animation-iteration-count: 1;
+	// 	animation-direction: normal;
+	// 	animation-fill-mode: forwards;
+	// 	animation-play-state: running;
+	// 	animation-name: mymove;
+	// 	will-change: transform;
+	// }
+	
+	// @keyframes mymove {
+	// 	from {
+	// 		transform: translateX(100vw);
+	// 	}
+	
+	// 	to {
+	// 		transform: translateX(-100%);
+	// 	}
+	// }
 </style>

+ 65 - 0
pages_course/components/courseExpiration.vue

@@ -0,0 +1,65 @@
+<template>
+	<view class="container-body">
+		<text class="user" v-if="userId">#{{userId}}</text>
+		<image class="kfqrcode" v-if="qrcode" :src="qrcode" show-menu-by-longpress="true"></image>
+		<image v-else src="/static/course_expiration_img.png" mode="aspectFill"></image>
+		<view class="title">{{msg}}</view>
+		<view style="margin-bottom: 10vh;" v-show="code">状态码:{{code}}</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props:['code','qrcode','msg','userId'],
+		data() {
+			return {
+			
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.kfqrcode {
+		height: 460rpx;
+		width: 460rpx;
+	}
+	.container-body {
+		background-color: #fff;
+		position: fixed;
+		top: 0;
+		right: 0;
+		z-index: 9998;
+		justify-content: center;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 32rpx;
+		color: #757575;
+		line-height: 48rpx;
+		text-align: center;
+		height: 100vh;
+		width: 100vw;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		.title {
+			font-weight: bold;
+			font-size: 40rpx;
+			color: #1E2F67;
+			margin-bottom: 24rpx;
+			padding: 0 60rpx;
+		}
+		image {
+			width: 428rpx;
+			height: 360rpx;
+			margin-bottom: 30rpx;
+		}
+		.user {
+			position: absolute;
+			right: 24rpx;
+			top: 124rpx;
+			z-index: 9999;
+		}
+	}
+</style>

+ 155 - 155
pages_course/components/descInfo.vue

@@ -1,163 +1,163 @@
-<template>
-	<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 || ''}}</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>
+<template>
+	<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 || ''}}</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>
 </template>
 
-<script>
-	export default {
-		props: {
-			isLogin: {
-				type: Boolean,
-				default: false,
-			},
-			isAddKf: {
-				type: [String,Number],
-				default: 0,
-			},
-			courseInfo: {
-				type: Object,
-				default: {},
-			},
-		},
-		computed:{
-			imgPath() {
-			  return this.$store.state.imgpath
-			},
-		},
-		data() {
-			return {
-				// 是否展开
-				isExpand: true,
-				textHeight: 0, //文本高度
-			}
-		},
-		methods: {
-			// 展开简介
-			handleExpand() {
-				this.isExpand = !this.isExpand
-			},
-			getDescHeight() {
-				this.$nextTick(() => {
-					const query = uni.createSelectorQuery().in(this);
-					query
-						.select("#descbox-desc")
-						.boundingClientRect((data) => {
-							if(data) {
-								this.textHeight = data.height
-							}
-						})
-						.exec();
-				})
-			},
-		}
+<script>
+	export default {
+		props: {
+			isLogin: {
+				type: Boolean,
+				default: false,
+			},
+			isAddKf: {
+				type: [String,Number],
+				default: 0,
+			},
+			courseInfo: {
+				type: Object,
+				default: {},
+			},
+		},
+		computed:{
+			imgPath() {
+			  return this.$store.state.imgpath
+			},
+		},
+		data() {
+			return {
+				// 是否展开
+				isExpand: true,
+				textHeight: 0, //文本高度
+			}
+		},
+		methods: {
+			// 展开简介
+			handleExpand() {
+				this.isExpand = !this.isExpand
+			},
+			getDescHeight() {
+				this.$nextTick(() => {
+					const query = uni.createSelectorQuery().in(this);
+					query
+						.select("#descbox-desc")
+						.boundingClientRect((data) => {
+							if(data) {
+								this.textHeight = data.height
+							}
+						})
+						.exec();
+				})
+			},
+		}
 	}
 </script>
 
-<style scoped lang="scss">
-	@mixin u-flex($flexD, $alignI, $justifyC) {
-		display: flex;
-		flex-direction: $flexD;
-		align-items: $alignI;
-		justify-content: $justifyC;
-	}
-	.descbox {
-		padding: 0 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 {
-			padding: 24rpx 0;
-			font-weight: 500;
-			font-size: 32rpx;
-		}
-	
-		&-info {
-			padding-top: 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;
-			margin-top: 20rpx;
-		}
-	}
-	.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;
-	}
+<style scoped lang="scss">
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.descbox {
+		padding: 0 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 {
+			padding: 24rpx 0;
+			font-weight: 500;
+			font-size: 32rpx;
+		}
+	
+		&-info {
+			padding-top: 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;
+			margin-top: 20rpx;
+		}
+	}
+	.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;
+	}
 	
 </style>

+ 206 - 206
pages_course/components/descInfoNav.vue

@@ -1,207 +1,207 @@
-<template>
-	<view style="background-color: #fff;padding-bottom: 116rpx;">
-		<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>
-		<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 || ''}}</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>
-</template>
-
-<script>
-	export default {
-		props: {
-			isLogin: {
-				type: Boolean,
-				default: false,
-			},
-			isAddKf: {
-				type: [String,Number],
-				default: 0,
-			},
-			courseInfo: {
-				type: Object,
-				default: {},
-			},
-		},
-		computed:{
-			imgPath() {
-			  return this.$store.state.imgpath
-			},
-		},
-		data() {
-			return {
-				// 是否展开
-				isExpand: true,
-				textHeight: 0, //文本高度
-			}
-		},
-		methods: {
-			// 展开简介
-			handleExpand() {
-				this.isExpand = !this.isExpand
-			},
-			getDescHeight() {
-				this.$nextTick(() => {
-					const query = uni.createSelectorQuery().in(this);
-					query
-						.select("#descbox-desc")
-						.boundingClientRect((data) => {
-							if(data){
-								this.textHeight = data.height
-							}
-						})
-						.exec();
-				})
-			},
-		}
-	}
-</script>
-
-<style scoped lang="scss">
-	@mixin u-flex($flexD, $alignI, $justifyC) {
-		display: flex;
-		flex-direction: $flexD;
-		align-items: $alignI;
-		justify-content: $justifyC;
-	}
-	.miantitlebox {
-		padding: 30rpx 32rpx;
-		font-family: PingFang SC, PingFang SC;
-		font-weight: 500;
-		font-size: 36rpx;
-		color: #222222;
-	}
-	.subtitlebox {
-		padding: 30rpx 0;
-		font-family: PingFang SC, PingFang SC;
-		font-weight: 500;
-		font-size: 36rpx;
-		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: 14rpx 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;
-			margin-top: 20rpx;
-		}
-	}
-	.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;
-	}
-	
+<template>
+	<view style="background-color: #fff;padding-bottom: 116rpx;">
+		<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>
+		<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 || ''}}</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>
+</template>
+
+<script>
+	export default {
+		props: {
+			isLogin: {
+				type: Boolean,
+				default: false,
+			},
+			isAddKf: {
+				type: [String,Number],
+				default: 0,
+			},
+			courseInfo: {
+				type: Object,
+				default: {},
+			},
+		},
+		computed:{
+			imgPath() {
+			  return this.$store.state.imgpath
+			},
+		},
+		data() {
+			return {
+				// 是否展开
+				isExpand: true,
+				textHeight: 0, //文本高度
+			}
+		},
+		methods: {
+			// 展开简介
+			handleExpand() {
+				this.isExpand = !this.isExpand
+			},
+			getDescHeight() {
+				this.$nextTick(() => {
+					const query = uni.createSelectorQuery().in(this);
+					query
+						.select("#descbox-desc")
+						.boundingClientRect((data) => {
+							if(data){
+								this.textHeight = data.height
+							}
+						})
+						.exec();
+				})
+			},
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.miantitlebox {
+		padding: 30rpx 32rpx;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 500;
+		font-size: 36rpx;
+		color: #222222;
+	}
+	.subtitlebox {
+		padding: 30rpx 0;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 500;
+		font-size: 36rpx;
+		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: 14rpx 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;
+			margin-top: 20rpx;
+		}
+	}
+	.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;
+	}
+	
 </style>

+ 269 - 269
pages_course/components/loginPop.vue

@@ -1,277 +1,277 @@
-<template>
-	<view>
-		<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>
+<template>
+	<view>
+		<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>
 </template>
 
-<script>
-	export default {
-		data() {
-			return {
-				userlogo:false,
-				projectId:'',
-				userinfos:{
-					nickname:"",
-					avatar:""
-				},
-				headImg:'',
-				authType:0,//0微信登录 1手机号登录
-				userdisabled:false,
-			}
-		},
-		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
-			},
-		},
-		methods: {
-			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
-			},
-			async loginFsUserWx(data){
-				if(data){
-					console.log('huoqu1222',data)
-					uni.showLoading({
-						title: '加载中'
-					})
-					uni.login({
-						provider: "weixin",
-						success: async loginRes => {
-							console.log(loginRes)
-							let code = loginRes.code // 获取开发code
-							handleFsUserWx({
-							   code: code,
-							   appId:this.appid,
-							   userId:data.userId
-							})
-							.then( res => {
-								if(res.code==200){
-									console.log(res)
-									uni.hideLoading();
-									uni.showToast({
-										icon:'none',
-										title: "登录成功",
-									});
-									this.userinfos=uni.getStorageSync('userinfos')
-									uni.getStorageSync('TOKEN_WEXIN');
-									this.userInfo=uni.getStorageSync('userInfo');
-									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,
-									});
-								}
-							   
-							 })
-						},
-					})
-				}else{
-					await this.$store.dispatch('getWebviewUrl');
-					uni.navigateTo({
-						url:'/pages_course/webview?H5course='+uni.getStorageSync('H5course')
-					})
-				}
-			}
-		}
+<script>
+	export default {
+		data() {
+			return {
+				userlogo:false,
+				projectId:'',
+				userinfos:{
+					nickname:"",
+					avatar:""
+				},
+				headImg:'',
+				authType:0,//0微信登录 1手机号登录
+				userdisabled:false,
+			}
+		},
+		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
+			},
+		},
+		methods: {
+			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
+			},
+			async loginFsUserWx(data){
+				if(data){
+					console.log('huoqu1222',data)
+					uni.showLoading({
+						title: '加载中'
+					})
+					uni.login({
+						provider: "weixin",
+						success: async loginRes => {
+							console.log(loginRes)
+							let code = loginRes.code // 获取开发code
+							handleFsUserWx({
+							   code: code,
+							   appId:this.appid,
+							   userId:data.userId
+							})
+							.then( res => {
+								if(res.code==200){
+									console.log(res)
+									uni.hideLoading();
+									uni.showToast({
+										icon:'none',
+										title: "登录成功",
+									});
+									this.userinfos=uni.getStorageSync('userinfos')
+									uni.getStorageSync('TOKEN_WEXIN');
+									this.userInfo=uni.getStorageSync('userInfo');
+									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,
+									});
+								}
+							   
+							 })
+						},
+					})
+				}else{
+					await this.$store.dispatch('getWebviewUrl');
+					uni.navigateTo({
+						url:'/pages_course/webview?H5course='+uni.getStorageSync('H5course')
+					})
+				}
+			}
+		}
 	}
 </script>
 
-<style scoped lang="scss">
-	.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;
+<style scoped lang="scss">
+	.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;
 	}
 </style>

+ 134 - 134
pages_course/components/ques.vue

@@ -1,135 +1,135 @@
-<template>
-	<view class="ques-content">
-		<view class="ques-content-tit" v-show="openCommentStatus!=1">问答题</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>{{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,index)">
-				<view>
-					{{numberToLetter(idx)}}.
-				</view>
-				<view>{{option.name}}</view>
-			</view>
-		</view>
-		<view class="empty" v-if="quesList&&quesList.length==0">暂未设置题目~</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		props: ['quesList','openCommentStatus'],
-		data() {
-			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
-					}
-				}
-			}
-		},
-		methods: {
-			numberToLetter(num) {
-				// 将数字转换为字母的 ASCII 码
-				let letterCode = num + 65;
-				// 将 ASCII 码转换为大写字母
-				let letter = String.fromCharCode(letterCode);
-				return letter;
-			},
-			handleAnswer(item, option,index) {
-				const param = {
-					item,
-					option,
-					index
-				}
-				this.$emit("handleAnswer", param)
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	@mixin u-flex($flexD, $alignI, $justifyC) {
-		display: flex;
-		flex-direction: $flexD;
-		align-items: $alignI;
-		justify-content: $justifyC;
-	}
-	.empty {
-		@include u-flex(row, center, center);
-		padding: 24rpx 50rpx;
-		color: #999999;
-	}
-	.ques-content {
-		background-color: #fff;
-		padding: 24rpx 32rpx 24rpx 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;
-		}
-	}
+<template>
+	<view class="ques-content">
+		<view class="ques-content-tit" v-show="openCommentStatus!=1">问答题</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>{{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,index)">
+				<view>
+					{{numberToLetter(idx)}}.
+				</view>
+				<view>{{option.name}}</view>
+			</view>
+		</view>
+		<view class="empty" v-if="quesList&&quesList.length==0">暂未设置题目~</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: ['quesList','openCommentStatus'],
+		data() {
+			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
+					}
+				}
+			}
+		},
+		methods: {
+			numberToLetter(num) {
+				// 将数字转换为字母的 ASCII 码
+				let letterCode = num + 65;
+				// 将 ASCII 码转换为大写字母
+				let letter = String.fromCharCode(letterCode);
+				return letter;
+			},
+			handleAnswer(item, option,index) {
+				const param = {
+					item,
+					option,
+					index
+				}
+				this.$emit("handleAnswer", param)
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.empty {
+		@include u-flex(row, center, center);
+		padding: 24rpx 50rpx;
+		color: #999999;
+	}
+	.ques-content {
+		background-color: #fff;
+		padding: 24rpx 32rpx 24rpx 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;
+		}
+	}
 </style>

+ 494 - 494
pages_course/feedback.vue

@@ -1,495 +1,495 @@
-<template>
-	<view>
-		<!-- <view class="header-nav" :style="{height: `calc(88rpx + ${statusBarHeight}px)`,paddingTop: statusBarHeight + 'px'}">
-			<view class="arrow-left" :style="{top: statusBarHeight + 'px'}" @click="goBack"><u-icon name="arrow-left" size="24"></u-icon></view>
-			<view class="header-title" :style="{height:menuButtonH+'px',lineHeight:menuButtonH+'px'}">投诉反馈</view>
-		</view> -->
-		<!-- :style="{paddingTop: `calc(88rpx + ${statusBarHeight}px)`}" -->
-		<view class="container" >
-			<view class="formbox" v-if="isLastChild==1">
-				<view class="formbox-title">{{ text }}</view>
-				<view class="form">
-					<u-form labelPosition="top" labelWidth='auto' :model="formdata" :rules="rules" ref="uForm" errorType="toast">
-						<u-form-item label=" " prop="complaintContent">
-							<u--textarea v-model="formdata.complaintContent" border="none" :clearable="true" placeholder="请填写反馈内容" count maxlength='200'></u--textarea>
-						</u-form-item>
-						<view class="box">
-							<u-form-item label="图片(最多9张)">
-								<view class="imgitem">
-									<u-upload
-										:fileList="fileList1"
-										@afterRead="afterRead"
-										@delete="deletePic"
-										name="1"
-										:maxCount="9"
-									></u-upload>
-								</view>
-							</u-form-item>
-						</view>
-					</u-form>
-				</view>
-				<view class="footer-btn">
-					<button class="submit-btn" @click="submit">提交</button>
-					<!-- <button class="submit-btn back-btn" @click="goBack">返回</button> -->
-				</view>
-			</view>
-			<view class="container" v-else>
-				<view class="list-item title">请选择反馈类型</view>
-				<view class="list-item" v-for="(item, index) in feedbackItems" :key="index"
-					@click="handleClick(item,index)">
-					<view>{{ item.complaintTypeName }}</view>
-					<uni-icons type="right" size="20" color="rgba(0,0,0,.3)" v-if="isLastChild==0"></uni-icons>
-				</view>
-				<view class="list-item" v-if="pageIndex!=0&&isLastChild==0" @click="goBack">
-					返回上一层
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {TOKEN_KEYAuto} from '@/utils/courseTool.js'
-	import{ getTypeTree, complaintRecord,loginByMp } from "@/api/courseAuto.js"
-	import {handleFsUserWx} from '@/api/courseLook.js'
-	export default {
-		data() {
-			return {
-				statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
-				menuButtonH: 45,
-				pageIndex: 0,
-				list: [],
-				feedbackItems: [],
-				userId: '',
-				courseId: '',
-				videoId: '',
-				formdata: {
-					complaintContent: ""
-				},
-				rules: {
-					complaintContent:[{
-						required: true,
-						message: '投诉反馈内容不能为空',
-						trigger: ["change", "blur"]
-					}]
-				},
-				text: '',
-				templateId: 0,
-				user: {},
-				isLastChild: 0,
-				isLogin: false,
-				fileList1: [],
-				code:'',
-				companyId:'',
-				companyUserId:'',
-			};
-		},
-		computed:{
-			appid() {
-				return this.$store.state.appid
-			},
-			isSpare() {
-				return this.$store.state.isSpare
-			},
-		},
-		onLoad(option) {
-			this.userId = option.userId || ''
-			this.courseId = option.courseId || ''
-			this.videoId = option.videoId || ''
-			this.companyId = option.companyId || ''
-			this.companyUserId = option.companyUserId || ''
-			uni.$on('usercode',(data)=>{
-				if(this.isSpare == 1&&data) {
-					this.code=data.code
-					this.goLogin(data)
-				}
-			})
-			this.$isLoginCourseAuto().then(
-				res => {
-					if(res){
-						this.isLogin = true
-						this.getMenuButton()
-						this.getList()
-					} else{
-						this.isLogin = false
-						if(this.code) return;
-						this.goLogin()
-					}
-				},
-				rej => {}
-			);
-		},
-		methods: {
-			getMenuButton(){
-				const menuButtonInfo = uni.getMenuButtonBoundingClientRect()
-				this.menuButtonH = menuButtonInfo.height
-			},
-			goBack() {
-				// 返回上一层逻辑
-				if (this.pageIndex == 0) {
-					uni.navigateBack();
-				} else {
-					this.pageIndex--;
-					this.formdata = {
-						complaintContent: ""
-					}
-					if (this.isLastChild == 1) {
-						this.isLastChild = 0
-					} else {
-						if (this.pageIndex == 0) {
-							this.feedbackItems = this.list
-							this.templateId = 0
-						} else {
-							const list = this.findGrandparentOrAllData(this.list, this.templateId)
-							this.feedbackItems = list.childrenType
-							this.templateId = list.complaintTypeId
-						}
-					}
-				
-				}
-			},
-			findGrandparentOrAllData(data, targetId) {
-				// 递归函数,用于查找目标节点的父级节点
-				function findParent(node, targetId) {
-					if (!node || !node.childrenType) return null;
-			
-					for (let child of node.childrenType) {
-						if (child.complaintTypeId === targetId) {
-							return node; // 找到目标节点的父级节点
-						}
-			
-						const result = findParent(child, targetId); // 递归查找子节点
-						if (result) return result;
-					}
-			
-					return null;
-				}
-			
-				// 遍历顶层节点,查找目标节点的父级和祖父级节点
-				for (let root of data) {
-					if (root.complaintTypeId === targetId) {
-						return data; // 如果目标节点是顶层节点,返回所有数据
-					}
-			
-					const parent = findParent(root, targetId); // 查找目标节点的父级节点
-					if (parent) {
-						const grandparent = findParent(root, parent.complaintTypeId); // 查找父级节点的父级节点
-						return grandparent || data; // 如果找到祖父节点返回祖父节点,否则返回所有数据
-					}
-				}
-			
-				return data; // 如果没有找到目标节点,返回所有数据
-			},
-			handleClick(item,index) {
-				if (this.isLastChild == 1) return
-				if (this.pageIndex >= 0) {
-					this.pageIndex++
-					let children = this.feedbackItems[index].childrenType || [];
-					this.templateId = this.feedbackItems[index].complaintTypeId
-					this.formdata = {
-						complaintContent: ""
-					}
-					this.text = this.feedbackItems[index].complaintTypeName
-					if (children.length > 0) {
-						this.isLastChild = 0
-						this.feedbackItems = children
-						this.templateId = this.feedbackItems[0].complaintTypeId
-					} else {
-						this.isLastChild = 1
-						this.formdata = {
-							complaintContent: ""
-						}
-						setTimeout(() => {
-							this.$refs.uForm.setRules(this.rules)
-						}, 200)
-					}
-				}
-			},
-			getList(){
-				getTypeTree().then(res=>{
-					if(res.code == 200) {
-						this.list = res.data
-						this.pageIndex = 0
-						this.feedbackItems = this.list
-					}
-				})
-			},
-			submit() {
-				if(this.fileList1.some(item=>item.status == 'uploading')) {
-					uni.showToast({
-						title: '等待图片上传中',
-						icon: 'none'
-					})
-					return
-				}
-				var images=[];
-				this.fileList1.forEach(function(element) {
-					images.push(element.url)
-				});
-				this.$refs.uForm.validate().then(res => {
-					if (res) {
-						const param = {
-							userId: this.userId,
-							complaintTypeId: this.templateId,
-							complaintContent: this.formdata.complaintContent,
-							courseId: this.courseId,
-							videoId: this.videoId,
-							complaintUrl: images.toString()
-						}
-						complaintRecord(param).then(res=>{
-							uni.showModal({
-								title: '',
-								content: '我们已收到您的反馈,谢谢',
-								showCancel: false,
-								success: function (res) {
-									if (res.confirm) {
-										uni.navigateBack()
-									} else if (res.cancel) {
-										uni.navigateBack()
-									}
-								}
-							});
-						})
-					}
-				})
-			},
-			deletePic(event) {
-				this[`fileList${event.name}`].splice(event.index, 1)
-			},
-			async afterRead(event) {
-				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
-				let lists = [].concat(event.file)
-				let fileListLen = this[`fileList${event.name}`].length
-				lists.map((item) => {
-					this[`fileList${event.name}`].push({
-						...item,
-						status: 'uploading',
-						message: '上传中'
-					})
-				})
-				for (let i = 0; i < lists.length; i++) {
-					const result = await this.uploadFilePromise(lists[i].url)
-					let item = this[`fileList${event.name}`][fileListLen]
-					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
-						status: 'success',
-						message: '',
-						url: result
-					}))
-					fileListLen++
-				}
-			},
-			uploadFilePromise(url) {
-				return new Promise((resolve, reject) => {
-					let a = uni.uploadFile({
-						url: this.$store.state.uploadFile + '/app/common/uploadOSS', // 仅为示例,非真实的接口地址
-						filePath: url,
-						name: 'file',
-						success: (res) => {
-							setTimeout(() => {
-								console.log(JSON.parse(res.data).url)
-								resolve(JSON.parse(res.data).url)
-							}, 1000)
-						}
-					});
-				})
-			},
-			goLogin(data) {
-				if(data || this.isSpare==1) {
-					this.loginFsUserWx(data)
-					return
-				}
-				let provider = 'weixin'
-				uni.login({
-					provider: provider,
-					success: async loginRes => {
-						console.log(loginRes)
-						uni.getUserInfo({
-						   provider: provider,
-						   success: (infoRes)=> {
-							    uni.showToast({
-									title: '处理中...',
-									icon: 'loading'
-							    });
-								loginByMp({
-									code: loginRes.code,
-									encryptedData:infoRes.encryptedData,
-									iv:infoRes.iv,
-									appId: this.appid
-								}).then(res=>{
-									 uni.hideLoading();
-									 if (res.code == 200) {
-										uni.setStorageSync(TOKEN_KEYAuto, res.token);
-										uni.setStorageSync('auto_userInfo', JSON.stringify(res.user));
-										this.userId = res.user.userId || ''
-										this.isLogin = true
-										this.getMenuButton()
-										this.getList()
-									 } else {
-										uni.showToast({
-											title: res.msg,
-											icon: 'none'
-										});
-									 }
-								 }).catch(err=>{
-									uni.hideLoading();
-									uni.showToast({
-										icon:'none',
-										title: "登录失败,请重新登录",
-									});
-								});
-						   }
-						});
-					}
-				})
-			},
-			// 公开课登录\备用登录
-			async loginFsUserWx(data){
-				if(data){
-					console.log('huoqu1222',data)
-					uni.showLoading({
-						title: '登录中'
-					})
-					uni.login({
-						provider: "weixin",
-						success: async loginRes => {
-							console.log(loginRes)
-							let code = loginRes.code // 获取开发code
-							handleFsUserWx({
-							   code: code,
-							   appId:this.appid,
-							   userId:data.userId
-							})
-							.then( res => {
-								uni.hideLoading();
-								if(res.code==200){
-									console.log("loginFsUserWx:",res)
-									let token = uni.getStorageSync('TOKEN_WEXIN');
-									let user = uni.getStorageSync('userInfo')
-									
-									uni.setStorageSync(TOKEN_KEYAuto, token);
-									uni.setStorageSync('auto_userInfo', user);
-									this.userId = user.userId || ''
-									this.isLogin = true
-									this.getMenuButton()
-									this.getList()
-								}else if(res.code==406){
-									uni.showToast({
-										icon:'none',
-										title: '该用户已成为其他销售会员',
-									});
-								}else{
-									uni.showToast({
-										icon:'none',
-										title: res.msg,
-									});
-								}
-							   
-							 })
-						},
-					})
-				}else{
-					uni.setStorageSync('H5course',{
-						companyId: this.companyId,
-						companyUserId:this.companyUserId,
-						type:1
-					})
-					await this.$store.dispatch('getWebviewUrl');
-					uni.navigateTo({
-						url:'/pages_course/webview?H5course='+uni.getStorageSync('H5course')
-					})
-				}
-			}
-		}
-	};
-</script>
-
-<style scoped lang="scss">
-	.container {
-		background-color: #fff;
-	}
-	.formbox-title {
-		padding-bottom: 30rpx;
-		border-bottom: 1px solid #f4f4f4;
-	}
-	.formbox {
-		border-top: 1px solid #f4f4f4;
-		padding: 30rpx;
-	}
-	.box {
-		padding-bottom: 24rpx;
-		border-top: 1px solid #f4f4f4;
-		.imgitem {
-			padding-top: 20rpx;
-		}
-	}
-	.footer-btn {
-		margin-top: 50rpx;
-	}
-	.submit-btn {
-		width: 50%;
-		height: 88rpx;
-		line-height: 88rpx;
-		text-align: center;
-		font-size: 30rpx;
-		font-family: PingFang SC;
-		color: #FFFFFF;
-		background: rgb(0,178,106);
-		border-radius: 16rpx;
-		border: 1rpx solid ;
-		margin-bottom: 30rpx;
-		&::after {
-			border: none;
-		}
-	}
-	.back-btn {
-		color: #bbb;
-		background: transparent;
-		border-radius: 16rpx;
-		border: 1rpx solid #999;
-	}
-	.header-nav {
-		height: 88rpx;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		overflow: hidden;
-		background-color: #fff;
-		box-sizing: border-box;
-		width: 100%;
-		position: fixed;
-		top: 0;
-		left: 0;
-		.header-title {
-			flex: 1;
-			text-align: center;
-			overflow: hidden;
-			white-space: nowrap;
-			text-overflow: ellipsis;
-			font-family: PingFang SC,PingFang SC;
-			font-weight: 500;
-			font-size: 15px;
-			color: #000;
-			box-sizing: border-box;
-		}
-	}
-	.arrow-left {
-		position: absolute;
-		left: 24rpx;
-		height: 88rpx;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		overflow: hidden;
-	}
-	.list-item {
-		background-color: #fff;
-		padding: 24rpx;
-		border-bottom: 1rpx solid #f4f4f4;
-		font-size: 15px;
-		color: #333;
-	}
-
-	.title {
-		background-color: #f4f4f4;
-	}
+<template>
+	<view>
+		<!-- <view class="header-nav" :style="{height: `calc(88rpx + ${statusBarHeight}px)`,paddingTop: statusBarHeight + 'px'}">
+			<view class="arrow-left" :style="{top: statusBarHeight + 'px'}" @click="goBack"><u-icon name="arrow-left" size="24"></u-icon></view>
+			<view class="header-title" :style="{height:menuButtonH+'px',lineHeight:menuButtonH+'px'}">投诉反馈</view>
+		</view> -->
+		<!-- :style="{paddingTop: `calc(88rpx + ${statusBarHeight}px)`}" -->
+		<view class="container" >
+			<view class="formbox" v-if="isLastChild==1">
+				<view class="formbox-title">{{ text }}</view>
+				<view class="form">
+					<u-form labelPosition="top" labelWidth='auto' :model="formdata" :rules="rules" ref="uForm" errorType="toast">
+						<u-form-item label=" " prop="complaintContent">
+							<u--textarea v-model="formdata.complaintContent" border="none" :clearable="true" placeholder="请填写反馈内容" count maxlength='200'></u--textarea>
+						</u-form-item>
+						<view class="box">
+							<u-form-item label="图片(最多9张)">
+								<view class="imgitem">
+									<u-upload
+										:fileList="fileList1"
+										@afterRead="afterRead"
+										@delete="deletePic"
+										name="1"
+										:maxCount="9"
+									></u-upload>
+								</view>
+							</u-form-item>
+						</view>
+					</u-form>
+				</view>
+				<view class="footer-btn">
+					<button class="submit-btn" @click="submit">提交</button>
+					<!-- <button class="submit-btn back-btn" @click="goBack">返回</button> -->
+				</view>
+			</view>
+			<view class="container" v-else>
+				<view class="list-item title">请选择反馈类型</view>
+				<view class="list-item" v-for="(item, index) in feedbackItems" :key="index"
+					@click="handleClick(item,index)">
+					<view>{{ item.complaintTypeName }}</view>
+					<uni-icons type="right" size="20" color="rgba(0,0,0,.3)" v-if="isLastChild==0"></uni-icons>
+				</view>
+				<view class="list-item" v-if="pageIndex!=0&&isLastChild==0" @click="goBack">
+					返回上一层
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {TOKEN_KEYAuto} from '@/utils/courseTool.js'
+	import{ getTypeTree, complaintRecord,loginByMp } from "@/api/courseAuto.js"
+	import {handleFsUserWx} from '@/api/courseLook.js'
+	export default {
+		data() {
+			return {
+				statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
+				menuButtonH: 45,
+				pageIndex: 0,
+				list: [],
+				feedbackItems: [],
+				userId: '',
+				courseId: '',
+				videoId: '',
+				formdata: {
+					complaintContent: ""
+				},
+				rules: {
+					complaintContent:[{
+						required: true,
+						message: '投诉反馈内容不能为空',
+						trigger: ["change", "blur"]
+					}]
+				},
+				text: '',
+				templateId: 0,
+				user: {},
+				isLastChild: 0,
+				isLogin: false,
+				fileList1: [],
+				code:'',
+				companyId:'',
+				companyUserId:'',
+			};
+		},
+		computed:{
+			appid() {
+				return this.$store.state.appid
+			},
+			isSpare() {
+				return this.$store.state.isSpare
+			},
+		},
+		onLoad(option) {
+			this.userId = option.userId || ''
+			this.courseId = option.courseId || ''
+			this.videoId = option.videoId || ''
+			this.companyId = option.companyId || ''
+			this.companyUserId = option.companyUserId || ''
+			uni.$on('usercode',(data)=>{
+				if(this.isSpare == 1&&data) {
+					this.code=data.code
+					this.goLogin(data)
+				}
+			})
+			this.$isLoginCourseAuto().then(
+				res => {
+					if(res){
+						this.isLogin = true
+						this.getMenuButton()
+						this.getList()
+					} else{
+						this.isLogin = false
+						if(this.code) return;
+						this.goLogin()
+					}
+				},
+				rej => {}
+			);
+		},
+		methods: {
+			getMenuButton(){
+				const menuButtonInfo = uni.getMenuButtonBoundingClientRect()
+				this.menuButtonH = menuButtonInfo.height
+			},
+			goBack() {
+				// 返回上一层逻辑
+				if (this.pageIndex == 0) {
+					uni.navigateBack();
+				} else {
+					this.pageIndex--;
+					this.formdata = {
+						complaintContent: ""
+					}
+					if (this.isLastChild == 1) {
+						this.isLastChild = 0
+					} else {
+						if (this.pageIndex == 0) {
+							this.feedbackItems = this.list
+							this.templateId = 0
+						} else {
+							const list = this.findGrandparentOrAllData(this.list, this.templateId)
+							this.feedbackItems = list.childrenType
+							this.templateId = list.complaintTypeId
+						}
+					}
+				
+				}
+			},
+			findGrandparentOrAllData(data, targetId) {
+				// 递归函数,用于查找目标节点的父级节点
+				function findParent(node, targetId) {
+					if (!node || !node.childrenType) return null;
+			
+					for (let child of node.childrenType) {
+						if (child.complaintTypeId === targetId) {
+							return node; // 找到目标节点的父级节点
+						}
+			
+						const result = findParent(child, targetId); // 递归查找子节点
+						if (result) return result;
+					}
+			
+					return null;
+				}
+			
+				// 遍历顶层节点,查找目标节点的父级和祖父级节点
+				for (let root of data) {
+					if (root.complaintTypeId === targetId) {
+						return data; // 如果目标节点是顶层节点,返回所有数据
+					}
+			
+					const parent = findParent(root, targetId); // 查找目标节点的父级节点
+					if (parent) {
+						const grandparent = findParent(root, parent.complaintTypeId); // 查找父级节点的父级节点
+						return grandparent || data; // 如果找到祖父节点返回祖父节点,否则返回所有数据
+					}
+				}
+			
+				return data; // 如果没有找到目标节点,返回所有数据
+			},
+			handleClick(item,index) {
+				if (this.isLastChild == 1) return
+				if (this.pageIndex >= 0) {
+					this.pageIndex++
+					let children = this.feedbackItems[index].childrenType || [];
+					this.templateId = this.feedbackItems[index].complaintTypeId
+					this.formdata = {
+						complaintContent: ""
+					}
+					this.text = this.feedbackItems[index].complaintTypeName
+					if (children.length > 0) {
+						this.isLastChild = 0
+						this.feedbackItems = children
+						this.templateId = this.feedbackItems[0].complaintTypeId
+					} else {
+						this.isLastChild = 1
+						this.formdata = {
+							complaintContent: ""
+						}
+						setTimeout(() => {
+							this.$refs.uForm.setRules(this.rules)
+						}, 200)
+					}
+				}
+			},
+			getList(){
+				getTypeTree().then(res=>{
+					if(res.code == 200) {
+						this.list = res.data
+						this.pageIndex = 0
+						this.feedbackItems = this.list
+					}
+				})
+			},
+			submit() {
+				if(this.fileList1.some(item=>item.status == 'uploading')) {
+					uni.showToast({
+						title: '等待图片上传中',
+						icon: 'none'
+					})
+					return
+				}
+				var images=[];
+				this.fileList1.forEach(function(element) {
+					images.push(element.url)
+				});
+				this.$refs.uForm.validate().then(res => {
+					if (res) {
+						const param = {
+							userId: this.userId,
+							complaintTypeId: this.templateId,
+							complaintContent: this.formdata.complaintContent,
+							courseId: this.courseId,
+							videoId: this.videoId,
+							complaintUrl: images.toString()
+						}
+						complaintRecord(param).then(res=>{
+							uni.showModal({
+								title: '',
+								content: '我们已收到您的反馈,谢谢',
+								showCancel: false,
+								success: function (res) {
+									if (res.confirm) {
+										uni.navigateBack()
+									} else if (res.cancel) {
+										uni.navigateBack()
+									}
+								}
+							});
+						})
+					}
+				})
+			},
+			deletePic(event) {
+				this[`fileList${event.name}`].splice(event.index, 1)
+			},
+			async afterRead(event) {
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file)
+				let fileListLen = this[`fileList${event.name}`].length
+				lists.map((item) => {
+					this[`fileList${event.name}`].push({
+						...item,
+						status: 'uploading',
+						message: '上传中'
+					})
+				})
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url)
+					let item = this[`fileList${event.name}`][fileListLen]
+					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
+						status: 'success',
+						message: '',
+						url: result
+					}))
+					fileListLen++
+				}
+			},
+			uploadFilePromise(url) {
+				return new Promise((resolve, reject) => {
+					let a = uni.uploadFile({
+						url: this.$store.state.uploadFile + '/app/common/uploadOSS', // 仅为示例,非真实的接口地址
+						filePath: url,
+						name: 'file',
+						success: (res) => {
+							setTimeout(() => {
+								console.log(JSON.parse(res.data).url)
+								resolve(JSON.parse(res.data).url)
+							}, 1000)
+						}
+					});
+				})
+			},
+			goLogin(data) {
+				if(data || this.isSpare==1) {
+					this.loginFsUserWx(data)
+					return
+				}
+				let provider = 'weixin'
+				uni.login({
+					provider: provider,
+					success: async loginRes => {
+						console.log(loginRes)
+						uni.getUserInfo({
+						   provider: provider,
+						   success: (infoRes)=> {
+							    uni.showToast({
+									title: '处理中...',
+									icon: 'loading'
+							    });
+								loginByMp({
+									code: loginRes.code,
+									encryptedData:infoRes.encryptedData,
+									iv:infoRes.iv,
+									appId: this.appid
+								}).then(res=>{
+									 uni.hideLoading();
+									 if (res.code == 200) {
+										uni.setStorageSync(TOKEN_KEYAuto, res.token);
+										uni.setStorageSync('auto_userInfo', JSON.stringify(res.user));
+										this.userId = res.user.userId || ''
+										this.isLogin = true
+										this.getMenuButton()
+										this.getList()
+									 } else {
+										uni.showToast({
+											title: res.msg,
+											icon: 'none'
+										});
+									 }
+								 }).catch(err=>{
+									uni.hideLoading();
+									uni.showToast({
+										icon:'none',
+										title: "登录失败,请重新登录",
+									});
+								});
+						   }
+						});
+					}
+				})
+			},
+			// 公开课登录\备用登录
+			async loginFsUserWx(data){
+				if(data){
+					console.log('huoqu1222',data)
+					uni.showLoading({
+						title: '登录中'
+					})
+					uni.login({
+						provider: "weixin",
+						success: async loginRes => {
+							console.log(loginRes)
+							let code = loginRes.code // 获取开发code
+							handleFsUserWx({
+							   code: code,
+							   appId:this.appid,
+							   userId:data.userId
+							})
+							.then( res => {
+								uni.hideLoading();
+								if(res.code==200){
+									console.log("loginFsUserWx:",res)
+									let token = uni.getStorageSync('TOKEN_WEXIN');
+									let user = uni.getStorageSync('userInfo')
+									
+									uni.setStorageSync(TOKEN_KEYAuto, token);
+									uni.setStorageSync('auto_userInfo', user);
+									this.userId = user.userId || ''
+									this.isLogin = true
+									this.getMenuButton()
+									this.getList()
+								}else if(res.code==406){
+									uni.showToast({
+										icon:'none',
+										title: '该用户已成为其他销售会员',
+									});
+								}else{
+									uni.showToast({
+										icon:'none',
+										title: res.msg,
+									});
+								}
+							   
+							 })
+						},
+					})
+				}else{
+					uni.setStorageSync('H5course',{
+						companyId: this.companyId,
+						companyUserId:this.companyUserId,
+						type:1
+					})
+					await this.$store.dispatch('getWebviewUrl');
+					uni.navigateTo({
+						url:'/pages_course/webview?H5course='+uni.getStorageSync('H5course')
+					})
+				}
+			}
+		}
+	};
+</script>
+
+<style scoped lang="scss">
+	.container {
+		background-color: #fff;
+	}
+	.formbox-title {
+		padding-bottom: 30rpx;
+		border-bottom: 1px solid #f4f4f4;
+	}
+	.formbox {
+		border-top: 1px solid #f4f4f4;
+		padding: 30rpx;
+	}
+	.box {
+		padding-bottom: 24rpx;
+		border-top: 1px solid #f4f4f4;
+		.imgitem {
+			padding-top: 20rpx;
+		}
+	}
+	.footer-btn {
+		margin-top: 50rpx;
+	}
+	.submit-btn {
+		width: 50%;
+		height: 88rpx;
+		line-height: 88rpx;
+		text-align: center;
+		font-size: 30rpx;
+		font-family: PingFang SC;
+		color: #FFFFFF;
+		background: rgb(0,178,106);
+		border-radius: 16rpx;
+		border: 1rpx solid ;
+		margin-bottom: 30rpx;
+		&::after {
+			border: none;
+		}
+	}
+	.back-btn {
+		color: #bbb;
+		background: transparent;
+		border-radius: 16rpx;
+		border: 1rpx solid #999;
+	}
+	.header-nav {
+		height: 88rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		overflow: hidden;
+		background-color: #fff;
+		box-sizing: border-box;
+		width: 100%;
+		position: fixed;
+		top: 0;
+		left: 0;
+		.header-title {
+			flex: 1;
+			text-align: center;
+			overflow: hidden;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+			font-family: PingFang SC,PingFang SC;
+			font-weight: 500;
+			font-size: 15px;
+			color: #000;
+			box-sizing: border-box;
+		}
+	}
+	.arrow-left {
+		position: absolute;
+		left: 24rpx;
+		height: 88rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		overflow: hidden;
+	}
+	.list-item {
+		background-color: #fff;
+		padding: 24rpx;
+		border-bottom: 1rpx solid #f4f4f4;
+		font-size: 15px;
+		color: #333;
+	}
+
+	.title {
+		background-color: #f4f4f4;
+	}
 </style>

+ 336 - 336
pages_course/learn.vue

@@ -1,337 +1,337 @@
-<template>
-	<view class="containers">
-		<view class="top">
-			<image class="bg " style="height: 600rpx;" :src="learncourse.imgUrl" mode="scaleToFill"></image>
-			<view class="top-box">
-				<view class="title">{{learncourse.courseName}}</view>
-				<view class="txt">
-					<image :src="imgPath+'/app/commonCourse/learn1.png'"></image>
-					<text>共{{learnList.length}}节课</text>
-				</view>
-			</view>
-		</view>
-		<view class="container-body">
-
-			<view class="list" v-for="(item,index) in learnList" :key="index">
-				<view class="img-box">
-					<view class="sub">第{{index+1}}课</view>
-					<image :src="item.videoImgUrl || imgPath+'/app/commonCourse/no-img.png'" mode="aspectFill"></image>
-				</view>
-				<view class="right">
-					<view class="title">{{item.title}}</view>
-					<view class="bottom">
-						<!-- <view class="tip">
-							<image :src="imgPath+'/app/commonCourse/learn3.png'" mode="widthFix"></image>
-							<text>答题送金币+200</text>
-						</view> -->
-						<!-- <view @click="goLive(item)" class="btn" v-if="item.stauts==0">已学习4%</view> -->
-						<view @click="goLive(item)" class="btn-red">去学习</view>
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	// import { compile } from "vue";
-import {
-		courseList,
-		courseListB
-	} from '@/api/class.js'
-	
-	export default {
-		data() {
-			return {
-				courseId: null,
-				tabList: [{
-					name: '详情'
-				}, {
-					name: '课程目录'
-				}],
-				learnList: [],
-				learncourse:{},
-				type:null,
-			}
-		},
-		computed: {
-			imgPath() {
-			  return this.$store.state.imgpath
-			},
-		},
-		onLoad(options) {
-			// 接收传递的课程 ID
-			if (options.courseId) {
-				console.log(options.courseId)
-				this.courseId = options.courseId;
-				if(options.type==1){
-					this.getCourseList()
-				}else{
-					this.getCourseListb()
-				}
-			}
-			
-		},
-		mounted() {
-		},
-		methods: {
-			goLive(item) {
-				console.log("id",item)
-				const id=item.videoId
-				const videoitem = {
-					videoId:item.videoId,
-					courseId:this.courseId
-				}
-				uni.navigateTo({
-					url: '/pages_course/video?videoitem='+JSON.stringify(videoitem)
-				})
-			},
-			getCourseListb() {
-				//私域看课
-				courseListB().then(res => {
-					console.log("课程列表", res)
-					if (res.code == 200) {
-						// 1. 根据 courseId 找到对应的课程
-						const course = res.data.find(item => item.courseId == this.courseId);
-						if (course && course.fsUserCourseVideoList) {
-							// 2. 映射数据到 learnList 格式
-							this.learncourse=course
-							this.learnList = course.fsUserCourseVideoList
-							console.log("learnList是多少》》", this.learnList)
-							console.log("learnList是多少", this.learncourse)
-							
-						} else {
-							console.warn("未找到课程或视频列表");
-							this.learnList = [];
-						}
-					} else {
-						uni.hideLoading();
-						uni.showToast({
-							title: res.msg,
-							icon: 'none'
-						});
-					}
-				})
-			},
-			getCourseList() {
-				courseList().then(res => {
-					console.log("课程列表", res)
-					if (res.code == 200) {
-						// 1. 根据 courseId 找到对应的课程
-						const course = res.data.find(item => item.courseId == this.courseId);
-						if (course && course.fsUserCourseVideoList) {
-							// 2. 映射数据到 learnList 格式
-							this.learncourse=course
-							this.learnList = course.fsUserCourseVideoList
-							console.log("learnList是多少》》", this.learnList)
-							console.log("learnList是多少", this.learncourse)
-							
-						} else {
-							console.warn("未找到课程或视频列表");
-							this.learnList = [];
-						}
-					} else {
-						uni.hideLoading();
-						uni.showToast({
-							title: res.msg,
-							icon: 'none'
-						});
-					}
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.containers {
-		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;
-					flex-shrink: 0;
-
-					.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;
-					min-width: 0;
-
-					.title {
-						font-size: 30rpx;
-						font-weight: 500;
-						overflow: hidden;
-						text-overflow: ellipsis;
-						display: -webkit-box;
-						-webkit-line-clamp: 2;
-						/* 控制显示行数 */
-						-webkit-box-orient: vertical;
-						word-break: break-all;
-						/* 允许单词内换行 */
-						max-height: 80rpx;
-						/* 根据字体大小调整 */
-						line-height: 40rpx;
-						/* 行高与字体大小匹配 */
-						width: 100%;
-						/* 确保宽度占满容器 */
-					}
-
-					.bottom {
-						display: flex;
-						// flex-direction: column;
-						justify-content: flex-end;
-						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;
-						}
-					}
-				}
-
-			}
-		}
-	}
+<template>
+	<view class="containers">
+		<view class="top">
+			<image class="bg " style="height: 600rpx;" :src="learncourse.imgUrl" mode="scaleToFill"></image>
+			<view class="top-box">
+				<view class="title">{{learncourse.courseName}}</view>
+				<view class="txt">
+					<image :src="imgPath+'/app/commonCourse/learn1.png'"></image>
+					<text>共{{learnList.length}}节课</text>
+				</view>
+			</view>
+		</view>
+		<view class="container-body">
+
+			<view class="list" v-for="(item,index) in learnList" :key="index">
+				<view class="img-box">
+					<view class="sub">第{{index+1}}课</view>
+					<image :src="item.videoImgUrl || imgPath+'/app/commonCourse/no-img.png'" mode="aspectFill"></image>
+				</view>
+				<view class="right">
+					<view class="title">{{item.title}}</view>
+					<view class="bottom">
+						<!-- <view class="tip">
+							<image :src="imgPath+'/app/commonCourse/learn3.png'" mode="widthFix"></image>
+							<text>答题送金币+200</text>
+						</view> -->
+						<!-- <view @click="goLive(item)" class="btn" v-if="item.stauts==0">已学习4%</view> -->
+						<view @click="goLive(item)" class="btn-red">去学习</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	// import { compile } from "vue";
+import {
+		courseList,
+		courseListB
+	} from '@/api/class.js'
+	
+	export default {
+		data() {
+			return {
+				courseId: null,
+				tabList: [{
+					name: '详情'
+				}, {
+					name: '课程目录'
+				}],
+				learnList: [],
+				learncourse:{},
+				type:null,
+			}
+		},
+		computed: {
+			imgPath() {
+			  return this.$store.state.imgpath
+			},
+		},
+		onLoad(options) {
+			// 接收传递的课程 ID
+			if (options.courseId) {
+				console.log(options.courseId)
+				this.courseId = options.courseId;
+				if(options.type==1){
+					this.getCourseList()
+				}else{
+					this.getCourseListb()
+				}
+			}
+			
+		},
+		mounted() {
+		},
+		methods: {
+			goLive(item) {
+				console.log("id",item)
+				const id=item.videoId
+				const videoitem = {
+					videoId:item.videoId,
+					courseId:this.courseId
+				}
+				uni.navigateTo({
+					url: '/pages_course/video?videoitem='+JSON.stringify(videoitem)
+				})
+			},
+			getCourseListb() {
+				//私域看课
+				courseListB().then(res => {
+					console.log("课程列表", res)
+					if (res.code == 200) {
+						// 1. 根据 courseId 找到对应的课程
+						const course = res.data.find(item => item.courseId == this.courseId);
+						if (course && course.fsUserCourseVideoList) {
+							// 2. 映射数据到 learnList 格式
+							this.learncourse=course
+							this.learnList = course.fsUserCourseVideoList
+							console.log("learnList是多少》》", this.learnList)
+							console.log("learnList是多少", this.learncourse)
+							
+						} else {
+							console.warn("未找到课程或视频列表");
+							this.learnList = [];
+						}
+					} else {
+						uni.hideLoading();
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						});
+					}
+				})
+			},
+			getCourseList() {
+				courseList().then(res => {
+					console.log("课程列表", res)
+					if (res.code == 200) {
+						// 1. 根据 courseId 找到对应的课程
+						const course = res.data.find(item => item.courseId == this.courseId);
+						if (course && course.fsUserCourseVideoList) {
+							// 2. 映射数据到 learnList 格式
+							this.learncourse=course
+							this.learnList = course.fsUserCourseVideoList
+							console.log("learnList是多少》》", this.learnList)
+							console.log("learnList是多少", this.learncourse)
+							
+						} else {
+							console.warn("未找到课程或视频列表");
+							this.learnList = [];
+						}
+					} else {
+						uni.hideLoading();
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						});
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.containers {
+		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;
+					flex-shrink: 0;
+
+					.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;
+					min-width: 0;
+
+					.title {
+						font-size: 30rpx;
+						font-weight: 500;
+						overflow: hidden;
+						text-overflow: ellipsis;
+						display: -webkit-box;
+						-webkit-line-clamp: 2;
+						/* 控制显示行数 */
+						-webkit-box-orient: vertical;
+						word-break: break-all;
+						/* 允许单词内换行 */
+						max-height: 80rpx;
+						/* 根据字体大小调整 */
+						line-height: 40rpx;
+						/* 行高与字体大小匹配 */
+						width: 100%;
+						/* 确保宽度占满容器 */
+					}
+
+					.bottom {
+						display: flex;
+						// flex-direction: column;
+						justify-content: flex-end;
+						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>

+ 172 - 172
pages_course/reward.vue

@@ -1,173 +1,173 @@
-<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: '',
-				sid:''
-			}
-		},
-		onLoad(option) {
-			if(option.packageInfo&&option.mchId){
-				uni.setStorageSync('mchId',option.mchId) 
-				uni.setStorageSync('receive_package',option.packageInfo)
-			}
-		},
-		mounted() {
-			this.sid=wx.getAccountInfoSync().miniProgram.appId
-		},
-		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('wxf9d43e667e4a80e3',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) => {
-						console.log('成功',res)
-				    },
-				    fail: (res) => {
-						console.log('失败',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;
-		}
-	}
+<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: '',
+				sid:''
+			}
+		},
+		onLoad(option) {
+			if(option.packageInfo&&option.mchId){
+				uni.setStorageSync('mchId',option.mchId) 
+				uni.setStorageSync('receive_package',option.packageInfo)
+			}
+		},
+		mounted() {
+			this.sid=wx.getAccountInfoSync().miniProgram.appId
+		},
+		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('wxf9d43e667e4a80e3',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) => {
+						console.log('成功',res)
+				    },
+				    fail: (res) => {
+						console.log('失败',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>

+ 273 - 273
pages_course/teacherClassroom.vue

@@ -1,274 +1,274 @@
-<template>
-	<view class="containers">
-		<view class="top">
-			<text class="title">
-			  <text class="title-brown-group">
-			    <text class="title-stroke">健康生活方式</text>
-			    <text class="title-fill">健康生活方式</text>
-			  </text>
-			  <text class="title-normal">大讲堂</text>
-			</text>
-			<image class="top-bg" :src="imgPath+'/app/commonCourse/famous1.png'"></image>
-			<view class="txt">
-				<view>让健康回归生活化,</view>
-				<view>以健康的生活方式,</view>
-				<view>改善健康困扰,重拾晚年幸福!</view>
-			</view>
-		</view>
-		<view class="container-body">
-			<image class="bg" :src="imgPath+'/app/commonCourse/bg-class.png'"></image>
-			<view class="title-wrap">
-			  <text class="title-stroke">{{type==1?'健康大讲堂':'生活大讲堂'}}</text>
-			  <text class="title-fill">{{type==1?'健康大讲堂':'生活大讲堂'}}</text>
-			</view>
-			<view class="card-box" v-for="(item,index) in cardList" :key="index" @click="goLearn(item.courseId)">
-				<view class="bar">
-					<image :src="imgPath+'/app/commonCourse/bar.png'" mode="widthFix"></image>
-					<view class="tit">{{item.courseName}}</view>
-				</view>
-				<view class="img-box">
-					<view class="img">
-						<image :src="item.imgUrl || imgPath+'/app/commonCourse/no-img.png'" mode="widthFix"></image>
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		courseList,
-		courseListB
-	} from '@/api/class.js'
-	export default {
-		data() {
-			return {
-				type:null,
-				cardList: [],
-				classListb:[]
-			}
-		},
-		computed: {
-			imgPath() {
-			  return this.$store.state.imgpath
-			},
-		},
-		mounted() {
-			
-		},
-		onLoad(option) {
-			this.type=option.type
-			if(this.type==1){
-				this.getCourseList()
-			}else{
-				this.getCourseListb()
-			}
-		},
-		methods: {
-			getCourseListb() {
-				//私域看课
-				courseListB().then(res => {
-					if (res.code == 200) {
-						this.cardList = res.data
-					} else {
-						uni.hideLoading();
-						uni.showToast({
-							title: res.msg,
-							icon: 'none'
-						});
-					}
-				})
-			},
-			getCourseList() {
-				courseList().then(res => {
-					if (res.code == 200) {
-						this.cardList = res.data
-					} else {
-						uni.hideLoading();
-						uni.showToast({
-							title: res.msg,
-							icon: 'none'
-						});
-					}
-				})
-
-			},
-			goLearn(id) {
-				uni.navigateTo({
-					url: '/pages_course/learn?courseId='+id+'&type='+this.type
-				})
-			},
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.containers {
-		background-color: #f6e5db;
-		min-height: 100vh;
-
-		.top {
-			position: relative;
-			z-index: 1;
-			font-size: 78rpx;
-			font-weight: 900;
-			text-align: center;
-			padding: 34rpx 0;
-
-			.title {
-			  	background: linear-gradient(to right, #333032, #5f3b32);
-			  	-webkit-background-clip: text;
-			  	background-clip: text;
-			  	-webkit-text-fill-color: transparent;
-			  	position: relative;
-			  	z-index: 2;
-			}
-			
-			/* 2. 双层渐变描边组合 */
-			.title-brown-group {
-			  position: relative;
-			  display: inline-block;
-			  line-height: 1;
-			}
-			
-			.title-stroke {
-			  position: absolute;
-			  top: 0;
-			  left: 0;
-			  z-index: 1;
-			  color: #fff;
-			  -webkit-text-stroke: 4rpx #fff;
-			  text-shadow: 2rpx 2rpx 4rpx rgba(183, 94, 52, 0.5);
-			}
-			
-			.title-fill {
-			  position: relative;
-			  z-index: 2;
-			  color: transparent;
-			  background: linear-gradient(to bottom, #c47243, #b0592a);
-			  -webkit-background-clip: text;
-			  background-clip: text;
-			  -webkit-text-fill-color: transparent;
-			}
-
-			.top-bg {
-				position: absolute;
-				top: 0;
-				left: 0;
-				width: 100%;
-				z-index: 0;
-			}
-
-			.txt {
-				font-style: italic;
-				text-align: left;
-				color: #fff;
-				font-size: 36rpx;
-				font-weight: 500;
-				position: absolute;
-				left: 8%;
-				top: 172rpx;
-				text-shadow:
-					0 0 1rpx #b0663c,
-					1rpx 1rpx 10rpx rgba(183, 0, 3, 0.3);
-			}
-		}
-
-		.container-body {
-			margin-top: 250rpx;
-			min-height: calc(100vh - 250rpx);
-			padding: 50rpx 24rpx;
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			position: relative;
-			z-index: 1;
-
-			.bg {
-				position: absolute;
-				top: 0;
-				left: 0;
-				width: 100%;
-				height: 100%;
-				object-fit: cover;
-				z-index: -1;
-			}
-
-			.title-wrap{
-			  position: relative;
-			  display: inline-block;
-			  font-size: 70rpx;
-			  font-weight: 900;
-			  line-height: 1;          /* 防止上下空隙 */
-			}
-			
-			/* 下层:白描边 + 投影 */
-			.title-stroke{
-			  position: absolute;
-			  top: 0;
-			  left: 0;
-			  z-index: 1;
-			  color: #fff;                           /* 描边色 */
-			  -webkit-text-stroke: 2rpx #fff;
-			  text-shadow: 2rpx 2rpx 4rpx rgba(183,94,52,.5);
-			}
-			
-			/* 上层:干净渐变填充 */
-			.title-fill{
-			  position: relative;
-			  z-index: 2;
-			  color: transparent;
-			  background: linear-gradient(to bottom, #c47243, #b0592a);
-			  -webkit-background-clip: text;
-			  background-clip: text;
-			  -webkit-text-fill-color: transparent;
-			}
-
-			.card-box {
-				width: 100%;
-				margin-top: 30rpx;
-
-				.bar {
-					position: relative;
-
-					image {
-						position: absolute;
-						width: 100%;
-						height: 100%;
-						z-index: -1;
-					}
-
-					.tit {
-						text-align: center;
-						line-height: 90rpx;
-						color: #fff;
-						font-weight: 500;
-						font-size: 36rpx;
-					}
-				}
-
-				.img-box {
-					margin-top: -8rpx;
-					padding: 24rpx;
-					background-color: #fff;
-					border-radius: 0 0 20rpx 20rpx;
-
-					.img {
-
-						max-height: 380rpx;
-						overflow: hidden;
-						border-radius: 20rpx;
-
-						image {
-							width: 100%;
-							height: 100%;
-						}
-					}
-				}
-
-			}
-		}
-
-	}
+<template>
+	<view class="containers">
+		<view class="top">
+			<text class="title">
+			  <text class="title-brown-group">
+			    <text class="title-stroke">健康生活方式</text>
+			    <text class="title-fill">健康生活方式</text>
+			  </text>
+			  <text class="title-normal">大讲堂</text>
+			</text>
+			<image class="top-bg" :src="imgPath+'/app/commonCourse/famous1.png'"></image>
+			<view class="txt">
+				<view>让健康回归生活化,</view>
+				<view>以健康的生活方式,</view>
+				<view>改善健康困扰,重拾晚年幸福!</view>
+			</view>
+		</view>
+		<view class="container-body">
+			<image class="bg" :src="imgPath+'/app/commonCourse/bg-class.png'"></image>
+			<view class="title-wrap">
+			  <text class="title-stroke">{{type==1?'健康大讲堂':'生活大讲堂'}}</text>
+			  <text class="title-fill">{{type==1?'健康大讲堂':'生活大讲堂'}}</text>
+			</view>
+			<view class="card-box" v-for="(item,index) in cardList" :key="index" @click="goLearn(item.courseId)">
+				<view class="bar">
+					<image :src="imgPath+'/app/commonCourse/bar.png'" mode="widthFix"></image>
+					<view class="tit">{{item.courseName}}</view>
+				</view>
+				<view class="img-box">
+					<view class="img">
+						<image :src="item.imgUrl || imgPath+'/app/commonCourse/no-img.png'" mode="widthFix"></image>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		courseList,
+		courseListB
+	} from '@/api/class.js'
+	export default {
+		data() {
+			return {
+				type:null,
+				cardList: [],
+				classListb:[]
+			}
+		},
+		computed: {
+			imgPath() {
+			  return this.$store.state.imgpath
+			},
+		},
+		mounted() {
+			
+		},
+		onLoad(option) {
+			this.type=option.type
+			if(this.type==1){
+				this.getCourseList()
+			}else{
+				this.getCourseListb()
+			}
+		},
+		methods: {
+			getCourseListb() {
+				//私域看课
+				courseListB().then(res => {
+					if (res.code == 200) {
+						this.cardList = res.data
+					} else {
+						uni.hideLoading();
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						});
+					}
+				})
+			},
+			getCourseList() {
+				courseList().then(res => {
+					if (res.code == 200) {
+						this.cardList = res.data
+					} else {
+						uni.hideLoading();
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						});
+					}
+				})
+
+			},
+			goLearn(id) {
+				uni.navigateTo({
+					url: '/pages_course/learn?courseId='+id+'&type='+this.type
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.containers {
+		background-color: #f6e5db;
+		min-height: 100vh;
+
+		.top {
+			position: relative;
+			z-index: 1;
+			font-size: 78rpx;
+			font-weight: 900;
+			text-align: center;
+			padding: 34rpx 0;
+
+			.title {
+			  	background: linear-gradient(to right, #333032, #5f3b32);
+			  	-webkit-background-clip: text;
+			  	background-clip: text;
+			  	-webkit-text-fill-color: transparent;
+			  	position: relative;
+			  	z-index: 2;
+			}
+			
+			/* 2. 双层渐变描边组合 */
+			.title-brown-group {
+			  position: relative;
+			  display: inline-block;
+			  line-height: 1;
+			}
+			
+			.title-stroke {
+			  position: absolute;
+			  top: 0;
+			  left: 0;
+			  z-index: 1;
+			  color: #fff;
+			  -webkit-text-stroke: 4rpx #fff;
+			  text-shadow: 2rpx 2rpx 4rpx rgba(183, 94, 52, 0.5);
+			}
+			
+			.title-fill {
+			  position: relative;
+			  z-index: 2;
+			  color: transparent;
+			  background: linear-gradient(to bottom, #c47243, #b0592a);
+			  -webkit-background-clip: text;
+			  background-clip: text;
+			  -webkit-text-fill-color: transparent;
+			}
+
+			.top-bg {
+				position: absolute;
+				top: 0;
+				left: 0;
+				width: 100%;
+				z-index: 0;
+			}
+
+			.txt {
+				font-style: italic;
+				text-align: left;
+				color: #fff;
+				font-size: 36rpx;
+				font-weight: 500;
+				position: absolute;
+				left: 8%;
+				top: 172rpx;
+				text-shadow:
+					0 0 1rpx #b0663c,
+					1rpx 1rpx 10rpx rgba(183, 0, 3, 0.3);
+			}
+		}
+
+		.container-body {
+			margin-top: 250rpx;
+			min-height: calc(100vh - 250rpx);
+			padding: 50rpx 24rpx;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			position: relative;
+			z-index: 1;
+
+			.bg {
+				position: absolute;
+				top: 0;
+				left: 0;
+				width: 100%;
+				height: 100%;
+				object-fit: cover;
+				z-index: -1;
+			}
+
+			.title-wrap{
+			  position: relative;
+			  display: inline-block;
+			  font-size: 70rpx;
+			  font-weight: 900;
+			  line-height: 1;          /* 防止上下空隙 */
+			}
+			
+			/* 下层:白描边 + 投影 */
+			.title-stroke{
+			  position: absolute;
+			  top: 0;
+			  left: 0;
+			  z-index: 1;
+			  color: #fff;                           /* 描边色 */
+			  -webkit-text-stroke: 2rpx #fff;
+			  text-shadow: 2rpx 2rpx 4rpx rgba(183,94,52,.5);
+			}
+			
+			/* 上层:干净渐变填充 */
+			.title-fill{
+			  position: relative;
+			  z-index: 2;
+			  color: transparent;
+			  background: linear-gradient(to bottom, #c47243, #b0592a);
+			  -webkit-background-clip: text;
+			  background-clip: text;
+			  -webkit-text-fill-color: transparent;
+			}
+
+			.card-box {
+				width: 100%;
+				margin-top: 30rpx;
+
+				.bar {
+					position: relative;
+
+					image {
+						position: absolute;
+						width: 100%;
+						height: 100%;
+						z-index: -1;
+					}
+
+					.tit {
+						text-align: center;
+						line-height: 90rpx;
+						color: #fff;
+						font-weight: 500;
+						font-size: 36rpx;
+					}
+				}
+
+				.img-box {
+					margin-top: -8rpx;
+					padding: 24rpx;
+					background-color: #fff;
+					border-radius: 0 0 20rpx 20rpx;
+
+					.img {
+
+						max-height: 380rpx;
+						overflow: hidden;
+						border-radius: 20rpx;
+
+						image {
+							width: 100%;
+							height: 100%;
+						}
+					}
+				}
+
+			}
+		}
+
+	}
 </style>

+ 2264 - 2229
pages_course/video.vue

@@ -1,2230 +1,2265 @@
-<!-- 自动发课看课页面 -->
-<template>
-	<view class="content">
-		<view class="header-nav" :style="{height: `calc(88rpx + ${statusBarHeight}px)`,paddingTop: statusBarHeight + 'px'}">
-			<view class="arrow-left-warning" @click="navback" v-if="isOpen==1">
-				<u-icon name="arrow-left" size='22' color="#222" bold></u-icon>
-			</view>
-			<view class="arrow-left-warning" v-else @click="feedback">
-				<image :src="imgPath+'/app/image/warning.png'"></image>
-				<text>投诉</text>
-			</view>
-			<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"
-			@controlstoggle="controlstoggle"
-			@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="showProgress"
-			:picture-in-picture-mode="[]"
-			:show-background-playback-button="false"
-			:src="videoUrl">
-			<!-- logo -->
-				<!-- 弹幕展示 -->
-				<template v-if="showDanmu==1&&openCommentStatus==2">
-					<text v-for="(item, index) in activeDanmus" :key="item.commentId" class="danmu-item danmuMove"
-						:style="item.danmustyle" @animationend="animationend(item,index)">
-						{{ item.content }}
-					</text>
-				</template>
-				<cover-view class="video-danmu-btnbox" :style="{display: openCommentStatus==2&&isfull&&crtShow&&isLogin&&isAddKf==1 ? 'block':'none'}">
-					<cover-image class="video-danmu-image" :src="imgPath+'/app/image/danmu_set.png'" @click="openDanmu(1)"></cover-image>
-				</cover-view>
-				<cover-image v-if="courseLogo" :class="isfull?'logo-full':'logo'" :src="courseLogo" mode="widthFix"></cover-image>
-			</video>
-		</view>
-		<!-- 弹幕方法 -->
-		<commentBox
-			v-if="openCommentStatus==2"
-			ref="danmuBox" 
-			:height="height" 
-			:urlOption="urlOption" 
-			:time="playTime"
-			:showDanmu="showDanmu"
-			:viewCommentNum="viewCommentNum"
-			:openCommentStatus="openCommentStatus"
-			@setInputText="setInputText" 
-			@getScrollTop="getScrollTop"
-			@getMore="getMore"
-			@getActiveDanmus="getActiveDanmus"></commentBox>
-		<view id="title-contentnav">
-			<view class="title-content" v-show="openCommentStatus!=1">
-				<!-- 答题时展示小节课程名,其他展示课程名 -->
-				<!-- 小节课程名 -->
-				<view class="subtitlebox" v-if="isLogin&&isAddKf==1">
-					{{courseInfo.title}}
-				</view>
-				<!-- 课程名字 -->
-				<view class="miantitlebox" v-else>
-					{{courseInfo.courseName}}
-				</view>
-			</view>
-			<view class="tabbox" v-if="openCommentStatus==1">
-				<view :class="currentTab == nav.id ? 'tabbox-active':''" v-for="nav in navList" :key="nav.id" @click="handleTab(nav.id)">{{nav.name}}</view>
-			</view>
-		</view>
-		<scroll-view
-		class="scroll-view" 
-		:style="{height: height}" 
-		:scroll-top="scrollTop" 
-		:scroll-y="true" 
-		:refresher-enabled="currentTab == 2"
-		:refresher-triggered="triggered"
-		@refresherrefresh="handleRefresher">
-			<template v-if="openCommentStatus==1">
-				<view v-show="currentTab==0">
-					<descInfoNav ref="descInfoNav" :isLogin="isLogin" :isAddKf="isAddKf" :courseInfo="courseInfo"></descInfoNav>
-				</view>
-				<view v-show="currentTab==2">
-					<commentBox 
-					ref="commentBox" 
-					:height="height" 
-					:urlOption="urlOption" 
-					:time="playTime"
-					:flagTime="flagTime"
-					:showDanmu="showDanmu"
-					:viewCommentNum="viewCommentNum"
-					:openCommentStatus="openCommentStatus"
-					@setInputText="setInputText" 
-					@getScrollTop="getScrollTop"
-					@getMore="getMore"></commentBox>
-				</view>
-			</template>
-			<view v-show="currentTab==1">
-				<template v-if="openCommentStatus!=1&&(courseInfo.title || courseInfo.description)">
-					<!-- 介绍 -->
-					<descInfo ref="descInfo" :isLogin="isLogin" :isAddKf="isAddKf" :courseInfo="courseInfo"></descInfo>
-				</template>
-				<!-- 问题 -->
-				<template v-if="isLogin&&isAddKf==1">
-					<ques ref="ques" :quesList="quesList" :openCommentStatus="openCommentStatus" @handleAnswer="handleAnswer"></ques>
-				</template>
-			</view>
-		</scroll-view>
-		<!-- 线路 -->
-		<view class="video-line" @click="openPop" v-if="isLogin&&isAddKf==1">
-			<image :src="imgPath+'/app/image/changePlayer-icon.png'"></image>
-			<text>线路{{numberToChinese(lineIndex + 1)}}</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)">
-						线路{{numberToChinese(index + 1)}}</view>
-				</view>
-			</view>
-		</uni-popup>
-		<!-- 温馨提示弹窗 -->
-		<uni-popup ref="tipsPopup" type="center" :is-mask-click="false">
-			<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>您已经观看课程一半的时间了,请注意休息并保持专注。</view>
-							</view>
-							<view class="tipsPopup-btn-box">
-								<view class="tipsPopup-btn" @click="closeTipsPop">继续观看领奖励</view>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</uni-popup>
-		<!-- 发送弹幕 -->
-		<view class="video-line danmu-line" @click="openDanmu(0)" v-if="isLogin&&isAddKf==1&&openCommentStatus==2">
-			<image class="set_image"  :src="imgPath+'/app/image/danmu_set_black.png'" mode="aspectFill"></image>
-			<text>发弹幕</text>
-		</view>
-		<!-- 发送弹幕弹窗 -->
-		<uni-popup ref="danmuPopup" type="bottom" style="z-index: 999;" @change="changeShowPopup">
-			<view class="danmuPopup" :style="{marginLeft:isfull ? statusBarHeight+'px': 0,marginBottom: danmuboxHeight+'px'}">
-				<view class="danmuPopup-head border-line">
-					<image class="danmu-icon" :src="showDanmu==0? imgPath+'/app/image/danmu-off.png':imgPath+'/app/image/danmu-on.png'" mode="heightFix" @click="switchDanmu()"></image>
-					<view class="u-border">
-						<input 
-						class="danmuPopup-input" 
-						placeholder="发个弹幕吧~" 
-						border="border"
-						:focus="focus"
-						:adjustPosition="false" 
-						:autoBlur="false" 
-						maxlength="50"
-						v-model.trim="inputText" />
-						<text style="font-size: 24rpx;color: #bbb;margin-left: 10rpx;">{{inputText?inputText.trim().length:0}}/50</text>
-					</view>
-					<button class="danmuPopup-send" @click="handleChatInput">发送</button>
-				</view>
-			</view>
-		</uni-popup>
-		<!-- 答题弹窗 -->
-		<uni-popup ref="answerPopup" type="center" :show="answerPopup">
-			<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-if="isOpen!=1" v-html="errDesc"></view>
-				<!-- 选择奖励 -->
-				<view class="reward-list" v-if="errTitle == '恭喜你,回答正确'&&isOpen!=1">
-					<radio-group class="reward-list-group" @change="rewardChange">
-						<label class="reward-list-option" v-for="(item, index) in rewardType" :key="item.value">
-							<radio :value="item.value+ ''" :checked="item.value == currentReward"
-								activeBorderColor="#FF5C03" activeBackgroundColor="#FF5C03"
-								style="transform:scale(0.7)" />
-							<view :style="{color: item.value == currentReward ? '#FF5C03':''}">{{item.name}}</view>
-						</label>
-					</radio-group>
-				</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>
-		</uni-popup>
-		<!-- 可以答题提示 -->
-		<view class="answerTip" v-if="isLogin&&currentTab!=1&&openCommentStatus==1&&showAnswerTip" @click="handleTab(1)">
-			<text>开始</text>
-			<text>答题</text>
-		</view>
-		<!-- 客服二维码弹窗 -->
-		<uni-popup ref="kfPopup" type="center" :mask-click="false">
-			<view class="kfqrcode-box">
-				<image class="kfqrcode" :src="qrcode" show-menu-by-longpress="true"></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>
-		</uni-popup>
-		<!-- footer -->
-		<view class="footer" v-show="currentTab!=2&&videoId">
-			<view class="footer-btn" v-if="!isLogin || isAddKf !=1" @click="submit">
-				<text>立即学习</text>
-			</view>
-			<view v-if="currentTab==1&&isLogin&&isAddKf==1&&quesList&&quesList.length>0" class="footer-btn footer-btn-border" @click="submit">
-				<text>{{isOpen==1 ? '提交答案':'提交答案领取奖励'}}</text>
-			</view>
-			<!-- <view @click="checked=!checked" class="agreement" v-if="!isLogin">
-				<radio value="r1" :checked="checked" color="#ff5c03" activeBorderColor="#ff5c03"
-					style="transform:scale(0.6);" />
-				<view>阅读并同意<text style="color: #ff5c03;" @click.stop="goWeb(0)">《用户协议》</text>和<text
-						style="color: #ff5c03;" @click.stop="goWeb(1)">《隐私协议》</text></view>
-			</view> -->
-		</view>
-		<view v-show="currentTab==2">
-			<view class="chatinput" :style="{bottom:danmuboxHeight>0?danmuboxHeight+'px':'calc(var(--window-bottom) + 24rpx)'}">
-				<input class="uni-input" v-model.trim="inputText" :adjustPosition="false" :autoBlur="false"  maxlength="140" placeholder="发消息···" confirm-type="send" @confirm="handleChatInput" />
-				<button class="send" @click="handleChatInput">发送</button>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import ques from "./components/ques.vue"
-	import descInfo from "./components/descInfo.vue"
-	import descInfoNav from "./components/descInfoNav.vue"
-	import commentBox from "./components/commentBox.vue"
-	import {TOKEN_KEYAuto,generateRandomString} from '@/utils/courseTool.js'
-	import dayjs from 'dayjs';
-	import {
-		getErrMsg,
-		getH5CourseByVideoId,
-		getH5CourseVideoDetails,
-		courseAnswer,
-		getFinishCourseVideo,
-		getIsAddKf,
-		getInternetTraffic,
-		getIntegralByH5Video,
-		sendReward,
-		loginByMp,
-		getRealLink
-	} from "@/api/courseAuto.js"
-	import {handleFsUserWx} from '@/api/courseLook.js'
-	export default {
-		components: {
-			descInfoNav,
-			descInfo,
-			commentBox,
-			ques,
-		},
-		data() {
-			return {
-				code: '',
-				baseUrl:uni.getStorageSync('requestPath'),
-				// 1 红包 2 积分
-				rewardType: [{
-					name: '红包奖励',
-					value: 1
-				}, {
-					name: '积分奖励',
-					value: 2
-				}],
-				currentReward: 1,
-				player: null,
-				loading: true,
-				progress: 0,
-				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: "",
-				isAddKf: 0,
-				lineIndex: 0,
-				// 是否展开
-				isExpand: true,
-				textHeight: 0, //文本高度
-				qwUserId: "",
-				qrcode: "",
-				corpId: "",
-				qrcodeMsg: "",
-				urlOption: {},
-				bufferRate: 0, // 缓冲时间
-				uuId: "",
-				isEnded: false,
-				// 是否允许拖动进度条
-				videolinkType: 0,
-				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:'',
-				focus: false,
-				openDanmuType: 0,
-				danmuboxHeight: 0,
-				user: {},
-				crtShow: true,
-				courseLogo: '',
-				isfull: false,
-				navList:[{
-					id: 0,
-					name: '介绍'
-				},{
-					id: 1,
-					name: '答题'
-				},{
-					id: 2,
-					name: '评论'
-				}],
-				currentTab: 1,
-				triggered: false,
-				// 没有更多
-				isMore: false,
-				inputText:"",
-				// 获取最多历史评论条数
-				viewCommentNum: 200,
-				// 1-开启评论;2-开启弹幕;3-关闭
-				openCommentStatus: 3,
-				showAnswerTip: false,
-				showDanmu: 1,
-				activeDanmus:[],
-				flagTime:0,
-				showProgress: true,
-				imgPath:this.$store.state.imgpath,
-				videoitem:null,
-				// 是否公开课
-				isOpen: 0,
-			}
-		},
-		//发送给朋友
-		onShareAppMessage(res) {
-			return {
-				title: this.$store.state.logoname,
-				path: '/pages/about/index',
-				imageUrl: this.$store.state.imgpath+'/app/image/logoshare.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
-			}
-			
-		},
-		//分享到朋友圈
-		onShareTimeline(res) {
-			return {
-				title: this.$store.state.logoname,
-				path: '/pages/about/index',
-				imageUrl: this.$store.state.imgpath+'/app/image/logoshare.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
-			}
-			
-		},
-		computed:{
-			appid() {
-				return this.$store.state.appid
-			},
-			isSpare() {
-				return this.$store.state.isSpare
-			},
-		},
-		onLoad(option) {
-			if(option.videoitem){
-				this.isOpen = 1
-				this.urlOption=JSON.parse(option.videoitem)
-				this.urlOption = {
-					...this.urlOption,
-					isOpen: 1
-				}
-			}else {
-				this.isOpen = 0
-				this.urlOption = option.course ? JSON.parse(option.course) : {}
-			}
-			uni.$on('usercode',(data)=>{
-				if(this.isSpare == 1&&data) {
-					this.code=data.code
-					this.goLogin(data)
-				}
-			})
-			this.videoId = this.urlOption.videoId
-			this.qwUserId = this.urlOption.qwUserId || ''
-			this.corpId = this.urlOption.corpId || ''
-			this.videolinkType = this.urlOption.linkType || 0
-
-			var that=this;
-			if (this.videoId) {
-				this.getH5CourseByVideo()
-			}
-			this.sortLink = this.urlOption.link || ''
-			this.getMenuButton()
-			// #ifndef H5
-			uni.onKeyboardHeightChange(this.keyboardHeightChange);
-			// #endif
-		},
-		onShow() {
-			this.tipsOpen = false
-			this.isExpand = true
-			// this.isLogin = this.$isLoginCourseAuto()
-			this.uuId = generateRandomString(16)
-			if(uni.getStorageSync('auto_userInfo') && JSON.stringify(uni.getStorageSync('auto_userInfo'))!='{}') {
-				this.user = JSON.parse(uni.getStorageSync('auto_userInfo'))
-			} else {
-				this.user = {}
-			}
-
-			if((this.sortLink||this.isOpen==1)&&!this.code){
-				this.getLink()
-			} else {
-				if(this.code) return;
-				uni.showToast({
-					title: '链接地址有误',
-					icon: 'none'
-				});
-			}
-		},
-		mounted() {
-			this.getIP()
-			this.getHeight()
-		},
-		onHide() {
-			// this.player = uni.createVideoContext('video-content-box');
-			if (this.player) {
-				this.player.pause()
-			}
-		},
-		onUnload() {
-			uni.$off('usercode')
-			if (this.interval != null) {
-				clearInterval(this.interval)
-				this.interval = null
-			}
-			this.clearIntegral()
-			// #ifndef H5
-			uni.offKeyboardHeightChange(this.keyboardHeightChange);
-			// #endif
-		},
-		beforeDestroy() {
-			uni.$off('usercode')
-			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()
-			// #ifndef H5
-			uni.offKeyboardHeightChange(this.keyboardHeightChange);
-			// #endif
-		},
-		methods: {
-			numberToChinese(number) {
-				if (number) {
-					const chineseNumber = ['一', '二', '三', '四', '五', '六', '七', '八', '九'];
-					return chineseNumber[number - 1];
-				} else {
-					return ''
-				}
-			},
-			keyboardHeightChange(res) {
-				// #ifndef H5
-				console.log("this.danmuboxHeight",this.danmuboxHeight)
-				 this.danmuboxHeight = res.height
-				// #endif
-			},
-			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 {
-					if (this.videolinkType != 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);
-					}
-					this.playTime = currentTime
-				}
-				if (Math.floor(e.detail.currentTime) != this.flagTime) {
-					this.flagTime = Math.floor(e.detail.currentTime)
-					let answerType = this.$store.state.answerType;
-					
-					this.showAnswerTip = answerType == 1 ? this.shouldShowByRate(this): this.shouldShowByLastMinute(this);
-					if(this.openCommentStatus == 2) {
-						this.$refs.danmuBox&&this.$refs.danmuBox.checkDanmu(this.flagTime)
-					}
-				}
-			},
-			// 工具函数:保留两位小数的百分比(0~100)
-			calcPercent(play, total) {
-			  return Number(((play || 0) / (total || 1) * 100).toFixed(2));
-			},
-			
-			// 策略1:按完课领红包
-			shouldShowByRate({ playTime, duration, config }) {
-			  const finished = this.calcPercent(playTime, duration) >= Number(config?.answerRate || 100);
-			  return finished;
-			},
-			
-			// 策略2:完课且最后一分钟可领(第二次进来只看是否已完课)
-			shouldShowByLastMinute({ isEnded, isFinish, playTime, duration }) {
-			  const alreadyDone = isEnded || isFinish == 1;          // 已完课
-			  const inLastMinute = playTime >= (duration || 0) - 60;  // 最后一分钟
-			  return alreadyDone || inLastMinute;
-			},
-			changeTime(that,e) {
-				that.playDurationSeek = 0
-			},
-			videoErrorCallback(e) {
-				this.clearIntegral()
-				this.errorCount++
-				if (this.errorCount > 3) return
-				if (this.interval != null) {
-					clearInterval(this.interval)
-				}
-				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.showAnswerTip = true
-				// this.playDurationSeek = 0
-				this.isFinish = 1
-				this.showProgress = true
-				this.getFinishCourseVideo()
-			},
-			fullscreenchange(event) {
-				this.isfull = event.detail.fullScreen
-				if(this.isfull) {
-					this.$refs.danmuBox&&this.$refs.danmuBox.initTracks()
-				}
-			},
-			controlstoggle(event) {
-				this.crtShow =  event.detail.show
-			},
-			getIP() {
-				uni.request({
-					url: 'https://ipinfo.io/json', //仅为示例,并非真实接口地址。
-					method: 'GET',
-					success: (res) => {
-						this.ip = res.data.ip
-					}
-				});
-			},
-			getHeight() {
-				setTimeout(()=>{
-					const query = uni.createSelectorQuery().in(this);
-					query
-						.select("#title-contentnav")
-						.boundingClientRect((data) => {
-							if(data) {
-								this.height =
-									`calc(100vh - ${data.height}px - 420rpx - ${this.statusBarHeight}px - 75px - 88rpx)`
-							}
-						})
-						.exec();
-				},200)
-			},
-			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
-				}
-			},
-			getH5CourseByVideo() {
-				this.loading = true
-				getH5CourseByVideoId({
-					videoId: this.videoId
-				}).then(res => {
-						this.loading = false
-						if (res.code == 200) {
-							this.courseInfo = res.data
-							uni.setNavigationBarTitle({
-								title: this.courseInfo && this.courseInfo.title ? this.courseInfo.title : ''
-							});
-						}
-						this.getHeight()
-						this.$nextTick(()=>{
-							this.$refs.descInfo&&this.$refs.descInfo.getDescHeight()
-							this.$refs.descInfoNav&&this.$refs.descInfoNav.getDescHeight()
-						})
-					},
-					rej => {
-						this.loading = false
-					}
-				).catch(() => {
-					this.loading = false
-				})
-			},
-			getH5CourseVideoDetails(type) {
-				getH5CourseVideoDetails(this.urlOption).then(res => {
-						if (res.code == 200) {
-							this.config = res.config || {}
-							this.courseLogo = res.config&&res.config.courseLogo
-							this.isFinish = res.isFinish || 0
-							this.duration = res.course && res.course.duration ? res.course.duration : 0
-							this.playDuration = res.playDuration || 0
-							this.tipsTime = res.tipsTime || 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
-							this.viewCommentNum = res.config&&res.config.viewCommentNum || 200
-		
-							const status = res.config&&res.config.openCommentStatus || 3
-							if(status != this.openCommentStatus) {
-								if(this.openCommentStatus != 3 && status==3) {
-									this.$refs.commentBox&&this.$refs.commentBox.closeWSocket()
-									this.$refs.danmuBox&&this.$refs.danmuBox.closeWSocket()
-								}
-								this.openCommentStatus = this.isOpen == 1 ? 3: status
-							}
-							this.currentTab = 1
-							if(this.openCommentStatus!=2 || this.showDanmu!=1) {
-								this.activeDanmus = []
-							}
-							if (!this.player || type == 'error') {
-								this.lineIndex = this.config.defaultLine
-								this.videoUrl = lineList[this.lineIndex]
-								this.poster= res.course && res.course.imgUrl ? res.course.imgUrl : ''
-								this.playTime = this.playDuration >= this.duration ? 0 : this.playDuration
-								this.playDurationSeek = this.playTime
-								setTimeout(()=>{
-									this.player = uni.createVideoContext('video-content-box');
-									this.player.seek(this.playTime)
-									this.player.play();
-								},500);
-							} else {
-								this.playTime = this.playTime > this.playDuration ? this.playTime : this.playDuration >= this.duration ? 0 : this.playDuration
-								this.playDurationSeek = this.playTime
-								this.player.seek(this.playTime)
-								this.player.play();
-							}
-							this.updateTime();
-							this.quesList = res.questions && res.questions.length > 0 ? res.questions : [],
-								this.quesList = this.quesList.map(item => ({
-									...item,
-									questionOption: JSON.parse(item.question),
-									answer: ''
-								}))
-						}
-						this.getHeight()
-						this.$nextTick(()=>{
-							this.$refs.descInfo&&this.$refs.descInfo.getDescHeight()
-							this.$refs.descInfoNav&&this.$refs.descInfoNav.getDescHeight()
-						})
-					},
-					rej => {}
-				)
-			},
-			handleAnswer(val) {
-				let {item, option,index} = val
-				if(this.$store.state.answerType == 1) {
-					// 按照完课领红包
-					let rate = 0
-					if(this.isEnded || this.isFinish==1) {
-						rate = 1
-					} else {
-						rate = (Number(this.playTime || 0) / Number(this.duration || 0)).toFixed(2)
-					}
-					if(Number(this.duration || 0) == 0 || rate*100 < Number(this.config.answerRate || 100)) {
-						uni.showToast({
-							title: "请先观看完整课程再答题哦~",
-							icon: "none"
-						})
-						return
-					}
-				} else {
-					// 按照完课且最后一分钟领红包(完课第二次进来就不需要最后一分钟)
-					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[index].type == 1) {
-					// 单选option
-					this.quesList[index].answer = option.name
-				} else if (this.quesList[index].type == 2) {
-					// 多选
-					let answer = this.quesList[index].answer ? this.quesList[index].answer.split(',') : []
-					if (answer.indexOf(option.name) === -1) {
-						answer.push(option.name)
-						this.quesList[index].answer = answer.join(',')
-					} else {
-						answer.splice(answer.indexOf(option.name), 1)
-						this.quesList[index].answer = answer.join(',')
-					}
-				}
-			},
-			submit() {
-				if(this.isExpire){
-					uni.showToast({
-						title: '课程已过期或链接无效',
-						icon: 'none'
-					});
-					return
-				}
-				// 登录
-				this.$isLoginCourseAuto().then(
-					res => {
-						if(res){
-							if (this.isAddKf == 1) {
-								//答题  您已提交过答案,请领取红包
-								this.courseAnswer()
-							} else {
-								// 添加客服
-								if (this.videoId && this.qwUserId) {
-									this.getIsAddKf()
-								} else {
-									uni.showToast({
-										title: '请添加客服',
-										icon: 'none'
-									})
-								}
-							} 
-						} else{
-							this.goLogin()
-						}
-					},
-					rej => {}
-				);
-			},
-			// 答题
-			courseAnswer() {
-				if(this.$store.state.answerType == 1) {
-					// 按照完课领红包
-					let rate = 0
-					if(this.isEnded || this.isFinish==1) {
-						rate = 1
-					} else {
-						rate = (Number(this.playTime || 0) / Number(this.duration || 0)).toFixed(2)
-					}
-					if(Number(this.duration || 0) == 0 || rate*100 < Number(this.config.answerRate || 100)) {
-						uni.showToast({
-							title: "请先观看完整课程再答题哦~",
-							icon: "none"
-						})
-						return
-					}
-				} else {
-					// 按照完课且最后一分钟领红包(完课第二次进来就不需要最后一分钟)
-					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,
-					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.errTitle = "很遗憾答错了"
-									this.errDesc = `<span style="color:#FF5C03">还有${res.remain}次机会,继续加油</span>`
-									this.$refs.answerPopup.open("center")
-								}
-							} else {
-								// 答题成功
-								this.errTitle = "恭喜你,回答正确"
-								this.errDesc = `请选择奖励`
-								// this.$refs.answerPopup.open("center")
-								if(this.isOpen==1) {
-									this.$refs.answerPopup.open("center")
-									return
-								}
-								this.closeAnswerPopup(1)
-							}
-						} else {
-							if (res.msg == "该课题到达答错次数限制") {
-								this.errTitle = "答题次数超过限制"
-								this.errDesc = "以后的课程要认真学习哦"
-								this.$refs.answerPopup.open("center")
-							} else {
-								uni.showToast({
-									title: res.msg,
-									icon: "none"
-								})
-							}
-						}
-					},
-					rej => {}
-				)
-			},
-			// 选择
-			rewardChange(e) {
-				this.currentReward = e.detail.value
-			},
-			closeAnswerPopup(type) {
-				this.$refs.answerPopup.close()
-				if(this.isOpen==1) {
-					return
-				}
-				if (this.errTitle == '恭喜你,回答正确') {
-					let param = {
-						...this.urlOption,
-						rewardType: Number(this.currentReward),
-						source: 2,
-						appId: this.appid
-					}
-					if(type==1) {
-						param = {
-							...this.urlOption,
-							source: 2,
-							appId: this.appid
-						}
-					}
-					sendReward(param).then(res => {
-						if(res.isNew&&res.isNew==1) {
-							const packageInfo = res.data.packageInfo || ''
-							if(packageInfo) {
-								uni.setStorageSync('receive_package',packageInfo);
-								if(res.mchId) uni.setStorageSync('mchId',res.mchId);
-								uni.navigateTo({
-									url: '/pages_course/reward'
-								})
-							}
-						} else {
-							uni.showToast({
-								title: res.msg,
-								icon: 'none'
-							})
-						}
-					})
-				}
-			},
-			// 线路
-			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 {
-					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.close()
-				}
-
-			},
-			// 温馨提示
-			openTipsPop() {
-				this.$refs.tipsPopup.open()
-				this.tipsOpen = true
-				this.pause()
-			},
-			closeTipsPop() {
-				this.$refs.tipsPopup.close()
-			},
-			// 客服
-			getIsAddKf() {
-				this.qrcode = ''
-				this.qrcodeMsg = ''
-				this.isAddKf = 0
-				getIsAddKf(this.urlOption).then(res => {
-						if (res.code == 200) {
-							this.isAddKf = 1
-							this.getH5CourseVideoDetails()
-						} else if (res.code == 400) {
-							this.isAddKf = 0
-							this.qrcode = res.qrcode
-							this.qrcodeMsg = res.msg
-							this.$refs.kfPopup.open()
-						} else if (res.code == 504) {
-							// 登录
-							// this.goLogin()
-						} else if (res.code == 566) {
-							// 官方群发通用链接
-							const url = res.courseLink.realLink.split('?course=')[1]
-							this.urlOption = JSON.parse(url)
-							this.isAddKf = 1
-							this.getH5CourseVideoDetails()
-						} else if (res.code == 567) {
-							// 群聊通用链接
-							this.urlOption = {
-								...this.urlOption,
-								qwExternalId: res.qwExternalId
-							}
-							this.isAddKf = 1
-							this.getH5CourseVideoDetails()
-						} else {
-							this.isAddKf = 0
-							uni.showToast({
-								title: res.msg,
-								icon: 'none'
-							});
-						}
-					},
-					err => {}
-				);
-			},
-			closeKFPop() {
-				this.$refs.kfPopup.close()
-			},
-			getFinishCourseVideo() {
-				if (!this.playTime || this.isAddKf!=1 ||!this.isLogin) return
-				const param = {
-					duration: this.playTime,
-					...this.urlOption
-				}
-				getFinishCourseVideo(param)
-			},
-			// 每十分钟获得积分
-			getIntegralByH5Video() {
-				if(this.isAddKf!=1||!this.isLogin) return
-				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)
-			},
-			// 缓冲
-			getInternetTraffic() {
-				if(!this.isLogin||this.isAddKf!=1) return
-				const playVideoTime = Math.ceil(this.playTime / this.duration * 100) // 播放百分比
-				if(this.bufferRate == 0 || this.bufferRate < playVideoTime) {
-					this.bufferRate = playVideoTime
-				}
-				if(this.bufferRate == 0 || Number(this.bufferRate.toFixed(2)) == 0) return
-				const param = {
-					...this.urlOption,
-					uuId: dayjs().format('YYYYMMDD') + this.uuId,
-					duration: this.playTime,
-					bufferRate: Number(this.bufferRate.toFixed(2)),
-				}
-				if(!param.bufferRate) return
-				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(data) {
-				if(data || this.isSpare==1) {
-					this.loginFsUserWx(data)
-					return
-				}
-				let provider = 'weixin'
-				uni.login({
-					provider: provider,
-					success: async loginRes => {
-						console.log(loginRes)
-						uni.getUserInfo({
-						   provider: provider,
-						   success: (infoRes)=> {
-							    uni.showToast({
-									title: '处理中...',
-									icon: 'loading'
-							    });
-								loginByMp({
-									code: loginRes.code,
-									encryptedData:infoRes.encryptedData,
-									iv:infoRes.iv,
-									appId: this.appid
-								}).then(res=>{
-									 uni.hideLoading();
-									 if (res.code == 200) {
-										uni.setStorageSync(TOKEN_KEYAuto, res.token);
-										uni.setStorageSync('auto_userInfo', JSON.stringify(res.user));
-										this.user = res.user
-										this.isLogin = true
-										console.log("TOKEN_KEYAuto",TOKEN_KEYAuto)
-										this.getIsAddKf() 
-									 } else {
-										uni.showToast({
-											title: res.msg,
-											icon: 'none'
-										});
-									 }
-								 }).catch(err=>{
-									uni.hideLoading();
-									uni.showToast({
-										icon:'none',
-										title: "登录失败,请重新登录",
-									});
-								});
-						   }
-						});
-					}
-				})
-			},
-			getLink() {
-				let that = this;
-				this.msg = ''
-				if(this.isOpen==1) {
-					if (this.isLogin && this.isAddKf == 1) {
-						this.getH5CourseVideoDetails()
-					}
-					if (this.videoId &&this.isAddKf != 1) {
-						this.$isLoginCourseAuto().then(
-							isLogin => {
-								this.isLogin = isLogin
-								if(isLogin){
-									this.getIsAddKf() 
-								} else {
-									this.goLogin()
-								}
-							},
-							rej => {}
-						);
-					}
-					return
-				}
-				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.$isLoginCourseAuto().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 = 1000, 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)
-			    }
-			},
-			// 弹幕
-			openDanmu(type) {
-				this.openDanmuType = type
-				this.inputText = ''
-				if(type == 1) {
-					this.player.exitFullScreen()
-				}
-				this.$refs.danmuPopup.open()
-			},
-			changeShowPopup(val) {
-				this.focus = val.show
-			},
-			switchDanmu() {
-				this.showDanmu = this.showDanmu == 1 ? 0:1
-				if(this.showDanmu == 0&&this.$refs.danmuBox) {
-					this.$refs.danmuPopup.close()
-					this.activeDanmus = []
-					this.$refs.danmuBox.activeDanmus = []
-					this.$refs.danmuBox.initTracks()
-				}
-			},
-			getScrollTop(res) {
-				if(this.currentTab == 2) {
-					this.scrollTop = res
-				} else {
-					this.scrollTop = 0
-				}
-			},
-			handleTab(index) {
-				this.currentTab = index
-				if(this.currentTab==2) {
-					if(this.$refs.commentBox) {
-						this.$refs.commentBox.msgs = []
-						this.$refs.commentBox.pageNum = 1
-						this.$refs.commentBox.getCommentsFun()
-					}
-				} else {
-					setTimeout(()=>{
-						this.scrollTop = 0
-					},100)
-				}
-			},
-			handleRefresher() {
-				this.triggered = true;
-				if (!this.isMore&&this.currentTab==2&&this.openCommentStatus==1) {
-					this.$nextTick(()=>{
-						this.$refs.commentBox&&this.$refs.commentBox.getCommentsFun()
-					})
-				}
-				setTimeout(() => {
-					this.triggered = false;
-				}, 500);
-			},
-			getMore(val) {
-				this.triggered = false;
-				this.isMore = val == 1
-			},
-			handleChatInput() {
-				this.inputText = this.inputText.trim()
-				if (this.inputText == "" || this.inputText.trim() == "") {
-					uni.showToast({
-						title: '请输入评论',
-						icon: "none"
-					})
-					return;
-				}
-				if(this.openCommentStatus==1) {
-					this.$refs.commentBox&&this.$refs.commentBox.handleInput(this.inputText)
-				} else if(this.openCommentStatus==2) {
-					this.$refs.danmuBox&&this.$refs.danmuBox.handleInput(this.inputText)
-				}
-			},
-			setInputText() {
-				this.inputText = ""
-				if(this.openCommentStatus==2) {
-					this.$refs.danmuPopup.close()
-				}
-			},
-			getActiveDanmus(val) {
-				this.activeDanmus = val.map(item=>({
-					...item,
-					danmustyle: {
-						top: item.top + 'px',
-						...item.style, 
-						'animation-duration': '8s'
-					}
-				}))
-			},
-			animationend(moveItem, i) {
-				// 移除动画结束的弹幕(性能优化)
-				if(this.openCommentStatus==2) {
-					this.$refs.danmuBox&&this.$refs.danmuBox.animationend(moveItem, i)
-				}
-			},
-			navback() {
-				const pages = getCurrentPages(); // 获取当前页面栈
-				if (pages.length > 1) {
-				   uni.navigateBack(); // 有上一页才返回
-				} else { 
-				  // 如果是首页,跳转到某个默认页面(如首页)
-				  uni.reLaunch({ url: '/pages/index/index' }); // 或者用 switchTab 如果是 tabBar 页面
-				}
-			},
-			feedback() {
-				const userId = this.user.userId || ''
-				const courseId = this.urlOption.courseId || ''
-				const videoId = this.urlOption.videoId || ''
-				const companyId = this.urlOption.companyId || ''
-				const companyUserId = this.urlOption.companyUserId || ''
-				uni.navigateTo({
-					url: './feedback?userId='+userId+'&courseId='+courseId+'&videoId='+videoId+'&companyId='+companyId+'&companyUserId='+companyUserId
-				})
-			},
-			// 公开课登录\备用登录
-			async loginFsUserWx(data){
-				if(data){
-					console.log('huoqu1222',data)
-					uni.showLoading({
-						title: '登录中'
-					})
-					uni.login({
-						provider: "weixin",
-						success: async loginRes => {
-							console.log(loginRes)
-							let code = loginRes.code // 获取开发code
-							handleFsUserWx({
-							   code: code,
-							   appId:this.appid,
-							   userId:data.userId
-							})
-							.then( res => {
-								uni.hideLoading();
-								if(res.code==200){
-									console.log("loginFsUserWx:",res)
-									// this.userinfos=uni.getStorageSync('userinfos')
-									let token = uni.getStorageSync('TOKEN_WEXIN');
-									let user = uni.getStorageSync('userInfo')
-									// this.userInfo=uni.getStorageSync('userInfo');
-									// this.isLogin = true
-									uni.setStorageSync(TOKEN_KEYAuto, token);
-									uni.setStorageSync('auto_userInfo', JSON.stringify(user));
-									this.user = user
-									this.isLogin = true
-									this.getIsAddKf() 
-								}else if(res.code==406){
-									uni.showToast({
-										icon:'none',
-										title: '该用户已成为其他销售会员',
-									});
-								}else{
-									uni.showToast({
-										icon:'none',
-										title: res.msg,
-									});
-								}
-							   
-							 })
-						},
-					})
-				}else{
-					uni.setStorageSync('H5course',{
-						companyId: this.urlOption.companyId,
-						companyUserId:this.urlOption.companyUserId,
-						type: 1, //1自动,其他手动
-					})
-					await this.$store.dispatch('getWebviewUrl');
-					uni.navigateTo({
-						url:'/pages_course/webview?H5course='+uni.getStorageSync('H5course')
-					})
-				}
-			}
-		}
-	}
-</script>
-
-<style scoped>
-.full-width-popup {
-  width: 100%;
-}
-</style>
-<style lang="scss" scoped>
-	@mixin u-flex($flexD, $alignI, $justifyC) {
-		display: flex;
-		flex-direction: $flexD;
-		align-items: $alignI;
-		justify-content: $justifyC;
-	}
-	.footer-tips {
-		margin-top: 14rpx;
-		text-align: center;
-		font-family: PingFang SC,PingFang SC;
-		font-weight: 500;
-		font-size: 12px;
-		color: #bbb;
-	}
-	.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;
-	}
-
-	.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));
-		.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: 36rpx;
-			color: #222222;
-		}
-
-		.subtitlebox {
-			padding: 30rpx 0;
-			border-bottom: 2rpx solid #F5F7FA;
-			font-family: PingFang SC, PingFang SC;
-			font-weight: 500;
-			font-size: 36rpx;
-			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;
-			}
-		}
-
-		.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: 34rpx;
-				width: 34rpx;
-				margin-right: 6rpx;
-			}
-		}
-		.danmu-line {
-			bottom: calc(var(--window-bottom) + 370rpx);
-			word-break: keep-all;
-			.set_image {
-				height: 40rpx;
-				width: 40rpx;
-			}
-		}
-
-		.footer {
-			border-top: 1rpx solid #ededef;
-			background: #fff;
-			width: 100%;
-			position: fixed;
-			bottom: 0;
-			padding: 32rpx;
-			padding-bottom: calc(var(--window-bottom) + 12rpx);
-			box-sizing: border-box;
-			z-index: 9;
-
-			&-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;
-	}
-	 
-	.agreement {
-		display: inline-flex;
-		margin-top: 16rpx;
-		font-size: 24rpx;
-		color: #525252;
-		align-items: center;
-		justify-content: center;
-	}
-	.video-danmu-btnbox {
-		width: 50px;
-		height: 50px;
-		border-radius: 50%;
-		overflow: hidden;
-		position: absolute;
-		right: 10px;
-		bottom: calc(50% - 50px);
-		transform: translateY(-50%);
-		padding: 8px;
-		box-sizing: border-box;
-	}
-	.video-danmu-image {
-		width: 100%;
-		height: 100%;
-	}
-	.danmuPopup {
-		background-color: #fff;
-		padding-bottom: calc(var(--window-bottom) + 10px);
-		.u-border {
-			flex: 1;
-			@include u-flex(row,center,flex-start);
-			padding: 0 10rpx;
-			border-radius: 6px;
-			border: 1rpx solid #eee;
-		}
-		&-head {
-			width: 100%;
-			padding: 10px;
-			box-sizing: border-box;
-			overflow: hidden;
-			@include u-flex(row,center,flex-start);
-			.danmu-icon {
-				height: 24px;
-				width: 24px;
-				margin-right: 12px;
-			}
-		}
-		&-input {
-			flex: 1;
-			height: 35px;
-		}
-		&-send {
-			flex-shrink: 0;
-			height: 35px;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			padding: 5px 15px;
-			box-sizing: border-box;
-			background: #FF5C03 !important;
-			border-radius: 22px;
-			font-family: PingFang SC, PingFang SC;
-			font-weight: 500;
-			font-size: 15px;
-			color: #fff !important;
-			margin-left: 12px;
-			&::after {
-				border: none;
-			}
-		}
-		&-con {
-			background-color: #F5F7FA;
-			padding: 24px 12px 48px 12px;
-			font-family: PingFang SC, PingFang SC;
-			font-weight: 400;
-			font-size: 14px;
-			color: #757575;
-		}
-	}
-	.danmu-icon{
-		height: 24px;
-		width: 24px;
-		margin-right: 12px;
-	}
-	.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;
-	}
-	.tabbox {
-		@include u-flex(row, center, center);
-		border-bottom: 2rpx solid #F5F7FA;
-		height: 44px;
-		background-color: #fff;
-		view {
-			flex: 1;
-			padding: 20rpx 0;
-			margin-right: 40rpx;
-			text-align: center;
-		}
-		&-active {
-			position: relative;
-			&::after {
-				position: absolute;
-				bottom: 0;
-				left: 50%;
-				transform: translateX(-50%);
-				content: "";
-				width: 3rem;
-				border-bottom: 4px solid #FF5C03;
-			}
-		}
-	}
-	.chatinput {
-		position: fixed;
-		left: 32rpx;
-		right: 32rpx;
-		z-index: 999;
-		height: 96rpx;
-		background-color: green;
-		background: #FFFFFF;
-		box-shadow: 0rpx 8rpx 21rpx 0rpx rgba(0, 0, 0, 0.1);
-		border-radius: 24rpx 24rpx 24rpx 24rpx;
-		@include u-flex(row, center, center);
-		padding: 0 24rpx;
-		box-sizing: border-box;
-		.uni-input {
-			flex: 1;
-			margin-right: 32rpx;
-			font-size: 30rpx;
-		}
-	
-		.send {
-			font-family: PingFang SC, PingFang SC;
-			font-weight: 400;
-			font-size: 28rpx;
-			color: #FFFFFF !important;
-			flex-shrink: 0;
-			padding: 0 20rpx;
-			height: 72rpx;
-			background: #FF5C03 !important;
-			border-radius: 8rpx 8rpx 8rpx 8rpx;
-			&::after {
-				border: none;
-			}
-		}
-	}
-	.answerTip {
-		position: fixed;
-		right: 0;
-		z-index: 9;
-		bottom: calc(var(--window-bottom) + 380rpx);
-		box-shadow: 0rpx 8rpx 21rpx 0rpx rgba(0, 0, 0, 0.1);
-		border-radius: 24rpx 24rpx 24rpx 24rpx;
-		background-color: #ff5c03;
-		color: #fff;
-		border-radius: 50%;
-		height: 90rpx;
-		width: 90rpx;
-		font-size: 25rpx;
-		text-align: center;
-		padding: 10rpx;
-		@include u-flex(column, center, center);
-	}
-	.danmu-item {
-		position: absolute;
-		top: 0;
-		white-space: nowrap;
-		font-size: 16px;
-		height: 20px;
-		display: inline-flex;
-		box-sizing: border-box;
-		align-items: center;
-	}
-	.danmuMove {
-		// animation: mymove 8s linear forwards;
-		// animation-duration: 8s;
-		animation-timing-function: linear;
-		animation-delay: 0s;
-		animation-iteration-count: 1;
-		animation-direction: normal;
-		animation-fill-mode: forwards;
-		animation-play-state: running;
-		animation-name: mymove;
-		will-change: transform;
-	}
-	
-	@keyframes mymove {
-		from {
-			transform: translateX(100vw);
-		}
-	
-		to {
-			transform: translateX(-100%);
-		}
-	}
-	.arrow-left-warning {
-		position: absolute;
-		left: 24rpx;
-		height: 88rpx;
-		overflow: hidden;
-		color: #888;
-		font-size: 24rpx;
-		@include u-flex(column, center, center);
-		image {
-			flex-shrink: 0;
-			height: 36rpx;
-			width: 36rpx;
-		}
-	}
+<!-- 自动发课看课页面 -->
+<template>
+	<view class="content">
+		<view class="header-nav" :style="{height: `calc(88rpx + ${statusBarHeight}px)`,paddingTop: statusBarHeight + 'px'}">
+			<view class="arrow-left-warning" @click="navback" v-if="isOpen==1">
+				<u-icon name="arrow-left" size='22' color="#222" bold></u-icon>
+			</view>
+			<view class="arrow-left-warning" v-else @click="feedback">
+				<image :src="imgPath+'/app/image/warning.png'"></image>
+				<text>投诉</text>
+			</view>
+			<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"
+			@controlstoggle="controlstoggle"
+			@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="showProgress"
+			:picture-in-picture-mode="[]"
+			:show-background-playback-button="false"
+			:src="videoUrl">
+			<!-- logo -->
+				<!-- 弹幕展示 -->
+				<template v-if="showDanmu==1&&openCommentStatus==2">
+					<text v-for="(item, index) in activeDanmus" :key="item.commentId" class="danmu-item danmuMove"
+						:style="item.danmustyle" @animationend="animationend(item,index)">
+						{{ item.content }}
+					</text>
+				</template>
+				<cover-view class="video-danmu-btnbox" :style="{display: openCommentStatus==2&&isfull&&crtShow&&isLogin&&isAddKf==1 ? 'block':'none'}">
+					<cover-image class="video-danmu-image" :src="imgPath+'/app/image/danmu_set.png'" @click="openDanmu(1)"></cover-image>
+				</cover-view>
+				<cover-image v-if="courseLogo" :class="isfull?'logo-full':'logo'" :src="courseLogo" mode="widthFix"></cover-image>
+			</video>
+		</view>
+		<!-- 弹幕方法 -->
+		<commentBox
+			v-if="openCommentStatus==2"
+			ref="danmuBox" 
+			:height="height" 
+			:urlOption="urlOption" 
+			:time="playTime"
+			:showDanmu="showDanmu"
+			:viewCommentNum="viewCommentNum"
+			:openCommentStatus="openCommentStatus"
+			@setInputText="setInputText" 
+			@getScrollTop="getScrollTop"
+			@getMore="getMore"
+			@getActiveDanmus="getActiveDanmus"></commentBox>
+		<view id="title-contentnav">
+			<view class="title-content" v-show="openCommentStatus!=1">
+				<!-- 答题时展示小节课程名,其他展示课程名 -->
+				<!-- 小节课程名 -->
+				<view class="subtitlebox" v-if="isLogin&&isAddKf==1">
+					{{courseInfo.title}}
+				</view>
+				<!-- 课程名字 -->
+				<view class="miantitlebox" v-else>
+					{{courseInfo.courseName}}
+				</view>
+			</view>
+			<view class="tabbox" v-if="openCommentStatus==1">
+				<view :class="currentTab == nav.id ? 'tabbox-active':''" v-for="nav in navList" :key="nav.id" @click="handleTab(nav.id)">{{nav.name}}</view>
+			</view>
+		</view>
+		<scroll-view
+		class="scroll-view" 
+		:style="{height: height}" 
+		:scroll-top="scrollTop" 
+		:scroll-y="true" 
+		:refresher-enabled="currentTab == 2"
+		:refresher-triggered="triggered"
+		@refresherrefresh="handleRefresher">
+			<template v-if="openCommentStatus==1">
+				<view v-show="currentTab==0">
+					<descInfoNav ref="descInfoNav" :isLogin="isLogin" :isAddKf="isAddKf" :courseInfo="courseInfo"></descInfoNav>
+				</view>
+				<view v-show="currentTab==2">
+					<commentBox 
+					ref="commentBox" 
+					:height="height" 
+					:urlOption="urlOption" 
+					:time="playTime"
+					:flagTime="flagTime"
+					:showDanmu="showDanmu"
+					:viewCommentNum="viewCommentNum"
+					:openCommentStatus="openCommentStatus"
+					@setInputText="setInputText" 
+					@getScrollTop="getScrollTop"
+					@getMore="getMore"></commentBox>
+				</view>
+			</template>
+			<view v-show="currentTab==1">
+				<template v-if="openCommentStatus!=1&&(courseInfo.title || courseInfo.description)">
+					<!-- 介绍 -->
+					<descInfo ref="descInfo" :isLogin="isLogin" :isAddKf="isAddKf" :courseInfo="courseInfo"></descInfo>
+				</template>
+				<!-- 问题 -->
+				<template v-if="isLogin&&isAddKf==1">
+					<ques ref="ques" :quesList="quesList" :openCommentStatus="openCommentStatus" @handleAnswer="handleAnswer"></ques>
+				</template>
+			</view>
+		</scroll-view>
+		<!-- 线路 -->
+		<view class="video-line" @click="openPop" v-if="isLogin&&isAddKf==1">
+			<image :src="imgPath+'/app/image/changePlayer-icon.png'"></image>
+			<text>线路{{numberToChinese(lineIndex + 1)}}</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)">
+						线路{{numberToChinese(index + 1)}}</view>
+				</view>
+			</view>
+		</uni-popup>
+		<!-- 温馨提示弹窗 -->
+		<uni-popup ref="tipsPopup" type="center" :is-mask-click="false">
+			<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>您已经观看课程一半的时间了,请注意休息并保持专注。</view>
+							</view>
+							<view class="tipsPopup-btn-box">
+								<view class="tipsPopup-btn" @click="closeTipsPop">继续观看领奖励</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</uni-popup>
+		<!-- 发送弹幕 -->
+		<view class="video-line danmu-line" @click="openDanmu(0)" v-if="isLogin&&isAddKf==1&&openCommentStatus==2">
+			<image class="set_image"  :src="imgPath+'/app/image/danmu_set_black.png'" mode="aspectFill"></image>
+			<text>发弹幕</text>
+		</view>
+		<!-- 发送弹幕弹窗 -->
+		<uni-popup ref="danmuPopup" type="bottom" style="z-index: 999;" @change="changeShowPopup">
+			<view class="danmuPopup" :style="{marginLeft:isfull ? statusBarHeight+'px': 0,marginBottom: danmuboxHeight+'px'}">
+				<view class="danmuPopup-head border-line">
+					<image class="danmu-icon" :src="showDanmu==0? imgPath+'/app/image/danmu-off.png':imgPath+'/app/image/danmu-on.png'" mode="heightFix" @click="switchDanmu()"></image>
+					<view class="u-border">
+						<input 
+						class="danmuPopup-input" 
+						placeholder="发个弹幕吧~" 
+						border="border"
+						:focus="focus"
+						:adjustPosition="false" 
+						:autoBlur="false" 
+						maxlength="50"
+						v-model.trim="inputText" />
+						<text style="font-size: 24rpx;color: #bbb;margin-left: 10rpx;">{{inputText?inputText.trim().length:0}}/50</text>
+					</view>
+					<button class="danmuPopup-send" @click="handleChatInput">发送</button>
+				</view>
+			</view>
+		</uni-popup>
+		<!-- 答题弹窗 -->
+		<uni-popup ref="answerPopup" type="center" :show="answerPopup">
+			<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-if="isOpen!=1" v-html="errDesc"></view>
+				<!-- 选择奖励 -->
+				<view class="reward-list" v-if="errTitle == '恭喜你,回答正确'&&isOpen!=1">
+					<radio-group class="reward-list-group" @change="rewardChange">
+						<label class="reward-list-option" v-for="(item, index) in rewardType" :key="item.value">
+							<radio :value="item.value+ ''" :checked="item.value == currentReward"
+								activeBorderColor="#FF5C03" activeBackgroundColor="#FF5C03"
+								style="transform:scale(0.7)" />
+							<view :style="{color: item.value == currentReward ? '#FF5C03':''}">{{item.name}}</view>
+						</label>
+					</radio-group>
+				</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>
+		</uni-popup>
+		<!-- 可以答题提示 -->
+		<view class="answerTip" v-if="isLogin&&currentTab!=1&&openCommentStatus==1&&showAnswerTip" @click="handleTab(1)">
+			<text>开始</text>
+			<text>答题</text>
+		</view>
+		<!-- 客服二维码弹窗 -->
+		<uni-popup ref="kfPopup" type="center" :mask-click="false">
+			<view class="kfqrcode-box">
+				<image class="kfqrcode" :src="qrcode" show-menu-by-longpress="true"></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>
+		</uni-popup>
+		<!-- footer -->
+		<view class="footer" v-show="currentTab!=2&&videoId">
+			<view class="footer-btn" v-if="!isLogin || isAddKf !=1" @click="submit">
+				<text>立即学习</text>
+			</view>
+			<view v-if="currentTab==1&&isLogin&&isAddKf==1&&quesList&&quesList.length>0" class="footer-btn footer-btn-border" @click="submit">
+				<text>{{isOpen==1 ? '提交答案':'提交答案领取奖励'}}</text>
+			</view>
+			<!-- <view @click="checked=!checked" class="agreement" v-if="!isLogin">
+				<radio value="r1" :checked="checked" color="#ff5c03" activeBorderColor="#ff5c03"
+					style="transform:scale(0.6);" />
+				<view>阅读并同意<text style="color: #ff5c03;" @click.stop="goWeb(0)">《用户协议》</text>和<text
+						style="color: #ff5c03;" @click.stop="goWeb(1)">《隐私协议》</text></view>
+			</view> -->
+		</view>
+		<view v-show="currentTab==2">
+			<view class="chatinput" :style="{bottom:danmuboxHeight>0?danmuboxHeight+'px':'calc(var(--window-bottom) + 24rpx)'}">
+				<input class="uni-input" v-model.trim="inputText" :adjustPosition="false" :autoBlur="false"  maxlength="140" placeholder="发消息···" confirm-type="send" @confirm="handleChatInput" />
+				<button class="send" @click="handleChatInput">发送</button>
+			</view>
+		</view>
+		<ykscreenRecord></ykscreenRecord>
+		<courseExpiration v-if="showExpiration" :code="resCode" :msg="resMsg" :qrcode="qrcode"
+		:userId="user && user.userId ? user.userId : ''"></courseExpiration>
+	</view>
+</template>
+
+<script>
+	import ques from "./components/ques.vue"
+	import descInfo from "./components/descInfo.vue"
+	import descInfoNav from "./components/descInfoNav.vue"
+	import commentBox from "./components/commentBox.vue"
+	import {TOKEN_KEYAuto,generateRandomString} from '@/utils/courseTool.js'
+	import dayjs from 'dayjs';
+	import { mapGetters } from 'vuex';
+	import {
+		getErrMsg,
+		getH5CourseByVideoId,
+		getH5CourseVideoDetails,
+		courseAnswer,
+		getFinishCourseVideo,
+		getIsAddKf,
+		getInternetTraffic,
+		getIntegralByH5Video,
+		sendReward,
+		loginByMp,
+		getRealLink
+	} from "@/api/courseAuto.js"
+	import {handleFsUserWx} from '@/api/courseLook.js'
+	import ykscreenRecord from './yk-screenRecord/yk-screenRecord.vue'
+	import courseExpiration from './components/courseExpiration.vue'
+	export default {
+		components: {
+			descInfoNav,
+			descInfo,
+			commentBox,
+			ques,
+			ykscreenRecord,
+			courseExpiration
+		},
+		data() {
+			return {
+				code: '',
+				baseUrl:uni.getStorageSync('requestPath'),
+				// 1 红包 2 积分
+				rewardType: [{
+					name: '红包奖励',
+					value: 1
+				}, {
+					name: '积分奖励',
+					value: 2
+				}],
+				currentReward: 1,
+				player: null,
+				loading: true,
+				progress: 0,
+				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: "",
+				isAddKf: 0,
+				lineIndex: 0,
+				// 是否展开
+				isExpand: true,
+				textHeight: 0, //文本高度
+				qwUserId: "",
+				qrcode: "",
+				corpId: "",
+				qrcodeMsg: "",
+				urlOption: {},
+				bufferRate: 0, // 缓冲时间
+				uuId: "",
+				isEnded: false,
+				// 是否允许拖动进度条
+				videolinkType: 0,
+				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:'',
+				focus: false,
+				openDanmuType: 0,
+				danmuboxHeight: 0,
+				user: {},
+				crtShow: true,
+				courseLogo: '',
+				isfull: false,
+				navList:[{
+					id: 0,
+					name: '介绍'
+				},{
+					id: 1,
+					name: '答题'
+				},{
+					id: 2,
+					name: '评论'
+				}],
+				currentTab: 1,
+				triggered: false,
+				// 没有更多
+				isMore: false,
+				inputText:"",
+				// 获取最多历史评论条数
+				viewCommentNum: 200,
+				// 1-开启评论;2-开启弹幕;3-关闭
+				openCommentStatus: 3,
+				showAnswerTip: false,
+				showDanmu: 1,
+				activeDanmus:[],
+				flagTime:0,
+				showProgress: true,
+				imgPath:this.$store.state.imgpath,
+				videoitem:null,
+				// 是否公开课
+				isOpen: 0,
+			}
+		},
+		//发送给朋友
+		onShareAppMessage(res) {
+			return {
+				title: this.$store.state.logoname,
+				path: '/pages/about/index',
+				imageUrl: this.$store.state.imgpath+'/app/image/logoshare.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+			}
+			
+		},
+		//分享到朋友圈
+		onShareTimeline(res) {
+			return {
+				title: this.$store.state.logoname,
+				path: '/pages/about/index',
+				imageUrl: this.$store.state.imgpath+'/app/image/logoshare.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+			}
+			
+		},
+		computed:{
+			appid() {
+				return this.$store.state.appid
+			},
+			isSpare() {
+				return this.$store.state.isSpare
+			},
+			...mapGetters(['coureLogin']),
+		},
+		watch: {
+		    coureLogin: {
+		      immediate: true,          // 页面一进入就检查一次
+		      handler(val) {
+		        if (val == 2&&this.isLogin) {
+					console.log("看课AppToken失效,请重新登录")
+					this.isLogin = false
+					this.isAddKf = 0
+					this.goLogin()
+		        }
+		      }
+		    }
+		},
+		onLoad(option) {
+			if(option.videoitem){
+				this.isOpen = 1
+				this.urlOption=JSON.parse(option.videoitem)
+				this.urlOption = {
+					...this.urlOption,
+					isOpen: 1
+				}
+			}else {
+				this.isOpen = 0
+				this.urlOption = option.course ? JSON.parse(option.course) : {}
+			}
+			uni.$on('usercode',(data)=>{
+				if(this.isSpare == 1&&data) {
+					this.code=data.code
+					this.goLogin(data)
+				}
+			})
+			this.videoId = this.urlOption.videoId
+			this.qwUserId = this.urlOption.qwUserId || ''
+			this.corpId = this.urlOption.corpId || ''
+			this.videolinkType = this.urlOption.linkType || 0
+
+			var that=this;
+			if (this.videoId) {
+				this.getH5CourseByVideo()
+			}
+			this.sortLink = this.urlOption.link || ''
+			this.getMenuButton()
+			// #ifndef H5
+			uni.onKeyboardHeightChange(this.keyboardHeightChange);
+			// #endif
+		},
+		onShow() {
+			this.tipsOpen = false
+			this.isExpand = true
+			// this.isLogin = this.$isLoginCourseAuto()
+			this.uuId = generateRandomString(16)
+			if(uni.getStorageSync('auto_userInfo') && JSON.stringify(uni.getStorageSync('auto_userInfo'))!='{}') {
+				this.user = JSON.parse(uni.getStorageSync('auto_userInfo'))
+			} else {
+				this.user = {}
+			}
+
+			if((this.sortLink||this.isOpen==1)&&!this.code){
+				this.getLink()
+			} else {
+				if(this.code) return;
+				uni.showToast({
+					title: '链接地址有误',
+					icon: 'none'
+				});
+			}
+		},
+		mounted() {
+			this.getIP()
+			this.getHeight()
+		},
+		onHide() {
+			// this.player = uni.createVideoContext('video-content-box');
+			if (this.player) {
+				this.player.pause()
+			}
+		},
+		onUnload() {
+			uni.$off('usercode')
+			if (this.interval != null) {
+				clearInterval(this.interval)
+				this.interval = null
+			}
+			this.clearIntegral()
+			// #ifndef H5
+			uni.offKeyboardHeightChange(this.keyboardHeightChange);
+			// #endif
+		},
+		beforeDestroy() {
+			uni.$off('usercode')
+			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()
+			// #ifndef H5
+			uni.offKeyboardHeightChange(this.keyboardHeightChange);
+			// #endif
+		},
+		methods: {
+			numberToChinese(number) {
+				if (number) {
+					const chineseNumber = ['一', '二', '三', '四', '五', '六', '七', '八', '九'];
+					return chineseNumber[number - 1];
+				} else {
+					return ''
+				}
+			},
+			keyboardHeightChange(res) {
+				// #ifndef H5
+				console.log("this.danmuboxHeight",this.danmuboxHeight)
+				 this.danmuboxHeight = res.height
+				// #endif
+			},
+			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 {
+					if (this.videolinkType != 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);
+					}
+					this.playTime = currentTime
+				}
+				if (Math.floor(e.detail.currentTime) != this.flagTime) {
+					this.flagTime = Math.floor(e.detail.currentTime)
+					let answerType = this.$store.state.answerType;
+					
+					this.showAnswerTip = answerType == 1 ? this.shouldShowByRate(this): this.shouldShowByLastMinute(this);
+					if(this.openCommentStatus == 2) {
+						this.$refs.danmuBox&&this.$refs.danmuBox.checkDanmu(this.flagTime)
+					}
+				}
+			},
+			// 工具函数:保留两位小数的百分比(0~100)
+			calcPercent(play, total) {
+			  return Number(((play || 0) / (total || 1) * 100).toFixed(2));
+			},
+			
+			// 策略1:按完课领红包
+			shouldShowByRate({ playTime, duration, config }) {
+			  const finished = this.calcPercent(playTime, duration) >= Number(config?.answerRate || 100);
+			  return finished;
+			},
+			
+			// 策略2:完课且最后一分钟可领(第二次进来只看是否已完课)
+			shouldShowByLastMinute({ isEnded, isFinish, playTime, duration }) {
+			  const alreadyDone = isEnded || isFinish == 1;          // 已完课
+			  const inLastMinute = playTime >= (duration || 0) - 60;  // 最后一分钟
+			  return alreadyDone || inLastMinute;
+			},
+			changeTime(that,e) {
+				that.playDurationSeek = 0
+			},
+			videoErrorCallback(e) {
+				this.clearIntegral()
+				this.errorCount++
+				if (this.errorCount > 3) return
+				if (this.interval != null) {
+					clearInterval(this.interval)
+				}
+				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.showAnswerTip = true
+				// this.playDurationSeek = 0
+				this.isFinish = 1
+				this.showProgress = true
+				this.getFinishCourseVideo()
+			},
+			fullscreenchange(event) {
+				this.isfull = event.detail.fullScreen
+				if(this.isfull) {
+					this.$refs.danmuBox&&this.$refs.danmuBox.initTracks()
+				}
+			},
+			controlstoggle(event) {
+				this.crtShow =  event.detail.show
+			},
+			getIP() {
+				uni.request({
+					url: 'https://ipinfo.io/json', //仅为示例,并非真实接口地址。
+					method: 'GET',
+					success: (res) => {
+						this.ip = res.data.ip
+					}
+				});
+			},
+			getHeight() {
+				setTimeout(()=>{
+					const query = uni.createSelectorQuery().in(this);
+					query
+						.select("#title-contentnav")
+						.boundingClientRect((data) => {
+							if(data) {
+								this.height =
+									`calc(100vh - ${data.height}px - 420rpx - ${this.statusBarHeight}px - 75px - 88rpx)`
+							}
+						})
+						.exec();
+				},200)
+			},
+			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
+				}
+			},
+			getH5CourseByVideo() {
+				this.loading = true
+				getH5CourseByVideoId({
+					videoId: this.videoId
+				}).then(res => {
+						this.loading = false
+						if (res.code == 200) {
+							this.courseInfo = res.data
+							uni.setNavigationBarTitle({
+								title: this.courseInfo && this.courseInfo.title ? this.courseInfo.title : ''
+							});
+						}
+						this.getHeight()
+						this.$nextTick(()=>{
+							this.$refs.descInfo&&this.$refs.descInfo.getDescHeight()
+							this.$refs.descInfoNav&&this.$refs.descInfoNav.getDescHeight()
+						})
+					},
+					rej => {
+						this.loading = false
+					}
+				).catch(() => {
+					this.loading = false
+				})
+			},
+			getH5CourseVideoDetails(type) {
+				getH5CourseVideoDetails(this.urlOption).then(res => {
+						if (res.code == 200) {
+							this.config = res.config || {}
+							this.courseLogo = res.config&&res.config.courseLogo
+							this.isFinish = res.isFinish || 0
+							this.duration = res.course && res.course.duration ? res.course.duration : 0
+							this.playDuration = res.playDuration || 0
+							this.tipsTime = res.tipsTime || 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
+							this.viewCommentNum = res.config&&res.config.viewCommentNum || 200
+		
+							const status = res.config&&res.config.openCommentStatus || 3
+							if(status != this.openCommentStatus) {
+								if(this.openCommentStatus != 3 && status==3) {
+									this.$refs.commentBox&&this.$refs.commentBox.closeWSocket()
+									this.$refs.danmuBox&&this.$refs.danmuBox.closeWSocket()
+								}
+								this.openCommentStatus = this.isOpen == 1 ? 3: status
+							}
+							this.currentTab = 1
+							if(this.openCommentStatus!=2 || this.showDanmu!=1) {
+								this.activeDanmus = []
+							}
+							if (!this.player || type == 'error') {
+								this.lineIndex = this.config.defaultLine
+								this.videoUrl = lineList[this.lineIndex]
+								this.poster= res.course && res.course.imgUrl ? res.course.imgUrl : ''
+								this.playTime = this.playDuration >= this.duration ? 0 : this.playDuration
+								this.playDurationSeek = this.playTime
+								setTimeout(()=>{
+									this.player = uni.createVideoContext('video-content-box');
+									this.player.seek(this.playTime)
+									this.player.play();
+								},500);
+							} else {
+								this.playTime = this.playTime > this.playDuration ? this.playTime : this.playDuration >= this.duration ? 0 : this.playDuration
+								this.playDurationSeek = this.playTime
+								this.player.seek(this.playTime)
+								this.player.play();
+							}
+							this.updateTime();
+							this.quesList = res.questions && res.questions.length > 0 ? res.questions : [],
+								this.quesList = this.quesList.map(item => ({
+									...item,
+									questionOption: JSON.parse(item.question),
+									answer: ''
+								}))
+						}else{
+							uni.showToast({
+								title: res.msg,
+								icon: "none"
+							})
+						}
+						this.getHeight()
+						this.$nextTick(()=>{
+							this.$refs.descInfo&&this.$refs.descInfo.getDescHeight()
+							this.$refs.descInfoNav&&this.$refs.descInfoNav.getDescHeight()
+						})
+					},
+					rej => {}
+				)
+			},
+			handleAnswer(val) {
+				let {item, option,index} = val
+				if(this.$store.state.answerType == 1) {
+					// 按照完课领红包
+					let rate = 0
+					if(this.isEnded || this.isFinish==1) {
+						rate = 1
+					} else {
+						rate = (Number(this.playTime || 0) / Number(this.duration || 0)).toFixed(2)
+					}
+					if(Number(this.duration || 0) == 0 || rate*100 < Number(this.config.answerRate || 100)) {
+						uni.showToast({
+							title: "请先观看完整课程再答题哦~",
+							icon: "none"
+						})
+						return
+					}
+				} else {
+					// 按照完课且最后一分钟领红包(完课第二次进来就不需要最后一分钟)
+					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[index].type == 1) {
+					// 单选option
+					this.quesList[index].answer = option.name
+				} else if (this.quesList[index].type == 2) {
+					// 多选
+					let answer = this.quesList[index].answer ? this.quesList[index].answer.split(',') : []
+					if (answer.indexOf(option.name) === -1) {
+						answer.push(option.name)
+						this.quesList[index].answer = answer.join(',')
+					} else {
+						answer.splice(answer.indexOf(option.name), 1)
+						this.quesList[index].answer = answer.join(',')
+					}
+				}
+			},
+			submit() {
+				if(this.isExpire){
+					uni.showToast({
+						title: '课程已过期或链接无效',
+						icon: 'none'
+					});
+					return
+				}
+				// 登录
+				this.$isLoginCourseAuto().then(
+					res => {
+						if(res){
+							if (this.isAddKf == 1) {
+								//答题  您已提交过答案,请领取红包
+								this.courseAnswer()
+							} else {
+								// 添加客服
+								if (this.videoId && this.qwUserId) {
+									this.getIsAddKf()
+								} else {
+									uni.showToast({
+										title: '请添加客服',
+										icon: 'none'
+									})
+								}
+							} 
+						} else{
+							this.goLogin()
+						}
+					},
+					rej => {}
+				);
+			},
+			// 答题
+			courseAnswer() {
+				if(this.$store.state.answerType == 1) {
+					// 按照完课领红包
+					let rate = 0
+					if(this.isEnded || this.isFinish==1) {
+						rate = 1
+					} else {
+						rate = (Number(this.playTime || 0) / Number(this.duration || 0)).toFixed(2)
+					}
+					if(Number(this.duration || 0) == 0 || rate*100 < Number(this.config.answerRate || 100)) {
+						uni.showToast({
+							title: "请先观看完整课程再答题哦~",
+							icon: "none"
+						})
+						return
+					}
+				} else {
+					// 按照完课且最后一分钟领红包(完课第二次进来就不需要最后一分钟)
+					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,
+					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.errTitle = "很遗憾答错了"
+									this.errDesc = `<span style="color:#FF5C03">还有${res.remain}次机会,继续加油</span>`
+									this.$refs.answerPopup.open("center")
+								}
+							} else {
+								// 答题成功
+								this.errTitle = "恭喜你,回答正确"
+								this.errDesc = `请选择奖励`
+								// this.$refs.answerPopup.open("center")
+								if(this.isOpen==1) {
+									this.$refs.answerPopup.open("center")
+									return
+								}
+								this.closeAnswerPopup(1)
+							}
+						} else {
+							if (res.msg == "该课题到达答错次数限制") {
+								this.errTitle = "答题次数超过限制"
+								this.errDesc = "以后的课程要认真学习哦"
+								this.$refs.answerPopup.open("center")
+							} else {
+								uni.showToast({
+									title: res.msg,
+									icon: "none"
+								})
+							}
+						}
+					},
+					rej => {}
+				)
+			},
+			// 选择
+			rewardChange(e) {
+				this.currentReward = e.detail.value
+			},
+			closeAnswerPopup(type) {
+				this.$refs.answerPopup.close()
+				if(this.isOpen==1) {
+					return
+				}
+				if (this.errTitle == '恭喜你,回答正确') {
+					let param = {
+						...this.urlOption,
+						rewardType: Number(this.currentReward),
+						source: 2,
+						appId: this.appid
+					}
+					if(type==1) {
+						param = {
+							...this.urlOption,
+							source: 2,
+							appId: this.appid
+						}
+					}
+					sendReward(param).then(res => {
+						if(res.isNew&&res.isNew==1) {
+							const packageInfo = res.data.packageInfo || ''
+							if(packageInfo) {
+								uni.setStorageSync('receive_package',packageInfo);
+								if(res.mchId) uni.setStorageSync('mchId',res.mchId);
+								uni.navigateTo({
+									url: '/pages_course/reward'
+								})
+							}
+						} else {
+							uni.showToast({
+								title: res.msg,
+								icon: 'none'
+							})
+						}
+					})
+				}
+			},
+			// 线路
+			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 {
+					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.close()
+				}
+
+			},
+			// 温馨提示
+			openTipsPop() {
+				this.$refs.tipsPopup.open()
+				this.tipsOpen = true
+				this.pause()
+			},
+			closeTipsPop() {
+				this.$refs.tipsPopup.close()
+			},
+			// 客服
+			getIsAddKf() {
+				this.qrcode = ''
+				this.qrcodeMsg = ''
+				this.isAddKf = 0
+				getIsAddKf(this.urlOption).then(res => {
+						if (res.code == 200) {
+							this.isAddKf = 1
+							this.getH5CourseVideoDetails()
+						} else if (res.code == 400) {
+							this.isAddKf = 0
+							this.qrcode = res.qrcode
+							this.qrcodeMsg = res.msg
+							this.$refs.kfPopup.open()
+							this.initExpiration(res.msg,res.code)
+						} else if (res.code == 566) {
+							// 官方群发通用链接
+							const url = res.courseLink.realLink.split('?course=')[1]
+							this.urlOption = JSON.parse(url)
+							this.isAddKf = 1
+							this.getH5CourseVideoDetails()
+							this.initExpiration(res.msg,res.code)
+						} else if (res.code == 567) {
+							// 群聊通用链接
+							this.urlOption = {
+								...this.urlOption,
+								qwExternalId:res.qwExternalId
+							}
+							this.isAddKf = 1
+							this.getH5CourseVideoDetails()
+							this.initExpiration(res.msg,res.code)
+						} else {
+							this.isAddKf = 0
+							uni.showToast({
+								title: res.msg,
+								icon: 'none'
+							});
+							this.initExpiration(res.msg,res.code)
+						}
+					},
+					err => {}
+				);
+			},
+			initExpiration(resMsg,resCode) {
+				if(resCode==401) return;
+				this.resMsg = resMsg
+				this.resCode = resCode
+				this.showExpiration = true
+			},
+			closeKFPop() {
+				this.$refs.kfPopup.close()
+			},
+			getFinishCourseVideo() {
+				if (!this.playTime || this.isAddKf!=1 ||!this.isLogin) return
+				const param = {
+					duration: this.playTime,
+					...this.urlOption
+				}
+				getFinishCourseVideo(param)
+			},
+			// 每十分钟获得积分
+			getIntegralByH5Video() {
+				if(this.isAddKf!=1||!this.isLogin) return
+				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)
+			},
+			// 缓冲
+			getInternetTraffic() {
+				if(!this.isLogin||this.isAddKf!=1) return
+				const playVideoTime = Math.ceil(this.playTime / this.duration * 100) // 播放百分比
+				if(this.bufferRate == 0 || this.bufferRate < playVideoTime) {
+					this.bufferRate = playVideoTime
+				}
+				if(this.bufferRate == 0 || Number(this.bufferRate.toFixed(2)) == 0) return
+				const param = {
+					...this.urlOption,
+					uuId: dayjs().format('YYYYMMDD') + this.uuId,
+					duration: this.playTime,
+					bufferRate: Number(this.bufferRate.toFixed(2)),
+				}
+				if(!param.bufferRate) return
+				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(data) {
+				if(data || (this.isSpare==1&&this.isOpen!=1)) {
+					this.loginFsUserWx(data)
+					return
+				}
+				let provider = 'weixin'
+				uni.login({
+					provider: provider,
+					success: async loginRes => {
+						console.log(loginRes)
+						uni.getUserInfo({
+						   provider: provider,
+						   success: (infoRes)=> {
+							    uni.showToast({
+									title: '处理中...',
+									icon: 'loading'
+							    });
+								loginByMp({
+									code: loginRes.code,
+									encryptedData:infoRes.encryptedData,
+									iv:infoRes.iv,
+									appId: this.appid
+								}).then(res=>{
+									 uni.hideLoading();
+									 if (res.code == 200) {
+										this.$store.commit('setCoureLogin', 1);
+										uni.setStorageSync(TOKEN_KEYAuto, res.token);
+										uni.setStorageSync('auto_userInfo', JSON.stringify(res.user));
+										this.user = res.user
+										this.isLogin = true
+										console.log("TOKEN_KEYAuto",TOKEN_KEYAuto)
+										this.getIsAddKf() 
+									 } else {
+										uni.showToast({
+											title: res.msg,
+											icon: 'none'
+										});
+									 }
+								 }).catch(err=>{
+									uni.hideLoading();
+									uni.showToast({
+										icon:'none',
+										title: "登录失败,请重新登录",
+									});
+								});
+						   }
+						});
+					}
+				})
+			},
+			getLink() {
+				let that = this;
+				this.msg = ''
+				if(this.isOpen==1) {
+					if (this.isLogin && this.isAddKf == 1) {
+						this.getH5CourseVideoDetails()
+					}
+					if (this.videoId &&this.isAddKf != 1) {
+						this.$isLoginCourseAuto().then(
+							isLogin => {
+								this.isLogin = isLogin
+								if(isLogin){
+									this.getIsAddKf() 
+								} else {
+									this.goLogin()
+								}
+							},
+							rej => {}
+						);
+					}
+					return
+				}
+				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.$isLoginCourseAuto().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 = 1000, 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)
+			    }
+			},
+			// 弹幕
+			openDanmu(type) {
+				this.openDanmuType = type
+				this.inputText = ''
+				if(type == 1) {
+					this.player.exitFullScreen()
+				}
+				this.$refs.danmuPopup.open()
+			},
+			changeShowPopup(val) {
+				this.focus = val.show
+			},
+			switchDanmu() {
+				this.showDanmu = this.showDanmu == 1 ? 0:1
+				if(this.showDanmu == 0&&this.$refs.danmuBox) {
+					this.$refs.danmuPopup.close()
+					this.activeDanmus = []
+					this.$refs.danmuBox.activeDanmus = []
+					this.$refs.danmuBox.initTracks()
+				}
+			},
+			getScrollTop(res) {
+				if(this.currentTab == 2) {
+					this.scrollTop = res
+				} else {
+					this.scrollTop = 0
+				}
+			},
+			handleTab(index) {
+				this.currentTab = index
+				if(this.currentTab==2) {
+					if(this.$refs.commentBox) {
+						this.$refs.commentBox.msgs = []
+						this.$refs.commentBox.pageNum = 1
+						this.$refs.commentBox.getCommentsFun()
+					}
+				} else {
+					setTimeout(()=>{
+						this.scrollTop = 0
+					},100)
+				}
+			},
+			handleRefresher() {
+				this.triggered = true;
+				if (!this.isMore&&this.currentTab==2&&this.openCommentStatus==1) {
+					this.$nextTick(()=>{
+						this.$refs.commentBox&&this.$refs.commentBox.getCommentsFun()
+					})
+				}
+				setTimeout(() => {
+					this.triggered = false;
+				}, 500);
+			},
+			getMore(val) {
+				this.triggered = false;
+				this.isMore = val == 1
+			},
+			handleChatInput() {
+				this.inputText = this.inputText.trim()
+				if (this.inputText == "" || this.inputText.trim() == "") {
+					uni.showToast({
+						title: '请输入评论',
+						icon: "none"
+					})
+					return;
+				}
+				if(this.openCommentStatus==1) {
+					this.$refs.commentBox&&this.$refs.commentBox.handleInput(this.inputText)
+				} else if(this.openCommentStatus==2) {
+					this.$refs.danmuBox&&this.$refs.danmuBox.handleInput(this.inputText)
+				}
+			},
+			setInputText() {
+				this.inputText = ""
+				if(this.openCommentStatus==2) {
+					this.$refs.danmuPopup.close()
+				}
+			},
+			getActiveDanmus(val) {
+				this.activeDanmus = val.map(item=>({
+					...item,
+					danmustyle: {
+						top: item.top + 'px',
+						...item.style, 
+						'animation-duration': '8s'
+					}
+				}))
+			},
+			animationend(moveItem, i) {
+				// 移除动画结束的弹幕(性能优化)
+				if(this.openCommentStatus==2) {
+					this.$refs.danmuBox&&this.$refs.danmuBox.animationend(moveItem, i)
+				}
+			},
+			navback() {
+				const pages = getCurrentPages(); // 获取当前页面栈
+				if (pages.length > 1) {
+				   uni.navigateBack(); // 有上一页才返回
+				} else { 
+				  // 如果是首页,跳转到某个默认页面(如首页)
+				  uni.reLaunch({ url: '/pages/index/index' }); // 或者用 switchTab 如果是 tabBar 页面
+				}
+			},
+			feedback() {
+				const userId = this.user.userId || ''
+				const courseId = this.urlOption.courseId || ''
+				const videoId = this.urlOption.videoId || ''
+				const companyId = this.urlOption.companyId || ''
+				const companyUserId = this.urlOption.companyUserId || ''
+				uni.navigateTo({
+					url: './feedback?userId='+userId+'&courseId='+courseId+'&videoId='+videoId+'&companyId='+companyId+'&companyUserId='+companyUserId
+				})
+			},
+			// 公开课登录\备用登录
+			async loginFsUserWx(data){
+				if(data){
+					console.log('huoqu1222',data)
+					uni.showLoading({
+						title: '登录中'
+					})
+					uni.login({
+						provider: "weixin",
+						success: async loginRes => {
+							console.log(loginRes)
+							let code = loginRes.code // 获取开发code
+							handleFsUserWx({
+							   code: code,
+							   appId:this.appid,
+							   userId:data.userId
+							})
+							.then( res => {
+								uni.hideLoading();
+								if(res.code==200){
+									console.log("loginFsUserWx:",res)
+									// this.userinfos=uni.getStorageSync('userinfos')
+									let token = uni.getStorageSync('TOKEN_WEXIN');
+									let user = uni.getStorageSync('userInfo')
+									// this.userInfo=uni.getStorageSync('userInfo');
+									// this.isLogin = true
+									uni.setStorageSync(TOKEN_KEYAuto, token);
+									uni.setStorageSync('auto_userInfo', JSON.stringify(user));
+									this.user = user
+									this.isLogin = true
+									this.getIsAddKf() 
+								}else if(res.code==406){
+									uni.showToast({
+										icon:'none',
+										title: '该用户已成为其他销售会员',
+									});
+								}else{
+									uni.showToast({
+										icon:'none',
+										title: res.msg,
+									});
+								}
+							   
+							 })
+						},
+					})
+				}else{
+					uni.setStorageSync('H5course',{
+						companyId: this.urlOption.companyId,
+						companyUserId:this.urlOption.companyUserId,
+						type: 1, //1自动,其他手动
+					})
+					await this.$store.dispatch('getWebviewUrl');
+					uni.navigateTo({
+						url:'/pages_course/webview?H5course='+uni.getStorageSync('H5course')
+					})
+				}
+			}
+		}
+	}
+</script>
+
+<style scoped>
+.full-width-popup {
+  width: 100%;
+}
+</style>
+<style lang="scss" scoped>
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.footer-tips {
+		margin-top: 14rpx;
+		text-align: center;
+		font-family: PingFang SC,PingFang SC;
+		font-weight: 500;
+		font-size: 12px;
+		color: #bbb;
+	}
+	.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;
+	}
+
+	.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));
+		.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: 36rpx;
+			color: #222222;
+		}
+
+		.subtitlebox {
+			padding: 30rpx 0;
+			border-bottom: 2rpx solid #F5F7FA;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 36rpx;
+			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;
+			}
+		}
+
+		.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: 34rpx;
+				width: 34rpx;
+				margin-right: 6rpx;
+			}
+		}
+		.danmu-line {
+			bottom: calc(var(--window-bottom) + 370rpx);
+			word-break: keep-all;
+			.set_image {
+				height: 40rpx;
+				width: 40rpx;
+			}
+		}
+
+		.footer {
+			border-top: 1rpx solid #ededef;
+			background: #fff;
+			width: 100%;
+			position: fixed;
+			bottom: 0;
+			padding: 32rpx;
+			padding-bottom: calc(var(--window-bottom) + 12rpx);
+			box-sizing: border-box;
+			z-index: 9;
+
+			&-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;
+	}
+	 
+	.agreement {
+		display: inline-flex;
+		margin-top: 16rpx;
+		font-size: 24rpx;
+		color: #525252;
+		align-items: center;
+		justify-content: center;
+	}
+	.video-danmu-btnbox {
+		width: 50px;
+		height: 50px;
+		border-radius: 50%;
+		overflow: hidden;
+		position: absolute;
+		right: 10px;
+		bottom: calc(50% - 50px);
+		transform: translateY(-50%);
+		padding: 8px;
+		box-sizing: border-box;
+	}
+	.video-danmu-image {
+		width: 100%;
+		height: 100%;
+	}
+	.danmuPopup {
+		background-color: #fff;
+		padding-bottom: calc(var(--window-bottom) + 10px);
+		.u-border {
+			flex: 1;
+			@include u-flex(row,center,flex-start);
+			padding: 0 10rpx;
+			border-radius: 6px;
+			border: 1rpx solid #eee;
+		}
+		&-head {
+			width: 100%;
+			padding: 10px;
+			box-sizing: border-box;
+			overflow: hidden;
+			@include u-flex(row,center,flex-start);
+			.danmu-icon {
+				height: 24px;
+				width: 24px;
+				margin-right: 12px;
+			}
+		}
+		&-input {
+			flex: 1;
+			height: 35px;
+		}
+		&-send {
+			flex-shrink: 0;
+			height: 35px;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			padding: 5px 15px;
+			box-sizing: border-box;
+			background: #FF5C03 !important;
+			border-radius: 22px;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 15px;
+			color: #fff !important;
+			margin-left: 12px;
+			&::after {
+				border: none;
+			}
+		}
+		&-con {
+			background-color: #F5F7FA;
+			padding: 24px 12px 48px 12px;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 14px;
+			color: #757575;
+		}
+	}
+	.danmu-icon{
+		height: 24px;
+		width: 24px;
+		margin-right: 12px;
+	}
+	.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;
+	}
+	.tabbox {
+		@include u-flex(row, center, center);
+		border-bottom: 2rpx solid #F5F7FA;
+		height: 44px;
+		background-color: #fff;
+		view {
+			flex: 1;
+			padding: 20rpx 0;
+			margin-right: 40rpx;
+			text-align: center;
+		}
+		&-active {
+			position: relative;
+			&::after {
+				position: absolute;
+				bottom: 0;
+				left: 50%;
+				transform: translateX(-50%);
+				content: "";
+				width: 3rem;
+				border-bottom: 4px solid #FF5C03;
+			}
+		}
+	}
+	.chatinput {
+		position: fixed;
+		left: 32rpx;
+		right: 32rpx;
+		z-index: 999;
+		height: 96rpx;
+		background-color: green;
+		background: #FFFFFF;
+		box-shadow: 0rpx 8rpx 21rpx 0rpx rgba(0, 0, 0, 0.1);
+		border-radius: 24rpx 24rpx 24rpx 24rpx;
+		@include u-flex(row, center, center);
+		padding: 0 24rpx;
+		box-sizing: border-box;
+		.uni-input {
+			flex: 1;
+			margin-right: 32rpx;
+			font-size: 30rpx;
+		}
+	
+		.send {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 28rpx;
+			color: #FFFFFF !important;
+			flex-shrink: 0;
+			padding: 0 20rpx;
+			height: 72rpx;
+			background: #FF5C03 !important;
+			border-radius: 8rpx 8rpx 8rpx 8rpx;
+			&::after {
+				border: none;
+			}
+		}
+	}
+	.answerTip {
+		position: fixed;
+		right: 0;
+		z-index: 9;
+		bottom: calc(var(--window-bottom) + 380rpx);
+		box-shadow: 0rpx 8rpx 21rpx 0rpx rgba(0, 0, 0, 0.1);
+		border-radius: 24rpx 24rpx 24rpx 24rpx;
+		background-color: #ff5c03;
+		color: #fff;
+		border-radius: 50%;
+		height: 90rpx;
+		width: 90rpx;
+		font-size: 25rpx;
+		text-align: center;
+		padding: 10rpx;
+		@include u-flex(column, center, center);
+	}
+	.danmu-item {
+		position: absolute;
+		top: 0;
+		white-space: nowrap;
+		font-size: 16px;
+		height: 20px;
+		display: inline-flex;
+		box-sizing: border-box;
+		align-items: center;
+	}
+	.danmuMove {
+		// animation: mymove 8s linear forwards;
+		// animation-duration: 8s;
+		animation-timing-function: linear;
+		animation-delay: 0s;
+		animation-iteration-count: 1;
+		animation-direction: normal;
+		animation-fill-mode: forwards;
+		animation-play-state: running;
+		animation-name: mymove;
+		will-change: transform;
+	}
+	
+	@keyframes mymove {
+		from {
+			transform: translateX(100vw);
+		}
+	
+		to {
+			transform: translateX(-100%);
+		}
+	}
+	.arrow-left-warning {
+		position: absolute;
+		left: 24rpx;
+		height: 88rpx;
+		overflow: hidden;
+		color: #888;
+		font-size: 24rpx;
+		@include u-flex(column, center, center);
+		image {
+			flex-shrink: 0;
+			height: 36rpx;
+			width: 36rpx;
+		}
+	}
 </style>

+ 2348 - 2271
pages_course/videovip.vue

@@ -1,2272 +1,2349 @@
-<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-between align-center fs24 base-color-9" >
-			<view class="justify-start align-center" v-if="userInfo.userId">
-				<view>{{nameuser?nameuser:'暂未授权昵称'}}#</view>
-				<view>{{userInfo.userId}}</view>
-			</view>
-			<view class="justify-start align-center" @click="tofeek">
-				<image src="/static/images/feedback.png" class="w40 h40"></image>
-				<view class="fs28 base-color-9 m10">投诉</view>
-			</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"  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> -->
-				<button class="author-btn" 
-				@click="submit">{{isLogin&&isAddKf==1 ?'提交答案领取奖励' : '立即学习'}}</button>
-			</view>
-		</view>
-		<view>
-			<u-modal :show="showfalse" title="提示" :content='contentmsg' @confirm='showfalse=false'></u-modal>
-		</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 { loginByMiniApp,handleFsUserWx} from "@/api/course.js"
-	import dayjs from 'dayjs';
-	import {
-		getErrMsg,
-		getH5CourseByVideoId,
-		getH5CourseVideoDetails,
-		courseAnswer,
-		getFinishCourseVideo,
-		getIsAddKf,
-		getInternetTraffic,
-		getIntegralByH5Video,
-		sendReward,
-		getRealLink,
-		handleFsUserWx,
-		loginByMiniApp
-	} from "@/api/courseLook.js"
-	// import { loginByMp,checkUserInfo,editUser} from '@/api/user'
-	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,
-				// 是否允许拖动进度条
-				videolinkType: 0,
-				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,
-				iskftypemsg:'',
-				courseLogo: '',
-				isquestion:false,
-				tipsPopup:false,
-				timepath:'3分之1',
-				tipsTime2:0,
-				userlogo:false,
-				projectId:'',
-				userinfos:{
-					nickname:"",
-					avatar:""
-				},
-				headImg:'',
-				authType:0,//0微信登录 1手机号登录
-				userdisabled:false,
-				showfalse:false,
-				contentmsg:null,
-			}
-		},
-		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
-			},
-		},
-		onLoad(option) {
-			uni.$on('usercode',(data)=>{
-				console.log('huoqu ',data)
-				this.goLogin(data)
-			})
-			uni.$on('vipMsg',(data)=>{
-				console.log(4444,data)
-				this.contentmsg=data
-				this.showfalse=true
-				uni.showToast({
-					icon:'none',
-					title: data,
-					duration:5000
-				});
-			})
-			this.videoContext = uni.createVideoContext('video-content-box', this)
-			this.code = option.code
-			if(uni.getStorageSync('userInfo')&&JSON.stringify(uni.getStorageSync('userInfo'))!='{}') {
-				this.userInfo = 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) : {}
-			}
-			uni.setStorageSync('H5course',this.urlOption)
-			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.projectId= this.urlOption.projectId
-			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.userinfos=uni.getStorageSync('userinfos')
-			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
-			// }
-			// uni.$off('usercode')
-		},
-		onUnload() {
-			if (this.interval != null) {
-				clearInterval(this.interval)
-				this.interval = null
-			}
-			this.clearIntegral()
-			// uni.$off('usercode')
-		},
-		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()
-			uni.$off('usercode')
-		},
-		methods: {
-			async goLogin(data) {
-				// console.log('现在jjj',data)
-				if(data){
-					// console.log('huoqu1222',data)
-					uni.showLoading({
-						title: '加载中'
-					})
-					uni.login({
-						provider: "weixin",
-						success: async loginRes => {
-							// console.log(loginRes)
-							let code = loginRes.code // 获取开发code
-							handleFsUserWx({
-							   code: code,
-							   appId:this.appid,
-							   userId:data.userId
-							})
-							.then( res => {
-								if(res.code==200){
-									// console.log(res)
-									uni.hideLoading();
-									uni.showToast({
-										icon:'none',
-										title: "登录成功",
-									});
-									this.userinfos=uni.getStorageSync('userinfos')
-									uni.getStorageSync('TOKEN_WEXIN');
-									this.userInfo=uni.getStorageSync('userInfo');
-									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,
-									});
-								}
-							   
-							 })
-						},
-					})
-				}else{
-					await this.$store.dispatch('getWebviewUrl');
-					uni.navigateTo({
-						url:'/pages_course/webview?H5course='+uni.getStorageSync('H5course')
-					})
-				}
-				
-			},
-			tofeek(){
-				if(uni.getStorageSync('TOKEN_WEXIN')){
-					uni.navigateTo({
-						url:"/pages_course/feedback"
-					})
-				}else{
-					uni.showToast({
-						icon:'none',
-						title:"请先点击立即学习,登录小程序!",
-					});
-				}
-				
-			},
-			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(){
-				
-			},
-			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.videolinkType != 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 - 164rpx )`
-						})
-						.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,
-					// projectId:this.projectId,
-					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.videolinkType == 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: this.iskftypemsg,
-										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")
-								if(res.msg=='答题成功'){
-									this.closeAnswerPopup()
-									
-								}
-							}
-						} 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, // 2 小程序  1 h5
-						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=false
-				}
-			},
-			// 线路
-			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.videolinkType == 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
-							this.iskftypemsg=res.msg
-							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)
-				})
-			},
-			
-			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) + 164rpx);
-		.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;
-	 }
+<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-between align-center fs24 base-color-9" >
+			<view class="justify-start align-center" v-if="userInfo.userId">
+				<view>{{nameuser?nameuser:'暂未授权昵称'}}#</view>
+				<view>{{userInfo.userId}}</view>
+			</view>
+			<view class="justify-start align-center" @click="tofeek">
+				<image src="/static/images/feedback.png" class="w40 h40"></image>
+				<view class="fs28 base-color-9 m10">投诉</view>
+			</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"  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> -->
+				<button class="author-btn" 
+				@click="submit">{{isLogin&&isAddKf==1 ?'提交答案领取奖励' : '立即学习'}}</button>
+			</view>
+		</view>
+		<view>
+			<u-modal :show="showfalse" title="提示" :content='contentmsg' @confirm='showfalse=false'></u-modal>
+		</view>
+		<u-loading-page :loading="viewload" iconSize="32" loadingColor="#3c9cff" fontSize="24"
+		:loading-text="loadingtext"></u-loading-page>
+		<ykscreenRecord></ykscreenRecord>
+		<courseExpiration v-if="showExpiration" :code="resCode" :msg="resMsg" :qrcode="qrcode"
+		:userId="user && userInfo.userId ? userInfo.userId : ''"></courseExpiration>
+	</view>
+</template>
+
+<script>
+	import { generateRandomString} from "@/utils/common.js"
+	// import { loginByMiniApp,handleFsUserWx} from "@/api/course.js"
+	import dayjs from 'dayjs';
+	import { mapGetters } from 'vuex';
+	import {
+		getErrMsg,
+		getH5CourseByVideoId,
+		getH5CourseVideoDetails,
+		courseAnswer,
+		getFinishCourseVideo,
+		getIsAddKf,
+		getInternetTraffic,
+		getIntegralByH5Video,
+		sendReward,
+		getRealLink,
+		handleFsUserWx,
+		loginByMiniApp
+	} from "@/api/courseLook.js"
+	// import { loginByMp,checkUserInfo,editUser} from '@/api/user'
+	import ykscreenRecord from './yk-screenRecord/yk-screenRecord.vue'
+	import courseExpiration from './components/courseExpiration.vue'
+	export default {
+		components: {
+			ykscreenRecord,
+			courseExpiration
+		},
+		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,
+				// 是否允许拖动进度条
+				videolinkType: 0,
+				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,
+				iskftypemsg:'',
+				courseLogo: '',
+				isquestion:false,
+				tipsPopup:false,
+				timepath:'3分之1',
+				tipsTime2:0,
+				userlogo:false,
+				projectId:'',
+				userinfos:{
+					nickname:"",
+					avatar:""
+				},
+				headImg:'',
+				authType:0,//0微信登录 1手机号登录
+				userdisabled:false,
+				showfalse:false,
+				contentmsg:null,
+			}
+		},
+		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
+			},
+			...mapGetters(['coureLogin']),
+		},
+		watch: {
+		    coureLogin: {
+		      immediate: true,          // 页面一进入就检查一次
+		      handler(val) {
+		        if (val == 2&&this.isLogin) {
+					console.log("看课AppToken失效,请重新登录")
+					this.isLogin = false
+					this.isAddKf = 0
+					this.goLogin()
+		        }
+		      }
+		    }
+		},
+		onLoad(option) {
+			uni.$on('usercode',(data)=>{
+				console.log('huoqu ',data)
+				this.goLogin(data)
+			})
+			uni.$on('vipMsg',(data)=>{
+				console.log(4444,data)
+				this.contentmsg=data
+				this.showfalse=true
+				uni.showToast({
+					icon:'none',
+					title: data,
+					duration:5000
+				});
+			})
+			this.videoContext = uni.createVideoContext('video-content-box', this)
+			this.code = option.code
+			if(uni.getStorageSync('userInfo')&&JSON.stringify(uni.getStorageSync('userInfo'))!='{}') {
+				this.userInfo = uni.getStorageSync('userInfo')
+			} else {
+				this.userInfo = {}
+			}
+			this.appToken=uni.getStorageSync('companyUserInfo')
+			// decodeURIComponent()
+			if(!option.course){
+				const keys = decodeURIComponent(decodeURIComponent(Object.keys(option)[0]));
+				console.log("keys",keys)
+				this.urlOption=JSON.parse(keys.split('course=')[1])
+			}else{
+				this.urlOption = option.course ? JSON.parse(option.course) : {}
+			}
+			uni.setStorageSync('H5course',this.urlOption)
+			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.projectId= this.urlOption.projectId
+			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.userinfos=uni.getStorageSync('userinfos')
+			this.userInfo=uni.getStorageSync('userInfo')
+			this.tipsOpen = false
+			this.isExpand = true
+			this.uuId = generateRandomString(16)
+			if (this.videoId) {
+				this.getH5CourseByVideo()
+			}
+			const AppToken=uni.getStorageSync('TOKEN_WEXIN')
+			if(AppToken){
+				// this.isLogin=true
+				if(this.isAddKf == 1&&this.userInfo.userId){
+					this.getH5CourseVideoDetails()
+					console.log(1)
+				} 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
+			// }
+			// uni.$off('usercode')
+		},
+		onUnload() {
+			if (this.interval != null) {
+				clearInterval(this.interval)
+				this.interval = null
+			}
+			this.clearIntegral()
+			// uni.$off('usercode')
+		},
+		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()
+			uni.$off('usercode')
+		},
+		methods: {
+			handleFsUserWxs(){
+				uni.login({
+					provider: "weixin",
+					success: async loginRes => {
+						console.log(loginRes)
+						let code = loginRes.code // 获取开发code
+						handleFsUserWx({
+						   code: code,
+						   appId:this.appid,
+						   userId:this.userInfo.userId
+						})
+						.then( res => {
+							if(res.code==200){
+							}else if(res.code==406){
+								uni.hideLoading();
+								uni.showToast({
+									icon:'none',
+									title: '该用户已成为其他销售会员',
+								});
+							}else{
+								uni.hideLoading();
+								uni.showToast({
+									icon:'none',
+									title: res.msg,
+								});
+							}
+						   
+						 })
+					},
+				})
+			},
+			async goLogin(data) {
+				// console.log('现在jjj',data)
+				if(data){
+					// console.log('huoqu1222',data)
+					uni.showLoading({
+						title: '加载中'
+					})
+					uni.login({
+						provider: "weixin",
+						success: async loginRes => {
+							// console.log(loginRes)
+							let code = loginRes.code // 获取开发code
+							handleFsUserWx({
+							   code: code,
+							   appId:this.appid,
+							   userId:data.userId
+							})
+							.then( res => {
+								if(res.code==200){
+									// console.log(res)
+									uni.hideLoading();
+									uni.showToast({
+										icon:'none',
+										title: "登录成功",
+									});
+									this.userinfos=uni.getStorageSync('userinfos')
+									uni.getStorageSync('TOKEN_WEXIN');
+									this.userInfo=uni.getStorageSync('userInfo');
+									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,
+									});
+								}
+							   
+							 })
+						},
+					})
+				}else{
+					await this.$store.dispatch('getWebviewUrl');
+					uni.navigateTo({
+						url:'/pages_course/webview?H5course='+uni.getStorageSync('H5course')
+					})
+				}
+				
+			},
+			tofeek(){
+				if(uni.getStorageSync('TOKEN_WEXIN')){
+					uni.navigateTo({
+						url:"/pages_course/feedback"
+					})
+				}else{
+					uni.showToast({
+						icon:'none',
+						title:"请先点击立即学习,登录小程序!",
+					});
+				}
+				
+			},
+			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(){
+				
+			},
+			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.videolinkType != 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 - 164rpx )`
+						})
+						.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 : ''
+							});
+						}else {
+							uni.showToast({
+								title: res.msg,
+								icon: "none"
+							})
+						}
+						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,
+					// projectId:this.projectId,
+					id:this.timeid
+				}
+				getH5CourseVideoDetails(data).then(res => {
+					uni.hideLoading();
+						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.videolinkType == 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: this.iskftypemsg,
+										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")
+								if(res.msg=='答题成功'){
+									this.closeAnswerPopup()
+									
+								}
+							}
+						} 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, // 2 小程序  1 h5
+						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=false
+				}
+			},
+			// 线路
+			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.videolinkType == 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.userInfo.userId){
+								this.isAddKf = 1
+								this.getH5CourseVideoDetails()
+								this.handleFsUserWxs()
+							}else{
+								this.goLogin()
+							}
+							// 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'
+							});
+							this.initExpiration(res.msg,res.code)
+						}else if(res.code==505){
+							this.isAddKf = 0
+							this.qrcode=res.ext
+							this.kfPopup=true
+							uni.showToast({
+								title: "管理员开启了会员审核,请等待审核!",
+								icon: 'none'
+							});
+							this.initExpiration(res.msg,res.code)
+						}else if(res.code==406){
+							uni.hideLoading();
+							uni.showToast({
+								icon:'none',
+								title: '该用户已成为其他销售会员',
+							});
+							this.initExpiration(res.msg,res.code)
+						}else if(res.code==504){
+							this.isAddKf = 0
+							this.iskftype=1
+							this.iskftypemsg=res.msg
+							uni.showToast({
+								title: res.msg,
+								icon: 'none'
+							});
+							this.initExpiration(res.msg,res.code)
+						}
+						 else {
+							 this.initExpiration(res.msg,res.code)
+							this.isAddKf = 0
+							uni.showToast({
+								title: res.msg,
+								icon: 'none'
+							});
+						}
+					},
+					err => {}
+				);
+			},
+			initExpiration(resMsg,resCode) {
+				if(resCode==401) return;
+				this.resMsg = resMsg
+				this.resCode = resCode
+				this.showExpiration = true
+			},
+			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)
+				})
+			},
+			
+			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) + 164rpx);
+		.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>

+ 109 - 108
pages_course/webview.vue

@@ -4,126 +4,127 @@
    <view class="loading2" v-if="loading">
       <text>加载中...</text>
     </view>
-    <!-- web-view组件 -->
-	<web-view
-	  :src="webviewUrl" 
-	  @message="handleMessage"
-	  @load="onLoads"
-	  @error="onError"
+    <!-- web-view组件 -->
+	<web-view
+	  :src="webviewUrl" 
+	  @message="handleMessage"
+	  @load="onLoads"
+	  @error="onError"
 	></web-view>
   </view>
 </template>
 
-<script>
+<script>
 import code from '../uni_modules/uview-ui/libs/config/props/code'
-import { H5logoinApp} from '@/api/courseLook.js'
+import { H5logoinApp} from '@/api/courseLook.js'
 import { getConfigByKey } from '@/api/index.js'
 export default {
   data() {
     return {
-      loading: false,
-	  // webviewUrl: 'https://company.h5.test.ylrztop.com/avatarAuth/weixinOauth.html',//云联融智
-	  // webviewUrl: 'https://authdrk.ylrztop.com/weixinOauth',//青岛德瑞康
-	  // webviewUrl: 'https://wxmpauth.zkwlyf.com/weixinOauth',//中康智慧
-	  // webviewUrl:'https://userappkyt.ylrzcloud.com/weixinOauth',
-      userinfos:{
-      	nickname:"",
-      	avatar:""
-      },
-	  usercode:{},
-	  h5Appid:'',
-	  redirect_uri: ''
+      loading: false,
+	  // webviewUrl: 'https://company.h5.test.ylrztop.com/avatarAuth/weixinOauth.html',//云联融智
+	  // webviewUrl: 'https://authdrk.ylrztop.com/weixinOauth',//青岛德瑞康
+	  // webviewUrl: 'https://wxmpauth.zkwlyf.com/weixinOauth',//中康智慧
+	  // webviewUrl:'https://userappkyt.ylrzcloud.com/weixinOauth',
+      userinfos:{
+      	nickname:"",
+      	avatar:""
+      },
+	  usercode:{},
+	  h5Appid:'',
+	  redirect_uri: ''
     }
   },
-  onLoad(options) {
-	  if(options.code){
-		  // uni.$emit('us ercode', {  code: options.code });
-		  this.loginweixin(options.code)
-	  }
+  onLoad(options) {
+	  if(options.code){
+		  // uni.$emit('us ercode', {  code: options.code });
+		  this.loginweixin(options.code)
+	  }
 	  console.log(this.webviewUrl)
     // 生成带参的H5授权页面URL
     // this.webviewUrl = this.generateAuthUrl()
+  },
+  computed:{
+	  appid() {
+	  	return this.$store.state.appid
+	  },
+	  isSpare() {
+	  	return this.$store.state.isSpare
+	  },
+	  webviewUrl() {
+	  	// return this.$store.state.webviewUrl +'&time='+new Date().getTime()
+		return this.$store.state.webviewUrl 
+	  }
   },
-  computed:{
-	  appid() {
-	  	return this.$store.state.appid
-	  },
-	  isSpare() {
-	  	return this.$store.state.isSpare
-	  },
-	  webviewUrl() {
-	  	// return this.$store.state.webviewUrl +'&time='+new Date().getTime()
-		return this.$store.state.webviewUrl 
-	  }
-  },
-  methods: {
-	  // 截取url中的参数方法
-	  getUrlParam() {
-	      var url = this.webviewUrl;
-	      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;
-	  },
-	  loginweixin(datas){
-		 const h5course=uni.getStorageSync('H5course')
-		  var data = {
-		  	code: datas,
-			appId:this.appid,
-			companyId:h5course.companyId,
-			companyUserId:h5course.companyUserId,
-			projectId:h5course.projectId
-		  }
-		  // 炮灰且自动看课调courseLoginByMp接口,其他变
-		  	let type = this.isSpare==1&&h5course.type==1 ? 1 : 0
-		  H5logoinApp(data,type).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.user.nickname
-					this.userinfos.avatar=res.user.avatar
-					uni.setStorageSync("userinfos",this.userinfos)
-					uni.setStorageSync('userInfo', res.user);
-					uni.setStorageSync('TOKEN_WEXIN', res.token);
-					this.usercode.code=datas
-					this.usercode.userId=res.user.userId
-		  			uni.$emit('usercode',this.usercode)
-		  			uni.navigateBack({
-		  				delta: 1
-		  			});
-		  		} else {
-					uni.hideLoading();
-		  			uni.showToast({
-		  			  title: res.msg || '获取用户信息失败',
-		  			  icon: 'none'
-		  			})
-					setTimeout(()=>{
-						uni.$emit('vipMsg',res.msg)
-						uni.navigateBack({
-							delta: 1
-						});
-					},2000)
-		  		}
-		  	},
-		  	err => {}
-		  ).catch(err=>{
-		  	uni.hideLoading();
-		  		uni.showToast({
-		  			icon:'none',
-		  			title: "获取用户信息失败",
-		  		});
-		  });
+  methods: {
+	  // 截取url中的参数方法
+	  getUrlParam() {
+	      var url = this.webviewUrl;
+	      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;
+	  },
+	  loginweixin(datas){
+		 const h5course=uni.getStorageSync('H5course')
+		  var data = {
+		  	code: datas,
+			appId:this.appid,
+			companyId:h5course.companyId,
+			companyUserId:h5course.companyUserId,
+			projectId:h5course.projectId
+		  }
+		  // 炮灰且自动看课调courseLoginByMp接口,其他变
+		  	let type = this.isSpare==1&&h5course.type==1 ? 1 : 0
+		  H5logoinApp(data,type).then(res => {
+		  		  this.res=res
+		  		uni.hideLoading();
+		  		if (res.code == 200) {
+					this.$store.commit('setCoureLogin', 1);
+		  			console.log(res)
+		  			uni.hideLoading();
+		  			uni.showToast({
+		  				icon:'none',
+		  				title: "成功获取用户信息",
+		  			});
+					this.userinfos.nickname=res.user.nickname
+					this.userinfos.avatar=res.user.avatar
+					uni.setStorageSync("userinfos",this.userinfos)
+					uni.setStorageSync('userInfo', res.user);
+					uni.setStorageSync('TOKEN_WEXIN', res.token);
+					this.usercode.code=datas
+					this.usercode.userId=res.user.userId
+		  			uni.$emit('usercode',this.usercode)
+		  			uni.navigateBack({
+		  				delta: 1
+		  			});
+		  		} else {
+					uni.hideLoading();
+		  			uni.showToast({
+		  			  title: res.msg || '获取用户信息失败',
+		  			  icon: 'none'
+		  			})
+					setTimeout(()=>{
+						uni.$emit('vipMsg',res.msg)
+						uni.navigateBack({
+							delta: 1
+						});
+					},2000)
+		  		}
+		  	},
+		  	err => {}
+		  ).catch(err=>{
+		  	uni.hideLoading();
+		  		uni.showToast({
+		  			icon:'none',
+		  			title: "获取用户信息失败",
+		  		});
+		  });
 	  },
     // 生成授权页面URL,附带小程序传递的参数
     generateAuthUrl() {
@@ -132,8 +133,8 @@ export default {
       
       // 这里替换为你的uniapp H5项目域名
       
-      // 拼接参数,可包含小程序特有的信息
-	  this.h5Appid = this.getUrlParam().appid
+      // 拼接参数,可包含小程序特有的信息
+	  this.h5Appid = this.getUrlParam().appid
 	  this.redirect_uri = this.webviewUrl
       const params = {
         scene,
@@ -156,7 +157,7 @@ export default {
         this.userInfo = e.detail.data
          this.token= e.detail.token
         // 存储用户信息到本地
-        uni.setStorageSync('userInfo', this.userInfo)
+        uni.setStorageSync('userInfo', this.userInfo)
 		uni.setStorageSync('TOKEN_WEXIN', this.userInfo)
         
         // 返回上一页或跳转到首页

+ 163 - 0
pages_course/yk-screenRecord/yk-screenRecord.vue

@@ -0,0 +1,163 @@
+<template>
+	<view class="zzc_mol" v-if="isRecording"></view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				isRecording: false
+			}
+		},
+		created() {
+			this.screenInit();
+		},
+		onUnload() {
+			this.AllowScreenshots()
+		},
+		beforeDestroy() {
+			this.AllowScreenshots()
+		},
+		methods: {
+			screenInit() {
+				let _this = this;
+				// #ifdef H5
+				uni.showToast({
+					title: '请在APP或者小程序环境下操作',
+					icon: 'error'
+				})
+				// #endif
+				// #ifndef H5
+				uni.getSystemInfo({
+					success: function(e) {
+						// #ifdef APP-PLUS
+						if (e.platform == 'android') {
+							//注意:一旦开启禁止截屏/录屏后将会全局生效,关闭页面时记得放开允许截屏/录屏
+							_this.NoscreenCapture();
+						} else {
+							//在APP IOS端截屏、录屏暂时没办法实现,可以寻求原生解决
+						}
+						// #endif
+
+						// #ifdef MP-WEIXIN
+						if (e.platform == 'android') {
+							//微信小程序在安卓手机上 禁止截屏/录屏(注意:禁止后录屏动作还是会进行,但录屏后的视频是黑屏的)
+							wx.setVisualEffectOnCapture({
+								visualEffect: 'hidden', //传入 hidden 则表示在截屏/录屏时隐藏屏幕
+								success: (res) => {
+									console.log(res)
+								},
+								fail: (err) => {
+									console.log(err)
+								},
+								complete: (res) => {
+									console.log(res)
+								}
+							})
+						} else {
+							//微信小程序在IOS手机上,注意:目前微信小程序在ios上也只能通过监听录屏状态,然后通过添加view层来进行阻止,截屏暂时无法实现
+							//监听用户录屏事件
+							wx.onScreenRecordingStateChanged(function(res) {
+								if (res.state == 'start') {
+									_this.isRecording = true
+								} else {
+									_this.isRecording = false
+								}
+							})
+							//查询用户是否在录屏
+							wx.getScreenRecordingState({
+								success: (res) => {
+									if (res.state == 'on') {
+										_this.isRecording = true
+									} else if (res.state == 'off') {
+										_this.isRecording = false
+									}
+								},
+								fail: (err) => {
+									_this.isRecording = false
+								}
+							})
+						}
+						// #endif
+					}
+				})
+				// #endif
+			},
+			//安卓端禁止截屏
+			NoscreenCapture() {
+				let osname = plus.os.name;
+				if (osname == "Android") {
+					var activity = plus.android.runtimeMainActivity();
+					plus.android.invoke(plus.android.invoke(activity, "getWindow"), "addFlags", 0x00002000);
+				}
+			},
+			//安卓端允许截屏  
+			AllowScreenshots() {
+				let _this = this;
+				uni.getSystemInfo({
+					success: function(e) {
+						// #ifdef MP-WEIXIN
+						if (e.platform == 'android') {
+							//微信小程序在安卓手机上 禁止截屏/录屏(注意:禁止后录屏动作还是会进行,但录屏后的视频是黑屏的)
+							wx.setVisualEffectOnCapture({
+								visualEffect: 'none', //传入 hidden 则表示在截屏/录屏时隐藏屏幕
+								success: (res) => {
+									console.log(res)
+								},
+								fail: (err) => {
+									console.log(err)
+								},
+								complete: (res) => {
+									console.log(res)
+								}
+							})
+						} else {
+							//微信小程序在IOS手机上,注意:目前微信小程序在ios上也只能通过监听录屏状态,然后通过添加view层来进行阻止,截屏暂时无法实现
+							//监听用户录屏事件
+							wx.onScreenRecordingStateChanged(function(res) {
+								if (res.state == 'start') {
+									_this.isRecording = false
+								} else {
+									_this.isRecording = false
+								}
+							})
+							//查询用户是否在录屏
+							wx.getScreenRecordingState({
+								success: (res) => {
+									if (res.state == 'on') {
+										_this.isRecording = false
+									} else if (res.state == 'off') {
+										_this.isRecording = false
+									}
+								},
+								fail: (err) => {
+									_this.isRecording = false
+								}
+							})
+						}
+						// #endif
+					}
+				})
+				// #ifdef APP-PLUS
+				let osname = plus.os.name;
+				if (osname == "Android") {
+					var activity = plus.android.runtimeMainActivity();
+					plus.android.invoke(plus.android.invoke(activity, "getWindow"), "clearFlags", 0x00002000);
+				}
+				// #endif
+			}
+		}
+	}
+</script>
+
+<style>
+	.zzc_mol {
+		background: #000;
+		width: 100%;
+		height: 100%;
+		position: fixed;
+		z-index: 99999;
+		top: 0;
+		left: 0;
+	}
+</style>

+ 676 - 676
pages_index/addEditPatient.vue

@@ -1,676 +1,676 @@
-<template>
-	<view class="content">
-		<view class="inner">
-			<u-alert title="国家卫健委要求,就医行为必须实名登记" type = "info"  ></u-alert>
-			<view class="form-box">
-				<view class="form-item">
-					<text class="label">姓名</text>
-					<input class="input-width" type="text" v-model="form.patientName" placeholder="请输入真实姓名" placeholder-class="form-input" />
-				</view>
-				<view class="form-item">
-					<text class="label">性别</text>
-					<radio-group style="display: flex;align-items: center;">
-						<label style="margin-right:30rpx;">
-							<radio @click="genderChange(1)" color="#C39A58" value="1" :checked="form.sex===1" style="margin-right: 16upx;" />
-							<text  class="option-text">男</text>
-						</label>
-						<label>
-							<radio @click="genderChange(2)" color="#C39A58" value="2" :checked="form.sex===2" style="margin-right: 16upx;" />
-							<text class="option-text">女</text>
-						</label>
-					</radio-group>
-				</view>
-				<view class="form-item">
-					<text class="label">手机号码</text>
-					<input class="input-width" type="phone" v-model="form.mobile" placeholder="请输入手机号码" placeholder-class="form-input" />
-				</view>
-				<view class="form-item">
-					<text class="label">身份证号</text>
-					<input class="input-width" type="idcard" @blur="idcardChange()" v-model="form.idCard" placeholder="请输入身份证号" placeholder-class="form-input" />
-				</view>
-				<view class="form-item">
-					<text class="label">出生年月</text>
-					<picker :value="form.birthday" start="1900-01-01" class="birth-picker" mode="date"   @change="birthdayChange">
-						<view class="right-box">
-							<view class="input-box">
-								<input type="text" :value="form.birthday" placeholder="请选择出生年月" placeholder-class="form-input" disabled="disabled" />
-							</view>
-							<image class="arrow" :src="imgPath+'/app/commonCourse/arrow_gray.png'" mode=""></image>
-						</view>
-					</picker>
-				</view>
-			</view>
-			<view class="form-box">
-				<view class="form-item" @click="relationShow=true">
-					<text class="label">与本人关系</text>
-					<view class="right-box">
-						<view class="input-box">
-							<input type="text" :value="form.relation" placeholder="请选择" placeholder-class="form-input" disabled="disabled" />
-						</view>
-						<image class="arrow" :src="imgPath+'/app/commonCourse/arrow_gray.png'" mode=""></image>
-					</view>
-				</view>
-			</view>
-			<view class="form-box">
-				<view class="form-item">
-					<text class="label">肝功能</text>
-					<radio-group  @change="liverUnusualChange" style="display: flex;align-items: center;">
-						<label style="margin-right:30rpx;">
-							<radio   color="#C39A58" value="正常" :checked="form.liverUnusual==='正常'" style="margin-right: 16upx;" />
-							<text  class="option-text">正常</text>
-						</label>
-						<label>
-							<radio   color="#C39A58" value="异常" :checked="form.liverUnusual==='异常'" style="margin-right: 16upx;" />
-							<text class="option-text">异常</text>
-						</label>
-					</radio-group>
-				</view>
-				<view class="form-item">
-					<text class="label">肾功能</text>
-					<radio-group @change="renalUnusualChange" style="display: flex;align-items: center;">
-						<label style="margin-right:30rpx;">
-							<radio   color="#C39A58" value="正常" :checked="form.renalUnusual==='正常'" style="margin-right: 16upx;" />
-							<text  class="option-text">正常</text>
-						</label>
-						<label>
-							<radio   color="#C39A58" value="异常" :checked="form.renalUnusual==='异常'" style="margin-right: 16upx;" />
-							<text class="option-text">异常</text>
-						</label>
-					</radio-group>
-				</view>
-				<view class="form-item">
-					<text class="label">过敏史</text>
-					<radio-group @change="historyAllergicChange" style="display: flex;align-items: center;justify-content: flex-end;margin: 5rpx 0rpx;">
-						<label style="margin-right:30rpx;">
-							<radio    color="#C39A58" value="无" :checked="form.historyAllergic==='无'" style="margin-right: 16upx;" />
-							<text  class="option-text">无</text>
-						</label>
-						<label>
-							<radio   color="#C39A58" value="有" :checked="form.historyAllergic==='有'" style="margin-right: 16upx;" />
-							<text class="option-text">有</text>
-						</label>
-					</radio-group>
-					
-				</view>
-				<view class="form-item" v-if="form.historyAllergic=='有'" >
-					<view class="option-box"  style="margin: 5rpx 0rpx;"  >
-						<view class="option" v-for="(item,index) in historyAllergics" >
-							<u-tag @click="historyAllergicOptionChange(item)" :borderColor="item.checked==1?'#ffffff':'#C39A58'" :bgColor="item.checked==1?'#C39A58':'#ffffff'" :color="item.checked==1?'#ffffff':'#C39A58'" shape="circle" :text="item.name"></u-tag>
-						</view>
-					</view>
-				</view>
-				<view class="form-item">
-					<text class="label">个人病史</text>
-					<radio-group @change="selfMedHistoryChange" style="display: flex;align-items: center;">
-						<label style="margin-right:30rpx;">
-							<radio   color="#C39A58" value="无" :checked="form.selfMedHistory==='无'" style="margin-right: 16upx;" />
-							<text  class="option-text">无</text>
-						</label>
-						<label>
-							<radio   color="#C39A58" value="有" :checked="form.selfMedHistory==='有'" style="margin-right: 16upx;" />
-							<text class="option-text">有</text>
-						</label>
-					</radio-group>
-				</view>
-				<view class="form-item" v-if="form.selfMedHistory=='有'" >
-					<view class="option-box"  style="margin: 5rpx 0rpx;"  >
-						<view class="option" v-for="(item,index) in selfMedHistorys" >
-							<u-tag @click="selfMedHistoryOptionChange(item)" :borderColor="item.checked==1?'#ffffff':'#C39A58'" :bgColor="item.checked==1?'#C39A58':'#ffffff'" :color="item.checked==1?'#ffffff':'#C39A58'" shape="circle" :text="item.name"></u-tag>
-						</view>
-					</view>
-				</view>
-				<view class="form-item">
-					<text class="label">家庭病史</text>
-					<radio-group @change="familyMedHistoryChange" style="display: flex;align-items: center;">
-						<label style="margin-right:30rpx;">
-							<radio   color="#C39A58" value="无" :checked="form.familyMedHistory==='无'" style="margin-right: 16upx;" />
-							<text  class="option-text">无</text>
-						</label>
-						<label>
-							<radio   color="#C39A58" value="有" :checked="form.familyMedHistory==='有'" style="margin-right: 16upx;" />
-							<text class="option-text">有</text>
-						</label>
-					</radio-group>
-				</view>
-				<view class="form-item" v-if="form.familyMedHistory=='有'" >
-					<view class="option-box"  style="margin: 5rpx 0rpx;"  >
-						<view class="option" v-for="(item,index) in familyMedHistorys" >
-							<u-tag @click="familyMedHistoryOptionChange(item)" :borderColor="item.checked==1?'#ffffff':'#C39A58'" :bgColor="item.checked==1?'#C39A58':'#ffffff'" :color="item.checked==1?'#ffffff':'#C39A58'" shape="circle" :text="item.name"></u-tag>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-		<view class="btn-box">
-			<view class="sub-btn" @click="submit()">保存就诊人</view>
-		</view>
-		<u-action-sheet
-				:show="relationShow"
-				:actions="relations"
-				title="请选择"
-				@close="relationShow = false"
-				@select="relationSelect"
-		>
-		</u-action-sheet>
-	</view>
-</template>
-
-<script>
-	import {getPatientById,addPatient,editPatient} from '@/api/patient'
-	export default {
-		data() {
-			return {
-				relationShow:false,
-				relations: [
-					{
-						name: '本人',
-					},
-					{
-						name: '配偶',
-					},
-					{
-						name: '父母',
-					},
-					{
-						name: '子女',
-					},
-					{
-						name: '朋友',
-					},
-					{
-						name: '亲戚',
-					},
-					{
-						name: '其他',
-					},
-				],
-				historyAllergics: [
-					{
-						name: '阿司匹林',
-						checked: 0,
-					},
-					{
-						name: '磺胺类',
-						checked: 0,
-					},
-					{
-						name: '头孢类',
-						checked: 0,
-					},
-					{
-						name: '青毒素类',
-						checked: 0,
-					},
-					{
-						name: '奶制品',
-						checked: 0,
-					},
-					{
-						name: '其他',
-						checked: 0,
-					},
-				],
-				selfMedHistorys: [
-					{
-						name: '糖尿病',
-						checked: 0,
-					},
-					{
-						name: '哮喘',
-						checked: 0,
-					},
-					{
-						name: '恶性肿瘤',
-						checked: 0,
-					},
-					{
-						name: '高血压',
-						checked: 0,
-					},
-					{
-						name: '其他',
-						checked: 0,
-					},
-				],
-				familyMedHistorys: [
-					{
-						name: '糖尿病',
-						checked: 0,
-					},
-					{
-						name: '哮喘',
-						checked: 0,
-					},
-					{
-						name: '恶性肿瘤',
-						checked: 0,
-					},
-					{
-						name: '高血压',
-						checked: 0,
-					},
-					{
-						name: '其他',
-						checked: 0,
-					},
-				],
-				type:null,
-				patientId:null,
-				form: {
-					sex: 1,
-					birthday: '',
-					idCard:"",
-					relation:"",  // 与本人关系
-					liverUnusual:"正常",  // 肝功能是否异常
-					renalUnusual:"正常",  // 肾功能是否异常
-					historyAllergic:"无", // 过敏史
-					familyMedHistory:"无",  // 家族病史
-					selfMedHistory:"无",  // 个人病史
-				}
-			};
-		},
-		computed: {
-			imgPath() {
-			  return this.$store.state.imgpath
-			},
-		},
-		onLoad(option) {
-			this.type=option.type;
-			if(this.type=='edit'){
-				this.patientId=option.patientId;
-				this.getPatientById();
-				uni.setNavigationBarTitle({
-					title: '编辑就诊人'
-				});
-			}
-			else{
-				uni.setNavigationBarTitle({
-					title: '新增就诊人'
-				});
-			}
-		},
-		methods:{
-			liverUnusualChange(item){
-				console.log(item)
-				this.form.liverUnusual=item.detail.value;
-			},
-			renalUnusualChange(item){
-				console.log(item)
-				this.form.renalUnusual=item.detail.value;
-			},
-			historyAllergicOptionChange(item){
-				item.checked=item.checked==1?0:1
-			},
-			selfMedHistoryOptionChange(item){
-				item.checked=item.checked==1?0:1
-			},
-			familyMedHistoryOptionChange(item){
-				item.checked=item.checked==1?0:1
-			},
-			historyAllergicChange(item){
-				console.log(item)
-				this.form.historyAllergic=item.detail.value;
-			},
-			selfMedHistoryChange(item){
-				console.log(item)
-				this.form.selfMedHistory=item.detail.value;
-			},
-			familyMedHistoryChange(item){
-				console.log(item)
-				this.form.familyMedHistory=item.detail.value;
-			},
-			relationSelect(e){
-				this.form.relation = e.name
-			},
-			idcardChange(){
-				if(this.form.idCard.length==18){
-					var json=this.$parseIDCardInfo(this.form.idCard)
-					this.form.birthday=json.birthday
-					console.log(json)
-				}
-				
-			},
-			genderChange(type){
-				this.form.sex=type
-			},
-			getPatientById(){
-				var data={patientId:this.patientId};
-				getPatientById(data).then(
-					res => {
-						if(res.code==200){
-							this.form=res.data;
-							this.date=this.form.birthday;
-							if(this.form.historyAllergic!=null&&this.form.historyAllergic!="无"){
-								var options=this.form.historyAllergic.split(',');
-							  	this.historyAllergics.forEach(item =>{
-									for(var i=0;i<options.length;i++){
-										if(item.name==options[i]){
-											item.checked=1;
-										}
-									}
-							  		
-							  	})
-							  	this.form.historyAllergic="有";
-							}
-							if(this.form.selfMedHistory!=null&&this.form.selfMedHistory!="无"){
-							  	var options=this.form.selfMedHistory.split(',');
-							  	this.selfMedHistorys.forEach(item =>{
-									for(var i=0;i<options.length;i++){
-										if(item.name==options[i]){
-											item.checked=1;
-										}
-									}
-							  		
-							  	})
-							  	this.form.selfMedHistory="有";
-							}
-							if(this.form.familyMedHistory!=null&&this.form.familyMedHistory!="无"){
-							   	var options=this.form.familyMedHistory.split(',');
-							   	this.familyMedHistorys.forEach(item =>{
-									for(var i=0;i<options.length;i++){
-										if(item.name==options[i]){
-											item.checked=1;
-										}
-									}
-							   		
-							   	})
-							   	this.form.familyMedHistory="有";
-							}
-							  
-						}else{
-							uni.showToast({
-								title: res.msg,
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			submit(){
-				if(this.type=="add"){
-					this.addPatient()
-				}
-				else if(this.type=="edit"){
-					this.editPatient()
-				}
-				
-			},
-			editPatient(){
-				var data={
-					patientId:this.patientId,
-					patientName:this.form.patientName,
-					mobile:this.form.mobile,
-					sex: this.form.sex,
-					birthday: this.form.birthday,
-					idCard:this.form.idCard,
-					relation:this.form.relation,  // 与本人关系
-					liverUnusual:this.form.liverUnusual,  // 肝功能是否异常
-					renalUnusual:this.form.renalUnusual,  // 肾功能是否异常
-				}
-				if(this.form.historyAllergic=="有"){
-					var options=[];
-					this.historyAllergics.forEach(item =>{
-						if(item.checked==1){
-							options.push(item.name);
-						}
-					})
-					data.historyAllergic=options.toString();
-				}
-				else{
-					data.historyAllergic=this.form.historyAllergic;
-				}
-				if(this.form.selfMedHistory=="有"){
-					var options=[];
-					this.selfMedHistorys.forEach(item =>{
-						if(item.checked==1){
-							options.push(item.name);
-						}
-					})
-					data.selfMedHistory=options.toString();
-				}
-				else{
-					data.selfMedHistory=this.form.selfMedHistory;
-				}
-				if(this.form.familyMedHistory=="有"){
-					var options=[];
-					this.familyMedHistorys.forEach(item =>{
-						if(item.checked==1){
-							options.push(item.name);
-						}
-					})
-					data.familyMedHistory=options.toString();
-				}
-				else{
-					data.familyMedHistory=this.form.familyMedHistory;
-				}
-				editPatient(data).then(
-					res => {
-						if(res.code==200){
-							 uni.showToast({
-							 	icon:'success',
-							 	title: "操作成功",
-							 });
-							 setTimeout(function() {
-								 uni.$emit('refreshPatient');
-								 uni.navigateBack({
-									 delta: 1
-								 })
-							 }, 500);
-						}else{
-							uni.showToast({
-								icon:'none',
-								title: res.msg,
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			addPatient(){
-				var data={
-					patientName:this.form.patientName,
-					mobile:this.form.mobile,
-					sex: this.form.sex,
-					birthday: this.form.birthday,
-					idCard:this.form.idCard,
-					relation:this.form.relation,  // 与本人关系
-					liverUnusual:this.form.liverUnusual,  // 肝功能是否异常
-					renalUnusual:this.form.renalUnusual,  // 肾功能是否异常
-				}
-				if(this.form.historyAllergic=="有"){
-					var options=[];
-					this.historyAllergics.forEach(item =>{
-						if(item.checked==1){
-							options.push(item.name);
-						}
-					})
-					data.historyAllergic=options.toString();
-				}
-				else{
-					data.historyAllergic=this.form.historyAllergic;
-				}
-				if(this.form.selfMedHistory=="有"){
-					var options=[];
-					this.selfMedHistorys.forEach(item =>{
-						if(item.checked==1){
-							options.push(item.name);
-						}
-					})
-					data.selfMedHistory=options.toString();
-				}
-				else{
-					data.selfMedHistory=this.form.selfMedHistory;
-				}
-				if(this.form.familyMedHistory=="有"){
-					var options=[];
-					this.familyMedHistorys.forEach(item =>{
-						if(item.checked==1){
-							options.push(item.name);
-						}
-					})
-					data.familyMedHistory=options.toString();
-				}
-				else{
-					data.familyMedHistory=this.form.familyMedHistory;
-				}
-				
-				addPatient(data).then(
-					res => {
-						if(res.code==200){
-							 uni.showToast({
-							 	icon:'none',
-							 	title: res.alert || res.msg,
-							 });
-							 const time = res.alert&&res.alert.includes('芳华币') ? 1000 : 500
-							 setTimeout(function() {
-								 uni.$emit('refreshPatient');
-								 uni.navigateBack({
-									 delta: 1
-								 })
-							 }, time);
-						}else{
-							
-							uni.showToast({
-								icon:'none',
-								title: res.msg,
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			// 出生日期选择
-			birthdayChange: function(e) {
-				this.form.birthday = e.target.value
-			},
-		}
-	}
-</script>
-
-<style lang="scss">
-	page{
-		height: 100%;
-	}
-	.content{
-		height: 100%;
-		.inner{
-			padding: 20upx 20rpx 200rpx;
-			.form-box{
-				margin-bottom: 15rpx;
-				padding: 0upx 30upx;
-				background: #FFFFFF;
-				border-radius: 16upx;
-				.form-item{
-					min-height: 103upx;
-					display: flex;
-					align-items: center;
-					justify-content: space-between;
-					border-bottom: 1px solid #F1F1F1;
-					&:last-child{
-						border-bottom: none;
-					}
-					.label{
-						min-width: 200upx;
-						font-size: 30upx;
-						font-family: PingFang SC;
-						font-weight: 500;
-						color: #222222;
-					}
-					.option-box{
-						display: flex;
-						flex-wrap: wrap;
-						align-items: flex-start;
-						justify-content: flex-start;
-						.option{
-							margin: 5rpx;
-						}
-					}
-					.input-width{
-						width: calc(100% - 200upx);
-						text-align: right;
-					}
-					.form-input{
-						font-size: 30upx;
-						font-family: PingFang SC;
-						font-weight: 500;
-						color: #999999;
-						text-align: right;
-					}
-					.option-text{
-						font-size: 30upx;
-						font-family: PingFang SC;
-						font-weight: 500;
-						color: #111111;
-						line-height: 30upx;
-					}
-					.right-box{
-						display: flex;
-						align-items: center;
-						.input-box{
-							width: 400upx;
-							display: flex;
-							align-items: center;
-							justify-content: flex-end;
-							input{
-								text-align: right;
-							}
-						}
-						.arrow{
-							width: 13upx;
-							height: 23upx;
-							margin-left: 20upx;
-						}
-					}
-					.birth-picker {
-						display: flex;
-						align-items: center;
-						.right-box{
-							display: flex;
-							align-items: center;
-							.input-box{
-								width: 400upx;
-								display: flex;
-								align-items: center;
-								justify-content: flex-end;
-								input{
-									text-align: right;
-								}
-							}
-							.arrow{
-								width: 13upx;
-								height: 23upx;
-								margin-left: 20upx;
-							}
-						}
-					}
-				}
-			}
-		}
-		.btn-box{
-			position: fixed;
-			bottom: 0rpx;
-			left:0rpx;
-			width: 100%;
-			height: 120upx;
-			padding: 0 30upx;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			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: #C39A58;
-				border-radius: 44upx;
-			}
-		}
-		
-	}
-	
-</style>
+<template>
+	<view class="content">
+		<view class="inner">
+			<u-alert title="国家卫健委要求,就医行为必须实名登记" type = "info"  ></u-alert>
+			<view class="form-box">
+				<view class="form-item">
+					<text class="label">姓名</text>
+					<input class="input-width" type="text" v-model="form.patientName" placeholder="请输入真实姓名" placeholder-class="form-input" />
+				</view>
+				<view class="form-item">
+					<text class="label">性别</text>
+					<radio-group style="display: flex;align-items: center;">
+						<label style="margin-right:30rpx;">
+							<radio @click="genderChange(1)" color="#C39A58" value="1" :checked="form.sex===1" style="margin-right: 16upx;" />
+							<text  class="option-text">男</text>
+						</label>
+						<label>
+							<radio @click="genderChange(2)" color="#C39A58" value="2" :checked="form.sex===2" style="margin-right: 16upx;" />
+							<text class="option-text">女</text>
+						</label>
+					</radio-group>
+				</view>
+				<view class="form-item">
+					<text class="label">手机号码</text>
+					<input class="input-width" type="phone" v-model="form.mobile" placeholder="请输入手机号码" placeholder-class="form-input" />
+				</view>
+				<view class="form-item">
+					<text class="label">身份证号</text>
+					<input class="input-width" type="idcard" @blur="idcardChange()" v-model="form.idCard" placeholder="请输入身份证号" placeholder-class="form-input" />
+				</view>
+				<view class="form-item">
+					<text class="label">出生年月</text>
+					<picker :value="form.birthday" start="1900-01-01" class="birth-picker" mode="date"   @change="birthdayChange">
+						<view class="right-box">
+							<view class="input-box">
+								<input type="text" :value="form.birthday" placeholder="请选择出生年月" placeholder-class="form-input" disabled="disabled" />
+							</view>
+							<image class="arrow" :src="imgPath+'/app/commonCourse/arrow_gray.png'" mode=""></image>
+						</view>
+					</picker>
+				</view>
+			</view>
+			<view class="form-box">
+				<view class="form-item" @click="relationShow=true">
+					<text class="label">与本人关系</text>
+					<view class="right-box">
+						<view class="input-box">
+							<input type="text" :value="form.relation" placeholder="请选择" placeholder-class="form-input" disabled="disabled" />
+						</view>
+						<image class="arrow" :src="imgPath+'/app/commonCourse/arrow_gray.png'" mode=""></image>
+					</view>
+				</view>
+			</view>
+			<view class="form-box">
+				<view class="form-item">
+					<text class="label">肝功能</text>
+					<radio-group  @change="liverUnusualChange" style="display: flex;align-items: center;">
+						<label style="margin-right:30rpx;">
+							<radio   color="#C39A58" value="正常" :checked="form.liverUnusual==='正常'" style="margin-right: 16upx;" />
+							<text  class="option-text">正常</text>
+						</label>
+						<label>
+							<radio   color="#C39A58" value="异常" :checked="form.liverUnusual==='异常'" style="margin-right: 16upx;" />
+							<text class="option-text">异常</text>
+						</label>
+					</radio-group>
+				</view>
+				<view class="form-item">
+					<text class="label">肾功能</text>
+					<radio-group @change="renalUnusualChange" style="display: flex;align-items: center;">
+						<label style="margin-right:30rpx;">
+							<radio   color="#C39A58" value="正常" :checked="form.renalUnusual==='正常'" style="margin-right: 16upx;" />
+							<text  class="option-text">正常</text>
+						</label>
+						<label>
+							<radio   color="#C39A58" value="异常" :checked="form.renalUnusual==='异常'" style="margin-right: 16upx;" />
+							<text class="option-text">异常</text>
+						</label>
+					</radio-group>
+				</view>
+				<view class="form-item">
+					<text class="label">过敏史</text>
+					<radio-group @change="historyAllergicChange" style="display: flex;align-items: center;justify-content: flex-end;margin: 5rpx 0rpx;">
+						<label style="margin-right:30rpx;">
+							<radio    color="#C39A58" value="无" :checked="form.historyAllergic==='无'" style="margin-right: 16upx;" />
+							<text  class="option-text">无</text>
+						</label>
+						<label>
+							<radio   color="#C39A58" value="有" :checked="form.historyAllergic==='有'" style="margin-right: 16upx;" />
+							<text class="option-text">有</text>
+						</label>
+					</radio-group>
+					
+				</view>
+				<view class="form-item" v-if="form.historyAllergic=='有'" >
+					<view class="option-box"  style="margin: 5rpx 0rpx;"  >
+						<view class="option" v-for="(item,index) in historyAllergics" >
+							<u-tag @click="historyAllergicOptionChange(item)" :borderColor="item.checked==1?'#ffffff':'#C39A58'" :bgColor="item.checked==1?'#C39A58':'#ffffff'" :color="item.checked==1?'#ffffff':'#C39A58'" shape="circle" :text="item.name"></u-tag>
+						</view>
+					</view>
+				</view>
+				<view class="form-item">
+					<text class="label">个人病史</text>
+					<radio-group @change="selfMedHistoryChange" style="display: flex;align-items: center;">
+						<label style="margin-right:30rpx;">
+							<radio   color="#C39A58" value="无" :checked="form.selfMedHistory==='无'" style="margin-right: 16upx;" />
+							<text  class="option-text">无</text>
+						</label>
+						<label>
+							<radio   color="#C39A58" value="有" :checked="form.selfMedHistory==='有'" style="margin-right: 16upx;" />
+							<text class="option-text">有</text>
+						</label>
+					</radio-group>
+				</view>
+				<view class="form-item" v-if="form.selfMedHistory=='有'" >
+					<view class="option-box"  style="margin: 5rpx 0rpx;"  >
+						<view class="option" v-for="(item,index) in selfMedHistorys" >
+							<u-tag @click="selfMedHistoryOptionChange(item)" :borderColor="item.checked==1?'#ffffff':'#C39A58'" :bgColor="item.checked==1?'#C39A58':'#ffffff'" :color="item.checked==1?'#ffffff':'#C39A58'" shape="circle" :text="item.name"></u-tag>
+						</view>
+					</view>
+				</view>
+				<view class="form-item">
+					<text class="label">家庭病史</text>
+					<radio-group @change="familyMedHistoryChange" style="display: flex;align-items: center;">
+						<label style="margin-right:30rpx;">
+							<radio   color="#C39A58" value="无" :checked="form.familyMedHistory==='无'" style="margin-right: 16upx;" />
+							<text  class="option-text">无</text>
+						</label>
+						<label>
+							<radio   color="#C39A58" value="有" :checked="form.familyMedHistory==='有'" style="margin-right: 16upx;" />
+							<text class="option-text">有</text>
+						</label>
+					</radio-group>
+				</view>
+				<view class="form-item" v-if="form.familyMedHistory=='有'" >
+					<view class="option-box"  style="margin: 5rpx 0rpx;"  >
+						<view class="option" v-for="(item,index) in familyMedHistorys" >
+							<u-tag @click="familyMedHistoryOptionChange(item)" :borderColor="item.checked==1?'#ffffff':'#C39A58'" :bgColor="item.checked==1?'#C39A58':'#ffffff'" :color="item.checked==1?'#ffffff':'#C39A58'" shape="circle" :text="item.name"></u-tag>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="btn-box">
+			<view class="sub-btn" @click="submit()">保存就诊人</view>
+		</view>
+		<u-action-sheet
+				:show="relationShow"
+				:actions="relations"
+				title="请选择"
+				@close="relationShow = false"
+				@select="relationSelect"
+		>
+		</u-action-sheet>
+	</view>
+</template>
+
+<script>
+	import {getPatientById,addPatient,editPatient} from '@/api/patient'
+	export default {
+		data() {
+			return {
+				relationShow:false,
+				relations: [
+					{
+						name: '本人',
+					},
+					{
+						name: '配偶',
+					},
+					{
+						name: '父母',
+					},
+					{
+						name: '子女',
+					},
+					{
+						name: '朋友',
+					},
+					{
+						name: '亲戚',
+					},
+					{
+						name: '其他',
+					},
+				],
+				historyAllergics: [
+					{
+						name: '阿司匹林',
+						checked: 0,
+					},
+					{
+						name: '磺胺类',
+						checked: 0,
+					},
+					{
+						name: '头孢类',
+						checked: 0,
+					},
+					{
+						name: '青毒素类',
+						checked: 0,
+					},
+					{
+						name: '奶制品',
+						checked: 0,
+					},
+					{
+						name: '其他',
+						checked: 0,
+					},
+				],
+				selfMedHistorys: [
+					{
+						name: '糖尿病',
+						checked: 0,
+					},
+					{
+						name: '哮喘',
+						checked: 0,
+					},
+					{
+						name: '恶性肿瘤',
+						checked: 0,
+					},
+					{
+						name: '高血压',
+						checked: 0,
+					},
+					{
+						name: '其他',
+						checked: 0,
+					},
+				],
+				familyMedHistorys: [
+					{
+						name: '糖尿病',
+						checked: 0,
+					},
+					{
+						name: '哮喘',
+						checked: 0,
+					},
+					{
+						name: '恶性肿瘤',
+						checked: 0,
+					},
+					{
+						name: '高血压',
+						checked: 0,
+					},
+					{
+						name: '其他',
+						checked: 0,
+					},
+				],
+				type:null,
+				patientId:null,
+				form: {
+					sex: 1,
+					birthday: '',
+					idCard:"",
+					relation:"",  // 与本人关系
+					liverUnusual:"正常",  // 肝功能是否异常
+					renalUnusual:"正常",  // 肾功能是否异常
+					historyAllergic:"无", // 过敏史
+					familyMedHistory:"无",  // 家族病史
+					selfMedHistory:"无",  // 个人病史
+				}
+			};
+		},
+		computed: {
+			imgPath() {
+			  return this.$store.state.imgpath
+			},
+		},
+		onLoad(option) {
+			this.type=option.type;
+			if(this.type=='edit'){
+				this.patientId=option.patientId;
+				this.getPatientById();
+				uni.setNavigationBarTitle({
+					title: '编辑就诊人'
+				});
+			}
+			else{
+				uni.setNavigationBarTitle({
+					title: '新增就诊人'
+				});
+			}
+		},
+		methods:{
+			liverUnusualChange(item){
+				console.log(item)
+				this.form.liverUnusual=item.detail.value;
+			},
+			renalUnusualChange(item){
+				console.log(item)
+				this.form.renalUnusual=item.detail.value;
+			},
+			historyAllergicOptionChange(item){
+				item.checked=item.checked==1?0:1
+			},
+			selfMedHistoryOptionChange(item){
+				item.checked=item.checked==1?0:1
+			},
+			familyMedHistoryOptionChange(item){
+				item.checked=item.checked==1?0:1
+			},
+			historyAllergicChange(item){
+				console.log(item)
+				this.form.historyAllergic=item.detail.value;
+			},
+			selfMedHistoryChange(item){
+				console.log(item)
+				this.form.selfMedHistory=item.detail.value;
+			},
+			familyMedHistoryChange(item){
+				console.log(item)
+				this.form.familyMedHistory=item.detail.value;
+			},
+			relationSelect(e){
+				this.form.relation = e.name
+			},
+			idcardChange(){
+				if(this.form.idCard.length==18){
+					var json=this.$parseIDCardInfo(this.form.idCard)
+					this.form.birthday=json.birthday
+					console.log(json)
+				}
+				
+			},
+			genderChange(type){
+				this.form.sex=type
+			},
+			getPatientById(){
+				var data={patientId:this.patientId};
+				getPatientById(data).then(
+					res => {
+						if(res.code==200){
+							this.form=res.data;
+							this.date=this.form.birthday;
+							if(this.form.historyAllergic!=null&&this.form.historyAllergic!="无"){
+								var options=this.form.historyAllergic.split(',');
+							  	this.historyAllergics.forEach(item =>{
+									for(var i=0;i<options.length;i++){
+										if(item.name==options[i]){
+											item.checked=1;
+										}
+									}
+							  		
+							  	})
+							  	this.form.historyAllergic="有";
+							}
+							if(this.form.selfMedHistory!=null&&this.form.selfMedHistory!="无"){
+							  	var options=this.form.selfMedHistory.split(',');
+							  	this.selfMedHistorys.forEach(item =>{
+									for(var i=0;i<options.length;i++){
+										if(item.name==options[i]){
+											item.checked=1;
+										}
+									}
+							  		
+							  	})
+							  	this.form.selfMedHistory="有";
+							}
+							if(this.form.familyMedHistory!=null&&this.form.familyMedHistory!="无"){
+							   	var options=this.form.familyMedHistory.split(',');
+							   	this.familyMedHistorys.forEach(item =>{
+									for(var i=0;i<options.length;i++){
+										if(item.name==options[i]){
+											item.checked=1;
+										}
+									}
+							   		
+							   	})
+							   	this.form.familyMedHistory="有";
+							}
+							  
+						}else{
+							uni.showToast({
+								title: res.msg,
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			submit(){
+				if(this.type=="add"){
+					this.addPatient()
+				}
+				else if(this.type=="edit"){
+					this.editPatient()
+				}
+				
+			},
+			editPatient(){
+				var data={
+					patientId:this.patientId,
+					patientName:this.form.patientName,
+					mobile:this.form.mobile,
+					sex: this.form.sex,
+					birthday: this.form.birthday,
+					idCard:this.form.idCard,
+					relation:this.form.relation,  // 与本人关系
+					liverUnusual:this.form.liverUnusual,  // 肝功能是否异常
+					renalUnusual:this.form.renalUnusual,  // 肾功能是否异常
+				}
+				if(this.form.historyAllergic=="有"){
+					var options=[];
+					this.historyAllergics.forEach(item =>{
+						if(item.checked==1){
+							options.push(item.name);
+						}
+					})
+					data.historyAllergic=options.toString();
+				}
+				else{
+					data.historyAllergic=this.form.historyAllergic;
+				}
+				if(this.form.selfMedHistory=="有"){
+					var options=[];
+					this.selfMedHistorys.forEach(item =>{
+						if(item.checked==1){
+							options.push(item.name);
+						}
+					})
+					data.selfMedHistory=options.toString();
+				}
+				else{
+					data.selfMedHistory=this.form.selfMedHistory;
+				}
+				if(this.form.familyMedHistory=="有"){
+					var options=[];
+					this.familyMedHistorys.forEach(item =>{
+						if(item.checked==1){
+							options.push(item.name);
+						}
+					})
+					data.familyMedHistory=options.toString();
+				}
+				else{
+					data.familyMedHistory=this.form.familyMedHistory;
+				}
+				editPatient(data).then(
+					res => {
+						if(res.code==200){
+							 uni.showToast({
+							 	icon:'success',
+							 	title: "操作成功",
+							 });
+							 setTimeout(function() {
+								 uni.$emit('refreshPatient');
+								 uni.navigateBack({
+									 delta: 1
+								 })
+							 }, 500);
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: res.msg,
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			addPatient(){
+				var data={
+					patientName:this.form.patientName,
+					mobile:this.form.mobile,
+					sex: this.form.sex,
+					birthday: this.form.birthday,
+					idCard:this.form.idCard,
+					relation:this.form.relation,  // 与本人关系
+					liverUnusual:this.form.liverUnusual,  // 肝功能是否异常
+					renalUnusual:this.form.renalUnusual,  // 肾功能是否异常
+				}
+				if(this.form.historyAllergic=="有"){
+					var options=[];
+					this.historyAllergics.forEach(item =>{
+						if(item.checked==1){
+							options.push(item.name);
+						}
+					})
+					data.historyAllergic=options.toString();
+				}
+				else{
+					data.historyAllergic=this.form.historyAllergic;
+				}
+				if(this.form.selfMedHistory=="有"){
+					var options=[];
+					this.selfMedHistorys.forEach(item =>{
+						if(item.checked==1){
+							options.push(item.name);
+						}
+					})
+					data.selfMedHistory=options.toString();
+				}
+				else{
+					data.selfMedHistory=this.form.selfMedHistory;
+				}
+				if(this.form.familyMedHistory=="有"){
+					var options=[];
+					this.familyMedHistorys.forEach(item =>{
+						if(item.checked==1){
+							options.push(item.name);
+						}
+					})
+					data.familyMedHistory=options.toString();
+				}
+				else{
+					data.familyMedHistory=this.form.familyMedHistory;
+				}
+				
+				addPatient(data).then(
+					res => {
+						if(res.code==200){
+							 uni.showToast({
+							 	icon:'none',
+							 	title: res.alert || res.msg,
+							 });
+							 const time = res.alert&&res.alert.includes('芳华币') ? 1000 : 500
+							 setTimeout(function() {
+								 uni.$emit('refreshPatient');
+								 uni.navigateBack({
+									 delta: 1
+								 })
+							 }, time);
+						}else{
+							
+							uni.showToast({
+								icon:'none',
+								title: res.msg,
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			// 出生日期选择
+			birthdayChange: function(e) {
+				this.form.birthday = e.target.value
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: 100%;
+	}
+	.content{
+		height: 100%;
+		.inner{
+			padding: 20upx 20rpx 200rpx;
+			.form-box{
+				margin-bottom: 15rpx;
+				padding: 0upx 30upx;
+				background: #FFFFFF;
+				border-radius: 16upx;
+				.form-item{
+					min-height: 103upx;
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					border-bottom: 1px solid #F1F1F1;
+					&:last-child{
+						border-bottom: none;
+					}
+					.label{
+						min-width: 200upx;
+						font-size: 30upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #222222;
+					}
+					.option-box{
+						display: flex;
+						flex-wrap: wrap;
+						align-items: flex-start;
+						justify-content: flex-start;
+						.option{
+							margin: 5rpx;
+						}
+					}
+					.input-width{
+						width: calc(100% - 200upx);
+						text-align: right;
+					}
+					.form-input{
+						font-size: 30upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #999999;
+						text-align: right;
+					}
+					.option-text{
+						font-size: 30upx;
+						font-family: PingFang SC;
+						font-weight: 500;
+						color: #111111;
+						line-height: 30upx;
+					}
+					.right-box{
+						display: flex;
+						align-items: center;
+						.input-box{
+							width: 400upx;
+							display: flex;
+							align-items: center;
+							justify-content: flex-end;
+							input{
+								text-align: right;
+							}
+						}
+						.arrow{
+							width: 13upx;
+							height: 23upx;
+							margin-left: 20upx;
+						}
+					}
+					.birth-picker {
+						display: flex;
+						align-items: center;
+						.right-box{
+							display: flex;
+							align-items: center;
+							.input-box{
+								width: 400upx;
+								display: flex;
+								align-items: center;
+								justify-content: flex-end;
+								input{
+									text-align: right;
+								}
+							}
+							.arrow{
+								width: 13upx;
+								height: 23upx;
+								margin-left: 20upx;
+							}
+						}
+					}
+				}
+			}
+		}
+		.btn-box{
+			position: fixed;
+			bottom: 0rpx;
+			left:0rpx;
+			width: 100%;
+			height: 120upx;
+			padding: 0 30upx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			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: #C39A58;
+				border-radius: 44upx;
+			}
+		}
+		
+	}
+	
+</style>

+ 216 - 216
pages_index/patient.vue

@@ -1,216 +1,216 @@
-<template>
-	<view class="content">
-		<view class="inner">
-			<view  v-for="(item,index) in patient" :key="index" @click.stop="selectPatient(item)" class="peop-item">
-				<view class="info" >
-					<view class="name">{{item.patientName}}</view>
-					<view class="detail">
-						<text class="text" v-if="item.sex==1">男</text>
-						<text class="text" v-if="item.sex==2">女</text>
-						<text class="text">{{$getAge(item.birthday)}}岁</text>
-						<text class="text">{{$parseIdCard(item.idCard)}}</text>
-					</view>
-				</view>
-				<view class="operat-box">
-					<image :src="imgPath+'/app/commonCourse/del.png'" mode="" @click.stop="delPatient(item)" ></image>
-					<image :src="imgPath+'/app/commonCourse/edit.png'" mode="" @click.stop="editPatient(item)"></image>
-				</view>
-			</view>
-			<view v-if="patient.length == 0" class="no-data-box" @click="getPatientList()">
-				<image :src="imgPath+'/app/commonCourse/null-data.png'" mode="aspectFit"></image>
-				<view class="empty-title">暂无数据</view>
-			</view>
-		</view>
-		<view class="btn-box">
-			<view class="sub-btn" @click="addPatient">创建就诊人</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {getPatientList,delPatient} from '@/api/patient'
-	export default {
-		data() {
-			return {
-				patient:[],
-			}
-		},
-		onLoad() {
-			this.getPatientList()
-			uni.$on('refreshPatient', () => {
-				this.getPatientList()
-			})
-		},
-		computed: {
-			imgPath() {
-			  return this.$store.state.imgpath
-			},
-		},
-		onUnload() {
-			uni.$off('refreshPatient')
-		},
-		methods: {
-			selectPatient(item){
-				uni.$emit('refreshOrderPatient',item);
-				uni.navigateBack({
-			  		delta: 1
-				})
-			},
-			editPatient(item){
-				uni.navigateTo({
-					url: './addEditPatient?type=edit&patientId='+item.patientId
-				})
-			},
-			delPatient(item){
-				uni.showModal({
-					title:"提示",
-					content:"确认删除吗?",
-					showCancel:true,
-					cancelText:'取消',
-					confirmText:'确定',
-					success:res=>{
-						if(res.confirm){
-							// 用户点击确定
-							var data={patientId:item.patientId}
-							delPatient(data).then(
-								res => {
-									if(res.code==200){
-										 uni.showToast({
-										 	icon:'success',
-										 	title: "操作成功",
-										 });
-										 this.getPatientList()
-									}else{
-										uni.showToast({
-											icon:'none',
-											title: "请求失败",
-										});
-									}
-								},
-								rej => {}
-							);
-														
-						}else{
-							// 否则点击了取消  
-						}
-					}
-				})
-			},
-			getPatientList(){
-				// uni.showLoading({
-				// 	title:"正在加载中"
-				// })
-				getPatientList().then(
-					res => {
-						uni.hideLoading()
-						if(res.code==200){
-							this.patient=res.data;
-						}else{
-							uni.showToast({
-								icon:'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			addPatient() {
-				uni.navigateTo({
-					url: './addEditPatient?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;
-			.peop-item{
-				box-sizing: border-box;
-				height: 184upx;
-				background: #FFFFFF;
-				border-radius: 16upx;
-				padding: 50upx 40upx 50upx 30upx;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				margin-bottom: 20upx;
-				.info{
-					.name{
-						font-size: 30upx;
-						font-family: PingFang SC;
-						font-weight: bold;
-						color: #111111;
-						line-height: 1;
-					}
-					.detail{
-						display: flex;
-						align-items: center;
-						margin-top: 30upx;
-						.text{
-							font-size: 26upx;
-							font-family: PingFang SC;
-							font-weight: 500;
-							color: #999999;
-							line-height: 1;
-							margin-right: 30upx;
-							&:last-child{
-								margin-right: 0;
-							}
-						}
-					}
-				}
-				.operat-box{
-					display: flex;
-					align-items: center;
-					image{
-						padding: 15rpx;
-						width: 30upx;
-						height: 30upx;
-						margin-left: 10upx;
-						&:first-child{
-							margin-left: 0;
-						}
-					}
-				}
-			}
-		}
-		.btn-box{
-			z-index: 9999;
-			width: 100%;
-			padding: 30upx;
-			position: fixed;
-			bottom: 0;
-			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: #C39A58;
-				border-radius: 44upx;
-			}
-		}
-		 
-	}
-</style>
+<template>
+	<view class="content">
+		<view class="inner">
+			<view  v-for="(item,index) in patient" :key="index" @click.stop="selectPatient(item)" class="peop-item">
+				<view class="info" >
+					<view class="name">{{item.patientName}}</view>
+					<view class="detail">
+						<text class="text" v-if="item.sex==1">男</text>
+						<text class="text" v-if="item.sex==2">女</text>
+						<text class="text">{{$getAge(item.birthday)}}岁</text>
+						<text class="text">{{$parseIdCard(item.idCard)}}</text>
+					</view>
+				</view>
+				<view class="operat-box">
+					<image :src="imgPath+'/app/commonCourse/del.png'" mode="" @click.stop="delPatient(item)" ></image>
+					<image :src="imgPath+'/app/commonCourse/edit.png'" mode="" @click.stop="editPatient(item)"></image>
+				</view>
+			</view>
+			<view v-if="patient.length == 0" class="no-data-box" @click="getPatientList()">
+				<image :src="imgPath+'/app/commonCourse/null-data.png'" mode="aspectFit"></image>
+				<view class="empty-title">暂无数据</view>
+			</view>
+		</view>
+		<view class="btn-box">
+			<view class="sub-btn" @click="addPatient">创建就诊人</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {getPatientList,delPatient} from '@/api/patient'
+	export default {
+		data() {
+			return {
+				patient:[],
+			}
+		},
+		onLoad() {
+			this.getPatientList()
+			uni.$on('refreshPatient', () => {
+				this.getPatientList()
+			})
+		},
+		computed: {
+			imgPath() {
+			  return this.$store.state.imgpath
+			},
+		},
+		onUnload() {
+			uni.$off('refreshPatient')
+		},
+		methods: {
+			selectPatient(item){
+				uni.$emit('refreshOrderPatient',item);
+				uni.navigateBack({
+			  		delta: 1
+				})
+			},
+			editPatient(item){
+				uni.navigateTo({
+					url: './addEditPatient?type=edit&patientId='+item.patientId
+				})
+			},
+			delPatient(item){
+				uni.showModal({
+					title:"提示",
+					content:"确认删除吗?",
+					showCancel:true,
+					cancelText:'取消',
+					confirmText:'确定',
+					success:res=>{
+						if(res.confirm){
+							// 用户点击确定
+							var data={patientId:item.patientId}
+							delPatient(data).then(
+								res => {
+									if(res.code==200){
+										 uni.showToast({
+										 	icon:'success',
+										 	title: "操作成功",
+										 });
+										 this.getPatientList()
+									}else{
+										uni.showToast({
+											icon:'none',
+											title: "请求失败",
+										});
+									}
+								},
+								rej => {}
+							);
+														
+						}else{
+							// 否则点击了取消  
+						}
+					}
+				})
+			},
+			getPatientList(){
+				// uni.showLoading({
+				// 	title:"正在加载中"
+				// })
+				getPatientList().then(
+					res => {
+						uni.hideLoading()
+						if(res.code==200){
+							this.patient=res.data;
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			addPatient() {
+				uni.navigateTo({
+					url: './addEditPatient?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;
+			.peop-item{
+				box-sizing: border-box;
+				height: 184upx;
+				background: #FFFFFF;
+				border-radius: 16upx;
+				padding: 50upx 40upx 50upx 30upx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				margin-bottom: 20upx;
+				.info{
+					.name{
+						font-size: 30upx;
+						font-family: PingFang SC;
+						font-weight: bold;
+						color: #111111;
+						line-height: 1;
+					}
+					.detail{
+						display: flex;
+						align-items: center;
+						margin-top: 30upx;
+						.text{
+							font-size: 26upx;
+							font-family: PingFang SC;
+							font-weight: 500;
+							color: #999999;
+							line-height: 1;
+							margin-right: 30upx;
+							&:last-child{
+								margin-right: 0;
+							}
+						}
+					}
+				}
+				.operat-box{
+					display: flex;
+					align-items: center;
+					image{
+						padding: 15rpx;
+						width: 30upx;
+						height: 30upx;
+						margin-left: 10upx;
+						&:first-child{
+							margin-left: 0;
+						}
+					}
+				}
+			}
+		}
+		.btn-box{
+			z-index: 9999;
+			width: 100%;
+			padding: 30upx;
+			position: fixed;
+			bottom: 0;
+			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: #C39A58;
+				border-radius: 44upx;
+			}
+		}
+		 
+	}
+</style>

+ 223 - 223
pages_index/testDetails.vue

@@ -1,223 +1,223 @@
-<template>
-	<view class="content">
-		<view class="bg-box">
-			<image :src="imgPath+'/app/commonCourse/test-bg1.png'"></image>
-			<view class="title-box">
-				<view class="title">
-					{{item.name}}
-				</view>
-			</view>
-		</view>
-		<view class="cont">
-			<view class="msg-box">
-				<view class="msg">{{item.msg}}</view>
-			</view>
-			<view class="line"></view>
-			<view class="desc-box">
-				<view class="desc" v-html="item.descs"> </view>
-			</view>
-			<view class="btn-box">
-				<view class="btn" @click="navTo('/pages_index/test?tempId='+item.tempId)">立即开始</view>
-			</view>
-			<view class="logo">
-				<image :src="imgPath+'/app/image/logo.png'"></image>
-			</view>
-		</view>
-		
-	</view> 
-</template>
-
-<script>
-	import {getTestDetails} from '@/api/test.js'
-	export default {
-		data() {
-			return {
-				tempId:null,
-				item:{},
-			};
-		},
-		onLoad(option) {
-			this.tempId=option.tempId;
-			 
-		},
-		onShow() {
-			this.getTestDetails();
-		},
-		computed: {
-			imgPath() {
-			  return this.$store.state.imgpath
-			},
-		},
-		//发送给朋友
-		onShareAppMessage(res) {
-			if(this.$isLogin()){
-				return {
-					title: "健康自测",
-					path: '/pages_index/testDetails?tempId='+this.tempId,
-					imageUrl: this.$store.state.imgpath+'/app/image/logoshare.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
-				}
-			}
-			
-		},
-		//分享到朋友圈
-		onShareTimeline(res) {
-			if(this.utils.isLogin()){
-				return {
-					title: "健康自测",
-					imageUrl: this.$store.state.imgpath+'/app/image/logoshare.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
-				}
-			}
-			
-		},
-		methods:{
-			navTo(url) {
-				this.$isLogin().then(
-					res => {
-						console.log(res)
-						if(res){
-							uni.navigateTo({
-								url: url
-							})
-						}
-						else{
-							uni.navigateTo({
-								url:'/pages/auth/login'
-							})
-						}
-					}
-				);
-				
-			},
-			getTestDetails(){
-				let data = {tempId:this.tempId};
-				getTestDetails(data).then(
-					res => {
-						if(res.code==200){
-							this.item=res.data;
-							uni.setNavigationBarTitle({
-							      title: this.item.name+"自测"
-							});
-							 
-						}else{
-							uni.showToast({
-								icon:'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-		}
-	}
-</script>
-
-<style lang="scss">
-	page{
-		height: 100%;
-	}
-	.content{
-		position: relative;
-		height: 100%;
-		display: flex;
-		flex-direction: column;
-		.bg-box{
-			position: absolute;
-			width: 100%;
-			height: 600rpx;
-			.title-box{
-				top: 50rpx;
-				left:50rpx;
-				position: absolute;
-				
-				.title{
-					border-radius: 5rpx;
-					border: 1rpx solid #fff;
-					padding: 20rpx 30rpx;
-					font-size: 36rpx;
-					font-family: Source Han Sans CN;
-					font-weight: bold;
-					color: #fff;
-				}
-				
-				
-				
-			}
-			image{
-				position: absolute;
-				width: 100%;
-				height: 100%;
-			}
-			
-		}
-		.cont{
-			position: relative;
-			margin-top: 550rpx;
-			z-index: 9999;
-			padding: 30rpx;
-			height: 100%;
-			display: flex;
-			flex-direction: column;
-			padding: 30rpx;
-			background-color: #fff;
-			border-radius: 30rpx 30rpx 0rpx 0rpx;
-			.msg-box{
-				.msg{
-					font-size: 36rpx;
-					font-family: Source Han Sans CN;
-					font-weight: bold;
-					color: #111;
-				}
-			}
-			.line{
-				margin: 15rpx 0rpx;
-				background-color: #F6F6F6;
-				height:5rpx;
-				width: 100%;
-			}
-			.desc-box{
-				margin-top: 20rpx;
-				background: #FFFFFF;
-				.desc{
-					color: #814E1B;
-				}
-			}
-			.logo{
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				margin: 60rpx 0rpx;
-				width: 100%;
-				image{
-					width: 100rpx;
-					height:100rpx;
-				}
-			}
-			.btn-box{
-				margin-top: 60rpx;
-			 	height: 140upx;
-			 	width: 100%;
-			 	box-sizing: border-box;
-			 	display: flex;
-			 	align-items: center;
-			 	justify-content: center;
-				
-			 	.btn{
-			 		width: 100%;
-			 		height: 88upx;
-			 		line-height: 88upx;
-			 		text-align: center;
-			 		font-size: 34upx;
-			 		font-family: PingFang SC;
-			 		font-weight: bold;
-			 		color: #FFFFFF;
-			 		background: #C39A58;
-			 		border-radius: 50upx;
-			 	}
-			 }
-		}
-		
-		
-	}
-	 
-</style>
+<template>
+	<view class="content">
+		<view class="bg-box">
+			<image :src="imgPath+'/app/commonCourse/test-bg1.png'"></image>
+			<view class="title-box">
+				<view class="title">
+					{{item.name}}
+				</view>
+			</view>
+		</view>
+		<view class="cont">
+			<view class="msg-box">
+				<view class="msg">{{item.msg}}</view>
+			</view>
+			<view class="line"></view>
+			<view class="desc-box">
+				<view class="desc" v-html="item.descs"> </view>
+			</view>
+			<view class="btn-box">
+				<view class="btn" @click="navTo('/pages_index/test?tempId='+item.tempId)">立即开始</view>
+			</view>
+			<view class="logo">
+				<image :src="imgPath+'/app/image/logo.png'"></image>
+			</view>
+		</view>
+		
+	</view> 
+</template>
+
+<script>
+	import {getTestDetails} from '@/api/test.js'
+	export default {
+		data() {
+			return {
+				tempId:null,
+				item:{},
+			};
+		},
+		onLoad(option) {
+			this.tempId=option.tempId;
+			 
+		},
+		onShow() {
+			this.getTestDetails();
+		},
+		computed: {
+			imgPath() {
+			  return this.$store.state.imgpath
+			},
+		},
+		//发送给朋友
+		onShareAppMessage(res) {
+			if(this.$isLogin()){
+				return {
+					title: "健康自测",
+					path: '/pages_index/testDetails?tempId='+this.tempId,
+					imageUrl: this.$store.state.imgpath+'/app/image/logoshare.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		//分享到朋友圈
+		onShareTimeline(res) {
+			if(this.utils.isLogin()){
+				return {
+					title: "健康自测",
+					imageUrl: this.$store.state.imgpath+'/app/image/logoshare.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				}
+			}
+			
+		},
+		methods:{
+			navTo(url) {
+				this.$isLogin().then(
+					res => {
+						console.log(res)
+						if(res){
+							uni.navigateTo({
+								url: url
+							})
+						}
+						else{
+							uni.navigateTo({
+								url:'/pages/auth/login'
+							})
+						}
+					}
+				);
+				
+			},
+			getTestDetails(){
+				let data = {tempId:this.tempId};
+				getTestDetails(data).then(
+					res => {
+						if(res.code==200){
+							this.item=res.data;
+							uni.setNavigationBarTitle({
+							      title: this.item.name+"自测"
+							});
+							 
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		height: 100%;
+	}
+	.content{
+		position: relative;
+		height: 100%;
+		display: flex;
+		flex-direction: column;
+		.bg-box{
+			position: absolute;
+			width: 100%;
+			height: 600rpx;
+			.title-box{
+				top: 50rpx;
+				left:50rpx;
+				position: absolute;
+				
+				.title{
+					border-radius: 5rpx;
+					border: 1rpx solid #fff;
+					padding: 20rpx 30rpx;
+					font-size: 36rpx;
+					font-family: Source Han Sans CN;
+					font-weight: bold;
+					color: #fff;
+				}
+				
+				
+				
+			}
+			image{
+				position: absolute;
+				width: 100%;
+				height: 100%;
+			}
+			
+		}
+		.cont{
+			position: relative;
+			margin-top: 550rpx;
+			z-index: 9999;
+			padding: 30rpx;
+			height: 100%;
+			display: flex;
+			flex-direction: column;
+			padding: 30rpx;
+			background-color: #fff;
+			border-radius: 30rpx 30rpx 0rpx 0rpx;
+			.msg-box{
+				.msg{
+					font-size: 36rpx;
+					font-family: Source Han Sans CN;
+					font-weight: bold;
+					color: #111;
+				}
+			}
+			.line{
+				margin: 15rpx 0rpx;
+				background-color: #F6F6F6;
+				height:5rpx;
+				width: 100%;
+			}
+			.desc-box{
+				margin-top: 20rpx;
+				background: #FFFFFF;
+				.desc{
+					color: #814E1B;
+				}
+			}
+			.logo{
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				margin: 60rpx 0rpx;
+				width: 100%;
+				image{
+					width: 100rpx;
+					height:100rpx;
+				}
+			}
+			.btn-box{
+				margin-top: 60rpx;
+			 	height: 140upx;
+			 	width: 100%;
+			 	box-sizing: border-box;
+			 	display: flex;
+			 	align-items: center;
+			 	justify-content: center;
+				
+			 	.btn{
+			 		width: 100%;
+			 		height: 88upx;
+			 		line-height: 88upx;
+			 		text-align: center;
+			 		font-size: 34upx;
+			 		font-family: PingFang SC;
+			 		font-weight: bold;
+			 		color: #FFFFFF;
+			 		background: #C39A58;
+			 		border-radius: 50upx;
+			 	}
+			 }
+		}
+		
+		
+	}
+	 
+</style>

+ 363 - 363
pages_index/testResult.vue

@@ -1,363 +1,363 @@
-<template>
-	<view class="content">
-		<view class="cont">
-			<view class="bg">
-				<image :src="imgPath+'/app/commonCourse/bg-class.png'" ></image>
-			</view>
-			<view class="cont-box" v-if="report!=null">
-				<view class="user">
-					<image :src="JSON.parse(report.patientJson).avatar==null?imgPath+'/app/commonCourse/head-img.jpg':JSON.parse(report.patientJson).avatar"></image>
-					<view class="user-box">
-						<view class="sex">性别 {{JSON.parse(report.patientJson).sex==1?"男":"女"}}</view>
-						<view class="username">年龄 {{JSON.parse(report.patientJson).age}}岁</view>
-					</view>
-				</view>
-				<view class="items">
-					
-					<view class="result-box">
-						<view class="time">检测时间 {{report.createTime}}</view>
-						<view class="title">您属于{{report.testResult}}</view>
-						<view class="name">{{report.testResult}}</view>
-						<!-- <view class="descs">{{report.testResult}}是一种身心和谐的表现,努力保持吧!</view> -->
-					</view>
-					<view class="item-box" v-for="(item,index) in JSON.parse(report.conditioningPlanJson) ">
-						<view class="item">
-							<view class="title-box">
-								<view class="title">{{item.name}}</view>
-								
-							</view>
-							<view class="descs" >{{item.value}}</view>
-							
-						</view>
-						<view v-if="index<JSON.parse(report.conditioningPlanJson).length-2" class="line"></view>
-					</view>
-					
-				</view>
-				<view class="tips">
-					注:报告内容仅供参考,具体情况以医生建议为准
-				</view>
-				<view class="banner" v-if="advImgs.length>0">
-					<u-swiper
-							:list="advImgs"
-							circular
-							@click="handleAdvClick"
-					></u-swiper>
-				</view>
-			</view>
-		</view>
-		<view class="share" @click="shareImg()">
-			<text>分享</text>
-		</view>
-	</view> 
-</template>
-
-<script>
-	import {getAdvList} from '@/api/index.js'
-	import {getTestReport,getTestReportImg} from '@/api/test.js'
-	export default {
-		data() {
-			return {
-				advImgs:[],
-				advs:[],
-				reportId:null,
-				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
-				report:null,
-			};
-		},
-		computed: {
-			imgPath() {
-			  return this.$store.state.imgpath
-			},
-		},
-		onLoad(option) {
-			this.reportId=option.reportId;
-			this.getTestReport();
-		},
-		onShow() {
-			this.getAdvList();
-		},
-		methods:{
-			shareImg(){
-				var data={reportId:this.reportId}
-				getTestReportImg(data).then(
-					res => {
-						if(res.code==200){
-							console.log(res)
-							wx.downloadFile({
-								url: res.img,
-								success: (res1) => {
-								   console.log(res1)
-							     wx.showShareImageMenu({
-							       path: res1.tempFilePath
-							     })
-							   },
-							   fail:(res2)=>{
-								   console.log(res2)
-							   }
-							})
-						}
-					},
-					err => {
-					}
-				);
-				
-				// uni.navigateTo({
-				// 	url: '/pages_index/testResultImg?reportId=' + this.reportId
-				// })
-			},
-			handleAdvClick(index){
-				var ad=this.advs[index];
-				console.log(ad.advUrl);
-				if(ad.showType==1){
-					uni.setStorageSync('url',ad.advUrl);
-					uni.navigateTo({
-						url:"h5"
-					})
-				}
-				else if(ad.showType==2){
-					uni.navigateTo({
-						url:ad.advUrl
-					})
-				}
-				else if(ad.showType==3){
-					 uni.setStorageSync('content',ad.content);
-					 uni.navigateTo({
-					 	url:"content"
-					 })
-				}
-				
-			},
-			getAdvList() {
-				//联网加载数据
-				var that = this;
-				var data = {
-					advType:3
-				};
-				getAdvList(data).then(res => {
-					if(res.code==200){
-						that.advImgs=[];
-						that.advs=res.data;
-						that.advs.forEach(function(element) {
-							if(element.imageUrl!=null&&element.imageUrl!=""){
-								that.advImgs.push(element.imageUrl);
-							}
-						});
-						console.log(that.advImgs)
-						
-					}else{
-						uni.showToast({
-							icon:'none',
-							title: "请求失败",
-						});
-					}
-				});
-			},
-			getTestReport(){
-				var data={reportId:this.reportId}
-				getTestReport(data).then(
-					res => {
-						if(res.code==200){
-							this.report=res.report;
-						}
-					},
-					err => {
-					}
-				);
-				
-			},
-			goBack(){
-				uni.navigateBack()
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	page{
-		background-color: #FDF7F0;
-		height: 100%;
-	}
-	.content{
-		.cont{
-			position: relative;
-			width: 100%;
-			display: flex;
-			flex-direction: column;
-			.bg{
-				width: 100%;
-				height:100%;
-				// background-color: #2BC7B9;
-				// background: linear-gradient(#2BC7B9, #88e2da);
-				position: fixed;
-				image{
-					width: 100%;
-					height:100%;
-				}
-				z-index: 1;
-			}
-			.cont-box{
-				z-index: 1000;
-				margin-top: 88rpx;
-				.user{
-					width: 100%;
-					display: flex;
-					flex-direction: column;
-					align-items: center;
-					justify-content: center;
-					padding: 30rpx;
-					image{
-						border-radius: 50%;
-						border: 2rpx solid #ffffff;
-						width:120rpx;
-						height:120rpx;
-					}
-					.user-box{
-						padding: 30rpx;
-						display: flex;
-						align-items: center;
-						justify-content: center;
-						.sex{
-							font-weight: bold;
-							font-size: 40supx;
-							font-family: PingFang SC;
-							color: #925924;
-						}
-						.username{
-							margin-left: 15rpx;
-							font-size: 40supx;
-							font-family: PingFang SC;
-							color: #925924;
-						}
-						
-					}
-				}
-				.items{
-					width: 100%;
-					display: flex;
-					flex-direction: column;
-					align-items: flex-start;
-					justify-content: flex-start;
-					padding: 20rpx;
-					.result-box{
-						width: 100%;
-						display: flex;
-						flex-direction: column;
-						align-items:center;
-						justify-content: center;
-						padding: 30rpx;
-						background-color: #fff;
-						border-radius: 15rpx;
-						margin-bottom: 15rpx;
-						.time{
-							margin-top: 15rpx;
-							font-family: PingFang SC;
-							font-size: 24rpx;
-							color: #9B9B9B;
-						}
-						.title{
-							margin-top: 15rpx;
-							font-family: PingFang SC;
-							font-size: 28rpx;
-							color: #626468;
-							
-						}
-						.name{
-							margin-top: 30rpx;
-							font-family: PingFang SC;
-							font-weight: bold;
-							font-size: 60rpx;
-							color: #925924;
-						}
-						.descs{
-							font-family: PingFang SC;
-							font-size: 28rpx;
-							color: #2A2B2E;
-							padding: 30rpx;
-							margin-top: 30rpx;
-							background-color: #F5F6F6;
-							border-radius: 10rpx;
-						}
-					}
-					.item-box{
-						width: 100%;
-						.item{
-							width: 100%;
-							padding: 30rpx;
-							background-color: #fff;
-							border-radius:30rpx;
-							.title-box{
-								display: flex;
-								align-items:center;
-								justify-content: flex-start;
-								.title{
-									margin-left: 10rpx;
-									font-size: 32supx;
-									font-family: PingFang SC;
-									color: #925924;
-									font-weight: bold;
-								}
-								.title-line{
-									width: 8rpx;
-									height: 28rpx;
-									background: #2BC7B9;
-									border-radius: 2px 2px 2px 2px;
-									opacity: 1;
-								}
-								
-							}
-							.descs{
-								white-space: pre-line; 
-								margin-top: 10rpx;
-								font-size: 28supx;
-								font-family: PingFang SC;
-								color: #2A2B2E;
-							}
-							
-						}
-						.line{
-							margin: 0rpx 30rpx;
-							border-bottom: #b5b5b5 3rpx dashed;
-						}
-						
-					}
-				
-					
-					
-				}
-				.tips{
-					width: 100%;
-					display: flex;
-					align-items: center;
-					justify-content: center;
-					margin: 15rpx 0rpx;
-					color: #9B9B9B;
-					font-size: 24rpx;
-				}
-				.banner{
-					height:250rpx;
-					width: 100%;
-					padding: 15rpx 20upx;
-				 
-				}
-			}
-		}
-		
-	}
-	.share{
-		width: 100rpx;
-		height:100rpx;
-		z-index: 9999;
-		border-radius: 50%;
-		position: fixed;
-		bottom: 100rpx;
-		right:50rpx;
-		background-color: #925924;
-		color: #fff;
-		font-weight: bold;
-		font-size: 28rpx;
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		justify-content: center;
-	}
-</style>
+<template>
+	<view class="content">
+		<view class="cont">
+			<view class="bg">
+				<image :src="imgPath+'/app/commonCourse/bg-class.png'" ></image>
+			</view>
+			<view class="cont-box" v-if="report!=null">
+				<view class="user">
+					<image :src="JSON.parse(report.patientJson).avatar==null?imgPath+'/app/commonCourse/head-img.jpg':JSON.parse(report.patientJson).avatar"></image>
+					<view class="user-box">
+						<view class="sex">性别 {{JSON.parse(report.patientJson).sex==1?"男":"女"}}</view>
+						<view class="username">年龄 {{JSON.parse(report.patientJson).age}}岁</view>
+					</view>
+				</view>
+				<view class="items">
+					
+					<view class="result-box">
+						<view class="time">检测时间 {{report.createTime}}</view>
+						<view class="title">您属于{{report.testResult}}</view>
+						<view class="name">{{report.testResult}}</view>
+						<!-- <view class="descs">{{report.testResult}}是一种身心和谐的表现,努力保持吧!</view> -->
+					</view>
+					<view class="item-box" v-for="(item,index) in JSON.parse(report.conditioningPlanJson) ">
+						<view class="item">
+							<view class="title-box">
+								<view class="title">{{item.name}}</view>
+								
+							</view>
+							<view class="descs" >{{item.value}}</view>
+							
+						</view>
+						<view v-if="index<JSON.parse(report.conditioningPlanJson).length-2" class="line"></view>
+					</view>
+					
+				</view>
+				<view class="tips">
+					注:报告内容仅供参考,具体情况以医生建议为准
+				</view>
+				<view class="banner" v-if="advImgs.length>0">
+					<u-swiper
+							:list="advImgs"
+							circular
+							@click="handleAdvClick"
+					></u-swiper>
+				</view>
+			</view>
+		</view>
+		<view class="share" @click="shareImg()">
+			<text>分享</text>
+		</view>
+	</view> 
+</template>
+
+<script>
+	import {getAdvList} from '@/api/index.js'
+	import {getTestReport,getTestReportImg} from '@/api/test.js'
+	export default {
+		data() {
+			return {
+				advImgs:[],
+				advs:[],
+				reportId:null,
+				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
+				report:null,
+			};
+		},
+		computed: {
+			imgPath() {
+			  return this.$store.state.imgpath
+			},
+		},
+		onLoad(option) {
+			this.reportId=option.reportId;
+			this.getTestReport();
+		},
+		onShow() {
+			this.getAdvList();
+		},
+		methods:{
+			shareImg(){
+				var data={reportId:this.reportId}
+				getTestReportImg(data).then(
+					res => {
+						if(res.code==200){
+							console.log(res)
+							wx.downloadFile({
+								url: res.img,
+								success: (res1) => {
+								   console.log(res1)
+							     wx.showShareImageMenu({
+							       path: res1.tempFilePath
+							     })
+							   },
+							   fail:(res2)=>{
+								   console.log(res2)
+							   }
+							})
+						}
+					},
+					err => {
+					}
+				);
+				
+				// uni.navigateTo({
+				// 	url: '/pages_index/testResultImg?reportId=' + this.reportId
+				// })
+			},
+			handleAdvClick(index){
+				var ad=this.advs[index];
+				console.log(ad.advUrl);
+				if(ad.showType==1){
+					uni.setStorageSync('url',ad.advUrl);
+					uni.navigateTo({
+						url:"h5"
+					})
+				}
+				else if(ad.showType==2){
+					uni.navigateTo({
+						url:ad.advUrl
+					})
+				}
+				else if(ad.showType==3){
+					 uni.setStorageSync('content',ad.content);
+					 uni.navigateTo({
+					 	url:"content"
+					 })
+				}
+				
+			},
+			getAdvList() {
+				//联网加载数据
+				var that = this;
+				var data = {
+					advType:3
+				};
+				getAdvList(data).then(res => {
+					if(res.code==200){
+						that.advImgs=[];
+						that.advs=res.data;
+						that.advs.forEach(function(element) {
+							if(element.imageUrl!=null&&element.imageUrl!=""){
+								that.advImgs.push(element.imageUrl);
+							}
+						});
+						console.log(that.advImgs)
+						
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+					}
+				});
+			},
+			getTestReport(){
+				var data={reportId:this.reportId}
+				getTestReport(data).then(
+					res => {
+						if(res.code==200){
+							this.report=res.report;
+						}
+					},
+					err => {
+					}
+				);
+				
+			},
+			goBack(){
+				uni.navigateBack()
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		background-color: #FDF7F0;
+		height: 100%;
+	}
+	.content{
+		.cont{
+			position: relative;
+			width: 100%;
+			display: flex;
+			flex-direction: column;
+			.bg{
+				width: 100%;
+				height:100%;
+				// background-color: #2BC7B9;
+				// background: linear-gradient(#2BC7B9, #88e2da);
+				position: fixed;
+				image{
+					width: 100%;
+					height:100%;
+				}
+				z-index: 1;
+			}
+			.cont-box{
+				z-index: 1000;
+				margin-top: 88rpx;
+				.user{
+					width: 100%;
+					display: flex;
+					flex-direction: column;
+					align-items: center;
+					justify-content: center;
+					padding: 30rpx;
+					image{
+						border-radius: 50%;
+						border: 2rpx solid #ffffff;
+						width:120rpx;
+						height:120rpx;
+					}
+					.user-box{
+						padding: 30rpx;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+						.sex{
+							font-weight: bold;
+							font-size: 40supx;
+							font-family: PingFang SC;
+							color: #925924;
+						}
+						.username{
+							margin-left: 15rpx;
+							font-size: 40supx;
+							font-family: PingFang SC;
+							color: #925924;
+						}
+						
+					}
+				}
+				.items{
+					width: 100%;
+					display: flex;
+					flex-direction: column;
+					align-items: flex-start;
+					justify-content: flex-start;
+					padding: 20rpx;
+					.result-box{
+						width: 100%;
+						display: flex;
+						flex-direction: column;
+						align-items:center;
+						justify-content: center;
+						padding: 30rpx;
+						background-color: #fff;
+						border-radius: 15rpx;
+						margin-bottom: 15rpx;
+						.time{
+							margin-top: 15rpx;
+							font-family: PingFang SC;
+							font-size: 24rpx;
+							color: #9B9B9B;
+						}
+						.title{
+							margin-top: 15rpx;
+							font-family: PingFang SC;
+							font-size: 28rpx;
+							color: #626468;
+							
+						}
+						.name{
+							margin-top: 30rpx;
+							font-family: PingFang SC;
+							font-weight: bold;
+							font-size: 60rpx;
+							color: #925924;
+						}
+						.descs{
+							font-family: PingFang SC;
+							font-size: 28rpx;
+							color: #2A2B2E;
+							padding: 30rpx;
+							margin-top: 30rpx;
+							background-color: #F5F6F6;
+							border-radius: 10rpx;
+						}
+					}
+					.item-box{
+						width: 100%;
+						.item{
+							width: 100%;
+							padding: 30rpx;
+							background-color: #fff;
+							border-radius:30rpx;
+							.title-box{
+								display: flex;
+								align-items:center;
+								justify-content: flex-start;
+								.title{
+									margin-left: 10rpx;
+									font-size: 32supx;
+									font-family: PingFang SC;
+									color: #925924;
+									font-weight: bold;
+								}
+								.title-line{
+									width: 8rpx;
+									height: 28rpx;
+									background: #2BC7B9;
+									border-radius: 2px 2px 2px 2px;
+									opacity: 1;
+								}
+								
+							}
+							.descs{
+								white-space: pre-line; 
+								margin-top: 10rpx;
+								font-size: 28supx;
+								font-family: PingFang SC;
+								color: #2A2B2E;
+							}
+							
+						}
+						.line{
+							margin: 0rpx 30rpx;
+							border-bottom: #b5b5b5 3rpx dashed;
+						}
+						
+					}
+				
+					
+					
+				}
+				.tips{
+					width: 100%;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					margin: 15rpx 0rpx;
+					color: #9B9B9B;
+					font-size: 24rpx;
+				}
+				.banner{
+					height:250rpx;
+					width: 100%;
+					padding: 15rpx 20upx;
+				 
+				}
+			}
+		}
+		
+	}
+	.share{
+		width: 100rpx;
+		height:100rpx;
+		z-index: 9999;
+		border-radius: 50%;
+		position: fixed;
+		bottom: 100rpx;
+		right:50rpx;
+		background-color: #925924;
+		color: #fff;
+		font-weight: bold;
+		font-size: 28rpx;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+	}
+</style>

+ 305 - 0
pages_index/voice.vue

@@ -0,0 +1,305 @@
+<template>
+	<view class="container">
+		<view class="textbox">
+			<view class="header-tips">请朗读以下文字</view>
+			<view class="textbox-con" :style="{height: textHeight}">
+				在这片神奇的森林里,小鸟轻快地唱着歌,仿佛在诉说着春天的故事。
+			</view>
+		</view>
+		<view class="voice-footer">
+			<view class="voice-footer-tips">1、选择安静的录音环境,可在房间或车内录音。</view>
+			<view class="voice-footer-tips">2、保持20cm距离,避免手机太远录音不清晰。</view>
+			<view class="voice-footer-tips">3、使用普通话朗读,语速适中,吐字清晰。</view>
+			<view class="voice-footer-btnbox">
+				<view class="btnbox-item" :style="{visibility: voicePath ? 'visible' : 'hidden',color: status=='start' ? '#ccc !important':''}">
+					<view class="iconsbox" @click="playVoice" :style="{borderColor: status=='start' ? '#ccc' :isVoicePlay ? 'red':''}">
+						<u-icon name="volume-fill"  size="30" :color="status=='start' ? '#ccc' :isVoicePlay ? 'red':'#757575'"></u-icon>
+						<!-- <uni-icons type="sound-filled" size="30" :color="status=='start' ? '#ccc' :isVoicePlay ? 'red':'#757575'"></uni-icons> -->
+					</view>
+					<view>试听录音</view>
+				</view>
+				<view class="btnbox-item">
+					<view class="iconsbox iconsbox-voice" :style="{backgroundColor: status=='end' ? 'red':''}" @click="handleRecord">
+						<!-- <uni-icons v-show="status=='stop'|| status=='end'" type="mic-filled" size="35" color="#fff"></uni-icons> -->
+						<u-icon name="mic"  v-show="status=='stop'|| status=='end'" size="35" color="#fff"></u-icon>
+						<image v-show="status=='start'" src="https://obs.jnmyunl.com/fs/20250813/1755047925090.png" mode="aspectFill"></image>
+					</view>
+					<view v-show="status=='stop'">点击录制</view>
+					<view v-show="status=='start'">点击停止</view>
+					<view v-show="status=='end'">重新录制</view> 
+				</view>
+				<view class="btnbox-item" :style="{visibility: voicePath ? 'visible' : 'hidden',color: status=='start' ? '#ccc !important':''}">
+					<button class="iconsbox" :disabled="btnLoading" @click="onSubmit">
+						<!-- <uni-icons type="checkmarkempty" size="30" :color="status=='start' ? '#ccc' : '#757575'"></uni-icons> -->
+						<u-icon name="checkmark" size="30" :color="status=='start' ? '#ccc' : '#757575'"></u-icon>
+					</button>
+					<view>提交</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {addVoicePrintUrl} from '@/api/test'
+	let innerAudioContext = null
+	export default {
+		data() {
+			return {
+				recorderManager: null,
+				// innerAudioContext: null,
+				textHeight: '',
+				statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px',
+				screenHeight: uni.getSystemInfoSync().windowHeight + 'px',
+				voicePath: '',
+				status: "stop",
+				isVoicePlay: false,
+				btnLoading: false
+			}
+		},
+		onLoad() {
+			console.log('==onLoad==',this.recorderManager)
+			// #ifndef H5
+			this.recorderManager = uni.getRecorderManager();
+			innerAudioContext = uni.createInnerAudioContext();
+			
+			let self = this;
+			console.log('==recorderManager22222222==',this.recorderManager)
+			if(this.recorderManager) {
+				console.log('==recorderManager==')
+				this.recorderManager.onStart(()=>{
+					console.log('==start==')
+					this.status = 'start'
+				})
+				this.recorderManager.onStop((res)=> {
+					console.log('recorder stop' + JSON.stringify(res));
+					this.status = 'end'
+					self.voicePath = res.tempFilePath;
+				});
+				this.recorderManager.onError((res)=> {
+					console.log('onError ==' + JSON.stringify(res));
+				});
+			}
+			
+			if(innerAudioContext) {
+				// innerAudioContext.autoplay = true;
+				innerAudioContext.onPlay(() => {
+				  // console.log('开始播放');
+				  this.isVoicePlay = true
+				});
+				innerAudioContext.onStop(() => {
+				  // console.log('停止播放');
+				  this.isVoicePlay = false
+				});
+				innerAudioContext.onEnded(() => {
+				  // console.log('播放结束');
+				  this.isVoicePlay = false
+				});
+				innerAudioContext.onError((res) => {
+					// console.log('播放res',res);
+				  this.isVoicePlay = false
+				});
+				innerAudioContext.onPause(() => {
+				  // console.log('暂停播放');
+				  this.isVoicePlay = false
+				});
+			}
+			// #endif
+		},
+		onReady() {
+			const query = uni.createSelectorQuery().in(this);
+			query
+			  .select(".voice-footer")
+			  .boundingClientRect((data) => {
+				this.textHeight = `calc(${this.screenHeight} - ${data.height}px - ${this.statusBarHeight} - 45px - ${uni.upx2px(120)}px)`
+			  })
+			  .exec();
+		},
+		onHide() {
+			if(innerAudioContext){
+				innerAudioContext.pause();
+			}
+		},
+		onUnload() {
+			this.recorderManager = null
+			if(innerAudioContext) {
+				innerAudioContext.destroy()
+				innerAudioContext = null
+			}
+		},
+		methods: {
+			handleRecord() {
+				console.log('handleRecord',this.status)
+				if(innerAudioContext){
+					innerAudioContext.pause();
+				}
+				if(this.status == 'stop') {
+					this.startRecord()
+				} else if(this.status == 'start') {
+					this.endRecord()
+				} else if(this.status == 'end') {
+					this.startRecord()
+				}
+			},
+			startRecord() {
+				console.log('this.recorderManager',this.recorderManager)
+				// console.log('开始录音');
+				// 声音采集限制10秒
+				this.recorderManager.start({
+					format: 'mp3',
+					duration: 10000
+				});
+			},
+			endRecord() {
+				// console.log('录音结束');
+				this.recorderManager.stop();
+			},
+			playVoice() {
+				console.log(innerAudioContext)
+				if(this.status == "start") return
+				if (this.voicePath) {
+					if(this.isVoicePlay == false) {
+						innerAudioContext.src = this.voicePath;
+						innerAudioContext.play();
+					} else {
+						innerAudioContext.stop();
+					}
+				}
+			},
+			onSubmit() {
+				console.log("==onSubmit=",this.status)
+				if(this.status == "start") return
+				this.btnLoading = true
+				uni.showLoading({
+					title:"提交中..."
+				})
+				uni.uploadFile({
+					url: uni.getStorageSync('requestPath')+'/app/common/uploadOSS', //仅为示例,非真实的接口地址
+					filePath: this.voicePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						console.log(JSON.parse(uploadFileRes.data).url)
+						let voicePrintUrl = JSON.parse(uploadFileRes.data).url
+						addVoicePrintUrl({voicePrintUrl: voicePrintUrl}).then(res=>{
+							uni.hideLoading()
+							this.btnLoading = false
+							if(res.code==200){
+								uni.showToast({
+									icon:'none',
+									title: '提交成功',
+								});
+							}else{
+								uni.showToast({
+									icon:'none',
+									title: res.msg,
+								});
+							}
+						}).catch(()=>{
+							uni.hideLoading()
+							this.btnLoading = false
+						})
+					},
+					fail: ()=>{
+						uni.hideLoading()
+						this.btnLoading = false
+					}
+				});
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.container {
+		position: relative;
+		.header-tips {
+			padding-bottom: 24rpx;
+			box-sizing: border-box;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 24rpx;
+			color: #757575;
+			// color: $mainThemeHColor;
+			text-align: center;
+		}
+		.textbox {
+			padding: 24rpx 50rpx;
+			box-sizing: border-box;
+			&-con {
+				padding: 32rpx;
+				box-sizing: border-box;
+				background-color: #fff;
+				border-radius: 16rpx 16rpx 16rpx 16rpx;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 40rpx;
+				color: #222222;
+				overflow-y: auto;
+				line-height: 60rpx;
+				letter-spacing: 4rpx;
+			}
+		}
+		.voice-footer {
+			position: fixed;
+			bottom: 0;
+			left: 0;
+			width: 100%;
+			box-sizing: border-box;
+			&-tips {
+				padding: 0 50rpx;
+				box-sizing: border-box;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 24rpx;
+				color: #757575;
+				margin-bottom: 10rpx;
+			}
+		}
+	}
+	.voice-footer-btnbox {
+		@include u-flex(row,flex-end,space-evenly);
+		margin-top: 100rpx;
+		padding: 50rpx 24rpx;
+		background-color: #fff;
+		text-align: center;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 30rpx;
+		color: #333;
+		.iconsbox {
+			height: 110rpx;
+			width: 110rpx;
+			margin: 0;
+			margin-bottom: 20rpx;
+			box-sizing: border-box;
+			@include u-flex(row,center,center);
+			border-radius: 50%;
+			background-color: #fff;
+			border: 1rpx solid #CCCCCC;
+			&::after {
+				border: none;
+			}
+			&-voice {
+				height: 150rpx;
+				width: 150rpx;
+				background-color: #FF5C03;
+				border: 1rpx solid #FF5C03;
+				image {
+					height: 60rpx;
+					width: 60rpx;
+				}
+			}
+		}
+		.btnbox-item {
+			flex: 1;
+			@include u-flex(column,center,center);
+		}
+		
+	}
+</style>

+ 489 - 0
pages_index/voiceItem.vue

@@ -0,0 +1,489 @@
+<template>
+	<view class="container">
+		<view class="textbox">
+			<view class="header-tips">请朗读以下文字</view>
+			<view class="textbox-con" :style="{height: textHeight}">{{voiceText || ''}}</view>
+		</view>
+		<view class="voice-footer">
+			<view class="voice-footer-tips">1、选择安静的录音环境,可在房间或车内录音。</view>
+			<view class="voice-footer-tips">2、保持20cm距离,避免手机太远录音不清晰。</view>
+			<view class="voice-footer-tips">3、使用普通话朗读,语速适中,吐字清晰。</view>
+			<view class="voice-footer-btnbox">
+				<view class="tabs" v-if="type!=2">
+					<u-tabs
+						:scrollable="false"
+						:list="tabs"
+						:current="current"
+						lineColor="#FF5C03"
+						@change="tabChange">
+					</u-tabs>
+					<view class="mask" v-if="status=='start'||status=='end'" @click.stop>
+						<view @click.stop="tabclick(0)"></view>
+						<view @click.stop="tabclick(1)"></view>
+					</view>
+				</view>
+				<view class="voice-footer-con">
+					<view class="btnbox-item" :style="{visibility: voicePath ? 'visible' : 'hidden',color: status=='start' ? '#ccc !important':''}">
+						<view class="iconsbox" @click="playVoice" :style="{borderColor: status=='start' ? '#ccc' :isVoicePlay ? 'red':''}">
+							<u-icon name="volume-fill"  size="30" :color="status=='start' ? '#ccc' :isVoicePlay ? 'red':'#757575'"></u-icon>
+							<!-- <uni-icons type="sound-filled" size="30" :color="status=='start' ? '#ccc' :isVoicePlay ? 'red':'#757575'"></uni-icons> -->
+						</view>
+						<view>试听录音</view>
+					</view>
+					<view class="btnbox-item">
+						<view class="iconsbox iconsbox-voice" :style="{backgroundColor: status=='end'|| status=='ok' ? 'red':''}" @click="handleRecord">
+							<view v-show="status=='stop'|| status=='end' || status=='ok'">
+								<view v-show="current==1" class="smallcircle-filled"></view>
+								<u-icon v-show="current!=1" name="mic" size="35" color="#fff"></u-icon>
+							</view>
+							<!-- <uni-icons v-show="status=='stop'|| status=='end' || status=='ok'" :type="current==1?'smallcircle-filled':'mic-filled'" size="35" color="#fff"></uni-icons> -->
+							<image v-show="current!=1&&status=='start'" src="https://obs.jnmyunl.com/fs/20250813/1755047925090.png" mode="aspectFill"></image>
+							<view v-show="current==1&&status=='start'"><u-loading-icon color="#fff"></u-loading-icon></view>
+						</view>
+						<view v-show="status=='stop'">{{current==1?'点击生成':'点击录制'}}</view>
+						<view v-show="status=='start'">{{current==1?'生成中':'点击停止'}}</view>
+						<view v-show="status=='end'|| status=='ok'">{{current==1?'重新生成':'重新录制'}}</view> 
+					</view>
+					<view class="btnbox-item" :style="{visibility: voicePath&&status!='ok'&&current!=1  ? 'visible' : 'hidden',color: status=='start' ? '#ccc !important':''}">
+						<button class="iconsbox" :disabled="btnLoading" @click="onSubmit">
+							<u-icon name="checkmark" size="30" :color="status=='start' ? '#ccc' : '#757575'"></u-icon>
+							<!-- <uni-icons type="checkmarkempty" size="30" :color="status=='start' ? '#ccc' : '#757575'"></uni-icons> -->
+						</button>
+						<view>提交</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {companyUserVoiceNew,companyUserVoice,queryDetail} from '@/api/test'
+	let innerAudioContext = null
+	export default {
+		data() {
+			return {
+				recorderManager: null,
+				// innerAudioContext: null,
+				textHeight: '',
+				statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px',
+				screenHeight: uni.getSystemInfoSync().windowHeight + 'px',
+				voicePath: '',
+				status: "stop",
+				isVoicePlay: false,
+				btnLoading: false,
+				tabs:[
+					{
+						id:1,
+						name:'自己录制'
+					},
+					{
+						id:2,
+						name:'AI生成'
+					}
+				],
+				current: 0,
+				id: null,
+				voiceText: '',
+				recordType: 0, // 是否已采集
+				type: 0, // 2表示只能自己录制
+			}
+		},
+		onLoad(option) {
+			this.type = option.type || 0
+			this.recordType = option.recordType || 0
+			this.id = option.id || null
+			this.getDetail()
+			this.initDate()
+		},
+		onHide() {
+			if(innerAudioContext){
+				innerAudioContext.pause();
+			}
+		},
+		onUnload() {
+			this.recorderManager = null
+			if(innerAudioContext) {
+				innerAudioContext.destroy()
+				innerAudioContext = null
+			}
+		},
+		methods: {
+			tabclick(type) {
+				if(type == this.current) return
+				if(this.btnLoading || this.status == 'start') {
+					uni.showToast({
+						title: '生成中,请勿进行其他操作!',
+						icon: 'none'
+					})
+				} else if(this.status == 'end') {
+					const that = this
+					uni.showModal({
+						title: '提示',
+						content: '当亲录制已完成,切换类型需要重新录制,确认切换吗?',
+						success: function (res) {
+							if (res.confirm) {
+								const item = {
+									index: type,
+									...that.tabs[type]
+								}
+								that.tabChange(item)
+							} else if (res.cancel) {
+								console.log('用户点击取消');
+							}
+						}
+					});
+				}
+			},
+			tabChange(item){
+				console.log("tabChange")
+				if(this.current == item.index) return
+				if(this.btnLoading || this.status == 'start') {
+					uni.showToast({
+						title: '生成中,请勿进行其他操作!',
+						icon: 'none'
+					})
+				}
+				this.current = item.index
+				this.recorderManager = null
+				if(innerAudioContext) {
+					innerAudioContext.stop();
+					innerAudioContext.destroy()
+					innerAudioContext = null
+				}
+				this.voicePath = this.recordType == 1 ? this.voicePath : ''
+				this.status = this.recordType == 1 ? this.status : "stop"
+				this.isVoicePlay = false
+				this.btnLoading = false
+				this.initDate()
+			},
+			initDate() {
+				// #ifndef H5
+				this.recorderManager = uni.getRecorderManager();
+				innerAudioContext = uni.createInnerAudioContext();
+				
+				
+				
+				let self = this;
+				if(this.recorderManager) {
+					this.recorderManager.onStart(()=>{
+						this.status = 'start'
+						this.voicePath = ''
+					})
+					this.recorderManager.onStop((res)=> {
+						// console.log('recorder stop' + JSON.stringify(res));
+						this.status = 'end'
+						self.voicePath = res.tempFilePath;
+					});
+				}
+				if(innerAudioContext) {
+					// innerAudioContext.autoplay = true;
+					innerAudioContext.onPlay(() => {
+					  // console.log('开始播放');
+					  this.isVoicePlay = true
+					});
+					innerAudioContext.onStop(() => {
+					  // console.log('停止播放');
+					  this.isVoicePlay = false
+					});
+					innerAudioContext.onEnded(() => {
+					  // console.log('播放结束');
+					  this.isVoicePlay = false
+					});
+					innerAudioContext.onError((res) => {
+					  this.isVoicePlay = false
+					});
+					innerAudioContext.onPause(() => {
+					  // console.log('暂停播放');
+					  this.isVoicePlay = false
+					});
+				}
+				// #endif
+			},
+			handleRecord() {
+				if(innerAudioContext){
+					innerAudioContext.pause();
+				}
+				if(this.current == 1) {
+					if(this.status == 'stop') {
+						this.creatVoice()
+					} else if(this.status == 'start') {
+						uni.showToast({
+							title: '生成中,请勿进行其他操作!',
+							icon: 'none'
+						})
+					} else if(this.status == 'end'||this.status == 'ok') {
+						this.creatVoice()
+					}
+				} else {
+					if(this.status == 'stop') {
+						this.startRecord()
+					} else if(this.status == 'start') {
+						this.endRecord()
+					} else if(this.status == 'end'||this.status == 'ok') {
+						this.startRecord()
+					}
+				}
+			},
+			startRecord() {
+				// console.log('开始录音');
+				this.recorderManager.start({
+					format: 'mp3',
+				});
+			},
+			endRecord() {
+				// console.log('录音结束');
+				this.recorderManager.stop();
+			},
+			playVoice() {
+				if(this.status == "start") return
+				if (this.voicePath) {
+					if(this.isVoicePlay == false) {
+						innerAudioContext.src = this.voicePath;
+						innerAudioContext.play();
+					} else {
+						innerAudioContext.stop();
+					}
+				}
+			},
+			onSubmit() {
+				if(this.status == "start") return
+				this.btnLoading = true
+				uni.showLoading({
+					title:"提交中..."
+				})
+				if(this.current == 1) {
+					this.creatVoice()
+					return
+				}
+				uni.uploadFile({
+					url: uni.getStorageSync('requestPath')+'/app/common/uploadOSS', //仅为示例,非真实的接口地址
+					filePath: this.voicePath,
+					name: 'file',
+					success: (uploadFileRes) => {
+						console.log("companyUserVoiceNew==",JSON.parse(uploadFileRes.data).url)
+						let voicePrintUrl = JSON.parse(uploadFileRes.data).url
+						companyUserVoiceNew({userVoiceUrl: voicePrintUrl,id:this.id}).then(res=>{
+							uni.hideLoading()
+							this.btnLoading = false
+							if(res.code==200){
+								uni.showToast({
+									icon:'none',
+									title: '提交成功',
+								});
+								uni.$emit('refreshVoiceList')
+								setTimeout(()=>{
+									uni.navigateBack()
+								},2000)
+							}else{
+								uni.showToast({
+									icon:'none',
+									title: res.msg,
+									duration: 2000
+								});
+							}
+						}).catch(()=>{
+							uni.hideLoading()
+							this.btnLoading = false
+						})
+					},
+					fail: ()=>{
+						uni.hideLoading()
+						this.btnLoading = false
+					}
+				});
+			},
+			getDetail() {
+				queryDetail(this.id).then(res=>{
+					if(res.code==200){
+						this.voiceText = res.data.voiceTxt
+						this.recordType = res.data.recordType
+						if(this.recordType == 1) {
+							this.voicePath = res.data.wavUrl||''
+							this.status = 'ok'
+							if(this.voicePath&&this.voicePath.match(/\.mp3$/)) {
+								this.current = 0
+							} else {
+								this.current = 1
+							}
+						}
+						this.$nextTick(()=>{
+							const query = uni.createSelectorQuery().in(this);
+							query
+							  .select(".voice-footer")
+							  .boundingClientRect((data) => {
+								this.textHeight = `calc(${this.screenHeight} - ${data.height}px - ${this.statusBarHeight} - 45px - ${uni.upx2px(120)}px)`
+							  })
+							  .exec();
+						})
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: res.msg,
+						});
+					}
+				})
+			},
+			// 智能生成
+			creatVoice() {
+				if(this.status == "start") return
+				this.btnLoading = true
+				this.status = "start"
+				this.voicePath = ''
+				uni.showLoading({
+					title:"生成中..."
+				})
+				companyUserVoice({
+					id: this.id,
+				}).then(res=>{
+					uni.hideLoading()
+					this.btnLoading = false
+					if(res.code==200){
+						this.status = "end"
+						this.voicePath = res.data.wavUrl
+						uni.showToast({
+							icon:'none',
+							title: '生成成功',
+						});
+						uni.$emit('refreshVoiceList')
+						setTimeout(()=>{
+							uni.navigateBack()
+						},2000)
+					}else{
+						this.status = "stop"
+						uni.showToast({
+							icon:'none',
+							title: res.msg,
+							duration: 2000
+						});
+					}
+				}).catch(()=>{
+					uni.hideLoading()
+					this.btnLoading = false
+					this.status = "stop"
+				})
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.smallcircle-filled {
+		background-color: #fff;
+		width: 70rpx;
+		height: 70rpx;
+		border-radius: 50%;
+	}
+	.tabs {
+		position: relative;
+		width: 100%;
+		.mask {
+			position: absolute;
+			top: 0;
+			left: 0;
+			width: 100%;
+			height: 100%;
+			z-index: 3;
+			@include u-flex(row,flex-start,flex-start);
+			view {
+				flex: 1;
+				height: 100%;
+			}
+		}
+	}
+	.container {
+		position: relative;
+		.header-tips {
+			padding-bottom: 24rpx;
+			box-sizing: border-box;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 24rpx;
+			color: #757575;
+			// color: $mainThemeHColor;
+			text-align: center;
+		}
+		.textbox {
+			padding: 24rpx 50rpx;
+			box-sizing: border-box;
+			&-con {
+				padding: 32rpx;
+				box-sizing: border-box;
+				background-color: #fff;
+				border-radius: 16rpx 16rpx 16rpx 16rpx;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 40rpx;
+				color: #222222;
+				overflow-y: auto;
+				line-height: 60rpx;
+				letter-spacing: 4rpx;
+			}
+		}
+		.voice-footer {
+			position: fixed;
+			bottom: 0;
+			left: 0;
+			width: 100%;
+			box-sizing: border-box;
+			&-tips {
+				padding: 0 50rpx;
+				box-sizing: border-box;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 24rpx;
+				color: #757575;
+				margin-bottom: 10rpx;
+			}
+		}
+	}
+	.voice-footer-btnbox {
+		margin-top: 100rpx;
+		background-color: #fff;
+		text-align: center;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 30rpx;
+		color: #333;
+		.voice-footer-con {
+			padding: 50rpx 24rpx;
+			box-sizing: border-box;
+			@include u-flex(row,flex-end,space-evenly);
+		}
+		.iconsbox {
+			height: 110rpx;
+			width: 110rpx;
+			margin: 0;
+			margin-bottom: 20rpx;
+			box-sizing: border-box;
+			@include u-flex(row,center,center);
+			border-radius: 50%;
+			background-color: #fff;
+			border: 1rpx solid #CCCCCC;
+			&::after {
+				border: none;
+			}
+			&-voice {
+				height: 150rpx;
+				width: 150rpx;
+				background-color: #FF5C03;
+				border: 1rpx solid #FF5C03;
+				image {
+					height: 60rpx;
+					width: 60rpx;
+				}
+			}
+		}
+		.btnbox-item {
+			flex: 1;
+			@include u-flex(column,center,center);
+		}
+		
+	}
+</style>

+ 244 - 0
pages_index/voiceList.vue

@@ -0,0 +1,244 @@
+<template>
+	<view class="content">
+		<u-sticky>
+			<view class="tabs">
+				<u-tabs :scrollable="false" :list="tabs" :current="current" lineColor="#FF5C03" @change="tabChange">
+				</u-tabs>
+			</view>
+		</u-sticky>
+		<mescroll-body :bottom="bottom+'px'" ref="mescrollRef" :height="height+'px'" @init="mescrollInit"
+			:down="downOption" :up="upOption" @down="downCallback" @up="upCallback">
+			<view class="list">
+				<view class="list-item" v-for="item in dataList" :key="item.id">
+					<view class="list-top ellipsis2" @click="navTo('./voiceItem?id='+item.id)">{{item.voiceTxt}}</view>
+					<view class="list-cont x-bc">
+						<text class="duration">{{secondsToHoursAndMinutes(item.duration || 0)}}</text>
+						<view class="btns" v-show="current==0" @click="navTo('./voiceItem?type=2&id='+item.id)">录制</view>
+						<view class="btns" v-show="current==1" @click="navTo('./voiceItem?id='+item.id)">录制</view>
+						<view class="btns" v-show="current==2" @click="navTo('./voiceItem?id='+item.id)">详情</view>
+					</view>
+				</view>
+			</view>
+		</mescroll-body>
+		<view class="footer" id="footer-btn" v-show="current==1&&dataList&&dataList.length>0">
+			<button class="footer-btn" @click="handleAllVoice">一键生成所有录制</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	import {
+		querySopVoiceList,
+		createUserAllVoice
+	} from '@/api/test'
+	export default {
+		mixins: [MescrollMixin], // 使用mixin
+		data() {
+			return {
+				current: 0,
+				tabs: [
+					{
+						id: 2,
+						name: '声音录制'
+					}, {
+						id: 0,
+						name: '未完成'
+					},
+					{
+						id: 1,
+						name: '已完成'
+					}
+				],
+				mescroll: null,
+				downOption: { //下拉刷新
+					use: true,
+					auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
+				},
+				upOption: {
+					onScroll: false,
+					use: true, // 是否启用上拉加载; 默认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: [],
+				height: 0,
+				bottom: 0
+			}
+		},
+		onLoad() {
+			uni.$on('refreshVoiceList', () => {
+				this.mescroll.resetUpScroll()
+			})
+		},
+		onUnload() {
+			uni.$off('refreshVoiceList')
+		},
+		methods: {
+			getHeight() {
+				this.$nextTick(() => {
+					const query = uni.createSelectorQuery().in(this);
+					query
+						.select("#footer-btn")
+						.boundingClientRect((data) => {
+							if (data) {
+								this.height = uni.getSystemInfoSync().windowHeight - data.height - 44
+								this.bottom = data.height
+							}
+						})
+						.exec();
+				})
+			},
+			secondsToHoursAndMinutes(totalSeconds) {
+				let hours = Math.floor(totalSeconds / 3600);
+				let minutes = Math.floor((totalSeconds % 3600) / 60);
+				let seconds = totalSeconds % 60;
+				hours = hours.toString().padStart(2, '0');
+				minutes = minutes.toString().padStart(2, '0');
+				seconds = seconds.toString().padStart(2, '0');
+				return hours + ':' + minutes + ':' + seconds;
+			},
+			tabChange(item) {
+				if (this.current == item.index) return
+				this.current = item.index
+				this.mescroll.resetUpScroll()
+			},
+			navTo(url) {
+				uni.navigateTo({
+					url: url
+				})
+			},
+			mescrollInit(mescroll) {
+				this.mescroll = mescroll;
+			},
+			/*下拉刷新的回调 */
+			downCallback() {
+				this.mescroll.resetUpScroll()
+			},
+			/*上拉加载的回调*/
+			upCallback(page) {
+				//联网加载数据
+				var that = this;
+				var data = {
+					recordType: this.tabs[this.current].id,
+					pageNum: page.num,
+					pageSize: page.size
+				};
+				querySopVoiceList(data).then(res => {
+					if (res.code == 200) {
+						if (page.num == 1) {
+							that.dataList = res.rows;
+							that.getHeight()
+						} else {
+							that.dataList = that.dataList.concat(res.rows);
+
+						}
+						that.mescroll.endBySize(res.rows.length, res.total);
+
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: "请求失败",
+						});
+						that.dataList = null;
+						that.mescroll.endErr();
+					}
+				});
+			},
+			handleAllVoice() {
+				createUserAllVoice().then(res => {
+					uni.showToast({
+						icon: 'none',
+						title: res.msg,
+						duration: 2000
+					});
+				})
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+
+	.content {
+		.tabs {
+			background-color: #fff;
+		}
+
+		.list {
+			width:calc(100% - 30rpx);
+			padding: 15rpx;
+			@include u-flex(column, flex-start, flex-start);
+
+			.list-item {
+				margin-bottom: 15rpx;
+				width:calc(100% - 30rpx);
+				padding: 15rpx;
+				box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
+				background-color: #fff;
+				border-radius: 15rpx;
+				@include u-flex(column, flex-start, flex-start);
+			}
+
+			.list-cont {
+				margin-top: 24rpx;
+				width: 100%;
+			}
+		}
+
+		.duration {
+			box-sizing: border-box;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 24rpx;
+			color: #757575;
+		}
+
+		.btns {
+			padding: 10rpx 30rpx;
+			border: 1rpx solid #FF5C03;
+			color: #FF5C03;
+			font-size: 28rpx;
+			border-radius: 30rpx;
+		}
+	}
+
+	.footer {
+		width: 100%;
+		height: 152rpx;
+		padding: 20rpx 24rpx;
+		box-sizing: border-box;
+		position: fixed;
+		bottom: var(--window-bottom);
+		left: 0;
+
+		&-btn {
+			height: 112rpx;
+			background: #FF5C03;
+			border-radius: 112rpx;
+			font-weight: 600;
+			font-size: 34rpx;
+			color: #FFFFFF;
+			line-height: 112rpx;
+			text-align: center;
+
+			&::after {
+				border: none;
+			}
+		}
+	}
+</style>

+ 298 - 298
pages_manage/components/UrgeIndex.vue

@@ -1,299 +1,299 @@
-<template>
-	<view class="containers 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">
-	.containers {
-		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;
-	}
+<template>
+	<view class="containers 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">
+	.containers {
+		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>

+ 102 - 102
pages_manage/components/chart.vue

@@ -1,103 +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;
-	}
+<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>

+ 520 - 520
pages_manage/components/courseIndex.vue

@@ -1,521 +1,521 @@
-<template>
-	<view class="containers">
-		<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
-				},
-				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('refresh')
-				this.getFsCourseList('refresh')
-			},
-			gettodaylist(type){
-				const data={
-					pageNum:this.params.pageNum,
-					pageSize:this.params.pageSize,
-					keyword:this.keywordlist,
-				}
-				getTodayCourse(data).then(res=>{
-					console.log(res)
-					if(res.code==200){
-						this.viewload=false
-						const list=res.data.list
-						// this.dataList=res.data.list
-						if (type == 'refresh') {
-							this.dataList = list
-						} else {
-							this.dataList = [...this.dataList, ...list]
-						}
-						if ( res.data.isLastPage) {
-							this.loadStatus = 'nomore'
-						} else {
-							this.loadStatus = 'loadmore'
-						}
-					}else{
-						uni.showToast({
-							icon: 'none',
-							title: res.msg,
-						});
-					}
-				})
-			},
-			selindex(e){
-				this.seltoday=e.value
-				if(e.value==0){
-					this.params.pageNum = 1
-					this.gettodaylist('refresh')
-				}else{
-					this.params.pageNum = 1
-					this.keywordlist=''
-					this.getFsCourseList('refresh')
-				}
-				console.log(e)
-			},
-			handleShare(config) {
-			      // 保存分享配置到父页面数据
-			      this.shareConfig = config;
-				  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.params.pageNum=1
-				if(this.seltoday==0){
-					this.gettodaylist()
-				}else{
-					this.getListData()
-				}
-				// 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;
-						if(this.seltoday==0){
-							this.gettodaylist('more')
-						}else{
-							this.getListData('more')
-						}
-						// 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('refresh')
-					}else{
-						this.getListData('refresh')
-					}
-				}, 500)
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.containers {
-		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%;
-		}
-	}
+<template>
+	<view class="containers">
+		<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
+				},
+				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('refresh')
+				this.getFsCourseList('refresh')
+			},
+			gettodaylist(type){
+				const data={
+					pageNum:this.params.pageNum,
+					pageSize:this.params.pageSize,
+					keyword:this.keywordlist,
+				}
+				getTodayCourse(data).then(res=>{
+					console.log(res)
+					if(res.code==200){
+						this.viewload=false
+						const list=res.data.list
+						// this.dataList=res.data.list
+						if (type == 'refresh') {
+							this.dataList = list
+						} else {
+							this.dataList = [...this.dataList, ...list]
+						}
+						if ( res.data.isLastPage) {
+							this.loadStatus = 'nomore'
+						} else {
+							this.loadStatus = 'loadmore'
+						}
+					}else{
+						uni.showToast({
+							icon: 'none',
+							title: res.msg,
+						});
+					}
+				})
+			},
+			selindex(e){
+				this.seltoday=e.value
+				if(e.value==0){
+					this.params.pageNum = 1
+					this.gettodaylist('refresh')
+				}else{
+					this.params.pageNum = 1
+					this.keywordlist=''
+					this.getFsCourseList('refresh')
+				}
+				console.log(e)
+			},
+			handleShare(config) {
+			      // 保存分享配置到父页面数据
+			      this.shareConfig = config;
+				  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.params.pageNum=1
+				if(this.seltoday==0){
+					this.gettodaylist()
+				}else{
+					this.getListData()
+				}
+				// 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;
+						if(this.seltoday==0){
+							this.gettodaylist('more')
+						}else{
+							this.getListData('more')
+						}
+						// 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('refresh')
+					}else{
+						this.getListData('refresh')
+					}
+				}, 500)
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.containers {
+		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>

+ 776 - 774
pages_manage/components/courseItem.vue

@@ -1,774 +1,776 @@
-<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" />
-				</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="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/manageCompany'
-	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 => {
-					// console.log([data])
-					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>
+<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 class="base-color-6 ml30 mr20" v-if="info.periodName">营期</view>
+			<view v-if="info.periodName">{{info.periodName}}</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" />
+				</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="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/manageCompany'
+	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 => {
+					// console.log([data])
+					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>

+ 747 - 747
pages_manage/components/dataIndex.vue

@@ -1,748 +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;
-	}
-
-	.containers {
-		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;
-				}
-			}
-		}
-	}
+<!-- 数据组件页面 -->
+<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;
+	}
+
+	.containers {
+		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>

+ 334 - 334
pages_manage/components/dropdownPanel.vue

@@ -1,335 +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;
-		}
-	}
+<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>

+ 766 - 766
pages_manage/components/manageIndex.vue

@@ -1,767 +1,767 @@
-<template>
-	<view class="content containers" style="height: 100%;">
-		<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" >
-				<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_index/voice')">
-						<!-- <image :src="imgPath+'/app/manergevip/about.png'"></image> -->
-						<u-icon name="mic"  size="28"></u-icon>
-						<view class="m-name">声音录制</view>
-					</view>
-					<view class="menu-item" @click="navTo('/pages_index/voiceList')">
-						<!-- <image :src="imgPath+'/app/manergevip/about.png'"></image> -->
-						<u-icon name="mic"  size="28"></u-icon>
-						<view class="m-name">声音采集</view>
-					</view>
-					<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+'&companyUserId='+this.user.userId,
-						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+'&companyUserId='+this.user.userId
-				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 scoped lang="scss">
-	page {
-		height: 100%;
-		background: #f6f6f6;
-	}
-
-	.share {
-		display: inline-block;
-		position: absolute;
-		top: 0;
-		left: 0;
-		width: 100%;
-		height: 100%;
-		opacity: 0;
-	}
-
-	.containers {
-		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: 100vh;
-		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;
-			padding-bottom:400rpx;
-
-			.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;
-			}
-		}
-	}
+<template>
+	<view class="content containers" style="height: 100%;">
+		<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" >
+				<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_index/voice')">
+						<!-- <image :src="imgPath+'/app/manergevip/about.png'"></image> -->
+						<u-icon name="mic"  size="28"></u-icon>
+						<view class="m-name">声音录制</view>
+					</view>
+					<view class="menu-item" @click="navTo('/pages_index/voiceList')">
+						<!-- <image :src="imgPath+'/app/manergevip/about.png'"></image> -->
+						<u-icon name="mic"  size="28"></u-icon>
+						<view class="m-name">声音采集</view>
+					</view>
+					<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+'&companyUserId='+this.user.userId,
+						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+'&companyUserId='+this.user.userId
+				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 scoped lang="scss">
+	page {
+		height: 100%;
+		background: #f6f6f6;
+	}
+
+	.share {
+		display: inline-block;
+		position: absolute;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 100%;
+		opacity: 0;
+	}
+
+	.containers {
+		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: 100vh;
+		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;
+			padding-bottom:400rpx;
+
+			.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>

+ 1977 - 1974
pages_manage/components/memberIndex.vue

@@ -1,1975 +1,1978 @@
-<template>
-	<view class="containers 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" style="width: 100%;">
-					<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;" 
-										v-if="imgname=='医建宝'">生成卡片</view>
-										<view style="font-size: 12px;color: #888;" 
-										v-if="imgname=='医建宝'">指导分享轻松转发</view>
-										<!-- #ifdef MP-WEIXIN -->
-										<button open-type="share" class="share" v-if="imgname=='医建宝'">分享卡片</button>
-										<!-- #endif -->
-										<!-- <view class='u-border radius100 plr20 ptb10' @click="copyPageLink"
-										v-if="imgname!=='医建宝'">复制页面地址</view> -->
-										<!-- <view class='u-border radius100 plr20 ptb10' @click="copyPageLink"
-										>复制页面地址</view> -->
-									</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,
-		copyuniLink,
-		getlinkCode
-	} 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:'',
-				projectCode:''
-			}
-		},
-		// 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
-			},
-			imgname() {
-				return this.$store.state.logoname
-			},
-		},
-		methods: {
-			getlinkCodes(){
-				getlinkCode().then(res=>{
-					if(res.code){
-						this.projectCode=res.code
-						console.log(this.projectCode)
-						setTimeout(()=>{
-							this.setlnk()
-						},100)
-					}
-				})
-			},
-			setlnk(){
-				let params={
-					companyId: this.user.companyId,
-					companyUserId: this.user.userId,
-					tagids: this.sharetaglist,
-					projectCode: this.projectCode,
-					projectId: this.projectId,
-				}
-				const pages = '/pages_course/becomeVIP?becomeVip='+JSON.stringify(params)
-				console.log(pages)
-				const data={
-					// appid:'wx503cf8ab31f83dd4',
-					appid:this.appid,//医健宝
-					linkStr:pages
-				}
-				copyuniLink(data).then(res=>{
-					if(res.code==200){
-						uni.hideLoading();
-						setTimeout(() => {
-							uni.setClipboardData({
-								data:res.data,
-								success: () => {
-									uni.showToast({
-										title: '链接已复制',
-										icon: 'none',
-										duration: 2000
-									});
-								},
-								fail: () => {
-									uni.showToast({
-										title: '复制失败',
-										icon: 'none'
-									});
-								}
-							});
-						}, 200)
-					}else{
-						uni.hideLoading();
-						uni.showToast({
-							title: res.msg,
-							icon: 'none'
-						});
-					}
-				})
-			},
-			copyPageLink(){
-				uni.showLoading({
-					title: "处理中..."
-				});
-				this.getlinkCodes()
-			},
-			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: 55%;
-		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:calc(100% - 40rpx) ;
-			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;
-		}
-	}
-
-	.containers {
-		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;
-	}
+<template>
+	<view class="containers 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" style="width: 100%;">
+					<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;" 
+										v-if="imgname=='医建宝'">生成卡片</view>
+										<view style="font-size: 12px;color: #888;" 
+										v-if="imgname=='医建宝'">指导分享轻松转发</view> -->
+										<!-- #ifdef MP-WEIXIN -->
+										<!-- <button open-type="share" class="share" v-if="imgname=='医建宝'">分享卡片</button> -->
+										<!-- #endif -->
+										<!-- <view class='u-border radius100 plr20 ptb10' @click="copyPageLink"
+										v-if="imgname!=='医建宝'">复制页面地址</view> -->
+										<view class='u-border radius100 plr20 ptb10' @click="copyPageLink"
+										>复制页面地址</view>
+									</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,
+		copyuniLink,
+		getlinkCode
+	} 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:'',
+				projectCode:''
+			}
+		},
+		// 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
+			},
+			imgname() {
+				return this.$store.state.logoname
+			},
+			appid() {
+				return this.$store.state.appid
+			},
+		},
+		methods: {
+			getlinkCodes(){
+				getlinkCode().then(res=>{
+					if(res.code){
+						this.projectCode=res.code
+						console.log(this.projectCode)
+						setTimeout(()=>{
+							this.setlnk()
+						},100)
+					}
+				})
+			},
+			setlnk(){
+				let params={
+					companyId: this.user.companyId,
+					companyUserId: this.user.userId,
+					tagids: this.sharetaglist,
+					projectCode: this.projectCode,
+					projectId: this.projectId,
+				}
+				const pages = '/pages_course/becomeVIP?becomeVip='+JSON.stringify(params)
+				console.log(pages)
+				const data={
+					// appid:'wx503cf8ab31f83dd4',
+					appid:this.appid,//医健宝
+					linkStr:pages
+				}
+				copyuniLink(data).then(res=>{
+					if(res.code==200){
+						uni.hideLoading();
+						setTimeout(() => {
+							uni.setClipboardData({
+								data:res.data,
+								success: () => {
+									uni.showToast({
+										title: '链接已复制',
+										icon: 'none',
+										duration: 2000
+									});
+								},
+								fail: () => {
+									uni.showToast({
+										title: '复制失败',
+										icon: 'none'
+									});
+								}
+							});
+						}, 200)
+					}else{
+						uni.hideLoading();
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						});
+					}
+				})
+			},
+			copyPageLink(){
+				uni.showLoading({
+					title: "处理中..."
+				});
+				this.getlinkCodes()
+			},
+			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: 55%;
+		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:calc(100% - 40rpx) ;
+			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;
+		}
+	}
+
+	.containers {
+		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>

+ 437 - 437
pages_manage/components/vipUserItem.vue

@@ -1,438 +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" @click="morepage(item)"  style="width: 100%;">
-					<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;
-			}
-		}
-	}
+<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" @click="morepage(item)"  style="width: 100%;">
+					<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>

+ 651 - 651
pages_manage/dataDetails.vue

@@ -1,652 +1,652 @@
-<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" class="p20 fs28 column flex-1 hidden">
-						<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" />
-							<view class="ptb40"></view>
-						</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>
-					<!-- <u-collapse-item name="funnel" title="转化漏斗图" v-if="!ratelistState">
-						<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;
-	}
+<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" class="p20 fs28 column flex-1 hidden">
+						<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" />
+							<view class="ptb40"></view>
+						</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>
+					<!-- <u-collapse-item name="funnel" title="转化漏斗图" v-if="!ratelistState">
+						<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>

+ 277 - 277
pages_manage/index.vue

@@ -1,278 +1,278 @@
-<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;" v-if="imgname=='医建宝'">生成卡片</view>
-						<view style="font-size: 12px;color: #888;" v-if="imgname=='医建宝'">指导分享轻松转发</view>
-						<button open-type="share" class="share" v-if="imgname=='医建宝'">分享课程</button>
-						<view  @click="copy" 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,getlinkCode} from "@/api/manageCompany.js"
-	export default{
-		components:{
-			dataIndex,
-			courseIndex,
-			memberIndex,
-			UrgeIndex,
-			manageIndex
-		},
-		data(){
-			return{
-				showShare:false,
-				tabact:1,
-				childdata:[],
-				vipPages:'',
-				salsepages:'',
-				projectCode:'',
-				// 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
-		    },
-			imgname() {
-			  return this.$store.state.logoname
-			}
-		},
-		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:1
-		},
-		methods:{
-			copy(){
-				console.log("hhh")
-				uni.showLoading({
-					title: "处理中..."
-				});
-				this.getlinkCodes()
-			},
-			setlnk(){
-				const path ='/pages_course/videovip'//医健宝
-				// const path ='/pages_course/courseCover'
-				const data={
-					// appid:'wx503cf8ab31f83dd4',
-					appid:this.appid,//医健宝
-					linkStr:path + "?course=" + JSON.stringify(this.childdata.params)
-				}
-				copyuniLink(data).then(res=>{
-					if(res.code==200){
-						uni.hideLoading();
-						setTimeout(() => {
-							uni.setClipboardData({
-								data:res.data,
-								// data: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'
-						});
-					}
-				})
-			},
-			getlinkCodes(){
-				getlinkCode().then(res=>{
-					if(res.code){
-						this.childdata.params.projectCode=res.code
-						this.projectCode=res.data
-						this.setlnk()
-						console.log(this.childdata.params)
-					}
-				})
-			},
-			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;
-		z-index: 999;
-	}
-	.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 */
-	
-		padding-bottom: 50px;
-	
-		&-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;
-			}
-		}
-	}
+<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;" v-if="imgname=='医建宝'">生成卡片</view>
+						<view style="font-size: 12px;color: #888;" v-if="imgname=='医建宝'">指导分享轻松转发</view>
+						<button open-type="share" class="share" v-if="imgname=='医建宝'">分享课程</button> -->
+						<view  @click="copy" 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,getlinkCode} from "@/api/manageCompany.js"
+	export default{
+		components:{
+			dataIndex,
+			courseIndex,
+			memberIndex,
+			UrgeIndex,
+			manageIndex
+		},
+		data(){
+			return{
+				showShare:false,
+				tabact:1,
+				childdata:[],
+				vipPages:'',
+				salsepages:'',
+				projectCode:'',
+				// 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
+		    },
+			imgname() {
+			  return this.$store.state.logoname
+			}
+		},
+		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:1
+		},
+		methods:{
+			copy(){
+				console.log("hhh")
+				uni.showLoading({
+					title: "处理中..."
+				});
+				this.getlinkCodes()
+			},
+			setlnk(){
+				const path ='/pages_course/videovip'//医健宝
+				// const path ='/pages_course/courseCover'
+				const data={
+					// appid:'wx503cf8ab31f83dd4',
+					appid:this.appid,//医健宝
+					linkStr:path + "?course=" + JSON.stringify(this.childdata.params)
+				}
+				copyuniLink(data).then(res=>{
+					if(res.code==200){
+						uni.hideLoading();
+						setTimeout(() => {
+							uni.setClipboardData({
+								data:res.data,
+								// data: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'
+						});
+					}
+				})
+			},
+			getlinkCodes(){
+				getlinkCode().then(res=>{
+					if(res.code){
+						this.childdata.params.projectCode=res.code
+						this.projectCode=res.data
+						this.setlnk()
+						console.log(this.childdata.params)
+					}
+				})
+			},
+			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;
+		z-index: 999;
+	}
+	.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 */
+	
+		padding-bottom: 50px;
+	
+		&-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>

+ 237 - 237
pages_manage/login.vue

@@ -1,237 +1,237 @@
-<template>
-	<view class="column" style="height: 100vh;">
-		 <view class="content flex-1" >
-			 <view class="login pt14">
-				<view class="head">
-					 <image :src="imgPath+'/app/image/logo.png'" ></image>
-					 <p class="title">销售管理端</p>
-					 <p class="desc">客户沟通更智能</p>
-				</view>
-				<view class="logins">
-					 <view class="login-item">
-						 <!-- <text>帐号</text> -->
-						 <view class="input-account">
-							 <input v-model="account"
-							  placeholder="请输入帐号/手机号" type="text" ></input>
-						 </view>
-					 </view> 
-					 <view class="login-item">
-						 <!-- <text>密码</text> -->
-						 <view class="input-pwd">
-							 <input v-model="password" 
-							  placeholder="请输入密码" password type="text"></input>
-						 </view>
-					 </view> 
-					 <view class="btns">
-						 <view class="login-btn" @click="login">登录</view>
-					 </view>
-				</view>
-			 </view>
-		 </view>
-		 <!-- <view class="footer-tips">重庆云联融智提供技术支持</view> -->
-	</view>
-</template>
-
-<script>
-
-import { login } from '@/api/manageCompany.js'
-export default {
-	data() {
-		return {
-			account:"",
-			password:"",
-		}
-	},
-	computed: {
-	    imgPath() {
-	      return this.$store.state.imgpath
-	    },
-		appid() {
-			return this.$store.state.appid
-		},
-	  },
-	onLoad(option) {
-	},
-	mounted() {
-
-	},
-	onShow() {
-		console.log(this.$store.state.imgpath+'/app/images/card_icon.png')
-	},
-	methods: {
-	    login(){
-			if (this.utils.isEmpty(this.account)) {
-				uni.showToast({
-					title: "请输入帐号",
-					icon: 'none',
-				});
-				return
-			}
-			if (this.utils.isEmpty(this.password)) {
-				uni.showToast({
-					title: "请输入密码",
-					icon: 'none',
-				});
-				return
-			}
-			var data = {
-				account:this.account,
-				password: this.password,
-				appId:this.appid
-			};
-			var that=this;
-			uni.showLoading({
-				title:"处理中..."
-			})
-			login(data).then(
-				res => {
-					uni.hideLoading()
-					if(res.code==200){
-						uni.setStorageSync('ManageToken',res.data.token);
-						uni.setStorageSync('companyUserId',res.data.user.userId);
-						uni.setStorageSync('companyUserInfo',JSON.stringify(res.data.user));
-						uni.$emit('initSocket');
-						uni.reLaunch({
-							// url: '../user/index',
-							url: "/pages_manage/index",
-							animationType: 'pop-in',
-							animationDuration: 100
-						})
-					}
-					else{
-						uni.showToast({
-							title: res.msg,
-							icon: 'none'
-						})
-					}
-					
-				},
-				rej => {}
-			);
-	   }
-	 
-	},
-  
-}
-</script>
-
-<style lang="scss" scoped>
-page{
- 	background-color: #ffffff;
-}
-.footer-tips {
-			margin-top: 14rpx;
-			text-align: center;
-			font-family: PingFang SC,PingFang SC;
-			font-weight: 500;
-			font-size: 12px;
-			color: #bbb;
-		}
-.content{
-	 background-color: #ffffff;
-	 display: flex;
-	 flex-direction: column;
-	 align-items: center;
-	 justify-content: center;
-	 // height: calc(100vh);
-	  overflow-y: auto;
-	 width: 100%;
-	 .login{
-		 width: 100%;
-		 padding-bottom: 50rpx;
-		.head{
-			text-align: center;
-			image{
-				padding: 20rpx;
-				width: 120rpx;
-				height: 120rpx;
-				border-radius: 10rpx;
-				box-shadow:0px 0px 20rpx rgba(0,0,0,0.2);
-			}
-			.title{
-			 	color: #141414;
-			 	margin:50upx 0upx 30upx 0rpx;
-			 	font-size: 38rpx;
-				font-weight: 500;
-			 }
-			 .desc{
-			 	color: #686866;
-			 	padding:0 0 30rpx 0rpx;
-			 	font-size: 28rpx;
-			 }
-		}
-		.logins{
-			// 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
-					}
-				}
-			}
-			.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);
-				}
-			}
-			
-		}
-		 
-	}
-}
-.footer{
-	color: #686866;
-	width: 100%;
-	 position: sticky;
-	text-align: center;
-	bottom: 60upx;
-	z-index: 1;
-	font-size: 28rpx;
-}
-
-</style>
+<template>
+	<view class="column" style="height: 100vh;">
+		 <view class="content flex-1" >
+			 <view class="login pt14">
+				<view class="head">
+					 <image :src="imgPath+'/app/image/logo.png'" ></image>
+					 <p class="title">销售管理端</p>
+					 <p class="desc">客户沟通更智能</p>
+				</view>
+				<view class="logins">
+					 <view class="login-item">
+						 <!-- <text>帐号</text> -->
+						 <view class="input-account">
+							 <input v-model="account"
+							  placeholder="请输入帐号/手机号" type="text" ></input>
+						 </view>
+					 </view> 
+					 <view class="login-item">
+						 <!-- <text>密码</text> -->
+						 <view class="input-pwd">
+							 <input v-model="password" 
+							  placeholder="请输入密码" password type="text"></input>
+						 </view>
+					 </view> 
+					 <view class="btns">
+						 <view class="login-btn" @click="login">登录</view>
+					 </view>
+				</view>
+			 </view>
+		 </view>
+		 <!-- <view class="footer-tips">重庆云联融智提供技术支持</view> -->
+	</view>
+</template>
+
+<script>
+
+import { login } from '@/api/manageCompany.js'
+export default {
+	data() {
+		return {
+			account:"",
+			password:"",
+		}
+	},
+	computed: {
+	    imgPath() {
+	      return this.$store.state.imgpath
+	    },
+		appid() {
+			return this.$store.state.appid
+		},
+	  },
+	onLoad(option) {
+	},
+	mounted() {
+
+	},
+	onShow() {
+		console.log(this.$store.state.imgpath+'/app/images/card_icon.png')
+	},
+	methods: {
+	    login(){
+			if (this.utils.isEmpty(this.account)) {
+				uni.showToast({
+					title: "请输入帐号",
+					icon: 'none',
+				});
+				return
+			}
+			if (this.utils.isEmpty(this.password)) {
+				uni.showToast({
+					title: "请输入密码",
+					icon: 'none',
+				});
+				return
+			}
+			var data = {
+				account:this.account,
+				password: this.password,
+				appId:this.appid
+			};
+			var that=this;
+			uni.showLoading({
+				title:"处理中..."
+			})
+			login(data).then(
+				res => {
+					uni.hideLoading()
+					if(res.code==200){
+						uni.setStorageSync('ManageToken',res.data.token);
+						uni.setStorageSync('companyUserId',res.data.user.userId);
+						uni.setStorageSync('companyUserInfo',JSON.stringify(res.data.user));
+						uni.$emit('initSocket');
+						uni.reLaunch({
+							// url: '../user/index',
+							url: "/pages_manage/index",
+							animationType: 'pop-in',
+							animationDuration: 100
+						})
+					}
+					else{
+						uni.showToast({
+							title: res.msg,
+							icon: 'none'
+						})
+					}
+					
+				},
+				rej => {}
+			);
+	   }
+	 
+	},
+  
+}
+</script>
+
+<style lang="scss" scoped>
+page{
+ 	background-color: #ffffff;
+}
+.footer-tips {
+			margin-top: 14rpx;
+			text-align: center;
+			font-family: PingFang SC,PingFang SC;
+			font-weight: 500;
+			font-size: 12px;
+			color: #bbb;
+		}
+.content{
+	 background-color: #ffffff;
+	 display: flex;
+	 flex-direction: column;
+	 align-items: center;
+	 justify-content: center;
+	 // height: calc(100vh);
+	  overflow-y: auto;
+	 width: 100%;
+	 .login{
+		 width: 100%;
+		 padding-bottom: 50rpx;
+		.head{
+			text-align: center;
+			image{
+				padding: 20rpx;
+				width: 120rpx;
+				height: 120rpx;
+				border-radius: 10rpx;
+				box-shadow:0px 0px 20rpx rgba(0,0,0,0.2);
+			}
+			.title{
+			 	color: #141414;
+			 	margin:50upx 0upx 30upx 0rpx;
+			 	font-size: 38rpx;
+				font-weight: 500;
+			 }
+			 .desc{
+			 	color: #686866;
+			 	padding:0 0 30rpx 0rpx;
+			 	font-size: 28rpx;
+			 }
+		}
+		.logins{
+			// 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
+					}
+				}
+			}
+			.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);
+				}
+			}
+			
+		}
+		 
+	}
+}
+.footer{
+	color: #686866;
+	width: 100%;
+	 position: sticky;
+	text-align: center;
+	bottom: 60upx;
+	z-index: 1;
+	font-size: 28rpx;
+}
+
+</style>

+ 799 - 799
pages_manage/manageDataDetail.vue

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

+ 898 - 898
pages_manage/statistic.vue

@@ -1,899 +1,899 @@
-<template>
-	<view class="containers">
-		<image class="topbg" :src="info.thumbnail" mode="aspectFill"></image>
-		<view class="container-body">
-			<view class="coursebox">
-				<view class="coursebox-info">
-					<view class="coursebox-name">
-						<text class="more-t">{{info.title}}-{{info.courseName}}</text>
-						<view class="btn_icon" @click="copyId">ID
-							<image :src="imgPath+'/app/images/copy_icon.png'" mode="aspectFill"></image>
-						</view>
-					</view>
-					<view style="margin-top: 5px;">{{info.courseName}}</view>
-					<view class="coursebox-time x-start">
-						<!-- <view class="coursebox-time-item" style="margin-right: 14px;">
-							<view>直播时间</view>
-							<view class="coursebox-time-t">{{info.createTime}}</view>
-						</view> -->
-						<view class="coursebox-time-item duration">
-							<view class="fs24">课程时长</view>
-							<view class="coursebox-time-t">
-							{{formatSeconds(info.duration || 0,1)}}</view>
-						</view>
-					</view>
-				</view>
-			</view>
-			<view class="statistics">
-				<u-tabs :list="list1" :current='current' :scrollable="false" :lineWidth="40" lineColor="#1677ff"
-					:activeStyle="activeStyle" :inactiveStyle="inactiveStyle" @click="clickTab"></u-tabs>
-				<u-collapse :border='false' :value='collapseValue' @change="changeCollapse" v-if="current == 0">
-					<!-- #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 -->
-						<view slot="value"
-							class="statistics-slot-title">{{collapseValue.includes('live')?'收回':'展开'}}</view>
-						<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 || 0}}</text>人</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>
-							<view class="collapse-content-item">
-								<view class="collapse-content-title">完播率</view>
-								<view class="collapse-content-num"><text>{{courseCount.courseCompleteRate || 0}}</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 -->
-						<view slot="value"
-							class="statistics-slot-title">{{collapseValue.includes('questions')?'收回':'展开'}}</view>
-						<view slot="right-icon">
-							<u-icon name="arrow-right" color="#1677ff" size="12"></u-icon>
-						</view>
-						<view class="collapse-content">
-							<view class="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>
-								<view class="collapse-content-item">
-									<view class="collapse-content-title">正确人数</view>
-									<view class="collapse-content-num"><text>{{courseCount.answerRightNum || 0}}</text>人
-									</view>
-								</view>
-								<view class="collapse-content-item">
-									<view class="collapse-content-title">答题红包数</view>
-									<view class="collapse-content-num"><text>{{courseCount.redPacketNum || 0}}</text>个
-									</view>
-								</view>
-							</view>
-							<view class="redenvelope x-bc">
-								<view class="x-f">
-									<image :src="imgPath+'/app/images/redenvelope.png'" mode="aspectFill"></image>
-									<text>答题红包金额</text>
-								</view>
-								<view class="collapse-content-num"><text>{{courseCount.redPacketAmount || '0.00'}}</text>元
-								</view>
-							</view>
-						</view>
-					</u-collapse-item>
-					<!-- #ifdef MP-WEIXIN -->
-					<u-collapse-item name="funnelplot" title="转化漏斗图">
-					<!-- #endif -->
-					<!-- #ifndef MP-WEIXIN -->
-					<u-collapse-item name="funnelplot">
-						<text slot="title" class="bold fs32">转化漏斗图</text>
-					<!-- #endif -->
-						<view slot="value"
-							class="statistics-slot-title">{{collapseValue.includes('funnelplot')?'收回':'展开'}}</view>
-						<view slot="right-icon">
-							<u-icon name="arrow-right" color="#1677ff" size="12"></u-icon>
-						</view>
-						<view style="height: 600rpx;" v-if="!ratelistState">
-							<funnelChart :getratelist="getrateimg"/>
-						</view>
-						<view v-show="ratelistState" class="center">暂无数据</view>
-					</u-collapse-item>
-				</u-collapse>
-			</view>
-			<!-- 参与记录 -->
-			<view v-if="current == 1">
-				<view class="participate-search">
-					<view class="x-bc">
-						<view class="flex-1">
-							<u-search placeholder="会员ID、昵称、姓名、手机" v-model="keyword" :showAction="false"
-								height="30px" @search="getkeyword"></u-search>
-						</view>
-						<view>
-							<u-button type="primary" class="refresh" color='#1677ff' size="small" :disabled="disabled"
-								text="刷新" @click="refresh"></u-button>
-						</view>
-						
-					</view>
-					<view class="x-bc">
-						<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 == 3">
-							</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>
-				<mescroll-body top="0" bottom="0" ref="mescrollRef" @init="mescrollInit" :down="downOption"
-					:up="upOption" @down="downCallback" @up="upCallback">
-					<view class="list">
-						<view class="list-item" v-for="(item,index) in dataList" :key="index">
-							<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;">
-											<text class="list-item-name one-t">{{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>
-										<view class="list-item-re">
-											注册时间:{{item.createTime?item.createTime.substring(0,10):'--'}}</view>
-									</view>
-								</view>
-								<!-- <image class="phone" :src="imgPath+'/app/images/phone.png'" mode="aspectFill"></image> -->
-							</view>
-							<view class="list-item-desc">
-								<view class="taglist">
-									<view v-for="(e,i) in item.tags" :key="i">
-										<u-tag :text="e.tag" size="mini" color="#999" bgColor="#f5f5f5"
-											borderColor="#f5f5f5"></u-tag>
-									</view>
-								</view>
-								<view style="margin-top: 5px;">
-									<text class="label">观看次数</text><text
-										class="value-num">{{item.watchCount || 0}}</text>
-									<text class="label">完播次数</text><text
-										class="value-num">{{item.finishCount || 0}}</text>
-									<text class="label">累计时长</text><text
-										class="value-num"> {{$formatSeconds(item.watchTime,1)}}</text>
-								</view>
-								<view style="margin-top: 5px;">
-									<text class="label">累计观看天数</text><text
-										class="value-num">{{item.watchLjCount || 0}}</text>
-									<text class="label">连续看课天数</text><text
-										class="value-num">{{item.watchLxCount || 0}}</text>
-								</view>
-								<view style="margin-top: 5px;">
-									<text class="label">红包领取状态</text>
-									<!-- 发送中  1  已发送 -->
-									<text
-										class="value-num">{{item.redStatus == 1 ? '已发送': item.redStatus == 0 ? '发送中': item.redStatus}}</text>
-								</view>
-								<view style="margin-top: 5px;"><text class="label">观看时间</text><text
-										class="value-num">{{item.watchDate}}</text></view>
-							</view>
-							<!-- <view class="list-item-footer x-f">
-								<view class="list-item-footer-btn x-f" @click="openModel('name',item)">改姓名</view>
-								<view class="list-item-footer-btn x-f" @click="openModel('remark',item)">改备注</view>
-								<view class="list-item-footer-btn footer-tagbtn x-f" @click="openModel('tag',item)">改标签
-								</view>
-							</view> -->
-						</view>
-					</view>
-				</mescroll-body>
-			</view>
-			<!-- 修改名字/备注-->
-			<u-modal :show="modelShow" :title="modelTitle" content='content' class="model" :showCancelButton='true'
-				@cancel="closeModel" @confirm="confirmModel">
-				<view class="setTimebox">
-					<u-input fontSize="14px" :placeholder="modelTitle == '修改姓名' ? '请输入姓名':''" v-model="inputVal"
-						maxlength="5" style="width: 520rpx;"></u-input>
-				</view>
-			</u-modal>
-			<!-- 修改标签 -->
-			<u-popup :show="showTagSelect"  @close='closetagselect' :closeOnClickOverlay='true' mode="bottom">
-				<view class=" w100 bgf">
-					<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="justify-start p32">
-						<view class="mlr10 " 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="justify-between p32">
-						<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>
-</template>
-
-<script>
-	import {
-		getCompanyUserAndUserCount,
-		getshopCoursenum,
-		getUserLogListByCourseId,
-		updateFsUser,
-		getcompanyTaglist,
-		changeLable,
-		changeUserName,
-		getcourseRates
-	} from "@/api/manageCompany.js"
-	import funnelChart from '@/pages_manage/components/chart.vue'
-	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
-	export default {
-		mixins: [MescrollMixin],
-		components: {
-			funnelChart,
-		},
-		data() {
-			return {
-				modelShow: false,
-				showTagSelect:false,
-				changetag:'',
-				modelTitle: '',
-				inputVal: '',
-				info: {},
-				list1: [{
-					name: '课程数据',
-				}, {
-					name: '参与记录',
-				}],
-				current: 0,
-				list2: [{
-					name: '答题领奖记录',
-					label: '答题领奖记录',
-					value: 0
-				}, {
-					name: '完播',
-					label: '完播',
-					value: 1
-				}, {
-					name: '未完播',
-					label: '未完播',
-					value: 2
-				}],
-				currentType: 0,
-				activeStyle: {
-					color: '#1677ff',
-					fontSize: '14px',
-					fontWeight: 'bold'
-				},
-				inactiveStyle: {
-					fontSize: '14px'
-				},
-				collapseValue: ['live', 'questions', 'funnelplot'],
-				keyword: '',
-				disabled: false,
-				searchTypeIndex: 0,
-				typeArray: ['按看课时间从晚到早', '按完播时间从晚到早', '按注册时间从晚到早', '按会员姓名0-9-A-Z'],
-				typeoption: ['看课时间', '完播时间', '注册时间', '会员姓名'],
-				typeoptionOrder: ['desc', 'watchDesc', 'registerDesc', 'nameDesc'],
-				mescroll: null,
-				downOption: {
-					auto: false //不要自动加载
-				},
-				upOption: {
-					onScroll: false,
-					use: true, // 是否启用上拉加载; 默认true
-					page: {
-						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
-						size: 10 // 每页数据的数量,默认10
-					},
-					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
-					textNoMore: "已经到底了",
-					empty: {
-						icon: this.$store.state.imgpath+'/app/images/empty.png',
-						tip: '暂无数据'
-					}
-				},
-				dataList: [],
-				user: {},
-				todayday: uni.$u.timeFormat(new Date(), 'yyyy-mm-dd'),
-				courseCount: {},
-				courseId: '',
-				chooseUserId: '',
-				companytag:[],
-				selectidtag:[],
-				getrateimg: {},
-				ratelistState:false,
-				videoId:''
-			}
-		},
-		computed: {
-		    imgPath() {
-		      return this.$store.state.imgpath
-		    }
-		},
-		onLoad(option) {
-			this.info = option.info ? JSON.parse(option.info) : {},
-			this.videoId=this.info.videoId
-			console.log(this.info)
-			uni.setNavigationBarTitle({
-				title: '数据统计'
-			});
-			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
-			this.courseId = this.info.courseId || ''
-			this.getrateList()
-			if (this.courseId)
-				this.getCount()
-		},
-		methods: {
-			getkeyword(value){
-				this.keyword=value
-				this.upCallback()
-			},
-			//转化时间格式
-			 formatSeconds(seconds) {
-			  const hours = Math.floor(seconds / 3600);
-			  const minutes = Math.floor((seconds % 3600) / 60);
-			  const remainingSeconds = seconds % 60;
-			  
-			  // 补零函数:确保两位数显示
-			  const pad = (num) => num.toString().padStart(2, '0');
-			  
-			  return `${pad(hours)}:${pad(minutes)}:${pad(remainingSeconds)}`;
-			},
-			getrateList(){
-				//获取漏斗图
-				const params={
-					videoId:this.info.courseId,	
-					periodId:this.info.periodId
-				}
-				getcourseRates(params).then(res=>{
-					if(res.code==200){
-						this.ratelistState = res.data.every(item => item.value === 0);
-						this.getrateimg=res
-						console.log(res)
-					}else{
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-			},
-			suretagchangeAll(){
-				this.selectidtag = this.changetag.filter(item => item.checked).map(v=>v.tagId).join(',')
-				this.changeLabelmore()
-			},
-			changeLabelmore() {
-				//改标签选择按钮
-				const selid=[]
-				selid[0]=this.chooseUserId
-				const params = {
-					companyId: this.user.companyId,
-					companyUserId: this.user.userId,
-					creatTime: '',
-					createBy: '',
-					createTime: '',
-					id: '',
-					params: {},
-					remark: '',
-					searchValue: '',
-					updateBy: '',
-					tagIds:this.selectidtag,
-					updateTime: '',
-					userId: selid
-				}
-				changeLable(params).then(res => {
-					if (res.code == 200) {
-						const timer = setTimeout(function() {
-							uni.showToast({
-								icon: 'none',
-								title: '标签更改成功'
-							})
-						}, 500);
-						this.showTagSelect = !this.showTagSelect
-						this.mescroll.resetUpScroll()
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-			},
-			closetagselect() {
-				this.showTagSelect = !this.showTagSelect
-			},
-			choosechangeTag(i) {
-				this.changetag[i].checked = !this.changetag[i].checked
-			},
-			getcompanyTag() {
-				getcompanyTaglist().then(res => {
-					this.showCompanytag = res.data
-					this.companytag = res.data.map(item => {
-						return {
-							...item,
-							checked: false,
-						}
-					})
-					this.changetag=this.companytag
-				})
-			},
-			copyId(name) {
-				setTimeout(()=>{
-					uni.setClipboardData({
-						data: name,
-						success: () => {
-							uni.showToast({
-								title: '用户昵称复制成功',
-								icon: 'none'
-							})
-						}
-					});
-				},100)
-			},
-			clickTab(e) {
-				this.current = e.index
-			},
-			clickTypeTab(e) {
-				this.currentType = e.index
-				this.mescroll.resetUpScroll()
-			},
-			bindPickerChange(e) {
-				console.log('picker发送选择改变,携带值为', e.detail.value)
-				this.searchTypeIndex = e.detail.value
-			},
-			changeCollapse(e) {
-				this.collapseValue = e.filter(item => item.status == 'open').map(it => it.name)
-			},
-			refresh() {
-				this.mescroll.resetUpScroll()
-			},
-			mescrollInit(mescroll) {
-				this.mescroll = mescroll;
-			},
-			/*下拉刷新的回调 */
-			downCallback(mescroll) {
-				mescroll.resetUpScroll()
-			},
-			upCallback(page) {
-				//联网加载数据
-				var that = this;
-				var data = {
-					videoId: this.videoId,
-					type: this.list2[this.currentType].value, // 0:答题正确 1:未完播 2:已完播 3:未播放
-					pageNum: page.num,
-					pageSize: page.size,
-					keyword:this.keyword,
-					periodId:this.info.periodId
-				};
-				uni.showLoading({
-					title: "加载中..."
-				})
-				// this.list2[this.currentType].name = this.list2[this.currentType].label
-				getUserLogListByCourseId(data).then(res => {
-					uni.hideLoading()
-					if (res.code == 200) {
-						//设置列表数据
-						if (page.num == 1) {
-							that.dataList = res.data.list;
-
-						} else {
-							that.dataList = that.dataList.concat(res.data.list);
-
-						}
-						// this.list2[this.currentType].name = this.list2[this.currentType].label + (res.data.total)
-						that.mescroll.endBySize(res.data.list.length, res.data.total);
-
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: "请求失败",
-						});
-						that.dataList = null;
-						that.mescroll.endErr();
-					}
-				});
-			},
-			getCount() {
-				const param = {
-					videoId: this.videoId,
-					periodId:this.info.periodId
-					
-					// endTime: this.todayday + ' 23:59:59',
-					// startTime: this.todayday + ' 00:00:00',
-				}
-				this.getCourseCount(param)
-			},
-			getCourseCount(param) {
-				getshopCoursenum(param).then(res => {
-					if (res.code == 200) {
-						this.courseCount = res.data
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: res.msg,
-						});
-					}
-				})
-			},
-			openModel(type, item) {
-				this.chooseUserId = item.userId
-				if (type == 'name') {
-					this.modelTitle = '修改姓名'
-					this.inputVal = item.nickName || ''
-					this.modelShow = true
-				} else if (type == 'remark') {
-					this.modelTitle = '修改备注'
-					this.inputVal = item.remark || ''
-					this.modelShow = true
-				}else{
-					this.getcompanyTag()
-					this.showTagSelect=!this.showTagSelect
-				}
-			},
-			closeModel() {
-				this.modelShow = false
-				this.inputVal = ''
-			},
-			confirmModel() {
-				this.modelShow = false
-				if (this.modelTitle == '修改姓名') {
-					const param = {
-						userId: this.chooseUserId,
-						nickName: this.inputVal,
-					}
-					this.updateFsUser(param)
-					// this.updataName()
-					
-				} else if (this.modelTitle == '修改备注') {
-					const param = {
-						userId: this.chooseUserId,
-						remark: this.inputVal,
-					}
-					this.updateFsUser(param)
-					// this.updataName()
-				}
-			},
-			updateFsUser(param) {
-				console.log(param)
-				updateFsUser(param).then(res => {
-					if (res.code == 200) {
-						uni.showToast({
-							icon: 'none',
-							title: '标签更改成功'
-						})
-						this.redPacketCount = res.data
-						this.mescroll.resetUpScroll()
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: res.msg,
-						});
-					}
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.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;
-	}
-	.containers {
-		position: relative;
-		z-index: 2;
-		font-family: PingFang SC, PingFang SC;
-		font-weight: 400;
-		font-size: 14px;
-		color: #222;
-
-		.topbg {
-			position: absolute;
-			z-index: -1;
-			top: 0;
-			left: 0;
-			width: 100%;
-			height: 280px;
-		}
-
-		&-body {}
-
-		.coursebox {
-			padding: 120px 50rpx 20px 50rpx;
-			font-family: PingFang SC, PingFang SC;
-			font-weight: 400;
-			font-size: 14px;
-			color: #888;
-
-			.status {
-				position: absolute;
-				top: 0;
-				right: 0;
-				z-index: 2;
-				height: 30px;
-				padding: 0 8px;
-				box-sizing: border-box;
-				line-height: 30px;
-				border-radius: 0 12px 0 12px;
-				text-align: center;
-				color: #fff;
-				background-color: #08ce36;
-			}
-
-			&-info {
-				padding: 12px;
-				background-color: rgba(255, 255, 255, 0.8);
-				border-radius: 12px;
-				overflow: hidden;
-				position: relative;
-			}
-
-			&-name {
-				color: #222;
-				font-weight: bold;
-				font-size: 16px;
-				padding-right: 50px;
-
-				.more-t {
-					flex: 1;
-					font-size: 14px;
-					color: #222;
-					display: inline;
-				}
-			}
-
-			&-time-item {
-				flex: 1;
-				margin-top: 5px;
-			}
-
-			&-time-t {
-				color: #222;
-				font-weight: bold;
-				margin-top: 5px;
-				font-size: 12px;
-			}
-
-			.duration {
-				position: relative;
-				// padding-left: 14px;
-
-				&::after {
-					content: "";
-					height: 30px;
-					width: 1px;
-					background-color: #f5f5f5;
-					position: absolute;
-					left: 0;
-					top: 5px;
-				}
-			}
-		}
-	}
-
-	.statistics {
-		background-color: #fff;
-
-		&-title {
-			font-family: PingFang SC, PingFang SC;
-			font-weight: bold;
-			font-size: 16px;
-			color: #222222;
-		}
-
-		&-title-tip {
-			font-weight: 400;
-			font-size: 11px;
-			color: #999;
-			padding-left: 10px;
-		}
-
-		&-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;
-				}
-			}
-		}
-
-		.redenvelope {
-			background-color: #f5f5f5;
-			margin-right: 8px;
-			margin-top: 4px;
-			padding: 15px;
-			box-sizing: border-box;
-			border-radius: 10px;
-			color: #222222;
-
-			image {
-				width: 50px;
-				height: 50px;
-				margin-right: 10px;
-			}
-		}
-	}
-
-	.participate-search {
-		background-color: #fff;
-		padding: 10px 15px;
-
-		.refresh {
-			height: 26px;
-			min-width: 40px;
-			width: 40px;
-			padding: 0;
-			display: inline-flex;
-			margin-left: 15px;
-			border-radius: 5px;
-			overflow: hidden;
-		}
-	}
-
-	.participate-order {
-		font-size: 12px;
-
-		image {
-			width: 15px;
-			height: 15px;
-		}
-	}
-
-	.btn_icon {
-		font-weight: 400;
-		font-size: 14px;
-		color: #1677ff;
-		display: inline-flex;
-		align-items: center;
-		margin-left: 5px;
-
-		image {
-			width: 20px;
-			height: 20px;
-		}
-	}
-
-	.list {
-		padding: 20px 10px;
-	}
-
-	.list-item {
-		padding: 10px;
-		margin-bottom: 10px;
-		background-color: #fff;
-		border-radius: 12px;
-
-		&-head {
-			.phone {
-				flex-shrink: 0;
-				width: 30px;
-				height: 30px;
-			}
-
-			&-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 5px 0;
-			}
-		}
-
-		&-footer {
-			justify-content: flex-end;
-			padding: 6px 0;
-
-			.footer-tagbtn {
-				color: #1677ff;
-				background-color: #e7f2fe;
-				border: 1px solid #c9e1fb;
-			}
-
-			&-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;
-			}
-		}
-	}
+<template>
+	<view class="containers">
+		<image class="topbg" :src="info.thumbnail" mode="aspectFill"></image>
+		<view class="container-body">
+			<view class="coursebox">
+				<view class="coursebox-info">
+					<view class="coursebox-name">
+						<text class="more-t">{{info.title}}-{{info.courseName}}</text>
+						<view class="btn_icon" @click="copyId">ID
+							<image :src="imgPath+'/app/images/copy_icon.png'" mode="aspectFill"></image>
+						</view>
+					</view>
+					<view style="margin-top: 5px;">{{info.courseName}}</view>
+					<view class="coursebox-time x-start">
+						<!-- <view class="coursebox-time-item" style="margin-right: 14px;">
+							<view>直播时间</view>
+							<view class="coursebox-time-t">{{info.createTime}}</view>
+						</view> -->
+						<view class="coursebox-time-item duration">
+							<view class="fs24">课程时长</view>
+							<view class="coursebox-time-t">
+							{{formatSeconds(info.duration || 0,1)}}</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="statistics">
+				<u-tabs :list="list1" :current='current' :scrollable="false" :lineWidth="40" lineColor="#1677ff"
+					:activeStyle="activeStyle" :inactiveStyle="inactiveStyle" @click="clickTab"></u-tabs>
+				<u-collapse :border='false' :value='collapseValue' @change="changeCollapse" v-if="current == 0">
+					<!-- #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 -->
+						<view slot="value"
+							class="statistics-slot-title">{{collapseValue.includes('live')?'收回':'展开'}}</view>
+						<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 || 0}}</text>人</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>
+							<view class="collapse-content-item">
+								<view class="collapse-content-title">完播率</view>
+								<view class="collapse-content-num"><text>{{courseCount.courseCompleteRate || 0}}</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 -->
+						<view slot="value"
+							class="statistics-slot-title">{{collapseValue.includes('questions')?'收回':'展开'}}</view>
+						<view slot="right-icon">
+							<u-icon name="arrow-right" color="#1677ff" size="12"></u-icon>
+						</view>
+						<view class="collapse-content">
+							<view class="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>
+								<view class="collapse-content-item">
+									<view class="collapse-content-title">正确人数</view>
+									<view class="collapse-content-num"><text>{{courseCount.answerRightNum || 0}}</text>人
+									</view>
+								</view>
+								<view class="collapse-content-item">
+									<view class="collapse-content-title">答题红包数</view>
+									<view class="collapse-content-num"><text>{{courseCount.redPacketNum || 0}}</text>个
+									</view>
+								</view>
+							</view>
+							<view class="redenvelope x-bc">
+								<view class="x-f">
+									<image :src="imgPath+'/app/images/redenvelope.png'" mode="aspectFill"></image>
+									<text>答题红包金额</text>
+								</view>
+								<view class="collapse-content-num"><text>{{courseCount.redPacketAmount || '0.00'}}</text>元
+								</view>
+							</view>
+						</view>
+					</u-collapse-item>
+					<!-- #ifdef MP-WEIXIN -->
+					<u-collapse-item name="funnelplot" title="转化漏斗图">
+					<!-- #endif -->
+					<!-- #ifndef MP-WEIXIN -->
+					<u-collapse-item name="funnelplot">
+						<text slot="title" class="bold fs32">转化漏斗图</text>
+					<!-- #endif -->
+						<view slot="value"
+							class="statistics-slot-title">{{collapseValue.includes('funnelplot')?'收回':'展开'}}</view>
+						<view slot="right-icon">
+							<u-icon name="arrow-right" color="#1677ff" size="12"></u-icon>
+						</view>
+						<view style="height: 600rpx;" v-if="!ratelistState">
+							<funnelChart :getratelist="getrateimg"/>
+						</view>
+						<view v-show="ratelistState" class="center">暂无数据</view>
+					</u-collapse-item>
+				</u-collapse>
+			</view>
+			<!-- 参与记录 -->
+			<view v-if="current == 1">
+				<view class="participate-search">
+					<view class="x-bc">
+						<view class="flex-1">
+							<u-search placeholder="会员ID、昵称、姓名、手机" v-model="keyword" :showAction="false"
+								height="30px" @search="getkeyword"></u-search>
+						</view>
+						<view>
+							<u-button type="primary" class="refresh" color='#1677ff' size="small" :disabled="disabled"
+								text="刷新" @click="refresh"></u-button>
+						</view>
+						
+					</view>
+					<view class="x-bc">
+						<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 == 3">
+							</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>
+				<mescroll-body top="0" bottom="0" ref="mescrollRef" @init="mescrollInit" :down="downOption"
+					:up="upOption" @down="downCallback" @up="upCallback">
+					<view class="list">
+						<view class="list-item" v-for="(item,index) in dataList" :key="index">
+							<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;">
+											<text class="list-item-name one-t">{{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>
+										<view class="list-item-re">
+											注册时间:{{item.createTime?item.createTime.substring(0,10):'--'}}</view>
+									</view>
+								</view>
+								<!-- <image class="phone" :src="imgPath+'/app/images/phone.png'" mode="aspectFill"></image> -->
+							</view>
+							<view class="list-item-desc">
+								<view class="taglist">
+									<view v-for="(e,i) in item.tags" :key="i">
+										<u-tag :text="e.tag" size="mini" color="#999" bgColor="#f5f5f5"
+											borderColor="#f5f5f5"></u-tag>
+									</view>
+								</view>
+								<view style="margin-top: 5px;">
+									<text class="label">观看次数</text><text
+										class="value-num">{{item.watchCount || 0}}</text>
+									<text class="label">完播次数</text><text
+										class="value-num">{{item.finishCount || 0}}</text>
+									<text class="label">累计时长</text><text
+										class="value-num"> {{$formatSeconds(item.watchTime,1)}}</text>
+								</view>
+								<view style="margin-top: 5px;">
+									<text class="label">累计观看天数</text><text
+										class="value-num">{{item.watchLjCount || 0}}</text>
+									<text class="label">连续看课天数</text><text
+										class="value-num">{{item.watchLxCount || 0}}</text>
+								</view>
+								<view style="margin-top: 5px;">
+									<text class="label">红包领取状态</text>
+									<!-- 发送中  1  已发送 -->
+									<text
+										class="value-num">{{item.redStatus == 1 ? '已发送': item.redStatus == 0 ? '发送中': item.redStatus}}</text>
+								</view>
+								<view style="margin-top: 5px;"><text class="label">观看时间</text><text
+										class="value-num">{{item.watchDate}}</text></view>
+							</view>
+							<!-- <view class="list-item-footer x-f">
+								<view class="list-item-footer-btn x-f" @click="openModel('name',item)">改姓名</view>
+								<view class="list-item-footer-btn x-f" @click="openModel('remark',item)">改备注</view>
+								<view class="list-item-footer-btn footer-tagbtn x-f" @click="openModel('tag',item)">改标签
+								</view>
+							</view> -->
+						</view>
+					</view>
+				</mescroll-body>
+			</view>
+			<!-- 修改名字/备注-->
+			<u-modal :show="modelShow" :title="modelTitle" content='content' class="model" :showCancelButton='true'
+				@cancel="closeModel" @confirm="confirmModel">
+				<view class="setTimebox">
+					<u-input fontSize="14px" :placeholder="modelTitle == '修改姓名' ? '请输入姓名':''" v-model="inputVal"
+						maxlength="5" style="width: 520rpx;"></u-input>
+				</view>
+			</u-modal>
+			<!-- 修改标签 -->
+			<u-popup :show="showTagSelect"  @close='closetagselect' :closeOnClickOverlay='true' mode="bottom">
+				<view class=" w100 bgf">
+					<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="justify-start p32">
+						<view class="mlr10 " 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="justify-between p32">
+						<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>
+</template>
+
+<script>
+	import {
+		getCompanyUserAndUserCount,
+		getshopCoursenum,
+		getUserLogListByCourseId,
+		updateFsUser,
+		getcompanyTaglist,
+		changeLable,
+		changeUserName,
+		getcourseRates
+	} from "@/api/manageCompany.js"
+	import funnelChart from '@/pages_manage/components/chart.vue'
+	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
+	export default {
+		mixins: [MescrollMixin],
+		components: {
+			funnelChart,
+		},
+		data() {
+			return {
+				modelShow: false,
+				showTagSelect:false,
+				changetag:'',
+				modelTitle: '',
+				inputVal: '',
+				info: {},
+				list1: [{
+					name: '课程数据',
+				}, {
+					name: '参与记录',
+				}],
+				current: 0,
+				list2: [{
+					name: '答题领奖记录',
+					label: '答题领奖记录',
+					value: 0
+				}, {
+					name: '完播',
+					label: '完播',
+					value: 1
+				}, {
+					name: '未完播',
+					label: '未完播',
+					value: 2
+				}],
+				currentType: 0,
+				activeStyle: {
+					color: '#1677ff',
+					fontSize: '14px',
+					fontWeight: 'bold'
+				},
+				inactiveStyle: {
+					fontSize: '14px'
+				},
+				collapseValue: ['live', 'questions', 'funnelplot'],
+				keyword: '',
+				disabled: false,
+				searchTypeIndex: 0,
+				typeArray: ['按看课时间从晚到早', '按完播时间从晚到早', '按注册时间从晚到早', '按会员姓名0-9-A-Z'],
+				typeoption: ['看课时间', '完播时间', '注册时间', '会员姓名'],
+				typeoptionOrder: ['desc', 'watchDesc', 'registerDesc', 'nameDesc'],
+				mescroll: null,
+				downOption: {
+					auto: false //不要自动加载
+				},
+				upOption: {
+					onScroll: false,
+					use: true, // 是否启用上拉加载; 默认true
+					page: {
+						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
+						size: 10 // 每页数据的数量,默认10
+					},
+					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
+					textNoMore: "已经到底了",
+					empty: {
+						icon: this.$store.state.imgpath+'/app/images/empty.png',
+						tip: '暂无数据'
+					}
+				},
+				dataList: [],
+				user: {},
+				todayday: uni.$u.timeFormat(new Date(), 'yyyy-mm-dd'),
+				courseCount: {},
+				courseId: '',
+				chooseUserId: '',
+				companytag:[],
+				selectidtag:[],
+				getrateimg: {},
+				ratelistState:false,
+				videoId:''
+			}
+		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		},
+		onLoad(option) {
+			this.info = option.info ? JSON.parse(option.info) : {},
+			this.videoId=this.info.videoId
+			console.log(this.info)
+			uni.setNavigationBarTitle({
+				title: '数据统计'
+			});
+			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
+			this.courseId = this.info.courseId || ''
+			this.getrateList()
+			if (this.courseId)
+				this.getCount()
+		},
+		methods: {
+			getkeyword(value){
+				this.keyword=value
+				this.upCallback()
+			},
+			//转化时间格式
+			 formatSeconds(seconds) {
+			  const hours = Math.floor(seconds / 3600);
+			  const minutes = Math.floor((seconds % 3600) / 60);
+			  const remainingSeconds = seconds % 60;
+			  
+			  // 补零函数:确保两位数显示
+			  const pad = (num) => num.toString().padStart(2, '0');
+			  
+			  return `${pad(hours)}:${pad(minutes)}:${pad(remainingSeconds)}`;
+			},
+			getrateList(){
+				//获取漏斗图
+				const params={
+					videoId:this.info.courseId,	
+					periodId:this.info.periodId
+				}
+				getcourseRates(params).then(res=>{
+					if(res.code==200){
+						this.ratelistState = res.data.every(item => item.value === 0);
+						this.getrateimg=res
+						console.log(res)
+					}else{
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			suretagchangeAll(){
+				this.selectidtag = this.changetag.filter(item => item.checked).map(v=>v.tagId).join(',')
+				this.changeLabelmore()
+			},
+			changeLabelmore() {
+				//改标签选择按钮
+				const selid=[]
+				selid[0]=this.chooseUserId
+				const params = {
+					companyId: this.user.companyId,
+					companyUserId: this.user.userId,
+					creatTime: '',
+					createBy: '',
+					createTime: '',
+					id: '',
+					params: {},
+					remark: '',
+					searchValue: '',
+					updateBy: '',
+					tagIds:this.selectidtag,
+					updateTime: '',
+					userId: selid
+				}
+				changeLable(params).then(res => {
+					if (res.code == 200) {
+						const timer = setTimeout(function() {
+							uni.showToast({
+								icon: 'none',
+								title: '标签更改成功'
+							})
+						}, 500);
+						this.showTagSelect = !this.showTagSelect
+						this.mescroll.resetUpScroll()
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			closetagselect() {
+				this.showTagSelect = !this.showTagSelect
+			},
+			choosechangeTag(i) {
+				this.changetag[i].checked = !this.changetag[i].checked
+			},
+			getcompanyTag() {
+				getcompanyTaglist().then(res => {
+					this.showCompanytag = res.data
+					this.companytag = res.data.map(item => {
+						return {
+							...item,
+							checked: false,
+						}
+					})
+					this.changetag=this.companytag
+				})
+			},
+			copyId(name) {
+				setTimeout(()=>{
+					uni.setClipboardData({
+						data: name,
+						success: () => {
+							uni.showToast({
+								title: '用户昵称复制成功',
+								icon: 'none'
+							})
+						}
+					});
+				},100)
+			},
+			clickTab(e) {
+				this.current = e.index
+			},
+			clickTypeTab(e) {
+				this.currentType = e.index
+				this.mescroll.resetUpScroll()
+			},
+			bindPickerChange(e) {
+				console.log('picker发送选择改变,携带值为', e.detail.value)
+				this.searchTypeIndex = e.detail.value
+			},
+			changeCollapse(e) {
+				this.collapseValue = e.filter(item => item.status == 'open').map(it => it.name)
+			},
+			refresh() {
+				this.mescroll.resetUpScroll()
+			},
+			mescrollInit(mescroll) {
+				this.mescroll = mescroll;
+			},
+			/*下拉刷新的回调 */
+			downCallback(mescroll) {
+				mescroll.resetUpScroll()
+			},
+			upCallback(page) {
+				//联网加载数据
+				var that = this;
+				var data = {
+					videoId: this.videoId,
+					type: this.list2[this.currentType].value, // 0:答题正确 1:未完播 2:已完播 3:未播放
+					pageNum: page.num,
+					pageSize: page.size,
+					keyword:this.keyword,
+					periodId:this.info.periodId
+				};
+				uni.showLoading({
+					title: "加载中..."
+				})
+				// this.list2[this.currentType].name = this.list2[this.currentType].label
+				getUserLogListByCourseId(data).then(res => {
+					uni.hideLoading()
+					if (res.code == 200) {
+						//设置列表数据
+						if (page.num == 1) {
+							that.dataList = res.data.list;
+
+						} else {
+							that.dataList = that.dataList.concat(res.data.list);
+
+						}
+						// this.list2[this.currentType].name = this.list2[this.currentType].label + (res.data.total)
+						that.mescroll.endBySize(res.data.list.length, res.data.total);
+
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: "请求失败",
+						});
+						that.dataList = null;
+						that.mescroll.endErr();
+					}
+				});
+			},
+			getCount() {
+				const param = {
+					videoId: this.videoId,
+					periodId:this.info.periodId
+					
+					// endTime: this.todayday + ' 23:59:59',
+					// startTime: this.todayday + ' 00:00:00',
+				}
+				this.getCourseCount(param)
+			},
+			getCourseCount(param) {
+				getshopCoursenum(param).then(res => {
+					if (res.code == 200) {
+						this.courseCount = res.data
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg,
+						});
+					}
+				})
+			},
+			openModel(type, item) {
+				this.chooseUserId = item.userId
+				if (type == 'name') {
+					this.modelTitle = '修改姓名'
+					this.inputVal = item.nickName || ''
+					this.modelShow = true
+				} else if (type == 'remark') {
+					this.modelTitle = '修改备注'
+					this.inputVal = item.remark || ''
+					this.modelShow = true
+				}else{
+					this.getcompanyTag()
+					this.showTagSelect=!this.showTagSelect
+				}
+			},
+			closeModel() {
+				this.modelShow = false
+				this.inputVal = ''
+			},
+			confirmModel() {
+				this.modelShow = false
+				if (this.modelTitle == '修改姓名') {
+					const param = {
+						userId: this.chooseUserId,
+						nickName: this.inputVal,
+					}
+					this.updateFsUser(param)
+					// this.updataName()
+					
+				} else if (this.modelTitle == '修改备注') {
+					const param = {
+						userId: this.chooseUserId,
+						remark: this.inputVal,
+					}
+					this.updateFsUser(param)
+					// this.updataName()
+				}
+			},
+			updateFsUser(param) {
+				console.log(param)
+				updateFsUser(param).then(res => {
+					if (res.code == 200) {
+						uni.showToast({
+							icon: 'none',
+							title: '标签更改成功'
+						})
+						this.redPacketCount = res.data
+						this.mescroll.resetUpScroll()
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg,
+						});
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.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;
+	}
+	.containers {
+		position: relative;
+		z-index: 2;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 14px;
+		color: #222;
+
+		.topbg {
+			position: absolute;
+			z-index: -1;
+			top: 0;
+			left: 0;
+			width: 100%;
+			height: 280px;
+		}
+
+		&-body {}
+
+		.coursebox {
+			padding: 120px 50rpx 20px 50rpx;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 14px;
+			color: #888;
+
+			.status {
+				position: absolute;
+				top: 0;
+				right: 0;
+				z-index: 2;
+				height: 30px;
+				padding: 0 8px;
+				box-sizing: border-box;
+				line-height: 30px;
+				border-radius: 0 12px 0 12px;
+				text-align: center;
+				color: #fff;
+				background-color: #08ce36;
+			}
+
+			&-info {
+				padding: 12px;
+				background-color: rgba(255, 255, 255, 0.8);
+				border-radius: 12px;
+				overflow: hidden;
+				position: relative;
+			}
+
+			&-name {
+				color: #222;
+				font-weight: bold;
+				font-size: 16px;
+				padding-right: 50px;
+
+				.more-t {
+					flex: 1;
+					font-size: 14px;
+					color: #222;
+					display: inline;
+				}
+			}
+
+			&-time-item {
+				flex: 1;
+				margin-top: 5px;
+			}
+
+			&-time-t {
+				color: #222;
+				font-weight: bold;
+				margin-top: 5px;
+				font-size: 12px;
+			}
+
+			.duration {
+				position: relative;
+				// padding-left: 14px;
+
+				&::after {
+					content: "";
+					height: 30px;
+					width: 1px;
+					background-color: #f5f5f5;
+					position: absolute;
+					left: 0;
+					top: 5px;
+				}
+			}
+		}
+	}
+
+	.statistics {
+		background-color: #fff;
+
+		&-title {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: bold;
+			font-size: 16px;
+			color: #222222;
+		}
+
+		&-title-tip {
+			font-weight: 400;
+			font-size: 11px;
+			color: #999;
+			padding-left: 10px;
+		}
+
+		&-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;
+				}
+			}
+		}
+
+		.redenvelope {
+			background-color: #f5f5f5;
+			margin-right: 8px;
+			margin-top: 4px;
+			padding: 15px;
+			box-sizing: border-box;
+			border-radius: 10px;
+			color: #222222;
+
+			image {
+				width: 50px;
+				height: 50px;
+				margin-right: 10px;
+			}
+		}
+	}
+
+	.participate-search {
+		background-color: #fff;
+		padding: 10px 15px;
+
+		.refresh {
+			height: 26px;
+			min-width: 40px;
+			width: 40px;
+			padding: 0;
+			display: inline-flex;
+			margin-left: 15px;
+			border-radius: 5px;
+			overflow: hidden;
+		}
+	}
+
+	.participate-order {
+		font-size: 12px;
+
+		image {
+			width: 15px;
+			height: 15px;
+		}
+	}
+
+	.btn_icon {
+		font-weight: 400;
+		font-size: 14px;
+		color: #1677ff;
+		display: inline-flex;
+		align-items: center;
+		margin-left: 5px;
+
+		image {
+			width: 20px;
+			height: 20px;
+		}
+	}
+
+	.list {
+		padding: 20px 10px;
+	}
+
+	.list-item {
+		padding: 10px;
+		margin-bottom: 10px;
+		background-color: #fff;
+		border-radius: 12px;
+
+		&-head {
+			.phone {
+				flex-shrink: 0;
+				width: 30px;
+				height: 30px;
+			}
+
+			&-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 5px 0;
+			}
+		}
+
+		&-footer {
+			justify-content: flex-end;
+			padding: 6px 0;
+
+			.footer-tagbtn {
+				color: #1677ff;
+				background-color: #e7f2fe;
+				border: 1px solid #c9e1fb;
+			}
+
+			&-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>

+ 124 - 124
pages_managedata/about.vue

@@ -1,124 +1,124 @@
-<template>
-	<view class="content">
-		<view class="logo">
-			<image :src="imgPath+'/app/image/logo.png'"></image>
-			<p>{{imgname}}</p>
-		</view>
-		<view class="set-box">
-			<!-- <view class="item" @click="callPhone()">
-				<view class="left">
-					<text class="text">联系我们</text>
-				</view>
-				<image class="right" :src="imgPath+'/app/images/right_arrow.png'" mode="aspectFill"></image>
-			</view> -->
-			<view style="height: 1px;background-color: #F7F7F7;"></view>
-			<view class="item">
-				<view class="left">
-					<text class="text">版本号</text>
-				</view>
-				<view class="right-text">
-					<text class="text">v{{version}}</text>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
- 
- export default {
- 	data() {
- 		return {
-			tel:undefined,
-			version:"1.0.0"
- 		}
- 	},
-	onLoad() {
-		var that=this;
-		// that.version = widgetinfo.version
-		
-	},
-	computed: {
-		    imgPath() {
-		      return this.$store.state.imgpath
-		    },
-			imgname() {
-			  return this.$store.state.logoname
-			},
-		  },
- 	methods: {
-		callPhone(){
-			uni.makePhoneCall({
-				phoneNumber: "4000717770"
-			})
-		},
- 		submit(){
- 			
- 		}
- 	}
- }
- 
- 
-</script>
-
-
-<style scoped lang="scss">
-page{
-	height: 100%;
-	background-color: #f5f5f5;
-}
-.content{
-	height: 100%;
-}
-.logo{
-	padding-top: 15%;
-	text-align: center;
-	
-	image{
-		padding: 15rpx;
-		width: 120rpx;
-		height: 120rpx;
-		border-radius: 10rpx;
-		box-shadow:0px 0px 20rpx rgba(0,0,0,0.2);
-	}
-	p{
-		margin: 10px 0px;
-		font-size: 14px;
-	}
-}
-.set-box{
-	margin-top: 30upx;
-	background: #fff;
-	padding: 0 40upx;
-	.item{
-		position: relative;
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		padding: 25upx 0;
-		.left{
-			display: flex;
-			align-items: center;
-			.text{
-				font-size: 28upx;
-				color: #666;
-			}
-		}
-		.right{
-			width: 10upx;
-			height: 20upx;
-		 
-		}
-		.right-text{
-			 
-		}
-	}
-}
-.contact-btn {
-	position: absolute;
-	width: 100%;
-	display: flex;
-	opacity: 0;
-}
-
-</style>
+<template>
+	<view class="content">
+		<view class="logo">
+			<image :src="imgPath+'/app/image/logo.png'"></image>
+			<p>{{imgname}}</p>
+		</view>
+		<view class="set-box">
+			<!-- <view class="item" @click="callPhone()">
+				<view class="left">
+					<text class="text">联系我们</text>
+				</view>
+				<image class="right" :src="imgPath+'/app/images/right_arrow.png'" mode="aspectFill"></image>
+			</view> -->
+			<view style="height: 1px;background-color: #F7F7F7;"></view>
+			<view class="item">
+				<view class="left">
+					<text class="text">版本号</text>
+				</view>
+				<view class="right-text">
+					<text class="text">v{{version}}</text>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+ 
+ export default {
+ 	data() {
+ 		return {
+			tel:undefined,
+			version:"1.0.0"
+ 		}
+ 	},
+	onLoad() {
+		var that=this;
+		// that.version = widgetinfo.version
+		
+	},
+	computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    },
+			imgname() {
+			  return this.$store.state.logoname
+			},
+		  },
+ 	methods: {
+		callPhone(){
+			uni.makePhoneCall({
+				phoneNumber: "4000717770"
+			})
+		},
+ 		submit(){
+ 			
+ 		}
+ 	}
+ }
+ 
+ 
+</script>
+
+
+<style scoped lang="scss">
+page{
+	height: 100%;
+	background-color: #f5f5f5;
+}
+.content{
+	height: 100%;
+}
+.logo{
+	padding-top: 15%;
+	text-align: center;
+	
+	image{
+		padding: 15rpx;
+		width: 120rpx;
+		height: 120rpx;
+		border-radius: 10rpx;
+		box-shadow:0px 0px 20rpx rgba(0,0,0,0.2);
+	}
+	p{
+		margin: 10px 0px;
+		font-size: 14px;
+	}
+}
+.set-box{
+	margin-top: 30upx;
+	background: #fff;
+	padding: 0 40upx;
+	.item{
+		position: relative;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		padding: 25upx 0;
+		.left{
+			display: flex;
+			align-items: center;
+			.text{
+				font-size: 28upx;
+				color: #666;
+			}
+		}
+		.right{
+			width: 10upx;
+			height: 20upx;
+		 
+		}
+		.right-text{
+			 
+		}
+	}
+}
+.contact-btn {
+	position: absolute;
+	width: 100%;
+	display: flex;
+	opacity: 0;
+}
+
+</style>

+ 621 - 621
pages_managedata/changeVip.vue

@@ -1,621 +1,621 @@
-<template>
-	<view class="column flex-1 hb">
-		<view class="p20 justify-between" > 
-			<view class="column base-bg-f8 p20 mr20 top-item" v-for="(item,index) in list" :key="index"
-			style="width: 50%;" @click="change(index)" :class="active==index?'top-itemActive':''">
-				<text class="fs28 bold mb4">{{item.name}}</text>
-				<text class="fs24 base-color-6">{{item.text}}</text>
-			</view>
-		</view>
-		<view class="pl20 " v-if="active==0">
-			<view class="mb20 fs28">选择接收销售</view>
-			<view class="base-bg-f8 p10 justify-between align-center mr20 pl20">
-				<text class="mr20">接收销售</text>
-				<view @click="selsome" class="flex-1" :class="username==''?'base-color-9':'color3'">{{username?username:'请选择销售'}}</view>
-			</view>
-			<view class='fs24 mtb12 base-color base-bg-sure mr20 pl20 ptb4'>
-				如更换全部会员,则包含小黑屋会员</view>
-				
-		</view>
-		<view v-else class="pl20 ">
-			<view class="mb20 fs28">选择会员</view>
-			<view class="base-bg-f8 p10 justify-between align-center mr20 pl20">
-				<text class="mr20">标签</text>
-				<view @click="changelabel" class="flex-1 fs28" :class="usertag==''?'base-color-9':'color3'">{{usertag?usertag:'请选择销售'}}</view>
-			</view>
-			<view class="base-bg-f8 p10 justify-between align-center mr20 pl20 mt20 " >
-				<text class="mr20">选择项目</text>
-				<view @click="changeproject" class="flex-1 fs28" :class="projectuser==''?'base-color-9':'color3'"
-				>{{projectuser?projectuser:'请选择项目'}}</view>
-			</view>
-			<view class="base-bg-f8 p10 justify-between align-center mr20 pl20 mt20 " >
-				<text class="mr20">选择会员</text>
-				<view @click="changelabelvip" class="flex-1 fs28" :class="tagsuser==''?'base-color-9':'color3'"
-				>{{tagsuser?tagsuser:'请选择会员'}}</view>
-			</view>
-			<view class="mb20 fs28 mt20">选择接收销售</view>
-			<view class="base-bg-f8 p10 justify-between align-center mr20 pl20">
-				<text class="mr20">接收销售</text>
-				<view @click="changeuser" class="flex-1 fs28" :class="username==''?'base-color-9':'color3'"
-				>{{username?username:"请选择销售"}}</view>
-			</view>
-		</view>
-		<view class="foot-box justify-around">
-			<!-- <view class="box" style="border: 2rpx solid #eee;">取消</view> -->
-			<view class="box base-bg-blue colorf" @click="sure">确定</view>
-		</view>
-		<u-picker :show="show" :columns="columns" @cancel='show=!show' 
-		@confirm='receiveA' keyName="nickName"
-		></u-picker>
-		<u-picker :show="showb" :columns="columnsb" @cancel='showb=!showb' 
-		@confirm='receiveC' keyName="nickName"
-		></u-picker>
-		<u-popup :show="showvip" @close="close" @open="open" >
-			<view class="p20 h400">
-				<view class="mb20" style="text-align: center;">
-					<view style="display: inline-block; ">选择会员</view>
-					<u-icon name="close-circle" color="#ccc" size="28"
-					@click="showvip=!showvip" style="display: inline-block;float: right;"></u-icon>
-				</view>
-				<view class="justify-start wrap">
-					<view class="p16 mlr4" v-for="(item,index) in tagsuserlist" :key="index">
-						<u-tag :text="item.userName" :plain="!item.checked" type="primary" :name="index"
-								@click="checkboxClick">
-						</u-tag>
-					</view>
-					<view class="base-color-red fs24 bor-red p8 radius8 plr12" v-if="tagsuserlist.length==0">暂无会员</view>
-				</view>
-				<view class="centerV">
-					<view @click="getuserid" class="surebtn">确定</view>
-				</view>
-			</view>
-		</u-popup>
-		<u-popup :show="showproject" @close="showproject=!showproject"  >
-			<view class="p20 h400">
-				<view class="mb20" style="text-align: center;">
-					<view style="display: inline-block; ">选择项目</view>
-					<u-icon name="close-circle" color="#ccc" size="28"
-					@click="showproject=!showproject" style="display: inline-block;float: right;"></u-icon>
-				</view>
-				<view class="justify-start wrap">
-					<view class="p16 mlr12" v-for="(item,index) in projectlist" :key="index">
-						<u-tag :text="item.dictLabel" :plain="!item.checked" type="primary" :name="index"
-								@click="checkproClick">
-						</u-tag>
-					</view>
-					<view class="base-color-red fs24 bor-red p8 radius8 plr12" v-if="projectlist.length==0">暂无项目</view>
-				</view>
-				<view class="centerV">
-					<view @click="getprojectid" class="surebtn">确定</view>
-				</view>
-			</view>
-		</u-popup>
-		<u-popup :show="showPop" :round="12" @close="closePop" class="model" :zIndex="10076" style="flex: 0;">
-			<view class="popbox">
-				<view class="popbox-head">
-					<u-icon class="close-circle" name="close-circle" color="#ccc" size="24" @click="showPop=!showPop"></u-icon>
-					标签筛选
-				</view>
-				<view class="popbox-body">
-					<view class="mb20" >
-						<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" style="white-space: nowrap;flex-wrap: wrap;">
-							<view class="base-color-red fs24 bor-red p8 radius8 plr12" v-if="columnsa.length<=0">暂无标签</view>
-							<view class="mlr10 mb10" v-for="(item,index) in columnsa" :key='item.tagId'>
-									<u-tag :text="item.tag" :plain="!item.checked" :name="index"
-										@click="chooseTag(index)"></u-tag>
-							</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" >重置</button>
-					<button class="popbox-footer-btn con-btn" @click="confirmPop">确定</button>
-				</view>
-			</view>
-		</u-popup>
-	</view>
-</template>
-
-<script>
-	import {
-		getgroupList,
-		getallTags,
-		changevipUserAll,
-		gettagsUser,
-		getprojectChange
-	} from "@/api/manageCompany.js"
-	export default {
-		data() {
-			return {
-				list:[{
-					name:'更换全部会员归属',
-					text:'一键更换全部会员归属'
-				},{
-					name:'更换部分会员归属',
-					text:'通过筛选,定位会员更换归属'
-				}],
-				active:0,
-				show:false,
-				columns:[],
-				columnsa:[],
-				columnsb:[],
-				border:false,
-				groupList:[],
-				showa:false,
-				showb:false,
-				userid:0,
-				username:'',
-				usertag:'',
-				tagsid:[],
-				showvip:false,
-				groupid:0,
-				tagsuser:'',
-				tagsuserlist:[],
-				showproject:false,
-				projectuser:'',
-				projectlist:[],
-				user:[],
-				usertagsid:[],
-				showPop:false,
-				tagkeywords:'',
-				tagpageNum:1,
-				tagpageSize:10,
-				triggereds:false,
-				statusA: 'loadmore',
-				isEnableds: true,
-				pagetag:[],
-				ids:[],
-				projectid:[]
-			}
-		},
-		onLoad(option) {
-			this.groupid=option.id
-			console.log(option)
-		},
-		mounted() {
-			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
-		},
-		methods: {
-			getproject(){
-				const data={
-					companyUserId:this.groupid,
-					 tagIds:this.tagsid
-				}
-				getprojectChange(data).then(res=>{
-					if(res.code==200){
-						this.projectlist=res.data.map(item => {
-							return {
-								...item,
-								checked: false,
-							}
-						})
-					}else{
-						uni.showToast({
-							title:res.msg,
-							icon: 'none',
-							duration: 1000
-						}); 
-					}
-				})
-			},
-			resetPop(){
-				//重置标签
-				this.tagkeywords=''
-				this.usertag=''
-				this.projectuser=''
-				this.ids=[]
-				this.projectid=[]
-				this.tagpageNum=1
-				this.gettaglist()
-			},
-			getcompanyTag(value){
-				this.tagkeywords=value
-				this.tagpageNum=1
-				this.gettaglist()
-			},
-			confirmPop() {
-				//标签选择确定
-				this.showPop = false
-				this.usertag = this.columnsa.filter(item => item.checked).map(v => v.tag).join(',')
-				this.tagsid = this.columnsa.filter(item => item.checked).map(v => v.tagId)
-				this.projectid=[]
-				this.projectuser=''
-				this.ids=[]
-				this.tagsuser=''
-			},
-			chooseTag(i) {
-				this.columnsa[i].checked = !this.columnsa[i].checked
-			},
-			getTagpage(type){
-				//标签页数选择
-				if(type=='last'){
-					if(this.tagpageNum>=2){
-						this.tagpageNum--
-						this.gettaglist()
-					}else{
-						uni.showToast({
-							title: '已经是第一页',
-							icon: 'none',
-							duration: 1000
-						}); 
-					}
-				}else{
-					if(this.tagpageNum<this.pagetag.pages){
-						this.tagpageNum++
-						this.gettaglist()
-					}else{
-						uni.showToast({
-							title: '已经是最后一页',
-							icon: 'none',
-							duration: 1000
-						}); 
-					}
-				}
-			},
-			//标签展示下拉
-			pullDownRefreshs() {
-				// 下拉
-				this.triggereds = true; //下拉了状态为true
-				setTimeout(() => {
-					this.triggereds = false;
-					uni.stopPullDownRefresh()
-					this.tagpageNum = 1;
-					this.gettaglist('refresh') //触底  不穿执行else
-					// 请求接口里面需要判断是不是最后一页   是最后一页 status赋值为‘loadmore’没有更多了
-					// 请求接口
-				}, 1000)
-			},
-			closePop(){
-				this.showPop=!this.showPop
-				console.log(123)
-			},
-			checkboxClick(name){
-				this.tagsuserlist[name].checked = !this.tagsuserlist[name].checked
-			},
-			checkproClick(name){
-				this.projectlist[name].checked = !this.projectlist[name].checked
-			},
-			getprojectid(){
-				//确定项目
-				this.projectid=this.projectlist.filter(item => item.checked)
-				.map(v => v.dictValue)
-				this.projectuser=this.projectlist.filter(item => item.checked)
-				.map(v => v.dictLabel).join(',')
-				this.showproject=!this.showproject
-				this.ids=[]
-				this.tagsuser=''
-			},
-			getuserid(){
-				//会员确定
-				this.tagsuser = this.tagsuserlist.filter(item => item.checked)
-				.map(v => v.userName).join(',')
-				this.ids = this.tagsuserlist.filter(item => item.checked).map(v => {
-					return {projectId:v.projectId,userId:v.userId};
-				})
-				console.log(this.ids)
-				this.showvip=!this.showvip
-			},
-			close(){
-				this.showvip=!this.showvip
-			},
-			open(){
-				
-			},
-			changeproject(){
-				//选择项目
-				this.showproject=!this.showproject
-				this.projectlist=[]
-				this.getproject()
-			},
-			changelabelvip(){
-				this.showvip=!this.showvip
-				this.tagsuserlist=[]
-				this.gettagUserlist()
-			},
-			gettagUserlist(){
-				//会员列表
-				const param={
-					tagIds:this.tagsid,
-					projectIds:this.projectid,
-					companyUserId:this.groupid
-				}
-				gettagsUser(param).then(res=>{
-					if(res.code==200){
-						this.tagsuserlist=res.data.map(item => {
-							return {
-								...item,
-								checked: false,
-							}
-						})
-						console.log(this.tagsuserlist)
-					}
-				})
-			},
-			changeall(){
-				
-				//更换会员归属
-				const param={
-					from:this.groupid,//发送群主
-					to:this.userid,//接收群主
-					type:this.active,//1
-					ids:this.ids,
-					tagList:this.tagsid,
-					project:this.projectid
-				}
-				changevipUserAll(param).then(res=>{
-					if(res.code==200){
-						uni.showToast({
-							icon: 'none',
-							title: '更换会员归属成功'
-						})
-					}else{
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-			},
-			sure(){
-				if(this.active==0){
-					if(this.userid==''){
-						uni.showToast({
-							icon: 'none',
-							title: '请选择接收销售'
-						})
-					}else{
-						this.changeall()
-					}
-				}else{
-					if(this.ids.length==0&&this.projectid.length==0&&this.tagsid.length==0){
-						uni.showToast({
-							icon: 'none',
-							title: '请选择标签或者项目'
-						})
-					}else if(this.userid==''){
-						uni.showToast({
-							icon: 'none',
-							title: '请选择接收销售'
-						})
-					}else{
-						this.changeall()
-					}
-				}
-			},
-			receiveC(e){
-				this.username=e.value[0].nickName
-				this.userid=e.value[0].userId
-				this.showb=!this.showb
-			},
-			receiveA(e){
-				this.username=e.value[0].nickName
-				this.userid=e.value[0].userId
-				this.show=!this.show
-			},
-			change(index){
-				this.active=index
-				this.username=''
-			},
-			selsome(){
-				console.log(12)
-				this.show=true
-				this.getgrouplist()
-			},
-			changelabel(){
-				this.showPop=true
-				this.gettaglist()
-			},
-			changeuser(){
-				this.showb=true
-				this.getgrouplist()
-			},
-			gettaglist(type){
-				//获取标签列表
-				uni.showLoading({
-					title:'加载中...'
-				})
-				const data={
-					pageNum:this.tagpageNum,
-					pageSize:this.tagpageSize,
-					keyword:this.tagkeywords,
-					companyUserId:this.groupid
-				}
-				getallTags(data).then(res=>{
-					if(res.code==200){
-						uni.hideLoading()
-						const dataList = res.data.list.map(item => {
-							return {
-								...item,
-								checked: false,
-							}
-						})
-						if (type == 'refresh') {
-							this.columnsa = dataList
-						}else {
-							// this.columnsa = [...this.columnsa, ...dataList]
-							this.columnsa = dataList
-						}
-						if (res.data.isLastPage) {
-							this.statusA = 'nomore'
-						} else {
-							this.statusA = 'loadmore'
-						}
-						this.pagetag=res.data
-						this.changetag = this.columnsa
-					}else{
-						uni.hideLoading()
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-			},
-			getgrouplist(){
-				//获取销售列表
-				getgroupList().then(res=>{
-					if(res.code==200){
-						this.columns=[res.data]
-						this.columnsb=[res.data]
-						console.log(this.columns)
-					}else{
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.popbox {
-		background-color: #fff;
-		border-radius: 12px;
-		font-family: PingFang SC, PingFang SC;
-		font-weight: 400;
-		font-size: 14px;
-		color: #333;
-	
-		&-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;
-			}
-		}
-	}
-page{
-	background-color: #fff;
-}
-.top-itemActive{
-	color: #1773ff;
-	border-bottom: 4rpx solid #1773ff;
-	background-color: rgba(232,242,254,1);
-	text{
-		color: #1773ff !important;
-	}
-}
-.foot-box{
-	position: fixed;
-	bottom: 0;
-	width: 100%;
-	padding: 20rpx;
-}
-.box{
-	width:70%;
-	text-align: center;
-	padding: 16rpx 0;
-	border-radius: 50rpx;
-	font-size: 28rpx;
-}
-.box-list{
-	width: fit-content;
-	background-color: #eee;
-	border-radius: 10rpx;
-	font-size: 28rpx;
-}
-.surebtn{
-	position: absolute;
-	bottom: 0;
-	margin-bottom: 20rpx;
-	background-color: #1773ff;
-	color: #fff;
-	width: 80%;
-	text-align: center;
-	padding: 10rpx 0;
-	border-radius: 30rpx;
-}
-</style>
+<template>
+	<view class="column flex-1 hb">
+		<view class="p20 justify-between" > 
+			<view class="column base-bg-f8 p20 mr20 top-item" v-for="(item,index) in list" :key="index"
+			style="width: 50%;" @click="change(index)" :class="active==index?'top-itemActive':''">
+				<text class="fs28 bold mb4">{{item.name}}</text>
+				<text class="fs24 base-color-6">{{item.text}}</text>
+			</view>
+		</view>
+		<view class="pl20 " v-if="active==0">
+			<view class="mb20 fs28">选择接收销售</view>
+			<view class="base-bg-f8 p10 justify-between align-center mr20 pl20">
+				<text class="mr20">接收销售</text>
+				<view @click="selsome" class="flex-1" :class="username==''?'base-color-9':'color3'">{{username?username:'请选择销售'}}</view>
+			</view>
+			<view class='fs24 mtb12 base-color base-bg-sure mr20 pl20 ptb4'>
+				如更换全部会员,则包含小黑屋会员</view>
+				
+		</view>
+		<view v-else class="pl20 ">
+			<view class="mb20 fs28">选择会员</view>
+			<view class="base-bg-f8 p10 justify-between align-center mr20 pl20">
+				<text class="mr20">标签</text>
+				<view @click="changelabel" class="flex-1 fs28" :class="usertag==''?'base-color-9':'color3'">{{usertag?usertag:'请选择销售'}}</view>
+			</view>
+			<view class="base-bg-f8 p10 justify-between align-center mr20 pl20 mt20 " >
+				<text class="mr20">选择项目</text>
+				<view @click="changeproject" class="flex-1 fs28" :class="projectuser==''?'base-color-9':'color3'"
+				>{{projectuser?projectuser:'请选择项目'}}</view>
+			</view>
+			<view class="base-bg-f8 p10 justify-between align-center mr20 pl20 mt20 " >
+				<text class="mr20">选择会员</text>
+				<view @click="changelabelvip" class="flex-1 fs28" :class="tagsuser==''?'base-color-9':'color3'"
+				>{{tagsuser?tagsuser:'请选择会员'}}</view>
+			</view>
+			<view class="mb20 fs28 mt20">选择接收销售</view>
+			<view class="base-bg-f8 p10 justify-between align-center mr20 pl20">
+				<text class="mr20">接收销售</text>
+				<view @click="changeuser" class="flex-1 fs28" :class="username==''?'base-color-9':'color3'"
+				>{{username?username:"请选择销售"}}</view>
+			</view>
+		</view>
+		<view class="foot-box justify-around">
+			<!-- <view class="box" style="border: 2rpx solid #eee;">取消</view> -->
+			<view class="box base-bg-blue colorf" @click="sure">确定</view>
+		</view>
+		<u-picker :show="show" :columns="columns" @cancel='show=!show' 
+		@confirm='receiveA' keyName="nickName"
+		></u-picker>
+		<u-picker :show="showb" :columns="columnsb" @cancel='showb=!showb' 
+		@confirm='receiveC' keyName="nickName"
+		></u-picker>
+		<u-popup :show="showvip" @close="close" @open="open" >
+			<view class="p20 h400">
+				<view class="mb20" style="text-align: center;">
+					<view style="display: inline-block; ">选择会员</view>
+					<u-icon name="close-circle" color="#ccc" size="28"
+					@click="showvip=!showvip" style="display: inline-block;float: right;"></u-icon>
+				</view>
+				<view class="justify-start wrap">
+					<view class="p16 mlr4" v-for="(item,index) in tagsuserlist" :key="index">
+						<u-tag :text="item.userName" :plain="!item.checked" type="primary" :name="index"
+								@click="checkboxClick">
+						</u-tag>
+					</view>
+					<view class="base-color-red fs24 bor-red p8 radius8 plr12" v-if="tagsuserlist.length==0">暂无会员</view>
+				</view>
+				<view class="centerV">
+					<view @click="getuserid" class="surebtn">确定</view>
+				</view>
+			</view>
+		</u-popup>
+		<u-popup :show="showproject" @close="showproject=!showproject"  >
+			<view class="p20 h400">
+				<view class="mb20" style="text-align: center;">
+					<view style="display: inline-block; ">选择项目</view>
+					<u-icon name="close-circle" color="#ccc" size="28"
+					@click="showproject=!showproject" style="display: inline-block;float: right;"></u-icon>
+				</view>
+				<view class="justify-start wrap">
+					<view class="p16 mlr12" v-for="(item,index) in projectlist" :key="index">
+						<u-tag :text="item.dictLabel" :plain="!item.checked" type="primary" :name="index"
+								@click="checkproClick">
+						</u-tag>
+					</view>
+					<view class="base-color-red fs24 bor-red p8 radius8 plr12" v-if="projectlist.length==0">暂无项目</view>
+				</view>
+				<view class="centerV">
+					<view @click="getprojectid" class="surebtn">确定</view>
+				</view>
+			</view>
+		</u-popup>
+		<u-popup :show="showPop" :round="12" @close="closePop" class="model" :zIndex="10076" style="flex: 0;">
+			<view class="popbox">
+				<view class="popbox-head">
+					<u-icon class="close-circle" name="close-circle" color="#ccc" size="24" @click="showPop=!showPop"></u-icon>
+					标签筛选
+				</view>
+				<view class="popbox-body">
+					<view class="mb20" >
+						<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" style="white-space: nowrap;flex-wrap: wrap;">
+							<view class="base-color-red fs24 bor-red p8 radius8 plr12" v-if="columnsa.length<=0">暂无标签</view>
+							<view class="mlr10 mb10" v-for="(item,index) in columnsa" :key='item.tagId'>
+									<u-tag :text="item.tag" :plain="!item.checked" :name="index"
+										@click="chooseTag(index)"></u-tag>
+							</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" >重置</button>
+					<button class="popbox-footer-btn con-btn" @click="confirmPop">确定</button>
+				</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	import {
+		getgroupList,
+		getallTags,
+		changevipUserAll,
+		gettagsUser,
+		getprojectChange
+	} from "@/api/manageCompany.js"
+	export default {
+		data() {
+			return {
+				list:[{
+					name:'更换全部会员归属',
+					text:'一键更换全部会员归属'
+				},{
+					name:'更换部分会员归属',
+					text:'通过筛选,定位会员更换归属'
+				}],
+				active:0,
+				show:false,
+				columns:[],
+				columnsa:[],
+				columnsb:[],
+				border:false,
+				groupList:[],
+				showa:false,
+				showb:false,
+				userid:0,
+				username:'',
+				usertag:'',
+				tagsid:[],
+				showvip:false,
+				groupid:0,
+				tagsuser:'',
+				tagsuserlist:[],
+				showproject:false,
+				projectuser:'',
+				projectlist:[],
+				user:[],
+				usertagsid:[],
+				showPop:false,
+				tagkeywords:'',
+				tagpageNum:1,
+				tagpageSize:10,
+				triggereds:false,
+				statusA: 'loadmore',
+				isEnableds: true,
+				pagetag:[],
+				ids:[],
+				projectid:[]
+			}
+		},
+		onLoad(option) {
+			this.groupid=option.id
+			console.log(option)
+		},
+		mounted() {
+			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
+		},
+		methods: {
+			getproject(){
+				const data={
+					companyUserId:this.groupid,
+					 tagIds:this.tagsid
+				}
+				getprojectChange(data).then(res=>{
+					if(res.code==200){
+						this.projectlist=res.data.map(item => {
+							return {
+								...item,
+								checked: false,
+							}
+						})
+					}else{
+						uni.showToast({
+							title:res.msg,
+							icon: 'none',
+							duration: 1000
+						}); 
+					}
+				})
+			},
+			resetPop(){
+				//重置标签
+				this.tagkeywords=''
+				this.usertag=''
+				this.projectuser=''
+				this.ids=[]
+				this.projectid=[]
+				this.tagpageNum=1
+				this.gettaglist()
+			},
+			getcompanyTag(value){
+				this.tagkeywords=value
+				this.tagpageNum=1
+				this.gettaglist()
+			},
+			confirmPop() {
+				//标签选择确定
+				this.showPop = false
+				this.usertag = this.columnsa.filter(item => item.checked).map(v => v.tag).join(',')
+				this.tagsid = this.columnsa.filter(item => item.checked).map(v => v.tagId)
+				this.projectid=[]
+				this.projectuser=''
+				this.ids=[]
+				this.tagsuser=''
+			},
+			chooseTag(i) {
+				this.columnsa[i].checked = !this.columnsa[i].checked
+			},
+			getTagpage(type){
+				//标签页数选择
+				if(type=='last'){
+					if(this.tagpageNum>=2){
+						this.tagpageNum--
+						this.gettaglist()
+					}else{
+						uni.showToast({
+							title: '已经是第一页',
+							icon: 'none',
+							duration: 1000
+						}); 
+					}
+				}else{
+					if(this.tagpageNum<this.pagetag.pages){
+						this.tagpageNum++
+						this.gettaglist()
+					}else{
+						uni.showToast({
+							title: '已经是最后一页',
+							icon: 'none',
+							duration: 1000
+						}); 
+					}
+				}
+			},
+			//标签展示下拉
+			pullDownRefreshs() {
+				// 下拉
+				this.triggereds = true; //下拉了状态为true
+				setTimeout(() => {
+					this.triggereds = false;
+					uni.stopPullDownRefresh()
+					this.tagpageNum = 1;
+					this.gettaglist('refresh') //触底  不穿执行else
+					// 请求接口里面需要判断是不是最后一页   是最后一页 status赋值为‘loadmore’没有更多了
+					// 请求接口
+				}, 1000)
+			},
+			closePop(){
+				this.showPop=!this.showPop
+				console.log(123)
+			},
+			checkboxClick(name){
+				this.tagsuserlist[name].checked = !this.tagsuserlist[name].checked
+			},
+			checkproClick(name){
+				this.projectlist[name].checked = !this.projectlist[name].checked
+			},
+			getprojectid(){
+				//确定项目
+				this.projectid=this.projectlist.filter(item => item.checked)
+				.map(v => v.dictValue)
+				this.projectuser=this.projectlist.filter(item => item.checked)
+				.map(v => v.dictLabel).join(',')
+				this.showproject=!this.showproject
+				this.ids=[]
+				this.tagsuser=''
+			},
+			getuserid(){
+				//会员确定
+				this.tagsuser = this.tagsuserlist.filter(item => item.checked)
+				.map(v => v.userName).join(',')
+				this.ids = this.tagsuserlist.filter(item => item.checked).map(v => {
+					return {projectId:v.projectId,userId:v.userId};
+				})
+				console.log(this.ids)
+				this.showvip=!this.showvip
+			},
+			close(){
+				this.showvip=!this.showvip
+			},
+			open(){
+				
+			},
+			changeproject(){
+				//选择项目
+				this.showproject=!this.showproject
+				this.projectlist=[]
+				this.getproject()
+			},
+			changelabelvip(){
+				this.showvip=!this.showvip
+				this.tagsuserlist=[]
+				this.gettagUserlist()
+			},
+			gettagUserlist(){
+				//会员列表
+				const param={
+					tagIds:this.tagsid,
+					projectIds:this.projectid,
+					companyUserId:this.groupid
+				}
+				gettagsUser(param).then(res=>{
+					if(res.code==200){
+						this.tagsuserlist=res.data.map(item => {
+							return {
+								...item,
+								checked: false,
+							}
+						})
+						console.log(this.tagsuserlist)
+					}
+				})
+			},
+			changeall(){
+				
+				//更换会员归属
+				const param={
+					from:this.groupid,//发送群主
+					to:this.userid,//接收群主
+					type:this.active,//1
+					ids:this.ids,
+					tagList:this.tagsid,
+					project:this.projectid
+				}
+				changevipUserAll(param).then(res=>{
+					if(res.code==200){
+						uni.showToast({
+							icon: 'none',
+							title: '更换会员归属成功'
+						})
+					}else{
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			sure(){
+				if(this.active==0){
+					if(this.userid==''){
+						uni.showToast({
+							icon: 'none',
+							title: '请选择接收销售'
+						})
+					}else{
+						this.changeall()
+					}
+				}else{
+					if(this.ids.length==0&&this.projectid.length==0&&this.tagsid.length==0){
+						uni.showToast({
+							icon: 'none',
+							title: '请选择标签或者项目'
+						})
+					}else if(this.userid==''){
+						uni.showToast({
+							icon: 'none',
+							title: '请选择接收销售'
+						})
+					}else{
+						this.changeall()
+					}
+				}
+			},
+			receiveC(e){
+				this.username=e.value[0].nickName
+				this.userid=e.value[0].userId
+				this.showb=!this.showb
+			},
+			receiveA(e){
+				this.username=e.value[0].nickName
+				this.userid=e.value[0].userId
+				this.show=!this.show
+			},
+			change(index){
+				this.active=index
+				this.username=''
+			},
+			selsome(){
+				console.log(12)
+				this.show=true
+				this.getgrouplist()
+			},
+			changelabel(){
+				this.showPop=true
+				this.gettaglist()
+			},
+			changeuser(){
+				this.showb=true
+				this.getgrouplist()
+			},
+			gettaglist(type){
+				//获取标签列表
+				uni.showLoading({
+					title:'加载中...'
+				})
+				const data={
+					pageNum:this.tagpageNum,
+					pageSize:this.tagpageSize,
+					keyword:this.tagkeywords,
+					companyUserId:this.groupid
+				}
+				getallTags(data).then(res=>{
+					if(res.code==200){
+						uni.hideLoading()
+						const dataList = res.data.list.map(item => {
+							return {
+								...item,
+								checked: false,
+							}
+						})
+						if (type == 'refresh') {
+							this.columnsa = dataList
+						}else {
+							// this.columnsa = [...this.columnsa, ...dataList]
+							this.columnsa = dataList
+						}
+						if (res.data.isLastPage) {
+							this.statusA = 'nomore'
+						} else {
+							this.statusA = 'loadmore'
+						}
+						this.pagetag=res.data
+						this.changetag = this.columnsa
+					}else{
+						uni.hideLoading()
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			getgrouplist(){
+				//获取销售列表
+				getgroupList().then(res=>{
+					if(res.code==200){
+						this.columns=[res.data]
+						this.columnsb=[res.data]
+						console.log(this.columns)
+					}else{
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.popbox {
+		background-color: #fff;
+		border-radius: 12px;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 14px;
+		color: #333;
+	
+		&-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;
+			}
+		}
+	}
+page{
+	background-color: #fff;
+}
+.top-itemActive{
+	color: #1773ff;
+	border-bottom: 4rpx solid #1773ff;
+	background-color: rgba(232,242,254,1);
+	text{
+		color: #1773ff !important;
+	}
+}
+.foot-box{
+	position: fixed;
+	bottom: 0;
+	width: 100%;
+	padding: 20rpx;
+}
+.box{
+	width:70%;
+	text-align: center;
+	padding: 16rpx 0;
+	border-radius: 50rpx;
+	font-size: 28rpx;
+}
+.box-list{
+	width: fit-content;
+	background-color: #eee;
+	border-radius: 10rpx;
+	font-size: 28rpx;
+}
+.surebtn{
+	position: absolute;
+	bottom: 0;
+	margin-bottom: 20rpx;
+	background-color: #1773ff;
+	color: #fff;
+	width: 80%;
+	text-align: center;
+	padding: 10rpx 0;
+	border-radius: 30rpx;
+}
+</style>

+ 151 - 151
pages_managedata/components/tki-tree/style.css

@@ -1,151 +1,151 @@
-.tki-tree-mask {
-  position: fixed;
-  top: 0rpx;
-  right: 0rpx;
-  bottom: 0rpx;
-  left: 0rpx;
-  z-index: 9998;
-  background-color: rgba(0, 0, 0, 0.6);
-  opacity: 0;
-  transition: all 0.3s ease;
-  visibility: hidden;
-}
-.tki-tree-mask.show {
-  visibility: visible;
-  opacity: 1;
-}
-.tki-tree-cnt {
-  position: fixed;
-  top: 0rpx;
-  right: 0rpx;
-  bottom: 0rpx;
-  left: 0rpx;
-  z-index: 9999;
-  top: 900rpx;
-  transition: all 0.3s ease;
-  transform: translateY(100%);
-}
-.tki-tree-cnt.show {
-  transform: translateY(0);
-}
-.tki-tree-bar {
-  background-color: #fff;
-  height: 72rpx;
-  padding-left: 20rpx;
-  padding-right: 20rpx;
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  box-sizing: border-box;
-  border-bottom-width: 1rpx !important;
-  border-bottom-style: solid;
-  border-bottom-color: #f5f5f5;
-  font-size: 32rpx;
-  color: #757575;
-  line-height: 1;
-}
-.tki-tree-bar-confirm {
-  color: #07bb07;
-}
-.tki-tree-view {
-  position: absolute;
-  top: 0rpx;
-  right: 0rpx;
-  bottom: 0rpx;
-  left: 0rpx;
-  top: 72rpx;
-  background-color: #fff;
-  padding-top: 20rpx;
-  padding-right: 20rpx;
-  padding-bottom: 20rpx;
-  padding-left: 20rpx;
-}
-.tki-tree-view-sc {
-  height: 100%;
-  overflow: hidden;
-}
-.tki-tree-item {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  font-size: 26rpx;
-  color: #757575;
-  line-height: 1;
-  height: 0;
-  opacity: 0;
-  transition: 0.2s;
-  position: relative;
-  overflow: hidden;
-}
-.tki-tree-item.show {
-  height: 80rpx;
-  opacity: 1;
-}
-.tki-tree-item.showchild:before {
-  transform: rotate(90deg);
-}
-.tki-tree-item.last:before {
-  opacity: 0;
-}
-.tki-tree-icon {
-  width: 26rpx;
-  height: 26rpx;
-  margin-right: 8rpx;
-}
-.tki-tree-label {
-  flex: 1;
-  display: flex;
-  align-items: center;
-  height: 100%;
-  line-height: 1.2;
-}
-.tki-tree-check {
-  width: 40px;
-  height: 40px;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-}
-.tki-tree-check-yes,
-.tki-tree-check-no {
-  width: 20px;
-  height: 20px;
-  border-top-left-radius: 20%;
-  border-top-right-radius: 20%;
-  border-bottom-right-radius: 20%;
-  border-bottom-left-radius: 20%;
-  border-top-width: 1rpx;
-  border-left-width: 1rpx;
-  border-bottom-width: 1rpx;
-  border-right-width: 1rpx;
-  border-style: solid;
-  border-color: #07bb07;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  box-sizing: border-box;
-}
-.tki-tree-check-yes-b {
-  width: 12px;
-  height: 12px;
-  border-top-left-radius: 20%;
-  border-top-right-radius: 20%;
-  border-bottom-right-radius: 20%;
-  border-bottom-left-radius: 20%;
-  background-color: #07bb07;
-}
-.tki-tree-check .radio {
-  border-top-left-radius: 50%;
-  border-top-right-radius: 50%;
-  border-bottom-right-radius: 50%;
-  border-bottom-left-radius: 50%;
-}
-.tki-tree-check .radio .tki-tree-check-yes-b {
-  border-top-left-radius: 50%;
-  border-top-right-radius: 50%;
-  border-bottom-right-radius: 50%;
-  border-bottom-left-radius: 50%;
-}
-.hover-c {
-  opacity: 0.6;
-}
+.tki-tree-mask {
+  position: fixed;
+  top: 0rpx;
+  right: 0rpx;
+  bottom: 0rpx;
+  left: 0rpx;
+  z-index: 9998;
+  background-color: rgba(0, 0, 0, 0.6);
+  opacity: 0;
+  transition: all 0.3s ease;
+  visibility: hidden;
+}
+.tki-tree-mask.show {
+  visibility: visible;
+  opacity: 1;
+}
+.tki-tree-cnt {
+  position: fixed;
+  top: 0rpx;
+  right: 0rpx;
+  bottom: 0rpx;
+  left: 0rpx;
+  z-index: 9999;
+  top: 900rpx;
+  transition: all 0.3s ease;
+  transform: translateY(100%);
+}
+.tki-tree-cnt.show {
+  transform: translateY(0);
+}
+.tki-tree-bar {
+  background-color: #fff;
+  height: 72rpx;
+  padding-left: 20rpx;
+  padding-right: 20rpx;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  box-sizing: border-box;
+  border-bottom-width: 1rpx !important;
+  border-bottom-style: solid;
+  border-bottom-color: #f5f5f5;
+  font-size: 32rpx;
+  color: #757575;
+  line-height: 1;
+}
+.tki-tree-bar-confirm {
+  color: #07bb07;
+}
+.tki-tree-view {
+  position: absolute;
+  top: 0rpx;
+  right: 0rpx;
+  bottom: 0rpx;
+  left: 0rpx;
+  top: 72rpx;
+  background-color: #fff;
+  padding-top: 20rpx;
+  padding-right: 20rpx;
+  padding-bottom: 20rpx;
+  padding-left: 20rpx;
+}
+.tki-tree-view-sc {
+  height: 100%;
+  overflow: hidden;
+}
+.tki-tree-item {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  font-size: 26rpx;
+  color: #757575;
+  line-height: 1;
+  height: 0;
+  opacity: 0;
+  transition: 0.2s;
+  position: relative;
+  overflow: hidden;
+}
+.tki-tree-item.show {
+  height: 80rpx;
+  opacity: 1;
+}
+.tki-tree-item.showchild:before {
+  transform: rotate(90deg);
+}
+.tki-tree-item.last:before {
+  opacity: 0;
+}
+.tki-tree-icon {
+  width: 26rpx;
+  height: 26rpx;
+  margin-right: 8rpx;
+}
+.tki-tree-label {
+  flex: 1;
+  display: flex;
+  align-items: center;
+  height: 100%;
+  line-height: 1.2;
+}
+.tki-tree-check {
+  width: 40px;
+  height: 40px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+.tki-tree-check-yes,
+.tki-tree-check-no {
+  width: 20px;
+  height: 20px;
+  border-top-left-radius: 20%;
+  border-top-right-radius: 20%;
+  border-bottom-right-radius: 20%;
+  border-bottom-left-radius: 20%;
+  border-top-width: 1rpx;
+  border-left-width: 1rpx;
+  border-bottom-width: 1rpx;
+  border-right-width: 1rpx;
+  border-style: solid;
+  border-color: #07bb07;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  box-sizing: border-box;
+}
+.tki-tree-check-yes-b {
+  width: 12px;
+  height: 12px;
+  border-top-left-radius: 20%;
+  border-top-right-radius: 20%;
+  border-bottom-right-radius: 20%;
+  border-bottom-left-radius: 20%;
+  background-color: #07bb07;
+}
+.tki-tree-check .radio {
+  border-top-left-radius: 50%;
+  border-top-right-radius: 50%;
+  border-bottom-right-radius: 50%;
+  border-bottom-left-radius: 50%;
+}
+.tki-tree-check .radio .tki-tree-check-yes-b {
+  border-top-left-radius: 50%;
+  border-top-right-radius: 50%;
+  border-bottom-right-radius: 50%;
+  border-bottom-left-radius: 50%;
+}
+.hover-c {
+  opacity: 0.6;
+}

Разлика између датотеке није приказан због своје велике величине
+ 0 - 90
pages_managedata/components/tki-tree/tki-tree.vue


+ 358 - 358
pages_managedata/coursedetail.vue

@@ -1,358 +1,358 @@
-<template>
-	<view class="column">
-		<view class="video-box" >
-			<video id="myVideo" :src='listdetail.videoUrl' show-mute-btn='false'
-			vslide-gesture-in-fullscreen='true'   loop='true' enable-progress-gesture='true'
-			 enable-danmu controls='true'  autoplay="true" object-fit='contain' show-center-play-btn='true'
-			class="videotop" :playback-rate="playbackRate"></video> 
-			
-		</view>
-		<view class="speed-controls">
-			<view @click="changeSpeed(item.value,index)" v-for="(item,index) in speadvideo" 
-			:key="index" :class="actTime==index?'actstyle':''">{{item.name}}</view>
-		</view>
-		<view class="title-content" id="title-content">
-			<!-- 课程标题 -->
-			<view >
-				{{listdetail.title}} 
-			</view>
-			<view class="fs24" style="color: #666;font-weight: normal;">
-				{{listdetail.description?listdetail.description:""}}
-			</view>
-			<view class="fs24" style="color: #999;font-weight: normal;">课程视频时长:{{formatSeconds(listdetail.duration)}}</view>
-		</view>
-		<!-- 问题 -->
-		<view class="ques-content ">
-			<view class="ques-content-tit">问答题</view>
-			<view class="center fs32" v-if="listdetail.questionBankList.length<1" style="color: #666;">暂无问答题</view>
-			<view v-for="(item,index) in listdetail.questionBankList" :key="index">
-				<view class="ques-title">
-					<text>{{index + 1}}.</text>
-					<view class="ques-type" v-show="item.type == 1 || item.type == 2">
-						{{item.type == 1 ? '单选' : item.type == 2 ? '多选' : ''}}
-					</view>
-					<text >{{item.title}}</text>
-				</view>
-				<view :class="option.isAnswer== 1 ?'ques-option ques-option-active':'ques-option'"
-					v-for="(option,idx) in item.question" :key="idx">
-					<view>
-						{{numberToLetter(idx)}}.
-					</view>
-					<view>{{option.name}}</view>
-				</view>
-			</view>
-		</view>
-		<view class="footer" v-if="!viewload">
-			<view class="justify-between" >
-				<!--#ifdef MP-WEIXIN-->
-				<button open-type="share" class="copybtn flex-1">分享课程</button>
-				<!-- <view class="copybtn flex-1" @click="showShare=!showShare">分享卡片</view> -->
-				<!--#endif-->
-				<!--#ifdef H5-->
-				<view class="copybtn flex-1" @click="copyshareLink()">复制分享链接</view>
-				<!--#endif-->
-			</view>
-		</view>
-		<u-loading-page :loading="viewload" iconSize="32" loadingColor="#3c9cff" fontSize="20"
-		:loading-text="loadingtext" ></u-loading-page>
-	</view>
-</template>
-
-<script>
-	import {
-		getcourseDetail,
-		sharecourselink
-	} from '@/api/manageCompany'
-	import {
-		numberToLetter
-	} from "@/utils/tools.js"
-	export default {
-		data() {
-			return {
-				viewload:true,
-				loadingtext:"数据加载中...",
-				videoId:'',
-				listdetail:[],
-				user:{},
-				copylink:'',
-				id:'',
-				periodId:'',
-				imgs:this.$store.state.imgpath+'/app/image/logo.png',
-				playbackRate: 1.0, // 默认1倍速
-				videoContext: null,
-				actTime:0,
-				speadvideo:[
-					{
-					name:'1.0倍速',
-					value:1
-					},
-					{
-					name:'1.5倍速',
-					value:1.5
-					},
-					{
-					name:'2.0倍速',
-					value:2
-					}
-				]
-			}
-		},
-		mounted() {
-			// 创建视频上下文
-			    this.videoContext = uni.createVideoContext('myVideo', this);
-		},
-		onLoad(option) {
-			this.videoId=option.videoId
-			this.id=option.id
-			this.periodId=option.periodId
-		},
-		onShow() {
-			this.getdetail()
-			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
-		},
-		computed: {
-		    imgPath() {
-		      // 处理空值,返回默认路径或空字符串
-		      // if (!this.$store.state.imgpath) {
-		      //   return '' // 本地默认图
-		      // }
-		      return this.$store.state.imgpath
-		    }
-		  },
-		onShareAppMessage() {
-			const course={
-				companyId:this.user.companyId,
-				companyUserId:this.user.userId,
-				id:this.id,
-				courseId:this.listdetail.courseId,
-				videoId:this.videoId,
-				periodId:this.periodId
-			}
-			console.log(course)
-			return {
-				title: this.listdetail.title, // 分享卡片标题
-				path: 'pages_course/videovip' + "?course=" +JSON.stringify(course) , // 目标页面路径
-				// 携带参数:将当前页面的数据拼接到路径中
-				imageUrl: this.listdetail.thumbnail||this.imgs, // 分享卡片封面图(可选)
-				success: (res) => {
-					console.log("分享成功", res);
-				},
-				fail: (err) => {
-					console.log("分享失败", err);
-				},
-			}
-		},
-		methods: {
-			changeSpeed(rate,index) {
-				console.log(rate,index)
-				this.actTime=index
-			      this.playbackRate = rate;
-			      // 更新播放速率
-			      if (this.videoContext) {
-			        this.videoContext.playbackRate(rate);
-			      }
-			},
-			numberToLetter(num) {
-				// 将数字转换为字母的 ASCII 码
-				let letterCode = num + 65;
-				// 将 ASCII 码转换为大写字母
-				let letter = String.fromCharCode(letterCode);
-				return letter;
-			},
-			//转化时间格式
-			 formatSeconds(seconds) {
-			  const hours = Math.floor(seconds / 3600);
-			  const minutes = Math.floor((seconds % 3600) / 60);
-			  const remainingSeconds = seconds % 60;
-			  
-			  // 补零函数:确保两位数显示
-			  const pad = (num) => num.toString().padStart(2, '0');
-			  
-			  return `${pad(hours)}:${pad(minutes)}:${pad(remainingSeconds)}`;
-			},
-			// 获取视频详情
-			getdetail() {
-				const param = {
-					videoId:this.videoId
-				}
-				getcourseDetail(param).then(res => {
-					if(res.code==200){
-						this.viewload=false
-						this.listdetail=res.data
-						this.listdetail.questionBankList= this.listdetail.questionBankList.map(item => ({
-							...item,
-							question: JSON.parse(item.question),
-							answer: '',
-						}))
-					}else{
-						uni.showToast({
-							title: res.msg,
-							icon: 'none',
-						});
-					}
-				})
-			},
-			copyshareLink(){
-				const params = {
-					companyId: this.user.companyId,
-					companyUserId: this.user.userId,
-					courseId: this.listdetail.courseId,
-					time: this.time,
-					videoId: this.listdetail.videoId,
-					id: Number(this.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
-						})
-					}
-				})
-				console.log(123)
-			}
-		}
-	}
-</script>
-
-<style scoped lang="scss">
-	.actstyle{
-		background-color: #FF5C03;
-		color: #fff;
-		border: 2rpx solid #FF5C03 !important;
-	}
-	.speed-controls {
-	  margin-top: 20rpx;
-	  display: flex;
-	  justify-content: space-around;
-	  margin-bottom: 16rpx;
-	  view{
-		  height: 50rpx;
-		  line-height: 46rpx; 
-		  width: 120rpx;
-		  font-size: 24rpx;
-		  border-radius: 30rpx;
-		  text-align: center;
-		  border: 2rpx solid #a5a5a5;
-	  }
-	}
-.video-box {
-	width: 100%;
-	height: 420rpx;
-	overflow: hidden;
-	position: relative;
-
-	#myVideo {
-		width: 100%;
-		height: 100%;
-	}
-}
-.title-content {
-	padding: 20rpx 32rpx;
-	background-color: #fff;
-	font-size: 28rpx;
-	font-weight: bold;
-	line-height: 1.6;
-	
-}
-.ques-content-tit {
-	font-family: PingFang SC, PingFang SC;
-	font-weight: 600;
-	font-size: 36rpx;
-	color: #222222;
-}
-.ques-content {
-	background-color: #fff;
-	margin-top: 20rpx;
-	padding: 32rpx 32rpx;
-	padding-bottom: 140rpx;
-	box-sizing: border-box;
-	ont-family: PingFang SC, PingFang SC;
-	font-weight: 400;
-	font-size: 28rpx;
-	color: #222222;
-}
-.ques-title {
-	margin: 32rpx 0 34rpx 0;
-	font-weight: 500;
-	font-size: 32rpx;
-	white-space: normal;
-}
-.ques-type {
-	flex-shrink: 0;
-	min-width: 72rpx;
-	height: 40rpx;
-	padding: 0 12rpx;
-	margin: 0 12rpx;
-	box-sizing: border-box;
-	background: #ff8901;
-	border-radius: 8rpx 8rpx 8rpx 8rpx;
-	line-height: 40rpx;
-	text-align: center;
-	font-family: PingFang SC, PingFang SC;
-	font-weight: 400;
-	font-size: 24rpx;
-	color: #FFFFFF;
-	display: inline-block;
-}
-
-.ques-option {
-	min-height: 88rpx;
-	padding: 24rpx 32rpx;
-	box-sizing: border-box;
-	margin-bottom: 24rpx;
-	background: #F5F7FA;
-	border-radius: 16rpx 16rpx 16rpx 16rpx;
-	display: flex;
-	align-items: center;
-
-	&-active {
-		color: #1db131 !important;
-		background: #e8fcee !important;
-	}
-}
-.footer {
-	border-top: 1rpx solid #ededef;
-	background: #fff;
-	width: 100%;
-	position: fixed;
-	bottom: 0;
-	padding: 24rpx 32rpx;
-	box-sizing: border-box;
-	z-index: 9;
-	.copybtn {
-		background: #FF5C03;
-		color: #fff;
-		text-align: center;
-		font-size: 28rpx;
-		border-radius: 80rpx;
-		padding: 20rpx 0;
-	}
-}
-</style>
+<template>
+	<view class="column">
+		<view class="video-box" >
+			<video id="myVideo" :src='listdetail.videoUrl' show-mute-btn='false'
+			vslide-gesture-in-fullscreen='true'   loop='true' enable-progress-gesture='true'
+			 enable-danmu controls='true'  autoplay="true" object-fit='contain' show-center-play-btn='true'
+			class="videotop" :playback-rate="playbackRate"></video> 
+			
+		</view>
+		<view class="speed-controls">
+			<view @click="changeSpeed(item.value,index)" v-for="(item,index) in speadvideo" 
+			:key="index" :class="actTime==index?'actstyle':''">{{item.name}}</view>
+		</view>
+		<view class="title-content" id="title-content">
+			<!-- 课程标题 -->
+			<view >
+				{{listdetail.title}} 
+			</view>
+			<view class="fs24" style="color: #666;font-weight: normal;">
+				{{listdetail.description?listdetail.description:""}}
+			</view>
+			<view class="fs24" style="color: #999;font-weight: normal;">课程视频时长:{{formatSeconds(listdetail.duration)}}</view>
+		</view>
+		<!-- 问题 -->
+		<view class="ques-content ">
+			<view class="ques-content-tit">问答题</view>
+			<view class="center fs32" v-if="listdetail.questionBankList.length<1" style="color: #666;">暂无问答题</view>
+			<view v-for="(item,index) in listdetail.questionBankList" :key="index">
+				<view class="ques-title">
+					<text>{{index + 1}}.</text>
+					<view class="ques-type" v-show="item.type == 1 || item.type == 2">
+						{{item.type == 1 ? '单选' : item.type == 2 ? '多选' : ''}}
+					</view>
+					<text >{{item.title}}</text>
+				</view>
+				<view :class="option.isAnswer== 1 ?'ques-option ques-option-active':'ques-option'"
+					v-for="(option,idx) in item.question" :key="idx">
+					<view>
+						{{numberToLetter(idx)}}.
+					</view>
+					<view>{{option.name}}</view>
+				</view>
+			</view>
+		</view>
+		<view class="footer" v-if="!viewload">
+			<view class="justify-between" >
+				<!--#ifdef MP-WEIXIN-->
+				<button open-type="share" class="copybtn flex-1">分享课程</button>
+				<!-- <view class="copybtn flex-1" @click="showShare=!showShare">分享卡片</view> -->
+				<!--#endif-->
+				<!--#ifdef H5-->
+				<view class="copybtn flex-1" @click="copyshareLink()">复制分享链接</view>
+				<!--#endif-->
+			</view>
+		</view>
+		<u-loading-page :loading="viewload" iconSize="32" loadingColor="#3c9cff" fontSize="20"
+		:loading-text="loadingtext" ></u-loading-page>
+	</view>
+</template>
+
+<script>
+	import {
+		getcourseDetail,
+		sharecourselink
+	} from '@/api/manageCompany'
+	import {
+		numberToLetter
+	} from "@/utils/tools.js"
+	export default {
+		data() {
+			return {
+				viewload:true,
+				loadingtext:"数据加载中...",
+				videoId:'',
+				listdetail:[],
+				user:{},
+				copylink:'',
+				id:'',
+				periodId:'',
+				imgs:this.$store.state.imgpath+'/app/image/logo.png',
+				playbackRate: 1.0, // 默认1倍速
+				videoContext: null,
+				actTime:0,
+				speadvideo:[
+					{
+					name:'1.0倍速',
+					value:1
+					},
+					{
+					name:'1.5倍速',
+					value:1.5
+					},
+					{
+					name:'2.0倍速',
+					value:2
+					}
+				]
+			}
+		},
+		mounted() {
+			// 创建视频上下文
+			    this.videoContext = uni.createVideoContext('myVideo', this);
+		},
+		onLoad(option) {
+			this.videoId=option.videoId
+			this.id=option.id
+			this.periodId=option.periodId
+		},
+		onShow() {
+			this.getdetail()
+			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
+		},
+		computed: {
+		    imgPath() {
+		      // 处理空值,返回默认路径或空字符串
+		      // if (!this.$store.state.imgpath) {
+		      //   return '' // 本地默认图
+		      // }
+		      return this.$store.state.imgpath
+		    }
+		  },
+		onShareAppMessage() {
+			const course={
+				companyId:this.user.companyId,
+				companyUserId:this.user.userId,
+				id:this.id,
+				courseId:this.listdetail.courseId,
+				videoId:this.videoId,
+				periodId:this.periodId
+			}
+			console.log(course)
+			return {
+				title: this.listdetail.title, // 分享卡片标题
+				path: 'pages_course/videovip' + "?course=" +JSON.stringify(course) , // 目标页面路径
+				// 携带参数:将当前页面的数据拼接到路径中
+				imageUrl: this.listdetail.thumbnail||this.imgs, // 分享卡片封面图(可选)
+				success: (res) => {
+					console.log("分享成功", res);
+				},
+				fail: (err) => {
+					console.log("分享失败", err);
+				},
+			}
+		},
+		methods: {
+			changeSpeed(rate,index) {
+				console.log(rate,index)
+				this.actTime=index
+			      this.playbackRate = rate;
+			      // 更新播放速率
+			      if (this.videoContext) {
+			        this.videoContext.playbackRate(rate);
+			      }
+			},
+			numberToLetter(num) {
+				// 将数字转换为字母的 ASCII 码
+				let letterCode = num + 65;
+				// 将 ASCII 码转换为大写字母
+				let letter = String.fromCharCode(letterCode);
+				return letter;
+			},
+			//转化时间格式
+			 formatSeconds(seconds) {
+			  const hours = Math.floor(seconds / 3600);
+			  const minutes = Math.floor((seconds % 3600) / 60);
+			  const remainingSeconds = seconds % 60;
+			  
+			  // 补零函数:确保两位数显示
+			  const pad = (num) => num.toString().padStart(2, '0');
+			  
+			  return `${pad(hours)}:${pad(minutes)}:${pad(remainingSeconds)}`;
+			},
+			// 获取视频详情
+			getdetail() {
+				const param = {
+					videoId:this.videoId
+				}
+				getcourseDetail(param).then(res => {
+					if(res.code==200){
+						this.viewload=false
+						this.listdetail=res.data
+						this.listdetail.questionBankList= this.listdetail.questionBankList.map(item => ({
+							...item,
+							question: JSON.parse(item.question),
+							answer: '',
+						}))
+					}else{
+						uni.showToast({
+							title: res.msg,
+							icon: 'none',
+						});
+					}
+				})
+			},
+			copyshareLink(){
+				const params = {
+					companyId: this.user.companyId,
+					companyUserId: this.user.userId,
+					courseId: this.listdetail.courseId,
+					time: this.time,
+					videoId: this.listdetail.videoId,
+					id: Number(this.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
+						})
+					}
+				})
+				console.log(123)
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.actstyle{
+		background-color: #FF5C03;
+		color: #fff;
+		border: 2rpx solid #FF5C03 !important;
+	}
+	.speed-controls {
+	  margin-top: 20rpx;
+	  display: flex;
+	  justify-content: space-around;
+	  margin-bottom: 16rpx;
+	  view{
+		  height: 50rpx;
+		  line-height: 46rpx; 
+		  width: 120rpx;
+		  font-size: 24rpx;
+		  border-radius: 30rpx;
+		  text-align: center;
+		  border: 2rpx solid #a5a5a5;
+	  }
+	}
+.video-box {
+	width: 100%;
+	height: 420rpx;
+	overflow: hidden;
+	position: relative;
+
+	#myVideo {
+		width: 100%;
+		height: 100%;
+	}
+}
+.title-content {
+	padding: 20rpx 32rpx;
+	background-color: #fff;
+	font-size: 28rpx;
+	font-weight: bold;
+	line-height: 1.6;
+	
+}
+.ques-content-tit {
+	font-family: PingFang SC, PingFang SC;
+	font-weight: 600;
+	font-size: 36rpx;
+	color: #222222;
+}
+.ques-content {
+	background-color: #fff;
+	margin-top: 20rpx;
+	padding: 32rpx 32rpx;
+	padding-bottom: 140rpx;
+	box-sizing: border-box;
+	ont-family: PingFang SC, PingFang SC;
+	font-weight: 400;
+	font-size: 28rpx;
+	color: #222222;
+}
+.ques-title {
+	margin: 32rpx 0 34rpx 0;
+	font-weight: 500;
+	font-size: 32rpx;
+	white-space: normal;
+}
+.ques-type {
+	flex-shrink: 0;
+	min-width: 72rpx;
+	height: 40rpx;
+	padding: 0 12rpx;
+	margin: 0 12rpx;
+	box-sizing: border-box;
+	background: #ff8901;
+	border-radius: 8rpx 8rpx 8rpx 8rpx;
+	line-height: 40rpx;
+	text-align: center;
+	font-family: PingFang SC, PingFang SC;
+	font-weight: 400;
+	font-size: 24rpx;
+	color: #FFFFFF;
+	display: inline-block;
+}
+
+.ques-option {
+	min-height: 88rpx;
+	padding: 24rpx 32rpx;
+	box-sizing: border-box;
+	margin-bottom: 24rpx;
+	background: #F5F7FA;
+	border-radius: 16rpx 16rpx 16rpx 16rpx;
+	display: flex;
+	align-items: center;
+
+	&-active {
+		color: #1db131 !important;
+		background: #e8fcee !important;
+	}
+}
+.footer {
+	border-top: 1rpx solid #ededef;
+	background: #fff;
+	width: 100%;
+	position: fixed;
+	bottom: 0;
+	padding: 24rpx 32rpx;
+	box-sizing: border-box;
+	z-index: 9;
+	.copybtn {
+		background: #FF5C03;
+		color: #fff;
+		text-align: center;
+		font-size: 28rpx;
+		border-radius: 80rpx;
+		padding: 20rpx 0;
+	}
+}
+</style>

+ 11 - 0
pages_managedata/coursedetail1.vue

@@ -0,0 +1,11 @@
+<template>
+	<view>
+		<video id="myVideo" src='https://ddgytcpv.ylrzcloud.com/course_transcode_100301/20251019/1760848477815.mp4'></video> 
+	</view>
+</template>
+
+<script>
+</script>
+
+<style >
+</style>

+ 351 - 351
pages_managedata/editUser.vue

@@ -1,351 +1,351 @@
-<template>
-	<view>
-		<view class="content">
-			<view class="info-item">
-				<view class="label">头像</view>
-				<view class="right">
-					<u-avatar :src="headImg" size="40" @tap="chooseImage()" ></u-avatar>
-					<!-- <image  class="head" @tap="chooseImage()" :src="headImg" mode=""></image> -->
-				</view>
-			</view>
-			<view class="info-item">
-				<view class="label">姓名</view>
-				<view class="right">
-					<!-- <text class="text">{{nickName}}</text> -->
-					<input type="text" v-model="nickName" placeholder="请输入姓名" class="input"></text>
-				</view>
-			</view>
-			<view class="info-item">
-				<view class="label">部门</view>
-				<view class="right">
-					<text class="text">{{deptName}}</text>
-				</view>
-			</view>
-			<view class="info-item">
-				<view class="label">岗位</view>
-				<view class="right">
-					<text class="text">{{postNames}}</text>
-				</view>
-			</view>
-			<view class="info-item">
-				<view class="label">角色</view>
-				<view class="right">
-					<text class="text">{{roleNames}}</text>
-				</view>
-			</view>
-			<view class="info-item">
-				<view class="label">性别</view>
-				<view class="right">
-					<picker @change="pickerSex" :value="sex" :range="sexPicker">
-						<view class="picker">
-							{{sex>-1?sexPicker[sex]:''}}
-						</view>
-					</picker>
-				</view>
-			</view>
-			 <view class="info-item">
-			 	<view class="label">邮箱</view>
-			 	<view class="right">
-					<input type="text" v-model="email" placeholder="请输入邮箱" class="input"></text>
-			 	</view>
-			 </view>
-			<view class="info-item">
-				<view class="label">手机号</view>
-				<view class="right">
-					<input type="text" v-model="phonenumber" placeholder="请输入手机号" class="input"></text>
-				</view>
-			</view>
-			<view class="info-item">
-				<view class="label">客服二维码</view>
-				<view class="right">
-					<!-- <u-avatar :src="codeimg" size="40" @tap="chooseImages()" :default-url="defaultUrl"></u-avatar> -->
-					<image  class="w90 h90" @tap="chooseImages()" :src="codeimg?codeimg:defaultUrl" mode="aspectFill"></image>
-				</view>
-			</view>
-		</view>
-		<view class="btn-box">
-			<view class="sub-btn" @click="submit()">保存修改</view>
-		</view>
-	</view>
-	
-
-</template>
-
-<script>
-	import {setUserInfo,getCompanyUser} from '@/api/manageCompany.js';
-	export default {
-		data() {
-			return {
-				nickName:"",
-				deptName:"",
-				postNames:"",
-				phonenumber:"",
-				email:"",
-				sexPicker: ['男', '女','未知'],
-				sex: 0, // 性别
-				headImg: this.$store.state.imgpath+'/app/images/detault_head.jpg', // 头像,
-				headImgUrl:'',
-				defaultUrl:'https://beiliyo-2025.obs.cn-north-4.myhuaweicloud.com/fs/20250606/1749180611713.png',
-				codeimg:'',
-				codeurlimg:'',
-				roleNames:''
-			}
-		},
-		onLoad() {
-			this.getCompanyUser();
-		},
-		methods: {
-			bindUser(data){
-				var that=this;
-				that.nickName=data.nickName;
-				that.deptName=data.dept.deptName;
-				if(data.posts){
-					that.postNames=data.posts.map(item=>item.postName).join(",")
-				}
-				if(data.roles){
-					this.roleNames=data.roles.map(item=>item.roleName).join(",")
-				}
-				// that.posts=data.post;
-				that.phonenumber=data.phonenumber;
-				that.email=data.email;
-				that.sex=data.sex;
-				if(!that.utils.isEmpty(data.qrCodeWeixin)){
-					that.codeimg=uni.getStorageSync('requestPath')+data.qrCodeWeixin;
-					this.codeurlimg=data.qrCodeWeixin;
-				}
-				if(!that.utils.isEmpty(data.avatar)){
-					that.headImg=uni.getStorageSync('requestPath')+data.avatar;
-					this.headImgUrl=data.avatar;
-				}
-			},
-			getCompanyUser(){
-				var data = {};
-				var that=this;
-				getCompanyUser(data).then(
-					res => {
-						that.bindUser(res.user);
-						
-					},
-					rej => {}
-				);
-			},
-			// 性别选择
-			pickerSex(e) {
-				this.sex = e.detail.value
-			},
-			// 选择头像照片
-			chooseImage() {
-				uni.chooseImage({
-					count: 1, //默认9
-					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
-					sourceType: ['album', 'camera'], //从相册选择
-					success: (res) => {
-						//this.headImg = res.tempFilePaths[0]
-						uni.uploadFile({
-							url: uni.getStorageSync('requestPath')+'/companyapp/app/common/upload', //仅为示例,非真实的接口地址
-							filePath: res.tempFilePaths[0],
-							name: 'file',
-							formData: {
-								'user': 'test'  // 上传附带参数
-							},
-							success: (uploadFileRes) => {
-								console.log(uploadFileRes)
-								// 根据接口具体返回格式   赋值具体对应url
-								var data=JSON.parse(uploadFileRes.data)
-								this.headImg=uni.getStorageSync('requestPath')+data.fileName;
-								this.headImgUrl=data.fileName;
-							}
-						});
-						
-					}
-				});
-			},
-			// 选择头像照片
-			chooseImages() {
-				uni.chooseImage({
-					count: 1, //默认9
-					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
-					sourceType: ['album', 'camera'], //从相册选择
-					success: (res) => {
-						//this.headImg = res.tempFilePaths[0]
-						uni.uploadFile({
-							url: uni.getStorageSync('requestPath')+'/companyapp/app/common/upload', //仅为示例,非真实的接口地址
-							filePath: res.tempFilePaths[0],
-							name: 'file',
-							formData: {
-								'user': 'test'  // 上传附带参数
-							},
-							success: (uploadFileRes) => {
-								console.log(uploadFileRes)
-								// 根据接口具体返回格式   赋值具体对应url
-								var data=JSON.parse(uploadFileRes.data)
-								this.codeimg=uni.getStorageSync('requestPath')+data.fileName;
-								this.codeurlimg=data.fileName
-							}
-						});
-						
-					}
-				});
-			},
-			// 预览头像
-			viewImage() {
-				uni.previewImage({
-					urls: this.headImg,
-					current: this.headImg
-				});
-			},
-			submit(){
-				if (this.utils.isEmpty(this.email)) {
-					uni.showToast({
-						title: "请输入邮箱",
-						icon: 'none',
-					});
-					return
-				}
-				if (this.utils.isEmpty(this.phonenumber)) {
-					uni.showToast({
-						title: "请输入手机号",
-						icon: 'none',
-					});
-					return
-				}
-				var data = {mobile:this.phonenumber,email:this.email,
-				name:this.nickName,
-				sex:this.sex.toString(),headImg:this.headImgUrl,qrCodeWeixin:this.codeurlimg};
-				console.log(data);
-				setUserInfo(data).then(
-					res => {
-						if(res.code==200){
-							uni.showToast({
-								title: '修改成功',
-								duration: 2000
-							});
-							setTimeout(function() {
-								uni.navigateBack({
-								  success: () => {
-								  }
-								})
-							}, 500);
-						}
-						else{
-							uni.showToast({
-								title: res.msg,
-								icon: 'none',
-							});
-						}
-						
-					},
-					rej => {}
-				);
-				
-			}
-			
-		}
-	}
-</script>
-
-
-<style scoped lang="scss">
-	.content{
-		padding-top: 20rpx;
-		border-top: 1px solid #F5F6FA;
-	}
-	.info-item{
-		height: 104upx;
-		background: #FFFFFF;
-		padding: 0 30upx;
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		border-bottom: 1px solid #F5F6FA;
-		&:last-child{
-			border-bottom: none;
-		}
-		.label{
-			
-			font-size: 30upx;
-			font-family: PingFang SC;
-			font-weight: 400;
-			color: #0F1826;
-		}
-		.right{
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			.text{
-				font-size: 30upx;
-				font-family: PingFang SC;
-				font-weight: 400;
-				color: #0F1826;
-			}
-			.image{
-				margin-left: 10upx;
-				width: 30upx;
-				height: 30upx;
-			}
-			.input{
-				text-align: right;
-				font-size: 30upx;
-				font-family: PingFang SC;
-				font-weight: 400;
-				color: #0F1826;
-			}
-		}
-		.head{
-			border-radius: 50%;
-			width: 80upx;
-			height: 80upx;
-		}
-		.arrow{
-			width: 30upx;
-			height: 30upx;
-		}
-		.text{
-			font-size: 30upx;
-			font-family: PingFang SC;
-			font-weight: 400;
-			color: #0F1826;
-		}
-		.input{
-			text-align: right;
-			font-size: 30upx;
-			font-family: PingFang SC;
-			font-weight: 400;
-			color: #0F1826;
-		}
-		&.password{
-			margin-top: 20upx;
-			.right{
-				display: flex;
-				align-items: center;
-				.text{
-					font-size: 30upx;
-					font-family: PingFang SC;
-					font-weight: 400;
-					color: #0F1826;
-					margin-right: 15upx;
-				}
-			}
-		}
-	}
-	.btn-box{
-		margin-top: 15rpx;
-		height: 120upx;
-		padding: 0 30upx;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		.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: #115296;
-			border-radius: 44upx;
-		}
-	}
-</style>
+<template>
+	<view>
+		<view class="content">
+			<view class="info-item">
+				<view class="label">头像</view>
+				<view class="right">
+					<u-avatar :src="headImg" size="40" @tap="chooseImage()" ></u-avatar>
+					<!-- <image  class="head" @tap="chooseImage()" :src="headImg" mode=""></image> -->
+				</view>
+			</view>
+			<view class="info-item">
+				<view class="label">姓名</view>
+				<view class="right">
+					<!-- <text class="text">{{nickName}}</text> -->
+					<input type="text" v-model="nickName" placeholder="请输入姓名" class="input"></text>
+				</view>
+			</view>
+			<view class="info-item">
+				<view class="label">部门</view>
+				<view class="right">
+					<text class="text">{{deptName}}</text>
+				</view>
+			</view>
+			<view class="info-item">
+				<view class="label">岗位</view>
+				<view class="right">
+					<text class="text">{{postNames}}</text>
+				</view>
+			</view>
+			<view class="info-item">
+				<view class="label">角色</view>
+				<view class="right">
+					<text class="text">{{roleNames}}</text>
+				</view>
+			</view>
+			<view class="info-item">
+				<view class="label">性别</view>
+				<view class="right">
+					<picker @change="pickerSex" :value="sex" :range="sexPicker">
+						<view class="picker">
+							{{sex>-1?sexPicker[sex]:''}}
+						</view>
+					</picker>
+				</view>
+			</view>
+			 <view class="info-item">
+			 	<view class="label">邮箱</view>
+			 	<view class="right">
+					<input type="text" v-model="email" placeholder="请输入邮箱" class="input"></text>
+			 	</view>
+			 </view>
+			<view class="info-item">
+				<view class="label">手机号</view>
+				<view class="right">
+					<input type="text" v-model="phonenumber" placeholder="请输入手机号" class="input"></text>
+				</view>
+			</view>
+			<view class="info-item">
+				<view class="label">客服二维码</view>
+				<view class="right">
+					<!-- <u-avatar :src="codeimg" size="40" @tap="chooseImages()" :default-url="defaultUrl"></u-avatar> -->
+					<image  class="w90 h90" @tap="chooseImages()" :src="codeimg?codeimg:defaultUrl" mode="aspectFill"></image>
+				</view>
+			</view>
+		</view>
+		<view class="btn-box">
+			<view class="sub-btn" @click="submit()">保存修改</view>
+		</view>
+	</view>
+	
+
+</template>
+
+<script>
+	import {setUserInfo,getCompanyUser} from '@/api/manageCompany.js';
+	export default {
+		data() {
+			return {
+				nickName:"",
+				deptName:"",
+				postNames:"",
+				phonenumber:"",
+				email:"",
+				sexPicker: ['男', '女','未知'],
+				sex: 0, // 性别
+				headImg: this.$store.state.imgpath+'/app/images/detault_head.jpg', // 头像,
+				headImgUrl:'',
+				defaultUrl:'https://beiliyo-2025.obs.cn-north-4.myhuaweicloud.com/fs/20250606/1749180611713.png',
+				codeimg:'',
+				codeurlimg:'',
+				roleNames:''
+			}
+		},
+		onLoad() {
+			this.getCompanyUser();
+		},
+		methods: {
+			bindUser(data){
+				var that=this;
+				that.nickName=data.nickName;
+				that.deptName=data.dept.deptName;
+				if(data.posts){
+					that.postNames=data.posts.map(item=>item.postName).join(",")
+				}
+				if(data.roles){
+					this.roleNames=data.roles.map(item=>item.roleName).join(",")
+				}
+				// that.posts=data.post;
+				that.phonenumber=data.phonenumber;
+				that.email=data.email;
+				that.sex=data.sex;
+				if(!that.utils.isEmpty(data.qrCodeWeixin)){
+					that.codeimg=uni.getStorageSync('requestPath')+data.qrCodeWeixin;
+					this.codeurlimg=data.qrCodeWeixin;
+				}
+				if(!that.utils.isEmpty(data.avatar)){
+					that.headImg=uni.getStorageSync('requestPath')+data.avatar;
+					this.headImgUrl=data.avatar;
+				}
+			},
+			getCompanyUser(){
+				var data = {};
+				var that=this;
+				getCompanyUser(data).then(
+					res => {
+						that.bindUser(res.user);
+						
+					},
+					rej => {}
+				);
+			},
+			// 性别选择
+			pickerSex(e) {
+				this.sex = e.detail.value
+			},
+			// 选择头像照片
+			chooseImage() {
+				uni.chooseImage({
+					count: 1, //默认9
+					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+					sourceType: ['album', 'camera'], //从相册选择
+					success: (res) => {
+						//this.headImg = res.tempFilePaths[0]
+						uni.uploadFile({
+							url: uni.getStorageSync('requestPath')+'/companyapp/app/common/upload', //仅为示例,非真实的接口地址
+							filePath: res.tempFilePaths[0],
+							name: 'file',
+							formData: {
+								'user': 'test'  // 上传附带参数
+							},
+							success: (uploadFileRes) => {
+								console.log(uploadFileRes)
+								// 根据接口具体返回格式   赋值具体对应url
+								var data=JSON.parse(uploadFileRes.data)
+								this.headImg=uni.getStorageSync('requestPath')+data.fileName;
+								this.headImgUrl=data.fileName;
+							}
+						});
+						
+					}
+				});
+			},
+			// 选择头像照片
+			chooseImages() {
+				uni.chooseImage({
+					count: 1, //默认9
+					sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+					sourceType: ['album', 'camera'], //从相册选择
+					success: (res) => {
+						//this.headImg = res.tempFilePaths[0]
+						uni.uploadFile({
+							url: uni.getStorageSync('requestPath')+'/companyapp/app/common/upload', //仅为示例,非真实的接口地址
+							filePath: res.tempFilePaths[0],
+							name: 'file',
+							formData: {
+								'user': 'test'  // 上传附带参数
+							},
+							success: (uploadFileRes) => {
+								console.log(uploadFileRes)
+								// 根据接口具体返回格式   赋值具体对应url
+								var data=JSON.parse(uploadFileRes.data)
+								this.codeimg=uni.getStorageSync('requestPath')+data.fileName;
+								this.codeurlimg=data.fileName
+							}
+						});
+						
+					}
+				});
+			},
+			// 预览头像
+			viewImage() {
+				uni.previewImage({
+					urls: this.headImg,
+					current: this.headImg
+				});
+			},
+			submit(){
+				if (this.utils.isEmpty(this.email)) {
+					uni.showToast({
+						title: "请输入邮箱",
+						icon: 'none',
+					});
+					return
+				}
+				if (this.utils.isEmpty(this.phonenumber)) {
+					uni.showToast({
+						title: "请输入手机号",
+						icon: 'none',
+					});
+					return
+				}
+				var data = {mobile:this.phonenumber,email:this.email,
+				name:this.nickName,
+				sex:this.sex.toString(),headImg:this.headImgUrl,qrCodeWeixin:this.codeurlimg};
+				console.log(data);
+				setUserInfo(data).then(
+					res => {
+						if(res.code==200){
+							uni.showToast({
+								title: '修改成功',
+								duration: 2000
+							});
+							setTimeout(function() {
+								uni.navigateBack({
+								  success: () => {
+								  }
+								})
+							}, 500);
+						}
+						else{
+							uni.showToast({
+								title: res.msg,
+								icon: 'none',
+							});
+						}
+						
+					},
+					rej => {}
+				);
+				
+			}
+			
+		}
+	}
+</script>
+
+
+<style scoped lang="scss">
+	.content{
+		padding-top: 20rpx;
+		border-top: 1px solid #F5F6FA;
+	}
+	.info-item{
+		height: 104upx;
+		background: #FFFFFF;
+		padding: 0 30upx;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		border-bottom: 1px solid #F5F6FA;
+		&:last-child{
+			border-bottom: none;
+		}
+		.label{
+			
+			font-size: 30upx;
+			font-family: PingFang SC;
+			font-weight: 400;
+			color: #0F1826;
+		}
+		.right{
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			.text{
+				font-size: 30upx;
+				font-family: PingFang SC;
+				font-weight: 400;
+				color: #0F1826;
+			}
+			.image{
+				margin-left: 10upx;
+				width: 30upx;
+				height: 30upx;
+			}
+			.input{
+				text-align: right;
+				font-size: 30upx;
+				font-family: PingFang SC;
+				font-weight: 400;
+				color: #0F1826;
+			}
+		}
+		.head{
+			border-radius: 50%;
+			width: 80upx;
+			height: 80upx;
+		}
+		.arrow{
+			width: 30upx;
+			height: 30upx;
+		}
+		.text{
+			font-size: 30upx;
+			font-family: PingFang SC;
+			font-weight: 400;
+			color: #0F1826;
+		}
+		.input{
+			text-align: right;
+			font-size: 30upx;
+			font-family: PingFang SC;
+			font-weight: 400;
+			color: #0F1826;
+		}
+		&.password{
+			margin-top: 20upx;
+			.right{
+				display: flex;
+				align-items: center;
+				.text{
+					font-size: 30upx;
+					font-family: PingFang SC;
+					font-weight: 400;
+					color: #0F1826;
+					margin-right: 15upx;
+				}
+			}
+		}
+	}
+	.btn-box{
+		margin-top: 15rpx;
+		height: 120upx;
+		padding: 0 30upx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		.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: #115296;
+			border-radius: 44upx;
+		}
+	}
+</style>

+ 174 - 174
pages_managedata/exprotList.vue

@@ -1,174 +1,174 @@
-<template>
-	<view class="column flex-1 hb">
-		<view class="p20 bgf">
-			<u-subsection :list="list" :current="actnav" @change="sectionChange" bgColor='#def1ff' inactiveColor="#666"></u-subsection>
-		</view>
-		<view class="column  scrolly">
-			<scroll-view scroll-y="true" class="hb" :refresher-enabled="isEnabled" :refresher-triggered="triggered"
-				refresher-background="rgba(0,0,0,0)" @refresherrefresh="pullDownRefresh"
-				@refresherrestore="triggered = false" :upper-threshold="100" :lower-threshold="100"
-				@refresherabort="triggered = false" @scrolltolower="reachBottom">
-				<view v-for="(item,index) in listgood" :key="index" class="listcss" @click="getlist(item)">
-					<view class="justify-between align-center">
-						<view class="w180 justify-between fs28 align-center ">
-							<u-avatar :src="item.fromAvatar" size="25"></u-avatar>
-							<text class="ml10 single-ellipsis">{{item.fromName}}</text>
-						</view>
-						<view class="column align-center">
-							<text class="fs24 base-color-9">更换为</text>
-							<image :src="imgPath+'/app/images/jiantou.png'" class="w60 h40"></image>
-						</view>
-						<view class="w180 justify-between fs28 align-center ">
-							<u-avatar :src="item.toAvatar" size="25"></u-avatar>
-							<text class="ml10 single-ellipsis">{{item.toName}}</text>
-						</view>
-					</view>
-					<view class="justify-between">
-						<view class="fs24 base-color-9">{{item.applyTime}}</view>
-						<view class="fs24 base-color-9 " style="color: orange;" v-if="actnav==0">待审核</view>
-						<view class="fs24 base-color-9 base-color" v-if="actnav==1">审核通过</view>
-						<view class="fs24 base-color-9 base-color-red" v-if="actnav==2">审核未通过</view>
-					</view>
-					
-				</view>
-			</scroll-view>
-			<u-loadmore :status="status" />
-		</view>
-		<u-popup :show="show" @close="close" @open="open" :closeOnClickOverlay="true"
-		mode="center" round='10'>
-			<view class="poplist scrolly">
-				<view class="center mb20">更换会员</view>
-				<view v-for="(item,index) in nowlist" :key="index" class="mtb16" >
-					<view class="justify-start align-center">
-						<u-avatar :src="item.avatar" size="25"></u-avatar>
-						<view class="fs28 ml16">昵称:</view>
-						<view class="fs28 ">{{item.userName}}</view>
-					</view>
-					<view class="justify-start align-center fs24 mt8 base-color-6 ">
-						<view>所属项目:</view>
-						<view >{{item.projectName}}</view>
-					</view>
-				</view>
-			</view>
-		</u-popup>
-	</view>
-</template>
-
-<script>
-	import {
-		getchangeslist
-	} from "@/api/manageCompany.js"
-	export default {
-		data() {
-			return {
-				list: ['待审核', '通过审核', '审核未通过'],
-				actnav:0,
-				triggered: false,
-				status: 'loadmore',
-				isEnabled: true,
-				pageNum: 1,
-				pageSize: 10,
-				listgood:[],
-				show:false,
-				nowlist:[]
-			}
-		},
-		onShow() {
-			this.getexaminelist()
-		},
-		computed: {
-		    imgPath() {
-		      return this.$store.state.imgpath
-		    }
-		},
-		methods: {
-			getlist(item){
-				this.show=!this.show
-				this.nowlist=item.users
-				console.log(this.nowlist)
-			},
-			close(){
-				this.show=!this.show
-				console.log(this.show)
-			},
-			open(){},
-			pullDownRefresh() {
-				// 下拉刷新
-				this.triggered = true; //下拉了状态为true
-				setTimeout(() => {
-					this.triggered = false;
-					uni.stopPullDownRefresh()
-					this.pageNum = 1;
-					this.getexaminelist('refresh') //触底  不穿执行else
-					// 请求接口里面需要判断是不是最后一页   是最后一页 status赋值为‘loadmore’没有更多了
-					// 请求接口
-				}, 1000)
-			},
-			reachBottom() {
-				// status这个是加载状态
-				console.log(111);
-				if (this.status === 'loadmore') {
-					this.status = 'loading'
-					uni.showNavigationBarLoading()
-					setTimeout(() => {
-						this.pageNum++
-						this.getexaminelist() //触底  不穿执行else
-						uni.hideNavigationBarLoading()
-					}, 1000);
-				}
-			},
-			sectionChange(index){
-				this.listgood=[]
-				this.actnav=index
-				this.getexaminelist()
-			},
-			getexaminelist(type){
-				this.listgood=[]
-				const data={
-					pageNum: this.pageNum,
-					pageSize: this.pageSize,
-					status:this.actnav
-				}
-				getchangeslist(data).then(res=>{
-					if(res.code==200){
-						// refresh 下拉
-						if (type == 'refresh') {
-							this.listgood = res.data.list
-						} else {
-							// 加载更多 当前页和下一页合并
-							this.listgood = [...this.listgood, ...res.data.list]
-						}
-						if (res.data.isLastPage) {
-							this.status = 'nomore'
-						} else {
-							this.status = 'loadmore'
-						}
-					}else{
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	// page{
-	// 	background-color: #fff;
-	// }
-	.listcss{
-		background-color: #fff;
-		margin: 20rpx;
-		padding: 20rpx;
-		border-radius: 10rpx;
-	}
-	.poplist{
-		width: 500rpx;
-		height: 600rpx;
-		border-radius: 20rpx;
-		padding: 20rpx;
-	}
-</style>
+<template>
+	<view class="column flex-1 hb">
+		<view class="p20 bgf">
+			<u-subsection :list="list" :current="actnav" @change="sectionChange" bgColor='#def1ff' inactiveColor="#666"></u-subsection>
+		</view>
+		<view class="column  scrolly">
+			<scroll-view scroll-y="true" class="hb" :refresher-enabled="isEnabled" :refresher-triggered="triggered"
+				refresher-background="rgba(0,0,0,0)" @refresherrefresh="pullDownRefresh"
+				@refresherrestore="triggered = false" :upper-threshold="100" :lower-threshold="100"
+				@refresherabort="triggered = false" @scrolltolower="reachBottom">
+				<view v-for="(item,index) in listgood" :key="index" class="listcss" @click="getlist(item)">
+					<view class="justify-between align-center">
+						<view class="w180 justify-between fs28 align-center ">
+							<u-avatar :src="item.fromAvatar" size="25"></u-avatar>
+							<text class="ml10 single-ellipsis">{{item.fromName}}</text>
+						</view>
+						<view class="column align-center">
+							<text class="fs24 base-color-9">更换为</text>
+							<image :src="imgPath+'/app/images/jiantou.png'" class="w60 h40"></image>
+						</view>
+						<view class="w180 justify-between fs28 align-center ">
+							<u-avatar :src="item.toAvatar" size="25"></u-avatar>
+							<text class="ml10 single-ellipsis">{{item.toName}}</text>
+						</view>
+					</view>
+					<view class="justify-between">
+						<view class="fs24 base-color-9">{{item.applyTime}}</view>
+						<view class="fs24 base-color-9 " style="color: orange;" v-if="actnav==0">待审核</view>
+						<view class="fs24 base-color-9 base-color" v-if="actnav==1">审核通过</view>
+						<view class="fs24 base-color-9 base-color-red" v-if="actnav==2">审核未通过</view>
+					</view>
+					
+				</view>
+			</scroll-view>
+			<u-loadmore :status="status" />
+		</view>
+		<u-popup :show="show" @close="close" @open="open" :closeOnClickOverlay="true"
+		mode="center" round='10'>
+			<view class="poplist scrolly">
+				<view class="center mb20">更换会员</view>
+				<view v-for="(item,index) in nowlist" :key="index" class="mtb16" >
+					<view class="justify-start align-center">
+						<u-avatar :src="item.avatar" size="25"></u-avatar>
+						<view class="fs28 ml16">昵称:</view>
+						<view class="fs28 ">{{item.userName}}</view>
+					</view>
+					<view class="justify-start align-center fs24 mt8 base-color-6 ">
+						<view>所属项目:</view>
+						<view >{{item.projectName}}</view>
+					</view>
+				</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	import {
+		getchangeslist
+	} from "@/api/manageCompany.js"
+	export default {
+		data() {
+			return {
+				list: ['待审核', '通过审核', '审核未通过'],
+				actnav:0,
+				triggered: false,
+				status: 'loadmore',
+				isEnabled: true,
+				pageNum: 1,
+				pageSize: 10,
+				listgood:[],
+				show:false,
+				nowlist:[]
+			}
+		},
+		onShow() {
+			this.getexaminelist()
+		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		},
+		methods: {
+			getlist(item){
+				this.show=!this.show
+				this.nowlist=item.users
+				console.log(this.nowlist)
+			},
+			close(){
+				this.show=!this.show
+				console.log(this.show)
+			},
+			open(){},
+			pullDownRefresh() {
+				// 下拉刷新
+				this.triggered = true; //下拉了状态为true
+				setTimeout(() => {
+					this.triggered = false;
+					uni.stopPullDownRefresh()
+					this.pageNum = 1;
+					this.getexaminelist('refresh') //触底  不穿执行else
+					// 请求接口里面需要判断是不是最后一页   是最后一页 status赋值为‘loadmore’没有更多了
+					// 请求接口
+				}, 1000)
+			},
+			reachBottom() {
+				// status这个是加载状态
+				console.log(111);
+				if (this.status === 'loadmore') {
+					this.status = 'loading'
+					uni.showNavigationBarLoading()
+					setTimeout(() => {
+						this.pageNum++
+						this.getexaminelist() //触底  不穿执行else
+						uni.hideNavigationBarLoading()
+					}, 1000);
+				}
+			},
+			sectionChange(index){
+				this.listgood=[]
+				this.actnav=index
+				this.getexaminelist()
+			},
+			getexaminelist(type){
+				this.listgood=[]
+				const data={
+					pageNum: this.pageNum,
+					pageSize: this.pageSize,
+					status:this.actnav
+				}
+				getchangeslist(data).then(res=>{
+					if(res.code==200){
+						// refresh 下拉
+						if (type == 'refresh') {
+							this.listgood = res.data.list
+						} else {
+							// 加载更多 当前页和下一页合并
+							this.listgood = [...this.listgood, ...res.data.list]
+						}
+						if (res.data.isLastPage) {
+							this.status = 'nomore'
+						} else {
+							this.status = 'loadmore'
+						}
+					}else{
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	// page{
+	// 	background-color: #fff;
+	// }
+	.listcss{
+		background-color: #fff;
+		margin: 20rpx;
+		padding: 20rpx;
+		border-radius: 10rpx;
+	}
+	.poplist{
+		width: 500rpx;
+		height: 600rpx;
+		border-radius: 20rpx;
+		padding: 20rpx;
+	}
+</style>

+ 291 - 291
pages_managedata/lableSetup.vue

@@ -1,291 +1,291 @@
-<template>
-	<view class="column  hb bgf">
-		<view class="align-center justify-between p20 bgf ">
-			<view class="justify-start fs28 align-center">
-				<u-icon name="bookmark-fill" color="#1677ff" size="28"></u-icon>
-				<view>自定义标签</view>
-			</view>
-			<view class="fs28" @click="isShowSelectAll=!isShowSelectAll">
-			{{isShowSelectAll?'取消多选':'多选'}}</view>
-		</view>
-		<view class="mtb20 mlr20" >
-			<u-search placeholder="请输入标签  多个标签用 , 隔开" v-model="tagkeywords" :showAction="false" height="30px"
-				@search='getcompanyTag' ></u-search>
-		</view>
-		<view class="column flex-1 scrolly plr20" >
-			<scroll-view scroll-y="true" class="hb" :refresher-enabled="isEnabled" :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="justify-start " v-for="(item,index) in companylabel"
-					:key="index">
-					<u-checkbox-group @change="selectlist(index)">
-						<u-checkbox :checked="item.checked" shape="circle" activeColor="#FF6C47" :name="true"
-							label=" " labelColor="#333" v-if="isShowSelectAll"/>
-					</u-checkbox-group>
-					<view class="justify-start align-center ptb16 flex-1" 
-					style="border-bottom: 2rpx solid #e7e7e7;" >
-						<u-icon name="list" color="#666" size="24"></u-icon>
-						<view class="fs28 ml12">{{item.tag}}</view>
-					</view>
-				</view>
-				<u-loadmore :status="statusA" />
-			</scroll-view>
-		</view>
-		<view class="h120"></view>
-		<view class="footbtn">
-			<view  v-if="isShowSelectAll" class="justify-between p20 bgf">
-				<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 plr60"
-						@click="changeProhibit">删除</button>
-				</view>
-			</view>
-			<view class='base-bg radius50 m20 p20 center colorf'
-			 @click="addLable" v-else>新增标签</view>
-		</view>
-		<view>
-			<u-modal :show="showlist" title="新增标签" @confirm="confirmchange"
-			 :showCancelButton="true" @cancel="cancel" style="flex: 0;">
-				<view class="slot-content">
-					<u-input placeholder="请输入新增标签" v-model="addlable"></u-input>
-				</view>
-			</u-modal>
-		</view>
-		<u-loading-page :loading="viewload" iconSize="32" loadingColor="#3c9cff" fontSize="20"
-		:loading-text="loadingtext" ></u-loading-page>
-	</view>
-</template>
-
-<script>
-	import {
-		getallTags,
-		addCompanyLabel,
-		deleteCompanyLabel
-	} from "@/api/manageCompany.js"
-	export default {
-		data() {
-			return {
-				viewload:true,
-				loadingtext:"数据加载中...",
-				isShowSelectAll:false,
-				showlist:false,
-				addlable:'',
-				companylabel:[],
-				isSelectAll:false,
-				isSelected:false,
-				selectedCount:0,
-				selectidAll:[],
-				tagpageNum:1,
-				tagpageSize:13,
-				tagkeywords:'',
-				statusA:"nomore",
-				triggereds:false,
-				isEnabled:true
-			}
-		},
-		mounted() {
-			this.getcompanylabel()
-		},
-		watch:{
-			selectedCount(oldVal,newVal){
-				return oldVal
-				console.log('message changed from', oldVal, 'to', newVal)
-			}
-		},
-		methods: {
-			getcompanyTag(value){
-				this.companylabel=[]
-				this.tagkeywords = value
-				this.tagpageNum=1
-				this.getcompanylabel()
-			},
-			reachBottoms() {
-				// status这个是加载状态
-				console.log(111);
-				if (this.statusA === 'loadmore') {
-					this.statusA = 'loading'
-					uni.showNavigationBarLoading()
-					setTimeout(() => {
-						this.tagpageNum++
-						this.getcompanylabel() //触底  不穿执行else
-						uni.hideNavigationBarLoading()
-					}, 1000);
-				}
-			},
-			//标签展示下拉
-			pullDownRefreshs() {
-				// 下拉
-				this.triggereds = true; //下拉了状态为true
-				setTimeout(() => {
-					this.triggereds = false;
-					uni.stopPullDownRefresh()
-					this.tagpageNum = 1;
-					this.getcompanylabel('refresh') //触底  不穿执行else
-					// 请求接口里面需要判断是不是最后一页   是最后一页 status赋值为‘loadmore’没有更多了
-					// 请求接口
-				}, 1000)
-			},
-			changeProhibit(){
-				const alltag=this.selectidAll.join(',')
-				console.log(this.selectidAll)
-				//删除标签
-				if(this.selectidAll==''){
-					uni.showToast({
-						icon: 'none',
-						title: '请选择标签'
-					})
-					return
-				}
-				const params={
-					tagIds:alltag
-				}
-				console.log(this.selectidAll)
-				deleteCompanyLabel(alltag).then(res=>{
-					if(res.code==200){
-						this.companylabel=[]
-						this.tagpageNum=1
-						this.selectidAll=[]
-						uni.showToast({
-							icon: 'none',
-							title: '标签删除成功'
-						})
-						this.isSelectAll=false
-						this.selectedCount=0
-						this.getcompanylabel()
-					}else {
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-			},
-			getcompanylabel(type ){
-				this.tagkeywords =this.tagkeywords.replace(/,/g,',')
-				const data ={
-					pageNum:this.tagpageNum,
-					pageSize:this.tagpageSize,
-					keyword:this.tagkeywords
-				}
-				getallTags(data).then(res=>{
-					if(res.code==200){
-						this.viewload=false
-						const dataList = res.data.list.map(item => {
-							return {
-								...item,
-								checked: false,
-							}
-						})
-						if (type == 'refresh') {
-							this.companylabel = dataList
-						}else {
-							this.companylabel = [...this.companylabel, ...dataList]
-						}
-						if (res.data.isLastPage) {
-							this.statusA = 'nomore'
-						} else {
-							this.statusA = 'loadmore'
-						}
-					}else {
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-			},
-			addcompanySingle(){
-				const params={
-					tag:this.addlable
-				}
-				addCompanyLabel(params).then(res=>{
-					if(res.code==200){
-						this.tagpageNum=1
-						this.companylabel=[]
-						this.addlable=''
-						uni.showToast({
-							icon: 'none',
-							title: '标签添加成功'
-						})
-						this.getcompanylabel()
-					}else {
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-			},
-			addLable(){
-				this.showlist=!this.showlist
-			},
-			selectlist(i){
-				// 单选 /反选
-				let arr = {
-					...this.companylabel[i],
-					checked: !this.companylabel[i].checked
-				}
-				this.$set(this.companylabel, i, arr)
-				const seletnum = this.companylabel.filter(item => item.checked).map(item => item.tagId)
-				this.selectidAll = this.companylabel.filter(item => item.checked).map(item => item.tagId)
-				this.selectedCount=seletnum.length
-				this.isSelectAll = this.companylabel.every(item => item.checked)
-				if (this.isSelectAll) {
-					this.companylabel = this.companylabel.map(item => {
-						return {
-							...item,
-							checked: this.isSelectAll
-						}
-					})
-				}
-			},
-			selectAll(){
-				// 全选
-				this.isSelectAll = !this.isSelectAll
-				console.log(this.isSelectAll)
-				this.companylabel = this.companylabel.map(item => {
-					// 每一项的 checked为 全选的状态
-					return {
-						...item,
-						checked: this.isSelectAll
-					}
-				})
-				this.selectidAll = this.companylabel.filter(item => item.checked).map(item => item.tagId)
-				const seletnum = this.companylabel.filter(item => item.checked).map(item => item.tagId)
-				this.selectedCount=seletnum.length
-				console.log(this.companylabel)
-			},
-			confirmchange(){
-				if(this.addlable==''){
-					uni.showToast({
-						icon: 'none',
-						title: "请输入标签"
-					})
-				}else{
-					this.addcompanySingle()
-					this.showlist=!this.showlist
-				}
-			},
-			cancel(){
-				this.showlist=!this.showlist
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-.footbtn{
-	position: fixed;
-	bottom: 0;
-	width: 100%;
-	background-color: #fff;
-}
-</style>
+<template>
+	<view class="column  hb bgf">
+		<view class="align-center justify-between p20 bgf ">
+			<view class="justify-start fs28 align-center">
+				<u-icon name="bookmark-fill" color="#1677ff" size="28"></u-icon>
+				<view>自定义标签</view>
+			</view>
+			<view class="fs28" @click="isShowSelectAll=!isShowSelectAll">
+			{{isShowSelectAll?'取消多选':'多选'}}</view>
+		</view>
+		<view class="mtb20 mlr20" >
+			<u-search placeholder="请输入标签  多个标签用 , 隔开" v-model="tagkeywords" :showAction="false" height="30px"
+				@search='getcompanyTag' ></u-search>
+		</view>
+		<view class="column flex-1 scrolly plr20" >
+			<scroll-view scroll-y="true" class="hb" :refresher-enabled="isEnabled" :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="justify-start " v-for="(item,index) in companylabel"
+					:key="index">
+					<u-checkbox-group @change="selectlist(index)">
+						<u-checkbox :checked="item.checked" shape="circle" activeColor="#FF6C47" :name="true"
+							label=" " labelColor="#333" v-if="isShowSelectAll"/>
+					</u-checkbox-group>
+					<view class="justify-start align-center ptb16 flex-1" 
+					style="border-bottom: 2rpx solid #e7e7e7;" >
+						<u-icon name="list" color="#666" size="24"></u-icon>
+						<view class="fs28 ml12">{{item.tag}}</view>
+					</view>
+				</view>
+				<u-loadmore :status="statusA" />
+			</scroll-view>
+		</view>
+		<view class="h120"></view>
+		<view class="footbtn">
+			<view  v-if="isShowSelectAll" class="justify-between p20 bgf">
+				<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 plr60"
+						@click="changeProhibit">删除</button>
+				</view>
+			</view>
+			<view class='base-bg radius50 m20 p20 center colorf'
+			 @click="addLable" v-else>新增标签</view>
+		</view>
+		<view>
+			<u-modal :show="showlist" title="新增标签" @confirm="confirmchange"
+			 :showCancelButton="true" @cancel="cancel" style="flex: 0;">
+				<view class="slot-content">
+					<u-input placeholder="请输入新增标签" v-model="addlable"></u-input>
+				</view>
+			</u-modal>
+		</view>
+		<u-loading-page :loading="viewload" iconSize="32" loadingColor="#3c9cff" fontSize="20"
+		:loading-text="loadingtext" ></u-loading-page>
+	</view>
+</template>
+
+<script>
+	import {
+		getallTags,
+		addCompanyLabel,
+		deleteCompanyLabel
+	} from "@/api/manageCompany.js"
+	export default {
+		data() {
+			return {
+				viewload:true,
+				loadingtext:"数据加载中...",
+				isShowSelectAll:false,
+				showlist:false,
+				addlable:'',
+				companylabel:[],
+				isSelectAll:false,
+				isSelected:false,
+				selectedCount:0,
+				selectidAll:[],
+				tagpageNum:1,
+				tagpageSize:13,
+				tagkeywords:'',
+				statusA:"nomore",
+				triggereds:false,
+				isEnabled:true
+			}
+		},
+		mounted() {
+			this.getcompanylabel()
+		},
+		watch:{
+			selectedCount(oldVal,newVal){
+				return oldVal
+				console.log('message changed from', oldVal, 'to', newVal)
+			}
+		},
+		methods: {
+			getcompanyTag(value){
+				this.companylabel=[]
+				this.tagkeywords = value
+				this.tagpageNum=1
+				this.getcompanylabel()
+			},
+			reachBottoms() {
+				// status这个是加载状态
+				console.log(111);
+				if (this.statusA === 'loadmore') {
+					this.statusA = 'loading'
+					uni.showNavigationBarLoading()
+					setTimeout(() => {
+						this.tagpageNum++
+						this.getcompanylabel() //触底  不穿执行else
+						uni.hideNavigationBarLoading()
+					}, 1000);
+				}
+			},
+			//标签展示下拉
+			pullDownRefreshs() {
+				// 下拉
+				this.triggereds = true; //下拉了状态为true
+				setTimeout(() => {
+					this.triggereds = false;
+					uni.stopPullDownRefresh()
+					this.tagpageNum = 1;
+					this.getcompanylabel('refresh') //触底  不穿执行else
+					// 请求接口里面需要判断是不是最后一页   是最后一页 status赋值为‘loadmore’没有更多了
+					// 请求接口
+				}, 1000)
+			},
+			changeProhibit(){
+				const alltag=this.selectidAll.join(',')
+				console.log(this.selectidAll)
+				//删除标签
+				if(this.selectidAll==''){
+					uni.showToast({
+						icon: 'none',
+						title: '请选择标签'
+					})
+					return
+				}
+				const params={
+					tagIds:alltag
+				}
+				console.log(this.selectidAll)
+				deleteCompanyLabel(alltag).then(res=>{
+					if(res.code==200){
+						this.companylabel=[]
+						this.tagpageNum=1
+						this.selectidAll=[]
+						uni.showToast({
+							icon: 'none',
+							title: '标签删除成功'
+						})
+						this.isSelectAll=false
+						this.selectedCount=0
+						this.getcompanylabel()
+					}else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			getcompanylabel(type ){
+				this.tagkeywords =this.tagkeywords.replace(/,/g,',')
+				const data ={
+					pageNum:this.tagpageNum,
+					pageSize:this.tagpageSize,
+					keyword:this.tagkeywords
+				}
+				getallTags(data).then(res=>{
+					if(res.code==200){
+						this.viewload=false
+						const dataList = res.data.list.map(item => {
+							return {
+								...item,
+								checked: false,
+							}
+						})
+						if (type == 'refresh') {
+							this.companylabel = dataList
+						}else {
+							this.companylabel = [...this.companylabel, ...dataList]
+						}
+						if (res.data.isLastPage) {
+							this.statusA = 'nomore'
+						} else {
+							this.statusA = 'loadmore'
+						}
+					}else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			addcompanySingle(){
+				const params={
+					tag:this.addlable
+				}
+				addCompanyLabel(params).then(res=>{
+					if(res.code==200){
+						this.tagpageNum=1
+						this.companylabel=[]
+						this.addlable=''
+						uni.showToast({
+							icon: 'none',
+							title: '标签添加成功'
+						})
+						this.getcompanylabel()
+					}else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			addLable(){
+				this.showlist=!this.showlist
+			},
+			selectlist(i){
+				// 单选 /反选
+				let arr = {
+					...this.companylabel[i],
+					checked: !this.companylabel[i].checked
+				}
+				this.$set(this.companylabel, i, arr)
+				const seletnum = this.companylabel.filter(item => item.checked).map(item => item.tagId)
+				this.selectidAll = this.companylabel.filter(item => item.checked).map(item => item.tagId)
+				this.selectedCount=seletnum.length
+				this.isSelectAll = this.companylabel.every(item => item.checked)
+				if (this.isSelectAll) {
+					this.companylabel = this.companylabel.map(item => {
+						return {
+							...item,
+							checked: this.isSelectAll
+						}
+					})
+				}
+			},
+			selectAll(){
+				// 全选
+				this.isSelectAll = !this.isSelectAll
+				console.log(this.isSelectAll)
+				this.companylabel = this.companylabel.map(item => {
+					// 每一项的 checked为 全选的状态
+					return {
+						...item,
+						checked: this.isSelectAll
+					}
+				})
+				this.selectidAll = this.companylabel.filter(item => item.checked).map(item => item.tagId)
+				const seletnum = this.companylabel.filter(item => item.checked).map(item => item.tagId)
+				this.selectedCount=seletnum.length
+				console.log(this.companylabel)
+			},
+			confirmchange(){
+				if(this.addlable==''){
+					uni.showToast({
+						icon: 'none',
+						title: "请输入标签"
+					})
+				}else{
+					this.addcompanySingle()
+					this.showlist=!this.showlist
+				}
+			},
+			cancel(){
+				this.showlist=!this.showlist
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+.footbtn{
+	position: fixed;
+	bottom: 0;
+	width: 100%;
+	background-color: #fff;
+}
+</style>

+ 463 - 463
pages_managedata/managedetail.vue

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

+ 338 - 338
pages_managedata/saleInfo.vue

@@ -1,338 +1,338 @@
-<template>
-	<view class="content">
-		<!-- 个人信息 -->
-		<view class="user-info">
-			<view class="info-box">
-				<view class="left">
-					<view class="head-box">
-						<image class="img" :src="avatar" mode="aspectFill"></image>
-					</view>
-					<view class="info">
-						<!-- <text class="name">{{nickName}}</text> -->
-						<!-- <text class="title">{{postNames}}</text> -->
-						<view>
-							<text class="fs28">{{nickName}}</text>
-							<text class="fs24 ml40 base-color-3">{{sex}}</text>
-						</view>
-						<view class="base-color-9 fs24 mt12">注册时间:{{!userinfo.createTime||userinfo.createTime.slice(0, 10)}}</view>
-					</view>
-				</view>
-				<image v-if="!isShow" class="right" :src="imgPath+'/app/images/icon_edit.png'" mode="aspectFill" @click="editInfo"></image>
-			</view>
-			<!-- 公司 -->
-			<view class="justify-between">
-				<view class="comp-info">
-					<image class="img" :src="imgPath+'/app/images/icon_comp.png'" mode="aspectFill"></image>
-					<text class="fs24 base-color-6">{{userinfo.deptName}}</text>
-				</view>
-				<view class="comp-info">
-					<image class="img" :src="imgPath+'/app/images/phone.png'" mode="aspectFill"></image>
-					<text class="fs24 base-color-6">{{userinfo.phonenumber}}</text>
-				</view>
-			</view>
-			
-		</view>
-		<!-- 详细信息 -->
-		<view class="p20 justify-between wrap">
-			<view class="base-bg-sure radius12 pl20 ptb12 item">
-				<view class="bold">会员总数</view>
-				<view class="mt12 base-color">
-					<text class="fs40 bold">{{userinfo.vipCount}}</text>
-					<text class="fs28">人</text>
-				</view>
-			</view>
-			<view class="base-bg-sure radius12 pl20 ptb12 item">
-				<view class="bold">今日新增会员</view>
-				<view class="mt12 base-color">
-					<text class="fs40 bold">{{userinfo.newVipCount}}</text>
-					<text class="fs28">人</text>
-				</view>
-			</view>
-			<view class="base-bg-sure radius12 pl20 ptb12 item">
-				<view class="bold">会员红包数</view>
-				<view class="mt12 base-color">
-					<text class="fs40 bold">{{userinfo.redPacketCount}}</text>
-					<text class="fs28">个</text>
-				</view>
-			</view>
-			<view class="base-bg-sure radius12 pl20 ptb12 item">
-				<view class="bold">新会员红包金额</view>
-				<view class="mt12 base-color">
-					<text class="fs40 bold">{{userinfo.newVipRedPackAmount}}</text>
-					<text class="fs28">元</text>
-				</view>
-			</view>
-		</view>
-		<view class="footer-btn ">
-			<view :class="userinfo.isAudit==1?'shenhed':'notshenhe'" @click="submitshen">{{userinfo.isAudit==1?'已审核':'待审核'}}</view>
-			<view :class="userinfo.status==1?'notshenhe':'shenhed'" @click="submitjin">{{userinfo.status==1?'禁用':'未禁用'}}</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {subsalesaudit,changesalesState,getUserInfoByUserId,getUserInfo} from '@/api/manageCompany.js';
-	export default {
-		data() {
-			return {
-				avatar:this.$store.state.imgpath+"/app/images/default.png", 
-				nickName:"",
-				deptName:"",
-				postNames:"",
-				phonenumber:"",
-				email:"",
-				sex:"",
-				isShow:false,
-				userId:'',
-				userinfo:[],
-				shenhe:false,
-				jinyong:false,
-			}
-		},
-		onLoad(option) {
-			// 修改顶部导航背景色
-			// uni.setNavigationBarColor({
-			// 	frontColor: '#ffffff',
-			// 	backgroundColor: '#4BC9B1',
-			// 	animation: {
-			// 		duration: 400,
-			// 		timingFunc: 'easeIn'
-			// 	}
-			// })
-			if(!this.utils.isEmpty(option.userId)){
-				this.userId = option.userId;
-				
-				this.isShow=true;
-			}
-			
-		},
-		onShow() {
-			if(this.isShow){
-				this.getUserInfoByUserId(this.userId);
-			}
-			else{
-				this.getUserInfo();
-			}
-		},
-		computed: {
-		    imgPath() {
-		      return this.$store.state.imgpath
-		    }
-		},
-		methods: {
-			submitshen(){
-				if(this.userinfo.isAudit==1){
-					uni.showToast({
-						title: "用户已经通过审核,无需多次审核",
-						icon: 'none',
-					});
-					return
-				}
-				this.subsalesaudits()
-			},
-			submitjin(){
-				if(this.userinfo.status==0){
-					uni.showToast({
-						title: "用户已经解除禁用,无需多次解除",
-						icon: 'none',
-					});
-					return
-				}
-				this.changesalesStates()
-			},
-			subsalesaudits(){
-				const data={
-					 userIds:this.userId
-				}
-				subsalesaudit(this.userId).then(res=>{
-					console.log(res)
-					if(res.code==200){
-						uni.showToast({
-							title: "用户通过审核,成为销售!",
-							icon: 'none',
-						});
-						uni.navigateBack({
-							delta: 1 
-						})
-					}else{
-						uni.showToast({
-							title: res.msg,
-							icon: 'none',
-						});
-					}
-				})
-			},
-			changesalesStates(){
-				const data={
-					 userIds:this.userId
-				}
-				changesalesState(this.userId).then(res=>{
-					console.log(res)
-					if(res.code==200){
-						uni.showToast({
-							title: "用户解除禁用!",
-							icon: 'none',
-						});
-						uni.navigateBack({
-							delta: 1 
-						})
-					}else{
-						uni.showToast({
-							title: res.msg,
-							icon: 'none',
-						});
-					}
-				})
-			},
-			bindUser(data){
-				var that=this;
-				that.userinfo=data.user
-				console.log(that.userinfo)
-				that.nickName=data.user.nickName;
-				that.deptName=data.user.dept.deptName;
-				that.posts=data.post;
-				that.phonenumber=data.user.phonenumber;
-				that.email=data.user.email;
-				if(data.user.sex==0){
-					that.sex="男";
-				}
-				else if(data.user.sex==1){
-					that.sex="女";
-				}
-				else if(data.user.sex==2){
-					that.sex="未知";
-				}
-				if(data.post!=null&&data.post.length>0){
-					var posts=[];
-					data.post.forEach( (v,i) => {
-						posts.push(v);
-					},this);
-					that.postNames=posts.toString()
-				}
-				if(!that.utils.isEmpty(data.user.avatar)){
-					that.avatar=uni.getStorageSync('requestPath')+data.user.avatar;
-				}
-			},
-			getUserInfoByUserId(userId){
-				var data = {userId:userId};
-				var that=this;
-				getUserInfoByUserId(data).then(
-					res => {
-						// console.log(res)
-						that.bindUser(res);
-					},
-					rej => {}
-				);
-			},
-			getUserInfo(){
-				var data = {};
-				var that=this;
-				getUserInfo(data).then(
-					res => {
-						that.bindUser(res);
-					},
-					rej => {}
-				);
-			},
-			// 拨打电话
-			callPhone(tel){
-				uni.makePhoneCall({
-					phoneNumber: tel
-				})
-			},
-			// 个人信息编辑
-			editInfo() {
-				uni.navigateTo({
-					url: '../editUser'
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	page{
-		background: #fff;
-	}
-</style>
-<style scoped lang="scss">
-	.footer-btn{
-		display: flex;
-		justify-content: space-around;
-		position: fixed;
-		bottom: 0;
-		width: 100%;
-		padding: 40rpx 0;
-		view{
-			width: 40%;
-			text-align: center;
-			padding: 20rpx 0;
-			border-radius: 50rpx;
-		}
-	}
-	.shenhed{
-		background-color: rgba(64, 149,229,0.1);
-		border: 2rpx solid #4095E5;
-		color:#4095E5 ;
-	}
-	.notshenhe{
-		background-color:rgba(255, 108,71,0.1) ;
-		border: 2rpx solid #FF6C47;
-		color: #FF6C47;
-	}
-	.item{
-		width: calc(50% - 20rpx);
-		margin-top: 20rpx;
-	}
-	.content{
-		// 个人信息
-		.user-info{
-			background: linear-gradient(to right, #dae9ff, #e1e1fd);
-			padding: 0 30upx;
-			.info-box{
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				.left{
-					display: flex;
-					align-items: center;
-					justify-content: center;
-					padding: 20upx 0;
-					.head-box{
-						width: 120upx;
-						height: 120upx;
-						line-height: 100upx;
-						font-size: 30upx;
-						color: #fff;
-						text-align: center;
-						margin-right: 20upx;
-						.img{
-							border-radius: 50%;
-							width: 100%;
-							height: 100%;
-						}
-					}
-				}
-				.right{
-					width: 40upx;
-					height: 40upx;
-				}
-			}
-			.comp-info{
-				padding: 20upx 0 40upx;
-				display: flex;
-				align-items: center;
-				.img{
-					width: 30upx;
-					height: 30upx;
-					margin-right: 20upx;
-				}
-				.text{
-					font-size: 30upx;
-					color: #fff;
-				}
-			}
-		}
-		
-	}
-</style>
+<template>
+	<view class="content">
+		<!-- 个人信息 -->
+		<view class="user-info">
+			<view class="info-box">
+				<view class="left">
+					<view class="head-box">
+						<image class="img" :src="avatar" mode="aspectFill"></image>
+					</view>
+					<view class="info">
+						<!-- <text class="name">{{nickName}}</text> -->
+						<!-- <text class="title">{{postNames}}</text> -->
+						<view>
+							<text class="fs28">{{nickName}}</text>
+							<text class="fs24 ml40 base-color-3">{{sex}}</text>
+						</view>
+						<view class="base-color-9 fs24 mt12">注册时间:{{!userinfo.createTime||userinfo.createTime.slice(0, 10)}}</view>
+					</view>
+				</view>
+				<image v-if="!isShow" class="right" :src="imgPath+'/app/images/icon_edit.png'" mode="aspectFill" @click="editInfo"></image>
+			</view>
+			<!-- 公司 -->
+			<view class="justify-between">
+				<view class="comp-info">
+					<image class="img" :src="imgPath+'/app/images/icon_comp.png'" mode="aspectFill"></image>
+					<text class="fs24 base-color-6">{{userinfo.deptName}}</text>
+				</view>
+				<view class="comp-info">
+					<image class="img" :src="imgPath+'/app/images/phone.png'" mode="aspectFill"></image>
+					<text class="fs24 base-color-6">{{userinfo.phonenumber}}</text>
+				</view>
+			</view>
+			
+		</view>
+		<!-- 详细信息 -->
+		<view class="p20 justify-between wrap">
+			<view class="base-bg-sure radius12 pl20 ptb12 item">
+				<view class="bold">会员总数</view>
+				<view class="mt12 base-color">
+					<text class="fs40 bold">{{userinfo.vipCount}}</text>
+					<text class="fs28">人</text>
+				</view>
+			</view>
+			<view class="base-bg-sure radius12 pl20 ptb12 item">
+				<view class="bold">今日新增会员</view>
+				<view class="mt12 base-color">
+					<text class="fs40 bold">{{userinfo.newVipCount}}</text>
+					<text class="fs28">人</text>
+				</view>
+			</view>
+			<view class="base-bg-sure radius12 pl20 ptb12 item">
+				<view class="bold">会员红包数</view>
+				<view class="mt12 base-color">
+					<text class="fs40 bold">{{userinfo.redPacketCount}}</text>
+					<text class="fs28">个</text>
+				</view>
+			</view>
+			<view class="base-bg-sure radius12 pl20 ptb12 item">
+				<view class="bold">新会员红包金额</view>
+				<view class="mt12 base-color">
+					<text class="fs40 bold">{{userinfo.newVipRedPackAmount}}</text>
+					<text class="fs28">元</text>
+				</view>
+			</view>
+		</view>
+		<view class="footer-btn ">
+			<view :class="userinfo.isAudit==1?'shenhed':'notshenhe'" @click="submitshen">{{userinfo.isAudit==1?'已审核':'待审核'}}</view>
+			<view :class="userinfo.status==1?'notshenhe':'shenhed'" @click="submitjin">{{userinfo.status==1?'禁用':'未禁用'}}</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {subsalesaudit,changesalesState,getUserInfoByUserId,getUserInfo} from '@/api/manageCompany.js';
+	export default {
+		data() {
+			return {
+				avatar:this.$store.state.imgpath+"/app/images/default.png", 
+				nickName:"",
+				deptName:"",
+				postNames:"",
+				phonenumber:"",
+				email:"",
+				sex:"",
+				isShow:false,
+				userId:'',
+				userinfo:[],
+				shenhe:false,
+				jinyong:false,
+			}
+		},
+		onLoad(option) {
+			// 修改顶部导航背景色
+			// uni.setNavigationBarColor({
+			// 	frontColor: '#ffffff',
+			// 	backgroundColor: '#4BC9B1',
+			// 	animation: {
+			// 		duration: 400,
+			// 		timingFunc: 'easeIn'
+			// 	}
+			// })
+			if(!this.utils.isEmpty(option.userId)){
+				this.userId = option.userId;
+				
+				this.isShow=true;
+			}
+			
+		},
+		onShow() {
+			if(this.isShow){
+				this.getUserInfoByUserId(this.userId);
+			}
+			else{
+				this.getUserInfo();
+			}
+		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		},
+		methods: {
+			submitshen(){
+				if(this.userinfo.isAudit==1){
+					uni.showToast({
+						title: "用户已经通过审核,无需多次审核",
+						icon: 'none',
+					});
+					return
+				}
+				this.subsalesaudits()
+			},
+			submitjin(){
+				if(this.userinfo.status==0){
+					uni.showToast({
+						title: "用户已经解除禁用,无需多次解除",
+						icon: 'none',
+					});
+					return
+				}
+				this.changesalesStates()
+			},
+			subsalesaudits(){
+				const data={
+					 userIds:this.userId
+				}
+				subsalesaudit(this.userId).then(res=>{
+					console.log(res)
+					if(res.code==200){
+						uni.showToast({
+							title: "用户通过审核,成为销售!",
+							icon: 'none',
+						});
+						uni.navigateBack({
+							delta: 1 
+						})
+					}else{
+						uni.showToast({
+							title: res.msg,
+							icon: 'none',
+						});
+					}
+				})
+			},
+			changesalesStates(){
+				const data={
+					 userIds:this.userId
+				}
+				changesalesState(this.userId).then(res=>{
+					console.log(res)
+					if(res.code==200){
+						uni.showToast({
+							title: "用户解除禁用!",
+							icon: 'none',
+						});
+						uni.navigateBack({
+							delta: 1 
+						})
+					}else{
+						uni.showToast({
+							title: res.msg,
+							icon: 'none',
+						});
+					}
+				})
+			},
+			bindUser(data){
+				var that=this;
+				that.userinfo=data.user
+				console.log(that.userinfo)
+				that.nickName=data.user.nickName;
+				that.deptName=data.user.dept.deptName;
+				that.posts=data.post;
+				that.phonenumber=data.user.phonenumber;
+				that.email=data.user.email;
+				if(data.user.sex==0){
+					that.sex="男";
+				}
+				else if(data.user.sex==1){
+					that.sex="女";
+				}
+				else if(data.user.sex==2){
+					that.sex="未知";
+				}
+				if(data.post!=null&&data.post.length>0){
+					var posts=[];
+					data.post.forEach( (v,i) => {
+						posts.push(v);
+					},this);
+					that.postNames=posts.toString()
+				}
+				if(!that.utils.isEmpty(data.user.avatar)){
+					that.avatar=uni.getStorageSync('requestPath')+data.user.avatar;
+				}
+			},
+			getUserInfoByUserId(userId){
+				var data = {userId:userId};
+				var that=this;
+				getUserInfoByUserId(data).then(
+					res => {
+						// console.log(res)
+						that.bindUser(res);
+					},
+					rej => {}
+				);
+			},
+			getUserInfo(){
+				var data = {};
+				var that=this;
+				getUserInfo(data).then(
+					res => {
+						that.bindUser(res);
+					},
+					rej => {}
+				);
+			},
+			// 拨打电话
+			callPhone(tel){
+				uni.makePhoneCall({
+					phoneNumber: tel
+				})
+			},
+			// 个人信息编辑
+			editInfo() {
+				uni.navigateTo({
+					url: '../editUser'
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		background: #fff;
+	}
+</style>
+<style scoped lang="scss">
+	.footer-btn{
+		display: flex;
+		justify-content: space-around;
+		position: fixed;
+		bottom: 0;
+		width: 100%;
+		padding: 40rpx 0;
+		view{
+			width: 40%;
+			text-align: center;
+			padding: 20rpx 0;
+			border-radius: 50rpx;
+		}
+	}
+	.shenhed{
+		background-color: rgba(64, 149,229,0.1);
+		border: 2rpx solid #4095E5;
+		color:#4095E5 ;
+	}
+	.notshenhe{
+		background-color:rgba(255, 108,71,0.1) ;
+		border: 2rpx solid #FF6C47;
+		color: #FF6C47;
+	}
+	.item{
+		width: calc(50% - 20rpx);
+		margin-top: 20rpx;
+	}
+	.content{
+		// 个人信息
+		.user-info{
+			background: linear-gradient(to right, #dae9ff, #e1e1fd);
+			padding: 0 30upx;
+			.info-box{
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				.left{
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					padding: 20upx 0;
+					.head-box{
+						width: 120upx;
+						height: 120upx;
+						line-height: 100upx;
+						font-size: 30upx;
+						color: #fff;
+						text-align: center;
+						margin-right: 20upx;
+						.img{
+							border-radius: 50%;
+							width: 100%;
+							height: 100%;
+						}
+					}
+				}
+				.right{
+					width: 40upx;
+					height: 40upx;
+				}
+			}
+			.comp-info{
+				padding: 20upx 0 40upx;
+				display: flex;
+				align-items: center;
+				.img{
+					width: 30upx;
+					height: 30upx;
+					margin-right: 20upx;
+				}
+				.text{
+					font-size: 30upx;
+					color: #fff;
+				}
+			}
+		}
+		
+	}
+</style>

+ 257 - 257
pages_managedata/userInfo.vue

@@ -1,257 +1,257 @@
-<template>
-	<view class="content">
-		<!-- 个人信息 -->
-		<view class="user-info">
-			<view class="info-box">
-				<view class="left justify-center align-center">
-					<view class="head-box center">
-						<u-avatar :src="avatar" size="50"></u-avatar>
-					</view>
-					<view class="info">
-						<text class="name">{{nickName}}</text>
-						<text class="title">{{phonenumber}}</text>
-					</view>
-				</view>
-				<image class="right" :src="imgPath+'/app/images/icon_edit.png'" mode="aspectFill'" @click="editInfo"></image>
-			</view>
-			<!-- 公司 -->
-			<view class="comp-info">
-				<image class="img" :src="imgPath+'/app/images/icon_comp_white.png'" mode="aspectFill"></image>
-				<text class="text">{{deptName}}</text>
-			</view>
-		</view>
-		<!-- 详细信息 -->
-		<view class="info-detail">
-			<view class="item">
-				<text class="label">姓名</text>
-				<text class="text">{{nickName}}</text>
-			</view>
-			<view class="item">
-				<text class="label">性别</text>
-				<text class="text">{{sex}}</text>
-			</view>
-			<view class="item column" @click="callPhone(phonenumber)">
-				<view class="left">
-					<text class="label">手机</text>
-					<text class="text">{{phonenumber}}</text>
-				</view>
-			</view>
-			<view class="item">
-				<text class="label">邮箱</text>
-				<text class="text">{{email}}</text>
-			</view>
-			<view class="item">
-				<text class="label">部门</text>
-				<text class="text">{{deptName}}</text>
-			</view>
-			<view class="item">
-				<text class="label">岗位</text>
-				<text class="text">{{postNames}}</text>
-			</view>
-			<view class="item">
-				<text class="label">角色</text>
-				<text class="text">{{roleNames}}</text>
-			</view>
-			<view class="item justify-start align-center">
-				<text class="label">二维码</text>
-				<!-- <text class="text">{{postNames}}</text> -->
-				<image :src="qrCodeWeixin" class="w120 h120" mode="aspectFill"></image>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {getCompanyUser} from '@/api/manageCompany.js';
-	export default {
-		data() {
-			return {
-				avatar:this.$store.state.imgpath+"/app/images/detault_head.jpg", 
-				nickName:"",
-				deptName:"",
-				postNames:"",
-				phonenumber:"",
-				email:"",
-				sex:"",
-				qrCodeWeixin:"",
-				isShow:false,
-				userId:undefined,
-				roleNames:''
-			}
-		},
-		onLoad(option) {
-			// 修改顶部导航背景色
-			// uni.setNavigationBarColor({
-			// 	frontColor: '#ffffff',
-			// 	backgroundColor: '#4BC9B1',
-			// 	animation: {
-			// 		duration: 400,
-			// 		timingFunc: 'easeIn'
-			// 	}
-			// })
-			
-		},
-		computed: {
-		    imgPath() {
-		      return this.$store.state.imgpath
-		    }
-		},
-		onShow() {
-			this.getCompanyUser();
-		},
-		methods: {
-			bindUser(data){
-				var that=this;
-				that.nickName=data.nickName;
-				that.deptName=data.companyName?data.companyName:'暂无';
-				that.phonenumber=data.phonenumber?data.phonenumber:'暂无';
-				if(data.posts){
-					that.postNames=data.posts.map(item=>item.postName).join(",")
-				}
-				if(data.roles){
-					this.roleNames=data.roles.map(item=>item.roleName).join(",")
-				}
-				// this.postNames=data.posts.map(item=>item.postName).join(",")||'暂无'
-				// this.roleNames=data.roles.map(item=>item.roleName).join(",")||'暂无'
-				that.email=data.email?data.email:'暂无';
-				if(data.sex==0){
-					that.sex="男";
-				}
-				else if(data.sex==1){
-					that.sex="女";
-				}
-				else if(data.sex==2){
-					that.sex="未知";
-				}
-				that.qrCodeWeixin=uni.getStorageSync('requestPath')+data.qrCodeWeixin
-				if(data.avatar){
-					that.avatar=uni.getStorageSync('requestPath')+data.avatar;
-				}
-			},
-			getCompanyUser(){
-				var data = {};
-				var that=this;
-				getCompanyUser(data).then(
-					res => {
-						that.bindUser(res.user);
-					},
-					rej => {}
-				);
-			},
-			// 拨打电话
-			callPhone(tel){
-				uni.makePhoneCall({
-					phoneNumber: tel
-				})
-			},
-			// 个人信息编辑
-			editInfo() {
-				uni.navigateTo({
-					url: 'editUser'
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	page{
-		background: #fff;
-	}
-</style>
-<style scoped lang="scss">
-	.content{
-		// 个人信息
-		.user-info{
-			// background: #115296;
-			background: linear-gradient(to right, #dae9ff, #e1e1fd);
-			padding: 0 30upx;
-			.info-box{
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				.left{
-					display: flex;
-					align-items: center;
-					justify-content: center;
-					padding: 20upx 0;
-					.head-box{
-						width: 120upx;
-						height: 120upx;
-						line-height: 100upx;
-						font-size: 30upx;
-						color: #fff;
-						text-align: center;
-						margin-right: 20upx;
-						.img{
-							border-radius: 50%;
-							width: 100%;
-							height: 100%;
-						}
-					}
-					.info{
-						height: 80upx;
-						display: flex;
-						flex-direction: column;
-						justify-content: space-between;
-						.name{
-							font-size: 30upx;
-							color: #878787;
-						}
-						.title{
-							font-size: 28upx;
-							color: #878787;
-						}
-					}
-				}
-				.right{
-					width: 40upx;
-					height: 40upx;
-				}
-			}
-			.comp-info{
-				padding: 20upx 0 40upx;
-				display: flex;
-				align-items: center;
-				.img{
-					width: 30upx;
-					height: 30upx;
-					margin-right: 20upx;
-				}
-				.text{
-					font-size: 30upx;
-					color: #878787;
-				}
-			}
-		}
-		// 详细信息
-		.info-detail{
-			padding: 0 24upx;
-			.item{
-				padding: 20upx 0;
-				border-bottom: 1px solid #f7f7f7;
-				.label{
-					font-size: 30upx;
-					color: #999;
-					margin-right: 20upx;
-				}
-				.text{
-					font-size: 30upx;
-					color: #333;
-				}
-				&.column{
-					display: flex;
-					align-items: center;
-					justify-content: flex-start;
-					align-items: flex-start;
-					flex-direction: row;
-					.img{
-						width: 50upx;
-						height: 50upx;
-						margin-right: 20rpx;
-					}
-				}
-			}
-		}
-	}
-</style>
+<template>
+	<view class="content">
+		<!-- 个人信息 -->
+		<view class="user-info">
+			<view class="info-box">
+				<view class="left justify-center align-center">
+					<view class="head-box center">
+						<u-avatar :src="avatar" size="50"></u-avatar>
+					</view>
+					<view class="info">
+						<text class="name">{{nickName}}</text>
+						<text class="title">{{phonenumber}}</text>
+					</view>
+				</view>
+				<image class="right" :src="imgPath+'/app/images/icon_edit.png'" mode="aspectFill'" @click="editInfo"></image>
+			</view>
+			<!-- 公司 -->
+			<view class="comp-info">
+				<image class="img" :src="imgPath+'/app/images/icon_comp_white.png'" mode="aspectFill"></image>
+				<text class="text">{{deptName}}</text>
+			</view>
+		</view>
+		<!-- 详细信息 -->
+		<view class="info-detail">
+			<view class="item">
+				<text class="label">姓名</text>
+				<text class="text">{{nickName}}</text>
+			</view>
+			<view class="item">
+				<text class="label">性别</text>
+				<text class="text">{{sex}}</text>
+			</view>
+			<view class="item column" @click="callPhone(phonenumber)">
+				<view class="left">
+					<text class="label">手机</text>
+					<text class="text">{{phonenumber}}</text>
+				</view>
+			</view>
+			<view class="item">
+				<text class="label">邮箱</text>
+				<text class="text">{{email}}</text>
+			</view>
+			<view class="item">
+				<text class="label">部门</text>
+				<text class="text">{{deptName}}</text>
+			</view>
+			<view class="item">
+				<text class="label">岗位</text>
+				<text class="text">{{postNames}}</text>
+			</view>
+			<view class="item">
+				<text class="label">角色</text>
+				<text class="text">{{roleNames}}</text>
+			</view>
+			<view class="item justify-start align-center">
+				<text class="label">二维码</text>
+				<!-- <text class="text">{{postNames}}</text> -->
+				<image :src="qrCodeWeixin" class="w120 h120" mode="aspectFill"></image>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {getCompanyUser} from '@/api/manageCompany.js';
+	export default {
+		data() {
+			return {
+				avatar:this.$store.state.imgpath+"/app/images/detault_head.jpg", 
+				nickName:"",
+				deptName:"",
+				postNames:"",
+				phonenumber:"",
+				email:"",
+				sex:"",
+				qrCodeWeixin:"",
+				isShow:false,
+				userId:undefined,
+				roleNames:''
+			}
+		},
+		onLoad(option) {
+			// 修改顶部导航背景色
+			// uni.setNavigationBarColor({
+			// 	frontColor: '#ffffff',
+			// 	backgroundColor: '#4BC9B1',
+			// 	animation: {
+			// 		duration: 400,
+			// 		timingFunc: 'easeIn'
+			// 	}
+			// })
+			
+		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		},
+		onShow() {
+			this.getCompanyUser();
+		},
+		methods: {
+			bindUser(data){
+				var that=this;
+				that.nickName=data.nickName;
+				that.deptName=data.companyName?data.companyName:'暂无';
+				that.phonenumber=data.phonenumber?data.phonenumber:'暂无';
+				if(data.posts){
+					that.postNames=data.posts.map(item=>item.postName).join(",")
+				}
+				if(data.roles){
+					this.roleNames=data.roles.map(item=>item.roleName).join(",")
+				}
+				// this.postNames=data.posts.map(item=>item.postName).join(",")||'暂无'
+				// this.roleNames=data.roles.map(item=>item.roleName).join(",")||'暂无'
+				that.email=data.email?data.email:'暂无';
+				if(data.sex==0){
+					that.sex="男";
+				}
+				else if(data.sex==1){
+					that.sex="女";
+				}
+				else if(data.sex==2){
+					that.sex="未知";
+				}
+				that.qrCodeWeixin=uni.getStorageSync('requestPath')+data.qrCodeWeixin
+				if(data.avatar){
+					that.avatar=uni.getStorageSync('requestPath')+data.avatar;
+				}
+			},
+			getCompanyUser(){
+				var data = {};
+				var that=this;
+				getCompanyUser(data).then(
+					res => {
+						that.bindUser(res.user);
+					},
+					rej => {}
+				);
+			},
+			// 拨打电话
+			callPhone(tel){
+				uni.makePhoneCall({
+					phoneNumber: tel
+				})
+			},
+			// 个人信息编辑
+			editInfo() {
+				uni.navigateTo({
+					url: 'editUser'
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+		background: #fff;
+	}
+</style>
+<style scoped lang="scss">
+	.content{
+		// 个人信息
+		.user-info{
+			// background: #115296;
+			background: linear-gradient(to right, #dae9ff, #e1e1fd);
+			padding: 0 30upx;
+			.info-box{
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				.left{
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					padding: 20upx 0;
+					.head-box{
+						width: 120upx;
+						height: 120upx;
+						line-height: 100upx;
+						font-size: 30upx;
+						color: #fff;
+						text-align: center;
+						margin-right: 20upx;
+						.img{
+							border-radius: 50%;
+							width: 100%;
+							height: 100%;
+						}
+					}
+					.info{
+						height: 80upx;
+						display: flex;
+						flex-direction: column;
+						justify-content: space-between;
+						.name{
+							font-size: 30upx;
+							color: #878787;
+						}
+						.title{
+							font-size: 28upx;
+							color: #878787;
+						}
+					}
+				}
+				.right{
+					width: 40upx;
+					height: 40upx;
+				}
+			}
+			.comp-info{
+				padding: 20upx 0 40upx;
+				display: flex;
+				align-items: center;
+				.img{
+					width: 30upx;
+					height: 30upx;
+					margin-right: 20upx;
+				}
+				.text{
+					font-size: 30upx;
+					color: #878787;
+				}
+			}
+		}
+		// 详细信息
+		.info-detail{
+			padding: 0 24upx;
+			.item{
+				padding: 20upx 0;
+				border-bottom: 1px solid #f7f7f7;
+				.label{
+					font-size: 30upx;
+					color: #999;
+					margin-right: 20upx;
+				}
+				.text{
+					font-size: 30upx;
+					color: #333;
+				}
+				&.column{
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					align-items: flex-start;
+					flex-direction: row;
+					.img{
+						width: 50upx;
+						height: 50upx;
+						margin-right: 20rpx;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 680 - 680
pages_managedata/users.vue

@@ -1,680 +1,680 @@
-<template>
-	<view class="column" style="height: calc(100% - 20rpx) ;">
-		<view class="top " >
-			<u-search placeholder="输入姓名/昵称搜索" bgColor='#F8F8FC'
-			 v-model="searchContent" @custom="search()" @search="search()"></u-search>
-			 <view class="justify-around  fs28">
-			 	<view v-for="(item,index) in tabs" :key="index" :class="act==index?'active':'notact'" 
-				@click="tabact(index)" class="flex-1 center ptb20">{{item}}</view>
-				<view v-show="act==1" @click="selectact=!selectact" :class="selectact?'active':''"
-				class="flex-1 center ptb20">批量</view>
-			 </view>
-		</view>
-		<view v-if='list.length<1' class="center mt60" style="color: #666;">暂无用户</view>
-		<scroll-view scroll-y class="indexes flex-1 pb60" :scroll-into-view="'indexes-'+ listCurID" :style="[{height:'calc(100vh - 300rpx)'}]"
-		 :scroll-with-animation="true" :enable-back-to-top="true" >
-			<view v-for="(item,index) in list" :key="index">
-				<view :class="'indexItem-' + item.firstLetter" :id="'indexes-' + item.firstLetter" :data-index="item.firstLetter" @click.passive.stop>
-					<view class="zm">{{item.firstLetter}}</view>
-					<view class="user-list">
-						<view class="user-item justify-start" v-for="(subitem,indexs) in item.list" 
-						@click="navTo(subitem)" :key="indexs">
-							<u-checkbox-group @change="changeitem(subitem.userId)" v-if="selectact">
-								<u-checkbox :checked="subitem.checked" shape="circle" activeColor="#1773ff" :name="subitem.userId"
-									labelColor="#1773ff" />
-							</u-checkbox-group>
-							<view class="bgf p20 radius16 flex-1">
-								<view class="justify-between align-center">
-									<view class="justify-start align-center">
-										<view class="avatar" >
-											<image class="img" :src="subitem.avatar?(baseUrl+subitem.avatar):avatar" mode="aspectFill"></image>
-										</view> 
-										<view class="content">
-											<view class="name">
-												{{subitem.nickName}}
-											</view>
-											<view class="dept justify-start align-center">
-												<u-icon name="phone"></u-icon><view>{{subitem.phoneNumber}}</view> </view>
-											<view class="dept">注册时间:{{subitem.registerTime}}</view>
-										</view>
-									</view>
-									<view class="base-color fs24" v-if="subitem.status==0">未禁用</view>
-									<view class="base-color-red fs24" v-else>禁用</view>
-								</view>
-								<view class="justify-between align-center mt10" @click.passive.stop>
-									<view>
-										<text class="base-color-9 ml10 fs24">部门:{{subitem.deptName?subitem.deptName:''}}</text>
-										<view class="fs24 mt10 justify-start align-center" style="color: #115296;">
-											<text class="base-color-9 ml10">岗位:{{subitem.postname?subitem.postname:''}}</text>
-											<text class="base-color-9 ml20">角色:{{subitem.rolesname?subitem.rolesname:''}}</text>
-										</view>
-									</view>
-									
-									<!-- <view class="fs24 base-color-red mr10 bor-red
-									base-bg-false plr20 radius40 ptb4">已禁用</view> -->
-									<view class="fs24 base-color mr10 bor-blue h52 lh50
-									base-bg-sure plr20 radius40 " style="width: fit-content;" v-if="subitem.isAudit==1">已审核</view>
-									<view class="fs24 base-color-red mr10 bor-red h52 lh50
-									base-bg-false plr20 radius40  " style="width: fit-content;z-index: 999;" @click="getidshen(subitem.userId)"
-									 v-else-if="subitem.isAudit==0&&!selectact">待审核</view>
-								</view>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</scroll-view>
-		<view class="indexBar" :style="[{height:'calc(100vh - 88rpx)'}]">
-			<view class="indexBar-box" @touchstart="tStart" @touchend="tEnd" @touchmove.stop="tMove">
-				<view class="indexBar-item" v-for="(item,index) in list" :key="index" :id="index" 
-				@touchstart="getCur" @touchend="setCur"> {{item.firstLetter}}</view>
-			</view>
-		</view>
-		<view class="justify-between base-bg-f foot-select " v-if="selectact">
-			<view class="align-center justify-between " v-if="selectact">
-				<u-checkbox-group @change="selectAll">
-					<u-checkbox :checked="isSelectAll" shape="circle" activeColor="#1773ff" :name="true"
-						label="全选" labelColor="#333" />
-						<text class="fs24 base-color-9 ml12">已选{{ selectedUsers.length }}个</text>
-						<!-- {{selectedCount}} -->
-				</u-checkbox-group>
-			</view>
-			<view class="justify-center ">
-				<button class="base-bg-f radius100 base-color-red h62 ml10 fs28 lh60"
-					style="border: #ef4c50 solid 2rpx;" 
-					@click="batchApprove">通过审核</button>
-			</view>
-		</view>
-		<!--选择显示-->
-		<view v-show="!hidden" class="indexToast">
-			{{listCur}}
-		</view>
-		<u-popup :show="showcommpany" mode="center" round="16">
-			<view class="bgf w600 h600 p40 radius16" style="max-height: 600rpx;">
-				<view class="center bold fs32">设置销售员信息</view>
-				<view class="justify-center align-center mtb30">
-					<view class="mr40 fs32 base-color-6">部门:</view>
-					<u-input
-					   placeholder="选择部门"
-					   border="surround"
-					   v-model="valueb"
-					   @focus="showbumen()"
-					 ></u-input>
-				</view>
-				<view class="justify-center align-center mtb30">
-					<view class="mr40 fs32 base-color-6">岗位:</view>
-					 <view class="flex-1 u-border p16 radius8" @click="showgang=!showgang">
-						 <view class="fs28" style="color: #000;">{{valuea}}</view>
-						 <view class="fs28" style="color: #c0c4cc;" v-if="valueid.length==0">选择岗位</view>
-					 </view>
-				</view>
-				<view class="justify-center align-center mtb30">
-					<view class="mr40 fs32 base-color-6">角色:</view>
-					 <view class="flex-1 u-border p16 radius8" @click="showjuese=!showjuese">
-						 <view class="fs28" style="color: #000;">{{valuej}}</view>
-						 <view class="fs28" style="color: #c0c4cc;" v-if="valuej.length==0">选择角色</view>
-					 </view>
-				</view>
-				<view class="justify-around align-center mt50 ">
-					<view class="quxiao" @click="showcommpany=!showcommpany">取消</view>
-					<view class="queren" @click="confirmbchange">通过审核</view>
-				</view>
-				<tki-tree ref="tkitree" :range="columnb"  confirmColor="#4e8af7" :selectParent="true" @confirm="confirmb"/>
-				<u-popup :show="showgang" @close="showgang=!showgang" :closeOnClickOverlay='true'>
-					<view class="center bold fs36 pt40">请选择岗位</view>
-					<view class="justify-start align-center warpbox mt40 p20">
-						<view v-for="(item,index) in postlist" :key="item.postId" class="mlr10 mt10">
-							<u-tag :text="item.postName" :plain="!item.checked" :name="index"
-								@click="choosechangeTag"></u-tag>
-						</view>
-					</view>
-					<view class="justify-around align-center mt50 ">
-						<view class="quxiao" @click="showgang=!showgang">取消</view>
-						<view class="queren" @click="postconfirm">确定</view>
-					</view>
-				</u-popup>
-				<u-popup :show="showjuese" @close="showjuese=!showjuese" :closeOnClickOverlay='true'>
-					<view class="center bold fs36 pt40">请选择角色</view>
-					<view class="justify-start align-center warpbox mt40 p20">
-						<view v-for="(item,index) in rolelist" :key="item.roleId" class="mlr10 mt10">
-							<u-tag :text="item.roleName" :plain="!item.checked" :name="index"
-								@click="choosechangerole"></u-tag>
-						</view>
-					</view>
-					<view class="justify-around align-center mt50 ">
-						<view class="quxiao" @click="showjuese=!showjuese">取消</view>
-						<view class="queren" @click="roleconfirm">确定</view>
-					</view>
-				</u-popup>
-			</view>
-		</u-popup>
-		<u-modal :show="showuser" title="提示" content='是否通过销售审核' :showCancelButton='true'
-		@confirm='subsalesaudits' @cancel="showuser=!showuser"></u-modal>
-		<u-loading-page :loading="viewload" iconSize="32" loadingColor="#3c9cff" fontSize="20"
-		:loading-text="loadingtext" ></u-loading-page>
-	</view>
-</template>
-
-<script>
-	import {getAllUsers,querydepartment,querypost,modifysaleNews,queryrole,subsalesaudit} from '@/api/manageCompany.js';
-	import tkiTree from "@/pages_managedata/components/tki-tree/tki-tree.vue"
-	export default {
-		components: {tkiTree},
-		data() {
-			return {
-				viewload:true,
-				loadingtext:"数据加载中...",
-				baseUrl:uni.getStorageSync('requestPath'),
-				avatar:this.$store.state.imgpath+"/app/images/default.png",
-				CustomBar: 0,
-				hidden: true,
-				listCurID: '',
-				list: [],
-				listCur: '',
-				searchContent:"",
-				tabs:['已审核','未审核'],
-				act:0,
-				selectact:false,
-				isSelectAll:false,
-				selectedUsers:[],
-				isAudits:1,
-				ids:'',
-				showcommpany:false,
-				columnb: [
-				    ['11', '22', '33']
-				],
-				postlist:{},
-				showgang:false,
-				showjuese:false,
-				valuea:'',
-				valueb:'',
-				actpost:[],
-				valueid:'',
-				valueidbu:'',
-				xuanid:[],
-				valuej:'',
-				rolelist:[],
-				roleid:[],
-				seluserids:[],
-				showuser:false
-			}
-		},
-		onLoad() {
-			this.getUser();
-			this.getdepartment()
-			this.getpostlist()
-			this.getrolelist()
-		},
-		onReady() {
-			let that = this;
-			uni.createSelectorQuery().select('.indexBar-box').boundingClientRect(function(res) {
-				that.boxTop = res.top
-			}).exec();
-			uni.createSelectorQuery().select('.indexes').boundingClientRect(function(res) {
-				that.barTop = res.top
-			}).exec()
-		},
-		methods: {
-			roleconfirm(){
-				this.roleid = this.rolelist.filter(item => item.checked).map(v => v.roleId).join(",")
-				this.valuej = this.rolelist.filter(item => item.checked).map(v => v.roleName).join(',')
-				this.showjuese=!this.showjuese
-			},
-			choosechangerole(i){
-				this.rolelist[i].checked = !this.rolelist[i].checked
-			},
-			showbumen(){
-				this.$refs.tkitree._show();
-			},
-			confirmbchange(){
-				console.log(this.valueb.length,this.xuanid)
-				if(this.valueb.length==0){
-					uni.showToast({
-						icon: 'none',
-						title: '请选择部门'
-					})
-					return
-				}
-				if(this.xuanid.length==0){
-					uni.showToast({
-						icon: 'none',
-						title: '请选择部门'
-					})
-					return
-				}
-				if(this.valuej.length==0){
-					uni.showToast({
-						icon: 'none',
-						title: '请选择角色'
-					})
-					return
-				}
-				const data={
-					companyUserIds:this.ids,
-					deptId:this.valueidbu,
-					postIds:this.valueid,
-					roleIds:this.roleid
-				}
-				modifysaleNews(data).then(res=>{
-					console.log('设置信息',res)
-					if(res.code==200){
-						// uni.showToast({
-						// 	icon: 'none',
-						// 	title: '成功'
-						// })
-						this.xuanid=[]
-						setTimeout(()=>{
-							this.subsalesaudits()
-						},100)
-					}else{
-						uni.showToast({
-							title: res.msg,
-							icon: 'none',
-						});
-					}
-				})
-			},
-			getallList(){
-				this.valueidbu=[]
-				this.valueid=[]
-				this.valueb=''
-				this.valuea=''
-				this.ids=''
-			},
-			postconfirm(){
-				this.xuanid=this.postlist.filter(item => item.checked).map(v => v.postId)
-				this.valueid = this.postlist.filter(item => item.checked).map(v => v.postId).join(",")
-				this.valuea = this.postlist.filter(item => item.checked).map(v => v.postName).join(',')
-				this.showgang=!this.showgang
-			},
-			choosechangeTag(i) {
-				console.log(this.postlist[i].checked )
-				this.postlist[i].checked = !this.postlist[i].checked
-			},
-			getdepartment(){
-				querydepartment().then(res=>{
-					if(res.code==200){
-						this.columnb=res.data
-						// console.log('部门',res)
-					}
-				})
-			},
-			getpostlist(){
-				querypost().then(res=>{
-					if(res.code==200){
-						this.postlist = res.data.map(item => {
-							return {
-								...item,
-								checked: false,
-							}
-						})
-						console.log('岗位',res)
-					}
-				})
-			},
-			getrolelist(){
-				queryrole().then(res=>{
-					if(res.code==200){
-						this.rolelist = res.data.map(item => {
-							return {
-								...item,
-								checked: false,
-							}
-						})
-						// console.log('岗位',res)
-					}
-				})
-			},
-			confirma(e){
-				this.showgang = !this.showgang
-				this.valuea=e.value[0]
-				console.log(e)
-			},
-			confirmb(e){
-				this.valueb=e[0].label
-				this.valueidbu=e[0].id
-				console.log(e[0])
-			},
-			getidshen(id){
-				console.log(id)
-				this.getallList()
-				this.ids=id
-				this.seluserids[0]=id
-				this.showuser=!this.showuser
-				// this.showcommpany=!this.showcommpany
-			},
-			batchApprove(){
-				 if (this.selectedUsers.length === 0) {
-					  uni.showToast({
-						title: '请先选择用户',
-						icon: 'none',
-					  });
-					  return;
-				}
-				
-				this.ids=this.selectedUsers.join(',')
-				this.seluserids=this.selectedUsers
-				// this.showcommpany=!this.showcommpany
-				this.showuser=!this.showuser
-				// this.subsalesaudits()
-				// this.confirmbchange()
-			},
-			subsalesaudits(){
-				const data={
-					 userIds:this.seluserids
-				}
-				subsalesaudit(this.seluserids).then(res=>{
-					console.log("subsalesaudits=====",res)
-					if(res.code==200){
-						uni.showToast({
-							title: "用户通过审核,成为销售!",
-							icon: 'none',
-						});
-						
-						this.valueidbu=[]
-						this.valueid=[]
-						this.valueb=[]
-						this.valuea=''
-						this.valuej=''
-						this.roleid=[]
-						this.ids=''
-						this.showuser=!this.showuser
-						this.seluserids=[]
-						// this.showcommpany=!this.showcommpany
-						this.getUser()
-					}else{
-						uni.showToast({
-							title: res.msg,
-							icon: 'none',
-						});
-					}
-				})
-			},
-			// 全选
-			selectAll() {
-				this.isSelectAll = !this.isSelectAll;
-				this.selectedUsers = []; // 清空已选列表
-				 // 遍历所有用户项,更新 checked 状态
-				    this.list = this.list.map(group => {
-				      group.list = group.list.map(user => {
-				        if (this.isSelectAll) {
-				          this.selectedUsers.push(user.userId); // 添加用户ID到选中列表
-				        }
-				        return {
-				          ...user,
-				          checked: this.isSelectAll,
-				        };
-				      });
-				      return group;
-				    });
-				// 如果取消全选,清空 selectedUsers
-					if (!this.isSelectAll) {
-					  this.selectedUsers = [];
-					}
-			},
-			// 单选 /反选 
-			changeitem(userId) {
-				const index = this.selectedUsers.indexOf(userId);
-				if (index === -1) {
-				  this.selectedUsers.push(userId); // 选中
-				} else {
-				  this.selectedUsers.splice(index, 1); // 取消选中
-				}
-				// 更新全选状态
-				this.isSelectAll = this.selectedUsers.length === this.getTotalUsers();
-			},
-			// 计算总用户数
-			  getTotalUsers() {
-			    return this.list.reduce((total, group) => total + group.list.length, 0);
-			  },
-			tabact(index){
-				this.list=[]
-				this.act=index
-				if(this.act==0){
-					this.selectact=false
-					this.isAudits=1
-					this.getUser();
-				}else if(this.act==1){
-					this.isAudits=0
-					this.getUser();
-				}
-			},
-			getUser(){
-				
-				var data = {
-					searchKey:this.searchContent,
-					isAudit:this.isAudits
-					};
-				var that=this;
-				getAllUsers(data).then(
-					res => {
-						if(res.code==200){
-							this.viewload=false
-							 that.list=res.users;
-							this.list=this.list.map(group=>{
-								group.list = group.list.map(user => {
-								   return {
-									 ...user,
-									 checked: this.isSelectAll,
-									 postname:user.post.map(item=>item.postName).join(","),
-									 rolesname:user.roles.map(item=>item.roleName).join(",")
-								   };
-								})
-								return group;
-							})
-						}
-					},
-					rej => {}
-				);
-			},
-			//获取文字信息
-			getCur(e) {
-				this.hidden = false;
-				this.listCur = this.list[e.target.id].firstLetter;
-			},
-			setCur(e) {
-				this.hidden = true;
-				this.listCur = this.listCur
-			},
-			//滑动选择Item
-			tMove(e) {
-				let y = e.touches[0].clientY,
-					offsettop = this.boxTop,
-					that = this;
-				//判断选择区域,只有在选择区才会生效
-				if (y > offsettop) {
-					let num = parseInt((y - offsettop) / 20);
-					console.log(num);
-					if(num<that.list.length){
-						this.listCur = that.list[num].firstLetter
-					}
-				};
-			},
-			
-			//触发全部开始选择
-			tStart() {
-				this.hidden = false
-			},
-			
-			//触发结束选择
-			tEnd() {
-				this.hidden = true;
-				this.listCurID = this.listCur
-			},
-			indexSelect(e) {
-				let that = this;
-				let barHeight = this.barHeight;
-				let list = this.list;
-				let scrollY = Math.ceil(list.length * e.detail.y / barHeight);
-				for (let i = 0; i < list.length; i++) {
-					if (scrollY < i + 1) {
-						that.listCur = list[i].firstLetter;
-						that.movableY = i * 20
-						return false
-					}
-				}
-			},
-			navTo(subitem){
-				uni.navigateTo({
-					url: '/pages_managedata/saleInfo?userId='+subitem.userId
-				})
-			},
-			search(){
-				this.getUser()
-			}
-			
-		}
-	}
-</script>
-<style  lang="scss">
-	.quxiao{
-		width: 40%;
-		height: 70rpx;
-		line-height: 70rpx;
-		text-align: center;
-		background-color: #F8F8FC;
-		border: 2rpx solid #cacaca;
-		color: #999;
-		border-radius: 50rpx;
-	}
-	.queren{
-		width: 40%;
-		height: 70rpx;
-		line-height: 70rpx;
-		text-align: center;
-		background-color: #1773ff;
-		color: #fff;
-		border-radius: 50rpx;
-	}
-	::v-deep {
-		.foot-select {
-			 position: fixed;
-			  bottom: 0;
-			  width: 100%;
-			  padding: 20rpx;
-			  background: #fff;
-			  box-shadow: 0 -2rpx 10rpx rgba(0,0,0,0.1);
-			  z-index: 1000;
-		}
-	}
-	 .active{
-		 color: #1773ff;
-		 font-weight: bold;
-	 }
-	 .notact{
-		 color: #888;
-	 }
-	page {
-		background-color: #F8F8FC; 
-	}
-	.top{
-		/* height: 88rpx; */
-		background-color: #fff;
-		padding: 0rpx 15rpx;
-		padding-top: 20rpx;
-	}
-	.indexes {
-		position: relative;
-	}
-
-	.indexBar {
-		position: fixed;
-		right: 0px;
-		bottom: 0px;
-		padding: 20upx 20upx 20upx 60upx;
-		display: flex;
-		align-items: center;
-	}
-
-	.indexBar .indexBar-box {
-		width: 40upx;
-		height: auto;
-		background: #fff;
-		display: flex;
-		flex-direction: column;
-		box-shadow: 0 0 20upx rgba(0, 0, 0, 0.1);
-		border-radius: 10upx;
-	}
-
-	.indexBar-item {
-		flex: 1;
-		width: 40upx;
-		height: 40upx;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		font-size: 24upx;
-		color: #888;
-	}
-
-	movable-view.indexBar-item {
-		width: 40upx;
-		height: 40upx;
-		z-index: 9;
-		position: relative;
-	}
-
-	movable-view.indexBar-item::before {
-		content: "";
-		display: block;
-		position: absolute;
-		left: 0;
-		top: 10upx;
-		height: 20upx;
-		width: 4upx;
-		background-color: #f37b1d;
-	}
-
-	.indexToast {
-		position: fixed;
-		top: 0;
-		right: 80upx;
-		bottom: 0;
-		background: rgba(0, 0, 0, 0.5);
-		width: 100upx;
-		height: 100upx;
-		border-radius: 10upx;
-		margin: auto;
-		color: #fff;
-		line-height: 100upx;
-		text-align: center;
-		font-size: 48upx;
-	}
-	.zm{
-		height:30rpx;
-		padding: 0rpx 20rpx;
-		font-size: 24rpx;
-		color: #888;
-		background: #F8F8FC;
-	}
-	.user-list{
-		 margin: 20rpx;
-		 border-radius: 20rpx;
-	}
-	.user-item{
-		width: 100%;
-		margin: 12rpx 0;
-	}
-	.user-item .avatar{
-		width: 100upx;
-		height: 100upx;
-	}
-	.user-item .avatar .img{
-		border-radius: 50%;
-		width: 100%;
-		height: 100%;
-	}
-	.user-item .content{
-		margin-left: 15rpx;
-	}
-	.user-item .content .name{
-		font-size: 26rpx;
-		color: #111;
-	}
-	.user-item .content .dept{
-		font-size: 24rpx;
-		color: #888;
-		margin-top: 15rpx;
-		
-	}
-</style>
+<template>
+	<view class="column" style="height: calc(100% - 20rpx) ;">
+		<view class="top " >
+			<u-search placeholder="输入姓名/昵称搜索" bgColor='#F8F8FC'
+			 v-model="searchContent" @custom="search()" @search="search()"></u-search>
+			 <view class="justify-around  fs28">
+			 	<view v-for="(item,index) in tabs" :key="index" :class="act==index?'active':'notact'" 
+				@click="tabact(index)" class="flex-1 center ptb20">{{item}}</view>
+				<view v-show="act==1" @click="selectact=!selectact" :class="selectact?'active':''"
+				class="flex-1 center ptb20">批量</view>
+			 </view>
+		</view>
+		<view v-if='list.length<1' class="center mt60" style="color: #666;">暂无用户</view>
+		<scroll-view scroll-y class="indexes flex-1 pb60" :scroll-into-view="'indexes-'+ listCurID" :style="[{height:'calc(100vh - 300rpx)'}]"
+		 :scroll-with-animation="true" :enable-back-to-top="true" >
+			<view v-for="(item,index) in list" :key="index">
+				<view :class="'indexItem-' + item.firstLetter" :id="'indexes-' + item.firstLetter" :data-index="item.firstLetter" @click.passive.stop>
+					<view class="zm">{{item.firstLetter}}</view>
+					<view class="user-list">
+						<view class="user-item justify-start" v-for="(subitem,indexs) in item.list" 
+						@click="navTo(subitem)" :key="indexs">
+							<u-checkbox-group @change="changeitem(subitem.userId)" v-if="selectact">
+								<u-checkbox :checked="subitem.checked" shape="circle" activeColor="#1773ff" :name="subitem.userId"
+									labelColor="#1773ff" />
+							</u-checkbox-group>
+							<view class="bgf p20 radius16 flex-1">
+								<view class="justify-between align-center">
+									<view class="justify-start align-center">
+										<view class="avatar" >
+											<image class="img" :src="subitem.avatar?(baseUrl+subitem.avatar):avatar" mode="aspectFill"></image>
+										</view> 
+										<view class="content">
+											<view class="name">
+												{{subitem.nickName}}
+											</view>
+											<view class="dept justify-start align-center">
+												<u-icon name="phone"></u-icon><view>{{subitem.phoneNumber}}</view> </view>
+											<view class="dept">注册时间:{{subitem.registerTime}}</view>
+										</view>
+									</view>
+									<view class="base-color fs24" v-if="subitem.status==0">未禁用</view>
+									<view class="base-color-red fs24" v-else>禁用</view>
+								</view>
+								<view class="justify-between align-center mt10" @click.passive.stop>
+									<view>
+										<text class="base-color-9 ml10 fs24">部门:{{subitem.deptName?subitem.deptName:''}}</text>
+										<view class="fs24 mt10 justify-start align-center" style="color: #115296;">
+											<text class="base-color-9 ml10">岗位:{{subitem.postname?subitem.postname:''}}</text>
+											<text class="base-color-9 ml20">角色:{{subitem.rolesname?subitem.rolesname:''}}</text>
+										</view>
+									</view>
+									
+									<!-- <view class="fs24 base-color-red mr10 bor-red
+									base-bg-false plr20 radius40 ptb4">已禁用</view> -->
+									<view class="fs24 base-color mr10 bor-blue h52 lh50
+									base-bg-sure plr20 radius40 " style="width: fit-content;" v-if="subitem.isAudit==1">已审核</view>
+									<view class="fs24 base-color-red mr10 bor-red h52 lh50
+									base-bg-false plr20 radius40  " style="width: fit-content;z-index: 999;" @click="getidshen(subitem.userId)"
+									 v-else-if="subitem.isAudit==0&&!selectact">待审核</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</scroll-view>
+		<view class="indexBar" :style="[{height:'calc(100vh - 88rpx)'}]">
+			<view class="indexBar-box" @touchstart="tStart" @touchend="tEnd" @touchmove.stop="tMove">
+				<view class="indexBar-item" v-for="(item,index) in list" :key="index" :id="index" 
+				@touchstart="getCur" @touchend="setCur"> {{item.firstLetter}}</view>
+			</view>
+		</view>
+		<view class="justify-between base-bg-f foot-select " v-if="selectact">
+			<view class="align-center justify-between " v-if="selectact">
+				<u-checkbox-group @change="selectAll">
+					<u-checkbox :checked="isSelectAll" shape="circle" activeColor="#1773ff" :name="true"
+						label="全选" labelColor="#333" />
+						<text class="fs24 base-color-9 ml12">已选{{ selectedUsers.length }}个</text>
+						<!-- {{selectedCount}} -->
+				</u-checkbox-group>
+			</view>
+			<view class="justify-center ">
+				<button class="base-bg-f radius100 base-color-red h62 ml10 fs28 lh60"
+					style="border: #ef4c50 solid 2rpx;" 
+					@click="batchApprove">通过审核</button>
+			</view>
+		</view>
+		<!--选择显示-->
+		<view v-show="!hidden" class="indexToast">
+			{{listCur}}
+		</view>
+		<u-popup :show="showcommpany" mode="center" round="16">
+			<view class="bgf w600 h600 p40 radius16" style="max-height: 600rpx;">
+				<view class="center bold fs32">设置销售员信息</view>
+				<view class="justify-center align-center mtb30">
+					<view class="mr40 fs32 base-color-6">部门:</view>
+					<u-input
+					   placeholder="选择部门"
+					   border="surround"
+					   v-model="valueb"
+					   @focus="showbumen()"
+					 ></u-input>
+				</view>
+				<view class="justify-center align-center mtb30">
+					<view class="mr40 fs32 base-color-6">岗位:</view>
+					 <view class="flex-1 u-border p16 radius8" @click="showgang=!showgang">
+						 <view class="fs28" style="color: #000;">{{valuea}}</view>
+						 <view class="fs28" style="color: #c0c4cc;" v-if="valueid.length==0">选择岗位</view>
+					 </view>
+				</view>
+				<view class="justify-center align-center mtb30">
+					<view class="mr40 fs32 base-color-6">角色:</view>
+					 <view class="flex-1 u-border p16 radius8" @click="showjuese=!showjuese">
+						 <view class="fs28" style="color: #000;">{{valuej}}</view>
+						 <view class="fs28" style="color: #c0c4cc;" v-if="valuej.length==0">选择角色</view>
+					 </view>
+				</view>
+				<view class="justify-around align-center mt50 ">
+					<view class="quxiao" @click="showcommpany=!showcommpany">取消</view>
+					<view class="queren" @click="confirmbchange">通过审核</view>
+				</view>
+				<tki-tree ref="tkitree" :range="columnb"  confirmColor="#4e8af7" :selectParent="true" @confirm="confirmb"/>
+				<u-popup :show="showgang" @close="showgang=!showgang" :closeOnClickOverlay='true'>
+					<view class="center bold fs36 pt40">请选择岗位</view>
+					<view class="justify-start align-center warpbox mt40 p20">
+						<view v-for="(item,index) in postlist" :key="item.postId" class="mlr10 mt10">
+							<u-tag :text="item.postName" :plain="!item.checked" :name="index"
+								@click="choosechangeTag"></u-tag>
+						</view>
+					</view>
+					<view class="justify-around align-center mt50 ">
+						<view class="quxiao" @click="showgang=!showgang">取消</view>
+						<view class="queren" @click="postconfirm">确定</view>
+					</view>
+				</u-popup>
+				<u-popup :show="showjuese" @close="showjuese=!showjuese" :closeOnClickOverlay='true'>
+					<view class="center bold fs36 pt40">请选择角色</view>
+					<view class="justify-start align-center warpbox mt40 p20">
+						<view v-for="(item,index) in rolelist" :key="item.roleId" class="mlr10 mt10">
+							<u-tag :text="item.roleName" :plain="!item.checked" :name="index"
+								@click="choosechangerole"></u-tag>
+						</view>
+					</view>
+					<view class="justify-around align-center mt50 ">
+						<view class="quxiao" @click="showjuese=!showjuese">取消</view>
+						<view class="queren" @click="roleconfirm">确定</view>
+					</view>
+				</u-popup>
+			</view>
+		</u-popup>
+		<u-modal :show="showuser" title="提示" content='是否通过销售审核' :showCancelButton='true'
+		@confirm='subsalesaudits' @cancel="showuser=!showuser"></u-modal>
+		<u-loading-page :loading="viewload" iconSize="32" loadingColor="#3c9cff" fontSize="20"
+		:loading-text="loadingtext" ></u-loading-page>
+	</view>
+</template>
+
+<script>
+	import {getAllUsers,querydepartment,querypost,modifysaleNews,queryrole,subsalesaudit} from '@/api/manageCompany.js';
+	import tkiTree from "@/pages_managedata/components/tki-tree/tki-tree.vue"
+	export default {
+		components: {tkiTree},
+		data() {
+			return {
+				viewload:true,
+				loadingtext:"数据加载中...",
+				baseUrl:uni.getStorageSync('requestPath'),
+				avatar:this.$store.state.imgpath+"/app/images/default.png",
+				CustomBar: 0,
+				hidden: true,
+				listCurID: '',
+				list: [],
+				listCur: '',
+				searchContent:"",
+				tabs:['已审核','未审核'],
+				act:0,
+				selectact:false,
+				isSelectAll:false,
+				selectedUsers:[],
+				isAudits:1,
+				ids:'',
+				showcommpany:false,
+				columnb: [
+				    ['11', '22', '33']
+				],
+				postlist:{},
+				showgang:false,
+				showjuese:false,
+				valuea:'',
+				valueb:'',
+				actpost:[],
+				valueid:'',
+				valueidbu:'',
+				xuanid:[],
+				valuej:'',
+				rolelist:[],
+				roleid:[],
+				seluserids:[],
+				showuser:false
+			}
+		},
+		onLoad() {
+			this.getUser();
+			this.getdepartment()
+			this.getpostlist()
+			this.getrolelist()
+		},
+		onReady() {
+			let that = this;
+			uni.createSelectorQuery().select('.indexBar-box').boundingClientRect(function(res) {
+				that.boxTop = res.top
+			}).exec();
+			uni.createSelectorQuery().select('.indexes').boundingClientRect(function(res) {
+				that.barTop = res.top
+			}).exec()
+		},
+		methods: {
+			roleconfirm(){
+				this.roleid = this.rolelist.filter(item => item.checked).map(v => v.roleId).join(",")
+				this.valuej = this.rolelist.filter(item => item.checked).map(v => v.roleName).join(',')
+				this.showjuese=!this.showjuese
+			},
+			choosechangerole(i){
+				this.rolelist[i].checked = !this.rolelist[i].checked
+			},
+			showbumen(){
+				this.$refs.tkitree._show();
+			},
+			confirmbchange(){
+				console.log(this.valueb.length,this.xuanid)
+				if(this.valueb.length==0){
+					uni.showToast({
+						icon: 'none',
+						title: '请选择部门'
+					})
+					return
+				}
+				if(this.xuanid.length==0){
+					uni.showToast({
+						icon: 'none',
+						title: '请选择部门'
+					})
+					return
+				}
+				if(this.valuej.length==0){
+					uni.showToast({
+						icon: 'none',
+						title: '请选择角色'
+					})
+					return
+				}
+				const data={
+					companyUserIds:this.ids,
+					deptId:this.valueidbu,
+					postIds:this.valueid,
+					roleIds:this.roleid
+				}
+				modifysaleNews(data).then(res=>{
+					console.log('设置信息',res)
+					if(res.code==200){
+						// uni.showToast({
+						// 	icon: 'none',
+						// 	title: '成功'
+						// })
+						this.xuanid=[]
+						setTimeout(()=>{
+							this.subsalesaudits()
+						},100)
+					}else{
+						uni.showToast({
+							title: res.msg,
+							icon: 'none',
+						});
+					}
+				})
+			},
+			getallList(){
+				this.valueidbu=[]
+				this.valueid=[]
+				this.valueb=''
+				this.valuea=''
+				this.ids=''
+			},
+			postconfirm(){
+				this.xuanid=this.postlist.filter(item => item.checked).map(v => v.postId)
+				this.valueid = this.postlist.filter(item => item.checked).map(v => v.postId).join(",")
+				this.valuea = this.postlist.filter(item => item.checked).map(v => v.postName).join(',')
+				this.showgang=!this.showgang
+			},
+			choosechangeTag(i) {
+				console.log(this.postlist[i].checked )
+				this.postlist[i].checked = !this.postlist[i].checked
+			},
+			getdepartment(){
+				querydepartment().then(res=>{
+					if(res.code==200){
+						this.columnb=res.data
+						// console.log('部门',res)
+					}
+				})
+			},
+			getpostlist(){
+				querypost().then(res=>{
+					if(res.code==200){
+						this.postlist = res.data.map(item => {
+							return {
+								...item,
+								checked: false,
+							}
+						})
+						console.log('岗位',res)
+					}
+				})
+			},
+			getrolelist(){
+				queryrole().then(res=>{
+					if(res.code==200){
+						this.rolelist = res.data.map(item => {
+							return {
+								...item,
+								checked: false,
+							}
+						})
+						// console.log('岗位',res)
+					}
+				})
+			},
+			confirma(e){
+				this.showgang = !this.showgang
+				this.valuea=e.value[0]
+				console.log(e)
+			},
+			confirmb(e){
+				this.valueb=e[0].label
+				this.valueidbu=e[0].id
+				console.log(e[0])
+			},
+			getidshen(id){
+				console.log(id)
+				this.getallList()
+				this.ids=id
+				this.seluserids[0]=id
+				this.showuser=!this.showuser
+				// this.showcommpany=!this.showcommpany
+			},
+			batchApprove(){
+				 if (this.selectedUsers.length === 0) {
+					  uni.showToast({
+						title: '请先选择用户',
+						icon: 'none',
+					  });
+					  return;
+				}
+				
+				this.ids=this.selectedUsers.join(',')
+				this.seluserids=this.selectedUsers
+				// this.showcommpany=!this.showcommpany
+				this.showuser=!this.showuser
+				// this.subsalesaudits()
+				// this.confirmbchange()
+			},
+			subsalesaudits(){
+				const data={
+					 userIds:this.seluserids
+				}
+				subsalesaudit(this.seluserids).then(res=>{
+					console.log("subsalesaudits=====",res)
+					if(res.code==200){
+						uni.showToast({
+							title: "用户通过审核,成为销售!",
+							icon: 'none',
+						});
+						
+						this.valueidbu=[]
+						this.valueid=[]
+						this.valueb=[]
+						this.valuea=''
+						this.valuej=''
+						this.roleid=[]
+						this.ids=''
+						this.showuser=!this.showuser
+						this.seluserids=[]
+						// this.showcommpany=!this.showcommpany
+						this.getUser()
+					}else{
+						uni.showToast({
+							title: res.msg,
+							icon: 'none',
+						});
+					}
+				})
+			},
+			// 全选
+			selectAll() {
+				this.isSelectAll = !this.isSelectAll;
+				this.selectedUsers = []; // 清空已选列表
+				 // 遍历所有用户项,更新 checked 状态
+				    this.list = this.list.map(group => {
+				      group.list = group.list.map(user => {
+				        if (this.isSelectAll) {
+				          this.selectedUsers.push(user.userId); // 添加用户ID到选中列表
+				        }
+				        return {
+				          ...user,
+				          checked: this.isSelectAll,
+				        };
+				      });
+				      return group;
+				    });
+				// 如果取消全选,清空 selectedUsers
+					if (!this.isSelectAll) {
+					  this.selectedUsers = [];
+					}
+			},
+			// 单选 /反选 
+			changeitem(userId) {
+				const index = this.selectedUsers.indexOf(userId);
+				if (index === -1) {
+				  this.selectedUsers.push(userId); // 选中
+				} else {
+				  this.selectedUsers.splice(index, 1); // 取消选中
+				}
+				// 更新全选状态
+				this.isSelectAll = this.selectedUsers.length === this.getTotalUsers();
+			},
+			// 计算总用户数
+			  getTotalUsers() {
+			    return this.list.reduce((total, group) => total + group.list.length, 0);
+			  },
+			tabact(index){
+				this.list=[]
+				this.act=index
+				if(this.act==0){
+					this.selectact=false
+					this.isAudits=1
+					this.getUser();
+				}else if(this.act==1){
+					this.isAudits=0
+					this.getUser();
+				}
+			},
+			getUser(){
+				
+				var data = {
+					searchKey:this.searchContent,
+					isAudit:this.isAudits
+					};
+				var that=this;
+				getAllUsers(data).then(
+					res => {
+						if(res.code==200){
+							this.viewload=false
+							 that.list=res.users;
+							this.list=this.list.map(group=>{
+								group.list = group.list.map(user => {
+								   return {
+									 ...user,
+									 checked: this.isSelectAll,
+									 postname:user.post.map(item=>item.postName).join(","),
+									 rolesname:user.roles.map(item=>item.roleName).join(",")
+								   };
+								})
+								return group;
+							})
+						}
+					},
+					rej => {}
+				);
+			},
+			//获取文字信息
+			getCur(e) {
+				this.hidden = false;
+				this.listCur = this.list[e.target.id].firstLetter;
+			},
+			setCur(e) {
+				this.hidden = true;
+				this.listCur = this.listCur
+			},
+			//滑动选择Item
+			tMove(e) {
+				let y = e.touches[0].clientY,
+					offsettop = this.boxTop,
+					that = this;
+				//判断选择区域,只有在选择区才会生效
+				if (y > offsettop) {
+					let num = parseInt((y - offsettop) / 20);
+					console.log(num);
+					if(num<that.list.length){
+						this.listCur = that.list[num].firstLetter
+					}
+				};
+			},
+			
+			//触发全部开始选择
+			tStart() {
+				this.hidden = false
+			},
+			
+			//触发结束选择
+			tEnd() {
+				this.hidden = true;
+				this.listCurID = this.listCur
+			},
+			indexSelect(e) {
+				let that = this;
+				let barHeight = this.barHeight;
+				let list = this.list;
+				let scrollY = Math.ceil(list.length * e.detail.y / barHeight);
+				for (let i = 0; i < list.length; i++) {
+					if (scrollY < i + 1) {
+						that.listCur = list[i].firstLetter;
+						that.movableY = i * 20
+						return false
+					}
+				}
+			},
+			navTo(subitem){
+				uni.navigateTo({
+					url: '/pages_managedata/saleInfo?userId='+subitem.userId
+				})
+			},
+			search(){
+				this.getUser()
+			}
+			
+		}
+	}
+</script>
+<style  lang="scss">
+	.quxiao{
+		width: 40%;
+		height: 70rpx;
+		line-height: 70rpx;
+		text-align: center;
+		background-color: #F8F8FC;
+		border: 2rpx solid #cacaca;
+		color: #999;
+		border-radius: 50rpx;
+	}
+	.queren{
+		width: 40%;
+		height: 70rpx;
+		line-height: 70rpx;
+		text-align: center;
+		background-color: #1773ff;
+		color: #fff;
+		border-radius: 50rpx;
+	}
+	::v-deep {
+		.foot-select {
+			 position: fixed;
+			  bottom: 0;
+			  width: 100%;
+			  padding: 20rpx;
+			  background: #fff;
+			  box-shadow: 0 -2rpx 10rpx rgba(0,0,0,0.1);
+			  z-index: 1000;
+		}
+	}
+	 .active{
+		 color: #1773ff;
+		 font-weight: bold;
+	 }
+	 .notact{
+		 color: #888;
+	 }
+	page {
+		background-color: #F8F8FC; 
+	}
+	.top{
+		/* height: 88rpx; */
+		background-color: #fff;
+		padding: 0rpx 15rpx;
+		padding-top: 20rpx;
+	}
+	.indexes {
+		position: relative;
+	}
+
+	.indexBar {
+		position: fixed;
+		right: 0px;
+		bottom: 0px;
+		padding: 20upx 20upx 20upx 60upx;
+		display: flex;
+		align-items: center;
+	}
+
+	.indexBar .indexBar-box {
+		width: 40upx;
+		height: auto;
+		background: #fff;
+		display: flex;
+		flex-direction: column;
+		box-shadow: 0 0 20upx rgba(0, 0, 0, 0.1);
+		border-radius: 10upx;
+	}
+
+	.indexBar-item {
+		flex: 1;
+		width: 40upx;
+		height: 40upx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		font-size: 24upx;
+		color: #888;
+	}
+
+	movable-view.indexBar-item {
+		width: 40upx;
+		height: 40upx;
+		z-index: 9;
+		position: relative;
+	}
+
+	movable-view.indexBar-item::before {
+		content: "";
+		display: block;
+		position: absolute;
+		left: 0;
+		top: 10upx;
+		height: 20upx;
+		width: 4upx;
+		background-color: #f37b1d;
+	}
+
+	.indexToast {
+		position: fixed;
+		top: 0;
+		right: 80upx;
+		bottom: 0;
+		background: rgba(0, 0, 0, 0.5);
+		width: 100upx;
+		height: 100upx;
+		border-radius: 10upx;
+		margin: auto;
+		color: #fff;
+		line-height: 100upx;
+		text-align: center;
+		font-size: 48upx;
+	}
+	.zm{
+		height:30rpx;
+		padding: 0rpx 20rpx;
+		font-size: 24rpx;
+		color: #888;
+		background: #F8F8FC;
+	}
+	.user-list{
+		 margin: 20rpx;
+		 border-radius: 20rpx;
+	}
+	.user-item{
+		width: 100%;
+		margin: 12rpx 0;
+	}
+	.user-item .avatar{
+		width: 100upx;
+		height: 100upx;
+	}
+	.user-item .avatar .img{
+		border-radius: 50%;
+		width: 100%;
+		height: 100%;
+	}
+	.user-item .content{
+		margin-left: 15rpx;
+	}
+	.user-item .content .name{
+		font-size: 26rpx;
+		color: #111;
+	}
+	.user-item .content .dept{
+		font-size: 24rpx;
+		color: #888;
+		margin-top: 15rpx;
+		
+	}
+</style>

+ 304 - 304
pages_managedata/vipdetail.vue

@@ -1,305 +1,305 @@
-<template>
-	<view>
-		<view class="topBgline plr20">
-			<view class="justify-start p30 bgcolf radius12">
-				<u-avatar :src='detailUser.avatar'></u-avatar>
-				<view class="ml16">
-					<view class="bold fs28">{{detailUser.nickname}}</view>
-					<view class="fs24 base-color-3">注册时间:{{detailUser.createTime}}</view>
-				</view>
-			</view>
-		</view>
-		<view class="plr20 ptb32 justify-around bgf">
-			<view v-for="(item,index) in typeOption" :key="item.value" class='fs24 base-color-3 ptb4 plr20 radius4'
-				@click="tabActive(item)" :class="tabindex==index?'actsel':'notact'">{{item.label}}</view>
-		</view>
-		<view class="bgf pb40">
-			<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="bold">看课统计</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-between">
-						<view class="justify-between livebox">
-							<view class="base-color-3">观看次数</view>
-							<view class="base-color fs24"><text class="fs32 bold">{{answerlist.watchTimes}}</text>次</view>
-						</view>
-						<view class="livebox justify-between">
-							<view class="base-color-3">完播次数</view>
-							<view class="base-color fs24"><text class="fs32 bold">{{answerlist.completeWatchCount}}</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">答题统计</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-between">
-						<view class=" liveboxs">
-							<view class="base-color-3">答题次数</view>
-							<view class="base-color fs24">
-								<text class="fs32 bold">{{answerlist.answerTime}}</text>次
-							</view>
-						</view>
-						<view class="liveboxs ">
-							<view class="base-color-3">正确次数</view>
-							<view class="base-color fs24">
-								<text class="fs32 bold">{{answerlist.answerRightTime}}</text>次
-							</view>
-						</view>
-						<view class="liveboxs ">
-							<view class="base-color-3">答题红包数</view>
-							<view class="base-color fs24">
-								<text class="fs32 bold">{{answerlist.answerRedPacketTime}}</text>次
-							</view>
-						</view>
-					</view>
-				</u-collapse-item>
-			</u-collapse>
-			<view class="justify-start align-center base-bg-f8 mlr30 radius12 plr20 ptb20">
-				<u-image :src="imgPath+'/app/manergevip/book.png'" width="30" height="30"></u-image>
-				<view class="ml20">
-					<view class="base-color-3">答题红包金额</view>
-					<view class="base-color fs24"><text class="fs32 bold mr4">
-					{{answerlist.answerRedPacketAmount==0?'00.00':answerlist.answerRedPacketAmount}}</text>元</view>
-				</view>
-			</view>
-		</view>
-		<view class="justify-center botfun">
-			<view class="justify-start align-center bottom-btns" style="border: 2rpx solid #ee0a25;"
-			@click="disableUser" :class="this.detailUser.status!==1?'bgf':'base-bg-red'">
-				<u-icon name="close-circle" :color="this.detailUser.status!==1?'#ee0a25':'#fff'" size="22" ></u-icon>
-				<view class=" ml12" :class="this.detailUser.status!==1?'base-color-red':'colorf'">{{answerText}}</view>
-			</view>
-			<!-- <view class="justify-start align-center bottom-btns" style="border: 2rpx solid #1677ff;">
-				<u-icon name="pushpin" color="#1677ff" size="22"></u-icon>
-				<view class="base-color">会员分组</view>
-			</view>
-			<view class="justify-start align-center base-bg bottom-btns">
-				<u-icon name="rmb-circle" color="#fff" size="22"></u-icon>
-				<view class="colorf">新会员奖励</view>
-			</view> -->
-		</view>
-		<u-loading-page :loading="viewload" iconSize="32" loadingColor="#3c9cff" fontSize="20"
-		:loading-text="loadingtext"></u-loading-page>
-	</view>
-</template>
-
-<script>
-	import {
-		getanswerlist,
-		Addblacklist,
-		removebalcklist
-	} from "@/api/manageCompany.js";
-	export default {
-		data() {
-			return {
-				viewload: true,
-				loadingtext: "数据加载中...",
-				typeOption: [{
-					label: '全部',
-					value: 0
-				}, {
-					label: '今天',
-					value: 1
-				}, {
-					label: '昨天',
-					value: 2
-				}, {
-					label: '前天',
-					value: 3
-				}, {
-					label: '近七天',
-					value: 4
-				}],
-				tabindex: 0,
-				collapseValue: ['course', 'questions', 'redenvelope'],
-				detailUser: [],
-				user: [],
-				answerlist:[],
-				answerText:'禁用',
-				userId:[],
-				id:'',
-				dateTag:'',
-				userCompanyId:''
-			}
-		},
-		computed: {
-		    imgPath() {
-		      return this.$store.state.imgpath
-		    }
-		},
-		onShow() {
-			this.getAnswerlists()
-			this.detailUser =uni.getStorageSync('detailUser')
-			if(this.detailUser.status!==1){
-				this.answerText='取消禁用'
-			}
-		},
-		mounted() {
-			
-		},
-		onLoad(option) {
-			this.id=option.id
-			this.userCompanyId=option.userCompanyId
-		},
-		methods: {
-			tabActive(item) {
-				this.tabindex = item.value
-				if(item.value==0){
-					this.dateTag=''
-				}else{
-					this.dateTag=item.label
-				}
-				console.log(item.label)
-				this.getAnswerlists()
-			},
-			changeCollapse(e) {
-				this.collapseValue = e.filter(item => item.status == 'open').map(it => it.name)
-			},
-			getAnswerlists() {
-				const params = {
-					dateTag:this.dateTag,
-					userId: this.id,
-					userCompanyId:this.userCompanyId
-				}
-				getanswerlist(params).then(res => {
-					if (res.code == 200) {
-						this.viewload = false
-						this.answerlist=res.data
-						console.log(this.answerlist)
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-			},
-			disableUser(){
-				if(this.detailUser.status==1){
-					this.addblack()
-					this.detailUser.status=0
-					this.answerText='已禁用'
-				}else{
-					this.deleteblack()
-					this.detailUser.status==1
-					this.answerText='禁用'
-				}
-			},
-			addblack(){
-				//添加到黑名单
-				this.userId[0]=this.userCompanyId
-				const params={
-					userCompanyUserIds : this.userId
-				}
-				Addblacklist(this.userId).then(res=>{
-					if(res.code==200){
-						console.log(res)
-						uni.showToast({
-							icon: 'none',
-							title: '用户成功被禁用'
-						})
-						setTimeout(()=>{
-							console.log(1232)
-							uni.navigateBack({
-								data:1
-							})
-						},500)
-					}else{
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-			},
-			deleteblack(){
-				//移除黑名单
-				this.userId[0]=this.userCompanyId
-				removebalcklist(this.userId).then(res=>{
-					if(res.code){
-						uni.showToast({
-							icon: 'none',
-							title: '用户成功取消禁用'
-						})
-						setTimeout(()=>{
-							uni.navigateTo({
-								url:'/pages_manage/index?act='+2
-							})
-						},500)
-					}else{
-						uni.showToast({
-							icon: 'none',
-							title: res.msg
-						})
-					}
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	// page {
-	// 	background-color: #fff;
-	// }
-
-	.topBgline {
-		background: linear-gradient(to right, rgba(225, 238, 255, 1), rgba(223, 224, 254, 1));
-		padding-top: 40rpx;
-	}
-
-	.bgcolf {
-		background: rgba(255, 255, 255, 0.4);
-	}
-
-	.actsel {
-		background-color: #1773ff;
-		color: #fff;
-		transition: background-color 0.4s ease-in-out;
-	}
-
-	.notact {
-		background-color: #f8f8f8;
-	}
-
-	.livebox {
-		width: calc(50% - 10rpx);
-		background-color: #f8f8f8;
-		padding: 20rpx 10rpx;
-		border-radius: 12rpx;
-	}
-
-	.liveboxs {
-		width: calc(33% - 10rpx);
-		background-color: #f8f8f8;
-		padding: 20rpx 10rpx;
-		border-radius: 12rpx;
-	}
-
-	.bottom-btns {
-		padding: 10rpx 40rpx;
-		border-radius: 50rpx;
-	}
-
-	.botfun {
-		position: fixed;
-		bottom: 32rpx;
-		right: 32rpx;
-	}
+<template>
+	<view>
+		<view class="topBgline plr20">
+			<view class="justify-start p30 bgcolf radius12">
+				<u-avatar :src='detailUser.avatar'></u-avatar>
+				<view class="ml16">
+					<view class="bold fs28">{{detailUser.nickname}}</view>
+					<view class="fs24 base-color-3">注册时间:{{detailUser.createTime}}</view>
+				</view>
+			</view>
+		</view>
+		<view class="plr20 ptb32 justify-around bgf">
+			<view v-for="(item,index) in typeOption" :key="item.value" class='fs24 base-color-3 ptb4 plr20 radius4'
+				@click="tabActive(item)" :class="tabindex==index?'actsel':'notact'">{{item.label}}</view>
+		</view>
+		<view class="bgf pb40">
+			<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="bold">看课统计</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-between">
+						<view class="justify-between livebox">
+							<view class="base-color-3">观看次数</view>
+							<view class="base-color fs24"><text class="fs32 bold">{{answerlist.watchTimes}}</text>次</view>
+						</view>
+						<view class="livebox justify-between">
+							<view class="base-color-3">完播次数</view>
+							<view class="base-color fs24"><text class="fs32 bold">{{answerlist.completeWatchCount}}</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">答题统计</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-between">
+						<view class=" liveboxs">
+							<view class="base-color-3">答题次数</view>
+							<view class="base-color fs24">
+								<text class="fs32 bold">{{answerlist.answerTime}}</text>次
+							</view>
+						</view>
+						<view class="liveboxs ">
+							<view class="base-color-3">正确次数</view>
+							<view class="base-color fs24">
+								<text class="fs32 bold">{{answerlist.answerRightTime}}</text>次
+							</view>
+						</view>
+						<view class="liveboxs ">
+							<view class="base-color-3">答题红包数</view>
+							<view class="base-color fs24">
+								<text class="fs32 bold">{{answerlist.answerRedPacketTime}}</text>次
+							</view>
+						</view>
+					</view>
+				</u-collapse-item>
+			</u-collapse>
+			<view class="justify-start align-center base-bg-f8 mlr30 radius12 plr20 ptb20">
+				<u-image :src="imgPath+'/app/manergevip/book.png'" width="30" height="30"></u-image>
+				<view class="ml20">
+					<view class="base-color-3">答题红包金额</view>
+					<view class="base-color fs24"><text class="fs32 bold mr4">
+					{{answerlist.answerRedPacketAmount==0?'00.00':answerlist.answerRedPacketAmount}}</text>元</view>
+				</view>
+			</view>
+		</view>
+		<view class="justify-center botfun">
+			<view class="justify-start align-center bottom-btns" style="border: 2rpx solid #ee0a25;"
+			@click="disableUser" :class="this.detailUser.status!==1?'bgf':'base-bg-red'">
+				<u-icon name="close-circle" :color="this.detailUser.status!==1?'#ee0a25':'#fff'" size="22" ></u-icon>
+				<view class=" ml12" :class="this.detailUser.status!==1?'base-color-red':'colorf'">{{answerText}}</view>
+			</view>
+			<!-- <view class="justify-start align-center bottom-btns" style="border: 2rpx solid #1677ff;">
+				<u-icon name="pushpin" color="#1677ff" size="22"></u-icon>
+				<view class="base-color">会员分组</view>
+			</view>
+			<view class="justify-start align-center base-bg bottom-btns">
+				<u-icon name="rmb-circle" color="#fff" size="22"></u-icon>
+				<view class="colorf">新会员奖励</view>
+			</view> -->
+		</view>
+		<u-loading-page :loading="viewload" iconSize="32" loadingColor="#3c9cff" fontSize="20"
+		:loading-text="loadingtext"></u-loading-page>
+	</view>
+</template>
+
+<script>
+	import {
+		getanswerlist,
+		Addblacklist,
+		removebalcklist
+	} from "@/api/manageCompany.js";
+	export default {
+		data() {
+			return {
+				viewload: true,
+				loadingtext: "数据加载中...",
+				typeOption: [{
+					label: '全部',
+					value: 0
+				}, {
+					label: '今天',
+					value: 1
+				}, {
+					label: '昨天',
+					value: 2
+				}, {
+					label: '前天',
+					value: 3
+				}, {
+					label: '近七天',
+					value: 4
+				}],
+				tabindex: 0,
+				collapseValue: ['course', 'questions', 'redenvelope'],
+				detailUser: [],
+				user: [],
+				answerlist:[],
+				answerText:'禁用',
+				userId:[],
+				id:'',
+				dateTag:'',
+				userCompanyId:''
+			}
+		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		},
+		onShow() {
+			this.getAnswerlists()
+			this.detailUser =uni.getStorageSync('detailUser')
+			if(this.detailUser.status!==1){
+				this.answerText='取消禁用'
+			}
+		},
+		mounted() {
+			
+		},
+		onLoad(option) {
+			this.id=option.id
+			this.userCompanyId=option.userCompanyId
+		},
+		methods: {
+			tabActive(item) {
+				this.tabindex = item.value
+				if(item.value==0){
+					this.dateTag=''
+				}else{
+					this.dateTag=item.label
+				}
+				console.log(item.label)
+				this.getAnswerlists()
+			},
+			changeCollapse(e) {
+				this.collapseValue = e.filter(item => item.status == 'open').map(it => it.name)
+			},
+			getAnswerlists() {
+				const params = {
+					dateTag:this.dateTag,
+					userId: this.id,
+					userCompanyId:this.userCompanyId
+				}
+				getanswerlist(params).then(res => {
+					if (res.code == 200) {
+						this.viewload = false
+						this.answerlist=res.data
+						console.log(this.answerlist)
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			disableUser(){
+				if(this.detailUser.status==1){
+					this.addblack()
+					this.detailUser.status=0
+					this.answerText='已禁用'
+				}else{
+					this.deleteblack()
+					this.detailUser.status==1
+					this.answerText='禁用'
+				}
+			},
+			addblack(){
+				//添加到黑名单
+				this.userId[0]=this.userCompanyId
+				const params={
+					userCompanyUserIds : this.userId
+				}
+				Addblacklist(this.userId).then(res=>{
+					if(res.code==200){
+						console.log(res)
+						uni.showToast({
+							icon: 'none',
+							title: '用户成功被禁用'
+						})
+						setTimeout(()=>{
+							console.log(1232)
+							uni.navigateBack({
+								data:1
+							})
+						},500)
+					}else{
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			},
+			deleteblack(){
+				//移除黑名单
+				this.userId[0]=this.userCompanyId
+				removebalcklist(this.userId).then(res=>{
+					if(res.code){
+						uni.showToast({
+							icon: 'none',
+							title: '用户成功取消禁用'
+						})
+						setTimeout(()=>{
+							uni.navigateTo({
+								url:'/pages_manage/index?act='+2
+							})
+						},500)
+					}else{
+						uni.showToast({
+							icon: 'none',
+							title: res.msg
+						})
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	// page {
+	// 	background-color: #fff;
+	// }
+
+	.topBgline {
+		background: linear-gradient(to right, rgba(225, 238, 255, 1), rgba(223, 224, 254, 1));
+		padding-top: 40rpx;
+	}
+
+	.bgcolf {
+		background: rgba(255, 255, 255, 0.4);
+	}
+
+	.actsel {
+		background-color: #1773ff;
+		color: #fff;
+		transition: background-color 0.4s ease-in-out;
+	}
+
+	.notact {
+		background-color: #f8f8f8;
+	}
+
+	.livebox {
+		width: calc(50% - 10rpx);
+		background-color: #f8f8f8;
+		padding: 20rpx 10rpx;
+		border-radius: 12rpx;
+	}
+
+	.liveboxs {
+		width: calc(33% - 10rpx);
+		background-color: #f8f8f8;
+		padding: 20rpx 10rpx;
+		border-radius: 12rpx;
+	}
+
+	.bottom-btns {
+		padding: 10rpx 40rpx;
+		border-radius: 50rpx;
+	}
+
+	.botfun {
+		position: fixed;
+		bottom: 32rpx;
+		right: 32rpx;
+	}
 </style>

BIN
pages_tool/.DS_Store


+ 14 - 0
pages_tool/@babel/runtime/helpers/defineProperty.js

@@ -0,0 +1,14 @@
+function _defineProperty(obj, key, value) {
+    if (key in obj) {
+        Object.defineProperty(obj, key, {
+            value: value,
+            enumerable: true,
+            configurable: true,
+            writable: true
+        });
+    } else {
+        obj[key] = value;
+    }
+    return obj;
+}
+module.exports = _defineProperty;

+ 8 - 0
pages_tool/@babel/runtime/helpers/interopRequireDefault.js

@@ -0,0 +1,8 @@
+function _interopRequireDefault(obj) {
+    return obj && obj.__esModule
+        ? obj
+        : {
+              default: obj
+          };
+}
+module.exports = _interopRequireDefault;

BIN
pages_tool/images/.DS_Store


BIN
pages_tool/images/add.png


BIN
pages_tool/images/christmasHat/.DS_Store


BIN
pages_tool/images/christmasHat/1.png


BIN
pages_tool/images/christmasHat/10.png


BIN
pages_tool/images/christmasHat/2.png


BIN
pages_tool/images/christmasHat/3.png


BIN
pages_tool/images/christmasHat/4.png


BIN
pages_tool/images/christmasHat/5.png


BIN
pages_tool/images/christmasHat/6.png


BIN
pages_tool/images/christmasHat/7.png


BIN
pages_tool/images/christmasHat/8.png


BIN
pages_tool/images/christmasHat/9.png


Неке датотеке нису приказане због велике количине промена