Browse Source

第一次提交

puyao 3 tuần trước cách đây
mục cha
commit
0c27aadc67
53 tập tin đã thay đổi với 3010 bổ sung517 xóa
  1. 6 0
      .idea/vcs.xml
  2. 86 0
      .idea/workspace.xml
  3. 4 3
      App.vue
  4. 15 10
      api/course.js
  5. 49 44
      api/courseManage.js
  6. 67 0
      api/qwcourse.js
  7. 10 10
      api/user.js
  8. 26 6
      common/request.js
  9. 2 1
      components/chart.vue
  10. 32 18
      components/courseItem.vue
  11. 8 3
      components/dropdownPanel.vue
  12. 61 0
      components/enterpriseimg.vue
  13. 29 33
      components/liveCourse.vue
  14. 8 3
      components/living.vue
  15. 25 30
      components/newuser.vue
  16. 2 2
      components/userUrgeCourse.vue
  17. 12 7
      components/vipUserItem.vue
  18. 6 1
      main.js
  19. 1 1
      manifest.json
  20. 21 9
      pages.json
  21. 21 6
      pages/auth/login.vue
  22. 7 4
      pages/auth/wxlogin.vue
  23. 31 15
      pages/common/launch.vue
  24. 8 2
      pages/course/course.vue
  25. 7 2
      pages/courseManage/course/becomeSale.vue
  26. 7 13
      pages/courseManage/course/becomeVip.vue
  27. 6 1
      pages/courseManage/manage/exprotList.vue
  28. 13 8
      pages/courseManage/manage/manageDetail.vue
  29. 7 2
      pages/courseManage/manage/manageIndex.vue
  30. 2 2
      pages/courseManage/manage/userDataDetail.vue
  31. 7 7
      pages/courseManage/operation/index.vue
  32. 7 7
      pages/courseManage/statistics.vue
  33. 1 1
      pages/courseManage/vip/ManageDetail.vue
  34. 19 16
      pages/customer/index.vue
  35. 55 86
      pages/enterprise/enterprise.vue
  36. 40 0
      pages/index/h5.vue
  37. 1 1
      pages/index/index.vue
  38. 4 4
      pages/urgeCourse/urgeCourse.vue
  39. 10 5
      pages/user/about.vue
  40. 10 10
      pages/user/editUser.vue
  41. 18 18
      pages/user/index.vue
  42. 3 3
      pages/user/userInfo.vue
  43. 54 14
      pages/user/users/becomeVIP.vue
  44. 4 4
      pages/user/users/userInfo.vue
  45. 1 1
      pages/user/users/users.vue
  46. 171 0
      pages_course/reward.vue
  47. 50 50
      pages_course/video.vue
  48. 1925 0
      pages_course/videovip.vue
  49. 26 52
      router/router.js
  50. BIN
      static/images/course_answer_img.png
  51. 1 1
      uni_modules/lime-painter/readme.md
  52. 24 1
      utils/common.js
  53. BIN
      xiaohongqun_uni_app.zip

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>

+ 86 - 0
.idea/workspace.xml

@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="AutoImportSettings">
+    <option name="autoReloadType" value="SELECTIVE" />
+  </component>
+  <component name="ChangeListManager">
+    <list default="true" id="5af0c1e4-f9e0-4fd3-a3c5-4ca3fc2191f0" name="更改" comment="合并" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="ProjectColorInfo">{
+  &quot;associatedIndex&quot;: 4
+}</component>
+  <component name="ProjectId" id="2uIhpv28Q9roM3c2ycSRLwNcEV7" />
+  <component name="ProjectViewState">
+    <option name="hideEmptyMiddlePackages" value="true" />
+    <option name="showLibraryContents" value="true" />
+  </component>
+  <component name="PropertiesComponent"><![CDATA[{
+  "keyToString": {
+    "RunOnceActivity.ShowReadmeOnStart": "true",
+    "RunOnceActivity.git.unshallow": "true",
+    "git-widget-placeholder": "master",
+    "last_opened_file_path": "C:/project/xiaohongqun_uni_app",
+    "node.js.detected.package.eslint": "true",
+    "node.js.detected.package.tslint": "true",
+    "node.js.selected.package.eslint": "(autodetect)",
+    "node.js.selected.package.tslint": "(autodetect)",
+    "nodejs_package_manager_path": "npm",
+    "vue.rearranger.settings.migration": "true"
+  }
+}]]></component>
+  <component name="SharedIndexes">
+    <attachedChunks>
+      <set>
+        <option value="bundled-js-predefined-d6986cc7102b-1632447f56bf-JavaScript-WS-243.26053.12" />
+      </set>
+    </attachedChunks>
+  </component>
+  <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="默认任务">
+      <changelist id="5af0c1e4-f9e0-4fd3-a3c5-4ca3fc2191f0" name="更改" comment="" />
+      <created>1741942181861</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1741942181861</updated>
+      <workItem from="1741942183014" duration="764000" />
+      <workItem from="1745818152075" duration="876000" />
+    </task>
+    <task id="LOCAL-00001" summary="合并">
+      <option name="closed" value="true" />
+      <created>1745825595839</created>
+      <option name="number" value="00001" />
+      <option name="presentableId" value="LOCAL-00001" />
+      <option name="project" value="LOCAL" />
+      <updated>1745825595839</updated>
+    </task>
+    <option name="localTasksCounter" value="2" />
+    <servers />
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="version" value="3" />
+  </component>
+  <component name="Vcs.Log.Tabs.Properties">
+    <option name="TAB_STATES">
+      <map>
+        <entry key="MAIN">
+          <value>
+            <State />
+          </value>
+        </entry>
+      </map>
+    </option>
+  </component>
+  <component name="VcsManagerConfiguration">
+    <MESSAGE value="迁移初始文件" />
+    <MESSAGE value="合并" />
+    <option name="LAST_COMMIT_MESSAGE" value="合并" />
+  </component>
+</project>

+ 4 - 3
App.vue

@@ -3,15 +3,15 @@
 	var pingpangTimes=null;
 	var isSocketOpen=false;
 	var socket=null;
+	let nowapp='福本源'
 	export default {
 		data() {
 			return {
 			};
 		},
 		onLaunch: function() {
-			console.log('App Launch')
 			// uni.hideTabBar();
-			
+			console.log(nowapp)
 		},
 		onLoad() {
 			 // #ifndef MP-WEIXIN 
@@ -19,6 +19,7 @@
 			// #endif
 		},
 		onShow: function() {
+			
 			console.log('App Show')
 		},
 		onHide: function() {
@@ -346,4 +347,4 @@
 /*每个页面公共css */
 @import './assets/iconfont/iconfont.css';
 @import './assets/css/common.less';
-</style>
+</style>

+ 15 - 10
api/course.js

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

+ 49 - 44
api/courseManage.js

@@ -3,28 +3,28 @@ let request = new Request().http
 
 // 统计经销商会员总数和群管总数
 export function getCompanyUserAndUserCount(data) {
-	return request('/app/fs/user/firstPage/summaryCount', data,'GET','application/json;charset=UTF-8');
+	return request('/companyapp/app/fs/user/firstPage/summaryCount', data,'GET','application/json;charset=UTF-8');
 }
 
 // 课程统计
 export function getCourseCount(data) {
-	return request('/app/fs/user/firstPage/statistics', data,'GET','application/json;charset=UTF-8');
+	return request('/companyapp/app/fs/user/firstPage/statistics', data,'GET','application/json;charset=UTF-8');
 }
 
 // 获取课程列表
 export function getFsCourseList(data) {
-	return request('/app/fs/course/courseList', data,'GET','application/json;charset=UTF-8');
+	return request('/companyapp/app/fs/course/courseList', data,'GET','application/json;charset=UTF-8');
 }
 
 // 根据训练营查询节目
 export function getCourseVdieoList(data) {
-	const url = '/app/fs/course/pageList?periodId='+data.periodId +'&pageNum='+data.pageNum + '&pageSize='+data.pageSize+'&keyword='+data.keyword
+	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 getUserLogListByCourseId(data) {
-	const url = '/app/fs/course/participationRecord'
+	const url = '/companyapp/app/fs/course/participationRecord'
 	return request(url, data,'GET','application/json;charset=UTF-8');
 }
 
@@ -36,43 +36,43 @@ export function updateFsUser(data) {
 
 //根据经销商或群管查询会员列表
 export function getfsuserList(data){
-	const url = '/app/fs/user/pageList'
+	const url = '/companyapp/app/fs/user/pageList'
 	return request(url, data, 'POST','application/json;charset=UTF-8')
 }
 
 //查询会员标签列表
  export function getcompanyTaglist(data) {
- 	 return request('/app/fs/user/tagList',data,'GET');
+ 	 return request('/companyapp/app/fs/user/tagList',data,'GET');
  }
   
   //添加黑名单
   export function Addblacklist(data){
-  	const url = '/app/fs/user/disabled'
+  	const url = '/companyapp/app/fs/user/disabled'
   	return request(url, data, 'POST','application/json;charset=UTF-8')
   }
   
   //修改公司会员打标签
   export function changeLable(data){
-  	const url = '/app/fs/user/changeUserTags'
+  	const url = '/companyapp/app/fs/user/changeUserTags'
   	return request(url, data, 'POST','application/json;charset=UTF-8')
   }
   
   //查询答题数据(会员详情)
   export function getanswerlist(data){
-  	const url = '/app/fs/user/details'
+  	const url = '/companyapp/app/fs/user/details'
   	return request(url, data, 'GET','application/json;charset=UTF-8')
   }
   
   //移除黑名单(会员详情)
   export function removebalcklist(data){
-  	const url = '/app/fs/user/enabled'
+  	const url = '/companyapp/app/fs/user/enabled'
   	return request(url, data, 'POST','application/json;charset=UTF-8')
   }
   
 
   //生成小节课程 (链接)
   export function sharecourselink(data){
-  	const url = '/app/fs/course/courseSortLink'
+  	const url = '/companyapp/app/fs/course/courseSortLink'
   	return request(url, data, 'POST','application/json;charset=UTF-8')
   }
   
@@ -84,36 +84,36 @@ export function getfsuserList(data){
   
   //查询看课转化率(漏斗图)
   export function getcourseRate(data){
-  	const url = '/app/fs/user/firstPage/graphic'
+  	const url = '/companyapp/app/fs/user/firstPage/graphic'
   	return request(url, data, 'GET','application/json;charset=UTF-8')
   } 
   //查询详情看课转化率(漏斗图)
   export function getcourseRates(data){
-  	const url = '/app/fs/user/graphic/details'
+  	const url = '/companyapp/app/fs/user/graphic/details'
   	return request(url, data, 'GET','application/json;charset=UTF-8')
   } 
   
 //根据经销商或群管查询会员总数
   export function getvipNum(data){
-  	const url = '/app/fs/user/totalNumber'
+  	const url = '/companyapp/app/fs/user/totalNumber'
   	return request(url, data, 'GET','application/json;charset=UTF-8')
   } 
   
 //根据经销商 运营:查询课程数,群管数,参与会员
 export function getshopCoursenum(data){
-	const url = '/app/fs/user/statistics/details'
+	const url = '/companyapp/app/fs/user/statistics/details'
 	return request(url, data, 'GET','application/json;charset=UTF-8')
 } 
 
 //根据经销商 获取群管排名
 export function getGroupRanklist(data){
-	const url = '/app/fs/user/firstPage/userRanking'
+	const url = '/companyapp/app/fs/user/firstPage/userRanking'
 	return request(url, data, 'GET','application/json;charset=UTF-8')
 } 
 
 //根据经销商 获取课程排名
 export function getCourseRanklist(data){
-	const url = '/app/fs/user/firstPage/courseRanking'
+	const url = '/companyapp/app/fs/user/firstPage/courseRanking'
 	return request(url, data, 'GET','application/json;charset=UTF-8')
 } 
 
@@ -131,19 +131,19 @@ export function getuserbalance(data){
 
 //根据经销商 查询所属群管
 export function getusergroup(data){
-	const url = '/app/companyUser/getCompanyUserList'
+	const url = '/companyapp/app/companyUser/getCompanyUserList'
 	return request(url, data, 'GET','application/json;charset=UTF-8')
 } 
 
 //根据经销商 新增公司标签
 export function addCompanyLabel(data){
-	const url = '/app/companyTag/add'
+	const url = '/companyapp/app/companyTag/add'
 	return request(url, data, 'POST','application/json;charset=UTF-8')
 } 
 
 //根据经销商 删除公司标签
 export function deleteCompanyLabel(data){
-	const url = '/app/companyTag/delete?tagIds='+data
+	const url = '/companyapp/app/companyTag/delete?tagIds='+data
 	return request(url, data, 'POST','application/json;charset=UTF-8')
 }
 
@@ -155,37 +155,37 @@ export function getredPrice(data){
 
 //根据经销商 查询所属群管列表
 export function getgroupList(data){
-	const url = '/app/companyUser/companyUserListByCompanyId'
+	const url = '/companyapp/app/companyUser/companyUserListByCompanyId'
 	return request(url, data, 'GET','application/json;charset=UTF-8')
 }
 
 //根据经销商 查询群管的课程
 export function getcourseList(data){
-	const url = '/app/fs/user/courseAnalysis'
+	const url = '/companyapp/app/fs/user/courseAnalysis'
 	return request(url, data, 'GET','application/json;charset=UTF-8')
 }
 
 //根据经销商 修改群管信息
 export function updategroupinfo(data){
-	const url = '/app/companyUser/updateUserInfo'
+	const url = '/companyapp/app/companyUser/updateUserInfo'
 	return request(url, data, 'POST','application/json;charset=UTF-8')
 }
 
 //根据经销商 获取群管详情
 export function getGroupDetail(data){
-	const url = '/app/companyUser/getCompanyUserInfo?companyUserId'
+	const url = '/companyapp/app/companyUser/getCompanyUserInfo?companyUserId'
 	return request(url, data, 'GET','application/json;charset=UTF-8')
 }
 
 //根据经销商  修改全部会员群管
 export function changevipUserAll(data){
-	const url = '/app/companyUser/changeUserParentApply'
+	const url = '/companyapp/app/companyUser/changeUserParentApply'
 	return request(url, data, 'POST','application/json;charset=UTF-8')
 }
 
 //根据经销商  查询标签下会员
 export function gettagsUser(data){
-	const url = '/app/companyTag/tagSubUsers'
+	const url = '/companyapp/app/companyTag/tagSubUsers'
 	return request(url, data, 'GET','application/json;charset=UTF-8')
 }
 
@@ -221,7 +221,7 @@ export function getaddcourseLog(data) {
 
 // 生成海报和看图二维码
 export function buildCode(data) {
-	return request('/app/fs/course/courseImage',data, 'POST',  'application/json;charset=UTF-8');
+	return request('/companyapp/app/fs/course/courseImage',data, 'POST',  'application/json;charset=UTF-8');
 }
 
 //是否可以看课
@@ -246,81 +246,86 @@ export function becomeVipuser(data) {
 
 //生成分享海报,新建会员
 export function becomeVipuserImg(data) {
-	return request('/app/fs/user/userImage', data, 'POST', 'application/json;charset=UTF-8');
+	return request('/companyapp/app/fs/user/userImage', data, 'POST', 'application/json;charset=UTF-8');
 }
 
 //获取jssdk
 export function getSDK(data){
-	return request('/app/wx/mp/getWeiXinConfig', data, 'GET', 'application/json;charset=UTF-8');
+	return request('/companyapp/app/wx/mp/getWeiXinConfig', data, 'GET', 'application/json;charset=UTF-8');
 }
 
 //获取公司所有销售
 export function getusersales(data){
-	return request('/app/fs/user/allCompanyUser', data, 'GET', 'application/json;charset=UTF-8');
+	return request('/companyapp/app/fs/user/allCompanyUser', data, 'GET', 'application/json;charset=UTF-8');
 }
 
 //获取催课面板
 export function geturgeCourse(data){
-	return request('/app/qwWorkTask/list', data, 'GET', 'application/json;charset=UTF-8');
+	return request('/companyapp/app/qwWorkTask/list', data, 'GET', 'application/json;charset=UTF-8');
 }
 
 //获取企微账号
 export function geturgeqiwei(data){
-	return request('/app/qwWorkTask/getMyQwUserList', data, 'GET', 'application/json;charset=UTF-8');
+	return request('/companyapp/app/qwWorkTask/getMyQwUserList', data, 'GET', 'application/json;charset=UTF-8');
 }
 
 //获取课程视频详情
 export function getcourseDetail(data){
-	return request('/app/fs/course/videoDetails', data, 'GET', 'application/json;charset=UTF-8');
+	return request('/companyapp/app/fs/course/videoDetails', data, 'GET', 'application/json;charset=UTF-8');
 }
 
 //通过销售审核
 export function subsalesaudit(data){
-	return request('/app/user/audit?userIds='+data, data, 'POST', 'application/json;charset=UTF-8');
+	return request('/companyapp/app/user/audit?userIds='+data, data, 'POST', 'application/json;charset=UTF-8');
 }
 
 //解除销售黑名单
 export function changesalesState(data){
-	return request('/app/user/changeUserState?userIds='+data,data,  'POST', 'application/json;charset=UTF-8');
+	return request('/companyapp/app/user/changeUserState?userIds='+data,data,  'POST', 'application/json;charset=UTF-8');
 }
 
 //注册销售账户
 export function loginsales(data){
-	return request('/app/companyUser/resisterCompanyUser',data,  'POST', 'application/json;charset=UTF-8');
+	return request('/companyapp/app/companyUser/resisterCompanyUser',data,  'POST', 'application/json;charset=UTF-8');
 }
 
 //获取课程小节下拉列表
 export function getvideolist(data){
-	return request('/app/fs/course/videoList',data,  'GET', 'application/json;charset=UTF-8');
+	return request('/companyapp/app/fs/course/videoList',data,  'GET', 'application/json;charset=UTF-8');
 }
 
 //获取公司所有标签
 export function getallTags(data){
-	return request('/app/companyTag/list',data,  'GET', 'application/json;charset=UTF-8');
+	return request('/companyapp/app/companyTag/list',data,  'GET', 'application/json;charset=UTF-8');
 }
 
 //获取更换会员归属审核列表
 export function getchangeslist(data){
-	return request('/app/companyUser/applyList',data,  'GET', 'application/json;charset=UTF-8');
+	return request('/companyapp/app/companyUser/applyList',data,  'GET', 'application/json;charset=UTF-8');
 }
 
 //更改用户姓名,备注
 export function getchangesUserInfo(data){
-	return request('/app/fs/user/changeUserInfo',data,  'POST', 'application/json;charset=UTF-8');
+	return request('/companyapp/app/fs/user/changeUserInfo',data,  'POST', 'application/json;charset=UTF-8');
 }
 
 //管理 获取会员人数等
 export function getmanagepopnum(data){
-	return request('/app/fs/user/companyUser/summaryCount',data,  'GET', 'application/json;charset=UTF-8');
+	return request('/companyapp/app/fs/user/companyUser/summaryCount',data,  'GET', 'application/json;charset=UTF-8');
 }
 
 
 //管理 获取管理课程统计
 export function getmanagecourse(data){
-	return request('/app/fs/user/companyUser/details',data,  'GET', 'application/json;charset=UTF-8');
+	return request('/companyapp/app/fs/user/companyUser/details',data,  'GET', 'application/json;charset=UTF-8');
 }
 
 //催课 获取会员注册
 export function getWorkTask(data){
-	return request('/app/qwWorkTask/getUserList',data,  'GET', 'application/json;charset=UTF-8');
+	return request('/companyapp/app/qwWorkTask/getUserList',data,  'GET', 'application/json;charset=UTF-8');
+}
+
+//获取企业理念
+export function getenterprise(data){
+	return request('/app/index/getConcept',data,  'GET', 'application/json;charset=UTF-8');
 }

+ 67 - 0
api/qwcourse.js

@@ -0,0 +1,67 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+export function loginByMp(data) {
+ 	 return request('/QWcourse/app/wx/courseLogin',data,'POST','application/json;charset=UTF-8');
+ }
+
+// 获取真实链接
+export function getRealLink(data) {
+	return request('/QWcourse/app/course/getRealLink', data, 'GET','');
+}
+
+// h5课程简介
+export function getH5CourseByVideoId(data) {
+	return request('/QWcourse/app/course/getH5CourseByVideoId', data, 'GET','');
+}
+
+// h5课程详情加问答
+export function getH5CourseVideoDetails(data) {
+	return request('/QWcourse/app/course/getH5CourseVideoDetails', data, 'GET','');
+}
+
+// 答题发红包
+export function courseAnswer(data) {
+	return request('/QWcourse/app/course/courseAnswer', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+// // 记录看课时间(旧)
+// export function getFinishCourseVideo(data) {
+// 	return request('/app/course/getFinishCourseVideo', data, 'POST', 'application/json;charset=UTF-8');
+// }
+
+// 记录看课时间(新)
+export function getFinishCourseVideo(data) {
+	return request('/QWcourse/app/course/updateWatchDuration', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+// 关注客服
+export function getIsAddKf(data) {
+	return request('/QWcourse/app/course/isAddKf', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+// 流量(缓冲百分比)
+export function getInternetTraffic(data) {
+	return request('/QWcourse/app/course/getInternetTraffic', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+// 每十分钟获得积分
+export function getIntegralByH5Video(data) {
+	return request('/QWcourse/app/course/getIntegralByH5Video', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+// 发送奖励
+export function sendReward(data) {
+	return request('/QWcourse/app/course/sendReward', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+// 播放错误上报
+export function getErrMsg(data) {
+	return request('/QWcourse/app/course/getErrMsg', data, 'POST', 'application/x-www-form-urlencoded');
+}
+
+
+// 获取getWxConfig
+export function getWxConfig(data) {
+	return request('/QWcourse/app/wx/mp/getWxConfig', data, 'GET','');
+}

+ 10 - 10
api/user.js

@@ -3,35 +3,35 @@ let request = new Request().http
 
  
  export function login(data) {
- 	 return request('/app/user/login',data,'POST','application/json;charset=UTF-8');
+ 	 return request('/companyapp/app/user/login',data,'POST','application/json;charset=UTF-8');
  }
  export function checkLogin(data) {
- 	 return request('/app/user/checkLogin',data,'POST','application/json;charset=UTF-8');
+ 	 return request('/companyapp/app/user/checkLogin',data,'POST','application/json;charset=UTF-8');
  }
  
  export function getCompanyUser(data) {
- 	 return request('/app/user/getCompanyUser',data,'GET');
+ 	 return request('/companyapp/app/user/getCompanyUser',data,'GET');
  }
  
  export function getUserInfoByUserId(data) {
- 	 return request('/app/user/getUserInfoByUserId',data,'GET');
+ 	 return request('/companyapp/app/user/getUserInfoByUserId',data,'GET');
  }
  export function getAllUsers(data) {
- 	 return request('/app/user/getAllUsers',data,'GET');
+ 	 return request('/companyapp/app/user/getAllUsers',data,'GET');
  }
  export function getUserInfo(data) {
- 	 return request('/app/user/getUserInfo',data,'GET');
+ 	 return request('/companyapp/app/user/getUserInfo',data,'GET');
  }
- 
+ //h5登录
  export function loginByMp(data) {
- 	 return request('/app/wx/h5/mp/loginByMp',data,'POST','application/json;charset=UTF-8');
+ 	 return request('/companyapp/app/wx/h5/mp/loginByMp',data,'POST','application/json;charset=UTF-8');
  }
  // 成为会员
  export function registerCourses(data) {
- 	 return request('/app/fs/user/beMember',data,'POST','application/json;charset=UTF-8');
+ 	 return request('/course_uniapp/companyapp/app/fs/user/beMember',data,'POST','application/json;charset=UTF-8');
  }
  export function setUserInfo(data) {
- 	 return request('/app/user/setUserInfo',data,'POST','application/json;charset=UTF-8');
+ 	 return request('/companyapp/app/user/setUserInfo',data,'POST','application/json;charset=UTF-8');
  }
  //微信小程序登录
  export function loginByMiniApp(data) {

+ 26 - 6
common/request.js

@@ -1,17 +1,37 @@
 // uni-app请求封装
+import {TOKEN_KEY} from '@/utils/common.js'
 export default class Request {
 	http(router, data = {}, method,contentType) {
 		let that = this;
-		// let path = 'http://1.95.39.2:7015'
-		let path = 'http://192.168.10.131:7015'
-		// let path = 'http://192.168.10.150:7015'
-		// let path = 'http://120.46.11.55:7015'//正式
+		//曹丽芹
+		// let path = 'http://192.168.10.131:7015'
+		// let path = 'https://userapp.fbylive.com'//福本源
+		// let path = 'https://userapp.zkhj6.com'//中康
+		let path = 'http://company.h5.test.ylrztop.com'//云融融智
 		uni.setStorageSync('requestPath',path)
 		// uni.showLoading({
 		// 	title: '加载中'
 		// });
+		let token = uni.getStorageSync('AppToken');
+		if(router.indexOf("/course_uniapp")!=-1){
+			router =router.replace('/course_uniapp','')
+			// path = 'https://userapp.fbylive.com'
+			// path = 'https://userapp.zkhj6.com'//中康
+			let path = 'http://company.h5.test.ylrztop.com'//云融融智
+			// path = 'http://192.168.10.131:7014'
+			//#ifdef MP-WEIXIN
+			token =uni.getStorageSync('AppToken_MYfby')
+			//#endif
+			// #ifdef H5
+			token =uni.getStorageSync('TOKEN_KEY')
+			// #endif
+		}
+		if(router.indexOf("/QWcourse")!=-1){
+			router =router.replace('/QWcourse','')
+			token = uni.getStorageSync('TOKEN_KEYQW');
+		}
 		return new Promise((resolve, reject) => {
-			let token = uni.getStorageSync('AppToken');
+			// let token = uni.getStorageSync('AppToken');
 			let usertoken = uni.getStorageSync("UserToken")
 			var httpContentType='application/x-www-form-urlencoded';
 			if(contentType!=undefined){
@@ -62,7 +82,7 @@ export default class Request {
 						return;
 					}
 					if (res.token) {
-						uni.setStorageSync('UserAppToken',res.token)
+						uni.setStorageSync(TOKEN_KEY,res.data.token)
 					}
 					resolve(res.data)
 				},

+ 2 - 1
components/chart.vue

@@ -1,6 +1,6 @@
 <template>
 	<view class="charts-box">
-		<qiun-data-charts type="funnel" :opts="opts" :chartData="chartData" />
+		<qiun-data-charts type="funnel" :opts="opts" :chartData="chartData" :canvas2d="true" />
 	</view>
 </template>
 
@@ -28,6 +28,7 @@
 					],
 					padding: [15, 15, 0, 15],
 					enableScroll: false,
+					canvas2d:true,
 					extra: {
 						funnel: {
 							activeOpacity: 0.3,

+ 32 - 18
components/courseItem.vue

@@ -1,5 +1,5 @@
 <template>
-	<view class="courselist-item" >
+	<view class="courselist-item" style="height: 100%;">
 		<view class="courselist-con x-start" @click="toCourseDetail(info)">
 			<view class="courselist-img">
 				<!-- <view class="status">进行中</view> -->
@@ -9,7 +9,7 @@
 				<view @click.passive.stop>
 					<text class="more-t ">{{info.title}}</text>
 					<view class="btn_icon" style="margin-left: 5px;" @click="copyId">ID
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/copy_icon.png" mode="aspectFill"></image>
+						<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>
@@ -40,7 +40,7 @@
 			<view class="sharePop x-ac">
 				<!--#ifdef MP-WEIXIN-->
 				<view class="sharePop-item y-f card-share" >
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/card_icon.png" mode="aspectFill"
+					<image :src="imgPath+'/app/images/card_icon.png'" mode="aspectFill"
 						style="width: 80rpx; height: 80rpx;margin-top: 20rpx;"></image>
 					<view style="font-weight: bold;margin-bottom: 4px;">生成卡片</view>
 					<view style="font-size: 12px;color: #888;">指导分享轻松转发</view>
@@ -48,12 +48,12 @@
 				<!--#endif-->
 				<!--#ifdef H5-->
 				<view class="sharePop-item y-f" @click="buildimg">
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/poster_icon.png" mode="aspectFill"></image>
+					<image :src="imgPath+'/app/images/poster_icon.png'" mode="aspectFill"></image>
 					<view style="font-weight: bold;margin-bottom: 4px;">生成海报</view>
 					<view style="font-size: 12px;color: #888;">保存海报美观宣传</view>
 				</view>
 				<view class="sharePop-item y-f" @click="copyLink">
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/link_icon.png" mode="aspectFill"></image>
+					<image :src="imgPath+'/app/images/link_icon.png'" mode="aspectFill"></image>
 					<view style="font-weight: bold;margin-bottom: 4px;">复制链接</view>
 					<view style="font-size: 12px;color: #888;">生成链接一键复制</view>
 				</view>
@@ -79,11 +79,11 @@
 			</view>
 			<view class="justify-around mb40">
 				<!-- <view class="column justify-center align-center" @click="shareimg">
-					<image src='https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/wechat.png' class="w80 h80"></image>
+					<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='https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/downicon.png' class="w80 h80"></image>
+					<image :src="imgPath+'/app/image/downicon.png'" class="w80 h80"></image>
 					<view class=" mb10">长按图片保存</view>
 				</view>
 			</view>
@@ -91,12 +91,12 @@
 		<u-overlay :show="showzhidao" @click="showzhidao = false" style="z-index: 9999;">
 			<view class="point-box">
 				<view class="imgshe">
-					<image src='https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/point.png' class="w300 h300"></image>
+					<image :src="imgPath+'/app/image/point.png'" class="w300 h300"></image>
 				</view>
 				<view class="column colorf fs32 xu-box fs40
 				align-center justify-center">
 					<view class="justify-center">点击右上角
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/wxmore.png" class="w50 h50 mlr10"></image>
+						<image :src=:src="imgPath+'/app/image/wxmore.png'" class="w50 h50 mlr10"></image>
 					</view>
 					<view class="mt20">选择 “转发给朋友”</view>
 					<view style="color: #cbcbcb;" class="fs28 mt40">点击任意位置关闭弹窗</view>
@@ -151,11 +151,18 @@
 				isLongPress: false,
 				painterSrc: '',
 				showzhidao: false,
-				imgs:'https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/fs/20250416/1744811256845.png'
+				imgPath:this.$store.state.imgpath,
+				imgs:this.$store.state.imgpath+'/app/image/logo.png',
 			}
 		},
+		// computed: {
+		//     imgPath() {
+		//       return this.$store.state.imgpath
+		//     }
+		//   },
 		onLoad() {},
 		mounted() {
+			
 			this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
 
 		},
@@ -164,10 +171,10 @@
 				this.parentMethod();
 				 this.$emit('trigger-share', {
 					 title: this.info.courseName+this.info.title,
-					 path: "/pages_course/viedo",
+					 path: "pages_course/videovip",
 					 onshow:true,
-					 params: { companyId: this.user.companyId, companyUserId: this.user.userId,
-					 courseId:this.info.courseId,videoId:this.info.courseId },
+					 params: { companyId: this.user.companyId, companyUserId: this.user.userId,id:this.info.id,
+					 courseId:this.info.courseId,videoId:this.info.videoId,periodId:this.info.periodId},
 					 img:this.info.thumbnail||this.imgs
 				   });
 			},
@@ -301,7 +308,9 @@
 					videoId: this.info.videoId,
 					imgUrl:this.info.thumbnail,
 					title:this.info.title,
-					duration:this.info.duration
+					duration:this.info.duration,
+					periodId:this.info.periodId,
+					id:this.info.id
 				}).then(res => {
 					if (res.code == 200) {
 						this.codeLink = res.posterImage
@@ -352,6 +361,8 @@
 					courseId: this.info.courseId,
 					time: this.time,
 					videoId: this.info.videoId,
+					periodId:this.info.periodId,
+					id:this.info.id
 				}
 				sharecourselink(params).then(res => {
 					if (res.code == 200) {
@@ -394,6 +405,8 @@
 					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,
 				}
@@ -401,9 +414,9 @@
 					if (res.code == 200) {
 						this.copylink = res.url
 						// 强制使用 HTTPS
-						  if (this.copylink.startsWith('http://')) {
-							this.copylink = this.copylink.replace('http://', 'https://');
-						  }
+						 //  if (this.copylink.startsWith('http://')) {
+							// this.copylink = this.copylink.replace('http://', 'https://');
+						 //  }
 					} else {
 						uni.showToast({
 							icon: 'none',
@@ -422,6 +435,7 @@
 					fileId: this.info.fileId,
 					courseName: this.info.courseName,
 					videoId:this.info.videoId,
+					
 				}
 				uni.navigateTo({
 					url: '/pages/courseManage/statistics?info=' + JSON.stringify(info)
@@ -498,7 +512,7 @@
 		 /* #endif */
 		 
 		/* #ifdef H5 */
-		padding-bottom: 60px;
+		padding-bottom: 100px;
 		 /* #endif */
 		&-item {
 			padding: 0 10px;

+ 8 - 3
components/dropdownPanel.vue

@@ -11,9 +11,9 @@
 					</view>
 					<template v-else>
 						<text style="width: max-content;">{{item.name}}</text>
-							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/manergevip/icon-pullup.png" mode="" class="icon-triangle"
+							<image :src="imgPath+'/app/manergevip/icon-pullup.png'" mode="" class="icon-triangle"
 								v-if="index === actNav"></image>
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/manergevip/icon-down.png" mode="" class="icon-triangle"
+						<image :src="imgPath+'/app/manergevip/icon-down.png'" mode="" class="icon-triangle"
 							v-else></image>
 					</template>
 				</view>
@@ -76,7 +76,7 @@
 				popupShow: false,
 				showMask: false,
 				actNav: null,
-				selIndex: [] //选中条件索引
+				selIndex: [] ,//选中条件索引
 			};
 		},
 		watch: {
@@ -89,6 +89,11 @@
 			// 	}
 			// }
 		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		  },
 		created() {
 			this.navData = this.filterData;
 			this.selIndex = this.defaultIndex;

+ 61 - 0
components/enterpriseimg.vue

@@ -0,0 +1,61 @@
+<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 :style="{marginTop: `calc(${statusBarHeight}px + 88rpx)`}">
+			<image :src="enterpriseimg"
+			 mode="widthFix" class="w100 pb120"></image>
+		</view>
+	</view>
+</template>
+
+<script>
+	import{getenterprise} from '@/api/courseManage.js'
+	export default {
+		// name:"enterpriseimg",
+		data() {
+			return {
+				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)
+				})
+			},
+		}
+		
+	}
+</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;
+	}
+}
+</style>

+ 29 - 33
components/liveCourse.vue

@@ -5,17 +5,17 @@
 				<view :class="activeTab == 0 ? 'headnav-item headnav-active':'headnav-item'" @click="handleNav(0)">
 					<view>直播计划</view>
 					<view class="headnav-num">3</view>
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/idle.png" mode="aspectFill"></image>
+					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/idle.png" mode="aspectFill"></image>
 				</view>
 				<view :class="activeTab == 1? 'headnav-item headnav-active':'headnav-item'" @click="handleNav(1)">
 					<view>今日直播</view>
 					<view class="headnav-num">3</view>
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/streaming.png" mode="aspectFill"></image>
+					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/streaming.png" mode="aspectFill"></image>
 				</view>
 				<view :class="activeTab == 2 ? 'headnav-item headnav-active':'headnav-item'" @click="handleNav(2)">
 					<view>往日直播</view>
 					<view class="headnav-num">3</view>
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/finished.png" mode="aspectFill"></image>
+					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/finished.png" mode="aspectFill"></image>
 				</view>
 			</view> -->
 			<!-- <view class="x-bc">
@@ -86,10 +86,6 @@
 						name: '训练营-营期',
 						value: 0,
 					},
-					// {
-					// 	name: '课程状态',
-					// 	value: 1,
-					// },
 				],
 				contentH: 0,
 				activeTab: 1,
@@ -144,7 +140,8 @@
 				old: {
 					scrollTop: 0
 				},
-				shareConfig:''
+				shareConfig:'',
+				titleName:''
 			}
 		},
 		mounted() {
@@ -164,7 +161,6 @@
 			      // #endif
 			  },
 			scroll: function(e) {
-				// console.log(e)
 				this.old.scrollTop = e.detail.scrollTop
 			},
 			onChange(index) {
@@ -172,27 +168,30 @@
 			},
 			reset() {
 				this.courseId = ''
-				this.keyword=''
+				this.keyword =''
 				this.courseList=[]
 				this.getFsCourseList()
 			},
 			handleCourse(item,index) {
 				this.courserIndex = index
+				this.titleName=item.periodName
 				this.actid=item.periodId
 			},
 			confirm() {
 				this.courseId = this.actid
-				console.log(this.courseId)
+				this.filterData[0].name=this.titleName
+				console.log(this.filterData[0].name)
 				this.params.pageNum=1
-				this.getListData()
+				this.getListData('refresh')
 			},
 			searchKeyword(value){
 				this.courseList=[]
 				this.keyword = value
-				this.getFsCourseList()
+				this.params.pageNum=1
+				this.getFsCourseList('refresh')
 			},
 			searchKeywordlist(value){
-				this.dataList=[]
+				this.dataList = []
 				this.keywordlist = value
 				this.getListData()
 			},
@@ -204,7 +203,7 @@
 					uni.stopPullDownRefresh()
 					this.pageNum = 1;
 					this.getFsCourseList('refresh') //触底  不穿执行else
-					// 请求接口里面需要判断是不是最后一页   是最后一页 status赋值为‘loadmore’没有更多了
+					// 请求接口里面需要判断是不是最后一页 是最后一页 status赋值为‘loadmore’没有更多了
 					// 请求接口
 				}, 1000)
 			},
@@ -241,10 +240,8 @@
 						} else {
 							this.status = 'loadmore'
 						}
-						this.searchbar[0].name = this.courseList && this.courseList.length > 0 ? this.courseList[0]
-							.courseName : '训练营-营期'
-							console.log(this.courseId)
-						// this.mescroll.resetUpScroll()
+						this.courseId=this.courseList[0].periodId
+						this.filterData[0].name=this.courseList[0].periodName
 						this.getListInit()
 					} else {
 						uni.showToast({
@@ -267,7 +264,8 @@
 				this.params.pageNum = 1
 				this.getListData('refresh')
 			},
-			async getListData(type = 'refresh') {
+			async getListData(type) {
+				console.log(type)
 				uni.showLoading({
 					title: "加载中..."
 				})
@@ -348,7 +346,9 @@
 		color: #222;
 		display: flex;
 		flex-direction: column;
+		/* #ifdef MP-WEIXIN */
 		height: 100vh;
+		/* #endif */
 	}
 
 	.boxnav {
@@ -445,19 +445,15 @@
 			}
 		}
 	}
-
-	.coursebox {
-		position: relative;
-		overflow-y: auto;
-		box-sizing: border-box;
-	}
-
-	.courselist {
-		padding: 12px;
-		box-sizing: border-box;
-
-	}
-
+	// .coursebox {
+	// 	position: relative;
+	// 	overflow-y: auto;
+	// 	box-sizing: border-box;
+	// }
+	// .courselist {
+	// 	padding: 12px;
+	// 	box-sizing: border-box;
+	// }
 	.container-right {
 		flex: 1;
 		height: calc(100% - 80rpx);

+ 8 - 3
components/living.vue

@@ -5,17 +5,17 @@
 				<view :class="activeTab == 0 ? 'headnav-item headnav-active':'headnav-item'" @click="handleNav(0)">
 					<view>直播计划</view>
 					<view class="headnav-num">3</view>
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/idle.png" mode="aspectFill"></image>
+					<image :src="imgPath+'/app/images/idle.png'" mode="aspectFill"></image>
 				</view>
 				<view :class="activeTab == 1? 'headnav-item headnav-active':'headnav-item'" @click="handleNav(1)">
 					<view>今日直播</view>
 					<view class="headnav-num">3</view>
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/streaming.png" mode="aspectFill"></image>
+					<image :src="imgPath+'/app/images/streaming.png'" mode="aspectFill"></image>
 				</view>
 				<view :class="activeTab == 2 ? 'headnav-item headnav-active':'headnav-item'" @click="handleNav(2)">
 					<view>往日直播</view>
 					<view class="headnav-num">3</view>
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/finished.png" mode="aspectFill"></image>
+					<image :src="imgPath+'/app/images/finished.png'" mode="aspectFill"></image>
 				</view>
 			</view>
 			<view>
@@ -71,6 +71,11 @@
 			courseItem,
 			dropdownPanel
 		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		  },
 		data() {
 			return {
 				user: {},

+ 25 - 30
pages/user/wxuser.vue → components/newuser.vue

@@ -1,8 +1,7 @@
 <template>
-	<view>
+	<view  class="column">
 		<view class="top-content ">
 			<view class="status_bar" :style="{height: statusBarHeight+'px'}"></view>
-			<!-- 这里是状态栏 -->
 			<view class="top-title">我的</view>
 		</view>
 		<view class="user-cont" :style="{marginTop: `calc(${statusBarHeight}px + 88rpx)`}">
@@ -10,66 +9,75 @@
 				<view class="left">
 					<u-avatar :src="user.avatar" size="50"></u-avatar>
 					<view class="user" >
+						<view v-if="!usertoken" class="fs40 bold" @click="loginto" >
+							立即登录
+						</view>
 						<view class="username">{{user}}</view>
-						<!-- <view class="account">{{user.email}}</view> -->
 					</view>
 				</view>
 			</view>
+			
 			<view class="company" v-if="user!=null">
-				<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/icon_comp.png"></image>
+				<image :src="imgPath+'/app/images/icon_comp.png'"></image>
 				<view class="name">{{'暂无数据'}}</view>
 			</view>
 		</view>
 		<view class="p20">
 			<view class="menu-box" style="margin-top: -40rpx;">
 				<view class="title-box">
-					<image class="icon" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/manergevip/chang.png"></image>
+					<image class="icon" :src="imgPath+'/app/manergevip/chang.png'"></image>
 					<view class="title">常用功能</view>
 				</view>
 				<view class="line"></view>
 				<view class="menus">
 					<view class="menu-item" @click="navTo()">
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/menu_info.png"></image>
+						<image :src="imgPath+'/app/images/menu_info.png'"></image>
 						<view class="m-name">销售管理</view>
 					</view>
 			 	</view>
 			</view>
 		</view>
 		<view class="p20">
-			<view class="btn-box" >
+			<view class="btn-box" v-if="usertoken">
 				<view class="sub-btn" @click="this.show=!this.show">退出登录</view>
 			</view>
 		</view>
 		<u-modal :show="show" @confirm="showLogout" :title="title" :content='content' :showCancelButton="true"
 		@cancel='this.show=!this.show'></u-modal>
-		<tabbar :actindex="1"></tabbar>
 	</view>
 </template>
 
 <script>
-	import tabbar from '@/components/tabbar/tabbar.vue'
 	import { getwxuser } from '@/api/user.js'
 	export default {
-		components: {
-			tabbar
-		},
 		data() {
 			return {
 				statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
 				user:[],
 				show:false,
 				title:'提示',
-				content:'确认退出吗?'
+				content:'确认退出吗?',
+				usertoken:''
 			}
 		},
-		onShow() {
+		mounted() {
+			this.usertoken=uni.getStorageSync('AppToken_MYfby')
 			this.user=uni.getStorageSync('phoneNumber')
-			// this.getCompanyUsers()
 		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		  },
 		methods: {
+			loginto(){
+				uni.navigateTo({
+					url:'/pages/auth/wxlogin'
+				})
+			},
 			showLogout(){
-				uni.removeStorageSync('UserToken')
-				uni.removeStorageSync('userInfo')
+				uni.removeStorageSync('AppToken_MYfby')
+				// uni.removeStorageSync('AppToken_MYfby')
 				uni.navigateTo({
 					url:'/pages/auth/wxlogin'
 				})
@@ -86,17 +94,6 @@
 				}
 				
 			},
-			// getCompanyUsers(){
-			// 	var data = {
-			// 	};
-			// 	getwxuser(data).then(res => {
-			// 		if(res.code==200){
-			// 			this.user=res.user;
-			// 		}else{
-						
-			// 		}
-			// 	});
-			// },
 		}
 	}
 </script>
@@ -176,11 +173,9 @@
 	
 }
 .user-cont{
-	// box-shadow: 0px 0px 5px 2px rgba(0,0,0,0.05);
 	background: linear-gradient(to bottom, #dae9ff, #e1e1fd);
 	    border-radius: 0px 0px 30px 30px;
 	padding: 30rpx;
-	// background-color: #fff;
 	border-radius: 15rpx;
 	.user-box{
 		width: 100%;

+ 2 - 2
components/userUrgeCourse.vue

@@ -1,6 +1,6 @@
 <template>
 	<view>
-		<dropdownPanel :filterData='filterData' @confirm="confirmA" @reset="resetA" @onChange="onChangeA"
+		<!-- <dropdownPanel :filterData='filterData' @confirm="confirmA" @reset="resetA" @onChange="onChangeA"
 			style="flex: 1;">
 			<view class="p20 fs28 column flex-1 hb hidden" v-if="searchbarNav == 0">
 				<scroll-view scroll-y="true" class="hb" :refresher-enabled="isEnabledA"
@@ -28,7 +28,7 @@
 					<u-loadmore :status="statusC" />
 				</scroll-view>
 			</view>
-		</dropdownPanel>
+		</dropdownPanel> -->
 		<view>
 			<scroll-view scroll-y="true" class="hb" :refresher-enabled="isEnabled"
 				:refresher-triggered="triggered" refresher-background="rgba(0,0,0,0)"

+ 12 - 7
components/vipUserItem.vue

@@ -17,7 +17,7 @@
 								<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="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/copy_icon.png" mode="aspectFill"
+									<image class="list-item-copy" :src="imgPath+'/app/images/copy_icon.png'" mode="aspectFill"
 										@click="copyId(item.nickname)">
 									</image>
 								</view>
@@ -26,18 +26,18 @@
 								</view>
 							</view>
 						</view>
-						<image class="phone" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/manergevip/phone.png" mode="aspectFill"
+						<image class="phone" :src="imgPath+'/app/manergevip/phone.png'" mode="aspectFill"
 							v-if="!isShowSelectAll" @click="tophone(item.phone)" @click.passive.stop></image>
 					</view>
 					<view class="list-item-desc">
 						<view class="taglist  ">
-							<view><u-tag :text="item.companyUserNickName" 
+							<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">
+						<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>
@@ -51,11 +51,11 @@
 						 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">改标签</view>
+								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>
+								@click="openModel('disable',item)" v-if="item.status==1&&item.isRepeatFans!==1">禁用</view>
 							<view class="btn-box base-color-red base-bg-false bor-red"
-								@click="openModel('disabled',item)" v-if="item.status==0">取消禁用</view>
+								@click="openModel('disabled',item)" v-if="item.status==0&&item.isRepeatFans!==1">取消禁用</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>
@@ -107,6 +107,11 @@
 			}
 
 		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		  },
 		data() {
 			return {
 				checkList: [],

+ 6 - 1
main.js

@@ -13,12 +13,17 @@ import {setData} from './utils/common.js'
 Vue.prototype.setData = setData;
 import {formatSeconds}from './utils/tools.js'
 Vue.prototype.$formatSeconds = formatSeconds;
-
+import {isLoginCourse,isLoginCourseqw} from './utils/common.js'
+Vue.prototype.$isLoginCourse = isLoginCourse
+Vue.prototype.$isLoginCourseqw = isLoginCourseqw
+import store from './router/router.js' // 确保路径正确
+Vue.prototype.$store = store;
 //import router from '@/router/router.js'  
 //import {RouterMount} from 'uni-simple-router'
 
 App.mpType = 'app'
 const app = new Vue({
+	store,
     ...App
 })
 //RouterMount(app,router,'#app')

+ 1 - 1
manifest.json

@@ -109,7 +109,7 @@
     "quickapp" : {},
     /* 小程序特有相关 */
     "mp-weixin" : {
-        "appid" : "wxd70f99287830cb51",
+        "appid" : "wxb9b453d37c5fad45",
         "setting" : {
             "urlCheck" : true
         },

+ 21 - 9
pages.json

@@ -462,14 +462,6 @@
 				"navigationBarTitleText" : "",
 				"navigationStyle": "custom"
 			}
-		},
-		{
-			"path" : "pages/user/wxuser",
-			"style" : 
-			{
-				"navigationBarTitleText" : "",
-				"navigationStyle": "custom"
-			}
 		}
     ],
 	"subPackages": [
@@ -477,7 +469,17 @@
 			"root": "pages_course",
 			"pages": [
 				{
-					"path": "video",
+					"path": "videovip",//会员看课
+					"style": {
+						"navigationBarTitleText": "看课",
+						"navigationStyle": "custom",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
+				{
+					"path": "video",//企微看课
 					"style": {
 						"navigationBarTitleText": "看课",
 						"navigationStyle": "custom",
@@ -485,6 +487,16 @@
 							"titleNView": false
 						}
 					}
+				},
+				{
+					"path": "reward",
+					"style": {
+						"navigationBarTitleText": "奖励",
+						"navigationStyle": "custom",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
 				}
 			]
 		}

+ 21 - 6
pages/auth/login.vue

@@ -3,7 +3,7 @@
 		 <view class="content flex-1" >
 			 <view class="login pt14">
 				<view class="head">
-					 <image src="/static/logo.png" ></image>
+					 <image :src="imgPath+'/app/image/logo.png'" ></image>
 					 <p class="title">销售管理端</p>
 					 <p class="desc">客户沟通更智能</p>
 				</view>
@@ -19,7 +19,7 @@
 						 <!-- <text>密码</text> -->
 						 <view class="input-pwd">
 							 <input v-model="password" 
-							  placeholder="请输入密码" type="password" ></input>
+							  placeholder="请输入密码" password type="text"></input>
 						 </view>
 					 </view> 
 					 <view class="btns">
@@ -28,10 +28,7 @@
 				</view>
 			 </view>
 		 </view>
-		 <!-- <view class="footer" >
-			 <p>版权所有 @2024</p>
-		 </view> -->
-		 
+		 <view class="footer-tips">重庆云联融智提供技术支持</view>
 	</view>
 </template>
 
@@ -45,6 +42,15 @@ export default {
 			password:"",
 		}
 	},
+	computed: {
+	    imgPath() {
+	      // 处理空值,返回默认路径或空字符串
+	      // if (!this.$store.state.imgpath) {
+	      //   return '' // 本地默认图
+	      // }
+	      return this.$store.state.imgpath
+	    }
+	  },
 	onLoad(option) {
 	},
 	mounted() {
@@ -65,6 +71,7 @@ export default {
 		// 		uni.hideLoading();
 		// 	}
 		// })
+		console.log(this.$store.state.imgpath+'/app/images/card_icon.png')
 	},
 	methods: {
 	    login(){
@@ -126,6 +133,14 @@ export default {
 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;

+ 7 - 4
pages/auth/wxlogin.vue

@@ -5,7 +5,7 @@
       <view class="force-login__content y-f">
         <view class="logo">
         	<view class="logo-img">
-        		<image  src="/static/logo.png"></image>
+        		<image :src="imgPath+'/app/image/logo.png'"></image>
 				<!-- <image  src="https://rk-hw079058881.obs.cn-north-9.myhuaweicloud.com/fs/20250424/1745461007445.png"></image> -->
         	</view>
         	<view class="title">壹道正气</view>
@@ -53,6 +53,9 @@ export default {
 		}
 	},
 	computed: {
+	    imgPath() {
+	      return this.$store.state.imgpath
+	    }
 	},
 	onLoad(option) {
 		this.companyId=option.companyId
@@ -114,7 +117,7 @@ export default {
 		getWxCode() {
 			//在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头; 
 			//http://shequ.natapp1.cc/#/pages/index/index?deviceId=8
-			var appId="wxd70f99287830cb51";
+			var appId="wxb9b453d37c5fad45";
 			var url="https://api.zxfh.cdwjyyh.com";
 			window.location.href ='https://open.weixin.qq.com/connect/oauth2/authorize?appid='+appId+'&redirect_uri=' +encodeURIComponent(url+"/#/pages/auth/wxLogin") +'&response_type=code&scope=snsapi_userinfo&state=JeffreySu-954&connect_redirect=1#wechat_redirect';
 			//console.log('https://open.weixin.qq.com/connect/oauth2/authorize?appid='+appId+'&redirect_uri=' +encodeURIComponent("http://shequ.natapp1.cc/#/pages/index/index?deviceId="+this.deviceId) +'&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect')
@@ -189,7 +192,7 @@ export default {
 									title: "登录成功",
 								});
 								console.log(res);
-								uni.setStorageSync('UserToken',res.token);
+								uni.setStorageSync('AppToken_MYfby',res.token);
 								uni.setStorageSync('userInfo',JSON.stringify(res.user));
 								uni.hideLoading()
 								//that.getUserInfo()
@@ -271,7 +274,7 @@ export default {
 										icon:'none',
 										title: "登录成功",
 									});
-									uni.setStorageSync('UserToken',res.token);
+									uni.setStorageSync('AppToken_MYfby',res.token);
 									uni.setStorageSync('nickName',res.nickName);
 									uni.setStorageSync('phoneNumber',res.phoneNumber);
 									uni.hideLoading()

+ 31 - 15
pages/common/launch.vue

@@ -1,8 +1,8 @@
 <template>
 	<view class="content">
 		 <view class="loadding" v-if="loadding==true">
-		 	<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/fs/20250416/1744811256845.png"></image>
-		 	<text class="text">壹道正气</text>
+		 	<image :src="imgPath+'/app/image/logo.png'"></image>
+		 	<text class="text">{{name}}</text>
 		 </view>
 	</view>
 </template>
@@ -16,40 +16,56 @@
 				qwUserId: null,
 				currentPath: null,
 				baseUrl:uni.getStorageSync('requestPath')
-				
 			};
 		},
+		computed: {
+			imgPath() {
+			  return this.$store.state.imgpath
+			},
+			name() {
+			  return this.$store.state.logoname
+			},
+		  },
 		onShow() {
 			// this.getUserId();
 			this.navigatHandler();
 		},
 		methods: {
 			navigatHandler() {
+				// // #ifdef MP-WEIXIN
+				// uni.reLaunch({
+				// 	url: '/pages/auth/wxlogin',
+				// })
+				// // #endif
+				// #ifdef MP-WEIXIN
+				console.log('现在')
+				if(uni.getStorageSync('AppToken')){
+					uni.reLaunch({
+						url: '/pages/index/index',
+					})
+				}else{
+					uni.reLaunch({
+						url: '/pages/enterprise/enterprise',
+					})
+				}
+				
+				// #endif
+				// #ifdef H5
 				if (!this.utils.isLogin()) {
 					// #ifdef H5
 					uni.reLaunch({
 						url: '/pages/auth/login',
 					})
 					// #endif
-					// #ifdef MP-WEIXIN
-					uni.reLaunch({
-						url: '/pages/auth/wxlogin',
-					})
-					// #endif
+					
 				} else {
 					// #ifdef H5
 					uni.reLaunch({
 						url: '/pages/index/index',
 					})
 					// #endif
-					// #ifdef MP-WEIXIN
-					console.log('现在')
-					uni.reLaunch({
-						url: '/pages/enterprise/enterprise',
-					})
-					// #endif
-					
 				}
+				// #endif
 			},
 			getUserId() {
 				const urlParams = new URLSearchParams(window.location.search);

+ 8 - 2
pages/course/course.vue

@@ -10,7 +10,7 @@
 			<view class="sharePop x-ac">
 				<!--#ifdef MP-WEIXIN-->
 				<view class="sharePop-item y-f card-share">
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/card_icon.png"
+					<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>
@@ -47,12 +47,18 @@
 				withShareTicket: true, // 支持群聊分享带shareTicket
 				menus: ['shareAppMessage'] // 同时启用两种分享
 			})
+			console.log(this.$store.state.imgpath+'/app/images/card_icon.png')
 		},
+		computed: {
+			    imgPath() {
+			      return this.$store.state.imgpath
+			    }
+			  },
 		mounted() {},
 		onShareAppMessage() {
 			return {
 				title: this.childdata.title, // 分享卡片标题
-				path: this.childdata.path + "?course=" + this.childdata.params, // 目标页面路径
+				path: this.childdata.path + "?course=" + JSON.stringify(this.childdata.params), // 目标页面路径
 				// 携带参数:将当前页面的数据拼接到路径中
 				imageUrl: this.childdata.img, // 分享卡片封面图(可选)
 				success: (res) => {

+ 7 - 2
pages/courseManage/course/becomeSale.vue

@@ -1,6 +1,6 @@
 <template>
 	<view class="centerV hb base-bg-f">
-		<image src="/static/logo.png" mode="aspectFit" class="w400"></image>
+		<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">
@@ -29,7 +29,7 @@
 		<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="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/manergevip/becomeTrue.png" class="h400 w400"></image>
+				<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>
@@ -50,6 +50,11 @@
 				password:''
 			}
 		},
+		computed: {
+			imgPath() {
+			  return this.$store.state.imgpath
+			},
+		  },
 		onLoad(option) {
 			this.companyId = option.id
 		},

+ 7 - 13
pages/courseManage/course/becomeVip.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="centerV hb base-bg-f">
 		<view class="w100 centerV" v-if="isH5vip!=true">
-			<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/becomevip.png" class="h193 w193 mb40"></image>
+			<image :src="imgPath+'/app/image/becomevip.png'" class="h193 w193 mb40"></image>
 			<view class="bold">是否申请成为会员</view>
 			<view class="justify-center w100 mt40 mb40">
 				<view class="quxiao">取消</view>
@@ -11,7 +11,7 @@
 		<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="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/manergevip/becomeTrue.png" class="h400 w400"></image>
+				<image :src="imgPath+'/app/manergevip/becomeTrue.png'" class="h400 w400"></image>
 				<view class="bold fs50 center mt80">{{tips}}!</view>
 			</view>
 		</u-popup>
@@ -42,23 +42,17 @@
 				becomeuser:{}
 			}
 		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		  },
 		onLoad(option) {
 			if (option && option.user) {
 				// console.log('分享链接进入',option)
 				this.becomeuser = JSON.parse(option.user)
 				this.companyId = this.becomeuser.companyId
 				this.companyUserId = this.becomeuser.companyUserId
-				// console.log('分享链接进入',this.becomeuser)
-				// if(uni.getStorageSync("isH5vip")==true){
-				// 	this.becomeVipfun()
-				// }else{
-				// 	setTimeout(() => {
-				// 		this.getWechatCode()
-				// 		this.userId=this.user.userId
-				// 		console.log(this.userId)
-				// 	}, 200)
-				// }
-				
 			} else {
 				this.companyId = option.companyId
 				this.userId = option.userId

+ 6 - 1
pages/courseManage/manage/exprotList.vue

@@ -16,7 +16,7 @@
 						</view>
 						<view class="column align-center">
 							<text class="fs24 base-color-9">更换为</text>
-							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/jiantou.png" class="w60 h40"></image>
+							<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>
@@ -70,6 +70,11 @@
 		onShow() {
 			this.getexaminelist()
 		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		},
 		methods: {
 			getlist(item){
 				this.show=!this.show

+ 13 - 8
pages/courseManage/manage/manageDetail.vue

@@ -6,7 +6,7 @@
 				<view class="ml20">
 					<view class="justify-start align-center ">
 						<text class="fs32 bold mr8">{{grouplist.nickName}}</text>
-						<image class="w40 h40" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/copy_icon.png" @click="copyId" mode="aspectFill">
+						<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>
@@ -43,7 +43,7 @@
 			<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"
+						<u-search placeholder="请输入搜索营期" v-model="keywordC" :showAction="false" height="30px"
 							@search='getcompanyTagC'></u-search>
 					</view>
 					<view class="p20 fs28 column flex-1 scrolly">
@@ -53,9 +53,9 @@
 							:upper-threshold="100" :lower-threshold="100" @refresherabort="triggeredC = false"
 							@scrolltolower="reachBottomC">
 							<view v-for="(item,index) in courseOne" :key="item.index"
-								:class="courseid==item.courseId?'actNav':''" class="m10 p10 center"
-								style="border-bottom: 2rpx solid #eee;" @click="getCourseOne(item.courseId)">
-								{{item.courseName}}
+								: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" />
@@ -63,7 +63,7 @@
 				</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"
+						<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"
@@ -99,7 +99,7 @@
 								<view>{{item.courseName}}</view>
 								<view class="justify-start align-center base-color">ID
 									<image class="w40 h40" @click="copyCourseId(item.courseName)"
-										src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/copy_icon.png" mode="aspectFill">
+										:src="imgPath+'/app/images/copy_icon.png'" mode="aspectFill">
 								</view>
 							</view>
 							<view class="fs24 base-color-6 column">
@@ -233,7 +233,7 @@
 									{{courseCount.redPacketNum}}</text>个</view>
 						</view>
 						<view class="base-bg-f radius16 p20  mlr20 justify-start align-center">
-							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/redenvelope.png" class="w102 h102"></image>
+							<image :src="imgPath+'/app/images/redenvelope.png'" class="w102 h102"></image>
 							<view class="ml20">
 								<view class="mb12 bold">答题红包金额</view>
 								<view class="base-color">
@@ -370,6 +370,11 @@
 		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")

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

@@ -42,7 +42,7 @@
 						<view class="ml20" @click.passive.stop>
 							<view class="justify-start align-center">
 								<text class="fs28 bold">{{item.nickName}}</text>
-								<image class="w40 h40" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/copy_icon.png" 
+								<image class="w40 h40" :src="imgPath+'/app/images/copy_icon.png'" 
 								@click="copyId(item.nickName)" mode="aspectFill">
 							</view>
 							<view class="fs24 base-color-6">备注:{{item.remark}}</view>
@@ -97,7 +97,7 @@
 				<view class="ptb20"></view>
 			</scroll-view>
 		</view>
-		<!-- <image class="invite-member" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/invite-member-icon.png" mode="aspectFill" @click="vipInvite">
+		<!-- <image class="invite-member" :src="imgPath+'/app/images/invite-member-icon.png'" mode="aspectFill" @click="vipInvite">
 		</image> -->
 		<!-- 不要写在v-for里面 点击存到data里面-->
 		<view class="">
@@ -212,6 +212,11 @@
 			this.getredlist()
 			// this.getuserbalancelist()
 		},
+		computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		},
 		methods: {
 			showmoreA(data){
 				this.openData=data

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

@@ -67,7 +67,7 @@
 				<view class="bgf m20 p20 radius16" v-for="(item,index) in userlist" :key="index">
 					<view class="justify-between align-center">
 						<view class="justify-start align-center">
-							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/manergevip/book.png" class="w80 h80"></image>
+							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/manergevip/book.png" class="w80 h80"></image>
 							<view class="fs36 bold ml20">课程答题红包</view>
 							<view class="fs28 ml8 base-color-6">归属</view>
 						</view>
@@ -78,7 +78,7 @@
 						<view class="ml20">
 							<view class="justify-start align-center">
 								<text class="fs28 bold">{{item.nickName}}</text>
-								<image class="w40 h40" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/copy_icon.png" mode="aspectFill">
+								<image class="w40 h40" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/copy_icon.png" mode="aspectFill">
 							</view>
 							<view class="fs24 base-color-6">
 								<text>--</text>

+ 7 - 7
pages/courseManage/operation/index.vue

@@ -4,17 +4,17 @@
 			<view :class="activeTab == 0 ? 'headnav-item headnav-active':'headnav-item'" @click="handleNav(0)">
 				<view>直播计划</view>
 				<view class="headnav-num">3</view>
-				<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/idle.png" mode="aspectFill"></image>
+				<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/idle.png" mode="aspectFill"></image>
 			</view>
 			<view :class="activeTab == 1? 'headnav-item headnav-active':'headnav-item'" @click="handleNav(1)">
 				<view>今日直播</view>
 				<view class="headnav-num">3</view>
-				<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/streaming.png" mode="aspectFill"></image>
+				<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/streaming.png" mode="aspectFill"></image>
 			</view>
 			<view :class="activeTab == 2 ? 'headnav-item headnav-active':'headnav-item'" @click="handleNav(2)">
 				<view>往日直播</view>
 				<view class="headnav-num">3</view>
-				<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/finished.png" mode="aspectFill"></image>
+				<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/finished.png" mode="aspectFill"></image>
 			</view>
 		</view> -->
 		<view>
@@ -28,9 +28,9 @@
 							@scrolltolower="reachBottoms">
 							<view class="p20 fs28 column flex-1 scrolly">
 								<view v-for="(item,index) in courseOne" :key="item.index"
-									:class="courseid==item.courseId?'actNav':''" class="m10 p10 center"
-									style="border-bottom: 2rpx solid #eee;" @click="getCourseOne(item.courseId)">
-									{{item.courseName}}
+									:class="courseid==item.periodId?'actNav':''" class="m10 p10 center"
+									style="border-bottom: 2rpx solid #eee;" @click="getCourseOne(item.periodId)">
+									{{item.periodName}}
 								</view>
 							</view>
 							<u-loadmore :status="statusA" />
@@ -161,7 +161,7 @@
 										{{courselist.redPacketNum}}</text>个</view>
 							</view>
 							<view class="base-bg-f8 radius16 p20  mlr20 justify-start align-center">
-								<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/redenvelope.png" class="w102 h102"></image>
+								<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/redenvelope.png" class="w102 h102"></image>
 								<view class="ml20">
 									<view class="mb12 bold">答题红包金额</view>
 									<view class="base-color">

+ 7 - 7
pages/courseManage/statistics.vue

@@ -7,7 +7,7 @@
 					<view class="coursebox-name">
 						<text class="more-t">{{info.title}}-{{info.courseName}}</text>
 						<view class="btn_icon" @click="copyId">ID
-							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/copy_icon.png" mode="aspectFill"></image>
+							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/copy_icon.png" mode="aspectFill"></image>
 						</view>
 					</view>
 					<view style="margin-top: 5px;">{{info.courseName}}</view>
@@ -87,7 +87,7 @@
 							</view>
 							<view class="redenvelope x-bc">
 								<view class="x-f">
-									<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/redenvelope.png" mode="aspectFill"></image>
+									<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/redenvelope.png" mode="aspectFill"></image>
 									<text>答题红包金额</text>
 								</view>
 								<view class="collapse-content-num"><text>{{courseCount.redPacketAmount || '0.00'}}</text>元
@@ -132,9 +132,9 @@
 						<u-tabs :list="list2" :current='currentType' :lineWidth="40" lineColor="#1677ff"
 							:activeStyle="activeStyle" :inactiveStyle="inactiveStyle" @click="clickTypeTab"></u-tabs>
 						<!-- <view class="participate-order x-f">
-							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/order_icon2.png" mode="aspectFill" v-if="searchTypeIndex == 3">
+							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/order_icon2.png" mode="aspectFill" v-if="searchTypeIndex == 3">
 							</image>
-							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/order_icon.png" mode="aspectFill" v-else></image>
+							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/order_icon.png" mode="aspectFill" v-else></image>
 							<picker @change="bindPickerChange" :value="searchTypeIndex" :range="typeArray">
 								{{typeoption[searchTypeIndex]}}
 							</picker>
@@ -151,14 +151,14 @@
 									<view class="list-item-head-l">
 										<view style="flex: 1;overflow: hidden;display: flex;">
 											<text class="list-item-name one-t">{{item.nickName}}</text>
-											<image class="list-item-copy" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/copy_icon.png"
+											<image class="list-item-copy" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/copy_icon.png"
 												mode="aspectFill"></image>
 										</view>
 										<view class="list-item-re">
 											注册时间:{{item.createTime?item.createTime.substring(0,10):'--'}}</view>
 									</view>
 								</view>
-								<image class="phone" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/phone.png" mode="aspectFill"></image>
+								<image class="phone" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/phone.png" mode="aspectFill"></image>
 							</view>
 							<view class="list-item-desc">
 								<view class="taglist">
@@ -302,7 +302,7 @@
 					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
 					textNoMore: "已经到底了",
 					empty: {
-						icon: 'https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/empty.png',
+						icon: 'https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/empty.png',
 						tip: '暂无数据'
 					}
 				},

+ 1 - 1
pages/courseManage/vip/ManageDetail.vue

@@ -71,7 +71,7 @@
 				</u-collapse-item>
 			</u-collapse>
 			<view class="justify-start align-center base-bg-f8 mlr30 radius12 plr20 ptb20">
-				<u-image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/manergevip/book.png" width="30" height="30"></u-image>
+				<u-image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/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">

+ 19 - 16
pages/customer/index.vue

@@ -20,9 +20,9 @@
 					<u-tabs :list="list2" :current='currentType' :lineWidth="40" lineColor="#1677ff"
 						:activeStyle="activeStyle" :inactiveStyle="inactiveStyle" @click="clickTypeTab"></u-tabs>
 					<view class="participate-order x-f">
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/order_icon2.png"
+						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/order_icon2.png"
 							mode="aspectFill" v-if="searchTypeIndex == 0 || searchTypeIndex == 2"></image>
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/order_icon.png"
+						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/order_icon.png"
 							mode="aspectFill" v-else></image>
 						<picker @change="bindPickerChange" :value="searchTypeIndex" :range="typeArray">
 							{{typeoption[searchTypeIndex]}}
@@ -155,7 +155,7 @@
 				<vipUserItem :viplist='userList' :isShowSelectAll="isShowSelectAll" @changeItem="changeItem"
 					@getuserId='singleChange' @getlableId='singleChangeLable' @change='changesinglevip'
 					@getuserIds='singleDelete' @pullDownRefresh="getfsuserListdata('refresh')"
-					@changelistname="getfsuserListdata('more')" @reachBottom="getfsuserListdata('more')"
+					@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" v-if="isShowSelectAll">
@@ -216,9 +216,9 @@
 			</view>
 		</u-popup>
 		<view class="invite-member" :style="{right:vipInviteshow?'-72rpx':'20rpx'}">
-			<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/invite-member-icon.png"
+			<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/invite-member-icon.png"
 				mode="aspectFill" @click="vipInvite" style="position: relative;" class="intimg"> </image>
-			<image src='https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/tc_close_icon.png'
+			<image src='https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/tc_close_icon.png'
 				class="falseimg" @click="showinimg"></image>
 		</view>
 		<!-- 邀请弹窗 -->
@@ -257,7 +257,7 @@
 									style="text-align: center;">
 									<!--#endif-->
 									<image
-										src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/card_icon.png"
+										src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/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>
@@ -269,14 +269,14 @@
 								<!--#ifdef H5-->
 								<view class="sharePop-item y-f " @click="buildimg" style="text-align: center;">
 									<image
-										src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/poster_icon.png"
+										src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/poster_icon.png"
 										mode="aspectFill"></image>
 									<view style="font-weight: bold;margin-bottom: 4px;">生成海报</view>
 									<view style="font-size: 12px;color: #888;">保存海报美观宣传</view>
 								</view>
 								<view class="sharePop-item y-f " @click="copyLink" style="text-align: center;">
 									<image
-										src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/link_icon.png"
+										src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/link_icon.png"
 										mode="aspectFill"></image>
 									<view style="font-weight: bold;margin-bottom: 4px;">复制链接</view>
 									<view style="font-size: 12px;color: #888; ">生成链接一键复制</view>
@@ -303,7 +303,7 @@
 			</view>
 			<view class="justify-around mb40">
 				<view class="column justify-center align-center" @click="downimg">
-					<image src='https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/downicon.png'
+					<image src='https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/downicon.png'
 						class="w80 h80"></image>
 					<view class="mt10">长按图片保存</view>
 				</view>
@@ -313,13 +313,13 @@
 		<u-overlay :show="showzhidao" @click="showzhidao = false" style="z-index: 9999;">
 			<view class="point-box">
 				<view class="imgshe">
-					<image src='https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/point.png'
+					<image src='https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/point.png'
 						class="w300 h300"></image>
 				</view>
 				<view class="column colorf fs32 xu-box fs40
 				align-center justify-center">
 					<view class="justify-center">点击右上角
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/wxmore.png"
+						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/wxmore.png"
 							class="w50 h50 mlr10"></image>
 					</view>
 					<view class="mt20">选择 “转发给朋友”</view>
@@ -394,8 +394,9 @@
 					fontSize: '14px'
 				},
 				searchTypeIndex: 0,
-				typeArray: ['连续缺课天数多到少', '连续缺课天数少到多', '按注册时间晚到早', '会员姓名0-9-A-Z'],
-				typeoption: ['连续缺课', '连续缺课', '注册时间', '会员姓名'],
+				typeArrays: ['连续缺课天数多到少', '连续缺课天数少到多', '按注册时间晚到早', '会员姓名0-9-A-Z'],
+				typeArray: ['按注册时间晚到早', '会员姓名0-9-A-Z'],
+				typeoption: [ '注册时间', '会员姓名'],
 				array: [{
 						value: '0',
 						name: '关联搜索',
@@ -528,7 +529,7 @@
 				zhanshitag: '',
 				copyLinks: '',
 				showzhidao: false,
-				imgs: 'https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/fs/20250416/1744811256845.png',
+				imgs: this.$store.state.imgpath+'/app/image/logo.png',
 				currentIsBlack: false,
 				tagpageNum: 1,
 				tagpageSize: 16,
@@ -572,7 +573,7 @@
 		// 这个是分享聊天
 		onShareAppMessage() {
 			return {
-				title: this.user.userName + '邀请您成为会员!',
+				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,
@@ -1040,7 +1041,9 @@
 						})
 						if (type == 'refresh') {
 							this.userList = dataList
-						} else {
+						}else if(type == 'more'){
+							this.userList = dataList
+						}else {
 							this.userList = [...this.userList, ...dataList]
 						}
 						if (res.data.isLastPage) {

+ 55 - 86
pages/enterprise/enterprise.vue

@@ -1,104 +1,69 @@
 <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 :style="{marginTop: `calc(${statusBarHeight}px + 88rpx)`}">
-			<view class="imgbox">
-				<image :src="enterpriseimg[0]" mode="widthFix"></image>
-				<view class="myVideobox">
-					<video id="myVideo" :src='enterpriseurl'
-					show-mute-btn='true' @fullscreenchange='changvideo'
-					vslide-gesture-in-fullscreen='true' :muted='muted' loop='true'
-					@error="videoErrorCallback"  enable-danmu  controls  autoplay="true"
-					class="videotop"></video>
-					<!-- <video class="myVideo" id="myVideo" :src="enterpriseurl"
-					                  @error="videoErrorCallback"   controls></video> -->
+		<enterpriseimgs v-if="actindex==0"></enterpriseimgs>
+		<newuser v-else></newuser>
+		<view class="tabbar align-center">
+			<view v-for="(item, index) in tabbarList" :key="index" @click="switchTabs(item)" class="tablist">
+				<view class="column align-center justify-center" >
+					<image :src="actindex==index?item.selectedIconPath:item.iconPath" class="w48 h48"></image>
+					<text class="fs24 base-textcol" :class="actindex==index?'actcolor':'morecolor'">{{item.Text}}</text>
 				</view>
 			</view>
-			<view class="imgbox column">
-				<image :src="enterpriseimg[1]" mode="widthFix"></image>
-				<image :src="enterpriseimg[2]" mode="widthFix"></image>
-				<image :src="enterpriseimg[3]" mode="widthFix"></image>
-			</view>
 		</view>
-		<tabbar :actindex="0"></tabbar>
 	</view>
 </template>
 
 <script>
-	// import{getenterprise} from '@/api/index.js'
-	import tabbar from '@/components/tabbar/tabbar.vue'
+	import{getenterprise} from '@/api/courseManage.js'
+	import enterpriseimgs from '@/components/enterpriseimg.vue'
+	import newuser from '@/components/newuser.vue'
 	export default {
 		components: {
-			tabbar
+			enterpriseimgs,
+			newuser
 		},
 		data() {
 			return {
 				statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
-				enterpriseurl:'https://hylj-1323137866.cos.ap-chongqing.myqcloud.com/userVideo/2025328/1743138661878.mp4',
-				enterpriseimg:[
-					'https://cos.his.cdwjyyh.com/fs/20250328/35a52839074940cb9ba7c1208140e3c7.png',
-					'https://cos.his.cdwjyyh.com/fs/20250328/39f2e5fc37da4240850313e69caa120c.png',
-					'https://cos.his.cdwjyyh.com/fs/20250328/628f59a6f3864541a0599886fae8e54e.png',
-					'https://cos.his.cdwjyyh.com/fs/20250328/f13448a48d3c491ab40b44e749983fed.png'
-				],
-				muted:true,
+				enterpriseimg:'',
+				actindex:0,
+				tabbarList : [{
+						iconPath: '/static/manageTabIcon/training.png',
+						selectedIconPath: '/static/manageTabIcon/training_on.png',
+						Text: '企业理念',
+						val:0
+					},
+					{
+						iconPath:  '/static/manageTabIcon/manage.png',
+						selectedIconPath:  '/static/manageTabIcon/manage_on.png',
+						Text: '我的',
+						val:1
+					},
+				]
 			}
 		},
 		//发送给朋友
 		onShareAppMessage(res) {
 			return {
-				title: "御君方互联网医院",
-				path: '/pages/index/index',
-				imageUrl: 'https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20230106/6b459adfb1004c1a96219bcdf07e337c.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				title: this.$store.state.logoname,
+				path: '/pages/enterprise/enterprise',
+				imageUrl: this.$store.state.imgpath+'/app/image/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 			}
 			
 		},
 		//分享到朋友圈
 		onShareTimeline(res) {
 			return {
-				title: "御君方互联网医院",
-				imageUrl: 'https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20230106/6b459adfb1004c1a96219bcdf07e337c.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				title: this.$store.state.logoname,
+				imageUrl: this.$store.state.imgpath+'/app/image/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 			}
 			
 		},
-		mounted() {
-			const imgs = []
-			// this.enterpriseimg= imgs.split(',')
-			// this.enterpriseurl='https://beiliyo-2025.obs.cn-north-4.myhuaweicloud.com/fs/20250115/1736925706514.mp4'
-			// this.getenterprise()
-		},
 		methods: {
-			changvideo(e){
-				if(e.target.fullScreen==true){
-					this.muted=false
-				}else{
-					this.muted=true
-				}
-				e.target.fullScreen
+			switchTabs(item) {
+				this.actindex=item.val
+				console.log(item)
 			},
-			getenterprise(){
-				getenterprise().then(res=>{
-					this.enterpriseurl=res.data.videoUrl
-					this.enterpriseimg=res.data.images
-					const url=this.enterpriseimg.split(',')
-					this.enterpriseimg=url
-					uni.setStorageSync('enterpriseurl',this.enterpriseurl)
-					console.log(res)
-				})
-			},
-			videoErrorCallback: function(e) {
-				
-			},
-			// navToTest() {
-			// 	 const course = {"companyId":100,"companyUserId":6806,"corpId":"ww5a88c4f879f204c5","courseId":63,"link":"1899022782092541952","linkType":3,"qwExternalId":9914983,"qwUserId":"18931","videoId":409}
-			// 	 uni.navigateTo({
-			// 		url: '/pages_course/video?course='+JSON.stringify(course)
-			// 	 })
-			// }
 		}
 	}
 </script>
@@ -122,21 +87,25 @@
 		background-color: #FFFFFF;
 	}
 }
-.imgbox{
-	position: relative;
-	image{
-		width: 100%;
-		display: block;
+.tabbar {
+		display: flex;
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		background-color: #fff;
+		z-index: 1000;
+		height: 120rpx;
+		padding-bottom: 20rpx;
+	}
+
+	.tablist {
+		width: 50%;
+	}
+	.morecolor{
+		color: #626468;
+	}
+	.actcolor {
+		color: #1773ff;
 	}
-}
-.videotop{
-	width: calc(100% - 60rpx);
-	height: 421rpx;
-	border-radius: 20rpx;
-	position: absolute;
-	bottom: 30rpx;
-	left: 50%;
-	z-index: 9;
-	transform: translateX(-50%);
-}
 </style>

+ 40 - 0
pages/index/h5.vue

@@ -0,0 +1,40 @@
+<template>
+	<view class="content">
+		 <web-view :src="url"></web-view>
+	</view>
+</template>
+
+<script>
+ 
+ export default {
+ 	data() {
+ 		return {
+			url:"",
+ 		}
+ 	},
+	onLoad(val) {
+		this.url=uni.getStorageSync('url');
+		console.log(this.url)
+	}
+ 	 
+ }
+ 
+ 
+</script>
+
+
+<style scoped lang="scss">
+page{
+	height: 100%;
+}
+.content{
+	width: 100%;
+	height: 100%;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	
+}
+ 
+
+</style>

+ 1 - 1
pages/index/index.vue

@@ -504,7 +504,7 @@
 					if (res.code == 200) {
 						this.ratelistState = res.data.every(item => item.value === 0);
 						this.getrateimg = res
-						// console.log('漏斗',allZero)
+						console.log('漏斗',this.getrateimg)
 					} else {
 						uni.showToast({
 							icon: 'none',

+ 4 - 4
pages/urgeCourse/urgeCourse.vue

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

+ 10 - 5
pages/user/about.vue

@@ -1,16 +1,16 @@
 <template>
 	<view class="content">
 		<view class="logo">
-			<image src="/static/logo.png"></image>
+			<image :src="imgPath+'/app/image/logo.png'"></image>
 			<p>企微聊天工具</p>
 		</view>
 		<view class="set-box">
-			<view class="item" @click="callPhone()">
+			<!-- <view class="item" @click="callPhone()">
 				<view class="left">
 					<text class="text">联系我们</text>
 				</view>
-				<image class="right" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/right_arrow.png" mode="aspectFill"></image>
-			</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">
@@ -30,7 +30,7 @@
  	data() {
  		return {
 			tel:undefined,
-			version:"1.0"
+			version:"1.0.0"
  		}
  	},
 	onLoad() {
@@ -38,6 +38,11 @@
 		// that.version = widgetinfo.version
 		
 	},
+	computed: {
+		    imgPath() {
+		      return this.$store.state.imgpath
+		    }
+		  },
  	methods: {
 		callPhone(){
 			uni.makePhoneCall({

+ 10 - 10
pages/user/editUser.vue

@@ -55,8 +55,8 @@
 	</view>
 	
 
-</template>
-
+</template>
+
 <script>
 	import {setPwd,setHeadImg,setUserInfo,getCompanyUser} from '@/api/user.js';
 	export default {
@@ -69,7 +69,7 @@
 				email:"",
 				sexPicker: ['男', '女','未知'],
 				sex: 0, // 性别
-				headImg: 'https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/detault_head.jpg', // 头像,
+				headImg: 'https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/detault_head.jpg', // 头像,
 				headImgUrl:'',
 			}
 		},
@@ -114,7 +114,7 @@
 					success: (res) => {
 						//this.headImg = res.tempFilePaths[0]
 						uni.uploadFile({
-							url: uni.getStorageSync('requestPath')+'/app/common/upload', //仅为示例,非真实的接口地址
+							url: uni.getStorageSync('requestPath')+'/companyapp/app/common/upload', //仅为示例,非真实的接口地址
 							filePath: res.tempFilePaths[0],
 							name: 'file',
 							formData: {
@@ -184,10 +184,10 @@
 			}
 			
 		}
-	}
-</script>
-
-
+	}
+</script>
+
+
 <style scoped lang="scss">
 	.content{
 		padding-top: 20rpx;
@@ -290,5 +290,5 @@
 			background: #115296;
 			border-radius: 44upx;
 		}
-	}
-</style>
+	}
+</style>

+ 18 - 18
pages/user/index.vue

@@ -16,53 +16,53 @@
 						</view>
 					</view>
 					<view class="right" >
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/right_arrow.png"></image>
+						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/right_arrow.png"></image>
 					</view>
 				</view>
 				<view class="company" v-if="user!=null">
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/icon_comp.png"></image>
+					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/icon_comp.png"></image>
 					<view class="name">{{user.createBy||'暂无数据'}}</view>
 				</view>
 			</view>
 			
 			<view class="menu-box" style="margin-top: -20rpx;">
 				<view class="title-box">
-					<image class="icon" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/manergevip/chang.png"></image>
+					<image class="icon" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/manergevip/chang.png"></image>
 					<view class="title">常用功能</view>
 				</view>
 				<view class="line"></view>
 				<view class="menus">
 					<view class="menu-item" @click="navTo('/pages/courseManage/manage/manageIndex')">
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/menu_info.png"></image>
+						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/menu_info.png"></image>
 						<view class="m-name">销售管理</view>
 					</view>
 					<view class="menu-item" @click="navTo('/pages/user/users/users')">
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/manergevip/qudao.png"></image>
+						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/manergevip/qudao.png"></image>
 						<view class="m-name">审核销售</view>
 					</view>
 					<view class="menu-item" @click="handleShare">
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/manergevip/share-manage.png"></image>
+						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/manergevip/share-manage.png"></image>
 						<view class="m-name">邀请销售</view>
 					</view>
 					<view class="menu-item" @click="navTo('/pages/courseManage/manage/lableSetup')">
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/changeLable.png"></image>
+						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/changeLable.png"></image>
 						<view class="m-name">标签设置</view>
 					</view>
 			 	</view>
 			</view>
 			<view class="menu-box">
 				<view class="title-box">
-					<image class="icon" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/manergevip/qita.png"></image>
+					<image class="icon" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/manergevip/qita.png"></image>
 					<view class="title">其它工具</view>
 				</view>
 				<view class="line"></view>
 				<view class="menus">
 					<view class="menu-item" @click="navTo('/pages/user/about')">
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/manergevip/about.png"></image>
+						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/manergevip/about.png"></image>
 						<view class="m-name">关于我们</view>
 					</view>
 					<view class="menu-item" @click="navTo('/pages/user/editUser')">
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/manergevip/setup.png"></image>
+						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/manergevip/setup.png"></image>
 						<view class="m-name">设置</view>
 					</view>
 				</view>
@@ -77,7 +77,7 @@
 			<view class="sharePop x-ac">
 				<!--#ifdef MP-WEIXIN-->
 				<view class="sharePop-item y-f" @click="shareimg">
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/card_icon.png" mode="aspectFill"
+					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/card_icon.png" mode="aspectFill"
 						style="width: 80rpx; height: 80rpx;margin-top: 20rpx;"></image>
 					<view style="font-weight: bold;margin-bottom: 4px;">生成卡片</view>
 					<view style="font-size: 12px;color: #888;">指导分享轻松转发</view>
@@ -85,13 +85,13 @@
 				</view>
 				<!--#endif-->
 				<!-- <view class="sharePop-item y-f" @click="buildimg">
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/poster_icon.png" mode="aspectFill"></image>
+					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/poster_icon.png" mode="aspectFill"></image>
 					<view style="font-weight: bold;margin-bottom: 4px;">生成海报</view>
 					<view style="font-size: 12px;color: #888;">保存海报美观宣传</view>
 				</view> -->
 				<!--#ifdef H5-->
 				<view class="sharePop-item y-f" @click="shareSale">
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/link_icon.png" mode="aspectFill"></image>
+					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/link_icon.png" mode="aspectFill"></image>
 					<view style="font-weight: bold;margin-bottom: 4px;">复制链接</view>
 					<view style="font-size: 12px;color: #888;">生成链接一键复制</view>
 				</view>
@@ -105,7 +105,7 @@
 			</view>
 			<view class="justify-around mtb40">
 				<view class="column justify-center align-center" @click="downimg">
-					<image src='https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/downicon.png' class="w80 h80"></image>
+					<image src='https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/downicon.png' class="w80 h80"></image>
 					<view class="mt10">长按图片保存</view>
 				</view>
 			</view>
@@ -124,12 +124,12 @@
 		<u-overlay :show="showzhidao" @click="showzhidao = false" style="z-index: 9999;">
 			<view class="point-box">
 				<view class="imgshe" >
-					<image src='https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/point.png' class="w300 h300"></image>
+					<image src='https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/point.png' class="w300 h300"></image>
 				</view>
 				<view class="column colorf fs32 xu-box fs40
 				align-center justify-center">
 					<view class="justify-center">点击右上角
-					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/wxmore.png"
+					<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/wxmore.png"
 					class="w50 h50 mlr10"></image>
 					</view>
 					<view class="mt20">选择 “转发给朋友”</view>
@@ -164,7 +164,7 @@
 				setImg:false,
 				codeLink:'',
 				showzhidao:false,
-				imgs:'https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/fs/20250416/1744811256845.png'
+				imgs:this.$store.state.imgpath+'/app/image/logo.png'
 			}
 		},
 		onShow() {
@@ -172,7 +172,7 @@
 		},
 		onShareAppMessage() {
 			return {
-				title: this.user.nickName+'邀请您成为销售', // 分享卡片标题
+				title: this.$store.state.logoname+'小程序的'+this.user.nickName+'邀请您成为销售', // 分享卡片标题
 				path: '/pages/courseManage/course/becomeSale?id='+this.user.companyId, // 目标页面路径
 				// 携带参数:将当前页面的数据拼接到路径中
 				imageUrl: this.user.avatar || this.imgs, // 分享卡片封面图(可选)

+ 3 - 3
pages/user/userInfo.vue

@@ -12,11 +12,11 @@
 						<text class="title">{{phonenumber}}</text>
 					</view>
 				</view>
-				<image   class="right"  src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/icon_edit.png" mode="aspectFill" @click="editInfo"></image>
+				<image   class="right"  src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/icon_edit.png" mode="aspectFill" @click="editInfo"></image>
 			</view>
 			<!-- 公司 -->
 			<view class="comp-info">
-				<image class="img" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/icon_comp_white.png" mode="aspectFill"></image>
+				<image class="img" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/icon_comp_white.png" mode="aspectFill"></image>
 				<text class="text">{{deptName}}</text>
 			</view>
 		</view>
@@ -57,7 +57,7 @@
 	export default {
 		data() {
 			return {
-				avatar:"https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/detault_head.jpg", 
+				avatar:"https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/detault_head.jpg", 
 				nickName:"",
 				deptName:"",
 				postNames:"",

+ 54 - 14
pages/user/users/becomeVIP.vue

@@ -1,9 +1,9 @@
 <template>
 	<view class="content hb column justify-center align-center bgf">
-		<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/becomevip.png" mode="widthFix"></image>
+		<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/becomevip.png" mode="widthFix"></image>
 		<view class="bold">成为会员,享受更多权益</view>
 		<!--#ifdef H5-->
-		<view class="sure" @click="registerCourse">{{isVip==1?'您已成为会员':'申请成为会员'}}</view>
+		<view class="sure" @click="registerCourse">{{isVip==1?'您已成为会员':viptext}}</view>
 		<!--#endif-->
 		<!--#ifdef MP-WEIXIN-->
 		<view class="btns">
@@ -11,9 +11,10 @@
 				class="author-btn"
 				open-type="getPhoneNumber"
 				@getphonenumber="phoneLogin"  >{{isVip==1?'您已成为会员':'申请成为会员'}}</button>
-			<button class="author-btn" v-if="isVip==1" @click="handleAgree()">{{isVip==1?'您已成为会员':'申请成为会员'}}</button>
+			<button class="author-btn" v-if="isVip==1 || isbecomevip==1" @click="handleAgree()">{{viptext}}</button>
 		</view>
 		<!--#endif-->
+		<view class="footer-tips">重庆云联融智提供技术支持</view>
 	</view>
 </template>
 
@@ -28,7 +29,9 @@
 				companyid:'',
 				companyUserId:'',
 				userInfo:{},
-				tagIds:[]
+				tagIds:[],
+				isbecomevip:0,
+				viptext:'申请成为会员'
 			}
 		},
 		onLoad(option) {
@@ -38,7 +41,13 @@
 				this.userInfo = {}
 			}
 			// this.userInfo=JSON.parse(uni.getStorageSync('userInfo')) || {};
-			let obj=uni.getStorageSync('AppToken');
+			//#ifdef MP-WEIXIN
+			let obj=uni.getStorageSync('AppToken_MYfby');
+			//#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
@@ -66,7 +75,12 @@
 			} else {
 				this.userInfo = {}
 			}
-			let obj=uni.getStorageSync('AppToken');
+			//#ifdef MP-WEIXIN
+			let obj=uni.getStorageSync('AppToken_MYfby');
+			//#endif
+			// #ifdef H5
+			let obj=uni.getStorageSync('TOKEN_KEY');
+			// #endif
 			this.isLogin = !!obj;
 			if(this.isLogin&&this.isVip!=1) {
 				this.registerCourse()
@@ -75,11 +89,20 @@
 		},
 		methods: {
 			handleAgree(){
-				uni.showToast({
-					title: '您已成为会员!',
-					icon: 'none',
-					duration: 2000,
-				})
+				if(this.isVip==1){
+					uni.showToast({
+						title: '您已成为会员!',
+						icon: 'none',
+						duration: 2000,
+					})
+				}else{
+					uni.showToast({
+						title: this.viptext,
+						icon: 'none',
+						duration: 2000,
+					})
+				}
+				
 			},
 			// 微信用户手机号登录
 			phoneLogin(e) {
@@ -112,7 +135,7 @@
 												icon:'none',
 												title: "登录成功",
 											});
-											uni.setStorageSync('AppToken', res.token);
+											uni.setStorageSync('AppToken_MYfby', res.token);
 											uni.setStorageSync('userInfo', JSON.stringify(res.user));
 											this.userInfo=res.user;
 											uni.hideLoading()
@@ -199,7 +222,7 @@
 				loginByMp({code:this.code}).then(res => {
 						uni.hideLoading();
 						if (res.code == 200) {
-							uni.setStorageSync('AppToken', res.token);
+							uni.setStorageSync('TOKEN_KEY', res.token);
 							uni.setStorageSync('userInfo', JSON.stringify(res.user));
 							this.userInfo= res.user
 							let beforLoginUrl = uni.getStorageSync('beforLoginPage');
@@ -241,11 +264,16 @@
 					registerCourses(data).then(res=>{
 						if(res.code == 200) {
 							this.isVip = 1
+							this.isbecomevip=1
+							this.viptext='您已成为会员'
 							uni.showToast({
-								title: '恭喜你!成为会员,请联系管理员!',
+								title: '您已成为会员,',
 								icon:'none'
 							})
 						} else {
+							this.isbecomevip=1
+							console.log(this.isbecomevip)
+							this.viptext=res.msg
 							uni.showToast({
 								icon:'none',
 								title: res.msg
@@ -263,6 +291,18 @@
 	}
 </script>
 <style lang="scss" scoped>
+	.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;

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

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

+ 1 - 1
pages/user/users/users.vue

@@ -94,7 +94,7 @@
 		data() {
 			return {
 				baseUrl:uni.getStorageSync('requestPath'),
-				avatar:"https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/images/default.png",
+				avatar:"https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/default.png",
 				CustomBar: 0,
 				hidden: true,
 				listCurID: '',

+ 171 - 0
pages_course/reward.vue

@@ -0,0 +1,171 @@
+<template>
+	<view class="answerPopup-box bg">
+		<!-- 正确 -->
+		<image class="tipimg" src="/static/images/course_answer_img.png"
+			mode="aspectFill"></image>
+		<view class="answerPopup-title">恭喜你,回答正确</view>
+		<view class="answerPopup-desc">您有一份奖励待领取哦</view>
+		<view class="answerPopup-btn" @click="handleReceive">领取</view>
+		<view class="footer-tips">重庆云联融智提供技术支持</view>
+	</view>
+</template>
+
+<script>
+	// import wx from 'jweixin-module';
+	import { initJssdk } from "@/utils/common.js"
+	export default {
+		data() {
+			return {
+				mchId:'',
+				packageInfo: ''
+			}
+		},
+		methods: {
+			handleReceive() {
+				this.packageInfo = uni.getStorageSync('receive_package') || ''
+				this.mchId = uni.getStorageSync('mchId') || ''
+				// this.initWXConfig(this.packageInfo)
+				this.$nextTick(()=>{
+					this.handleTest()
+				})
+			},
+			handleTest() {
+				const that = this
+				console.log(that.mchId)
+				console.log('wxb9b453d37c5fad45',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) => {
+				      // res.err_msg将在页面展示成功后返回应用时返回ok,并不代表付款成功
+				      console.log('success:', res);
+					  console.log(that.mchId)
+					  console.log('wxb9b453d37c5fad45',wx.getAccountInfoSync().miniProgram.appId)
+					  console.log(that.packageInfo)
+				    },
+				    fail: (res) => {
+				      console.log('fail:', res);
+					  console.log('11111-----')
+					  console.log(that.mchId)
+					  console.log('wxb9b453d37c5fad45',wx.getAccountInfoSync().miniProgram.appId)
+					  console.log(that.packageInfo)
+				    },
+				  });
+				} else {
+				  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>

+ 50 - 50
pages_course/video.vue

@@ -12,7 +12,8 @@
 			@error="videoErrorCallback" 
 			@play="getPlay"
 			@pause="getPause" 
-			@ended="getEnded" 
+			@ended="getEnded"
+			@waiting="getWaiting"
 			:title="courseInfo.title"
 			style="width: 100%;height: 420rpx;" 
 			:poster="poster"  
@@ -49,8 +50,8 @@
 						</view> -->
 						<view class="descbox-info-r expand" v-if="textHeight > 21">
 							<text @click="handleExpand">{{isExpand ? '收起简介' : '展开简介'}}</text>
-							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/course_arrow_up_icon.png" v-show="isExpand"></image>
-							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/course_arrow_down_icon.png" v-show="!isExpand"></image>
+							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/course_arrow_up_icon.png" v-show="isExpand"></image>
+							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/course_arrow_down_icon.png" v-show="!isExpand"></image>
 						</view>
 					</view>
 				</template>
@@ -58,14 +59,14 @@
 					<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="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/course_arrow_up_icon.png" v-show="isExpand"></image>
-						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/course_arrow_down_icon.png" v-show="!isExpand"></image>
+						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/course_arrow_up_icon.png" v-show="isExpand"></image>
+						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/course_arrow_down_icon.png" v-show="!isExpand"></image>
 					</view>
 				</view>
 			</view>
 			<!-- 无效或者已过期 -->
 			<view class="nocourse" v-if="msg">
-				<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/course_expiration_img.png" mode="widthFix"></image>
+				<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/course_expiration_img.png" mode="widthFix"></image>
 				<view>{{msg}}</view>
 			</view>
 			<!-- 问题 -->
@@ -94,7 +95,7 @@
 		</scroll-view>
 		<!-- 线路 -->
 		<view class="video-line" @click="openPop" v-if="isLogin&&isAddKf==1">
-			<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/changePlayer-icon.png"></image>
+			<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/changePlayer-icon.png"></image>
 			<text>线路{{lineIndex + 1 | numberToChinese}}</text>
 		</view>
 		<!-- 线路弹窗 -->
@@ -102,7 +103,7 @@
 			<view class="popupbox">
 				<view class="popupbox-head">
 					<text>线路选择</text>
-					<image class="close-icon" src="/static//image/tc_close_icon.png" mode="aspectFill" @click="close">
+					<image class="close-icon" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app//images/tc_close_icon.png" mode="aspectFill" @click="close">
 					</image>
 				</view>
 				<view class="popupbox-content">
@@ -115,14 +116,14 @@
 		<!-- 温馨提示弹窗 -->
 		<uni-popup ref="tipsPopup" type="center" :is-mask-click="false">
 			<view class="tipsPopup-mask">
-				<image class="red_envelope_top" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/red_envelope_img.png" mode="aspectFill"></image>
+				<image class="red_envelope_top" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/red_envelope_img.png" mode="aspectFill"></image>
 				<view class="tipsPopup">
-					<image class="tipsPopup-close" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/course_close_white_icon.png" mode="aspectFill"
+					<image class="tipsPopup-close" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/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="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/tips_title_img.png"
+								<image class="tipsPopup-head-title" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/tips_title_img.png"
 									mode="widthFix"></image>
 							</view>
 							<view class="tipsPopup-content">
@@ -141,15 +142,15 @@
 		<uni-popup ref="answerPopup" type="center" :show="answerPopup">
 			<view :class="errTitle == '恭喜你,回答正确' ? 'answerPopup-box bg':'answerPopup-box'">
 				<!-- 正确 -->
-				<image class="tipimg" v-if="errTitle == '恭喜你,回答正确'" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/course_answer_img.png"
+				<image class="tipimg" v-if="errTitle == '恭喜你,回答正确'" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/course_answer_img.png"
 					mode="aspectFill"></image>
 				<!-- 错误 -->
-				<image class="tipimg" v-else src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/course_answer_incorrectly_img.png" mode="aspectFill">
+				<image class="tipimg" v-else src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/course_answer_incorrectly_img.png" mode="aspectFill">
 				</image>
 				<view class="answerPopup-title">{{errTitle}}</view>
 				<view class="answerPopup-desc" v-html="errDesc"></view>
 				<!-- 选择奖励 -->
-				<view class="reward-list" v-if="errTitle == '恭喜你,回答正确'">
+				<!-- <view class="reward-list" v-if="errTitle == '恭喜你,回答正确'">
 					<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"
@@ -158,7 +159,7 @@
 							<view :style="{color: item.value == currentReward ? '#FF5C03':''}">{{item.name}}</view>
 						</label>
 					</radio-group>
-				</view>
+				</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>
@@ -175,14 +176,14 @@
 			<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="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/course_close_white_icon.png" mode="aspectFill"
+				<image class="kfqrcode-close" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/course_close_white_icon.png" mode="aspectFill"
 					@click="closeKFPop"></image>
 			</view>
 		</uni-popup>
 		<!-- footer -->
 		<view class="footer" v-if="videoId">
 			<view :class="isLogin&&isAddKf==1 ? 'footer-btn footer-btn-border':'footer-btn'" @click="submit">
-				<image class="footer-btn-img" v-show="isLogin&&isAddKf==1" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com:443/app/image/red_envelope_btnimg.png"
+				<image class="footer-btn-img" v-show="isLogin&&isAddKf==1" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/images/red_envelope_btnimg.png"
 					mode="aspectFill"></image>
 				<text>{{isLogin&&isAddKf==1 ? '提交答案领取奖励' : '立即学习'}}</text>
 			</view>
@@ -192,11 +193,13 @@
 				<view>阅读并同意<text style="color: #ff5c03;" @click.stop="goWeb(0)">《用户协议》</text>和<text
 						style="color: #ff5c03;" @click.stop="goWeb(1)">《隐私协议》</text></view>
 			</view> -->
+			<view class="footer-tips">重庆云联融智提供技术支持</view>
 		</view>
 	</view>
 </template>
 
 <script>
+	import {TOKEN_KEYQW} from '@/utils/common.js'
 	import { generateRandomString } from "@/utils/common.js"
 	import dayjs from 'dayjs';
 	import {
@@ -211,7 +214,7 @@
 		sendReward,
 		loginByMp,
 		getRealLink
-	} from "@/api/course.js"
+	} from "@/api/qwcourse.js"
 	export default {
 		data() {
 			return {
@@ -287,8 +290,8 @@
 					live: false /* 是否直播 */ ,
 					controls: true,
 					autoplay: false,
-					licenseUrl: 'https://license.vod2.myqcloud.com/license/v2/1323137866_1/v_cube.license', // license 地址,参考准备工作部分,在视立方控制台申请 license 后可获得 licenseUrl,
-					LicenseKey: 'bcc5bd9a14b798b48c52ff005a21d926',
+					licenseUrl: '', // license 地址,参考准备工作部分,在视立方控制台申请 license 后可获得 licenseUrl,
+					LicenseKey: '',
 					controlBar: {
 						volumePanel: false,
 						playbackRateMenuButton: false,
@@ -343,17 +346,17 @@
 		//发送给朋友
 		onShareAppMessage(res) {
 			return {
-				title: "御君方互联网医院",
+				title: "木易华康",
 				path: '/pages/index/index',
-				imageUrl: 'https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20230106/6b459adfb1004c1a96219bcdf07e337c.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				imageUrl: 'https://fs-1346741853.cos.ap-chengdu.myqcloud.com/fs/20250323/6189704f2e134b84ad9c9e7c9999f103.jpg' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 			}
 			
 		},
 		//分享到朋友圈
 		onShareTimeline(res) {
 			return {
-				title: "御君方互联网医院",
-				imageUrl: 'https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20230106/6b459adfb1004c1a96219bcdf07e337c.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				title: "木易华康",
+				imageUrl: 'https://fs-1346741853.cos.ap-chengdu.myqcloud.com/fs/20250323/6189704f2e134b84ad9c9e7c9999f103.jpg' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 			}
 			
 		},
@@ -388,7 +391,7 @@
 		onShow() {
 			this.tipsOpen = false
 			this.isExpand = true
-			// this.isLogin = this.$isLoginCourse()
+			// this.isLogin = this.$isLoginCourseqw()
 			this.uuId = generateRandomString(16)
 			if (this.videoId) {
 				this.getH5CourseByVideo()
@@ -473,7 +476,7 @@
 			// 当开始/继续播放时触发play事件
 			getPlay() {
 				this.errorCount = 0
-				this.judgeDuration()
+				// this.judgeDuration()
 			},
 			getPause() {
 				this.clearIntegral()
@@ -483,6 +486,9 @@
 				this.isEnded = true
 				this.getFinishCourseVideo()
 			},
+			getWaiting() {
+				this.getErrMsg('','waiting')
+			},
 			getIP() {
 				uni.request({
 					url: 'https://ipinfo.io/json', //仅为示例,并非真实接口地址。
@@ -679,7 +685,7 @@
 					return
 				}
 				// 登录
-				this.$isLoginCourse().then(
+				this.$isLoginCourseqw().then(
 					res => {
 						if(res){
 							if (this.isAddKf == 1) {
@@ -761,7 +767,7 @@
 							} else {
 								// 答题成功
 								this.errTitle = "恭喜你,回答正确"
-								this.errDesc = `请选择奖励`
+								this.errDesc = `您有一份奖励待领取哦~`
 								this.$refs.answerPopup.open("center")
 							}
 						} else {
@@ -789,24 +795,13 @@
 				if (this.errTitle == '恭喜你,回答正确') {
 					const param = {
 						...this.urlOption,
-						rewardType: Number(this.currentReward),
-						source: 2,
-						appId: 'wxa9be7360a11024a4'
+						appId: getApp().globalData.appId
 					}
 					sendReward(param).then(res => {
 						uni.showToast({
 							title: res.msg,
 							icon: 'none'
 						})
-						// if(res.code == 200) {
-						// 	//重构 发红包,后台通过OPENID发零钱到 账
-						// 	//this.initWXConfig(res.package)
-						// }else {
-						// 	uni.showToast({
-						// 		title: res.msg,
-						// 		icon: 'none'
-						// 	})
-						// }
 					})
 				}
 			},
@@ -932,13 +927,14 @@
 				}
 				getInternetTraffic(param)
 			},
-			getErrMsg(err) {
+			getErrMsg(err,type) {
 				let msgerr = {
+					errType: type || 'error',
 					videoUrl: this.videoUrl,
 					lineIndex: this.lineIndex,
 					errTime: new Date(),
 					ip: this.ip,
-					errMsg: err
+					errMsg: err || ''
 				}
 				getErrMsg({
 					msg: JSON.stringify(msgerr)
@@ -957,17 +953,15 @@
 									title: '处理中...',
 									icon: 'loading'
 							    });
-								console.log("code==",loginRes.code)
 								loginByMp({
 									code: loginRes.code,
 									encryptedData:infoRes.encryptedData,
 									iv:infoRes.iv,
-									appId: 'wxa9be7360a11024a4'
+									appId: getApp().globalData.appId
 								}).then(res=>{
 									 uni.hideLoading();
 									 if (res.code == 200) {
-										uni.setStorageSync('AppTokenmini_RTCourse', res.token);
-										uni.setStorageSync('userInfo', JSON.stringify(res.user));
+										uni.setStorageSync(TOKEN_KEYQW, res.token);
 										this.isLogin = true
 										this.getIsAddKf() 
 									 } else {
@@ -989,8 +983,6 @@
 				})
 			},
 			getLink() {
-				this.goLogin()
-				return
 				let that = this;
 				this.msg = ''
 				getRealLink({sortLink:this.sortLink}).then(res=>{
@@ -1002,7 +994,7 @@
 							this.getH5CourseVideoDetails()
 						}
 						if (this.videoId && this.isAddKf != 1) {
-							this.$isLoginCourse().then(
+							this.$isLoginCourseqw().then(
 								isLogin => {
 									this.isLogin = isLogin
 									if(isLogin){
@@ -1074,6 +1066,14 @@
 		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;
@@ -1674,7 +1674,7 @@
 			position: fixed;
 			bottom: 0;
 			padding: 32rpx;
-			padding-bottom: calc(var(--window-bottom) + 32rpx);
+			padding-bottom: calc(var(--window-bottom) + 14rpx);
 			box-sizing: border-box;
 			z-index: 9;
 

+ 1925 - 0
pages_course/videovip.vue

@@ -0,0 +1,1925 @@
+<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" 
+			: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"></video>
+		</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="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/course_arrow_up_icon.png" v-show="isExpand"></image>
+							<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/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="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/course_arrow_up_icon.png" v-show="isExpand"></image>
+						<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/course_arrow_down_icon.png" v-show="!isExpand"></image>
+					</view>
+				</view>
+			</view>
+			<!-- 无效或者已过期 -->
+			<view class="nocourse" v-if="msg">
+				<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/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">问答题</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)">
+						<view>
+							{{numberToLetter(idx)}}.
+						</view>
+						<view>{{option.name}}</view>
+					</view>
+				</view>
+			</view>
+		</scroll-view>
+		<!-- 线路 -->
+		<!-- <view class="video-line" @click="openPop" v-if="isLogin&&isAddKf==1">
+			<image src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/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="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/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>
+		<!-- 温馨提示弹窗 -->
+		<uni-popup ref="tipsPopup" type="center" :is-mask-click="false">
+			<view class="tipsPopup-mask">
+				<image class="red_envelope_top" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/red_envelope_img.png" mode="aspectFill"></image>
+				<view class="tipsPopup">
+					<image class="tipsPopup-close" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/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="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/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>
+		<!-- 答题弹窗 -->
+		<u-popup :show="answerPopup" mode="center" @close="closepop()" @open="open" closeOnClickOverlay>
+			<view :class="errTitle == '恭喜你,回答正确' ? 'answerPopup-box bg':'answerPopup-box'">
+				<!-- 正确 -->
+				<image class="tipimg" v-if="errTitle == '恭喜你,回答正确'" src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/course_answer_img.png"
+					mode="aspectFill"></image>
+				<!-- 错误 -->
+				<image class="tipimg" v-else src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/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="reward-list" v-if="errTitle == '恭喜你,回答正确'">
+					<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>
+		</u-popup>
+		<!-- 客服二维码弹窗 -->
+		<u-popup :show="kfPopup" mode="center" :mask-click="false" round='12'>
+			<view class="kfqrcode-box">
+				<view>请添加客服</view>
+				<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="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/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>
+		<view class="footer-tips">重庆云联融智提供技术支持</view>
+		<!-- footer -->
+		<view class="footer" v-if="videoId">
+			<view class="btns">
+				<button
+					class="author-btn"
+					open-type="getPhoneNumber"
+					@getphonenumber="phoneLogin"  >{{isLogin&&isAddKf==1 ? '提交答案领取奖励' : '立即学习'}}</button>
+				<button class="author-btn" v-if="isLogin" @click="submit">{{isLogin&&isAddKf==1 ?'提交答案领取奖励' : '立即学习'}}</button>
+			</view>
+			<!-- <view :class="isLogin&&isAddKf==1 ? 'footer-btn footer-btn-border':'footer-btn'" @click="submit">
+				<image class="footer-btn-img" v-show="isLogin&&isAddKf==1" 
+				src="https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/app/image/red_envelope_btnimg.png"
+					mode="aspectFill"></image>
+				<text>{{isLogin&&isAddKf==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>
+</template>
+
+<script>
+	import { generateRandomString} from "@/utils/common.js"
+	import { loginByMiniApp } from "@/api/course.js"
+	import dayjs from 'dayjs';
+	import {
+		getErrMsg,
+		getH5CourseByVideoId,
+		getH5CourseVideoDetails,
+		courseAnswer,
+		getFinishCourseVideo,
+		getIsAddKf,
+		getInternetTraffic,
+		getIntegralByH5Video,
+		sendReward,
+		getRealLink
+	} from "@/api/course.js"
+	export default {
+		data() {
+			return {
+				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: "",
+				isFullscreen: false,
+				isAddKf: 0,
+				lineIndex: 0,
+				// 是否展开
+				isExpand: true,
+				textHeight: 0, //文本高度
+				qwUserId: "",
+				qrcode: "",
+				corpId: "",
+				periodId:"",//营期id
+				companyUserId:"",//销售id
+				companyId:"",//公司id
+				courseId:"",//课程id
+				qrcodeMsg: "",
+				urlOption: {},
+				bufferRate: 0, // 缓冲时间
+				uuId: "",
+				isEnded: false,
+				// 是否允许拖动进度条
+				ip: null,
+				checked: true,
+				isFinish: 0, // 是否完课
+				interval: null,
+				intervalIntegral: null, // 积分定时
+				options: {
+					sources: [{
+						src: ""
+					}],
+					poster: "",
+					live: false /* 是否直播 */ ,
+					controls: true,
+					autoplay: false,
+					licenseUrl: 'https://license.vod2.myqcloud.com/license/v2/1323137866_1/v_cube.license', // license 地址,参考准备工作部分,在视立方控制台申请 license 后可获得 licenseUrl,
+					LicenseKey: 'bcc5bd9a14b798b48c52ff005a21d926',
+					controlBar: {
+						volumePanel: false,
+						playbackRateMenuButton: false,
+						QualitySwitcherMenuButton: false,
+						// progressControl: false
+					},
+					plugins: {
+						// ProgressMarker: false,
+						ContextMenu: {
+							statistic: false
+						}
+					},
+				},
+				// 错误请求次数
+				errorCount: 0,
+				answerPopup: false,
+				sortLink:"",
+				// 课程是否过期
+				isExpire: false,
+				menuButtonLeft: 281,
+				menuButtonH: 45,
+				timer: null,
+				flag: false,
+				msg:'',
+				poster:'',
+				userInfo:{},
+				timeid:'',
+				videocont:{},
+				timepop:false,
+				appToken:''
+			}
+		},
+		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
+					}
+				}
+			}
+		},
+		//发送给朋友
+		// onShareAppMessage(res) {
+		// 	return {
+		// 		title: "福本源",
+		// 		// path: '/pages/index/index',
+		// 		imageUrl: 'https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/fs/20250416/1744811256845.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+		// 	}
+			
+		// },
+		// //分享到朋友圈
+		// onShareTimeline(res) {
+		// 	return {
+		// 		title: "福本源",
+		// 		imageUrl: 'https://fbylive.obs.cn-southwest-2.myhuaweicloud.com/fs/20250416/1744811256845.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+		// 	}
+			
+		// },
+		onLoad(option) {
+			console.log(option);
+			this.code = option.code
+			if(uni.getStorageSync('userInfo')&&JSON.stringify(uni.getStorageSync('userInfo'))!='{}') {
+				this.userInfo = JSON.parse(uni.getStorageSync('userInfo'))
+			} else {
+				this.userInfo = {}
+			}
+			this.appToken=uni.getStorageSync('AppToken')
+			this.urlOption = option.course ? JSON.parse(option.course) : {}
+			this.videoId = this.urlOption.videoId
+			this.courseId = this.urlOption.courseId
+			this.periodId = this.urlOption.periodId
+			this.companyId = this.urlOption.companyId
+			this.companyUserId = this. urlOption.companyUserId
+			this.timeid=this.urlOption.id
+			// this.qwUserId = this.urlOption.qwUserId || ''
+			// this.corpId = this.urlOption.corpId || ''
+			// this.linkType = this.urlOption.linkType || 0
+			// if (this.code) {
+			// 	this.loginByMp()
+			// }
+			console.log(this.urlOption)
+			// this.sortLink = this.urlOption.link || ''
+			this.getMenuButton()
+		},
+		onShow() {
+			this.tipsOpen = false
+			this.isExpand = true
+			this.uuId = generateRandomString(16)
+			if (this.videoId) {
+				this.getH5CourseByVideo()
+			}
+			const AppToken=uni.getStorageSync('AppToken_MYfby')
+			console.log(AppToken)
+			if(AppToken){
+				this.isLogin=true
+				if(this.isAddKf == 1){
+					this.getH5CourseVideoDetails()
+				} else{
+					this.getIsAddKf()
+				}
+			}
+			// if(this.sortLink){
+			// 	this.getLink()
+			// } else {
+			// 	uni.showToast({
+			// 		title: 'sortLink is not found',
+			// 		icon: 'none'
+			// 	});
+			// }
+		},
+		mounted() {
+			// this.getIP()
+			this.getHeight()
+		},
+		onHide() {
+			// this.player = uni.createVideoContext('video-content-box');
+			if (this.player) {
+				this.player.pause()
+			}
+			// if (this.interval != null) {
+			// 	clearInterval(this.interval)
+			// 	this.interval = null
+			// }
+		},
+		onUnload() {
+			if (this.interval != null) {
+				clearInterval(this.interval)
+				this.interval = null
+			}
+			this.clearIntegral()
+		},
+		beforeDestroy() {
+			this.player = uni.createVideoContext('video-content-box');
+			if (this.player) {
+				this.player.stop()
+				this.player = null
+			}
+			if (this.interval != null) {
+				clearInterval(this.interval)
+				this.interval = null
+			}
+			this.clearIntegral()
+		},
+		methods: {
+			tosales(){
+				uni.switchTab({
+					url:"/pages/index/index"
+				})
+			},
+			closepop(){
+				this.answerPopup=false
+			},
+			open(){
+				
+			},
+			phoneLogin(e) {
+				var that=this;
+				uni.showLoading({
+					title:"处理中..."
+				})
+					if (e.mp.detail.errMsg == 'getPhoneNumber:ok') {
+						this.utils.getProvider()
+						.then(provider => {
+							if (!provider) {
+							  reject()
+							}
+							// uni登录
+							uni.login({
+								provider: provider,
+								success: async loginRes => {
+									console.log(loginRes)
+									let code = loginRes.code // 获取开发code
+									loginByMiniApp({
+									   encryptedData: e.mp.detail.encryptedData,
+									   iv: e.mp.detail.iv,
+									   code: code,
+									})
+									.then( res => {
+										if(res.code==200){
+											console.log(res)
+											uni.hideLoading();
+											uni.showToast({
+												icon:'none',
+												title: "登录成功",
+											});
+											uni.setStorageSync('AppToken_MYfby', res.token);
+											uni.setStorageSync('userInfo', JSON.stringify(res.user));
+											this.userInfo=res.user;
+											uni.hideLoading()
+											this.isLogin = true
+											setTimeout(()=>{
+												this.getIsAddKf()
+											},200)
+										}
+										else{
+											uni.hideLoading();
+											uni.showToast({
+												icon:'none',
+												title: "授权登录失败,请重新登录",
+											});
+										}
+									   
+									 })
+								}
+							})
+						})
+						.catch(err => {
+							uni.showToast({
+								icon:'none',
+								title: err,
+							});
+						})
+						 
+					} else {
+						uni.showToast({
+							title: '已拒绝授权',
+							icon: 'none',
+							duration: 2000,
+						})
+					}
+			},
+			getMenuButton(){
+				const menuButtonInfo = uni.getMenuButtonBoundingClientRect()
+				this.menuButtonLeft = menuButtonInfo.left
+				this.menuButtonH = menuButtonInfo.height
+			},
+			//播放时间更新事件方法
+			onTimeUpdate(e){
+				let currentTime = Math.round(e.detail.currentTime)
+				if (this.playDurationSeek > 0) {
+					this.playTime = this.playDurationSeek
+					this.throttle(() => this.changeTime(this), 1000, false)
+				} else {
+					// console.log(this.isFinish)
+					if (this.linkType != 1 && (currentTime - this.playTime > 3 || currentTime - this.playTime < -3)&&this.isFinish!=1) {
+						uni.showToast({
+							title: '不能快进哦',
+							icon: 'none',
+						});
+						currentTime = this.playTime
+						this.player.seek(this.playTime);
+					}
+					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.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 - 88rpx)`
+						})
+						.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.courseInfo = res.data
+							uni.setNavigationBarTitle({
+								title: this.courseInfo && this.courseInfo.title ? this.courseInfo.title : ''
+							});
+						}
+						this.getHeight()
+						this.getDescHeight()
+					},
+					rej => {
+						this.loading = false
+					}
+				).catch(() => {
+					this.loading = false
+				})
+			},
+			getH5CourseVideoDetails(type) {
+				uni.showLoading({
+					title: '加载中'
+				})
+				const data={
+					videoId:this.videoId,
+					fsUserId:this.userInfo.userId,
+					courseId:this.courseId,
+					companyUserId:this.companyUserId,
+					periodId:this.periodId,
+					id:this.timeid
+				}
+				getH5CourseVideoDetails(data).then(res => {
+						if (res.code == 200) {
+							this.config = res.data.courseConfig || {}
+							this.isFinish = res.data.isFinish || 0
+							this.duration = res.data.courseVideoDetails && 
+							res.data.courseVideoDetails.duration ? res.data.courseVideoDetails.duration : 0
+							this.playDuration = res.data.playDuration || 0
+							this.playDurationSeek = res.data.playDuration || 0
+							this.tipsTime = res.data.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
+							if (!this.player || type == 'error') {
+								uni.hideLoading();
+								this.lineIndex = this.config.defaultLine
+								this.videoUrl = res.data.courseVideoDetails.videoUrl
+								this.poster= res.data.courseVideoDetails && 
+								res.data.courseVideoDetails.thumbnail ? res.data.courseVideoDetails.thumbnail : ''
+								this.videocont=res.data
+								// this.options.sources = [{
+								// 	src: this.videoUrl
+								// }]
+								// this.options.poster = res.course && res.course.imgUrl ? res.course.imgUrl : ''
+								// this.initVideo()
+								this.playTime = this.playDuration >= this.duration ? 0 : this.playDuration
+								if(this.videocont.rang){
+									setTimeout(()=>{
+										this.player = uni.createVideoContext('video-content-box');
+										this.player.seek(this.playTime)
+										this.player.play();
+									},500);
+									this.timepop=false
+								}else{
+									this.timepop=true
+								}
+								
+							} else {
+								// let div = document.querySelector(".vjs-progress-control");
+								// if(div) {
+								// 	if (this.isFinish == 1 || this.isEnded || this.linkType == 1) {
+								// 		div.style.pointerEvents = "auto";
+								// 	} else {
+								// 		div.style.pointerEvents = "none"; //禁止所有事件
+								// 	}
+								// }
+								this.playTime = this.playTime > this.playDuration ? this.playTime : this.playDuration >= this.duration ? 0 : this.playDuration
+								this.player.seek(this.playTime)
+								this.player.play();
+							}
+							this.updateTime();
+							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) {
+					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.qwUserId) {
+									this.getIsAddKf()
+								} else {
+									uni.showToast({
+										title: '请联系管理员,注册为会员!',
+										icon: 'none'
+									})
+								}
+							} 
+						} else{
+							// this.goLogin()
+						}
+					},
+					rej => {}
+				);
+					
+			},
+			// 答题
+			courseAnswer() {
+				let time = this.playTime
+				if (this.isEnded) {
+					time = this.duration
+				} else {
+					if (time < this.playDuration && this.isFinish != 1) {
+						// 没完课且小于续播的时间
+						time = this.playDuration
+					}
+				}
+				if (Number(this.duration || 0) == 0 || time < this.duration - 60) {
+					uni.showToast({
+						title: "请先观看完整课程再答题哦~",
+						icon: "none"
+					})
+					return
+				}
+				if (this.quesList.some(item => !item.answer)) {
+					uni.showToast({
+						title: "请确认是否答完所有题目",
+						icon: "none"
+					})
+					return
+				}
+				const questions = this.quesList.map(obj => {
+					const {
+						questionOption,
+						...rest
+					} = obj;
+					return rest;
+				});
+				const param = {
+					...this.urlOption,
+					userId:this.userInfo.userId,
+					questions: questions,
+					videoId: this.videoId,
+					duration: this.playTime,
+				}
+				this.errTitle = ""
+				this.errDesc = ""
+				this.errQues = []
+				courseAnswer(param).then(res => {
+						if (res.code == 200) {
+							if (res.incorrectQuestions) {
+								// 答题失败
+								if (res.incorrectQuestions.length > 0) {
+									this.errQues = res.incorrectQuestions
+								}
+								this.remain = res.remain || 0
+								if (res.remain > 0) {
+									this.answerPopup=true
+									this.errTitle = "很遗憾答错了"
+									this.errDesc = `<span style="color:#FF5C03">还有${res.remain}次机会,继续加油</span>`
+									// this.$refs.answerPopup.open("center")
+									this.answerPopup=true
+								}
+							} else {
+								// 答题成功
+								this.errTitle = "恭喜你,回答正确"
+								// this.errDesc = `请选择奖励`
+								// this.$refs.answerPopup.open("center")
+								this.answerPopup=true
+							}
+						} 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()
+				// this.answerPopup=!this.answerPopup
+				if (this.errTitle == '恭喜你,回答正确') {
+					const param = {
+						...this.urlOption,
+						userId:this.userInfo.userId,
+						// rewardType: Number(this.currentReward),
+						source: 2, // 小程序
+						appId: 'wxb9b453d37c5fad45'
+					}
+					sendReward(param).then(res => {
+						if(res.code == 200) {
+							if(res.isNew&&res.isNew==1) {
+								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.showToast({
+								title: res.msg,
+								icon: 'none'
+							})
+						}
+						// if(res.code == 200) {
+						// 	//重构 发红包,后台通过OPENID发零钱到 账
+						// 	//this.initWXConfig(res.package)
+						// }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 {
+					// let div = document.querySelector(".vjs-progress-control");
+					// if(div) {
+					// 	if (this.isFinish == 1 || this.isEnded || this.linkType == 1) {
+					// 		div.style.pointerEvents = "auto";
+					// 	} else {
+					// 		div.style.pointerEvents = "none"; //禁止所有事件
+					// 	}
+					// }
+					this.lineIndex = index
+					this.videoUrl = this.lineList[index]
+					this.tipsOpen = false
+					this.playDurationSeek = this.playTime || 0
+					this.player = uni.createVideoContext('video-content-box');
+					setTimeout(function(){
+						that.player.seek(that.playDurationSeek)
+						that.player.play();
+					},500);
+					// this.player.src(this.lineList[index])
+					// this.player.one('loadedmetadata', () => {
+					// 	this.player.currentTime(this.playDurationSeek);
+					// 	this.player.play();
+					// });
+					this.close()
+				}
+
+			},
+			// 温馨提示
+			openTipsPop() {
+				this.$refs.tipsPopup.open()
+				this.tipsOpen = true
+				this.pause()
+			},
+			closeTipsPop() {
+				this.$refs.tipsPopup.close()
+			},
+			// 客服
+			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
+				}
+				// {videoId: this.videoId,qwUserId: this.qwUserId,corpId: this.corpId}
+				getIsAddKf(data).then(res => {
+						if (res.code == 200) {
+							if(res.data){
+								this.isAddKf = 1
+								this.getH5CourseVideoDetails()
+							}else{
+								uni.showToast({
+									title: '请联系管理员,注册为会员!',
+									icon: 'none'
+								});
+							}
+						} else {
+							this.isAddKf = 0
+							uni.showToast({
+								title: res.msg,
+								icon: 'none'
+							});
+						}
+					},
+					err => {}
+				);
+			},
+			closeKFPop() {
+				this.$refs.kfPopup.close()
+			},
+			getFinishCourseVideo() {
+				if (!this.playTime) return
+				// {videoId: this.videoId,duration:this.playTime}
+				const param = {
+					duration: this.playTime,
+					videoId:this.videoId,
+					userId:this.userInfo.userId,
+					companyUserId:this.companyUserId
+				}
+				getFinishCourseVideo(param)
+			},
+			// 每十分钟获得积分
+			getIntegralByH5Video() {
+				const param = {
+					duration: this.playTime,
+					...this.urlOption
+				}
+				getIntegralByH5Video(param).then(res => {
+					if (res.code == 200) {
+						uni.showToast({
+							title: "积分+10",
+							icon: "none"
+						})
+					}
+				})
+			},
+			progressChange(e) {
+				this.bufferRate = Math.ceil(e.detail.buffered)
+				// console.log('缓冲结果',this.bufferRate)
+				// console.log('缓冲',this.playTime,this.duration)
+			},
+			// 缓冲
+			getInternetTraffic() {
+				const playVideoTime = Math.ceil(this.playTime / this.duration * 100) // 播放百分比
+				// console.log('播放百分比',playVideoTime)
+				if(this.bufferRate == 0 || this.bufferRate < playVideoTime) {
+					this.bufferRate = playVideoTime
+					console.log(this.bufferRate)
+				}
+				if(this.bufferRate == 0 || Number(this.bufferRate.toFixed(2)) == 0) return
+				const param = {
+					uuId: dayjs().format('YYYYMMDD') + this.uuId,
+					duration: this.playTime,
+					bufferRate: Number(this.bufferRate.toFixed(2)),
+					userId:this.userId,
+					periodId:this.periodId,
+					...this.urlOption
+				}
+				getInternetTraffic(param)
+			},
+			getErrMsg(err) {
+				let msgerr = {
+					videoUrl: this.videoUrl,
+					lineIndex: this.lineIndex,
+					errTime: new Date(),
+					// ip: this.ip,
+					errMsg: err
+				}
+				getErrMsg({
+					msg: JSON.stringify(msgerr)
+				})
+			},
+			goLogin() {
+				
+			},
+			getLink() {
+				this.goLogin()
+				return
+				let that = this;
+				this.msg = ''
+				getRealLink({sortLink:this.sortLink}).then(res=>{
+					if(res.code == 200) {
+						this.isExpire = false
+						// 如果响应中包含真实链接,则跳转到真实链接
+						// window.location.href = res.realLink +"&sortLink="+this.sortLink+"&code="+this.code+"&time="+new Date().getTime()
+						if (this.isLogin && this.isAddKf == 1) {
+							this.getH5CourseVideoDetails()
+						}
+						if (this.videoId && this.isAddKf != 1) {
+							this.$isLoginCourse().then(
+								isLogin => {
+									this.isLogin = isLogin
+									if(isLogin){
+										this.getIsAddKf() 
+									} else {
+										this.goLogin()
+									}
+								},
+								rej => {}
+							);
+						}
+					} else {
+						this.isExpire = true
+						this.msg = '课程已过期或链接无效'
+						uni.showToast({
+							title: '课程已过期或链接无效',
+							icon: 'none'
+						});
+					}
+				}).catch(err=>{
+					this.isExpire = true
+					this.msg = '发生错误,请稍后再试'
+					uni.showToast({
+						title: '发生错误,请稍后再试',
+						icon: 'none'
+					});
+				})
+			},
+			/**
+			 * 节流原理:在一定时间内,只能触发一次
+			 *
+			 * @param {Function} func 要执行的回调函数
+			 * @param {Number} wait 延时的时间
+			 * @param {Boolean} immediate 是否立即执行
+			 * @return null
+			 */
+			throttle(func, wait = 500, immediate = true) {
+			    if (immediate) {
+			        if (!this.flag) {
+			            this.flag = true
+			            // 如果是立即执行,则在wait毫秒内开始时执行
+			            typeof func === 'function' && func()
+			            this.timer = setTimeout(() => {
+			                this.flag = false
+			            }, wait)
+			        }
+			    } else if (!this.flag) {
+			        this.flag = true
+			        // 如果是非立即执行,则在wait毫秒内的结束处执行
+			        this.timer = setTimeout(() => {
+			            this.flag = false
+			            typeof func === 'function' && func()
+			        }, wait)
+			    }
+			}
+		}
+	}
+</script>
+
+<style scoped>
+.full-width-popup {
+  width: 100%;
+}
+</style>
+<style lang="scss" scoped>
+	@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: 30rpx;
+			font-family: PingFang SC;
+			font-weight: 500;
+			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: 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;
+			}
+		}
+
+		.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: 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;
+	}
+	 
+	.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;
+		}
+	}
+	 
+</style>

+ 26 - 52
router/router.js

@@ -1,55 +1,29 @@
+// store/index.js
 import Vue from 'vue';
-import Router from 'uni-simple-router';
+import Vuex from 'vuex';
 
-Vue.use(Router)
-import utils from '../utils/common.js'
-//初始化
-const router = new Router({
-    routes:ROUTES //路由表
-});
-
-const filters = ['/pages/auth/login','/pages/common/launch']
+Vue.use(Vuex);
 
-//进入的路由   要出去的路由
-router.beforeEach((to, from, next) => {
-	console.log("路由进入")
-	console.log(to)
-	let index = filters.indexOf(to.path);
-	
-	//过滤
-	console.log(index)
-	if (index > -1) {
-		next();
-		return;
-	}
-	var data=utils.isLogin();
-	console.log(data)
-	if(utils.isLogin()){
-		console.log("ok")
-		next();
-	}
-	else{
-		// 条件编译判断平台,设置不同登录页路径
-		 let loginPage = '';
-		 // #ifdef H5
-		 loginPage = '/pages/auth/login';
-		 // #endif
-		 // #ifdef MP-WEIXIN
-		 loginPage = '/pages/auth/wxlogin';
-		 // #endif
-		next({path: loginPage});
-	}
-  //判断是否校验路由
-  // if (to.meta.isAure) {
-  //   let name = sessionStorage.getItem('username');
-  //   //有状态,并且存在sessionStorage,则next,否则返回登陆页面
-  //   if (name) {
-  //     next();
-  //   } else {
-  //     next({path: "/login",query:{redirect:to.name}});
-  //   }
-  // } else {
-  //   next();
-  // }
-});
-export default router;
+export default new Vuex.Store({
+  state: {
+    // imgpath: 'https://fbylive.obs.cn-southwest-2.myhuaweicloud.com',//福本源图片请求地址
+	Requestpath: 'https://userapp.fbylive.com',//福本源接口请求地址
+	logoname:'本源一身轻',
+	imgpath: 'https://zkzh-2024.oss-cn-beijing.aliyuncs.com',//中康图片请求地址
+	// Requestpath: 'https://userapp.zkhj6.com'//中康接口请求地址
+  },
+  mutations: {
+    setCount(state, value) {
+      state.count = value;
+    },
+    setUserInfo(state, info) {
+      state.userInfo = info;
+    }
+  },
+  actions: {
+    fetchUser({ commit }) {
+      // const res = await uni.request({ url: '/api/user' });
+      commit('setUserInfo', 'noe');
+    }
+  }
+});

BIN
static/images/course_answer_img.png


+ 1 - 1
uni_modules/lime-painter/readme.md

@@ -344,7 +344,7 @@ data() {
 ```
 ```js
 import parseHtml from '@/uni_modules/lime-painter/parser'
-const json = parseHtml(`<p><span>测试测试</span><img src="/static/logo.png"/></p>`)
+const json = parseHtml(`<p><span>测试测试</span><img :src="$store.state.imgpath+'/app/image/logo.png'"/></p>`)
 this.$refs.painter.render(json)
 ```
 

+ 24 - 1
utils/common.js

@@ -1,3 +1,4 @@
+export const TOKEN_KEYQW = 'AppTokenmini_MYCourse'; // token 信息
 import {
 	checkLogin
 } from '@/api/user'
@@ -169,6 +170,26 @@ export function generateRandomString(length) {
 	return result;
 }
 
+export function isLoginCourse() {
+	return new Promise((resolve, reject) => {
+		let token = uni.getStorageSync('AppToken_MYfby');
+		if (token==null||token==undefined||token=="" ) {
+			resolve(false);
+		} else {
+			resolve(true);
+		}
+	}); 
+}
+export function isLoginCourseqw() {
+	return new Promise((resolve, reject) => {
+		let token = uni.getStorageSync('TOKEN_KEYQW');
+		if (token==null||token==undefined||token=="" ) {
+			resolve(false);
+		} else {
+			resolve(true);
+		}
+	}); 
+}
 var logout = function() {
 	uni.getStorageSync('storeId', null);
 	uni.setStorageSync('AppToken', null);
@@ -186,5 +207,7 @@ module.exports = {
 	getDict: getDict,
 	logout: logout,
 	isLogin: isLogin,
-	generateRandomString
+	generateRandomString,
+	isLoginCourse:isLoginCourse,
+	isLoginCourseqw:isLoginCourseqw
 };

BIN
xiaohongqun_uni_app.zip