Bläddra i källkod

Signed-off-by: 李妹妹 <1639016684@qq.com>

李妹妹 1 månad sedan
förälder
incheckning
5ae4498da9
62 ändrade filer med 2238 tillägg och 909 borttagningar
  1. 5 0
      api-js/account.js
  2. 5 0
      api-js/airClassroom.js
  3. 1 1
      api-js/bankCard.js
  4. 5 0
      api-js/onlineLecture.js
  5. 5 0
      api-js/password.js
  6. 5 0
      api-js/questionnaire.js
  7. 5 0
      api-js/statistics.js
  8. 1 1
      manifest.json
  9. 104 206
      pages.json
  10. 2 2
      pages/auth/login.vue
  11. 29 17
      pages/home/index.vue
  12. 1 1
      pages/task/index.vue
  13. 7 7
      pages/user/index.vue
  14. 42 23
      pages_echarts/statistics.vue
  15. 2 2
      pages_live/card.vue
  16. 1 1
      pages_live/healthfiles.vue
  17. 1 1
      pages_live/lecture.vue
  18. 2 2
      pages_live/lesson.vue
  19. 1 1
      pages_live/lessonDetail.vue
  20. 5 0
      pages_task/activityDetail.vue
  21. 79 28
      pages_task/airClassroom.vue
  22. 84 21
      pages_task/caseCollection.vue
  23. 41 22
      pages_task/completeTask.vue
  24. 5 0
      pages_task/medicationSurvey.vue
  25. 92 43
      pages_task/onlineLecture.vue
  26. 380 0
      pages_task/questionnaire.vue
  27. 516 0
      pages_task/questionnaireForm.vue
  28. 66 36
      pages_task/science.vue
  29. 5 0
      pages_task/taskCompleteSuccess.vue
  30. 5 0
      pages_task/taskDetail.vue
  31. 115 127
      pages_user/addBankCard.vue
  32. 57 55
      pages_user/bankCard.vue
  33. 65 38
      pages_user/certification.vue
  34. 2 2
      pages_user/certificationExample.vue
  35. 5 12
      pages_user/certificationInfo.vue
  36. 64 76
      pages_user/editBankCard.vue
  37. 261 0
      pages_user/forgetPassword.vue
  38. 19 16
      pages_user/points.vue
  39. 3 3
      pages_user/practiceCertificateExample.vue
  40. 5 12
      pages_user/serviceAgreement.vue
  41. 6 13
      pages_user/serviceAgreementDetail.vue
  42. 44 44
      pages_user/serviceOrder.vue
  43. 42 45
      pages_user/serviceOrderDetail.vue
  44. 43 39
      pages_user/withdraw.vue
  45. 5 12
      pages_user/withdrawSuccess.vue
  46. BIN
      static/image/bg_invitecard.png
  47. BIN
      static/image/bg_login.png
  48. BIN
      static/image/bg_qestion.png
  49. BIN
      static/image/bg_tab_login.png
  50. BIN
      static/image/bg_tab_login2.png
  51. 0 0
      static/image/calendar.png
  52. BIN
      static/image/img_confirmed.png
  53. BIN
      static/image/img_example1.png
  54. BIN
      static/image/img_example2.png
  55. BIN
      static/image/img_example3.png
  56. BIN
      static/image/img_example4.png
  57. BIN
      static/image/img_example5.png
  58. BIN
      static/image/img_nocard.png
  59. BIN
      static/image/img_renzheng.png
  60. BIN
      static/image/my_heads_icon64 (1).png
  61. BIN
      static/image/my_heads_icon64.png
  62. BIN
      static/image/top_bg.png

+ 5 - 0
api-js/account.js

@@ -25,3 +25,8 @@ export function sendVerifyCode(data) {
 
 
 
+
+
+
+
+

+ 5 - 0
api-js/airClassroom.js

@@ -34,3 +34,8 @@ export function uploadFile(data) {
 
 
 
+
+
+
+
+

+ 1 - 1
api-js/bankCard.js

@@ -12,7 +12,7 @@ export function getBankCardDetail(data) {
 }
 
 // 添加银行卡
-export function addBankCard(data) {
+export function addBankCard1(data) {
 	return request('/store/app/bankCard/add', data, 'POST', 'application/json;charset=UTF-8');
 }
 

+ 5 - 0
api-js/onlineLecture.js

@@ -29,3 +29,8 @@ export function continueBroadcast(data) {
 
 
 
+
+
+
+
+

+ 5 - 0
api-js/password.js

@@ -20,3 +20,8 @@ export function resetPassword(data) {
 
 
 
+
+
+
+
+

+ 5 - 0
api-js/questionnaire.js

@@ -20,3 +20,8 @@ export function submitQuestionnaire(data) {
 
 
 
+
+
+
+
+

+ 5 - 0
api-js/statistics.js

@@ -20,3 +20,8 @@ export function exportStatistics(data) {
 
 
 
+
+
+
+
+

+ 1 - 1
manifest.json

@@ -50,7 +50,7 @@
     "quickapp" : {},
     /* 小程序特有相关 */
     "mp-weixin" : {
-        "appid" : "wxd70f99287830cb51",
+        "appid" : "wxd56333375d59f1b8",
         "lazyCodeLoading" : "requiredComponents",
         "setting" : {
             "urlCheck" : false,

+ 104 - 206
pages.json

@@ -181,217 +181,34 @@
 				    "style" :                                                                                    
 				    {
 				        "navigationBarTitleText": "病例征集",
+						"navigationStyle": "custom",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				{
+				    "path" : "questionnaire",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "问卷调查",
+						"app-plus": {
+							"titleNView": false
+						}
+				    }
+				},
+				{
+				    "path" : "questionnaireForm",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "问卷调查",
+						"navigationStyle": "custom",
 						"app-plus": {
 							"titleNView": false
 						}
 				    }
 				}
-				// {
-				//     "path" : "index/medicatedFoodList",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "药膳食疗",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				// {
-				//     "path" : "index/medicatedFoodDetails",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "药膳食疗",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				
-				// {
-				//     "path" : "index/vesselList",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "经络穴位",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				// {
-				//     "path" : "index/vesselDetails",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "经络穴位",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				// {
-				//     "path" : "index/questionsList",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "问答专区",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				// {
-				//     "path" : "index/questionsDetails",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "问答专区",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				// {
-				//     "path" : "index/diseaseList",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "疾病列表",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				// {
-				//     "path" : "index/diseaseDetails",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "疾病",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				
-				// {
-				//     "path" : "index/chineseMedicineList",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "中药图解",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				// {
-				//     "path" : "index/chineseMedicineDetails",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "中药图解",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				
-				// {
-				//     "path" : "index/famousPrescribeList",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "名方今用",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				// {
-				//     "path" : "index/famousPrescribeDetails",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "名方今用",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				
-					
-				// {
-				//     "path" : "index/test",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "测一测",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				// {
-				//     "path" : "index/testList",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "测一测",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				// {
-				//     "path" : "index/testDetails",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "测一测",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				// {
-				//     "path" : "index/testResult",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "测试结果",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				// {
-				//     "path" : "index/articleList",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "健康知识",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				// {
-				//     "path" : "index/articleDetails",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "文章详情",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				
-				// {
-				//     "path" : "index/doctorArticleList",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "康复医案",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// },
-				// {
-				//     "path" : "index/doctorArticleDetails",
-				//     "style" :                                                                                    
-				//     {
-				//         "navigationBarTitleText": "康复医案",
-				// 		"app-plus": {
-				// 			"titleNView": false
-				// 		}
-				//     }
-				// }
+			
 			]
 		},
 		
@@ -407,6 +224,87 @@
 						"enablePullDownRefresh": false
 					}
 					
+				},
+				{
+					"path" : "withdraw",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "提现",
+						"enablePullDownRefresh": false
+					}
+					
+				},
+				{
+					"path" : "withdrawSuccess",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "完成任务",
+						"enablePullDownRefresh": false
+					}
+					
+				},
+				{
+					"path" : "bankCard",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "我的银行卡",
+						"enablePullDownRefresh": false
+					}
+					
+				},
+				{
+					"path" : "addBankCard",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "添加银行卡",
+						"enablePullDownRefresh": false
+					}
+					
+				},
+				{
+					"path" : "editBankCard",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "编辑银行卡",
+						"enablePullDownRefresh": false
+					}
+					
+				},
+				{
+					"path" : "serviceOrder",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "服务单",
+						"enablePullDownRefresh": false
+					}
+					
+				},
+				{
+					"path" : "serviceOrderDetail",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "服务单详情",
+						"enablePullDownRefresh": false
+					}
+					
+				},
+				{
+					"path" : "serviceAgreement",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "服务协议",
+						"enablePullDownRefresh": false
+					}
+					
+				},
+				{
+					"path" : "forgetPassword",
+					"style" :                                                                                    
+					{
+						"navigationBarTitleText": "设置密码",
+						"enablePullDownRefresh": false
+					}
+					
 				},
 				{
 					"path" : "certification",

+ 2 - 2
pages/auth/login.vue

@@ -1,7 +1,7 @@
 <template>
   <view class="container">
     <!-- #ifdef MP-WEIXIN -->
-	<image class="bg" src="@/static/image/bg_login.png" mode="widthFix"></image>
+	<image class="bg" src="@/static/image/bg_login.svg" mode="widthFix"></image>
     <view class="force-login-wrap">
 		<view :style="{height:menuButtonInfo.height,marginTop:menuButtonInfo.top}" class="backImg" >
 			<image @tap="goBack()" src="@/static/images/back.png"></image>
@@ -11,7 +11,7 @@
 			<view class="login-notice">仅限特定人群使用,登录后可体验更多功能</view>
 		</view>
       <view class="force-login__content">
-		  <image class="bg-type" :src="current==0?'/static/image/bg_tab_login.png':'/static/image/bg_tab_login2.png'" mode="widthFix"></image>
+		  <image class="bg-type" :src="current==0?'/static/image/bg_tab_login.svg':'/static/image/bg_tab_login2.svg'" mode="widthFix"></image>
 		<view class="logintype">
 			<view :class="current==0 ? 'logintype-item active':'logintype-item'" @click="changeType(0)">验证码登录</view>
 			<view :class="current==1 ? 'logintype-item active':'logintype-item'" @click="changeType(1)">密码登录</view>

+ 29 - 17
pages/home/index.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="content">
 		<!-- 背景图片 -->
-		<image class="bg" src="@/static/image/top_bg.png" mode="widthFix"></image>
+		<image class="bg" src="@/static/image/top_bg.svg" mode="widthFix"></image>
 		<view>
 			<view class="top-inner">
 				<view class="fixed-top-box" :style="{ background: bgColor ,paddingBottom:top>0?'20rpx':''}">
@@ -65,7 +65,7 @@
 				</view>
 			</view>
 			<view class="title-box">
-				<u-tabs :list="livetabList"
+				<u-tabs :list="articletabList"
 					: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>
@@ -74,7 +74,7 @@
 				<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>
+							<image class="bg" mode="aspectFill" src="@/static/image/bg_invitecard.svg"></image>
 							<view class="views">
 								<image mode="aspectFill" src="@/static/image/icon_goon.png"></image>
 								<view class="status">进行中</view>
@@ -96,9 +96,9 @@
 							</view>
 						</view>
 					</view>
-					<view class="article" @click="navTo('/pages_index/index/doctorArticleDetails?articleId=')">
+					<view class="article" @click="navTo('/pages_live/addForm')">
 						<view class="image-box">
-							<image class="bg" mode="aspectFill" src="@/static/image/bg_invitecard.png"></image>
+							<image class="bg" mode="aspectFill" src="@/static/image/bg_invitecard.svg"></image>
 							<view class="views">
 								<image mode="aspectFill" src="@/static/image/icon_tobestart.png"></image>
 								<view class="status">待开始</view>
@@ -120,9 +120,9 @@
 							</view>
 						</view>
 					</view>
-					<view class="article" @click="navTo('/pages_index/index/doctorArticleDetails?articleId=')">
+					<view class="article" @click="navTo('/pages_live/addForm')">
 						<view class="image-box">
-							<image class="bg" mode="aspectFill" src="@/static/image/bg_invitecard.png"></image>
+							<image class="bg" mode="aspectFill" src="@/static/image/bg_invitecard.svg"></image>
 							<view class="views">
 								<image mode="aspectFill" src="@/static/image/icon_goon.png"></image>
 								<view class="status">进行中</view>
@@ -168,7 +168,7 @@
 				<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>
+							<image class="bg" mode="aspectFill" src="@/static/image/bg_invitecard.svg"></image>
 							<view class="zhibo">
 								<image mode="aspectFill" src="@/static/image/icon_video.png"></image>
 							</view>
@@ -189,9 +189,9 @@
 							</view>
 						</view>
 					</view>
-					<view class="article" @click="navTo('/pages_index/index/doctorArticleDetails?articleId=')">
+					<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>
+							<image class="bg" mode="aspectFill" src="@/static/image/bg_invitecard.svg"></image>
 							<view class="zhibo">
 								<image mode="aspectFill" src="@/static/image/icon_video.png"></image>
 							</view>
@@ -212,9 +212,9 @@
 							</view>
 						</view>
 					</view>
-					<view class="article" @click="navTo('/pages_index/index/doctorArticleDetails?articleId=')">
+					<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>
+							<image class="bg" mode="aspectFill" src="@/static/image/bg_invitecard.svg"></image>
 							<view class="zhibo">
 								<image mode="aspectFill" src="@/static/image/icon_video.png"></image>
 							</view>
@@ -318,20 +318,32 @@
 				doctocArticles: [], //养生讲堂
 				articles: [], //养生干货
 				livetabList: [{
-						name: '养生讲堂'
+						name: '推荐'
+					},
+					{
+						name: '内分泌'
 					},
 					{
-						name: '健康管理'
+						name: '肾病'
 					},
 					{
-						name: '养生滋补'
+						name: '心血管'
+					},
+					{
+						name: '风湿免疫'
 					}
 				], //养生讲堂TAB
 				articletabList: [{
-						name: '健康案例分享'
+						name: '推荐'
+					},
+					{
+						name: '待开始'
+					},
+					{
+						name: '进行中'
 					},
 					{
-						name: '药事服务'
+						name: '看回放'
 					}
 				], //文章TAB
 				// 状态栏的高度

+ 1 - 1
pages/task/index.vue

@@ -32,7 +32,7 @@
 					{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:'/pages_task/medicationSurvey'},
-					{name:'问卷调查',num:0,icon:'/static/image/icon_task_wjdc.png',url:'/pages_task/airClassroom'},
+					{name:'问卷调查',num:0,icon:'/static/image/icon_task_wjdc.png',url:'/pages_task/questionnaire'},
 					{name:'科普创作',num:0,icon:'/static/image/icon_task_kpcz.png',url:'/pages_task/science'},
 				],
 				typeOptions:[],

+ 7 - 7
pages/user/index.vue

@@ -1,14 +1,14 @@
 <template>
 	<view>
 		<view class="top-cont">
-			<image class="bg" src="@/static/image/top_bg.png" mode="widthFix"></image>
+			<image class="bg" src="@/static/image/top_bg.svg" mode="widthFix"></image>
 			<view class="top-inner">			
 				<!-- 这里是状态栏 -->
 				<view class="status_bar" :style="{height: statusBarHeight}"></view>
 				<view class="user-info">
 					<view class="left">
 						<view class="head-img">
-							<image :src="user.avatar==null?'/static/image/my_heads_icon64.png':user.avatar" mode="aspectFill"></image>
+							<image :src="user.avatar==null?'/static/image/my_heads_icon64.svg':user.avatar" mode="aspectFill"></image>
 						</view>
 						<view class="name-phone">
 							<view class="x-f">
@@ -50,7 +50,7 @@
 					</view>
 				</view>
 				<view class="vipbox" @click="goVip">
-					<image src="@/static/image/img_renzheng.png" mode="widthFix"></image>
+					<image src="@/static/image/img_renzheng.svg" mode="widthFix"></image>
 				</view>
 				
 				<view class="content">
@@ -88,9 +88,9 @@
 				afterSalesCount:0,
 				tabs:[
 					{name:'我的积分',num:12,icon:'/static/image/icon_my_points.png',url:'/pages_user/points'},
-					{name:'服务单确认',num:3,icon:'/static/image/icon_my_servicelist.png',url:''},
-					{name:'银行卡',num:8,icon:'/static/image/icon_my_card.png',url:''},
-					{name:'设置密码',num:0,icon:'/static/image/icon_my_password.png',url:''},
+					{name:'服务单确认',num:3,icon:'/static/image/icon_my_servicelist.png',url:'/pages_user/serviceOrder'},
+					{name:'银行卡',num:8,icon:'/static/image/icon_my_card.png',url:'/pages_user/bankCard'},
+					{name:'设置密码',num:0,icon:'/static/image/icon_my_password.png',url:'/pages_user/forgetPassword'},
 					{name:'用户协议',num:0,icon:'/static/image/icon_my_useragreement.png',url:'/web/userAgreement'},
 				],
 				user:{
@@ -260,7 +260,7 @@
 		width: 100%;
 		height: 600rpx;
 		position: relative;
-		// background-image: url(../../static/image/top_bg.png);
+		// background-image: url(../../static/image/top_bg.svg);
 		// background-repeat:no-repeat;
 		// background-size:100%;
 		.bg{

+ 42 - 23
pages_echarts/statistics.vue

@@ -89,7 +89,9 @@
 			<view class="filter-content" @click.stop>
 				<view class="filter-header">
 					<view class="filter-title">筛选</view>
-					<view class="filter-close-btn" @click="closeFilter">×</view>
+					<view class="filter-close-btn" @click="closeFilter">
+						<image class="w44 h44" src="@/static/image/icon_cross.png" mode=""></image>
+					</view>
 				</view>
 				
 				<!-- 任务类型筛选 -->
@@ -613,30 +615,37 @@ export default {
 	width: 100%;
 	background: #fff;
 	border-radius: 24rpx 24rpx 0 0;
-	padding: 24rpx;
+	padding: 24rpx 32rpx;
 	max-height: 80vh;
 	overflow-y: auto;
 	
 	.filter-header {
 		display: flex;
 		align-items: center;
-		justify-content: space-between;
-		margin-bottom: 32rpx;
-		
+		justify-content: center;
+		// padding: 32rpx 24rpx;
+		position: relative;
+		height: 80rpx;
 		.filter-title {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
 			font-size: 32rpx;
-			font-weight: bold;
-			color: #333;
+			color: #333333;
 		}
 		
 		.filter-close-btn {
+			position: absolute;
+			right:0;
+			top: 50%;
+			transform: translateY(-50%);
+			font-size: 48rpx;
+			color: #999;
 			width: 48rpx;
 			height: 48rpx;
 			display: flex;
 			align-items: center;
 			justify-content: center;
-			font-size: 40rpx;
-			color: #999;
+			line-height: 1;
 		}
 	}
 	
@@ -648,27 +657,33 @@ export default {
 		}
 		
 		.group-label {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
 			font-size: 28rpx;
-			font-weight: bold;
-			color: #333;
-			margin-bottom: 20rpx;
+			color: #333333;
+			margin-bottom: 24rpx;
 		}
 		
 		.filter-tags {
 			display: flex;
 			flex-wrap: wrap;
-			gap: 16rpx;
+			gap: 24rpx;
 			
 			.filter-tag {
+				width: calc((100% - 48rpx) / 3);
 				padding: 12rpx 24rpx;
-				background: #f5f5f5;
-				border-radius: 8rpx;
-				font-size: 26rpx;
+				background: #F7F8FA;
+				border-radius: 70rpx 70rpx 70rpx 70rpx;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 28rpx;
 				color: #666;
 				border: 1rpx solid transparent;
+				text-align: center;
+				box-sizing: border-box;
 				
 				&.active {
-					background: #E6F7FF;
+					background: rgba(56,139,255,0.15);
 					color: #388BFF;
 					border-color: #388BFF;
 				}
@@ -681,27 +696,31 @@ export default {
 		gap: 24rpx;
 		margin-top: 40rpx;
 		padding-top: 24rpx;
-		border-top: 1rpx solid #f0f0f0;
 		
 		.reset-btn,
 		.confirm-btn {
 			flex: 1;
-			height: 88rpx;
-			line-height: 88rpx;
+			height: 80rpx;
+			line-height: 80rpx;
 			text-align: center;
 			border-radius: 8rpx;
-			font-size: 30rpx;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 28rpx;
 		}
 		
 		.reset-btn {
 			background: #fff;
-			color: #666;
-			border: 1rpx solid #e0e0e0;
+			color: #388BFF;
+			border-radius: 200rpx 200rpx 200rpx 200rpx;
+			border: 2rpx solid #388BFF;
 		}
 		
 		.confirm-btn {
 			background: #388BFF;
 			color: #fff;
+			border-radius: 200rpx 200rpx 200rpx 200rpx;
+			border: 2rpx solid #388BFF;
 		}
 	}
 }

+ 2 - 2
pages_live/card.vue

@@ -2,7 +2,7 @@
 	<view class="content">
 		<view class="inner">
 			<view class="bg">
-				<image class="w622 h622" src="@/static/image/bg_invitecard.png" mode=""></image>
+				<image class="w622 h622" src="@/static/image/bg_invitecard.svg" mode=""></image>
 				<view class="infor">
 					<view class="title one-t">康复医学概论</view>
 					<view class="name-title">
@@ -43,7 +43,7 @@
 	export default {
 		data() {
 			return {
-			 bgImg: "/static/image/bg_invitecard.png",
+			 bgImg: "/static/image/bg_invitecard.svg",
 			      doctorIcon: "/static/image/icon_doctor_fill.png",
 			      qrCodeImg: "/static/image/icon_doctor_fill.png", // 替换为真实二维码
 			      wechatIcon: "/static/image/icon_share_wechat.png",

+ 1 - 1
pages_live/healthfiles.vue

@@ -1,6 +1,6 @@
 <template>
 	<view class="hb column hidden container">
-		<image class="bg" src="https://user.test.ylrztop.com/images/jkda_top_bg.png" mode="widthFix"></image>
+		<image class="bg" src="https://user.test.ylrztop.com/images/jkda_top_bg.svg" mode="widthFix"></image>
 		<view :style="{height: statusBarHeight,background: bgColor }"></view>
 		<u-navbar title="健康档案" titleStyle="font-weight: bold;" @rightClick="rightClick" :autoBack="true"
 			:bg-color="bgColor">

+ 1 - 1
pages_live/lecture.vue

@@ -3,7 +3,7 @@
 		<view class="top-content">
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="../../static/images/search.png" mode=""></image>
+					<u-icon name="search" size="24" color="#C8C9CC"></u-icon>
 					<input type="text" v-model="searchValue" placeholder="请输入关键字或作者" confirm-type="search"
 						@confirm="doSearch"
 						placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />

+ 2 - 2
pages_live/lesson.vue

@@ -3,7 +3,7 @@
 		<view class="top-content">
 			<view class="search-cont">
 				<view class="inner">
-					<image class="icon-search" src="../../static/images/search.png" mode=""></image>
+					<u-icon name="search" size="24" color="#C8C9CC"></u-icon>
 					<input type="text" v-model="searchValue" placeholder="请输入关键字或作者" confirm-type="search"
 						@confirm="doSearch"
 						placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
@@ -229,7 +229,7 @@
 			// 查看详情
 			showDetail(item) {
 				uni.navigateTo({
-					url: './detail?articleId=' + item.articleId
+					url: '/pages_live/lessonDetail?articleId=87'
 				})
 			}
 		}

+ 1 - 1
pages_live/lessonDetail.vue

@@ -21,7 +21,7 @@
 				<view class="text-box">本内容仅代表嘉宾观点,不代表本站立场。仅供医学药学专业人士查看,不构成实际治疗建议。</view>
 			</view>
 			<view class="actor x-f">
-				<image class="w88 h88" src="@/static/image/my_heads_icon64.png" mode=""></image>
+				<image class="w88 h88" src="@/static/image/my_heads_icon64.svg" mode=""></image>
 				<view class="infor y-start">
 					<view class="name">王小明 主任医师</view>
 					<view class="position">江南大学附属医院·肾内科</view>

+ 5 - 0
pages_task/activityDetail.vue

@@ -292,3 +292,8 @@ export default {
 
 
 
+
+
+
+
+

+ 79 - 28
pages_task/airClassroom.vue

@@ -27,13 +27,17 @@
 					</view>
 				</view>
 				<view class="card-tags">
+				<view class="x-f">
 					<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">
+					<view class="tag-item category" v-if="item.category">
 						{{ item.category }}
 					</view>
+				</view>
+				
 					<view class="tag-item points-tag">
 						{{ item.points }}积分
 					</view>
@@ -80,20 +84,22 @@
 			<view class="filter-content" @click.stop>
 				<view class="filter-header">
 					<view class="filter-title">筛选</view>
-					<view class="filter-close-btn" @click="closeFilter">×</view>
+					<view class="filter-close-btn" @click="closeFilter">
+						<image class="w44 h44" src="@/static/image/icon_cross.png" mode=""></image>
+					</view>
 				</view>
 				
 				<!-- 申请时间筛选 -->
 				<view class="filter-group">
 					<view class="group-label">申请时间</view>
 					<view class="date-range-inputs">
-						<picker mode="date" :value="tempDateRange.startDate" @change="onStartDateChange">
+						<picker  style="flex:1" 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">
+						<picker  style="flex:1" mode="date" :value="tempDateRange.endDate" @change="onEndDateChange">
 							<view class="date-input" :class="{ placeholder: !tempDateRange.endDate }">
 								{{ tempDateRange.endDate || '结束时间' }}
 							</view>
@@ -381,28 +387,31 @@ export default {
 		flex: 1;
 		display: flex;
 		align-items: center;
-		gap: 32rpx;
+		gap: 48rpx;
 		overflow-x: auto;
 		
 		.tab-item {
 			padding: 24rpx 0;
 			font-size: 28rpx;
-			color: #666;
+			color: #969799;
 			white-space: nowrap;
 			position: relative;
 			
 			&.active {
-				color: #388BFF;
-				font-weight: bold;
+				font-weight: 500;
+				font-size: 28rpx;
+				color: #333333;
 				
 				&::after {
 					content: '';
 					position: absolute;
 					bottom: 0;
-					left: 0;
-					right: 0;
-					height: 4rpx;
+					left: 50%;
+					transform: translateX(-50%);
+					width: 56rpx;
+					height: 6rpx;
 					background: #388BFF;
+					border-radius: 3rpx 3rpx 3rpx 3rpx;
 				}
 			}
 		}
@@ -486,15 +495,26 @@ export default {
 		
 		.tag-item {
 			padding: 8rpx 16rpx;
-			background:#FFFAF4;
+			background: #f5f5f5;
 			border-radius: 8rpx;
 			font-size: 24rpx;
-			color: #5D410F;
-			display: flex;
-			align-items: center;
+			color: #666;
+			&.category{
+				border-radius: 0rpx 8rpx 8rpx 0rpx;
+			    border: 2rpx solid #F3D191;
+				background: #FFE9C7;
+				color:#5D410F
+			}
 			&.video-tag {
 				background: linear-gradient( 90deg, #FFE9C7 0%, #F3D091 100%);
-				
+				border-radius:8rpx 0rpx 0rpx 8rpx;
+				border: 2rpx solid #F3D191;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 24rpx;
+				color: #5D410F;
+				display: flex;
+				align-items: center;
 				.tag-icon {
 					margin-right: 4rpx;
 				}
@@ -504,6 +524,7 @@ export default {
 				border: 1rpx solid #388BFF;
 				color: #388BFF;
 				background: transparent;
+				
 			}
 		}
 	}
@@ -566,7 +587,7 @@ export default {
 			.action-btn {
 				padding: 12rpx 32rpx;
 				background: #388BFF;
-				border-radius: 8rpx;
+				border-radius: 34rpx 34rpx 34rpx 34rpx;
 				font-size: 28rpx;
 				color: #fff;
 			}
@@ -590,28 +611,35 @@ export default {
 	width: 100%;
 	background: #fff;
 	border-radius: 24rpx 24rpx 0 0;
-	padding: 24rpx;
+	padding: 32rpx;
 	
 	.filter-header {
 		display: flex;
 		align-items: center;
-		justify-content: space-between;
-		margin-bottom: 32rpx;
+		justify-content: center;
+		// padding: 32rpx 24rpx;
+		position: relative;
 		
 		.filter-title {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
 			font-size: 32rpx;
-			font-weight: bold;
-			color: #333;
+			color: #333333;
 		}
 		
 		.filter-close-btn {
+			position: absolute;
+			right: 24rpx;
+			top: 50%;
+			transform: translateY(-50%);
+			font-size: 48rpx;
+			color: #999;
 			width: 48rpx;
 			height: 48rpx;
 			display: flex;
 			align-items: center;
 			justify-content: center;
-			font-size: 40rpx;
-			color: #999;
+			line-height: 1;
 		}
 	}
 	
@@ -646,12 +674,35 @@ export default {
 				}
 			}
 			
-			.date-separator {
-				font-size: 28rpx;
-				color: #666;
+		.date-separator {
+			font-size: 28rpx;
+			color: #666;
+		}
+	}
+	
+	.filter-tags {
+		display: flex;
+		flex-wrap: wrap;
+		gap: 16rpx;
+		
+		.filter-tag {
+			padding: 14rpx 36rpx;
+			background: #F7F8FA;
+			border-radius: 70rpx 70rpx 70rpx 70rpx;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 28rpx;
+			color: #333333;
+			border: 1rpx solid transparent;
+			
+			&.active {
+				background: rgba(56,139,255,0.15);
+				color: #388BFF;
+				border-color: #388BFF;
 			}
 		}
 	}
+}
 	
 	.filter-actions {
 		display: flex;
@@ -666,7 +717,7 @@ export default {
 			height: 88rpx;
 			line-height: 88rpx;
 			text-align: center;
-			border-radius: 8rpx;
+			border-radius: 200rpx 200rpx 200rpx 200rpx;
 			font-size: 30rpx;
 		}
 		

+ 84 - 21
pages_task/caseCollection.vue

@@ -1,5 +1,14 @@
 <template>
 	<view class="container">
+		<image class="bg" src="@/static/image/bg_qestion.svg" mode="widthFix"></image>
+		<view class="fixed-top-box" :style="{background: bgColor }">
+			<view class="status_bar" :style="{height: statusBarHeight}"></view>
+			<view class="back-box" @click="goBack">
+				<image src="@/static/image/back.png" mode=""></image>
+				<text class="title">病例征集</text>
+				<text></text>
+			</view>
+		</view>
 		<scroll-view class="content" scroll-y>
 			<!-- 表单标题 -->
 			<view class="form-header">
@@ -66,7 +75,7 @@
 					<picker mode="date" :value="formData.prescriptionDate" @change="onDateChange">
 						<view class="form-input picker-input" :class="{ placeholder: !formData.prescriptionDate }">
 							{{ formData.prescriptionDate || '请选择处方日期' }}
-							<text class="calendar-icon">📅</text>
+							<image class="w48 h48" src="@/static/image/calendar.png" mode=""></image>
 						</view>
 					</picker>
 				</view>
@@ -105,7 +114,7 @@
 							<view class="delete-btn" @click="removeImage(index)">×</view>
 						</view>
 						<view class="upload-item upload-placeholder" @click="chooseImage" v-if="formData.images.length < 2">
-							<text class="camera-icon">📷</text>
+							<image class="w48 h48" src="@/static/image/icon_camera1.png" mode=""></image>
 						</view>
 					</view>
 				</view>
@@ -122,6 +131,7 @@ import { submitCaseCollection } from '@/api-js/medicationSurvey'
 export default {
 	data() {
 		return {
+			top:0,
 			statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px',
 			activityId: '',
 			formData: {
@@ -140,6 +150,17 @@ export default {
 			this.activityId = options.activityId
 		}
 	},
+	onPageScroll(e) {
+		//console.log(e)
+		this.top = e.scrollTop;
+	},
+	computed: {
+		// 计算属性的 getter
+		bgColor: function() {
+			var top = this.top / 30;
+			return 'rgba(255, 255, 255,' + top + ')';
+		},
+	},
 	methods: {
 		goBack() {
 			uni.navigateBack()
@@ -247,15 +268,45 @@ export default {
 <style lang="scss" scoped>
 .container {
 	min-height: 100vh;
-	background: linear-gradient(180deg, #E6F3FF 0%, #FFFFFF 100%);
 	display: flex;
 	flex-direction: column;
+	.bg{
+		width: 100%;
+		position: absolute;
+		top: 0;
+		left: 0;
+	}
 }
 .status-bar {
 	width: 100%;
 	background: transparent;
 }
-
+.fixed-top-box{
+			width: 100%;
+			// background: linear-gradient(135deg, #66b2ef 0%, #0bb3f2 100%);
+			position: fixed;
+			top: 0;
+			left: 0;
+			z-index: 1000;
+			.back-box{
+				height: 88upx;
+				padding-left: 22upx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				padding: 0 24upx;
+				image{
+					width: 40upx;
+					height: 40upx;
+				}
+				.title{
+					font-family: PingFang SC, PingFang SC;
+					font-weight: 600;
+					font-size: 36rpx;
+					color: #333333;
+				}
+			}
+		}
 .header {
 	position: relative;
 	height: 88rpx;
@@ -297,38 +348,46 @@ export default {
 }
 
 .content {
+	margin-top:168rpx;
 	flex: 1;
 	padding: 24rpx;
+	box-sizing: border-box;
 }
 
 .form-header {
 	margin-bottom: 32rpx;
 	
 	.form-title {
-		font-size: 36rpx;
-		font-weight: bold;
-		color: #333;
-		margin-bottom: 16rpx;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 600;
+		font-size: 40rpx;
+		color: #333333;
+		margin-bottom: 32rpx;
+		text-align: center;
 	}
 	
 	.form-tips {
 		.tip-item {
-			font-size: 24rpx;
-			color: #666;
-			margin-bottom: 8rpx;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 28rpx;
+			color: #666666;
+			line-height: 44rpx;
+			text-align: center;
 		}
 	}
 }
 
 .form-section {
-	background: #fff;
-	border-radius: 16rpx;
-	padding: 24rpx;
+	padding-bottom: 160rpx;
+	
 }
 
 .form-item {
-	margin-bottom: 32rpx;
-	
+	background: #fff;
+	padding: 24rpx 32rpx;
+	margin-bottom: 20rpx;
+	border-radius: 16rpx;
 	&:last-child {
 		margin-bottom: 0;
 	}
@@ -347,16 +406,17 @@ export default {
 	}
 	
 	.form-input {
-		width: 100%;
-		height: 80rpx;
+		// width: 100%;
+		height: 72rpx;
 		padding: 0 24rpx;
-		background: #f5f5f5;
-		border-radius: 8rpx;
+		// background: #f5f5f5;
+		border-radius: 12rpx 12rpx 12rpx 12rpx;
+		border: 2rpx solid #F5F5F5;
 		font-size: 28rpx;
 		color: #333;
 		
 		&.placeholder {
-			color: #999;
+			color: #C8C9CC
 		}
 		
 		&.picker-input {
@@ -373,6 +433,7 @@ export default {
 	.radio-group,
 	.checkbox-group {
 		display: flex;
+		flex-direction: column;
 		gap: 48rpx;
 		
 		.radio-item,
@@ -438,6 +499,7 @@ export default {
 	right: 0;
 	height: 88rpx;
 	background: #388BFF;
+	border-radius: 200rpx 200rpx 200rpx 200rpx;
 	display: flex;
 	align-items: center;
 	justify-content: center;
@@ -445,6 +507,7 @@ export default {
 	color: #fff;
 	font-weight: 500;
 	z-index: 100;
+	margin:40rpx 32rpx;
 }
 </style>
 

+ 41 - 22
pages_task/completeTask.vue

@@ -74,9 +74,9 @@
 				</view>
 				<view class="form-tips">仅支持jpg/png文件,单个图片不超过2M</view>
 				<view class="upload-cover" @click="chooseCoverImage">
-					<image v-if="formData.coverImage" :src="formData.coverImage" mode="aspectFill"></image>
+					<image class="img" v-if="formData.coverImage" :src="formData.coverImage" mode="aspectFill"></image>
 					<view v-else class="upload-placeholder">
-						<text class="camera-icon">📷</text>
+						<image class="w48 h48" src="@/static/image/icon_camera1.png" mode=""></image>
 					</view>
 				</view>
 			</view>
@@ -106,7 +106,10 @@
 		</scroll-view>
 		
 		<!-- 提交按钮 -->
-		<view class="submit-btn" @click="handleSubmit">提交</view>
+		<view class="submit-box">
+			<view class="submit-btn" @click="handleSubmit">提交</view>
+		</view>
+		
 		
 		<!-- 分组选择弹窗 -->
 		<view class="picker-popup" v-if="showGroupPicker" @click="showGroupPicker = false">
@@ -408,13 +411,17 @@ export default {
 	flex: 1;
 	padding: 24rpx;
 	padding-bottom: 120rpx;
+	box-sizing: border-box;
 }
 
 .form-section {
 	background: #fff;
 	border-radius: 16rpx;
 	padding: 24rpx;
-	margin-bottom: 24rpx;
+	&:last-child{
+		border-bottom: 0;
+	}
+	// margin-bottom: 24rpx;
 	
 	.form-label {
 		display: flex;
@@ -437,15 +444,14 @@ export default {
 	
 	.form-input-wrapper {
 		position: relative;
-		
+		border-bottom: 1rpx solid #EBEDF0;
 		.form-input {
 			width: 100%;
 			min-height: 120rpx;
 			padding: 16rpx;
-			background: #f5f5f5;
-			border-radius: 8rpx;
 			font-size: 28rpx;
 			color: #333;
+			box-sizing: border-box;
 		}
 		
 		.char-count {
@@ -463,8 +469,7 @@ export default {
 		justify-content: space-between;
 		height: 80rpx;
 		padding: 0 24rpx;
-		background: #f5f5f5;
-		border-radius: 8rpx;
+		border-bottom: 1rpx solid #EBEDF0;
 		font-size: 28rpx;
 		color: #333;
 		
@@ -487,7 +492,7 @@ export default {
 		align-items: center;
 		justify-content: center;
 		
-		image {
+		.img {
 			width: 100%;
 			height: 100%;
 			border-radius: 8rpx;
@@ -547,8 +552,11 @@ export default {
 			align-items: center;
 			justify-content: center;
 			padding: 24rpx;
-			background: #E3F2FD;
-			border-radius: 8rpx;
+			background: rgba(56,139,255,0.08);
+			border-radius: 12rpx 12rpx 12rpx 12rpx;
+			border: 2rpx solid #388BFF;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
 			font-size: 28rpx;
 			color: #388BFF;
 			
@@ -559,23 +567,29 @@ export default {
 		}
 	}
 }
-
-.submit-btn {
+.submit-box{
 	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;
+	background: #fff;
 	z-index: 100;
+	padding: 24rpx 32rpx;
+	.submit-btn {
+		height: 88rpx;
+		background: #388BFF;
+		border-radius: 200rpx 200rpx 200rpx 200rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		font-size: 32rpx;
+		color: #fff;
+		font-weight: 500;
+		
+	}
 }
 
+
 .picker-popup {
 	position: fixed;
 	top: 0;
@@ -644,3 +658,8 @@ export default {
 
 
 
+
+
+
+
+

+ 5 - 0
pages_task/medicationSurvey.vue

@@ -455,3 +455,8 @@ export default {
 
 
 
+
+
+
+
+

+ 92 - 43
pages_task/onlineLecture.vue

@@ -3,12 +3,14 @@
 		<!-- 搜索栏 -->
 		<view class="search-bar">
 			<view class="search-input-wrapper">
-				<text class="search-icon">🔍</text>
+				<!-- <text class="search-icon"></text> -->
+				<u-icon name="search" size="24" color="#C8C9CC"></u-icon>
 				<input 
 					class="search-input" 
 					v-model="keyword" 
 					placeholder="请输入关键字"
 					@confirm="doSearch"
+					placeholder-class="placeholder"
 				/>
 			</view>
 		</view>
@@ -33,10 +35,11 @@
 				<view class="card-thumbnail">
 					<image class="thumbnail-img" :src="item.thumbnail" mode="aspectFill"></image>
 					<view class="thumbnail-status" v-if="item.status === 'inProgress'">
-						<text class="status-text">进行中</text>
+							<image mode="aspectFill" src="@/static/image/icon_goon.png"></image>
+							<view class="status">进行中</view>
 					</view>
 					<view class="thumbnail-date" v-else-if="item.scheduledTime">
-						<text class="date-icon">🕐</text>
+						<image mode="aspectFill" src="@/static/image/icon_tobestart.png"></image>
 						<text class="date-text">{{ item.scheduledTime }}</text>
 					</view>
 				</view>
@@ -70,14 +73,20 @@
 			<view class="channel-picker-content" @click.stop>
 				<view class="picker-header">
 					<view class="picker-title">选择开播渠道</view>
-					<view class="picker-close" @click="showChannelPicker = false">×</view>
+					<view class="picker-close" @click="showChannelPicker = false">
+						<image class="w32 h32" src="@/static/image/icon_cross.png" mode=""></image>
+					</view>
 				</view>
 				
 				<!-- 电脑浏览器开播 -->
 				<view class="channel-option">
-					<view class="option-icon">💻</view>
+					
 					<view class="option-content">
-						<view class="option-title">电脑浏览器开播</view>
+						<view class="x-f mb20">
+							<image class="w32 h32" mode="aspectFill" src="@/static/image/icon_live_pc.png"></image>
+							<view class="option-title">电脑浏览器开播</view>
+						</view>
+						
 						<view class="option-url-wrapper">
 							<text class="option-url">{{ broadcastUrl }}</text>
 							<view class="copy-btn" @click="copyUrl">复制链接</view>
@@ -88,9 +97,11 @@
 				
 				<!-- 微信小程序开播 -->
 				<view class="channel-option">
-					<view class="option-icon wechat">💬</view>
 					<view class="option-content">
-						<view class="option-title">微信小程序开播</view>
+						<view class="x-f mb20">
+							<image class="w32 h32" mode="aspectFill" src="@/static/image/icon_live_phone.png"></image>
+							<view class="option-title">微信小程序开播</view>
+						</view>
 						<view class="option-action">
 							<view class="enter-btn" @click="enterMiniProgram">立即进入</view>
 						</view>
@@ -205,7 +216,7 @@ export default {
 					{
 						id: 1,
 						title: '康复医学概论',
-						thumbnail: '/static/image/lecture1.png',
+						thumbnail: 'https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20240516/b091048293f142608f99eaf1b0b1510a.png',
 						category: '学术讲座',
 						type: '单人讲座',
 						points: '32.50',
@@ -215,7 +226,7 @@ export default {
 					{
 						id: 2,
 						title: '中医养生至冬病夏天治...',
-						thumbnail: '/static/image/lecture2.png',
+						thumbnail: 'https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20240516/b091048293f142608f99eaf1b0b1510a.png',
 						category: '学术讲座',
 						type: '单人讲座',
 						points: '32.50',
@@ -225,7 +236,7 @@ export default {
 					{
 						id: 3,
 						title: '康复医学概论',
-						thumbnail: '/static/image/lecture3.png',
+						thumbnail: 'https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20240516/b091048293f142608f99eaf1b0b1510a.png',
 						category: '学术讲座',
 						type: '单人讲座',
 						points: '32.50',
@@ -238,7 +249,7 @@ export default {
 					{
 						id: 4,
 						title: '康复医学概论',
-						thumbnail: '/static/image/lecture1.png',
+						thumbnail: 'https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20240516/b091048293f142608f99eaf1b0b1510a.png',
 						category: '学术讲座',
 						type: '单人讲座',
 						points: '32.50',
@@ -248,7 +259,7 @@ export default {
 					{
 						id: 5,
 						title: '康复医学概论',
-						thumbnail: '/static/image/lecture2.png',
+						thumbnail: 'https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20240516/b091048293f142608f99eaf1b0b1510a.png',
 						category: '学术讲座',
 						type: '单人讲座',
 						points: '32.50',
@@ -258,7 +269,7 @@ export default {
 					{
 						id: 6,
 						title: '康复医学概论',
-						thumbnail: '/static/image/lecture3.png',
+						thumbnail: 'https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20240516/b091048293f142608f99eaf1b0b1510a.png',
 						category: '学术讲座',
 						type: '单人讲座',
 						points: '32.50',
@@ -271,7 +282,11 @@ export default {
 	}
 }
 </script>
-
+<style lang="stylus">
+	.placeholder{
+				color: #C8C9CC !important;
+			}
+</style>
 <style lang="scss" scoped>
 .container {
 	min-height: 100vh;
@@ -335,7 +350,7 @@ export default {
 		display: flex;
 		align-items: center;
 		height: 72rpx;
-		background: #f5f5f5;
+		background: #F7F8FA;
 		border-radius: 36rpx;
 		padding: 0 24rpx;
 		
@@ -344,7 +359,6 @@ export default {
 			margin-right: 16rpx;
 			color: #999;
 		}
-		
 		.search-input {
 			flex: 1;
 			font-size: 28rpx;
@@ -387,6 +401,7 @@ export default {
 .content {
 	flex: 1;
 	padding: 24rpx;
+	box-sizing:border-box;
 }
 
 .lecture-card {
@@ -412,11 +427,24 @@ export default {
 		
 		.thumbnail-status {
 			position: absolute;
-			top: 8rpx;
-			left: 8rpx;
-			padding: 4rpx 12rpx;
-			background: #FF9800;
-			border-radius: 4rpx;
+			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;
+			};
 			
 			.status-text {
 				font-size: 20rpx;
@@ -426,18 +454,24 @@ export default {
 		
 		.thumbnail-date {
 			position: absolute;
-			top: 8rpx;
-			left: 8rpx;
+			top: 0rpx;
+			left: 0rpx;
+			width: 166rpx;
+			height: 32rpx;
 			display: flex;
 			align-items: center;
-			gap: 4rpx;
-			padding: 4rpx 12rpx;
-			background: rgba(0, 0, 0, 0.5);
-			border-radius: 4rpx;
+			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;
 			
-			.date-icon {
-				font-size: 20rpx;
-			}
+			image {
+				width: 36rpx;
+				height: 32rpx;
+				margin-right: 8rpx;
+			};
 			
 			.date-text {
 				font-size: 20rpx;
@@ -501,11 +535,17 @@ export default {
 			justify-content: flex-end;
 			
 			.action-btn {
-				padding: 12rpx 32rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				width: 144rpx;
+				height: 56rpx;
 				background: #388BFF;
-				border-radius: 8rpx;
-				font-size: 26rpx;
-				color: #fff;
+				border-radius: 34rpx 34rpx 34rpx 34rpx;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 24rpx;
+				color: #FFFFFF;
 			}
 		}
 	}
@@ -541,7 +581,9 @@ export default {
 	.picker-header {
 		display: flex;
 		align-items: center;
-		justify-content: space-between;
+		justify-content: center;
+		// padding: 32rpx 24rpx;
+		position: relative;
 		margin-bottom: 32rpx;
 		
 		.picker-title {
@@ -551,6 +593,10 @@ export default {
 		}
 		
 		.picker-close {
+			position: absolute;
+			right: 0;
+			top: 50%;
+			transform: translateY(-50%);
 			width: 48rpx;
 			height: 48rpx;
 			display: flex;
@@ -593,18 +639,19 @@ export default {
 				font-size: 30rpx;
 				font-weight: bold;
 				color: #333;
-				margin-bottom: 16rpx;
+				margin-left:16rpx ;
+				// margin-bottom: 16rpx;
 			}
 			
 			.option-url-wrapper {
 				display: flex;
 				align-items: center;
 				gap: 16rpx;
-				margin-bottom: 12rpx;
+				margin-bottom: 16rpx;
 				
 				.option-url {
 					flex: 1;
-					padding: 12rpx 16rpx;
+					padding: 16rpx 24rpx;
 					background: #f5f5f5;
 					border-radius: 8rpx;
 					font-size: 24rpx;
@@ -634,11 +681,13 @@ export default {
 				justify-content: flex-end;
 				
 				.enter-btn {
-					padding: 12rpx 32rpx;
+					padding: 12rpx 24rpx;
 					background: #388BFF;
-					border-radius: 8rpx;
-					font-size: 28rpx;
-					color: #fff;
+					border-radius: 34rpx 34rpx 34rpx 34rpx;
+					font-family: PingFang SC, PingFang SC;
+					font-weight: 500;
+					font-size: 24rpx;
+					color: #FFFFFF;
 				}
 			}
 		}

+ 380 - 0
pages_task/questionnaire.vue

@@ -0,0 +1,380 @@
+<template>
+	<view class="container">
+		<!-- 标签栏 -->
+		<view class="tabs-bar">
+			<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>
+		
+		<!-- 问卷列表 -->
+		<scroll-view class="content" scroll-y>
+			<view class="questionnaire-card" v-for="(item, index) in questionnaireList" :key="index">
+				<!-- 左侧缩略图 -->
+				<view class="card-thumbnail">
+					<image class="thumbnail-img" :src="item.thumbnail" mode="aspectFill"></image>
+				</view>
+				
+				<!-- 右侧内容 -->
+				<view class="card-content">
+					<view class="card-title">{{ item.title }}</view>
+					<view class="card-date">{{ item.dateRange }}</view>
+					<view class="card-status-section">
+						<view class="status-badge" :class="item.statusClass">{{ item.statusText }}</view>
+						<view class="action-btn" v-if="currentTab === 'incomplete'" @click.stop="goToForm(item)">
+							填写问卷
+						</view>
+					</view>
+				</view>
+			</view>
+			
+			<view class="no-more">没有更多了~</view>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+import { getQuestionnaireList } from '@/api-js/questionnaire'
+export default {
+	data() {
+		return {
+			statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px',
+			currentTab: 'incomplete',
+			tabs: [
+				{ label: '未完成', value: 'incomplete' },
+				{ label: '未开始', value: 'notStarted' },
+				{ label: '已结束', value: 'ended' }
+			],
+			questionnaireList: []
+		}
+	},
+	onLoad() {
+		this.loadData()
+	},
+	methods: {
+		goBack() {
+			uni.navigateBack()
+		},
+		switchTab(tab) {
+			this.currentTab = tab
+			this.loadData()
+		},
+		goToForm(item) {
+			uni.navigateTo({
+				url: `/pages_task/questionnaireForm?id=${item.id}&title=${encodeURIComponent(item.title)}`
+			})
+		},
+		async loadData() {
+			try {
+				uni.showLoading({ title: '加载中...' })
+				const res = await getQuestionnaireList({
+					status: this.currentTab,
+					page: 1,
+					pageSize: 20
+				})
+				uni.hideLoading()
+				if (res.code === 200 && res.data) {
+					this.questionnaireList = res.data.list || this.getDefaultData()
+				} else {
+					this.questionnaireList = this.getDefaultData()
+				}
+			} catch (e) {
+				uni.hideLoading()
+				console.error('加载数据失败', e)
+				this.questionnaireList = this.getDefaultData()
+			}
+		},
+		getDefaultData() {
+			const defaultThumbnail = 'https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20240516/b091048293f142608f99eaf1b0b1510a.png'
+			
+			if (this.currentTab === 'notStarted') {
+				return [
+					{
+						id: 1,
+						thumbnail: defaultThumbnail,
+						title: '康复医学调研',
+						dateRange: '2024-09-15~2025-09-30',
+						status: 'notStarted',
+						statusText: '待开始',
+						statusClass: 'status-pending'
+					},
+					{
+						id: 2,
+						thumbnail: defaultThumbnail,
+						title: '康复医学调研',
+						dateRange: '2024-09-15~2025-09-30',
+						status: 'notStarted',
+						statusText: '待开始',
+						statusClass: 'status-pending'
+					},
+					{
+						id: 3,
+						thumbnail: defaultThumbnail,
+						title: '糖尿病并发症调研',
+						dateRange: '2024-09-15~2025-09-30',
+						status: 'notStarted',
+						statusText: '待开始',
+						statusClass: 'status-pending'
+					}
+				]
+			} else if (this.currentTab === 'incomplete') {
+				return [
+					{
+						id: 4,
+						thumbnail: defaultThumbnail,
+						title: '康复医学调研',
+						dateRange: '2024-09-15~2025-09-30',
+						status: 'incomplete',
+						statusText: '待完成',
+						statusClass: 'status-incomplete'
+					},
+					{
+						id: 5,
+						thumbnail: defaultThumbnail,
+						title: '康复医学调研',
+						dateRange: '2024-09-15~2025-09-30',
+						status: 'incomplete',
+						statusText: '待完成',
+						statusClass: 'status-incomplete'
+					},
+					{
+						id: 6,
+						thumbnail: defaultThumbnail,
+						title: '糖尿病并发症调研',
+						dateRange: '2024-09-15~2025-09-30',
+						status: 'incomplete',
+						statusText: '待完成',
+						statusClass: 'status-incomplete'
+					}
+				]
+			} else {
+				return [
+					{
+						id: 7,
+						thumbnail: defaultThumbnail,
+						title: '康复医学调研',
+						dateRange: '2024-09-15~2025-09-30',
+						status: 'ended',
+						statusText: '已结束',
+						statusClass: 'status-ended'
+					},
+					{
+						id: 8,
+						thumbnail: defaultThumbnail,
+						title: '康复医学调研',
+						dateRange: '2024-09-15~2025-09-30',
+						status: 'ended',
+						statusText: '已结束',
+						statusClass: 'status-ended'
+					},
+					{
+						id: 9,
+						thumbnail: defaultThumbnail,
+						title: '糖尿病并发症调研',
+						dateRange: '2024-09-15~2025-09-30',
+						status: 'ended',
+						statusText: '已结束',
+						statusClass: 'status-ended'
+					}
+				]
+			}
+		}
+	}
+}
+</script>
+
+<style lang="scss" scoped>
+.container {
+	min-height: 100vh;
+	background: #f5f5f5;
+	display: flex;
+	flex-direction: column;
+}
+
+.navbar {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	padding: 20rpx 24rpx;
+	background: #fff;
+	border-bottom: 1rpx solid #f0f0f0;
+	
+	.nav-left {
+		width: 60rpx;
+		
+		.back-icon {
+			font-size: 36rpx;
+			color: #333;
+			font-weight: bold;
+		}
+	}
+	
+	.nav-title {
+		flex: 1;
+		text-align: center;
+		font-size: 36rpx;
+		font-weight: bold;
+		color: #333;
+	}
+	
+	.nav-right {
+		display: flex;
+		align-items: center;
+		gap: 24rpx;
+		width: 120rpx;
+		justify-content: flex-end;
+		
+		.more-icon {
+			font-size: 32rpx;
+			color: #333;
+		}
+		
+		.target-icon {
+			font-size: 32rpx;
+			color: #333;
+		}
+	}
+}
+
+.tabs-bar {
+	display: flex;
+	background: #fff;
+	border-bottom: 1rpx solid #f0f0f0;
+	
+	.tab-item {
+		flex: 1;
+		height: 88rpx;
+		line-height: 88rpx;
+		text-align: center;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 28rpx;
+		color: #969799;
+		position: relative;
+		
+		&.active {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 32rpx;
+			color: #333333;
+			
+			&::after {
+				content: '';
+				position: absolute;
+				bottom: 0;
+				left: 50%;
+				transform: translateX(-50%);
+				width: 80rpx;
+				height: 6rpx;
+				border-radius: 3rpx;
+				background: #388BFF;
+			}
+		}
+	}
+}
+
+.content {
+	flex: 1;
+	padding: 24rpx;
+	box-sizing: border-box;
+}
+
+.questionnaire-card {
+	display: flex;
+	background: #fff;
+	border-radius: 16rpx;
+	margin-bottom: 24rpx;
+	padding: 24rpx;
+	
+	.card-thumbnail {
+		width: 320rpx;
+		height: 180rpx;
+		border-radius: 16rpx 16rpx 16rpx 16rpx;
+		overflow: hidden;
+		margin-right: 24rpx;
+		flex-shrink: 0;
+		
+		.thumbnail-img {
+			width: 100%;
+			height: 100%;
+		}
+	}
+	
+	.card-content {
+		flex: 1;
+		display: flex;
+		flex-direction: column;
+		justify-content: space-between;
+		
+		.card-title {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 28rpx;
+			color: #333333;
+			margin-bottom: 16rpx;
+		}
+		
+		.card-date {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 24rpx;
+			color: #999999;
+			margin-bottom: 16rpx;
+		}
+		
+		.card-status-section {
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			
+			.status-badge {
+				padding: 8rpx 16rpx;
+				border-radius: 8rpx;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 24rpx;
+				
+				&.status-pending {
+					background: #FFF7E6;
+					color: #FF9500;
+				}
+				
+				&.status-incomplete {
+					background: #E6F4FF;
+					color: #388BFF;
+				}
+				
+				&.status-ended {
+					background: #F5F5F5;
+					color: #999999;
+				}
+			}
+			
+			.action-btn {
+				padding: 12rpx 32rpx;
+				background: #388BFF;
+				border-radius: 34rpx;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 24rpx;
+				color: #FFFFFF;
+			}
+		}
+	}
+}
+
+.no-more {
+	text-align: center;
+	padding: 48rpx 0;
+	font-size: 24rpx;
+	color: #999;
+}
+</style>
+
+
+
+

+ 516 - 0
pages_task/questionnaireForm.vue

@@ -0,0 +1,516 @@
+<template>
+	<view class="container">
+		<image class="bg" src="@/static/image/bg_qestion.svg" mode="widthFix"></image>
+		<view class="fixed-top-box" :style="{background: bgColor }">
+			<view class="status_bar" :style="{height: statusBarHeight}"></view>
+			<view class="back-box" @click="goBack">
+				<image src="@/static/image/back.png" mode=""></image>
+				<text class="title">问卷调查</text>
+				<text></text>
+			</view>
+		</view>
+		<scroll-view class="content" scroll-y>
+			<!-- 表单标题 -->
+			<view class="form-header">
+				<view class="form-title">{{ formData.title }}</view>
+				<view class="form-tips">
+					<view class="tip-item">请您根据患者真实情况选择并填写</view>
+					<view class="tip-item">我们承诺对您及患者所提供的所有信息严格保密</view>
+				</view>
+			</view>
+			
+			<!-- 表单内容 -->
+			<view class="form-section">
+				<!-- 患者姓名 -->
+				<view class="form-item">
+					<view class="form-label">
+						<text class="required">*</text>
+						<text>1、患者姓名</text>
+					</view>
+					<input 
+						class="form-input" 
+						v-model="formData.patientName" 
+						placeholder="请输入患者姓名"
+					/>
+				</view>
+				
+				<!-- 患者性别 -->
+				<view class="form-item">
+					<view class="form-label">
+						<text class="required">*</text>
+						<text>2、患者性别</text>
+					</view>
+					<radio-group @change="onGenderChange" class="radio-group">
+						<label class="radio-item">
+							<radio value="male" :checked="formData.patientGender === 'male'" color="#388BFF" />
+							<text>男</text>
+						</label>
+						<label class="radio-item">
+							<radio value="female" :checked="formData.patientGender === 'female'" color="#388BFF" />
+							<text>女</text>
+						</label>
+					</radio-group>
+				</view>
+				
+				<!-- 患者年龄 -->
+				<view class="form-item">
+					<view class="form-label">
+						<text class="required">*</text>
+						<text>3、患者年龄</text>
+					</view>
+					<input 
+						class="form-input" 
+						v-model="formData.patientAge" 
+						type="number"
+						placeholder="请输入患者年龄 (岁)"
+					/>
+				</view>
+				
+				<!-- 处方日期 -->
+				<view class="form-item">
+					<view class="form-label">
+						<text class="required">*</text>
+						<text>4、处方日期</text>
+					</view>
+					<picker mode="date" :value="formData.prescriptionDate" @change="onDateChange">
+						<view class="form-input picker-input" :class="{ placeholder: !formData.prescriptionDate }">
+							{{ formData.prescriptionDate || '请选择处方日期' }}
+							<image class="w48 h48" src="@/static/image/calendar.png" mode=""></image>
+						</view>
+					</picker>
+				</view>
+				
+				<!-- 并发症类型 -->
+				<view class="form-item">
+									<view class="form-label">
+										<text class="required">*</text>
+										<text>5、您被诊断的并发症类型 (多选)</text>
+									</view>
+									<checkbox-group @change="onComplicationTypeChange" class="checkbox-group">
+										<label class="checkbox-item">
+											<checkbox value="retinopathy" :checked="formData.complicationTypes.includes('retinopathy')" color="#388BFF" />
+											<text>视网膜病变</text>
+										</label>
+										<label class="checkbox-item">
+											<checkbox value="neuropathy" :checked="formData.complicationTypes.includes('neuropathy')" color="#388BFF" />
+											<text>周围神经病变</text>
+										</label>
+										<label class="checkbox-item">
+											<checkbox value="osteoporosis" :checked="formData.complicationTypes.includes('osteoporosis')" color="#388BFF" />
+											<text>骨质疏松</text>
+										</label>
+									</checkbox-group>
+								</view>
+				
+				<!-- 图片上传 -->
+				<view class="form-item">
+					<view class="form-label">
+						<text class="required">*</text>
+						<text>6、图片上传</text>
+					</view>
+					<view class="upload-section">
+						<view class="upload-item" v-for="(image, index) in formData.images" :key="index">
+							<image class="uploaded-image" :src="image" mode="aspectFill"></image>
+							<view class="delete-btn" @click="removeImage(index)">×</view>
+						</view>
+						<view class="upload-item upload-placeholder" @click="chooseImage" v-if="formData.images.length < 2">
+							<image class="w48 h48" src="@/static/image/icon_camera1.png" mode=""></image>
+						</view>
+					</view>
+				</view>
+			</view>
+		</scroll-view>
+		
+		<!-- 提交按钮 -->
+		<view class="submit-btn" @click="handleSubmit">提交</view>
+	</view>
+</template>
+
+<script>
+import { submitCaseCollection } from '@/api-js/medicationSurvey'
+export default {
+	data() {
+		return {
+			top:0,
+			statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px',
+			activityId: '',
+			formData: {
+				title: '糖尿病并发症调研',
+				patientName: '',
+				patientGender: 'male',
+				patientAge: '',
+				prescriptionDate: '',
+				complicationTypes: ['retinopathy', 'neuropathy'],
+				images: []
+			}
+		}
+	},
+	onLoad(options) {
+		if (options.activityId) {
+			this.activityId = options.activityId
+		}
+	},
+	onPageScroll(e) {
+		//console.log(e)
+		this.top = e.scrollTop;
+	},
+	computed: {
+		// 计算属性的 getter
+		bgColor: function() {
+			var top = this.top / 30;
+			return 'rgba(255, 255, 255,' + top + ')';
+		},
+	},
+	methods: {
+		goBack() {
+			uni.navigateBack()
+		},
+		onDateChange(e) {
+			this.formData.prescriptionDate = e.detail.value
+		},
+		onGenderChange(e) {
+			this.formData.patientGender = e.detail.value
+		},
+		onDiseaseTypeChange(e) {
+			this.formData.diseaseTypes = e.detail.value
+		},
+		chooseImage() {
+			uni.chooseImage({
+				count: 2 - this.formData.images.length,
+				sizeType: ['compressed'],
+				sourceType: ['album', 'camera'],
+				success: (res) => {
+					this.formData.images = [...this.formData.images, ...res.tempFilePaths]
+				}
+			})
+		},
+		removeImage(index) {
+			this.formData.images.splice(index, 1)
+		},
+		async handleSubmit() {
+			// 表单验证
+			if (!this.formData.patientName) {
+				uni.showToast({
+					icon: 'none',
+					title: '请输入患者姓名'
+				})
+				return
+			}
+			if (!this.formData.patientAge) {
+				uni.showToast({
+					icon: 'none',
+					title: '请输入患者年龄'
+				})
+				return
+			}
+			if (!this.formData.prescriptionDate) {
+				uni.showToast({
+					icon: 'none',
+					title: '请选择处方日期'
+				})
+				return
+			}
+			if (this.formData.diseaseTypes.length === 0) {
+				uni.showToast({
+					icon: 'none',
+					title: '请至少选择一种心脏病类型'
+				})
+				return
+			}
+			if (this.formData.images.length === 0) {
+				uni.showToast({
+					icon: 'none',
+					title: '请至少上传一张图片'
+				})
+				return
+			}
+			
+			try {
+				uni.showLoading({ title: '提交中...' })
+				const res = await submitCaseCollection({
+					activityId: this.activityId,
+					...this.formData
+				})
+				uni.hideLoading()
+				if (res.code === 200) {
+					uni.showToast({
+						icon: 'success',
+						title: '提交成功'
+					})
+					setTimeout(() => {
+						uni.navigateBack()
+					}, 1500)
+				} else {
+					uni.showToast({
+						icon: 'none',
+						title: res.msg || '提交失败'
+					})
+				}
+			} catch (e) {
+				uni.hideLoading()
+				uni.showToast({
+					icon: 'none',
+					title: '提交失败'
+				})
+			}
+		}
+	}
+}
+</script>
+<style lang="stylus">
+	checkbox .wx-checkbox-input{
+		border-radius:0 !important;
+	}
+	checkbox .wx-checkbox-input.wx-checkbox-input-checked {
+		border-radius:0 !important;
+	}
+</style>
+<style lang="scss" scoped>
+.container {
+	min-height: 100vh;
+	display: flex;
+	flex-direction: column;
+	.bg{
+		width: 100%;
+		position: absolute;
+		top: 0;
+		left: 0;
+	}
+}
+.status-bar {
+	width: 100%;
+	background: transparent;
+}
+.fixed-top-box{
+			width: 100%;
+			// background: linear-gradient(135deg, #66b2ef 0%, #0bb3f2 100%);
+			position: fixed;
+			top: 0;
+			left: 0;
+			z-index: 1000;
+			.back-box{
+				height: 88upx;
+				padding-left: 22upx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				padding: 0 24upx;
+				image{
+					width: 40upx;
+					height: 40upx;
+				}
+				.title{
+					font-family: PingFang SC, PingFang SC;
+					font-weight: 600;
+					font-size: 36rpx;
+					color: #333333;
+				}
+			}
+		}
+.header {
+	position: relative;
+	height: 88rpx;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	background: transparent;
+	
+	.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 {
+	margin-top:168rpx;
+	flex: 1;
+	padding: 24rpx;
+	box-sizing: border-box;
+}
+
+.form-header {
+	margin-bottom: 32rpx;
+	
+	.form-title {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 600;
+		font-size: 40rpx;
+		color: #333333;
+		margin-bottom: 32rpx;
+		text-align: center;
+	}
+	
+	.form-tips {
+		.tip-item {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 28rpx;
+			color: #666666;
+			line-height: 44rpx;
+			text-align: center;
+		}
+	}
+}
+
+.form-section {
+	padding-bottom: 160rpx;
+	
+}
+
+.form-item {
+	background: #fff;
+	padding: 24rpx 32rpx;
+	margin-bottom: 20rpx;
+	border-radius: 16rpx;
+	&:last-child {
+		margin-bottom: 0;
+	}
+	
+	.form-label {
+		display: flex;
+		align-items: center;
+		font-size: 28rpx;
+		color: #333;
+		margin-bottom: 16rpx;
+		
+		.required {
+			color: #FF5030;
+			margin-right: 4rpx;
+		}
+	}
+	
+	.form-input {
+		// width: 100%;
+		height: 72rpx;
+		padding: 0 24rpx;
+		// background: #f5f5f5;
+		border-radius: 12rpx 12rpx 12rpx 12rpx;
+		border: 2rpx solid #F5F5F5;
+		font-size: 28rpx;
+		color: #333;
+		
+		&.placeholder {
+			color: #C8C9CC
+		}
+		
+		&.picker-input {
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			
+			.calendar-icon {
+				font-size: 32rpx;
+			}
+		}
+	}
+	
+	.radio-group,
+	.checkbox-group {
+		display: flex;
+		flex-direction: column;
+		gap: 48rpx;
+		
+		.radio-item,
+		.checkbox-item {
+			display: flex;
+			align-items: center;
+			gap: 16rpx;
+			font-size: 28rpx;
+			color: #333;
+		}
+	}
+	
+	.upload-section {
+		display: flex;
+		gap: 16rpx;
+		flex-wrap: wrap;
+		
+		.upload-item {
+			width: 200rpx;
+			height: 200rpx;
+			border-radius: 8rpx;
+			overflow: hidden;
+			position: relative;
+			
+			.uploaded-image {
+				width: 100%;
+				height: 100%;
+			}
+			
+			.delete-btn {
+				position: absolute;
+				top: 8rpx;
+				right: 8rpx;
+				width: 40rpx;
+				height: 40rpx;
+				background: rgba(0, 0, 0, 0.5);
+				border-radius: 50%;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				font-size: 32rpx;
+				color: #fff;
+			}
+			
+			&.upload-placeholder {
+				background: #f5f5f5;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				
+				.camera-icon {
+					font-size: 60rpx;
+				}
+			}
+		}
+	}
+}
+
+.submit-btn {
+	position: fixed;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	height: 88rpx;
+	background: #388BFF;
+	border-radius: 200rpx 200rpx 200rpx 200rpx;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	font-size: 32rpx;
+	color: #fff;
+	font-weight: 500;
+	z-index: 100;
+	margin:40rpx 32rpx;
+}
+</style>
+
+
+
+

+ 66 - 36
pages_task/science.vue

@@ -28,13 +28,17 @@
 					</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 class="x-f">
+						<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 category" v-if="item.category">
+							{{ item.category }}
+						</view>
 					</view>
+					
 					<view class="tag-item points-tag">
 						{{ item.points }}积分
 					</view>
@@ -81,20 +85,22 @@
 			<view class="filter-content" @click.stop>
 				<view class="filter-header">
 					<view class="filter-title">筛选</view>
-					<view class="filter-close-btn" @click="closeFilter">×</view>
+					<view class="filter-close-btn" @click="closeFilter">
+						<image class="w44 h44" src="@/static/image/icon_cross.png" mode=""></image>
+					</view>
 				</view>
 				
 				<!-- 申请时间筛选 -->
 				<view class="filter-group">
 					<view class="group-label">申请时间</view>
 					<view class="date-range-inputs">
-						<picker mode="date" :value="tempDateRange.startDate" @change="onStartDateChange">
+						<picker style="flex:1" 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">
+						<picker style="flex:1" mode="date" :value="tempDateRange.endDate" @change="onEndDateChange">
 							<view class="date-input" :class="{ placeholder: !tempDateRange.endDate }">
 								{{ tempDateRange.endDate || '结束时间' }}
 							</view>
@@ -417,28 +423,31 @@ export default {
 		flex: 1;
 		display: flex;
 		align-items: center;
-		gap: 32rpx;
+		gap: 48rpx;
 		overflow-x: auto;
 		
 		.tab-item {
 			padding: 24rpx 0;
 			font-size: 28rpx;
-			color: #666;
+			color: #969799;
 			white-space: nowrap;
 			position: relative;
 			
 			&.active {
-				color: #388BFF;
-				font-weight: bold;
+				font-weight: 500;
+				font-size: 28rpx;
+				color: #333333;
 				
 				&::after {
 					content: '';
 					position: absolute;
 					bottom: 0;
-					left: 0;
-					right: 0;
-					height: 4rpx;
+					left: 50%;
+					transform: translateX(-50%);
+					width: 56rpx;
+					height: 6rpx;
 					background: #388BFF;
+					border-radius: 3rpx 3rpx 3rpx 3rpx;
 				}
 			}
 		}
@@ -526,11 +535,22 @@ export default {
 			border-radius: 8rpx;
 			font-size: 24rpx;
 			color: #666;
-			
+			&.category{
+				border-radius: 0rpx 8rpx 8rpx 0rpx;
+			    border: 2rpx solid #F3D191;
+				background: #FFE9C7;
+				color:#5D410F
+			}
 			&.video-tag {
-				background: #FFF3E0;
-				color: #FF9800;
-				
+				background: linear-gradient( 90deg, #FFE9C7 0%, #F3D091 100%);
+				border-radius:8rpx 0rpx 0rpx 8rpx;
+				border: 2rpx solid #F3D191;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 24rpx;
+				color: #5D410F;
+				display: flex;
+				align-items: center;
 				.tag-icon {
 					margin-right: 4rpx;
 				}
@@ -540,6 +560,7 @@ export default {
 				border: 1rpx solid #388BFF;
 				color: #388BFF;
 				background: transparent;
+				
 			}
 		}
 	}
@@ -602,7 +623,7 @@ export default {
 			.action-btn {
 				padding: 12rpx 32rpx;
 				background: #388BFF;
-				border-radius: 8rpx;
+				border-radius: 34rpx 34rpx 34rpx 34rpx;
 				font-size: 28rpx;
 				color: #fff;
 			}
@@ -626,28 +647,35 @@ export default {
 	width: 100%;
 	background: #fff;
 	border-radius: 24rpx 24rpx 0 0;
-	padding: 24rpx;
+	padding: 32rpx;
 	
 	.filter-header {
 		display: flex;
 		align-items: center;
-		justify-content: space-between;
-		margin-bottom: 32rpx;
+		justify-content: center;
+		// padding: 32rpx 24rpx;
+		position: relative;
 		
 		.filter-title {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
 			font-size: 32rpx;
-			font-weight: bold;
-			color: #333;
+			color: #333333;
 		}
 		
 		.filter-close-btn {
+			position: absolute;
+			right: 24rpx;
+			top: 50%;
+			transform: translateY(-50%);
+			font-size: 48rpx;
+			color: #999;
 			width: 48rpx;
 			height: 48rpx;
 			display: flex;
 			align-items: center;
 			justify-content: center;
-			font-size: 40rpx;
-			color: #999;
+			line-height: 1;
 		}
 	}
 	
@@ -694,16 +722,18 @@ export default {
 		gap: 16rpx;
 		
 		.filter-tag {
-			padding: 12rpx 24rpx;
-			background: #f5f5f5;
-			border-radius: 8rpx;
-			font-size: 26rpx;
-			color: #666;
+			padding: 14rpx 36rpx;
+			background: #F7F8FA;
+			border-radius: 70rpx 70rpx 70rpx 70rpx;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 28rpx;
+			color: #333333;
 			border: 1rpx solid transparent;
 			
 			&.active {
-				background: #388BFF;
-				color: #fff;
+				background: rgba(56,139,255,0.15);
+				color: #388BFF;
 				border-color: #388BFF;
 			}
 		}
@@ -723,7 +753,7 @@ export default {
 			height: 88rpx;
 			line-height: 88rpx;
 			text-align: center;
-			border-radius: 8rpx;
+			border-radius: 200rpx 200rpx 200rpx 200rpx;
 			font-size: 30rpx;
 		}
 		

+ 5 - 0
pages_task/taskCompleteSuccess.vue

@@ -241,3 +241,8 @@ export default {
 
 
 
+
+
+
+
+

+ 5 - 0
pages_task/taskDetail.vue

@@ -412,3 +412,8 @@ export default {
 
 
 
+
+
+
+
+

+ 115 - 127
pages_user/addBankCard.vue

@@ -1,18 +1,6 @@
 <template>
 	<view class="container">
-		<!-- 导航栏 -->
-		<view class="navbar">
-			<view class="nav-left" @click="goBack">
-				<text class="back-icon"><</text>
-			</view>
-			<view class="nav-title">添加银行卡</view>
-			<view class="nav-right">
-				<text class="more-icon">...</text>
-				<text class="eye-icon">O</text>
-			</view>
-		</view>
-		
-		<!-- 表单区域 -->
+	<!-- 表单区域 -->
 		<scroll-view class="content" scroll-y>
 			<view class="form-section">
 				<view class="form-item">
@@ -20,7 +8,7 @@
 					<picker mode="selector" :range="bankList" range-key="name" @change="onBankChange">
 						<view class="form-input picker-input" :class="{ placeholder: !formData.bank }">
 							{{ formData.bank || '请选择开户行' }}
-							<text class="arrow-right">></text>
+							<image class="w36 h36" src="@/static/image/icon_my_more.png" mode=""></image>
 						</view>
 					</picker>
 				</view>
@@ -31,7 +19,7 @@
 					<picker mode="selector" :range="branchList" range-key="name" @change="onBranchChange">
 						<view class="form-input picker-input" :class="{ placeholder: !formData.branch }">
 							{{ formData.branch || '请选择支行' }}
-							<text class="arrow-right">></text>
+							<image class="w36 h36" src="@/static/image/icon_my_more.png" mode=""></image>
 						</view>
 					</picker>
 				</view>
@@ -40,12 +28,12 @@
 				<view class="form-item">
 					<view class="form-label">银行卡号</view>
 					<input 
-						class="form-input" 
+						class="form-input " 
 						v-model="formData.cardNumber" 
 						placeholder="请输入银行卡号"
 						type="number"
 						maxlength="19"
-						placeholder-class="placeholder"
+						placeholder-class="text-placeholder"
 					/>
 				</view>
 			</view>
@@ -66,7 +54,7 @@
 </template>
 
 <script>
-import { addBankCard, getBankList, getBranchList } from '@/api-js/bankCard'
+import { addBankCard1, getBankList, getBranchList } from '@/api-js/bankCard'
 export default {
 	data() {
 		return {
@@ -146,69 +134,76 @@ export default {
 		},
 		async handleSubmit() {
 			// 表单验证
-			if (!this.formData.bank) {
-				uni.showToast({
-					icon: 'none',
-					title: '请选择开户行'
-				})
-				return
-			}
-			if (!this.formData.branch) {
-				uni.showToast({
-					icon: 'none',
-					title: '请选择支行'
-				})
-				return
-			}
-			if (!this.formData.cardNumber) {
-				uni.showToast({
-					icon: 'none',
-					title: '请输入银行卡号'
-				})
-				return
-			}
-			// 银行卡号验证(简单验证)
-			if (this.formData.cardNumber.length < 16) {
-				uni.showToast({
-					icon: 'none',
-					title: '请输入正确的银行卡号'
-				})
-				return
-			}
-			
-			try {
-				uni.showLoading({ title: '添加中...' })
-				const res = await addBankCard(this.formData)
-				uni.hideLoading()
-				if (res.code === 200) {
-					uni.showToast({
-						icon: 'success',
-						title: '添加成功'
-					})
-					setTimeout(() => {
-						uni.navigateBack()
-					}, 1500)
-				} else {
-					uni.showToast({
-						icon: 'none',
-						title: res.msg || '添加失败'
-					})
-				}
-			} catch (e) {
-				uni.hideLoading()
-				uni.showToast({
-					icon: 'none',
-					title: '添加失败'
-				})
-			}
+			// if (!this.formData.bank) {
+			// 	uni.showToast({
+			// 		icon: 'none',
+			// 		title: '请选择开户行'
+			// 	})
+			// 	return
+			// }
+			// if (!this.formData.branch) {
+			// 	uni.showToast({
+			// 		icon: 'none',
+			// 		title: '请选择支行'
+			// 	})
+			// 	return
+			// }
+			// if (!this.formData.cardNumber) {
+			// 	uni.showToast({
+			// 		icon: 'none',
+			// 		title: '请输入银行卡号'
+			// 	})
+			// 	return
+			// }
+			// // 银行卡号验证(简单验证)
+			// if (this.formData.cardNumber.length < 16) {
+			// 	uni.showToast({
+			// 		icon: 'none',
+			// 		title: '请输入正确的银行卡号'
+			// 	})
+			// 	return
+			// }
+			uni.navigateTo({
+				url: '/pages_user/editBankCard'
+			})
+			// try {
+			// 	uni.showLoading({ title: '添加中...' })
+			// 	const res = await addBankCard1(this.formData)
+			// 	uni.hideLoading()
+			// 	if (res.code === 200) {
+			// 		uni.showToast({
+			// 			icon: 'success',
+			// 			title: '添加成功'
+			// 		})
+			// 		setTimeout(() => {
+			// 			uni.navigateBack()
+			// 		}, 1500)
+			// 	} else {
+			// 		uni.showToast({
+			// 			icon: 'none',
+			// 			title: res.msg || '添加失败'
+			// 		})
+			// 	}
+			// } catch (e) {
+			// 	uni.hideLoading()
+			// 	uni.showToast({
+			// 		icon: 'none',
+			// 		title: '添加失败'
+			// 	})
+			// }
 		}
 	}
 }
 </script>
-
+<style lang="stylus">
+	.text-placeholder{
+	  color: #C8C9CC !important;
+	}
+</style>
 <style lang="scss" scoped>
+	
 .container {
-	min-height: 100vh;
+	// min-height: 100vh;
 	background: #f5f5f5;
 	display: flex;
 	flex-direction: column;
@@ -260,54 +255,54 @@ export default {
 }
 
 .content {
-	flex: 1;
-	padding-bottom: 140rpx;
+	// flex: 1;
+	// padding-bottom: 140rpx;
 }
 
 .form-section {
 	background: #fff;
-	margin: 24rpx;
-	border-radius: 16rpx;
+	// margin: 24rpx;
+	// border-radius: 16rpx;
 	overflow: hidden;
 	
 	.form-item {
 		display: flex;
 		align-items: center;
 		justify-content: space-between;
-		padding: 32rpx 24rpx;
-		min-height: 100rpx;
-		
+		padding: 28rpx 32rpx;
+		// min-height: 100rpx
 		.form-label {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
 			font-size: 28rpx;
-			color: #333;
-			font-weight: 500;
+			color: #666666;
 			width: 150rpx;
 		}
+	.form-input {
+		flex: 1;
+		font-size: 28rpx;
+		color: #333;
+		text-align: right;
+		margin-left: 24rpx;
 		
-		.form-input {
-			flex: 1;
-			font-size: 28rpx;
-			color: #333;
-			text-align: right;
-			margin-left: 24rpx;
+		&.picker-input {
+			display: flex;
+			align-items: center;
+			justify-content: flex-end;
 			
-			&.placeholder {
-				color: #C8C9CC;
-			}
-			
-			&.picker-input {
-				display: flex;
-				align-items: center;
-				justify-content: flex-end;
-				
-				.arrow-right {
-					font-size: 32rpx;
-					color: #999;
-					margin-left: 8rpx;
-				}
+			.arrow-right {
+				font-size: 32rpx;
+				color: #999;
+				margin-left: 8rpx;
 			}
 		}
 	}
+}
+
+// placeholder 样式(需要独立定义,不能嵌套)
+.placeholder {
+	color: #C8C9CC !important;
+	}
 	
 	.divider {
 		height: 1rpx;
@@ -317,39 +312,31 @@ export default {
 }
 
 .notes-section {
-	background: #fff;
-	border-radius: 16rpx;
-	padding: 32rpx;
-	margin: 0 24rpx 24rpx;
+	// background: #fff;
+	// border-radius: 16rpx;
+	padding: 22rpx 32rpx;
+	// margin: 0 24rpx 24rpx;
 	
 	.notes-title {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
 		font-size: 28rpx;
-		font-weight: bold;
-		color: #333;
-		margin-bottom: 16rpx;
+		color: #999999;
+		line-height: 40rpx;
 	}
 	
 	.notes-item {
-		font-size: 26rpx;
-		color: #666;
-		line-height: 1.8;
-		margin-bottom: 8rpx;
-		
-		&:last-child {
-			margin-bottom: 0;
-		}
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 28rpx;
+		color: #999999;
+		line-height: 40rpx;
 	}
 }
 
 .bottom-bar {
-	position: fixed;
-	bottom: 0;
-	left: 0;
-	right: 0;
-	background: #fff;
-	padding: 24rpx;
-	border-top: 1rpx solid #f0f0f0;
-	z-index: 100;
+
+	padding: 32rpx;
 	
 	.submit-btn {
 		width: 100%;
@@ -367,3 +354,4 @@ export default {
 </style>
 
 
+

+ 57 - 55
pages_user/bankCard.vue

@@ -1,17 +1,5 @@
 <template>
 	<view class="container">
-		<!-- 导航栏 -->
-		<view class="navbar">
-			<view class="nav-left" @click="goBack">
-				<text class="back-icon"><</text>
-			</view>
-			<view class="nav-title">我的银行卡</view>
-			<view class="nav-right">
-				<text class="more-icon">...</text>
-				<text class="eye-icon">O</text>
-			</view>
-		</view>
-		
 		<!-- 内容区域 -->
 		<scroll-view class="content" scroll-y>
 			<!-- 有银行卡状态 -->
@@ -25,6 +13,7 @@
 						<view class="edit-btn" @click="goEdit">编辑银行卡</view>
 					</view>
 					<view class="card-number">{{ formatCardNumber(bankCardData.cardNumber) }}</view>
+					<image class="w270 h320" src="@/static/image/bg_bankcard.png" mode=""></image>
 				</view>
 				
 				<!-- 注意事项 -->
@@ -38,14 +27,7 @@
 			<!-- 空状态 -->
 			<view v-else class="empty-section">
 				<view class="empty-card-illustration">
-					<view class="card-preview">
-						<view class="card-chip"></view>
-						<view class="card-strip"></view>
-						<view class="card-lines">
-							<view class="line line-1"></view>
-							<view class="line line-2"></view>
-						</view>
-					</view>
+					<image class="w322 h198" src="@/static/image/img_nocard.svg" mode=""></image>
 				</view>
 				<view class="empty-text">暂未添加银行卡</view>
 				<view class="add-btn" @click="goAdd">添加银行卡</view>
@@ -78,7 +60,7 @@ export default {
 				if (res.code === 200 && res.data) {
 					this.bankCardData = res.data
 				} else {
-					this.bankCardData = {}
+					this.bankCardData = {id:1,bankName:'中国工商银行',cardNumber:'**** **** **** 8869'}
 				}
 			} catch (e) {
 				uni.hideLoading()
@@ -175,71 +157,85 @@ export default {
 	padding: 24rpx;
 	
 	.bank-card {
-		background: linear-gradient(135deg, #388BFF 0%, #5BA0FF 100%);
-		border-radius: 24rpx;
-		padding: 48rpx 32rpx;
+		width: 702rpx;
+		height: 320rpx;
+		box-sizing: border-box;
+		background: linear-gradient( 71deg, #388BFF 0%, #0C75FF 100%);
+		border-radius: 24rpx 24rpx 24rpx 24rpx;
+		padding: 40rpx;
 		margin-bottom: 32rpx;
 		position: relative;
-		
+		image{
+			position: absolute;
+			top:0;
+			right: 0;
+			z-index: 0;
+		}
 		.card-header {
 			display: flex;
 			align-items: flex-start;
 			justify-content: space-between;
 			margin-bottom: 60rpx;
-			
+			position: relative;
+			z-index: 1;
 			.bank-info {
 				.bank-name {
+					font-family: PingFang SC, PingFang SC;
+					font-weight: 600;
 					font-size: 32rpx;
-					font-weight: bold;
-					color: #fff;
-					margin-bottom: 8rpx;
+					color: #FFFFFF;
+					margin-bottom: 16rpx;
 				}
 				
 				.card-type {
-					font-size: 24rpx;
-					color: rgba(255, 255, 255, 0.8);
+					font-family: PingFang SC, PingFang SC;
+					font-weight: 400;
+					font-size: 28rpx;
+					color: #fff;
 				}
 			}
 			
 			.edit-btn {
-				padding: 8rpx 24rpx;
-				background: rgba(255, 255, 255, 0.9);
-				border: 2rpx solid #388BFF;
-				border-radius: 44rpx;
-				font-size: 24rpx;
-				color: #388BFF;
+				width: 220rpx;
+				height: 64rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				background: rgba(255,255,255,0.2);
+				border-radius: 34rpx 34rpx 34rpx 34rpx;
+				border: 2rpx solid #FFFFFF;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 28rpx;
+				color: #FFFFFF;
 			}
 		}
 		
 		.card-number {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 600;
 			font-size: 48rpx;
-			font-weight: bold;
-			color: #fff;
-			letter-spacing: 4rpx;
+			color: #FFFFFF;
 		}
 	}
 	
 	.notes-section {
-		background: #fff;
-		border-radius: 16rpx;
 		padding: 32rpx;
 		
 		.notes-title {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
 			font-size: 28rpx;
-			font-weight: bold;
-			color: #333;
-			margin-bottom: 16rpx;
+			color: #999999;
+			line-height: 40rpx;
 		}
 		
 		.notes-item {
-			font-size: 26rpx;
-			color: #666;
-			line-height: 1.8;
-			margin-bottom: 8rpx;
-			
-			&:last-child {
-				margin-bottom: 0;
-			}
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 28rpx;
+			color: #999999;
+			line-height: 40rpx;
 		}
 	}
 }
@@ -249,8 +245,9 @@ export default {
 	flex-direction: column;
 	align-items: center;
 	justify-content: center;
-	padding: 120rpx 24rpx;
-	min-height: 60vh;
+	padding:0 24rpx;
+	margin-top: 140rpx;
+	// min-height: 60vh;
 	
 	.empty-card-illustration {
 		margin-bottom: 48rpx;
@@ -325,3 +322,8 @@ export default {
 </style>
 
 
+
+
+
+
+

+ 65 - 38
pages_user/certification.vue

@@ -62,7 +62,7 @@
 					<picker style="flex:1" mode="selector" :range="institutionList" range-key="name" @change="onInstitutionChange">
 						<view class="form-input picker-input" :class="{ placeholder: !formData.institution }">
 							{{ formData.institution || '请选择机构' }}
-							<text class="arrow-right">></text>
+							<image class="w36 h36" src="@/static/image/icon_my_more.png" mode=""></image>
 						</view>
 					</picker>
 				</view>
@@ -75,7 +75,7 @@
 					<picker style="flex:1" mode="selector" :range="departmentList" range-key="name" @change="onDepartmentChange">
 						<view class="form-input picker-input" :class="{ placeholder: !formData.department }">
 							{{ formData.department || '请选择科室' }}
-							<text class="arrow-right">></text>
+							<image class="w36 h36" src="@/static/image/icon_my_more.png" mode=""></image>
 						</view>
 					</picker>
 				</view>
@@ -85,10 +85,10 @@
 						<text class="required">*</text>
 						<text>职称</text>
 					</view>
-					<picker mode="selector" :range="titleList" range-key="name" @change="onTitleChange">
+					<picker style="flex:1" mode="selector" :range="titleList" range-key="name" @change="onTitleChange">
 						<view class="form-input picker-input" :class="{ placeholder: !formData.title }">
 							{{ formData.title || '请选择职称' }}
-							<text class="arrow-right">></text>
+							<image class="w36 h36" src="@/static/image/icon_my_more.png" mode=""></image>
 						</view>
 					</picker>
 				</view>
@@ -99,27 +99,35 @@
 				<view class="section-header">
 					<view class="section-indicator"></view>
 					<text class="section-title">身份证明</text>
+					<view class="section-subtitle">以下资质任意选填其中一个</view>
 				</view>
-				<view class="section-subtitle">以下资质任意选填其中一个</view>
+				
 				
 				<!-- 医师职业证 -->
 				<view class="certificate-item">
 					<view class="certificate-header">
-						<view class="certificate-title">医师职业证</view>
+						<view class="x-f">
+							<view class="certificate-title">医师职业证</view>
+							<view class="certificate-tip">-至少需上传编码页和执业点页</view>
+						</view>
+						
 						<view class="example-btn" @click="goToPracticeExample">
-							<text class="example-icon">①</text>
+							<image class="w28 h28" src="@/static/image/icon_example.png" mode=""></image>
 							<text>示例</text>
 						</view>
 					</view>
-					<view class="certificate-tip">至少需上传编码页和执业点页</view>
+					
 					<view class="upload-grid">
 						<view class="upload-item" v-for="(image, index) in formData.practiceCertificate" :key="index">
 							<image class="uploaded-image" :src="image" mode="aspectFill" @click="previewImage(image, formData.practiceCertificate)"></image>
 							<view class="delete-btn" @click="removePracticeImage(index)">×</view>
 						</view>
 						<view class="upload-item upload-placeholder" @click="choosePracticeImage" v-if="formData.practiceCertificate.length < 2">
-							<text class="camera-icon">📷</text>
-							<text class="upload-text">点击上传</text>
+							<image class="bg" src="@/static/image/img_idcard_Front.png" mode=""></image>
+							<view class="img-btn">
+								<image class="w56 h56" src="@/static/image/icon_uplodeidcard.png" mode=""></image>
+								<text class="upload-text">点击上传</text>
+							</view>
 						</view>
 					</view>
 				</view>
@@ -129,7 +137,7 @@
 					<view class="certificate-header">
 						<view class="certificate-title">医师职称证/工牌</view>
 						<view class="example-btn" @click="goToTitleExample">
-							<text class="example-icon">①</text>
+							<image class="w28 h28" src="@/static/image/icon_example.png" mode=""></image>
 							<text>示例</text>
 						</view>
 					</view>
@@ -139,8 +147,12 @@
 							<view class="delete-btn" @click="removeTitleImage(index)">×</view>
 						</view>
 						<view class="upload-item upload-placeholder" @click="chooseTitleImage">
-							<text class="camera-icon">📷</text>
-							<text class="upload-text">点击上传</text>
+							<image class="bg" src="@/static/image/img_idcard_Front.png" mode=""></image>
+							<view class="img-btn">
+								<image class="w56 h56" src="@/static/image/icon_uplodeidcard.png" mode=""></image>
+								<text class="upload-text">点击上传</text>
+							</view>
+							
 						</view>
 					</view>
 				</view>
@@ -158,10 +170,10 @@
 						<text class="required">*</text>
 						<text>开户行</text>
 					</view>
-					<picker mode="selector" :range="bankList" range-key="name" @change="onBankChange">
+					<picker style="flex:1" mode="selector" :range="bankList" range-key="name" @change="onBankChange">
 						<view class="form-input picker-input" :class="{ placeholder: !formData.bank }">
 							{{ formData.bank || '请选择开户行' }}
-							<text class="arrow-right">></text>
+							<image class="w36 h36" src="@/static/image/icon_my_more.png" mode=""></image>
 						</view>
 					</picker>
 				</view>
@@ -195,22 +207,23 @@
 		
 		<!-- 底部操作栏 -->
 		<view class="bottom-bar">
-			<view class="agreement-checkbox">
+		
+			<view class="action-buttons">
+				<view class="btn btn-cancel" @click="handleCancel">暂不认证</view>
+				<view class="btn btn-submit" @click="handleSubmit">提交认证</view>
+			</view>
+			<view class="agreement-checkbox x-c">
 				<checkbox-group @change="onAgreementChange">
 					<label class="checkbox-label">
 						<checkbox value="agree" :checked="agreed" color="#388BFF" />
 						<text class="agreement-text">
 							我已阅读并同意
-							<text class="link-text" @click.stop="goToUserAgreement">《用户协议》</text>
+							<text class="link-text" @click.stop="goToUserAgreement">《用户协议》</text>
 							<text class="link-text" @click.stop="goToInformedConsent">《知情同意书》</text>
 						</text>
 					</label>
 				</checkbox-group>
 			</view>
-			<view class="action-buttons">
-				<view class="btn btn-cancel" @click="handleCancel">暂不认证</view>
-				<view class="btn btn-submit" @click="handleSubmit">提交认证</view>
-			</view>
 		</view>
 	</view>
 </template>
@@ -550,7 +563,7 @@ export default {
 	.section-header {
 		display: flex;
 		align-items: center;
-		margin-bottom: 24rpx;
+		margin-bottom: 32rpx;
 		
 		.section-indicator {
 			width: 6rpx;
@@ -570,7 +583,7 @@ export default {
 	.section-subtitle {
 		font-size: 24rpx;
 		color: #999;
-		margin-bottom: 24rpx;
+		//margin-bottom: 24rpx;
 		margin-left: 22rpx;
 	}
 	
@@ -623,17 +636,19 @@ export default {
 	}
 	
 	.certificate-item {
+		padding-bottom: 32rpx;
 		margin-bottom: 32rpx;
-		
+		border-bottom: 2rpx solid #F5F5F5; 
 		&:last-child {
 			margin-bottom: 0;
+			border-bottom: 0;
 		}
 		
 		.certificate-header {
 			display: flex;
 			align-items: center;
 			justify-content: space-between;
-			margin-bottom: 16rpx;
+			margin-bottom: 24rpx;
 			
 			.certificate-title {
 				font-size: 28rpx;
@@ -665,7 +680,7 @@ export default {
 		.certificate-tip {
 			font-size: 24rpx;
 			color: #999;
-			margin-bottom: 16rpx;
+			// margin-bottom: 16rpx;
 		}
 		
 		.upload-grid {
@@ -674,23 +689,29 @@ export default {
 			flex-wrap: wrap;
 			
 			.upload-item {
-				width: 200rpx;
-				height: 200rpx;
+				width: 310rpx;
+				height: 176rpx;
 				border-radius: 8rpx;
 				overflow: hidden;
 				position: relative;
-				
 				.uploaded-image {
 					width: 100%;
 					height: 100%;
 				}
-				
+				.bg{
+					width: 100%;
+					height: 100%;
+					position: absolute;
+					top: 0;
+					left: 0;
+				}
 				.delete-btn {
 					position: absolute;
-					top: 8rpx;
-					right: 8rpx;
+					top: 0;
+					right: 0;
 					width: 40rpx;
 					height: 40rpx;
+					line-height: 40rpx;
 					background: rgba(0, 0, 0, 0.5);
 					border-radius: 50%;
 					display: flex;
@@ -700,14 +721,20 @@ export default {
 					color: #fff;
 				}
 				
-				&				.upload-placeholder {
+				&.upload-placeholder {
 					background: #f5f5f5;
 					display: flex;
 					flex-direction: column;
 					align-items: center;
 					justify-content: center;
-					border: 2rpx dashed #ddd;
-					
+					// border: 2rpx dashed #ddd;
+				    .img-btn{
+						z-index: 1;
+						display: flex;
+						flex-direction: column;
+						align-items: center;
+						justify-content: center;
+					}
 					.camera-icon {
 						font-size: 60rpx;
 						margin-bottom: 8rpx;
@@ -730,12 +757,12 @@ export default {
 	right: 0;
 	background: #fff;
 	padding: 24rpx;
-	border-top: 1rpx solid #f0f0f0;
+	// border-top: 1rpx solid #f0f0f0;
 	z-index: 100;
 	
 	.agreement-checkbox {
 		margin-bottom: 24rpx;
-		
+		margin-top: 20rpx;
 		.checkbox-label {
 			display: flex;
 			align-items: flex-start;
@@ -766,7 +793,7 @@ export default {
 			border-radius: 8rpx;
 			font-size: 32rpx;
 			font-weight: 500;
-			
+			border-radius: 200rpx 200rpx 200rpx 200rpx;
 			&.btn-cancel {
 				background: #fff;
 				border: 2rpx solid #388BFF;

+ 2 - 2
pages_user/certificationExample.vue

@@ -34,7 +34,7 @@
 					<view class="instruction-item">2.因各省市证件样式不统一,如有2页请拍摄完整</view>
 				</view>
 				<view class="example-image">
-					<image src="@/static/image/img_example4.png" mode=""></image>
+					<image src="@/static/image/img_example4.svg" mode=""></image>
 					<!-- <view class="image-placeholder">示例图片:老版本职称证</view> -->
 					<!-- 请将示例图片放置在 @/static/image/example_old_certificate.png -->
 				</view>
@@ -51,7 +51,7 @@
 					<view class="instruction-item">2.包含执业证注册信息,主执业机构地点</view>
 				</view>
 				<view class="example-image">
-					<image src="@/static/image/img_example5.png" mode=""></image>
+					<image src="@/static/image/img_example5.svg" mode=""></image>
 					<!-- <view class="image-placeholder">示例图片:新版本职称证</view> -->
 					<!-- 请将示例图片放置在 @/static/image/example_new_certificate.png -->
 				</view>

+ 5 - 12
pages_user/certificationInfo.vue

@@ -1,17 +1,5 @@
 <template>
 	<view class="container">
-		<!-- 导航栏 -->
-		<view class="navbar">
-			<view class="nav-left" @click="goBack">
-				<text class="back-icon"><</text>
-			</view>
-			<view class="nav-title">认证信息</view>
-			<view class="nav-right">
-				<text class="more-icon">...</text>
-				<text class="eye-icon">O</text>
-			</view>
-		</view>
-		
 		<!-- 内容区域 -->
 		<scroll-view class="content" scroll-y>
 			<view class="info-list">
@@ -246,3 +234,8 @@ export default {
 </style>
 
 
+
+
+
+
+

+ 64 - 76
pages_user/editBankCard.vue

@@ -1,17 +1,5 @@
 <template>
-	<view class="container">
-		<!-- 导航栏 -->
-		<view class="navbar">
-			<view class="nav-left" @click="goBack">
-				<text class="back-icon"><</text>
-			</view>
-			<view class="nav-title">编辑银行卡</view>
-			<view class="nav-right">
-				<text class="more-icon">...</text>
-				<text class="eye-icon">O</text>
-			</view>
-		</view>
-		
+	<view class="container">	
 		<!-- 表单区域 -->
 		<scroll-view class="content" scroll-y>
 			<view class="form-section">
@@ -20,7 +8,7 @@
 					<picker mode="selector" :range="bankList" range-key="name" @change="onBankChange">
 						<view class="form-input picker-input" :class="{ placeholder: !formData.bank }">
 							{{ formData.bank || '请选择开户行' }}
-							<text class="arrow-right">></text>
+							<image class="w36 h36" src="@/static/image/icon_my_more.png" mode=""></image>
 						</view>
 					</picker>
 				</view>
@@ -31,7 +19,7 @@
 					<picker mode="selector" :range="branchList" range-key="name" @change="onBranchChange">
 						<view class="form-input picker-input" :class="{ placeholder: !formData.branch }">
 							{{ formData.branch || '请选择支行' }}
-							<text class="arrow-right">></text>
+							<image class="w36 h36" src="@/static/image/icon_my_more.png" mode=""></image>
 						</view>
 					</picker>
 				</view>
@@ -45,7 +33,7 @@
 						placeholder="请输入银行卡号"
 						type="number"
 						maxlength="19"
-						placeholder-class="placeholder"
+						placeholder-class="text-placeholder"
 					/>
 				</view>
 			</view>
@@ -267,9 +255,15 @@ export default {
 }
 </script>
 
+<style lang="stylus">
+	.text-placeholder{
+	  color: #C8C9CC !important;
+	}
+</style>
 <style lang="scss" scoped>
+	
 .container {
-	min-height: 100vh;
+	// min-height: 100vh;
 	background: #f5f5f5;
 	display: flex;
 	flex-direction: column;
@@ -321,54 +315,54 @@ export default {
 }
 
 .content {
-	flex: 1;
-	padding-bottom: 140rpx;
+	// flex: 1;
+	// padding-bottom: 140rpx;
 }
 
 .form-section {
 	background: #fff;
-	margin: 24rpx;
-	border-radius: 16rpx;
+	// margin: 24rpx;
+	// border-radius: 16rpx;
 	overflow: hidden;
 	
 	.form-item {
 		display: flex;
 		align-items: center;
 		justify-content: space-between;
-		padding: 32rpx 24rpx;
-		min-height: 100rpx;
-		
+		padding: 28rpx 32rpx;
+		// min-height: 100rpx
 		.form-label {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
 			font-size: 28rpx;
-			color: #333;
-			font-weight: 500;
+			color: #666666;
 			width: 150rpx;
 		}
+	.form-input {
+		flex: 1;
+		font-size: 28rpx;
+		color: #333;
+		text-align: right;
+		margin-left: 24rpx;
 		
-		.form-input {
-			flex: 1;
-			font-size: 28rpx;
-			color: #333;
-			text-align: right;
-			margin-left: 24rpx;
+		&.picker-input {
+			display: flex;
+			align-items: center;
+			justify-content: flex-end;
 			
-			&.placeholder {
-				color: #C8C9CC;
-			}
-			
-			&.picker-input {
-				display: flex;
-				align-items: center;
-				justify-content: flex-end;
-				
-				.arrow-right {
-					font-size: 32rpx;
-					color: #999;
-					margin-left: 8rpx;
-				}
+			.arrow-right {
+				font-size: 32rpx;
+				color: #999;
+				margin-left: 8rpx;
 			}
 		}
 	}
+}
+
+// placeholder 样式(需要独立定义,不能嵌套)
+.placeholder {
+	color: #C8C9CC !important;
+	}
 	
 	.divider {
 		height: 1rpx;
@@ -378,42 +372,33 @@ export default {
 }
 
 .notes-section {
-	background: #fff;
-	border-radius: 16rpx;
-	padding: 32rpx;
-	margin: 0 24rpx 24rpx;
+	// background: #fff;
+	// border-radius: 16rpx;
+	padding: 22rpx 32rpx;
+	// margin: 0 24rpx 24rpx;
 	
 	.notes-title {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
 		font-size: 28rpx;
-		font-weight: bold;
-		color: #333;
-		margin-bottom: 16rpx;
+		color: #999999;
+		line-height: 40rpx;
 	}
 	
 	.notes-item {
-		font-size: 26rpx;
-		color: #666;
-		line-height: 1.8;
-		margin-bottom: 8rpx;
-		
-		&:last-child {
-			margin-bottom: 0;
-		}
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 28rpx;
+		color: #999999;
+		line-height: 40rpx;
 	}
 }
 
 .bottom-bar {
-	position: fixed;
-	bottom: 0;
-	left: 0;
-	right: 0;
-	background: #fff;
-	padding: 24rpx;
-	border-top: 1rpx solid #f0f0f0;
-	z-index: 100;
-	display: flex;
+    display: flex;
+	align-items: center;
 	flex-direction: column;
-	gap: 16rpx;
+	padding: 32rpx;
 	
 	.save-btn {
 		width: 100%;
@@ -424,20 +409,23 @@ export default {
 		align-items: center;
 		justify-content: center;
 		font-size: 32rpx;
-		font-weight: bold;
 		color: #fff;
 	}
-	
-	.unbind-btn {
+	.unbind-btn{
+		margin-top: 20rpx;
 		width: 100%;
 		height: 88rpx;
+		color: #388BFF;
 		display: flex;
 		align-items: center;
 		justify-content: center;
-		font-size: 28rpx;
-		color: #388BFF;
+		font-size: 32rpx;
 	}
 }
 </style>
 
 
+
+
+
+

+ 261 - 0
pages_user/forgetPassword.vue

@@ -0,0 +1,261 @@
+<template>
+	<view class="setting-page">
+		<view class="content">
+			<view class="info-item">
+				<text class="title">手机号码</text>
+				<input class="input-field code-input" type="text" :password="!phone" v-model="phone"
+					placeholder="请输入手机号码" />
+			</view>
+			<view class="info-item">
+				<text class="title">验证码</text>
+				<input class="input-field code-input" type="number" v-model="verifyCode"
+					placeholder="请输入验证码" maxlength="6" />
+				<view  class="get-code-btn" @click="getVerifyCode">
+					{{ codeText }}
+				</view>
+			</view>
+			<view class="info-item">
+				<text class="title">密码</text>
+				<input class="input-field code-input" type="text" :password="!showNewPassword" v-model="newPassword"
+					placeholder="请输入8-16位字符,必须包含数字和字母" />
+				<view class="img-box" @click="toggleNewPassword">
+					<image class="icon"
+						:src="showNewPassword?'/static/image/icon_visible.png':'/static/image/icon_invisible.png'"
+						mode="aspectFill"></image>
+				</view>
+			</view>
+		</view>
+		<view class="btn-box">
+			<view class="confirm" @click="confirm">确认</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				phone:17873014571,
+				codeText: '获取验证码', // 验证码按钮文字
+				newPassword: '',
+				confirmPassword: '',
+				// 为每个密码框单独设置显示状态
+				showOldPassword: false,
+				showNewPassword: false,
+				showConfirmPassword: false
+			}
+		},
+		onLoad() {},
+		methods: {
+			// 获取验证码
+			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;
+				}
+				// TODO: 调用发送验证码API
+				// 这里需要对接真实的发送验证码接口
+				uni.showLoading({
+					title: "发送中..."
+				});
+				// 模拟发送验证码
+				setTimeout(() => {
+					uni.hideLoading();
+					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);
+				}, 1000);
+			},
+			// 分别控制每个密码框的显示/隐藏
+			toggleOldPassword() {
+				this.showOldPassword = !this.showOldPassword;
+			},
+			toggleNewPassword() {
+				this.showNewPassword = !this.showNewPassword;
+			},
+			toggleConfirmPassword() {
+				this.showConfirmPassword = !this.showConfirmPassword;
+			},
+			confirm() {
+				// 验证逻辑
+				if (!this.oldPassword) {
+					uni.showToast({
+						title: '请输入原密码',
+						icon: 'none'
+					});
+					return;
+				}
+
+				if (!this.newPassword) {
+					uni.showToast({
+						title: '请输入新密码',
+						icon: 'none'
+					});
+					return;
+				}
+
+				// 密码格式验证
+				const passwordRegex = /^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]{8,20}$/;
+				if (!passwordRegex.test(this.newPassword)) {
+					uni.showToast({
+						title: '密码需8-20位字母和数字组合',
+						icon: 'none'
+					});
+					return;
+				}
+
+				if (this.newPassword !== this.confirmPassword) {
+					uni.showToast({
+						title: '两次输入的新密码不一致',
+						icon: 'none'
+					});
+					return;
+				}
+
+				// 调用修改密码的API
+				this.changePassword();
+			},
+
+			// 修改密码的API调用
+			async changePassword() {
+				try {
+					uni.showLoading({
+						title: '修改中...'
+					});
+
+					// 这里添加实际的API调用
+					// const res = await uni.request({
+					// 	url: '/api/change-password',
+					// 	method: 'POST',
+					// 	data: {
+					// 		oldPassword: this.oldPassword,
+					// 		newPassword: this.newPassword
+					// 	}
+					// });
+
+					// 模拟成功
+					setTimeout(() => {
+						uni.hideLoading();
+						uni.showToast({
+							title: '密码修改成功',
+							icon: 'success'
+						});
+
+						// 清空表单
+						this.oldPassword = '';
+						this.newPassword = '';
+						this.confirmPassword = '';
+
+						// 跳转到其他页面或返回
+						setTimeout(() => {
+							uni.navigateBack();
+						}, 1500);
+					}, 1000);
+
+				} catch (error) {
+					uni.hideLoading();
+					uni.showToast({
+						title: error.message || '修改失败',
+						icon: 'none'
+					});
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.setting-page {
+		background: #ffffff;
+		min-height: 100vh;
+
+		.content {
+			background: #ffffff;
+		}
+
+		.info-item {
+			height: 104upx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			border-bottom: 1px solid #F5F6FA;
+
+			.title {
+				width: 160rpx;
+				font-size: 28rpx;
+				color: #666666;
+				margin-left: 32rpx;
+			}
+
+			.input-field {
+				width: 100%;
+				font-size: 30rpx;
+				font-family: PingFang SC;
+				color: #333333;
+			}
+
+			.code-input {
+				flex: 1;
+			}
+
+			.img-box {
+				padding: 32rpx;
+
+				.icon {
+					width: 32rpx;
+					height: 32rpx;
+				}
+			}
+
+			.get-code-btn {
+				margin-right: 32rpx;
+				font-size: 28rpx;
+				font-weight: 500;
+				color: #157CF8;
+				padding-left: 20rpx;
+				white-space: nowrap;
+			}
+		}
+
+		.btn-box {
+			padding: 64upx 32upx;
+
+			.confirm {
+				width: 100%;
+				height: 88upx;
+				line-height: 88upx;
+				text-align: center;
+				font-family: PingFang SC;
+				font-size: 32upx;
+				color: #FFFFFF;
+				background: #388BFF;
+				border-radius: 44upx;
+			}
+		}
+	}
+</style>

+ 19 - 16
pages_user/points.vue

@@ -66,7 +66,9 @@
 			<view class="picker-content" @click.stop>
 				<view class="picker-header">
 					<view class="picker-title">任务类型</view>
-					<view class="picker-close" @click="closeTypePicker">×</view>
+					<view class="picker-close" @click="closeTypePicker">
+						<image class="w44 h44" src="@/static/image/icon_cross.png" mode=""></image>
+					</view>
 				</view>
 				<view class="picker-body">
 					<view class="type-grid">
@@ -139,7 +141,7 @@ export default {
 		},
 		goWithdraw() {
 			uni.navigateTo({
-				url: '/pages/user/withdraw'
+				url: '/pages_user/withdraw'
 			})
 		},
 		onDateChange(e) {
@@ -495,7 +497,6 @@ export default {
 		align-items: center;
 		justify-content: center;
 		padding: 32rpx 24rpx;
-		border-bottom: 1rpx solid #f0f0f0;
 		position: relative;
 		
 		.picker-cancel {
@@ -504,9 +505,10 @@ export default {
 		}
 		
 		.picker-title {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
 			font-size: 32rpx;
-			font-weight: bold;
-			color: #333;
+			color: #333333;
 		}
 		
 		.picker-close {
@@ -538,20 +540,20 @@ export default {
 		.type-grid {
 			display: flex;
 			flex-wrap: wrap;
-			gap: 16rpx;
+			gap: 20rpx;
 			
 			.type-btn-item {
-				padding: 16rpx 32rpx;
-				border-radius: 44rpx;
+				padding: 14rpx 0;
+				border-radius:70rpx;
 				font-size: 28rpx;
 				color: #333;
-				background: #f5f5f5;
+				background: #F7F8FA;
 				border: 2rpx solid transparent;
-				min-width: 140rpx;
+				width: calc((100% - 60rpx)/3);
 				text-align: center;
 				
 				&.active {
-					background: #fff;
+					background: rgba(56,139,255,0.15);
 					border-color: #388BFF;
 					color: #388BFF;
 				}
@@ -579,17 +581,18 @@ export default {
 		display: flex;
 		gap: 24rpx;
 		padding: 24rpx;
-		border-top: 1rpx solid #f0f0f0;
-		
+		margin-bottom: 40rpx;
 		.footer-btn {
 			flex: 1;
 			height: 88rpx;
 			display: flex;
 			align-items: center;
 			justify-content: center;
-			border-radius: 8rpx;
-			font-size: 32rpx;
-			font-weight: 500;
+			border-radius: 200rpx 200rpx 200rpx 200rpx;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 28rpx;
+			color: #FFFFFF;
 			
 			&.btn-reset {
 				background: #fff;

+ 3 - 3
pages_user/practiceCertificateExample.vue

@@ -36,12 +36,12 @@
 				</view>
 				<view class="example-images">
 					<view class="example-image-item">
-						<image src="@/static/image/img_example1.png" mode=""></image>
+						<image src="@/static/image/img_example1.svg" mode=""></image>
 						<!-- <view class="image-placeholder">示例图片1:老版本执业证编码页</view> -->
 						<!-- 请将示例图片放置在 @/static/image/example_old_practice_1.png -->
 					</view>
 					<view class="example-image-item">
-						<image src="@/static/image/img_example2.png" mode=""></image>
+						<image src="@/static/image/img_example2.svg" mode=""></image>
 						<!-- <view class="image-placeholder">示例图片2:老版本执业证注册信息页</view> -->
 						<!-- 请将示例图片放置在 @/static/image/example_old_practice_2.png -->
 					</view>
@@ -59,7 +59,7 @@
 					<view class="instruction-item">2.如有变更记录请继续补充上传。</view>
 				</view>
 				<view class="example-image">
-					<image src="@/static/image/img_example3.png" mode=""></image>
+					<image src="@/static/image/img_example3.svg" mode=""></image>
 					<!-- <view class="image-placeholder">示例图片:新版本执业证</view> -->
 					<!-- 请将示例图片放置在 @/static/image/example_new_practice.png -->
 				</view>

+ 5 - 12
pages_user/serviceAgreement.vue

@@ -1,17 +1,5 @@
 <template>
 	<view class="container">
-		<!-- 导航栏 -->
-		<view class="navbar">
-			<view class="nav-left" @click="goBack">
-				<text class="back-icon"><</text>
-			</view>
-			<view class="nav-title">服务协议</view>
-			<view class="nav-right">
-				<text class="more-icon">...</text>
-				<text class="eye-icon">O</text>
-			</view>
-		</view>
-		
 		<!-- 内容区域 -->
 		<scroll-view class="content" scroll-y>
 			<view class="agreement-list">
@@ -150,3 +138,8 @@ export default {
 </style>
 
 
+
+
+
+
+

+ 6 - 13
pages_user/serviceAgreementDetail.vue

@@ -1,17 +1,5 @@
 <template>
-	<view class="container">
-		<!-- 导航栏 -->
-		<view class="navbar">
-			<view class="nav-left" @click="goBack">
-				<text class="back-icon"><</text>
-			</view>
-			<view class="nav-title">{{ agreementTitle }}</view>
-			<view class="nav-right">
-				<text class="more-icon">...</text>
-				<text class="eye-icon">O</text>
-			</view>
-		</view>
-		
+	<view class="container">	
 		<!-- 内容区域 -->
 		<scroll-view class="content" scroll-y>
 			<view class="agreement-content" v-html="agreementContent"></view>
@@ -163,3 +151,8 @@ export default {
 </style>
 
 
+
+
+
+
+

+ 44 - 44
pages_user/serviceOrder.vue

@@ -1,17 +1,5 @@
 <template>
-	<view class="container">
-		<!-- 导航栏 -->
-		<view class="navbar">
-			<view class="nav-left" @click="goBack">
-				<text class="back-icon"><</text>
-			</view>
-			<view class="nav-title">服务单</view>
-			<view class="nav-right">
-				<text class="more-icon">...</text>
-				<text class="eye-icon">O</text>
-			</view>
-		</view>
-		
+	<view class="container">	
 		<!-- 标签页 -->
 		<view class="tabs">
 			<view class="tab-item" :class="{ active: activeTab === 'pending' }" @click="switchTab('pending')">
@@ -29,7 +17,7 @@
 			<view class="order-list">
 				<view class="month-group" v-for="(group, groupIndex) in groupedOrders" :key="groupIndex">
 					<view class="month-header">
-						<view class="month-icon">○</view>
+						<!-- <view class="month-icon">○</view> -->
 						<text class="month-text">{{ group.month }}</text>
 					</view>
 					<view class="order-items">
@@ -100,29 +88,30 @@ export default {
 			
 			try {
 				uni.showLoading({ title: '加载中...' })
-				const res = await getServiceOrderList({
-					status: this.activeTab === 'pending' ? 0 : 1, // 0: 待确认, 1: 已确认
-					page: this.page,
-					pageSize: this.pageSize
-				})
-				uni.hideLoading()
+				this.orderList = this.getDefaultData()
+				// const res = await getServiceOrderList({
+				// 	status: this.activeTab === 'pending' ? 0 : 1, // 0: 待确认, 1: 已确认
+				// 	page: this.page,
+				// 	pageSize: this.pageSize
+				// })
+				// uni.hideLoading()
 				
-				if (res.code === 200 && res.data) {
-					const list = res.data.list || []
-					if (refresh) {
-						this.orderList = list
-					} else {
-						this.orderList = [...this.orderList, ...list]
-					}
+				// if (res.code === 200 && res.data) {
+				// 	const list = res.data.list || []
+				// 	if (refresh) {
+				// 		this.orderList = list
+				// 	} else {
+				// 		this.orderList = [...this.orderList, ...list]
+				// 	}
 					
-					this.hasMore = list.length >= this.pageSize
-					if (this.hasMore) {
-						this.page++
-					}
-				} else {
-					// 使用示例数据
-					this.orderList = this.getDefaultData()
-				}
+				// 	this.hasMore = list.length >= this.pageSize
+				// 	if (this.hasMore) {
+				// 		this.page++
+				// 	}
+				// } else {
+				// 	// 使用示例数据
+				// 	this.orderList = this.getDefaultData()
+				// }
 			} catch (e) {
 				uni.hideLoading()
 				console.error('加载服务单列表失败', e)
@@ -130,6 +119,7 @@ export default {
 			}
 		},
 		getDefaultData() {
+			uni.hideLoading()
 			// 示例数据
 			const list = []
 			const currentDate = new Date()
@@ -270,10 +260,10 @@ export default {
 				bottom: 0;
 				left: 50%;
 				transform: translateX(-50%);
-				width: 60rpx;
-				height: 4rpx;
+				width: 80rpx;
+				height: 6rpx;
 				background: #388BFF;
-				border-radius: 2rpx;
+				border-radius: 3rpx 3rpx 3rpx 3rpx;
 			}
 		}
 	}
@@ -318,7 +308,7 @@ export default {
 			background: #fff;
 			border-radius: 16rpx;
 			padding: 32rpx 24rpx;
-			margin-bottom: 16rpx;
+			margin-bottom: 20rpx;
 			display: flex;
 			align-items: center;
 			justify-content: space-between;
@@ -331,15 +321,18 @@ export default {
 				flex: 1;
 				
 				.order-title {
-					font-size: 32rpx;
+					font-family: PingFang SC, PingFang SC;
 					font-weight: 500;
-					color: #333;
+					font-size: 28rpx;
+					color: #333333;
 					margin-bottom: 12rpx;
 				}
 				
 				.order-time {
+					font-family: PingFang SC, PingFang SC;
+					font-weight: 400;
 					font-size: 24rpx;
-					color: #999;
+					color: #666666;
 				}
 			}
 			
@@ -348,8 +341,10 @@ export default {
 					padding: 12rpx 32rpx;
 					background: #388BFF;
 					border-radius: 44rpx;
-					font-size: 26rpx;
-					color: #fff;
+					font-family: PingFang SC, PingFang SC;
+					font-weight: 500;
+					font-size: 24rpx;
+					color: #FFFFFF;
 				}
 			}
 		}
@@ -365,3 +360,8 @@ export default {
 </style>
 
 
+
+
+
+
+

+ 42 - 45
pages_user/serviceOrderDetail.vue

@@ -1,24 +1,12 @@
 <template>
 	<view class="container">
-		<!-- 导航栏 -->
-		<view class="navbar">
-			<view class="nav-left" @click="goBack">
-				<text class="back-icon"><</text>
-			</view>
-			<view class="nav-title">服务单详情</view>
-			<view class="nav-right">
-				<text class="more-icon">...</text>
-				<text class="eye-icon">O</text>
-			</view>
-		</view>
-		
 		<!-- 内容区域 -->
 		<scroll-view class="content" scroll-y>
 			<view class="detail-section">
 				<!-- 服务单标题和已确认标识 -->
 				<view class="order-header">
 					<view class="order-title-text">服务单</view>
-					<view class="confirmed-stamp" v-if="orderDetail.status === 1">已确认</view>
+					<image class="w144 h144" v-if="orderDetail.status === 1" src="@/static/image/img_confirmed.png" mode=""></image>
 				</view>
 				
 				<!-- 服务内容 -->
@@ -74,7 +62,9 @@
 					</view>
 				</view>
 			</view>
+			</scroll-view>
 			
+		<view class="confirm-box">
 			<!-- 确认选项(仅待确认状态显示) -->
 			<view class="confirm-options" v-if="orderDetail.status === 0">
 				<view class="option-item">
@@ -94,13 +84,13 @@
 					</checkbox-group>
 				</view>
 			</view>
-		</scroll-view>
-		
-		<!-- 底部按钮(仅待确认状态显示) -->
-		<view class="bottom-bar" v-if="orderDetail.status === 0">
-			<view class="btn btn-cancel" @click="goBack">返回</view>
-			<view class="btn btn-confirm" @click="handleConfirm">确认</view>
+			<!-- 底部按钮(仅待确认状态显示) -->
+			<view class="bottom-bar" v-if="orderDetail.status === 0">
+				<view class="btn btn-cancel" @click="goBack">返回</view>
+				<view class="btn btn-confirm" @click="handleConfirm">确认</view>
+			</view>
 		</view>
+		
 	</view>
 </template>
 
@@ -122,7 +112,8 @@ export default {
 			confirmOptions: {
 				promise: false,
 				lecture: false
-			}
+			},
+			
 		}
 	},
 	onLoad(options) {
@@ -138,12 +129,12 @@ export default {
 		async loadOrderDetail() {
 			try {
 				uni.showLoading({ title: '加载中...' })
-				const res = await getServiceOrderDetail({ id: this.orderId })
+				// const res = await getServiceOrderDetail({ id: this.orderId })
 				uni.hideLoading()
 				
-				if (res.code === 200 && res.data) {
-					this.orderDetail = { ...this.orderDetail, ...res.data }
-				} else {
+				// if (res.code === 200 && res.data) {
+				// 	this.orderDetail = { ...this.orderDetail, ...res.data }
+				// } else {
 					// 使用示例数据
 					this.orderDetail.serviceItems = [
 						{ projectName: '病例征集', singleAmount: '111.00', completeTime: '2023年9月12日', unit: '个', quantity: 1, totalAmount: '111.00' },
@@ -152,7 +143,7 @@ export default {
 						{ projectName: '病例征集', singleAmount: '1200.00', completeTime: '2023年9月12日', unit: '个', quantity: 1, totalAmount: '1200.00' },
 						{ projectName: '病例征集', singleAmount: '23.00', completeTime: '2023年9月12日', unit: '个', quantity: 1, totalAmount: '23.00' }
 					]
-				}
+				// }
 			} catch (e) {
 				uni.hideLoading()
 				console.error('加载服务单详情失败', e)
@@ -185,10 +176,10 @@ export default {
 			
 			try {
 				uni.showLoading({ title: '确认中...' })
-				const res = await confirmServiceOrder({
-					id: this.orderId,
-					confirmOptions: this.confirmOptions
-				})
+				// const res = await confirmServiceOrder({
+				// 	id: this.orderId,
+				// 	confirmOptions: this.confirmOptions
+				// })
 				uni.hideLoading()
 				
 				if (res.code === 200) {
@@ -220,7 +211,7 @@ export default {
 <style lang="scss" scoped>
 .container {
 	min-height: 100vh;
-	background: #f5f5f5;
+	background: #fff;
 	display: flex;
 	flex-direction: column;
 }
@@ -272,13 +263,13 @@ export default {
 
 .content {
 	flex: 1;
-	padding-bottom: 140rpx;
+	padding-bottom: 400rpx;
 }
 
 .detail-section {
 	background: #fff;
-	margin: 24rpx;
-	border-radius: 16rpx;
+	// margin: 24rpx;
+	// border-radius: 16rpx;
 	padding: 32rpx;
 }
 
@@ -286,7 +277,11 @@ export default {
 	position: relative;
 	text-align: center;
 	margin-bottom: 32rpx;
-	
+	image{
+		position: absolute;
+		    right: 0;
+		    top: 0;
+	}
 	.order-title-text {
 		font-size: 36rpx;
 		font-weight: bold;
@@ -397,12 +392,21 @@ export default {
 	}
 }
 
+.confirm-box{
+	position: fixed;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	background: #fff;
+	// padding: 24rpx;
+	border-top: 1rpx solid #f0f0f0;
+	z-index: 100;
+	box-shadow: 0rpx -4rpx 16rpx 0rpx rgba(0,0,0,0.04);
+}
 .confirm-options {
 	background: #fff;
-	margin: 0 24rpx 24rpx;
 	border-radius: 16rpx;
 	padding: 32rpx;
-	
 	.option-item {
 		margin-bottom: 24rpx;
 		
@@ -426,17 +430,10 @@ export default {
 }
 
 .bottom-bar {
-	position: fixed;
-	bottom: 0;
-	left: 0;
-	right: 0;
-	background: #fff;
-	padding: 24rpx;
-	border-top: 1rpx solid #f0f0f0;
-	z-index: 100;
+	padding:24rpx 32rpx;
 	display: flex;
 	gap: 24rpx;
-	
+	margin-bottom: 40rpx;
 	.btn {
 		flex: 1;
 		height: 88rpx;

+ 43 - 39
pages_user/withdraw.vue

@@ -1,17 +1,5 @@
 <template>
 	<view class="container">
-		<!-- 导航栏 -->
-		<view class="navbar">
-			<view class="nav-left" @click="goBack">
-				<text class="back-icon"><</text>
-			</view>
-			<view class="nav-title">提现</view>
-			<view class="nav-right">
-				<text class="more-icon">...</text>
-				<text class="eye-icon">O</text>
-			</view>
-		</view>
-		
 		<!-- 内容区域 -->
 		<scroll-view class="content" scroll-y>
 			<!-- 提现至 -->
@@ -20,7 +8,7 @@
 				<view class="bank-info" @click="goSelectBank">
 					<text>{{ bankCardInfo.bankName || '请选择银行卡' }}</text>
 					<text class="card-tail" v-if="bankCardInfo.cardNumber">({{ getCardTail(bankCardInfo.cardNumber) }})</text>
-					<text class="arrow-right">></text>
+					<image class="w36 h36" src="@/static/image/icon_my_more.png" mode=""></image>
 				</view>
 			</view>
 			
@@ -28,18 +16,21 @@
 			<view class="amount-section">
 				<view class="section-label">提现金额</view>
 				<view class="amount-input-wrapper">
-					<text class="currency">¥</text>
-					<input 
-						class="amount-input" 
-						v-model="withdrawAmount" 
-						type="digit"
-						placeholder="0.00"
-						@input="onAmountInput"
-					/>
+					<view class="align-end" style="flex:1">
+						<text class="currency">¥</text>
+						<input 
+							class="amount-input" 
+							v-model="withdrawAmount" 
+							type="digit"
+							placeholder="0.00"
+							@input="onAmountInput"
+						/>
+					</view>
+					<text class="withdraw-all" @click="withdrawAll">全部提现</text>
 				</view>
 				<view class="amount-footer">
 					<text class="available-amount">可提现金额: ¥ {{ availableAmount || '0.00' }}</text>
-					<text class="withdraw-all" @click="withdrawAll">全部提现</text>
+					
 				</view>
 			</view>
 		</scroll-view>
@@ -263,17 +254,18 @@ export default {
 
 .withdraw-to-section {
 	background: #fff;
-	padding: 32rpx 24rpx;
-	margin: 24rpx;
-	border-radius: 16rpx;
+	padding: 32rpx;
+	// margin: 24rpx;
+	//border-radius: 16rpx;
 	display: flex;
 	align-items: center;
 	justify-content: space-between;
 	
 	.section-label {
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
 		font-size: 28rpx;
-		color: #333;
-		font-weight: 500;
+		color: #666666;
 	}
 	
 	.bank-info {
@@ -293,15 +285,16 @@ export default {
 			font-size: 32rpx;
 			color: #999;
 			margin-left: 8rpx;
+			margin-bottom: 10rpx;
 		}
 	}
 }
 
 .amount-section {
 	background: #fff;
-	padding: 32rpx 24rpx;
-	margin: 0 24rpx 24rpx;
-	border-radius: 16rpx;
+	padding: 32rpx;
+	//margin: 0 24rpx 24rpx;
+	///border-radius: 16rpx;
 	
 	.section-label {
 		font-size: 28rpx;
@@ -312,13 +305,14 @@ export default {
 	
 	.amount-input-wrapper {
 		display: flex;
-		align-items: center;
+		align-items: flex-end;
 		margin-bottom: 24rpx;
 		
 		.currency {
-			font-size: 48rpx;
-			font-weight: bold;
-			color: #333;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 600;
+			font-size: 28rpx;
+			color: #333333;
 			margin-right: 8rpx;
 		}
 		
@@ -330,6 +324,12 @@ export default {
 			height: 80rpx;
 			line-height: 80rpx;
 		}
+		.withdraw-all {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 28rpx;
+			color: #388BFF;
+		}
 	}
 	
 	.amount-footer {
@@ -338,14 +338,13 @@ export default {
 		justify-content: space-between;
 		
 		.available-amount {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
 			font-size: 24rpx;
-			color: #999;
+			color: #999999;
 		}
 		
-		.withdraw-all {
-			font-size: 28rpx;
-			color: #388BFF;
-		}
+		
 	}
 }
 
@@ -383,3 +382,8 @@ export default {
 </style>
 
 
+
+
+
+
+

+ 5 - 12
pages_user/withdrawSuccess.vue

@@ -1,17 +1,5 @@
 <template>
 	<view class="container">
-		<!-- 导航栏 -->
-		<view class="navbar">
-			<view class="nav-left" @click="goBack">
-				<text class="back-icon"><</text>
-			</view>
-			<view class="nav-title">完成任务</view>
-			<view class="nav-right">
-				<text class="more-icon">...</text>
-				<text class="eye-icon">O</text>
-			</view>
-		</view>
-		
 		<!-- 内容区域 -->
 		<view class="content">
 			<!-- 成功图标 -->
@@ -230,3 +218,8 @@ export default {
 </style>
 
 
+
+
+
+
+

BIN
static/image/bg_invitecard.png


BIN
static/image/bg_login.png


BIN
static/image/bg_qestion.png


BIN
static/image/bg_tab_login.png


BIN
static/image/bg_tab_login2.png


+ 0 - 0
static/image/Iconly/Light/Calendar.png → static/image/calendar.png


BIN
static/image/img_confirmed.png


BIN
static/image/img_example1.png


BIN
static/image/img_example2.png


BIN
static/image/img_example3.png


BIN
static/image/img_example4.png


BIN
static/image/img_example5.png


BIN
static/image/img_nocard.png


BIN
static/image/img_renzheng.png


BIN
static/image/my_heads_icon64 (1).png


BIN
static/image/my_heads_icon64.png


BIN
static/image/top_bg.png