Quellcode durchsuchen

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

李妹妹 vor 1 Monat
Ursprung
Commit
85603341c5

+ 4 - 0
api/index.js

@@ -71,3 +71,7 @@ export function getCartCount() {
  export function getIndexBannerList(data) {
  	 return request('/app/common/getIndexBannerList',data,'POST');
  }
+//是否展示视频
+ export function getShowVideo(data) {
+ 	 return request('/app/common/getShowVideo',data,'GET');
+ }

+ 3 - 3
api/onlineLecture.js

@@ -1,9 +1,9 @@
 import Request from '../common/request.js';
 let request = new Request().http
 
-// 获取在线讲座列表
+// 获取空中课堂列表
 export function getOnlineLectureList(data) {
-	return request('/store/app/onlineLecture/getList', data, 'GET');
+	return request('/app/liveBroadcast/list', data, 'GET');
 }
 
 // 获取开播链接
@@ -28,7 +28,7 @@ export function continueBroadcast(data) {
 
 // 获取讲座详情
 export function getLectureDetail(data) {
-	return request('/store/app/onlineLecture/getDetail', data, 'GET');
+	return request('/app/liveBroadcast/'+data, data, 'GET');
 }
 
 // 结束直播

+ 2 - 2
api/statistics.js

@@ -3,7 +3,7 @@ let request = new Request().http
 
 // 获取统计数据
 export function getStatisticsData(data) {
-	return request('/store/app/statistics/getData', data, 'GET');
+	return request('/app/task/getTaskCountList', data, 'GET');
 }
 
 // 获取统计图表数据
@@ -23,7 +23,7 @@ export function getStatisticsSummary(data) {
 
 // 获取任务类型统计
 export function getTaskTypeStatistics(data) {
-	return request('/store/app/statistics/getTaskTypeStatistics', data, 'GET');
+	return request('/app/common/getTaskTypeData', data, 'POST', 'application/json;charset=UTF-8');
 }
 
 // 获取任务状态统计

+ 1 - 1
common/request.js

@@ -6,7 +6,7 @@ export default class Request {
 		// let path = 'https://user.test.ylrztop.com/api'; //测试
 		//let path = 'http://132.232.83.221:8113'; //正式
 		let path = 'https://doctor.his.ifeiyu100.com'; //正式
-		//let path='http://d8632984.natappfree.cc'
+		//let path='http://ab687b79.natappfree.cc'
 		// let path = "https://api.qinggetai.com"
 	    // console.log(router,'router')
 		uni.setStorageSync('requestPath',path)

+ 10 - 3
components/Server.vue

@@ -39,9 +39,16 @@
 		},
 		methods: {
 			navTo(){
-				uni.navigateTo({
-					url: '/pages_echarts/statistics'
-				})
+				this.isLogin = uni.getStorageSync('AppToken')
+				if(this.isLogin){
+					uni.navigateTo({
+						url: '/pages_echarts/statistics'
+					})
+				}else{
+					uni.navigateTo({
+						url: '/pages/auth/login'
+					})	
+				}
 			},
 			// 初始化位置
 			initPosition() {

+ 3 - 3
manifest.json

@@ -1,5 +1,5 @@
 {
-    "name" : "研究型互联网医院",
+    "name" : "文依学苑",
     "appid" : "__UNI__DBD2079",
     "description" : "",
     "versionName" : "1.0.0",
@@ -50,7 +50,7 @@
     "quickapp" : {},
     /* 小程序特有相关 */
     "mp-weixin" : {
-        "appid" : "wxf2e7f8be5e31bf31",
+        "appid" : "wx322a4922f7b81924",
         "lazyCodeLoading" : "requiredComponents",
         "setting" : {
             "urlCheck" : false,
@@ -80,7 +80,7 @@
     },
     "vueVersion" : "2",
     "h5" : {
-        "title" : "壹柒玖康养集团",
+        "title" : "文依学苑",
         "devServer" : {
             "https" : false
         },

+ 32 - 14
pages.json

@@ -24,7 +24,7 @@
 		{
 			"path": "pages/home/index",
 			"style": {
-				"navigationBarTitleText": "互联网医院",
+				"navigationBarTitleText": "文依学苑",
                 "enablePullDownRefresh": false,
                 "navigationStyle": "custom",
 				"app-plus": {
@@ -110,7 +110,7 @@
 				    "path" : "shortVideo",
 				    "style" :                                                                                    
 				    {
-				        "navigationBarTitleText": "短视频创作",
+				        "navigationBarTitleText": "空中课堂",
 						"app-plus": {
 							"titleNView": false
 						}
@@ -151,7 +151,7 @@
 				    "path" : "onlineLecture",
 				    "style" :                                                                                    
 				    {
-				        "navigationBarTitleText": "在线讲座",
+				        "navigationBarTitleText": "空中课堂",
 						"app-plus": {
 							"titleNView": false
 						}
@@ -171,7 +171,7 @@
 				    "path" : "medicationSurvey",
 				    "style" :                                                                                    
 				    {
-				        "navigationBarTitleText": "用药调研",
+				        "navigationBarTitleText": "病例征集",
 						"app-plus": {
 							"titleNView": false
 						}
@@ -345,12 +345,30 @@
 					
 				},
 				{
-					"path" : "practiceCertificateExample",
-					"style" :                                                                                    
-					{
-						"navigationBarTitleText": "医师执业证上传示例",
-						"enablePullDownRefresh": false
-					}
+				    "path" : "practiceCertificateExample",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "医师执业证上传示例",
+				        "enablePullDownRefresh": false
+				    }
+					
+				},
+				{
+				    "path" : "userAgreement",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "用户协议",
+				        "enablePullDownRefresh": false
+				    }
+					
+				},
+				{
+				    "path" : "privacyPolicy",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "隐私政策",
+				        "enablePullDownRefresh": false
+				    }
 					
 				}
 			]
@@ -361,7 +379,7 @@
 				{
 					"path": "lecture",
 					"style": {
-						"navigationBarTitleText": "在线讲座",
+						"navigationBarTitleText": "空中课堂",
 						// "enablePullDownRefresh": false,
 						"navigationBarBackgroundColor": "#fff",
 						"navigationBarTextStyle": "black",
@@ -374,7 +392,7 @@
 					"path": "lesson",
 					"style": {
 						"navigationBarTitleText": "空中课堂",
-						// "enablePullDownRefresh": false,
+						//"enablePullDownRefresh": false,
 						"navigationBarBackgroundColor": "#fff",
 						"navigationBarTextStyle": "black",
 						"app-plus": {
@@ -385,7 +403,7 @@
 				{
 					"path": "lessonDetail",
 					"style": {
-						"navigationBarTitleText": "视频详情",
+						"navigationBarTitleText": "内容详情",
 						// "enablePullDownRefresh": false,
 						"navigationBarBackgroundColor": "#000",
 						"navigationBarTextStyle": "white",
@@ -488,7 +506,7 @@
 	],
 	"globalStyle": {
 		"navigationBarTextStyle": "black",
-		"navigationBarTitleText": "互联网医院",
+		"navigationBarTitleText": "文依学苑",
 		"navigationBarBackgroundColor": "#FFFFFF",
 		"backgroundColor": "#FFFFFF"
 	},

+ 21 - 12
pages/auth/login.vue

@@ -8,7 +8,7 @@
 		</view>
 		<view class="top-title">
 			<view class="title-text">登录</view>
-			<view class="login-notice">仅限特定人群使用,登录后可体验更多功能</view>
+			<view class="login-notice">登录后可体验更多功能</view>
 		</view>
       <view class="force-login__content">
 		  <image class="bg-type" :src="current==0?'https://ysrw-1395926010.cos.ap-chengdu.myqcloud.com/images/bg_tab_login.png':'https://ysrw-1395926010.cos.ap-chengdu.myqcloud.com/images/bg_tab_login2.png'" mode="widthFix"></image>
@@ -59,8 +59,8 @@
 		<view class="tips">
 			<checkbox :checked="isAgreement" @click="handleAgreement()" />
 			<view class="tips-text" @click="handleAgreement()">已阅读并接受</view>
-			<view class="btn" @click="openH5('/web/userAgreement')">《用户注册协议》</view>
-			<view class="btn" @click="openH5('/web/privacyPolicy')">《隐私保护政策》</view>
+			<view class="btn" @click="openH5('/pages_user/userAgreement')">《用户注册协议》</view>
+			<view class="btn" @click="openH5('/pages_user/privacyPolicy')">《隐私保护政策》</view>
 		</view>
       </view>
     </view>
@@ -92,11 +92,19 @@ export default {
 	computed: {
 	},
 	onLoad(option) {
-		console.log(option)
+		
 		this.getMenuButtonInfo()
 		if(option.scene){
-			this.companyUserId=option.scene.companyUserId
-			this.companyId==option.scene.companyId
+			const decodedStr = decodeURIComponent(option.scene);
+			const result = {};
+			decodedStr.split(",").forEach(item => {
+			  const [key, value] = item.split("=");
+			  result[key] = value;
+			});
+			console.log(result)
+			this.companyUserId=result.cuid
+			this.companyId=result.cid
+			//console.log('this.companyUserId',this.companyUserId)
 		}
 		// #ifdef MP-WEIXIN
 		uni.$on('refreshLogin', () => {
@@ -267,9 +275,10 @@ export default {
 					code: this.code,
 					loginType:2,
 				}
-				if(this.companyId && this.companyUserId){
+				//console.log('this.companyUserId',this.companyUserId,this.companyId)
+				if(this.companyId!=null && this.companyUserId!=null){
 					info.companyId=this.companyId,
-					inof.companyUserId=this.companyUserId
+					info.companyUserId=this.companyUserId
 				}
 				const res = await loginByCode(info);
 				uni.hideLoading();
@@ -288,7 +297,7 @@ export default {
 					uni.$emit('refreshLogin');
 					var data= res.data.docker
 					setTimeout(() => {
-						if(data.status==0){
+						if(data.status==4){
 							uni.navigateTo({
 								url: '/pages_user/certification'
 							})
@@ -393,10 +402,10 @@ export default {
 			this.isAgreement=!this.isAgreement;
 		},
 		openH5(url){
-			var requestPath = uni.getStorageSync('requestPath');
-			uni.setStorageSync('url',requestPath+url);
+			// var requestPath = uni.getStorageSync('requestPath');
+			// uni.setStorageSync('url',requestPath+url);
 			uni.navigateTo({
-				url: '../home/web'
+				url: url
 			})
 		},
 		getCode(){

+ 2 - 2
pages/common/launch.vue

@@ -1,8 +1,8 @@
 <template>
 	<view class="content">
 		<view class="loadding" v-if="loadding">
-			<image src="@/static/logo.jpg"></image>
-			<text class="text">互联网医院</text>
+			<image src="@/static/logo.png"></image>
+			<text class="text">文依学苑</text>
 		</view>
 	</view>
 </template>

+ 9 - 9
pages/home/index.vue

@@ -55,9 +55,9 @@
 
 		</view>
 		<!-- 养生讲堂 -->
-		<view class="doctor-articles">
+	<!-- 	<view class="doctor-articles">
 			<view class="box-title">
-				<view class="title-l">在线讲座</view>
+				<view class="title-l">空中课堂</view>
 				<view class="title-m" @click="navTo('/pages_live/lecture')">
 					查看更多
 					<image src="@/static/image/icon_more.png" mode=""></image>
@@ -146,7 +146,7 @@
 				</view>
 
 			</scroll-view>
-		</view>
+		</view> -->
 
 
 
@@ -168,9 +168,9 @@
 					<view class="article" v-for="(item,index) in classList" :key="index" @click="navTo('/pages_live/lessonDetail?groupId='+item.groupId)">
 						<view class="image-box">
 							<image class="bg" mode="aspectFill" :src="item.coverUrl"></image>
-							<view class="zhibo">
+							<!-- <view class="zhibo">
 								<image mode="aspectFill" src="@/static/image/icon_video.png"></image>
-							</view>
+							</view> -->
 						</view>
 						<view class="article-title-box">
 							<view class="article-title one-t">{{item.title}}</view>
@@ -340,9 +340,9 @@
 		},
 		onShareAppMessage(res) {
 			return {
-				title: '互联网医院-您的专属健康解决方案',
+				title: '文依学苑-医学人士学术交流、科普教育的线上园地',
 				path: `/pages/common/launch`,
-				imageUrl: '/static/logo.jpg' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				imageUrl: '/static/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 			}
 		},
 		onReachBottom() {
@@ -352,9 +352,9 @@
 		//分享到朋友圈
 		onShareTimeline(res) {
 			return {
-				title: '互联网医院-您的专属健康解决方案',
+				title: '文依学苑-医学人士学术交流、科普教育的线上园地',
 				query: '', //页面参数
-				imageUrl: '/static/logo.jpg' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				imageUrl: '/static/logo.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 			}
 		},
 		computed: {

+ 5 - 4
pages/task/index.vue

@@ -29,12 +29,13 @@
 		data() {
 			return {
 				tabs:[
-					{name:'在线讲座',num:0,icon:'/static/image/icon_task_zxjz.png',url:'/pages_task/onlineLecture'},
-					{name:'用药调研',num:0,icon:'/static/image/icon_task_yydy.png',url:'/pages_task/medicationSurvey'},
+					{name:'公开课',num:0,icon:'/static/image/icon_task_zxjz.png',url:'/pages_task/onlineLecture'},
+					{name:'空中课堂',num:0,icon:'/static/image/icon_task_kzkt.png',url:'/pages_task/shortVideo'},
+					{name:'病例征集',num:0,icon:'/static/image/icon_task_yydy.png',url:'/pages_task/medicationSurvey'},
 					{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'},
-					{name:'长视频创作',num:0,icon:'/static/image/icon_task_longvideo.png',url:'/pages_task/longVideo'},
-					{name:'短视频创作',num:0,icon:'/static/image/icon_task_shortvideo.png',url:'/pages_task/shortVideo'},
+					// {name:'长视频创作',num:0,icon:'/static/image/icon_task_longvideo.png',url:'/pages_task/longVideo'},
+					// {name:'短视频创作',num:0,icon:'/static/image/icon_task_shortvideo.png',url:'/pages_task/shortVideo'},
 				],
 				typeOptions:[],
 				questionsType:0,

+ 32 - 14
pages/user/index.vue

@@ -7,13 +7,16 @@
 				<view class="status_bar" :style="{height: statusBarHeight}"></view>
 				<view class="user-info">
 					<view class="left">
-						<view class="head-img">
+						<view class="head-img" v-if="isLogin">
+							<image :src="user.avatar==null?'https://ysrw-1395926010.cos.ap-chengdu.myqcloud.com/images/my_heads_icon64.png':user.avatar" mode="aspectFill"></image>
+						</view>
+						<view class="head-img" v-else @click="goLogin">
 							<image :src="user.avatar==null?'https://ysrw-1395926010.cos.ap-chengdu.myqcloud.com/images/my_heads_icon64.png':user.avatar" mode="aspectFill"></image>
 						</view>
 						<view class="name-phone">
 							<view class="x-f">
 								<view class="name" v-if="isLogin">{{user.doctorName||'用户'}}</view>
-								<view class="name" v-else>请先登录</view>
+								<view class="name" v-else @click="goLogin">请先登录</view>
 								<text>{{user.mobile?utils.parsePhone(user.mobile):''}}</text>
 							</view>
 							
@@ -49,7 +52,7 @@
 						</uni-badge> -->
 					</view>
 				</view>
-				<view v-if="user.status==0" class="vipbox" @click="goVip">
+				<view v-if="user.status==0||user.status==4" class="vipbox" @click="goVip">
 					<image src="https://ysrw-1395926010.cos.ap-chengdu.myqcloud.com/images/img_renzheng.png" mode="widthFix"></image>
 				</view>
 				
@@ -91,7 +94,7 @@
 					{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'},
+					{name:'用户协议',num:0,icon:'/static/image/icon_my_useragreement.png',url:'/pages_user/userAgreement'},
 				],
 				user:{
 					isPromoter:0,
@@ -118,9 +121,10 @@
 			if(this.isLogin){
 				this.getUserInfo();
 			}else{
-				uni.navigateTo({
-					url: '/pages/auth/login'
-				})	
+				this.user={}
+				// uni.navigateTo({
+				// 	url: '/pages/auth/login'
+				// })	
 			}
 		},
 		onReachBottom() {
@@ -131,6 +135,11 @@
 			seeChange(){
 				this.isShow=!this.isShow
 			},
+			goLogin(){
+				uni.navigateTo({
+					url: '/pages/auth/login'
+				})	
+			},
 			callService(){
 				 uni.makePhoneCall({
 					phoneNumber:"4000717770",
@@ -178,18 +187,27 @@
 			 	})
 			 },
 			 goVip(){
-				 uni.navigateTo({
-				 	url: '/pages_user/certification'
-				 })
+				 if(this.user.status!==0){
+					 uni.navigateTo({
+					 	url: '/pages_user/certification'
+					 })
+				 }else{
+					 uni.showToast({
+					 	icon:'none',
+					 	title: "正在审核中",
+					 });
+				 }
 			 },
 			 openLink(item){
-				 if(item.name=='用户协议'){
-					 this.openH5()
-					 return;
-				 }
+				 if(this.isLogin){
 				 uni.navigateTo({
 				 	url: item.url
 				 })
+				 }else{
+					 uni.navigateTo({
+					 	url: '/pages/auth/login'
+					 })	
+				 }
 				 // this.utils.isLogin().then(res => {
 				 // 	if(res){
 				 // 		uni.navigateTo({

+ 135 - 81
pages_echarts/statistics.vue

@@ -24,17 +24,17 @@
 				<view class="summary-stats">
 					<view class="stat-item">
 						<text class="stat-label">任务数</text>
-						<text class="stat-value">{{ summaryData.taskCount }}</text>
+						<text class="stat-value">{{ taskCount }}</text>
 					</view>
 					<view class="stat-item">
 						<text class="stat-label">总积分</text>
-						<text class="stat-value">{{ summaryData.totalPoints }}</text>
+						<text class="stat-value">{{ totalPoints }}</text>
 					</view>
 				</view>
 			</view>
 			
 			<!-- 数据表格 -->
-			<view class="table-section">
+			<view class="table-section" v-if="tableData.length>0">
 				<view class="table-header">
 					<view class="table-col" style="width: 20%;">任务类型</view>
 					<view class="table-col" style="width: 15%;">积分</view>
@@ -44,19 +44,23 @@
 				</view>
 				<view class="table-body">
 					<view class="table-row" v-for="(item, index) in tableData" :key="index">
-						<view class="table-col" style="width: 20%;">{{ item.taskType }}</view>
-						<view class="table-col" style="width: 15%;">{{ item.points }}</view>
-						<view class="table-col" style="width: 20%;">{{ item.applicant }}</view>
+						<view class="table-col" style="width: 20%;">{{ item.taskTypeName || '-' }}</view>
+						<view class="table-col" style="width: 15%;">{{ item.taskIntegral ||0 }}</view>
+						<view class="table-col" style="width: 20%;">{{ maskFirstLast(item.doctorName) ||'-' }}</view>
 						<view class="table-col" style="width: 20%;">
-							<text class="status-tag" :class="item.status">{{ item.statusText }}</text>
+							<text class="status-tag" :class="item.taskStatusName">{{ item.taskStatusName ||'-'}}</text>
 						</view>
-						<view class="table-col" style="width: 25%;">{{ item.receiveTime }}</view>
+						<view class="table-col" style="width: 25%;">{{ item.applyTime ||'-'}}</view>
 					</view>
 				</view>
 			</view>
 			
 			<!-- 底部提示 -->
-			<view class="no-more">没有更多了~</view>
+			<view class="no-more" v-if="tableData.length > 0">没有更多了~</view>
+			<view class="empty-state y-bc" v-if="tableData.length === 0">
+				<image class="w300 h300" src="@/static/image/img_blank_nodata.png" mode=""></image>
+				<text>暂无数据</text>
+			</view>
 		</scroll-view>
 		
 		<!-- 日期选择弹窗 -->
@@ -141,6 +145,22 @@ import {
 	getTaskTypeStatistics, 
 	getTaskStatusStatistics 
 } from '@/api/statistics'
+
+function getCurrentMonthRange() {
+	const now = new Date()
+	const y = now.getFullYear()
+	const m = now.getMonth()
+	const first = new Date(y, m, 1)
+	const last = new Date(y, m + 1, 0)
+	const pad = n => String(n).padStart(2, '0')
+	return {
+		startDate: `${y}-${pad(first.getMonth() + 1)}-${pad(first.getDate())}`,
+		endDate: `${y}-${pad(last.getMonth() + 1)}-${pad(last.getDate())}`
+	}
+}
+
+const defaultDateRange = getCurrentMonthRange()
+
 export default {
 	data() {
 		return {
@@ -148,61 +168,69 @@ export default {
 			showDatePicker: false,
 			showFilter: false,
 			dateRange: {
-				startDate: '2025-12-01',
-				endDate: '2025-12-25'
+				startDate: defaultDateRange.startDate,
+				endDate: defaultDateRange.endDate
 			},
 			tempDateRange: {
-				startDate: '2025-12-01',
-				endDate: '2025-12-25'
+				startDate: defaultDateRange.startDate,
+				endDate: defaultDateRange.endDate
 			},
-			selectedTaskType: 'academicLecture', // 默认选中学术讲座
+			selectedTaskType: '', // 默认选中学术讲座
 			selectedTaskStatus: '',
 			taskTypeOptions: [
-				{ label: '医生坐诊', value: 'doctorConsultation' },
-				{ label: '科普讲座', value: 'popularScienceLecture' },
-				{ label: '学术讲座', value: 'academicLecture' },
-				{ label: '科普文章', value: 'popularScienceArticle' },
-				{ label: '科普短视频', value: 'popularScienceShortVideo' },
-				{ label: '科普长视频', value: 'popularScienceLongVideo' },
-				{ label: '空中课堂', value: 'airClassroom' },
-				{ label: '用药调研', value: 'medicationSurvey' },
-				{ label: '问卷调研', value: 'questionnaireSurvey' },
-				{ label: '社群咨询', value: 'communityConsultation' },
-				{ label: '健康问答', value: 'healthQA' }
+				// { label: '医生坐诊', value: 'doctorConsultation' },
+				// { label: '科普讲座', value: 'popularScienceLecture' },
+				// { label: '学术讲座', value: 'academicLecture' },
+				// { label: '科普文章', value: 'popularScienceArticle' },
+				// { label: '科普短视频', value: 'popularScienceShortVideo' },
+				// { label: '科普长视频', value: 'popularScienceLongVideo' },
+				// { label: '空中课堂', value: 'airClassroom' },
+				// { label: '用药调研', value: 'medicationSurvey' },
+				// { label: '问卷调研', value: 'questionnaireSurvey' },
+				// { label: '社群咨询', value: 'communityConsultation' },
+				// { label: '健康问答', value: 'healthQA' }
 			],
 			taskStatusOptions: [
-				{ label: '未完成', value: 'uncompleted' },
-				{ label: '待审核', value: 'pendingReview' },
-				{ label: '已驳回', value: 'rejected' },
-				{ label: '已完成', value: 'completed' },
-				{ label: '已完结', value: 'finished' }
+				{ label: '未完成', value: 3 },
+				{ label: '待审核', value: 0 },
+				{ label: '已完成', value: 1 },
+				{ label: '已驳回', value: 2 }
 			],
-			tempSelectedTaskType: 'academicLecture',
+			tempSelectedTaskType: '',
 			tempSelectedTaskStatus: '',
-			summaryData: {
-				taskCount: 6,
-				totalPoints: 300
-			},
+			taskCount: 0,
+			totalPoints: 0,
 			tableData: [
-				{ taskType: '用药调研', points: '20', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' },
-				{ taskType: '科普短视频', points: '20', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' },
-				{ taskType: '用药调研', points: '100', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' },
-				{ taskType: '科普短视频', points: '20', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' },
-				{ taskType: '用药调研', points: '20', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' },
-				{ taskType: '科普短视频', points: '20', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' },
-				{ taskType: '用药调研', points: '20', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' },
-				{ taskType: '科普短视频', points: '20', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' },
-				{ taskType: '用药调研', points: '20', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' },
-				{ taskType: '科普短视频', points: '20', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' }
+				// { taskType: '病例征集', points: '20', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' },
+				// { taskType: '问卷调查', points: '20', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' },
+				// { taskType: '科普文章', points: '100', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' },
+				// { taskType: '科普短视频', points: '20', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' },
+				// { taskType: '科普长视频', points: '20', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' },
+				// { taskType: '科普短视频', points: '20', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' },
+				// { taskType: '用药调研', points: '20', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' },
+				// { taskType: '科普短视频', points: '20', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' },
+				// { taskType: '用药调研', points: '20', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' },
+				// { taskType: '科普短视频', points: '20', applicant: '王*明', status: 'uncompleted', statusText: '未完成', receiveTime: '2025-09-25' }
 			]
 		}
 	},
 	computed: {
 		dateRangeText() {
 			return `${this.dateRange.startDate} 至 ${this.dateRange.endDate}`
+		},
+		tableDataDisplay() {
+			return (this.tableData || []).map(item => ({
+				...item,
+				taskTypeNameMasked: this.maskFirstLast(item.taskTypeName)
+			}))
 		}
 	},
 	watch: {
+		showDatePicker(newVal) {
+			if (newVal) {
+				this.tempDateRange = { ...this.dateRange }
+			}
+		},
 		showFilter(newVal) {
 			if (newVal) {
 				// 打开弹窗时,同步临时选择值
@@ -214,15 +242,37 @@ export default {
 	onLoad() {
 		this.tempSelectedTaskType = this.selectedTaskType
 		this.tempSelectedTaskStatus = this.selectedTaskStatus
-		//this.loadData()
+		this.loadTypeOptions()
+		this.loadData()
 	},
 	onReachBottom() {
 		this.loadMore()
 	},
 	methods: {
+		maskFirstLast(str) {
+			if (str == null || str === '') return ''
+			const s = String(str)
+			if (s.length <= 2) return s
+			return s[0] + '*'.repeat(s.length - 2) + s[s.length - 1]
+		},
 		goBack() {
 			uni.navigateBack()
 		},
+		async loadTypeOptions() {
+			// 加载积分类型选项
+			try {
+				const res = await getTaskTypeStatistics({dictType:"task_type"})
+				if (res.code == 200) {
+					// 更新类型选项列表
+					this.taskTypeOptions = res.data.map(item => ({
+							label: item.dictLabel,
+							value: item.dictValue
+						}))
+				}
+			} catch (e) {
+				console.error('加载积分类型选项失败', e)
+			}
+		},
 		onStartDateChange(e) {
 			this.tempDateRange.startDate = e.detail.value
 		},
@@ -280,47 +330,45 @@ export default {
 				// 并行加载统计数据、汇总数据、类型统计和状态统计
 				const [dataRes, summaryRes, typeRes, statusRes] = await Promise.all([
 					getStatisticsData({
-						startDate: this.dateRange.startDate,
-						endDate: this.dateRange.endDate,
+						applyStartTime: this.dateRange.startDate,
+						applyEndTime: this.dateRange.endDate,
 						taskType: this.selectedTaskType,
-						taskStatus: this.selectedTaskStatus
-					}),
-					getStatisticsSummary({
-						startDate: this.dateRange.startDate,
-						endDate: this.dateRange.endDate
-					}).catch(() => ({ code: 0 })),
-					getTaskTypeStatistics({
-						startDate: this.dateRange.startDate,
-						endDate: this.dateRange.endDate
-					}).catch(() => ({ code: 0 })),
-					getTaskStatusStatistics({
-						startDate: this.dateRange.startDate,
-						endDate: this.dateRange.endDate
-					}).catch(() => ({ code: 0 }))
+						finishAuditStatus: this.selectedTaskStatus
+					})
+					// getStatisticsSummary({
+					// 	startDate: this.dateRange.startDate,
+					// 	endDate: this.dateRange.endDate
+					// }).catch(() => ({ code: 0 })),
+					// getTaskStatusStatistics({
+					// 	startDate: this.dateRange.startDate,
+					// 	endDate: this.dateRange.endDate
+					// }).catch(() => ({ code: 0 }))
 				])
 				uni.hideLoading()
 				
-				if (dataRes.code === 200 && dataRes.data) {
-					this.tableData = dataRes.data.list || []
+				if (dataRes) {
+					this.tableData = dataRes.list || []
+					this.taskCount = dataRes.totalCount
+					this.totalPoints = dataRes.totalIntegral
 				} else {
 					this.tableData = []
 				}
 				
-				// 更新汇总数据
-				if (summaryRes.code === 200 && summaryRes.data) {
-					this.summaryData = {
-						taskCount: summaryRes.data.taskCount || 0,
-						totalPoints: summaryRes.data.totalPoints || 0
-					}
-				}
+				// // 更新汇总数据
+				// if (summaryRes.code === 200 && summaryRes.data) {
+				// 	this.summaryData = {
+				// 		taskCount: summaryRes.data.taskCount || 0,
+				// 		totalPoints: summaryRes.data.totalPoints || 0
+				// 	}
+				// }
 				
-				// 如果有类型统计和状态统计,可以用于图表展示
-				if (typeRes.code === 200 && typeRes.data) {
-					console.log('任务类型统计', typeRes.data)
-				}
-				if (statusRes.code === 200 && statusRes.data) {
-					console.log('任务状态统计', statusRes.data)
-				}
+				// // 如果有类型统计和状态统计,可以用于图表展示
+				// if (typeRes.code === 200 && typeRes.data) {
+				// 	console.log('任务类型统计', typeRes.data)
+				// }
+				// if (statusRes.code === 200 && statusRes.data) {
+				// 	console.log('任务状态统计', statusRes.data)
+				// }
 			} catch (e) {
 				uni.hideLoading()
 				console.error('加载数据失败', e)
@@ -513,7 +561,7 @@ export default {
 			font-size: 26rpx;
 			color: #333333;
 			line-height: 40rpx;
-			text-align: left;
+			text-align: center;
 		}
 	}
 	
@@ -532,7 +580,8 @@ export default {
 				color: #333;
 				display: flex;
 				align-items: center;
-				text-align: left;
+				text-align: center;
+				justify-content: center;
 				font-family: PingFang SC, PingFang SC;
 				font-weight: 400;
 				font-size: 26rpx;
@@ -563,7 +612,12 @@ export default {
 	font-size: 24rpx;
 	color: #999;
 }
-
+.empty-state {
+	padding: 120rpx 24rpx;
+	text-align: center;
+	font-size: 28rpx;
+	color: #999;
+}
 .date-picker-popup {
 	position: fixed;
 	top: 0;

+ 34 - 74
pages_live/lecture.vue

@@ -24,9 +24,9 @@
 			</view>
 		</view>
 
-		<mescroll-body :top="top" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback"
-			:down="downOption" :up="upOption">
-			<view class="know-list">
+	<!-- 	<mescroll-body :top="top" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback"
+			:down="downOption" :up="upOption"> -->
+	<!-- 		<view class="know-list">
 				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
 					<view class="image-box">
 						<image class="bg" mode="aspectFill" :src="item.imageUrl"></image>
@@ -51,57 +51,12 @@
 						</view>
 					</view>
 				</view>
-				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
-					<view class="image-box">
-						<image class="bg" mode="aspectFill" :src="item.imageUrl"></image>
-						<view class="views">
-							<image mode="aspectFill" src="@/static/image/icon_goon.png"></image>
-							<view class="status">进行中</view>
-						</view>
-					</view>
-					<view class="article-title-box">
-						<view class="article-title one-t">王医生学术直播</view>
-						<view class="name-title">
-							<image mode="aspectFill" src="@/static/image/icon_doctor.png"></image>
-							<view class="position-title">
-								<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>
-								<view class="one-t">
-									北京人民医院
-								</view>
-							</view>
-						</view>
-						<view class="position-title one-t">
-							<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>北京人民医院
-						</view>
-					</view>
-				</view>
-				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
-					<view class="image-box">
-						<image class="bg" mode="aspectFill" :src="item.imageUrl"></image>
-						<view class="views">
-							<image mode="aspectFill" src="@/static/image/icon_goon.png"></image>
-							<view class="status">进行中</view>
-						</view>
-					</view>
-					<view class="article-title-box">
-						<view class="article-title one-t">王医生学术直播</view>
-						<view class="name-title">
-							<image mode="aspectFill" src="@/static/image/icon_doctor.png"></image>
-							<view class="one-t">
-								王小明-副主任医师/副主任副主任
-							</view>
-						</view>
-						<view class="position-title">
-							<image mode="aspectFill" src="@/static/image/icon_hospital.png"></image>
-							<view class="one-t">
-								北京人民医院
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</mescroll-body>
-
+			</view> -->
+		<!-- </mescroll-body> -->
+		<view class="empty-state y-bc" :style="{marginTop:top}" v-if="dataList.length === 0">
+			<image class="w300 h300" src="@/static/image/img_blank_nodata.png" mode=""></image>
+			<text>暂无数据</text>
+		</view>
 	</view>
 </template>
 
@@ -140,7 +95,7 @@
 					},
 					noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
 					empty: {
-						icon: '/static/images/no_data.png',
+						icon: '/static/image/img_blank_nodata.png',
 						tip: '暂无数据'
 					},
 					textNoMore: '没有更多了~'
@@ -200,27 +155,27 @@
 					page: page.num,
 					pageSize: page.size
 				};
-				getArticleList(data).then(res => {
-					if (res.code == 200) {
-						//设置列表数据
-						if (page.num == 1) {
-							that.dataList = res.data.list;
+				// getArticleList(data).then(res => {
+				// 	if (res.code == 200) {
+				// 		//设置列表数据
+				// 		if (page.num == 1) {
+				// 			that.dataList = res.data.list;
 
-						} else {
-							that.dataList = that.dataList.concat(res.data.list);
+				// 		} else {
+				// 			that.dataList = that.dataList.concat(res.data.list);
 
-						}
-						that.mescroll.endBySize(res.data.list.length, res.data.total);
+				// 		}
+				// 		that.mescroll.endBySize(res.data.list.length, res.data.total);
 
-					} else {
-						uni.showToast({
-							icon: 'none',
-							title: "请求失败",
-						});
-						that.dataList = null;
-						that.mescroll.endErr();
-					}
-				});
+				// 	} else {
+				// 		uni.showToast({
+				// 			icon: 'none',
+				// 			title: "请求失败",
+				// 		});
+				// 		that.dataList = null;
+				// 		that.mescroll.endErr();
+				// 	}
+				// });
 			},
 			// 关键词选择
 			choseCate(item) {
@@ -246,7 +201,12 @@
 		width: 100%;
 
 	}
-
+.empty-state {
+	padding: 120rpx 24rpx;
+	text-align: center;
+	font-size: 28rpx;
+	color: #999;
+}
 	.top-content {
 		width: 100%;
 		position: fixed;

+ 2 - 2
pages_live/lesson.vue

@@ -22,9 +22,9 @@
 				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
 					<view class="image-box">
 						<image class="bg" mode="aspectFill" :src="item.coverUrl"></image>
-						<view class="zhibo">
+						<!-- <view class="zhibo">
 							<image mode="aspectFill" src="@/static/image/icon_video.png"></image>
-						</view>
+						</view> -->
 					</view>
 					<view class="article-title-box">
 						<view class="article-title one-t">{{item.title}}</view>

+ 32 - 3
pages_live/lessonDetail.vue

@@ -8,10 +8,13 @@
 				<view class="reads ">
 					<u-icon name="eye" color="#fff" size="14"></u-icon>{{item.viewCount ||0}}</view>
 			</view>
-			<view class="video">
+			<view class="video" v-if="isShow==1">
 				<video class="myVideo" id="myVideo" :src="item.videoUrl"
 				@error="videoErrorCallback"   controls ></video>
 			</view>
+			<view class="img-box" v-else>
+				<image  :src="item.coverUrl" mode="aspectFill"></image>
+			</view>
 			<!-- 正文 -->
 			<!-- <view class="full-text"  >
 				<view v-html="item.content"></view>
@@ -38,7 +41,7 @@
 </template>
 
 <script>
-	import {getClassroomDetail} from '@/api/index.js'
+	import {getClassroomDetail,getShowVideo} from '@/api/index.js'
 	export default {
 		data() {
 			return {
@@ -47,7 +50,8 @@
 				src: '',
 				groupId:null,
 				item:{},
-				type:''
+				type:'',
+				isShow:0
 			};
 		},
 		onLoad(option) {
@@ -55,6 +59,7 @@
 		},
 		onShow() {
 			this.getClassroomDetail()
+			this.getShow()
 			//this.getDoctorArticleById();
 		},
 		//发送给朋友
@@ -113,6 +118,21 @@
 					rej => {}
 				);
 			},
+			getShow(){
+				getShowVideo().then(
+					res => {
+						if(res.code==200){
+							this.isShow=res.data
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: "请求失败",
+							});
+						}
+					},
+					rej => {}
+				);
+			},
 		}
 	}
 </script>
@@ -246,6 +266,15 @@
 				width: 100%;
 			}
 		}
+		.img-box{
+			width: 100%;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			video{
+				width: 100%;
+			}
+		}
 	}
 	.ad{
 		margin-bottom: 50rpx;

+ 10 - 10
pages_live/search.vue

@@ -9,18 +9,18 @@
 						placeholder-style="font-size:28rpx;color:#BBBBBB;font-family: PingFang SC;" />
 				</view>
 			</view>
-			<view class="keyword-list">
+			<!-- <view class="keyword-list">
 				<view class="inner">
 					<view v-for="(item,index) in cates" :key="index" :class="choseCateId == item.cateId?'item active':'item'" @click="choseCate(item)">
 						{{ item.cateName }}
 					</view>
 				</view>
-			</view>
+			</view> -->
 		</view>
 
-		<mescroll-body top="190rpx" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback"
+		<mescroll-body top="120rpx" ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback"
 			:down="downOption" :up="upOption">
-			<view class="know-list" v-if='choseCateId==0'>
+			<!-- <view class="know-list" v-if='choseCateId==0'>
 				<view class="item">
 					<view class="image-box">
 						<image class="bg" mode="aspectFill" src="https://ysrw-1395926010.cos.ap-chengdu.myqcloud.com/images/bg_invitecard.png"></image>
@@ -45,14 +45,14 @@
 						</view>
 					</view>
 				</view>
-			</view>
-			<view class="know-list" v-else>
+			</view> -->
+			<view class="know-list">
 				<view class="item" v-for="(item,index) in dataList" :key="index" @click="showDetail(item)">
 					<view class="image-box">
 						<image class="bg" mode="aspectFill" :src="item.coverUrl"></image>
-						<view class="zhibo">
+						<!-- <view class="zhibo">
 							<image mode="aspectFill" src="@/static/image/icon_video.png"></image>
-						</view>
+						</view> -->
 					</view>
 					<view class="article-title-box">
 						<view class="article-title one-t">{{item.title}}</view>
@@ -85,10 +85,10 @@
 		data() {
 			return {
 				cates: [
-					{cateName: '在线讲座',cateId:0},
+					{cateName: '空中课堂',cateId:0},
 					{cateName:'空中课堂',cateId:1},
 				],
-				choseCateId: 0,
+				choseCateId: 1,
 				// 状态栏的高度
 				statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,
 				searchValue: '',

+ 2 - 2
pages_task/caseCollection.vue

@@ -5,7 +5,7 @@
 			<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 class="title">病例征集</text>
 				<text></text>
 			</view>
 		</view>
@@ -84,7 +84,7 @@
 							@change="(e) => onSelectChange(field, e)">
 							<view class="form-input picker-input" :class="{ placeholder: !formData[field.__vModel__] }">
 								{{ getSelectLabel(field) || field.placeholder || '请选择' + field.__config__.label }}
-								<image class="w48 h48" src="@/static/image/icon_my_more.png" mode=""></image>
+								<image class="w48 h48" src="@/static/image/icon_more.png" mode=""></image>
 							</view>
 						</picker>
 					</template>

+ 4 - 5
pages_task/completeTask.vue

@@ -285,7 +285,6 @@ export default {
 		},
 		chooseAttachment(){
 			var vm = this;
-			
 			         // 对更多字符编码的 url encode 格式
 			         var camSafeUrlEncode = function (str) {
 			            return encodeURIComponent(str)
@@ -382,10 +381,10 @@ export default {
 			         console.log('当前 taskType:', taskType);
 			         
 			         // taskType = 5 或 6,选择视频文件
-			         if (taskType == 5 || taskType == 6) {
+			         if (taskType == 3 ||taskType == 5 || taskType == 6) {
 			            // 选择视频文件
-			            wx.chooseMessageFile({
-			               count: 3,
+			           wx.chooseMessageFile({
+			               count: 1,
 						   type: 'video',
 			               success: (chooseRes) => {
 			                  console.log('选择视频', chooseRes);
@@ -432,7 +431,7 @@ export default {
 			         }else{
 						 wx.chooseMessageFile({
 						    count: 1,
-						    type: 'file', // 选择文档文件(不包括视频和图片)
+							type:'file',
 						    success: (res) => {
 						       console.log('文档路径',res)
 						       const filePath = res.tempFiles[0].path

+ 0 - 981
pages_task/json.json

@@ -1,981 +0,0 @@
-{
-    "fields": [
-        {
-            "__config__": {
-                "changeTag": true,
-                "customConfig": {
-                    "dbColumnLength": 255,
-                    "dbColumnType": "VARCHAR",
-                    "dbDefaultValue": "",
-                    "dbNullable": true,
-                    "exportConvert": true,
-                    "exportFormatter": "none",
-                    "exportLabel": "",
-                    "exportOrder": 0,
-                    "exportWidth": 20,
-                    "fieldKey": "field101",
-                    "isExport": true,
-                    "isListShow": true,
-                    "isMasked": false,
-                    "isSearchable": false,
-                    "listAlign": "left",
-                    "listFixed": "",
-                    "listFormatter": "none",
-                    "listFormatterParam": "",
-                    "listMinWidth": 100,
-                    "listOrder": 0,
-                    "listOverflow": "tooltip",
-                    "listSortable": false,
-                    "listWidth": 0,
-                    "maskCustomRule": "",
-                    "maskRule": "",
-                    "searchDefaultValue": "",
-                    "searchOrder": 0,
-                    "searchPlaceholder": "",
-                    "searchType": "LIKE",
-                    "searchWidth": 200
-                },
-                "document": "https://element.eleme.cn/#/zh-CN/component/input",
-                "formId": 101,
-                "label": "单行文本",
-                "labelWidth": null,
-                "layout": "colFormItem",
-                "regList": [
-                ],
-                "renderKey": "1011769148485798",
-                "required": true,
-                "showLabel": true,
-                "span": 24,
-                "tag": "el-input",
-                "tagIcon": "input"
-            },
-            "__slot__": {
-                "append": "",
-                "prepend": ""
-            },
-            "__vModel__": "field101",
-            "clearable": true,
-            "disabled": false,
-            "maxlength": null,
-            "placeholder": "请输入单行文本",
-            "prefix-icon": "",
-            "readonly": false,
-            "show-word-limit": false,
-            "style": {
-                "width": "100%"
-            },
-            "suffix-icon": ""
-        },
-        {
-            "__config__": {
-                "changeTag": true,
-                "customConfig": {
-                    "dbColumnLength": 255,
-                    "dbColumnType": "VARCHAR",
-                    "dbDefaultValue": "",
-                    "dbNullable": true,
-                    "exportConvert": true,
-                    "exportFormatter": "none",
-                    "exportLabel": "",
-                    "exportOrder": 0,
-                    "exportWidth": 20,
-                    "fieldKey": "field103",
-                    "isExport": true,
-                    "isListShow": true,
-                    "isMasked": false,
-                    "isSearchable": false,
-                    "listAlign": "left",
-                    "listFixed": "",
-                    "listFormatter": "none",
-                    "listFormatterParam": "",
-                    "listMinWidth": 100,
-                    "listOrder": 0,
-                    "listOverflow": "tooltip",
-                    "listSortable": false,
-                    "listWidth": 0,
-                    "maskCustomRule": "",
-                    "maskRule": "",
-                    "searchDefaultValue": "",
-                    "searchOrder": 0,
-                    "searchPlaceholder": "",
-                    "searchType": "LIKE",
-                    "searchWidth": 200
-                },
-                "document": "https://element.eleme.cn/#/zh-CN/component/input",
-                "formId": 103,
-                "label": "密码",
-                "labelWidth": null,
-                "layout": "colFormItem",
-                "regList": [
-                ],
-                "renderKey": "1031769148487426",
-                "required": true,
-                "showLabel": true,
-                "span": 24,
-                "tag": "el-input",
-                "tagIcon": "password"
-            },
-            "__slot__": {
-                "append": "",
-                "prepend": ""
-            },
-            "__vModel__": "field103",
-            "clearable": true,
-            "disabled": false,
-            "maxlength": null,
-            "placeholder": "请输入密码",
-            "prefix-icon": "",
-            "readonly": false,
-            "show-password": true,
-            "show-word-limit": false,
-            "style": {
-                "width": "100%"
-            },
-            "suffix-icon": ""
-        },
-        {
-            "__config__": {
-                "changeTag": true,
-                "customConfig": {
-                    "dbColumnLength": null,
-                    "dbColumnType": "INT",
-                    "dbDefaultValue": "",
-                    "dbNullable": true,
-                    "exportConvert": true,
-                    "exportFormatter": "none",
-                    "exportLabel": "",
-                    "exportOrder": 0,
-                    "exportWidth": 20,
-                    "fieldKey": "field104",
-                    "isExport": true,
-                    "isListShow": true,
-                    "isMasked": false,
-                    "isSearchable": false,
-                    "listAlign": "left",
-                    "listFixed": "",
-                    "listFormatter": "none",
-                    "listFormatterParam": "",
-                    "listMinWidth": 100,
-                    "listOrder": 0,
-                    "listOverflow": "tooltip",
-                    "listSortable": false,
-                    "listWidth": 0,
-                    "maskCustomRule": "",
-                    "maskRule": "",
-                    "searchDefaultValue": "",
-                    "searchOrder": 0,
-                    "searchPlaceholder": "",
-                    "searchType": "LIKE",
-                    "searchWidth": 200
-                },
-                "document": "https://element.eleme.cn/#/zh-CN/component/input-number",
-                "formId": 104,
-                "label": "计数器",
-                "labelWidth": null,
-                "layout": "colFormItem",
-                "regList": [
-                ],
-                "renderKey": "1041769148488690",
-                "required": true,
-                "showLabel": true,
-                "span": 24,
-                "tag": "el-input-number",
-                "tagIcon": "number"
-            },
-            "__vModel__": "field104",
-            "controls-position": "",
-            "disabled": false,
-            "placeholder": "计数器",
-            "step": 1,
-            "step-strictly": false
-        },
-        {
-            "__config__": {
-                "changeTag": true,
-                "customConfig": {
-                    "dbColumnLength": 255,
-                    "dbColumnType": "VARCHAR",
-                    "dbDefaultValue": "",
-                    "dbNullable": true,
-                    "exportConvert": true,
-                    "exportFormatter": "none",
-                    "exportLabel": "",
-                    "exportOrder": 0,
-                    "exportWidth": 20,
-                    "fieldKey": "field105",
-                    "isExport": true,
-                    "isListShow": true,
-                    "isMasked": false,
-                    "isSearchable": false,
-                    "listAlign": "left",
-                    "listFixed": "",
-                    "listFormatter": "none",
-                    "listFormatterParam": "",
-                    "listMinWidth": 100,
-                    "listOrder": 0,
-                    "listOverflow": "tooltip",
-                    "listSortable": false,
-                    "listWidth": 0,
-                    "maskCustomRule": "",
-                    "maskRule": "",
-                    "searchDefaultValue": "",
-                    "searchOrder": 0,
-                    "searchPlaceholder": "",
-                    "searchType": "LIKE",
-                    "searchWidth": 200
-                },
-                "document": "https://element.eleme.cn/#/zh-CN/component/select",
-                "formId": 105,
-                "label": "下拉选择",
-                "labelWidth": null,
-                "layout": "colFormItem",
-                "regList": [
-                ],
-                "renderKey": "1051769148490140",
-                "required": true,
-                "showLabel": true,
-                "span": 24,
-                "tag": "el-select",
-                "tagIcon": "select"
-            },
-            "__slot__": {
-                "options": [
-                    {
-                        "label": "选项一",
-                        "value": 1
-                    },
-                    {
-                        "label": "选项二",
-                        "value": 2
-                    }
-                ]
-            },
-            "__vModel__": "field105",
-            "clearable": true,
-            "disabled": false,
-            "filterable": false,
-            "multiple": false,
-            "placeholder": "请选择下拉选择",
-            "style": {
-                "width": "100%"
-            }
-        },
-        {
-            "__config__": {
-                "changeTag": true,
-                "customConfig": {
-                    "dbColumnLength": 255,
-                    "dbColumnType": "VARCHAR",
-                    "dbDefaultValue": "",
-                    "dbNullable": true,
-                    "exportConvert": true,
-                    "exportFormatter": "none",
-                    "exportLabel": "",
-                    "exportOrder": 0,
-                    "exportWidth": 20,
-                    "fieldKey": "field102",
-                    "isExport": true,
-                    "isListShow": true,
-                    "isMasked": false,
-                    "isSearchable": false,
-                    "listAlign": "left",
-                    "listFixed": "",
-                    "listFormatter": "none",
-                    "listFormatterParam": "",
-                    "listMinWidth": 100,
-                    "listOrder": 0,
-                    "listOverflow": "tooltip",
-                    "listSortable": false,
-                    "listWidth": 0,
-                    "maskCustomRule": "",
-                    "maskRule": "",
-                    "searchDefaultValue": "",
-                    "searchOrder": 0,
-                    "searchPlaceholder": "",
-                    "searchType": "LIKE",
-                    "searchWidth": 200
-                },
-                "document": "https://element.eleme.cn/#/zh-CN/component/input",
-                "formId": 102,
-                "label": "多行文本",
-                "labelWidth": null,
-                "layout": "colFormItem",
-                "regList": [
-                ],
-                "renderKey": "1021769148486625",
-                "required": true,
-                "showLabel": true,
-                "span": 24,
-                "tag": "el-input",
-                "tagIcon": "textarea"
-            },
-            "__vModel__": "field102",
-            "autosize": {
-                "maxRows": 4,
-                "minRows": 4
-            },
-            "disabled": false,
-            "maxlength": null,
-            "placeholder": "请输入多行文本",
-            "readonly": false,
-            "show-word-limit": false,
-            "style": {
-                "width": "100%"
-            },
-            "type": "textarea"
-        },
-        {
-            "__config__": {
-                "border": false,
-                "changeTag": true,
-                "customConfig": {
-                    "dbColumnLength": 255,
-                    "dbColumnType": "VARCHAR",
-                    "dbDefaultValue": "",
-                    "dbNullable": true,
-                    "exportConvert": true,
-                    "exportFormatter": "none",
-                    "exportLabel": "",
-                    "exportOrder": 0,
-                    "exportWidth": 20,
-                    "fieldKey": "field106",
-                    "isExport": true,
-                    "isListShow": true,
-                    "isMasked": false,
-                    "isSearchable": false,
-                    "listAlign": "left",
-                    "listFixed": "",
-                    "listFormatter": "none",
-                    "listFormatterParam": "",
-                    "listMinWidth": 100,
-                    "listOrder": 0,
-                    "listOverflow": "tooltip",
-                    "listSortable": false,
-                    "listWidth": 0,
-                    "maskCustomRule": "",
-                    "maskRule": "",
-                    "searchDefaultValue": "",
-                    "searchOrder": 0,
-                    "searchPlaceholder": "",
-                    "searchType": "LIKE",
-                    "searchWidth": 200
-                },
-                "document": "https://element.eleme.cn/#/zh-CN/component/radio",
-                "formId": 106,
-                "label": "单选框组",
-                "labelWidth": null,
-                "layout": "colFormItem",
-                "optionType": "default",
-                "regList": [
-                ],
-                "renderKey": "1061769148491043",
-                "required": true,
-                "showLabel": true,
-                "span": 24,
-                "tag": "el-radio-group",
-                "tagIcon": "radio"
-            },
-            "__slot__": {
-                "options": [
-                    {
-                        "label": "选项一",
-                        "value": 1
-                    },
-                    {
-                        "label": "选项二",
-                        "value": 2
-                    }
-                ]
-            },
-            "__vModel__": "field106",
-            "disabled": false,
-            "size": "medium",
-            "style": {
-            }
-        },
-        {
-            "__config__": {
-                "border": false,
-                "changeTag": true,
-                "customConfig": {
-                    "dbColumnLength": 255,
-                    "dbColumnType": "VARCHAR",
-                    "dbDefaultValue": "",
-                    "dbNullable": true,
-                    "exportConvert": true,
-                    "exportFormatter": "none",
-                    "exportLabel": "",
-                    "exportOrder": 0,
-                    "exportWidth": 20,
-                    "fieldKey": "field107",
-                    "isExport": true,
-                    "isListShow": true,
-                    "isMasked": false,
-                    "isSearchable": false,
-                    "listAlign": "left",
-                    "listFixed": "",
-                    "listFormatter": "none",
-                    "listFormatterParam": "",
-                    "listMinWidth": 100,
-                    "listOrder": 0,
-                    "listOverflow": "tooltip",
-                    "listSortable": false,
-                    "listWidth": 0,
-                    "maskCustomRule": "",
-                    "maskRule": "",
-                    "searchDefaultValue": "",
-                    "searchOrder": 0,
-                    "searchPlaceholder": "",
-                    "searchType": "LIKE",
-                    "searchWidth": 200
-                },
-                "defaultValue": [
-                ],
-                "document": "https://element.eleme.cn/#/zh-CN/component/checkbox",
-                "formId": 107,
-                "label": "多选框组",
-                "labelWidth": null,
-                "layout": "colFormItem",
-                "optionType": "default",
-                "regList": [
-                ],
-                "renderKey": "1071769148492223",
-                "required": true,
-                "showLabel": true,
-                "span": 24,
-                "tag": "el-checkbox-group",
-                "tagIcon": "checkbox"
-            },
-            "__slot__": {
-                "options": [
-                    {
-                        "label": "选项一",
-                        "value": 1
-                    },
-                    {
-                        "label": "选项二",
-                        "value": 2
-                    }
-                ]
-            },
-            "__vModel__": "field107",
-            "disabled": false,
-            "size": "medium",
-            "style": {
-            }
-        },
-        {
-            "__config__": {
-                "changeTag": true,
-                "customConfig": {
-                    "dbColumnLength": 255,
-                    "dbColumnType": "VARCHAR",
-                    "dbDefaultValue": "",
-                    "dbNullable": true,
-                    "exportConvert": true,
-                    "exportFormatter": "none",
-                    "exportLabel": "",
-                    "exportOrder": 0,
-                    "exportWidth": 20,
-                    "fieldKey": "field109",
-                    "isExport": true,
-                    "isListShow": true,
-                    "isMasked": false,
-                    "isSearchable": false,
-                    "listAlign": "left",
-                    "listFixed": "",
-                    "listFormatter": "none",
-                    "listFormatterParam": "",
-                    "listMinWidth": 100,
-                    "listOrder": 0,
-                    "listOverflow": "tooltip",
-                    "listSortable": false,
-                    "listWidth": 0,
-                    "maskCustomRule": "",
-                    "maskRule": "",
-                    "searchDefaultValue": "",
-                    "searchOrder": 0,
-                    "searchPlaceholder": "",
-                    "searchType": "LIKE",
-                    "searchWidth": 200
-                },
-                "defaultValue": null,
-                "document": "https://element.eleme.cn/#/zh-CN/component/time-picker",
-                "formId": 109,
-                "label": "时间选择",
-                "labelWidth": null,
-                "layout": "colFormItem",
-                "regList": [
-                ],
-                "renderKey": "1091769148494476",
-                "required": true,
-                "showLabel": true,
-                "span": 24,
-                "tag": "el-time-picker",
-                "tagIcon": "time"
-            },
-            "__vModel__": "field109",
-            "clearable": true,
-            "disabled": false,
-            "format": "HH:mm:ss",
-            "picker-options": {
-                "selectableRange": "00:00:00-23:59:59"
-            },
-            "placeholder": "请选择时间选择",
-            "style": {
-                "width": "100%"
-            },
-            "value-format": "HH:mm:ss"
-        },
-        {
-            "__config__": {
-                "changeTag": true,
-                "customConfig": {
-                    "dbColumnLength": null,
-                    "dbColumnType": "TINYINT",
-                    "dbDefaultValue": "",
-                    "dbNullable": true,
-                    "exportConvert": true,
-                    "exportFormatter": "none",
-                    "exportLabel": "",
-                    "exportOrder": 0,
-                    "exportWidth": 20,
-                    "fieldKey": "field108",
-                    "isExport": true,
-                    "isListShow": true,
-                    "isMasked": false,
-                    "isSearchable": false,
-                    "listAlign": "left",
-                    "listFixed": "",
-                    "listFormatter": "none",
-                    "listFormatterParam": "",
-                    "listMinWidth": 100,
-                    "listOrder": 0,
-                    "listOverflow": "tooltip",
-                    "listSortable": false,
-                    "listWidth": 0,
-                    "maskCustomRule": "",
-                    "maskRule": "",
-                    "searchDefaultValue": "",
-                    "searchOrder": 0,
-                    "searchPlaceholder": "",
-                    "searchType": "LIKE",
-                    "searchWidth": 200
-                },
-                "defaultValue": false,
-                "document": "https://element.eleme.cn/#/zh-CN/component/switch",
-                "formId": 108,
-                "label": "开关",
-                "labelWidth": null,
-                "layout": "colFormItem",
-                "regList": [
-                ],
-                "renderKey": "1081769148493243",
-                "required": true,
-                "showLabel": true,
-                "span": 24,
-                "tag": "el-switch",
-                "tagIcon": "switch"
-            },
-            "__vModel__": "field108",
-            "active-color": null,
-            "active-text": "",
-            "active-value": true,
-            "disabled": false,
-            "inactive-color": null,
-            "inactive-text": "",
-            "inactive-value": false,
-            "style": {
-            }
-        },
-        {
-            "__config__": {
-                "changeTag": true,
-                "customConfig": {
-                    "dbColumnLength": 255,
-                    "dbColumnType": "VARCHAR",
-                    "dbDefaultValue": "",
-                    "dbNullable": true,
-                    "exportConvert": true,
-                    "exportFormatter": "none",
-                    "exportLabel": "",
-                    "exportOrder": 0,
-                    "exportWidth": 20,
-                    "fieldKey": "field110",
-                    "isExport": true,
-                    "isListShow": true,
-                    "isMasked": false,
-                    "isSearchable": false,
-                    "listAlign": "left",
-                    "listFixed": "",
-                    "listFormatter": "none",
-                    "listFormatterParam": "",
-                    "listMinWidth": 100,
-                    "listOrder": 0,
-                    "listOverflow": "tooltip",
-                    "listSortable": false,
-                    "listWidth": 0,
-                    "maskCustomRule": "",
-                    "maskRule": "",
-                    "searchDefaultValue": "",
-                    "searchOrder": 0,
-                    "searchPlaceholder": "",
-                    "searchType": "LIKE",
-                    "searchWidth": 200
-                },
-                "defaultValue": null,
-                "document": "https://element.eleme.cn/#/zh-CN/component/time-picker",
-                "formId": 110,
-                "label": "时间选择",
-                "labelWidth": null,
-                "layout": "colFormItem",
-                "regList": [
-                ],
-                "renderKey": "1101769148497460",
-                "required": true,
-                "showLabel": true,
-                "span": 24,
-                "tag": "el-time-picker",
-                "tagIcon": "time"
-            },
-            "__vModel__": "field110",
-            "clearable": true,
-            "disabled": false,
-            "format": "HH:mm:ss",
-            "picker-options": {
-                "selectableRange": "00:00:00-23:59:59"
-            },
-            "placeholder": "请选择时间选择",
-            "style": {
-                "width": "100%"
-            },
-            "value-format": "HH:mm:ss"
-        },
-        {
-            "__config__": {
-                "changeTag": true,
-                "customConfig": {
-                    "dbColumnLength": 255,
-                    "dbColumnType": "VARCHAR",
-                    "dbDefaultValue": "",
-                    "dbNullable": true,
-                    "exportConvert": true,
-                    "exportFormatter": "none",
-                    "exportLabel": "",
-                    "exportOrder": 0,
-                    "exportWidth": 20,
-                    "fieldKey": "field111",
-                    "isExport": true,
-                    "isListShow": true,
-                    "isMasked": false,
-                    "isSearchable": false,
-                    "listAlign": "left",
-                    "listFixed": "",
-                    "listFormatter": "none",
-                    "listFormatterParam": "",
-                    "listMinWidth": 100,
-                    "listOrder": 0,
-                    "listOverflow": "tooltip",
-                    "listSortable": false,
-                    "listWidth": 0,
-                    "maskCustomRule": "",
-                    "maskRule": "",
-                    "searchDefaultValue": "",
-                    "searchOrder": 0,
-                    "searchPlaceholder": "",
-                    "searchType": "LIKE",
-                    "searchWidth": 200
-                },
-                "defaultValue": [
-                    "14:08:25",
-                    "15:08:25"
-                ],
-                "document": "https://element.eleme.cn/#/zh-CN/component/time-picker",
-                "formId": 111,
-                "label": "时间范围",
-                "labelWidth": null,
-                "layout": "colFormItem",
-                "regList": [
-                ],
-                "renderKey": "1111769148499332",
-                "required": true,
-                "showLabel": true,
-                "span": 24,
-                "tag": "el-time-picker",
-                "tagIcon": "time-range"
-            },
-            "__vModel__": "field111",
-            "clearable": true,
-            "disabled": false,
-            "end-placeholder": "结束时间",
-            "format": "HH:mm:ss",
-            "is-range": true,
-            "range-separator": "至",
-            "start-placeholder": "开始时间",
-            "style": {
-                "width": "100%"
-            },
-            "value-format": "HH:mm:ss"
-        },
-        {
-            "__config__": {
-                "changeTag": true,
-                "customConfig": {
-                    "dbColumnLength": null,
-                    "dbColumnType": "DATE",
-                    "dbDefaultValue": "",
-                    "dbNullable": true,
-                    "exportConvert": true,
-                    "exportFormatter": "none",
-                    "exportLabel": "",
-                    "exportOrder": 0,
-                    "exportWidth": 20,
-                    "fieldKey": "field112",
-                    "isExport": true,
-                    "isListShow": true,
-                    "isMasked": false,
-                    "isSearchable": false,
-                    "listAlign": "left",
-                    "listFixed": "",
-                    "listFormatter": "none",
-                    "listFormatterParam": "",
-                    "listMinWidth": 100,
-                    "listOrder": 0,
-                    "listOverflow": "tooltip",
-                    "listSortable": false,
-                    "listWidth": 0,
-                    "maskCustomRule": "",
-                    "maskRule": "",
-                    "searchDefaultValue": "",
-                    "searchOrder": 0,
-                    "searchPlaceholder": "",
-                    "searchType": "LIKE",
-                    "searchWidth": 200
-                },
-                "defaultValue": null,
-                "document": "https://element.eleme.cn/#/zh-CN/component/date-picker",
-                "formId": 112,
-                "label": "日期选择",
-                "labelWidth": null,
-                "layout": "colFormItem",
-                "regList": [
-                ],
-                "renderKey": "1121769148501493",
-                "required": true,
-                "showLabel": true,
-                "span": 24,
-                "tag": "el-date-picker",
-                "tagIcon": "date"
-            },
-            "__vModel__": "field112",
-            "clearable": true,
-            "disabled": false,
-            "format": "yyyy-MM-dd",
-            "placeholder": "请选择日期选择",
-            "readonly": false,
-            "style": {
-                "width": "100%"
-            },
-            "type": "date",
-            "value-format": "yyyy-MM-dd"
-        },
-        {
-            "__config__": {
-                "changeTag": true,
-                "customConfig": {
-                    "dbColumnLength": null,
-                    "dbColumnType": "DATE",
-                    "dbDefaultValue": "",
-                    "dbNullable": true,
-                    "exportConvert": true,
-                    "exportFormatter": "none",
-                    "exportLabel": "",
-                    "exportOrder": 0,
-                    "exportWidth": 20,
-                    "fieldKey": "field113",
-                    "isExport": true,
-                    "isListShow": true,
-                    "isMasked": false,
-                    "isSearchable": false,
-                    "listAlign": "left",
-                    "listFixed": "",
-                    "listFormatter": "none",
-                    "listFormatterParam": "",
-                    "listMinWidth": 100,
-                    "listOrder": 0,
-                    "listOverflow": "tooltip",
-                    "listSortable": false,
-                    "listWidth": 0,
-                    "maskCustomRule": "",
-                    "maskRule": "",
-                    "searchDefaultValue": "",
-                    "searchOrder": 0,
-                    "searchPlaceholder": "",
-                    "searchType": "LIKE",
-                    "searchWidth": 200
-                },
-                "defaultValue": null,
-                "document": "https://element.eleme.cn/#/zh-CN/component/date-picker",
-                "formId": 113,
-                "label": "日期范围",
-                "labelWidth": null,
-                "layout": "colFormItem",
-                "regList": [
-                ],
-                "renderKey": "1131769148503377",
-                "required": true,
-                "showLabel": true,
-                "span": 24,
-                "tag": "el-date-picker",
-                "tagIcon": "date-range"
-            },
-            "__vModel__": "field113",
-            "clearable": true,
-            "disabled": false,
-            "end-placeholder": "结束日期",
-            "format": "yyyy-MM-dd",
-            "range-separator": "至",
-            "readonly": false,
-            "start-placeholder": "开始日期",
-            "style": {
-                "width": "100%"
-            },
-            "type": "daterange",
-            "value-format": "yyyy-MM-dd"
-        },
-        {
-            "__config__": {
-                "changeTag": true,
-                "customConfig": {
-                    "dbColumnLength": null,
-                    "dbColumnType": "INT",
-                    "dbDefaultValue": "",
-                    "dbNullable": true,
-                    "exportConvert": true,
-                    "exportFormatter": "none",
-                    "exportLabel": "",
-                    "exportOrder": 0,
-                    "exportWidth": 20,
-                    "fieldKey": "field114",
-                    "isExport": true,
-                    "isListShow": true,
-                    "isMasked": false,
-                    "isSearchable": false,
-                    "listAlign": "left",
-                    "listFixed": "",
-                    "listFormatter": "none",
-                    "listFormatterParam": "",
-                    "listMinWidth": 100,
-                    "listOrder": 0,
-                    "listOverflow": "tooltip",
-                    "listSortable": false,
-                    "listWidth": 0,
-                    "maskCustomRule": "",
-                    "maskRule": "",
-                    "searchDefaultValue": "",
-                    "searchOrder": 0,
-                    "searchPlaceholder": "",
-                    "searchType": "LIKE",
-                    "searchWidth": 200
-                },
-                "defaultValue": 0,
-                "document": "https://element.eleme.cn/#/zh-CN/component/rate",
-                "formId": 114,
-                "label": "评分",
-                "labelWidth": null,
-                "layout": "colFormItem",
-                "regList": [
-                ],
-                "renderKey": "1141769148508876",
-                "required": true,
-                "showLabel": true,
-                "span": 24,
-                "tag": "el-rate",
-                "tagIcon": "rate"
-            },
-            "__vModel__": "field114",
-            "allow-half": false,
-            "disabled": false,
-            "max": 5,
-            "show-score": false,
-            "show-text": false,
-            "style": {
-            }
-        },
-        {
-            "__config__": {
-                "buttonText": "点击上传",
-                "changeTag": true,
-                "customConfig": {
-                    "dbColumnLength": null,
-                    "dbColumnType": "TEXT",
-                    "dbDefaultValue": "",
-                    "dbNullable": true,
-                    "exportConvert": true,
-                    "exportFormatter": "none",
-                    "exportLabel": "",
-                    "exportOrder": 0,
-                    "exportWidth": 20,
-                    "fieldKey": "field115",
-                    "isExport": true,
-                    "isListShow": true,
-                    "isMasked": false,
-                    "isSearchable": false,
-                    "listAlign": "left",
-                    "listFixed": "",
-                    "listFormatter": "none",
-                    "listFormatterParam": "",
-                    "listMinWidth": 100,
-                    "listOrder": 0,
-                    "listOverflow": "tooltip",
-                    "listSortable": false,
-                    "listWidth": 0,
-                    "maskCustomRule": "",
-                    "maskRule": "",
-                    "searchDefaultValue": "",
-                    "searchOrder": 0,
-                    "searchPlaceholder": "",
-                    "searchType": "LIKE",
-                    "searchWidth": 200
-                },
-                "defaultValue": null,
-                "document": "https://element.eleme.cn/#/zh-CN/component/upload",
-                "fileSize": 2,
-                "formId": 115,
-                "label": "上传",
-                "labelWidth": null,
-                "layout": "colFormItem",
-                "regList": [
-                ],
-                "renderKey": "1151769148510443",
-                "required": true,
-                "showLabel": true,
-                "showTip": false,
-                "sizeUnit": "MB",
-                "span": 24,
-                "tag": "el-upload",
-                "tagIcon": "upload"
-            },
-            "__slot__": {
-                "list-type": true
-            },
-            "__vModel__": "field115",
-            "accept": "",
-            "action": "https://jsonplaceholder.typicode.com/posts/",
-            "auto-upload": true,
-            "disabled": false,
-            "list-type": "text",
-            "multiple": false,
-            "name": "file"
-        }
-    ],
-    "formBtns": true,
-    "formModel": "formData",
-    "formRef": "elForm",
-    "formRules": "rules",
-    "gutter": 15,
-    "labelPosition": "right",
-    "labelWidth": 100,
-    "size": "medium",
-    "span": 24
-}

+ 5 - 5
pages_task/medicationSurvey.vue

@@ -24,8 +24,8 @@
 					<view class="card-title">{{ item.title }}</view>
 					<view class="card-date">{{ item.startTime+'-'+ item.endTime}}</view>
 					<view class="card-status-section">
-						<view class="status-badge" :class="item.timeStatus">{{ item.timeStatus=='before'?'未完成':item.timeStatus=='during'?'进行中':'已结束'}}</view>
-						<view class="action-btn" v-if="currentTab == 'before'" @click="goToForm(item)">
+						<view class="status-badge" :class="currentTab">{{ currentTab=='during'?'未完成':currentTab=='before'?'未开始':'已结束'}}</view>
+						<view class="action-btn" v-if="currentTab == 'during'" @click="goToForm(item)">
 							填写问卷
 						</view>
 					</view>
@@ -46,10 +46,10 @@ export default {
 	data() {
 		return {
 			statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px',
-			currentTab: 'before',
+			currentTab: 'during',
 			tabs: [
-				{ label: '未完成', value: 'before' },
-				{ label: '进行中', value: 'during' },
+				{ label: '未完成', value: 'during' },
+				{ label: '未开始', value: 'before' },
 				{ label: '已结束', value: 'after' }
 			],
 			questionnaireList: [],

+ 321 - 138
pages_task/onlineLecture.vue

@@ -18,14 +18,14 @@
 		<!-- 标签栏 -->
 		<view class="tabs-bar">
 			<view class="tab-item" 
-				:class="{ active: currentTab === 'incomplete' }" 
-				@click="switchTab('incomplete')">
-				未完
+				:class="{ active: currentTab == 0 }" 
+				@click="switchTab(0)">
+				未完
 			</view>
 			<view class="tab-item" 
-				:class="{ active: currentTab === 'completed' }" 
-				@click="switchTab('completed')">
-				已完
+				:class="{ active: currentTab ==1}" 
+				@click="switchTab(1)">
+				已完
 			</view>
 		</view>
 		
@@ -33,33 +33,57 @@
 		<scroll-view class="content" scroll-y>
 			<view class="lecture-card" v-for="(item, index) in lectureList" :key="index">
 				<view class="card-thumbnail">
-					<image class="thumbnail-img" :src="item.thumbnail" mode="aspectFill"></image>
-					<view class="thumbnail-status" v-if="item.status === 'inProgress'">
-							<image mode="aspectFill" src="@/static/image/icon_goon.png"></image>
-							<view class="status">进行中</view>
+					<image class="thumbnail-img" :src="item.coverUrl" mode="aspectFill"></image>
+					<!-- 直播状态角标: 0-待开播 1-直播中 2-已结束(可回放) 3-已下架 -->
+					<view class="thumbnail-status" v-if="item.status === 0">
+						<image mode="aspectFill" src="@/static/image/icon_tobestart.png"></image>
+						<view class="status">待开播</view>
+					</view>
+					<view class="thumbnail-status" v-else-if="item.status === 1">
+						<image mode="aspectFill" src="@/static/image/icon_goon.png"></image>
+						<view class="status">直播中</view>
+					</view>
+					<view class="thumbnail-status status-end" v-else-if="item.status === 2">
+						<view class="status">已结束</view>
 					</view>
-					<view class="thumbnail-date" v-else-if="item.scheduledTime">
+					<view class="thumbnail-status status-off" v-else-if="item.status === 3">
+						<view class="status">已下架</view>
+					</view>
+					<view class="thumbnail-date" v-if="item.status === 0 && item.scheduledEndTime">
 						<image mode="aspectFill" src="@/static/image/icon_tobestart.png"></image>
-						<text class="date-text">{{ item.scheduledTime }}</text>
+						<text class="date-text">{{ formatScheduleTime(item.scheduledEndTime) }}</text>
 					</view>
 				</view>
 				
 				<view class="card-content">
 					<view class="card-title">{{ item.title }}</view>
-					<view class="card-tags">
+					<!-- <view class="card-tags">
 						<view class="tag-item">{{ item.category }}</view>
 						<view class="tag-item">{{ item.type }}</view>
-					</view>
-					<view class="card-points">{{ item.points }} 积分</view>
-					<view class="card-views" v-if="currentTab === 'completed'">
+					</view> -->
+					<view class="card-points">{{ item.taskLiveDto.taskIntegral||0 }} 积分</view>
+					<view class="card-views" v-if="currentTab == 1">
 						<text class="eye-icon"></text>
 						<text>{{ item.viewCount }}</text>
 					</view>
 					<view class="card-action">
 						<view class="action-btn" 
-							v-if="item.status === 'inProgress' || item.status === 'scheduled'"
+							v-if="item.status === 0"
+							@click.stop="openChannelPicker(item)">
+							去开播
+						</view>
+						<view class="action-btn" 
+							v-else-if="item.status === 1"
+							@click.stop="openChannelPicker(item)">
+							继续开播
+						</view>
+						<view class="action-btn action-btn-replay"
+							v-else-if="item.status === 2"
 							@click.stop="openChannelPicker(item)">
-							{{ item.status === 'inProgress' ? '继续开播' : '去开播' }}
+							看回放
+						</view>
+						<view class="action-btn action-btn-disabled" v-else-if="item.status === 3">
+							已下架
 						</view>
 					</view>
 				</view>
@@ -88,7 +112,7 @@
 						</view>
 						
 						<view class="option-url-wrapper">
-							<text class="option-url">{{ broadcastUrl }}</text>
+							<text class="option-url">{{info.liveUrl}}</text>
 							<view class="copy-btn" @click="copyUrl">复制链接</view>
 						</view>
 						<view class="option-tips">复制至谷歌浏览器,登录账号即可开播</view>
@@ -96,7 +120,7 @@
 				</view>
 				
 				<!-- 微信小程序开播 -->
-				<view class="channel-option">
+				<!-- <view class="channel-option">
 					<view class="option-content">
 						<view class="x-f mb20">
 							<image class="w32 h32" mode="aspectFill" src="@/static/image/icon_live_phone.png"></image>
@@ -106,56 +130,131 @@
 							<view class="enter-btn" @click="enterMiniProgram">立即进入</view>
 						</view>
 					</view>
-				</view>
+				</view> -->
 			</view>
 		</view>
 	</view>
 </template>
 
 <script>
-import { getOnlineLectureList, getBroadcastUrl, enterMiniProgram } from '@/api/onlineLecture'
+import { getOnlineLectureList, getBroadcastUrl, enterMiniProgram ,getLectureDetail} from '@/api/onlineLecture'
+// 直播状态 status: 0-待开播 1-直播中 2-已结束(可回放) 3-已下架
 export default {
 	data() {
 		return {
 			statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px',
-			keyword: '',
-			currentTab: 'incomplete',
-			showChannelPicker: false,
-			broadcastUrl: 'https://www.test.coe.huahua...',
-			currentLecture: null,
-			lectureList: []
+			currentTab:0,
+			showFilter: false,
+            showChannelPicker: false,
+			dateRange: {
+				startDate: '',
+				endDate: ''
+			},
+			tempDateRange: {
+				startDate: '',
+				endDate: ''
+			},
+			keyword:'',
+			selectedTaskType: 'article', // 默认选中科普文章
+			tempSelectedTaskType: 'article',
+			// taskTypeOptions: [
+			// 	{ label: '科普文章', value: 'article' },
+			// 	{ label: '科普短视频', value: 'shortVideo' },
+			// 	{ label: '科普长视频', value: 'longVideo' }
+			// ],
+			tabs: [
+				// { label: '全部', value:''},
+				{ label: '未完成', value: 0},
+				// { label: '待审核', value: 0},
+				{ label: '已完成', value: 1},
+				// { label: '已驳回', value: 2}
+			],
+			lectureList: [], // 讲座列表,需在 data 中声明才能响应式更新视图
+			taskList: [],
+			pageNum: 1,
+			pageSize: 10,
+			hasMore: true,
+			loading: false,
+			broadcastUrl:'',
+			info:{}
+		}
+	},
+	watch: {
+		showFilter(newVal) {
+			if (newVal) {
+				// 打开弹窗时,同步临时日期范围和任务类型为当前值
+				this.tempDateRange = {
+					startDate: this.dateRange.startDate,
+					endDate: this.dateRange.endDate
+				}
+				this.tempSelectedTaskType = this.selectedTaskType
+			}
 		}
 	},
 	onLoad() {
+		const doctorId=uni.getStorageSync('userInfo').doctorId
+		if(doctorId){
+			this.broadcastUrl='http://132.232.83.221:8083/#/live-pusher?doctorId='+doctorId
+		}
+	},
+	onShow() {
 		this.loadData()
 	},
 	onReachBottom() {
 		this.loadMore()
 	},
 	methods: {
+		// 将 scheduledEndTime 格式化为 03-13 16:30
+		formatScheduleTime(val) {
+			if (!val) return ''
+			const d = new Date(val.replace(/-/g, '/'))
+			if (isNaN(d.getTime())) return val
+			const m = String(d.getMonth() + 1).padStart(2, '0')
+			const day = String(d.getDate()).padStart(2, '0')
+			const h = String(d.getHours()).padStart(2, '0')
+			const min = String(d.getMinutes()).padStart(2, '0')
+			return `${m}-${day} ${h}:${min}`
+		},
 		goBack() {
 			uni.navigateBack()
 		},
 		doSearch() {
+			this.pageNum = 1
+			this.hasMore = true
 			this.loadData()
 		},
-		switchTab(tab) {
-			this.currentTab = tab
+		switchTab(value) {
+			this.currentTab = value
+			this.pageNum = 1
+			this.hasMore = true
 			this.loadData()
 		},
-		async openChannelPicker(item) {
+        openChannelPicker(item) {
+			this.getLectureDetail(item.id)
 			this.currentLecture = item
-			// try {
-			// 	const res = await getBroadcastUrl({ lectureId: item.id })
-			// 	if (res.code === 200 && res.data) {
-			// 		this.broadcastUrl = res.data.url
-			// 	}
-			// } catch (e) {
-			// 	console.error('获取开播链接失败', e)
-			// }
 			this.showChannelPicker = true
 		},
-		copyUrl() {
+		// 看回放:status=2 已结束(可回放) 时跳转
+		goReplay(item) {
+			if (item.videoUrl) {
+				uni.navigateTo({
+					url: `/pages_live/lessonDetail?groupId=${item.id}`
+				})
+			} else {
+				getLectureDetail(item.id).then(res => {
+					if (res.code === 200 && res.data && res.data.videoUrl) {
+						uni.navigateTo({
+							url: `/pages_live/lessonDetail?groupId=${item.id}`
+						})
+					} else {
+						uni.showToast({ icon: 'none', title: '暂无回放' })
+					}
+				}).catch(() => {
+					uni.showToast({ icon: 'none', title: '暂无回放' })
+				})
+			}
+		},
+        copyUrl() {
 			uni.setClipboardData({
 				data: this.broadcastUrl,
 				success: () => {
@@ -163,120 +262,186 @@ export default {
 						icon: 'success',
 						title: '链接已复制'
 					})
-				}
+				},fail: (err) => {
+          // 复制失败提示
+          uni.showToast({
+            title: '复制失败,请重试',
+            icon: 'none'
+          })
+         // console.error('复制链接失败:', err)
+            }
 			})
 		},
-		async enterMiniProgram() {
-			try {
-				const res = await enterMiniProgram({ lectureId: this.currentLecture.id })
-				if (res.code === 200 && res.data) {
-					// 跳转到微信小程序
-					uni.navigateToMiniProgram({
-						appId: res.data.appId,
-						path: res.data.path,
-						success: () => {
-							this.showChannelPicker = false
-						}
-					})
-				}
-			} catch (e) {
+		closeFilter() {
+			// 关闭弹窗时,恢复临时日期范围和任务类型为当前值
+			this.tempDateRange = {
+				startDate: this.dateRange.startDate,
+				endDate: this.dateRange.endDate
+			}
+			this.tempSelectedTaskType = this.selectedTaskType
+			this.showFilter = false
+		},
+		selectTaskType(value) {
+			// 如果点击的是已选中的,则取消选择
+			if (this.tempSelectedTaskType === value) {
+				this.tempSelectedTaskType = ''
+			} else {
+				this.tempSelectedTaskType = value
+			}
+		},
+		onStartDateChange(e) {
+			this.tempDateRange.startDate = e.detail.value
+		},
+		onEndDateChange(e) {
+			this.tempDateRange.endDate = e.detail.value
+		},
+		resetFilters() {
+			this.tempDateRange = {
+				startDate: '',
+				endDate: ''
+			}
+			this.tempSelectedTaskType = ''
+		},
+		getLectureDetail(id){
+			getLectureDetail(id).then(
+				res => {
+					if(res.code==200){
+						this.info=res.data;
+					}else{
+						uni.showToast({
+							icon:'none',
+							title: "请求失败",
+						});
+					}
+				},
+				rej => {}
+			);
+		},
+		confirmFilters() {
+			// 时间筛选时必须选择结束时间
+			if (this.tempDateRange.startDate && !this.tempDateRange.endDate) {
 				uni.showToast({
 					icon: 'none',
-					title: '进入失败'
+					title: '请选择结束时间'
 				})
+				return
+			}
+			// 验证日期范围
+			if (this.tempDateRange.startDate && this.tempDateRange.endDate) {
+				if (new Date(this.tempDateRange.startDate) > new Date(this.tempDateRange.endDate)) {
+					uni.showToast({
+						icon: 'none',
+						title: '开始时间不能大于结束时间'
+					})
+					return
+				}
+			}
+			this.dateRange = {
+				startDate: this.tempDateRange.startDate,
+				endDate: this.tempDateRange.endDate
 			}
+			this.selectedTaskType = this.tempSelectedTaskType
+			this.showFilter = false
+			this.pageNum = 1
+			this.hasMore = true
+			this.loadData()
+		},
+		goComplete(item) {
+			uni.navigateTo({
+				url: `/pages_task/completeTask?id=${item.id}`
+			})
+		},
+		goEdit(item) {
+			uni.navigateTo({
+				url: `/pages_task/completeTask?id=${item.id}&edit=true`
+			})
+		},
+		// 查看详情
+		showDetail(item) {
+			uni.navigateTo({
+				url: `/pages_task/taskDetail?id=${item.id}`
+			})
 		},
 		async loadData() {
 			try {
+				this.pageNum = 1
+				this.hasMore = true
 				uni.showLoading({ title: '加载中...' })
-				const res = await getOnlineLectureList({
-					keyword: this.keyword,
-					status: this.currentTab,
-					page: 1,
-					pageSize: 20
-				})
+				// 构建请求参数
+				const params = {
+					finishStatus:this.currentTab,
+					// title:this.keyword,
+					// pageNum: 1,
+					// pageSize: this.pageSize
+				}
+				const res = await getOnlineLectureList(params)
 				uni.hideLoading()
-				if (res.code === 200 && res.data) {
-					this.lectureList = res.data.list || this.getDefaultData()
+				if (res.code == 200) {
+					this.lectureList = res.rows || []
+					//.console.log('this.lectureList',this.lectureList)
+					// 判断是否还有更多数据
+					if (!res.rows || res.rows.length < this.pageSize) {
+						this.hasMore = false
+					}
 				} else {
-					this.lectureList = this.getDefaultData()
+					uni.showToast({
+						icon: 'none',
+						title: res.msg
+					})
 				}
 			} catch (e) {
 				uni.hideLoading()
-				console.error('加载数据失败', e)
-				this.lectureList = this.getDefaultData()
 			}
 		},
 		async loadMore() {
-			// 加载更多数据
-		},
-		getDefaultData() {
-			if (this.currentTab === 'incomplete') {
-				return [
-					{
-						id: 1,
-						title: '康复医学概论',
-						thumbnail: 'https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20240516/b091048293f142608f99eaf1b0b1510a.png',
-						category: '学术讲座',
-						type: '单人讲座',
-						points: '32.50',
-						status: 'inProgress',
-						scheduledTime: ''
-					},
-					{
-						id: 2,
-						title: '中医养生至冬病夏天治...',
-						thumbnail: 'https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20240516/b091048293f142608f99eaf1b0b1510a.png',
-						category: '学术讲座',
-						type: '单人讲座',
-						points: '32.50',
-						status: 'scheduled',
-						scheduledTime: '05-12 12:00'
-					},
-					{
-						id: 3,
-						title: '康复医学概论',
-						thumbnail: 'https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20240516/b091048293f142608f99eaf1b0b1510a.png',
-						category: '学术讲座',
-						type: '单人讲座',
-						points: '32.50',
-						status: 'scheduled',
-						scheduledTime: '05-24 16:00'
-					}
-				]
-			} else {
-				return [
-					{
-						id: 4,
-						title: '康复医学概论',
-						thumbnail: 'https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20240516/b091048293f142608f99eaf1b0b1510a.png',
-						category: '学术讲座',
-						type: '单人讲座',
-						points: '32.50',
-						viewCount: '123',
-						scheduledTime: '05-12 12:00'
-					},
-					{
-						id: 5,
-						title: '康复医学概论',
-						thumbnail: 'https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20240516/b091048293f142608f99eaf1b0b1510a.png',
-						category: '学术讲座',
-						type: '单人讲座',
-						points: '32.50',
-						viewCount: '123',
-						scheduledTime: '05-12 12:00'
-					},
-					{
-						id: 6,
-						title: '康复医学概论',
-						thumbnail: 'https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20240516/b091048293f142608f99eaf1b0b1510a.png',
-						category: '学术讲座',
-						type: '单人讲座',
-						points: '32.50',
-						viewCount: '123',
-						scheduledTime: '05-12 12:00'
+			// 如果没有更多数据或正在加载,则不执行
+			if (!this.hasMore || this.loading) {
+				return
+			}
+			
+			try {
+				this.loading = true
+				const nextPage = this.pageNum + 1
+				// 构建请求参数
+				const params = {
+					applyStartTime: this.dateRange.startDate,
+					applyEndTime: this.dateRange.endDate,
+					finishAuditStatus:this.currentTab,
+					taskType: 3,
+					pageNum: nextPage,
+					pageSize: this.pageSize
+				}
+				
+				const res = await getOnlineLectureList()
+				
+				if (res.code === 200) {
+					const newData = res.rows || []
+					if (newData.length > 0) {
+						// 追加新数据到列表
+						this.lectureList = [...this.lectureList, ...newData]
+						this.pageNum = nextPage
+						// 如果返回的数据量小于 pageSize,说明没有更多数据了
+						if (newData.length < this.pageSize) {
+							this.hasMore = false
+						}
+					} else {
+						// 没有新数据,说明已经加载完所有数据
+						this.hasMore = false
 					}
-				]
+				} else {
+					uni.showToast({
+						icon: 'none',
+						title: res.msg || '加载失败'
+					})
+				}
+			} catch (e) {
+				console.error('加载更多数据失败', e)
+				uni.showToast({
+					icon: 'none',
+					title: '加载失败'
+				})
+			} finally {
+				this.loading = false
 			}
 		}
 	}
@@ -370,7 +535,7 @@ export default {
 .tabs-bar {
 	display: flex;
 	background: #fff;
-	border-bottom: 1rpx solid #f0f0f0;
+	//border-bottom: 1rpx solid #f0f0f0;
 	
 	.tab-item {
 		flex: 1;
@@ -450,6 +615,15 @@ export default {
 				font-size: 20rpx;
 				color: #fff;
 			}
+			
+			&.status-end {
+				background: rgba(0, 0, 0, 0.5);
+			}
+			
+			&.status-off {
+				background: rgba(0, 0, 0, 0.6);
+				color: rgba(255, 255, 255, 0.9);
+			}
 		}
 		
 		.thumbnail-date {
@@ -513,7 +687,7 @@ export default {
 		
 		.card-points {
 			font-size: 26rpx;
-			color: #333;
+			color: #999;
 			margin-bottom: 12rpx;
 		}
 		
@@ -546,6 +720,15 @@ export default {
 				font-weight: 500;
 				font-size: 24rpx;
 				color: #FFFFFF;
+				
+				&.action-btn-replay {
+					background: #07C160;
+				}
+				
+				&.action-btn-disabled {
+					background: #C8C9CC;
+					color: #fff;
+				}
 			}
 		}
 	}
@@ -634,7 +817,7 @@ export default {
 		
 		.option-content {
 			flex: 1;
-			
+			width: 100%;
 			.option-title {
 				font-size: 30rpx;
 				font-weight: bold;

+ 1 - 1
pages_task/questionnaire.vue

@@ -338,7 +338,7 @@ export default {
 		    justify-content: flex-end;
 		    flex-direction: column;
 		padding: 24rpx;
-		
+		background-size: cover;
 		.banner-content {
 			width: 100%;
 			text-align:left;

+ 1 - 1
pages_task/questionnaireForm.vue

@@ -84,7 +84,7 @@
 							@change="(e) => onSelectChange(field, e)">
 							<view class="form-input picker-input" :class="{ placeholder: !formData[field.__vModel__] }">
 								{{ getSelectLabel(field) || field.placeholder || '请选择' + field.__config__.label }}
-								<image class="w48 h48" src="@/static/image/icon_my_more.png" mode=""></image>
+								<image class="w48 h48" src="@/static/image/icon_more.png" mode=""></image>
 							</view>
 						</picker>
 					</template>

+ 38 - 23
pages_task/science.vue

@@ -31,9 +31,9 @@
 				<view class="card-tags">
 					<view class="x-f">
 						<view class="tag-item video-tag" v-if="item.taskType">
-							<!-- <image class="w28 h28 mr10" src="@/static/image/icon_longvideo.png" mode=""></image> -->
-							<image class="w28 h28 mr10" src="@/static/image/icon_article.png" mode=""></image>
-							<text>{{ item.taskType==4?'文章':taskData.taskType==5?'短视频':'长视频'}}</text>
+							<image v-if="item.taskType==4" class="w28 h28 mr10" src="@/static/image/icon_article.png" mode=""></image>
+							<image v-else class="w28 h28 mr10" src="@/static/image/icon_longvideo.png" mode=""></image>
+							<text>{{ item.taskType==4?'文章':item.taskType==5?'短视频':'长视频'}}</text>
 							
 						</view>
 						<view class="tag-item category">
@@ -118,19 +118,19 @@
 				</view>
 				
 				<!-- 任务类型筛选 -->
-				<!-- <view class="filter-group">
+				<view class="filter-group">
 					<view class="group-label">任务类型</view>
 					<view class="filter-tags">
 						<view 
 							class="filter-tag" 
-							:class="{ active: tempSelectedTaskType === item.value }"
+							:class="{ active: tempSelectedTaskType == item.value }"
 							v-for="(item, index) in taskTypeOptions" 
 							:key="index"
 							@click="selectTaskType(item.value)">
 							{{ item.label }}
 						</view>
 					</view>
-				</view> -->
+				</view>
 				
 				<!-- 操作按钮 -->
 				<view class="filter-actions">
@@ -159,13 +159,13 @@ export default {
 				startDate: '',
 				endDate: ''
 			},
-			selectedTaskType: 'article', // 默认选中科普文章
-			tempSelectedTaskType: 'article',
-			// taskTypeOptions: [
-			// 	{ label: '科普文章', value: 'article' },
-			// 	{ label: '科普短视频', value: 'shortVideo' },
-			// 	{ label: '科普长视频', value: 'longVideo' }
-			// ],
+			selectedTaskType:'', // 默认选中科普文章
+			tempSelectedTaskType: '',
+			taskTypeOptions: [
+				{ label: '科普文章', value: 4 },
+				{ label: '科普短视频', value: 5 },
+				{ label: '科普长视频', value: 6 }
+			],
 			tabs: [
 				{ label: '全部', value:''},
 				{ label: '未完成', value: 3},
@@ -222,7 +222,7 @@ export default {
 		},
 		selectTaskType(value) {
 			// 如果点击的是已选中的,则取消选择
-			if (this.tempSelectedTaskType === value) {
+			if (this.tempSelectedTaskType == value) {
 				this.tempSelectedTaskType = ''
 			} else {
 				this.tempSelectedTaskType = value
@@ -242,6 +242,14 @@ export default {
 			this.tempSelectedTaskType = ''
 		},
 		confirmFilters() {
+			// 时间筛选时必须选择结束时间
+			if (this.tempDateRange.startDate && !this.tempDateRange.endDate) {
+				uni.showToast({
+					icon: 'none',
+					title: '请选择结束时间'
+				})
+				return
+			}
 			// 验证日期范围
 			if (this.tempDateRange.startDate && this.tempDateRange.endDate) {
 				if (new Date(this.tempDateRange.startDate) > new Date(this.tempDateRange.endDate)) {
@@ -285,11 +293,13 @@ export default {
 				uni.showLoading({ title: '加载中...' })
 				// 构建请求参数
 				const params = {
-					beginTime: this.dateRange.startDate,
-					endTime: this.dateRange.endDate,
+					applyStartTime: this.dateRange.startDate,
+					applyEndTime: this.dateRange.endDate,
 					finishAuditStatus:this.currentTab,
-					taskType:4,
+					taskType:this.selectedTaskType,
 					pageNum: 1,
+					selectType:'kp',
+					timeType: "valid",
 					pageSize: this.pageSize
 				}
 				const res = await getAirClassroomList(params)
@@ -321,11 +331,13 @@ export default {
 				const nextPage = this.pageNum + 1
 				// 构建请求参数
 				const params = {
-					beginTime: this.dateRange.startDate,
-					endTime: this.dateRange.endDate,
+					applyStartTime: this.dateRange.startDate,
+					applyEndTime: this.dateRange.endDate,
 					finishAuditStatus:this.currentTab,
-					taskType: 4,
+					taskType: this.selectedTaskType,
 					pageNum: nextPage,
+					selectType:'kp',
+					timeType: "valid",
 					pageSize: this.pageSize
 				}
 				
@@ -745,17 +757,20 @@ export default {
 	.filter-tags {
 		display: flex;
 		flex-wrap: wrap;
-		gap: 16rpx;
+		gap: 24rpx;
 		
 		.filter-tag {
-			padding: 14rpx 36rpx;
+			width: calc((100% - 48rpx) / 3);
+			padding: 12rpx 24rpx;
 			background: #F7F8FA;
 			border-radius: 70rpx 70rpx 70rpx 70rpx;
 			font-family: PingFang SC, PingFang SC;
 			font-weight: 400;
 			font-size: 28rpx;
-			color: #333333;
+			color: #666;
 			border: 1rpx solid transparent;
+			text-align: center;
+			box-sizing: border-box;
 			
 			&.active {
 				background: rgba(56,139,255,0.15);

+ 17 - 9
pages_task/shortVideo.vue

@@ -31,9 +31,9 @@
 				<view class="card-tags">
 					<view class="x-f">
 						<view class="tag-item video-tag" v-if="item.taskType">
-							<!-- <image class="w28 h28 mr10" src="@/static/image/icon_longvideo.png" mode=""></image> -->
-							<image class="w28 h28 mr10" src="@/static/image/icon_article.png" mode=""></image>
-							<text>{{ item.taskType==4?'文章':taskData.taskType==5?'短视频':'长视频'}}</text>
+							<image class="w28 h28 mr10" src="@/static/image/icon_longvideo.png" mode=""></image>
+							<!-- <image class="w28 h28 mr10" src="@/static/image/icon_article.png" mode=""></image> -->
+							<text>空中课堂</text>
 							
 						</view>
 						<view class="tag-item category">
@@ -242,6 +242,14 @@ export default {
 			this.tempSelectedTaskType = ''
 		},
 		confirmFilters() {
+			// 时间筛选时必须选择结束时间
+			if (this.tempDateRange.startDate && !this.tempDateRange.endDate) {
+				uni.showToast({
+					icon: 'none',
+					title: '请选择结束时间'
+				})
+				return
+			}
 			// 验证日期范围
 			if (this.tempDateRange.startDate && this.tempDateRange.endDate) {
 				if (new Date(this.tempDateRange.startDate) > new Date(this.tempDateRange.endDate)) {
@@ -285,10 +293,10 @@ export default {
 				uni.showLoading({ title: '加载中...' })
 				// 构建请求参数
 				const params = {
-					beginTime: this.dateRange.startDate,
-					endTime: this.dateRange.endDate,
+					applyStartTime: this.dateRange.startDate,
+					applyEndTime: this.dateRange.endDate,
 					finishAuditStatus:this.currentTab,
-					taskType:5,
+					taskType:3,
 					pageNum: 1,
 					pageSize: this.pageSize
 				}
@@ -321,10 +329,10 @@ export default {
 				const nextPage = this.pageNum + 1
 				// 构建请求参数
 				const params = {
-					beginTime: this.dateRange.startDate,
-					endTime: this.dateRange.endDate,
+					applyStartTime: this.dateRange.startDate,
+					applyEndTime: this.dateRange.endDate,
 					finishAuditStatus:this.currentTab,
-					taskType: 5,
+					taskType: 3,
 					pageNum: nextPage,
 					pageSize: this.pageSize
 				}

+ 2 - 1
pages_task/taskDetail.vue

@@ -25,7 +25,7 @@
 					<view class="tag-item video-tag">
 						<image v-if="taskData.taskType==4" class="w28 h28 mr10" src="@/static/image/icon_article.png" mode=""></image>
 						<image v-else class="w28 h28 mr10" src="@/static/image/icon_longvideo.png" mode=""></image>
-						<text>{{ taskData.taskType==4?'文章':taskData.taskType==5?'短视频':'长视频'}}</text>
+						<text>{{taskData.taskType==4?'文章':taskData.taskType==3?'空中课堂':taskData.taskType==5?'短视频':'长视频'}}</text>
 					</view>
 					<view class="tag-item category">学术</view>
 					</view>
@@ -136,6 +136,7 @@
 		<!-- 底部按钮 -->
 			<view class="submit-box" v-if="taskData.finishAuditStatus == 3||taskData.finishAuditStatus == 2">
 			<view class="submit-btn"  @click="goComplete">去完成</view>
+			
 		</view>
 	</view>
 </template>

+ 26 - 97
pages_user/addBankCard.vue

@@ -5,23 +5,23 @@
 			<view class="form-section">
 				<view class="form-item">
 					<view class="form-label">开户行</view>
-					<picker mode="selector" :range="bankList" range-key="name" @change="onBankChange">
-						<view class="form-input picker-input" :class="{ placeholder: !formData.bankName }">
-							{{ formData.bankName || '请选择开户行' }}
-							<image class="w36 h36" src="@/static/image/icon_my_more.png" mode=""></image>
-						</view>
-					</picker>
+					<input 
+						class="form-input" 
+						v-model="formData.bankName" 
+						placeholder="请输入开户行"
+						placeholder-class="text-placeholder"
+					/>
 				</view>
 				<view class="divider"></view>
 				
 				<view class="form-item">
 					<view class="form-label">支行</view>
-					<picker mode="selector" :range="branchList" range-key="name" @change="onBranchChange">
-						<view class="form-input picker-input" :class="{ placeholder: !formData.bankBranch }">
-							{{ formData.bankBranch || '请选择支行' }}
-							<image class="w36 h36" src="@/static/image/icon_my_more.png" mode=""></image>
-						</view>
-					</picker>
+					<input 
+						class="form-input" 
+						v-model="formData.bankBranch" 
+						placeholder="请输入支行"
+						placeholder-class="text-placeholder"
+					/>
 				</view>
 				<view class="divider"></view>
 				
@@ -54,7 +54,7 @@
 </template>
 
 <script>
-import { addBankCard, getBankList, getBranchList } from '@/api/bankCard'
+import { addBankCard } from '@/api/bankCard'
 export default {
 	data() {
 		return {
@@ -62,98 +62,27 @@ export default {
 				"bankBranch": "",
 				  "bankCardNo": "",
 				  "bankName": ""
-			},
-			bankList: [
-				{ name: '中国工商银行', id: 1 },
-				{ name: '中国建设银行', id: 2 },
-				{ name: '中国银行', id: 3 },
-				{ name: '中国农业银行', id: 4 }
-			],
-			branchList: [{ name: '北京支行', id: 1 },
-					{ name: '上海支行', id: 2 },
-					{ name: '广州支行', id: 3 },
-					{ name: '重庆支行', id: 4 }
-					]
+			}
 		}
 	},
-	onLoad() {
-		//this.loadBankList()
-	},
+	onLoad() {},
 	methods: {
-		async loadBankList() {
-			try {
-				const res = await getBankList()
-				if (res.code === 200 && res.data) {
-					this.bankList = res.data
-				} else {
-					// 默认数据
-					this.bankList = [
-						{ name: '中国工商银行', id: 1 },
-						{ name: '中国建设银行', id: 2 },
-						{ name: '中国银行', id: 3 },
-						{ name: '中国农业银行', id: 4 }
-					]
-				}
-			} catch (e) {
-				console.error('加载银行列表失败', e)
-				this.bankList = [
-					{ name: '中国工商银行', id: 1 },
-					{ name: '中国建设银行', id: 2 },
-					{ name: '中国银行', id: 3 },
-					{ name: '中国农业银行', id: 4 }
-				]
-			}
-		},
-		async loadBranchList(bankId) {
-			try {
-				const res = await getBranchList({ bankId })
-				if (res.code === 200 && res.data) {
-					this.branchList = res.data
-				} else {
-					this.branchList = [
-						{ name: '北京支行', id: 1 },
-						{ name: '上海支行', id: 2 },
-						{ name: '广州支行', id: 3 }
-					]
-				}
-			} catch (e) {
-				this.branchList = [
-					{ name: '北京支行', id: 1 },
-					{ name: '上海支行', id: 2 },
-					{ name: '广州支行', id: 3 }
-				]
-			}
-		},
-		onBankChange(e) {
-			const index = e.detail.value
-			this.formData.bankName = this.bankList[index].name
-			//this.formData.bankCardNo = this.bankList[index].id
-			this.formData.bankBranch = '' // 清空支行选择
-			// if (this.formData.bankCardNo) {
-			// 	this.loadBranchList(this.formData.bankCardNo)
-			// }
-		},
-		onBranchChange(e) {
-			const index = e.detail.value
-			this.formData.bankBranch = this.branchList[index].name
-			//this.formData.bankCardNo = this.branchList[index].id
-		},
 		goBack() {
 			uni.navigateBack()
 		},
 		async handleSubmit() {
 			// 表单验证
-			if (!this.formData.bankName) {
+			if (!this.formData.bankName || !this.formData.bankName.trim()) {
 				uni.showToast({
 					icon: 'none',
-					title: '请选择开户行'
+					title: '请输入开户行'
 				})
 				return
 			}
-			if (!this.formData.bankBranch) {
+			if (!this.formData.bankBranch || !this.formData.bankBranch.trim()) {
 				uni.showToast({
 					icon: 'none',
-					title: '请选择支行'
+					title: '请输入支行'
 				})
 				return
 			}
@@ -165,13 +94,13 @@ export default {
 				return
 			}
 			// 银行卡号验证(简单验证)
-			// if (this.formData.bankCardNo.length < 16) {
-			// 	uni.showToast({
-			// 		icon: 'none',
-			// 		title: '请输入正确的银行卡号'
-			// 	})
-			// 	return
-			// }
+			if (this.formData.bankCardNo.length < 16) {
+				uni.showToast({
+					icon: 'none',
+					title: '请输入正确的银行卡号'
+				})
+				return
+			}
 			// uni.navigateTo({
 			// 	url: '/pages_user/editBankCard'
 			// })

+ 1 - 1
pages_user/bankCard.vue

@@ -45,7 +45,7 @@ export default {
 		}
 	},
 	onLoad() {
-		this.loadBankCardData()
+		//this.loadBankCardData()
 	},
 	onShow() {
 		// 从编辑/添加页面返回时刷新数据

+ 19 - 28
pages_user/certification.vue

@@ -153,7 +153,7 @@
 							<image class="uploaded-image" :src="image" mode="aspectFill" @click="previewImage(image, formData.titleCertificate)"></image>
 							<view class="delete-btn" @click="removeTitleImage(index)">×</view>
 						</view>
-						<view class="upload-item upload-placeholder" @click="chooseTitleImage">
+						<view class="upload-item upload-placeholder" @click="chooseTitleImage" v-if="formData.titleCertificate.length < 2">
 							<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>
@@ -177,12 +177,12 @@
 						<text class="required">*</text>
 						<text>开户行</text>
 					</view>
-					<picker style="flex:1" mode="selector" :range="bankList" range-key="name" @change="onBankChange">
-						<view class="form-input picker-input x-bc" :class="{ placeholder: !formData.bankName}">
-							{{ formData.bankName|| '请选择开户行' }}
-							<image class="w36 h36" src="@/static/image/icon_my_more.png" mode=""></image>
-						</view>
-					</picker>
+					<input 
+						class="form-input" 
+						v-model="formData.bankName" 
+						placeholder="请输入开户行"
+						placeholder-class="text-placeholder"
+					/>
 				</view>
 				
 				<view class="form-item">
@@ -272,12 +272,6 @@ export default {
 			institutionList: [],
 			departmentList: [],
 			titleList: [],
-			bankList: [
-				{ name: '中国工商银行', id: 1 },
-				{ name: '中国建设银行', id: 2 },
-				{ name: '中国银行', id: 3 },
-				{ name: '中国农业银行', id: 4 }
-			],
 			selectedInstitution: null, // 选中的机构对象
 			selectedBank: null, // 选中的银行对象
 			accountIdentityOptions: [
@@ -351,12 +345,6 @@ export default {
 					this.certificationStatus = statusRes.data
 				}
 				
-				// // 加载选项数据
-				// if (bankRes.code === 200 && bankRes.data) {
-				// 	this.bankList = bankRes.data
-				// } else {
-				// 	this.bankList = []
-				// }
 				
 				uni.hideLoading()
 			} catch (e) {
@@ -364,12 +352,6 @@ export default {
 				console.error('加载数据失败', e)
 			}
 		},
-		onBankChange(e) {
-			const index = e.detail.value
-			this.formData.bankName = this.bankList[index].name
-			//this.formData.bankCardNo = this.bankList[index].id
-			this.formData.bankBranch = '' // 清空支行选择
-		},
 		onAccountIdentityChange(e) {
 			const value = parseInt(e.detail.value)
 			const selected = this.accountIdentityOptions.find(opt => opt.value === value)
@@ -502,7 +484,9 @@ export default {
 			})
 		},
 		handleCancel() {
-			uni.navigateBack()
+			uni.switchTab({
+				url: '/pages/user/index'
+			})
 		},
 		async handleSubmit() {
 			// 表单验证
@@ -567,7 +551,7 @@ export default {
 			if (!this.formData.bankName && !this.formData.bank) {
 				uni.showToast({
 					icon: 'none',
-					title: '请选择开户行'
+					title: '请输入开户行'
 				})
 				return
 			}
@@ -631,7 +615,9 @@ export default {
 						title: '提交成功'
 					})
 					setTimeout(() => {
-						uni.navigateBack()
+						uni.switchTab({
+							url: '/pages/user/index'
+						})
 					}, 1500)
 				} else {
 					uni.showToast({
@@ -652,6 +638,11 @@ export default {
 }
 </script>
 
+<style lang="stylus">
+.text-placeholder{
+  color: #C8C9CC !important;
+}
+</style>
 <style lang="scss" scoped>
 .container {
 	min-height: 100vh;

+ 160 - 0
pages_user/content.vue

@@ -0,0 +1,160 @@
+<template>
+	<view>
+		<view>
+			【文依学苑】医生注册协议
+			您在开始使用文依学苑服务前,请您务必仔细阅读并充分理解本《文依学苑用户使用协议》。同时,您还应仔细阅读并充分理解文依学苑的隐私政策、知识产权申请等系列政策和声明。在本服务条款中,请您务必特别注意及重点阅读与您的权利及义务密切相关的条款,此类条款可能以粗体加黑的方式标记,包括但不限于免责条款等。
+			一、使用协议的接受
+			1.为使您更好的使用文依学苑的相关服务,请您仔细阅读以下条款,如果您对本协议的任何条款表示异议,您可以选择不进入文依学苑或向文依学苑客服咨询。当您注册成功,无论是进入文依学苑,还是在文依学苑上发布任何内容(即「内容」)及其他任何直接、间接使用本服务平台的部分或全部功能的行为,均意味着您(即「用户」)已阅读并完全接受本协议项下的全部条款,包括接受更新后的本协议条款,均愿意无条件、无保留地接受并承担相应法律责任。如果您不同意本协议或其中任何条款约定,您应立即停止注册及使用程序。
+			2.如您未满14周岁,请在法定监护人的陪同下阅读本用户使用协议,并特别注意未成年人使用的相关条款。
+			3."用户"指所有直接或间接获取和使用文依学苑及相关服务的使用者,包括自然人、法人和其他组织等。在本协议中称为"用户"或称"您"。
+			4.本协议是您与成都文依合创科技有限公司(以下简称"公司"或"我们")之间就您下载、安装、注册、登录、使用"文依学苑"小程序及网页,并获得文依学苑提供的相关服务所订立的协议。公司有权依文依学苑及相关服务或运营的需要单方决定,安排或指定其关联公司、控制公司、继承公司或公司认可的第三方公司继续运营文依学苑平台。并且,就本协议项下涉及的某些服务,可能会由公司的关联公司、控制公司、继承公司或公司认可的第三方公司向您提供。您知晓并同意接受相关服务内容,即视为接受相关权利义务关系亦受本协议约束。
+			5.文依学苑所有服务的所有权、运作权和解释权均归公司所有。您同意本用户使用协议内容并完成注册程序,即成为文依学苑的正式用户,即被视为用户确认自己具有独立的行为能力,明确自己所享有的相应权利,能够独立承担法律责任。
+			6.文依学苑可根据情况制订、修改本协议及条款,您以明示同意或默示同意等任何方式同意接受修改后的协议或条款,变更后的协议和条款即自动对您产生法律效力。
+			7.用户确认:本协议是处理双方权利义务的契约,始终有效,法律另有强制性规定或双方另有特别约定的,依其规定。
+			二、文依学苑提供的服务
+			1.文依学苑不断创新以向其用户提供最优体验。您认知并同意文依学苑提供的服务的形式和本质可不经事先通知您而不时变换。本软件及相关服务更新或部分服务内容更新后,在可能的情况下,公司将以包括但不限于系统提示、公告、站内信等方式提示用户,用户有权选择接受更新版本或服务,如用户不接受,部分功能将受到限制或不能继续使用。
+			2.文依学苑及相关服务中包含公司以各种合法方式获取的信息或信息内容链接,同时也包括公司及其关联公司合法运营的其他单项服务。这些服务在文依学苑平台可能以单独板块形式存在。公司有权不时地增加、减少或改动这些特别板块的设置及服务。
+			3.作为这种持续创新的一部分,您认知并同意文依学苑可自行决定,无须事先通知您,即停止(永久或暂时)向您或全体用户提供服务。您可在任何时候停止使用服务。您停止使用服务时无需特别通知文依学苑。
+			4.您认知并同意,如果文依学苑禁用对您的帐户的访问权,则您可能被阻止获得服务、您的帐户资料或包含在您帐户中的任何文件或其他内容。
+			5.为保证文依学苑软件及相关服务安全、提升用户服务,您使用文依学苑及相关服务需自行准备与软件及相关服务有关的终端设备(如电脑、手机等装置),一旦您在其终端设备中打开文依学苑平台,即视为您使用文依学苑软件及相关服务。为充分实现文依学苑平台的全部功能,您可能需要将其终端设备联网,您理解由您承担所需要的费用(如流量费、上网费等)。
+			6.您理解并同意部分服务由广告收入支持,可展示广告和推销。这些广告可能是针对存储于服务中的信息、通过服务提出的询问或其他信息的内容提供的。文依学苑在服务上的广告的方式、模式和范围可不经向您特别通知而变更。作为文依学苑授予您访问和使用服务的权利的对价,您同意文依学苑可以在服务上加载该等广告。当然您有权根据《文依学苑隐私政策》条款的指引进行相应的推送关闭。
+			三、平台使用规则
+			1.使用平台时可能产生的用户信息:
+			用户个人信息。用户个人信息包括但不限于下列信息:用户真实姓名、头像、身份证号、职业、职务、手机电话、银行账号、第三方支付账号、电子邮件、教育经历、从业经历等。
+			非用户个人信息。用户在文依学苑上,包括提问、发布、回答、浏览、操作状态、使用记录、使用习惯等在内的全部记录信息。除 1 款所列用户个人信息范围外的其他所有信息,均视为非用户个人信息。
+			第三方平台记录信息。使用第三方账号注册、登录、使用文依学苑服务的,将被视为用户完全理解、同意并接受文依学苑包括但不限于收集、统计、分析等方式使用其在第三方平台填写、登记、公布、记录的全部信息。用户一旦使用第三方平台账号注册、登陆、使用文依学苑服务,文依学苑对该第三方记录信息的任何使用,均被视为已经获得了用户本人的完全同意并接受。
+			2.用户使用文依学苑前,需要拥有一个成功注册的账户,用户可以使用真实有效的个人手机号码或邮箱地址作为用户名进行账户注册,亦可授权第三方账号(如一咻医生、一咻健康、微信、支付宝等)快捷登录,且在第三方账户快捷登录中可能涉及用户绑定已有账户或注册新账户的操作。用户注册成功后,文依学苑将给予每个用户一个用户帐号及相应的密码,账户名称和密码将作为文依学苑识别用户身份的唯一有效标识,只要使用了正确的帐号和密码无论是谁登录均视为您本人登录或已得到您本人的授权,用户应当对以其用户帐号进行的所有活动和事件负法律责任,请用户务必妥善保管该用户帐号和密码。用户不得将账号转借、租让、售卖给他人使用,否则应承担由此可能产生的全部责任,并与实际使用人承担连带责任。文依学苑无法对非法或未经您授权使用您的账号及密码的行为做出甄别,因此文依学苑不承担任何责任。当密码或者账号遭到未获授权使用,或者发生任何安全问题时,用户有责任及时有效地通知文依学苑并向当地公安机关报案。
+			3.用户应本着诚实守信的原则,自行向文依学苑提供所需信息。信息发布者可提供个人信息、行医资格(如需)、就医经历(如需)、教育经历(如需)、工作经历(如需)以及相关的其他信息;用户需保证所提供的信息必须在合法基础上保证真实、准确、完整,并保证及时更新以上信息。如因用户自行提供的信息存在非法、抄袭、错误、侵犯他人隐私等问题,用户需承担因此引发的相应的法律责任及后果,且文依学苑保留暂停、清除各类不符合法律政策或不真实的信息内容而无须通知您的权利及终止用户使用文依学苑各项服务的权利,且文依学苑可以保留向被侵权的第三方披露此类用户的个人信息之相关权利。若您未遵守国家法律法规及本协议规定,文依学苑有权作出独立判断并采取暂停或关闭您的帐号等措施。
+			4.用户须对在文依学苑的注册信息的真实性、合法性、有效性承担全部责任,用户不得冒充他人;不得利用他人的名义发布任何信息;不得恶意使用注册帐号导致其他用户误认;否则文依学苑有权立即停止提供服务,收回其帐号并由用户独自承担由此而产生的一切法律责任。
+			5.用户直接或通过各类方式(如 RSS 源和站外 AdivI引用等)间接使用文依学苑服务和数据的行为,都将被视作已无条件接受本协议全部内容;若用户对本协议的任何条款存在异议,请停止使用文依学苑所提供的全部服务。
+			6.文依学苑是一个医疗健康相关信息提供、分享、传播及获取的平台,用户通过文依学苑发表的信息为公开的信息,其他第三方均可以通过文依学苑获取用户发表的信息,用户对任何信息的发表即认可该信息为公开的信息,并单独对此行为承担法律责任;任何用户不愿被其他第三人获知的信息都不应该在文依学苑上进行发表。
+			7.用户承诺不得以任何方式利用文依学苑直接或间接从事违反中国法律以及社会公德的行为,文依学苑有权对违反上述承诺的内容予以删除。
+			用户不得利用文依学苑服务制作、上载、复制、发布、传播或者转载如下内容:
+			•反对宪法所确定的基本原则的;
+			•危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的;
+			•损害国家荣誉和利益的; 煽动民族仇恨、民族歧视,破坏民族团结的;
+			•侮辱、滥用英烈形象,否定英烈事迹,美化粉饰侵略战争行为的;
+			•破坏国家宗教政策,宣扬邪教和封建迷信的;
+			•散布谣言,扰乱社会秩序,破坏社会稳定的;
+			•散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的;
+			•侮辱或者诽谤他人,侵害他人合法权益的;
+			•含有法律、行政法规禁止的其他内容的信息。
+			1.文依学苑有权对用户使用文依学苑的情况进行审查和监督,如用户在使用文依学苑时违反任何上述规定,文依学苑或其授权的人有权要求用户改正或直接采取一切必要的措施(包括但不限于更改或删除用户张贴的内容、暂停或终止用户使用文依学苑的权利)以减轻用户不当行为造成的影响。
+			2.文依学苑保留从任何服务中筛选、审阅、标明、过滤、修订、拒绝或删除任何或所有内容的权利(但无义务这样做)。就某些服务而言,文依学苑可提供滤除明确色情内容、政治相关内容的工具。此外,还有可以通过商业渠道获得的服务和软件能够限制访问令您反感的材料。
+			3.我们非常注重未成年人的保护:
+			(1) 若您为未成年人,应在监护人监护、指导下仔细阅读本协议,并且使用我们的产品及/或服务已经得到监护人的同意;
+			(2) 监护人应注意指导子女上网应注意的安全问题,提前做好相应的风险防范指导工作。若监护人同意未成年人使用我们的产品及/或服务,必须以监护人的名义申请消费(如涉及),并对未成年人使用我们的产品及/或服务进行正确的引导、监督。未成年人使用我们的产品及/或服务,以及行使和履行本协议项下的权利义务视为已获得了监护人的认可;
+			(3) 我们提醒未成年人在使用我们产品及/或服务时,要善于网上学习,避免沉迷网络,影响日常学习生活。
+			四、账户安全
+			1.您同意并理解您有责任将您与用于获得服务的任何帐户相关的密码保密。
+			2.您同意将独自就在您帐户下的所有活动对文依学苑负责。
+			3.您对个人账户的使用、遗失等造成的任何文依学苑及第三方的损失,由您承担;如果您得知任何对您的密码或您的帐户的任何未经授权的使用或者发生存在其它安全问题,您同意立即通知文依学苑。
+			4.文依学苑将通过对用户密码进行加密等安全措施确保用户的信息不丢失,不被滥用和变造。尽管有前述安全措施,您理解在信息网络上不存在"完善的安全措施"。因黑客行为或您的保管疏忽导致账号、密码遭他人非法使用,文依学苑不承担任何责任。如您发现任何非法使用用户账户或存在安全漏洞的情况,应立即通知文依学苑。
+			5.关于文依学苑的数据保护惯例的信息,请查阅文依学苑的《文依学苑隐私政策》。该政策解释了文依学苑如何处理您的个人信息,并在您使用服务时保护您的隐私。您同意按照文依学苑的隐私政策使用您的数据。
+			6.用户理解并同意,文依学苑会尽力保障用户使用数据的存储安全,但不能就此完全保证,包括但不限于以下情形:
+			6.1 文依学苑有权根据实际情况自行决定用户在文依学苑上使用数据的最长存储期限和最大存储空间等,用户可自行根据自己的需要备份您在文依学苑的使用数据。
+			6.2由于网络信号不稳定、网络带宽小等原因导致登录、注册、资料同步、内容查看不稳定、收费服务在合理时间内中断的,其风险由用户自行承担。
+			6.3如果用户删除了文依学苑账户,我们有权从服务器中永久删除用户的账户数据,且没有义务向用户返还数据。
+			五、知识产权
+			1.文依学苑是一个信息获取、分享及传播的平台,我们尊重和鼓励文依学苑用户创作发表分享的内容,文依学苑充分认知到保护知识产权对文依学苑生存与发展的重要性,承诺将保护知识产权作为文依学苑运营的基本原则之一。
+			2.用户在文依学苑上发表的全部原创内容(包括但不仅限于回答、文章和评论),著作权均归用户本人所有。除用户单独授权文依学苑平台可独占或排他使用其发表的内容外,用户可授权第三方以任何方式使用,不需要得到文依学苑的同意。
+			3.文依学苑上可由多人参与编辑的内容,包括但不限于问题及补充说明、答案总结、话题描述、话题结构,所有参与编辑者均同意,相关知识产权归文依学苑所有。
+			4.文依学苑提供的网络服务中包含的标识、版面设计、排版方式、文本、图片、图形等均受著作权、商标权及其它法律保护,未经相关权利人(含文依学苑及其他原始权利人)同意,上述内容均不得在任何平台被直接或间接发布、使用、出于发布或使用目的的改写或再发行,或被用于其他任何商业目的。
+			5.为了促进知识的分享和传播,用户将其在文依学苑上发表的全部内容,授予文依学苑免费的、不可撤销的、非独家使用(除用户对使用方式有单独授权外)和传播的许可,文依学苑有权将该内容用于文依学苑各种形态的产品和服务上,包括但不限于平台以及发表的应用或其他互联网产品。
+			6.第三方若出于非商业目的,将用户在文依学苑上发表的内容转载在文依学苑之外的地方,应当在作品的正文开头的显著位置注明原作者姓名(或原作者在文依学苑上使用的帐号名称),给出原始链接,注明「发表于文依学苑」,并不得对作品进行修改演绎。若需要对作品进行修改,或用于商业目的,第三方应当联系用户获得单独授权,按照用户规定的方式使用该内容。
+			7.文依学苑为用户提供「保留所有权利,禁止转载」的选项。除非获得原作者的单独授权,任何第三方不得转载标注了「禁止转载」的内容,否则均视为侵权。
+			8.用户了解并同意,文依学苑之服务、产品与资料仅依其当前所呈现的状况提供,而且文依学苑明确地表示拒绝对于服务、产品或资料等给予任何明示或暗示之担保或保证,包括但不限于,为商业使用、适合于特定目的或未侵害他人权利之担保或保证等。文依学苑对于因服务、产品或资料等所产生之任何直接、间接、附带的或因此而导致之衍生性损失概不负责。文依学苑对于任何用户信息或个性化设定之时效、删除、传递错误、未予储存或其它任何问题,均不承担任何责任。在文依学苑上传或发表的内容,用户应保证其为著作权人或已取得合法授权,并且该内容不会侵犯任何第三方的合法权益。如果第三方提出关于著作权的异议,文依学苑有权根据实际情况删除相关的内容,且有权追究用户的法律责任。给文依学苑或任何第三方造成损失的,用户应负责全额赔偿。
+			9.如果任何第三方侵犯了文依学苑用户相关的权利,用户同意不可撤销地授权文依学苑或其指定的代理人单独、全权代表文依学苑自身或用户对该第三方提出警告、投诉、发起行政执法、诉讼、进行上诉,或谈判和解,并且用户同意在文依学苑认为必要的情况下参与共同维权。
+			10.文依学苑有权但无义务对用户发布的内容进行审核,有权根据相关证据结合《侵权责任法》、《信息网络传播权保护条例》等法律法规及文依学苑原则对侵权信息进行处理。
+			11.您认知并同意,文依学苑(或文依学苑的许可方)对服务拥有一切法定权利、所有权和利益,包括存在于服务中的任何知识产权(无论该等权利是否已经登记,也不论该等权利在世界的何等地方存在)。您进一步认知,服务可能包括文依学苑指定为保密的信息,未经文依学苑事先书面同意,您不得披露该等信息。
+			12.除非您与文依学苑另有书面协议,否则本条款中的任何规定均未给予您使用文依学苑任何商号、商标、服务标记、标识、域名及其他显著品牌特征的权利。
+			13.如果您在与文依学苑的单独书面协议中被给予一项使用上述品牌特征的明确的权利,则您同意您在使用该等品牌特征时遵守该协议、本条款的任何适用规定以及不时更新的文依学苑品牌特征使用指南。
+			14.除第11条规定的限制许可外,文依学苑认知并同意,其不在本条款项下获得您(或您的许可方)对在服务上或通过服务提交、张贴、传输或展示的任何内容的任何权利、所有权或利益,包括该内容中存在的任何知识产权(无论该等权利是否已经登记,亦不论该等权利在世界的何等地方存在)。除非您与文依学苑另有书面协议,否则您同意您负责保护并强制执行这些权利,文依学苑没有义务代表您这样做。
+			15.您同意您不得删除、掩藏或改动服务所附的或包含的任何专有权利声明(包括著作权和商标声明)。
+			16.除非您得到文依学苑书面明确授权这样做,否则您同意在使用服务时,您将不以可能或故意导致混淆该等商标、名称或标识的所有者或授权用户的方式使用任何公司或组织的商标、服务标识、商号、标识。
+			六、侵权举报
+			1. 文依学苑高度重视自由表达和个人、企业正当权利的平衡。依照法律规定删除违法信息是文依学苑社区的法定义务,文依学苑社区亦未与任何中介机构合作开展此项业务。
+			2.侵犯企业或个人合法权益的侵权举报,包括但不限于涉及个人隐私、造谣与诽谤、商业侵权。
+			(1)涉及个人隐私:发布内容中直接涉及身份信息,如个人姓名、家庭住址、身份证号码、工作单位、私人电话等详细个人隐私;
+			(2)造谣、诽谤:发布内容中指名道姓(包括自然人和企业)的直接谩骂、侮辱、虚构中伤、恶意诽谤等;
+			(3)商业侵权:泄露企业商业机密及其他根据保密协议不能公开讨论的内容。
+			 用户在文依学苑发表的内容仅表明其个人的立场和观点,并不代表文依学苑的立场或观点。如果个人或企业发现文依学苑上存在侵犯自身合法权益的内容,可以先尝试与作者取得联系,通过沟通协商解决问题。如您无法联系到作者,或无法通过与作者沟通解决问题,您可通过向文依学苑指定邮箱发送侵权投诉内容至邮箱(17716144271@163.com    )进行投诉。为了保证问题能够及时有效地处理,请务必提交真实有效、完整清晰的材料,否则投诉将无法受理。您需要向文依学苑提供的投诉材料包括:
+			(1)权利人对涉嫌侵权内容拥有商标权、著作权和/或其他依法可以行使权利的权属证明,权属证明通常是营业执照或组织机构代码证;
+			(2)举报人的身份证明,身份证明可以是身份证或护照;
+			(3)如果举报人非权利人,请举报人提供代表权利人进行举报的书面授权证明。为确保投诉材料的真实性,在侵权举报中,您还需要出具以下法律声明;
+			(4)我本人为所举报内容的合法权利人;
+			(5)我举报的发布在文依学苑社区中的内容侵犯了本人相应的合法权益;
+			(6)如果本侵权举报内容不完全属实,本人将承担由此产生的一切法律责任,并承担和赔偿文依学苑因根据投诉人的通知书对相关帐号的处理而造成的任何损失,包括但不限于文依学苑因向被投诉方赔偿而产生的损失及文依学苑名誉、商誉损害等。
+			处理流程
+			(7)出于网络平台的监督属性,并非所有申请都必须受理。文依学苑自收到举报的七个工作日内处理。处理期间,不提供任何电话、邮件及其他方式的查询服务。
+			(8)出现文依学苑已经删除或处理的内容,但是百度、谷歌等搜索引擎依然可以搜索到的现象,是因为百度、谷歌等搜索引擎自带缓存,此类问题文依学苑无权也无法处理,因此相关申请不予受理。您可以自行联系搜索引擎服务商进行处理。
+			(9)此为文依学苑唯一的官方侵权投诉渠道,暂不提供其他方式处理此业务。
+			(10)用户在文依学苑中的商业行为引发的法律纠纷,由交易双方自行处理,与文依学苑无关。
+			七、终止您与文依学苑的关系
+			1. 文依学苑可能会对服务内容进行变更、也可能会中断、终止服务。鉴于网络服务的特殊性(包括但不限于服务器的稳定性问题、恶意的网络攻击等行为或文依学苑无法控制的情形),您同意文依学苑有权随时中断或终止部分或全部的服务。
+			2. 您理解,文依学苑需要定期或不定期对提供服务的平台或相关设备进行维护、升级或其他目的暂停部分或全部服务,如因此类情况而造成服务在合理时间内的中断,文依学苑无需为此承担任何责任。
+			3. 如果您希望终止与使用文依学苑产品及服务的,您可以通过【文依学苑隐私政策】中规定的方式注销账号及相关使用信息。
+			4. 发生下列情况时文依学苑可单方终止其与您的服务关系及相关协议约定:
+			(1)您违反了本条款的任何规定(或您的行为方式明确显示您不打算或不能遵守本条款规定);或
+			(2)法律要求文依学苑这样做(例如:向您提供服务不合法或变得不合法);或
+			(3)文依学苑与之一起向您提供服务的合作伙伴已终止与文依学苑的关系或停止向您提供服务;或
+			(4)文依学苑转变为不再向您居住的或您从那里使用服务的国家内的用户提供服务;或
+			(5)文依学苑认为,文依学苑向您提供服务不再具有商业可行性。
+			5. 本条款终止时,您和文依学苑已经享受或承担的(或在本条款有效期间已经产生的)或明确规定为无限期有效的所有法定权利、义务和责任不受该终止的影响。
+			6. 文依学苑、其子公司和关联公司及其许可人,不就以下各项向您作出陈述或保证:
+			(1)您对服务的使用将符合您的需求;
+			(2)您对服务的使用将无中断、及时、安全或没有错误;
+			(3)由于您使用服务而获得的任何信息将是准确的或可靠的;及
+			(4)作为服务的一部分向您提供的任何软件的运行或功能中的缺陷将被纠正。
+			7. 通过使用服务而下载或以其他方式获得的任何材料由您自行作出并承担风险,您将独自对由于下载任何该等材料而导致对电脑系统或其他装置的损害或数据的丢失负责。
+			8. 您从文依学苑获得的或通过服务或从服务获得的任何建议或信息(无论口头还是书面的)均不创立本条款中未明确规定的任何保证。
+			9. 文依学苑进一步明确否认任何种类的所有保证和条件(无论明示还是默示的),包括但不限于适销性、适合特定目的及不侵权的默示保证和条件。
+			八、责任限制
+			在遵守本协议全部规定的前提下,您明示理解并同意,文依学苑、其子公司和关联公司及其许可人不就以下事项对您承担责任:
+			1.您无论由于何种原因和在任何责任理论项下发生的任何直接、间接、附带、特殊、后果性或惩罚性的损害。这应包括但不限于任何利润损失(无论是直接还是间接发生)、任何商誉或业务声誉损失、任何数据丢失、替代物品或服务的购买费用或其他无形损失;
+			2.您可能产生的任何损失或损害,包括但不限于由下列原因导致的损失或损害;
+			3. 您对任何广告的完整性、准确性或其存在的信任,或作为您与其广告出现在服务中的任何广告商或赞助人之间的任何关系或交易的结果;
+			4. 文依学苑对服务可能做出的变更,或永久或暂时停止提供服务(或服务中的任何功能);
+			5. 对通过您使用服务而维持或传输的任何内容及其他通信数据的删除、毁坏或未能将其储存;
+			6. 您未向文依学苑提供准确的帐户信息;
+			7. 您未对您的密码或帐户资料保持安全及保密;
+			8. 无论文依学苑是否接到通知或是否应已知晓引起任何该等损失的可能性,上文第1款中文依学苑对您的责任限制均应适用。
+			9. 对关于符合适用国际知识产权法(包括中国的《著作权法》)的指称的著作权侵权通知做出回应以及终止重复侵权者帐户是文依学苑的政策,文依学苑不能对用户发表的回答或评论的正确性进行保证。
+			用户在文依学苑发表的内容仅表明其个人的立场和观点,并不代表文依学苑的立场或观点。作为内容的发表者,需自行对所发表内容负责,因所发表内容引发的一切纠纷,由该内容的发表者承担全部法律及连带责任。文依学苑不承担任何法律及连带责任。
+			文依学苑不保证网络服务一定能满足用户的要求,也不保证网络服务不会中断,对网络服务的及时性、安全性、准确性也都不作保证。在法律允许的范围内,文依学苑对以下情形导致的服务中断或受阻不承担责任:
+			1.受到计算机病毒、木马或其他恶意程序、黑客攻击的破坏;
+			2.用户或本公司电脑软件、系统、硬件和通信线路出现故障,用户操作不当;
+			3.用户通过非本公司授权的方式使用服务;
+			4.其他不可归因于文依学苑的事由;
+			5.对于因不可抗力或文依学苑不能控制的原因造成的网络服务中断或其它缺陷,文依学苑不承担任何责任,但将尽力减少因此而给用户造成的损失和影响;
+			6.本服务同大多数互联网服务一样,受包括但不限于用户原因、网络服务质量、社会环境等因素的差异影响,可能受到各种安全问题的侵扰,如他人利用用户的资料,造成现实生活中的骚扰;您应加强信息安全及使用者资料的保护意识,注意加强密码保护,以免遭致损失和骚扰;
+			7.在使用本服务的过程中,可能会遇到网络信息或其他用户行为带来的风险,文依学苑不对任何第三方信息的真实性、适用性、合法性承担责任,也不对因第三人侵权行为给用户造成的损害(包括但不限于信息损失,服务中断,资料灭失)负责这些风险包括但不限于;
+			8.来自他人匿名或冒名的含有威胁、诽谤、令人反感或非法内容的信息;
+			9.因使用本协议项下的服务,遭受他人误导、欺骗或其他导致或可能导致的任何心理、生理上的伤害以及经济上的损失;
+			10.其他因网络信息或用户行为引起的风险;
+			11.文依学苑所有信息仅供参考。文依学苑致力于提供正确、完整的学术、健康资讯,但不保证信息的绝对正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。文依学苑所提供的任何学术、健康资讯,仅供参考,不能替代医生和其他医务人员的建议,如自行使用文依学苑资料发生偏差, 文依学苑不承担任何法律责任;
+			九、其他内容
+			1. 服务可包含对其他平台或内容或资源的超级链接,包括但不限于任何广告内容链接,以及该链接所指向网页之所有内容,均系该网页所属第三方的所有者制作和提供。第三方网站并非也不反映文依学苑之任何意见和主张,也不表示文依学苑同意或支持该第三方网页上的任何内容、主张或立场。文依学苑对第三方网页中内容之合法性、准确性、真实性、适用性、安全性和完整性等概不承担任何责任。任何单位或个人如需要第三方网站中内容(包括资讯、资料、消息、产品或服务介绍、报价等),并欲据此进行交易或其他行为前,应慎重辨别这些内容的合法性、准确性、真实性、适用性、完整性和安全性(包括下载第三方网站中内容是否会感染电脑病毒),并采取谨慎的预防措施。如您不确定这些内容是否合法、准确、真实、实用、完整和安全,建议您先咨询专业人士。文依学苑可能并不控制由文依学苑以外的公司或个人提供的任何平台或资源。
+			2. 您认知并同意,文依学苑不对该等外部平台或资源的可用性负责,亦不对该等网络或资源上的或从该等平台或资源获得的任何广告、产品或其他材料加以认可。任何单位或者个人因相信、使用第三方网站中信息、服务、产品等内容,或据此进行交易等行为,而引致的人身伤亡、财产毁损(包括因下载而感染电脑病毒)、名誉或商誉诽谤、版权或知识产权等权利的侵犯等事件,及因该等事件所造成的损害后果,文依学苑概不承担任何法律责任。无论何种原因,文依学苑不对任何非与文依学苑直接发生的交易和行为承担任何直接、间接、附带或衍生的损失和责任。
+			3. 您认知并同意,文依学苑不对由于您由于那些外部的平台或资源的可用性或您对该等平台或资源上的或从该等平台或资源获得的任何广告、产品或其他材料的完整性、准确性或存在的信赖而发生的任何损失或损害承担责任。
+			十、本协议的变更
+			1. 文依学苑可不时对通用条款或附加条款作出变更,内容更新后,在可能的情况下,公司将以包括但不限于系统提示、公告、站内信等方式通知用户,该等通知于发送之日视为已送达。修改后的协议一旦在文依学苑张贴公告即行生效,并自动代替原有协议。您可随时登陆文依学苑查阅最新协议;您有义务随时关注文依学苑公告并阅读最新协议。
+			2. 如果您不同意所变更的内容,您可以停止使用服务并注销账号。您理解并同意,如果您在通用条款或附加条款变更日期之后使用服务,则文依学苑将把您的使用视为接受更新后的通用条款或附加条款。
+			十一、一般法律条款
+			1. 本协议及本协议条款项下您与文依学苑的关系,受中国法律管辖,但排除其冲突法规定。您与文依学苑均同意接受位于中国境内的【成都文依合创科技有限公司】所在地【成都市温江区海天腾逸广场】有管辖权的人民法院的管辖,以解决任何由本条款引起的法律事项。
+			2. 本协议内容中的条款,请您着重阅读。您点击"同意"按钮即视为您完全接受本协议,在点击之前请您再次确认已知悉并完全理解本协议的全部内容。我们在此特别提示:本协议内容包括协议正文、法律声明及隐私权政策及所有文依学苑已经发布或将来可能发布的各类规则、规范、通知、公告等(合称"规则")。法律声明、隐私政策及所有规则为协议不可分割的一部分,与协议正文具有同等法律效力。
+			3. 文依学苑未行使或执行本使用协议任何权利或规定,不构成对前述权利或权利之放弃。
+			4. 倘若本用户协议之任何规定因与中华人民共和国法律抵触而无效,本协议其他规定仍应具有完整的效力及效果。
+			5. 本使用协议之标题仅供方便而设,不具任何法律或契约效果。
+			十二、如何联系我们
+			如对本协议内容有任何疑问、意见或建议您可以通过在线客服与我们联系,一般情况下我们将在30个工作日内回复您的请求。
+			成都文依合创科技有限公司
+		</view>
+	</view>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 55 - 112
pages_user/editBankCard.vue

@@ -5,23 +5,23 @@
 			<view class="form-section">
 				<view class="form-item">
 					<view class="form-label">开户行</view>
-					<picker mode="selector" :range="bankList" range-key="name" @change="onBankChange">
-						<view class="form-input picker-input" :class="{ placeholder: !formData.bankName }">
-							{{ formData.bankName || '请选择开户行' }}
-							<image class="w36 h36" src="@/static/image/icon_my_more.png" mode=""></image>
-						</view>
-					</picker>
+					<input 
+						class="form-input" 
+						v-model="formData.bankName" 
+						placeholder="请输入开户行"
+						placeholder-class="text-placeholder"
+					/>
 				</view>
 				<view class="divider"></view>
 				
 				<view class="form-item">
 					<view class="form-label">支行</view>
-					<picker mode="selector" :range="branchList" range-key="name" @change="onBranchChange">
-						<view class="form-input picker-input" :class="{ placeholder: !formData.bankBranch }">
-							{{ formData.bankBranch || '请选择支行' }}
-							<image class="w36 h36" src="@/static/image/icon_my_more.png" mode=""></image>
-						</view>
-					</picker>
+					<input 
+						class="form-input" 
+						v-model="formData.bankBranch" 
+						placeholder="请输入支行"
+						placeholder-class="text-placeholder"
+					/>
 				</view>
 				<view class="divider"></view>
 				
@@ -29,7 +29,10 @@
 					<view class="form-label">银行卡号</view>
 					<input 
 						class="form-input" 
-						v-model="formData.bankCardNo" 
+						 :value="isEditing ? formData.bankCardNo : formatBankCard(formData.bankCardNo)"
+						      @input="handleCardInput"
+						      @focus="isEditing = true"
+						      @blur="handleCardBlur"
 						placeholder="请输入银行卡号"
 						type="number"
 						maxlength="19"
@@ -55,27 +58,17 @@
 </template>
 
 <script>
-import { addBankCard, deleteBankCard, getBankCardInfo, getBankList, getBranchList } from '@/api/bankCard'
+import { addBankCard, deleteBankCard, getBankCardInfo } from '@/api/bankCard'
 export default {
 	data() {
 		return {
 			cardId: '',
+			isEditing: false,
 			formData: {
 				"bankBranch": "",
 				  "bankCardNo": "",
 				  "bankName": ""
-			},
-			bankList: [
-				{ name: '中国工商银行', id: 1 },
-				{ name: '中国建设银行', id: 2 },
-				{ name: '中国银行', id: 3 },
-				{ name: '中国农业银行', id: 4 }
-			],
-			branchList: [{ name: '北京支行', id: 1 },
-					{ name: '上海支行', id: 2 },
-					{ name: '广州支行', id: 3 },
-					{ name: '重庆支行', id: 4 }
-					]
+			}
 		}
 	},
 	onLoad(options) {
@@ -84,9 +77,27 @@ export default {
 			
 		// }
 		this.loadBankCardDetail()
-		//this.loadBankList()
 	},
 	methods: {
+		formatBankCard(cardNo) {
+		     if (!cardNo || cardNo.length < 8) return cardNo;
+		     const prefix = cardNo.substring(0, 4);
+		     const suffix = cardNo.substring(cardNo.length - 4);
+		     return `${prefix}****${suffix}`;
+		   },
+		   handleCardInput(e) {
+		         // 实时更新原始卡号数据
+		         this.formData.bankCardNo = e.detail.value;
+		       },
+			   handleCardBlur() {
+			         // 延迟切换状态,避免输入完成瞬间的视觉闪烁
+			         setTimeout(() => {
+			           this.isEditing = false;
+			         }, 100);
+			         
+			         // 可选:失去焦点后自动格式化卡号(每4位加空格,如需保留数字格式可注释)
+			         // this.formData.bankCardNo = this.formData.bankCardNo.replace(/\D/g, '');
+			       },
 		async loadBankCardDetail() {
 			try {
 				uni.showLoading({ title: '加载中...' })
@@ -98,91 +109,31 @@ export default {
 					this.formData = {
 						...this.formData,
 						bankBranch: data.bankBranch,
-						  bankCardNo:  data.bankCardNo,
-						  bankName: data.bankName
+						bankCardNo: data.bankCardNo || '',
+						bankName: data.bankName
 					}
-					// 加载支行列表(如果存在银行ID)
-					// if (this.formData.bankId) {
-					// 	this.loadBranchList(this.formData.bankId)
-					// }
 				}
 			} catch (e) {
 				uni.hideLoading()
 				console.error('加载银行卡详情失败', e)
 			}
 		},
-		async loadBankList() {
-			try {
-				const res = await getBankList()
-				if (res.code === 200 && res.data) {
-					this.bankList = res.data
-				} else {
-					this.bankList = [
-						{ name: '中国工商银行', id: 1 },
-						{ name: '中国建设银行', id: 2 },
-						{ name: '中国银行', id: 3 },
-						{ name: '中国农业银行', id: 4 }
-					]
-				}
-			} catch (e) {
-				this.bankList = [
-					{ name: '中国工商银行', id: 1 },
-					{ name: '中国建设银行', id: 2 },
-					{ name: '中国银行', id: 3 },
-					{ name: '中国农业银行', id: 4 }
-				]
-			}
-		},
-		async loadBranchList(bankId) {
-			try {
-				const res = await getBranchList({ bankId })
-				if (res.code === 200 && res.data) {
-					this.branchList = res.data
-				} else {
-					this.branchList = [
-						{ name: '北京支行', id: 1 },
-						{ name: '上海支行', id: 2 },
-						{ name: '广州支行', id: 3 }
-					]
-				}
-			} catch (e) {
-				this.branchList = [
-					{ name: '北京支行', id: 1 },
-					{ name: '上海支行', id: 2 },
-					{ name: '广州支行', id: 3 }
-				]
-			}
-		},
-		onBankChange(e) {
-			const index = e.detail.value
-			this.formData.bankName = this.bankList[index].name
-			//this.formData.bankCardNo = this.bankList[index].id
-			this.formData.bankBranch = '' // 清空支行选择
-			// if (this.formData.bankCardNo) {
-			// 	this.loadBranchList(this.formData.bankCardNo)
-			// }
-		},
-		onBranchChange(e) {
-			const index = e.detail.value
-			this.formData.bankBranch = this.branchList[index].name
-			//this.formData.bankCardNo = this.branchList[index].id
-		},
 		goBack() {
 			uni.navigateBack()
 		},
 		async handleSave() {
 			// 表单验证
-			if (!this.formData.bankName) {
+			if (!this.formData.bankName || !this.formData.bankName.trim()) {
 				uni.showToast({
 					icon: 'none',
-					title: '请选择开户行'
+					title: '请输入开户行'
 				})
 				return
 			}
-			if (!this.formData.bankBranch) {
+			if (!this.formData.bankBranch || !this.formData.bankBranch.trim()) {
 				uni.showToast({
 					icon: 'none',
-					title: '请选择支行'
+					title: '请输入支行'
 				})
 				return
 			}
@@ -193,22 +144,22 @@ export default {
 				})
 				return
 			}
-			// if (this.formData.bankCardNo.length < 16) {
-			// 	uni.showToast({
-			// 		icon: 'none',
-			// 		title: '请输入正确的银行卡号'
-			// 	})
-			// 	return
-			// }
-			
+			// 银行卡号验证(简单验证)
+			if (this.formData.bankCardNo.length < 16) {
+				uni.showToast({
+					icon: 'none',
+					title: '请输入正确的银行卡号'
+				})
+				return
+			}
 			try {
 				uni.showLoading({ title: '保存中...' })
 				
 				// 构建提交数据,按照接口字段要求
 				const submitData = {
-					bankName: this.formData.bank || this.formData.bankName,
-					bankBranch: this.formData.branch || this.formData.bankBranch,
-					bankCardNo: this.formData.cardNumber || this.formData.bankCardNo
+					bankName: this.formData.bankName,
+					bankBranch: this.formData.bankBranch,
+					bankCardNo: this.formData.bankCardNo
 				}
 				
 				// 如果有ID(编辑时),添加id字段
@@ -216,14 +167,6 @@ export default {
 					submitData.id = this.cardId || this.formData.id
 				}
 				
-				// 如果有bankId和branchId,也一并提交
-				if (this.formData.bankId) {
-					submitData.bankId = this.formData.bankId
-				}
-				if (this.formData.branchId) {
-					submitData.branchId = this.formData.branchId
-				}
-				
 				const res = await addBankCard(submitData)
 				uni.hideLoading()
 				

+ 7 - 1
pages_user/forgetPassword.vue

@@ -201,7 +201,13 @@ export default {
 
 						// 跳转到其他页面或返回
 						setTimeout(() => {
-							uni.navigateBack();
+							// uni.navigateBack();
+							uni.removeStorageSync('AppToken',null);
+							uni.removeStorageSync('userInfo',null);
+							uni.$emit('refreshLogin');
+							uni.navigateTo({
+								url: '/pages/auth/login'
+							})	
 						}, 1500);
 					} else {
 						uni.showToast({

+ 7 - 17
pages_user/personInfo.vue

@@ -21,7 +21,7 @@
 			</view>
 			<view class="info-item">
 				<view class="label">手机号</view>
-				<view class="right" v-if="user.mobile!=null">{{user.mobile}}</view>
+				<view class="right" v-if="user.mobile!=null">{{ formatMobile(user.mobile) }}</view>
 			</view>
 			    <view class="info-item">
 			      <view class="label">职称</view>
@@ -35,10 +35,6 @@
 			      <view class="label">机构</view>
 			      <view class="right">{{ user.institution || '-' }}</view>
 			    </view>
-				<view class="info-item">
-				  <view class="label">公司名称</view>
-				  <view class="right">{{ user.companyName || '-' }}</view>
-				</view>
 			    <view class="info-item">
 			      <view class="label">开户银行</view>
 			      <view class="right">{{ user.bankName || '-' }}</view>
@@ -47,18 +43,6 @@
 				  <view class="label">银行卡号</view>
 				  <view class="right">{{ user.idCard ? formatBankCard(user.idCard) : '-' }}</view>
 				</view>
-				<view class="info-item">
-				  <view class="label">执业证</view>
-				  <view class="right">
-					  <image class="w300 h150" :src="user.licenseImage" mode="aspectFill"></image>
-				  </view>
-				</view>
-				<view class="info-item">
-				  <view class="label">职称证/工牌</view>
-				  <view class="right">
-					  <image class="w300 h150" :src="user.titleCertImage" mode="aspectFill"></image>
-				  </view>
-				</view>
 		</view>
 </template>
 
@@ -74,6 +58,12 @@
 			this.getUserInfo()
 		},
 		methods: {
+			 formatMobile(mobile) {
+			      if (!mobile || typeof mobile !== 'string') return mobile || '-';
+			      const s = String(mobile).trim();
+			      if (s.length < 8) return s;
+			      return s.substring(0, 3) + '****' + s.substring(s.length - 4);
+			    },
 			 formatBankCard(cardNo) {
 			      if (!cardNo || cardNo.length < 8) return cardNo;
 			      const prefix = cardNo.substring(0, 4);

+ 5 - 4
pages_user/points.vue

@@ -191,7 +191,7 @@ export default {
 				])
 				uni.hideLoading()
 				
-				if (infoRes.code === 200 && infoRes.data) {
+				if (infoRes.code == 200 && infoRes.data) {
 					this.pointsData = infoRes.data
 				}
 			} catch (e) {
@@ -210,6 +210,7 @@ export default {
 					(this.typeOptions.find(item => item.label === this.selectedType)?.value || '')
 				
 				const listRes = await getPointsList({
+					selectTime:this.selectedDate,
 					pageNum: this.pageNum,
 					pageSize: this.pageSize,
 					changeType: this.incomeType,
@@ -220,8 +221,8 @@ export default {
 					uni.hideLoading()
 				}
 				
-				if (listRes.code === 200 && listRes.data) {
-					if (this.pageNum === 1) {
+				if (listRes.code == 200 && listRes.data) {
+					if (this.pageNum == 1) {
 						// 第一页,直接替换
 						this.transactionList = listRes.data.doctorBalanceLogs || []
 					} else {
@@ -236,7 +237,7 @@ export default {
 						this.hasMore = false
 					}
 				} else {
-					if (this.pageNum === 1) {
+					if (this.pageNum == 1) {
 						this.transactionList = []
 					}
 					this.hasMore = false

+ 308 - 0
pages_user/privacyPolicy.vue

@@ -0,0 +1,308 @@
+<template>
+	<view class="container">
+		<scroll-view class="content" scroll-y>
+			<view class="agreement-body">
+				<view class="title">【文依学苑】隐私保护政策</view>
+				<view class="update-time">更新日期:2026年2月24日</view>
+
+				<view class="section">
+					<view class="section-text">更新提示:</view>
+					<view class="section-text">尊敬的文依学苑用户:根据最新的法律法规及政策要求,结合实际情况,我们对《用户隐私保护协议》进行了部分更新。此版本的更新内容主要集中在:</view>
+					<view class="section-text">1、更新了"十、我们如何处理未成年人的个人信息"部分内容;</view>
+					<view class="section-text">提示条款</view>
+					<view class="section-text">您的信任对我们非常重要,我们深知隐私和个人信息安全的重要性,我们将按照法律法规要求,采取相应的安全保护措施,以保护您的个人信息安全。鉴此,文依学苑(以下简称"我们"或"学苑")制定本《用户隐私保护协议》(以下简称"本协议")并承诺严格遵循本协议的内容合理处理您的个人信息及其他数据。我们在此提醒您:</view>
+					<view class="section-text">本协议适用于文依学苑的所有互联网电子服务或商品。如我们及/或关联公司的互联网电子服务或商品中使用了文依学苑提供的互联网电子服务或商品(例如直接使用文依学苑APP、小程序账户登录)但未设独立隐私保护协议的,则本协议同样适用于该部分互联网电子服务或商品。我们及/或关联公司就其向您提供电子服务或商品单独设立隐私保护协议的,则相应产品或服务适用该相应的隐私保护协议。</view>
+					<view class="section-text">请您注意,本协议和声明不适用于以下情况:</view>
+					<view class="section-text">1、通过我们的互联网电子服务或商品而接入的第三方服务(包括任何第三方网站)收集的信息;</view>
+					<view class="section-text">2、通过在我们互联网电子服务或商品中进行广告服务的其他公司或机构所收集的信息。</view>
+					<view class="section-text">我们不参与且不对您与第三方之间因个人信息保护等发生的纠纷承担任何责任。</view>
+					<view class="section-text">在使用我们的各项互联网电子服务或商品前,请您务必仔细阅读并透彻理解本协议,特别是以粗体标识的条款,您应重点阅读,在确认充分理解并同意后方使用相关互联网电子服务或商品。一旦您开始使用本平台服务,将被视为对本协议内容的接受和认可。</view>
+					<view class="section-text">如对本声明和协议内容有任何疑问、意见或建议,您可通过客服与我们联系。</view>
+					<view class="section-text">隐私权协议</view>
+					<view class="section-text">学苑深知个人信息对您的重要性,并会尽全力保护您的个人信息安全。我们致力于维持您对我们的信任,我们承诺将按业界成熟的安全标准,采取相应的安全保护措施来保护您的个人信息。在使用我们的互联网电子服务或商品前,请您仔细阅读并了解本协议,我们将按照本协议收集、处理及披露您的信息。</view>
+					<view class="section-text">本协议和声明将帮助您了解以下内容:</view>
+					<view class="section-text">1、定义</view>
+					<view class="section-text">2、我们可能收集的信息</view>
+					<view class="section-text">3、我们如何收集和使用您的个人信息</view>
+					<view class="section-text">4、我们如何使用 Cookie 和同类技术</view>
+					<view class="section-text">5、信息存储</view>
+					<view class="section-text">6、我们如何委托处理、共享、转让、公开披露您的个人信息</view>
+					<view class="section-text">7、用户业务数据和公开信息</view>
+					<view class="section-text">8、我们如何保护您的个人信息</view>
+					<view class="section-text">9、您如何管理您的个人信息</view>
+					<view class="section-text">10、我们如何处理未成年人的个人信息</view>
+					<view class="section-text">11、您的个人信息如何在全球范围转移</view>
+					<view class="section-text">12、本声明和协议如何更新</view>
+					<view class="section-text">13、如何联系我们</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">一、定义</view>
+					<view class="section-text">1.1 个人信息</view>
+					<view class="section-text">指以电子或者其他方式记录的与已识别或者可识别的自然人有关的各种信息, 不包括匿名化处理后的信息。</view>
+					<view class="section-text">1.2 敏感个人信息</view>
+					<view class="section-text">指一旦泄露或者非法使用,容易导致自然人的人格尊严受到侵害或者人身、财产安全受到危害的个人信息,包括生物识别信息、宗教信仰、特定身份、医疗健康、金融账户、行踪轨迹等信息,以及儿童的个人信息。</view>
+					<view class="section-text">1.3 个人信息删除</view>
+					<view class="section-text">指在实现日常业务功能所涉及的系统中去除个人信息的行为,使其保持不可被检索、访问的状态。</view>
+					<view class="section-text">1.4 儿童</view>
+					<view class="section-text">指不满十四周岁的未成年人。</view>
+					<view class="section-text">1.5 业务数据</view>
+					<view class="section-text">不同于个人信息,是指学苑的用户利用文依学苑的服务上传、下载、分发等通过文依学苑的技术服务处理的数据。</view>
+					<view class="section-text">1.6 服务平台</view>
+					<view class="section-text">指文依学苑开发、运营的互联网诊疗服务平台,包括域名为:qicaijiaxiang.com的网站和"文依学苑"微信小程序、"一咻学术"微信小程序等移动端应用及网站的合称。</view>
+					<view class="section-text">1.7 关联公司</view>
+					<view class="section-text">指一方现在或将来控制、受控制或与其处于共同控制下的任何公司、机构。"控制"是指直接或间接地拥有影响所提及公司管理的能力,无论是通过所有权、有投票权的股份、合同或其他被依法认定的方式。</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">二、我们可能收集的信息</view>
+					<view class="section-text">我们提供产品或服务时,可能会收集、储存和使用下列与您有关的个人信息:</view>
+					<view class="section-text">2.1 为实现向您提供产品/服务的基本功能,您需授权我们收集、使用的必要个人信息。如您拒绝提供相应信息,您将无法正常使用我们的产品/服务。</view>
+					<view class="section-text">2.2 为实现向您提供产品/服务的附加功能,您可选择是否授权我们收集、使用的个人信息。如您拒绝提供,您将无法正常使用相关附加功能或无法达到我们拟达到的功能效果。</view>
+					<view class="section-text">您理解并同意:因我们向您提供的产品和服务种类众多,且不同用户选择使用的具体产品/服务范围存在差异,相应的,基本/附加功能及收集使用的个人信息类型、范围等会有所区别,请以具体的产品/服务功能为准。同时,为给您带来更好的产品和服务体验,我们在持续努力改进我们的技术,随之我们可能会不时推出新的或优化后的功能,可能需要收集、使用新的个人信息或变更个人信息使用目的或方式。对此,我们将通过更新本协议、弹窗、页面提示等方式另行向您说明对应信息的收集目的、范围及使用方式,并为您提供自主选择同意的方式,且在征得您明示同意后收集、使用。在此过程中,如果您有任何疑问、意见或建议的,您可通过服务平台提供的各种联系方式与我们联系,我们会尽快为您作出解答。</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">三、我们如何收集和使用您的个人信息</view>
+					<view class="section-text">我们会出于协议所述的以下目的,收集、储存和使用您的个人信息:</view>
+					<view class="section-text">3.1 帮助您成为我们的用户</view>
+					<view class="section-text">文依学苑平台的知识内容属于平台付费所得,在您查阅时,需要注册成为平台用户,以便我们根据您的行为习惯提供服务。在您注册时,请您至少提供手机号码、密码,我们将通过发送短信验证码的方式验证您的身份是否有效。若仅需使用浏览、搜索等基本服务,您不需要注册成为我们的用户及提供上述信息。</view>
+					<view class="section-text">您的登录名包括但不仅限于您的手机号、邮箱账号、用户名,您可以完善昵称、密码、头像、联系地址、出生日期等相关信息,补充这些"账户信息"将有助于我们为您提供更具个性化的服务。</view>
+					<view class="section-text">您需要向我们提供真实姓名和有效身份证件(包括但不限于身份证、医保卡、护照)的号码和复印件、生物识别特征(静态或动态的面部特征)、银行卡号及预留手机号,以便于我们进行实名(实人)认证。如果您不提供这些信息,可能会影响您对文依学苑部分核心业务功能的正常使用,如预约挂号、慢病复诊、购药等,但不会影响您进行基本的浏览、搜索。</view>
+					<view class="section-text">在您主动注销账号时,我们将根据相关法律法规的要求尽快使其匿名或删除您的个人信息。</view>
+					<view class="section-text">授权登录:您注册我们的账户后,我们可能经您同意后向我们的关联公司共享您的账户信息(头像、昵称及其他页面提示的信息),您可通过同一账号在我们提供的链接入口使用我们关联公司提供的服务或产品。此外,我们可能从第三方获取您授权共享的第三方账户信息(如头像、昵称、联系方式等),并将您的第三方账户与您的文依学苑账户绑定,使您可以通过第三方账户直接登录并使用文依学苑的服务或产品。我们将依据与第三方的约定、对个人信息来源的合法性进行确认后,在符合相关法律和法规规定的前提下,使用您的这些个人信息。</view>
+					<view class="section-text">3.2 为您展示和推送医疗相关信息和服务</view>
+					<view class="section-text">为向您提供更契合您需求的页面展示和搜索结果、了解产品适配性,我们会收集关于您使用的服务以及使用方式的信息并将这些信息进行关联,这些信息包括:</view>
+					<view class="section-text">设备信息:我们会根据您在软件安装及使用中授予的具体权限,接收并记录您所使用的设备相关信息(包括设备型号、操作系统版本、设备设置、Android id、MAC地址、IMEI、IMSI、唯一设备标识符、浏览器等软硬件特征信息)、设备所在位置相关信息(包括IP 地址、GPS位置以及能够提供相关信息的Wi-Fi 接入点、蓝牙和基站这类传感器信息)。</view>
+					<view class="section-text">日志信息:当您使用我们的网站或客户端等提供的服务或产品时,我们会自动收集您对服务的详细使用情况,作为有关网络日志保存,包括您的搜索查询内容、IP地址、浏览器的类型、电信运营商、使用的语言、访问日期和时间及您访问的网页记录。除此之外,我们还会收集您的浏览记录,浏览记录包括您浏览的医院信息、科室信息、医生信息、药品信息、问答、评论、文章。</view>
+					<view class="section-text">请注意,单独的设备信息、日志信息是无法识别特定自然人身份的信息。如果我们将这类非个人信息与其他信息结合用于识别特定自然人身份,或者将其与个人信息结合使用,则在结合使用期间,这类非个人信息将被视为个人信息,除取得您授权或法律法规另有规定外,我们会将该类个人信息做匿名化、去标识化处理。</view>
+					<view class="section-text">为改善我们的产品或服务、向您提供更符合您个性化需求的信息展示、搜索及推送服务,我们会根据您的浏览及搜索记录、设备信息、位置信息、历史问诊、个人生理健康信息、关注医生、加入的圈子等,提取您的浏览、搜索偏好、行为习惯、位置信息等特征,基于特征标签进行间接人群画像并展示、推送信息。</view>
+					<view class="section-text">同时,我们通过以下措施努力保障您的隐私体验:</view>
+					<view class="section-text">1、如果您要删除您的浏览和搜索记录,您可以在"搜索框"中点击清除图标、或"清空历史";</view>
+					<view class="section-text">2、如您不想接受我们给您发送的商业广告,您可通过联系客服退订或我们提供的其他方式进行退订或关闭;</view>
+					<view class="section-text">3、如您想管理我们给您发送的定向推送和个性化广告功能,您可以在"设置-隐私设置"中进行调整。需注意的是,您可设置我们不适用某些类别信息向您展示相关定性推送和广告,但是您仍然会看到推送信息和广告,您看到的推送信息和广告数量不会变化,只不过推送信息和广告的相关性会下降。</view>
+					<view class="section-text">3.3 向您提供互联网电子服务或商品</view>
+					<view class="section-text">3.3.1 您向我们提供的信息</view>
+					<view class="section-text">为便于您使用互联网电子服务或商品,您需提供真实姓名、手机号、社保卡、就诊卡等信息。您可以为其他人进行预约或咨询等服务,您需要提供该实际用户的前述个人信息。在提供该实际用户的前述个人信息之前,您需确保您已经取得其授权同意,其中涉及儿童个人信息的,您需在提供前征得该儿童监护人的同意。</view>
+					<view class="section-text">当您在产品及/或服务中订购相应的医疗服务和商品时,我们可能会收集您的交易信息、记录,包括您所购买的商品及/或服务信息、具体订单号、订单创建时间、您应支付的金额,我们收集这些信息是为了帮助您顺利完成交易、保障您的交易安全、查询订单信息。其中,如您购买商品的,在下单过程中,您需至少提供您的收货人姓名、收货地址、收货人联系电话;您可以为其他人订购商品及/或服务,但需提供该实际收货人的前述个人信息,且需确保您已经取得其授权同意。您知晓并同意第三方物流配送主体不可避免地获知及使用您的上述信息,用于完成交付目的。为使我们及时获悉并确认交付进度及状态,向您提供售后与争议解决服务,您同意我们可自物流相关服务主体处收集与交付进度相关的信息。如果您拒绝提供此类信息,您理解并同意我们将无法完成相关交付及售后服务。</view>
+					<view class="section-text">当您使用本产品或服务提供的问诊功能,在问诊过程中,我们可能会申请开启您的位置信息(地理位置)、相机/摄像头、麦克风(语音)以及存储的相关权限,您可随时通过您设备的相关功能设置开启/取消上述权限;同时可能要求您提供患者姓名、性别、身份证号码、手机号码、出生日期、所在城市、与患者的关系、病情病症、住院志、医嘱单、问诊记录、检验报告、手术及麻醉记录、护理记录、用药记录、药物食物过敏信息、生育信息、以往病史、诊治情况、家族病史、现病史、传染病史等,以及与个人身体健康状况产生的相关信息,及体重、身高、肺活量等。如您不提供上述信息,将会影响您使用部分互联网电子服务或商品,但不影响您使用文依学苑产品或服务的基本浏览、搜索功能。另外,我们可能会收集您在使用服务或产品过程中产生的健康咨询详情(如图片、文字、视频、语音)、预约挂号记录、检查检验、用药处方、医生诊断结果等信息,用于向您展示及便于您对信息进行管理。</view>
+					<view class="section-text">为帮助您顺利完成交易、保证您的交易安全、完成付款相应医疗服务和/或商品费用的支付,您可能需要提供银行卡号、身份证号码、银行卡的预留手机号和/或其他认证信息、创建账户与支付口令、医保卡号、医保卡绑定的手机号码以及医保支付口令,同时,为满足相关法律法规或监管机构的要求,我们可能需要将您必要的个人信息及上述支付信息提供给监管机构以及监管机构指定的第三方服务机构,以顺利完成您所订购相应医疗服务和药品费用的支付和结算。如您不提供上述信息,将无法正常使用相关的支付功能,但不会影响您使用文依学苑提供的基本浏览、搜索功能。</view>
+					<view class="section-text">当您与我们联系时,我们可能会保存您的沟通、通信/通话记录和内容或您留下的联系方式等信息,以便与您联系或帮助您解决问题,或记录相关问题的处理方案及结果。为了提供服务及改进服务质量的合理需要,我们还可能使用的您的其他信息,包括您与客服联系时您提供的相关信息,您参与问卷调查时向我们发送的问卷答复信息。如果您针对具体订单进行咨询、投诉或提供建议的,我们会使用您的账户信息和订单信息。如您拒绝提供上述信息,我们可能无法向您及时反馈投诉、申诉或咨询结果。</view>
+					<view class="section-text">您可通过我们为您提供的评价、问答、论坛等信息发布功能公开发布信息,包括作为注册用户可发表评价及问答内容、发布图文信息。请注意,您公开发布的信息中可能会涉及您或他人的个人信息甚至敏感个人信息,如您在评价时选择上传包含个人信息的图片。请您更加谨慎地考虑,是否在使用服务时共享甚至公开分享相关信息。若您公开发布的信息中涉及儿童个人信息的,您需在发布前征得对应儿童监护人的同意。</view>
+					<view class="section-text">3.3.2 我们通过间接获得方式收集到的您的个人信息</view>
+					<view class="section-text">我们可能从第三方获取您授权共享的账户信息(头像、昵称、联系方式),并在您同意本声明和协议后将您的第三方账户与您的账户绑定,使您可以通过第三方账户直接登录并使用我们的互联网电子服务或商品。我们会将依据与第三方的约定、对个人信息来源的合法性进行确认后,在符合相关法律和法规规定的前提下,使用您的这些个人信息。</view>
+					<view class="section-text">您可通过同一账号在我们提供的链接入口使用我们关联公司提供的互联网电子服务或商品,为便于我们基于关联账号共同向您提供一站式服务并便于您统一进行管理,我们在文依学苑平台集中展示您的信息或推荐您感兴趣的信息。</view>
+					<view class="section-text">当您通过我们互联网电子服务或商品使用上述服务时,您授权我们根据实际业务及合作需要从我们关联公司处接收、汇总、分析我们确认其来源合法或您授权同意其向我们提供的您的个人信息或交易信息。</view>
+					<view class="section-text">如您拒绝提供上述信息或拒绝授权,可能无法使用我们关联公司的相应互联网电子服务或商品,或者无法展示相关信息,但不影响使用文依学苑的健康咨询等核心服务。</view>
+					<view class="section-text">3.4 为您提供安全保障</view>
+					<view class="section-text">请注意,为确保账户身份真实性、向您提供更好的安全保障,您可以向我们提供身份证、社保卡等身份信息,绑定银行卡等完成实名认证。如您拒绝提供上述信息,可能无法使用特定的互联网电子服务或商品、继续可能存在风险的操作等,但不会影响您使用浏览、搜索等服务。</view>
+					<view class="section-text">为提高您使用我们及我们关联公司、合作伙伴提供服务的安全性,保护您或其他用户或公众的人身财产安全免遭侵害,更好地预防钓鱼网站、欺诈、网络漏洞、计算机病毒、网络攻击、网络侵入等安全风险,更准确地识别违反法律法规或文依学苑相关协议规则的情况,我们可能使用或整合您的账户信息、交易信息、设备信息(包括设备型号、操作系统版本、设备设置、Android id、MAC地址、IMEI、IMSI、唯一设备标识符、已安装应用软件列表、最近运行的应用这类软硬件特征信息)、设备所在位置相关信息(包括IP地址、GPS位置以及能够提供相关信息的Wi-Fi接入点、蓝牙和基站这类传感器信息)、有关网络日志以及我们关联公司、合作伙伴取得您授权或依据法律共享的信息,来综合判断您账户及交易风险、进行身份验证、检测及防范安全事件,并依法采取必要的记录、审计、分析、处置措施。</view>
+					<view class="section-text">3.5 其他用途</view>
+					<view class="section-text">我们将信息用于本声明和协议未载明的其他用途,或者将基于特定目的收集而来的信息用于其他目的时,会事先征求您的同意。若您提供的信息中含有其他用户的个人信息,在向我们提供这些个人信息之前,您需确保您已经取得合法的授权。若其中涉及儿童个人信息的,您需在发布前取得对应儿童监护人的同意,前述情形下监护人有权通过本协议规定的途径联系我们,要求更正或删除涉及儿童个人信息的内容。</view>
+					<view class="section-text">3.6 征得授权同意的例外</view>
+					<view class="section-text">根据相关法律法规规定,以下情形中收集您的个人信息无需征得您的授权同意:</view>
+					<view class="section-text">1、与国家安全、国防安全有关的;</view>
+					<view class="section-text">2、与公共安全、公共卫生、重大公共利益有关的;</view>
+					<view class="section-text">3、与犯罪侦查、起诉、审判和判决执行等有关的;</view>
+					<view class="section-text">4、出于维护个人信息主体或其他个人的生命、财产等重大合法权益但又很难得到您本人同意的;</view>
+					<view class="section-text">5、所收集的个人信息是您自行向社会公众公开的;</view>
+					<view class="section-text">6、从合法公开披露的信息中收集个人信息的,如合法的新闻报道、政府信息公开等渠道;</view>
+					<view class="section-text">7、根据您的要求签订合同所必需的;</view>
+					<view class="section-text">8、用于维护所提供的产品或服务的安全稳定运行所必需的,例如发现、处置产品或服务的故障;</view>
+					<view class="section-text">9、为合法的新闻报道所必需的;</view>
+					<view class="section-text">10、学术研究机构基于公共利益开展统计或学术研究所必要,且对外提供学术研究或描述的结果时,对结果中所包含的个人信息进行去标识化处理的;</view>
+					<view class="section-text">11、法律法规规定的其他情形。</view>
+					<view class="section-text">请知悉,根据适用的法律,若我们对个人信息采取技术措施和其他必要措施进行处理,使得数据接收方无法重新识别特定个人且不能复原,或我们可能会对收集的信息进行去标识化地研究、统计分析和预测,用于改善平台的内容和布局,为商业决策提供产品或服务支撑,以及改进产品和服务(包括使用匿名数据进行机器学习或模型算法训练),则此类处理后数据的使用无需另行向您通知并征得您的同意。</view>
+					<view class="section-text">如我们停止运营文依学苑平台,我们将及时停止继续收集您个人信息的活动,将停止运营的通知以逐一送达或公告的形式通知您,对所持有的个人信息进行删除或匿名化处理。</view>
+					<view class="section-text">3.7 设备权限调用</view>
+					<view class="section-text">为向您提供便捷、优质的服务,我们可能会调用您设备的一些权限,以下是我们可能调用的设备权限列表及对应的使用目的说明,您有权随时选择关闭下列权限的授权,但可能会影响您正常使用我们互联网电子服务或商品的部分或全部功能。</view>
+					<view class="section-text">点击图片可查看完整电子表格</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">四、信息存储</view>
+					<view class="section-text">4.1 存储地点</view>
+					<view class="section-text">您知晓并同意,您在使用文依学苑产品、服务期间所产生的有关您的信息存储在中国境内安全可信的服务器上。</view>
+					<view class="section-text">4.2 存储期限</view>
+					<view class="section-text">我们仅在实现本协议所述目的所必需的时间内保留您的个人信息。在您与我们之间的合同关系(客户关系)存续期间,我们会处理并保存您的数据。当您注销文依学苑账户后,我们将对您的帐号信息进行删除或匿名化处理,但法律法规另有规定(例如《中华人民共和国电子商务法》要求商品和服务信息、交易信息保存时间自交易完成之日起不少于三年,《处方管理办法》要求普通处方保存期限为一年,《医疗机构管理条例实施细则》要求医疗机构门诊病历的保存期不得少于十五年等)或者您另行授权同意的除外。</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">五、我们如何委托处理、共享、转让、公开披露您的个人信息</view>
+					<view class="section-text">5.1 委托处理</view>
+					<view class="section-text">涉及具体的模块或功能由外部供应商提供的,对我们委托处理个人信息的该等外部供应商,我们会与其签署严格的保密协定,要求他们按照我们的要求、本协议以及其他任何相关的保密和安全措施来处理个人信息。</view>
+					<view class="section-text">5.2 共享</view>
+					<view class="section-text">我们不会与文依学苑服务提供者以外的任何公司、组织和个人分享您的个人信息,但以下情况除外:</view>
+					<view class="section-text">1、在获取您的明确授权或同意的情况下共享:获得您的明确授权或同意后,我们会与其他方共享您的个人信息。</view>
+					<view class="section-text">2、在法定情形下的共享:我们可能会根据法律法规规定,或按政府主管部门的强制性要求,对外共享您的个人信息。</view>
+					<view class="section-text">3、与关联公司间共享:为便于我们基于关联账号共同向您提供服务,推荐您可能感兴趣的信息或保护文依学苑关联公司或其他用户或公众的人身财产安全免遭侵害,您的个人信息可能会与我们的关联公司共享。我们只会共享必要的个人信息(如为便于您通过同一账号使用我们关联公司产品或服务,我们会向关联公司共享您必要的账户信息),且这种共享受本协议所声明目的的约束。如果我们共享您的敏感个人信息或关联公司改变个人信息的使用及处理目的,将再次征求您的授权同意。</view>
+					<view class="section-text">4、与授权合作伙伴共享:仅为实现本声明和协议中声明的目的,我们的某些服务将由授权合作伙伴提供。我们可能会与合作伙伴共享您的某些个人信息,以提供更好的客户服务和用户体验。例如,在您订购我们的商品时,我们必须与配送服务提供商共享您的订单信息才能安排送货;或者我们需要将您的订单号和订单金额与金融机构共享以实现其确认您的支付指令并完成支付等。我们仅会出于合法、正当、必要、特定、明确的目的共享您的个人信息,并且只会共享提供服务所必要的个人信息。同时,我们会与合作伙伴签署严格的保密协定,要求他们按照我们的说明、本协议以及其他任何相关的保密和安全措施来处理您的个人信息。我们的合作伙伴无权将共享的个人信息用于任何其他用途。如果您拒绝我们的合作伙伴在提供服务时收集为提供服务所必须的个人信息, 将可能导致您无法使用该第三方服务。</view>
+					<view class="section-text">鉴于医疗的特殊性,出于患教以及帮助其他患者的目的,您与医生的交流信息将在匿名化和/或去标识化处理后,默认展示给第三方阅读。通过由我们或第三方提供的功能,您可以主动公开分享、共享信息(如向其他互联网平台转发内容),在这种情况下共享信息将被广泛并即时传送。但只要您不删除被共享的信息,该信息会一直留存在公众领域;在一些情况下,即使您删除共享信息,该等信息仍可由其他用户或与我们没有关联及不受我们控制的第三方独立地缓存、复制或储存,或通过其他用户或该等第三方在公众领域保存。例如,当您将您本平台提出的问题转发到其他互联网平台,该平台将可能独立的展示、缓存或保存您转发的内容,其他互联网用户也可能转发、保存您的回答,而相应的页面将不受我们的控制。</view>
+					<view class="section-text">5.3 转让</view>
+					<view class="section-text">我们不会将您的个人信息转让给任何公司、组织和个人,但以下情况除外:</view>
+					<view class="section-text">1、在获取您的明确授权或同意的情况下转让:获得您的明确授权或同意后,我们会向其他方转让您的个人信息;</view>
+					<view class="section-text">2、在文依学苑服务提供者发生合并、收购或破产清算情形,或其他涉及合并、收购或破产清算情形时,如涉及到个人信息转让,我们会在要求新的持有您个人信息的公司、组织继续受声明和协议的约束,否则我们将要求该公司、组织重新向您征求授权同意。</view>
+					<view class="section-text">5.4 公开披露</view>
+					<view class="section-text">我们仅会在以下情况下,公开披露您的个人信息:</view>
+					<view class="section-text">1、获得您明确同意或基于您的主动选择,我们可能会公开披露您的个人信息;</view>
+					<view class="section-text">2、基于法律、法律程序、诉讼或政府主管部门强制性要求的情况下,我们可能会向有权机关披露您的个人信息。 但我们保证,在上述情况发生时,我们会要求披露请求方必须出具与之相应的有效法律文件,并对被披露的信息采取符合法律和业界标准的安全防护措施。</view>
+					<view class="section-text">3、如果我们确定您出现违反法律法规或严重违反文依学苑相关协议规则的情况,或为保护文依学苑及其关联公司用户或公众的人身财产安全免遭侵害,我们可能依据法律法规或文依学苑相关协议规则征得您同意的情况下披露关于您的个人信息,包括相关违规行为以及文依学苑已对您采取的措施。例如,若您囤积号源、虚假预约而严重违反用户协议,我们可能会公开披露或与合作方共享您的身份信息、联系方式与处罚情况。</view>
+					<view class="section-text">5.5 共享、转让、公开披露个人信息时事先征得授权同意的例外</view>
+					<view class="section-text">以下情形中,共享、转让、公开披露您的个人信息无需事先征得您的授权同意:</view>
+					<view class="section-text">1、与个人信息控制者履行法律法规规定的义务相关的;</view>
+					<view class="section-text">2、与国家安全、国防安全有关的;</view>
+					<view class="section-text">3、与公共安全、公共卫生、重大公共利益有关的;</view>
+					<view class="section-text">4、与犯罪侦查、起诉、审判和判决执行等有关的;</view>
+					<view class="section-text">5、出于维护您或其他个人的生命、财产等重大合法权益但又很难得到本人同意的;</view>
+					<view class="section-text">6、您自行向社会公众公开的个人信息;</view>
+					<view class="section-text">7、从合法公开披露的信息中收集个人信息的,如合法的新闻报道、政府信息公开等渠道;</view>
+					<view class="section-text">8、法律法规规定的其他情形。</view>
+					<view class="section-text">根据法律规定,共享、转让经去标识化处理的个人信息,且确保数据接收方无法复原并重新识别个人信息主体的,不属于个人信息的对外共享、转让及公开披露行为,对此类数据的保存及处理将无需另行向您通知并征得您的同意。</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">六、用户业务数据和公开信息</view>
+					<view class="section-text">不同于您的个人信息,对于用户业务数据和公开信息,文依学苑将按如下方式处理:</view>
+					<view class="section-text">6.1 用户业务数据</view>
+					<view class="section-text">1、您通过文依学苑平台提供的互联网电子服务或商品,加工、存储、上传、下载、分发以及通过其他方式处理的数据,均为您的用户业务数据,您完全拥有您的用户业务数据。文依学苑作为服务提供商,我们只会严格执行您的指示处理您的业务数据,除按与您协商一致或执行明确的法律法规要求外,不对您的业务数据进行任何非授权的使用或披露。</view>
+					<view class="section-text">2、您应对您的用户业务数据来源及内容负责,文依学苑提示您谨慎判断数据来源及内容的合法性。因您的用户业务数据内容违反法律法规、部门规章或国家协议而造成的全部结果及责任均由您自行承担。</view>
+					<view class="section-text">3、根据您与文依学苑协商一致,文依学苑在您选定的数据中心存储用户业务数据。文依学苑恪守对用户的安全承诺,根据适用的法律保护用户存储在文依学苑数据中心的数据。</view>
+					<view class="section-text">6.2 公开信息</view>
+					<view class="section-text">1、公开信息是指您公开分享的任何信息,任何人都可以在使用和未使用文依学苑互联网电子服务或商品期间查看或访问这些信息。例如您在社区、论坛发布的信息。</view>
+					<view class="section-text">2、为使用文依学苑的互联网电子服务或商品,可能存在您必须公开分享的信息。</view>
+					<view class="section-text">3、在使用文依学苑平台进行交易时,您不可避免的要向交易对方或潜在的交易对方披露自己的个人信息,如联络方式或者邮政地址等。请您妥善保护自己的个人信息,仅在必要的情形下向他人提供。您也可以通过我们的服务建立联系和相互分享。当您通过我们的服务创建交流、交易或分享时,您可以自主选择沟通、交易或分享的对象,作为能够看到您的联络方式、交流信息或分享内容等相关信息的第三方,如您发现自己的个人信息泄漏,尤其是您的账户或密码发生泄露,请您立即联络客服,以便文依学苑采取相应措施。</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">七、我们如何保护您的个人信息</view>
+					<view class="section-text">7.1 我们已采取符合业界标准、合理可行的安全防护措施保护您提供的个人信息安全,防止个人信息遭到未经授权访问、公开披露、使用、修改、损坏或丢失。例如,在您的浏览器与服务器之间交换数据(如信用卡信息)时受 SSL(Secure Socket Layer)协议加密保护;我们同时对文依学苑平台提供HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)协议安全浏览方式;我们会使用加密技术提高个人信息的安全性;我们会使用受信赖的保护机制防止个人信息遭到恶意攻击;我们会部署访问控制机制,尽力确保只有授权人员才可访问个人信息;以及我们会举办安全和隐私保护培训课程,加强员工对于保护个人信息重要性的认识。我们努力采取各种符合业界标准的物理、电子和管理方面的安全措施来保护您的个人信息安全。我们积极建立数据分类分级制度、数据安全管理规范、数据安全开发规范来管理规范个人信息的存储和使用,努力确保未收集与我们提供的服务无关的个人信息。此外,我们通过与信息接触者签署保密协议、监控和审计机制来对数据进行全面安全控制。防止您的个人信息遭到未经授权的访问、公开披露、使用、修改、损坏或丢失。</view>
+					<view class="section-text">但请您理解,由于技术的限制以及可能存在的各种恶意手段,在互联网行业,即便竭尽所能加强安全措施,也不可能始终保证信息百分之百的安全。您需要了解,您接入我们的服务所用的系统和通讯网络,有可能因我们可控范围外的因素而出现问题。</view>
+					<view class="section-text">7.2 我们有行业先进的以数据为核心,围绕数据生命周期进行的数据安全管理体系,从组织建设、制度设计、人员管理、产品技术等方面多维度提升整个系统的安全性。</view>
+					<view class="section-text">7.3 我们会采取合理可行的措施,尽力避免收集无关的个人信息。我们只会在达成本声明和协议所述目的所需的期限内保留您的个人信息,除非需要延长保留期或受到法律的允许。</view>
+					<view class="section-text">7.4 互联网并非绝对安全的环境,我们强烈建议您不要使用非文依学苑推荐的通信方式发送个人信息。您可以通过我们的服务建立联系和相互分享。当您通过我们的服务创建交流、交易或分享时,您可以自主选择沟通、交易或分享的对象,作为能够看到您的交易内容、联络方式、交流信息或分享内容等相关信息的第三方。</view>
+					<view class="section-text">在使用文依学苑平台进行网上健康咨询时,您不可避免地要向医务人员或客服披露自己的个人信息,如联系方式或身份信息。请您妥善保护自己的个人信息,仅在必要的情形下向他人提供。如您发现自己的个人信息尤其是您的账户或密码发生泄露,请您立即联络客服,以便我们根据您的申请采取相应措施。</view>
+					<view class="section-text">请注意,您在使用我们服务时自愿共享甚至公开分享的信息,可能会涉及您或他人的个人信息甚至敏感个人信息,如您在发帖、评论时选择上传包含个人信息的图片。请您更加谨慎地考虑,是否在使用我们的服务时共享甚至公开分享相关信息。</view>
+					<view class="section-text">请使用复杂密码,协助我们保证您的账号安全。我们将尽力保障您发送给我们的任何信息的安全性。如果我们的物理、技术或管理防护设施遭到破坏,导致信息被非授权访问、公开披露、篡改或毁坏,导致您的合法权益受损,我们将承担相应的法律责任。</view>
+					<view class="section-text">7.5 我们将不定期更新并公开安全风险、个人信息安全影响评估报告等有关内容,您可通过文依学苑平台公告方式获得。</view>
+					<view class="section-text">7.6 在不幸发生个人信息安全事件后,我们将按照法律法规的要求向您告知:安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施等。事件相关情况我们将以邮件、信函、电话、推送通知等方式告知您,难以逐一告知个人信息主体时,我们会采取合理、有效的方式发布公告。在不幸发生儿童信息安全事件后,我们将按照法律法规的要求,及时向儿童及其监护人告知:安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、儿童及其监护人可自主防范和降低风险的建议、对儿童及其监护人的补救措施等。我们将及时将事件相关情况以电话、推送、发送邮件/短消息等方式告知儿童及其监护人。难以逐一告知时,我们会采取合理、有效的方式发布相关警示信息。</view>
+					<view class="section-text">7.7 我们还将按照监管部门要求,上报个人信息安全事件的处置情况。</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">八、您如何管理您的个人信息</view>
+					<view class="section-text">我们非常重视您对个人信息的关注,并尽最大努力保护您对于自己个人信息访问、更正、删除以及撤回同意的各项权利, 以使您拥有充分的能力保障您的隐私和安全。您可以通过以下方式访问及管理您的个人信息:</view>
+					<view class="section-text">8.1 访问您的个人信息</view>
+					<view class="section-text">您有权随时访问您的个人信息,法律法规规定的例外情况除外。您可以通过以下方式自行访问您的个人信息:</view>
+					<view class="section-text">a.账户信息——如果您希望访问或编辑您的账户中的个人基本资料信息和实名认证信息、更改您的密码或添加绑定邮箱等,您可以登录账号通过"我的-设置中心"执行此类操作。</view>
+					<view class="section-text">b.银行卡管理:您可以登陆账号,通过"我的-银行卡"进行银行卡的绑定、更换。</view>
+					<view class="section-text">c.预约、问诊记录等:您可以登陆账号通过"我的-全部订单"查看了解历史记录。</view>
+					<view class="section-text">如果您无法通过上述路径访问您的个人信息,您可以随时通过客服与我们取得联系。我们将在30个工作日内回复您的访问请求。</view>
+					<view class="section-text">对于您在使用我们的互联网电子服务或商品过程中产生的其他个人信息,我们将根据本条"8.7 响应您的上述请求"中的相关安排向您提供。</view>
+					<view class="section-text">8.2 更正或补充您的个人信息</view>
+					<view class="section-text">当您发现我们处理的关于您的个人信息有错误时,您有权要求我们做出更正或补充。您可以通过"8.1访问您的个人信息"中列明的方式提出更正或补充申请。</view>
+					<view class="section-text">8.3 删除您的个人信息</view>
+					<view class="section-text">您可以通过"8.1访问您的个人信息"中列明的方式删除您的部分个人信息。同时,您也可以通过在线客服联系我们,帮助您删除您在平台上的部分相关信息。在以下情形中,您可以向我们提出删除个人信息的请求:</view>
+					<view class="section-text">1、如果我们处理个人信息的行为违反法律法规;</view>
+					<view class="section-text">2、如果我们收集、使用您的个人信息,却未征得您的明确同意;</view>
+					<view class="section-text">3、如果我们处理个人信息的行为严重违反了与您的约定;</view>
+					<view class="section-text">4、如果您不再使用我们的产品或服务,或您主动注销了账号;</view>
+					<view class="section-text">5、如果我们永久不再为您提供产品或服务。</view>
+					<view class="section-text">若我们决定响应您的删除请求,我们还将同时尽可能通知从我们处获得您的个人信息的主体,要求其及时删除,除非法律法规另有规定,或这些主体获得您的独立授权。</view>
+					<view class="section-text">当您从我们的服务中删除信息后,我们可能不会立即从备份系统中删除相应的信息,但会在备份更新时删除这些信息。</view>
+					<view class="section-text">8.4 改变您授权同意的范围</view>
+					<view class="section-text">您可以通过删除信息、关闭设备功能、在文依学苑平台中进行隐私设置等方式改变您授权我们继续收集个人信息的范围或撤回您的授权。</view>
+					<view class="section-text">请您理解,每个业务功能需要一些基本的个人信息才能得以完成(见本隐私保护协议"我们如何收集和使用您的信息")。当您收回同意后,我们将不再处理相应的个人信息。但您收回同意的决定,不会影响此前基于您的授权而开展的个人信息处理。</view>
+					<view class="section-text">8.5 个人信息主体注销账户</view>
+					<view class="section-text">您可通过"我的-联系客服"功能联系客服完成账户的注销。请您谨慎操作,否则,因账户注销产生的数据丢失问题均由您自行承担。</view>
+					<view class="section-text">在符合文依学苑单项服务的服务协议约定条件及国家相关法律法规规定的情况下,您的该项文依学苑服务帐号可能被注销或删除。当帐号注销或被删除后,与该帐号相关的、该单项服务项下的全部服务资料和数据将依照单项服务的服务协议约定删除或匿名化处理。但法律法规另有规定的除外。</view>
+					<view class="section-text">在注销账户之后,我们将停止为您提供产品或服务,并依据您的要求,删除您的个人信息,但法律法规另有规定的除外。</view>
+					<view class="section-text">8.6 约束信息系统自动决策</view>
+					<view class="section-text">在某些互联网电子服务或商品中,我们可能仅依据信息系统、算法等在内的非人工自动决策机制做出决定。例如向您推荐您可能希望了解的医生或疾病知识,也可能根据您的位置信息或用户画像向您推送更精准的医生信息。如果这些决定显著影响您的合法权益,您有权要求我们做出解释,我们也将在不侵害文依学苑商业秘密或用户权益、社会公共利益的前提下提供申诉方法。</view>
+					<view class="section-text">8.7 响应您的上述请求</view>
+					<view class="section-text">为保障安全,您可能需要提供书面请求,或以其他方式证明您的身份。我们可能会先要求您验证自己的身份,然后再处理您的请求。</view>
+					<view class="section-text">我们将在30个工作日内做出答复。如您不满意,还可以通过客服发起投诉。</view>
+					<view class="section-text">对于您合理的请求,我们原则上不收取费用,但对多次重复、超出合理限度的请求,我们将视情况收取一定成本费用。对于那些无端重复、需要过多技术手段(例如,需要开发新系统或从根本上改变现行惯例)、给他人合法权益带来风险或者非常不切实际的请求,我们可能会予以拒绝。</view>
+					<view class="section-text">在以下情形中,按照法律法规要求,我们将无法响应您的请求:</view>
+					<view class="section-text">1、与个人信息控制者履行法律法规规定的义务相关的;</view>
+					<view class="section-text">2、与国家安全、国防安全有关的;</view>
+				</view>
+
+				<view class="footer">感谢您对文依学苑平台的信任与支持。</view>
+			</view>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {}
+	},
+	onLoad() {}
+}
+</script>
+
+<style lang="scss" scoped>
+.container {
+	min-height: 100vh;
+	background: #fff;
+	display: flex;
+	flex-direction: column;
+}
+
+.content {
+	flex: 1;
+	height: 100vh;
+}
+
+.agreement-body {
+	padding: 32rpx 24rpx 48rpx;
+}
+
+.title {
+	font-size: 40rpx;
+	font-weight: bold;
+	color: #333;
+	text-align: center;
+	margin-bottom: 16rpx;
+}
+
+.update-time {
+	font-size: 24rpx;
+	color: #999;
+	text-align: center;
+	margin-bottom: 40rpx;
+}
+
+.section {
+	margin-bottom: 36rpx;
+
+	.section-title {
+		font-size: 30rpx;
+		font-weight: bold;
+		color: #333;
+		margin-bottom: 16rpx;
+		line-height: 1.5;
+	}
+
+	.section-text {
+		font-size: 28rpx;
+		color: #666;
+		line-height: 1.75;
+		margin-bottom: 12rpx;
+		text-align: justify;
+
+		&:last-child {
+			margin-bottom: 0;
+		}
+	}
+}
+
+.footer {
+	font-size: 26rpx;
+	color: #999;
+	text-align: center;
+	margin-top: 32rpx;
+	padding-top: 24rpx;
+}
+</style>

+ 283 - 0
pages_user/userAgreement.vue

@@ -0,0 +1,283 @@
+<template>
+	<view class="container">
+		<scroll-view class="content" scroll-y>
+			<view class="agreement-body">
+				<view class="title">【文依学苑】医生注册协议</view>
+				<view class="update-time">更新日期:2026年2月26日</view>
+
+				<view class="intro">
+					您在开始使用文依学苑服务前,请您务必仔细阅读并充分理解本《文依学苑用户使用协议》。同时,您还应仔细阅读并充分理解文依学苑的隐私政策、知识产权申请等系列政策和声明。在本服务条款中,请您务必特别注意及重点阅读与您的权利及义务密切相关的条款,此类条款可能以粗体加黑的方式标记,包括但不限于免责条款等。
+				</view>
+
+				<view class="section">
+					<view class="section-title">一、使用协议的接受</view>
+					<view class="section-text">1. 为使您更好的使用文依学苑的相关服务,请您仔细阅读以下条款,如果您对本协议的任何条款表示异议,您可以选择不进入文依学苑或向文依学苑客服咨询。当您注册成功,无论是进入文依学苑,还是在文依学苑上发布任何内容(即「内容」)及其他任何直接、间接使用本服务平台的部分或全部功能的行为,均意味着您(即「用户」)已阅读并完全接受本协议项下的全部条款,包括接受更新后的本协议条款,均愿意无条件、无保留地接受并承担相应法律责任。如果您不同意本协议或其中任何条款约定,您应立即停止注册及使用程序。</view>
+					<view class="section-text">2. 如您未满14周岁,请在法定监护人的陪同下阅读本用户使用协议,并特别注意未成年人使用的相关条款。</view>
+					<view class="section-text">3. "用户"指所有直接或间接获取和使用文依学苑及相关服务的使用者,包括自然人、法人和其他组织等。在本协议中称为"用户"或称"您"。</view>
+					<view class="section-text">4. 本协议是您与成都文依合创科技有限公司(以下简称"公司"或"我们")之间就您下载、安装、注册、登录、使用"文依学苑"小程序及网页,并获得文依学苑提供的相关服务所订立的协议。公司有权依文依学苑及相关服务或运营的需要单方决定,安排或指定其关联公司、控制公司、继承公司或公司认可的第三方公司继续运营文依学苑平台。并且,就本协议项下涉及的某些服务,可能会由公司的关联公司、控制公司、继承公司或公司认可的第三方公司向您提供。您知晓并同意接受相关服务内容,即视为接受相关权利义务关系亦受本协议约束。</view>
+					<view class="section-text">5. 文依学苑所有服务的所有权、运作权和解释权均归公司所有。您同意本用户使用协议内容并完成注册程序,即成为文依学苑的正式用户,即被视为用户确认自己具有独立的行为能力,明确自己所享有的相应权利,能够独立承担法律责任。</view>
+					<view class="section-text">6. 文依学苑可根据情况制订、修改本协议及条款,您以明示同意或默示同意等任何方式同意接受修改后的协议或条款,变更后的协议和条款即自动对您产生法律效力。</view>
+					<view class="section-text">7. 用户确认:本协议是处理双方权利义务的契约,始终有效,法律另有强制性规定或双方另有特别约定的,依其规定。</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">二、文依学苑提供的服务</view>
+					<view class="section-text">1. 文依学苑不断创新以向其用户提供最优体验。您认知并同意文依学苑提供的服务的形式和本质可不经事先通知您而不时变换。本软件及相关服务更新或部分服务内容更新后,在可能的情况下,公司将以包括但不限于系统提示、公告、站内信等方式提示用户,用户有权选择接受更新版本或服务,如用户不接受,部分功能将受到限制或不能继续使用。</view>
+					<view class="section-text">2. 文依学苑及相关服务中包含公司以各种合法方式获取的信息或信息内容链接,同时也包括公司及其关联公司合法运营的其他单项服务。这些服务在文依学苑平台可能以单独板块形式存在。公司有权不时地增加、减少或改动这些特别板块的设置及服务。</view>
+					<view class="section-text">3. 作为这种持续创新的一部分,您认知并同意文依学苑可自行决定,无须事先通知您,即停止(永久或暂时)向您或全体用户提供服务。您可在任何时候停止使用服务。您停止使用服务时无需特别通知文依学苑。</view>
+					<view class="section-text">4. 您认知并同意,如果文依学苑禁用对您的帐户的访问权,则您可能被阻止获得服务、您的帐户资料或包含在您帐户中的任何文件或其他内容。</view>
+					<view class="section-text">5. 为保证文依学苑软件及相关服务安全、提升用户服务,您使用文依学苑及相关服务需自行准备与软件及相关服务有关的终端设备(如电脑、手机等装置),一旦您在其终端设备中打开文依学苑平台,即视为您使用文依学苑软件及相关服务。为充分实现文依学苑平台的全部功能,您可能需要将其终端设备联网,您理解由您承担所需要的费用(如流量费、上网费等)。</view>
+					<view class="section-text">6. 您理解并同意部分服务由广告收入支持,可展示广告和推销。这些广告可能是针对存储于服务中的信息、通过服务提出的询问或其他信息的内容提供的。文依学苑在服务上的广告的方式、模式和范围可不经向您特别通知而变更。作为文依学苑授予您访问和使用服务的权利的对价,您同意文依学苑可以在服务上加载该等广告。当然您有权根据《文依学苑隐私政策》条款的指引进行相应的推送关闭。</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">三、平台使用规则</view>
+					<view class="section-text">1. 使用平台时可能产生的用户信息:</view>
+					<view class="section-text">用户个人信息。用户个人信息包括但不限于下列信息:用户真实姓名、头像、身份证号、职业、职务、手机电话、银行账号、第三方支付账号、电子邮件、教育经历、从业经历等。</view>
+					<view class="section-text">非用户个人信息。用户在文依学苑上,包括提问、发布、回答、浏览、操作状态、使用记录、使用习惯等在内的全部记录信息。除 1 款所列用户个人信息范围外的其他所有信息,均视为非用户个人信息。</view>
+					<view class="section-text">第三方平台记录信息。使用第三方账号注册、登录、使用文依学苑服务的,将被视为用户完全理解、同意并接受文依学苑包括但不限于收集、统计、分析等方式使用其在第三方平台填写、登记、公布、记录的全部信息。用户一旦使用第三方平台账号注册、登陆、使用文依学苑服务,文依学苑对该第三方记录信息的任何使用,均被视为已经获得了用户本人的完全同意并接受。</view>
+					<view class="section-text">2. 用户使用文依学苑前,需要拥有一个成功注册的账户,用户可以使用真实有效的个人手机号码或邮箱地址作为用户名进行账户注册,亦可授权第三方账号(如一咻医生、一咻健康、微信、支付宝等)快捷登录,且在第三方账户快捷登录中可能涉及用户绑定已有账户或注册新账户的操作。用户注册成功后,文依学苑将给予每个用户一个用户帐号及相应的密码,账户名称和密码将作为文依学苑识别用户身份的唯一有效标识,只要使用了正确的帐号和密码无论是谁登录均视为您本人登录或已得到您本人的授权,用户应当对以其用户帐号进行的所有活动和事件负法律责任,请用户务必妥善保管该用户帐号和密码。用户不得将账号转借、租让、售卖给他人使用,否则应承担由此可能产生的全部责任,并与实际使用人承担连带责任。文依学苑无法对非法或未经您授权使用您的账号及密码的行为做出甄别,因此文依学苑不承担任何责任。当密码或者账号遭到未获授权使用,或者发生任何安全问题时,用户有责任及时有效地通知文依学苑并向当地公安机关报案。</view>
+					<view class="section-text">3. 用户应本着诚实守信的原则,自行向文依学苑提供所需信息。信息发布者可提供个人信息、行医资格(如需)、就医经历(如需)、教育经历(如需)、工作经历(如需)以及相关的其他信息;用户需保证所提供的信息必须在合法基础上保证真实、准确、完整,并保证及时更新以上信息。如因用户自行提供的信息存在非法、抄袭、错误、侵犯他人隐私等问题,用户需承担因此引发的相应的法律责任及后果,且文依学苑保留暂停、清除各类不符合法律政策或不真实的信息内容而无须通知您的权利及终止用户使用文依学苑各项服务的权利,且文依学苑可以保留向被侵权的第三方披露此类用户的个人信息之相关权利。若您未遵守国家法律法规及本协议规定,文依学苑有权作出独立判断并采取暂停或关闭您的帐号等措施。</view>
+					<view class="section-text">4. 用户须对在文依学苑的注册信息的真实性、合法性、有效性承担全部责任,用户不得冒充他人;不得利用他人的名义发布任何信息;不得恶意使用注册帐号导致其他用户误认;否则文依学苑有权立即停止提供服务,收回其帐号并由用户独自承担由此而产生的一切法律责任。</view>
+					<view class="section-text">5. 用户直接或通过各类方式(如 RSS 源和站外 AdivI引用等)间接使用文依学苑服务和数据的行为,都将被视作已无条件接受本协议全部内容;若用户对本协议的任何条款存在异议,请停止使用文依学苑所提供的全部服务。</view>
+					<view class="section-text">6. 文依学苑是一个医疗健康相关信息提供、分享、传播及获取的平台,用户通过文依学苑发表的信息为公开的信息,其他第三方均可以通过文依学苑获取用户发表的信息,用户对任何信息的发表即认可该信息为公开的信息,并单独对此行为承担法律责任;任何用户不愿被其他第三人获知的信息都不应该在文依学苑上进行发表。</view>
+					<view class="section-text">7. 用户承诺不得以任何方式利用文依学苑直接或间接从事违反中国法律以及社会公德的行为,文依学苑有权对违反上述承诺的内容予以删除。用户不得利用文依学苑服务制作、上载、复制、发布、传播或者转载如下内容:</view>
+					<view class="section-text list">• 反对宪法所确定的基本原则的;</view>
+					<view class="section-text list">• 危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的;</view>
+					<view class="section-text list">• 损害国家荣誉和利益的;煽动民族仇恨、民族歧视,破坏民族团结的;</view>
+					<view class="section-text list">• 侮辱、滥用英烈形象,否定英烈事迹,美化粉饰侵略战争行为的;</view>
+					<view class="section-text list">• 破坏国家宗教政策,宣扬邪教和封建迷信的;</view>
+					<view class="section-text list">• 散布谣言,扰乱社会秩序,破坏社会稳定的;</view>
+					<view class="section-text list">• 散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的;</view>
+					<view class="section-text list">• 侮辱或者诽谤他人,侵害他人合法权益的;</view>
+					<view class="section-text list">• 含有法律、行政法规禁止的其他内容的信息。</view>
+					<view class="section-text">8. 文依学苑有权对用户使用文依学苑的情况进行审查和监督,如用户在使用文依学苑时违反任何上述规定,文依学苑或其授权的人有权要求用户改正或直接采取一切必要的措施(包括但不限于更改或删除用户张贴的内容、暂停或终止用户使用文依学苑的权利)以减轻用户不当行为造成的影响。</view>
+					<view class="section-text">9. 文依学苑保留从任何服务中筛选、审阅、标明、过滤、修订、拒绝或删除任何或所有内容的权利(但无义务这样做)。就某些服务而言,文依学苑可提供滤除明确色情内容、政治相关内容的工具。此外,还有可以通过商业渠道获得的服务和软件能够限制访问令您反感的材料。</view>
+					<view class="section-text">10. 我们非常注重未成年人的保护:</view>
+					<view class="section-text">(1) 若您为未成年人,应在监护人监护、指导下仔细阅读本协议,并且使用我们的产品及/或服务已经得到监护人的同意;</view>
+					<view class="section-text">(2) 监护人应注意指导子女上网应注意的安全问题,提前做好相应的风险防范指导工作。若监护人同意未成年人使用我们的产品及/或服务,必须以监护人的名义申请消费(如涉及),并对未成年人使用我们的产品及/或服务进行正确的引导、监督。未成年人使用我们的产品及/或服务,以及行使和履行本协议项下的权利义务视为已获得了监护人的认可;</view>
+					<view class="section-text">(3) 我们提醒未成年人在使用我们产品及/或服务时,要善于网上学习,避免沉迷网络,影响日常学习生活。</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">四、账户安全</view>
+					<view class="section-text">1. 您同意并理解您有责任将您与用于获得服务的任何帐户相关的密码保密。</view>
+					<view class="section-text">2. 您同意将独自就在您帐户下的所有活动对文依学苑负责。</view>
+					<view class="section-text">3. 您对个人账户的使用、遗失等造成的任何文依学苑及第三方的损失,由您承担;如果您得知任何对您的密码或您的帐户的任何未经授权的使用或者发生存在其它安全问题,您同意立即通知文依学苑。</view>
+					<view class="section-text">4. 文依学苑将通过对用户密码进行加密等安全措施确保用户的信息不丢失,不被滥用和变造。尽管有前述安全措施,您理解在信息网络上不存在"完善的安全措施"。因黑客行为或您的保管疏忽导致账号、密码遭他人非法使用,文依学苑不承担任何责任。如您发现任何非法使用用户账户或存在安全漏洞的情况,应立即通知文依学苑。</view>
+					<view class="section-text">5. 关于文依学苑的数据保护惯例的信息,请查阅文依学苑的《文依学苑隐私政策》。该政策解释了文依学苑如何处理您的个人信息,并在您使用服务时保护您的隐私。您同意按照文依学苑的隐私政策使用您的数据。</view>
+					<view class="section-text">6. 用户理解并同意,文依学苑会尽力保障用户使用数据的存储安全,但不能就此完全保证,包括但不限于以下情形:</view>
+					<view class="section-text">6.1 文依学苑有权根据实际情况自行决定用户在文依学苑上使用数据的最长存储期限和最大存储空间等,用户可自行根据自己的需要备份您在文依学苑的使用数据。</view>
+					<view class="section-text">6.2 由于网络信号不稳定、网络带宽小等原因导致登录、注册、资料同步、内容查看不稳定、收费服务在合理时间内中断的,其风险由用户自行承担。</view>
+					<view class="section-text">6.3 如果用户删除了文依学苑账户,我们有权从服务器中永久删除用户的账户数据,且没有义务向用户返还数据。</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">五、知识产权</view>
+					<view class="section-text">1. 文依学苑是一个信息获取、分享及传播的平台,我们尊重和鼓励文依学苑用户创作发表分享的内容,文依学苑充分认知到保护知识产权对文依学苑生存与发展的重要性,承诺将保护知识产权作为文依学苑运营的基本原则之一。</view>
+					<view class="section-text">2. 用户在文依学苑上发表的全部原创内容(包括但不仅限于回答、文章和评论),著作权均归用户本人所有。除用户单独授权文依学苑平台可独占或排他使用其发表的内容外,用户可授权第三方以任何方式使用,不需要得到文依学苑的同意。</view>
+					<view class="section-text">3. 文依学苑上可由多人参与编辑的内容,包括但不限于问题及补充说明、答案总结、话题描述、话题结构,所有参与编辑者均同意,相关知识产权归文依学苑所有。</view>
+					<view class="section-text">4. 文依学苑提供的网络服务中包含的标识、版面设计、排版方式、文本、图片、图形等均受著作权、商标权及其它法律保护,未经相关权利人(含文依学苑及其他原始权利人)同意,上述内容均不得在任何平台被直接或间接发布、使用、出于发布或使用目的的改写或再发行,或被用于其他任何商业目的。</view>
+					<view class="section-text">5. 为了促进知识的分享和传播,用户将其在文依学苑上发表的全部内容,授予文依学苑免费的、不可撤销的、非独家使用(除用户对使用方式有单独授权外)和传播的许可,文依学苑有权将该内容用于文依学苑各种形态的产品和服务上,包括但不限于平台以及发表的应用或其他互联网产品。</view>
+					<view class="section-text">6. 第三方若出于非商业目的,将用户在文依学苑上发表的内容转载在文依学苑之外的地方,应当在作品的正文开头的显著位置注明原作者姓名(或原作者在文依学苑上使用的帐号名称),给出原始链接,注明「发表于文依学苑」,并不得对作品进行修改演绎。若需要对作品进行修改,或用于商业目的,第三方应当联系用户获得单独授权,按照用户规定的方式使用该内容。</view>
+					<view class="section-text">7. 文依学苑为用户提供「保留所有权利,禁止转载」的选项。除非获得原作者的单独授权,任何第三方不得转载标注了「禁止转载」的内容,否则均视为侵权。</view>
+					<view class="section-text">8. 用户了解并同意,文依学苑之服务、产品与资料仅依其当前所呈现的状况提供,而且文依学苑明确地表示拒绝对于服务、产品或资料等给予任何明示或暗示之担保或保证,包括但不限于,为商业使用、适合于特定目的或未侵害他人权利之担保或保证等。文依学苑对于因服务、产品或资料等所产生之任何直接、间接、附带的或因此而导致之衍生性损失概不负责。文依学苑对于任何用户信息或个性化设定之时效、删除、传递错误、未予储存或其它任何问题,均不承担任何责任。在文依学苑上传或发表的内容,用户应保证其为著作权人或已取得合法授权,并且该内容不会侵犯任何第三方的合法权益。如果第三方提出关于著作权的异议,文依学苑有权根据实际情况删除相关的内容,且有权追究用户的法律责任。给文依学苑或任何第三方造成损失的,用户应负责全额赔偿。</view>
+					<view class="section-text">9. 如果任何第三方侵犯了文依学苑用户相关的权利,用户同意不可撤销地授权文依学苑或其指定的代理人单独、全权代表文依学苑自身或用户对该第三方提出警告、投诉、发起行政执法、诉讼、进行上诉,或谈判和解,并且用户同意在文依学苑认为必要的情况下参与共同维权。</view>
+					<view class="section-text">10. 文依学苑有权但无义务对用户发布的内容进行审核,有权根据相关证据结合《侵权责任法》、《信息网络传播权保护条例》等法律法规及文依学苑原则对侵权信息进行处理。</view>
+					<view class="section-text">11. 您认知并同意,文依学苑(或文依学苑的许可方)对服务拥有一切法定权利、所有权和利益,包括存在于服务中的任何知识产权(无论该等权利是否已经登记,也不论该等权利在世界的何等地方存在)。您进一步认知,服务可能包括文依学苑指定为保密的信息,未经文依学苑事先书面同意,您不得披露该等信息。</view>
+					<view class="section-text">12. 除非您与文依学苑另有书面协议,否则本条款中的任何规定均未给予您使用文依学苑任何商号、商标、服务标记、标识、域名及其他显著品牌特征的权利。</view>
+					<view class="section-text">13. 如果您在与文依学苑的单独书面协议中被给予一项使用上述品牌特征的明确的权利,则您同意您在使用该等品牌特征时遵守该协议、本条款的任何适用规定以及不时更新的文依学苑品牌特征使用指南。</view>
+					<view class="section-text">14. 除第11条规定的限制许可外,文依学苑认知并同意,其不在本条款项下获得您(或您的许可方)对在服务上或通过服务提交、张贴、传输或展示的任何内容的任何权利、所有权或利益,包括该内容中存在的任何知识产权(无论该等权利是否已经登记,亦不论该等权利在世界的何等地方存在)。除非您与文依学苑另有书面协议,否则您同意您负责保护并强制执行这些权利,文依学苑没有义务代表您这样做。</view>
+					<view class="section-text">15. 您同意您不得删除、掩藏或改动服务所附的或包含的任何专有权利声明(包括著作权和商标声明)。</view>
+					<view class="section-text">16. 除非您得到文依学苑书面明确授权这样做,否则您同意在使用服务时,您将不以可能或故意导致混淆该等商标、名称或标识的所有者或授权用户的方式使用任何公司或组织的商标、服务标识、商号、标识。</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">六、侵权举报</view>
+					<view class="section-text">1. 文依学苑高度重视自由表达和个人、企业正当权利的平衡。依照法律规定删除违法信息是文依学苑社区的法定义务,文依学苑社区亦未与任何中介机构合作开展此项业务。</view>
+					<view class="section-text">2. 侵犯企业或个人合法权益的侵权举报,包括但不限于涉及个人隐私、造谣与诽谤、商业侵权。</view>
+					<view class="section-text">(1)涉及个人隐私:发布内容中直接涉及身份信息,如个人姓名、家庭住址、身份证号码、工作单位、私人电话等详细个人隐私;</view>
+					<view class="section-text">(2)造谣、诽谤:发布内容中指名道姓(包括自然人和企业)的直接谩骂、侮辱、虚构中伤、恶意诽谤等;</view>
+					<view class="section-text">(3)商业侵权:泄露企业商业机密及其他根据保密协议不能公开讨论的内容。</view>
+					<view class="section-text">用户在文依学苑发表的内容仅表明其个人的立场和观点,并不代表文依学苑的立场或观点。如果个人或企业发现文依学苑上存在侵犯自身合法权益的内容,可以先尝试与作者取得联系,通过沟通协商解决问题。如您无法联系到作者,或无法通过与作者沟通解决问题,您可通过向文依学苑指定邮箱发送侵权投诉内容至邮箱(17716144271@163.com)进行投诉。为了保证问题能够及时有效地处理,请务必提交真实有效、完整清晰的材料,否则投诉将无法受理。您需要向文依学苑提供的投诉材料包括:</view>
+					<view class="section-text">(1)权利人对涉嫌侵权内容拥有商标权、著作权和/或其他依法可以行使权利的权属证明,权属证明通常是营业执照或组织机构代码证;</view>
+					<view class="section-text">(2)举报人的身份证明,身份证明可以是身份证或护照;</view>
+					<view class="section-text">(3)如果举报人非权利人,请举报人提供代表权利人进行举报的书面授权证明。为确保投诉材料的真实性,在侵权举报中,您还需要出具以下法律声明;</view>
+					<view class="section-text">(4)我本人为所举报内容的合法权利人;</view>
+					<view class="section-text">(5)我举报的发布在文依学苑社区中的内容侵犯了本人相应的合法权益;</view>
+					<view class="section-text">(6)如果本侵权举报内容不完全属实,本人将承担由此产生的一切法律责任,并承担和赔偿文依学苑因根据投诉人的通知书对相关帐号的处理而造成的任何损失,包括但不限于文依学苑因向被投诉方赔偿而产生的损失及文依学苑名誉、商誉损害等。</view>
+					<view class="section-text">处理流程:</view>
+					<view class="section-text">(7)出于网络平台的监督属性,并非所有申请都必须受理。文依学苑自收到举报的七个工作日内处理。处理期间,不提供任何电话、邮件及其他方式的查询服务。</view>
+					<view class="section-text">(8)出现文依学苑已经删除或处理的内容,但是百度、谷歌等搜索引擎依然可以搜索到的现象,是因为百度、谷歌等搜索引擎自带缓存,此类问题文依学苑无权也无法处理,因此相关申请不予受理。您可以自行联系搜索引擎服务商进行处理。</view>
+					<view class="section-text">(9)此为文依学苑唯一的官方侵权投诉渠道,暂不提供其他方式处理此业务。</view>
+					<view class="section-text">(10)用户在文依学苑中的商业行为引发的法律纠纷,由交易双方自行处理,与文依学苑无关。</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">七、终止您与文依学苑的关系</view>
+					<view class="section-text">1. 文依学苑可能会对服务内容进行变更、也可能会中断、终止服务。鉴于网络服务的特殊性(包括但不限于服务器的稳定性问题、恶意的网络攻击等行为或文依学苑无法控制的情形),您同意文依学苑有权随时中断或终止部分或全部的服务。</view>
+					<view class="section-text">2. 您理解,文依学苑需要定期或不定期对提供服务的平台或相关设备进行维护、升级或其他目的暂停部分或全部服务,如因此类情况而造成服务在合理时间内的中断,文依学苑无需为此承担任何责任。</view>
+					<view class="section-text">3. 如果您希望终止与使用文依学苑产品及服务的,您可以通过【文依学苑隐私政策】中规定的方式注销账号及相关使用信息。</view>
+					<view class="section-text">4. 发生下列情况时文依学苑可单方终止其与您的服务关系及相关协议约定:</view>
+					<view class="section-text">(1) 您违反了本条款的任何规定(或您的行为方式明确显示您不打算或不能遵守本条款规定);或</view>
+					<view class="section-text">(2) 法律要求文依学苑这样做(例如:向您提供服务不合法或变得不合法);或</view>
+					<view class="section-text">(3) 文依学苑与之一起向您提供服务的合作伙伴已终止与文依学苑的关系或停止向您提供服务;或</view>
+					<view class="section-text">(4) 文依学苑转变为不再向您居住的或您从那里使用服务的国家内的用户提供服务;或</view>
+					<view class="section-text">(5) 文依学苑认为,文依学苑向您提供服务不再具有商业可行性。</view>
+					<view class="section-text">5. 本条款终止时,您和文依学苑已经享受或承担的(或在本条款有效期间已经产生的)或明确规定为无限期有效的所有法定权利、义务和责任不受该终止的影响。</view>
+					<view class="section-text">6. 文依学苑、其子公司和关联公司及其许可人,不就以下各项向您作出陈述或保证:</view>
+					<view class="section-text">(1) 您对服务的使用将符合您的需求;</view>
+					<view class="section-text">(2) 您对服务的使用将无中断、及时、安全或没有错误;</view>
+					<view class="section-text">(3) 由于您使用服务而获得的任何信息将是准确的或可靠的;及</view>
+					<view class="section-text">(4) 作为服务的一部分向您提供的任何软件的运行或功能中的缺陷将被纠正。</view>
+					<view class="section-text">7. 通过使用服务而下载或以其他方式获得的任何材料由您自行作出并承担风险,您将独自对由于下载任何该等材料而导致对电脑系统或其他装置的损害或数据的丢失负责。</view>
+					<view class="section-text">8. 您从文依学苑获得的或通过服务或从服务获得的任何建议或信息(无论口头还是书面的)均不创立本条款中未明确规定的任何保证。</view>
+					<view class="section-text">9. 文依学苑进一步明确否认任何种类的所有保证和条件(无论明示还是默示的),包括但不限于适销性、适合特定目的及不侵权的默示保证和条件。</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">八、责任限制</view>
+					<view class="section-text">在遵守本协议全部规定的前提下,您明示理解并同意,文依学苑、其子公司和关联公司及其许可人不就以下事项对您承担责任:</view>
+					<view class="section-text">1. 您无论由于何种原因和在任何责任理论项下发生的任何直接、间接、附带、特殊、后果性或惩罚性的损害。这应包括但不限于任何利润损失(无论是直接还是间接发生)、任何商誉或业务声誉损失、任何数据丢失、替代物品或服务的购买费用或其他无形损失;</view>
+					<view class="section-text">2. 您可能产生的任何损失或损害,包括但不限于由下列原因导致的损失或损害;</view>
+					<view class="section-text">3. 您对任何广告的完整性、准确性或其存在的信任,或作为您与其广告出现在服务中的任何广告商或赞助人之间的任何关系或交易的结果;</view>
+					<view class="section-text">4. 文依学苑对服务可能做出的变更,或永久或暂时停止提供服务(或服务中的任何功能);</view>
+					<view class="section-text">5. 对通过您使用服务而维持或传输的任何内容及其他通信数据的删除、毁坏或未能将其储存;</view>
+					<view class="section-text">6. 您未向文依学苑提供准确的帐户信息;</view>
+					<view class="section-text">7. 您未对您的密码或帐户资料保持安全及保密;</view>
+					<view class="section-text">8. 无论文依学苑是否接到通知或是否应已知晓引起任何该等损失的可能性,上文第1款中文依学苑对您的责任限制均应适用。</view>
+					<view class="section-text">9. 对关于符合适用国际知识产权法(包括中国的《著作权法》)的指称的著作权侵权通知做出回应以及终止重复侵权者帐户是文依学苑的政策,文依学苑不能对用户发表的回答或评论的正确性进行保证。</view>
+					<view class="section-text">用户在文依学苑发表的内容仅表明其个人的立场和观点,并不代表文依学苑的立场或观点。作为内容的发表者,需自行对所发表内容负责,因所发表内容引发的一切纠纷,由该内容的发表者承担全部法律及连带责任。文依学苑不承担任何法律及连带责任。</view>
+					<view class="section-text">文依学苑不保证网络服务一定能满足用户的要求,也不保证网络服务不会中断,对网络服务的及时性、安全性、准确性也都不作保证。在法律允许的范围内,文依学苑对以下情形导致的服务中断或受阻不承担责任:</view>
+					<view class="section-text">1. 受到计算机病毒、木马或其他恶意程序、黑客攻击的破坏;</view>
+					<view class="section-text">2. 用户或本公司电脑软件、系统、硬件和通信线路出现故障,用户操作不当;</view>
+					<view class="section-text">3. 用户通过非本公司授权的方式使用服务;</view>
+					<view class="section-text">4. 其他不可归因于文依学苑的事由;</view>
+					<view class="section-text">5. 对于因不可抗力或文依学苑不能控制的原因造成的网络服务中断或其它缺陷,文依学苑不承担任何责任,但将尽力减少因此而给用户造成的损失和影响;</view>
+					<view class="section-text">6. 本服务同大多数互联网服务一样,受包括但不限于用户原因、网络服务质量、社会环境等因素的差异影响,可能受到各种安全问题的侵扰,如他人利用用户的资料,造成现实生活中的骚扰;您应加强信息安全及使用者资料的保护意识,注意加强密码保护,以免遭致损失和骚扰;</view>
+					<view class="section-text">7. 在使用本服务的过程中,可能会遇到网络信息或其他用户行为带来的风险,文依学苑不对任何第三方信息的真实性、适用性、合法性承担责任,也不对因第三人侵权行为给用户造成的损害(包括但不限于信息损失,服务中断,资料灭失)负责这些风险包括但不限于;</view>
+					<view class="section-text">8. 来自他人匿名或冒名的含有威胁、诽谤、令人反感或非法内容的信息;</view>
+					<view class="section-text">9. 因使用本协议项下的服务,遭受他人误导、欺骗或其他导致或可能导致的任何心理、生理上的伤害以及经济上的损失;</view>
+					<view class="section-text">10. 其他因网络信息或用户行为引起的风险;</view>
+					<view class="section-text">11. 文依学苑所有信息仅供参考。文依学苑致力于提供正确、完整的学术、健康资讯,但不保证信息的绝对正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。文依学苑所提供的任何学术、健康资讯,仅供参考,不能替代医生和其他医务人员的建议,如自行使用文依学苑资料发生偏差,文依学苑不承担任何法律责任;</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">九、其他内容</view>
+					<view class="section-text">1. 服务可包含对其他平台或内容或资源的超级链接,包括但不限于任何广告内容链接,以及该链接所指向网页之所有内容,均系该网页所属第三方的所有者制作和提供。第三方网站并非也不反映文依学苑之任何意见和主张,也不表示文依学苑同意或支持该第三方网页上的任何内容、主张或立场。文依学苑对第三方网页中内容之合法性、准确性、真实性、适用性、安全性和完整性等概不承担任何责任。任何单位或个人如需要第三方网站中内容(包括资讯、资料、消息、产品或服务介绍、报价等),并欲据此进行交易或其他行为前,应慎重辨别这些内容的合法性、准确性、真实性、适用性、完整性和安全性(包括下载第三方网站中内容是否会感染电脑病毒),并采取谨慎的预防措施。如您不确定这些内容是否合法、准确、真实、实用、完整和安全,建议您先咨询专业人士。文依学苑可能并不控制由文依学苑以外的公司或个人提供的任何平台或资源。</view>
+					<view class="section-text">2. 您认知并同意,文依学苑不对该等外部平台或资源的可用性负责,亦不对该等网络或资源上的或从该等平台或资源获得的任何广告、产品或其他材料加以认可。任何单位或者个人因相信、使用第三方网站中信息、服务、产品等内容,或据此进行交易等行为,而引致的人身伤亡、财产毁损(包括因下载而感染电脑病毒)、名誉或商誉诽谤、版权或知识产权等权利的侵犯等事件,及因该等事件所造成的损害后果,文依学苑概不承担任何法律责任。无论何种原因,文依学苑不对任何非与文依学苑直接发生的交易和行为承担任何直接、间接、附带或衍生的损失和责任。</view>
+					<view class="section-text">3. 您认知并同意,文依学苑不对由于您由于那些外部的平台或资源的可用性或您对该等平台或资源上的或从该等平台或资源获得的任何广告、产品或其他材料的完整性、准确性或存在的信赖而发生的任何损失或损害承担责任。</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">十、本协议的变更</view>
+					<view class="section-text">1. 文依学苑可不时对通用条款或附加条款作出变更,内容更新后,在可能的情况下,公司将以包括但不限于系统提示、公告、站内信等方式通知用户,该等通知于发送之日视为已送达。修改后的协议一旦在文依学苑张贴公告即行生效,并自动代替原有协议。您可随时登陆文依学苑查阅最新协议;您有义务随时关注文依学苑公告并阅读最新协议。</view>
+					<view class="section-text">2. 如果您不同意所变更的内容,您可以停止使用服务并注销账号。您理解并同意,如果您在通用条款或附加条款变更日期之后使用服务,则文依学苑将把您的使用视为接受更新后的通用条款或附加条款。</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">十一、一般法律条款</view>
+					<view class="section-text">1. 本协议及本协议条款项下您与文依学苑的关系,受中国法律管辖,但排除其冲突法规定。您与文依学苑均同意接受位于中国境内的【成都文依合创科技有限公司】所在地【成都市温江区海天腾逸广场】有管辖权的人民法院的管辖,以解决任何由本条款引起的法律事项。</view>
+					<view class="section-text">2. 本协议内容中的条款,请您着重阅读。您点击"同意"按钮即视为您完全接受本协议,在点击之前请您再次确认已知悉并完全理解本协议的全部内容。我们在此特别提示:本协议内容包括协议正文、法律声明及隐私权政策及所有文依学苑已经发布或将来可能发布的各类规则、规范、通知、公告等(合称"规则")。法律声明、隐私政策及所有规则为协议不可分割的一部分,与协议正文具有同等法律效力。</view>
+					<view class="section-text">3. 文依学苑未行使或执行本使用协议任何权利或规定,不构成对前述权利或权利之放弃。</view>
+					<view class="section-text">4. 倘若本用户协议之任何规定因与中华人民共和国法律抵触而无效,本协议其他规定仍应具有完整的效力及效果。</view>
+					<view class="section-text">5. 本使用协议之标题仅供方便而设,不具任何法律或契约效果。</view>
+				</view>
+
+				<view class="section">
+					<view class="section-title">十二、如何联系我们</view>
+					<view class="section-text">如对本协议内容有任何疑问、意见或建议您可以通过在线客服与我们联系,一般情况下我们将在30个工作日内回复您的请求。</view>
+					<view class="section-text" style="text-align: right;">成都文依合创科技有限公司</view>
+				</view>
+
+				<view class="footer">感谢您使用文依学苑平台。</view>
+			</view>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {}
+	},
+	onLoad() {}
+}
+</script>
+
+<style lang="scss" scoped>
+.container {
+	min-height: 100vh;
+	background: #fff;
+	display: flex;
+	flex-direction: column;
+}
+
+.content {
+	flex: 1;
+	height: 100vh;
+}
+
+.agreement-body {
+	padding: 32rpx 24rpx 48rpx;
+}
+
+.title {
+	font-size: 40rpx;
+	font-weight: bold;
+	color: #333;
+	text-align: center;
+	margin-bottom: 16rpx;
+}
+
+.update-time {
+	font-size: 24rpx;
+	color: #999;
+	text-align: center;
+	margin-bottom: 40rpx;
+}
+
+.intro {
+	font-size: 28rpx;
+	color: #666;
+	line-height: 1.75;
+	margin-bottom: 36rpx;
+	text-align: justify;
+}
+
+.section {
+	margin-bottom: 36rpx;
+
+	.section-title {
+		font-size: 30rpx;
+		font-weight: bold;
+		color: #333;
+		margin-bottom: 16rpx;
+		line-height: 1.5;
+	}
+
+	.section-text {
+		font-size: 28rpx;
+		color: #666;
+		line-height: 1.75;
+		margin-bottom: 12rpx;
+		text-align: justify;
+
+		&:last-child {
+			margin-bottom: 0;
+		}
+
+		&.list {
+			padding-left: 16rpx;
+		}
+	}
+}
+
+.footer {
+	font-size: 26rpx;
+	color: #999;
+	text-align: center;
+	margin-top: 32rpx;
+	padding-top: 24rpx;
+}
+</style>

+ 5 - 2
pages_user/withdraw.vue

@@ -16,7 +16,7 @@
 			<view class="amount-section">
 				<view class="section-label">提现金额</view>
 				<view class="amount-input-wrapper">
-					<view class="align-end" style="flex:1">
+					<view style="flex:1;display: flex;align-items: baseline;">
 						<text class="currency">¥</text>
 						<input 
 							class="amount-input" 
@@ -55,6 +55,9 @@ export default {
 		}
 	},
 	onLoad() {
+		// this.loadData()
+	},
+	onShow() {
 		this.loadData()
 	},
 	methods: {
@@ -299,7 +302,7 @@ export default {
 	
 	.amount-input-wrapper {
 		display: flex;
-		align-items: flex-end;
+		align-items: baseline;
 		margin-bottom: 24rpx;
 		
 		.currency {

BIN
static/logo.jpg


BIN
static/logo.png