-
BINpages/images/bj.png
-
BINpages/images/fkjy.png
-
BINpages/images/gywm.png
-
BINpages/images/smrz.png
-
BINpages/images/sz.png
-
BINpages/images/wdxx.png
-
BINpages/images/wz.png
-
10pages/login/login.js
-
55pages/map/map.js
-
3pages/map/map.wxml
-
3pages/map/map.wxss
-
499pages/personal/personal.js
-
229pages/personal/personal.wxml
-
1035pages/personal/personal.wxss
-
182pagesA/pages/wzai/wzai.js
-
3pagesA/pages/wzai/wzai.json
-
24pagesA/pages/wzai/wzai.wxml
-
56pagesA/pages/wzai/wzai.wxss
-
13utils/api.js
|
After Width: 200 | Height: 200 | Size: 3.3 KiB |
|
After Width: 200 | Height: 200 | Size: 4.5 KiB |
|
After Width: 200 | Height: 200 | Size: 3.8 KiB |
|
After Width: 200 | Height: 200 | Size: 4.3 KiB |
|
After Width: 200 | Height: 200 | Size: 6.5 KiB |
|
After Width: 200 | Height: 200 | Size: 6.5 KiB |
|
After Width: 200 | Height: 200 | Size: 4.2 KiB |
@ -1,330 +1,265 @@ |
|||
Page({ |
|||
data: { |
|||
// 用户信息
|
|||
avatarUrl: '', |
|||
userInfo: { |
|||
avatar: '/assets/images/avatar.png', |
|||
nickname: '用户昵称', |
|||
phone: '138****8888', |
|||
isVerified: false, |
|||
isDoctor: false |
|||
nickName: '', |
|||
userId: '', |
|||
isVerified: false |
|||
}, |
|||
|
|||
// 功能模块
|
|||
modules: [ |
|||
{ |
|||
id: 'info', |
|||
icon: 'user-circle', |
|||
name: '个人管理', |
|||
items: [ |
|||
{ |
|||
id: 'profile', |
|||
name: '信息管理', |
|||
desc: '查看和编辑个人信息', |
|||
icon: 'profile', |
|||
badge: 0, |
|||
arrow: true |
|||
}, |
|||
{ |
|||
id: 'realname', |
|||
name: '实名认证', |
|||
desc: '通过输入身份信息', |
|||
icon: 'shield-check', |
|||
badge: 0, |
|||
arrow: true, |
|||
status: '未认证', // 认证状态
|
|||
statusColor: 'text-orange' |
|||
} |
|||
] |
|||
}, |
|||
{ |
|||
id: 'security', |
|||
icon: 'lock', |
|||
name: '账户安全', |
|||
items: [ |
|||
{ |
|||
id: 'security_settings', |
|||
name: '账户安全', |
|||
desc: '设置账户密码和安全问题', |
|||
icon: 'settings', |
|||
badge: 0, |
|||
arrow: true |
|||
}, |
|||
{ |
|||
id: 'feedback', |
|||
name: '反馈建议', |
|||
desc: '向平台提交反馈和建议', |
|||
icon: 'message', |
|||
badge: 3, // 未读回复数
|
|||
arrow: true |
|||
} |
|||
] |
|||
}, |
|||
{ |
|||
id: 'notification', |
|||
icon: 'bell', |
|||
name: '消息通知', |
|||
items: [ |
|||
{ |
|||
id: 'notifications', |
|||
name: '消息通知', |
|||
desc: '问诊、问答、订单等消息', |
|||
icon: 'notification', |
|||
badge: 5, // 未读消息数
|
|||
arrow: true |
|||
}, |
|||
{ |
|||
id: 'privacy', |
|||
name: '隐私设置', |
|||
desc: '管理个人信息可见性', |
|||
icon: 'eye-off', |
|||
badge: 0, |
|||
arrow: true |
|||
} |
|||
] |
|||
}, |
|||
{ |
|||
id: 'support', |
|||
icon: 'help-circle', |
|||
name: '帮助与支持', |
|||
items: [ |
|||
{ |
|||
id: 'about', |
|||
name: '关于我们', |
|||
desc: '了解平台信息', |
|||
icon: 'info', |
|||
badge: 0, |
|||
arrow: true |
|||
}, |
|||
{ |
|||
id: 'service', |
|||
name: '客服中心', |
|||
desc: '7x24小时在线服务', |
|||
icon: 'headphones', |
|||
badge: 0, |
|||
arrow: true |
|||
}, |
|||
{ |
|||
id: 'agreement', |
|||
name: '用户协议', |
|||
desc: '查看平台使用条款', |
|||
icon: 'file-text', |
|||
badge: 0, |
|||
arrow: true |
|||
} |
|||
] |
|||
} |
|||
], |
|||
|
|||
// 统计数据
|
|||
stats: [ |
|||
{ |
|||
id: 'consultation', |
|||
name: '我的问诊', |
|||
value: '12', |
|||
icon: 'stethoscope', |
|||
color: '#07c160' |
|||
}, |
|||
{ |
|||
id: 'orders', |
|||
name: '我的订单', |
|||
value: '8', |
|||
icon: 'shopping-bag', |
|||
color: '#ff6b6b' |
|||
}, |
|||
{ |
|||
id: 'favorites', |
|||
name: '我的收藏', |
|||
value: '23', |
|||
icon: 'heart', |
|||
color: '#ff9f43' |
|||
}, |
|||
{ |
|||
id: 'coupons', |
|||
name: '我的优惠券', |
|||
value: '3', |
|||
icon: 'tag', |
|||
color: '#2e86de' |
|||
} |
|||
], |
|||
|
|||
// 快捷操作
|
|||
quickActions: [ |
|||
{ |
|||
id: 'health_record', |
|||
name: '健康档案', |
|||
icon: 'file-medical', |
|||
color: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)' |
|||
}, |
|||
{ |
|||
id: 'appointment', |
|||
name: '预约挂号', |
|||
icon: 'calendar', |
|||
color: 'linear-gradient(135deg, #f093fb 0%, #f5576c 100%)' |
|||
}, |
|||
{ |
|||
id: 'medicine', |
|||
name: '我的药箱', |
|||
icon: 'pill', |
|||
color: 'linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)' |
|||
}, |
|||
{ |
|||
id: 'report', |
|||
name: '检查报告', |
|||
icon: 'clipboard', |
|||
color: 'linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)' |
|||
} |
|||
], |
|||
|
|||
// 系统信息
|
|||
systemInfo: { |
|||
version: '2.1.0', |
|||
lastLogin: '2024-01-15 14:30' |
|||
} |
|||
// 弹窗状态
|
|||
showFeedbackModal: false, |
|||
showNicknameModal: false, |
|||
showToast: false, |
|||
|
|||
// 反馈相关
|
|||
feedbackContent: '', |
|||
canSubmit: false, |
|||
isSubmitting: false, |
|||
|
|||
// 编辑相关
|
|||
newNickname: '', |
|||
// 提示信息
|
|||
toastText: '' |
|||
}, |
|||
|
|||
onLoad() { |
|||
this.loadUserInfo() |
|||
this.checkNotifications() |
|||
this.loadUserInfo(); |
|||
}, |
|||
|
|||
onShow() { |
|||
// 每次显示页面时刷新数据
|
|||
this.refreshData() |
|||
|
|||
}, |
|||
|
|||
// 加载用户信息
|
|||
loadUserInfo() { |
|||
// 模拟API调用
|
|||
setTimeout(() => { |
|||
// 从缓存获取用户信息
|
|||
const userInfo = wx.getStorageSync('userInfo'); |
|||
const avatarUrl = wx.getStorageSync('avatarUrl'); |
|||
|
|||
if (userInfo) { |
|||
this.setData({ |
|||
'userInfo.nickname': '张小凡', |
|||
'userInfo.phone': '138****5678', |
|||
'userInfo.isVerified': true, |
|||
'userInfo.isDoctor': false |
|||
}) |
|||
}, 500) |
|||
userInfo, |
|||
avatarUrl |
|||
}); |
|||
} else { |
|||
// 首次使用,生成默认用户信息
|
|||
const defaultUserInfo = { |
|||
nickName: '微信用户', |
|||
isVerified: false |
|||
}; |
|||
|
|||
wx.setStorageSync('userInfo', defaultUserInfo); |
|||
this.setData({ userInfo: defaultUserInfo }); |
|||
} |
|||
}, |
|||
|
|||
// 检查通知
|
|||
checkNotifications() { |
|||
// 模拟检查未读消息
|
|||
const updatedModules = this.data.modules.map(module => { |
|||
return { |
|||
...module, |
|||
items: module.items.map(item => { |
|||
if (item.id === 'notifications') { |
|||
return { ...item, badge: Math.floor(Math.random() * 10) } |
|||
} |
|||
return item |
|||
}) |
|||
} |
|||
}) |
|||
|
|||
this.setData({ modules: updatedModules }) |
|||
|
|||
// 选择头像
|
|||
onChooseAvatar(e) { |
|||
const { avatarUrl } = e.detail; |
|||
|
|||
// 显示加载
|
|||
wx.showLoading({ |
|||
title: '更新中...', |
|||
mask: true |
|||
}); |
|||
|
|||
// 模拟上传过程
|
|||
setTimeout(() => { |
|||
this.setData({ avatarUrl }); |
|||
|
|||
// 保存到缓存
|
|||
wx.setStorageSync('avatarUrl', avatarUrl); |
|||
|
|||
wx.hideLoading(); |
|||
this.showToast('头像更新成功'); |
|||
}, 800); |
|||
}, |
|||
|
|||
// 刷新数据
|
|||
refreshData() { |
|||
// 刷新统计数据
|
|||
const updatedStats = this.data.stats.map(stat => ({ |
|||
...stat, |
|||
value: String(Math.floor(Math.random() * 20) + 5) |
|||
})) |
|||
|
|||
this.setData({ stats: updatedStats }) |
|||
|
|||
// 编辑昵称
|
|||
editNickname() { |
|||
this.setData({ |
|||
showNicknameModal: true, |
|||
newNickname: this.data.userInfo.nickName |
|||
}); |
|||
}, |
|||
|
|||
// 点击用户头像区域
|
|||
onTapUserInfo() { |
|||
wx.navigateTo({ |
|||
url: '/pages/profile/edit-profile' |
|||
}) |
|||
hideNicknameModal() { |
|||
this.setData({ showNicknameModal: false }); |
|||
}, |
|||
|
|||
onNicknameInput(e) { |
|||
this.setData({ newNickname: e.detail.value }); |
|||
}, |
|||
|
|||
// 点击统计项
|
|||
onTapStat(e) { |
|||
const { id } = e.currentTarget.dataset |
|||
const urls = { |
|||
consultation: '/pages/consultation/my-consultation', |
|||
orders: '/pages/order/my-orders', |
|||
favorites: '/pages/favorites/favorites', |
|||
coupons: '/pages/coupon/my-coupons' |
|||
saveNickname() { |
|||
const newNickname = this.data.newNickname.trim(); |
|||
|
|||
if (!newNickname) { |
|||
this.showToast('昵称不能为空'); |
|||
return; |
|||
} |
|||
|
|||
if (urls[id]) { |
|||
wx.navigateTo({ url: urls[id] }) |
|||
if (newNickname.length > 20) { |
|||
this.showToast('昵称不能超过20个字符'); |
|||
return; |
|||
} |
|||
|
|||
// 更新用户信息
|
|||
const updatedUserInfo = { |
|||
...this.data.userInfo, |
|||
nickName: newNickname |
|||
}; |
|||
|
|||
this.setData({ |
|||
userInfo: updatedUserInfo, |
|||
showNicknameModal: false |
|||
}); |
|||
|
|||
// 保存到缓存
|
|||
wx.setStorageSync('userInfo', updatedUserInfo); |
|||
|
|||
this.showToast('昵称修改成功'); |
|||
}, |
|||
|
|||
// 点击快捷操作
|
|||
onTapQuickAction(e) { |
|||
const { id } = e.currentTarget.dataset |
|||
const urls = { |
|||
health_record: '/pages/health/record', |
|||
appointment: '/pages/appointment/list', |
|||
medicine: '/pages/medicine/medicine-box', |
|||
report: '/pages/report/list' |
|||
} |
|||
// 查看问诊消息
|
|||
goToConsultation() { |
|||
wx.navigateTo({ |
|||
url: '' |
|||
}); |
|||
}, |
|||
|
|||
if (urls[id]) { |
|||
wx.navigateTo({ url: urls[id] }) |
|||
} |
|||
// 查看问答消息
|
|||
goToQA() { |
|||
wx.navigateTo({ |
|||
url: '' |
|||
}); |
|||
}, |
|||
|
|||
// 点击功能项
|
|||
onTapMenuItem(e) { |
|||
const { moduleid, itemid } = e.currentTarget.dataset |
|||
console.log('点击:', moduleid, itemid) |
|||
|
|||
// 根据不同的itemid跳转到不同页面
|
|||
const pageMap = { |
|||
profile: '/pages/profile/edit-profile', |
|||
realname: '/pages/auth/realname-auth', |
|||
security_settings: '/pages/security/settings', |
|||
feedback: '/pages/feedback/feedback', |
|||
notifications: '/pages/notification/notification-center', |
|||
privacy: '/pages/privacy/settings', |
|||
about: '/pages/about/about', |
|||
service: '/pages/service/customer-service', |
|||
agreement: '/pages/agreement/user-agreement' |
|||
// 实名认证
|
|||
goToAuth() { |
|||
if (this.data.userInfo.isVerified) { |
|||
this.showToast('您已完成实名认证'); |
|||
return; |
|||
} |
|||
|
|||
if (pageMap[itemid]) { |
|||
wx.navigateTo({ url: pageMap[itemid] }) |
|||
wx.navigateTo({ |
|||
url: '/pages/auth/realname' |
|||
}); |
|||
}, |
|||
|
|||
// 显示反馈弹窗
|
|||
showFeedback() { |
|||
this.setData({ |
|||
showFeedbackModal: true, |
|||
feedbackContent: '', |
|||
canSubmit: false, |
|||
isSubmitting: false |
|||
}); |
|||
}, |
|||
|
|||
hideFeedback() { |
|||
this.setData({ showFeedbackModal: false }); |
|||
}, |
|||
|
|||
// 反馈内容输入
|
|||
onFeedbackInput(e) { |
|||
const content = e.detail.value; |
|||
const canSubmit = content.trim().length > 0; |
|||
|
|||
this.setData({ |
|||
feedbackContent: content, |
|||
canSubmit |
|||
}); |
|||
}, |
|||
|
|||
// 提交反馈
|
|||
submitFeedback() { |
|||
if (!this.data.canSubmit || this.data.isSubmitting) return; |
|||
|
|||
const content = this.data.feedbackContent.trim(); |
|||
if (content.length < 5) { |
|||
this.showToast('请填写详细的反馈内容'); |
|||
return; |
|||
} |
|||
|
|||
this.setData({ isSubmitting: true }); |
|||
|
|||
// 模拟提交到服务器
|
|||
setTimeout(() => { |
|||
console.log('提交反馈:', content); |
|||
|
|||
this.setData({ |
|||
isSubmitting: false, |
|||
showFeedbackModal: false |
|||
}); |
|||
|
|||
this.showToast('感谢您的反馈!'); |
|||
|
|||
// 这里应该是实际的API调用
|
|||
// wx.request({
|
|||
// url: 'https://your-api.com/feedback',
|
|||
// method: 'POST',
|
|||
// data: { content },
|
|||
// success: (res) => {
|
|||
// this.showToast('提交成功');
|
|||
// },
|
|||
// complete: () => {
|
|||
// this.setData({
|
|||
// isSubmitting: false,
|
|||
// showFeedbackModal: false
|
|||
// });
|
|||
// }
|
|||
// });
|
|||
}, 1500); |
|||
}, |
|||
|
|||
// 关于我们
|
|||
goToAbout() { |
|||
wx.navigateTo({ |
|||
url: '/pages/about/index' |
|||
}); |
|||
}, |
|||
|
|||
// 设置
|
|||
onTapSettings() { |
|||
goToSettings() { |
|||
wx.navigateTo({ |
|||
url: '/pages/settings/settings' |
|||
}) |
|||
url: '/pages/settings/index' |
|||
}); |
|||
}, |
|||
|
|||
// 退出登录
|
|||
onLogout() { |
|||
wx.showModal({ |
|||
title: '提示', |
|||
content: '确定要退出登录吗?', |
|||
success: (res) => { |
|||
if (res.confirm) { |
|||
// 清除登录状态
|
|||
wx.removeStorageSync('token') |
|||
wx.removeStorageSync('userInfo') |
|||
|
|||
// 跳转到登录页
|
|||
wx.reLaunch({ |
|||
url: '/pages/login/login' |
|||
}) |
|||
} |
|||
} |
|||
}) |
|||
// 显示提示
|
|||
showToast(text) { |
|||
this.setData({ |
|||
toastText: text, |
|||
showToast: true |
|||
}); |
|||
|
|||
setTimeout(() => { |
|||
this.setData({ showToast: false }); |
|||
}, 2000); |
|||
}, |
|||
|
|||
// 下拉刷新
|
|||
onPullDownRefresh() { |
|||
this.loadUserInfo(); |
|||
this.checkUnreadMessages(); |
|||
|
|||
setTimeout(() => { |
|||
wx.stopPullDownRefresh(); |
|||
this.showToast('刷新成功'); |
|||
}, 1000); |
|||
}, |
|||
|
|||
// 分享
|
|||
onShareAppMessage() { |
|||
return { |
|||
title: '健康管理,从这里开始', |
|||
path: '/pages/index/index' |
|||
} |
|||
title: '健康守护 - 您的个人健康中心', |
|||
path: '/pages/personal-center/index' |
|||
}; |
|||
} |
|||
}) |
|||
}); |
|||
@ -1,147 +1,142 @@ |
|||
<view class="personal-center"> |
|||
<!-- 顶部背景 --> |
|||
<view class="header-bg"></view> |
|||
|
|||
<!-- 用户信息卡片 --> |
|||
<view class="user-card" bindtap="onTapUserInfo"> |
|||
<view class="user-info"> |
|||
<view class="avatar-section"> |
|||
<image class="avatar" src="{{userInfo.avatar || '/assets/images/avatar-default.png'}}" mode="aspectFill"></image> |
|||
<view class="avatar-badge" wx:if="{{userInfo.isVerified}}"> |
|||
<text class="iconfont icon-check-circle"></text> |
|||
</view> |
|||
</view> |
|||
|
|||
<view class="user-details"> |
|||
<view class="user-name"> |
|||
<text class="name">{{userInfo.nickname || '点击登录'}}</text> |
|||
<text class="iconfont icon-edit" wx:if="{{userInfo.nickname}}"></text> |
|||
</view> |
|||
<!-- 用户信息区域 --> |
|||
<view class="user-section fade-in"> |
|||
<view class="user-card"> |
|||
<!-- 头像 --> |
|||
<button class="avatar-btn" open-type="chooseAvatar" bindchooseavatar="onChooseAvatar"> |
|||
<image class="avatar" src="{{avatarUrl || '/pages/images/tx.png'}}" mode="aspectFill"></image> |
|||
</button> |
|||
|
|||
<view class="user-phone"> |
|||
<text class="iconfont icon-phone"></text> |
|||
<text>{{userInfo.phone || '未绑定手机号'}}</text> |
|||
<!-- 用户信息 --> |
|||
<view class="user-info"> |
|||
<view class="nickname-section" bindtap="editNickname"> |
|||
<text class="nickname">{{userInfo.nickName || '微信用户'}}</text> |
|||
<image src="/pages/images/bj.png"></image> |
|||
</view> |
|||
|
|||
<view class="user-tags"> |
|||
<view class="tag" wx:if="{{userInfo.isDoctor}}"> |
|||
<text class="iconfont icon-stethoscope"></text> |
|||
<text>医生认证</text> |
|||
</view> |
|||
<view class="tag" wx:if="{{userInfo.isVerified}}"> |
|||
<text class="iconfont icon-shield-check"></text> |
|||
<text>已实名</text> |
|||
<view class="user-meta"> |
|||
<view class="auth-tag {{userInfo.isVerified ? 'verified' : ''}}" bindtap="goToAuth"> |
|||
<text>{{userInfo.isVerified ? '已认证' : '未认证'}}</text> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<view class="card-arrow"> |
|||
<text class="iconfont icon-chevron-right"></text> |
|||
<!-- 消息通知 --> |
|||
<view class="section-card fade-in-delay-1"> |
|||
<view class="section-header"> |
|||
<text class="section-title">消息通知</text> |
|||
</view> |
|||
</view> |
|||
|
|||
<!-- 统计数据 --> |
|||
<view class="stats-grid"> |
|||
<view |
|||
wx:for="{{stats}}" |
|||
wx:key="id" |
|||
class="stat-item" |
|||
bindtap="onTapStat" |
|||
data-id="{{item.id}}" |
|||
> |
|||
<view class="stat-icon" style="color: {{item.color}};"> |
|||
<text class="iconfont icon-{{item.icon}}"></text> |
|||
<view class="message-row"> |
|||
<view class="message-item" bindtap="goToConsultation"> |
|||
<view class="message-icon-wrapper"> |
|||
<image class="message-icon" src="/pages/images/wz.png" mode=""></image> |
|||
</view> |
|||
<text class="message-label">问诊消息</text> |
|||
</view> |
|||
|
|||
<view class="divider"></view> |
|||
|
|||
<view class="message-item" bindtap="goToQA"> |
|||
<view class="message-icon-wrapper"> |
|||
<image class="message-icon" src="/pages/images/wdxx.png" mode=""></image> |
|||
</view> |
|||
<text class="message-label">问答消息</text> |
|||
</view> |
|||
<view class="stat-value">{{item.value}}</view> |
|||
<view class="stat-name">{{item.name}}</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<!-- 快捷操作 --> |
|||
<view class="quick-actions"> |
|||
<view class="section-title"> |
|||
<text class="iconfont icon-zap"></text> |
|||
<text>快捷操作</text> |
|||
</view> |
|||
<view class="actions-grid"> |
|||
<view |
|||
wx:for="{{quickActions}}" |
|||
wx:key="id" |
|||
class="action-item" |
|||
bindtap="onTapQuickAction" |
|||
data-id="{{item.id}}" |
|||
> |
|||
<view class="action-icon" style="background: {{item.color}};"> |
|||
<text class="iconfont icon-{{item.icon}}"></text> |
|||
<!-- 功能列表 --> |
|||
<view class="section-card fade-in-delay-2"> |
|||
<view class="function-list"> |
|||
<!-- 实名认证 --> |
|||
<view class="function-item" bindtap="goToAuth"> |
|||
<view class="item-left"> |
|||
<image class="item-icon" src="/pages/images/smrz.png"></image> |
|||
<text class="item-title">实名认证</text> |
|||
</view> |
|||
<view class="item-status {{userInfo.isVerified ? 'verified' : ''}}"> |
|||
{{userInfo.isVerified ? '已认证' : '去认证'}} |
|||
</view> |
|||
</view> |
|||
|
|||
<!-- 反馈建议 --> |
|||
<view class="function-item" bindtap="showFeedback"> |
|||
<view class="item-left"> |
|||
<image class="item-icon" src="/pages/images/fkjy.png"></image> |
|||
<text class="item-title">反馈建议</text> |
|||
</view> |
|||
</view> |
|||
|
|||
<!-- 关于我们 --> |
|||
<view class="function-item" bindtap="goToAbout"> |
|||
<view class="item-left"> |
|||
<image class="item-icon" src="/pages/images/gywm.png"></image> |
|||
<text class="item-title">关于我们</text> |
|||
</view> |
|||
</view> |
|||
|
|||
<!-- 设置 --> |
|||
<view class="function-item" bindtap="goToSettings"> |
|||
<view class="item-left"> |
|||
<image class="item-icon" src="/pages/images/sz.png"></image> |
|||
<text class="item-title">设置</text> |
|||
</view> |
|||
<view class="action-name">{{item.name}}</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<!-- 功能模块 --> |
|||
<view class="modules"> |
|||
<block wx:for="{{modules}}" wx:key="id"> |
|||
<view class="module-section"> |
|||
<view class="section-title"> |
|||
<text class="iconfont icon-{{item.icon}}"></text> |
|||
<text>{{item.name}}</text> |
|||
|
|||
|
|||
<!-- 反馈建议弹窗 --> |
|||
<view class="feedback-modal {{showFeedbackModal ? 'show' : ''}}"> |
|||
<view class="modal-mask" bindtap="hideFeedback"></view> |
|||
<view class="modal-content"> |
|||
<view class="modal-header"> |
|||
<text class="modal-title">反馈建议</text> |
|||
<view class="modal-close" bindtap="hideFeedback"> |
|||
<image src="/icons/close.png"></image> |
|||
</view> |
|||
</view> |
|||
|
|||
<view class="module-items"> |
|||
<view |
|||
wx:for="{{item.items}}" |
|||
wx:key="id" |
|||
class="module-item" |
|||
bindtap="onTapMenuItem" |
|||
data-moduleid="{{moduleId}}" |
|||
data-itemid="{{item.id}}" |
|||
> |
|||
<view class="item-left"> |
|||
<view class="item-icon"> |
|||
<text class="iconfont icon-{{item.icon}}"></text> |
|||
</view> |
|||
<view class="item-info"> |
|||
<view class="item-name">{{item.name}}</view> |
|||
<view class="item-desc">{{item.desc}}</view> |
|||
<view |
|||
class="item-status {{item.statusColor || ''}}" |
|||
wx:if="{{item.status}}" |
|||
> |
|||
{{item.status}} |
|||
</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<view class="item-right"> |
|||
<view class="badge" wx:if="{{item.badge > 0}}"> |
|||
{{item.badge > 99 ? '99+' : item.badge}} |
|||
</view> |
|||
<text class="iconfont icon-chevron-right" wx:if="{{item.arrow}}"></text> |
|||
</view> |
|||
</view> |
|||
<view class="modal-body"> |
|||
<textarea class="feedback-input" placeholder="请输入您的反馈或建议..." placeholder-class="placeholder" value="{{feedbackContent}}" bindinput="onFeedbackInput" maxlength="200" auto-height></textarea> |
|||
<view class="char-count"> |
|||
<text class="current">{{feedbackContent.length}}</text> |
|||
<text class="total">/200</text> |
|||
</view> |
|||
</view> |
|||
</block> |
|||
</view> |
|||
|
|||
<!-- 底部操作 --> |
|||
<view class="bottom-actions"> |
|||
<view class="system-info"> |
|||
<text>版本 {{systemInfo.version}}</text> |
|||
<text>最后登录 {{systemInfo.lastLogin}}</text> |
|||
<view class="modal-footer"> |
|||
<button class="submit-btn {{canSubmit ? 'active' : ''}}" bindtap="submitFeedback" disabled="{{!canSubmit}}"> |
|||
{{isSubmitting ? '提交中...' : '提交'}} |
|||
</button> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<view class="action-buttons"> |
|||
<button class="btn btn-setting" bindtap="onTapSettings"> |
|||
<text class="iconfont icon-settings"></text> |
|||
<text>设置</text> |
|||
</button> |
|||
<button class="btn btn-logout" bindtap="onLogout"> |
|||
<text class="iconfont icon-log-out"></text> |
|||
<text>退出登录</text> |
|||
</button> |
|||
<!-- 修改昵称弹窗 --> |
|||
<view class="nickname-modal {{showNicknameModal ? 'show' : ''}}"> |
|||
<view class="modal-mask" bindtap="hideNicknameModal"></view> |
|||
<view class="modal-content"> |
|||
<view class="modal-header"> |
|||
<text class="modal-title">修改昵称</text> |
|||
</view> |
|||
<view class="modal-body"> |
|||
<input class="nickname-input" type="text" placeholder="请输入昵称" value="{{newNickname}}" bindinput="onNicknameInput" maxlength="10" /> |
|||
<text class="input-tip">最多10个字符</text> |
|||
</view> |
|||
<view class="modal-footer"> |
|||
<button class="cancel-btn" bindtap="hideNicknameModal">取消</button> |
|||
<button class="confirm-btn" bindtap="saveNickname">确定</button> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<!-- 提示信息 --> |
|||
<view class="toast {{showToast ? 'show' : ''}}"> |
|||
<text>{{toastText}}</text> |
|||
</view> |
|||
</view> |
|||
1035
pages/personal/personal.wxss
File diff suppressed because it is too large
View File
@ -1,5 +1,4 @@ |
|||
{ |
|||
"navigationBarTitleText":"AI问诊", |
|||
"navigationStyle": "custom", |
|||
"navigationBarTitleText":"AI智能问诊", |
|||
"usingComponents": {} |
|||
} |
|||