liujiaxin пре 1 дан
родитељ
комит
355cc2a078
91 измењених фајлова са 4152 додато и 11610 уклоњено
  1. 0 24
      api-js/account.js
  2. 0 33
      api-js/airClassroom.js
  3. 0 29
      api-js/bankCard.js
  4. 0 38
      api-js/certification.js
  5. 0 22
      api-js/medicationSurvey.js
  6. 0 28
      api-js/onlineLecture.js
  7. 0 19
      api-js/password.js
  8. 0 24
      api-js/points.js
  9. 0 19
      api-js/questionnaire.js
  10. 0 14
      api-js/serviceAgreement.js
  11. 0 24
      api-js/serviceOrder.js
  12. 0 19
      api-js/statistics.js
  13. 0 28
      api-js/withdraw.js
  14. 0 24
      api/activity.js
  15. 0 37
      api/address.js
  16. 0 6
      api/adv.js
  17. 0 28
      api/article.js
  18. 27 0
      api/audit.js
  19. 10 4
      api/common.js
  20. 0 37
      api/companyOrder.js
  21. 0 274
      api/companyUser.js
  22. 0 29
      api/coupon.js
  23. 0 9
      api/department.js
  24. 0 16
      api/disease.js
  25. 0 45
      api/doc.js
  26. 0 11
      api/doctorArticle.js
  27. 0 47
      api/doctorOrder.js
  28. 0 84
      api/health.js
  29. 0 84
      api/healthUser.js
  30. 0 22
      api/patient.js
  31. 0 22
      api/payment.js
  32. 0 21
      api/prescribe.js
  33. 0 66
      api/product.js
  34. 24 0
      api/speaker.js
  35. 0 14
      api/store.js
  36. 0 29
      api/storeAfterSales.js
  37. 0 92
      api/storeOrder.js
  38. 0 15
      api/storeProductPackage.js
  39. 46 0
      api/task.js
  40. 0 24
      api/test.js
  41. 21 66
      api/user.js
  42. 0 16
      api/userSign.js
  43. 5 5
      common/request.js
  44. 1 15
      components/StatisticsTable.vue
  45. 90 0
      components/tab-popup.vue
  46. 95 0
      main.js
  47. 16 2
      manifest.json
  48. 38 209
      pages.json
  49. 19 13
      pages/auth/changePassword.vue
  50. 166 95
      pages/auth/login.vue
  51. 9 0
      pages/auth/wxLogin.vue
  52. 2 2
      pages/common/launch.vue
  53. 0 79
      pages/home/content.vue
  54. 0 2649
      pages/home/index - 副本.vue
  55. 0 42
      pages/home/web.vue
  56. 0 198
      pages/task/index.vue
  57. 39 38
      pages/user/index.vue
  58. 0 9
      pages/user/test.vue
  59. 0 342
      pages_live/ConsultationDetails.vue
  60. 0 424
      pages_live/addForm.vue
  61. 0 736
      pages_live/addUser.vue
  62. 0 294
      pages_live/card.vue
  63. 0 105
      pages_live/healthConsulting.vue
  64. 0 512
      pages_live/healthfiles.vue
  65. 0 463
      pages_live/lecture.vue
  66. 0 463
      pages_live/lesson.vue
  67. 0 322
      pages_live/lessonDetail.vue
  68. 0 470
      pages_live/search.vue
  69. 0 22
      pages_speaker/createTask - 副本.vue
  70. 991 0
      pages_speaker/gradeApplication.vue
  71. 114 129
      pages_speaker/index.vue
  72. 442 0
      pages_speaker/lecturerDetail.vue
  73. 3 1
      pages_speaker/speakerInvitation.vue
  74. 0 686
      pages_task/airClassroom.vue
  75. 324 226
      pages_task/approvalCenter.vue
  76. 289 221
      pages_task/approvalTaskDetail.vue
  77. 497 460
      pages_task/completeTask.vue
  78. 246 41
      pages_task/createTask.vue
  79. 1 6
      pages_task/editSelectCustomer.vue
  80. 1 1
      pages_task/onlineLecture.vue
  81. 84 58
      pages_task/pointsSettings.vue
  82. 1 1
      pages_task/science.vue
  83. 66 86
      pages_task/selectCustomer.vue
  84. 166 139
      pages_task/statistics.vue
  85. 91 58
      pages_task/taskDetail.vue
  86. 206 41
      pages_task/xlTask.vue
  87. 0 503
      pages_user/points.vue
  88. BIN
      static/image/btn_add.png
  89. BIN
      static/image/btn_data.png
  90. BIN
      static/image/icon_camera1.png
  91. 22 1
      utils/common.js

+ 0 - 24
api-js/account.js

@@ -1,24 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-// 获取账号信息
-export function getAccountInfo() {
-	return request('/store/app/account/getInfo', null, 'GET');
-}
-
-// 更新账号信息
-export function updateAccountInfo(data) {
-	return request('/store/app/account/update', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 修改手机号
-export function changePhone(data) {
-	return request('/store/app/account/changePhone', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 发送验证码
-export function sendVerifyCode(data) {
-	return request('/store/app/account/sendVerifyCode', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-

+ 0 - 33
api-js/airClassroom.js

@@ -1,33 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-// 获取空中课堂任务列表
-export function getAirClassroomList(data) {
-	return request('/store/app/airClassroom/getList', data, 'GET');
-}
-
-// 获取任务详情
-export function getTaskDetail(data) {
-	return request('/store/app/airClassroom/getTaskDetail', data, 'GET');
-}
-
-// 提交任务
-export function submitTask(data) {
-	return request('/store/app/airClassroom/submitTask', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 获取项目分组选项
-export function getGroupOptions() {
-	return request('/store/app/airClassroom/getGroupOptions', null, 'GET');
-}
-
-// 获取项目标签选项
-export function getTagOptions() {
-	return request('/store/app/airClassroom/getTagOptions', null, 'GET');
-}
-
-// 上传文件
-export function uploadFile(data) {
-	return request('/store/app/airClassroom/uploadFile', data, 'POST', 'application/json;charset=UTF-8');
-}
-

+ 0 - 29
api-js/bankCard.js

@@ -1,29 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-// 获取银行卡列表
-export function getBankCardList() {
-	return request('/store/app/bankCard/getList', null, 'GET');
-}
-
-// 获取银行卡详情
-export function getBankCardDetail(data) {
-	return request('/store/app/bankCard/getDetail', data, 'GET');
-}
-
-// 添加银行卡
-export function addBankCard(data) {
-	return request('/store/app/bankCard/add', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 更新银行卡
-export function updateBankCard(data) {
-	return request('/store/app/bankCard/update', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 删除银行卡
-export function deleteBankCard(data) {
-	return request('/store/app/bankCard/delete', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-

+ 0 - 38
api-js/certification.js

@@ -1,38 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-// 获取认证信息
-export function getCertificationInfo() {
-	return request('/store/app/certification/getInfo', null, 'GET');
-}
-
-// 更新认证信息
-export function updateCertificationInfo(data) {
-	return request('/store/app/certification/update', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 提交认证审核
-export function submitCertification(data) {
-	return request('/store/app/certification/submit', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 获取认证状态
-export function getCertificationStatus() {
-	return request('/store/app/certification/status', null, 'GET');
-}
-
-// 上传认证图片
-export function uploadCertificationImage(data) {
-	return request('/store/app/certification/uploadImage', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 获取认证审核信息
-export function getCertificationReviewInfo() {
-	return request('/store/app/certification/getReviewInfo', null, 'GET');
-}
-
-// 重新提交认证
-export function resubmitCertification(data) {
-	return request('/store/app/certification/resubmit', data, 'POST', 'application/json;charset=UTF-8');
-}
-

+ 0 - 22
api-js/medicationSurvey.js

@@ -1,22 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-// 获取用药调研列表
-export function getMedicationSurveyList(data) {
-	return request('/store/app/medicationSurvey/getList', data, 'GET');
-}
-
-// 获取活动详情
-export function getActivityDetail(data) {
-	return request('/store/app/medicationSurvey/getActivityDetail', data, 'GET');
-}
-
-// 提交病例征集
-export function submitCaseCollection(data) {
-	return request('/store/app/medicationSurvey/submitCase', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 获取病例列表
-export function getCaseList(data) {
-	return request('/store/app/medicationSurvey/getCaseList', data, 'GET');
-}

+ 0 - 28
api-js/onlineLecture.js

@@ -1,28 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-// 获取在线讲座列表
-export function getOnlineLectureList(data) {
-	return request('/store/app/onlineLecture/getList', data, 'GET');
-}
-
-// 获取开播链接
-export function getBroadcastUrl(data) {
-	return request('/store/app/onlineLecture/getBroadcastUrl', data, 'GET');
-}
-
-// 进入微信小程序
-export function enterMiniProgram(data) {
-	return request('/store/app/onlineLecture/enterMiniProgram', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 开始直播
-export function startBroadcast(data) {
-	return request('/store/app/onlineLecture/startBroadcast', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 继续直播
-export function continueBroadcast(data) {
-	return request('/store/app/onlineLecture/continueBroadcast', data, 'POST', 'application/json;charset=UTF-8');
-}
-

+ 0 - 19
api-js/password.js

@@ -1,19 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-// 设置密码
-export function setPassword(data) {
-	return request('/store/app/password/set', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 修改密码
-export function changePassword(data) {
-	return request('/store/app/password/change', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 重置密码
-export function resetPassword(data) {
-	return request('/store/app/password/reset', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-

+ 0 - 24
api-js/points.js

@@ -1,24 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-// 获取积分信息
-export function getPointsInfo() {
-	return request('/store/app/points/getInfo', null, 'GET');
-}
-
-// 获取积分列表
-export function getPointsList(data) {
-	return request('/store/app/points/getList', data, 'GET');
-}
-
-// 获取积分明细
-export function getPointsDetail(data) {
-	return request('/store/app/points/getDetail', data, 'GET');
-}
-
-// 获取积分汇总信息(包含余额和待入账)
-export function getPointsSummary() {
-	return request('/store/app/points/getSummary', null, 'GET');
-}
-
-

+ 0 - 19
api-js/questionnaire.js

@@ -1,19 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-// 获取问卷调查列表
-export function getQuestionnaireList(data) {
-	return request('/store/app/questionnaire/getList', data, 'GET');
-}
-
-// 获取问卷调查详情
-export function getQuestionnaireDetail(data) {
-	return request('/store/app/questionnaire/getDetail', data, 'GET');
-}
-
-// 提交问卷调查
-export function submitQuestionnaire(data) {
-	return request('/store/app/questionnaire/submit', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-

+ 0 - 14
api-js/serviceAgreement.js

@@ -1,14 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-// 获取服务协议列表
-export function getServiceAgreementList() {
-	return request('/store/app/serviceAgreement/getList', null, 'GET');
-}
-
-// 获取服务协议详情
-export function getServiceAgreementDetail(data) {
-	return request('/store/app/serviceAgreement/getDetail', data, 'GET');
-}
-
-

+ 0 - 24
api-js/serviceOrder.js

@@ -1,24 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-// 获取服务单列表
-export function getServiceOrderList(data) {
-	return request('/store/app/serviceOrder/getList', data, 'GET');
-}
-
-// 获取服务单详情
-export function getServiceOrderDetail(data) {
-	return request('/store/app/serviceOrder/getDetail', data, 'GET');
-}
-
-// 确认服务单
-export function confirmServiceOrder(data) {
-	return request('/store/app/serviceOrder/confirm', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 取消服务单
-export function cancelServiceOrder(data) {
-	return request('/store/app/serviceOrder/cancel', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-

+ 0 - 19
api-js/statistics.js

@@ -1,19 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-// 获取统计数据
-export function getStatisticsData(data) {
-	return request('/store/app/statistics/getData', data, 'GET');
-}
-
-// 获取统计图表数据
-export function getStatisticsChart(data) {
-	return request('/store/app/statistics/getChart', data, 'GET');
-}
-
-// 导出统计数据
-export function exportStatistics(data) {
-	return request('/store/app/statistics/export', data, 'GET');
-}
-
-

+ 0 - 28
api-js/withdraw.js

@@ -1,28 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-// 获取提现信息
-export function getWithdrawInfo() {
-	return request('/store/app/withdraw/getInfo', null, 'GET');
-}
-
-// 提交提现申请
-export function submitWithdraw(data) {
-	return request('/store/app/withdraw/submit', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-// 获取提现记录
-export function getWithdrawList(data) {
-	return request('/store/app/withdraw/getList', data, 'GET');
-}
-
-// 获取提现详情
-export function getWithdrawDetail(data) {
-	return request('/store/app/withdraw/getDetail', data, 'GET');
-}
-
-// 获取银行卡列表(用于提现选择)
-export function getBankCardList() {
-	return request('/store/app/bankCard/getList', null, 'GET');
-}
-

+ 0 - 24
api/activity.js

@@ -1,24 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
- 
- 
- 
- export function getStoreActivity(data) {
- 	 return request('/store/app/activity/getStoreActivity',data,'GET');
- }
- export function getStoreActivityDetails(data) {
- 	 return request('/store/app/activity/getStoreActivityDetails',data,'GET');
- }
- export function share(activityId) {
- 	 return request('/store/app/activity/share?activityId='+activityId,null,'POST');
- }
-  
- 
- 
-
- 
- 
- 
- 
- 
- 

+ 0 - 37
api/address.js

@@ -1,37 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
- export function getCity() {
- 	 return request('/user/store/app/address/getCity',null,'GET');
- }
- export function getCitys() {
- 	 return request('/store/app/address/getCitys',null,'GET');
- }
- export function getAddressList() {
- 	 return request('/store/app/address/getAddressList',null,'GET');
- }
-
- export function getAddressById(data) {
- 	 return request('/store/app/address/getAddressById',data,'GET');
- } 
- 
- export function addAddress(data) {
- 	return request('/store/app/address/addAddress',data,'POST','application/json;charset=UTF-8');
- }
-
- export function editAddress(data) {
- 	return request('/store/app/address/editAddress',data,'POST','application/json;charset=UTF-8');
- }
- export function delAddress(data) {
- 	return request('/store/app/address/delAddress',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function parseAddress(data) {
- 	return request('/store/app/address/parseAddress',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function delAllAddress(data) {
- 	return request('/store/app/address/delAllAddress',data,'POST','application/json;charset=UTF-8');
- }
- 
- 

+ 0 - 6
api/adv.js

@@ -1,6 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
- export function getAdv(data) {
- 	 return request('/store/app/adv/getAdv',data,'GET');
- }
- 

+ 0 - 28
api/article.js

@@ -1,28 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
- 
- export function getArticleCate() {
- 	 return request('/store/app/article/getArticleCate',null,'GET');
- }
- 
- export function getArticleList(data) {
- 	 return request('/store/app/article/getArticleList',data,'GET');
- }
-
- export function getArticleByArticleId(data) {
- 	 return request('/store/app/article/getArticleByArticleId',data,'GET');
- } 
- 
- export function updateView(articleId) {
- 	 return request('/store/app/article/updateView?articleId='+articleId,null,'POST');
- } 
- 
- export function getArticleViewList(data) {
- 	 return request('/store/app/article/getArticleViewList',data,'GET');
- } 
- 
-
- 
- 
-  

+ 27 - 0
api/audit.js

@@ -0,0 +1,27 @@
+import Request from '../common/request.js';
+let request = new Request().http
+
+// 查询指定客服的待力核列表
+export function getPendingAuditList(data) {
+	 return request('/company/audit/cus/pending', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+// 执行审核
+export function doAudit(data) {
+	 return request('/company/audit/cus/doAudit', data, 'POST', 'application/json;charset=UTF-8');
+}
+
+// 获取审核流程记录
+export function getAuditFlows(data) {
+	 return request('/company/audit/cus/getAuditFlows', data, 'GET');
+}
+
+// 搜素发起人
+export function searchCompanyUser(data) {
+	 return request(`/company/companyUser/list?keywords=${data.keywords}&pageNum=${data.pageNum}&pageSize=${data.pageSize}`, data, 'GET', 'application/json;charset=UTF-8');
+}
+
+// 获取审核信息
+export function getTaskFinishAuditInfo(data) {
+	 return request('/task/info/getTaskFinishAuditInfo', data, 'GET');
+}

+ 10 - 4
api/common.js

@@ -1,10 +1,13 @@
 import Request from '../common/request.js';
 import Request from '../common/request.js';
 let request = new Request().http
 let request = new Request().http
+// 字典
+ export function dicts(type) {
+ 	 return request(`/system/dict/data/type/${type}`,null,'GET');
+ }
+
+
 
 
 
 
- export function uploadOSS(data) {
- 	 return request('/store/app/common/uploadOSS',data,'POST');
- }
  export function getTlsSig(data) {
  export function getTlsSig(data) {
  	 return request('/store/app/common/getTlsSig',data,'GET');
  	 return request('/store/app/common/getTlsSig',data,'GET');
  }
  }
@@ -32,4 +35,7 @@ let request = new Request().http
   	 return request('/store/app/common/getDictByKey',data,'GET');
   	 return request('/store/app/common/getDictByKey',data,'GET');
  } 
  } 
  
  
- 
+//  文件上传
+  export function upload(data) {
+ 	 return request('/system/file/upload',data,'GET');
+ }

+ 0 - 37
api/companyOrder.js

@@ -1,37 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
- 
- export function getSalesProducts(data) {
- 	 return request('/store/app/companyOrder/getSalesProducts',data,'GET');
- }
- 
- export function createSalesOrder(data) {
- 	 return request('/store/app/companyOrder/createSalesOrder',data,'POST','application/json;charset=UTF-8');
- }
- export function updateSalseOrderMoney(data) {
- 	 return request('/store/app/companyOrder/updateSalseOrderMoney',data,'GET' );
- }
- // 多店铺修改实付金额
- export function updateSaleOrderMoney(data) {
- 	 return request('/store/app/companyOrder/updateSaleOrderMoney',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function getSalesOrder(data) {
- 	 return request('/store/app/companyOrder/getSalesOrder',data,'GET' );
- }
- export function getSalesOrders(data) {
- 	 return request('/store/app/companyOrder/getSalesOrders',data,'GET' );
- }
- export function addUserCart(data) {
- 	 return request('/store/app/companyOrder/addUserCart',data,'GET' );
- }
- 
- export function editOrderMoney(data) {
- 	 return request('/store/app/companyOrder/editOrderMoney',data,'GET' );
- }
-
- 
- 
-  
- 
- 

+ 0 - 274
api/companyUser.js

@@ -1,274 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-export function login(data) {
-	return request('/store/app/companyUser/login', data, 'POST', 'application/json;charset=UTF-8');
-}
-
-export function getUserInfo(data) {
-	return request('/store/app/companyUser/getUserInfo', data, 'GET', 'application/json;charset=UTF-8');
-}
-export function getQrImg(data) {
-	return request('/store/app/companyUser/getQrImg', data, 'GET', 'application/json;charset=UTF-8');
-}
-
-export function getCompanyUserCard(data) {
-	return request('/store/app/companyUser/getCompanyUserCard', data, 'GET', 'application/json;charset=UTF-8');
-}
-
-//获取所有投诉类型
-export function getCategory(data) {
-	return request('/app/complaint/category', data, 'GET', 'application/json;charset=UTF-8');
-}
-//提交投诉
-export function submitComplaint(data) {
-	return request('/app/complaint/submitComplaint', data, 'POST', 'application/json;charset=UTF-8');
-}
-//获取投诉列表
-export function getComplaintList(data) {
-	return request('/app/complaint/list', data, 'POST', 'application/json;charset=UTF-8');
-}
-//修改i投诉
-export function updateComplaint(id, data) {
-	return request('/app/complaint/' + id, data, 'PUT', 'application/json;charset=UTF-8');
-}
-//投诉详情
-export function getComplaintById(data) {
-	return request('/app/complaint/' + data, data, 'GET', 'application/json;charset=UTF-8');
-}
-
-//管理
-export function getAdmin(data) {
-	return request('/app/food-record/admin/list', data, 'GET', 'application/json;charset=UTF-8');
-}
-//某日饮食列表
-export function getDayRecords(data) {
-	return request('/app/food-record/getDayRecords', data, 'GET', 'application/json;charset=UTF-8');
-}
-//饮食列表
-export function getMyRecordList(data) {
-	return request('/app/food-record/getMyRecordList', data, 'POST', 'application/json;charset=UTF-8');
-}
-//新增饮食
-export function addRecord(data) {
-	return request('/app/food-record/addRecord', data, 'POST', 'application/json;charset=UTF-8');
-}
-//修改饮食
-export function editRecord(data) {
-	return request('/app/food-record/editRecord', data, 'POST', 'application/json;charset=UTF-8');
-}
-//删除饮食
-export function deleteRecord(data) {
-	return request('/app/food-record/deleteRecord/' + data, data, 'POST', 'application/json;charset=UTF-8');
-}
-//饮食详情
-export function getRecordInfo(data) {
-	return request('/app/food-record/getRecordInfo/' + data, data, 'GET');
-}
-//待办列表
-export function getToDoList(data) {
-	return request('/app/todoItems/listPage', data, 'POST', 'application/json;charset=UTF-8');
-}
-//待办事项详情
-export function getFindById(data) {
-	return request('/app/todoItems/findById', data, 'POST', 'application/json;charset=UTF-8');
-}
-//更新详情
-export function updateById(data) {
-	return request('/app/todoItems/updateById', data, 'POST', 'application/json;charset=UTF-8');
-}
-//商品列表
-export function getServiceList(data) {
-	return request('/app/serviceGoods/listPage', data, 'POST', 'application/json;charset=UTF-8');
-}
-//商品详情
-export function getServiceById(data) {
-	return request('/app/serviceGoods/findById', data, 'POST', 'application/json;charset=UTF-8');
-}
-//新增商品
-export function saveService(data) {
-	return request('/app/serviceGoods/save', data, 'POST', 'application/json;charset=UTF-8');
-}
-//更新商品信息
-export function updateService(data) {
-	return request('/app/serviceGoods/updateById', data, 'POST', 'application/json;charset=UTF-8');
-}
-//删除商品
-export function deleteService(data) {
-	return request('/app/serviceGoods/deleteById', data, 'POST', 'application/json;charset=UTF-8');
-}
-//竞品列表
-export function getCompetitorList(data) {
-	return request('/app/competitorInfo/listPage', data, 'POST', 'application/json;charset=UTF-8');
-}
-//竞品详情
-export function getCompetitorById(data) {
-	return request('/app/competitorInfo/findById', data, 'POST', 'application/json;charset=UTF-8');
-}
-//竞品商品
-export function saveCompetitor(data) {
-	return request('/app/competitorInfo/save', data, 'POST', 'application/json;charset=UTF-8');
-}
-//更新竞品信息
-export function updateCompetitor(data) {
-	return request('/app/competitorInfo/updateById', data, 'POST', 'application/json;charset=UTF-8');
-}
-//删除竞品
-export function deleteCompetitor(data) {
-	return request('/app/competitorInfo/deleteById', data, 'POST', 'application/json;charset=UTF-8');
-}
-//新增体检报告
-export function addReport(data) {
-	return request('/app/medical/report/add', data, 'POST', 'application/json;charset=UTF-8');
-}
-//用户ID查询体检报告信息
-export function getByUserAndDate(data) {
-	return request('/app/medical/report/getByUserAndDate', data, 'GET', 'application/json;charset=UTF-8');
-}
-//用户查询体检报告列表
-export function getUserReportList(data) {
-	return request('/app/medical/report/listByUser/' + data, data, 'GET', 'application/json;charset=UTF-8');
-}
-//查询体检报告列表
-export function getReportList(data) {
-	return request('/app/medical/report/page', data, 'GET', 'application/json;charset=UTF-8');
-}
-//查询体检报告详情
-export function getReportById(data) {
-	return request('/app/medical/report/' + data, data, 'GET', 'application/json;charset=UTF-8');
-}
-//删除体检报告
-export function deleteReport(data) {
-	return request('/app/medical/report/' + data, data, 'DELETE', 'application/json;charset=UTF-8');
-}
-//更新体检报告
-export function updateReport(data) {
-	return request('/app/medical/report/update', data, 'PUT', 'application/json;charset=UTF-8');
-}
-//对比报告
-export function compareReport(data) {
-	return request('/app/medical/report/compareReport', data, 'POST', 'application/json;charset=UTF-8');
-}
-//获取指定报告的指标分类
-export function getAllCateByReportId(data) {
-	return request('/app/medical/result/getAllCateByReportId', data, 'GET', 'application/json;charset=UTF-8');
-}
-//新增指标
-export function addIndicator(data) {
-	return request('/app/medical/indicator/add', data, 'POST', 'application/json;charset=UTF-8');
-}
-//根据分类查询指标
-export function listByCategory(data) {
-	return request('/app/medical/indicator/listByCategory', data, 'GET', 'application/json;charset=UTF-8');
-}
-//查询所有启用的指标
-export function listEnabled(data) {
-	return request('/app/medical/indicator/listEnabled', data, 'GET', 'application/json;charset=UTF-8');
-}
-//过滤所有启用的指标
-export function listAllEnabledByReportId(data) {
-	return request('/app/medical/indicator/listAllEnabledByReportId', data, 'GET', 'application/json;charset=UTF-8');
-}
-//分页查询医疗指标列表
-export function getPage(data) {
-	return request('/app/medical/indicator/page', data, 'GET', 'application/json;charset=UTF-8');
-}
-//更新指标
-export function updateIndicator(data) {
-	return request('/app/medical/indicator/update', data, 'PUT', 'application/json;charset=UTF-8');
-}
-//根据ID查询指标详情
-export function getIndicatorById(data) {
-	return request('/app/medical/indicator/'+ data, data, 'GET', 'application/json;charset=UTF-8');
-}
-//删除指标
-export function deleteIndicator(data) {
-	return request('/app/medical/indicator/' + data, data, 'DELETE', 'application/json;charset=UTF-8');
-}
-
-//新增检查结果
-export function addResult(data) {
-	return request('/app/medical/result/add', data, 'POST', 'application/json;charset=UTF-8');
-}
-//批量新增检查结果
-export function addBatchAdd(data) {
-	return request('/app/medical/result/batchAdd', data, 'POST', 'application/json;charset=UTF-8');
-}
-//批量更新检查结果
-export function updateBatch(data) {
-	return request('/app/medical/result/updateBatch', data, 'POST', 'application/json;charset=UTF-8');
-}
-//根据指标ID查询所有结果
-export function listByIndicator(data) {
-	return request('/app/medical/result/listByIndicator/'+ data, data, 'GET');
-}
-//根据ID查询所有结果
-export function listByReport(data) {
-	return request('/app/medical/result/listByReport/'+ data, data, 'GET');
-}
-//分页查询报告指标检查结果列表
-export function getResult(data) {
-	return request('/app/medical/result/page', data, 'GET');
-}
-//更新检查结果
-export function updateResult(data) {
-	return request('/app/medical/result/update', data, 'PUT', 'application/json;charset=UTF-8');
-}
-//查询检查结果详情
-export function getResultById(data) {
-	return request('/app/medical/result/'+ data, data, 'GET');
-}
-//删除检查结果
-export function deleteResult(data) {
-	return request('/app/medical/result/'+ data, data, 'DELETE');
-}
-
-//查询所有单位
-export function getListAll(data) {
-	return request('/app/medical/unit/listAll', data, 'GET');
-}
-//新建附件
-export function addAttachment(data) {
-	return request('/app/attachment', data, 'POST', 'application/json;charset=UTF-8');
-}
-//查询附件
-export function getAttachment(data) {
-	return request('/app/attachment/list', data, 'GET', 'application/json;charset=UTF-8');
-}
-//新建体检报告
-export function addUrl(data) {
-	return request('/app/attachment/addList', data, 'POST', 'application/json;charset=UTF-8');
-}
-//删除附件
-export function deleteAttachment(data) {
-	return request('/app/attachment/'+data, data, 'DELETE');
-}
-
-//工作完成百分比
-export function queryCateStatis(data) {
-	return request('/app/todoItems/queryCateStatis', data, 'GET');
-}
-//扫码
-export function bindPromoter(data) {
- 	 return request('/store/app/bindPromoter',data,'POST','application/json;charset=UTF-8');
- }
- //日程查询
- export function getItinerary(data) {
- 	return request('/app/fs/itinerary/list', data, 'GET');
- }
- //日程新增
- export function addItinerary(data) {
- 	return request('/app/fs/itinerary/add', data, 'POST','application/json;charset=UTF-8');
- }
- //日程查询详情
- export function getItineraryInfo(data) {
- 	return request('/app/fs/itinerary/info', data, 'GET');
- }
- //更新日程
- export function updateItinerary(data) {
- 	return request('/app/fs/itinerary/update', data,'POST','application/json;charset=UTF-8');
- }
- //删除日程
- export function deleteItinerary(data) {
- 	return request('/app/fs/itinerary/delete', data, 'GET');
- }

+ 0 - 29
api/coupon.js

@@ -1,29 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
- export function getCouponIssueList(data) {
- 	 return request('/user/store/app/coupon/getCouponIssueList',data,'GET');
- }
- export function getCompanyCouponIssueList(data) {
- 	 return request('/store/app/coupon/getCompanyCouponIssueList',data,'GET');
- }
- export function getCouponIssueById(data) {
- 	 return request('/store/app/coupon/getCouponIssueById',data,'GET');
- }
- 
- 
- 
- export function receive(data) {
- 	return request('/store/app/coupon/receive',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function getMyCouponList(data) {
- 	 return request('/store/app/coupon/getMyCouponList',data,'GET');
- }
- export function getMyEnableCouponList(data) {
- 	 return request('/store/app/coupon/getMyEnableCouponList',data,'GET');
- }
- 
- 
-
- 

+ 0 - 9
api/department.js

@@ -1,9 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
- 
- export function getDepartmentList(data) {
- 	 return request('/store/app/department/getDepartmentList',data,'GET');
- }
- 
-  
-  

+ 0 - 16
api/disease.js

@@ -1,16 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
- 
- export function getDiseaseList(data) {
- 	 return request('/store/app/disease/getDiseaseList',data,'GET');
- }
- export function getDiseaseById(data) {
- 	 return request('/store/app/disease/getDiseaseById',data,'GET');
- }
- 
- 
- 
- 
-  
-  
-  

+ 0 - 45
api/doc.js

@@ -1,45 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
- 
- export function getMyDocList(data) {
- 	 return request('/store/app/doc/getMyDocList',data,'GET');
- }
- 
- export function getDocDetails(data) {
- 	 return request('/store/app/doc/getDocDetails',data,'GET');
- }
- 
- export function addDoc(data) {
- 	return request('/store/app/doc/addDoc',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function editDoc(data) {
- 	return request('/store/app/doc/editDoc',data,'POST','application/json;charset=UTF-8');
- }
- export function delDoc(data) {
- 	return request('/store/app/doc/delDoc',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function getMyDocRecordList(data) {
- 	 return request('/store/app/doc/getMyDocRecordList',data,'GET');
- }
- 
- export function getDocRecordReplyList(data) {
- 	 return request('/store/app/doc/getDocRecordReplyList',data,'GET');
- }
- 
- 
- export function addDocRecord(data) {
- 	return request('/store/app/doc/addDocRecord',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function getMyDocOrderList() {
- 	 return request('/store/app/doc/getMyDocOrderList',null,'GET');
- }
- 
- export function addDocOrder(data) {
- 	return request('/store/app/doc/addDocOrder',data,'POST','application/json;charset=UTF-8');
- }
- 
- 

+ 0 - 11
api/doctorArticle.js

@@ -1,11 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
- 
- export function getDoctorArticleList(data) {
- 	 return request('/store/app/doctorArticle/getDoctorArticleList',data,'GET');
- }
- export function getDoctorArticleById(data) {
- 	 return request('/store/app/doctorArticle/getDoctorArticleById',data,'GET');
- }
-  
-   

+ 0 - 47
api/doctorOrder.js

@@ -1,47 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
- 
- 
- 
- export function getDepartmentList(data) {
- 	 return request('/store/app/doctorOrder/getDepartmentList',data,'GET');
- } 
- 
- export function getDoctorList(data) {
- 	 return request('/store/app/doctorOrder/getDoctorList',data,'GET');
- } 
- 
- export function getDoctorCase(data) {
- 	 return request('/store/app/doctorOrder/getDoctorCase',data,'GET');
- } 
- 
- 
- export function getMyDoctorOrderList(data) {
- 	 return request('/store/app/doctorOrder/getMyDoctorOrderList',data,'GET');
- } 
- 
- export function getDoctorDetail(data) {
- 	 return request('/store/app/doctorOrder/getDoctorDetail',data,'GET');
- } 
- 
- export function getDoctorOrderDetail(data) {
- 	 return request('/store/app/doctorOrder/getDoctorOrderDetail',data,'GET');
- } 
- export function create(data) {
- 	 return request('/store/app/doctorOrder/create',data,'POST','application/json;charset=UTF-8');
- }
- export function pay(data) {
- 	 return request('/store/app/doctorOrder/pay',data,'POST','application/json;charset=UTF-8');
- }
- export function cancelOrder(data) {
- 	 return request('/store/app/doctorOrder/cancelOrder',data,'POST','application/json;charset=UTF-8');
- }
- export function pingOrder(data) {
- 	 return request('/store/app/doctorOrder/pingOrder',data,'POST','application/json;charset=UTF-8');
- }
- export function getImOrderDetail(data) {
- 	 return request('/store/app/doctorOrder/getImOrderDetail',data,'GET');
- } 
- 
- 

+ 0 - 84
api/health.js

@@ -1,84 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-//获取咨询人员列表
-export function getuserlist(data) {
-	return request('/store/app/common/getDicts', data, 'GET');
-}
-//提交咨询内容
-export function submitconsult(data) {
-	return request('/store/app/common/getDicts', data, 'GET');
-}
-//获取用户列表
-export function getInfoList(data) {
-	return request('/companyapp/app/fs/userinfo/list', data, 'GET');
-}
-
-//获取用户基本信息
-export function getInfo(data) {
-	return request('/companyapp/app/fs/userinfo/info', data, 'GET');
-}
-
-//添加用户基本信息
-export function addInfo(data) {
-	return request('/companyapp/app/fs/userinfo/add', data, 'POST','application/json;charset=UTF-8');
-}
-
-//修改用户基本信息
-export function updateInfo(data) {
-	return request('/companyapp/app/fs/userinfo/update', data, 'POST','application/json;charset=UTF-8');
-}
-//删除用户基本信息
-export function deleteInfo(data) {
-	return request('/companyapp/app/fs/userinfo/delete', data, 'GET','application/json;charset=UTF-8');
-}
-//获取会员分类
-export function getMember(data) {
-	return request('/companyapp/app/common/getDictByKey?key=user_member_classify', data, 'GET');
-}
-//主页信息
-export function homeInfo(data) {
-	return request('/companyapp/app/fs/health/profile/home/info', data, 'GET');
-}
-//健康档案主页信息
-export function getDoc(data) {
-	return request('/companyapp/app/fs/health/profile/info', data, 'GET');
-}
-//添加健康档案信息
-export function addDoc(data) {
-	return request('/companyapp/app/fs/health/profile/add', data, 'POST','application/json;charset=UTF-8');
-}
-
-//修改健康档案信息
-export function updateDoc(data) {
-	return request('/companyapp/app/fs/health/profile/update', data, 'POST','application/json;charset=UTF-8');
-}
-//删除健康档案信息
-export function deleteDoc(data) {
-	return request('/companyapp/app/fs/health/profile/delete', data, 'GET','application/json;charset=UTF-8');
-}
-
-//最新数据查询
-export function getLatest(data) {
-	return request('/companyapp/app/fs/health/data/latest/info', data, 'GET','application/json;charset=UTF-8');
-}
-//数据新增
-export function addData(data) {
-	return request('/companyapp/app/fs/health/data/add', data, 'POST','application/json;charset=UTF-8');
-}
-//数据列表查询
-export function getDataList(data) {
-	return request('/companyapp/app/fs/health/data/list', data, 'GET','application/json;charset=UTF-8');
-}
-//数据更新
-export function updateData(data) {
-	return request('/companyapp/app/fs/health/data/update', data, 'POST','application/json;charset=UTF-8');
-}
-//数据数据删除
-export function deleteData(data) {
-	return request('/companyapp/app/fs/health/data/delete', data, 'GET','application/json;charset=UTF-8');
-}
-//数据数据详情
-export function getDataById(data) {
-	return request('/companyapp/app/fs/health/data/info', data, 'GET','application/json;charset=UTF-8');
-}

+ 0 - 84
api/healthUser.js

@@ -1,84 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-//获取咨询人员列表
-export function getuserlist(data) {
-	return request('/store/app/common/getDicts', data, 'GET');
-}
-//提交咨询内容
-export function submitconsult(data) {
-	return request('/store/app/common/getDicts', data, 'GET');
-}
-
-//获取用户基本信息
-export function getInfo(data) {
-	return request('/app/fs/userinfo/info', data, 'GET');
-}
-
-//添加用户基本信息
-export function addInfo(data) {
-	return request('/app/fs/userinfo/add', data, 'POST','application/json;charset=UTF-8');
-}
-
-//修改用户基本信息
-export function updateInfo(data) {
-	return request('/app/fsinfo/update', data, 'POST','application/json;charset=UTF-8');
-}
-//删除用户基本信息
-export function deleteInfo(data) {
-	return request('/app/fsinfo/delete', data, 'GET','application/json;charset=UTF-8');
-}
-//获取会员分类
-export function getMember(data) {
-	return request('/app/common/getDictByKey?key=user_member_classify', data, 'GET');
-}
-//主页信息
-export function homeInfo(data) {
-	return request('/app/fs/health/profile/home/info', data, 'GET');
-}
-//健康档案主页信息
-export function getDoc(data) {
-	return request('/app/fs/health/profile/info', data, 'GET');
-}
-//添加健康档案信息
-export function addDoc(data) {
-	return request('/app/fs/health/profile/add', data, 'POST','application/json;charset=UTF-8');
-}
-
-//修改健康档案信息
-export function updateDoc(data) {
-	return request('/app/fs/health/profile/update', data, 'POST','application/json;charset=UTF-8');
-}
-//删除健康档案信息
-export function deleteDoc(data) {
-	return request('/app/fs/health/profile/delete', data, 'GET','application/json;charset=UTF-8');
-}
-
-//最新数据查询
-export function getLatest(data) {
-	return request('/app/fs/health/data/latest/info', data, 'GET','application/json;charset=UTF-8');
-}
-//最新数据查询可视化
-export function getLatestList(data) {
-	return request('/app/fs/health/data/latest/list', data, 'GET','application/json;charset=UTF-8');
-}
-//数据新增
-export function addData(data) {
-	return request('/app/fs/health/data/add', data, 'POST','application/json;charset=UTF-8');
-}
-//数据列表查询
-export function getDataList(data) {
-	return request('/app/fs/health/data/list', data, 'GET','application/json;charset=UTF-8');
-}
-//数据更新
-export function updateData(data) {
-	return request('/app/fs/health/data/update', data, 'POST','application/json;charset=UTF-8');
-}
-//数据数据删除
-export function deleteData(data) {
-	return request('/app/fs/health/data/delete', data, 'GET','application/json;charset=UTF-8');
-}
-//数据数据详情
-export function getDataById(data) {
-	return request('/app/fs/health/data/info', data, 'GET','application/json;charset=UTF-8');
-}

+ 0 - 22
api/patient.js

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

+ 0 - 22
api/payment.js

@@ -1,22 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
-  
- export function payment(data) {
- 	 return request('/store/app/payment/payment',data,'POST','application/json;charset=UTF-8');
- }
-  
-  //余额充值套餐列表
-  export function getTemplates(data) {
-  	 return request('/recharge-templates/list',data,'GET');
-  }
-  //余额充值套餐详情
-  export function getTemplatesById(data) {
-  	 return request('/recharge-templates/'+data,data,'GET');
-  }
- //余额充值套餐支付
- export function toPayment(data) {
- 	 return request('/recharge-templates/payment',data,'POST','application/json;charset=UTF-8');
- }
- 
- 

+ 0 - 21
api/prescribe.js

@@ -1,21 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
- 
- export function doPrescribe(data) {
- 	 return request('/store/app/prescribe/doPrescribe',data,'POST','application/json;charset=UTF-8');
- }
- export function getMyPrescribeList(data) {
- 	 return request('/store/app/prescribe/getMyPrescribeList',data,'GET');
- }
- 
- 
- 
- 
- 
-
- 
- 
- 
- 
- 
- 

+ 0 - 66
api/product.js

@@ -1,66 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
- 
-
- export function getProductCate(data) {
- 	 return request('/store/app/product/getProductCate',data,'GET');
- }
- 
- export function getProductCateByPid(data) {
- 	 return request('/store/app/product/getProductCateByPid',data,'GET');
- }
- 
- export function getProducts(data) {
- 	 return request('/store/app/product/getProducts',data,'GET');
- }
- export function getProductDetails(data) {
- 	 return request('/store/app/product/getProductDetails',data,'GET');
- }
- 
- export function getCarts(data) {
- 	 return request('/store/app/product/getCarts',data,'GET');
- }
- export function addCart(data) {
- 	 return request('/store/app/product/addCart',data,'POST','application/json;charset=UTF-8');
- }
- export function delCart(data) {
- 	 return request('/store/app/product/delCart',data,'POST','application/json;charset=UTF-8');
- }
- export function cartNum(data) {
- 	 return request('/store/app/product/cartNum',data,'POST','application/json;charset=UTF-8');
- }
- export function getCartCount(data) {
- 	 return request('/store/app/product/getCartCount',data,'GET');
- }
- export function getGoodsProduct() {
- 	 return request('/store/app/product/getGoodsProduct',null,'GET');
- }
- export function getGoodsProducts(data) {
- 	 return request('/store/app/product/getGoodsProducts',data,'GET');
- }
- export function getTuiProducts(data) {
- 	 return request('/store/app/product/getTuiProducts',data,'GET');
- }
- export function getStoreProductAttrValueList(data) {
- 	 return request('/store/app/product/getStoreProductAttrValueList',data,'GET');
- }
- 
- export function getProductStoreStock(data) {
- 	 return request('/app/product/getProductStoreStock',data,'GET');
- }
- 
- 
- 
- 
- 
- 
- 
- 
- 
-
- 
- 
- 
- 
- 
- 

+ 24 - 0
api/speaker.js

@@ -0,0 +1,24 @@
+import Request from '../common/request.js';
+let request = new Request().http
+ 
+//  查询讲者列表
+ export function speakerList(data) {
+ 	 return request('/doctor/doctor/list',data,'GET');
+ }
+ // 查询讲者详情
+ export function getStoreActivityDetails(data) {
+ 	 return request(`/doctor/doctor/${data}`,data,'GET');
+ }
+ // 定级材料提交
+export function apply(data) {
+	 return request('/doctor/apply',data,'POST','application/json;charset=UTF-8');
+}
+ 
+ 
+
+ 
+ 
+ 
+ 
+ 
+ 

+ 0 - 14
api/store.js

@@ -1,14 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
- // 获取门店详情
- export function getStoreById(data) {
- 	 return request('/store/app/store/getStoreById',data,'GET');
- }
- // 获取门店详情新
- export function getNewStoreById(data) {
- 	 return request('/store/app/store/'+data,data,'GET');
- }
- export function getIndexData(data) {
-  	 return request('/store/app/index/getIndexData',data,'GET');
- } 

+ 0 - 29
api/storeAfterSales.js

@@ -1,29 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
- 
- export function getMyStoreOrderItemByOrderId(data) {
- 	 return request('/store/app/storeAfterSales/getMyStoreOrderItemByOrderId',data,'GET');
- } 
- export function applyAfterSales(data) {
- 	 return request('/store/app/storeAfterSales/store/applyAfterSales',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function getAfterSalesList(data) {
- 	 return request('/store/app/storeAfterSales/getAfterSalesList',data,'GET');
- } 
- 
- export function getAfterSalesDetails(data) {
- 	 return request('/store/app/storeAfterSales/getAfterSalesDetails',data,'GET');
- } 
- export function revoke(data) {
- 	 return request('/store/app/storeAfterSales/revoke',data,'POST','application/json;charset=UTF-8');
- }
- export function addDelivery(data) {
- 	 return request('/store/app/storeAfterSales/addDelivery',data,'POST','application/json;charset=UTF-8');
- }
- 
- 
- 
- 
- 
- 

+ 0 - 92
api/storeOrder.js

@@ -1,92 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
- 
- export function getMyStoreOrderList(data) {
- 	 return request('/store/app/storeOrder/getMyStoreOrderList',data,'GET');
- } 
- export function getCompanyStoreOrderList(data) {
- 	 return request('/store/app/storeOrder/getCompanyStoreOrderList',data,'GET');
- } 
- export function getMyStoreOrderById(data) {
- 	 return request('/store/app/storeOrder/getMyStoreOrderById',data,'GET');
- } 
- 
- 
- export function getStoreOrderById(data) {
- 	 return request('/store/app/storeOrder/getStoreOrderById',data,'GET');
- } 
- 
- export function getStoreOrderByCombinationId(data) {
- 	 return request('/store/app/storeOrder/getStoreOrderByCombinationId',data,'GET');
- } 
- export function otherPaymentByCombinationId(data) {
- 	 return request('/store/app/storeOrder/otherPaymentByCombinationId',data,'POST','application/json;charset=UTF-8');
- } 
- 
- export function confirm(data) {
- 	 return request('/store/app/storeOrder/confirm',data,'POST','application/json;charset=UTF-8');
- }
- export function computed(data) {
- 	 return request('/store/app/storeOrder/computed',data,'POST','application/json;charset=UTF-8');
- }
- export function create(data) {
- 	 return request('/store/app/storeOrder/create',data,'POST','application/json;charset=UTF-8');
- }
- export function pay(data) {
- 	 return request('/store/app/storeOrder/pay',data,'POST','application/json;charset=UTF-8');
- }
- export function payByCombinationId(data) {
- 	 return request('/store/app/storeOrder/payByCombinationId',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function editPayType(data) {
- 	 return request('/store/app/storeOrder/editPayType',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function editPayTypeByCombinationId(data) {
- 	 return request('/store/app/storeOrder/editPayTypeByCombinationId',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function payRemain(data) {
- 	 return request('/store/app/storeOrder/payRemain',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function otherPayment(data) {
- 	 return request('/store/app/storeOrder/otherPayment',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function otherPaymentRemain(data) {
- 	 return request('/store/app/storeOrder/otherPaymentRemain',data,'POST','application/json;charset=UTF-8');
- }
- 
- 
- export function cancelOrder(data) {
- 	 return request('/store/app/storeOrder/cancelOrder',data,'POST','application/json;charset=UTF-8');
- }
- export function finishOrder(data) {
- 	 return request('/store/app/storeOrder/finishOrder',data,'POST','application/json;charset=UTF-8');
- }
- export function getExpress(data) {
- 	 return request('/store/app/storeOrder/getExpress',data,'POST','application/json;charset=UTF-8');
- }
- 
- 
- export function confirmPackageOrder(data) {
- 	 return request('/store/app/storeOrder/confirmPackageOrder',data,'POST','application/json;charset=UTF-8');
- }
- export function computedPackageOrder(data) {
- 	 return request('/store/app/storeOrder/computedPackageOrder',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function createPackageOrder(data) {
- 	 return request('/store/app/storeOrder/createPackageOrder',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function getOrderCount() {
- 	 return request('/store/app/storeOrder/getOrderCount',null,'GET');
- } 
- 
- 
- 
- 

+ 0 - 15
api/storeProductPackage.js

@@ -1,15 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
- export function getStoreProductPackage(data) {
- 	 return request('/store/app/storeProductPackage/getStoreProductPackage',data,'GET');
- } 
- 
- export function getStoreProductPackageDetails(data) {
- 	 return request('/store/app/storeProductPackage/getStoreProductPackageDetails',data,'GET');
- } 
- 
-  
- 
- 
- 

+ 46 - 0
api/task.js

@@ -0,0 +1,46 @@
+import Request from '../common/request.js';
+let request = new Request().http
+//任务列表信息查询
+export function list(data) {
+ 	 return request('/task/info/list',data,'GET');
+} 
+//任务信息查询
+export function getTaskFinishAuditInfo(data) {
+ 	 return request('/task/info/getTaskFinishAuditInfo',data,'GET');
+} 
+//删除任务
+export function deleted(data){
+ 	 return request(`/task/info/${data}`,data,'DELETE');
+} 
+//查询指定公司下的项目设置列表
+export function company(data) {
+ 	 return request(`/project/settings/company/${data}`,data,'GET');
+} 
+ 
+ //添加任务信息
+export function addInfo(data) {
+ 	 return request('/task/info',data,'GET');
+} 
+ // 任务完成统计
+export function getTaskCompleteStats(data) {
+	 return request('/task/info/getTaskCompleteStats',data,'POST','application/json;charset=UTF-8');
+}
+ // 任务创建统计
+export function getTaskCreateStats(data) {
+	 return request('/task/info/getTaskCreateStats',data,'POST','application/json;charset=UTF-8');
+}
+
+ //获取项目所有数据
+export function getAllData(data) {
+ 	 return request('/project/project/getAllData',data,'GET');
+} 
+
+ //获取公司所有产品
+export function queryAllProduct(data) {
+ 	 return request('/company/product/queryAllProduct',data,'GET');
+} 
+
+ //获取任务类型
+export function queryAllData(data) {
+ 	 return request('/project/type/queryAllData',data,'GET','application/json;charset=UTF-8');
+} 

+ 0 - 24
api/test.js

@@ -1,24 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
-
- export function getTestList(data) {
- 	 return request('/store/app/test/getTestList',data,'GET');
- }
- export function getTestDetails(data) {
- 	 return request('/store/app/test/getTestDetails',data,'GET');
- }
- 
- export function getTestTempDetails(data) {
- 	 return request('/store/app/test/getTestTempDetails',data,'GET');
- }
- export function getTestReport(data) {
- 	 return request('/store/app/test/getTestReport',data,'GET');
- }
- export function getTestReportImg(data) {
- 	 return request('/store/app/test/getTestReportImg',data,'GET');
- }
- export function doReport(data) {
-  	return request('/store/app/test/doReport',data,'POST','application/json;charset=UTF-8');
- }
-  
-  

+ 21 - 66
api/user.js

@@ -1,70 +1,25 @@
 import Request from '../common/request.js';
 import Request from '../common/request.js';
 let request = new Request().http
 let request = new Request().http
+
+//密码登录
+export function login(data) {
+ 	 return request('/app/user/login',data,'POST','application/json;charset=UTF-8');
+} 
+// 修改密码
+export function changePWD(data) {
+ 	 return request('/app/user/changePWD',data,'POST','application/json;charset=UTF-8');
+} 
+
+//发送短信验证码
+export function sendSmsCode(data) {
+ 	 return request(`/app/user/sendSmsCode?phone=${data}`,data,'POST','application/json;charset=UTF-8');
+} 
+// 校验短信验证码
+export function smsLogin(data) {
+ 	 return request('/app/user/smsLogin',data,'POST','application/json;charset=UTF-8');
+} 
+ 
+ 
+
  
  
- export function loginByMiniApp(data) {
- 	 return request('/store/app/wx/loginByMiniApp',data,'POST','application/json;charset=UTF-8');
- }
- export function loginByMp(data) {
- 	 return request('/store/app/wx/loginByMp',data,'POST','application/json;charset=UTF-8');
- }
- export function getUserInfo() {
- 	 return request('/store/app/user/getUserInfo',null,'GET');
- }
  
  
- export function editUser(data) {
- 	return request('/store/app/user/editUser',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function getWeixinInfo(data) {
- 	return request('/store/app/wx/getWeixinInfo',data,'POST','application/json;charset=UTF-8');
- }
- export function checkLogin() {
- 	 return request('/store/app/user/checkLogin',null,'GET');
- }
- export function getTuiImg() {
- 	 return request('/store/app/user/getTuiImg',null,'GET');
- }
- export function getMyTuiOrderList(data) {
- 	 return request('/store/app/user/getMyTuiOrderList',data,'GET');
- }
- export function getTuiMoney() {
- 	 return request('/store/app/user/getTuiMoney',null,'GET');
- }
- export function getMyTuiList(data) {
- 	 return request('/store/app/user/getMyTuiList',data,'GET');
- }
- export function getTuiMoneyLogs(data) {
- 	 return request('/store/app/user/getTuiMoneyLogs',data,'GET');
- }
- 
- export function getProductFoots(data) {
- 	 return request('/store/app/user/getProductFoots',data,'GET');
- }
- export function delProductFoots(data) {
- 	 return request('/store/app/user/delProductFoots',data,'POST','application/json;charset=UTF-8');
- }
- 
- export function doExtract(data) {
- 	 return request('/store/app/user/doExtract',data,'POST','application/json;charset=UTF-8');
- }
- export function getExtractList(data) {
- 	 return request('/store/app/user/getExtractList',data,'GET');
- }
- export function applyPromoter(data) {
- 	 return request('/store/app/user/applyPromoter',data,'POST','application/json;charset=UTF-8');
- }
- export function bindPromoter(data) {
- 	 return request('/store/app/user/bindPromoter',data,'POST','application/json;charset=UTF-8');
- }
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 

+ 0 - 16
api/userSign.js

@@ -1,16 +0,0 @@
-import Request from '../common/request.js';
-let request = new Request().http
- 
- 
- export function getUserSign() {
- 	 return request('/store/app/sign/getUserSign',null,'GET');
- }
- 
- export function getIntegral(data) {
- 	 return request('/store/app/sign/getIntegral',data,'GET');
- }
- export function doSign(data) {
- 	 return request('/store/app/sign/sign',data,'POST','application/json;charset=UTF-8');
- }
- 
- 

+ 5 - 5
common/request.js

@@ -2,19 +2,19 @@
 export default class Request {
 export default class Request {
 	http(router, data = {}, method,contentType) {
 	http(router, data = {}, method,contentType) {
 		let that = this;
 		let that = this;
-		// let path = 'http://e767647f.natappfree.cc';
-		// let path = 'https://user.test.ylrztop.com/api'; //测试
-		let path = 'https://api.homemdt.net'; //正式
+		let path = 'http://132.232.83.221:7771';
+		
+		// let path = 'https://api.homemdt.net'; //正式
 		
 		
 		// let path = "https://api.qinggetai.com"
 		// let path = "https://api.qinggetai.com"
 	    // console.log(router,'router')
 	    // console.log(router,'router')
 		//用户模块
 		//用户模块
 		if(router.indexOf("/store/app") != -1 || router.indexOf("/app") != -1||  router.indexOf("/recharge-templates") != -1) {
 		if(router.indexOf("/store/app") != -1 || router.indexOf("/app") != -1||  router.indexOf("/recharge-templates") != -1) {
-			path ='https://api.homemdt.net/user';
+			// path ='https://api.homemdt.net/user';
 		}
 		}
 		//企业
 		//企业
 		if(router.indexOf("/companyapp") != -1 ) {
 		if(router.indexOf("/companyapp") != -1 ) {
-			path ='https://api.homemdt.net';
+			// path ='https://api.homemdt.net';
 		}
 		}
 		uni.setStorageSync('requestPath',path)
 		uni.setStorageSync('requestPath',path)
 		// uni.showLoading({
 		// uni.showLoading({

+ 1 - 15
components/StatisticsTable.vue

@@ -78,11 +78,7 @@ export default {
     columns: {
     columns: {
       type: Array,
       type: Array,
       default: () => [
       default: () => [
-        { title: '任务类型', key: 'taskType', width: '20%' },
-        { title: '积分', key: 'points', width: '15%' },
-        { title: '申请人员', key: 'applicant', width: '20%' },
-        { title: '任务状态', key: 'statusText', width: '20%', slot: true },
-        { title: '接收时间', key: 'receiveTime', width: '25%' }
+      
       ]
       ]
     },
     },
     // 表格数据
     // 表格数据
@@ -90,16 +86,6 @@ export default {
       type: Array,
       type: Array,
       default: () => []
       default: () => []
     },
     },
-    // 是否显示没有更多了
-    // showNoMore: {
-    //   type: Boolean,
-    //   default: true
-    // },
-    // 没有更多的提示文字
-    // noMoreText: {
-    //   type: String,
-    //   default: '没有更多了~'
-    // },
     // 是否加载中
     // 是否加载中
     loading: {
     loading: {
       type: Boolean,
       type: Boolean,

+ 90 - 0
components/tab-popup.vue

@@ -0,0 +1,90 @@
+<template>
+	<view class="tab-popup">
+		<view class="popup-box" v-if="show">
+			<view class="item" :class="{ active: selectedItem === item }" @click="selectItem(item)" v-for="(item, index) in items" :key="index">
+				{{ item }}
+			</view>
+		</view>
+		<view class="popup-mask" v-if="show" @click="close"></view>
+	</view>
+</template>
+
+<script>
+export default {
+	props: {
+		show: {
+			type: Boolean,
+			default: false
+		},
+		items: {
+			type: Array,
+			default: () => []
+		},
+		selectedItem: {
+			type: String,
+			default: ''
+		}
+	},
+	methods: {
+		selectItem(item) {
+			this.$emit('select', item)
+			this.$emit('update:show', false)
+		},
+		close() {
+			this.$emit('update:show', false)
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+.tab-popup {
+	.popup-mask {
+		position: fixed;
+		top: 0;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		background: rgba(0, 0, 0, 0.3);
+		z-index: 99;
+	}
+
+	.popup-box {
+		position: absolute;
+		top: 100%;
+		left: 0;
+		right: 0;
+		display: flex;
+		padding: 32rpx;
+		background: #FFFFFF;
+		border-radius: 0 0 40rpx 40rpx;
+		z-index: 100;
+		box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
+
+		.item {
+			padding: 14rpx 32rpx;
+			height: 72rpx;
+			box-sizing: border-box;
+			background: #F7F8FA;
+			border-radius: 70rpx;
+			font-size: 28rpx;
+			color: #333;
+			flex-wrap: wrap;
+			margin-right: 24rpx;
+			cursor: pointer;
+			transition: all 0.2s;
+			border: 2rpx solid transparent;
+
+			&.active {
+				color: #388BFF;
+				background: rgba(56,139,255,0.15);
+				border-color: #388BFF;
+			}
+
+			&:last-child {
+				margin-right: 0;
+			}
+		}
+	}
+}
+</style>

+ 95 - 0
main.js

@@ -19,6 +19,101 @@ const app = new Vue({
 })
 })
 app.$mount()
 app.$mount()
 
 
+// 辅助函数:检查页面是否需要登录
+function checkNeedLogin(targetPath) {
+  // 不需要登录的页面:首页、个人中心、登录相关页面、启动页
+  const noLoginPages = [
+    'home/index', 
+    'user/index',
+    'auth/login',
+    'auth/forgetPassword',
+    'auth/changePassword',
+    'auth/wxLogin',
+    'auth/setting',
+    'common/launch'
+  ]
+  
+  // 移除路径中的斜杠和协议,只保留核心路径部分
+  const normalizedPath = targetPath.replace(/^\/|^.*?:\/\//g, '')
+  
+  // 检查目标页面是否在不需要登录的列表中
+  return !noLoginPages.some(page => normalizedPath.includes(page))
+}
+
+// 添加导航守卫,检查用户登录状态
+uni.addInterceptor('navigateTo', {
+  invoke(e) {
+    // 检查是否登录
+    const userInfo = uni.getStorageSync('userInfo')
+    // 目标页面路径
+    const targetPath = e.url
+    
+    // 检查目标页面是否需要登录
+    const needLogin = checkNeedLogin(targetPath)
+    
+    // 如果需要登录且未登录,则跳转到登录页面
+    if (needLogin && !userInfo) {
+      uni.navigateTo({
+        url: '/pages/auth/login'
+      })
+      // 阻止原导航
+      return false
+    }
+    return true
+  }
+})
+
+// 同样拦截redirectTo
+uni.addInterceptor('redirectTo', {
+  invoke(e) {
+    const userInfo = uni.getStorageSync('userInfo')
+    const targetPath = e.url
+    const needLogin = checkNeedLogin(targetPath)
+    
+    if (needLogin && !userInfo) {
+      uni.navigateTo({
+        url: '/pages/auth/login'
+      })
+      return false
+    }
+    return true
+  }
+})
+
+// 同样拦截reLaunch
+uni.addInterceptor('reLaunch', {
+  invoke(e) {
+    const userInfo = uni.getStorageSync('userInfo')
+    const targetPath = e.url
+    const needLogin = checkNeedLogin(targetPath)
+    
+    if (needLogin && !userInfo) {
+      uni.navigateTo({
+        url: '/pages/auth/login'
+      })
+      return false
+    }
+    return true
+  }
+})
+
+// 同样拦截switchTab
+uni.addInterceptor('switchTab', {
+  invoke(e) {
+    const userInfo = uni.getStorageSync('userInfo')
+    const targetPath = e.url
+    const needLogin = checkNeedLogin(targetPath)
+    
+    if (needLogin && !userInfo) {
+      uni.navigateTo({
+        url: '/pages/auth/login'
+      })
+      return false
+    }
+    return true
+  }
+})
+
 
 
  
  
  
  

+ 16 - 2
manifest.json

@@ -50,11 +50,25 @@
     "quickapp" : {},
     "quickapp" : {},
     /* 小程序特有相关 */
     /* 小程序特有相关 */
     "mp-weixin" : {
     "mp-weixin" : {
-        "appid" : "wxd70f99287830cb51",
+        "appid" : "wx322a4922f7b81924",
         "lazyCodeLoading" : "requiredComponents",
         "lazyCodeLoading" : "requiredComponents",
         "setting" : {
         "setting" : {
             "urlCheck" : false,
             "urlCheck" : false,
-            "minified" : true
+            "minified" : true,
+            "ignoreDevUnusedFiles" : true,
+            "ignoreUploadUnusedFiles" : true,
+            "disableUseStrict" : true,
+            "es6" : true,
+            "enhance" : true,
+            "postcss" : true,
+            "preloadBackgroundData" : false,
+            "babelSetting" : {
+                "ignore" : [],
+                "disablePlugins" : [],
+                "outputPath" : ""
+            },
+            "disableShowDebug" : false,
+            "scopeDataCheck" : false
         },
         },
         "optimization" : {
         "optimization" : {
             "subPackages" : true
             "subPackages" : true

+ 38 - 209
pages.json

@@ -19,7 +19,6 @@
 				"navigationBarTitleText": "公众号授权",
 				"navigationBarTitleText": "公众号授权",
 				"navigationStyle": "custom"
 				"navigationStyle": "custom"
 			}
 			}
-
 		},
 		},
 		{
 		{
 			"path": "pages/home/index",
 			"path": "pages/home/index",
@@ -32,15 +31,6 @@
 				}
 				}
 			}
 			}
 		},
 		},
-		{
-			"path": "pages/task/index",
-			"style": {
-				"navigationBarTitleText": "任务中心",
-				"app-plus": {
-					"titleNView": false
-				}
-			}
-		},
 		{
 		{
 			"path": "pages/user/index",
 			"path": "pages/user/index",
 			"style": {
 			"style": {
@@ -50,29 +40,6 @@
 					"titleNView": false
 					"titleNView": false
 				}
 				}
 			}
 			}
-		}, {
-			"path": "pages/home/content",
-			"style": {
-				"navigationBarTitleText": "详情",
-				"enablePullDownRefresh": false
-			}
-
-		}, {
-			"path": "pages/home/web",
-			"style": {
-				"navigationBarTitleText": "详情",
-				"enablePullDownRefresh": false
-			}
-
-		},
-		{
-			"path": "pages/user/test",
-			"style": {
-				"navigationBarTitleText": "测一测",
-				"app-plus": {
-					"titleNView": false
-				}
-			}
 		},
 		},
 		{
 		{
 			"path": "pages/auth/changePassword",
 			"path": "pages/auth/changePassword",
@@ -85,34 +52,19 @@
 			"style": {
 			"style": {
 				"navigationBarTitleText": "忘记密码"
 				"navigationBarTitleText": "忘记密码"
 			}
 			}
-		}, {
+		},
+		{
 			"path": "pages/auth/setting",
 			"path": "pages/auth/setting",
 			"style": {
 			"style": {
 				"navigationBarTitleText": "设置中心"
 				"navigationBarTitleText": "设置中心"
 			}
 			}
 		}
 		}
-
 	],
 	],
-	"subPackages": [{
+	"subPackages": [
+		{
 			"root": "pages_task",
 			"root": "pages_task",
-			"pages": [{
-					"path": "index",
-					"style": {
-						"navigationBarTitleText": "问答专区",
-						"app-plus": {
-							"titleNView": false
-						}
-					}
-				},
+			"pages": [
 				{
 				{
-					"path": "airClassroom",
-					"style": {
-						"navigationBarTitleText": "空中课堂",
-						"app-plus": {
-							"titleNView": false
-						}
-					}
-				}, {
 					// 填写任务
 					// 填写任务
 					"path": "createTask",
 					"path": "createTask",
 					"style": {
 					"style": {
@@ -121,7 +73,8 @@
 							"titleNView": false
 							"titleNView": false
 						}
 						}
 					}
 					}
-				}, {
+				},
+				{
 					// 选择客户
 					// 选择客户
 					"path": "selectCustomer",
 					"path": "selectCustomer",
 					"style": {
 					"style": {
@@ -130,7 +83,8 @@
 							"titleNView": false
 							"titleNView": false
 						}
 						}
 					}
 					}
-				}, {
+				},
+				{
 					// 积分设置
 					// 积分设置
 					"path": "pointsSettings",
 					"path": "pointsSettings",
 					"style": {
 					"style": {
@@ -139,7 +93,8 @@
 							"titleNView": false
 							"titleNView": false
 						}
 						}
 					}
 					}
-				}, {
+				},
+				{
 					// 提交成功
 					// 提交成功
 					"path": "success",
 					"path": "success",
 					"style": {
 					"style": {
@@ -149,16 +104,18 @@
 						}
 						}
 					}
 					}
 				},
 				},
-
-				// {
-				// 	"path": "taskDetail",
-				// 	"style": {
-				// 		"navigationBarTitleText": "任务详情",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				// 	}
-				// },
+				{
+					"path": "statistics",
+					"style": {
+						"navigationBarTitleText": "数据统计",
+						"enablePullDownRefresh": false,
+						"navigationBarBackgroundColor": "#fff",
+						"navigationBarTextStyle": "black",
+						"app-plus": {
+							"titleNView": false
+						}
+					}
+				},
 				{
 				{
 					"path": "completeTask",
 					"path": "completeTask",
 					"style": {
 					"style": {
@@ -223,8 +180,7 @@
 							"titleNView": false
 							"titleNView": false
 						}
 						}
 					}
 					}
-				}
-				,
+				},
 				{
 				{
 					//选择客户
 					//选择客户
 					"path": "editSelectCustomer",
 					"path": "editSelectCustomer",
@@ -255,116 +211,35 @@
 						}
 						}
 					}
 					}
 				}
 				}
-
 			]
 			]
 		},
 		},
-
-
 		{
 		{
 			"root": "pages_user",
 			"root": "pages_user",
-			"pages": [{
-					"path": "points",
-					"style": {
-						"navigationBarTitleText": "我的积分",
-						"enablePullDownRefresh": false
-					}
-
-				},
+			"pages": [
 				{
 				{
 					"path": "userInfo",
 					"path": "userInfo",
 					"style": {
 					"style": {
 						"navigationBarTitleText": "个人信息"
 						"navigationBarTitleText": "个人信息"
 					}
 					}
 				}
 				}
-
-			]
-		}, {
-			// 讲者邀请
-			"root": "pages_speaker",
-			"pages": [{
-					"path": "speakerInvitation",
-					"style": {
-						"navigationStyle": "custom",
-						"app-plus": {
-							"titleNView": false
-						}
-					}
-				},
-				{
-					"path": "index",
-					"style": {
-						"navigationBarTitleText": "讲者管理"
-					}
-				}
-
 			]
 			]
 		},
 		},
 		{
 		{
-			"root": "pages_live",
-			"pages": [{
-					"path": "lecture",
-					"style": {
-						"navigationBarTitleText": "在线讲座",
-						// "enablePullDownRefresh": false,
-						"navigationBarBackgroundColor": "#fff",
-						"navigationBarTextStyle": "black",
-						"app-plus": {
-							"titleNView": false
-						}
-					}
-				},
-				{
-					"path": "lesson",
-					"style": {
-						"navigationBarTitleText": "空中课堂",
-						// "enablePullDownRefresh": false,
-						"navigationBarBackgroundColor": "#fff",
-						"navigationBarTextStyle": "black",
-						"app-plus": {
-							"titleNView": false
-						}
-					}
-				},
-				{
-					"path": "lessonDetail",
-					"style": {
-						"navigationBarTitleText": "视频详情",
-						// "enablePullDownRefresh": false,
-						"navigationBarBackgroundColor": "#000",
-						"navigationBarTextStyle": "white",
-						"app-plus": {
-							"titleNView": false
-						}
-					}
-				},
-				{
-					"path": "search",
-					"style": {
-						"navigationBarTitleText": "搜索",
-						// "enablePullDownRefresh": false,
-						"navigationBarBackgroundColor": "#fff",
-						"navigationBarTextStyle": "black",
-						"app-plus": {
-							"titleNView": false
-						}
-					}
-				},
+			// 讲者邀请
+			"root": "pages_speaker",
+			"pages": [
 				{
 				{
-					"path": "healthConsulting",
+					"path": "speakerInvitation",
 					"style": {
 					"style": {
-						"navigationBarTitleText": "健康咨询",
-						"enablePullDownRefresh": false,
 						"navigationStyle": "custom",
 						"navigationStyle": "custom",
 						"app-plus": {
 						"app-plus": {
 							"titleNView": false
 							"titleNView": false
 						}
 						}
 					}
 					}
-				},
-				{
-					"path": "healthfiles",
+				},	{
+					// lecturerDetail 讲师信息
+					"path": "lecturerDetail",
 					"style": {
 					"style": {
-						"navigationBarTitleText": "健康档案",
-						"enablePullDownRefresh": false,
 						"navigationStyle": "custom",
 						"navigationStyle": "custom",
 						"app-plus": {
 						"app-plus": {
 							"titleNView": false
 							"titleNView": false
@@ -372,59 +247,18 @@
 					}
 					}
 				},
 				},
 				{
 				{
-					"path": "ConsultationDetails",
-					"style": {
-						"navigationBarTitleText": "病例描述",
-						"enablePullDownRefresh": false,
-						"app-plus": {
-							"titleNView": false
-						}
-					}
-				},
-				{
-					"path": "addForm",
+					"path": "index",
 					"style": {
 					"style": {
-						"navigationBarTitleText": "直播报名表",
-						"enablePullDownRefresh": false,
-						"app-plus": {
-							"titleNView": false
-						}
+						"navigationBarTitleText": "讲者管理"
 					}
 					}
 				},
 				},
 				{
 				{
-					"path": "card",
+					"path": "gradeApplication",
 					"style": {
 					"style": {
-						"navigationBarTitleText": "邀请卡",
-						"enablePullDownRefresh": false,
-						"app-plus": {
-							"titleNView": false
-						}
-					}
-				}, {
-					"path": "addUser",
-					"style": {
-						"navigationBarTitleText": "用户信息",
-						"enablePullDownRefresh": false,
-						"app-plus": {
-							"titleNView": false
-						}
+						"navigationBarTitleText": "定级材料"
 					}
 					}
 				}
 				}
 			]
 			]
-		}, {
-			"root": "pages_echarts",
-			"pages": [{
-				"path": "statistics",
-				"style": {
-					"navigationBarTitleText": "数据统计",
-					"enablePullDownRefresh": false,
-					"navigationBarBackgroundColor": "#fff",
-					"navigationBarTextStyle": "black",
-					"app-plus": {
-						"titleNView": false
-					}
-				}
-			}]
 		}
 		}
 	],
 	],
 	"globalStyle": {
 	"globalStyle": {
@@ -442,18 +276,13 @@
 		"fontSize": "12px",
 		"fontSize": "12px",
 		"iconWidth": "18px",
 		"iconWidth": "18px",
 		"spacing": "4px",
 		"spacing": "4px",
-		"list": [{
+		"list": [
+			{
 				"pagePath": "pages/home/index",
 				"pagePath": "pages/home/index",
 				"iconPath": "/static/tabbar/icon_home.png",
 				"iconPath": "/static/tabbar/icon_home.png",
 				"selectedIconPath": "/static/tabbar/icon_sel_home.png",
 				"selectedIconPath": "/static/tabbar/icon_sel_home.png",
 				"text": "首页"
 				"text": "首页"
 			},
 			},
-			// {
-			// 	"pagePath": "pages/task/index",
-			// 	"iconPath": "/static/tabbar/icon_task.png",
-			// 	"selectedIconPath": "/static/tabbar/icon_sel_task.png",
-			// 	"text": "任务中心"
-			// },
 			{
 			{
 				"pagePath": "pages/user/index",
 				"pagePath": "pages/user/index",
 				"iconPath": "/static/tabbar/icon_me.png",
 				"iconPath": "/static/tabbar/icon_me.png",

+ 19 - 13
pages/auth/changePassword.vue

@@ -39,6 +39,7 @@
 </template>
 </template>
 
 
 <script>
 <script>
+	import { changePWD } from '@/api/user.js'
 	export default {
 	export default {
 		data() {
 		data() {
 			return {
 			return {
@@ -110,19 +111,19 @@
 						title: '修改中...'
 						title: '修改中...'
 					});
 					});
 					
 					
-					// 这里添加实际的API调用
-					// const res = await uni.request({
-					// 	url: '/api/change-password',
-					// 	method: 'POST',
-					// 	data: {
-					// 		oldPassword: this.oldPassword,
-					// 		newPassword: this.newPassword
-					// 	}
-					// });
+					// 构建请求参数
+					const params = {
+						oldPassword: this.oldPassword,
+						newPassword: this.newPassword,
+						confirmPassword: this.confirmPassword
+					};
 					
 					
-					// 模拟成功
-					setTimeout(() => {
-						uni.hideLoading();
+					// 调用修改密码接口
+					const res = await changePWD(params);
+					
+					uni.hideLoading();
+					
+					if (res.code === 200) {
 						uni.showToast({
 						uni.showToast({
 							title: '密码修改成功',
 							title: '密码修改成功',
 							icon: 'success'
 							icon: 'success'
@@ -137,7 +138,12 @@
 						setTimeout(() => {
 						setTimeout(() => {
 							uni.navigateBack();
 							uni.navigateBack();
 						}, 1500);
 						}, 1500);
-					}, 1000);
+					} else {
+						uni.showToast({
+							title: res.message || '修改失败',
+							icon: 'none'
+						});
+					}
 					
 					
 				} catch (error) {
 				} catch (error) {
 					uni.hideLoading();
 					uni.hideLoading();

+ 166 - 95
pages/auth/login.vue

@@ -22,7 +22,9 @@
 
 
 				<view class="input-form">
 				<view class="input-form">
 					<view class="input-item">
 					<view class="input-item">
-						<input class="input-field" type="number" v-model="phone" placeholder="请输入手机号" maxlength="11" />
+						<input v-if="current == 0" class="input-field" type="number" v-model="phone" placeholder="请输入手机号" maxlength="11" />
+						<input v-else  class="input-field"  v-model="account" placeholder="请输入账号"  />
+
 					</view>
 					</view>
 					<view class="input-item code-input-item">
 					<view class="input-item code-input-item">
 						<input v-if="current == 0" class="input-field code-input" type="number" v-model="verifyCode"
 						<input v-if="current == 0" class="input-field code-input" type="number" v-model="verifyCode"
@@ -60,13 +62,19 @@
 
 
 <script>
 <script>
 	import {
 	import {
-		loginByMiniApp,
-		getUserInfo,
-		loginByMp
+		sendSmsCode,//发送短信验证码
+		smsLogin, // 校验短信验证码
+		login, // 密码登录
 	} from '@/api/user'
 	} from '@/api/user'
+	// import {
+	// 	loginByMiniApp,
+	// 	getUserInfo,
+	// 	loginByMp
+	// } from '@/api/user'
 	export default {
 	export default {
 		data() {
 		data() {
 			return {
 			return {
+				account:null,
 				code: null, // 微信登录code
 				code: null, // 微信登录code
 				isAgreement: false,
 				isAgreement: false,
 				current: 0, // 0-验证码登录 1-密码登录
 				current: 0, // 0-验证码登录 1-密码登录
@@ -150,10 +158,74 @@
 				})
 				})
 			},
 			},
 			// 获取验证码
 			// 获取验证码
-			getVerifyCode() {
-				if (this.countdown > 0) {
-					return;
-				}
+		getVerifyCode() {
+			if (this.countdown > 0) {
+				return;
+			}
+			if (!this.phone) {
+				uni.showToast({
+					icon: 'none',
+					title: "请输入手机号",
+				});
+				return;
+			}
+			if (!/^1[3-9]\d{9}$/.test(this.phone)) {
+				uni.showToast({
+					icon: 'none',
+					title: "请输入正确的手机号",
+				});
+				return;
+			}
+			// 调用发送验证码API
+				uni.showLoading({
+					title: "发送中..."
+				});
+				sendSmsCode(this.phone)
+					.then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							uni.showToast({
+								icon: 'success',
+								title: "验证码已发送",
+							});
+							// 开始倒计时
+							this.countdown = 60;
+							this.countdownTimer = setInterval(() => {
+								this.countdown--;
+								this.codeText = this.countdown + '秒重新获取';
+								if (this.countdown <= 0) {
+									clearInterval(this.countdownTimer);
+									this.countdownTimer = null;
+									this.codeText = '获取验证码';
+								}
+							}, 1000);
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: res.message || "发送验证码失败",
+							});
+						}
+					})
+					.catch(err => {
+						uni.hideLoading();
+						uni.showToast({
+							icon: 'none',
+							title: "发送验证码接口调用失败",
+						});
+					});
+		},
+			// 登录
+		handleLogin() {
+			if (!this.isAgreement) {
+				uni.showToast({
+					icon: 'none',
+					title: "请先同意协议后再登录",
+				});
+				return;
+			}
+
+			if (this.current == 0) {
+				// 验证码登录
 				if (!this.phone) {
 				if (!this.phone) {
 					uni.showToast({
 					uni.showToast({
 						icon: 'none',
 						icon: 'none',
@@ -168,111 +240,110 @@
 					});
 					});
 					return;
 					return;
 				}
 				}
-				// TODO: 调用发送验证码API
-				// 这里需要对接真实的发送验证码接口
-				uni.showLoading({
-					title: "发送中..."
-				});
-				// 模拟发送验证码
-				setTimeout(() => {
-					uni.hideLoading();
+				if (!this.verifyCode) {
 					uni.showToast({
 					uni.showToast({
-						icon: 'success',
-						title: "验证码已发送",
+						icon: 'none',
+						title: "请输入验证码",
 					});
 					});
-					// 开始倒计时
-					this.countdown = 60;
-					this.countdownTimer = setInterval(() => {
-						this.countdown--;
-						this.codeText = this.countdown + '秒重新获取';
-						if (this.countdown <= 0) {
-							clearInterval(this.countdownTimer);
-							this.countdownTimer = null;
-							this.codeText = '获取验证码';
-						}
-					}, 1000);
-				}, 1000);
-			},
-			// 登录
-			handleLogin() {
-				if (!this.isAgreement) {
+					return;
+				}
+				this.loginByCode();
+			} else {
+				// 密码登录
+				if (!this.account) {
 					uni.showToast({
 					uni.showToast({
 						icon: 'none',
 						icon: 'none',
-						title: "请先同意协议后再登录",
+						title: "请输入账号",
 					});
 					});
 					return;
 					return;
 				}
 				}
-				uni.navigateBack({
-					delta: 1
-				})
-				// if(!this.phone) {
-				// 	uni.showToast({
-				// 		icon:'none',
-				// 		title: "请输入手机号",
-				// 	});
-				// 	return;
-				// }
-				// if(!/^1[3-9]\d{9}$/.test(this.phone)) {
-				// 	uni.showToast({
-				// 		icon:'none',
-				// 		title: "请输入正确的手机号",
-				// 	});
-				// 	return;
-				// }
-
-				// if(this.current == 0) {
-				// 	// 验证码登录
-				// 	if(!this.verifyCode) {
-				// 		uni.showToast({
-				// 			icon:'none',
-				// 			title: "请输入验证码",
-				// 		});
-				// 		return;
-				// 	}
-				// 	// TODO: 调用验证码登录API
-				// 	this.loginByCode();
-				// } else {
-				// 	// 密码登录
-				// 	if(!this.password) {
-				// 		uni.showToast({
-				// 			icon:'none',
-				// 			title: "请输入密码",
-				// 		});
-				// 		return;
-				// 	}
-				// 	// TODO: 调用密码登录API
-				// 	this.loginByPassword();
-				// }
-			},
+				if (!this.password) {
+					uni.showToast({
+						icon: 'none',
+						title: "请输入密码",
+					});
+					return;
+				}
+				this.loginByPassword();
+			}
+		},
 			// 验证码登录
 			// 验证码登录
-			loginByCode() {
-				uni.showLoading({
-					title: "登录中..."
-				});
-				// TODO: 调用验证码登录接口
-				// 示例:loginByCode({ phone: this.phone, code: this.verifyCode })
-				setTimeout(() => {
+		loginByCode() {
+			uni.showLoading({
+				title: "登录中..."
+			});
+			// 调用验证码登录接口
+			const data = {
+				phone: this.phone,
+				code: this.verifyCode
+			};
+			smsLogin(data)
+				.then(res => {
+					uni.hideLoading();
+					if (res.code == 200) {
+						uni.showToast({
+							icon: 'success',
+							title: "登录成功",
+						});
+						uni.setStorageSync('AppToken', res.data.token);
+						uni.setStorageSync('userInfo', JSON.stringify(res.data.user));
+						uni.$emit('refreshLogin');
+						uni.navigateBack({
+							delta: 1
+						});
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.message || "登录失败",
+						});
+					}
+				})
+				.catch(err => {
 					uni.hideLoading();
 					uni.hideLoading();
 					uni.showToast({
 					uni.showToast({
 						icon: 'none',
 						icon: 'none',
-						title: "验证码登录接口待对接",
+						title: "登录接口调用失败",
 					});
 					});
-				}, 1000);
-			},
+				});
+		},
 			// 密码登录
 			// 密码登录
 			loginByPassword() {
 			loginByPassword() {
 				uni.showLoading({
 				uni.showLoading({
 					title: "登录中..."
 					title: "登录中..."
 				});
 				});
-				// TODO: 调用密码登录接口
-				// 示例:loginByPassword({ phone: this.phone, password: this.password })
-				setTimeout(() => {
-					uni.hideLoading();
-					uni.showToast({
-						icon: 'none',
-						title: "密码登录接口待对接",
+			const data={
+				account: this.account,
+				 password: this.password
+			}
+				// 调用密码登录接口
+				login(data)
+					.then(res => {
+						uni.hideLoading();
+						if (res.code == 200) {
+							uni.showToast({
+								icon: 'success',
+								title: "登录成功",
+							});
+							uni.setStorageSync('AppToken', res.data.token);
+							uni.setStorageSync('userInfo', JSON.stringify(res.data.user));
+							uni.$emit('refreshLogin');
+							uni.navigateBack({
+								delta: 1
+							});
+						} else {
+							uni.showToast({
+								icon: 'none',
+								title: res.message || "登录失败",
+							});
+						}
+					})
+					.catch(err => {
+						uni.hideLoading();
+						uni.showToast({
+							icon: 'none',
+							title: "登录接口调用失败",
+						});
 					});
 					});
-				}, 1000);
 			},
 			},
 			checkWeixin() {
 			checkWeixin() {
 				var ua = window.navigator.userAgent.toLowerCase();
 				var ua = window.navigator.userAgent.toLowerCase();

+ 9 - 0
pages/auth/wxLogin.vue

@@ -104,4 +104,13 @@ export default {
 </script>
 </script>
 
 
 <style lang="scss">
 <style lang="scss">
+.container {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  padding: 0 24rpx;
+  background-color: #ffffff;
+}
 </style>
 </style>

+ 2 - 2
pages/common/launch.vue

@@ -9,7 +9,7 @@
 </template>
 </template>
 
 
 <script>
 <script>
-	import {getDicts} from '@/api/index'
+	import {dicts} from '@/api/common.js'
 	export default {
 	export default {
 		data() {
 		data() {
 			return {
 			return {
@@ -19,7 +19,7 @@
 		methods: {
 		methods: {
 			
 			
 			getDicts:function(){
 			getDicts:function(){
-				getDicts().then(
+				dicts().then(
 					res => {
 					res => {
 						if(res.code==200){
 						if(res.code==200){
 							console.log(res)
 							console.log(res)

+ 0 - 79
pages/home/content.vue

@@ -1,79 +0,0 @@
-<template>
-	<view class="content">
-		 <view   v-html="content"></view>
-	</view>
-</template>
-
-<script>
- 
- export default {
- 	data() {
- 		return {
-			content:"",
- 		}
- 	},
-	onLoad(val) {
-		this.content=uni.getStorageSync('content');
-	}
- 	 
- }
- 
- 
-</script>
-
-
-<style scoped lang="scss">
-page{
-	height: 100%;
-}
-.content{
-	height: 100%;
-}
-.logo{
-	padding-top: 15%;
-	text-align: center;
-	image{
-		width: 80px;
-		height: 80px;
-	}
-	p{
-		margin: 10px 0px;
-		font-size: 14px;
-	}
-}
-.set-box{
-	margin-top: 30upx;
-	background: #fff;
-	padding: 0 40upx;
-	.item{
-		
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		padding: 25upx 0;
-		.left{
-			display: flex;
-			align-items: center;
-			.text{
-				font-size: 30upx;
-				color: #666;
-			}
-		}
-		.right{
-			width: 10upx;
-			height: 20upx;
-		}
-		.right-text{
-			 
-		}
-	}
-}
-.contact-btn {
-  display: inline-block;
-  position: absolute;
-  width: 100%;
-  background: salmon;
-   opacity: 0;
-}
-
-</style>

+ 0 - 2649
pages/home/index - 副本.vue

@@ -1,2649 +0,0 @@
-<template>
-	<view class="content">
-		<!-- 背景图片 -->
-		<image class="bg" src="@/static/image/top_bg.png" mode="widthFix"></image>
-		<view>
-			<view class="top-inner">
-				<view class="fixed-top-box" :style="{ background: bgColor ,paddingBottom:top>0?'20rpx':''}">
-					<!-- 这里是状态栏 -->
-					<!-- <view class="status_bar" :style="{height: statusBarHeight}"></view> -->
-					<!-- <view class="top-title">
-						<view class="name">企业端</view>
-				
-					</view> -->
-					<!-- 搜索框、购物车、客服 -->
-					<view class="func-cont" :style="{marginTop: menuButtonInfo.top}">
-						<view class="search-cont">
-							<image class="icon-search" src="@/static/image/icon_search.png" mode=""></image>
-							<input type="text" disabled value="" placeholder="请输入关键字或作者"
-								placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
-							<view class="btn" @click="toSearch">搜索</view>
-						</view>
-						<!-- 购物车 -->
-						<!-- <uni-badge size="small" :text="cartCount" absolute="rightTop" type="error">
-							<view class="img-item" @click="goAuthUrl('../shopping/cart')">
-								<image src="../../static/images/cart_wihte.png" mode=""></image>
-							</view>
-						</uni-badge>
-						<view class="img-item" style="position: relative;">
-							<image src="../../static/images/customer.png" mode=""></image>
-							<button class="contact-btn" open-type="contact"></button>
-						</view> -->
-					</view>
-					<!-- <view class="tips">
-						
-						<view class="left"></view>
-						<view class="right"  @click="navTo('./cert')">资质证明</view>
-					</view> -->
-				</view>
-			</view>
-			<!-- 头部间距 -->
-			<view style="padding-bottom:100rpx">
-				<view class="status_bar" :style="{height: statusBarHeight}"></view>
-			</view>
-			<!-- 轮播图 -->
-			<view class="banner-box">
-				<view class="inner">
-					<swiper class="swiper" :indicator-dots="true" :circular="true" :autoplay="true" :interval="3000"
-						:duration="1000" indicator-color="rgba(255, 255, 255, 0.6)" indicator-active-color="#ffffff">
-						<swiper-item class="swiper-item" v-for="(item,index) in advList" :key="index"
-							@click="handleAdvClick(item)">
-							<image :src="item.imageUrl" mode=""></image>
-						</swiper-item>
-					</swiper>
-				</view>
-			</view>
-
-		</view>
-		<!-- 养生讲堂 -->
-		<view class="doctor-articles">
-			<view class="box-title">
-				<view class="title-l">在线讲座</view>
-				<view class="title-m" @click="navTo('/pages_live/lecture')">
-					查看更多
-					<image src="@/static/image/icon_more.png" mode=""></image>
-				</view>
-			</view>
-			<view class="title-box">
-				<u-tabs :list="livetabList"
-					:activeStyle="{width:'136rpx',height:'56rpx',lineHeight:'56rpx',textAlign:'center',fontWeight: '500',color: '#fff',background: 'linear-gradient( 90deg, #61A3FF 0%, #207DFF 100%)',borderRadius:'98rpx'}"
-					:inactiveStyle="{width:'136rpx',height:'56rpx',lineHeight:'56rpx',fontWeight: '400',color: '#666666',background:'#fff',borderRadius:'98rpx',textAlign:'center'}"
-					lineColor="#F7F8FA" @click="selectlivetab"></u-tabs>
-			</view>
-			<scroll-view :scroll-x="true">
-				<view class="article-box">
-					<view class="article" @click="navTo('/pages_live/addForm')">
-						<view class="image-box">
-							<image class="bg" mode="aspectFill" src="@/static/image/bg_invitecard.png"></image>
-							<view class="views">
-								<image mode="aspectFill" src="@/static/image/icon_goon.png"></image>
-								<view class="status">进行中</view>
-							</view>
-						</view>
-						<view class="article-title-box">
-							<view class="article-title one-t">王医生学术直播</view>
-							<view class="name-title one-t">
-								<image mode="aspectFill" src="@/static/image/icon_doctor.png"></image>
-								<view class="one-t">
-									王小明-副主任医师/副主任副主任
-								</view>
-							</view>
-							<view class="position-title">
-								<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>
-								<view class="one-t">
-									北京人民医院
-								</view>
-							</view>
-						</view>
-					</view>
-					<view class="article" @click="navTo('/pages_index/index/doctorArticleDetails?articleId=')">
-						<view class="image-box">
-							<image class="bg" mode="aspectFill" src="@/static/image/bg_invitecard.png"></image>
-							<view class="views">
-								<image mode="aspectFill" src="@/static/image/icon_tobestart.png"></image>
-								<view class="status">待开始</view>
-							</view>
-						</view>
-						<view class="article-title-box">
-							<view class="article-title one-t">王医生学术直播</view>
-							<view class="name-title one-t">
-								<image mode="aspectFill" src="@/static/image/icon_doctor.png"></image>
-								<view class="one-t">
-									王小明-副主任医师/副主任副主任
-								</view>
-							</view>
-							<view class="position-title">
-								<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>
-								<view class="one-t">
-									北京人民医院
-								</view>
-							</view>
-						</view>
-					</view>
-					<view class="article" @click="navTo('/pages_index/index/doctorArticleDetails?articleId=')">
-						<view class="image-box">
-							<image class="bg" mode="aspectFill" src="@/static/image/bg_invitecard.png"></image>
-							<view class="views">
-								<image mode="aspectFill" src="@/static/image/icon_goon.png"></image>
-								<view class="status">进行中</view>
-							</view>
-						</view>
-						<view class="article-title-box">
-							<view class="article-title one-t">王医生学术直播</view>
-							<view class="name-title one-t">
-								<image mode="aspectFill" src="@/static/image/icon_doctor.png"></image>
-								<view class="one-t">
-									王小明-副主任医师/副主任副主任
-								</view>
-							</view>
-							<view class="position-title">
-								<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>
-								<view class="one-t">
-									北京人民医院
-								</view>
-							</view>
-						</view>
-					</view>
-				</view>
-
-			</scroll-view>
-		</view>
-
-
-
-		<view class="doctor-articles">
-			<view class="box-title">
-				<view class="title-l">空中课堂</view>
-				<view class="title-m" @click="navTo('/pages_live/lesson')">查看更多
-					<image src="@/static/image/icon_more.png" mode=""></image>
-				</view>
-			</view>
-			<view class="title-box">
-				<u-tabs :list="livetabList"
-					:activeStyle="{width:'136rpx',height:'56rpx',lineHeight:'56rpx',textAlign:'center',fontWeight: '500',color: '#fff',background: 'linear-gradient( 90deg, #61A3FF 0%, #207DFF 100%)',borderRadius:'98rpx'}"
-					:inactiveStyle="{width:'136rpx',height:'56rpx',lineHeight:'56rpx',fontWeight: '400',color: '#666666',background:'#fff',borderRadius:'98rpx',textAlign:'center'}"
-					lineColor="#F7F8FA" @click="selectlivetab"></u-tabs>
-			</view>
-			<scroll-view :scroll-x="true">
-				<view class="article-box">
-					<view class="article" @click="navTo('/pages_live/lessonDetail?articleId=87')">
-						<view class="image-box">
-							<image class="bg" mode="aspectFill" src="@/static/image/bg_invitecard.png"></image>
-							<view class="zhibo">
-								<image mode="aspectFill" src="@/static/image/icon_video.png"></image>
-							</view>
-						</view>
-						<view class="article-title-box">
-							<view class="article-title one-t">王医生学术直播</view>
-							<view class="name-title one-t">
-								<image mode="aspectFill" src="@/static/image/icon_doctor.png"></image>
-								<view class="one-t">
-									王小明-副主任医师/副主任副主任
-								</view>
-							</view>
-							<view class="position-title">
-								<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>
-								<view class="one-t">
-									北京人民医院
-								</view>
-							</view>
-						</view>
-					</view>
-					<view class="article" @click="navTo('/pages_index/index/doctorArticleDetails?articleId=')">
-						<view class="image-box">
-							<image class="bg" mode="aspectFill" src="@/static/image/bg_invitecard.png"></image>
-							<view class="zhibo">
-								<image mode="aspectFill" src="@/static/image/icon_video.png"></image>
-							</view>
-						</view>
-						<view class="article-title-box">
-							<view class="article-title one-t">王医生学术直播</view>
-							<view class="name-title one-t">
-								<image mode="aspectFill" src="@/static/image/icon_doctor.png"></image>
-								<view class="one-t">
-									王小明-副主任医师/副主任副主任
-								</view>
-							</view>
-							<view class="position-title">
-								<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>
-								<view class="one-t">
-									北京人民医院
-								</view>
-							</view>
-						</view>
-					</view>
-					<view class="article" @click="navTo('/pages_index/index/doctorArticleDetails?articleId=')">
-						<view class="image-box">
-							<image class="bg" mode="aspectFill" src="@/static/image/bg_invitecard.png"></image>
-							<view class="zhibo">
-								<image mode="aspectFill" src="@/static/image/icon_video.png"></image>
-							</view>
-						</view>
-						<view class="article-title-box">
-							<view class="article-title one-t">王医生学术直播</view>
-							<view class="name-title one-t">
-								<image mode="aspectFill" src="@/static/image/icon_doctor.png"></image>
-								<view class="one-t">
-									王小明-副主任医师/副主任副主任
-								</view>
-							</view>
-							<view class="position-title">
-								<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>
-								<view class="one-t">
-									北京人民医院
-								</view>
-							</view>
-						</view>
-					</view>
-				</view>
-
-			</scroll-view>
-		</view>
-	</view>
-</template>
-
-<script>
-	// import zModal from '@/components/z-modal/z-modal.vue'
-	import {
-		getStoreActivity
-	} from '@/api/activity.js'
-	import {
-		getDepartmentList
-	} from '@/api/doctorOrder.js'
-	import {
-		getMenu,
-		getCanvas,
-		getIndexData,
-		getTuiDoctor,
-		getTuiArticle,
-		getTuiDoctorOrder,
-		getCartCount
-	} from '@/api/index'
-	import {
-		getDoctorArticleList
-	} from '@/api/doctorArticle.js'
-	import {
-		getArticleList
-	} from '@/api/article.js'
-	import {
-		getStoreConfig
-	} from '@/api/common'
-	import {
-		getUserInfo,
-		bindPromoter
-	} from '@/api/user'
-	export default {
-		data() {
-			return {
-				menuButtonInfo: {}, // 胶囊按钮布局信息
-				btnGroup: [{
-					text: '取消',
-					color: '#FFFFFF',
-					bgColor: '#999999',
-					width: '150rpx',
-					height: '80rpx',
-					shape: 'fillet',
-					eventName: 'cancle'
-				}, {
-					text: '确定',
-					color: '#FFFFFF',
-					bgColor: '#0bb3f2',
-					width: '150rpx',
-					height: '80rpx',
-					shape: 'fillet',
-					eventName: 'sure'
-				}],
-				tuiModalControl: false,
-				activity: null,
-				activityShow: false,
-				newProductList: [],
-				hotProductList: [],
-				tuiProductList: [],
-				menus: [],
-				canvas: [],
-				allDoctorTitle: "全部医生",
-				topLen: 0,
-				deptId: 0,
-				depts: [],
-				docTab: 1,
-				top: 0,
-				cartCount: 0,
-				doctorOrderList: [],
-				orderType: 0,
-				cateId: null,
-				articleList: [],
-				advList: [],
-				doctorList: [],
-				articleCateList: [],
-				doctocArticles: [], //养生讲堂
-				articles: [], //养生干货
-				livetabList: [{
-						name: '养生讲堂'
-					},
-					{
-						name: '健康管理'
-					},
-					{
-						name: '养生滋补'
-					}
-				], //养生讲堂TAB
-				articletabList: [{
-						name: '健康案例分享'
-					},
-					{
-						name: '药事服务'
-					}
-				], //文章TAB
-				// 状态栏的高度
-				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
-				// tabBg: tabBg, // tab切换背景
-				// 问诊案例类型
-				orderTypes: [{
-					name: '全部',
-					id: 0,
-				}, {
-					name: '图文',
-					id: 1,
-				}, {
-					name: '语音',
-					id: 2,
-				}],
-				// 限时消息是否显示
-				messageShow: true,
-				yangshengs: [{
-						id: "1",
-						title: "药膳食疗",
-						page: "/pages_index/index/medicatedFoodList",
-						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/3cfbd47911cf4753aa9497eac500728d.png"
-					},
-					{
-						id: "2",
-						title: "穴位保健",
-						page: "/pages_index/index/vesselList",
-						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/e93536a9dc1a4f8ca09545097b12fdea.png"
-					},
-					{
-						id: "3",
-						title: "特供中药",
-						page: "/pages_index/index/questionsList",
-						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/e896972bd56f4e358188af36f2c5af42.png"
-					},
-					{
-						id: "4",
-						title: "营养特医",
-						page: "/pages_index/index/diseaseList",
-						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/d6f1851cccae414b8baf2ba07782f91b.png"
-					},
-					{
-						id: "5",
-						title: "古方精方",
-						page: "/pages_index/index/chineseMedicineList",
-						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/ff43572d0d004285b5a3b0ef2663c471.png"
-					},
-					{
-						id: "6",
-						title: "健康案例",
-						page: "/pages_index/index/famousPrescribeList",
-						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/45db770e58c34963b0d2ba24a958b617.png"
-					},
-					{
-						id: "7",
-						title: "中西药房",
-						page: "/pages_index/index/doctorArticleList",
-						icon: "https://fs-1319721001.cos.ap-chongqing.myqcloud.com/fs/20240229/e793942797b24035b51f94d894bdfa0b.png"
-					},
-					{
-						id: "8",
-						title: "更多",
-						page: "",
-						icon: "/static/images/ysyd_more_icon.png"
-					}
-				],
-			}
-			this.getStoreActivity();
-		},
-		onLoad(option) {
-			this.getMenuButtonInfo(); // 初始化获取胶囊信息
-			if (option.userCode != null) {
-				uni.setStorageSync('userCode', option.userCode);
-				if (this.utils.checkLoginState()) {
-					this.getUserInfo();
-				}
-			}
-			if (option.hasOwnProperty('q') && option.q) {
-				// 通过下面这步解码,可以拿到url的值
-				const url = decodeURIComponent(option.q)
-				this.url = url;
-				// // 对url中携带的参数提取处理
-				const obj = this.utils.urlToObj(url)
-				uni.setStorageSync('userCode', obj.userCode);
-				if (this.utils.checkLoginState()) {
-					this.getUserInfo();
-				}
-			}
-			this.getStoreActivity()
-		},
-		// 暂停所有音频(一般用于页面切换时停止正在播放的音频)
-		onUnload() { //普通页面在 onUnload 生命周期中执行
-			uni.$emit('stop')
-		},
-		onHide() { //tabBar页面在onHide生命周期中执行
-			uni.$emit('stop')
-		},
-		onPageScroll(e) {
-			//console.log(e)
-			this.top = e.scrollTop;
-		},
-		mounted() {
-			//this.getDepartmentList();
-		},
-		onShareAppMessage(res) {
-			return {
-				title: '企业端-您的专属健康解决方案',
-				path: `/pages/common/launch`,
-				imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
-			}
-		},
-		onReachBottom() {
-			console.log("onReachBottom")
-			// this.$refs.tuiProduct.getTuiProducts();
-		},
-		//分享到朋友圈
-		onShareTimeline(res) {
-			return {
-				title: '企业端-您的专属健康解决方案',
-				query: '', //页面参数
-				imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
-			}
-		},
-		computed: {
-			// 计算属性的 getter
-			bgColor: function() {
-				var top = this.top / 30;
-				return 'rgba(202, 230, 255,' + top + ')';
-			},
-		},
-		onShow() {
-			this.getMenu();
-			this.getIndexData()
-			//this.getTuiDoctorOrder();
-			// console.log(uni.getStorageSync('isLocation'))
-			// if(uni.getStorageSync('isLocation')==""){
-			// 	this.getLocation();
-			// }
-			if (this.utils.checkLoginState()) {
-				this.getCartCount();
-			}
-			this.getStoreConfig();
-			//this.getTuiDoctor()
-			// this.getCanvas();
-			this.getDoctorArticleList();
-			this.getArticleList();
-		},
-		methods: {
-			getUserInfo() {
-				getUserInfo().then(
-					res => {
-						if (res.code == 200) {
-							if (res.user != null) {
-								if (res.user.isPromoter == null || res.user.isPromoter == 0) {
-									this.tuiModalControl = true
-								}
-							}
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			// 获取胶囊按钮布局参数
-			getMenuButtonInfo() {
-				// 微信小程序API(Uniapp可直接用uni.getMenuButtonBoundingClientRect)
-				const menuBtn = uni.getMenuButtonBoundingClientRect();
-				if (menuBtn) {
-
-					this.menuButtonInfo = {
-						top: menuBtn.top + 'px', // 胶囊顶部距离
-						height: menuBtn.height + 'px', // 胶囊高度
-						centerY: (menuBtn.top + menuBtn.height / 2) + 'px', // 胶囊垂直居中Y坐标
-						right: menuBtn.right + 'px' // 胶囊右侧距离
-					};
-				}
-			},
-			cancleTui(e) {
-				this.tuiModalControl = false
-			},
-			submitTui(e) {
-				console.log(e)
-				// uni.navigateTo({
-				// 	url: '/pages_company/distribution'
-				// })
-				if (e.inputText == null || e.inputText == "") {
-					uni.showToast({
-						icon: 'none',
-						title: "请输入邀请码",
-					});
-					return;
-				}
-				var data = {
-					userCode: e.inputText
-				};
-				bindPromoter(data).then(
-					res => {
-						if (res.code == 200) {
-							uni.showToast({
-								icon: 'none',
-								title: res.msg,
-							});
-							this.tuiModalControl = false
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: res.msg,
-							});
-						}
-					},
-					rej => {}
-				);
-
-			},
-			bindload: function(detail) {},
-			binderror: function(detail) {},
-			closeActivity() {
-				this.activityShow = false;
-				// uni.setStorageSync(this.activity.activityId,null);
-			},
-			getStoreActivity() {
-				let data = {}
-				getStoreActivity(data).then(res => {
-					this.activity = res.activity;
-					if (this.activity != null) {
-						// if(uni.getStorageSync(this.activity.activityId)!=null)
-						// {
-						// 	uni.setStorageSync(this.activity.activityId,1);
-						// 	this.activityShow=true;
-						// }
-						// else{
-						// 	this.activityShow=false;
-						// }
-						this.activityShow = true;
-					} else {
-						this.activityShow = false;
-					}
-				})
-			},
-			showActivity() {
-				this.activityShow = false;
-				uni.navigateTo({
-					url: '/pages_shopping/shopping/activityDetails?activityId=' + this.activity.activityId
-				})
-			},
-			menuClick(item) {
-				if (item.linkType == 1) {
-					if (item.linkUrl == "/pages/shopping/index") {
-						uni.switchTab({
-							url: item.linkUrl
-						})
-					} else if (item.linkUrl == "/pages/healthy/index") {
-						uni.switchTab({
-							url: item.linkUrl
-						})
-					} else {
-
-						uni.navigateTo({
-							url: item.linkUrl
-						})
-					}
-
-				} else if (item.linkType == 0) {
-					uni.showToast({
-						icon: 'none',
-						title: "开发中...",
-					});
-				}
-			},
-			goDev() {
-				uni.showToast({
-					icon: 'none',
-					title: "开发中...",
-				});
-			},
-			//养生讲堂等直播tab
-			selectlivetab(item) {
-				// console.log('item', item);
-			},
-			// 健康案例分享等文章tab
-			selectarticletab(item) {
-				// console.log('item', item);
-			},
-			handleAdvClick(item) {
-				console.log(item);
-				if (item.showType == 1) {
-					uni.setStorageSync('url', item.advUrl);
-					uni.navigateTo({
-						url: "h5"
-					})
-				} else if (item.showType == 2) {
-					uni.navigateTo({
-						url: item.advUrl
-					})
-				} else if (item.showType == 3) {
-					uni.setStorageSync('content', item.content);
-					uni.navigateTo({
-						url: "content"
-					})
-				}
-
-			},
-			deptChange(item) {
-				this.deptId = item.departmentId;
-				this.getTuiDoctor();
-			},
-			getMenu() {
-				getMenu().then(res => {
-					console.log(res)
-					if (res.code == 200) {
-						this.menus = res.data
-					} else {
-
-					}
-				});
-			},
-			getCanvas() {
-				getCanvas().then(res => {
-					if (res.code == 200) {
-						console.log(res.data)
-						this.canvas = JSON.parse(res.data.json)
-					}
-				});
-			},
-			getDepartmentList() {
-				this.depts = [];
-				getDepartmentList().then(res => {
-					if (res.code == 200) {
-						var allDept = {
-							departmentId: 0,
-							departmentName: "全部"
-						}
-						this.depts.push(allDept);
-						this.depts = this.depts.concat(res.data);
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: "请求失败",
-						});
-					}
-				});
-			},
-			getTuiDoctor() {
-				let data = {
-					departmentId: this.deptId,
-					doctorType: this.docTab
-				};
-				getTuiDoctor(data).then(
-					res => {
-						if (res.code == 200) {
-							this.doctorList = res.data;
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			docTabChange(val) {
-				if (val == 1) {
-					this.allDoctorTitle = "全部医师"
-				}
-				if (val == 2) {
-					this.allDoctorTitle = "全部药师"
-				}
-				if (val == 3) {
-					this.allDoctorTitle = "全部营养师"
-				}
-				this.docTab = val;
-				this.getTuiDoctor();
-			},
-			showImg(urls) {
-				var imgArr = urls.split(',');
-				//预览图片
-				uni.previewImage({
-					urls: imgArr,
-					current: imgArr[0]
-				});
-			},
-			getStoreConfig() {
-				getStoreConfig().then(
-					res => {
-						if (res.code == 200) {
-							uni.setStorageSync('config', JSON.stringify(res.data));
-						}
-					},
-					rej => {}
-				);
-
-			},
-			goAuthUrl(url) {
-				this.utils.isLogin().then(res => {
-					if (res) {
-						uni.navigateTo({
-							url: url
-						})
-					}
-				})
-			},
-			// 跳转页面
-			navTo(url) {
-				uni.navigateTo({
-					url: url
-				})
-			},
-			getLocation() {
-				var that = this;
-				uni.authorize({
-					scope: 'scope.userLocation',
-					success() {
-						uni.getLocation({
-							type: 'gcj02', //腾讯地图使用gcj02获取位置坐标
-							success: function(res) {
-								uni.setStorageSync('isLocation', 1);
-								uni.setStorageSync('lng', res.longitude);
-								uni.setStorageSync('lat', res.latitude);
-							},
-						})
-					},
-					fail(err) {
-						console.log(err)
-					}
-				})
-			},
-			getIndexData() {
-				let data = {};
-				getIndexData(data).then(
-					res => {
-						if (res.code == 200) {
-							this.advList = res.data.advList;
-							this.articleCateList = res.data.articleCateList;
-							if (this.articleCateList != null && this.articleCateList.length > 0) {
-								this.cateId = this.articleCateList[0].cateId;
-								this.getTuiArticle()
-							}
-							this.tuiProductList = res.data.tuiProductList
-							this.newProductList = res.data.newProductList
-							this.hotProductList = res.data.hotProductList
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			getCartCount() {
-				this.utils.isLogin().then(res => {
-					if (res) {
-						getCartCount().then(
-							cartRes => {
-								if (cartRes.code == 200) {
-									this.cartCount = cartRes.data;
-								}
-							},
-							rej => {}
-						);
-					}
-				})
-			},
-			getTuiArticle() {
-				let data = {
-					cateId: this.cateId
-				};
-				getTuiArticle(data).then(
-					res => {
-						if (res.code == 200) {
-							this.articleList = res.data;
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			getTuiDoctorOrder() {
-				let data = {
-					orderType: this.orderType
-				};
-				getTuiDoctorOrder(data).then(
-					res => {
-						if (res.code == 200) {
-							this.doctorOrderList = res.data;
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			showArticle(item) {
-				uni.navigateTo({
-					url: '../healthy/detail?articleId=' + item.articleId
-				})
-			},
-			showProduct(item) {
-				uni.navigateTo({
-					url: '../shopping/productDetails?productId=' + item.productId
-				})
-			},
-			// 顶部搜索
-			toSearch() {
-				uni.navigateTo({
-					url: '/pages_live/search'
-				})
-			},
-			// 健康知识选中
-			articleCateChange(item) {
-				this.cateId = item.cateId;
-				this.getTuiArticle();
-			},
-			// 问诊案例选中
-			orderTypeChange(item) {
-				this.orderType = item.id;
-				console.log(this.orderType)
-				this.getTuiDoctorOrder();
-			},
-			// 关闭限时消息
-			closeMsg() {
-				this.messageShow = false
-			},
-			// 查看全部
-			viewAll(url) {
-				uni.navigateTo({
-					url: '/pages/home/' + url,
-				});
-			},
-			shopDoctor(item) {
-				console.log(item);
-				uni.navigateTo({
-					url: "/pages_doctor/doctorDetail?doctorId=" + item.doctorId
-				})
-			},
-			switchTo(url) {
-				uni.switchTab({
-					url: url
-				})
-				return
-			},
-			yangshengClick(item) {
-				if (item.page == "") {
-					uni.showToast({
-						icon: "none",
-						title: '暂无更多'
-					})
-					return;
-				}
-				uni.navigateTo({
-					url: item.page
-				})
-			},
-			// 在线问诊
-			openIm() {
-				uni.navigateTo({
-					url: '/pages_doctor/doctorOrderIM?orderId=10'
-				})
-			},
-			getDoctorArticleList() {
-				//联网加载数据
-				var that = this;
-				var data = {
-					pageNum: 1,
-					pageSize: 10
-				};
-				getDoctorArticleList(data).then(res => {
-					if (res.code == 200) {
-						this.doctocArticles = res.data.list;
-					}
-				});
-			},
-			getArticleList() {
-				//联网加载数据
-				var that = this;
-				var data = {
-					isTui: 1,
-					pageNum: 1,
-					pageSize: 10,
-				};
-				getArticleList(data).then(res => {
-					if (res.code == 200) {
-						this.articles = res.data.list;
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: "请求失败",
-						});
-					}
-				});
-			},
-		}
-	}
-</script>
-
-<style lang="scss">
-	.ellipsis1 {
-		overflow: hidden;
-		text-overflow: ellipsis;
-		white-space: nowrap;
-	}
-
-	.fixed-top-box {
-		width: 100%;
-		position: fixed;
-		top: 0;
-		left: 0;
-		z-index: 1000;
-		transition: all 0.5s;
-		background-color: #0bb3f2;
-
-		&.show-back {
-			// background: linear-gradient(135deg, #66b2ef 0%, #0bb3f2 100%);
-		}
-
-		.status_bar {
-
-			width: 100%;
-		}
-	}
-
-	.content {
-		width: 100%;
-		background: #F7F8FA;
-		position: relative;
-		padding-bottom: 28rpx;
-
-		.bg {
-			width: 100%;
-			// height: 380rpx;
-			position: absolute;
-			top: 0;
-			left: 0;
-		}
-
-		.top-inner {
-			width: 100%;
-			position: absolute;
-			top: 0;
-			left: 0;
-			z-index: 5;
-
-			.top-title {
-				height: 88upx;
-				line-height: 88upx;
-				display: flex;
-				align-items: center;
-				justify-content: flex-start;
-
-				.name {
-					font-size: 42upx;
-					font-family: Source Han Sans CN;
-					font-weight: bold;
-					color: #FFFFFF;
-					padding-left: 41upx;
-				}
-
-				.dot {
-					margin: 0upx 10upx;
-					font-size: 28upx;
-					color: #FFFFFF;
-					opacity: 0.5;
-				}
-
-				.sub-name {
-					font-size: 30upx;
-					font-family: Source Han Sans CN;
-					color: #FFFFFF;
-				}
-
-
-			}
-
-			.func-cont {
-				box-sizing: border-box;
-				display: flex;
-				align-items: center;
-				padding: 0 20upx;
-
-				.search-cont {
-					box-sizing: border-box;
-					display: flex;
-					align-items: center;
-					justify-content: space-between;
-					width: 500rpx;
-					height: 64rpx;
-					background: rgba(255, 255, 255, 0.6);
-					border-radius: 38rpx 38rpx 38rpx 38rpx;
-					border: 2rpx solid #388BFF;
-					padding-left: 30rpx;
-					padding-right: 8rpx;
-
-					.icon-search {
-						width: 32rpx;
-						height: 32rpx;
-						margin-right: 14rpx;
-					}
-
-					input {
-						height: 64rpx;
-						line-height: 64rpx;
-						// flex: 1;
-						font-family: PingFang SC, PingFang SC;
-						font-weight: 400;
-						font-size: 28rpx;
-						color: #999999;
-					}
-
-					.btn {
-						width: 88rpx;
-						height: 48rpx;
-						background: #388BFF;
-						border-radius: 40rpx 40rpx 40rpx 40rpx;
-						font-family: PingFang SC, PingFang SC;
-						font-weight: 400;
-						font-size: 28rpx;
-						color: #FFFFFF;
-						display: flex;
-						align-items: center;
-						justify-content: center;
-					}
-				}
-
-				v-deep.uni-badge {
-					border: none;
-					background-color: #FF3636;
-					font-family: Roboto;
-				}
-
-				.img-item {
-					width: 44upx;
-					height: 44upx;
-					margin-left: 30upx;
-
-					image {
-						width: 100%;
-						height: 100%;
-					}
-				}
-			}
-
-			.tips {
-				margin: 0upx 20rpx 30rpx;
-				height: 40upx;
-				line-height: 40upx;
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-
-				.left {
-					font-size: 30upx;
-					color: #FFFFFF;
-				}
-
-				.right {
-					padding: 5upx 20rpx;
-					font-size: 24upx;
-					color: #FFFFFF;
-					background-color: #0bb3f2;
-					border-radius: 50rpx;
-				}
-			}
-		}
-
-		.banner-box {
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			width: 100%;
-
-			.inner {
-				width: 702rpx;
-				height: 280rpx;
-				border-radius: 16rpx;
-				overflow: hidden;
-
-				.swiper,
-				.swiper-item,
-				.swiper-item image {
-					width: 702rpx;
-					height: 280rpx;
-				}
-
-			}
-		}
-
-		.menu-content {
-			border-radius: 16rpx 16rpx 16rpx 16rpx;
-			margin: 20rpx 24rpx;
-			overflow: hidden;
-			padding: 30upx 0;
-			background-color: #ffffff;
-		}
-
-		.menu-box {
-			display: flex;
-			align-items: center;
-			background-color: #FFFFFF;
-			padding-top: 20rpx;
-			border-radius: 12rpx;
-		}
-
-		.online-inquiry {
-			box-sizing: border-box;
-			width: 100%;
-			height: 170upx;
-			padding: 0 20upx;
-			margin-top: 20rpx;
-			// background: linear-gradient(180deg, rgba(255, 255, 255, 0.38) 62%, rgba(255, 255, 255, 0) 100%);
-			display: flex;
-			justify-content: space-between;
-
-			.item {
-				// width: 46.13%;
-				width: 346upx;
-				height: 190upx;
-				position: relative;
-
-				.bg-img,
-				.inner {
-					width: 100%;
-					height: 100%;
-					position: absolute;
-					top: 0;
-					left: 0;
-					z-index: 1;
-					border-radius: 12rpx;
-				}
-
-				.inner {
-					box-sizing: border-box;
-					z-index: 2;
-					display: flex;
-					flex-direction: column;
-					justify-content: center;
-					padding-left: 32upx;
-
-					.title {
-						font-size: 32upx;
-						line-height: 1;
-						font-family: PingFang SC;
-						font-weight: 500;
-						color: #111111;
-						margin-bottom: 20upx;
-						font-weight: bold;
-					}
-
-					.sub-title {
-						font-size: 24upx;
-						font-family: PingFang SC;
-						font-weight: 500;
-						color: #898E91;
-					}
-
-					image {
-						width: 80upx;
-						height: 90upx;
-						position: absolute;
-						right: 7upx;
-						bottom: 7upx;
-					}
-				}
-			}
-		}
-
-		.index-cont {
-			box-sizing: border-box;
-			// padding: 0 20upx 120rpx;
-			padding: 0 24upx 20upx;
-
-			.pub-item {
-				background: #FFFFFF;
-				border-radius: 16upx;
-				margin-bottom: 20upx;
-
-				.tabs {
-					width: 100%;
-					display: flex;
-					align-items: center;
-					justify-content: flex-start;
-					height: 110rpx;
-					background-color: #F0F3F4;
-
-					.tab {
-						height: 110rpx;
-						display: flex;
-						align-items: center;
-						justify-content: center;
-						position: relative;
-						flex: 1;
-
-						.img {
-							z-index: 1;
-							position: absolute;
-							top: 0rpx;
-							left: 0rpx;
-							width: 100%;
-							height: 100%;
-						}
-
-						.inner {
-							z-index: 2;
-
-							.title {
-								font-size: 32upx;
-								font-family: PingFang SC;
-								font-weight: bold;
-								color: #666666;
-							}
-
-							.active {
-								color: #0bb3f2;
-							}
-						}
-
-					}
-
-
-				}
-
-				.pub-title-box {
-					box-sizing: border-box;
-					padding: 36upx 30upx;
-					display: flex;
-					align-items: center;
-					justify-content: space-between;
-
-					.left {
-						font-size: 32upx;
-						line-height: 1;
-						font-family: PingFang SC;
-						font-weight: bold;
-						color: #111111;
-					}
-
-					.right {
-						display: flex;
-						align-items: center;
-						justify-content: center;
-
-						.text {
-							font-size: 24rpx;
-							line-height: 1;
-							font-family: PingFang SC;
-							font-weight: 500;
-							color: #999999;
-							margin-right: 10upx;
-						}
-
-						image {
-							width: 14upx;
-							height: 24upx;
-						}
-					}
-
-				}
-
-				.doc-tab-box {
-					padding: 14rpx 30rpx 0rpx 30rpx;
-					position: relative;
-
-					.tab-inner {
-						padding: 14upx 0 30upx;
-						display: flex;
-						overflow-x: auto;
-					}
-
-					.item {
-						font-size: 28upx;
-						white-space: nowrap;
-						line-height: 1;
-						font-family: PingFang SC;
-						font-weight: 500;
-						color: #666666;
-						margin-right: 40upx;
-						position: relative;
-
-						&:last-child {
-							margin-right: 0;
-						}
-
-						&.active {
-							font-weight: bold;
-							color: #333333;
-						}
-
-						&.cases {
-							margin-right: 60upx;
-						}
-
-						.text {
-							position: relative;
-							z-index: 1;
-						}
-
-						.tab-bg {
-							width: 72upx;
-							height: 28upx;
-							position: absolute;
-							top: 17upx;
-							left: 50%;
-							transform: translateX(-36upx);
-							z-index: -1;
-						}
-					}
-
-					.right-mask {
-						width: 56upx;
-						height: 34upx;
-						position: absolute;
-						top: 25upx;
-						right: 0upx;
-						z-index: 1;
-					}
-				}
-
-				.doc-list {
-					padding: 20upx;
-
-					.item {
-						box-sizing: border-box;
-						background: #FFFFFF;
-						// border-radius: 16upx;
-						display: flex;
-						border-bottom: 1px solid #F0F0F0;
-						margin-bottom: 30rpx;
-
-						.head-box {
-							width: 120upx;
-							height: 120upx;
-							background: #EDF1F4;
-							border-radius: 50%;
-							overflow: hidden;
-							margin-right: 30upx;
-
-							image {
-								width: 100%;
-								height: 100%;
-							}
-						}
-
-						.info {
-							width: calc(100% - 150upx);
-
-							.top {
-								display: flex;
-								align-items: center;
-								font-family: PingFang SC;
-								line-height: 1;
-
-								.name {
-									font-size: 34upx;
-									font-weight: bold;
-									color: #111111;
-								}
-
-								.line {
-									width: 1px;
-									height: 26upx;
-									background: #DDDDDD;
-									margin: 0 20upx;
-								}
-
-								.other {
-									font-size: 28upx;
-									font-weight: 500;
-									color: #333333;
-								}
-							}
-
-							.unit-box {
-								display: flex;
-								margin-top: 24upx;
-
-								.level {
-									padding: 0 10upx;
-									height: 30upx;
-									line-height: 30upx;
-									font-size: 22upx;
-									font-family: PingFang SC;
-									font-weight: 500;
-									color: #FFFFFF;
-									background: #0bb3f2;
-									border-radius: 10upx 4upx 10upx 4upx;
-									margin-right: 12upx;
-								}
-
-								.name {
-									font-size: 28upx;
-									font-family: PingFang SC;
-									font-weight: 500;
-									color: #333333;
-									line-height: 30upx;
-								}
-							}
-
-							.expertise {
-								font-size: 26upx;
-								font-family: PingFang SC;
-								font-weight: 500;
-								color: #666666;
-								line-height: 42upx;
-								margin: 22upx 0 26upx;
-							}
-
-							.rate-box {
-								display: flex;
-								align-items: center;
-
-								.star {
-									display: flex;
-									align-items: center;
-
-									image {
-										width: 22upx;
-										height: 22upx;
-										margin-right: 10upx;
-									}
-
-									text {
-										font-size: 26upx;
-										font-family: PingFang SC;
-										font-weight: bold;
-										color: #CEA764;
-										line-height: 1;
-									}
-								}
-
-								.line {
-									width: 1px;
-									height: 20upx;
-									background: #DDDDDD;
-									margin: 0 20upx;
-								}
-
-								.num-box {
-									display: flex;
-									align-items: center;
-									font-family: PingFang SC;
-
-									.label {
-										font-size: 24upx;
-										font-weight: 500;
-										color: #999999;
-										line-height: 1;
-										margin-right: 7px;
-									}
-
-									.num {
-										font-size: 26upx;
-										font-weight: bold;
-										color: #CEA764;
-										line-height: 1;
-									}
-								}
-							}
-
-							.price-box {
-								display: flex;
-								align-items: center;
-								margin-top: 38upx;
-
-								.btn-item {
-									display: flex;
-									align-items: center;
-									justify-content: center;
-									width: 164upx;
-									height: 56upx;
-									line-height: 56upx;
-									border: 1px solid rgba(43, 199, 185, 0.5);
-									border-radius: 28upx;
-									font-family: PingFang SC;
-									margin-right: 30upx;
-
-									&:last-child {
-										margin-right: 0;
-									}
-
-									.label {
-										font-size: 26upx;
-										font-weight: 500;
-										color: #0bb3f2;
-										margin-right: 5upx;
-									}
-
-									.num {
-										font-size: 28upx;
-										font-weight: bold;
-										color: #0bb3f2;
-									}
-								}
-							}
-						}
-					}
-
-					.item:last-child {
-						border-bottom: none;
-						margin-bottom: 0rpx;
-					}
-
-					.bottom-title {
-						height: 50rpx;
-						display: flex;
-						align-items: center;
-						justify-content: center;
-						font-size: 26rpx;
-						font-family: PingFang SC;
-						font-weight: bold;
-						color: #0bb3f2;
-
-						image {
-							margin-left: 8rpx;
-							width: 14rpx;
-							height: 24rpx;
-						}
-					}
-				}
-
-				// 医师团队
-				.doc-cont {
-					box-sizing: border-box;
-					padding: 0 30upx;
-
-					.inner {
-						padding: 4upx 0 40upx;
-						display: flex;
-						overflow-x: auto;
-					}
-
-					.item {
-						display: flex;
-						align-items: center;
-						flex-direction: column;
-						margin-right: 40upx;
-
-						&:last-child {
-							margin-right: 0;
-						}
-
-						.head-box {
-							width: 120upx;
-							height: 120upx;
-							background: #F2F5F9;
-							border-radius: 50%;
-							margin-bottom: 20upx;
-							overflow: hidden;
-
-							image {
-								width: 100%;
-								height: 100%;
-							}
-						}
-
-						.name {
-							max-width: 120upx;
-							font-size: 28upx;
-							line-height: 1;
-							font-family: PingFang SC;
-							font-weight: 500;
-							color: #111111;
-							margin-bottom: 16upx;
-							text-align: center;
-						}
-
-						.position {
-							max-width: 120upx;
-							font-size: 24upx;
-							line-height: 1;
-							font-family: PingFang SC;
-							font-weight: 500;
-							color: #999999;
-							text-align: center;
-						}
-					}
-				}
-
-				.inner {
-					padding: 0 30upx;
-				}
-
-				// 健康知识
-				.pub-tab-box {
-					position: relative;
-
-					.tab-inner {
-						padding: 14upx 0 30upx;
-						display: flex;
-						overflow-x: auto;
-					}
-
-					.item {
-						font-size: 28upx;
-						white-space: nowrap;
-						line-height: 1;
-						font-family: PingFang SC;
-						font-weight: 500;
-						color: #666666;
-						margin-right: 40upx;
-						position: relative;
-
-						&:last-child {
-							margin-right: 0;
-						}
-
-						&.active {
-							font-weight: bold;
-							color: #333333;
-						}
-
-						&.cases {
-							margin-right: 60upx;
-						}
-
-						.text {
-							position: relative;
-							z-index: 1;
-						}
-
-						.tab-bg {
-							width: 72upx;
-							height: 28upx;
-							position: absolute;
-							top: 17upx;
-							left: 50%;
-							transform: translateX(-36upx);
-							z-index: -1;
-						}
-					}
-
-					.right-mask {
-						width: 56upx;
-						height: 34upx;
-						position: absolute;
-						top: 14upx;
-						right: -30upx;
-						z-index: 1;
-					}
-				}
-
-				.know-list {
-					padding-right: 10upx;
-
-					.item {
-						padding: 30upx 0;
-						display: flex;
-						align-items: center;
-						justify-content: space-between;
-						border-bottom: 1px solid #F0F0F0;
-
-						&:last-child {
-							border-bottom: none;
-						}
-
-						.left {
-							flex: 1;
-							padding-right: 40upx;
-							height: 190upx;
-							display: flex;
-							flex-direction: column;
-							justify-content: space-between;
-
-							.title {
-								font-size: 32upx;
-								font-family: PingFang SC;
-								font-weight: 500;
-								color: #111111;
-								line-height: 48upx;
-							}
-
-							.info-box {
-								width: 100%;
-								display: flex;
-								align-items: center;
-								justify-content: space-between;
-
-								.readers {
-									display: flex;
-									align-items: center;
-
-									.head-box {
-										margin-right: 27upx;
-										display: flex;
-										align-items: center;
-
-										.head {
-											width: 48upx;
-											height: 48upx;
-											border-radius: 50%;
-											overflow: hidden;
-											box-shadow: 0 0 0 1px #fff;
-											margin-right: -10upx;
-
-											image {
-												width: 100%;
-												height: 100%;
-											}
-										}
-									}
-
-									.readings {
-										display: flex;
-										align-items: center;
-
-										.eye {
-											width: 26upx;
-											height: 20upx;
-											margin-right: 9upx;
-										}
-
-										.num {
-											font-size: 24upx;
-											font-family: PingFang SC;
-											font-weight: 500;
-											color: #999999;
-											line-height: 1;
-										}
-									}
-								}
-
-								.time {
-									font-size: 24upx;
-									line-height: 1;
-									font-family: PingFang SC;
-									font-weight: 500;
-									color: #999999;
-								}
-							}
-						}
-
-						.right {
-							width: 250upx;
-							height: 190upx;
-							border-radius: 8upx;
-							overflow: hidden;
-
-							image {
-								width: 100%;
-								height: 100%;
-							}
-						}
-					}
-				}
-
-				// 问诊案例
-				.cases-list {
-					padding-bottom: 10upx;
-
-					.item {
-						padding: 30upx 0;
-						border-bottom: 1px solid #F0F0F0;
-
-						&:last-child {
-							border-bottom: none;
-						}
-
-						.dec-text {
-							font-size: 32upx;
-							font-family: PingFang SC;
-							font-weight: bold;
-							color: #111111;
-							line-height: 48upx;
-						}
-
-						.images-box {
-							margin-top: 10upx;
-							display: flex;
-							flex-wrap: wrap;
-
-							.img-item {
-								width: 155upx;
-								height: 155upx;
-								background: #F5F5F5;
-								border-radius: 8upx;
-								margin: 0 10upx 10upx 0;
-								overflow: hidden;
-
-								image {
-									width: 48rpx;
-									height: 48rpx;
-								}
-
-								&:nth-child(4n) {
-									margin-right: 0;
-								}
-							}
-						}
-
-						.doc-info {
-							display: flex;
-							align-items: center;
-							margin: 30upx 0 20upx;
-
-							.head {
-								width: 60upx;
-								height: 60upx;
-								background: #F2F5F9;
-								border-radius: 50%;
-								margin-right: 20upx;
-								overflow: hidden;
-
-								image {
-									width: 100%;
-									height: 100%;
-								}
-							}
-
-							.name {
-								font-size: 28upx;
-								line-height: 1;
-								font-family: PingFang SC;
-								font-weight: 500;
-								color: #111111;
-							}
-
-							.line {
-								width: 1px;
-								height: 22upx;
-								background: #DDDDDD;
-								margin: 0 16upx;
-							}
-
-							.posit,
-							.address {
-								font-size: 26upx;
-								font-family: PingFang SC;
-								font-weight: 500;
-								color: #999999;
-							}
-						}
-
-						.answer-box {
-							width: 100%;
-							// height: 117upx;
-							background: #F5F7F7;
-							border-radius: 10upx;
-							display: flex;
-							flex-direction: column;
-							justify-content: center;
-
-							.text-inner {
-								// height: 84upx;
-								font-size: 28upx;
-								font-family: PingFang SC;
-								font-weight: 500;
-								color: #666666;
-								line-height: 42upx;
-								padding: 15upx;
-							}
-						}
-
-						.read-box {
-							margin-top: 30upx;
-							display: flex;
-							align-items: center;
-							justify-content: flex-end;
-
-							image {
-								width: 24upx;
-								height: 19upx;
-								margin-right: 10upx;
-							}
-
-							.text {
-								font-size: 24upx;
-								font-family: PingFang SC;
-								font-weight: 500;
-								color: #999999;
-							}
-						}
-					}
-				}
-			}
-
-			// 精选药品
-			.feat-title {
-				margin-top: 30upx;
-				padding: 10upx 0 33upx;
-				display: flex;
-				align-items: center;
-				justify-content: center;
-
-				image {
-					width: 37upx;
-					height: 37upx;
-					margin: 0upx 20upx;
-				}
-
-				text {
-					font-size: 36upx;
-					line-height: 1;
-					font-family: PingFang SC;
-					font-weight: bold;
-					color: #111111;
-				}
-			}
-
-			.drug-list {
-				display: flex;
-				flex-wrap: wrap;
-
-				// margin-bottom: 20upx;
-				.item {
-					margin-right: 20rpx;
-					margin-bottom: 20rpx;
-					width: 345rpx;
-					background: #FFFFFF;
-					box-shadow: 0px 0px 10rpx 4rpx rgba(199, 199, 199, 0.22);
-					border-radius: 20rpx;
-					overflow: hidden;
-
-					&:nth-child(2n) {
-						margin-right: 0;
-					}
-
-					.img-box {
-						width: 100%;
-						height: 334upx;
-
-						image {
-							width: 100%;
-							height: 100%;
-						}
-					}
-
-					.info-box {
-						box-sizing: border-box;
-						height: 182upx;
-						padding: 20upx;
-
-						.title {
-							height: 80upx;
-							font-size: 26upx;
-							font-family: PingFang SC;
-							font-weight: 500;
-							color: #111111;
-							line-height: 40upx;
-						}
-
-						.price-box {
-							display: flex;
-							align-items: center;
-							margin-top: 20upx;
-
-							.now {
-								color: #FF6633;
-								display: flex;
-								align-items: flex-end;
-								margin-right: 20upx;
-								font-family: PingFang SC;
-
-								.unit {
-									font-size: 24upx;
-									line-height: 1.4;
-									margin-right: 4upx;
-								}
-
-								.num {
-									font-size: 36upx;
-									font-weight: bold;
-									line-height: 1;
-								}
-							}
-
-							.old {
-								font-size: 26upx;
-								font-family: PingFang SC;
-								text-decoration: line-through;
-								color: #BBBBBB;
-								line-height: 1;
-							}
-						}
-					}
-				}
-			}
-		}
-
-
-		.box-title {
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			padding-bottom: 24rpx;
-            position: relative;
-			.title-l {
-				font-family: PingFang SC, PingFang SC;
-				font-weight: 600;
-				font-size: 32rpx;
-				color: #333333;
-			}
-
-			.title-m {
-				display: flex;
-				align-items: center;
-				font-family: PingFang SC, PingFang SC;
-				font-weight: 400;
-				font-size: 28rpx;
-				color: #999999;
-				margin-right: 4rpx;
-
-				image {
-					width: 32rpx;
-					height: 32rpx;
-				}
-			}
-		}
-
-		.doctor-articles {
-			z-index: 101;
-			margin-top: 40rpx;
-			padding: 0 24rpx;
-			// padding: 32rpx;
-			// background-color: #fff;
-			// border-radius: 16rpx;
-
-			.title-box {
-				display: flex;
-				flex-direction: row;
-				align-items: center;
-				justify-content: space-between;
-
-				::v-deep.u-tabs__wrapper__nav__item {
-					padding-left: 0 !important;
-				}
-
-				.title {
-					font-size: 32upx;
-					font-family: PingFang SC;
-					font-weight: bold;
-					color: #111111;
-				}
-
-				.more {
-					display: flex;
-					align-items: center;
-					justify-content: flex-end;
-
-					.text {
-						font-size: 24rpx;
-						font-family: PingFang SC;
-						color: #9B9B9B;
-					}
-
-					image {
-						// margin-left: 10rpx;
-						width: 48rpx;
-						height: 48rpx;
-					}
-
-				}
-			}
-
-			.article-box {
-				padding-top: 24rpx;
-				overflow-x: auto;
-				box-sizing: border-box;
-				display: flex;
-				align-items: center;
-				justify-content: flex-start;
-
-				.article {
-					width: 320rpx;
-					height: 328rpx;
-					margin-right: 16rpx;
-					background: #fff;
-					display: flex;
-					flex-direction: column;
-					align-items: flex-start;
-					justify-content: flex-start;
-					border-radius: 16rpx;
-
-					&:last-child {
-						margin-right: 0rpx;
-					}
-
-					.image-box {
-						width: 320rpx;
-						height: 180rpx;
-						position: relative;
-						border-radius: 16rpx 16rpx 0rpx 0rpx;
-
-						.bg {
-							border-radius: 16rpx 16rpx 0rpx 0rpx;
-							width: 320rpx;
-							height: 180rpx;
-						}
-
-						.views {
-							position: absolute;
-							top: 0rpx;
-							left: 0rpx;
-							width: 112rpx;
-							height: 32rpx;
-							display: flex;
-							align-items: center;
-							background: rgba(0, 0, 0, 0.4);
-							border-radius: 16rpx 0rpx 16rpx 0rpx;
-							font-weight: 500;
-							font-size: 20rpx;
-							color: #FFFFFF;
-							font-family: PingFang SC-Bold, PingFang SC;
-
-							image {
-								width: 36rpx;
-								height: 32rpx;
-								margin-right: 8rpx;
-							}
-						}
-
-						.zhibo {
-							position: absolute;
-							top: 50%;
-							left: 50%;
-							transform: translate(-50%, -50%);
-
-							image {
-								width: 56rpx;
-								height: 56rpx;
-							}
-						}
-
-
-						.doctor {
-							margin: 10rpx;
-							display: flex;
-							align-items: center;
-							justify-content: flex-start;
-							position: absolute;
-							bottom: 0rpx;
-							left: 0rpx;
-
-							image {
-								border-radius: 50%;
-								width: 64rpx;
-								height: 64rpx;
-							}
-
-							.right {
-								width: 200rpx;
-								margin-left: 10rpx;
-								display: flex;
-								flex-direction: column;
-								align-items: flex-start;
-								justify-content: space-between;
-
-								.doc-name {
-									width: 200rpx;
-									font-size: 30rpx;
-									font-weight: bold;
-									font-family: PingFang SC;
-									color: #fff;
-								}
-
-								.doc-position {
-									width: 100%;
-									font-size: 28rpx;
-									font-family: PingFang SC;
-									color: #fff;
-									font-weight: bold;
-									opacity: 0.8;
-								}
-							}
-						}
-					}
-
-					.article-title-box {
-						width: 100%;
-						padding: 16rpx;
-						display: flex;
-						align-items: flex-start;
-						flex-direction: column;
-						justify-content: space-between;
-						height: 148rpx;
-						box-sizing: border-box;
-
-						.article-title {
-							font-family: PingFang SC, PingFang SC;
-							font-weight: 500;
-							font-size: 28rpx;
-							color: #333333;
-							.one-t{
-								width: 100%;
-							}
-						}
-
-						.name-title {
-							display: flex;
-							align-items: center;
-							font-family: PingFang SC, PingFang SC;
-							font-weight: 400;
-							font-size: 22rpx;
-							color: #999999;
-                            .one-t{
-								width: 80%;
-							}
-							image {
-								width: 28rpx;
-								height: 28rpx;
-								margin-right: 14rpx;
-							}
-						}
-
-						.position-title {
-							display: flex;
-							align-items: center;
-							font-family: PingFang SC, PingFang SC;
-							font-weight: 400;
-							font-size: 22rpx;
-							color: #999999;
-                            .one-t{
-								width: 80%;
-							}
-							image {
-								width: 28rpx;
-								height: 28rpx;
-								margin-right: 14rpx;
-							}
-						}
-					}
-
-				}
-
-			}
-		}
-
-		.doctors {
-			z-index: 101;
-			margin: 20rpx 15rpx;
-			padding: 20rpx;
-			box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
-			background-color: #fff;
-			border-radius: 15rpx;
-
-			.title-box {
-				display: flex;
-				flex-direction: row;
-				align-items: center;
-				justify-content: space-between;
-
-				.title {
-					font-size: 32upx;
-					font-family: PingFang SC;
-					font-weight: bold;
-					color: #111111;
-				}
-
-				.more {
-					display: flex;
-					align-items: center;
-					justify-content: flex-end;
-
-					.text {
-						font-size: 24rpx;
-						font-family: PingFang SC;
-						color: #898E91;
-					}
-
-					image {
-						margin-left: 10rpx;
-						width: 15rpx;
-						height: 20rpx;
-					}
-
-				}
-			}
-
-		}
-
-		.articles {
-			z-index: 101;
-			margin-top: 40rpx;
-			padding: 0 24rpx;
-
-			.title-box {
-				display: flex;
-				flex-direction: row;
-				align-items: center;
-				justify-content: space-between;
-
-				::v-deep.u-tabs__wrapper__nav__item {
-					padding-left: 0 !important;
-				}
-
-				.title {
-					font-size: 32upx;
-					font-family: PingFang SC;
-					font-weight: bold;
-					color: #111111;
-				}
-
-				.more {
-					display: flex;
-					align-items: center;
-					justify-content: flex-end;
-
-					.text {
-						font-size: 24rpx;
-						font-family: PingFang SC;
-						color: #898E91;
-						// width: calc(100% - 556rpx);
-					}
-
-					image {
-						// margin-left: 10rpx;
-						width: 48rpx;
-						height: 48rpx;
-					}
-
-				}
-			}
-
-			.article-box {
-				margin-top: 15rpx;
-				padding: 20rpx 0rpx 0rpx;
-				display: flex;
-				flex-direction: column;
-				align-items: flex-start;
-				justify-content: flex-start;
-
-				.item {
-					width: 100%;
-					margin-bottom: 32rpx;
-					display: flex;
-					align-items: flex-start;
-					justify-content: flex-start;
-					border-bottom: 1px solid #ECECEC;
-					padding-bottom: 32rpx;
-
-					&:last-child {
-						margin-bottom: 0rpx;
-						border-bottom: 0;
-					}
-
-					.left {
-						flex: 1;
-						height: 160rpx;
-						margin-right: 30rpx;
-						display: flex;
-						flex-direction: column;
-						align-items: flex-start;
-						justify-content: space-between;
-						width: calc(100% - 260upx);
-
-						.title {
-							width: 100%;
-							font-size: 28upx;
-							font-family: PingFang SC;
-							font-weight: bold;
-							color: #111111;
-						}
-
-						.txt {
-							font-family: PingFang SC, PingFang SC;
-							font-size: 26rpx;
-							color: #898E91;
-						}
-
-						.views {
-							font-size: 24upx;
-							font-family: PingFang SC;
-							color: #B2B2B2;
-						}
-					}
-
-					.right {
-						image {
-							border-radius: 10rpx;
-							width: 220rpx;
-							height: 160rpx;
-							// border: 1px solid #eeeeee;
-						}
-					}
-				}
-			}
-		}
-
-		.packages {
-			z-index: 101;
-			margin: 20rpx 15rpx;
-			padding: 20rpx;
-			box-shadow: 0px 0px 5px 2px rgba(0, 0, 0, 0.05);
-			background-color: #fff;
-			border-radius: 15rpx;
-
-			.title-box {
-				display: flex;
-				flex-direction: row;
-				align-items: center;
-				justify-content: space-between;
-
-				.title {
-					font-size: 32upx;
-					font-family: PingFang SC;
-					font-weight: bold;
-					color: #111111;
-				}
-
-				.more {
-					display: flex;
-					align-items: center;
-					justify-content: flex-end;
-
-					.text {
-						font-size: 24rpx;
-						font-family: PingFang SC;
-						color: #9B9B9B;
-					}
-
-					image {
-						margin-left: 10rpx;
-						width: 15rpx;
-						height: 20rpx;
-					}
-
-				}
-			}
-
-			.package-box {
-				padding: 20rpx 0rpx 0rpx;
-				display: flex;
-				align-items: flex-start;
-				justify-content: flex-start;
-				flex-wrap: wrap;
-
-				.item {
-					width: calc(50% - 20rpx);
-					border-radius: 15rpx;
-					margin: 10rpx;
-					display: flex;
-					flex-direction: column;
-					align-items: flex-start;
-					justify-content: flex-start;
-
-					&:last-child {}
-
-					.top {
-						width: 100%;
-						height: 300rpx;
-
-						image {
-							border-radius: 15rpx 15rpx 0rpx 0rpx;
-							width: 100%;
-							height: 300rpx;
-						}
-
-					}
-
-					.bottom {
-						width: 100%;
-						margin-top: 15rpx;
-
-						.title {
-							font-weight: bold;
-							font-size: 28upx;
-							font-family: PingFang SC;
-							color: #111111;
-						}
-
-						.price-box {
-							margin-top: 10rpx;
-							display: flex;
-							align-items: center;
-							justify-content: space-between;
-							width: 100%;
-
-							.price {
-								padding: 5rpx 10rpx;
-								background-color: #0bb3f2;
-								border-radius: 30rpx;
-								font-size: 20upx;
-								font-family: PingFang SC;
-								color: #ffffff;
-							}
-
-							.count {
-								font-size: 24upx;
-								font-family: PingFang SC;
-								color: #333333;
-							}
-
-						}
-					}
-				}
-			}
-
-
-		}
-	}
-
-
-	.official-account {
-		box-sizing: border-box;
-		width: 100%;
-		height: 100upx;
-		position: fixed;
-		bottom: 30upx;
-		z-index: 99;
-		padding: 0 20upx 180rpx 20upx;
-	}
-
-	// 消息
-	.message-box {
-		box-sizing: border-box;
-		width: 100%;
-		height: 84upx;
-		background: #F3FFFD;
-		border: 1px solid #C7E9E5;
-		box-shadow: 0px 4upx 12upx 0px rgba(90, 203, 138, 0.16);
-		border-radius: 16upx;
-		position: fixed;
-		left: 50%;
-		transform: translateX(-50%);
-		bottom: 30upx;
-		z-index: 99;
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		padding: 0 20upx 0 30upx;
-
-		.left {
-			flex: 1;
-			display: flex;
-			align-items: center;
-
-			image {
-				width: 24upx;
-				height: 24upx;
-				margin-right: 18upx;
-			}
-
-			.text {
-				width: 90%;
-				font-size: 28upx;
-				font-family: PingFang SC;
-				font-weight: 500;
-				color: #0bb3f2;
-			}
-		}
-
-		.btn {
-			width: 100upx;
-			height: 48upx;
-			line-height: 48upx;
-			text-align: center;
-			font-size: 24upx;
-			font-family: PingFang SC;
-			font-weight: 500;
-			color: #FFFFFF;
-			border: 1px solid #D2E6FF;
-			background: linear-gradient(135deg, #66b2ef 0%, #0bb3f2 100%);
-			border-radius: 24upx;
-			margin-left: 30upx;
-		}
-
-	}
-
-	.contact-btn {
-		display: inline-block;
-		position: absolute;
-		top: 0;
-		left: 0;
-		width: 100%;
-		height: 100%;
-		opacity: 0;
-	}
-
-	.popup-box {
-		position: fixed;
-		top: 0;
-		right: 0;
-		left: 0;
-		bottom: 0;
-		z-index: 999;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-
-		.info-mask {
-			position: fixed;
-			top: 0;
-			right: 0;
-			bottom: 0;
-			left: 0;
-			background-color: rgba($color: #000000, $alpha: 0.5);
-			z-index: 999;
-		}
-
-		.info-form {
-			z-index: 1000;
-			width: 450rpx;
-			display: flex;
-			flex-direction: column;
-			justify-content: center;
-			align-items: center;
-			position: relative;
-
-			image {
-				width: 100%;
-			}
-		}
-	}
-</style>

+ 0 - 42
pages/home/web.vue

@@ -1,42 +0,0 @@
-<template>
-	<view class="content">
-		 <web-view :src="url"></web-view>
-	</view>
-</template>
-
-<script>
- 
- export default {
- 	data() {
- 		return {
-			url:"",
- 		}
- 	},
-	onLoad(val) {
-		// 待解析的完整 URL
-		// const fullUrl = uni.getStorageSync('url');
-		// this.url=this.utils.getUrl(fullUrl);
-	     this.url=uni.getStorageSync('url');
-	}
- 	 
- }
- 
- 
-</script>
-
-
-<style scoped lang="scss">
-page{
-	height: 100%;
-}
-.content{
-	width: 100%;
-	height: 100%;
-	display: flex;
-	align-items: center;
-	justify-content: center;
-	
-}
- 
-
-</style>

+ 0 - 198
pages/task/index.vue

@@ -1,198 +0,0 @@
-<template>
-	<view>
-		<view class="task-list">
-			<view class="item" v-for="(item,index) in tabs" :key="index" >
-				<view class="left">
-					<image :src="item.icon" mode=""></image>
-					<view class="title-l">{{item.name}}</view>
-				</view>
-				<view class="right" @click="showDetail(item.url)">
-					<view class="num" v-if="item.num!==0">{{item.num}}</view>
-					<image src="@/static/image/icon_more.png" mode=""></image>
-				</view>
-			</view>
-		</view>
-		<Server/>
-	</view>
-</template>
-
-<script>
-	import {getDictByKey} from '@/api/common.js'
-	import {getQuestionsList} from '@/api/index.js'
-	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
-	import Server from '@/components/Server.vue'
-	export default {
-		mixins: [MescrollMixin], 
-		components: {
-			Server
-		},
-		data() {
-			return {
-				tabs:[
-					{name:'在线讲座',num:12,icon:'/static/image/icon_task_zxjz.png',url:'/pages_task/onlineLecture'},
-					{name:'空中课堂',num:3,icon:'/static/image/icon_task_kzkt.png',url:'/pages_task/airClassroom'},
-					{name:'用药调研',num:8,icon:'/static/image/icon_task_yydy.png',url:''},
-					{name:'问卷调查',num:0,icon:'/static/image/icon_task_wjdc.png',url:''},
-					{name:'科普创作',num:0,icon:'/static/image/icon_task_kpcz.png',url:'/pages_task/science'},
-				],
-				typeOptions:[],
-				questionsType:0,
-				keyword: '',
-				mescroll:null,
-				downOption: {   //下拉刷新
-				 	use:true,
-					auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
-				},
-				upOption: {
-					onScroll:false,
-					use: true, // 是否启用上拉加载; 默认true
-					page: {
-						pae: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
-						size: 10 // 每页数据的数量,默认10
-					},
-					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
-					textNoMore:"已经到底了",
-					empty: {
-						icon:'https://user.test.ylrztop.com/images/empty_icon.png',
-						tip: '暂无数据'
-					}
-				},
-				dataList: []
-			};
-		},
-		onShow() {
-			this.getDictByKey("sys_questions_type");
-		},
-		methods:{
-			getDictByKey(key){
-				var data={key:key}
-				getDictByKey(data).then(
-					res => {
-						if(res.code==200){
-							if(key=="sys_questions_type"){
-								this.typeOptions=res.data;
-							}
-						 
-						}
-					},
-					err => {
-					}
-				);
-				
-			},
-			doSearch(){
-				this.mescroll.resetUpScroll()
-			},
-			mescrollInit(mescroll) {
-				this.mescroll = mescroll;
-			},
-			/*下拉刷新的回调 */
-			downCallback(mescroll) {
-				mescroll.resetUpScroll()
-			},
-			upCallback(page) {
-				//联网加载数据
-				var that = this;
-				var data = {
-					keyword:this.keyword,
-					questionsType:this.questionsType,
-					pageNum: page.num,
-					pageSize: page.size
-				};
-				getQuestionsList(data).then(res => {
-					if(res.code==200){
-						//设置列表数据
-						if (page.num == 1) {
-							that.dataList = res.data.list; 
-							
-						} else {
-							that.dataList = that.dataList.concat(res.data.list);
-							 
-						}
-						that.mescroll.endBySize(res.data.list.length, res.data.total);
-						
-					}else{
-						uni.showToast({
-							icon:'none',
-							title: "请求失败",
-						});
-						that.dataList = null;
-						that.mescroll.endErr();
-					}
-				});
-			},
-			// 关键词选择
-			choseType(item) {
-				this.questionsType = item.dictValue;
-				this.mescroll.resetUpScroll()
-			},
-			// 查看详情
-			showDetail(url) {
-				uni.navigateTo({
-					url: url
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.task-list{
-		padding: 24rpx;
-		display: flex;
-		align-items: center;
-		flex-direction: column;
-		justify-content: flex-start;
-		width: 100%;
-		  box-sizing: border-box; 
-		.item{
-			width: 100%;
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			background: #FFFFFF;
-			box-shadow: 0rpx 8rpx 16rpx 0rpx rgba(199,226,254,0.22);
-			border-radius: 24rpx 24rpx 24rpx 24rpx;
-			padding:28rpx 32rpx;
-			box-sizing: border-box; // 核心:padding不撑宽item
-			margin-bottom: 24rpx;
-			.left{
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				image{
-					width: 72rpx;
-					height: 72rpx;
-					margin-right: 28rpx;
-				}
-				.title-l{
-					font-family: PingFang SC, PingFang SC;
-					font-weight: 400;
-					font-size: 28rpx;
-					color: #333333;
-				}
-			}
-			.right{
-				display: flex;
-				align-items: center;
-				.num{
-					text-align: center;
-					width: 50rpx;
-					height: 36rpx;
-					line-height: 36rpx;
-					background: rgba(56,139,255,0.16);
-					border-radius: 34rpx 34rpx 34rpx 34rpx;
-					font-family: PingFang SC, PingFang SC;
-					font-weight: 400;
-					font-size: 24rpx;
-					color: #388BFF;
-				}
-				image{
-					width: 32rpx;
-					height: 32rpx;
-					margin-left: 12rpx;
-				}
-			}
-		}
-	}
-</style>

+ 39 - 38
pages/user/index.vue

@@ -9,23 +9,22 @@
 					<view class="user-info">
 					<view class="user-info">
 						<view class="left">
 						<view class="left">
 							<view class="head-img">
 							<view class="head-img">
-								<image :src="user.avatar==null?'/static/image/my_heads_icon.png':user.avatar"
-									mode="aspectFill">
-								</image>
-								<image class="gender"
-									:src="isGirl==null?'/static/image/icon_girl.png':'/static/image/icon_boy.png'"
-									mode="aspectFill"></image>
+						<image :src="userInfo.avatar==null?'/static/image/my_heads_icon.png':userInfo.avatar"
+							mode="aspectFill">
+						</image>
+						<image class="gender"
+							:src="isGirl==null?'/static/image/icon_girl.png':'/static/image/icon_boy.png'"
+							mode="aspectFill"></image>
 
 
-							</view>
+					</view>
 							<view class="name-phone">
 							<view class="name-phone">
 								<view class="x-f">
 								<view class="x-f">
-									<view class="name" v-if="UserInfo">{{user.nickname}}</view>
-									<view class="name" v-else>请先登录</view>
-									<view class="lable">办公室主任</view>
-									<!-- <text>{{user.phone?utils.parsePhone(user.phone):'-'}}</text> -->
-								</view>
+							<view class="name" v-if="UserInfo">{{userInfo.nickName}}</view>
+							<view class="name" v-else>请先登录</view>
+							<view class="lable" v-if="UserInfo">{{userInfo.deptName}}</view>
+						</view>
 							</view>
 							</view>
-							<view class="txt">您已加入小蜜蜂1582天了~</view>
+							<view class="txt" v-if="UserInfo">您已加入小蜜蜂{{joinDays}}天了~</view>
 						</view>
 						</view>
 					</view>
 					</view>
 
 
@@ -50,9 +49,7 @@
 </template>
 </template>
 
 
 <script>
 <script>
-	import {
-		getOrderCount
-	} from '@/api/storeOrder'
+	
 	import {
 	import {
 		getUserInfo
 		getUserInfo
 	} from '@/api/user'
 	} from '@/api/user'
@@ -84,13 +81,14 @@
 						url: '/pages/auth/setting'
 						url: '/pages/auth/setting'
 					},
 					},
 				],
 				],
-				user: {
-					isPromoter: 0,
-					isWeixinAuth: 0,
-					phone: "",
-					nickname: "用户昵称",
-					avatarUrl: "/static/images/detault_head.png"
-				},
+				userInfo: {},
+			user: {
+				isPromoter: 0,
+				isWeixinAuth: 0,
+				phone: "",
+				nickname: "用户昵称",
+				avatarUrl: "/static/images/detault_head.png"
+			},
 				// 状态栏的高度
 				// 状态栏的高度
 				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
 				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
 				// 消息数量
 				// 消息数量
@@ -104,8 +102,13 @@
 		},
 		},
 		onShow() {
 		onShow() {
 			console.log("onshow")
 			console.log("onshow")
-			//this.getUserInfo();
-			//this.getOrderCount();
+			// 从本地缓存加载用户信息
+			const userInfoStr = uni.getStorageSync('userInfo')
+			if (userInfoStr) {
+				this.userInfo = JSON.parse(userInfoStr)
+			}
+			// 更新登录状态
+			this.UserInfo = uni.getStorageSync('AppToken')
 		},
 		},
 		onReachBottom() {
 		onReachBottom() {
 			console.log("onReachBottom")
 			console.log("onReachBottom")
@@ -127,19 +130,7 @@
 				})
 				})
 			},
 			},
 
 
-			getOrderCount() {
-				getOrderCount().then(
-					res => {
-						if (res.code == 200) {
-							this.count0 = res.count0;
-							this.count1 = res.count1;
-							this.count2 = res.count2;
-							this.afterSalesCount = res.afterSalesCount;
-						}
-					},
-					rej => {}
-				);
-			},
+			
 
 
 			openLink(item) {
 			openLink(item) {
 				if (item.name == '用户协议') {
 				if (item.name == '用户协议') {
@@ -215,6 +206,16 @@
 					url: '/pages_user/user/storeOrder?status=' + status
 					url: '/pages_user/user/storeOrder?status=' + status
 				})
 				})
 			}
 			}
+		},
+		computed: {
+			joinDays() {
+				if (!this.userInfo.createTime) return 0
+				const createDate = new Date(this.userInfo.createTime.replace(/-/g, '/'))
+				const now = new Date()
+				const diffTime = now - createDate
+				const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24))
+				return diffDays
+			}
 		}
 		}
 	}
 	}
 </script>
 </script>

+ 0 - 9
pages/user/test.vue

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

+ 0 - 342
pages_live/ConsultationDetails.vue

@@ -1,342 +0,0 @@
-<template>
-	<view>
-		<u-alert type="warning" :description='description'></u-alert>
-		<view class="p20 column">
-			<view class="bg-white p30 radius16">
-				<view class="justify-between align-center">
-					<view class="bold">咨询人<text class="color-price">*</text></view>
-					<view class="justify-start align-center">
-						<image src="/static/images/health/add_modify.png" class="w24 h24"></image>
-						<view class="fs24 ml8">添加/修改</view>
-					</view>
-				</view>
-				<scroll-view :scroll-x="true" class="peoplebox">
-					<view class="scroll-content ">
-						<view v-for="(item,index) in peoplelist" :key="index" @click="actpeople(item,index)"
-						:class="actitem==index?'act-box':'noact-box'" class="item-list ">
-							<image :src="item.sex=='男'?maleurl:famaleurl" class="w72 h72 radius36 "></image>
-							<view class="ml12">
-								<view class="fs26 bold">{{item.name}}</view>
-								<view class="justify-start align-center color-text2 fs24">
-									<text>{{item.sex}}</text>
-									<text class="ml4">{{item.age}}岁</text>
-								</view>
-							</view>
-						</view>
-					</view>
-				</scroll-view>
-				<view class="justify-start align-center center ptb20" v-if="peoplelist.length==0">
-					<u-icon name="plus-circle"></u-icon>
-					<text class="fs28 color-text1">用药人列表为空,请添加</text>
-				</view>
-			</view>
-			<view class="bg-white p30 radius16 mt30">
-				<view class="bold">您最想咨询的问题是什么<text class="color-price">*</text></view>
-				<view class="textinput">
-					<textarea  auto-height maxlength='500' placeholder="请输入内容" :value='consulting' @input='lookvalue'/>
-				</view>
-				<view class="justify-between align-center">
-					<image src="/static/images/health/voice_icon.png" class="w48 h48"></image>
-					<text class="fs24 color-text1">{{consultingNum}}/500</text>
-				</view>
-			</view>
-			<view class="bg-white p30 radius16 mt30">
-				<view class="bold">此次病情是否去线下就诊过<text class="color-price">*</text></view>
-				<view class="justify-start align-center mt20">
-					<view v-for="(item,index) in seedoctor" :key="index" :class="actsee==index?'bg-color color-white':'bg-light'"
-					@click="selectsee(item,index)" class="ptb20 plr30 mr20 radius12" >{{item.name}}</view>
-				</view>
-			</view>
-			<view class="bg-white p30 radius16 mt30">
-				<view class="bold">上传检测报告或患处照片<text class="color-price">*</text></view>
-				<view class="justify-start align-center mt20">
-					<view v-for="(item,index) in imgList" :key="index"  @tap="viewImage" :data-url="imgList[index]"
-					class="img-box justify-start align-center mr20">
-						<image :src="item" class="w120 h120 radius8 " mode="aspectFill" @click="showImg(item)"></image>
-						<image class="close-img" src="@/static/images/close32.png" mode="" @tap.stop="delImg" :data-index="index"></image>
-					</view>
-					<view class="column align-center bg-light w120 h120 radius8 center" @tap="chooseImage" v-if="imgList.length<4" >
-						<u-icon name="plus" ></u-icon>
-						<view class="fs24">上传报告</view>
-					</view>
-				</view>
-				<view class="justify-between fs24 color-text1 mt20">
-					<view>最多上传4张图片</view>
-					<view><text>{{imgList.length}}</text>/4</view>
-				</view>
-			</view>
-			<view class="h200"></view>
-		</view>
-		<view class="footer center">
-			<view class="bg-color radius44 color-white h88 lh88 center" style="width: 90%;"
-			@click="submit">生成方案</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {getuserlist,submitconsult} from '@/api/health.js'
-	export default {
-		data() {
-			return {
-				description:'为了您的健康,请认真填写以下内容,以便药师为您更好的分析,提供患有针对性的解决方案!',
-				peoplelist:[
-					{
-						name:'任继峰',
-						sex:'男',
-						age:'55',
-						id:0
-					},
-					{
-						name:'任继峰',
-						sex:'男',
-						age:'55',
-						id:1
-					},
-					{
-						name:'朱丽君',
-						sex:'女',
-						age:'55',
-						id:2
-					},
-					{
-						name:'朱丽君',
-						sex:'女',
-						age:'55',
-						id:3
-					}
-				],
-				famaleurl:"/static/images/health/female_profile.png",
-				maleurl:"/static/images/health/male_profile.png",
-				actitem:null,
-				userid:null,
-				consulting:null,
-				consultingNum:0,
-				seedoctor:[
-					{
-						name:'就诊过',
-						value:0
-					},
-					{
-						name:'未就诊',
-						value:1
-					}
-				],
-				actsee:null,
-				imgList:[],
-				photos:[]
-			}
-		},
-		methods: {
-			// 选择上传的图片
-			chooseImage() {
-				console.log('图片')
-				var that = this;
-				uni.showActionSheet({
-					itemList: ['相册', '拍照'],
-					success: function(res) {
-						if (res.tapIndex == 0) {
-							//从相册选择
-							that.chooseImageFunction('album')
-						} else if (res.tapIndex == 1) {
-							//拍照
-							that.chooseImageFunction('camera')
-						}
-					},
-					fail: function(res) {
-						
-					}
-				});
-			},
-			chooseImageFunction: function(type) {
-				var that = this;
-				uni.chooseImage({
-					count: 4, // 默认9
-					sizeType: ['compressed'], //可以指定是原图还是压缩图,默认二者都有
-					sourceType: [type],
-					success: (res) => {
-						uni.uploadFile({
-							url: uni.getStorageSync('requestPath')+'/app/common/uploadOSS', //仅为示例,非真实的接口地址
-							filePath: res.tempFilePaths[0],
-							name: 'file',
-							formData: {
-								'user': 'test'  // 上传附带参数
-							},
-							success: (uploadFileRes) => {
-								// 根据接口具体返回格式   赋值具体对应url
-								if (this.imgList.length != 0) {
-									this.imgList = this.imgList.concat(res.tempFilePaths)
-								} else {
-									this.imgList = res.tempFilePaths
-									
-								}
-						 
-								this.photos = this.photos.concat(JSON.parse(uploadFileRes.data).url)
-							}
-						});
-						 
-					}
-				});
-			},
-			// 查看图片
-			viewImage(e) {
-				uni.previewImage({
-					urls: this.imgList,
-					current: e.currentTarget.dataset.url
-				});
-			},
-			// 删除上传的图片
-			delImg(e) {
-				var that = this;
-				uni.showModal({
-					title: '提示',
-					content: '确定要删除照片吗?',
-					cancelText: '取消',
-					confirmText: '确定',
-					success: res => {
-						if (res.confirm) {
-							that.imgList.splice(e.currentTarget.dataset.index, 1)
-							this.photos.splice(e.currentTarget.dataset.index, 1);
-						}
-					},
-				})
-			},
-			submit(){
-				if(this.userid==null){
-					uni.showToast({
-						icon:'none',
-						title:'请选择咨询人!',
-					});
-					return
-				}
-				if(this.consulting==null){
-					uni.showToast({
-						icon:'none',
-						title:'请输入咨询内容!',
-					});
-					return
-				}
-				if(this.actsee==null){
-					uni.showToast({
-						icon:'none',
-						title:'请选择是否线下就诊过!',
-					});
-					return
-				}
-				if(this.actsee==0){
-					if(this.imagelist.length==0){
-						uni.showToast({
-							icon:'none',
-							title:'如果在线下就诊过,请上传检测报告!',
-						});
-						return
-					}
-				}
-				const data={
-					id:this.userid,
-					doctor:this.actsee,
-					imgurl:this.imagelist
-				}
-				submitconsult().then(res=>{
-					if(res.code==200){
-						uni.showToast({
-							icon:'none',
-							title:'提交成功',
-						});
-					}else{
-						uni.showToast({
-							icon:'none',
-							title:res.msg,
-						});
-					}
-				})
-			},
-			actpeople(item,index){
-				this.actitem=index
-				this.userid=item.id
-			},
-			lookvalue(e){
-				this.consulting=e.detail.value
-				this.consultingNum=e.detail.cursor
-				if(this.consultingNum==500){
-					uni.showToast({
-						icon:'none',
-						title:'最大输入500字符!',
-					});
-				}
-			},
-			selectsee(item,index){
-				this.actsee=item.value
-			},
-			showImg(img) {
-				if(img!=null){
-					var imgs=[];
-					imgs.push(img)
-					//预览图片
-					uni.previewImage({
-						urls: imgs,
-						current: imgs[0]
-					});
-				}
-				else{
-					//预览图片
-					uni.previewImage({
-						urls: this.imagelist,
-						current: this.imagelist[0]
-					});
-				}
-			},
-		}
-	}
-</script>
-
-<style scoped lang="scss">
-.peoplebox{
-	  white-space: nowrap;
-	  margin-top: 30rpx;
-	  ::-webkit-scrollbar {
-	    display: none;
-	  }
-	 .scroll-content{
-		  display: flex;
-		flex-wrap: nowrap;
-	 }
-	.item-list{
-		padding: 20rpx 28rpx;
-		width: fit-content;
-		display: flex;
-		justify-content: start;
-		border-radius: 12rpx;
-		margin-right: 20rpx;
-	}
-	.noact-box{
-		background-color: #F5F7FA;
-	}
-	.act-box{
-		background-color: #F0FAFF;
-		border: 2rpx solid #008FD3;
-	}
-}
-.img-box{
-	position: relative;
-}
-.close-img{
-		width: 32upx;
-		height: 32upx;
-		position: absolute;
-		top:2upx;
-		right: 2upx;
-	}
-.textinput{
-	margin-top: 30rpx;
-	height:200rpx;
-	overflow-y: scroll;
-}
-.footer{
-	padding: 40rpx 0; 
-	width: 100%;
-	position: fixed;
-	bottom: 0;
-	background-color: #fff;
-}
-</style>

+ 0 - 424
pages_live/addForm.vue

@@ -1,424 +0,0 @@
-<template>
-	<view class="content">
-		<view class="inner">
-			<view class="form-box">
-				<view class="form-item">
-					<text class="label"><text class="color-price">*</text> 姓名</text>
-					<input  class="input-width" type="text" v-model="form.productName" placeholder="请输入姓名"
-						placeholder-class="form-input" />
-				</view>
-				<view class="form-item">
-					<text class="label"><text class="color-price">*</text> 医院</text>
-					<input  class="input-width" type="text" v-model="form.productName" placeholder="请输入医院"
-						placeholder-class="form-input" />
-				</view>
-				<view class="form-item">
-					<text class="label"><text class="color-price">*</text> 科室</text>
-					<input  class="input-width" type="text" v-model="form.productName" placeholder="请输入科室"
-						placeholder-class="form-input" />
-				</view>
-				<view class="form-item">
-					<text class="label"><text class="color-price">*</text> 职称</text>
-					<input  class="input-width" type="text" v-model="form.productName" placeholder="请输入职称"
-						placeholder-class="form-input" />
-				</view>
-			</view>
-		</view>
-		<view class="btn-box">
-			<view class="sub-btn" @click="submit()">
-				<!-- <image src="/static/images/health/nav_add_icon24.png" class="w48 h48"></image> -->
-				<text>确认并进入直播间</text>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		getServiceById,updateService,saveService
-	} from '@/api/companyUser.js'
-	export default {
-		data() {
-			return {
-				startDate:this.utils.timeFormat(new Date()),
-				type: null,
-				patientId: null,
-				famaleurl:"/static/images/health/female_profile.png",
-				maleurl:"/static/images/health/my_heads.png",
-				checked:1,
-				array:['是','否'],
-				tags: [{
-					name: '心脏病',
-					checked:true,
-					id: 1
-				},
-				{
-					name: '脑梗死',
-						checked:false,
-					id: 2
-				},{
-					name: '肾病',
-						checked:false,
-					id: 3
-				},{
-					name: '脂肪肝',
-						checked:false,
-					id: 4
-				}],
-				form: {
-						"amount": null,
-						"memberStatus": null,
-						"plannedCompletionDate": null,
-						"productName":null,
-						"purchaseQuantity":1,
-						"purchaseTimes":null,
-						"remark": null,
-						"surplusTimes":null,
-				},
-				id:null
-			};
-		},
-		onLoad(options) {
-			this.type = options.type;
-			this.form.userId=options.userId
-			this.form.companyUserId=options.companyUserId;
-			console.log(this.type)
-			if (this.type == 'edit') {
-				this.id=options.id;
-				this.getServiceInfo();
-			}
-		},
-		methods: {
-			sexChange(type) {
-				this.form.sex = type
-			},
-			radioClick(item) {
-			        this.checked=item.id
-			      },
-			getServiceInfo() {
-				var data = {
-					id: this.id
-				};
-				getServiceById(data).then(
-					res => {
-						if (res.code == 200) {
-							this.form = res.data;
-                            this.form.plannedCompletionDate=this.utils.timeFormat(res.data.plannedCompletionDate,'yyyy-mm-dd')
-							this.startDate=this.form.plannedCompletionDate
-						} else {
-							uni.showToast({
-								title: res.msg,
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			submit() {
-				uni.navigateTo({
-					url: '/pages_live/card'
-				})
-				// if (this.form.productName == null || this.form.productName == '') {
-				// 	uni.showToast({
-				// 		icon: 'none',
-				// 		title: "名称不能为空",
-				// 	});
-				// 	return;
-				// }
-				// if (this.form.purchaseQuantity == null|| this.form.purchaseQuantity == 0) {
-				// 	uni.showToast({
-				// 		icon: 'none',
-				// 		title: "数量不能为空",
-				// 	});
-				// 	return;
-				// }
-				// if (this.form.amount == null|| this.form.amount == '') {
-				// 	uni.showToast({
-				// 		icon: 'none',
-				// 		title: "金额不能为空",
-				// 	});
-				// 	return;
-				// }
-				// if (this.form.plannedCompletionDate == null|| this.form.plannedCompletionDate == '') {
-				// 	uni.showToast({
-				// 		icon: 'none',
-				// 		title: "时间不能为空",
-				// 	});
-				// 	return;
-				// }
-				// if (this.form.purchaseTimes == null|| this.form.purchaseTimes == '') {
-				// 	uni.showToast({
-				// 		icon: 'none',
-				// 		title: "购买次数不能为空",
-				// 	});
-				// 	return;
-				// }
-				// if (this.form.surplusTimes == null|| this.form.surplusTimes == '') {
-				// 	uni.showToast({
-				// 		icon: 'none',
-				// 		title: "剩余次数不能为空",
-				// 	});
-				// 	return;
-				// }
-				// if (this.form.memberStatus == null|| this.form.memberStatus == '') {
-				// 	uni.showToast({
-				// 		icon: 'none',
-				// 		title: "会员情况不能为空",
-				// 	});
-				// 	return;
-				// }
-				// if (this.type == "add") {
-				// 	this.saveService()
-				// } else if (this.type == "edit") {
-				// 	this.updateService()
-				// }
-               
-			},
-			updateService() {
-				updateService(this.form).then(
-					res => {
-						if (res.code == 200) {
-							uni.showToast({
-								icon: 'success',
-								title: "操作成功",
-							});
-							setTimeout(function() {
-								uni.$emit('refreshBuyOrder');
-								uni.navigateBack({
-									delta: 1
-								})
-							}, 500);
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: res.msg,
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			saveService() {
-				saveService(this.form).then(
-					res => {
-						if (res.code == 200) {
-							uni.showToast({
-								icon: 'success',
-								title: "操作成功",
-							});
-							setTimeout(function() {
-								uni.$emit('refreshBuyOrder');
-								uni.navigateBack({
-									delta: 1
-								})
-							}, 500);
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: res.msg,
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			// 出生日期选择
-			bindDateChange: function(e) {
-				this.form.plannedCompletionDate = e.target.value
-			},
-		}
-	}
-</script>
-
-<style lang="scss">
-	page {
-		height: 100%;
-	}
-
-	.content {
-		height: 100%;
-		display: flex;
-		flex-direction: column;
-		//  justify-content: space-between;
-        background: #FFFFFF;
-		.inner {
-			// height: calc(100% - 120upx);
-			// padding: 20upx;
-
-			.form-box {
-				padding: 0 32upx;
-				
-				border-radius: 16upx;
-				margin-bottom: 20upx;
-
-				.form-title {
-					font-family: PingFang SC;
-					font-weight: 600;
-					font-size: 40rpx;
-					color: #222426;
-					text-align: left;
-					padding: 30rpx 0;
-					display: block;
-				}
-
-				.form-item {
-					padding: 30upx 0;
-					display: flex;
-					align-items: center;
-					justify-content: space-between;
-					border-bottom: 1px solid #F1F1F1;
-
-					// &:last-child {
-					// 	border-bottom: none;
-					// }
-        
-					.label {
-						width: 200upx;
-						text-align: left;
-						font-family: PingFang SC, PingFang SC;
-						font-weight: 400;
-						font-size: 28rpx;
-						color: #666666;
-						flex-shrink: 0;
-					}
-                   
-					input {
-						flex:1;
-						text-align: right;
-					}
-               .num-box{
-               	input{
-               		text-align: center !important;
-               	}
-               }
-					.form-input {
-						
-						font-size: 28rpx;
-						font-family: PingFang SC;
-						font-weight: 400;
-						color: #C8C9CC;
-						text-align: right;
-					}
-
-					.form-item-tag{
-						margin-right: 16rpx;
-						.tag{
-							border-radius: 8rpx 8rpx 8rpx 8rpx;
-							border: 2rpx solid #ECECEC;
-							display: flex;
-							align-items: center;
-							padding: 24rpx;
-							font-family: PingFang SC;
-							font-weight: 400;
-							font-size: 24rpx;
-							&.active{
-								background: #F0FAFF;
-								border: 2rpx solid #008FD3;
-								color: #008FD3;
-							}
-						}
-						
-						
-						
-					}
-					.right{
-						display: flex;
-						align-items: center;
-					}
-					.sex-box{
-						flex:1;
-						display: flex;
-						align-items: center;
-						justify-content: flex-end;
-						.sex-item{
-							width: 146rpx;
-							height: 64rpx;
-							display: flex;
-							align-items: center;
-							justify-content: center;
-							background: #F5F7FA;
-							border-radius: 32rpx 32rpx 32rpx 32rpx;
-							margin-left: 16rpx;
-							.u-icon__icon{
-								margin: 0;
-							}
-							text{
-								// font-family: PingFang SC, PingFang SC;
-								font-weight: 400;
-								font-size: 28rpx;
-								color: #898E91;
-								margin-left: 12rpx;
-							}
-							&.active{
-								background: #FCF0E7;
-								text{
-									color:#FF5030
-								}
-							}
-						}
-					}
-					.form-textarea{
-						font-size: 30upx;
-						color: #999999;
-						height: 100upx;
-						padding: 4upx 0;
-					}
-					 
-					.birth-picker {
-						flex: 1;
-						display: flex;
-						align-items: center;
-						
-						.right-box{
-							width: 100%;
-							display: flex;
-							align-items: center;
-							.input-box{
-								// width: 470upx;
-							}
-							.arrow{
-								width: 13upx;
-								height: 23upx;
-								margin-left: 20upx;
-							}
-						}
-					}
-				}
-			}
-		}
-
-		.btn-box {
-			height: 120upx;
-			padding: 0 30upx;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-            margin-top: 86rpx;
-			// position: fixed;
-			// width: 90%;
-			// bottom: 0;
-			// left: 50%;
-			// transform: translate(-50%,-50%);
-			// background: #FFFFFF;
-			.sub-btn {
-				width: 100%;
-				height: 88upx;
-				line-height: 88upx;
-				text-align: center;
-				font-family: PingFang SC, PingFang SC;
-				font-weight: 400;
-				font-size: 32rpx;
-				color: #FFFFFF;
-				background: #388BFF ;
-				border-radius: 44upx;
-				margin-bottom: 40upx;
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				image{
-					margin-right: 16rpx;
-				}
-			}
-		}
-	}
-</style>

+ 0 - 736
pages_live/addUser.vue

@@ -1,736 +0,0 @@
-<template>
-	<view class="content">
-		<view class="inner">
-			<view class="form-box">
-				<text class="form-title">基本信息</text>
-				<view class="form-item justify-between">
-					<text class="label">头像</text>
-					<view class="right">
-						<image :src="form.avatar==null?maleurl:form.avatar" class="w90 h90"></image>
-						<image class="w48 h48" src="/static/images/health/right_arrow_right_icon24.png"></image>
-						<button class="wx-head" type="balanced" open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
-						</button>
-					</view>
-				</view>
-				<view class="form-item">
-					<text class="label">姓名<text class="color-price">*</text></text>
-					<input class="input-width" type="text" v-model="form.username" placeholder="请输入姓名"
-						placeholder-class="form-input" />
-				</view>
-				<view class="form-item">
-					<text class="label">性别<text class="color-price">*</text></text>
-					<view class="sex-box">
-						<view :class="form.sex==0?'sex-item active':'sex-item'"  @click="sexChange(0)" >
-							<u-icon name="man" :color="form.sex==0?'#008FD3':'#EBF8FF'" size="20"></u-icon>
-							<text>男</text>
-						</view>
-						<view :class="form.sex==1?'sex-item active2':'sex-item'"  @click="sexChange(1)" >
-							<u-icon name="woman" :color="form.sex==1?'#FF5030':'#898E91'" size="20"></u-icon>
-							<text>女</text>
-						</view>
-					</view>
-				</view>
-				<view class="form-item">
-					<text class="label">出生年月<text class="color-price">*</text></text>
-					<picker class="birth-picker" mode="date"   @change="bindDateChange">
-						<view class="right-box">
-							<view class="input-box">
-								<input type="text" :value="form.birthdate" placeholder="请选择出生年月" placeholder-class="form-input" disabled="disabled" />
-							</view>
-							<image class="w48 h48" src="/static/images/health/right_arrow_right_icon24.png"></image>
-						</view>
-					</picker>
-				</view>
-				<view class="form-item">
-					<text class="label">手机号<text class="color-price">*</text></text>
-					<input maxlength="11" class="input-width" type="number" v-model="form.phone" placeholder="请输入手机号" placeholder-class="form-input" />
-				</view>
-				<view class="form-item">
-					<text class="label">身份证号<text class="color-price">*</text></text>
-					<input maxlength="18" class="input-width" type="idcard" v-model="form.idCard" placeholder="请如实填写身份证号" placeholder-class="form-input" />
-				</view>
-				<view class="form-item">
-					<text class="label">退休前工作单位<text class="color-price">*</text></text>
-					<input class="input-width" type="text" v-model="form.previousEmployer" placeholder="请输入工作单位"
-						placeholder-class="form-input" />
-				</view>
-				<view class="form-item">
-					<text class="label">可支配收入<text class="color-price">*</text></text>
-					<input  class="input-width" type="digit" v-model="form.disposableIncome" placeholder="请输入支配收入"
-						placeholder-class="form-input" />
-				</view>
-				<view class="form-item">
-					<text class="label">实际消费<text class="color-price">*</text></text>
-					<input class="input-width" type="digit" v-model="form.actualConsumption" placeholder="请输入实际消费"
-						placeholder-class="form-input" />
-				</view>
-			</view>
-			<view class="form-box">
-				<text class="form-title">家庭地址及居住情况</text>
-				
-				<view class="form-item">
-					<text class="label">市区<text class="color-price">*</text></text>
-					<picker class="birth-picker" mode="region" level="city"  @change="bindCityChange">
-						<view class="right-box">
-							<view class="input-box">
-								<input type="text" :value="form.city" placeholder="请选择市区" placeholder-class="form-input" disabled="disabled" />
-							</view>
-							<image class="w48 h48" src="/static/images/health/right_arrow_right_icon24.png"></image>
-						</view>
-					</picker>
-					
-				</view>
-				<view class="form-item">
-					<text class="label">小区名称</text>
-					<input maxlength="10" class="input-width" type="text" v-model="form.residentialCommunity" placeholder="请输入小区名称"
-						placeholder-class="form-input" />
-				
-				</view>
-				<view class="form-item">
-					<text class="label">门牌</text>
-					<input maxlength="10" class="input-width" type="text" v-model="form.houseNumber" placeholder="请输入门牌号"
-						placeholder-class="form-input" />
-				
-				</view>
-				
-				
-				<view class="form-item">
-					<text class="label">面积</text>
-					<input maxlength="10" class="input-width" type="text" v-model="form.area" placeholder="请输入面积"
-						placeholder-class="form-input" />
-				</view>
-				
-                 <view class="form-item">
-					<text class="label">楼层</text>
-					<input maxlength="10" class="input-width" type="text" v-model="form.floor" placeholder="请输入楼层"
-						placeholder-class="form-input" />
-				</view>
-			</view>
-			<view class="form-box">
-				<text class="form-title">家庭情况</text>
-				<view class="form-item">
-					<text class="label">伴侣</text>
-					<input class="input-width" type="text" v-model="form.partnerName" placeholder="请输入伴侣姓名"
-						placeholder-class="form-input" />
-				
-				</view>
-				<view class="form-item">
-					<text class="label">伴侣年龄</text>
-					<input class="input-width" type="number" v-model="form.partnerAge" placeholder="请输入伴侣年龄"
-						placeholder-class="form-input" />
-				
-				</view>
-				
-				
-				<view class="form-item">
-					<text class="label">子辈单位</text>
-					<input maxlength="10" class="input-width" type="text" v-model="form.partnerEmployer" placeholder="请输入子辈工作单位"
-						placeholder-class="form-input" />
-				</view>
-				
-				 <view class="form-item">
-					<text class="label">孙辈学校</text>
-					<input maxlength="10" class="input-width" type="text" v-model="form.grandchildrenSchool" placeholder="请输入所在学校"
-						placeholder-class="form-input" />
-				</view>
-			</view>
-			<view class="form-box">
-				<text class="form-title">会员情况</text>
-				<view class="form-item justify-between">
-					<text class="label">是否是会员</text>
-				<radio-group style="display: flex;align-items: center;">
-					<label style="margin-right: 50upx;">
-						<radio @click="radioClick(1)" value="1" :checked="form.isMember==1"
-							style="margin-right: 16upx;" />
-						<text class="sex-text">是</text>
-					</label>
-					<label>
-						<radio @click="radioClick(0)" value="0" :checked="form.isMember==0"
-							style="margin-right: 16upx;" />
-						<text class="sex-text">否</text>
-					</label>
-				</radio-group>
-				</view>
-				<view class="form-item">
-					<text class="label">会员分类</text>
-					<picker class="birth-picker" mode="selector"  @change="bindMemberChange($event,tags)" :range="tags" range-key="dictLabel">
-						<view class="right-box">
-							<view class="input-box">
-								<input type="text" :value="form.memberLevel" placeholder="请选择会员分类" placeholder-class="form-input" disabled="disabled" />
-							</view>
-							<image class="w48 h48" src="/static/images/health/right_arrow_right_icon24.png"></image>
-						</view>
-					</picker>
-				
-				</view>
-				
-				
-				<view class="form-item">
-					<text class="label">加入时间</text>
-					<picker class="birth-picker" mode="date"   @change="bindJoinChange">
-						<view class="right-box">
-							<view class="input-box">
-								<input type="text" :value="form.joinTime" placeholder="请选择加入时间" placeholder-class="form-input" disabled="disabled" />
-							</view>
-							<image class="w48 h48" src="/static/images/health/right_arrow_right_icon24.png"></image>
-						</view>
-					</picker>
-				</view>
-				
-				 <view class="form-item">
-					<text class="label">到期时间</text>
-					<picker class="birth-picker" mode="date"   @change="bindEndChange">
-						<view class="right-box">
-							<view class="input-box">
-								<input type="text" :value="form.expiryTime" placeholder="请选择到期时间" placeholder-class="form-input" disabled="disabled" />
-							</view>
-							<image class="w48 h48" src="/static/images/health/right_arrow_right_icon24.png"></image>
-						</view>
-					</picker>
-				</view>
-				<view class="form-item">
-					<text class="label">管理月份</text>
-					<picker class="birth-picker" mode="date" fields="month" @change="bindMonthChange">
-						<view class="right-box">
-							<view class="input-box">
-								<input type="text" :value="form.managementMonth" placeholder="请选择管理月份" placeholder-class="form-input" disabled="disabled" />
-							</view>
-							<image class="w48 h48" src="/static/images/health/right_arrow_right_icon24.png"></image>
-						</view>
-					</picker>
-				</view>
-			</view>
-			<view class="form-box">
-				<text class="form-title">特殊情况</text>
-				<view class="form-item">
-					<text class="label">职位</text>
-					<input class="input-width" type="text" v-model="form.position" placeholder="请输入职位"
-						placeholder-class="form-input" />
-				
-				</view>
-				<view class="form-item">
-					<text class="label">癖好</text>
-					<input maxlength="10" class="input-width" type="text" v-model="form.hobbies" placeholder="请输入癖好"
-						placeholder-class="form-input" />
-				
-				</view>
-				
-				
-				<view class="form-item">
-					<text class="label">平日喜好</text>
-					<input maxlength="10" class="input-width" type="text" v-model="form.specialties" placeholder="请输入平日喜好"
-						placeholder-class="form-input" />
-				</view>
-				
-				 <view class="form-item">
-					<text class="label">信仰</text>
-					<input maxlength="10" class="input-width" type="text" v-model="form.faith" placeholder="请输入信仰"
-						placeholder-class="form-input" />
-				</view>
-				<view class="form-item">
-					<text class="label">担忧</text>
-					<input maxlength="10" class="input-width" type="text" v-model="form.concerns" placeholder="请输入担忧"
-						placeholder-class="form-input" />
-				</view>
-			</view>
-			<view class="form-box">
-				<text class="form-title">其他<text class="color-price">*</text></text>
-				<view class="form-item">
-				<!-- 	<text class="label">备注</text> -->
-					<textarea maxlength="200" class="form-textarea" v-model="form.problemsToSolve" placeholder="请输入用户想解决的问题"  placeholder-class="textarea-input" />
-				</view>
-				<view class="form-item">
-					<!-- <text class="label">备注</text> -->
-					<textarea maxlength="200" class="form-textarea" v-model="form.healthSuggestions" placeholder="请输入健康管理师对用户的建议"   placeholder-class="textarea-input"/>
-				</view>
-			</view>
-		
-		</view>
-		<view class="btn-box">
-			<view class="sub-btn" @click="submit()">保存</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {getInfo,updateInfo,deleteInfo,addInfo,getMember} from '@/api/healthUser.js'
-	import {
-		getDocDetails,
-		addDoc,
-		editDoc
-	} from '@/api/doc.js'
-	export default {
-		data() {
-			return {
-				type: null,
-				patientId: null,
-				famaleurl:"/static/images/health/female_profile.png",
-				maleurl:"/static/images/health/my_heads.png",
-				checked:1,
-				// 定义直辖市列表,用于判断特殊处理
-				      municipalities: ['北京市', '上海市', '天津市', '重庆市'],
-				array:[
-					{id:1,name:'是'},
-					{id:0,name:'否'},
-					],
-				tags: [],
-				isAdd:null,
-				form: {
-					"username": null,
-					avatar:null,
-					"sex":0, 
-					"birthdate": null, 
-					"age": 0,
-					"phone":  null,
-					"idCard":  null,
-					"previousEmployer":  null,
-					"disposableIncome": null,
-					"actualConsumption":  null,
-					"city":  null,
-					"residentialCommunity": null,
-					"houseNumber": null, 
-					"area":  null, 
-					"floor":  null,
-					"partnerName":  null,
-					"partnerAge":  null,
-					"partnerEmployer":  null,
-					"grandchildrenSchool": null,
-					"isMember":  1, 
-					"memberLevel":  null, 
-					"joinTime": null,
-					"expiryTime": null,
-					"managementMonth":null,
-					"position":null,
-					"hobbies": null,
-					"specialties": null,
-					"faith": null, 
-					"concerns": null,
-					"problemsToSolve": null,
-					"healthSuggestions": null,
-				}
-			};
-		},
-		onLoad(options) {
-			this.type = options.type;
-			this.userId=options.userId;
-			this.companyUserId=options.companyUserId;
-			this.form.userId=options.userId;
-			this.form.companyUserId=options.companyUserId;
-			if (this.type == 'edit') {
-				this.getInfo();
-			}
-			this.getMember()
-		},
-		methods: {
-			sexChange(type) {
-				this.form.sex = type
-			},
-			radioClick(id) {
-			        this.form.isMember=id
-			      },
-			getMember(){
-				getMember().then(
-					res => {
-						if (res.code == 200) {
-							this.tags= res.data;
-						    
-						} else {
-							uni.showToast({
-								title: res.msg,
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-		getInfo() {
-			var data = {
-				userId: this.userId
-			};
-			getInfo(data).then(
-				res => {
-					if (res.code == 200) {
-		                this.form = res.data;
-					} else {
-						uni.showToast({
-							title: res.msg,
-						});
-					}
-				},
-				rej => {}
-			);
-		},
-			onChooseAvatar(e){
-				// 处理用户取消的情况
-				    if (e.detail.errMsg && e.detail.errMsg.includes('cancel')) {
-				      console.log('选择头像已取消')
-				      return
-				    }
-				let {
-					avatarUrl
-				} = e.detail;
-				uni.uploadFile({
-					url: uni.getStorageSync('requestPath')+'/app/common/uploadOSS', //仅为示例,非真实的接口地址
-					filePath: avatarUrl,
-					name: 'file',
-					formData: {
-						'user': 'test'  // 上传附带参数
-					},
-					success: (uploadFileRes) => {
-						this.form.avatar =JSON.parse(uploadFileRes.data).url
-					}
-				});
-			},
-			submit() {
-				if (this.form.username == null) {
-					uni.showToast({
-						icon: 'none',
-						title: "姓名不能为空",
-					});
-					return;
-				}
-				if (this.form.phone == null) {
-					uni.showToast({
-						icon: 'none',
-						title: "手机号不能为空",
-					});
-					return;
-				}
-				if (this.form.idCard == null) {
-					uni.showToast({
-						icon: 'none',
-						title: "身份证号不能为空",
-					});
-					return;
-				}
-				if (this.form.sex == null) {
-					uni.showToast({
-						icon: 'none',
-						title: "性别不能为空",
-					});
-					return;
-				}
-				if (this.form.birthdate == null) {
-					uni.showToast({
-						icon: 'none',
-						title: "出生年月不能为空",
-					});
-					return;
-				}
-				if (this.form.city == null) {
-					uni.showToast({
-						icon: 'none',
-						title: "市区不能为空",
-					});
-					return;
-				}
-				if (this.form.problemsToSolve == null) {
-					uni.showToast({
-						icon: 'none',
-						title: "用户问题不能为空",
-					});
-					return;
-				}
-				if(this.type=="add"){
-					this.addDoc()
-				}
-				else if(this.type=="edit"){
-					this.editDoc()
-				}
-                // uni.navigateTo({
-                // 	url: '/pages_health/doc?type=edit&docId='
-                // })
-			},
-	editDoc() {
-		updateInfo(this.form).then(
-			res => {
-				if (res.code == 200) {
-					uni.showToast({
-						icon: 'success',
-						title: "操作成功",
-					});
-					setTimeout(function() {
-						uni.$emit('refreshDoc');
-						uni.$emit('refreshHealthFiles');
-						uni.navigateBack({
-							delta: 1
-						})
-					}, 500);
-				} else {
-					uni.showToast({
-						icon: 'none',
-						title: res.msg,
-					});
-				}
-			},
-			rej => {}
-		);
-	},
-	addDoc() {
-		addInfo(this.form).then(
-			res => {
-				if (res.code == 200) {
-					uni.showToast({
-						icon: 'success',
-						title: "操作成功",
-					});
-					setTimeout(function() {
-						uni.$emit('refreshDoc');
-						uni.$emit('refreshHealthFiles');
-						uni.navigateBack({
-							delta: 1
-						})
-					}, 500);
-				} else {
-					uni.showToast({
-						icon: 'none',
-						title: res.msg,
-					});
-				}
-			},
-			rej => {}
-		);
-	},
-			// 出生日期选择
-			bindDateChange: function(e) {
-				this.form.birthdate = e.target.value
-			},
-			//市区
-			bindCityChange:function(e) {
-				const region = e.detail.value; // 格式: [省, 市, 区]
-				      let displayText = '';
-				      // 处理直辖市重复问题
-				      if (this.municipalities.includes(region[0])) {
-				        // 直辖市:省和市名称相同,只显示一次
-				        // 格式变为 "北京市 海淀区" 而非 "北京市 北京市 海淀区"
-				        displayText = `${region[0]}`;
-				      } else {
-				        // 非直辖市:正常显示省市区
-				        displayText = region;
-				      }
-				      this.form.city = displayText;
-				
-				},
-				//会员情况
-				// bindIsMemberChange:function(e) {
-				// 	this.form.isMember = e
-				// 	},
-				//会员分类
-				bindMemberChange:function(e,list) {
-					var index=e.target.value
-					this.form.memberLevel = list[e.target.value].dictLabel
-					},
-					//加入时间
-					bindJoinChange:function(e) {
-						this.form.joinTime = e.target.value
-						},
-						//到期时间
-						bindEndChange:function(e) {
-							this.form.expiryTime = e.target.value
-							},
-							//月份
-							bindMonthChange:function(e) {
-								this.form.managementMonth = e.target.value
-								},
-		}
-	}
-</script>
-
-<style lang="scss">
-	page {
-		height: 100%;
-	}
-
-	.content {
-		height: 100%;
-		display: flex;
-		flex-direction: column;
-		justify-content: space-between;
-
-		.inner {
-			// height: calc(100% - 120upx);
-			padding: 20upx;
-
-			.form-box {
-				padding: 0 30upx;
-				background: #FFFFFF;
-				border-radius: 16upx;
-				margin-bottom: 20upx;
-
-				.form-title {
-					font-family: PingFang SC;
-					font-weight: 600;
-					font-size: 40rpx;
-					color: #222426;
-					text-align: left;
-					padding: 30rpx 0;
-					display: block;
-				}
-
-				.form-item {
-					padding: 30upx 0;
-					display: flex;
-					align-items: flex-start;
-					border-bottom: 1px solid #F1F1F1;
-
-					&:last-child {
-						border-bottom: none;
-					}
-        
-					.label {
-						width: 300upx;
-						text-align: left;
-						font-size: 32upx;
-						line-height: 44upx;
-						font-family: PingFang SC;
-						font-weight: 500;
-						color: #222222;
-						flex-shrink: 0;
-					}
-
-					input {
-						text-align: right;
-					}
-               
-					.form-input {
-						font-size: 30upx;
-						font-family: PingFang SC;
-						font-weight: 500;
-						color: #999999;
-						text-align: right;
-					}
-
-					.form-item-tag{
-						margin-right: 16rpx;
-						.tag{
-							border-radius: 8rpx 8rpx 8rpx 8rpx;
-							border: 2rpx solid #ECECEC;
-							display: flex;
-							align-items: center;
-							padding: 24rpx;
-							font-family: PingFang SC;
-							font-weight: 400;
-							font-size: 24rpx;
-							&.active{
-								background: #F0FAFF;
-								border: 2rpx solid #008FD3;
-								color: #008FD3;
-							}
-						}
-						
-						
-						
-					}
-					.right{
-						display: flex;
-						align-items: center;
-						position: relative;
-						image{
-							border-radius: 50%;
-						}
-						.wx-head{
-							position: absolute;
-							width: 140upx;
-							height: 80upx;
-							opacity: 0;
-						}
-					}
-					.sex-box{
-						flex:1;
-						display: flex;
-						align-items: center;
-						justify-content: flex-end;
-						.sex-item{
-							width: 146rpx;
-							height: 64rpx;
-							display: flex;
-							align-items: center;
-							justify-content: center;
-							background: #F5F7FA;
-							border-radius: 32rpx 32rpx 32rpx 32rpx;
-							margin-left: 16rpx;
-							.u-icon__icon{
-								margin: 0;
-							}
-							text{
-								// font-family: PingFang SC, PingFang SC;
-								font-weight: 400;
-								font-size: 28rpx;
-								color: #898E91;
-								margin-left: 12rpx;
-							}
-							&.active{
-								background: #EBF8FF;
-								text{
-									color:#008FD3
-								}
-							}
-							&.active2{
-								background: #FCF0E7;
-								text{
-									color:#FF5030
-								}
-							}
-						}
-					}
-					.form-textarea{
-						font-size: 30upx;
-						// color: #999999;
-						height: 100upx;
-						padding: 4upx 0;
-					}
-					 .textarea-input{
-						 color: #999999;
-					 }
-					.birth-picker {
-						flex: 1;
-						display: flex;
-						align-items: center;
-						
-						.right-box{
-							width: 100%;
-							display: flex;
-							align-items: center;
-							.input-box{
-								// width: 470upx;
-							}
-							.arrow{
-								width: 13upx;
-								height: 23upx;
-								margin-left: 20upx;
-							}
-						}
-					}
-				}
-			}
-		}
-
-		.btn-box {
-			height: 120upx;
-			padding: 0 30upx;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-
-			// position: fixed;
-			// width: 90%;
-			// bottom: 0;
-			// left: 50%;
-			// transform: translate(-50%,-50%);
-			// background: #FFFFFF;
-			.sub-btn {
-				width: 100%;
-				height: 88upx;
-				line-height: 88upx;
-				text-align: center;
-				font-size: 32upx;
-				font-family: PingFang SC;
-				font-weight: bold;
-				color: #FFFFFF;
-				background: #008FD3 ;
-				border-radius: 44upx;
-				margin-bottom: 40upx;
-			}
-		}
-	}
-</style>

+ 0 - 294
pages_live/card.vue

@@ -1,294 +0,0 @@
-<template>
-	<view class="content">
-		<view class="inner">
-			<view class="bg">
-				<image class="w622 h622" src="@/static/image/bg_invitecard.png" mode=""></image>
-				<view class="infor">
-					<view class="title one-t">康复医学概论</view>
-					<view class="name-title">
-						<image class="w32 h32 " src="@/static/image/icon_doctor_fill.png" mode=""></image>
-						<view class="one-t">王小明 | 消化内科 | 北京人民医院</view>
-						</view>
-					<view class="time-title">
-						<image class="w32 h32 " src="@/static/image/icon_doctor_fill.png" mode=""></image>
-						<view class="one-t">2025年12月13日 18:00</view>
-						</view>
-				</view>
-			</view>
-				
-				<view class="code">
-					<image class="w176 h176 " src="@/static/image/icon_doctor_fill.png" mode=""></image>
-					<view class="tips">长按识别二维码,观看直播</view>
-				</view>
-		</view>
-		<view class="share-box">
-			<view class="weixin" style="margin-right: 176rpx;">
-				<image class="w100 h100 " src="@/static/image/icon_share_wechat.png" mode=""></image>
-				<text>微信好友</text>
-				<button class="share" data-name="shareBtn" open-type="share"></button>
-			</view>
-			<view class="setimg" @tap="saveInviteCard">
-				<image class="w100 h100 " src="@/static/image/icon_share_save.png" mode=""></image>
-				<text>保存图片</text>
-			</view>
-		</view>
-		<canvas type="2d" id="inviteCardCanvas" style="width: 622rpx; height: 920rpx; position: fixed; top: -9999rpx; left: -9999rpx;"></canvas>
-	</view>
-</template>
-
-<script>
-	import {
-		getCompetitorById,saveCompetitor,updateCompetitor
-	} from '@/api/companyUser.js'
-	export default {
-		data() {
-			return {
-			 bgImg: "/static/image/bg_invitecard.png",
-			      doctorIcon: "/static/image/icon_doctor_fill.png",
-			      qrCodeImg: "/static/image/icon_doctor_fill.png", // 替换为真实二维码
-			      wechatIcon: "/static/image/icon_share_wechat.png",
-			      saveIcon: "/static/image/icon_share_save.png"
-				
-			};
-		},
-		onLoad(options) {
-			// this.type = option.type;
-			// this.form.userId=options.userId
-			// this.form.companyUserId=options.companyUserId;
-			// console.log(this.type)
-			// if (this.type == 'edit') {
-			// 	this.id=option.id;
-			// 	this.getCompetitorInfo();
-			// }
-			uni.showShareMenu({
-				withShareTicket:true,
-				//小程序的原生菜单中显示分享按钮,才能够让发送给朋友与分享到朋友圈两个按钮可以点击
-				menus:["shareAppMessage"] //不设置默认发送给朋友
-			})
-		},
-		//发送给朋友
-		onShareAppMessage(res) {
-			// if(this.utils.isLogin()){
-			// 	var user=JSON.parse( uni.getStorageSync('userInfo'))
-			// 	return {
-			// 		title: this.product.productName,
-			// 		path: '/pages/shopping/productDetails?productId='+this.product.productId+"&userId="+user.userId,
-			// 		imageUrl: 'https://user.test.ylrztop.com/images/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
-			// 	}
-			// }
-		},
-		methods: {
-		  // 保存邀请卡图片
-		  			async saveInviteCard() {
-		  				try {
-		  					uni.showLoading({ title: "生成图片中..." });
-		  
-		  					// 1. 获取canvas上下文(Uniapp兼容写法)
-		  					const query = uni.createSelectorQuery().in(this);
-		  					const canvasRes = await new Promise((resolve) => {
-		  						query.select("#inviteCardCanvas").node().exec((res) => {
-		  							resolve(res[0]);
-		  						});
-		  					});
-		  					if (!canvasRes.node) {
-		  						throw new Error("获取Canvas失败");
-		  					}
-		  					const canvas = canvasRes.node;
-		  					const ctx = canvas.getContext("2d");
-		  
-		  					// 2. 适配设备像素比,保证图片高清
-		  					const systemInfo = uni.getSystemInfoSync();
-		  					const dpr = systemInfo.pixelRatio || 1;
-		  					canvas.width = 622 * dpr;
-		  					canvas.height = 920 * dpr; // 与canvas样式高度统一
-		  					ctx.scale(dpr, dpr);
-		  
-		  					// 3. 加载并绘制背景图
-		  					const bgImg = await this.loadImage(this.bgImg,canvas);
-		  					ctx.drawImage(bgImg, 0, 0, 622, 622);
-		  
-		  					// 4. 绘制文字(标题/医生/时间)
-		  					ctx.font = "bold 32rpx PingFang SC"; // 匹配样式中的字体和大小
-		  					ctx.fillStyle = "#FFFFFF";
-		  					ctx.fillText("康复医学概论", 46, 580); // 调整坐标匹配UI布局
-		  
-		  					ctx.font = "24rpx PingFang SC";
-		  					ctx.fillText("王小明 | 消化内科 | 北京人民医院", 46, 616);
-		  					ctx.fillText("2025年12月13日 18:00", 46, 652);
-		  
-		  					// 5. 绘制二维码
-		  					const qrImg = await this.loadImage(this.qrCodeImg,canvas);
-		  					const qrX = (622 - 176) / 2; // 二维码居中
-		  					ctx.drawImage(qrImg, qrX, 622 + 32, 176, 176); // 匹配code区域的padding
-		  
-		  					// 6. 绘制二维码提示文字
-		  					ctx.font = "24rpx PingFang SC";
-		  					ctx.fillStyle = "#999999";
-		  					const tipsText = "长按识别二维码,观看直播";
-		  					const textWidth = ctx.measureText(tipsText).width;
-		  					const tipsX = (622 - textWidth) / 2;
-		  					ctx.fillText(tipsText, tipsX, 622 + 32 + 176 + 16); // 匹配tips的margin-top
-		  
-		  					// 7. 导出canvas为临时图片
-		  					const tempFilePath = await new Promise((resolve, reject) => {
-		  						uni.canvasToTempFilePath({
-		  							canvas: canvas,
-		  							x: 0,
-		  							y: 0,
-		  							width: 622,
-		  							height: 920,
-		  							destWidth: 622 * dpr,
-		  							destHeight: 920 * dpr,
-		  							success: (res) => resolve(res.tempFilePath),
-		  							fail: (err) => reject(err)
-		  						}, this);
-		  					});
-		  
-		  					uni.hideLoading();
-		  
-		  					// 8. 申请相册权限并保存图片
-		  					try {
-		  						await uni.authorize({ scope: "scope.writePhotosAlbum" });
-		  					} catch (authErr) {
-		  						// 授权失败时引导用户手动开启
-		  						uni.showModal({
-		  							title: "提示",
-		  							content: "需要相册权限才能保存图片,请前往设置开启",
-		  							confirmText: "去设置",
-		  							success: (res) => {
-		  								if (res.confirm) uni.openSetting();
-		  							}
-		  						});
-		  						return;
-		  					}
-		  
-		  					await uni.saveImageToPhotosAlbum({ filePath: tempFilePath });
-		  					uni.showToast({ title: "图片保存成功", icon: "success" });
-		  
-		  				} catch (err) {
-		  					uni.hideLoading();
-		  					uni.showToast({ title: "保存失败", icon: "none" });
-		  					console.error("保存图片失败:", err);
-		  				}
-		  			},
-		  			// 优化图片加载方法,适配Uniapp静态资源
-		  			loadImage(src,canvas) {
-		  							return new Promise((resolve, reject) => {
-		  								// 处理@/static路径为绝对路径
-		  								// const realSrc = src.replace("@", "");
-		  								const img = canvas.createImage();
-		  								// 小程序环境下添加跨域标识
-		  								img.crossOrigin = "anonymous";
-		  								img.src = src;
-		  								img.onload = () => resolve(img);
-		  								img.onerror = (err) => reject(err);
-		  							});
-		  						}
-		}
-	}
-</script>
-
-<style lang="scss">
-	page {
-		height: 100%;
-	}
-
-	.content {
-		height: 100%;
-		display: flex;
-		flex-direction: column;
-	.inner{
-		width: 622rpx;
-		height: 920rpx;
-		margin: 64rpx;
-		background: #FFFFFF;
-		box-shadow: 0rpx 8rpx 32rpx 0rpx rgba(170,168,168,0.12);
-		border-radius: 24rpx 24rpx 24rpx 24rpx;
-		.bg{
-			position: relative;
-			// padding: 32rpx 46rpx;
-			.infor{
-				width: 100%;
-				position: absolute;
-				display: flex;
-				flex-direction: column;
-				align-items: flex-start;
-				padding-left:46rpx;
-				bottom: 24rpx;
-				
-				.title{
-					font-family: PingFang SC, PingFang SC;
-					font-weight: 600;
-					font-size: 32rpx;
-					color: #FFFFFF;
-					margin-bottom: 26rpx;
-					width: 80%;
-				}
-				.name-title,.time-title{
-					width: 100%;
-					display: flex;
-					align-items: center;
-					font-family: PingFang SC, PingFang SC;
-					font-weight: 600;
-					font-size: 24rpx;
-					color: #FFFFFF;
-					line-height: 36rpx;
-					margin-bottom: 8rpx;
-					image{
-						margin-right: 14rpx;
-					}
-					.one-t{
-						width: 80%;
-					}
-				}
-				
-			}
-			
-		}
-	}
-	.code{
-		padding: 32rpx;
-		display: flex;
-		flex-direction: column;
-		align-items: center;
-		background: #FFFFFF;
-		.tips{
-			margin-top: 16rpx;
-			font-family: PingFang SC, PingFang SC;
-			font-weight: 400;
-			font-size: 24rpx;
-			color: #999999;
-			line-height: 36rpx;
-		}
-	}
-		.share-box{
-			margin-top: 108rpx;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			.weixin,.setimg{
-				display: flex;
-				align-items: center;
-				flex-direction: column;
-				position: relative; 
-				text{
-					margin-top: 18rpx;
-					font-family: PingFang SC, PingFang SC;
-					font-weight: 400;
-					font-size: 28rpx;
-					color: #666666;
-					line-height: 44rpx;
-				}
-			}
-			.share{
-				display: inline-block;
-						position: absolute;
-						top: 0;
-						left: 0;
-						width: 100%;
-						height: 100%;
-						opacity: 0;
-			}
-		}
-	}
-</style>

+ 0 - 105
pages_live/healthConsulting.vue

@@ -1,105 +0,0 @@
-<template>
-	<view class="hb column hidden container ">
-		<image class="bg" src="https://user.test.ylrztop.com/images/health_counseling_bg.png" mode="widthFix"></image>
-		<view :style="{height: statusBarHeight,background: bgColor }"></view>
-		<u-navbar
-			title="健康咨询" titleStyle="font-weight: bold;"
-			@rightClick="rightClick"
-			:autoBack="true"
-			:bg-color="bgColor"
-		>
-		</u-navbar>
-		<scroll-view class="content" :scroll-y="true">
-			<view v-for="(index,item) in 10" :key="index" class="healthlist justify-start">
-				<image src="https://user.test.ylrztop.com/images/71014b69fdcc4b56ae2a84bdc28f11c3.png" mode="aspectFill" class="w280 h210 radius12"></image>
-				<view class="column justify-between ml20">
-					<view>
-						<view class="color-text bold fs36">翟佳滨教授专家团队</view>
-						<view class="fs24 mt8 color-orange">专家团队会诊咨询</view>
-					</view>
-					<view class="healthbox" @click="toDetails">会诊咨询</view>
-				</view>
-			</view>
-			<view class="h120"></view>
-		</scroll-view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				statusBarHeight:'',
-				top:0
-			}
-		},
-		computed: {
-			// 计算属性的 getter
-			bgColor: function() {
-				var top=this.top/30;
-				return 'rgba(11,179,242, ' + top + ')';
-			},
-		},
-		onLoad() {
-		    // 获取系统信息
-		    const sys = uni.getSystemInfoSync()
-		    this.statusBarHeight = sys.statusBarHeight+'px'
-		},
-		onUnload() { //普通页面在 onUnload 生命周期中执行
-		    uni.$emit('stop')
-		},
-		onHide() { //tabBar页面在onHide生命周期中执行
-		    uni.$emit('stop')
-		},
-		onPageScroll(e) {
-		  	//console.log(e)
-		  	this.top=e.scrollTop;
-		},
-		methods: {
-			toDetails(){
-				uni.navigateTo({
-					url:'/pages_health/ConsultationDetails'
-				})
-			}
-		}
-	}
-</script>
-
-<style scoped lang="scss">
-.container{
-	position: relative;
-	.bg{
-		width: 100%;
-		height: 380rpx;
-		position: absolute;
-		top: 0;
-		left: 0;
-		z-index: -1;
-	}
-}
-.content{
-	padding-top: calc(var(--status-bar-height) + 140rpx);
-	  height: 100vh;
-	  box-sizing: border-box;
-	  width: 100%;
-	  .healthlist{
-		  width: 85%;
-		  padding: 32rpx;
-		  margin: 0 auto;
-		  background: #FFFFFF;
-		  box-shadow: 0rpx 0rpx 20rpx 8rpx rgba(0,143,211,0.1);
-		  border-radius: 16rpx;
-		  margin-bottom: 20rpx !important;
-	  }
-}
-.healthbox{
-	width: 200rpx;
-	height: 72rpx;
-	background: linear-gradient( 180deg, #27B7FB 0%, #008FD3 100%);
-	box-shadow: 0rpx 8rpx 8rpx 0rpx rgba(0,143,211,0.2);
-	border-radius: 36rpx 36rpx 36rpx 36rpx;
-	text-align: center;
-	line-height: 72rpx;
-	color: #FFFFFF;
-}
-</style>

+ 0 - 512
pages_live/healthfiles.vue

@@ -1,512 +0,0 @@
-<template>
-	<view class="hb column hidden container">
-		<image class="bg" src="https://user.test.ylrztop.com/images/jkda_top_bg.png" mode="widthFix"></image>
-		<view :style="{height: statusBarHeight,background: bgColor }"></view>
-		<u-navbar title="健康档案" titleStyle="font-weight: bold;" @rightClick="rightClick" :autoBack="true"
-			:bg-color="bgColor">
-		</u-navbar>
-		<scroll-view class="content" :scroll-y="true">
-			<view class="justify-between align-center bg-white radius12 p28">
-				<view class="justify-start align-center">
-					<image :src="info.avatar||maleurl" class="w140 h140"></image>
-					<view class="ml30">
-						<view class="bold fs32 mb12">{{info.username||'-'}}</view>
-						<view class="justify-start align-center fs24">
-							<text class="orangebox">{{info.sex==0?'男':'女'}}</text>
-							<text class="orangebox ml12">{{info.age||'-'}}岁</text>
-						</view>
-					</view>
-				</view>
-				<u-icon name="arrow-right" @click="goToUser"></u-icon>
-			</view>
-			<view class="fs36 bold mt20">健康数据</view>
-			<view class="health-monitoring">
-				<view class="health-monitoring-item" @click="handleMonitoring(0)">
-					<view class="health-monitoring-title">
-						<view>
-							<view class="health-monitoring-maintitle bold">{{BMI?BMI.toFixed(2):'--'}}</view>
-							<view :class="bmiCategory=='超重'||bmiCategory=='肥胖'?'text-color':''">{{bmiCategory}}</view>
-						</view>
-						<image src="/static/images/health/BMI_icon.png" mode="aspectFill"></image>
-					</view>
-					<view class="health-bmi mt40">
-						<view class="justify-between align-center mb12">
-							<view class="justify-start align-center ">
-								<text class="color-text2 fs24 mr20">身高</text>
-								<view class="fs24">{{form.height?form.height+'cm':'--'}}</view>
-							</view>
-							<image src="/static/images/health/services_edit_icon.png" class="w32 h32"></image>
-						</view>
-						<view class="justify-between align-center">
-							<view class="justify-start align-center ">
-								<text class="color-text2 fs24 mr20">体重</text>
-								<view class="fs24">{{form.weight?form.weight+'kg':'--'}}</view>
-							</view>
-							<image src="/static/images/health/services_edit_icon.png" class="w32 h32"></image>
-						</view>
-					</view>
-				</view>
-				<view class="health-monitoring-item" v-for="(item,index) in infoList" :key="index"
-					@click="handleMonitoring(item,index+1)">
-					<view class="health-monitoring-title">
-						<view>
-							<view class="health-monitoring-maintitle bold">{{item.title}}</view>
-							<view v-if='index<2'>{{item.type==0?'正常':item.type==1?'偏小':'偏大'}}</view>
-							<view v-if='index>1'>{{item.type==0?'正常':item.type==1?'轻微':'严重'}}</view>
-						</view>
-						<image :src="item.icon" mode="aspectFill"></image>
-					</view>
-					<view>
-						<view class="health-monitoring-res resnum">{{item.value.value1 || '--'}}</view>
-						<view class="health-monitoring-time">{{item.value.measurementDate|| '--'}}
-							{{item.value.measurementTime|| '--'}}</view>
-					</view>
-				</view>
-			</view>
-			<view class="fs36 bold mtb20">健康史</view>
-			<view class="cardbox">
-				<view class="health-item" @click="handleEditHealth()">
-					<image class="health-bgicon" src="https://user.test.ylrztop.com/images/jbs_icon.png"></image>
-					<view class="health-item-info">
-						<view class="cardbox-maintitle" style="margin-bottom: 0;">疾病史</view>
-						<view class="text-overflow" style="margin-top: 20rpx;">{{form.otherMedicalHistory || "尚未记录"}}
-						</view>
-					</view>
-				</view>
-				<view class="health-item" @click="handleEditHealth()">
-					<image class="health-bgicon" src="https://user.test.ylrztop.com/images/zzs_icon.png"></image>
-					<view class="health-item-info">
-						<view class="cardbox-maintitle" style="margin-bottom: 0;">症状史</view>
-						<view class="text-overflow" style="margin-top: 20rpx;">{{form.symptomHistory || "尚未记录"}}</view>
-					</view>
-				</view>
-			</view>
-			<view class="h80"></view>
-		</scroll-view>
-	</view>
-</template>
-
-<script>
-	import {
-		getUserInfo
-	} from '@/api/user.js'
-	import {
-		getInfo,
-		getDoc,
-		homeInfo
-	} from '@/api/healthUser.js'
-	import carKeyboard from '../uni_modules/uview-ui/libs/config/props/carKeyboard';
-	export default {
-		data() {
-			return {
-				statusBarHeight: '',
-				top: 0,
-				null: 0,
-				famaleurl: "/static/images/health/female_profile.png",
-				maleurl: "/static/images/health/my_heads.png",
-				img: [
-					
-					"/static/images/health/hip_circumference_icon.png",
-					"/static/images/health/blood_sugar_icon.png",
-					"/static/images/health/blood_pressure_icon.png",
-					"/static/images/health/uric_acid_icon.png"
-				],
-				indexInfo: [],
-				bgColor: 'rgba(11,179,242,0)',
-				user: null,
-				bmiCategory: '',
-				info: {},
-				infoList: [{
-					title:'腰围',
-					icon:"/static/images/health/waist_circumference_icon.png",
-					type:0,
-					value:{}
-				},{
-					title:'臀围',
-					icon:"/static/images/health/hip_circumference_icon.png",
-					type:0,
-					value:{}
-				},{
-					title:'血糖',
-					icon:"/static/images/health/blood_sugar_icon.png",
-					type:0,
-					value:{}
-				},{
-					title:'血压',
-					icon:"/static/images/health/blood_pressure_icon.png",
-					type:0,
-					value:{}
-				},{
-					title:'尿酸',
-					icon:"/static/images/health/uric_acid_icon.png",
-					type:0,
-					value:{}
-				}
-				],
-				form: null,
-				dataMap: {},
-				BMI: null
-
-			}
-		},
-		computed: {
-			// 计算属性的 getter
-			// bgColor: function() {
-			// 	var top=this.top/30;
-			// 	return 'rgba(11,179,242, ' + top + ')';
-			// },
-		},
-		onLoad() {
-			// 获取系统信息
-			const sys = uni.getSystemInfoSync()
-			this.statusBarHeight = sys.statusBarHeight + 'px'
-
-			// uni.navigateTo({
-			// 	url: '/pages_health/doc?type=edit&docId='
-			// })
-			this.getUserInfo()
-			uni.$on('refreshHealthFiles', () => {
-				this.getDoc()
-				this.getUserInfo()
-				// this.homeInfo()
-			})
-
-			// this.getInfo()
-
-		},
-		onUnload() { //普通页面在 onUnload 生命周期中执行
-			uni.$off('refreshHealthFiles');
-			uni.$emit('stop')
-		},
-		onHide() { //tabBar页面在onHide生命周期中执行
-			uni.$emit('stop')
-		},
-		onPageScroll(e) {
-			//console.log(e)
-			// this.top=e.scrollTop;
-		},
-		methods: {
-			getUserInfo() {
-				getUserInfo().then(
-					res => {
-						if (res.code == 200) {
-							if (res.user != null) {
-								this.user = res.user;
-								this.getInfo(this.user.userId)
-								this.homeInfo(this.user.userId)
-							} else {
-								this.utils.loginOut();
-							}
-
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			getInfo(id) {
-				var that = this
-				var data = {
-					userId: id
-				};
-				getInfo(data).then(
-					res => {
-						if (res.code == 200) {
-							var data = res.data
-							if (res.data.birthdate == null) {
-								uni.showToast({
-									icon: 'none',
-									title: "请先完善用户信息",
-								});
-								setTimeout(function() {
-									uni.navigateTo({
-										url: '/pages_health/addUser?type=edit&userId=' + id
-									})
-								}, 500);
-
-							} else {
-								this.getDoc(id, data)
-							}
-
-						} else {
-							uni.showToast({
-								title: res.msg,
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			getDoc(id, form) {
-				var data = {
-					userId: id
-				};
-				getDoc(data).then(
-					res => {
-						if (res.code == 200) {
-							this.form = res.data
-							this.$set(this, 'form', res.data)
-							if (this.form.weight && this.form.height) {
-								const heightInMeter = this.form.height / 100; // cm → m
-								this.BMI = this.form.weight / (heightInMeter * heightInMeter);
-								// console.log(this.BMI,'bmi')
-								this.setBmiCategory(); // 同步BMI分类
-							} else {
-								this.BMI = null;
-								this.bmiCategory = '未填写';
-							}
-							if (form.birthdate !== null && res.data == null) {
-								uni.navigateTo({
-									url: '/pages_health/addDoc?userId=' + id
-								})
-							}
-						} else {
-							uni.showToast({
-								title: res.msg,
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			setBmiCategory() {
-				if (!this.BMI) return;
-				if (this.BMI < 18.5) {
-					this.bmiCategory = '偏瘦';
-				} else if (this.BMI < 24) {
-					this.bmiCategory = '正常';
-				} else if (this.BMI < 28) {
-					this.bmiCategory = '超重';
-				} else {
-					this.bmiCategory = '肥胖';
-				}
-			},
-
-			homeInfo(id) {
-				var data = {
-					userId: id
-				};
-				homeInfo(data).then(
-					res => {
-						if (res.code == 200) {
-							this.info = res.data
-							const valueList = Object.values(res.data.dataMap);
-							const list = valueList.filter(item => item !== null);
-							for (var i = 0; i < this.infoList.length; i++) {
-							  // 假设list与infoList长度相同且对应
-							  this.infoList[i].type = list[i].level;
-							  this.infoList[i].value = list[i];
-							}
-						} else {
-							uni.showToast({
-								title: res.msg,
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			handleMonitoring(item, index) {
-				console.log(index, 'index')
-				switch (index) {
-					case 1:
-						uni.navigateTo({
-							url: '/pages_echarts/waistLine?userId=' + this.user.userId
-						})
-						break;
-					case 2:
-						uni.navigateTo({
-							url: '/pages_echarts/hips?userId=' + this.user.userId
-						})
-						break;
-					case 3:
-						uni.navigateTo({
-							url: '/pages_echarts/bloodSugar?userId=' + this.user.userId
-						})
-						break;
-					case 4:
-						uni.navigateTo({
-							url: '/pages_echarts/bloodPressure?userId=' + this.user.userId
-						})
-						break;
-					case 5:
-						uni.navigateTo({
-							url: '/pages_echarts/acid?userId=' + this.user.userId
-						})
-						break;
-					default:
-						uni.navigateTo({
-							url: '/pages_health/addDoc?type=add&userId=' + this.user.userId
-						})
-						break;
-				}
-			},
-			handleEditHealth(item, index) {
-				uni.navigateTo({
-					url: '/pages_health/addDoc?type=add&userId=' + this.user.userId
-				})
-			},
-			goToUser() {
-				console.log(this.info, '---')
-				if (this.info !== null) {
-					uni.navigateTo({
-						url: '/pages_health/addUser?type=edit&userId=' + this.user.userId
-					})
-				}
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.container {
-		position: relative;
-		background: #EFF3F7;
-
-		.bg {
-			width: 100%;
-			height: 380rpx;
-			position: absolute;
-			top: 0;
-			left: 0;
-			z-index: 0;
-		}
-	}
-
-	.text-color {
-		color: #FF4B33;
-		width: 72rpx;
-		height: 40rpx;
-		text-align: center;
-		line-height: 40rpx;
-		border-radius: 8rpx 8rpx 8rpx 8rpx;
-		border: 1rpx solid #FFA599;
-	}
-
-	.content {
-		padding-top: calc(var(--status-bar-height) + 140rpx) !important;
-		// height: 100vh;
-		box-sizing: border-box;
-		width: 100%;
-		padding: 20rpx;
-	}
-
-	.orangebox {
-		border-radius: 24rpx;
-		border: 1rpx solid #FFA599;
-		color: #FF4B33;
-		font-size: 24rpx;
-		padding: 4rpx 20rpx;
-	}
-
-	.health-monitoring {
-		// @include u-flex(row, center, flex-start);
-		display: flex;
-		justify-content: space-between;
-		flex-wrap: wrap;
-		// gap: 16rpx;
-		margin-top: 20rpx;
-		margin-bottom: -16rpx;
-		margin-right: -16rpx;
-
-		&-item {
-			width: 343rpx;
-			min-height: 264rpx;
-			margin: 0 16rpx 16rpx 0;
-			overflow: hidden;
-			background: #FFFFFF;
-			border-radius: 16rpx 16rpx 16rpx 16rpx;
-			padding: 24rpx 34rpx 24rpx 24rpx;
-			box-sizing: border-box;
-		}
-
-		&-maintitle {
-			margin-bottom: 4rpx;
-			font-size: 30rpx;
-			color: #333333;
-		}
-
-		&-title {
-			// @include u-flex(row, center, space-between);
-			display: flex;
-			justify-content: space-between;
-			font-weight: 400;
-			font-size: 24rpx;
-			color: #999999;
-
-			image {
-				width: 72rpx;
-				height: 72rpx;
-				flex-shrink: 0;
-			}
-		}
-
-		.resnum {
-			font-family: DIN, DIN;
-			font-weight: 500;
-			font-size: 64rpx;
-		}
-
-		&-res {
-			height: 78rpx;
-			margin: 20rpx 0 6rpx;
-			font-family: PingFang SC, PingFang SC;
-			font-weight: 600;
-			font-size: 48rpx;
-			color: #333333;
-		}
-
-		&-time {
-			font-weight: 400;
-			font-size: 22rpx;
-			color: #999999;
-		}
-	}
-
-	.cardbox {
-		display: flex;
-		flex-direction: row;
-		align-items: center;
-		justify-content: space-between;
-		flex-wrap: wrap;
-		gap: 16rpx 14rpx;
-
-		&-maintitle {
-			margin-bottom: 4rpx;
-			font-weight: 600;
-			font-size: 30rpx;
-			color: #333333;
-		}
-	}
-
-	.health-item {
-		width: 343rpx;
-		height: 224rpx;
-		padding: 24rpx;
-		box-sizing: border-box;
-		background: #FFFFFF;
-		border-radius: 16rpx 16rpx 16rpx 16rpx;
-		overflow: hidden;
-		position: relative;
-		font-family: PingFang SC, PingFang SC;
-		font-weight: 400;
-		font-size: 24rpx;
-		color: #999999;
-	}
-
-	.health-item-info {
-		position: relative;
-	}
-
-	.health-bgicon {
-		position: absolute;
-		right: 0;
-		bottom: 0;
-		width: 168rpx;
-		height: 168rpx;
-	}
-</style>

+ 0 - 463
pages_live/lecture.vue

@@ -1,463 +0,0 @@
-<template>
-	<view>
-		<view class="top-content">
-			<view class="search-cont">
-				<view class="inner">
-					<image class="icon-search" src="../../static/images/search.png" mode=""></image>
-					<input type="text" v-model="searchValue" placeholder="请输入关键字或作者" confirm-type="search"
-						@confirm="doSearch"
-						placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
-				</view>
-			</view>
-			<view class="keyword-list">
-				<!-- 关键字列表 -->
-				<!-- <scroll-view   scroll-x="true" > -->
-				<view class="inner">
-					<view v-for="(item,index) in cates" :key="index" :class="choseCateId == item.cateId?'item active':'item'" @click="choseCate(item)">
-						{{ item.cateName }}
-					</view>
-				</view>
-			<!-- </scroll-view> -->
-				<!-- <u-tabs :list="cates" :activeStyle="{fontWeight: '500',color: '#333333',fontSize: '32rpx',lineHeight:'88rpx'}"
-					:inactiveStyle="{color: '#999999',fontSize: '28rpx',lineHeight:'88rpx'}" @click="choseCate(item)"
-					scrollable="false" lineColor="#388BFF"></u-tabs> -->
-			</view>
-		</view>
-
-		<mescroll-body :top="top" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback"
-			:down="downOption" :up="upOption">
-			<view class="know-list">
-				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
-					<view class="image-box">
-						<image class="bg" mode="aspectFill" :src="item.imageUrl"></image>
-						<view class="views">
-							<image mode="aspectFill" src="@/static/image/icon_goon.png"></image>
-							<view class="status">进行中</view>
-						</view>
-					</view>
-					<view class="article-title-box">
-						<view class="article-title one-t">王医生学术直播</view>
-						<view class="name-title ">
-							<image mode="aspectFill" src="@/static/image/icon_doctor.png"></image>
-							<view class="one-t">
-								王小明-副主任医师/副主任副主任
-							</view>
-						</view>
-						<view class="position-title">
-							<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>
-							<view class="one-t">
-								北京人民医院
-							</view>
-						</view>
-					</view>
-				</view>
-				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
-					<view class="image-box">
-						<image class="bg" mode="aspectFill" :src="item.imageUrl"></image>
-						<view class="views">
-							<image mode="aspectFill" src="@/static/image/icon_goon.png"></image>
-							<view class="status">进行中</view>
-						</view>
-					</view>
-					<view class="article-title-box">
-						<view class="article-title one-t">王医生学术直播</view>
-						<view class="name-title">
-							<image mode="aspectFill" src="@/static/image/icon_doctor.png"></image>
-							<view class="position-title">
-								<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>
-								<view class="one-t">
-									北京人民医院
-								</view>
-							</view>
-						</view>
-						<view class="position-title one-t">
-							<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>北京人民医院
-						</view>
-					</view>
-				</view>
-				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
-					<view class="image-box">
-						<image class="bg" mode="aspectFill" :src="item.imageUrl"></image>
-						<view class="views">
-							<image mode="aspectFill" src="@/static/image/icon_goon.png"></image>
-							<view class="status">进行中</view>
-						</view>
-					</view>
-					<view class="article-title-box">
-						<view class="article-title one-t">王医生学术直播</view>
-						<view class="name-title">
-							<image mode="aspectFill" src="@/static/image/icon_doctor.png"></image>
-							<view class="one-t">
-								王小明-副主任医师/副主任副主任
-							</view>
-						</view>
-						<view class="position-title">
-							<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>
-							<view class="one-t">
-								北京人民医院
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</mescroll-body>
-
-	</view>
-</template>
-
-<script>
-	import {
-		getArticleCate,
-		getArticleList
-	} from '@/api/article'
-	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
-	export default {
-		mixins: [MescrollMixin],
-		data() {
-			return {
-				top: '0px',
-				cates: [
-					{cateName: '全部',cateId:0},
-					{cateName:'待开播',cateId:1},
-					{cateName: '直播中',cateId:2},
-					{cateName:'看回放',cateId:3},
-				],
-				choseCateId: 0,
-				// 状态栏的高度
-				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
-				searchValue: '',
-				mescroll: null,
-				// 上拉加载的配置
-				downOption: {
-
-				},
-				upOption: {
-					onScroll: true,
-					use: true, // 是否启用上拉加载; 默认true
-					page: {
-						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
-						size: 10 // 每页数据的数量,默认10
-					},
-					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
-					empty: {
-						icon: '/static/images/no_data.png',
-						tip: '暂无数据'
-					},
-					textNoMore: '没有更多了~'
-				},
-				// 列表数据
-				dataList: [],
-			};
-		},
-		onShow() {
-			//this.getArticleCate();
-			var that = this;
-			setTimeout(function() {
-				let query = uni.createSelectorQuery().select(".top-content");
-				query.boundingClientRect(function(data) { //data - 各种参数
-					console.log(data.height) // 获取元素宽度
-					that.top = data.height + "px";
-				}).exec()
-			}, 500);
-		},
-		methods: {
-			doSearch() {
-				this.mescroll.resetUpScroll()
-			},
-			getArticleCate() {
-				var that = this;
-				let data = {};
-				getArticleCate(data).then(
-					res => {
-						if (res.code == 200) {
-							this.cates = res.data.map(person => ({
-								name: person.cateName
-							}));
-
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			mescrollInit(mescroll) {
-				this.mescroll = mescroll;
-			},
-			/*下拉刷新的回调 */
-			downCallback(mescroll) {
-				mescroll.resetUpScroll()
-			},
-			upCallback(page) {
-				//联网加载数据
-				var that = this;
-				var data = {
-					keyword: this.searchValue,
-					cateId: this.choseCateId,
-					page: page.num,
-					pageSize: page.size
-				};
-				getArticleList(data).then(res => {
-					if (res.code == 200) {
-						//设置列表数据
-						if (page.num == 1) {
-							that.dataList = res.data.list;
-
-						} else {
-							that.dataList = that.dataList.concat(res.data.list);
-
-						}
-						that.mescroll.endBySize(res.data.list.length, res.data.total);
-
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: "请求失败",
-						});
-						that.dataList = null;
-						that.mescroll.endErr();
-					}
-				});
-			},
-			// 关键词选择
-			choseCate(item) {
-				this.choseCateId = item.cateId;
-				this.mescroll.resetUpScroll()
-			},
-			// 查看详情
-			showDetail(item) {
-				uni.navigateTo({
-					url: './addForm?articleId='
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	page {
-		background: #EFF3F7;
-	}
-
-	.status_bar {
-		width: 100%;
-
-	}
-
-	.top-content {
-		width: 100%;
-		position: fixed;
-		top: 0;
-		left: 0;
-		z-index: 10;
-	}
-
-	.top-title {
-		height: 88upx;
-		line-height: 88upx;
-		font-size: 42upx;
-		font-family: Source Han Sans CN;
-		font-weight: bold;
-		color: #222222;
-		padding-left: 41upx;
-	}
-
-	.search-cont {
-		padding: 16upx 30upx;
-         background: #fff;
-		.inner {
-			box-sizing: border-box;
-			width: 100%;
-			height: 72upx;
-			background: #F7F8FA;
-			border-radius: 36upx;
-			display: flex;
-			align-items: center;
-			padding: 0 30upx;
-
-			.icon-search {
-				width: 28upx;
-				height: 28upx;
-				margin-right: 20upx;
-			}
-
-			input {
-				height: 60upx;
-				line-height: 60upx;
-				flex: 1;
-			}
-		}
-	}
-
-	.keyword-list {
-		box-sizing: border-box;
-		// padding: 10upx 27upx;
-		height: 88rpx;
-        background: #FFFFFF;
-		flex-shrink: 0;
-		.inner {
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-		}
-
-		.item {
-			flex:1;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			flex-shrink: 0;
-			height: 88upx;
-			line-height: 88upx;
-			font-size: 28upx;
-			font-family: PingFang SC;
-			font-weight: 400;
-			color: #999999;
-            position: relative;
-			&.active {
-				font-weight: 500;
-				color: #333333;
-				&::after {
-					content: "";
-					width: 56upx;
-					height: 6upx;
-					background: #388BFF;
-					position: absolute;
-					bottom: 0;
-					border-radius: 3rpx 3rpx 3rpx 3rpx;
-				}
-			}
-		}
-	}
-
-	.know-list {
-		margin-top: 24upx;
-		padding: 0 24upx;
-		display: flex;
-		align-items: center;
-		flex-direction: row;
-		flex-shrink: 0;
-		flex-wrap: wrap; 
-		width: 100%;
-		box-sizing: border-box;
-		.item {
-			box-sizing: border-box;
-			width: calc(50% - 10rpx); 
-			height: 340rpx;
-			background: #FFFFFF;
-			border-radius: 16upx;
-			display: flex;
-			align-items: center;
-			justify-content: flex-start;
-			flex-direction: column;
-			margin-bottom: 18rpx;
-			margin-right: 18rpx;
-			&:nth-child(2){
-				margin-right:0;
-			}
-            .image-box {
-            	width: 100%;
-            	height: 192rpx;
-            	position: relative;
-            	border-radius: 16rpx 16rpx 0rpx 0rpx;
-            
-            	.bg {
-            		border-radius: 16rpx 16rpx 0rpx 0rpx;
-            		width: 100%;
-            		height: 100%;
-            	}
-            
-            	.views {
-            		position: absolute;
-            		top: 0rpx;
-            		left: 0rpx;
-            		width: 112rpx;
-            		height: 32rpx;
-            		display: flex;
-            		align-items: center;
-            		background: rgba(0, 0, 0, 0.4);
-            		border-radius: 16rpx 0rpx 16rpx 0rpx;
-            		font-weight: 500;
-            		font-size: 20rpx;
-            		color: #FFFFFF;
-            		font-family: PingFang SC-Bold, PingFang SC;
-            
-            		image {
-            			width: 36rpx;
-            			height: 32rpx;
-            			margin-right: 8rpx;
-            		}
-            	}
-            
-            	.zhibo {
-            		position: absolute;
-            		top: 50%;
-            		left: 50%;
-            		transform: translate(-50%, -50%);
-            
-            		image {
-            			width: 56rpx;
-            			height: 56rpx;
-            		}
-            	}
-            }
-			.article-title-box {
-				width: 100%;
-				padding: 16rpx;
-				display: flex;
-				align-items: flex-start;
-				flex-direction: column;
-				justify-content: space-between;
-				height: 148rpx;
-				box-sizing: border-box;
-			
-				.article-title {
-					font-family: PingFang SC, PingFang SC;
-					font-weight: 500;
-					font-size: 28rpx;
-					color: #333333;
-					.one-t{
-						width: 100%;
-					}
-				}
-			
-				.name-title {
-					display: flex;
-					align-items: center;
-					font-family: PingFang SC, PingFang SC;
-					font-weight: 400;
-					font-size: 22rpx;
-					color: #999999;
-			        .one-t{
-						width: 80%;
-					}
-					image {
-						width: 28rpx;
-						height: 28rpx;
-						margin-right: 14rpx;
-					}
-				}
-			
-				.position-title {
-					display: flex;
-					align-items: center;
-					font-family: PingFang SC, PingFang SC;
-					font-weight: 400;
-					font-size: 22rpx;
-					color: #999999;
-			.one-t{
-				width: 80%;
-			}
-					image {
-						width: 28rpx;
-						height: 28rpx;
-						margin-right: 14rpx;
-					}
-				}
-			}
-		}
-	}
-</style>

+ 0 - 463
pages_live/lesson.vue

@@ -1,463 +0,0 @@
-<template>
-	<view>
-		<view class="top-content">
-			<view class="search-cont">
-				<view class="inner">
-					<image class="icon-search" src="../../static/images/search.png" mode=""></image>
-					<input type="text" v-model="searchValue" placeholder="请输入关键字或作者" confirm-type="search"
-						@confirm="doSearch"
-						placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
-				</view>
-			</view>
-			<view class="keyword-list">
-				<!-- 关键字列表 -->
-				<!-- <scroll-view   scroll-x="true" >
-				<view class="inner">
-					<view v-for="(item,index) in cates" :key="index" :class="choseCateId == item.cateId?'item active':'item'" @click="choseCate(item)">
-						{{ item.cateName }}
-					</view>
-				</view>
-			</scroll-view> -->
-				<u-tabs :list="cates" :activeStyle="{fontWeight: '500',color: '#333333',fontSize: '32rpx',lineHeight:'88rpx'}"
-					:inactiveStyle="{color: '#999999',fontSize: '28rpx',lineHeight:'88rpx'}" @click="choseCate(item)"
-					scrollable="false" lineColor="#388BFF"></u-tabs>
-			</view>
-		</view>
-
-		<mescroll-body :top="top" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback"
-			:down="downOption" :up="upOption">
-			<view class="know-list">
-				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
-					<view class="image-box">
-						<image class="bg" mode="aspectFill" :src="item.imageUrl"></image>
-						<view class="zhibo">
-							<image mode="aspectFill" src="@/static/image/icon_video.png"></image>
-						</view>
-					</view>
-					<view class="article-title-box">
-						<view class="article-title one-t">王医生学术直播</view>
-						<view class="name-title ">
-							<image mode="aspectFill" src="@/static/image/icon_doctor.png"></image>
-							<view class="one-t">
-								王小明-副主任医师/副主任副主任
-							</view>
-						</view>
-						<view class="position-title">
-							<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>
-							<view class="one-t">
-								北京人民医院
-							</view>
-						</view>
-					</view>
-				</view>
-				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
-					<view class="image-box">
-						<image class="bg" mode="aspectFill" :src="item.imageUrl"></image>
-						<view class="zhibo">
-							<image mode="aspectFill" src="@/static/image/icon_video.png"></image>
-						</view>
-					</view>
-					<view class="article-title-box">
-						<view class="article-title one-t">王医生学术直播</view>
-						<view class="name-title">
-							<image mode="aspectFill" src="@/static/image/icon_doctor.png"></image>
-							<view class="position-title">
-								<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>
-								<view class="one-t">
-									北京人民医院
-								</view>
-							</view>
-						</view>
-						<view class="position-title one-t">
-							<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>北京人民医院
-						</view>
-					</view>
-				</view>
-				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
-					<view class="image-box">
-						<image class="bg" mode="aspectFill" :src="item.imageUrl"></image>
-						<view class="zhibo">
-							<image mode="aspectFill" src="@/static/image/icon_video.png"></image>
-						</view>
-					</view>
-					<view class="article-title-box">
-						<view class="article-title one-t">王医生学术直播</view>
-						<view class="name-title">
-							<image mode="aspectFill" src="@/static/image/icon_doctor.png"></image>
-							<view class="one-t">
-								王小明-副主任医师/副主任副主任
-							</view>
-						</view>
-						<view class="position-title">
-							<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>
-							<view class="one-t">
-								北京人民医院
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</mescroll-body>
-
-	</view>
-</template>
-
-<script>
-	import {
-		getArticleCate,
-		getArticleList
-	} from '@/api/article'
-	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
-	export default {
-		mixins: [MescrollMixin],
-		data() {
-			return {
-				top: '0px',
-				cates: [
-					{name: '全部',cateId:0},
-					{name:'内分泌',cateId:1},
-					{name:'肾病',cateId:2},
-					{name:'心血管',cateId:3},
-					{name:'风湿免疫',cateId:4},
-					{name:'风湿免疫',cateId:5},
-				],
-				choseCateId: 0,
-				// 状态栏的高度
-				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
-				searchValue: '',
-				mescroll: null,
-				// 上拉加载的配置
-				downOption: {
-
-				},
-				upOption: {
-					onScroll: true,
-					use: true, // 是否启用上拉加载; 默认true
-					page: {
-						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
-						size: 10 // 每页数据的数量,默认10
-					},
-					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
-					empty: {
-						icon: '/static/images/no_data.png',
-						tip: '暂无数据'
-					},
-					textNoMore: '没有更多了~'
-				},
-				// 列表数据
-				dataList: [],
-			};
-		},
-		onShow() {
-			//this.getArticleCate();
-			var that = this;
-			setTimeout(function() {
-				let query = uni.createSelectorQuery().select(".top-content");
-				query.boundingClientRect(function(data) { //data - 各种参数
-					console.log(data.height) // 获取元素宽度
-					that.top = data.height + "px";
-				}).exec()
-			}, 500);
-		},
-		methods: {
-			doSearch() {
-				this.mescroll.resetUpScroll()
-			},
-			getArticleCate() {
-				var that = this;
-				let data = {};
-				getArticleCate(data).then(
-					res => {
-						if (res.code == 200) {
-							this.cates = res.data.map(person => ({
-								name: person.cateName
-							}));
-
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			mescrollInit(mescroll) {
-				this.mescroll = mescroll;
-			},
-			/*下拉刷新的回调 */
-			downCallback(mescroll) {
-				mescroll.resetUpScroll()
-			},
-			upCallback(page) {
-				//联网加载数据
-				var that = this;
-				var data = {
-					keyword: this.searchValue,
-					cateId: this.choseCateId,
-					page: page.num,
-					pageSize: page.size
-				};
-				getArticleList(data).then(res => {
-					if (res.code == 200) {
-						//设置列表数据
-						if (page.num == 1) {
-							that.dataList = res.data.list;
-
-						} else {
-							that.dataList = that.dataList.concat(res.data.list);
-
-						}
-						that.mescroll.endBySize(res.data.list.length, res.data.total);
-
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: "请求失败",
-						});
-						that.dataList = null;
-						that.mescroll.endErr();
-					}
-				});
-			},
-			// 关键词选择
-			choseCate(item) {
-				this.choseCateId = item.cateId;
-				this.mescroll.resetUpScroll()
-			},
-			// 查看详情
-			showDetail(item) {
-				uni.navigateTo({
-					url: './detail?articleId=' + item.articleId
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	page {
-		background: #EFF3F7;
-	}
-
-	.status_bar {
-		width: 100%;
-
-	}
-
-	.top-content {
-		width: 100%;
-		position: fixed;
-		top: 0;
-		left: 0;
-		z-index: 10;
-	}
-
-	.top-title {
-		height: 88upx;
-		line-height: 88upx;
-		font-size: 42upx;
-		font-family: Source Han Sans CN;
-		font-weight: bold;
-		color: #222222;
-		padding-left: 41upx;
-	}
-
-	.search-cont {
-		padding: 16upx 30upx;
-         background: #fff;
-		.inner {
-			box-sizing: border-box;
-			width: 100%;
-			height: 72upx;
-			background: #F7F8FA;
-			border-radius: 36upx;
-			display: flex;
-			align-items: center;
-			padding: 0 30upx;
-
-			.icon-search {
-				width: 28upx;
-				height: 28upx;
-				margin-right: 20upx;
-			}
-
-			input {
-				height: 60upx;
-				line-height: 60upx;
-				flex: 1;
-			}
-		}
-	}
-
-	.keyword-list {
-		box-sizing: border-box;
-		padding:0 24rpx;
-		height: 88rpx;
-        background: #FFFFFF;
-		flex-shrink: 0;
-		.inner {
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-		}
-
-		.item {
-			flex:1;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			flex-shrink: 0;
-			height: 88upx;
-			line-height: 88upx;
-			font-size: 28upx;
-			font-family: PingFang SC;
-			font-weight: 400;
-			color: #999999;
-            position: relative;
-			&.active {
-				font-weight: 500;
-				font-size: 32rpx;
-				color: #333333;
-				&::after {
-					content: "";
-					width: 56upx;
-					height: 6upx;
-					background: #388BFF;
-					position: absolute;
-					bottom: 0;
-					border-radius: 3rpx 3rpx 3rpx 3rpx;
-				}
-			}
-		}
-	}
-
-	.know-list {
-		margin-top: 24upx;
-		padding: 0 24upx;
-		display: flex;
-		align-items: center;
-		flex-direction: row;
-		flex-shrink: 0;
-		flex-wrap: wrap; 
-		width: 100%;
-		box-sizing: border-box;
-		.item {
-			box-sizing: border-box;
-			width: calc(50% - 10rpx); 
-			height: 340rpx;
-			background: #FFFFFF;
-			border-radius: 16upx;
-			display: flex;
-			align-items: center;
-			justify-content: flex-start;
-			flex-direction: column;
-			margin-bottom: 18rpx;
-			margin-right: 18rpx;
-			&:nth-child(2){
-				margin-right:0;
-			}
-            .image-box {
-            	width: 100%;
-            	height: 192rpx;
-            	position: relative;
-            	border-radius: 16rpx 16rpx 0rpx 0rpx;
-            
-            	.bg {
-            		border-radius: 16rpx 16rpx 0rpx 0rpx;
-            		width: 100%;
-            		height: 100%;
-            	}
-            
-            	.views {
-            		position: absolute;
-            		top: 0rpx;
-            		left: 0rpx;
-            		width: 112rpx;
-            		height: 32rpx;
-            		display: flex;
-            		align-items: center;
-            		background: rgba(0, 0, 0, 0.4);
-            		border-radius: 16rpx 0rpx 16rpx 0rpx;
-            		font-weight: 500;
-            		font-size: 20rpx;
-            		color: #FFFFFF;
-            		font-family: PingFang SC-Bold, PingFang SC;
-            
-            		image {
-            			width: 36rpx;
-            			height: 32rpx;
-            			margin-right: 8rpx;
-            		}
-            	}
-            
-            	.zhibo {
-            		position: absolute;
-            		top: 50%;
-            		left: 50%;
-            		transform: translate(-50%, -50%);
-            
-            		image {
-            			width: 56rpx;
-            			height: 56rpx;
-            		}
-            	}
-            }
-			.article-title-box {
-				width: 100%;
-				padding: 16rpx;
-				display: flex;
-				align-items: flex-start;
-				flex-direction: column;
-				justify-content: space-between;
-				height: 148rpx;
-				box-sizing: border-box;
-			
-				.article-title {
-					font-family: PingFang SC, PingFang SC;
-					font-weight: 500;
-					font-size: 28rpx;
-					color: #333333;
-					.one-t{
-						width: 100%;
-					}
-				}
-			
-				.name-title {
-					display: flex;
-					align-items: center;
-					font-family: PingFang SC, PingFang SC;
-					font-weight: 400;
-					font-size: 22rpx;
-					color: #999999;
-			        .one-t{
-						width: 80%;
-					}
-					image {
-						width: 28rpx;
-						height: 28rpx;
-						margin-right: 14rpx;
-					}
-				}
-			
-				.position-title {
-					display: flex;
-					align-items: center;
-					font-family: PingFang SC, PingFang SC;
-					font-weight: 400;
-					font-size: 22rpx;
-					color: #999999;
-			.one-t{
-				width: 80%;
-			}
-					image {
-						width: 28rpx;
-						height: 28rpx;
-						margin-right: 14rpx;
-					}
-				}
-			}
-		}
-	}
-</style>

+ 0 - 322
pages_live/lessonDetail.vue

@@ -1,322 +0,0 @@
-<template>
-	<view class="content">
-		<view class="detail-cont">
-			<view class="title">全球肾脏新药研究生态驱动创新突破降蛋白瓶颈</view>
-			<view class="info">
-				<view class="time">
-					<u-icon name="clock" color="#fff" size="14"></u-icon>2025-12-30</view>
-				<view class="reads ">
-					<u-icon name="eye" color="#fff" size="14"></u-icon>10</view>
-			</view>
-			<view class="video">
-				<video class="myVideo" id="myVideo" src="http://bjzmkytcpv.ylrzcloud.com/course/20251117/1763364883777.m3u8"
-				@error="videoErrorCallback"   controls ></video>
-			</view>
-			<!-- 正文 -->
-			<!-- <view class="full-text"  >
-				<view v-html="item.content"></view>
-			</view> -->
-	        <view class="tips">
-				<image class="w48 h48" src="@/static/image/icon_warning.png" mode=""></image>
-				<view class="text-box">本内容仅代表嘉宾观点,不代表本站立场。仅供医学药学专业人士查看,不构成实际治疗建议。</view>
-			</view>
-			<view class="actor x-f">
-				<image class="w88 h88" src="@/static/image/my_heads_icon64.png" mode=""></image>
-				<view class="infor y-start">
-					<view class="name">王小明 主任医师</view>
-					<view class="position">江南大学附属医院·肾内科</view>
-				</view>
-			</view>
-			<view class="full-text">
-				<view>
-					全球肾脏新药研究生态驱动创新突破降蛋白瓶颈,这里展示摘要。
-				</view>
-			</view>
-			<view class="tag">#转载#肾病</view>
-		</view>
-	</view> 
-</template>
-
-<script>
-	// import {getAdvList} from '@/api/adv.js'
-	import {getDoctorArticleById} from '@/api/doctorArticle.js'
-	export default {
-		data() {
-			return {
-				advs:[],
-				advImgs:[],
-				src: '',
-				articleId:null,
-				item:{},
-			};
-		},
-		onLoad(option) {
-			this.articleId=option.articleId;
-			 
-		},
-		onShow() {
-			//this.getAdvList()
-			//this.getDoctorArticleById();
-		},
-		//发送给朋友
-		onShareAppMessage(res) {
-			return {
-				title: this.item.title,
-				path: '/pages_index/index/doctorArticleDetails?articleId='+this.articleId,
-			}
-			
-		},
-		//分享到朋友圈
-		onShareTimeline(res) {
-			return {
-				title: this.item.title,
-				query:'articleId='+this.articleId,//页面参数
-			}
-			
-		},
-		methods:{
-			handleAdvClick(index){
-				var ad=this.advs[index];
-				console.log(ad.advUrl);
-				if(ad.showType==1){
-					uni.setStorageSync('url',ad.advUrl);
-					uni.navigateTo({
-						url:"h5"
-					})
-				}
-				else if(ad.showType==2){
-					uni.navigateTo({
-						url:ad.advUrl
-					})
-				}
-				else if(ad.showType==3){
-					 uni.setStorageSync('content',ad.content);
-					 uni.navigateTo({
-					 	url:"content"
-					 })
-				}
-				
-			},
-			getAdvList() {
-				//联网加载数据
-				var that = this;
-				var data = {
-					advType:10
-				};
-				getAdvList(data).then(res => {
-					if(res.code==200){
-						that.advImgs=[];
-						that.advs=[];
-						res.data.forEach(function(element) {
-							if(element.imageUrl!=null&&element.imageUrl!=""){
-								that.advs.push(element);
-								that.advImgs.push(element.imageUrl);
-							}
-						});
-						
-					}else{
-						uni.showToast({
-							icon:'none',
-							title: "请求失败",
-						});
-					}
-				});
-			},
-			 
-			videoErrorCallback: function(e) {
-				uni.showModal({
-					content: e.target.errMsg,
-					showCancel: false
-				})
-			},
-			navTo(url){
-				uni.navigateTo({
-					url: url
-				})
-			},
-			getDoctorArticleById(){
-				let data = {articleId:this.articleId};
-				getDoctorArticleById(data).then(
-					res => {
-						if(res.code==200){
-							this.item=res.data;
-						}else{
-							uni.showToast({
-								icon:'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-		}
-	}
-</script>
-
-<style lang="scss">
-	page{
-		height: 100%;
-	}
-	.content{
-		height: 100%;
-		display: flex;
-		flex-direction: column;
-		background: #000;
-	}
-	.detail-cont{
-		width:100%;
-		flex: 1;
-		overflow-y: auto;
-		// background: #fff;
-		.title{
-			padding:0 30upx;
-			font-family: PingFang SC, PingFang SC;
-			font-weight: 500;
-			font-size: 40rpx;
-			color: #FFFFFF;
-			line-height: 60rpx;
-		}
-		.info{
-			padding:0 30upx;
-			display: flex;
-			align-items: center;
-			margin-top: 16rpx;
-			margin-bottom: 32rpx;
-			.time{
-					
-				display: flex;
-				align-items: center;
-				font-family: PingFang SC, PingFang SC;
-				font-weight: 400;
-				font-size: 24rpx;
-				color: #FFFFFF;
-				line-height: 44rpx;
-				.u-icon{
-					margin-right: 10rpx;
-				}
-			}
-			.reads{
-				margin-left: 32rpx;
-				display: flex;
-				align-items: center;
-				font-family: PingFang SC, PingFang SC;
-				font-weight: 400;
-				font-size: 24rpx;
-				color: #FFFFFF;
-				line-height: 44rpx;
-				.u-icon{
-					margin-right: 10rpx;
-				}
-			}
-		
-			}
-		.full-text{
-			padding:0 30upx;
-			width: calc(100% - 60rpx);
-			font-family: PingFang SC, PingFang SC;
-			font-weight: 400;
-			font-size: 28rpx;
-			color: #FFFFFF;
-			line-height: 44rpx;
-		}
-	.tips{
-		width: calc(100% - 60rpx);
-		margin-bottom:184rpx;
-		display: flex;
-		align-items: center;
-		padding: 16rpx 24rpx;
-		margin-top: 40rpx;
-		background: rgba(255, 255, 255, 0.1);
-		border-radius: 18rpx 18rpx 18rpx 18rpx;
-		.text-box{
-			flex:1;
-			margin-left: 16rpx;
-			font-family: PingFang SC, PingFang SC;
-			font-weight: 400;
-			font-size: 24rpx;
-			color: #FFFFFF;
-			line-height: 40rpx;
-			
-		}
-		
-	}
-	.actor{
-		padding:0 30upx;
-		margin-bottom: 32rpx;
-		.infor{
-			margin-left: 24rpx;
-			height: 88rpx;
-			justify-content: space-around;
-			.name{
-				font-family: PingFang SC, PingFang SC;
-				font-weight: 600;
-				font-size: 28rpx;
-				color: #FFFFFF;
-				line-height: 36rpx;
-			}
-			.position{
-				font-family: PingFang SC, PingFang SC;
-				font-weight: 400;
-				font-size: 24rpx;
-				color: #FFFFFF;
-				line-height: 32rpx;
-			}
-		}
-	}
-	.tag{
-		padding:0 30upx;
-		font-family: PingFang SC, PingFang SC;
-		font-weight: 400;
-		font-size: 24rpx;
-		color: #FFFFFF;
-		line-height: 44rpx;
-	}
-		.video{
-			width: 100%;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			video{
-				width: 100%;
-			}
-		}
-	}
-	.ad{
-		margin-bottom: 50rpx;
-		width: 100%;
-		 padding: 15rpx;
-		 background: #FFFFFF;
-		 border-radius: 18rpx 18rpx 18rpx 18rpx;
-	}
-	.inquiry{
-		position: fixed;
-		right: 22upx;
-		bottom: 193upx;
-		z-index: 99;
-		.content{
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			flex-direction: column;
-			image{
-				box-sizing: border-box;
-				width: 100upx;
-				height: 100upx;
-				border-radius: 50%;
-				z-index: 9;
-				border: 2rpx solid #0bb3f2;
-			}
-			.text{
-				margin-top: 15upx;
-				font-size: 30upx;
-				font-family: PingFang SC;
-				font-weight: bold;
-				color: #0bb3f2;
-			}
-			 
-		}
-		
-	}
-	 
-</style>

+ 0 - 470
pages_live/search.vue

@@ -1,470 +0,0 @@
-<template>
-	<view>
-		<view class="top-content">
-			<view class="search-cont">
-				<view class="inner">
-					<image class="icon-search" src="../../static/images/search.png" mode=""></image>
-					<input type="text" v-model="searchValue" placeholder="请输入关键字或作者" confirm-type="search"
-						@confirm="doSearch"
-						placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
-				</view>
-			</view>
-			<view class="keyword-list">
-				<!-- 关键字列表 -->
-				<!-- <scroll-view   scroll-x="true" > -->
-				<view class="inner">
-					<view v-for="(item,index) in cates" :key="index" :class="choseCateId == item.cateId?'item active':'item'" @click="choseCate(item)">
-						{{ item.cateName }}
-					</view>
-				</view>
-			<!-- </scroll-view> -->
-				<!-- <u-tabs :list="cates" :activeStyle="{fontWeight: '500',color: '#333333',fontSize: '32rpx',lineHeight:'88rpx'}"
-					:inactiveStyle="{color: '#999999',fontSize: '28rpx',lineHeight:'88rpx'}" @click="choseCate(item)"
-					scrollable="false" lineColor="#388BFF"></u-tabs> -->
-			</view>
-		</view>
-
-		<mescroll-body :top="top" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback"
-			:down="downOption" :up="upOption">
-			<view class="know-list">
-				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
-					<view class="image-box">
-						<image class="bg" mode="aspectFill" :src="item.imageUrl"></image>
-						<view v-if="choseCateId==0" class="views" >
-							<image mode="aspectFill" src="@/static/image/icon_goon.png"></image>
-							<view class="status">进行中</view>
-						</view>
-						<view v-else class="zhibo">
-							<image mode="aspectFill" src="@/static/image/icon_video.png"></image>
-						</view>
-					</view>
-					<view class="article-title-box">
-						<view class="article-title one-t">王医生学术直播</view>
-						<view class="name-title ">
-							<image mode="aspectFill" src="@/static/image/icon_doctor.png"></image>
-							<view class="one-t">
-								王小明-副主任医师/副主任副主任
-							</view>
-						</view>
-						<view class="position-title">
-							<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>
-							<view class="one-t">
-								北京人民医院
-							</view>
-						</view>
-					</view>
-				</view>
-				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
-					<view class="image-box">
-						<image class="bg" mode="aspectFill" :src="item.imageUrl"></image>
-						<view v-if="choseCateId==0" class="views" >
-							<image mode="aspectFill" src="@/static/image/icon_goon.png"></image>
-							<view class="status">进行中</view>
-						</view>
-						<view v-else class="zhibo">
-							<image mode="aspectFill" src="@/static/image/icon_video.png"></image>
-						</view>
-					</view>
-					<view class="article-title-box">
-						<view class="article-title one-t">王医生学术直播</view>
-						<view class="name-title">
-							<image mode="aspectFill" src="@/static/image/icon_doctor.png"></image>
-							<view class="position-title">
-								<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>
-								<view class="one-t">
-									北京人民医院
-								</view>
-							</view>
-						</view>
-						<view class="position-title one-t">
-							<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>北京人民医院
-						</view>
-					</view>
-				</view>
-				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
-					<view class="image-box">
-						<image class="bg" mode="aspectFill" :src="item.imageUrl"></image>
-						<view v-if="choseCateId==0" class="views" >
-							<image mode="aspectFill" src="@/static/image/icon_goon.png"></image>
-							<view class="status">进行中</view>
-						</view>
-						<view v-else class="zhibo">
-							<image mode="aspectFill" src="@/static/image/icon_video.png"></image>
-						</view>
-					</view>
-					<view class="article-title-box">
-						<view class="article-title one-t">王医生学术直播</view>
-						<view class="name-title">
-							<image mode="aspectFill" src="@/static/image/icon_doctor.png"></image>
-							<view class="one-t">
-								王小明-副主任医师/副主任副主任
-							</view>
-						</view>
-						<view class="position-title">
-							<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>
-							<view class="one-t">
-								北京人民医院
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</mescroll-body>
-
-	</view>
-</template>
-
-<script>
-	import {
-		getArticleCate,
-		getArticleList
-	} from '@/api/article'
-	import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
-	export default {
-		mixins: [MescrollMixin],
-		data() {
-			return {
-				top: '0px',
-				cates: [
-					{cateName: '在线讲座',cateId:0},
-					{cateName:'空中课堂',cateId:1},
-				],
-				choseCateId: 0,
-				// 状态栏的高度
-				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
-				searchValue: '',
-				mescroll: null,
-				// 上拉加载的配置
-				downOption: {
-
-				},
-				upOption: {
-					onScroll: true,
-					use: true, // 是否启用上拉加载; 默认true
-					page: {
-						num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
-						size: 10 // 每页数据的数量,默认10
-					},
-					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
-					empty: {
-						icon: '/static/images/no_data.png',
-						tip: '暂无数据'
-					},
-					textNoMore: '已经到底了'
-				},
-				// 列表数据
-				dataList: [],
-			};
-		},
-		onShow() {
-			//this.getArticleCate();
-			var that = this;
-			setTimeout(function() {
-				let query = uni.createSelectorQuery().select(".top-content");
-				query.boundingClientRect(function(data) { //data - 各种参数
-					console.log(data.height) // 获取元素宽度
-					that.top = data.height + "px";
-				}).exec()
-			}, 500);
-		},
-		methods: {
-			doSearch() {
-				this.mescroll.resetUpScroll()
-			},
-			getArticleCate() {
-				var that = this;
-				let data = {};
-				getArticleCate(data).then(
-					res => {
-						if (res.code == 200) {
-							this.cates = res.data.map(person => ({
-								name: person.cateName
-							}));
-
-						} else {
-							uni.showToast({
-								icon: 'none',
-								title: "请求失败",
-							});
-						}
-					},
-					rej => {}
-				);
-			},
-			mescrollInit(mescroll) {
-				this.mescroll = mescroll;
-			},
-			/*下拉刷新的回调 */
-			downCallback(mescroll) {
-				mescroll.resetUpScroll()
-			},
-			upCallback(page) {
-				//联网加载数据
-				var that = this;
-				var data = {
-					keyword: this.searchValue,
-					cateId: this.choseCateId,
-					page: page.num,
-					pageSize: page.size
-				};
-				getArticleList(data).then(res => {
-					if (res.code == 200) {
-						//设置列表数据
-						if (page.num == 1) {
-							that.dataList = res.data.list;
-
-						} else {
-							that.dataList = that.dataList.concat(res.data.list);
-
-						}
-						that.mescroll.endBySize(res.data.list.length, res.data.total);
-
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: "请求失败",
-						});
-						that.dataList = null;
-						that.mescroll.endErr();
-					}
-				});
-			},
-			// 关键词选择
-			choseCate(item) {
-				this.choseCateId = item.cateId;
-				this.mescroll.resetUpScroll()
-			},
-			// 查看详情
-			showDetail(item) {
-				uni.navigateTo({
-					url: './detail?articleId=' + item.articleId
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	page {
-		background: #EFF3F7;
-	}
-
-	.status_bar {
-		width: 100%;
-
-	}
-
-	.top-content {
-		width: 100%;
-		position: fixed;
-		top: 0;
-		left: 0;
-		z-index: 10;
-	}
-
-	.top-title {
-		height: 88upx;
-		line-height: 88upx;
-		font-size: 42upx;
-		font-family: Source Han Sans CN;
-		font-weight: bold;
-		color: #222222;
-		padding-left: 41upx;
-	}
-
-	.search-cont {
-		padding: 16upx 30upx;
-         background: #fff;
-		.inner {
-			box-sizing: border-box;
-			width: 100%;
-			height: 72upx;
-			background: #F7F8FA;
-			border-radius: 36upx;
-			display: flex;
-			align-items: center;
-			padding: 0 30upx;
-
-			.icon-search {
-				width: 28upx;
-				height: 28upx;
-				margin-right: 20upx;
-			}
-
-			input {
-				height: 60upx;
-				line-height: 60upx;
-				flex: 1;
-			}
-		}
-	}
-
-	.keyword-list {
-		box-sizing: border-box;
-		// padding: 10upx 27upx;
-		height: 88rpx;
-        background: #FFFFFF;
-		flex-shrink: 0;
-		.inner {
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-		}
-
-		.item {
-			flex:1;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			flex-shrink: 0;
-			height: 88upx;
-			line-height: 88upx;
-			font-size: 28upx;
-			font-family: PingFang SC;
-			font-weight: 400;
-			color: #999999;
-            position: relative;
-			&.active {
-				font-weight: 500;
-				color: #333333;
-				&::after {
-					content: "";
-					width: 56upx;
-					height: 6upx;
-					background: #388BFF;
-					position: absolute;
-					bottom: 0;
-					border-radius: 3rpx 3rpx 3rpx 3rpx;
-				}
-			}
-		}
-	}
-
-	.know-list {
-		margin-top: 24upx;
-		padding: 0 24upx;
-		display: flex;
-		align-items: center;
-		flex-direction: row;
-		flex-shrink: 0;
-		flex-wrap: wrap; 
-		width: 100%;
-		box-sizing: border-box;
-		.item {
-			box-sizing: border-box;
-			width: calc(50% - 10rpx); 
-			height: 340rpx;
-			background: #FFFFFF;
-			border-radius: 16upx;
-			display: flex;
-			align-items: center;
-			justify-content: flex-start;
-			flex-direction: column;
-			margin-bottom: 18rpx;
-			margin-right: 18rpx;
-			&:nth-child(2){
-				margin-right:0;
-			}
-            .image-box {
-            	width: 100%;
-            	height: 192rpx;
-            	position: relative;
-            	border-radius: 16rpx 16rpx 0rpx 0rpx;
-            
-            	.bg {
-            		border-radius: 16rpx 16rpx 0rpx 0rpx;
-            		width: 100%;
-            		height: 100%;
-            	}
-            
-            	.views {
-            		position: absolute;
-            		top: 0rpx;
-            		left: 0rpx;
-            		width: 112rpx;
-            		height: 32rpx;
-            		display: flex;
-            		align-items: center;
-            		background: rgba(0, 0, 0, 0.4);
-            		border-radius: 16rpx 0rpx 16rpx 0rpx;
-            		font-weight: 500;
-            		font-size: 20rpx;
-            		color: #FFFFFF;
-            		font-family: PingFang SC-Bold, PingFang SC;
-            
-            		image {
-            			width: 36rpx;
-            			height: 32rpx;
-            			margin-right: 8rpx;
-            		}
-            	}
-            
-            	.zhibo {
-            		position: absolute;
-            		top: 50%;
-            		left: 50%;
-            		transform: translate(-50%, -50%);
-            
-            		image {
-            			width: 56rpx;
-            			height: 56rpx;
-            		}
-            	}
-            }
-			.article-title-box {
-				width: 100%;
-				padding: 16rpx;
-				display: flex;
-				align-items: flex-start;
-				flex-direction: column;
-				justify-content: space-between;
-				height: 148rpx;
-				box-sizing: border-box;
-			
-				.article-title {
-					font-family: PingFang SC, PingFang SC;
-					font-weight: 500;
-					font-size: 28rpx;
-					color: #333333;
-					.one-t{
-						width: 100%;
-					}
-				}
-			
-				.name-title {
-					display: flex;
-					align-items: center;
-					font-family: PingFang SC, PingFang SC;
-					font-weight: 400;
-					font-size: 22rpx;
-					color: #999999;
-			        .one-t{
-						width: 80%;
-					}
-					image {
-						width: 28rpx;
-						height: 28rpx;
-						margin-right: 14rpx;
-					}
-				}
-			
-				.position-title {
-					display: flex;
-					align-items: center;
-					font-family: PingFang SC, PingFang SC;
-					font-weight: 400;
-					font-size: 22rpx;
-					color: #999999;
-			.one-t{
-				width: 80%;
-			}
-					image {
-						width: 28rpx;
-						height: 28rpx;
-						margin-right: 14rpx;
-					}
-				}
-			}
-		}
-	}
-</style>

+ 0 - 22
pages_speaker/createTask - 副本.vue

@@ -1,22 +0,0 @@
-<template>
-	<view>
-		
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				
-			}
-		},
-		methods: {
-			
-		}
-	}
-</script>
-
-<style>
-
-</style>

+ 991 - 0
pages_speaker/gradeApplication.vue

@@ -0,0 +1,991 @@
+<template>
+	<view class="container">
+		<scroll-view class="content" scroll-y>
+			<!-- 驳回意见提示 -->
+			<view class="rejection-banner" v-if="rejectionInfo">
+				<view class="rejection-icon">✕</view>
+				<view class="rejection-text">驳回意见: {{ rejectionInfo }}</view>
+			</view>
+
+			<!-- 基本信息 -->
+			<view class="form-section">
+				<view class="form-item">
+				<view class="form-label">
+					<text class="required">*</text>
+					<text>学术头衔</text>
+				</view>
+				<view class="form-input picker-input" :class="{ placeholder: !formData.academicTitle }"
+					@click="showPicker('学术头衔', 'doctor_academic_title')">
+					{{ formData.academicTitle || '请选择' }}
+					<image class="icon" src="/static/image/icon_more.png"></image>
+				</view>
+			</view>
+
+			<view class="form-item">
+				<view class="form-label">
+					<text class="required">*</text>
+					<text>学术任职(多选)</text>
+				</view>
+				<view class="form-input picker-input" :class="{ placeholder: !formData.academicPositions }"
+					@click="showPicker('学术任职', 'doctor_academic_position')">
+					{{ formData.academicPositions || '请选择' }}
+					<image class="icon" src="/static/image/icon_more.png"></image>
+				</view>
+			</view>
+				<view class="form-item">
+					<view class="form-label">
+						<text class="required">*</text>
+						<text>国际性期刊论文/著作数</text>
+					</view>
+					<input type="number" class="input" v-model="formData.internationalPapers" placeholder="请输入,若无请填0"></input>
+				</view>
+				<view class="form-item">
+					<view class="form-label">
+						<text class="required">*</text>
+						<text>全国性期刊论文/著作数</text>
+					</view>
+					<input type="number" class="input" v-model="formData.nationalPapers" placeholder="请输入,若无请填0"></input>
+				</view>
+				<view class="form-item">
+					<view class="form-label">
+						<text class="required">*</text>
+						<text>学术研究(多选)</text>
+					</view>
+					<view class="form-input picker-input" :class="{ placeholder: !formData.researchAreas }"
+						@click="showPicker('学术研究', 'doctor_research_area')">
+						{{ formData.researchAreas || '请选择' }}
+						<image class="icon" src="/static/image/icon_more.png"></image>
+					</view>
+				</view>
+				<view class="form-item">
+					<view class="form-label">
+						<text class="required">*</text>
+						<text>临床工作经验年数</text>
+					</view>
+					<input type="number" class="input" v-model="formData.clinicalExperience" placeholder="请输入,若无请填0"></input>
+				</view>
+				<view class="form-item">
+					<view class="form-label">
+						<text class="required">*</text>
+						<text>学位</text>
+					</view>
+					<view class="form-input picker-input" :class="{ placeholder: !formData.degree }"
+						@click="showPicker('学位', 'doctor_degree')">
+						{{ formData.degree || '请选择' }}
+						<image class="icon" src="/static/image/icon_more.png"></image>
+					</view>
+				</view>
+				<view class="form-item">
+					<view class="form-label">
+						<text class="required">*</text>
+						<text>申请级别</text>
+					</view>
+					<view class="form-input picker-input" :class="{ placeholder: !formData.applicationLevel }"
+						@click="showPicker('申请级别', 'doctor_apply_level')">
+						{{ formData.applicationLevel || '请选择' }}
+						<image class="icon" src="/static/image/icon_more.png"></image>
+					</view>
+				</view>
+
+				<view class="form-item column">
+					<view class="form-label">
+						<text class="required">*</text>
+						<text>证明材料</text>
+					</view>
+					<view class="form-tips">如医院官网简介、论文截图、聘书等</view>
+					<view class="upload-proof" @click="chooseProofImages">
+						<view v-if="formData.proofImages && formData.proofImages.length > 0" class="uploaded-images">
+							<view v-for="(image, index) in formData.proofImages" :key="index"
+								class="uploaded-image-item">
+								<image :src="image" mode="aspectFill"></image>
+								<view class="image-delete" @click.stop="deleteProofImage(index)">×</view>
+							</view>
+							<!-- <view class="upload-more" @click="chooseProofImages">
+								<image src="/static/image/icon_camera.png" mode="aspectFill"></image>
+							</view> -->
+							<view class="upload-placeholder">
+								<image src="/static/image/icon_camera.png" mode="aspectFill"></image>
+						</view>
+						</view>
+						<view v-else class="upload-placeholder">
+								<image src="/static/image/icon_camera.png" mode="aspectFill"></image>
+						</view>
+					</view>
+				</view>
+			</view>
+		</scroll-view>
+		<view class="next-button" @click="submitForm">提交</view>
+		<u-picker v-if="showPickerVisible" :title='pickerTitle' :show="true" confirmColor='#576B95' ref="uPicker"
+			:columns="pickerData" @confirm="confirm" @cancel="cancel">
+		</u-picker>
+
+		<!-- 多选弹窗 -->
+		<u-popup :show="showMultiSelectPopup" mode="bottom" round="20rpx" :closeable="false">
+			<view class="u-popup-content">
+				<view class="popup-header">
+					<text class="popup-title">{{ multiSelectTitle }}</text>
+					<text class="popup-close" @click="closeMultiSelectPopup">×</text>
+				</view>
+				<view class="popup-body">
+					<view class="tag-group">
+						<view v-for="(item, index) in multiSelectData" :key="index" 
+							class="tag-item" 
+							:class="{ active: selectedItems.includes(item) }" 
+							@click="toggleItem(item)">
+							{{ item }}
+						</view>
+					</view>
+				</view>
+				<view class="popup-footer">
+					<view class="popup-btn cancel-btn" @click="closeMultiSelectPopup">取消</view>
+					<view class="popup-btn confirm-btn" @click="confirmMultiSelect">确定</view>
+				</view>
+			</view>
+		</u-popup>
+
+	</view>
+</template>
+
+<script>
+	import utils from '@/utils/common.js'
+
+	import {
+		apply
+	} from '@/api/speaker';
+	export default {
+		data() {
+			return {
+				academicTitle: [],//学术头衔
+				academicPosition: [],//学术任职
+				academicResearch: [],//学术研究
+				degree: [],//学位
+				applyLevel: [],//申请级别
+
+				
+				showPickerVisible: false,
+				pickerData: [],
+				pickerTitle: '',
+				// 多选相关
+				showMultiSelectPopup: false,
+				multiSelectTitle: '',
+				multiSelectData: [],
+				selectedItems: [],
+				currentMultiSelectType: '',
+				// 申请级别选项
+				applicationLevelColumns: [
+					['一级', '二级', '三级', '四级']
+				],
+				rejectionInfo: '',
+				formData: {
+					// 学术信息
+					academicTitle: '', // 学术头衔
+					academicPositions: '', // 学术任职
+					internationalPapers: '', // 国际性期刊论文/著作数
+					nationalPapers: '', // 全国性期刊论文/著作数
+					researchAreas: '', // 学术研究
+					clinicalExperience: '', // 临床工作经验年数
+					degree: '', // 学位
+					applicationLevel: '', // 申请级别
+					proofImages: [] // 证明材料图片
+				},
+				pickerTitle: '默认标题',
+				pickerData: [],
+				userInfo: {},
+				doctorId:null
+			}
+		},
+		onLoad: async function(options) {
+			try {
+				console.log("options",options)
+				this.doctorId=options.doctorId;
+				this.academicTitle = await utils.getDicts("doctor_academic_title");//学术头衔
+				this.academicPosition = await utils.getDicts("doctor_academic_position");//学术任职
+				this.academicResearch = await utils.getDicts("doctor_academic_research");//学术研究
+				this.degree = await utils.getDicts("doctor_degree");//学位
+				this.applyLevel = await utils.getDicts("doctor_apply_level");//申请级别
+			} catch (e) {
+				console.log('获取字典数据失败:', e)
+			}
+
+
+			if (options.rejectionInfo) {
+				this.rejectionInfo = decodeURIComponent(options.rejectionInfo)
+			}
+			// 获取用户信息
+			this.userInfo = JSON.parse(uni.getStorageSync('userInfo') || '{}')
+		},
+		methods: {
+			// 选择证明材料图片
+			chooseProofImages() {
+				uni.chooseImage({
+					count: 9, // 最多选择9张
+					sizeType: ['compressed'],
+					sourceType: ['album', 'camera'],
+					success: (res) => {
+						// 上传图片
+						this.uploadImages(res.tempFilePaths)
+					}
+				})
+			},
+			// 上传图片
+			async uploadImages(tempFilePaths) {
+				try {
+					uni.showLoading({ title: '上传中...' })
+					const uploadedImages = []
+					// 从storage获取动态域名
+					const baseUrl = uni.getStorageSync('requestPath')
+					// 逐个上传图片
+					for (const tempFilePath of tempFilePaths) {
+						// 使用uni.uploadFile上传图片
+						const uploadRes = await new Promise((resolve, reject) => {
+							uni.uploadFile({
+								url: `${baseUrl}/system/file/upload`,
+								filePath: tempFilePath,
+								name: 'file',
+								formData: {
+									bizType: 'DOCTOR_APPLY'
+								},
+								header: {
+									'AppToken': uni.getStorageSync('AppToken')
+								},
+								success: (res) => {
+									// 解析上传结果
+									const data = JSON.parse(res.data)
+									if (data.code === 200) {
+										console.log('上传成功:', data.data)
+										resolve(data.data)
+									} else {
+										reject(new Error(data.message || '上传失败'))
+									}
+								},
+								fail: (err) => {
+									reject(err)
+								}
+							})
+						})
+						// 将上传成功的图片路径添加到数组
+						uploadedImages.push(uploadRes.fileUrl)
+					}
+					// 更新表单数据
+					this.formData.proofImages = [...this.formData.proofImages, ...uploadedImages]
+					uni.hideLoading()
+					uni.showToast({ icon: 'success', title: '上传成功' })
+				} catch (e) {
+					uni.hideLoading()
+					uni.showToast({ icon: 'none', title: '上传失败' })
+				}
+			},
+
+			// 删除证明材料图片
+			deleteProofImage(index) {
+				this.formData.proofImages.splice(index, 1)
+			},
+			
+			// 显示选择器
+			showPicker(title, type) {
+				// 处理多选情况
+				if (type === 'doctor_academic_position' || type === 'doctor_research_area') {
+					// 获取数据
+					let dictData = []
+					if (type === 'doctor_academic_position') {
+						dictData = this.academicPosition.map(item => item.dictLabel)
+					} else if (type === 'doctor_research_area') {
+						dictData = this.academicResearch.map(item => item.dictLabel)
+					}
+					
+					// 设置多选数据
+					this.multiSelectData = dictData
+					this.multiSelectTitle = title
+					this.currentMultiSelectType = type
+					
+					// 初始化已选项
+					if (type === 'doctor_academic_position') {
+						this.selectedItems = this.formData.academicPositions ? this.formData.academicPositions.split(',') : []
+					} else if (type === 'doctor_research_area') {
+						this.selectedItems = this.formData.researchAreas ? this.formData.researchAreas.split(',') : []
+					}
+					
+					// 显示多选弹窗
+					this.showMultiSelectPopup = true
+				} else {
+					// 单选情况,保持原有逻辑
+					// 先隐藏选择器,确保下次显示时重新创建
+					this.showPickerVisible = false
+					
+					// 根据字典类型获取对应的数据
+					let dictData = []
+					if (type === 'doctor_academic_title') {
+						dictData = this.academicTitle.map(item => item.dictLabel)
+					} else if (type === 'doctor_degree') {
+						dictData = this.degree.map(item => item.dictLabel)
+					} else if (type === 'doctor_apply_level') {
+						dictData = this.applyLevel.map(item => item.dictLabel)
+					}
+					
+					// 设置数据
+					this.pickerData = [dictData]
+					this.pickerTitle = title
+					
+					// 延迟显示选择器,确保数据已更新
+					setTimeout(() => {
+						this.showPickerVisible = true
+					}, 50)
+				}
+			},
+			
+			// 选择器确认
+			confirm(e) {
+				if (e.value && e.value.length > 0) {
+					if (this.pickerTitle === '学术头衔') {
+						this.formData.academicTitle = e.value[0]
+					} else if (this.pickerTitle === '学术任职') {
+						this.formData.academicPositions = e.value[0]
+					} else if (this.pickerTitle === '学术研究') {
+						this.formData.researchAreas = e.value[0]
+					} else if (this.pickerTitle === '学位') {
+						this.formData.degree = e.value[0]
+					} else if (this.pickerTitle === '申请级别') {
+						this.formData.applicationLevel = e.value[0]
+					}
+				}
+				// 关闭选择器
+				this.showPickerVisible = false
+			},
+			
+			// 选择器取消
+			cancel() {
+				// 关闭选择器
+				this.showPickerVisible = false
+			},
+			
+			// 多选相关方法
+			// 切换选项
+			toggleItem(item) {
+				const index = this.selectedItems.indexOf(item)
+				if (index > -1) {
+					// 取消选择
+					this.selectedItems.splice(index, 1)
+				} else {
+					// 添加选择
+					this.selectedItems.push(item)
+				}
+			},
+			
+			// 关闭多选弹窗
+			closeMultiSelectPopup() {
+				this.showMultiSelectPopup = false
+			},
+			
+			// 确认多选结果
+			confirmMultiSelect() {
+				const selectedValues = this.selectedItems.join(',')
+				
+				if (this.currentMultiSelectType === 'doctor_academic_position') {
+					this.formData.academicPositions = selectedValues
+				} else if (this.currentMultiSelectType === 'doctor_research_area') {
+					this.formData.researchAreas = selectedValues
+				}
+				
+				this.showMultiSelectPopup = false
+			},
+			
+			// 提交表单
+			submitForm() {
+				// 验证表单数据
+				if (!this.formData.academicTitle) {
+					uni.showToast({ icon: 'none', title: '请选择学术头衔' })
+					return
+				}
+				if (!this.formData.degree) {
+					uni.showToast({ icon: 'none', title: '请选择学位' })
+					return
+				}
+				if (!this.formData.applicationLevel) {
+					uni.showToast({ icon: 'none', title: '请选择申请级别' })
+					return
+				}
+				if (this.formData.proofImages.length === 0) {
+					uni.showToast({ icon: 'none', title: '请上传证明材料' })
+					return
+				}
+
+				// 构建表单数据
+				const formData = {
+					// 基础字段
+					id: 0,
+					doctorId: this.doctorId|| '',
+					companyId: this.userInfo.companyId || 0,
+					companyName: this.userInfo.companyName || '',
+					// 学术信息
+					academicTitle: this.formData.academicTitle,
+					academicPosition: this.formData.academicPositions,
+					internationalPapers: parseInt(this.formData.internationalPapers) || 0,
+					nationalPapers: parseInt(this.formData.nationalPapers) || 0,
+					academicResearch: this.formData.researchAreas,
+					clinicalExperienceYears: parseInt(this.formData.clinicalExperience) || 0,
+					degree: this.formData.degree,
+					applyLevel: this.formData.applicationLevel,
+					// 状态字段
+					status: 0,
+					deleted: 0,
+					auditInstanceId: 0,
+					// 证明材料
+					materials: this.formData.proofImages.map((url, index) => {
+						return {
+							id: 0,
+							companyId: this.userInfo.companyId || 0,
+							applyId: 0,
+							fileUrl: url,
+							fileName: `proof_${index + 1}.jpg`,
+							fileSize: 0,
+							fileType: 'image/jpeg',
+							sortOrder: index + 1,
+							deleted: 0
+						}
+					})
+				}
+
+				// 调用apply接口提交表单
+				uni.showLoading({ title: '提交中...' })
+				apply(formData).then(res => {
+					uni.hideLoading()
+					if (res.code === 200) {
+						uni.showToast({ icon: 'success', title: '提交成功' })
+						// 提交成功后返回上一页
+						setTimeout(() => {
+							uni.navigateBack()
+						}, 1500)
+					} else {
+						uni.showToast({ icon: 'none', title: res.message || '提交失败' })
+					}
+				}).catch(err => {
+					uni.hideLoading()
+					uni.showToast({ icon: 'none', title: '网络错误,请重试' })
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		min-height: 100vh;
+		background: #ffffff;
+		display: flex;
+		flex-direction: column;
+		position: relative;
+
+		.content {
+			flex: 1;
+			box-sizing: border-box;
+
+			.rejection-banner {
+				display: flex;
+				align-items: center;
+				padding: 24rpx;
+				background: #FF5030;
+				color: #fff;
+				margin: 24rpx;
+				border-radius: 8rpx;
+
+				.rejection-icon {
+					width: 40rpx;
+					height: 40rpx;
+					border-radius: 50%;
+					background: rgba(255, 255, 255, 0.3);
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					font-size: 24rpx;
+					margin-right: 16rpx;
+				}
+
+				.rejection-text {
+					flex: 1;
+					font-size: 28rpx;
+					line-height: 1.5;
+				}
+			}
+
+			.form-section {
+				background: #fff;
+				margin: 20rpx;
+				border-radius: 16rpx;
+				padding: 32rpx;
+
+				.form-item {
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+					border-bottom: 1px solid #EBEDF0;
+					padding: 30rpx 0;
+
+					&:last-child {
+						border-bottom: 0;
+					}
+
+					&.column {
+						display: flex;
+						flex-direction: column;
+						justify-content: baseline;
+						align-items: baseline;
+					}
+
+					.input {
+						text-align: end;
+						font-size: 28rpx;
+						color: #C8C9CC;
+					}
+
+					.form-label {
+						display: flex;
+						align-items: center;
+						font-size: 28rpx;
+						color: #333;
+
+						.required {
+							color: #CF3546;
+							margin-right: 4rpx;
+						}
+					}
+
+					.form-tips {
+						font-size: 24rpx;
+						color: #999999;
+						margin: 12rpx 0 24rpx;
+					}
+
+					.upload-proof {
+						margin-top: 16rpx;
+
+						.uploaded-images {
+							display: flex;
+							flex-wrap: wrap;
+							gap: 20rpx;
+
+							.uploaded-image-item {
+								width: 160rpx;
+								height: 160rpx;
+								border-radius: 16rpx;
+								position: relative;
+
+								image {
+									width: 100%;
+									height: 100%;
+									border-radius: 12rpx;
+								}
+
+								.image-delete {
+									position: absolute;
+									top: -12rpx;
+									right: -12rpx;
+									width: 40rpx;
+									height: 40rpx;
+									background: rgba(0, 0, 0, 0.6);
+									color: #FFFFFF;
+									border-radius: 50%;
+									display: flex;
+									align-items: center;
+									justify-content: center;
+									font-size: 32rpx;
+									font-weight: bold;
+									z-index: 1;
+								}
+							}
+
+							
+						}
+
+						.upload-placeholder {
+							width: 160rpx;
+height: 160rpx;
+					background: #F7F8FA;		
+							border-radius: 16rpx;
+							display: flex;
+							flex-direction: column;
+							align-items: center;
+							justify-content: center;
+image{
+	width: 48rpx;
+	height: 48rpx;
+}
+							.camera-icon {
+								font-size: 48rpx;
+								color: #CCCCCC;
+								margin-bottom: 16rpx;
+							}
+
+							.upload-text {
+								font-size: 24rpx;
+								color: #999999;
+							}
+						}
+					}
+
+					.txt {
+						font-size: 28rpx;
+						color: #333333;
+					}
+
+					.form-input {
+						flex: 1;
+						font-size: 28rpx;
+						color: #C8C9CC;
+
+						&.placeholder {
+							color: #C8C9CC;
+						}
+
+						&.picker-input {
+							display: flex;
+							align-items: center;
+							justify-content: flex-end;
+						}
+
+						.icon {
+							width: 36rpx;
+							height: 36rpx;
+						}
+					}
+				}
+			}
+		}
+
+		.next-button {
+			text-align: center;
+			font-size: 32rpx;
+			color: #FFFFFF;
+			height: 88rpx;
+			line-height: 88rpx;
+			background: #388BFF;
+			border-radius: 200rpx;
+			margin: 32rpx;
+		}
+
+		/* 多选弹窗样式 */
+		.u-popup-content {
+			background: #fff;
+			border-radius: 20rpx 20rpx 0 0;
+			max-height: 80vh;
+			display: flex;
+			flex-direction: column;
+			width: 100%;
+		}
+
+		.popup-header {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			padding: 32rpx;
+			border-bottom: 1px solid #EBEDF0;
+		}
+
+		.popup-title {
+			font-size: 32rpx;
+			font-weight: bold;
+			color: #333;
+		}
+
+		.popup-close {
+			font-size: 40rpx;
+			color: #999;
+			cursor: pointer;
+		}
+
+		.popup-body {
+			padding: 32rpx;
+			flex: 1;
+			overflow-y: auto;
+		}
+
+		.tag-group {
+			display: flex;
+			flex-wrap: wrap;
+			gap: 16rpx;
+		}
+
+		.tag-item {
+			padding: 16rpx 32rpx;
+			border: 2rpx solid #DCDFE6;
+			border-radius: 40rpx;
+			font-size: 28rpx;
+			color: #666;
+			cursor: pointer;
+			transition: all 0.3s;
+			white-space: nowrap;
+		}
+
+		.tag-item.active {
+			background: #388BFF;
+			border-color: #388BFF;
+			color: #fff;
+		}
+
+		.popup-footer {
+			display: flex;
+		}
+		.popup-btn {
+			flex: 1;
+			gap: 20rpx;
+            text-align: center;
+			height: 88rpx;
+			line-height: 88rpx;
+			border: none;
+			font-size: 28rpx;
+			cursor: pointer;
+			border-radius:40rpx;
+		}
+
+		.cancel-btn {
+			background: #fff;
+			color: #666;
+			border: 2rpx solid #DCDFE6;
+		}
+
+		.confirm-btn {
+			background: #388BFF;
+			color: #fff;
+		}
+	}
+
+	::v-deep .u-popup__content {
+		border-radius: 40rpx 40rpx 0 0 !important;
+	}
+
+
+	.popup-content {
+		border-radius: 40rpx 40rpx 0rpx 0rpx;
+		height: 70vh;
+		background-color: #fff;
+
+		.popup-header {
+			padding: 40rpx 30rpx 20rpx;
+			text-align: center;
+
+			.close-icon {
+				width: 44rpx;
+				height: 44rpx;
+				position: absolute;
+				right: 32rpx;
+			}
+
+			flex-shrink: 0;
+
+			.title {
+				font-size: 32rpx;
+				font-weight: 600;
+				color: #333;
+			}
+
+			.popup-title {
+				font-size: 32rpx;
+				font-weight: 600;
+				color: #333;
+			}
+		}
+
+		.search-box {
+			display: flex;
+			align-items: center;
+			background: #F7F8FA;
+			border-radius: 38rpx;
+			padding: 16rpx 28rpx;
+			margin-bottom: 24rpx;
+
+			.icon {
+				width: 26rpx;
+				height: 26rpx;
+				margin-right: 10rpx;
+			}
+		}
+
+		.project-list {
+			height: calc(100% - 200rpx);
+
+			.project-item {
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				padding: 28rpx 0;
+				font-size: 28rpx;
+				border-bottom: 1rpx solid #eee;
+
+				&:active {
+					background-color: #f9f9f9;
+				}
+
+				&.active {
+					.project-name {
+						font-weight: 500;
+						color: #388BFF;
+					}
+
+					.icon {
+						opacity: 1;
+					}
+				}
+
+				.project-name {
+					color: #333;
+					transition: all 0.2s ease;
+				}
+
+				.icon {
+					width: 36rpx;
+					height: 36rpx;
+					opacity: 0;
+					transition: opacity 0.2s ease;
+				}
+			}
+		}
+
+		.two-level-container {
+			display: flex;
+			flex: 1;
+			border-top: 1rpx solid #f5f5f5;
+
+			.primary-list {
+				width: 40%;
+				background-color: #f8f9fa;
+
+				.primary-item {
+					padding: 28rpx 20rpx;
+					background: #F2F3F5;
+
+					&:active {
+						background: #FFFFFF;
+					}
+
+					&.primary-active {
+						position: relative;
+						background-color: #fff;
+
+						&::before {
+							content: '';
+							position: absolute;
+							top: 50%;
+							left: 0;
+							transform: translateY(-50%);
+							width: 8rpx;
+							height: 32rpx;
+							background: #388BFF;
+						}
+
+						.primary-text {
+							font-weight: 500;
+						}
+					}
+
+					.primary-text {
+						font-size: 28rpx;
+						color: #666;
+					}
+				}
+			}
+
+			.secondary-list {
+				width: 60%;
+				padding: 0 20rpx;
+
+				.secondary-item {
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+					padding: 28rpx 10rpx;
+					font-size: 28rpx;
+					color: #333;
+
+					&.secondary-active {
+						font-weight: 500;
+						color: #388BFF;
+					}
+				}
+			}
+		}
+
+		.popup-footer {
+			padding: 20rpx 30rpx 40rpx;
+			background-color: #fff;
+			border-top: 1rpx solid #f5f5f5;
+			flex-shrink: 0;
+
+			.confirm-btn {
+				width: 100%;
+				height: 88rpx;
+				line-height: 88rpx;
+				background-color: #2979ff;
+				color: #fff;
+				font-size: 32rpx;
+				border-radius: 200rpx 200rpx 200rpx 200rpx;
+
+				&:active {
+					opacity: 0.8;
+				}
+			}
+		}
+	}
+
+	@media (prefers-color-scheme: dark) {
+		.popup-content {
+			background-color: #1e1e1e;
+
+			.popup-header {
+
+				.title,
+				.popup-title {
+					color: #fff;
+				}
+			}
+
+			.two-level-container {
+				.primary-list {
+					background-color: #2d2d2d;
+					border-right-color: #3d3d3d;
+
+					.primary-item {
+						border-bottom-color: #3d3d3d;
+
+						&:active {
+							background-color: #3d3d3d;
+						}
+
+						&.primary-active {
+							background-color: #3d3d3d;
+
+							.primary-text {
+								color: #2979ff;
+							}
+						}
+
+						.primary-text {
+							color: #ccc;
+						}
+					}
+				}
+
+				.secondary-list {
+					.secondary-item {
+						border-bottom-color: #3d3d3d;
+
+						&:active {
+							background-color: #3d3d3d;
+						}
+
+						&.secondary-active {
+							background-color: #2d2d2d;
+						}
+
+						.secondary-text {
+							color: #fff;
+						}
+					}
+				}
+			}
+
+			.popup-footer {
+				background-color: #1e1e1e;
+				border-top-color: #3d3d3d;
+			}
+		}
+	}
+</style>

+ 114 - 129
pages_speaker/index.vue

@@ -3,13 +3,14 @@
 		<view class="top-box">
 		<view class="top-box">
 			<view class="input-item">
 			<view class="input-item">
 				<image class="icon" src="@/static/image/search.png" mode=""></image>
 				<image class="icon" src="@/static/image/search.png" mode=""></image>
-				<input class="" placeholder="请输入讲者姓名" placeholder-class="placeholder" />
+				<input class="" placeholder="请输入讲者姓名" placeholder-class="placeholder" v-model="searchName" />
 			</view>
 			</view>
 			<view class="filter-item" @click="showFilter = true">
 			<view class="filter-item" @click="showFilter = true">
 				<image class="w32 h32 mr4" src="@/static/image/icon_select.png" mode=""></image>
 				<image class="w32 h32 mr4" src="@/static/image/icon_select.png" mode=""></image>
 				<text>筛选</text>
 				<text>筛选</text>
 			</view>
 			</view>
 		</view>
 		</view>
+		<!-- {{utils.getDictLabelName("doctorPosition",item.doctorPosition)}} -->
 		<!-- 筛选标签栏 -->
 		<!-- 筛选标签栏 -->
 		<view class="filter-bar">
 		<view class="filter-bar">
 			<view class="filter-tabs">
 			<view class="filter-tabs">
@@ -21,7 +22,7 @@
 			<view class="filter-divider"></view>
 			<view class="filter-divider"></view>
 			<view class="filter-btn">
 			<view class="filter-btn">
 				<text>全员</text>
 				<text>全员</text>
-				<image class="w32 h32" src="@/static/image/icon_select.png" mode=""></image>
+				<image class="w32 h32" src="@/static/image/icon_down.png" mode=""></image>
 			</view>
 			</view>
 		</view>
 		</view>
 		<!-- 任务列表 -->
 		<!-- 任务列表 -->
@@ -29,26 +30,32 @@
 			<view class="task-card" v-for="(item, index) in taskList" :key="index" @click="showDetail(item)">
 			<view class="task-card" v-for="(item, index) in taskList" :key="index" @click="showDetail(item)">
 				<view class="card-header">
 				<view class="card-header">
 					<view class="card-title">
 					<view class="card-title">
-						<text>{{ item.title }}</text>
-						<text class="title-little">{{item.titleLittle}}</text>
-						<view class="lable">一级</view>
+						<text>{{ item.doctorName }}</text>
+						<text class="title-little" v-if="item.account_type">{{item.account_type}}</text>
+						<view class="lable" v-if="item.doctorLevel">{{item.doctorLevel}}</view>
 					</view>
 					</view>
-					<view class="status-tag" :class="item.status">
-						{{ item.statusText }}
+					<view class="status-tag" :class="item.status === 0 ? 'reviewing' : item.status === 1 ? 'approved' : item.status === 2 ? 'rejected' : 'manual'">
+						{{ item.status === 0 ? '待审核' : item.status === 1 ? '已通过' : item.status === 2 ? '已驳回' : '转人工审核' }}
 					</view>
 					</view>
 				</view>
 				</view>
 
 
 
 
 				<view class="row">
 				<view class="row">
-					<image class="icon" src="@/static/image/icon_select.png" mode=""></image>
-					<text>湖南省人民医院</text>
+					<image class="icon" src="@/static/image/icon_hospital.png" mode=""></image>
+					<text>{{ item.institution }}</text>
 					<view class="line"></view>
 					<view class="line"></view>
-					<text>口腔科</text>
+					<text>{{ item.department }}</text>
 				</view>
 				</view>
 				<view class="row">
 				<view class="row">
-					<image class="icon" src="/static/image/icon_select.png" mode=""></image>
-					<text class="txt">小蜜蜂:张萌(302、403)、王欣欣(3...小蜜蜂:张萌(302、403)、王欣欣</text>
-					<image class="icon" src="/static/image/icon_expand.png" mode=""></image>
+					<image class="icon" src="/static/image/icon_user.png" mode=""></image>
+					<view class="txt-container">
+						<text class="txt" :class="{ 'expanded': expandedItems[index] }">
+							<text v-for="(value,idx) in (item.doctorProducts || [])" :key="idx">
+								{{ value.companyUserName }}({{ value.productCode }})<span v-if="idx < (item.doctorProducts || []).length - 1">、</span>
+							</text>
+						</text>
+					</view>
+					<image v-if="item.doctorProducts && item.doctorProducts.length > 0" class="icon expand-icon" :class="{ 'expanded': expandedItems[index] }" @click.stop="expand(index)" src="/static/image/icon_expand.png" mode=""></image>
 				</view>
 				</view>
 
 
 				<view class="card-warning" v-if="item.warning">
 				<view class="card-warning" v-if="item.warning">
@@ -56,16 +63,17 @@
 					<text>{{ item.warning }}</text>
 					<text>{{ item.warning }}</text>
 				</view>
 				</view>
 
 
-				<view class="card-rejection" v-if="item.rejectionReason">
+				<view class="card-rejection" v-if="item.rejectReason">
 					<image class="w28 h28 mr8" src="@/static/image/icon_wrong.png" mode=""></image>
 					<image class="w28 h28 mr8" src="@/static/image/icon_wrong.png" mode=""></image>
-					<text>驳回原因: {{ item.rejectionReason }}</text>
+					<text>驳回原因: {{ item.rejectReason }}</text>
 				</view>
 				</view>
 				<view class="card-tags">
 				<view class="card-tags">
-					<view class="tag-item points-tag" @click.stop="showCorrelation=true">
-						默认产品组:五级
+					<view class="tag-item points-tag" v-if="item.productGroup" @click.stop="showCorrelation=true">
+						<!-- 默认产品组:五级 -->
+						 {{ item.productGroup }}
 					</view>
 					</view>
 				</view>
 				</view>
-				<view class="apply-button">定级申请</view>
+				<view class="apply-button" @click.stop="applyLevel(item)">定级申请</view>
 			</view>
 			</view>
 		</scroll-view>
 		</scroll-view>
 
 
@@ -133,14 +141,16 @@
 <script>
 <script>
 	import Server from '@/components/Server.vue'
 	import Server from '@/components/Server.vue'
 	import {
 	import {
-		getAirClassroomList
-	} from '@/api-js/airClassroom'
+		speakerList
+	} from '@/api/speaker'
+
 	export default {
 	export default {
 		components: {
 		components: {
 			Server
 			Server
 		},
 		},
 		data() {
 		data() {
 			return {
 			return {
+				userInfo: JSON.parse(uni.getStorageSync('userInfo') || '{}'),
 				productData: [{
 				productData: [{
 						assistant: '王小明',
 						assistant: '王小明',
 						products: ['302', '403', '202', '301']
 						products: ['302', '403', '202', '301']
@@ -175,7 +185,7 @@
 					}
 					}
 				],
 				],
 				statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px',
 				statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px',
-				currentTab: 0,
+				currentTab: '',
 				showFilter: false,
 				showFilter: false,
 				dateRange: {
 				dateRange: {
 					startDate: '',
 					startDate: '',
@@ -185,24 +195,28 @@
 					startDate: '',
 					startDate: '',
 					endDate: ''
 					endDate: ''
 				},
 				},
+				searchName:'',
 				tabs: [{
 				tabs: [{
 						label: '全部',
 						label: '全部',
-						value: 'all'
+						value: ''
 					},
 					},
 					{
 					{
 						label: '待审核',
 						label: '待审核',
-						value: 'reviewing'
+						value: '0'
 					},
 					},
 					{
 					{
 						label: '已通过',
 						label: '已通过',
-						value: 'approved'
+						value: '1'
 					},
 					},
 					{
 					{
 						label: '已驳回',
 						label: '已驳回',
-						value: 'rejected'
+						value: '2'
 					}
 					}
 				],
 				],
-				taskList: []
+				taskList: [],
+				expandedItems: {},
+				// 搜索防抖定时器
+				searchTimer: null
 			}
 			}
 		},
 		},
 		watch: {
 		watch: {
@@ -214,15 +228,31 @@
 						endDate: this.dateRange.endDate
 						endDate: this.dateRange.endDate
 					}
 					}
 				}
 				}
+			},
+			// 监听搜索关键词变化,添加防抖处理
+			searchName(newVal) {
+				// 清除之前的定时器
+				if (this.searchTimer) {
+					clearTimeout(this.searchTimer)
+				}
+				// 设置新的定时器,300ms后执行搜索
+				this.searchTimer = setTimeout(() => {
+					this.loadData()
+				}, 300)
 			}
 			}
 		},
 		},
 		onLoad() {
 		onLoad() {
-			this.loadData()
+			this.loadData();
+			// this.tabs= utils.getDicts("sys_user_sex");
 		},
 		},
 		onReachBottom() {
 		onReachBottom() {
 			this.loadMore()
 			this.loadMore()
+			
 		},
 		},
 		methods: {
 		methods: {
+			expand(index) {
+				this.$set(this.expandedItems, index, !this.expandedItems[index])
+			},
 			goBack() {
 			goBack() {
 				uni.navigateBack()
 				uni.navigateBack()
 			},
 			},
@@ -269,37 +299,32 @@
 				this.showFilter = false
 				this.showFilter = false
 				this.loadData()
 				this.loadData()
 			},
 			},
-			goComplete(item) {
-				uni.navigateTo({
-					url: `/pages_task/completeTask?id=${item.id}`
-				})
-			},
-			goEdit(item) {
-				uni.navigateTo({
-					url: `/pages_task/completeTask?id=${item.id}&edit=true`
-				})
-			},
 			// 查看详情
 			// 查看详情
 			showDetail(item) {
 			showDetail(item) {
+				console.log("item内容",item)
 				uni.navigateTo({
 				uni.navigateTo({
-					url: `/pages_task/taskDetail?id=${item.id}`
+					url: `/pages_speaker/lecturerDetail?id=${item.id }`
 				})
 				})
 			},
 			},
 			async loadData() {
 			async loadData() {
+				console.log("activeTab内容",this.currentTab)
 				try {
 				try {
 					uni.showLoading({
 					uni.showLoading({
-						title: '加载中...'
-					})
-					const res = await getAirClassroomList({
-						status: this.currentTab,
-						startDate: this.dateRange.startDate,
-						endDate: this.dateRange.endDate,
+							title: '加载中...'
+						})
+					this.userInfo=JSON.parse(uni.getStorageSync('userInfo') || '{}');
+					console.log("userInfo内容",this.userInfo)
+					const res = await speakerList({
+						companyId: this.userInfo.companyId,
 						page: 1,
 						page: 1,
-						pageSize: 20
+						pageSize: 20,
+						doctorName:this.searchName,
+						status:this.currentTab
 					})
 					})
 					uni.hideLoading()
 					uni.hideLoading()
-					if (res.code === 200 && res.data) {
-						this.taskList = res.data.list || this.getDefaultData()
+					if (res.code === 200 && res.rows) {
+						// 直接使用接口返回的原始数据
+						this.taskList = res.rows
 					} else {
 					} else {
 						this.taskList = this.getDefaultData()
 						this.taskList = this.getDefaultData()
 					}
 					}
@@ -312,79 +337,15 @@
 			async loadMore() {
 			async loadMore() {
 				// 加载更多数据
 				// 加载更多数据
 			},
 			},
+			// 定级申请
+			 applyLevel(item) {
+				console.log('定级申请',item)
+			uni.navigateTo({
+							url: `/pages_speaker/gradeApplication?id=${item.id}&auditInstanceId=${item.auditInstanceId || item.id}&doctorId=${item.doctorId}`
+						})
+			},
 			getDefaultData() {
 			getDefaultData() {
-				return [{
-						id: 1,
-						title: '王小明',
-						titleLittle: '主治医师',
-						videoType: '长视频',
-						category: '学术',
-						points: '10',
-						count: '1',
-						startTime: '2025-9-20 13:55',
-						endTime: '2025-9-20 13:55',
-						createTime: '2025-9-20 13:55',
-						status: 'approved',
-						statusText: '已通过'
-					},
-					{
-						id: 2,
-						title: '王小明',
-						titleLittle: '主治医师',
-						videoType: '长视频',
-						category: '学术',
-						points: '10',
-						count: '1',
-						startTime: '2025-9-20 13:55',
-						endTime: '2025-9-20 13:55',
-						createTime: '2025-9-20 13:55',
-						status: 'approved',
-						statusText: '已通过',
-						warning: '有效观看不足5人'
-					},
-					{
-						id: 3,
-						title: '王小明',
-						titleLittle: '主治医师',
-						videoType: '短视频',
-						category: '学术',
-						points: '10',
-						count: '1',
-						startTime: '2025-9-20 13:55',
-						endTime: '2025-9-20 13:55',
-						createTime: '2025-9-20 13:55',
-						status: 'approved',
-						statusText: '待审核'
-					},
-					{
-						id: 4,
-						title: '王小明',
-						titleLittle: '主治医师',
-						videoType: '文章',
-						category: '学术',
-						points: '10',
-						count: '1',
-						startTime: '2025-9-20 13:55',
-						endTime: '2025-9-20 13:55',
-						createTime: '2025-9-20 13:55',
-						status: 'rejected',
-						statusText: '已驳回',
-						rejectionReason: '医师资质不够'
-					},
-					{
-						id: 5,
-						title: '王小明',
-						titleLittle: '主治医师',
-						videoType: '长视频',
-						category: '学术',
-						points: '10',
-						count: '1',
-						startTime: '2025-9-20 13:55',
-						endTime: '2025-9-20 13:55',
-						createTime: '2025-9-20 13:55',
-						status: 'approved',
-						statusText: '已通过'
-					}
+				return [
 				]
 				]
 			}
 			}
 		}
 		}
@@ -604,9 +565,14 @@
 				}
 				}
 
 
 				&.rejected {
 				&.rejected {
-					background: #FFF4F5;
-					color: #CF3546;
-				}
+								background: #FFF4F5;
+								color: #CF3546;
+							}
+							
+							&.manual {
+								background: #E3F2FD;
+								color: #2196F3;
+							}
 			}
 			}
 		}
 		}
 
 
@@ -648,19 +614,38 @@
 				margin-right: 16rpx;
 				margin-right: 16rpx;
 			}
 			}
 
 
-			.line {
-				width: 2rpx;
-				height: 28rpx;
-				background: #EAEBEE;
-				border-radius: 0rpx 0rpx 0rpx 0rpx;
-				margin: 0 24rpx;
+			.expand-icon {
+				margin-left: 8rpx;
+				transition: transform 0.3s;
+
+				&.expanded {
+					transform: rotate(180deg);
+				}
 			}
 			}
 
 
-			.txt {
+			.txt-container {
 				flex: 1;
 				flex: 1;
 				overflow: hidden;
 				overflow: hidden;
+			}
+
+			.txt {
+				display: block;
+				overflow: hidden;
 				white-space: nowrap;
 				white-space: nowrap;
 				text-overflow: ellipsis;
 				text-overflow: ellipsis;
+
+				&.expanded {
+					white-space: normal;
+					word-wrap: break-word;
+				}
+			}
+
+			.line {
+				width: 2rpx;
+				height: 28rpx;
+				background: #EAEBEE;
+				border-radius: 0rpx 0rpx 0rpx 0rpx;
+				margin: 0 24rpx;
 			}
 			}
 		}
 		}
 
 

+ 442 - 0
pages_speaker/lecturerDetail.vue

@@ -0,0 +1,442 @@
+<template>
+	<view class="container">
+		<view class="status-bar" :style="{ height: statusBarHeight + 'px' }"></view>
+		<view class="top">
+			<image class="return" @click="goBack" src="/static/image/back_white.png"></image>
+			<text>讲者信息</text>
+			<view class="top-right">
+				<image class="icon" src="/static/image/icon_more.png"></image>
+				<image class="icon" src="/static/image/icon_scan.png"></image>
+			</view>
+		</view>
+		<scroll-view class="content" scroll-y>
+			<!-- 个人基本信息卡片 -->
+			<view class="profile-card">
+				<view class="profile-info">
+					<view class="profile-main">
+						<view class="name-section">
+							<text class="name">{{ lecturerInfo.name }}</text>
+							<text class="identity">{{ lecturerInfo.identity }}</text>
+						</view>
+						<text class="phone">{{ lecturerInfo.phone }}</text>
+					</view>
+					<image class="avatar" :src="lecturerInfo.avatar"></image>
+				</view>
+			</view>
+
+			<!-- 基础信息 -->
+			<view class="info-section">
+				<view class="section-header">
+					<view class="section-indicator"></view>
+					<text class="section-title">基础信息</text>
+				</view>
+				<view class="info-list">
+					<view class="info-item">
+						<text class="info-label">身份证号:</text>
+						<text class="info-value">{{ lecturerInfo.idCard }}</text>
+					</view>
+					<view class="info-item">
+						<text class="info-label">公司:</text>
+						<text class="info-value">{{ lecturerInfo.company }}</text>
+					</view>
+					<view class="info-item">
+						<text class="info-label">机构名称:</text>
+						<text class="info-value">{{ lecturerInfo.institution }}</text>
+					</view>
+					<view class="info-item">
+						<text class="info-label">注册时间:</text>
+						<text class="info-value">{{ lecturerInfo.registerTime }}</text>
+					</view>
+				</view>
+			</view>
+
+			<!-- 执业信息 -->
+			<view class="info-section">
+				<view class="section-header">
+					<view class="section-indicator"></view>
+					<text class="section-title">执业信息</text>
+				</view>
+				<view class="info-list">
+					<view class="info-item">
+						<text class="info-label">地址:</text>
+						<text class="info-value">{{ lecturerInfo.address }}</text>
+					</view>
+					<view class="info-item">
+						<text class="info-label">科室:</text>
+						<text class="info-value">{{ lecturerInfo.department }}</text>
+					</view>
+					<view class="info-item">
+						<text class="info-label">职称:</text>
+						<text class="info-value">{{ lecturerInfo.title }}</text>
+					</view>
+					<view class="info-item">
+						<text class="info-label">第三方业务编码:</text>
+						<text class="info-value">{{ lecturerInfo.thirdPartyCode }}</text>
+					</view>
+					<view class="info-item">
+						<text class="info-label">研究者编码:</text>
+						<text class="info-value">{{ lecturerInfo.researcherCode }}</text>
+					</view>
+				</view>
+			</view>
+
+			<!-- 资质信息 -->
+			<view class="info-section">
+				<view class="section-header">
+					<view class="section-indicator"></view>
+					<text class="section-title">资质信息</text>
+				</view>
+				<view class="qualification-list">
+					<view class="qualification-item">
+						<text class="qualification-label">医师执业证</text>
+						<view class="image-grid">
+							<image class="qualification-image" v-for="(img, index) in lecturerInfo.qualifications.medicalLicense" :key="index" :src="img"></image>
+						</view>
+					</view>
+					<view class="qualification-item">
+						<text class="qualification-label">医师职称证/工牌</text>
+						<view class="image-grid">
+							<image class="qualification-image" v-for="(img, index) in lecturerInfo.qualifications.titleLicense" :key="index" :src="img"></image>
+						</view>
+					</view>
+				</view>
+			</view>
+
+			<!-- 签约与结算 -->
+			<view class="info-section">
+				<view class="section-header">
+					<view class="section-indicator"></view>
+					<text class="section-title">签约与结算</text>
+				</view>
+				<view class="info-list">
+					<view class="info-item">
+						<text class="info-label">签约协议状态:</text>
+						<text class="info-value">{{ lecturerInfo.contractStatus }}</text>
+					</view>
+					<view class="info-item">
+						<text class="info-label">银行卡号:</text>
+						<text class="info-value">{{ lecturerInfo.bankCard }}</text>
+					</view>
+					<view class="info-item">
+						<text class="info-label">开户银行:</text>
+						<text class="info-value">{{ lecturerInfo.bankName }}</text>
+					</view>
+					<view class="info-item">
+						<text class="info-label">支行信息:</text>
+						<text class="info-value">{{ lecturerInfo.branchBank }}</text>
+					</view>
+				</view>
+			</view>
+
+			<!-- 安全信息 -->
+			<view class="info-section">
+				<view class="section-header">
+					<view class="section-indicator"></view>
+					<text class="section-title">安全信息</text>
+				</view>
+				<view class="info-list">
+					<view class="info-item">
+						<text class="info-label">密码:</text>
+						<text class="info-value password">{{ maskedPassword }}</text>
+					</view>
+				</view>
+			</view>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+	import { getStoreActivityDetails } from '@/api/speaker'
+	export default {
+		data() {
+			return {
+				// 仅获取微信小程序状态栏高度,无多余逻辑
+				statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
+				id: '',
+				// 讲者信息
+				lecturerInfo: {
+					name: '',
+					identity: '',
+					phone: '',
+					avatar: '/static/image/doctor_avatar.png',
+					idCard: '',
+					company: '',
+					institution: '',
+					registerTime: '',
+					address: '',
+					department: '',
+					title: '',
+					thirdPartyCode: '',
+					researcherCode: '',
+					contractStatus: '',
+					bankCard: '',
+					bankName: '',
+					branchBank: '',
+					password: '******',
+					qualifications: {
+						medicalLicense: [],
+						titleLicense: []
+					}
+				}
+			}
+		},
+		onLoad(options) {
+			if (options.id) {
+				this.id = options.id
+				this.loadData()
+			}
+		},
+		methods: {
+			goBack() {
+				uni.navigateBack()
+			},
+			async loadData() {
+				try {
+					uni.showLoading({
+						title: '加载中...'
+					})
+					// 调用getStoreActivityDetails接口,传递id参数
+					const res = await getStoreActivityDetails(this.id)
+					uni.hideLoading()
+					if (res.code === 200 && res.data) {
+						// 这里可以根据接口返回的数据结构更新lecturerInfo
+						this.lecturerInfo = res.data
+						console.log('获取讲师信息成功', res.data)
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: '获取讲师信息失败'
+						})
+					}
+				} catch (e) {
+					uni.hideLoading()
+					console.error('加载数据失败', e)
+					uni.showToast({
+						icon: 'none',
+						title: '加载数据失败'
+					})
+				}
+			}
+		},
+		computed: {
+			maskedPassword() {
+				if (!this.lecturerInfo.password) return '';
+				return '*'.repeat(this.lecturerInfo.password.length);
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		min-height: 100vh;
+		background: #f5f5f5;
+		display: flex;
+		flex-direction: column;
+		height: auto;
+
+		&::before {
+			content: '';
+			position: absolute;
+			top: 0;
+			left: 0;
+			right: 0;
+			width: 100%;
+			height: 300rpx;
+			background: linear-gradient(180deg, rgba(56, 139, 255, 0.79) 0%, rgba(56, 139, 255, 0) 100%);
+		}
+	}
+
+	.top {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		height: 88rpx;
+		position: relative;
+		font-weight: 600;
+		font-size: 36rpx;
+		color: #FFFFFF;
+
+		.return {
+			position: absolute;
+			left: 32rpx;
+			width: 40rpx;
+			height: 40rpx;
+		}
+
+		.top-right {
+			position: absolute;
+			right: 32rpx;
+			display: flex;
+			align-items: center;
+
+			.icon {
+				width: 40rpx;
+				height: 40rpx;
+				margin-left: 32rpx;
+			}
+		}
+	}
+
+	.content {
+		flex: 1;
+		padding: 24rpx;
+		box-sizing: border-box;
+		padding-bottom: 100rpx;
+	}
+
+	/* 个人基本信息卡片 */
+	.profile-card {
+		background: #fff;
+		border-radius: 16rpx;
+		padding: 32rpx;
+		margin-bottom: 24rpx;
+		box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.08);
+
+		.profile-info {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+
+			.profile-main {
+				flex: 1;
+
+				.name-section {
+					display: flex;
+					align-items: center;
+					margin-bottom: 16rpx;
+
+					.name {
+						font-size: 36rpx;
+						font-weight: 600;
+						color: #333333;
+						margin-right: 24rpx;
+					}
+
+					.identity {
+						font-size: 24rpx;
+						color: #666666;
+						padding: 4rpx 12rpx;
+						background: #F7F8FA;
+						border-radius: 8rpx;
+					}
+				}
+
+				.phone {
+					font-size: 28rpx;
+					color: #666666;
+				}
+			}
+
+			.avatar {
+				width: 96rpx;
+				height: 96rpx;
+				border-radius: 50%;
+			}
+		}
+	}
+
+	/* 通用信息区块样式 */
+	.info-section {
+		background: #fff;
+		border-radius: 16rpx;
+		padding: 24rpx;
+		margin-bottom: 24rpx;
+		box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.08);
+
+		.section-header {
+			display: flex;
+			align-items: center;
+			margin-bottom: 24rpx;
+
+			.section-indicator {
+				width: 6rpx;
+				height: 32rpx;
+				background: #388BFF;
+				border-radius: 3rpx;
+				margin-right: 16rpx;
+			}
+
+			.section-title {
+				font-weight: 600;
+				font-size: 32rpx;
+				color: #333333;
+			}
+		}
+
+		.info-list {
+			.info-item {
+				display: flex;
+				margin-bottom: 24rpx;
+
+				&:last-child {
+					margin-bottom: 0;
+				}
+
+				.info-label {
+					width: 30%;
+					font-size: 28rpx;
+					color: #666;
+					flex-shrink: 0;
+				}
+
+				.info-value {
+					flex: 1;
+					text-align: end;
+					font-size: 28rpx;
+					color: #333;
+
+					&.password {
+						font-family: monospace;
+					}
+				}
+			}
+		}
+
+		/* 资质信息样式 */
+		.qualification-list {
+			.qualification-item {
+				margin-bottom: 32rpx;
+
+				&:last-child {
+					margin-bottom: 0;
+				}
+
+				.qualification-label {
+					display: block;
+					font-size: 28rpx;
+					color: #666666;
+					margin-bottom: 16rpx;
+				}
+
+				.image-grid {
+					display: flex;
+					flex-wrap: wrap;
+					gap: 16rpx;
+
+					.qualification-image {
+						width: calc((100% - 32rpx) / 2);
+						height: 240rpx;
+						border-radius: 8rpx;
+						object-fit: cover;
+					}
+				}
+			}
+		}
+	}
+
+	/* 响应式调整 */
+	@media (max-width: 750rpx) {
+		.profile-card {
+			padding: 24rpx;
+		}
+
+		.info-section {
+			padding: 20rpx;
+		}
+
+		.qualification-image {
+			height: 200rpx !important;
+		}
+	}
+</style>

+ 3 - 1
pages_speaker/speakerInvitation.vue

@@ -44,7 +44,9 @@
 				statusBarHeight: uni.getSystemInfoSync().statusBarHeight
 				statusBarHeight: uni.getSystemInfoSync().statusBarHeight
 			};
 			};
 		},
 		},
-		onLoad() {},
+		onLoad() {
+			
+		},
 		methods: {}
 		methods: {}
 	};
 	};
 </script>
 </script>

+ 0 - 686
pages_task/airClassroom.vue

@@ -1,686 +0,0 @@
-<template>
-	<view class="container">
-		
-		<!-- 筛选标签栏 -->
-		<view class="filter-bar">
-			<view class="filter-tabs">
-				<view class="tab-item" 
-					:class="{ active: currentTab === item.value }" 
-					v-for="(item, index) in tabs" 
-					:key="index"
-					@click="switchTab(item.value)">
-					{{ item.label }}
-				</view>
-			</view>
-			<view class="filter-divider"></view>
-			<view class="filter-btn" @click="showFilter = true">
-				<image class="w32 h32" src="@/static/image/icon_select.png" mode=""></image>
-			</view>
-		</view>
-		<!-- 任务列表 -->
-		<scroll-view class="content" scroll-y>
-			<view class="task-card" v-for="(item, index) in taskList" :key="index" @click="showDetail(item)">
-				<view class="card-header">
-					<view class="card-title">{{ item.title }}</view>
-					<view class="status-tag" :class="item.status">
-						{{ item.statusText }}
-					</view>
-				</view>
-				<view class="card-tags">
-					<view class="tag-item video-tag" v-if="item.videoType">
-						<image class="w28 h28 mr10" src="@/static/image/icon_longvideo.png" mode=""></image>
-						<text>{{ item.videoType }}</text>
-					</view>
-					<view class="tag-item" v-if="item.category">
-						{{ item.category }}
-					</view>
-					<view class="tag-item points-tag">
-						{{ item.points }}积分
-					</view>
-					<view class="tag-item">
-						{{ item.count }}个
-					</view>
-				</view>
-				
-				<view class="card-dates">
-					<view class="date-item">
-						<text>开始时间: {{ item.startTime }}</text>
-					</view>
-					<view class="date-item">
-						<text>结束时间: {{ item.endTime }}</text>
-					</view>
-				</view>
-				
-				<view class="card-warning" v-if="item.warning">
-					<text class="warning-icon">⚠</text>
-					<text>{{ item.warning }}</text>
-				</view>
-				
-				<view class="card-rejection" v-if="item.rejectionReason">
-					<text class="rejection-icon">❌</text>
-					<text>驳回原因: {{ item.rejectionReason }}</text>
-				</view>
-				
-				<view class="card-footer">
-					<view class="footer-date">{{ item.createTime }}</view>
-					<view class="footer-actions">
-						<view class="action-btn" v-if="item.status === 'pending'" @click="goComplete(item)">
-							去完成
-						</view>
-						<view class="action-btn" v-if="item.status === 'rejected'" @click="goEdit(item)">
-							编辑
-						</view>
-					</view>
-				</view>
-			</view>
-		</scroll-view>
-		
-		<!-- 筛选弹窗 -->
-		<view class="filter-popup" v-if="showFilter" @click="closeFilter">
-			<view class="filter-content" @click.stop>
-				<view class="filter-header">
-					<view class="filter-title">筛选</view>
-					<view class="filter-close-btn" @click="closeFilter">×</view>
-				</view>
-				
-				<!-- 申请时间筛选 -->
-				<view class="filter-group">
-					<view class="group-label">申请时间</view>
-					<view class="date-range-inputs">
-						<picker mode="date" :value="tempDateRange.startDate" @change="onStartDateChange">
-							<view class="date-input" :class="{ placeholder: !tempDateRange.startDate }">
-								{{ tempDateRange.startDate || '开始时间' }}
-							</view>
-						</picker>
-						<text class="date-separator">-</text>
-						<picker mode="date" :value="tempDateRange.endDate" @change="onEndDateChange">
-							<view class="date-input" :class="{ placeholder: !tempDateRange.endDate }">
-								{{ tempDateRange.endDate || '结束时间' }}
-							</view>
-						</picker>
-					</view>
-				</view>
-				
-				<!-- 操作按钮 -->
-				<view class="filter-actions">
-					<view class="reset-btn" @click="resetFilters">重置</view>
-					<view class="confirm-btn" @click="confirmFilters">确定</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-import { getAirClassroomList } from '@/api-js/airClassroom'
-export default {
-	data() {
-		return {
-			statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px',
-			currentTab: 'all',
-			showFilter: false,
-			dateRange: {
-				startDate: '',
-				endDate: ''
-			},
-			tempDateRange: {
-				startDate: '',
-				endDate: ''
-			},
-			tabs: [
-				{ label: '全部', value: 'all' },
-				{ label: '未完成', value: 'pending' },
-				{ label: '待审核', value: 'reviewing' },
-				{ label: '已通过', value: 'approved' },
-				{ label: '已驳回', value: 'rejected' }
-			],
-			taskList: []
-		}
-	},
-	watch: {
-		showFilter(newVal) {
-			if (newVal) {
-				// 打开弹窗时,同步临时日期范围为当前日期范围
-				this.tempDateRange = {
-					startDate: this.dateRange.startDate,
-					endDate: this.dateRange.endDate
-				}
-			}
-		}
-	},
-	onLoad() {
-		this.loadData()
-	},
-	onReachBottom() {
-		this.loadMore()
-	},
-	methods: {
-		goBack() {
-			uni.navigateBack()
-		},
-		switchTab(value) {
-			this.currentTab = value
-			this.loadData()
-		},
-		closeFilter() {
-			// 关闭弹窗时,恢复临时日期范围为当前日期范围
-			this.tempDateRange = {
-				startDate: this.dateRange.startDate,
-				endDate: this.dateRange.endDate
-			}
-			this.showFilter = false
-		},
-		onStartDateChange(e) {
-			this.tempDateRange.startDate = e.detail.value
-		},
-		onEndDateChange(e) {
-			this.tempDateRange.endDate = e.detail.value
-		},
-		resetFilters() {
-			this.tempDateRange = {
-				startDate: '',
-				endDate: ''
-			}
-		},
-		confirmFilters() {
-			// 验证日期范围
-			if (this.tempDateRange.startDate && this.tempDateRange.endDate) {
-				if (new Date(this.tempDateRange.startDate) > new Date(this.tempDateRange.endDate)) {
-					uni.showToast({
-						icon: 'none',
-						title: '开始时间不能大于结束时间'
-					})
-					return
-				}
-			}
-			this.dateRange = {
-				startDate: this.tempDateRange.startDate,
-				endDate: this.tempDateRange.endDate
-			}
-			this.showFilter = false
-			this.loadData()
-		},
-		goComplete(item) {
-			uni.navigateTo({
-				url: `/pages_task/completeTask?id=${item.id}`
-			})
-		},
-		goEdit(item) {
-			uni.navigateTo({
-				url: `/pages_task/completeTask?id=${item.id}&edit=true`
-			})
-		},
-		// 查看详情
-		showDetail(item) {
-			uni.navigateTo({
-				url: `/pages_task/taskDetail?id=${item.id}`
-			})
-		},
-		async loadData() {
-			try {
-				uni.showLoading({ title: '加载中...' })
-				const res = await getAirClassroomList({
-					status: this.currentTab,
-					startDate: this.dateRange.startDate,
-					endDate: this.dateRange.endDate,
-					page: 1,
-					pageSize: 20
-				})
-				uni.hideLoading()
-				if (res.code === 200 && res.data) {
-					this.taskList = res.data.list || this.getDefaultData()
-				} else {
-					this.taskList = this.getDefaultData()
-				}
-			} catch (e) {
-				uni.hideLoading()
-				console.error('加载数据失败', e)
-				this.taskList = this.getDefaultData()
-			}
-		},
-		async loadMore() {
-			// 加载更多数据
-		},
-		getDefaultData() {
-			return [
-				{
-					id: 1,
-					title: '王小明医生空中任务',
-					videoType: '长视频',
-					category: '学术',
-					points: '10',
-					count: '1',
-					startTime: '2025-9-20 13:55',
-					endTime: '2025-9-20 13:55',
-					createTime: '2025-9-20 13:55',
-					status: 'pending',
-					statusText: '待完成'
-				},
-				{
-					id: 2,
-					title: '王小明医生空中任务',
-					videoType: '长视频',
-					category: '学术',
-					points: '10',
-					count: '1',
-					startTime: '2025-9-20 13:55',
-					endTime: '2025-9-20 13:55',
-					createTime: '2025-9-20 13:55',
-					status: 'pending',
-					statusText: '待完成',
-					warning: '有效观看不足5人'
-				},
-				{
-					id: 3,
-					title: '王小明医生空中任务',
-					videoType: '短视频',
-					category: '学术',
-					points: '10',
-					count: '1',
-					startTime: '2025-9-20 13:55',
-					endTime: '2025-9-20 13:55',
-					createTime: '2025-9-20 13:55',
-					status: 'reviewing',
-					statusText: '待审核'
-				},
-				{
-					id: 4,
-					title: '王小明医生空中任务',
-					videoType: '文章',
-					category: '学术',
-					points: '10',
-					count: '1',
-					startTime: '2025-9-20 13:55',
-					endTime: '2025-9-20 13:55',
-					createTime: '2025-9-20 13:55',
-					status: 'rejected',
-					statusText: '已驳回',
-					rejectionReason: '交付物无效,请重新编辑'
-				},
-				{
-					id: 5,
-					title: '王小明医生空中任务',
-					videoType: '长视频',
-					category: '学术',
-					points: '10',
-					count: '1',
-					startTime: '2025-9-20 13:55',
-					endTime: '2025-9-20 13:55',
-					createTime: '2025-9-20 13:55',
-					status: 'approved',
-					statusText: '已通过'
-				}
-			]
-		}
-	}
-}
-</script>
-
-<style lang="scss" scoped>
-.container {
-	min-height: 100vh;
-	background: #f5f5f5;
-	display: flex;
-	flex-direction: column;
-}
-
-.status-bar {
-	width: 100%;
-	background: #fff;
-}
-
-.header {
-	position: relative;
-	height: 88rpx;
-	display: flex;
-	align-items: center;
-	justify-content: center;
-	background: #fff;
-	border-bottom: 1rpx solid #f0f0f0;
-	
-	.back-btn {
-		position: absolute;
-		left: 24rpx;
-		width: 40rpx;
-		height: 40rpx;
-		
-		image {
-			width: 100%;
-			height: 100%;
-		}
-	}
-	
-	.title {
-		font-size: 36rpx;
-		font-weight: bold;
-		color: #333;
-	}
-	
-	.header-right {
-		position: absolute;
-		right: 24rpx;
-		display: flex;
-		align-items: center;
-		gap: 16rpx;
-		
-		.more-icon {
-			font-size: 32rpx;
-			color: #333;
-		}
-	}
-}
-
-.filter-bar {
-	display: flex;
-	align-items: center;
-	background: #fff;
-	padding: 0 24rpx;
-	border-bottom: 1rpx solid #f0f0f0;
-	
-	.filter-tabs {
-		flex: 1;
-		display: flex;
-		align-items: center;
-		gap: 32rpx;
-		overflow-x: auto;
-		
-		.tab-item {
-			padding: 24rpx 0;
-			font-size: 28rpx;
-			color: #666;
-			white-space: nowrap;
-			position: relative;
-			
-			&.active {
-				color: #388BFF;
-				font-weight: bold;
-				
-				&::after {
-					content: '';
-					position: absolute;
-					bottom: 0;
-					left: 0;
-					right: 0;
-					height: 4rpx;
-					background: #388BFF;
-				}
-			}
-		}
-	}
-	
-	.filter-divider {
-		width: 1rpx;
-		height: 40rpx;
-		background: #e0e0e0;
-		margin: 0 16rpx;
-	}
-	
-	.filter-btn {
-		padding: 24rpx 0;
-		
-		.filter-icon {
-			font-size: 32rpx;
-			color: #333;
-		}
-	}
-}
-
-.content {
-	flex: 1;
-	padding: 24rpx;
-	box-sizing: border-box;
-}
-
-.task-card {
-	background: #fff;
-	border-radius: 16rpx;
-	padding: 24rpx;
-	margin-bottom: 24rpx;
-	
-	.card-header {
-		display: flex;
-		align-items: flex-start;
-		justify-content: space-between;
-		margin-bottom: 16rpx;
-		
-		.card-title {
-			flex: 1;
-			font-size: 32rpx;
-			font-weight: bold;
-			color: #333;
-		}
-		
-		.status-tag {
-			padding: 8rpx 16rpx;
-			border-radius: 20rpx;
-			font-size: 24rpx;
-			
-			&.pending {
-				background: #E3F2FD;
-				color: #2196F3;
-			}
-			
-			&.reviewing {
-				background: #FFF3E0;
-				color: #FF9800;
-			}
-			
-			&.approved {
-				background: #E8F5E9;
-				color: #4CAF50;
-			}
-			
-			&.rejected {
-				background: #FFEBEE;
-				color: #F44336;
-			}
-		}
-	}
-	
-	.card-tags {
-		display: flex;
-		align-items: center;
-		flex-wrap: wrap;
-		gap: 12rpx;
-		margin-bottom: 16rpx;
-		
-		.tag-item {
-			padding: 8rpx 16rpx;
-			background:#FFFAF4;
-			border-radius: 8rpx;
-			font-size: 24rpx;
-			color: #5D410F;
-			display: flex;
-			align-items: center;
-			&.video-tag {
-				background: linear-gradient( 90deg, #FFE9C7 0%, #F3D091 100%);
-				
-				.tag-icon {
-					margin-right: 4rpx;
-				}
-			}
-			
-			&.points-tag {
-				border: 1rpx solid #388BFF;
-				color: #388BFF;
-				background: transparent;
-			}
-		}
-	}
-	
-	.card-dates {
-		margin-bottom: 16rpx;
-		
-		.date-item {
-			font-size: 26rpx;
-			color: #999;
-			margin-bottom: 8rpx;
-		}
-	}
-	
-	.card-warning {
-		display: flex;
-		align-items: center;
-		gap: 8rpx;
-		padding: 12rpx;
-		background: #FFF3E0;
-		border-radius: 8rpx;
-		margin-bottom: 16rpx;
-		font-size: 26rpx;
-		color: #FF9800;
-		
-		.warning-icon {
-			font-size: 28rpx;
-		}
-	}
-	
-	.card-rejection {
-		display: flex;
-		align-items: center;
-		gap: 8rpx;
-		padding: 12rpx;
-		background: #FFEBEE;
-		border-radius: 8rpx;
-		margin-bottom: 16rpx;
-		font-size: 26rpx;
-		color: #F44336;
-		
-		.rejection-icon {
-			font-size: 28rpx;
-		}
-	}
-	
-	.card-footer {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		padding-top: 16rpx;
-		border-top: 1rpx solid #f0f0f0;
-		
-		.footer-date {
-			font-size: 24rpx;
-			color: #999;
-		}
-		
-		.footer-actions {
-			.action-btn {
-				padding: 12rpx 32rpx;
-				background: #388BFF;
-				border-radius: 8rpx;
-				font-size: 28rpx;
-				color: #fff;
-			}
-		}
-	}
-}
-
-.filter-popup {
-	position: fixed;
-	top: 0;
-	left: 0;
-	right: 0;
-	bottom: 0;
-	background: rgba(0, 0, 0, 0.5);
-	z-index: 999;
-	display: flex;
-	align-items: flex-end;
-}
-
-.filter-content {
-	width: 100%;
-	background: #fff;
-	border-radius: 24rpx 24rpx 0 0;
-	padding: 24rpx;
-	
-	.filter-header {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		margin-bottom: 32rpx;
-		
-		.filter-title {
-			font-size: 32rpx;
-			font-weight: bold;
-			color: #333;
-		}
-		
-		.filter-close-btn {
-			width: 48rpx;
-			height: 48rpx;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			font-size: 40rpx;
-			color: #999;
-		}
-	}
-	
-	.filter-group {
-		margin-bottom: 32rpx;
-		
-		.group-label {
-			font-size: 28rpx;
-			font-weight: bold;
-			color: #333;
-			margin-bottom: 20rpx;
-		}
-		
-		.date-range-inputs {
-			display: flex;
-			align-items: center;
-			gap: 16rpx;
-			
-			.date-input {
-				flex: 1;
-				height: 80rpx;
-				line-height: 80rpx;
-				padding: 0 24rpx;
-				background: #f5f5f5;
-				border-radius: 8rpx;
-				font-size: 28rpx;
-				color: #333;
-				text-align: center;
-				
-				&.placeholder {
-					color: #999;
-				}
-			}
-			
-			.date-separator {
-				font-size: 28rpx;
-				color: #666;
-			}
-		}
-	}
-	
-	.filter-actions {
-		display: flex;
-		gap: 24rpx;
-		margin-top: 40rpx;
-		padding-top: 24rpx;
-		border-top: 1rpx solid #f0f0f0;
-		
-		.reset-btn,
-		.confirm-btn {
-			flex: 1;
-			height: 88rpx;
-			line-height: 88rpx;
-			text-align: center;
-			border-radius: 8rpx;
-			font-size: 30rpx;
-		}
-		
-		.reset-btn {
-			background: #fff;
-			color: #666;
-			border: 1rpx solid #e0e0e0;
-		}
-		
-		.confirm-btn {
-			background: #388BFF;
-			color: #fff;
-		}
-	}
-}
-</style>
-

+ 324 - 226
pages_task/approvalCenter.vue

@@ -3,9 +3,9 @@
 		<!-- 搜索+筛选栏 -->
 		<!-- 搜索+筛选栏 -->
 		<view class="top-box">
 		<view class="top-box">
 			<view class="input-item">
 			<view class="input-item">
-				<image class="icon search-icon" src="@/static/image/search.png" mode="widthFix"></image>
-				<input placeholder="请输入发起人姓名、手机号" placeholder-class="placeholder" />
-			</view>
+					<image class="icon search-icon" src="@/static/image/search.png" mode="widthFix"></image>
+					<input v-model="searchKeywords" @input="handleSearchInput" placeholder="请输入发起人姓名、手机号" placeholder-class="placeholder" />
+				</view>
 		</view>
 		</view>
 
 
 		<!-- 顶部选项卡 -->
 		<!-- 顶部选项卡 -->
@@ -26,21 +26,15 @@
 					<image class="icon" src="/static/image/icon_expand.png" mode="widthFix"></image>
 					<image class="icon" src="/static/image/icon_expand.png" mode="widthFix"></image>
 				</view>
 				</view>
 			</view>
 			</view>
-			<!-- 动态子标签弹窗:相对于sub-tabs-wrapper定位 -->
-			<view class="popup-box" v-if="popShow">
-				<view class="item" v-for="(item, index) in tabsList" :key="index">
-					{{item}}
-				</view>
-			</view>
+			<!-- 使用tab-popup组件 -->
+			<tab-popup v-model:show="popShow" :items="tabsList" :selected-item="selectedTabItem" @select="selectTabItem" />
 		</view>
 		</view>
-		<!-- popup遮罩层 - 仅在popShow为true时显示 -->
-		<view class="popup-mask" v-if="popShow"></view>
 		<!-- 列表内容 -->
 		<!-- 列表内容 -->
 		<scroll-view class="content" scroll-y>
 		<scroll-view class="content" scroll-y>
 			<view class="task-card" v-for="(item, index) in currentList" :key="index" @click="goDetails(item)">
 			<view class="task-card" v-for="(item, index) in currentList" :key="index" @click="goDetails(item)">
 				<!-- 任务/审核标题+状态 -->
 				<!-- 任务/审核标题+状态 -->
 				<view class="card-top">
 				<view class="card-top">
-					<text class="card-task-title">{{ item.taskTitle }}</text>
+					<text class="card-task-title">{{ item.auditName || '未设置' }}</text>
 					<view class="status-tag" :class="item.statusClass">{{ item.statusText }}</view>
 					<view class="status-tag" :class="item.statusClass">{{ item.statusText }}</view>
 				</view>
 				</view>
 
 
@@ -49,23 +43,22 @@
 					<view class="time-info">
 					<view class="time-info">
 						<view class="time-item">
 						<view class="time-item">
 							<text class="title">任务名称:</text>
 							<text class="title">任务名称:</text>
-							<text>王小明医师问卷调查任务</text>
-						</view>
-						<!-- 改为判断index:0对应待办 -->
-						<view class="time-item" v-if="currentTopTab === 0">
-							<text class="title">任务类型:</text>
-							<text>问卷调查</text>
+							<text>{{ item.auditName || '未设置' }}</text>
 						</view>
 						</view>
+						<view class="time-item">
+												<text class="title">任务类型:</text>
+												<text>{{ getBusinessTypeLabel(item.businessType) }}</text>
+											</view>
 					</view>
 					</view>
 
 
-					<!-- 操作按钮:改为判断index:0对应待办 -->
-					<view class="operate-btn-group" v-if="currentTopTab === 0">
+					<!-- 操作按钮 -->
+					<view class="operate-btn-group">
 						<view class="share-btn" @click="handleShare(item)">
 						<view class="share-btn" @click="handleShare(item)">
 							<image class="share-icon" src="/static/image/icon_user.png" mode="widthFix"></image>
 							<image class="share-icon" src="/static/image/icon_user.png" mode="widthFix"></image>
-							<text>王彬彬</text>
+							<text>{{ item.initiatorName || '未命名' }}</text>
 						</view>
 						</view>
 						<view class="date">
 						<view class="date">
-							2025-12-24 20:57
+							{{ formatTime(item.createTime) }}
 						</view>
 						</view>
 					</view>
 					</view>
 				</view>
 				</view>
@@ -155,124 +148,123 @@
 	</view>
 	</view>
 </template>
 </template>
 <script>
 <script>
+import utils from '@/utils/common.js'
+	import TabPopup from '@/components/tab-popup.vue'
+	import { getPendingAuditList, searchCompanyUser } from '@/api/audit.js'
 	export default {
 	export default {
+		components: {
+			TabPopup
+		},
 		data() {
 		data() {
-			return {
-				popShow: false,
-				showFilter: false,
-				filters: {
-					applyTimeStart: '',
-					applyTimeEnd: '',
-					finishTimeStart: '',
-					finishTimeEnd: '',
-					auditTimeStart: '',
-					auditTimeEnd: '',
-					taskBelong: 'my',
-					finishStatus: '',
-					belongType: ''
-				},
-				// 顶部选项卡数组
-				topTabs: [{
-						label: '待办',
-						value: 'todo',
-						badge: 1
-					},
-					{
-						label: '已办',
-						value: 'done',
-						badge: 22
-					},
-					{
-						label: '我发起的',
-						value: 'myInitiate',
-						badge: 19
-					}
-				],
-				currentTopTab: 0,
-				currentSubTab: 'all',
-				// 子标签数组
-				taskSubTabs: [{
-						label: '全部审批',
-						value: 'all'
+								return {
+										processTemplate: null,
+										popShow: false,
+							showFilter: false,
+							selectedTabItem: '',
+							searchKeywords: '',
+							searchTimer: null,
+					filters: {
+						applyTimeStart: '',
+						applyTimeEnd: '',
+						finishTimeStart: '',
+						finishTimeEnd: '',
+						auditTimeStart: '',
+						auditTimeEnd: '',
+						taskBelong: 'my',
+						finishStatus: '',
+						belongType: ''
 					},
 					},
-					{
-						label: '最新发起',
-						value: 'unfinished'
-					}
-				],
-				tabsList: ['全部审批', '任务创建'],
-				tabsList2: ['最新发起', '最早发起'],
-				auditSubTabs: [{
-						label: '全部',
-						value: 'all'
+					// 顶部选项卡数组
+					topTabs: [{
+								label: '待办',
+								value: 'todo',
+								badge: 0
+							},
+							{
+								label: '已办',
+								value: 'done',
+								badge: 0
+							},
+							{
+								label: '我发起的',
+								value: 'myInitiate',
+								badge: 0
+							}
+						],
+					currentTopTab: 0,
+					currentSubTab: 'all',
+					// 子标签数组
+					taskSubTabs: [{
+							label: '全部审批',
+							value: 'all'
+						},
+						{
+							label: '最新发起',
+							value: 'unfinished'
+						}
+					],
+					tabsList: ['全部审批', '任务创建'],
+					tabsList2: ['最新发起', '最早发起'],
+					// auditSubTabs: [{
+					// 		label: '全部',
+					// 		value: 'all'
+					// 	},
+					// 	{
+					// 		label: '驳回',
+					// 		value: 'rejected'
+					// 	}
+					// ],
+					// 加载状态
+					loading: {
+						todo: false,
+						done: false,
+						myInitiate: false
 					},
 					},
-					{
-						label: '驳回',
-						value: 'rejected'
-					}
-				],
-				// 列表数据
-				todoList: [{ // 待办列表(index=0)
-					taskTitle: '任务创建',
-					statusText: '待审核',
-					statusClass: 'status-createPending',
-					speaker: '王小明',
-					level: '一级',
-					hospital: '湖南省人民医院',
-					department: '口腔科',
-					videoType: '长视频',
-					category: '学术',
-					points: 10,
-					count: 1,
-					applyTime: '2025-9-20 13:55',
-					finishTime: '-',
-					auditStatus: '-',
-					showDelete: true,
-					sealImg: '/static/image/img_unfinish.png'
-				}],
-				doneList: [{ // 已办列表(index=1)
-					taskTitle: '任务创建',
-					statusText: '创建驳回',
-					statusClass: 'status-createPending',
-					speaker: '王小明',
-					level: '一级',
-					hospital: '湖南省人民医院',
-					department: '口腔科',
-					videoType: '长视频',
-					category: '学术',
-					points: 10,
-					count: 1,
-					applyTime: '2025-9-20 13:55',
-					showDelete: true,
-					showEdit: true
-				}],
-				myInitiateList: [] // 我发起的列表(index=2)
-			}
-		},
-		computed: {
-			currentSubTabsList() {
-				if (this.currentTopTab === 0) return this.taskSubTabs;
-				if (this.currentTopTab === 1) return this.auditSubTabs;
-				if (this.currentTopTab === 2) return this.taskSubTabs;
+					// 列表数据
+					todoList: [], // 待办列表(index=0)
+					doneList: [], // 已办列表(index=1)
+					myInitiateList: [] // 我发起的列表(index=2)
+				}
+			},
+			computed: {
+				currentSubTabsList() {
+					 return this.taskSubTabs;
+
+					// if (this.currentTopTab === 0) return this.taskSubTabs;
+					// if (this.currentTopTab === 1) return this.auditSubTabs;
+					// if (this.currentTopTab === 2) return this.myInitiateList;
+				},
+				currentList() {
+					if (this.currentTopTab === 0) return this.todoList;
+					if (this.currentTopTab === 1) return this.doneList;
+					if (this.currentTopTab === 2) return this.myInitiateList;
+				}
+			},
+			onLoad() {
+				// 页面加载时的初始化操作
+				this.loadData();
+				utils.getDicts("FLOW_TEMPLATE").then(res => {
+					this.processTemplate = res;
+					console.log("流程模板", this.processTemplate)
+				});
 			},
 			},
-			currentList() {
-				if (this.currentTopTab === 0) return this.todoList;
-				if (this.currentTopTab === 1) return this.doneList;
-				if (this.currentTopTab === 2) return this.myInitiateList;
-			}
-		},
 		methods: {
 		methods: {
+			selectTabItem(item) {
+				this.selectedTabItem = item;
+				this.popShow = false;
+			},
 			goDetails(item) {
 			goDetails(item) {
-				console.log("跳转")
+				console.log("跳转参数",item)
 				uni.navigateTo({
 				uni.navigateTo({
-					url: '/pages_task/approvalTaskDetail'
+					url: `/pages_task/approvalTaskDetail?taskId=${item.id}`
 				})
 				})
 			},
 			},
 			switchTopTab(index) {
 			switchTopTab(index) {
 				this.currentTopTab = index;
 				this.currentTopTab = index;
 				this.currentSubTab = 'all';
 				this.currentSubTab = 'all';
-				// 切换顶部选项卡时关闭popup
 				this.popShow = false;
 				this.popShow = false;
+				// 切换标签时重新加载数据
+				this.loadData();
 			},
 			},
 			closeFilter() {
 			closeFilter() {
 				this.showFilter = false
 				this.showFilter = false
@@ -291,66 +283,215 @@
 				}
 				}
 			},
 			},
 			confirmFilters() {
 			confirmFilters() {
-				this.showFilter = false
-				console.log('筛选条件:', this.filters)
-			},
-			handleShare(item) {
-				uni.showToast({
-					title: '分享功能待实现',
-					icon: 'none'
-				})
-			},
-			handleTaskDelete(item, index) {
-				uni.showModal({
-					title: '提示',
-					content: '确定要删除这条任务吗?',
-					cancelText: '取消',
-					confirmText: '删除',
-					confirmColor: '#FF0000',
-					success: (res) => {
-						if (res.confirm) {
-							this.todoList.splice(index, 1);
-							uni.showToast({
-								title: '任务已删除',
-								icon: 'success',
-								duration: 1500
-							});
+										this.showFilter = false
+										console.log('筛选条件:', this.filters)
+										// 筛选后重新加载数据
+										this.loadData()
+									},
+								handleShare(item) {
+									uni.showToast({
+										title: '分享功能待实现',
+										icon: 'none'
+									})
+									},
+								handleSearchInput() {
+									// 防抖处理,避免频繁请求
+									if (this.searchTimer) {
+										clearTimeout(this.searchTimer)
+									}
+									
+									this.searchTimer = setTimeout(async () => {
+										if (this.searchKeywords.trim()) {
+											try {
+												// 调用搜索发起人接口
+												const res = await searchCompanyUser({
+													keywords: this.searchKeywords.trim(),
+													pageNum: 1,
+													pageSize: 10
+												})
+												
+												if (res.code === 200 && res.rows) {
+													// 根据当前标签页更新对应列表
+													if (this.currentTopTab === 0) {
+														this.todoList = res.rows.map(item => ({
+															auditName: item.auditName || '未知审核',
+															statusText: '待审核',
+															statusClass: 'status-createPending',
+															id: item.id,
+															status: item.status,
+															auditType: item.auditType,
+															businessId: item.businessId,
+															businessType: item.businessType,
+															createTime: item.createTime,
+															initiatorName: item.initiatorName
+														}))
+													} else if (this.currentTopTab === 1) {
+														this.doneList = res.rows.map(item => ({
+															auditName: item.auditName || '未知审核',
+															statusText: item.status === 1 ? '已通过' : '已驳回',
+															statusClass: item.status === 1 ? 'status-finish' : 'status-rejected',
+															id: item.id,
+															status: item.status,
+															auditType: item.auditType,
+															businessId: item.businessId,
+															businessType: item.businessType,
+															createTime: item.createTime,
+															initiatorName: item.initiatorName
+														}))
+													} else if (this.currentTopTab === 2) {
+														this.myInitiateList = res.rows.map(item => ({
+															auditName: item.auditName || '未知审核',
+															statusText: '待审核',
+															statusClass: 'status-createPending',
+															id: item.id,
+															status: item.status,
+															auditType: item.auditType,
+															businessId: item.businessId,
+															businessType: item.businessType,
+															createTime: item.createTime,
+															initiatorName: item.initiatorName
+														}))
+													}
+												} else {
+													// 搜索结果为空,清空对应列表
+													if (this.currentTopTab === 0) {
+														this.todoList = []
+													} else if (this.currentTopTab === 1) {
+														this.doneList = []
+													} else if (this.currentTopTab === 2) {
+														this.myInitiateList = []
+													}
+												}
+												} catch (e) {
+												console.error('搜索失败', e)
+												uni.showToast({
+													title: '搜索失败',
+													icon: 'none'
+												})
+											}
+										} else {
+											// 搜索框为空,重新加载默认数据
+											this.loadData()
+										}
+									}, 300)
+									},
+				// 加载审批数据
+				async loadData() {
+					try {
+						// 无论当前标签是什么,都调用getPendingAuditList请求
+						const userInfo = JSON.parse(uni.getStorageSync('userInfo') || '{}')
+						const params = {
+							initiatorName: userInfo.nickName || '',
+							initiatorPhone: userInfo.phone || '',
+							// initiatorId: 0,
+							status: userInfo.status|| '',
+							// tempCode: userInfo.productCode || '',
+							sort: 0,
+							userId:userInfo.userId|| '',
+							companyId: userInfo.companyId || 0
 						}
 						}
-					}
-				});
-			},
-			handleCopy(item) {
-				uni.showToast({
-					title: '复制创建功能待实现',
-					icon: 'none'
-				})
-			},
-			handleAuditDelete(item, index) {
-				uni.showModal({
-					title: '提示',
-					content: '确定要删除这条审核项吗?',
-					cancelText: '取消',
-					confirmText: '删除',
-					confirmColor: '#FF0000',
-					success: (res) => {
-						if (res.confirm) {
-							this.doneList.splice(index, 1);
+						const res = await getPendingAuditList(params)
+						if (res.code === 200) {
+								// 处理返回的数据
+							const responseData = res.rows|| [];
+							
+							// 根据status分类数据
+							const todoData = responseData.filter(item => item.status === 1);
+							const doneData = responseData.filter(item => item.status === 2);
+							const myInitiateData = responseData.filter(item => item.status === 3);
+							
+							// 更新对应列表
+							if (this.currentTopTab === 0) {
+								// 待办列表
+								this.loading.todo = true
+								this.todoList = todoData.map(item => ({
+									auditName: item.auditName || '未知审核',
+									statusText: '待审核',
+									statusClass: 'status-createPending',
+									id: item.id,
+									status: item.status,
+									auditType: item.auditType,
+									businessId: item.businessId,
+									businessType: item.businessType,
+									createTime: item.createTime,
+									initiatorName:item.initiatorName
+								}))
+								this.loading.todo = false
+							} else if (this.currentTopTab === 1) {
+								// 已办列表
+								this.loading.done = true
+								this.doneList = doneData.map(item => ({
+									auditName: item.auditName || '未知审核',
+									statusText: item.status === 1 ? '已通过' : '已驳回',
+									statusClass: item.status === 1 ? 'status-finish' : 'status-rejected',
+									id: item.id,
+									status: item.status,
+									auditType: item.auditType,
+									businessId: item.businessId,
+									businessType: item.businessType,
+									createTime: item.createTime,
+									initiatorName:item.initiatorName
+								}))
+								this.loading.done = false
+							} else if (this.currentTopTab === 2) {
+								// 我发起的列表
+								this.loading.myInitiate = true
+								this.myInitiateList = myInitiateData.map(item => ({
+									auditName: item.auditName || '未知审核',
+									statusText: '待审核',
+									statusClass: 'status-createPending',
+									id: item.id,
+									status: item.status,
+									auditType: item.auditType,
+									businessId: item.businessId,
+									businessType: item.businessType,
+									createTime: item.createTime,
+									initiatorName:item.initiatorName
+								}))
+								this.loading.myInitiate = false
+							}
+							
+							// 更新badge数量
+							this.topTabs[0].badge = todoData.length
+							this.topTabs[1].badge = doneData.length
+							this.topTabs[2].badge = myInitiateData.length
+						} else {
 							uni.showToast({
 							uni.showToast({
-								title: '审核项已删除',
-								icon: 'success',
-								duration: 1500
-							});
+								title: '获取审核列表失败',
+								icon: 'none'
+							})
 						}
 						}
-					}
-				});
-			},
-			handleEdit(item) {
-				uni.showToast({
-					title: '编辑功能待实现',
-					icon: 'none'
-				})
-			}
-		}
+					} catch (e) {
+						console.error('加载数据失败', e)
+						uni.showToast({
+							title: '加载数据失败',
+							icon: 'none'
+						})
+						// 重置加载状态
+							this.loading.todo = false
+							this.loading.done = false
+							this.loading.myInitiate = false
+						}
+					},
+					// 格式化时间
+					formatTime(timeStr) {
+									if (!timeStr) return ''
+									const date = new Date(timeStr)
+									const year = date.getFullYear()
+									const month = String(date.getMonth() + 1).padStart(2, '0')
+									const day = String(date.getDate()).padStart(2, '0')
+									const hours = String(date.getHours()).padStart(2, '0')
+									const minutes = String(date.getMinutes()).padStart(2, '0')
+									return `${year}-${month}-${day} ${hours}:${minutes}`
+								},
+								getBusinessTypeLabel(businessType) {
+										if (!businessType || !this.processTemplate) {
+											return '未设置'
+										}
+										const dictItem = this.processTemplate.find(item => item.dictValue === businessType)
+										return dictItem ? dictItem.dictLabel : businessType
+										}
+				}
 	}
 	}
 </script>
 </script>
 <style lang="scss" scoped>
 <style lang="scss" scoped>
@@ -425,17 +566,6 @@
 			}
 			}
 		}
 		}
 
 
-		// popup遮罩层
-		.popup-mask {
-			position: fixed; // 全屏遮罩
-			top: 0;
-			left: 0;
-			right: 0;
-			bottom: 0;
-			background: rgba(0, 0, 0, 0.3);
-			z-index: 99; // 低于子标签容器,高于列表
-		}
-
 		// 核心修改:子标签容器(定位参考)
 		// 核心修改:子标签容器(定位参考)
 		.sub-tabs-wrapper {
 		.sub-tabs-wrapper {
 			position: relative; // 作为popup-box的定位参考
 			position: relative; // 作为popup-box的定位参考
@@ -468,38 +598,6 @@
 					}
 					}
 				}
 				}
 			}
 			}
-
-
-
-			// 核心修改:popup-box绝对定位,相对于sub-tabs-wrapper
-			.popup-box {
-				position: absolute;
-				top: 100%; // 紧贴sub-tabs底部
-				left: 0;
-				right: 0;
-				display: flex;
-				padding: 32rpx;
-				background: #FFFFFF;
-				border-radius: 0 0 40rpx 40rpx;
-				z-index: 100; // 高于遮罩层
-				box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08); // 增加阴影提升层级感
-
-				.item {
-					padding: 14rpx 32rpx;
-					height: 72rpx;
-					box-sizing: border-box;
-					background: #F7F8FA;
-					border-radius: 70rpx;
-					font-size: 28rpx;
-					color: #333;
-					flex-wrap: wrap;
-					margin-right: 24rpx;
-
-					&:last-child {
-						margin-right: 0;
-					}
-				}
-			}
 		}
 		}
 
 
 		// 列表区域
 		// 列表区域

+ 289 - 221
pages_task/approvalTaskDetail.vue

@@ -7,116 +7,119 @@
 		</view>
 		</view>
 		<scroll-view class="content" scroll-y>
 		<scroll-view class="content" scroll-y>
 			<!-- 任务卡片 -->
 			<!-- 任务卡片 -->
-			<view class="task-card">
+			<view class="task-card" v-if="auditData">
 				<view class="card-header">
 				<view class="card-header">
-					<view class="card-title">{{ taskData.title }}</view>
-					<view class="card-lable" :class="taskData.class">{{taskData.status}}</view>
+					<view class="card-title">{{ auditData.projectVO.projectName }}</view>
+					<view class="card-lable" :class="'pending'">待审核</view>
 				</view>
 				</view>
 				<view class="card-meta">
 				<view class="card-meta">
-					<view class="meta-tag">{{ taskData.tag }}</view>
-					<view class="meta-id">ID:{{ taskData.id }}</view>
+					<view class="item">
+						<image src="/static/image/icon_user.png"></image>
+						{{ auditData.AuditTaskInfoVO.companyUserName }}</view>
+					<view class="item">
+						
+						<image src="/static/image/icon_time.png"></image>
+						{{ auditData.projectVO.startDate }}</view>
 				</view>
 				</view>
 			</view>
 			</view>
 
 
 			<!-- 任务信息 -->
 			<!-- 任务信息 -->
-			<view class="info-section">
+			<view class="info-section" v-if="auditData">
 				<view class="section-header">
 				<view class="section-header">
 					<view class="section-indicator"></view>
 					<view class="section-indicator"></view>
 					<text class="section-title">任务信息</text>
 					<text class="section-title">任务信息</text>
 				</view>
 				</view>
 				<view class="info-list">
 				<view class="info-list">
 					<view class="info-item">
 					<view class="info-item">
-						<text class="info-label">任务名称:</text>
-						<text class="info-value">{{ taskInfo.costSharing }}</text>
+						<text class="info-label">任务名称</text>
+						<text class="info-value">{{ auditData.auditTaskInfoVO.projectName }}</text>
 					</view>
 					</view>
 					<view class="info-item">
 					<view class="info-item">
-						<text class="info-label">任务类型:</text>
-						<text class="info-value">{{ taskInfo.belongProject }}</text>
+						<text class="info-label">任务类型</text>
+						<text class="info-value">{{ auditData.auditTaskInfoVO.projectName }}</text>
 					</view>
 					</view>
 					<view class="info-item">
 					<view class="info-item">
-						<text class="info-label">归属部门:</text>
-						<text class="info-value">{{ taskInfo.belongDept }}</text>
+						<text class="info-label">归属部门</text>
+						<text class="info-value">{{ auditData.auditTaskInfoVO.deptName }}</text>
 					</view>
 					</view>
 				</view>
 				</view>
 			</view>
 			</view>
-
-			<!-- 内容信息 -->
-			<view class="info-section">
+<!-- 项目信息 -->
+			<view class="info-section" v-if="auditData">
 				<view class="section-header">
 				<view class="section-header">
 					<view class="section-indicator"></view>
 					<view class="section-indicator"></view>
 					<text class="section-title">项目信息</text>
 					<text class="section-title">项目信息</text>
 				</view>
 				</view>
 				<view class="info-list">
 				<view class="info-list">
 					<view class="info-item">
 					<view class="info-item">
-						<text class="info-label">项目名称:</text>
-						<text class="info-value">{{ contentInfo.deliverableName }}</text>
-					</view>
-					<view class="info-item">
-						<text class="info-label">项目活动ID:</text>
-						<text class="info-value">{{ contentInfo.deliverableId }}</text>
+						<text class="info-label">项目名称</text>
+						<text class="info-value">{{ auditData.projectVO.projectName }}</text>
 					</view>
 					</view>
 					<view class="info-item">
 					<view class="info-item">
-						<text class="info-label">项目备注:</text>
-						<text class="info-value">{{ contentInfo.description }}</text>
+						<text class="info-label">项目活动ID</text>
+						<text class="info-value">{{ auditData.projectVO.projectTypeId }}</text>
 					</view>
 					</view>
+					<!-- <view class="info-item">
+						<text class="info-label">任务备注</text>
+						<text class="info-value">{{ auditData.projectVO.thirdPartyCode }}</text>
+					</view> -->
 				</view>
 				</view>
 			</view>
 			</view>
 
 
 			<!-- 客户信息 -->
 			<!-- 客户信息 -->
-			<view class="info-section">
+			<view class="info-section" v-if="auditData">
 				<view class="section-header">
 				<view class="section-header">
 					<view class="section-indicator"></view>
 					<view class="section-indicator"></view>
 					<text class="section-title">客户信息</text>
 					<text class="section-title">客户信息</text>
 				</view>
 				</view>
 				<view class="client-list">
 				<view class="client-list">
-					<view class="client-item" v-for="(item, index) in clientList" :key="index">
+					<view class="client-item">
 						<view class="client-info">
 						<view class="client-info">
 							<image class="avatar" src="/static/image/my_heads_icon.png"></image>
 							<image class="avatar" src="/static/image/my_heads_icon.png"></image>
 							<view class="client-txt">
 							<view class="client-txt">
 								<view class="client-name">
 								<view class="client-name">
-									{{ item.name }}
-									<text class="client-level">{{ item.level }}</text>
+									{{ auditData.docterVO.doctorName }}
+									<text class="client-level">一级</text>
 								</view>
 								</view>
 								<view class="client-hospital">
 								<view class="client-hospital">
-									<text>{{ item.hospital }} </text>
+									<text>{{ auditData.docterVO.institution }} </text>
 									<view class="line"></view>
 									<view class="line"></view>
-									<text>{{ item.department }}</text>
+									<text>{{ auditData.docterVO.department || '-' }}</text>
 								</view>
 								</view>
 							</view>
 							</view>
 						</view>
 						</view>
 						<view class="client-stats">
 						<view class="client-stats">
-							<view class="stat-item"><text class="num">{{ item.taskCount }} </text>任务</view>
-							<view class="stat-item"><text class="num">{{ item.points }} </text>积分</view>
+							<view class="stat-item"><text class="num">{{ auditData.auditTaskInfoVO.taskCount }} </text>任务</view>
+							<view class="stat-item"><text class="num">{{ auditData.auditTaskInfoVO.taskIntegral }} </text>积分</view>
 						</view>
 						</view>
 					</view>
 					</view>
 				</view>
 				</view>
 			</view>
 			</view>
 
 
 			<!-- 审批信息 -->
 			<!-- 审批信息 -->
-			<view class="info-section">
+			<view class="info-section" v-if="auditData">
 				<view class="section-header">
 				<view class="section-header">
 					<view class="section-indicator"></view>
 					<view class="section-indicator"></view>
-					<text class="section-title">审批信息</text>
+					<text class="section-title">审批流程</text>
 				</view>
 				</view>
 				<view class="approval-list">
 				<view class="approval-list">
-					<view class="approval-item" v-for="(item, index) in approvalInfo" :key="index">
+					<view class="approval-item" v-for="(item, index) in auditData.auditFlowVO" :key="index">
 						<view class="left">
 						<view class="left">
 							<view class="avatar-box">
 							<view class="avatar-box">
 								<image class="avatar" src="/static/image/my_heads_icon.png"></image>
 								<image class="avatar" src="/static/image/my_heads_icon.png"></image>
-								<image class="icon" src="/static/image/icon_wait.png"></image>
+								<image class="icon" v-if="item.status==1" src="/static/image/icon_wait.png"></image>
+								<image class="icon" v-if="item.status==0"  src="/static/image/icon_pass.png"></image>
+								<image class="icon" v-if="item.status==2"  src="/static/image/icon_refuse.png"></image>
 							</view>
 							</view>
 							<view class="approval-user">
 							<view class="approval-user">
-								<view class="user-name">{{ item.name }}</view>
-								<view class="user-status" :style="{ color: item.statusColor }">{{ item.status }}</view>
+								<view class="user-name">{{ item.auditUserName }}</view>
+								<view class="user-status" :style="{ color: item.status === 0 ? '#4CAF50' : item.status === 1 ? '#FF9800' : '#F44336' }">{{ item.statusName }}</view>
 							</view>
 							</view>
 						</view>
 						</view>
-						<text class="approval-time">{{ item.time }}</text>
-						<view class="approval-line" v-if="index < approvalInfo.length - 1"></view>
+						<text class="approval-time">{{ item.auditTime || '' }}</text>
+						<view class="approval-line" v-if="index < auditData.auditFlowVO.length - 1"></view>
 					</view>
 					</view>
 				</view>
 				</view>
-				<view class="reason">
-					费用分摊部门填写错误,应该是学术研究事业部,请修改后重新提交。
-				</view>
 			</view>
 			</view>
 		</scroll-view>
 		</scroll-view>
 
 
@@ -134,11 +137,11 @@
 		</view>
 		</view>
 
 
 		<!-- 驳回弹窗 -->
 		<!-- 驳回弹窗 -->
-		<u-popup :show="showRejectPopup" mode="bottom" border-radius="24" z-index="9999999">
+		<u-popup :show="showRejectPopup" mode="bottom" round="24" z-index="9999999">
 			<view class="reject-popup-content">
 			<view class="reject-popup-content">
 				<view class="popup-header">
 				<view class="popup-header">
 					<text class="popup-title">驳回</text>
 					<text class="popup-title">驳回</text>
-					<u-icon name="close" size="20" @click="showRejectPopup = false" />
+					<image @click="showRejectPopup = false;" class="close" src="/static/image/icon_close.png"></image>
 				</view>
 				</view>
 
 
 				<view class="input-area">
 				<view class="input-area">
@@ -146,8 +149,8 @@
 						maxlength="200" />
 						maxlength="200" />
 				</view>
 				</view>
 				<view class="btn-group">
 				<view class="btn-group">
-					<u-button text="取消" plain color="#388BFF" class="cancel-btn" @click="showRejectPopup = false" />
-					<u-button text="确认驳回" type="primary" class="confirm-btn" @click="handleConfirmReject" />
+					<view class="button reject" @click="showRejectPopup = false">取消</view>
+					<view class="button confirm" @click="handleConfirmReject ">确认驳回</view>
 				</view>
 				</view>
 			</view>
 			</view>
 		</u-popup>
 		</u-popup>
@@ -155,170 +158,211 @@
 </template>
 </template>
 
 
 <script>
 <script>
-	export default {
-		data() {
-			return {
-				// 修改5:弹窗默认隐藏
-				showRejectPopup: true,
-				// 驳回意见
-				rejectReason: '',
-
-				// 仅获取微信小程序状态栏高度,无多余逻辑
-				statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
-				taskId: '',
-				// 任务基础信息
-				taskData: {
-					title: '王小明医师学术讲座',
-					tag: '学术讲座',
-					id: 'CRW0000001022345',
-					class: 'pending',
-					status: '待审核'
-				},
-				// 任务信息
-				taskInfo: {
-					costSharing: '湖北省药学服务公司',
-					belongProject: '项目名称',
-					belongDept: '中药事业部',
-					belongProduct: '201',
-					applySupplementLive: '否',
-					supplementRoomId: '-',
-					supplementReason: '-'
-				},
-				// 内容信息
-				contentInfo: {
-					deliverableName: '直播',
-					deliverableId: '-',
-					liveRoomUrl: 'http://www.zhibotest123333...',
-					pushUrl: 'http://www.zhibotest123123...',
-					startUrl: 'http://www.zhibotest123123...',
-					liveReplay: '-',
-					playVideo: '-',
-					downloadVideo: '-',
-					viewerCount: '203',
-					validView: '198',
-					description: '这是一段说明,这是一段说明,一行展示不完就换行展示。'
-				},
-				// 客户信息列表
-				clientList: [{
-						name: '王小明',
-						level: '一级',
-						hospital: '湖南省人民医院',
-						department: '口腔科',
-						taskCount: '1',
-						points: '30'
-					},
-					{
-						name: '王小明',
-						level: '一级',
-						hospital: '湖南省人民医院',
-						department: '口腔科',
-						taskCount: '1',
-						points: '30'
-					}
-				],
-				// 补充材料
-				supplementMaterial: {
-					deliverableName: '-',
-					description: '-',
-					attachment: {
-						name: '文件名称文件名称.pdf',
-						size: '128kb'
-					}
-				},
-				// 审批信息
-				approvalInfo: [{
-						name: '王彬彬',
-						status: '发起申请',
-						statusColor: '#4CAF50',
-						time: '2025-03-04 18:00'
-					},
-					{
-						name: '王小明',
-						status: '待审核',
-						statusColor: '#FF9800',
-						time: ''
-					}
-				]
-			}
-		},
-		onLoad(options) {
-			if (options.id) {
-				this.taskId = options.id
-				this.loadData()
-			}
-		},
-		methods: {
-			// 修改6:新增打开弹窗的方法
-			openRejectPopup() {
-				this.showRejectPopup = true;
-			},
-
-			// 确认驳回
-			handleConfirmReject() {
-				if (!this.rejectReason.trim()) {
-					uni.showToast({
-						title: '请输入驳回意见',
-						icon: 'none'
-					})
-					return
-				}
-				// 这里写你的驳回接口逻辑
-				console.log('提交驳回意见:', this.rejectReason)
-				// 关闭弹窗
-				this.showRejectPopup = false
-				// 重置输入
-				this.rejectReason = ''
-			},
-
-			goBack() {
-				uni.navigateBack()
-			},
-			async loadData() {
-				try {
-					uni.showLoading({
-						title: '加载中...'
-					})
-					// 实际项目中替换为接口请求:const res = await getTaskDetail({ id: this.taskId })
-					// 这里模拟接口赋值
-					uni.hideLoading()
-				} catch (e) {
-					uni.hideLoading()
-					console.error('加载数据失败', e)
-				}
-			},
-			// 复制到剪贴板
-			copyToClipboard(text) {
-				uni.setClipboardData({
-					data: text,
-					success() {
-						uni.showToast({
-							title: '复制成功',
-							icon: 'success'
-						})
-					}
-				})
-			},
-			// 下载附件
-			downloadAttachment() {
-				uni.showToast({
-					title: '开始下载附件',
-					icon: 'none'
-				})
-				// 实际项目中添加下载逻辑:uni.downloadFile + uni.saveFile
-			},
-			// 修改7:补全handlePrev(备用,实际用openRejectPopup)
-			handlePrev() {
-				this.openRejectPopup();
-			},
-			// 补全handleNext方法(避免点击报错)
-			handleNext() {
-				uni.showToast({
-					title: '审批通过逻辑待实现',
-					icon: 'none'
-				})
-			}
-		}
-	}
+import { doAudit, getAuditFlows, getTaskFinishAuditInfo } from '@/api/audit.js'
+import image from 'uview-ui/libs/config/props/image';
+
+export default {
+  data() {
+    return {
+		userInfo:JSON.parse(uni.getStorageSync('userInfo')),
+
+      // 弹窗默认隐藏
+      showRejectPopup: false,
+      // 驳回意见
+      rejectReason: '',
+      // 状态栏高度
+      statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
+      // 任务ID
+      taskId: '',
+      // 接口返回的原始数据
+      auditData: null,
+      // 审批信息
+      approvalInfo: []
+    }
+  },
+  onLoad(options) {
+    if (options.taskId) {
+      this.taskId = options.taskId
+      this.loadData()
+    }
+  },
+  methods: {
+    // 打开驳回弹窗
+    openRejectPopup() {
+      // 直接打开驳回弹窗
+      this.showRejectPopup = true
+    },
+
+    // 确认驳回
+    async handleConfirmReject() {
+      if (!this.rejectReason.trim()) {
+        uni.showToast({
+          title: '请输入驳回意见',
+          icon: 'none'
+        })
+        return
+      }
+      
+      try {
+        uni.showLoading({
+          title: '提交中...'
+        })
+        
+        // 调用审核接口,传递action=2表示驳回
+        const res = await doAudit({
+          auditId: this.taskId,
+          userId: this.userInfo.userId,
+          userType: 0,
+          action: 2,
+          comment: this.rejectReason,
+          companyId: this.userInfo.companyId
+        })
+        
+        uni.hideLoading()
+        
+        if (res.code === 200) {
+          uni.showToast({
+           title: res.data.message,
+           icon: none
+          })
+          
+          // 关闭弹窗
+          this.showRejectPopup = false
+          // 重置输入
+          this.rejectReason = ''
+          // 重新加载数据
+          this.loadData()
+        } else {
+          uni.showToast({
+            title: res.msg || '驳回失败',
+            icon: 'none'
+          })
+        }
+      } catch (e) {
+        uni.hideLoading()
+        console.error('驳回失败', e)
+        uni.showToast({
+          title: '驳回失败,请稍后重试',
+          icon: 'none'
+        })
+      }
+    },
+
+    // 返回上一页
+    goBack() {
+      uni.navigateBack()
+    },
+
+    // 加载数据
+    async loadData() {
+      try {
+        uni.showLoading({
+          title: '加载中...'
+        })
+        
+        // 获取审批流程信息
+//         const auditFlowsRes = await getAuditFlows({
+//   auditId: this.taskId,
+//   userId: this.userInfo.userId,
+//   userType: this.userInfo.userType,
+//   action: 0,
+//   comment: "comment_3498cb3111a7",
+//   companyId: this.userInfo.companyId
+// })
+//         if (auditFlowsRes.code === 200) {
+// 			console.log('审批流程信息:', auditFlowsRes.data)
+//           this.approvalInfo = auditFlowsRes.data || []
+//         }
+        
+        // 获取任务完成审核信息
+        const taskFinishAuditRes = await getTaskFinishAuditInfo({ taskId: 69||this.taskId })
+        if (taskFinishAuditRes.code === 200) {
+          // 直接保存接口返回的原始数据
+          console.log('任务完成审核信息:', taskFinishAuditRes.data)
+          this.auditData = taskFinishAuditRes.data
+        }
+        
+        // 实际项目中替换为接口请求:const res = await getTaskDetail({ id: this.taskId })
+        // 这里模拟接口赋值
+        
+        uni.hideLoading()
+      } catch (e) {
+        uni.hideLoading()
+        console.error('加载数据失败', e)
+      }
+    },
+
+    // 复制到剪贴板
+    copyToClipboard(text) {
+      uni.setClipboardData({
+        data: text,
+        success() {
+          uni.showToast({
+            title: '复制成功',
+            icon: 'success'
+          })
+        }
+      })
+    },
+
+    // 下载附件
+    downloadAttachment() {
+      uni.showToast({
+        title: '开始下载附件',
+        icon: 'none'
+      })
+      // 实际项目中添加下载逻辑:uni.downloadFile + uni.saveFile
+    },
+
+    // 备用方法(实际用openRejectPopup)
+    handlePrev() {
+      this.openRejectPopup()
+    },
+
+    // 审批通过
+    async handleNext() {
+      try {
+        uni.showLoading({
+          title: '提交中...'
+        })
+        
+        // 调用审核接口,传递action=1表示通过
+        const res = await doAudit({
+          auditId: this.taskId,
+          userId: this.userInfo.userId,
+          userType: 0,
+          action: 1,
+          comment: "",
+          companyId: this.userInfo.companyId
+        })
+        
+        uni.hideLoading()
+        
+        if (res.code === 200) {
+          uni.showToast({
+            title: res.data.message,
+            icon: none
+          })
+          
+          // 重新加载数据
+          this.loadData()
+        } else {
+          uni.showToast({
+            title: res.msg || '审批通过失败',
+            icon: 'none'
+          })
+        }
+      } catch (e) {
+        uni.hideLoading()
+        console.error('审批通过失败', e)
+        uni.showToast({
+          title: '审批通过失败,请稍后重试',
+          icon: 'none'
+        })
+      }
+    }
+  }
+}
 </script>
 </script>
 
 
 <style lang="scss" scoped>
 <style lang="scss" scoped>
@@ -326,20 +370,28 @@
 	.reject-popup-content {
 	.reject-popup-content {
 		padding: 32rpx;
 		padding: 32rpx;
 		box-sizing: border-box;
 		box-sizing: border-box;
-		background: #fff;
 		overflow: hidden;
 		overflow: hidden;
+		border-radius: 24rpx 24rpx 0 0;
 
 
 		.popup-header {
 		.popup-header {
 			display: flex;
 			display: flex;
-			justify-content: space-between;
+			justify-content: center;
 			align-items: center;
 			align-items: center;
 			margin-bottom: 32rpx;
 			margin-bottom: 32rpx;
+			position: relative;
 
 
 			.popup-title {
 			.popup-title {
 				font-size: 32rpx;
 				font-size: 32rpx;
 				font-weight: bold;
 				font-weight: bold;
 				color: #333;
 				color: #333;
 			}
 			}
+
+			.close {
+				position: absolute;
+				right: 0;
+				width: 44rpx;
+				height: 44rpx;
+			}
 		}
 		}
 
 
 		.input-area {
 		.input-area {
@@ -361,12 +413,26 @@
 			display: flex;
 			display: flex;
 			gap: 24rpx;
 			gap: 24rpx;
 
 
-			.cancel-btn,
-			.confirm-btn {
-				flex: 1;
+			.button {
+				width: 332rpx;
 				height: 80rpx;
 				height: 80rpx;
+				flex: 1;
 				border-radius: 200rpx;
 				border-radius: 200rpx;
 				font-size: 28rpx;
 				font-size: 28rpx;
+				text-align: center;
+				line-height: 80rpx;
+			}
+
+			.reject {
+				color: #388BFF;
+				background: #FFFFFF;
+				border-radius: 200rpx 200rpx 200rpx 200rpx;
+				border: 2rpx solid #388BFF;
+			}
+
+			.confirm {
+				background: #388BFF;
+				color: #FFFFFF;
 			}
 			}
 		}
 		}
 	}
 	}
@@ -464,12 +530,14 @@
 			gap: 16rpx;
 			gap: 16rpx;
 			font-size: 24rpx;
 			font-size: 24rpx;
 			color: #666;
 			color: #666;
-
-			.meta-tag {
-				border-radius: 8rpx 8rpx 8rpx 8rpx;
-				border: 2rpx solid rgba(56, 139, 255, 0.4);
-				padding: 4rpx 8rpx;
-				color: #388BFF;
+			.item{
+				display: flex;
+				align-items: center;
+				image{
+					width: 32rpx;
+					height: 32rpx;
+					margin-right: 16rpx;
+				}
 			}
 			}
 		}
 		}
 	}
 	}

+ 497 - 460
pages_task/completeTask.vue

@@ -1,7 +1,7 @@
 <template>
 <template>
 	<view class="container">
 	<view class="container">
 
 
-		
+
 		<scroll-view class="content" scroll-y>
 		<scroll-view class="content" scroll-y>
 			<!-- 标题 -->
 			<!-- 标题 -->
 			<view class="form-section">
 			<view class="form-section">
@@ -10,34 +10,24 @@
 					<text>标题</text>
 					<text>标题</text>
 				</view>
 				</view>
 				<view class="form-input-wrapper">
 				<view class="form-input-wrapper">
-					<textarea 
-						class="form-input" 
-						v-model="formData.title" 
-						placeholder="请输入标题"
-						maxlength="50"
-						@input="onTitleInput"
-					></textarea>
+					<textarea class="form-input" v-model="formData.title" placeholder="请输入标题" maxlength="50"
+						@input="onTitleInput"></textarea>
 					<view class="char-count">{{ titleLength }}/50</view>
 					<view class="char-count">{{ titleLength }}/50</view>
 				</view>
 				</view>
 			</view>
 			</view>
-			
+
 			<!-- 摘要 -->
 			<!-- 摘要 -->
 			<view class="form-section">
 			<view class="form-section">
 				<view class="form-label">
 				<view class="form-label">
 					<text>摘要 (选填)</text>
 					<text>摘要 (选填)</text>
 				</view>
 				</view>
 				<view class="form-input-wrapper">
 				<view class="form-input-wrapper">
-					<textarea 
-						class="form-input" 
-						v-model="formData.summary" 
-						placeholder="请输入摘要"
-						maxlength="100"
-						@input="onSummaryInput"
-					></textarea>
+					<textarea class="form-input" v-model="formData.summary" placeholder="请输入摘要" maxlength="100"
+						@input="onSummaryInput"></textarea>
 					<view class="char-count">{{ summaryLength }}/100</view>
 					<view class="char-count">{{ summaryLength }}/100</view>
 				</view>
 				</view>
 			</view>
 			</view>
-			
+
 			<!-- 项目分组 -->
 			<!-- 项目分组 -->
 			<view class="form-section">
 			<view class="form-section">
 				<view class="form-label">
 				<view class="form-label">
@@ -51,7 +41,7 @@
 					<text class="arrow-right">></text>
 					<text class="arrow-right">></text>
 				</view>
 				</view>
 			</view>
 			</view>
-			
+
 			<!-- 项目标签 -->
 			<!-- 项目标签 -->
 			<view class="form-section">
 			<view class="form-section">
 				<view class="form-label">
 				<view class="form-label">
@@ -65,7 +55,7 @@
 					<text class="arrow-right">></text>
 					<text class="arrow-right">></text>
 				</view>
 				</view>
 			</view>
 			</view>
-			
+
 			<!-- 上传封面 -->
 			<!-- 上传封面 -->
 			<view class="form-section">
 			<view class="form-section">
 				<view class="form-label">
 				<view class="form-label">
@@ -80,7 +70,7 @@
 					</view>
 					</view>
 				</view>
 				</view>
 			</view>
 			</view>
-			
+
 			<!-- 上传附件 -->
 			<!-- 上传附件 -->
 			<view class="form-section">
 			<view class="form-section">
 				<view class="form-label">
 				<view class="form-label">
@@ -104,10 +94,10 @@
 				</view>
 				</view>
 			</view>
 			</view>
 		</scroll-view>
 		</scroll-view>
-		
+
 		<!-- 提交按钮 -->
 		<!-- 提交按钮 -->
 		<view class="submit-btn" @click="handleSubmit">提交</view>
 		<view class="submit-btn" @click="handleSubmit">提交</view>
-		
+
 		<!-- 分组选择弹窗 -->
 		<!-- 分组选择弹窗 -->
 		<view class="picker-popup" v-if="showGroupPicker" @click="showGroupPicker = false">
 		<view class="picker-popup" v-if="showGroupPicker" @click="showGroupPicker = false">
 			<view class="picker-content" @click.stop>
 			<view class="picker-content" @click.stop>
@@ -117,17 +107,15 @@
 					<view class="picker-confirm" @click="confirmGroup">确定</view>
 					<view class="picker-confirm" @click="confirmGroup">确定</view>
 				</view>
 				</view>
 				<view class="picker-body">
 				<view class="picker-body">
-					<view class="picker-item" 
-						:class="{ active: tempGroupId === item.id }"
-						v-for="(item, index) in groupOptions" 
-						:key="index"
+					<view class="picker-item" :class="{ active: tempGroupId === item.id }"
+						v-for="(item, index) in groupOptions" :key="index"
 						@click="tempGroupId = item.id; tempGroupName = item.name">
 						@click="tempGroupId = item.id; tempGroupName = item.name">
 						{{ item.name }}
 						{{ item.name }}
 					</view>
 					</view>
 				</view>
 				</view>
 			</view>
 			</view>
 		</view>
 		</view>
-		
+
 		<!-- 标签选择弹窗 -->
 		<!-- 标签选择弹窗 -->
 		<view class="picker-popup" v-if="showTagPicker" @click="showTagPicker = false">
 		<view class="picker-popup" v-if="showTagPicker" @click="showTagPicker = false">
 			<view class="picker-content" @click.stop>
 			<view class="picker-content" @click.stop>
@@ -137,10 +125,8 @@
 					<view class="picker-confirm" @click="confirmTag">确定</view>
 					<view class="picker-confirm" @click="confirmTag">确定</view>
 				</view>
 				</view>
 				<view class="picker-body">
 				<view class="picker-body">
-					<view class="picker-item" 
-						:class="{ active: tempTagId === item.id }"
-						v-for="(item, index) in tagOptions" 
-						:key="index"
+					<view class="picker-item" :class="{ active: tempTagId === item.id }"
+						v-for="(item, index) in tagOptions" :key="index"
 						@click="tempTagId = item.id; tempTagName = item.name">
 						@click="tempTagId = item.id; tempTagName = item.name">
 						{{ item.name }}
 						{{ item.name }}
 					</view>
 					</view>
@@ -151,493 +137,544 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import { submitTask, getGroupOptions, getTagOptions, uploadFile } from '@/api-js/airClassroom'
-export default {
-	data() {
-		return {
-			statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px',
-			taskId: '',
-			isEdit: false,
-			showGroupPicker: false,
-			showTagPicker: false,
-			tempGroupId: '',
-			tempGroupName: '',
-			tempTagId: '',
-			tempTagName: '',
-			formData: {
-				title: '',
-				summary: '',
-				groupId: '',
-				groupName: '',
-				tagId: '',
-				tagName: '',
-				coverImage: '',
-				attachments: []
-			},
-			groupOptions: [
-				{ id: '1', name: '学术' },
-				{ id: '2', name: '临床' },
-				{ id: '3', name: '科研' }
-			],
-			tagOptions: [
-				{ id: '1', name: '长视频' },
-				{ id: '2', name: '短视频' },
-				{ id: '3', name: '文章' }
-			]
-		}
-	},
-	computed: {
-		titleLength() {
-			return this.formData.title.length
-		},
-		summaryLength() {
-			return this.formData.summary.length
-		}
-	},
-	onLoad(options) {
-		if (options.id) {
-			this.taskId = options.id
-		}
-		if (options.edit === 'true') {
-			this.isEdit = true
-			this.loadTaskData()
-		}
-		this.loadOptions()
-	},
-	methods: {
-		goBack() {
-			uni.navigateBack()
-		},
-		onTitleInput(e) {
-			this.formData.title = e.detail.value
-		},
-		onSummaryInput(e) {
-			this.formData.summary = e.detail.value
+	// import { submitTask, getGroupOptions, getTagOptions, uploadFile } from '@/api-js/airClassroom'
+	export default {
+		data() {
+			return {
+				statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px',
+				taskId: '',
+				isEdit: false,
+				showGroupPicker: false,
+				showTagPicker: false,
+				tempGroupId: '',
+				tempGroupName: '',
+				tempTagId: '',
+				tempTagName: '',
+				formData: {
+					title: '',
+					summary: '',
+					groupId: '',
+					groupName: '',
+					tagId: '',
+					tagName: '',
+					coverImage: '',
+					attachments: []
+				},
+				groupOptions: [{
+						id: '1',
+						name: '学术'
+					},
+					{
+						id: '2',
+						name: '临床'
+					},
+					{
+						id: '3',
+						name: '科研'
+					}
+				],
+				tagOptions: [{
+						id: '1',
+						name: '长视频'
+					},
+					{
+						id: '2',
+						name: '短视频'
+					},
+					{
+						id: '3',
+						name: '文章'
+					}
+				]
+			}
 		},
 		},
-		confirmGroup() {
-			this.formData.groupId = this.tempGroupId
-			this.formData.groupName = this.tempGroupName
-			this.showGroupPicker = false
+		computed: {
+			titleLength() {
+				return this.formData.title.length
+			},
+			summaryLength() {
+				return this.formData.summary.length
+			}
 		},
 		},
-		confirmTag() {
-			this.formData.tagId = this.tempTagId
-			this.formData.tagName = this.tempTagName
-			this.showTagPicker = false
+		onLoad(options) {
+			if (options.id) {
+				this.taskId = options.id
+			}
+			if (options.edit === 'true') {
+				this.isEdit = true
+				this.loadTaskData()
+			}
+			this.loadOptions()
 		},
 		},
-		chooseCoverImage() {
-			uni.chooseImage({
-				count: 1,
-				sizeType: ['compressed'],
-				sourceType: ['album', 'camera'],
-				success: async (res) => {
-					try {
-						uni.showLoading({ title: '上传中...' })
-						const uploadRes = await uploadFile({
-							file: res.tempFilePaths[0],
-							type: 'cover'
-						})
-						uni.hideLoading()
-						if (uploadRes.code === 200 && uploadRes.data) {
-							this.formData.coverImage = uploadRes.data.url
+		methods: {
+			goBack() {
+				uni.navigateBack()
+			},
+			onTitleInput(e) {
+				this.formData.title = e.detail.value
+			},
+			onSummaryInput(e) {
+				this.formData.summary = e.detail.value
+			},
+			confirmGroup() {
+				this.formData.groupId = this.tempGroupId
+				this.formData.groupName = this.tempGroupName
+				this.showGroupPicker = false
+			},
+			confirmTag() {
+				this.formData.tagId = this.tempTagId
+				this.formData.tagName = this.tempTagName
+				this.showTagPicker = false
+			},
+			chooseCoverImage() {
+				uni.chooseImage({
+					count: 1,
+					sizeType: ['compressed'],
+					sourceType: ['album', 'camera'],
+					success: async (res) => {
+						try {
+							uni.showLoading({
+								title: '上传中...'
+							})
+							const uploadRes = await uploadFile({
+								file: res.tempFilePaths[0],
+								type: 'cover'
+							})
+							uni.hideLoading()
+							if (uploadRes.code === 200 && uploadRes.data) {
+								this.formData.coverImage = uploadRes.data.url
+							}
+						} catch (e) {
+							uni.hideLoading()
+							uni.showToast({
+								icon: 'none',
+								title: '上传失败'
+							})
 						}
 						}
-					} catch (e) {
-						uni.hideLoading()
-						uni.showToast({ icon: 'none', title: '上传失败' })
-					}
-				}
-			})
-		},
-		chooseAttachment() {
-			uni.chooseFile({
-				count: 1,
-				type: 'file',
-				success: async (res) => {
-					const file = res.tempFiles[0]
-					if (file.size > 500 * 1024 * 1024) {
-						uni.showToast({ icon: 'none', title: '文件大小不能超过500M' })
-						return
 					}
 					}
-					try {
-						uni.showLoading({ title: '上传中...' })
-						const uploadRes = await uploadFile({
-							file: file.path,
-							type: 'attachment'
-						})
-						uni.hideLoading()
-						if (uploadRes.code === 200 && uploadRes.data) {
-							this.formData.attachments.push({
-								name: file.name,
-								size: this.formatFileSize(file.size),
-								url: uploadRes.data.url
+				})
+			},
+			chooseAttachment() {
+				uni.chooseFile({
+					count: 1,
+					type: 'file',
+					success: async (res) => {
+						const file = res.tempFiles[0]
+						if (file.size > 500 * 1024 * 1024) {
+							uni.showToast({
+								icon: 'none',
+								title: '文件大小不能超过500M'
+							})
+							return
+						}
+						try {
+							uni.showLoading({
+								title: '上传中...'
+							})
+							const uploadRes = await uploadFile({
+								file: file.path,
+								type: 'attachment'
+							})
+							uni.hideLoading()
+							if (uploadRes.code === 200 && uploadRes.data) {
+								this.formData.attachments.push({
+									name: file.name,
+									size: this.formatFileSize(file.size),
+									url: uploadRes.data.url
+								})
+							}
+						} catch (e) {
+							uni.hideLoading()
+							uni.showToast({
+								icon: 'none',
+								title: '上传失败'
 							})
 							})
 						}
 						}
-					} catch (e) {
-						uni.hideLoading()
-						uni.showToast({ icon: 'none', title: '上传失败' })
 					}
 					}
+				})
+			},
+			removeAttachment(index) {
+				this.formData.attachments.splice(index, 1)
+			},
+			formatFileSize(bytes) {
+				if (bytes < 1024) return bytes + 'B'
+				if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(2) + 'KB'
+				return (bytes / (1024 * 1024)).toFixed(2) + 'MB'
+			},
+			async loadOptions() {
+				try {
+					const [groupRes, tagRes] = await Promise.all([
+						getGroupOptions(),
+						getTagOptions()
+					])
+					if (groupRes.code === 200 && groupRes.data) {
+						this.groupOptions = groupRes.data
+					}
+					if (tagRes.code === 200 && tagRes.data) {
+						this.tagOptions = tagRes.data
+					}
+				} catch (e) {
+					console.error('加载选项失败', e)
 				}
 				}
-			})
-		},
-		removeAttachment(index) {
-			this.formData.attachments.splice(index, 1)
-		},
-		formatFileSize(bytes) {
-			if (bytes < 1024) return bytes + 'B'
-			if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(2) + 'KB'
-			return (bytes / (1024 * 1024)).toFixed(2) + 'MB'
-		},
-		async loadOptions() {
-			try {
-				const [groupRes, tagRes] = await Promise.all([
-					getGroupOptions(),
-					getTagOptions()
-				])
-				if (groupRes.code === 200 && groupRes.data) {
-					this.groupOptions = groupRes.data
+			},
+			async loadTaskData() {
+				// 加载已有任务数据
+			},
+			async handleSubmit() {
+				if (!this.formData.title) {
+					uni.showToast({
+						icon: 'none',
+						title: '请输入标题'
+					})
+					return
+				}
+				if (!this.formData.groupId) {
+					uni.showToast({
+						icon: 'none',
+						title: '请选择项目分组'
+					})
+					return
 				}
 				}
-				if (tagRes.code === 200 && tagRes.data) {
-					this.tagOptions = tagRes.data
+				if (!this.formData.tagId) {
+					uni.showToast({
+						icon: 'none',
+						title: '请选择项目标签'
+					})
+					return
 				}
 				}
-			} catch (e) {
-				console.error('加载选项失败', e)
-			}
-		},
-		async loadTaskData() {
-			// 加载已有任务数据
-		},
-		async handleSubmit() {
-			if (!this.formData.title) {
-				uni.showToast({ icon: 'none', title: '请输入标题' })
-				return
-			}
-			if (!this.formData.groupId) {
-				uni.showToast({ icon: 'none', title: '请选择项目分组' })
-				return
-			}
-			if (!this.formData.tagId) {
-				uni.showToast({ icon: 'none', title: '请选择项目标签' })
-				return
-			}
-			if (!this.formData.coverImage) {
-				uni.showToast({ icon: 'none', title: '请上传封面' })
-				return
-			}
-			if (this.formData.attachments.length === 0) {
-				uni.showToast({ icon: 'none', title: '请上传附件' })
-				return
-			}
-			
-			try {
-				uni.showLoading({ title: '提交中...' })
-				const res = await submitTask({
-					taskId: this.taskId,
-					...this.formData
-				})
-				uni.hideLoading()
-				if (res.code === 200) {
-					uni.navigateTo({
-						url: '/pages_task/taskCompleteSuccess'
+				if (!this.formData.coverImage) {
+					uni.showToast({
+						icon: 'none',
+						title: '请上传封面'
+					})
+					return
+				}
+				if (this.formData.attachments.length === 0) {
+					uni.showToast({
+						icon: 'none',
+						title: '请上传附件'
+					})
+					return
+				}
+
+				try {
+					uni.showLoading({
+						title: '提交中...'
+					})
+					const res = await submitTask({
+						taskId: this.taskId,
+						...this.formData
+					})
+					uni.hideLoading()
+					if (res.code === 200) {
+						uni.navigateTo({
+							url: '/pages_task/taskCompleteSuccess'
+						})
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.msg || '提交失败'
+						})
+					}
+				} catch (e) {
+					uni.hideLoading()
+					uni.showToast({
+						icon: 'none',
+						title: '提交失败'
 					})
 					})
-				} else {
-					uni.showToast({ icon: 'none', title: res.msg || '提交失败' })
 				}
 				}
-			} catch (e) {
-				uni.hideLoading()
-				uni.showToast({ icon: 'none', title: '提交失败' })
 			}
 			}
 		}
 		}
 	}
 	}
-}
 </script>
 </script>
 
 
 <style lang="scss" scoped>
 <style lang="scss" scoped>
-.container {
-	min-height: 100vh;
-	background: #f5f5f5;
-	display: flex;
-	flex-direction: column;
-}
-
-.status-bar {
-	width: 100%;
-	background: #fff;
-}
-
-.header {
-	position: relative;
-	height: 88rpx;
-	display: flex;
-	align-items: center;
-	justify-content: center;
-	background: #fff;
-	border-bottom: 1rpx solid #f0f0f0;
-	
-	.back-btn {
-		position: absolute;
-		left: 24rpx;
-		width: 40rpx;
-		height: 40rpx;
-		
-		image {
-			width: 100%;
-			height: 100%;
-		}
+	.container {
+		min-height: 100vh;
+		background: #f5f5f5;
+		display: flex;
+		flex-direction: column;
 	}
 	}
-	
-	.title {
-		font-size: 36rpx;
-		font-weight: bold;
-		color: #333;
+
+	.status-bar {
+		width: 100%;
+		background: #fff;
 	}
 	}
-	
-	.header-right {
-		position: absolute;
-		right: 24rpx;
+
+	.header {
+		position: relative;
+		height: 88rpx;
 		display: flex;
 		display: flex;
 		align-items: center;
 		align-items: center;
-		gap: 16rpx;
-		
-		.more-icon {
-			font-size: 32rpx;
+		justify-content: center;
+		background: #fff;
+		border-bottom: 1rpx solid #f0f0f0;
+
+		.back-btn {
+			position: absolute;
+			left: 24rpx;
+			width: 40rpx;
+			height: 40rpx;
+
+			image {
+				width: 100%;
+				height: 100%;
+			}
+		}
+
+		.title {
+			font-size: 36rpx;
+			font-weight: bold;
 			color: #333;
 			color: #333;
 		}
 		}
-	}
-}
-
-.content {
-	flex: 1;
-	padding: 24rpx;
-	padding-bottom: 120rpx;
-}
-
-.form-section {
-	background: #fff;
-	border-radius: 16rpx;
-	padding: 24rpx;
-	margin-bottom: 24rpx;
-	
-	.form-label {
-		display: flex;
-		align-items: center;
-		margin-bottom: 16rpx;
-		font-size: 28rpx;
-		color: #333;
-		
-		.required {
-			color: #FF5030;
-			margin-right: 4rpx;
+
+		.header-right {
+			position: absolute;
+			right: 24rpx;
+			display: flex;
+			align-items: center;
+			gap: 16rpx;
+
+			.more-icon {
+				font-size: 32rpx;
+				color: #333;
+			}
 		}
 		}
 	}
 	}
-	
-	.form-tips {
-		font-size: 24rpx;
-		color: #999;
-		margin-bottom: 16rpx;
+
+	.content {
+		flex: 1;
+		padding: 24rpx;
+		padding-bottom: 120rpx;
 	}
 	}
-	
-	.form-input-wrapper {
-		position: relative;
-		
-		.form-input {
-			width: 100%;
-			min-height: 120rpx;
-			padding: 16rpx;
-			background: #f5f5f5;
-			border-radius: 8rpx;
+
+	.form-section {
+		background: #fff;
+		border-radius: 16rpx;
+		padding: 24rpx;
+		margin-bottom: 24rpx;
+
+		.form-label {
+			display: flex;
+			align-items: center;
+			margin-bottom: 16rpx;
 			font-size: 28rpx;
 			font-size: 28rpx;
 			color: #333;
 			color: #333;
+
+			.required {
+				color: #FF5030;
+				margin-right: 4rpx;
+			}
 		}
 		}
-		
-		.char-count {
-			position: absolute;
-			right: 16rpx;
-			bottom: 16rpx;
-			font-size: 24rpx;
-			color: #999;
-		}
-	}
-	
-	.form-select {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		height: 80rpx;
-		padding: 0 24rpx;
-		background: #f5f5f5;
-		border-radius: 8rpx;
-		font-size: 28rpx;
-		color: #333;
-		
-		.placeholder {
-			color: #999;
-		}
-		
-		.arrow-right {
+
+		.form-tips {
 			font-size: 24rpx;
 			font-size: 24rpx;
 			color: #999;
 			color: #999;
+			margin-bottom: 16rpx;
 		}
 		}
-	}
-	
-	.upload-cover {
-		width: 200rpx;
-		height: 200rpx;
-		background: #f5f5f5;
-		border-radius: 8rpx;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		
-		image {
-			width: 100%;
-			height: 100%;
-			border-radius: 8rpx;
-		}
-		
-		.upload-placeholder {
-			.camera-icon {
-				font-size: 60rpx;
+
+		.form-input-wrapper {
+			position: relative;
+
+			.form-input {
+				width: 100%;
+				min-height: 120rpx;
+				padding: 16rpx;
+				background: #f5f5f5;
+				border-radius: 8rpx;
+				font-size: 28rpx;
+				color: #333;
+			}
+
+			.char-count {
+				position: absolute;
+				right: 16rpx;
+				bottom: 16rpx;
+				font-size: 24rpx;
+				color: #999;
 			}
 			}
 		}
 		}
-	}
-	
-	.attachment-list {
-		.attachment-item {
+
+		.form-select {
 			display: flex;
 			display: flex;
 			align-items: center;
 			align-items: center;
-			padding: 16rpx;
+			justify-content: space-between;
+			height: 80rpx;
+			padding: 0 24rpx;
 			background: #f5f5f5;
 			background: #f5f5f5;
 			border-radius: 8rpx;
 			border-radius: 8rpx;
-			margin-bottom: 16rpx;
-			
-			.attachment-icon {
-				font-size: 32rpx;
-				margin-right: 16rpx;
+			font-size: 28rpx;
+			color: #333;
+
+			.placeholder {
+				color: #999;
+			}
+
+			.arrow-right {
+				font-size: 24rpx;
+				color: #999;
+			}
+		}
+
+		.upload-cover {
+			width: 200rpx;
+			height: 200rpx;
+			background: #f5f5f5;
+			border-radius: 8rpx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+
+			image {
+				width: 100%;
+				height: 100%;
+				border-radius: 8rpx;
+			}
+
+			.upload-placeholder {
+				.camera-icon {
+					font-size: 60rpx;
+				}
 			}
 			}
-			
-			.attachment-info {
-				flex: 1;
+		}
+
+		.attachment-list {
+			.attachment-item {
 				display: flex;
 				display: flex;
-				flex-direction: column;
-				
-				.attachment-name {
-					font-size: 28rpx;
-					color: #333;
-					margin-bottom: 4rpx;
+				align-items: center;
+				padding: 16rpx;
+				background: #f5f5f5;
+				border-radius: 8rpx;
+				margin-bottom: 16rpx;
+
+				.attachment-icon {
+					font-size: 32rpx;
+					margin-right: 16rpx;
 				}
 				}
-				
-				.attachment-size {
-					font-size: 24rpx;
+
+				.attachment-info {
+					flex: 1;
+					display: flex;
+					flex-direction: column;
+
+					.attachment-name {
+						font-size: 28rpx;
+						color: #333;
+						margin-bottom: 4rpx;
+					}
+
+					.attachment-size {
+						font-size: 24rpx;
+						color: #999;
+					}
+				}
+
+				.attachment-delete {
+					font-size: 40rpx;
 					color: #999;
 					color: #999;
+					width: 40rpx;
+					height: 40rpx;
+					display: flex;
+					align-items: center;
+					justify-content: center;
 				}
 				}
 			}
 			}
-			
-			.attachment-delete {
-				font-size: 40rpx;
-				color: #999;
-				width: 40rpx;
-				height: 40rpx;
+
+			.add-attachment {
 				display: flex;
 				display: flex;
 				align-items: center;
 				align-items: center;
 				justify-content: center;
 				justify-content: center;
-			}
-		}
-		
-		.add-attachment {
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			padding: 24rpx;
-			background: #E3F2FD;
-			border-radius: 8rpx;
-			font-size: 28rpx;
-			color: #388BFF;
-			
-			.add-icon {
-				font-size: 32rpx;
-				margin-right: 8rpx;
+				padding: 24rpx;
+				background: #E3F2FD;
+				border-radius: 8rpx;
+				font-size: 28rpx;
+				color: #388BFF;
+
+				.add-icon {
+					font-size: 32rpx;
+					margin-right: 8rpx;
+				}
 			}
 			}
 		}
 		}
 	}
 	}
-}
-
-.submit-btn {
-	position: fixed;
-	bottom: 0;
-	left: 0;
-	right: 0;
-	height: 88rpx;
-	background: #388BFF;
-	display: flex;
-	align-items: center;
-	justify-content: center;
-	font-size: 32rpx;
-	color: #fff;
-	font-weight: 500;
-	z-index: 100;
-}
-
-.picker-popup {
-	position: fixed;
-	top: 0;
-	left: 0;
-	right: 0;
-	bottom: 0;
-	background: rgba(0, 0, 0, 0.5);
-	z-index: 999;
-	display: flex;
-	align-items: flex-end;
-}
-
-.picker-content {
-	width: 100%;
-	background: #fff;
-	border-radius: 24rpx 24rpx 0 0;
-	
-	.picker-header {
+
+	.submit-btn {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		height: 88rpx;
+		background: #388BFF;
 		display: flex;
 		display: flex;
 		align-items: center;
 		align-items: center;
-		justify-content: space-between;
-		padding: 24rpx;
-		border-bottom: 1rpx solid #f0f0f0;
-		
-		.picker-cancel {
-			font-size: 30rpx;
-			color: #666;
-		}
-		
-		.picker-title {
-			font-size: 32rpx;
-			font-weight: bold;
-			color: #333;
-		}
-		
-		.picker-confirm {
-			font-size: 30rpx;
-			color: #388BFF;
-		}
+		justify-content: center;
+		font-size: 32rpx;
+		color: #fff;
+		font-weight: 500;
+		z-index: 100;
 	}
 	}
-	
-	.picker-body {
-		padding: 24rpx;
-		max-height: 600rpx;
-		overflow-y: auto;
-		
-		.picker-item {
-			padding: 24rpx 0;
-			font-size: 30rpx;
-			color: #333;
+
+	.picker-popup {
+		position: fixed;
+		top: 0;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		background: rgba(0, 0, 0, 0.5);
+		z-index: 999;
+		display: flex;
+		align-items: flex-end;
+	}
+
+	.picker-content {
+		width: 100%;
+		background: #fff;
+		border-radius: 24rpx 24rpx 0 0;
+
+		.picker-header {
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			padding: 24rpx;
 			border-bottom: 1rpx solid #f0f0f0;
 			border-bottom: 1rpx solid #f0f0f0;
-			
-			&:last-child {
-				border-bottom: none;
+
+			.picker-cancel {
+				font-size: 30rpx;
+				color: #666;
 			}
 			}
-			
-			&.active {
-				color: #388BFF;
+
+			.picker-title {
+				font-size: 32rpx;
 				font-weight: bold;
 				font-weight: bold;
+				color: #333;
+			}
+
+			.picker-confirm {
+				font-size: 30rpx;
+				color: #388BFF;
 			}
 			}
 		}
 		}
-	}
-}
-</style>
 
 
+		.picker-body {
+			padding: 24rpx;
+			max-height: 600rpx;
+			overflow-y: auto;
+
+			.picker-item {
+				padding: 24rpx 0;
+				font-size: 30rpx;
+				color: #333;
+				border-bottom: 1rpx solid #f0f0f0;
+
+				&:last-child {
+					border-bottom: none;
+				}
+
+				&.active {
+					color: #388BFF;
+					font-weight: bold;
+				}
+			}
+		}
+	}
+</style>

+ 246 - 41
pages_task/createTask.vue

@@ -15,10 +15,15 @@
 						<text class="required">*</text>
 						<text class="required">*</text>
 						<text>任务归属</text>
 						<text>任务归属</text>
 					</view>
 					</view>
-					<view class="form-input picker-input" :class="{ placeholder: !formData.institution }"
+					<!-- <view class="form-input picker-input" :class="{ placeholder: !formData.institution }"
 						@click="showTaskPopup=true">
 						@click="showTaskPopup=true">
 						{{ formData.institution || '请选择任务归属' }}
 						{{ formData.institution || '请选择任务归属' }}
 						<image class="icon" src="/static/image/icon_more.png"></image>
 						<image class="icon" src="/static/image/icon_more.png"></image>
+					</view> -->
+					<view class="form-input picker-input" :class="{ placeholder: !formData.institution }"
+						@click="showPicker('任务归属',companyData)">
+						{{ formData.institution || '请选择任务归属' }}
+						<image class="icon" src="/static/image/icon_more.png"></image>
 					</view>
 					</view>
 				</view>
 				</view>
 
 
@@ -28,19 +33,39 @@
 						<text>归属项目</text>
 						<text>归属项目</text>
 					</view>
 					</view>
 					<view class="form-input picker-input" :class="{ placeholder: !formData.belongingProject }"
 					<view class="form-input picker-input" :class="{ placeholder: !formData.belongingProject }"
+						@click="showPicker('归属项目',companyList)">
+						{{ formData.belongingProject || '请选择归属项目' }}
+						<image class="icon" src="/static/image/icon_more.png"></image>
+					</view>
+					<!-- <view class="form-input picker-input" :class="{ placeholder: !formData.belongingProject }"
 						@click="showBelongingPopup = true">
 						@click="showBelongingPopup = true">
 						{{ formData.belongingProject || '请选择归属项目' }}
 						{{ formData.belongingProject || '请选择归属项目' }}
 						<image class="icon" src="/static/image/icon_more.png"></image>
 						<image class="icon" src="/static/image/icon_more.png"></image>
+					</view> -->
+				</view>
+<view class="form-item">
+					<view class="form-label">
+						<text class="required">*</text>
+						<text>产品代码</text>
+					</view>
+					<!-- <view class="form-input picker-input" :class="{ placeholder: !formData.institution }"
+						@click="showTaskPopup=true">
+						{{ formData.institution || '请选择任务归属' }}
+						<image class="icon" src="/static/image/icon_more.png"></image>
+					</view> -->
+					<view class="form-input picker-input" :class="{ placeholder: !formData.productCode }"
+						@click="showPicker('产品代码',productList)">
+						{{ formData.productCode || '请选择产品代码' }}
+						<image class="icon" src="/static/image/icon_more.png"></image>
 					</view>
 					</view>
 				</view>
 				</view>
-
 				<view class="form-item">
 				<view class="form-item">
 					<view class="form-label">
 					<view class="form-label">
 						<text class="required">*</text>
 						<text class="required">*</text>
 						<text>费用分摊</text>
 						<text>费用分摊</text>
 					</view>
 					</view>
 					<view class="form-input picker-input" :class="{ placeholder: !formData.costAllocation }"
 					<view class="form-input picker-input" :class="{ placeholder: !formData.costAllocation }"
-						@click="showPicker('费用分摊',costColumns)">
+						@click="showPicker('费用分摊',companyData)">
 						{{ formData.costAllocation || '请选择费用分摊主体' }}
 						{{ formData.costAllocation || '请选择费用分摊主体' }}
 						<image class="icon" src="/static/image/icon_more.png"></image>
 						<image class="icon" src="/static/image/icon_more.png"></image>
 					</view>
 					</view>
@@ -161,6 +186,13 @@
 </template>
 </template>
 
 
 <script>
 <script>
+	import { 
+		company,
+		getAllData,//获取项目所有数据
+		queryAllProduct,//获取公司所有产品
+		queryAllData//获取任务类型
+	} from '@/api/task.js';
+
 	import Step from '@/pages_task/components/step.vue'
 	import Step from '@/pages_task/components/step.vue'
 	import EvanSwitch from '@/components/evan-switch.vue'
 	import EvanSwitch from '@/components/evan-switch.vue'
 	export default {
 	export default {
@@ -170,6 +202,11 @@
 		},
 		},
 		data() {
 		data() {
 			return {
 			return {
+				taskType:[],//任务类型
+				companyList:[],//归属项目
+				productList:[],//产品列表
+				companyData:[],
+				userInfo:{},
 				showTaskPopup: false,
 				showTaskPopup: false,
 				primaryOptions: [{
 				primaryOptions: [{
 						id: 1,
 						id: 1,
@@ -181,41 +218,7 @@
 						name: '事业1组',
 						name: '事业1组',
 						children: ['事业1组-项目部', '事业1组-市场部', '事业1组-技术部']
 						children: ['事业1组-项目部', '事业1组-市场部', '事业1组-技术部']
 					},
 					},
-					{
-						id: 3,
-						name: '学术研究部',
-						children: ['学术研究一部', '学术研究二部', '学术研究三部']
-					},
-					{
-						id: 4,
-						name: '湖南省药学服务公司',
-						children: ['药学服务一部', '药学服务二部', '药学服务三部']
-					},
-					{
-						id: 5,
-						name: '医药事业部',
-						children: ['医药一部', '医药二部', '医药三部']
-					},
-					{
-						id: 6,
-						name: '医疗事业部',
-						children: ['医疗一部', '医疗二部', '医疗三部']
-					},
-					{
-						id: 7,
-						name: '健康管理部',
-						children: ['健康管理一部', '健康管理二部']
-					},
-					{
-						id: 8,
-						name: '医疗事业部',
-						children: ['医疗一部', '医疗二部', '医疗三部']
-					},
-					{
-						id: 9,
-						name: '健康管理部',
-						children: ['健康管理一部', '健康管理二部']
-					}
+					
 				],
 				],
 				activePrimaryIndex: 0,
 				activePrimaryIndex: 0,
 				currentSecondaryOptions: [],
 				currentSecondaryOptions: [],
@@ -271,20 +274,34 @@
 					planStartTime: '',
 					planStartTime: '',
 					planEndTime: '',
 					planEndTime: '',
 					institution: '',
 					institution: '',
+					deptId: '',
 					belongingProject: '',
 					belongingProject: '',
+					productId: '',
+					productCode: '',
+					productCodeValue: '',
 					taskType: '',
 					taskType: '',
 					addRemark: false
 					addRemark: false
 				},
 				},
+				originalCompanyData: null,
 				pickerTitle: '默认标题',
 				pickerTitle: '默认标题',
-				pickerData: []
+				pickerData: [],
+				companyId:''
 			}
 			}
 		},
 		},
 		onLoad(options) {
 		onLoad(options) {
+				this.userInfo=JSON.parse(uni.getStorageSync("userInfo"))||''
 			if (options.rejectionInfo) {
 			if (options.rejectionInfo) {
 				this.rejectionInfo = decodeURIComponent(options.rejectionInfo)
 				this.rejectionInfo = decodeURIComponent(options.rejectionInfo)
 			}
 			}
 			// 初始化二级选项
 			// 初始化二级选项
 			this.currentSecondaryOptions = this.primaryOptions[0]?.children || []
 			this.currentSecondaryOptions = this.primaryOptions[0]?.children || []
+			// 获取用户信息
+			const userInfoStr = uni.getStorageSync('userInfo')
+			this.userInfo = userInfoStr ? JSON.parse(userInfoStr) : {}
+			console.log(this.userInfo);
+			// 加载信息
+			this.companyId = this.userInfo.companyId || 1
+
 		},
 		},
 		computed: {
 		computed: {
 			filteredProjects() {
 			filteredProjects() {
@@ -297,6 +314,121 @@
 			}
 			}
 		},
 		},
 		methods: {
 		methods: {
+			//任务类型
+			queryAllData(){
+				if(!this.formData.productCodeValue){
+					uni.showToast({
+						title: '请先选择产品',
+						icon: 'none'
+					})
+					return
+				}
+				let data={
+					companyId:this.userInfo.companyId||'',
+					deptId:this.formData.deptId||'',
+					productCode:this.formData.productCodeValue||'',
+
+				}
+				queryAllData(data).then(res => {
+					if (res.code === 200) {
+						// 处理任务类型
+						this.taskType = res.data || []
+						console.log('company接口返回数据:', res)
+					}
+				}).catch(err => {
+					console.error('获取任务类型失败:', err);
+				});
+			},
+
+			//获取公司所有产品
+			async queryAllProduct(){
+				return new Promise((resolve, reject) => {
+					let data={
+						companyId:this.userInfo.companyId||'',
+					}
+					queryAllProduct(data).then(res => {
+						if (res.code === 200) {
+							// 处理公司所有产品数据
+							this.productList = res.data || []
+							console.log('company接口返回数据:', res)
+						}
+						resolve(res);
+					}).catch(err => {
+						console.error('获取公司所有产品失败:', err);
+						reject(err);
+					});
+				});
+			},
+			// 归属项目
+			async getAllData(){
+				return new Promise((resolve, reject) => {
+					let data={
+					companyId:this.userInfo.companyId||'',
+						deptId:this.userInfo.deptId||'',
+						productCode:this.userInfo.productCode||''
+					}
+					getAllData(data).then(res => {
+						if (res.code === 200) {
+							// 处理公司项目设置列表数据
+							this.companyList = res.data || []
+
+							console.log('company接口返回数据:', res)
+						}
+						resolve(res);
+					}).catch(err => {
+						console.error('获取公司项目设置失败:', err);
+						reject(err);
+					});
+				});
+			},
+
+			async company() {
+				return new Promise((resolve, reject) => {
+					try {
+						uni.showLoading({
+							title: '加载中...'
+						})
+						// 调用company接口获取公司项目设置列表
+						company(this.companyId).then(companyRes => {
+							uni.hideLoading()
+							if (companyRes.code === 200) {
+								// 处理公司项目设置列表数据
+								this.companyData = companyRes.data || []
+
+								console.log('company接口返回数据:', companyRes)
+								// 这里可以根据接口返回的数据进行页面初始化,比如填充项目列表
+							}
+							resolve(companyRes);
+						}).catch(e => {
+							uni.hideLoading()
+							console.error('加载信息失败', e)
+							uni.showToast({
+								title: '网络错误',
+								icon: 'none'
+							})
+							reject(e);
+						});
+					} catch (e) {
+						uni.hideLoading()
+						console.error('加载信息失败', e)
+						uni.showToast({
+							title: '网络错误',
+							icon: 'none'
+						})
+						reject(e);
+					}
+				});
+			},
+			submitInfo() {
+					info(this.userInfo.companyId).then(res => {
+						if (res.code === 200) {
+							console.log('公司项目设置:', res.data);
+							// 处理公司项目设置数据
+						}
+					}).catch(err => {
+						console.error('获取公司项目设置失败:', err);
+					});
+			},
 			handlePrimarySelect(index) {
 			handlePrimarySelect(index) {
 				this.activePrimaryIndex = index;
 				this.activePrimaryIndex = index;
 				this.currentSecondaryOptions = this.primaryOptions[index].children || [];
 				this.currentSecondaryOptions = this.primaryOptions[index].children || [];
@@ -333,8 +465,46 @@
 					this.selectedIndex = -1;
 					this.selectedIndex = -1;
 				}, 300);
 				}, 300);
 			},
 			},
-			showPicker(title, data) {
-				this.pickerData = data
+			async showPicker(title, data) {
+				// 根据不同的title调用对应的请求方法
+				if (title === '任务归属' || title === '费用分摊') {
+					// 调用company()获取任务归属和费用分摊数据
+					await this.company();
+					data = this.companyData;
+				} else if (title === '归属项目') {
+					// 调用getAllData()获取归属项目数据
+					await this.getAllData();
+					data = this.companyList;
+				} else if (title === '产品代码') {
+					// 调用queryAllProduct()获取产品代码数据
+					await this.queryAllProduct();
+					data = this.productList;
+				}else if (title === '任务类型') {
+					// queryAllData()获取任务类型数据
+					await this.queryAllData();
+					data = this.taskType;
+				}
+
+				// 处理任务归属和费用分摊数据,将deptStr作为显示文本
+				if ((title === '任务归属' || title === '费用分摊') && data && data.length > 0) {
+					// 转换为picker需要的格式
+					this.pickerData = [data.map(item => item.deptStr)]
+					// 保存原始数据,用于后续获取deptId
+					this.originalCompanyData = data
+				} else if (title === '归属项目' && data && data.length > 0) {
+					// 处理归属项目数据,将projectName作为显示文本
+					this.pickerData = [data.map(item => item.projectName)]
+					// 保存原始数据,用于后续获取productId
+					this.originalCompanyData = data
+				} else if (title === '产品代码' && data && data.length > 0) {
+					// 处理产品代码数据,将productName作为显示文本
+					this.pickerData = [data.map(item => item.productName)]
+					// 保存原始数据,用于后续获取productCode
+					this.originalCompanyData = data
+				} else {
+					this.pickerData = data
+					this.originalCompanyData = null
+				}
 				this.pickerTitle = title
 				this.pickerTitle = title
 				this.showPickerVisible = true
 				this.showPickerVisible = true
 			},
 			},
@@ -344,6 +514,39 @@
 						this.formData.costAllocation = e.value[0]
 						this.formData.costAllocation = e.value[0]
 					} else if (this.pickerTitle === '任务类型') {
 					} else if (this.pickerTitle === '任务类型') {
 						this.formData.taskType = e.value[0]
 						this.formData.taskType = e.value[0]
+					} else if (this.pickerTitle === '任务归属' && this.originalCompanyData) {
+						// 获取选中的索引
+						const selectedIndex = e.value[0]
+						// 找到对应的原始数据项
+						const selectedItem = this.originalCompanyData.find(item => item.deptStr === selectedIndex)
+						if (selectedItem) {
+							// 显示deptStr
+							this.formData.institution = selectedItem.deptStr
+							// 保存deptId到表单
+							this.formData.deptId = selectedItem.deptId
+						}
+					} else if (this.pickerTitle === '归属项目' && this.originalCompanyData) {
+						// 获取选中的索引
+						const selectedIndex = e.value[0]
+						// 找到对应的原始数据项
+						const selectedItem = this.originalCompanyData.find(item => item.projectName === selectedIndex)
+						if (selectedItem) {
+							// 显示projectName
+							this.formData.belongingProject = selectedItem.projectName
+							// 保存productId到表单
+							this.formData.productId = selectedItem.productId
+						}
+					} else if (this.pickerTitle === '产品代码' && this.originalCompanyData) {
+						// 获取选中的索引
+						const selectedIndex = e.value[0]
+						// 找到对应的原始数据项
+						const selectedItem = this.originalCompanyData.find(item => item.productName === selectedIndex)
+						if (selectedItem) {
+							// 显示productName
+							this.formData.productCode = selectedItem.productName
+							// 保存productCode到表单
+							this.formData.productCodeValue = selectedItem.productCode
+						}
 					}
 					}
 				}
 				}
 				this.showPickerVisible = false
 				this.showPickerVisible = false
@@ -352,6 +555,8 @@
 				this.showPickerVisible = false
 				this.showPickerVisible = false
 			},
 			},
 			toNext() {
 			toNext() {
+				// 保存任务表单数据到本地存储
+				uni.setStorageSync('taskFormData', JSON.stringify(this.formData))
 				uni.navigateTo({
 				uni.navigateTo({
 					url: '/pages_task/selectCustomer'
 					url: '/pages_task/selectCustomer'
 				})
 				})

+ 1 - 6
pages_task/editSelectCustomer.vue

@@ -479,13 +479,8 @@
 		.info-list {
 		.info-list {
 			.info-item {
 			.info-item {
 				display: flex;
 				display: flex;
+				align-items: center;
 				margin-bottom: 16rpx;
 				margin-bottom: 16rpx;
-				align-items: flex-start;
-				font-size: 28rpx;
-
-				&:last-child {
-					margin-bottom: 0;
-				}
 
 
 				.info-label {
 				.info-label {
 					color: #999999;
 					color: #999999;

+ 1 - 1
pages_task/onlineLecture.vue

@@ -102,7 +102,7 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import { getOnlineLectureList, getBroadcastUrl, enterMiniProgram } from '@/api-js/onlineLecture'
+// import { getOnlineLectureList, getBroadcastUrl, enterMiniProgram } from '@/api-js/onlineLecture'
 export default {
 export default {
 	data() {
 	data() {
 		return {
 		return {

+ 84 - 58
pages_task/pointsSettings.vue

@@ -113,53 +113,50 @@
 
 
 <script>
 <script>
 	import Step from '@/pages_task/components/step.vue'
 	import Step from '@/pages_task/components/step.vue'
+	import { addInfo} from '@/api/task.js';
 	export default {
 	export default {
 		components: {
 		components: {
 			Step
 			Step
 		},
 		},
 		data() {
 		data() {
-			return {currentText: [{
-						id: 1,
-						stepNumber: 1,
-						title: '填写任务'
-					},
-					{
-						id: 2,
-						stepNumber: 2,
-						title: '选择客户'
-					},
-					{
-						id: 3,
-						stepNumber: 3,
-						title: '积分设置'
-					}
-				],
-				currentStep: 3,
-				showOverview: false, // 控制概览弹窗显示
-				customerList: [{
-						id: 1,
-						name: '王小明',
-						integral: '30',
-						placeholder: '请输入积分',
-						disabled: false
-					},
-					{
-						id: 2,
-						name: '李洋',
-						integral: '',
-						placeholder: '请输入积分',
-						disabled: false
-					},
-					{
-						id: 3,
-						name: '钱小燕',
+				return {
+					currentText: [{
+							id: 1,
+							stepNumber: 1,
+							title: '填写任务'
+						},
+						{
+							id: 2,
+							stepNumber: 2,
+							title: '选择客户'
+						},
+						{
+							id: 3,
+							stepNumber: 3,
+							title: '积分设置'
+						}
+					],
+					currentStep: 3,
+					showOverview: false, // 控制概览弹窗显示
+					customerList: []
+				}
+			},
+			onLoad() {
+				// 从本地存储中获取选中的客户数据
+				const selectedCustomersStr = uni.getStorageSync('selectedCustomers')
+				if (selectedCustomersStr) {
+					const selectedCustomers = JSON.parse(selectedCustomersStr)
+					// 将选中的客户数据转换为积分设置需要的格式
+					this.customerList = selectedCustomers.map(customer => ({
+						id: customer.id,
+						name: customer.doctorName || '未知姓名',
+						doctorName: customer.doctorName || '未知姓名',
 						integral: '',
 						integral: '',
 						placeholder: '请输入积分',
 						placeholder: '请输入积分',
 						disabled: false
 						disabled: false
-					}
-				]
-			}
-		},
+					}))
+				}
+			},
 		computed: {
 		computed: {
 			totalIntegral() {
 			totalIntegral() {
 				let total = 0
 				let total = 0
@@ -196,13 +193,6 @@
 				uni.navigateBack()
 				uni.navigateBack()
 			},
 			},
 			submit() {
 			submit() {
-				// 重命名方法为 submit 以匹配模板
-				this.handleSubmit();
-				uni.navigateTo({
-					url: '/pages_task/success'
-				})
-			},
-			handleSubmit() {
 				// 验证所有客户积分是否已填写
 				// 验证所有客户积分是否已填写
 				const emptyCustomers = this.customerList.filter(customer => !customer.integral || customer.integral === '')
 				const emptyCustomers = this.customerList.filter(customer => !customer.integral || customer.integral === '')
 				if (emptyCustomers.length > 0) {
 				if (emptyCustomers.length > 0) {
@@ -227,29 +217,65 @@
 					return
 					return
 				}
 				}
 
 
-				// 提交数据
+				// 获取所有三个页面的数据
+				const taskFormDataStr = uni.getStorageSync('taskFormData')
+				const selectedCustomersStr = uni.getStorageSync('selectedCustomers')
+				const taskFormData = taskFormDataStr ? JSON.parse(taskFormDataStr) : {}
+				const selectedCustomers = selectedCustomersStr ? JSON.parse(selectedCustomersStr) : []
+
+				// 构建提交数据
 				const taskData = {
 				const taskData = {
+					// 任务基本信息
+					...taskFormData,
+					// 客户信息和积分
 					customers: this.customerList.map(customer => ({
 					customers: this.customerList.map(customer => ({
 						id: customer.id,
 						id: customer.id,
 						name: customer.name,
 						name: customer.name,
+						doctorName: customer.doctorName,
 						integral: parseInt(customer.integral)
 						integral: parseInt(customer.integral)
 					})),
 					})),
-					totalIntegral: this.totalIntegral
+					// 总积分
+					totalIntegral: this.totalIntegral,
+					// 选中的原始客户数据
+					selectedCustomers: selectedCustomers
 				}
 				}
 
 
 				console.log('提交的任务数据:', taskData)
 				console.log('提交的任务数据:', taskData)
 
 
-				// 显示提交成功提示
-				uni.showToast({
-					title: '任务创建成功',
-					success: () => {
-						// 延迟跳转,让用户看到成功提示
-						setTimeout(() => {
-							uni.navigateTo({
-								url: '/pages_task/taskList'
-							})
-						}, 1500)
+				// 调用addInfo接口提交表单
+				uni.showLoading({
+					title: '提交中...'
+				})
+				addInfo(taskData).then(res => {
+					uni.hideLoading()
+					if (res.code === 200) {
+						// 清除本地存储的数据
+						uni.removeStorageSync('taskFormData')
+						uni.removeStorageSync('selectedCustomers')
+						// 显示提交成功提示
+						uni.showToast({
+							title: '任务创建成功',
+							success: () => {
+								// 延迟跳转,让用户看到成功提示
+								setTimeout(() => {
+									uni.navigateTo({
+										url: '/pages_task/taskList'
+									})
+								}, 1500)
+							}
+						})
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: res.message || '提交失败'
+						})
 					}
 					}
+				}).catch(err => {
+					uni.hideLoading()
+					uni.showToast({
+						icon: 'none',
+						title: '网络错误,请重试'
+					})
 				})
 				})
 			},
 			},
 			deleteSelected() {
 			deleteSelected() {

+ 1 - 1
pages_task/science.vue

@@ -128,7 +128,7 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import { getAirClassroomList } from '@/api-js/airClassroom'
+// import { getAirClassroomList } from '@/api-js/airClassroom'
 export default {
 export default {
 	data() {
 	data() {
 		return {
 		return {

+ 66 - 86
pages_task/selectCustomer.vue

@@ -15,7 +15,7 @@
 				<view class="section-title">已选择 {{ selectedCustomers.length }} 人:</view>
 				<view class="section-title">已选择 {{ selectedCustomers.length }} 人:</view>
 				<view class="selected-tags">
 				<view class="selected-tags">
 					<view class="selected-tag" v-for="(customer, index) in selectedCustomers" :key="customer.id">
 					<view class="selected-tag" v-for="(customer, index) in selectedCustomers" :key="customer.id">
-						<text class="tag-name">{{ customer.name }}</text>
+						<text class="tag-name">{{ customer.doctorName }}</text>
 						<text class="tag-remove" @click="removeCustomer(customer.id)">×</text>
 						<text class="tag-remove" @click="removeCustomer(customer.id)">×</text>
 					</view>
 					</view>
 				</view>
 				</view>
@@ -35,11 +35,11 @@
 						<image class="head" src="/static/image/img_avatar_client.png"></image>
 						<image class="head" src="/static/image/img_avatar_client.png"></image>
 						<view class="customer-info">
 						<view class="customer-info">
 							<view class="customer-header">
 							<view class="customer-header">
-								<view class="customer-name">{{ customer.name }}</view>
-								<view class="customer-level">{{ customer.level }}</view>
+								<view class="customer-name">{{ customer.doctorName }}</view>
+								<view class="customer-level" v-if="customer.jobTitle">{{ customer.jobTitle }}</view>
 							</view>
 							</view>
 							<view class="customer-details">
 							<view class="customer-details">
-								<view class="customer-hospital">{{ customer.hospital }}</view>
+								<view class="customer-hospital">{{ customer.cityName }}</view>
 								<view class="customer-department">{{ customer.department }}</view>
 								<view class="customer-department">{{ customer.department }}</view>
 							</view>
 							</view>
 						</view>
 						</view>
@@ -66,89 +66,39 @@
 
 
 <script>
 <script>
 	import Step from '@/pages_task/components/step.vue'
 	import Step from '@/pages_task/components/step.vue'
+	import { speakerList } from '@/api/speaker.js'
 	export default {
 	export default {
 		components: {
 		components: {
 			Step
 			Step
 		},
 		},
 		data() {
 		data() {
-			return {
-				currentText: [{
-						id: 1,
-						stepNumber: 1,
-						title: '填写任务'
-					},
-					{
-						id: 2,
-						stepNumber: 2,
-						title: '选择客户'
-					},
-					{
-						id: 3,
-						stepNumber: 3,
-						title: '积分设置'
-					}
-				],
-				currentStep: 2,
-				searchKeyword: '',
-				selectedCustomers: [{
-						id: 1,
-						name: '王小明',
-						level: '一级',
-						hospital: '湖南省人民医院',
-						department: '口腔科'
-					},
-					{
-						id: 2,
-						name: '李洋',
-						level: '一级',
-						hospital: '湖南省人民医院',
-						department: '口腔科'
-					}
-				],
-				customerList: [{
-						id: 1,
-						name: '王小明',
-						level: '一级',
-						hospital: '湖南省人民医院',
-						department: '口腔科'
-					},
-					{
-						id: 2,
-						name: '李洋',
-						level: '一级',
-						hospital: '湖南省人民医院',
-						department: '口腔科'
-					},
-					{
-						id: 3,
-						name: '王小明',
-						level: '一级',
-						hospital: '湖南省人民医院',
-						department: '口腔科'
-					},
-					{
-						id: 4,
-						name: '王小明',
-						level: '一级',
-						hospital: '湖南省人民医院',
-						department: '口腔科'
-					},
-					{
-						id: 5,
-						name: '王小明',
-						level: '一级',
-						hospital: '湖南省人民医院',
-						department: '口腔科'
-					},
-					{
-						id: 6,
-						name: '王小明',
-						level: '一级',
-						hospital: '湖南省人民医院',
-						department: '口腔科'
-					}
-				]
-			}
+				return {
+					currentText: [{
+							id: 1,
+							stepNumber: 1,
+							title: '填写任务'
+						},
+						{
+							id: 2,
+							stepNumber: 2,
+							title: '选择客户'
+						},
+						{
+							id: 3,
+							stepNumber: 3,
+							title: '积分设置'
+						}
+					],
+					currentStep: 2,
+					searchKeyword: '',
+					selectedCustomers: [],
+					customerList: [],
+					loading: false,
+					debounceTimer: null
+				}
+			},
+		onLoad() {
+			this.loadCustomerData()
 		},
 		},
 		computed: {
 		computed: {
 			filteredCustomers() {
 			filteredCustomers() {
@@ -157,15 +107,42 @@
 				}
 				}
 				const keyword = this.searchKeyword.toLowerCase()
 				const keyword = this.searchKeyword.toLowerCase()
 				return this.customerList.filter(customer =>
 				return this.customerList.filter(customer =>
-					customer.name.toLowerCase().includes(keyword) ||
-					customer.hospital.toLowerCase().includes(keyword) ||
-					customer.department.toLowerCase().includes(keyword)
+					(customer.doctorName && customer.doctorName.toLowerCase().includes(keyword)) ||
+					(customer.cityName && customer.cityName.toLowerCase().includes(keyword)) ||
+					(customer.department && customer.department.toLowerCase().includes(keyword))
 				)
 				)
 			}
 			}
 		},
 		},
 		methods: {
 		methods: {
+			async loadCustomerData() {
+				try {
+					this.loading = true
+					// 调用speakerList接口获取数据
+					const res = await speakerList({})
+					if (res.code === 200 && res.rows) {
+						// 将接口返回的数据映射为页面需要的格式
+						this.customerList = res.rows;
+					}
+				} catch (error) {
+					console.error('获取客户数据失败:', error)
+					uni.showToast({
+						icon: 'none',
+						title: '获取客户数据失败'
+					})
+				} finally {
+					this.loading = false
+				}
+			},
 			handleSearch() {
 			handleSearch() {
-				// 搜索逻辑已经在computed中处理
+				// 清除之前的定时器
+				if (this.debounceTimer) {
+					clearTimeout(this.debounceTimer)
+				}
+				// 设置新的定时器,500毫秒后执行搜索
+				this.debounceTimer = setTimeout(() => {
+					// 搜索逻辑已经在computed中处理,这里可以添加额外的搜索逻辑
+					console.log('执行搜索:', this.searchKeyword)
+				}, 500)
 			},
 			},
 			clearSearch() {
 			clearSearch() {
 				this.searchKeyword = ''
 				this.searchKeyword = ''
@@ -230,6 +207,9 @@
 					return
 					return
 				}
 				}
 
 
+				// 保存选中的客户到本地存储,以便pointsSettings.vue获取
+				uni.setStorageSync('selectedCustomers', JSON.stringify(this.selectedCustomers))
+
 				// 跳转到下一步(积分设置)
 				// 跳转到下一步(积分设置)
 				uni.navigateTo({
 				uni.navigateTo({
 					url: '/pages_task/pointsSettings'
 					url: '/pages_task/pointsSettings'

+ 166 - 139
pages_echarts/statistics.vue → pages_task/statistics.vue

@@ -33,33 +33,26 @@
 
 
 		<!-- 内容区域 - 动态显示不同的统计表格 -->
 		<!-- 内容区域 - 动态显示不同的统计表格 -->
 		<template v-if="currentStatType === 'task'">
 		<template v-if="currentStatType === 'task'">
-			<!-- 任务统计表格 -->
+			<!-- 任务完成统计表格 -->
 			<statistics-table 
 			<statistics-table 
 				:summary-title="summaryTitle.task[0]" 
 				:summary-title="summaryTitle.task[0]" 
-				:summary-stats="summaryStats.task" 
+				:summary-stats="summaryStats.taskComplete" 
 				:columns="tableColumns.task"
 				:columns="tableColumns.task"
-				:table-data="tableData.task" 
+				:table-data="tableData.taskComplete" 
 				:loading="loading.task" 
 				:loading="loading.task" 
 				@load-more="loadMore('task')"
 				@load-more="loadMore('task')"
 			>
 			>
-				<!-- 状态列自定义插槽 -->
-				<template #col-statusText="{ item }">
-					<text class="status-tag" :class="item.status">{{ item.statusText }}</text>
-				</template>
 			</statistics-table>
 			</statistics-table>
 
 
+			<!-- 任务创建统计表格 -->
 			<statistics-table 
 			<statistics-table 
 				:summary-title="summaryTitle.task[1]" 
 				:summary-title="summaryTitle.task[1]" 
-				:summary-stats="summaryStats.task" 
+				:summary-stats="summaryStats.taskCreate" 
 				:columns="tableColumns.task"
 				:columns="tableColumns.task"
-				:table-data="tableData.task" 
+				:table-data="tableData.taskCreate" 
 				:loading="loading.task" 
 				:loading="loading.task" 
 				@load-more="loadMore('task')"
 				@load-more="loadMore('task')"
 			>
 			>
-				<!-- 状态列自定义插槽 -->
-				<template #col-statusText="{ item }">
-					<text class="status-tag" :class="item.status">{{ item.statusText }}</text>
-				</template>
 			</statistics-table>
 			</statistics-table>
 		</template>
 		</template>
 
 
@@ -74,9 +67,9 @@
 				@load-more="loadMore('service')"
 				@load-more="loadMore('service')"
 			>
 			>
 				<!-- 状态列自定义插槽 -->
 				<!-- 状态列自定义插槽 -->
-				<template #col-statusText="{ item }">
-					<text class="status-tag" :class="item.status">{{ item.statusText }}</text>
-				</template>
+						<template #statusText="{ item }">
+							<text class="status-tag" :class="item.status">{{ item.statusText }}</text>
+						</template>
 			</statistics-table>
 			</statistics-table>
 
 
 			<statistics-table 
 			<statistics-table 
@@ -88,9 +81,9 @@
 				@load-more="loadMore('service')"
 				@load-more="loadMore('service')"
 			>
 			>
 				<!-- 状态列自定义插槽 -->
 				<!-- 状态列自定义插槽 -->
-				<template #col-statusText="{ item }">
-					<text class="status-tag" :class="item.status">{{ item.statusText }}</text>
-				</template>
+						<template #statusText="{ item }">
+							<text class="status-tag" :class="item.status">{{ item.statusText }}</text>
+						</template>
 			</statistics-table>
 			</statistics-table>
 		</template>
 		</template>
 
 
@@ -190,7 +183,7 @@
 
 
 <script>
 <script>
 	import StatisticsTable from '@/components/StatisticsTable.vue'
 	import StatisticsTable from '@/components/StatisticsTable.vue'
-	// import { getStatisticsData } from '@/api-js/statistics'
+	import { getTaskCompleteStats, getTaskCreateStats } from '@/api/task.js'
 	export default {
 	export default {
 		components: {
 		components: {
 			StatisticsTable
 			StatisticsTable
@@ -347,17 +340,21 @@
 				// 统计标题(分开存储)
 				// 统计标题(分开存储)
 				summaryTitle: {
 				summaryTitle: {
 					service: [ '汇总统计', '明细统计'],
 					service: [ '汇总统计', '明细统计'],
-					task: ['服务单完成统计', '服务单创建统计']
+					task: ['任务完成统计', '任务创建统计']
 				},
 				},
 				
 				
 				// 统计数据
 				// 统计数据
 				summaryStats: {
 				summaryStats: {
-					task: [{
+					taskComplete: [{
 						label: '总积分',
 						label: '总积分',
 						value: 300
 						value: 300
 					}],
 					}],
+					taskCreate: [{
+						label: '总积分',
+						value: 1000
+					}],
 					service: [{
 					service: [{
-						label: '总服务单数',
+						label: '总积分',
 						value: 45
 						value: 45
 					}]
 					}]
 				},
 				},
@@ -365,36 +362,33 @@
 				// 表格列定义
 				// 表格列定义
 				tableColumns: {
 				tableColumns: {
 					task: [{
 					task: [{
-							title: '归属',
-							key: 'taskType',
-							width: '20%'
-						},
-						{
-							title: '类型',
-							key: 'points',
-							width: '15%'
-						},
-						{
-							title: '数量',
-							key: 'applicant',
-							width: '20%'
-						},
-						{
-							title: '客户',
-							key: 'statusText',
-							width: '20%',
-							slot: true
-						},
-						{
-							title: '业务员',
-							key: 'receiveTime',
-							width: '25%'
-						},{
-							title: '积分',
-							key: 'receiveTime',
-							width: '25%'
-						}
-					],
+						title: '归属',
+						key: 'deptName',
+						width: '20%'
+					},
+					{
+						title: '类型',
+						key: 'taskType',
+						width: '20%'
+					},
+					{
+						title: '数量',
+						key: 'count',
+						width: '15%'
+					},
+					{
+						title: '客户',
+						key: 'companyUserName',
+						width: '20%'
+					},{"title": "业务员",
+					"key": "doctorName",
+					"width": "20%"
+					},
+					{
+						title: '积分',
+						key: 'totalPoints',
+						width: '25%'
+					}],
 					service: [{
 					service: [{
 							title: '项目归属',
 							title: '项目归属',
 							key: 'serviceNo',
 							key: 'serviceNo',
@@ -430,60 +424,39 @@
 				},
 				},
 				
 				
 				// 表格数据
 				// 表格数据
-				tableData: {
-					task: [{
-							taskType: '用药调研',
-							points: '20',
-							applicant: '王*明',
-							status: 'uncompleted',
-							statusText: '未完成',
-							receiveTime: '2025-09-25'
-						},
-						{
-							taskType: '科普短视频',
-							points: '20',
-							applicant: '王*明',
-							status: 'uncompleted',
-							statusText: '未完成',
-							receiveTime: '2025-09-25'
-						},
-						{
-							taskType: '用药调研',
-							points: '100',
-							applicant: '王*明',
-							status: 'uncompleted',
-							statusText: '未完成',
-							receiveTime: '2025-09-25'
-						}
-					],
-					service: [{
-							serviceNo: '学术研究',
-							serviceType: '技术咨询',
-							customerName: '李*华',
-							status: 'completed',
-							statusText: '已完成',
-							createTime: '2025-12-25'
-						},
-						{
-							serviceNo: '学术研究',
-							serviceType: '售后服务',
-							customerName: '张*伟',
-							status: 'processing',
-							statusText: '处理中',
-							createTime: '2025-12-24'
-						},
-						{
-							serviceNo: '学术研究',
-							serviceType: '安装服务',
-							customerName: '王*芳',
-							status: 'pending',
-							statusText: '待处理',
-							createTime: '2025-12-23'
-						}
-					]
+			tableData: {
+				taskComplete: [
+				],
+				taskCreate: [
+				],
+				service: [{
+					serviceNo: '学术研究',
+					serviceType: '技术咨询',
+					customerName: '李*华',
+					status: 'completed',
+					statusText: '已完成',
+					createTime: '2025-12-25'
 				},
 				},
-				
-				// 加载状态
+				{
+					serviceNo: '学术研究',
+					serviceType: '售后服务',
+					customerName: '张*伟',
+					status: 'processing',
+					statusText: '处理中',
+					createTime: '2025-12-24'
+				},
+				{
+					serviceNo: '学术研究',
+					serviceType: '安装服务',
+					customerName: '王*芳',
+					status: 'pending',
+					statusText: '待处理',
+					createTime: '2025-12-23'
+				}
+				]
+			},
+			
+			// 加载状态
 				loading: {
 				loading: {
 					task: false,
 					task: false,
 					service: false
 					service: false
@@ -640,28 +613,63 @@
 					// 根据当前统计类型加载数据
 					// 根据当前统计类型加载数据
 					if (this.currentStatType === 'task') {
 					if (this.currentStatType === 'task') {
 						// 加载任务统计数据
 						// 加载任务统计数据
-						// const res = await getTaskStatistics({
-						// 	startDate: this.dateRange.startDate,
-						// 	endDate: this.dateRange.endDate,
-						// 	taskType: this.selectedTaskType,
-						// 	taskStatus: this.selectedTaskStatus
-						// })
+						// 获取用户信息
+						const userInfoStr = uni.getStorageSync('userInfo')
+						const userInfo = userInfoStr ? JSON.parse(userInfoStr) : {}
 						
 						
-						// 模拟数据
-						setTimeout(() => {
-							uni.hideLoading()
-							// 这里可以更新数据
-						}, 500)
+						// 构建请求参数
+						const params = {
+							companyId: userInfo.companyId || 1,
+							pageNum: 1,
+							pageSize: 10
+						}
+						
+						// 调用任务完成统计接口
+						const completeStatsRes = await getTaskCompleteStats(params)
+						// 调用任务创建统计接口
+						const createStatsRes = await getTaskCreateStats(params)
+						
+						// 处理返回的数据
+					if (completeStatsRes.code === 200) {
+						// 更新任务完成统计数据
+						console.log('任务完成统计数据:', completeStatsRes)
+						// 更新表格数据
+						this.tableData.taskComplete = completeStatsRes.rows.map(item => ({
+							...item,
+							taskType: item.taskType || '无类型'
+						}))
+						// 更新汇总统计
+						this.summaryStats.taskComplete = [{
+							label: '总任务数',
+							value: completeStatsRes.total || 0
+						}, {
+							label: '总积分',
+							value: completeStatsRes.rows.reduce((sum, item) => sum + (item.totalPoints || 0), 0)
+						}]
+					}
+					
+					if (createStatsRes.code === 200) {
+						// 更新任务创建统计数据
+						console.log('任务创建统计数据:', createStatsRes)
+						// 更新表格数据
+						this.tableData.taskCreate = createStatsRes.rows.map(item => ({
+							...item,
+							taskType: item.taskType || '无类型'
+						}))
+						// 更新汇总统计
+						this.summaryStats.taskCreate = [{
+							label: '总任务数',
+							value: createStatsRes.total || 0
+						}, {
+							label: '总积分',
+							value: createStatsRes.rows.reduce((sum, item) => sum + (item.totalPoints || 0), 0)
+						}]
+					}
+						
+						uni.hideLoading()
 						
 						
 					} else {
 					} else {
 						// 加载服务单统计数据
 						// 加载服务单统计数据
-						// const res = await getServiceStatistics({
-						// 	startDate: this.dateRange.startDate,
-						// 	endDate: this.dateRange.endDate,
-						// 	serviceType: this.selectedServiceType,
-						// 	serviceStatus: this.selectedServiceStatus
-						// })
-						
 						// 模拟数据
 						// 模拟数据
 						setTimeout(() => {
 						setTimeout(() => {
 							uni.hideLoading()
 							uni.hideLoading()
@@ -715,22 +723,41 @@
 			getMoreServiceData() {
 			getMoreServiceData() {
 				// 返回更多服务单数据
 				// 返回更多服务单数据
 				return [{
 				return [{
-						serviceNo: 'FW20251222004',
-						serviceType: '维修服务',
-						customerName: '赵*强',
-						status: 'closed',
-						statusText: '已关闭',
-						createTime: '2025-12-22'
-					},
-					{
-						serviceNo: 'FW20251221005',
-						serviceType: '投诉建议',
-						customerName: '孙*丽',
-						status: 'cancelled',
-						statusText: '已取消',
-						createTime: '2025-12-21'
-					}
+					serviceNo: 'FW20251222004',
+					serviceType: '维修服务',
+					customerName: '赵*强',
+					status: 'closed',
+					statusText: '已关闭',
+					createTime: '2025-12-22'
+				},
+				{
+					serviceNo: 'FW20251221005',
+					serviceType: '投诉建议',
+					customerName: '孙*丽',
+					status: 'cancelled',
+					statusText: '已取消',
+					createTime: '2025-12-21'
+				}
 				]
 				]
+			},
+			
+			// 根据taskType获取任务类型名称
+			getTaskTypeName(taskType) {
+				// 任务类型映射
+				const taskTypeMap = {
+					'1': '医生坐诊',
+					'2': '科普讲座',
+					'3': '学术讲座',
+					'4': '科普文章',
+					'5': '科普短视频',
+					'6': '科普长视频',
+					'7': '空中课堂',
+					'8': '用药调研',
+					'9': '问卷调研',
+					'10': '社群咨询',
+					'11': '健康问答'
+				}
+				return taskTypeMap[taskType] || '未知类型'
 			}
 			}
 		}
 		}
 	}
 	}

+ 91 - 58
pages_task/taskDetail.vue

@@ -159,7 +159,7 @@
 					</view>
 					</view>
 					<view class="info-item column">
 					<view class="info-item column">
 						<text class="info-label">附件:</text>
 						<text class="info-label">附件:</text>
-						<view class="attachment-item">
+						<view class="attachment-item" v-if="supplementMaterial.attachment.name">
 							<view class="left">
 							<view class="left">
 								<image class="img" src="/static/image/icon_attachment.png"></image>
 								<image class="img" src="/static/image/icon_attachment.png"></image>
 								<view class="txt-item">
 								<view class="txt-item">
@@ -200,7 +200,7 @@
 					</view>
 					</view>
 
 
 				</view>
 				</view>
-				<view class="reason">
+				<view class="reason" v-if="item.status==3">
 					费用分摊部门填写错误,应该是学术研究事业部,请修改后重新提交。
 					费用分摊部门填写错误,应该是学术研究事业部,请修改后重新提交。
 				</view>
 				</view>
 
 
@@ -210,6 +210,8 @@
 </template>
 </template>
 
 
 <script>
 <script>
+	import { getTaskFinishAuditInfo} from '@/api/task.js';
+
 	export default {
 	export default {
 		data() {
 		data() {
 			return {
 			return {
@@ -218,80 +220,34 @@
 				taskId: '',
 				taskId: '',
 				// 任务基础信息
 				// 任务基础信息
 				taskData: {
 				taskData: {
-					title: '王小明医师学术讲座',
-					tag: '学术讲座',
-					id: 'CRW0000001022345'
+				
 				},
 				},
 				// 任务信息
 				// 任务信息
 				taskInfo: {
 				taskInfo: {
-					costSharing: '湖北省药学服务公司',
-					belongProject: '项目名称',
-					belongDept: '中药事业部',
-					belongProduct: '201',
-					applySupplementLive: '否',
-					supplementRoomId: '-',
-					supplementReason: '-'
+				
 				},
 				},
 				// 内容信息
 				// 内容信息
 				contentInfo: {
 				contentInfo: {
-					deliverableName: '直播',
-					deliverableId: '-',
-					liveRoomUrl: 'http://www.zhibotest123333...',
-					pushUrl: 'http://www.zhibotest123123...',
-					startUrl: 'http://www.zhibotest123123...',
-					liveReplay: '-',
-					playVideo: '-',
-					downloadVideo: '-',
-					viewerCount: '203',
-					validView: '198',
-					description: '这是一段说明,这是一段说明,一行展示不完就换行展示。'
+				
 				},
 				},
 				// 客户信息列表
 				// 客户信息列表
-				clientList: [{
-						name: '王小明',
-						level: '一级',
-						hospital: '湖南省人民医院',
-						department: '口腔科',
-						taskCount: '1',
-						points: '30'
-					},
-					{
-						name: '王小明',
-						level: '一级',
-						hospital: '湖南省人民医院',
-						department: '口腔科',
-						taskCount: '1',
-						points: '30'
-					}
+				clientList: [
 				],
 				],
 				// 补充材料
 				// 补充材料
 				supplementMaterial: {
 				supplementMaterial: {
 					deliverableName: '-',
 					deliverableName: '-',
 					description: '-',
 					description: '-',
 					attachment: {
 					attachment: {
-						name: '文件名称文件名称.pdf',
-						size: '128kb'
+					
 					}
 					}
 				},
 				},
 				// 审批信息
 				// 审批信息
-				approvalInfo: [{
-						name: '王彬彬',
-						status: '发起申请',
-						statusColor: '#4CAF50',
-						time: '2025-03-04 18:00'
-					},
-					{
-						name: '王小明',
-						status: '待审核',
-						statusColor: '#FF9800',
-						time: ''
-					}
-				]
+				approvalInfo: []
 			}
 			}
 		},
 		},
 		onLoad(options) {
 		onLoad(options) {
-			if (options.id) {
-				this.taskId = options.id
+			if (options.taskId) {
+				this.taskId = options.taskId
 				this.loadData()
 				this.loadData()
 			}
 			}
 		},
 		},
@@ -304,13 +260,90 @@
 					uni.showLoading({
 					uni.showLoading({
 						title: '加载中...'
 						title: '加载中...'
 					})
 					})
-					// 实际项目中替换为接口请求:const res = await getTaskDetail({ id: this.taskId })
-					// 这里模拟接口赋值
+					// 调用接口获取任务详情
+					const res = await getTaskFinishAuditInfo({ taskId: this.taskId })
 					uni.hideLoading()
 					uni.hideLoading()
+					if (res.code === 200) {
+						// 处理返回的数据
+						const data = res.data
+						// 更新任务基础信息
+						this.taskData = {
+							title: data.auditTaskInfoVO?.taskName || '任务名称',
+							tag: data.auditTaskInfoVO?.taskTypeName || '任务类型',
+							id: data.auditTaskInfoVO?.taskNo || ''
+						}
+						// 更新任务信息
+						this.taskInfo = {
+							costSharing: data.auditTaskInfoVO?.costShareName || '-',
+							belongProject: data.auditTaskInfoVO?.projectName || '-',
+							belongDept: data.auditTaskInfoVO?.deptName || '-',
+							belongProduct: '-', // 接口返回数据中没有产品名称
+							applySupplementLive: '否', // 接口返回数据中没有该字段
+							supplementRoomId: '-', // 接口返回数据中没有该字段
+							supplementReason: '-', // 接口返回数据中没有该字段
+						}
+						// 更新内容信息
+						this.contentInfo = {
+							deliverableName: data.auditTaskInfoVO?.taskName || '-',
+							deliverableId: data.auditTaskInfoVO?.taskNo || '-',
+							liveRoomUrl: '-', // 接口返回数据中没有该字段
+							pushUrl: '-', // 接口返回数据中没有该字段
+							startUrl: '-', // 接口返回数据中没有该字段
+							liveReplay: '-', // 接口返回数据中没有该字段
+							playVideo: '-', // 接口返回数据中没有该字段
+							downloadVideo: '-', // 接口返回数据中没有该字段
+							viewerCount: '-', // 接口返回数据中没有该字段
+							validView: '-', // 接口返回数据中没有该字段
+							description: '-', // 接口返回数据中没有该字段
+						}
+						// 更新客户信息列表
+						this.clientList = [{
+								name: data.docterVO?.doctorName || '医生姓名',
+								level: '', // 接口返回数据中没有该字段
+								hospital: data.docterVO?.institution || '-',
+								department: data.docterVO?.department || '-',
+								taskCount: data.auditTaskInfoVO?.taskCount || '0',
+								points: data.auditTaskInfoVO?.taskIntegral || '0'
+							}]
+						// 更新审批信息
+						this.approvalInfo = data.auditFlowVO?.map(item => ({
+							name: item.auditUserName || '审批人',
+							status: item.statusName || '-',
+							statusColor: this.getAuditStatusColor(item.status),
+							time: item.auditTime || ''
+						})) || []
+					} else {
+						uni.showToast({
+							title: '获取任务详情失败',
+							icon: 'none'
+						})
+					}
 				} catch (e) {
 				} catch (e) {
 					uni.hideLoading()
 					uni.hideLoading()
 					console.error('加载数据失败', e)
 					console.error('加载数据失败', e)
+					uni.showToast({
+						title: '网络错误',
+						icon: 'none'
+					})
+				}
+			},
+			getAuditStatusText(status) {
+				// 根据审核状态获取状态文本
+				const statusMap = {
+					0: '待审核',
+					1: '已通过',
+					2: '已驳回'
+				}
+				return statusMap[status] || '-'
+			},
+			getAuditStatusColor(status) {
+				// 根据审核状态获取状态颜色
+				const colorMap = {
+					1: '#FF9800',
+					2: '#4CAF50',
+					3: '#F44336'
 				}
 				}
+				return colorMap[status] || '#999'
 			},
 			},
 			// 复制到剪贴板
 			// 复制到剪贴板
 			copyToClipboard(text) {
 			copyToClipboard(text) {

+ 206 - 41
pages_task/xlTask.vue

@@ -97,14 +97,14 @@
 							<text>分享</text>
 							<text>分享</text>
 						</view>
 						</view>
 						<view class="btn-group">
 						<view class="btn-group">
-							<view class="btn" v-if="item.showDelete" @click="handleTaskDelete(item, index)">删除</view>
-							<view class="btn" @click="handleCopy(item)">复制创建</view>
+							<view class="btn" v-if="item.showDelete" @click.stop="handleTaskDelete(item, index)">删除</view>
+							<view class="btn" @click.stop="handleCopy(item)">复制创建</view>
 						</view>
 						</view>
 					</view>
 					</view>
 					<view class="operate-btn-group flex-end" v-else>
 					<view class="operate-btn-group flex-end" v-else>
 						<view class="btn-group">
 						<view class="btn-group">
-							<view class="btn" v-if="item.showDelete" @click="handleAuditDelete(item, index)">删除</view>
-							<view class="btn" v-if="item.showEdit" @click="handleEdit(item)">编辑</view>
+							<view class="btn" v-if="item.showDelete" @click.stop="handleAuditDelete(item, index)">删除</view>
+							<view class="btn" v-if="item.showEdit" @click.stop="handleEdit(item)">编辑</view>
 						</view>
 						</view>
 					</view>
 					</view>
 
 
@@ -115,11 +115,11 @@
 			</view>
 			</view>
 		</scroll-view>
 		</scroll-view>
 		<view class="side">
 		<view class="side">
-			<view class="side-item" @click="goCreate" >
-				<image class="icon" src="/static/image/icon_close.png"></image>
+			<view class="side-item"  >
+				<image class="icon" @click="goCreate" src="/static/image/btn_add.png"></image>
 			</view>
 			</view>
-			<view class="side-item" @click="goData">
-				<image class="icon" src="/static/image/icon_close.png"></image>
+			<view class="side-item" >
+				<image class="icon" @click="goData" src="/static/image/btn_data.png"></image>
 			</view>
 			</view>
 		</view>
 		</view>
 		<!-- 筛选弹窗 -->
 		<!-- 筛选弹窗 -->
@@ -205,6 +205,7 @@
 	</view>
 	</view>
 </template>
 </template>
 <script>
 <script>
+	import { list,  deleted, company } from '@/api/task.js';
 	export default {
 	export default {
 		data() {
 		data() {
 			return {
 			return {
@@ -285,7 +286,10 @@
 					applyTime: '2025-9-20 13:55',
 					applyTime: '2025-9-20 13:55',
 					showDelete: true,
 					showDelete: true,
 					showEdit: true
 					showEdit: true
-				}]
+				}],
+				userInfo: {
+					companyId: ''
+				}
 			}
 			}
 		},
 		},
 		computed: {
 		computed: {
@@ -296,25 +300,155 @@
 				return this.currentTopTab === 'task' ? this.taskList : this.auditList;
 				return this.currentTopTab === 'task' ? this.taskList : this.auditList;
 			}
 			}
 		},
 		},
+		mounted() {
+			this.loadData();
+		},
 		methods: {
 		methods: {
+			loadData() {
+				// 加载任务列表数据
+				this.getTaskList();
+				// 加载公司项目设置
+				this.getCompanySettings();
+			},
+			getTaskList() {
+				// 构建请求参数
+				const params = {
+					...this.filters,
+					type: this.currentTopTab,
+					status: this.currentSubTab
+				};
+				
+				uni.showLoading({
+					title: '加载中...'
+				});
+				
+				list(params).then(res => {
+					uni.hideLoading();
+					if (res.code === 200 && res.rows) {
+						// 处理任务列表数据
+						if (this.currentTopTab === 'task') {
+							this.taskList = res.rows.map(item => ({
+								id: item.id,
+								taskTitle: item.taskName,
+								statusText: this.getStatusText(item.taskStatus),
+								statusClass: this.getStatusClass(item.taskStatus),
+								speaker: item.doctorName,
+								level: '', // 接口返回数据中没有level字段
+								hospital: item.deptName, // 使用deptName作为hospital
+								department: item.deptName, // 使用deptName作为department
+								videoType: item.taskTypeName, // 使用taskTypeName作为videoType
+								category: item.taskTypeName, // 使用taskTypeName作为category
+								points: item.taskIntegral,
+								count: item.taskCount,
+								applyTime: item.createTime,
+								finishTime: item.finishAuditTime || '-',
+								auditStatus: this.getAuditStatusText(item.finishAuditStatus),
+								showDelete: true,
+								sealImg: item.taskStatus === 1 ? '/static/image/img_finish.png' : '/static/image/img_unfinish.png'
+							}));
+						} else {
+							this.auditList = res.rows.map(item => ({
+								id: item.id,
+								taskTitle: item.taskName,
+								statusText: this.getAuditStatusText(item.createAuditStatus),
+								statusClass: this.getAuditStatusClass(item.createAuditStatus),
+								speaker: item.doctorName,
+								level: '', // 接口返回数据中没有level字段
+								hospital: item.deptName, // 使用deptName作为hospital
+								department: item.deptName, // 使用deptName作为department
+								videoType: item.taskTypeName, // 使用taskTypeName作为videoType
+								category: item.taskTypeName, // 使用taskTypeName作为category
+								points: item.taskIntegral,
+								count: item.taskCount,
+								applyTime: item.createTime,
+								showDelete: true,
+								showEdit: item.createAuditStatus === 2 || item.finishAuditStatus === 2 // 2表示驳回
+							}));
+						}
+					} else {
+						uni.showToast({
+							title: '获取数据失败',
+							icon: 'none'
+						});
+					}
+				}).catch(err => {
+					uni.hideLoading();
+					uni.showToast({
+						title: '网络错误',
+						icon: 'none'
+					});
+				});
+			},
+			getCompanySettings() {
+				// 获取公司项目设置
+				if (this.userInfo.companyId) {
+					company(this.userInfo.companyId).then(res => {
+						if (res.code === 200) {
+							console.log('公司项目设置:', res.data);
+							// 处理公司项目设置数据
+						}
+					}).catch(err => {
+						console.error('获取公司项目设置失败:', err);
+					});
+				}
+			},
+			getStatusText(status) {
+				// 根据状态获取状态文本
+				const statusMap = {
+					0: '未完成',
+					1: '已完成'
+				};
+				return statusMap[status] || '未知状态';
+			},
+			getStatusClass(status) {
+				// 根据状态获取状态样式类
+				const statusMap = {
+					0: 'status-wait',
+					1: 'status-finish'
+				};
+				return statusMap[status] || 'status-wait';
+			},
+			getAuditStatusText(status) {
+				// 根据审核状态获取状态文本
+				const statusMap = {
+					0: '待审核',
+					1: '已通过',
+					2: '已驳回'
+				};
+				return statusMap[status] || '-';
+			},
+			getAuditStatusClass(status) {
+				// 根据审核状态获取状态样式类
+				const statusMap = {
+					0: 'status-wait',
+					1: 'status-finish',
+					2: 'status-rejected'
+				};
+				return statusMap[status] || 'status-wait';
+			},
 			goCreate(){
 			goCreate(){
+				console.log('创建任务');
 				uni.navigateTo({
 				uni.navigateTo({
-					url: '/pages_task/createTask'
+					url: '/pages_task/createTask' 
 				})
 				})
 			},
 			},
 			goData(){
 			goData(){
+				console.log("跳转到数据页");
 				uni.navigateTo({
 				uni.navigateTo({
-					url: '/pages_echarts/statistics'
+					url: '/pages_task/statistics'
 				})
 				})
 			},
 			},
 			goDetails(item) {
 			goDetails(item) {
+				console.log("跳转到任务详情页",item);
+				// 直接跳转到任务详情页,传递id作为taskId参数
 				uni.navigateTo({
 				uni.navigateTo({
-					url: '/pages_task/taskDetail'
-				})
+					url: `/pages_task/taskDetail?taskId=${item.id}`
+				});
 			},
 			},
 			switchTopTab(type) {
 			switchTopTab(type) {
 				this.currentTopTab = type;
 				this.currentTopTab = type;
 				this.currentSubTab = 'all';
 				this.currentSubTab = 'all';
+				this.loadData();
 			},
 			},
 			closeFilter() {
 			closeFilter() {
 				this.showFilter = false
 				this.showFilter = false
@@ -334,7 +468,8 @@
 			},
 			},
 			confirmFilters() {
 			confirmFilters() {
 				this.showFilter = false
 				this.showFilter = false
-				console.log('筛选条件:', this.filters)
+				// 根据筛选条件重新加载数据
+				this.loadData();
 			},
 			},
 			handleShare(item) {
 			handleShare(item) {
 				uni.showToast({
 				uni.showToast({
@@ -351,11 +486,31 @@
 					confirmColor: '#FF0000',
 					confirmColor: '#FF0000',
 					success: (res) => {
 					success: (res) => {
 						if (res.confirm) {
 						if (res.confirm) {
-							this.taskList.splice(index, 1);
-							uni.showToast({
-								title: '任务已删除',
-								icon: 'success',
-								duration: 1500
+							uni.showLoading({
+								title: '删除中...'
+							});
+							
+							deleted(item.id).then(res => {
+								uni.hideLoading();
+								if (res.code === 200) {
+									this.taskList.splice(index, 1);
+									uni.showToast({
+										title: '任务已删除',
+										icon: 'success',
+										duration: 1500
+									});
+								} else {
+									uni.showToast({
+										title: '删除失败',
+										icon: 'none'
+									});
+								}
+							}).catch(err => {
+								uni.hideLoading();
+								uni.showToast({
+									title: '网络错误',
+									icon: 'none'
+								});
 							});
 							});
 						}
 						}
 					}
 					}
@@ -363,12 +518,8 @@
 			},
 			},
 			handleCopy(item) {
 			handleCopy(item) {
 				uni.navigateTo({
 				uni.navigateTo({
-					url: '/pages_task/createTask'
+					url: `/pages_task/createTask?id=${item.id}&copy=true`
 				})
 				})
-				// uni.showToast({
-				// 	title: '复制创建功能待实现',
-				// 	icon: 'none'
-				// })
 			},
 			},
 			handleAuditDelete(item, index) {
 			handleAuditDelete(item, index) {
 				uni.showModal({
 				uni.showModal({
@@ -379,20 +530,39 @@
 					confirmColor: '#FF0000',
 					confirmColor: '#FF0000',
 					success: (res) => {
 					success: (res) => {
 						if (res.confirm) {
 						if (res.confirm) {
-							this.auditList.splice(index, 1);
-							uni.showToast({
-								title: '审核项已删除',
-								icon: 'success',
-								duration: 1500
+							uni.showLoading({
+								title: '删除中...'
+							});
+							
+							deleted(item.id).then(res => {
+								uni.hideLoading();
+								if (res.code === 200) {
+									this.auditList.splice(index, 1);
+									uni.showToast({
+										title: '审核项已删除',
+										icon: 'success',
+										duration: 1500
+									});
+								} else {
+									uni.showToast({
+										title: '删除失败',
+										icon: 'none'
+									});
+								}
+							}).catch(err => {
+								uni.hideLoading();
+								uni.showToast({
+									title: '网络错误',
+									icon: 'none'
+								});
 							});
 							});
 						}
 						}
 					}
 					}
 				});
 				});
 			},
 			},
 			handleEdit(item) {
 			handleEdit(item) {
-				uni.showToast({
-					title: '编辑功能待实现',
-					icon: 'none'
+				uni.navigateTo({
+					url: `/pages_task/createTask?id=${item.id}&edit=true`
 				})
 				})
 			}
 			}
 		}
 		}
@@ -730,26 +900,21 @@
 		}
 		}
 
 
 		.side {
 		.side {
-			position: absolute;
+			position: fixed;
 			top: 60%;
 			top: 60%;
 			right: 36rpx;
 			right: 36rpx;
 			display: flex;
 			display: flex;
 			flex-direction: column;
 			flex-direction: column;
 			align-items: center;
 			align-items: center;
+			z-index: 9;
 
 
 			.side-item {
 			.side-item {
 				width: 96rpx;
 				width: 96rpx;
 				height: 96rpx;
 				height: 96rpx;
-				background: linear-gradient(0deg, #388BFF 0%, #388BFF 100%);
-				box-shadow: inset 0rpx 4rpx 8rpx 0rpx rgba(255, 255, 255, 0.25), inset 0rpx -6rpx 8rpx 0rpx rgba(255, 255, 255, 0.25), 4rpx 8rpx 12rpx 0rpx rgba(88, 144, 239, 0.29);
-				border-radius: 110rpx 110rpx 110rpx 110rpx;
 				margin-bottom: 28rpx;
 				margin-bottom: 28rpx;
-				text-align: center;
-				line-height: 96rpx;
-
 				.icon {
 				.icon {
-					width: 38rpx;
-					height: 38rpx;
+					width: 100%;
+					height: 100%;
 				}
 				}
 
 
 				&:active {
 				&:active {

+ 0 - 503
pages_user/points.vue

@@ -1,503 +0,0 @@
-<template>
-	<view class="container">
-		<!-- 状态栏占位 -->
-		<scroll-view class="content" scroll-y>
-			<!-- 积分卡片 -->
-			<view class="points-card">
-				<view class="card-decoration">
-					<text class="star-icon">⭐</text>
-				</view>
-				<view class="card-content">
-					<view class="card-label">积分账户</view>
-					<view class="card-balance">{{ pointsData.balance || '0.00' }}</view>
-					<view class="card-pending">支出待入账: {{ pointsData.pendingExpense || '0.00' }}</view>
-					<view class="withdraw-btn" @click="goWithdraw">去提现</view>
-				</view>
-			</view>
-			
-			<!-- 筛选和汇总区域 -->
-			<view class="filter-summary-section">
-				<view class="filter-row">
-					<view class="date-picker" @click="showDatePicker = true">
-						<text>{{ selectedDate }}</text>
-						<text class="arrow-down">▾</text>
-					</view>
-					<view class="type-buttons">
-						<view class="type-btn" :class="{ active: incomeType === 'income' }" @click="switchType('income')">
-							收入
-						</view>
-						<view class="type-btn" :class="{ active: incomeType === 'expense' }" @click="switchType('expense')">
-							支出
-						</view>
-					</view>
-					<view class="total-amount">
-						收入{{ summaryData.totalIncome || '0.00' }}
-					</view>
-				</view>
-				<view class="type-filter" @click="showTypePicker = true">
-					<text>{{ selectedType || '全部类型' }}</text>
-					<text class="arrow-down">▾</text>
-				</view>
-			</view>
-			
-			<!-- 交易列表 -->
-			<view class="transaction-list">
-				<view class="transaction-item" v-for="(item, index) in transactionList" :key="index">
-					<view class="item-left">
-						<view class="item-title">{{ item.title }}</view>
-						<view class="item-time">{{ item.dateTime }}</view>
-					</view>
-					<view class="item-amount" :class="item.type">
-						{{ item.type === 'income' ? '+' : '-' }}{{ item.amount }}
-					</view>
-				</view>
-			</view>
-		</scroll-view>
-		
-		<!-- 日期选择弹窗 -->
-		<view class="date-picker-popup" v-if="showDatePicker" @click="showDatePicker = false">
-			<view class="picker-content" @click.stop>
-				<view class="picker-header">
-					<view class="picker-cancel" @click="showDatePicker = false">取消</view>
-					<view class="picker-title">选择年月</view>
-					<view class="picker-confirm" @click="confirmDate">确定</view>
-				</view>
-				<view class="picker-body">
-					<picker mode="date" fields="month" :value="tempDate" @change="onDateChange">
-						<view class="picker-item">
-							<text>{{ tempDate || '请选择年月' }}</text>
-						</view>
-					</picker>
-				</view>
-			</view>
-		</view>
-		
-		<!-- 类型选择弹窗 -->
-		<view class="type-picker-popup" v-if="showTypePicker" @click="showTypePicker = false">
-			<view class="picker-content" @click.stop>
-				<view class="picker-header">
-					<view class="picker-cancel" @click="showTypePicker = false">取消</view>
-					<view class="picker-title">选择类型</view>
-					<view class="picker-confirm" @click="confirmType">确定</view>
-				</view>
-				<view class="picker-body">
-					<view class="picker-item" 
-						:class="{ active: tempType === item.value }"
-						v-for="(item, index) in typeOptions" 
-						:key="index"
-						@click="tempType = item.value">
-						{{ item.label }}
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-import { getPointsList, getPointsInfo } from '@/api-js/points'
-export default {
-	data() {
-		return {
-			statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px',
-			showDatePicker: false,
-			showTypePicker: false,
-			selectedDate: '2025-12',
-			tempDate: '2025-12',
-			incomeType: 'income', // income: 收入, expense: 支出
-			selectedType: '全部类型',
-			tempType: '全部类型',
-			typeOptions: [
-				{ label: '全部类型', value: '全部类型' },
-				{ label: '医生座诊', value: '医生座诊' },
-				{ label: '科普讲座', value: '科普讲座' },
-				{ label: '用药调研', value: '用药调研' },
-				{ label: '科普短视频', value: '科普短视频' }
-			],
-			pointsData: {
-				balance: '320.00',
-				pendingExpense: '30.00'
-			},
-			summaryData: {
-				totalIncome: '600.00'
-			},
-			transactionList: []
-		}
-	},
-	onLoad() {
-		this.loadData()
-	},
-	onReachBottom() {
-		this.loadMore()
-	},
-	methods: {
-		goBack() {
-			uni.navigateBack()
-		},
-		goWithdraw() {
-			uni.navigateTo({
-				url: '/pages/user/withdraw'
-			})
-		},
-		onDateChange(e) {
-			this.tempDate = e.detail.value
-		},
-		confirmDate() {
-			this.selectedDate = this.tempDate
-			this.showDatePicker = false
-			this.loadData()
-		},
-		confirmType() {
-			this.selectedType = this.tempType
-			this.showTypePicker = false
-			this.loadData()
-		},
-		switchType(type) {
-			this.incomeType = type
-			this.loadData()
-		},
-		async loadData() {
-			try {
-				uni.showLoading({ title: '加载中...' })
-				const [infoRes, listRes] = await Promise.all([
-					getPointsInfo(),
-					getPointsList({
-						date: this.selectedDate,
-						type: this.incomeType,
-						category: this.selectedType === '全部类型' ? '' : this.selectedType,
-						page: 1,
-						pageSize: 20
-					})
-				])
-				uni.hideLoading()
-				
-				if (infoRes.code === 200 && infoRes.data) {
-					this.pointsData = {
-						balance: (infoRes.data.balance || 0).toFixed(2),
-						pendingExpense: (infoRes.data.pendingExpense || 0).toFixed(2)
-					}
-				}
-				
-				if (listRes.code === 200 && listRes.data) {
-					this.transactionList = listRes.data.list || this.getDefaultData()
-					this.summaryData = {
-						totalIncome: (listRes.data.totalIncome || 0).toFixed(2)
-					}
-				} else {
-					this.transactionList = this.getDefaultData()
-				}
-			} catch (e) {
-				uni.hideLoading()
-				console.error('加载数据失败', e)
-				this.transactionList = this.getDefaultData()
-			}
-		},
-		async loadMore() {
-			// 加载更多数据
-		},
-		getDefaultData() {
-			// 默认数据,根据图片中的示例
-			return [
-				{ title: '医生座诊', dateTime: '2021-07-29 19:55', amount: '300', type: 'income' },
-				{ title: '科普讲座', dateTime: '2021-07-29 19:55', amount: '300', type: 'income' }
-			]
-		}
-	}
-}
-</script>
-
-<style lang="scss" scoped>
-.container {
-	min-height: 100vh;
-	background: #f5f5f5;
-	display: flex;
-	flex-direction: column;
-}
-
-.status-bar {
-	width: 100%;
-	background: #fff;
-}
-
-.header {
-	position: relative;
-	height: 88rpx;
-	display: flex;
-	align-items: center;
-	justify-content: center;
-	background: #fff;
-	border-bottom: 1rpx solid #f0f0f0;
-	
-	.back-btn {
-		position: absolute;
-		left: 24rpx;
-		width: 40rpx;
-		height: 40rpx;
-		
-		image {
-			width: 100%;
-			height: 100%;
-		}
-	}
-	
-	.title {
-		font-size: 36rpx;
-		font-weight: bold;
-		color: #333;
-	}
-	
-	.header-right {
-		position: absolute;
-		right: 24rpx;
-		display: flex;
-		align-items: center;
-		gap: 16rpx;
-		
-		.more-icon {
-			font-size: 32rpx;
-			color: #333;
-		}
-	}
-}
-
-.content {
-	flex: 1;
-	background: #f5f5f5;
-}
-
-.points-card {
-	position: relative;
-	margin: 24rpx;
-	background: linear-gradient(135deg, #FF9800 0%, #FFC107 100%);
-	border-radius: 24rpx;
-	padding: 48rpx 32rpx;
-	overflow: hidden;
-	
-	.card-decoration {
-		position: absolute;
-		top: 20rpx;
-		right: 20rpx;
-		width: 120rpx;
-		height: 120rpx;
-		background: rgba(255, 255, 255, 0.2);
-		border-radius: 50%;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		
-		.star-icon {
-			font-size: 60rpx;
-		}
-	}
-	
-	.card-content {
-		position: relative;
-		z-index: 1;
-		
-		.card-label {
-			font-size: 28rpx;
-			color: rgba(255, 255, 255, 0.9);
-			margin-bottom: 16rpx;
-		}
-		
-		.card-balance {
-			font-size: 72rpx;
-			font-weight: bold;
-			color: #fff;
-			margin-bottom: 16rpx;
-		}
-		
-		.card-pending {
-			font-size: 24rpx;
-			color: rgba(255, 255, 255, 0.8);
-			margin-bottom: 32rpx;
-		}
-		
-		.withdraw-btn {
-			display: inline-block;
-			padding: 16rpx 48rpx;
-			background: #fff;
-			border-radius: 44rpx;
-			font-size: 28rpx;
-			color: #FF9800;
-			font-weight: 500;
-		}
-	}
-}
-
-.filter-summary-section {
-	background: #fff;
-	margin: 0 24rpx 24rpx;
-	border-radius: 16rpx;
-	padding: 24rpx;
-	
-	.filter-row {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		margin-bottom: 24rpx;
-		
-		.date-picker {
-			display: flex;
-			align-items: center;
-			gap: 8rpx;
-			font-size: 28rpx;
-			color: #333;
-			
-			.arrow-down {
-				font-size: 20rpx;
-				color: #999;
-			}
-		}
-		
-		.type-buttons {
-			display: flex;
-			gap: 16rpx;
-			
-			.type-btn {
-				padding: 12rpx 32rpx;
-				border-radius: 44rpx;
-				font-size: 26rpx;
-				background: #f5f5f5;
-				color: #333;
-				
-				&.active {
-					background: #FF9800;
-					color: #fff;
-				}
-			}
-		}
-		
-		.total-amount {
-			font-size: 28rpx;
-			color: #333;
-			font-weight: 500;
-		}
-	}
-	
-	.type-filter {
-		display: flex;
-		align-items: center;
-		gap: 8rpx;
-		font-size: 28rpx;
-		color: #333;
-		
-		.arrow-down {
-			font-size: 20rpx;
-			color: #999;
-		}
-	}
-}
-
-.transaction-list {
-	background: #fff;
-	margin: 0 24rpx 24rpx;
-	border-radius: 16rpx;
-	padding: 24rpx;
-}
-
-.transaction-item {
-	display: flex;
-	align-items: center;
-	justify-content: space-between;
-	padding: 24rpx 0;
-	border-bottom: 1rpx solid #f0f0f0;
-	
-	&:last-child {
-		border-bottom: none;
-	}
-	
-	.item-left {
-		flex: 1;
-		
-		.item-title {
-			font-size: 30rpx;
-			color: #333;
-			margin-bottom: 8rpx;
-		}
-		
-		.item-time {
-			font-size: 24rpx;
-			color: #999;
-		}
-	}
-	
-	.item-amount {
-		font-size: 32rpx;
-		font-weight: bold;
-		
-		&.income {
-			color: #FF5030;
-		}
-		
-		&.expense {
-			color: #333;
-		}
-	}
-}
-
-.date-picker-popup,
-.type-picker-popup {
-	position: fixed;
-	top: 0;
-	left: 0;
-	right: 0;
-	bottom: 0;
-	background: rgba(0, 0, 0, 0.5);
-	z-index: 999;
-	display: flex;
-	align-items: flex-end;
-}
-
-.picker-content {
-	width: 100%;
-	background: #fff;
-	border-radius: 24rpx 24rpx 0 0;
-	
-	.picker-header {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		padding: 24rpx;
-		border-bottom: 1rpx solid #f0f0f0;
-		
-		.picker-cancel {
-			font-size: 30rpx;
-			color: #666;
-		}
-		
-		.picker-title {
-			font-size: 32rpx;
-			font-weight: bold;
-			color: #333;
-		}
-		
-		.picker-confirm {
-			font-size: 30rpx;
-			color: #FF9800;
-		}
-	}
-	
-	.picker-body {
-		padding: 24rpx;
-		max-height: 600rpx;
-		overflow-y: auto;
-		
-		.picker-item {
-			padding: 24rpx 0;
-			font-size: 30rpx;
-			color: #333;
-			border-bottom: 1rpx solid #f0f0f0;
-			
-			&:last-child {
-				border-bottom: none;
-			}
-			
-			&.active {
-				color: #FF9800;
-				font-weight: bold;
-			}
-		}
-	}
-}
-</style>

BIN
static/image/btn_add.png


BIN
static/image/btn_data.png


BIN
static/image/icon_camera1.png


+ 22 - 1
utils/common.js

@@ -1,4 +1,5 @@
 import {checkLogin} from '@/api/user'
 import {checkLogin} from '@/api/user'
+import {dicts} from '@/api/common.js'
 import dayjs from 'dayjs'
 import dayjs from 'dayjs'
 var isEmpty =function(obj) {
 var isEmpty =function(obj) {
 	if (typeof obj == "undefined" || obj == null || obj == "") {
 	if (typeof obj == "undefined" || obj == null || obj == "") {
@@ -515,6 +516,25 @@ var formatSalesNum=function(saleNum) {
 	}
 	}
 }
 }
 
 
+var getDicts= function(type) {
+	return new Promise((resolve, reject) => {
+		dicts(type).then(
+			res => {
+				if(res.code==200){
+					const resData =res.data||[]
+					resolve(resData)
+					// uni.setStorageSync('dicts',JSON.stringify(res));
+				}else{
+					resolve([])
+				}
+			},
+			rej => {
+				resolve([])
+			}
+		);
+	});
+}
+
 module.exports = {
 module.exports = {
 		formatDate:formatDate,
 		formatDate:formatDate,
         isEmpty : isEmpty,
         isEmpty : isEmpty,
@@ -546,6 +566,7 @@ module.exports = {
 		subString:subString,
 		subString:subString,
 		checkCompanyUserLoginState:checkCompanyUserLoginState,
 		checkCompanyUserLoginState:checkCompanyUserLoginState,
 		formatSalesNum: formatSalesNum,
 		formatSalesNum: formatSalesNum,
-		getUrl:getUrl
+		getUrl:getUrl,
+		getDicts:getDicts
 		
 		
 };
 };