SpringBoot+Vue+小程序构建社区医养系统:核心流程与避坑指南
1. 先搞清楚“社区医养结合系统”到底要解决什么问题社区医养结合系统核心目标是把社区内的医疗资源和养老服务打通。它不是一个简单的信息展示网站而是要处理预约、健康档案、服务派单、家属通知这些需要流转和交互的流程。对于开发者来说这意味着你的系统后端要能稳定处理订单状态变更、用户权限管理、数据安全存储前端小程序要能让老人或家属方便地操作界面清晰流程顺畅。很多人一看到“SpringBoot Vue 小程序”这个技术栈就急着去搭框架、写代码结果做出来的东西流程跑不通或者稍微上点数据就卡顿。更常见的问题是小程序端和后台管理端通常用Vue开发的数据状态不同步或者权限控制混乱。所以在动手之前你得先想清楚几个关键场景老人如何在线预约护理服务医护人员怎么接收并处理任务家属如何查看老人的健康报告和预约记录这些场景直接决定了你的数据库表设计和接口逻辑。我建议先从最核心的“服务预约”流程开始设计。别一上来就想把所有功能都做全先把“用户选服务 - 下单 - 后台接单 - 状态更新”这个闭环跑通。只要这个主流程的数据能在SpringBoot后端、Vue管理后台和微信小程序三者之间正确、实时地流转项目的基础就稳了。2. 技术选型与环境搭建别在配置上踩坑技术栈很明确SpringBoot 2.x 做后端APIVue 2.x/3.x 做后台管理前端微信小程序做用户端。但这里有几个容易忽略的细节直接关系到后续开发的顺畅度。后端SpringBoot环境JDK版本建议用JDK 8或JDK 11这是SpringBoot 2.x最兼容的版本。用太新或太旧的JDK可能会遇到奇怪的启动错误。数据库社区系统数据关系不算特别复杂但涉及用户、订单、服务、档案等多表关联。MySQL 5.7或8.0是稳妥的选择。建库时字符集务必用utf8mb4否则存储微信用户昵称里的特殊表情会出问题。关键依赖在pom.xml里除了基础的spring-boot-starter-web这几个依赖大概率会用到spring-boot-starter-data-jpa或mybatis-spring-boot-starter根据团队习惯选ORM框架。spring-boot-starter-data-redis用来缓存热点数据如服务列表、存储微信登录的session_key或做简单的分布式锁。spring-boot-starter-security或shiro做API接口的权限控制。社区系统涉及老人隐私权限必须做细。hutool国产工具包处理日期、加密、HTTP请求等非常方便。wx-java一个开源SDK能极大简化微信小程序登录、支付、消息模板的对接代码。前端Vue管理后台环境Node.js版本建议使用LTS版本如Node.js 16.x或18.x。安装后用npm或yarn安装Vue CLI。项目创建用vue create admin-frontend创建项目。对于管理后台UI组件库推荐Element PlusVue 3或Element UIVue 2它们对表格、表单、弹窗等后台常见组件支持很好。跨域问题开发时Vue项目运行在localhost:8080SpringBoot运行在localhost:8081必然跨域。不要在Vue里用代理绕过就完事更要在SpringBoot后端配置全局的CORS确保上线后也能用。一个简单的配置类如下Configuration public class CorsConfig implements WebMvcConfigurer { Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**) .allowedOriginPatterns(*) // 生产环境要换成具体域名 .allowedMethods(GET, POST, PUT, DELETE, OPTIONS) .allowCredentials(true) .maxAge(3600); } }小程序端环境注册微信小程序账号时服务类目要选择“医疗-就医服务”或“生活服务-家政”具体根据审核要求来选错可能导致审核失败。小程序开发工具中appid一定要填对。项目设置里把“ES6转ES5”、“增强编译”等选项勾上减少兼容性问题。网络请求小程序请求后端API必须使用wx.request且后端域名必须在小程序后台的“开发管理”-“开发设置”-“服务器域名”中配置。开发阶段可以在开发工具里勾选“不校验合法域名”但上线前必须配置好。3. 核心业务流程与接口设计实战我们以最核心的“护理服务预约”流程为例拆解前后端如何配合。3.1 数据库表设计要点先设计几张核心表这是所有业务的基础user用户表存储小程序端用户老人/家属和后台管理员。通过user_type字段区分角色如0-老人1-家属2-护士3-管理员。service服务项目表存储提供的护理服务如“上门测血压”、“康复按摩”。包含名称、价格、时长、描述等字段。order订单表这是核心表。字段至少包括订单号、用户ID、服务ID、预约时间、服务地址、订单状态0-待支付1-待接单2-服务中3-已完成4-已取消、金额、创建时间等。health_record健康档案表关联用户ID记录血压、血糖等历史数据。设计时要注意订单状态流转要清晰且每个状态变更最好都记录日志到另一张order_log表便于后续追踪纠纷。3.2 后端SpringBoot接口实现后端提供RESTful API。以订单接口为例Controller层负责接收请求、校验参数、返回响应。RestController RequestMapping(/api/order) public class OrderController { Autowired private OrderService orderService; PostMapping(/create) public ApiResult createOrder(RequestBody OrderCreateDTO orderDTO, HttpServletRequest request) { // 1. 从请求头或Token中获取当前登录用户ID Long userId getCurrentUserId(request); // 2. 数据校验如预约时间是否合法 // 3. 调用Service String orderNo orderService.createOrder(userId, orderDTO); return ApiResult.success(预约成功, orderNo); } GetMapping(/list) public ApiResult getOrderList(RequestParam Integer status, HttpServletRequest request) { Long userId getCurrentUserId(request); ListOrderVO list orderService.getOrdersByUserAndStatus(userId, status); return ApiResult.success(list); } }这里的ApiResult是一个自定义的统一响应体包含code、msg、data。Service层实现核心业务逻辑。创建订单不是简单的插入要检查服务项目是否存在且可用。用户选择的预约时间是否与其他订单冲突如果涉及人员排班。库存或服务人员是否充足如果涉及。Service Transactional // 开启事务保证数据一致性 public class OrderServiceImpl implements OrderService { public String createOrder(Long userId, OrderCreateDTO dto) { // 业务校验... // 生成分布式唯一订单号可以用雪花算法 String orderNo IdUtil.getSnowflakeNextIdStr(); // 组装Order实体 Order order new Order(); order.setOrderNo(orderNo); order.setUserId(userId); order.setStatus(0); // 初始状态待支付 // ... 设置其他字段 orderMapper.insert(order); // 记录日志 // 可能还需要发送微信模板消息通知家属或护士 return orderNo; } }权限控制使用Spring Security或拦截器。例如/api/admin/**下的接口需要管理员权限/api/nurse/**下的接口需要护士权限。可以在Controller方法上加注解如PreAuthorize(hasRole(ADMIN))。3.3 前端Vue管理后台对接管理后台需要展示订单列表、处理订单。API封装在src/api/order.js中封装所有订单相关请求。import request from /utils/request // 这是基于axios封装的请求工具 export function getOrderList(params) { return request({ url: /api/admin/order/list, method: get, params }) } export function processOrder(orderNo, action) { return request({ url: /api/admin/order/${orderNo}/process, method: post, data: { action } // action: accept, start, complete }) }页面组件在订单列表页面使用Element的el-table展示数据并加入状态筛选和操作按钮。template div el-table :dataorderList el-table-column proporderNo label订单号/el-table-column el-table-column propserviceName label服务项目/el-table-column el-table-column propuserName label用户/el-table-column el-table-column propstatus label状态 template #defaultscope el-tag :typestatusTagType(scope.row.status) {{ statusText(scope.row.status) }} /el-tag /template /el-table-column el-table-column label操作 template #defaultscope el-button v-ifscope.row.status 1 clickacceptOrder(scope.row)接单/el-button /template /el-table-column /el-table /div /template script import { getOrderList, processOrder } from /api/order export default { data() { return { orderList: [] } }, mounted() { this.fetchData() }, methods: { async fetchData() { this.orderList await getOrderList({ status: 1 }); }, async acceptOrder(order) { await processOrder(order.orderNo, accept); this.$message.success(接单成功); this.fetchData(); // 刷新列表 } } } /script3.4 微信小程序端实现小程序端主要功能是浏览服务、下单、查看我的订单。登录授权这是第一步。调用wx.login()获取code发送到你的后端。后端用appid、secret和code去微信接口换openid和session_key。然后生成你自己的Token如JWT返回给小程序后续请求都带上这个Token。// pages/login/login.js wx.login({ success: (res) { if (res.code) { wx.request({ url: https://your-domain.com/api/wx/login, method: POST, data: { code: res.code }, success: (res) { const token res.data.data.token; wx.setStorageSync(token, token); // 存储token wx.navigateBack(); // 返回上一页 } }) } } })请求封装在app.js中全局配置请求并自动携带Token。// app.js App({ globalData: {}, request(options) { const token wx.getStorageSync(token); return new Promise((resolve, reject) { wx.request({ url: this.globalData.baseUrl options.url, method: options.method || GET, data: options.data, header: { Authorization: token ? Bearer ${token} : , Content-Type: application/json }, success: (res) { if (res.data.code 200) { resolve(res.data.data); } else { wx.showToast({ title: res.data.msg, icon: none }); reject(res.data); } }, fail: (err) reject(err) }); }); } })下单页面选择服务、时间、地址后调用封装的request方法提交订单。// pages/order/create.js const app getApp(); Page({ data: { serviceList: [], selectedService: null, appointmentTime: }, onLoad() { this.loadServices(); }, async loadServices() { const data await app.request({ url: /api/service/list }); this.setData({ serviceList: data }); }, async submitOrder() { if (!this.data.selectedService || !this.data.appointmentTime) { wx.showToast({ title: 请填写完整信息, icon: none }); return; } const orderNo await app.request({ url: /api/order/create, method: POST, data: { serviceId: this.data.selectedService.id, appointmentTime: this.data.appointmentTime } }); wx.showModal({ title: 成功, content: 订单创建成功订单号${orderNo}, success: (res) { if (res.confirm) { wx.navigateTo({ url: /pages/order/list }); } } }); } })4. 开发与部署中的关键细节与避坑指南4.1 微信小程序特定问题用户登录与Token管理上面提到的登录流程是基础。关键点在于session_key可能会过期后端需要实现一套机制来刷新或重新登录。通常做法是将openid和生成的Token关联存储Token设置一个较短的有效期如2小时小程序端在请求失败时如401错误自动触发重新登录。获取用户手机号这是一个敏感接口需要用户主动触发button open-typegetPhoneNumber。事件回调中会得到一个加密的code需要将这个code传到你的后端后端用session_key解密才能拿到真实手机号。切记这个解密过程必须在后端完成绝不能在小程序端进行。模板消息与订阅消息旧版模板消息已逐渐被订阅消息取代。发送订阅消息需要用户先授权一次授权可发送一条。后端调用微信接口发送时需要用户的openid、模板ID和填充的数据。模板ID需要在小程序后台申请。本地存储与数据安全wx.setStorageSync存储的数据可以被用户清理不能作为持久化方案。敏感信息如openid、session_key、手机号等绝对不要存储在小程序本地只存后端返回的自定义Token。4.2 后端SpringBoot常见坑点事务失效在Service方法内部调用另一个Transactional方法如果调用方式不对如直接this.method()事务可能不生效。建议将事务方法放在另一个Service类中或使用AopContext.currentProxy()。接口幂等性创建订单、支付回调等接口必须保证幂等。可以通过数据库唯一索引如订单号、或使用Redis分布式锁Token机制来防止重复提交。文件上传小程序上传图片到后端后端接收后建议立即上传到对象存储如阿里云OSS、腾讯云COS不要存在应用服务器本地。返回给前端的应该是OSS的URL。定时任务对于“自动取消未支付订单”这类需求可以用Spring的Scheduled注解。但要小心集群部署时任务重复执行可以用数据库行锁或Redis锁做分布式调度协调。API文档使用Swagger或Knife4j自动生成API文档能极大减少前后端沟通成本。在pom.xml引入依赖写个配置类即可。4.3 前端Vue管理后台优化路由权限根据用户角色动态生成可访问的路由。可以使用vue-router的导航守卫在router.beforeEach中判断用户Token和角色如果没有权限则跳转到登录页或403页面。状态管理对于用户信息、全局配置等数据使用Vuex或Pinia进行集中管理避免在多组件间层层传递。打包优化使用vue.config.js配置开启Gzip压缩、拆分第三方库splitChunks、使用CDN引入ElementUI等大库能显著减小打包体积提升管理后台加载速度。4.4 部署上线注意事项后端部署打包成jar文件后在服务器上用java -jar命令运行。生产环境一定要用nohup或配置成systemd服务。数据库连接池参数如HikariCP的maximum-pool-size要根据服务器配置调整。前端部署Vue项目执行npm run build后将生成的dist文件夹里的内容放到Nginx或Apache的静态资源目录下。记得配置Nginx代理将/api开头的请求转发到后端SpringBoot服务。# Nginx 配置示例 server { listen 80; server_name admin.your-domain.com; location / { root /path/to/vue/dist; index index.html; try_files $uri $uri/ /index.html; # 支持Vue Router的history模式 } location /api { proxy_pass http://localhost:8081; # 后端服务地址 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }小程序上线确保小程序后台配置的服务器域名request、uploadFile、downloadFile等都是HTTPS且已备案。提交审核前充分测试所有流程尤其是支付流程如果涉及。审核被拒常见原因类目不符、功能不完整如有下单但无法支付、存在测试数据。确保提交的版本是准备就绪的。5. 问题排查当功能不正常时先看哪里开发过程中问题不可避免。按照以下顺序排查能节省大量时间网络请求问题小程序端打开调试模式看Console里wx.request的返回。如果是fail检查域名是否配置、网络是否通畅。如果是success但code不是200看后端返回的msg。Vue端浏览器F12打开开发者工具看Network标签页。请求是否发出状态码是404、500还是403响应体是什么后端查看SpringBoot控制台日志是否有异常堆栈信息请求是否进入了Controller数据问题数据库直接连上数据库看相关表的数据是否按预期插入或更新。检查字段类型、长度特别是时间字段。Redis如果用了缓存用redis-cli检查对应的key是否存在值是否正确。数据一致性前后端数据格式是否一致例如后端返回的日期是时间戳前端是否按需格式化权限与状态问题登录状态Token是否过期是否在请求头中正确携带接口权限当前用户角色是否有权访问此接口后端拦截器或Spring Security的配置是否正确业务状态订单状态流转是否符合逻辑例如护士试图完成一个状态还是“待接单”的订单后端应该拒绝。性能问题慢查询打开SpringBoot的SQL日志logging.level.org.hibernate.SQLDEBUG检查是否有查询未加索引或循环查询。内存泄漏使用jvisualvm或Arthas监控JVM堆内存看是否有对象无法被回收。前端渲染卡顿检查是否在v-for中使用了复杂计算或一次性渲染数据量过大。可以使用虚拟滚动或分页加载。我个人更建议在项目初期就把日志打好。SpringBoot用Slf4j注解在关键业务节点如订单状态变更、支付回调记录INFO日志在异常处记录ERROR日志。这样无论调试还是线上排查都能快速定位问题根源。这个社区医养结合系统技术栈是成熟的真正的挑战在于对业务逻辑的细致梳理和对数据流转的精准控制。先把主流程的接口和小程序页面跑通再逐步迭代其他功能稳扎稳打才是最快的路径。

相关新闻

高职院校数学建模竞赛获奖秘籍:从人才培养到实战全流程解析

高职院校数学建模竞赛获奖秘籍:从人才培养到实战全流程解析

1. 项目概述:一次竞赛背后的系统性工程看到“河南信息统计职业学院在2022年全国大学生数学建模竞赛中荣获佳绩”这个标题,很多圈外人可能觉得这只是一则普通的院校喜报。但作为一名在职业教育领域摸爬滚打多年的从业者,我深知这短短一行字背后…

2026/10/5 5:24:11 阅读更多 →
Postman接口测试实战:从基础使用到自动化集成

Postman接口测试实战:从基础使用到自动化集成

1. 从零到一:为什么Postman是接口测试的“瑞士军刀”如果你刚接触后端开发、测试,或者正在和前端联调接口,听到“Postman”这个名字的频率,可能比听到同事的名字还高。它不是什么新潮玩意儿,但在处理HTTP API这件事上&…

2026/10/5 15:42:18 阅读更多 →
半导体PE制程工程师:工艺守护者与产线医生的核心职责解析

半导体PE制程工程师:工艺守护者与产线医生的核心职责解析

1. PE制程工程师:半导体制造的“产线医生”在半导体这个精密到纳米级别的行业里,PE(Process Engineer,制程工程师)是一个听起来既专业又有些神秘的角色。很多人可能听说过芯片设计、光刻机,但对PE具体做什么…

2026/10/6 7:40:55 阅读更多 →

最新新闻

AI恋人产品技术拆解:角色扮演对话系统与记忆管理实战

AI恋人产品技术拆解:角色扮演对话系统与记忆管理实战

1. 从“不结婚不恋爱”到“AI恋人氪金”的现象拆解日本年轻人不结婚、不恋爱,却在AI恋人上疯狂氪金——这个现象乍看像社会新闻标题,但落到我们做AI应用开发的人眼里,它其实是一份非常清晰的用户需求说明书。我身边不少做AI社交产品的朋友&am…

2026/10/6 10:58:16 阅读更多 →
2026-2030工控AI落地指南:OPC UA、MCP与数字孪生实战

2026-2030工控AI落地指南:OPC UA、MCP与数字孪生实战

1. 工控AI这五年到底在解决什么问题 先把时间线拉清楚。2026到2030这五年,工控AI要啃的硬骨头,其实不是"让AI多聪明",而是"让AI在车间里活下来"。我在几个非标产线上做过调试,见过太多"实验室里跑得飞起…

2026/10/6 10:58:16 阅读更多 →
UE5蓝图程序化围墙生成器:Spline路径驱动与HISM实时实例化

UE5蓝图程序化围墙生成器:Spline路径驱动与HISM实时实例化

如果你在关卡里手工摆过围墙,一定经历过这种场景:一段几百米的城墙,复制了数百个墙段,刚摆整齐,策划走过来说一声“路线往右挪十米”,于是你默默删掉所有墙段,重新来一遍。这个场景几乎每个做静…

2026/10/6 10:58:16 阅读更多 →
UE5程序化围墙生成器:基于Spline与HISM的蓝图工具实战

UE5程序化围墙生成器:基于Spline与HISM的蓝图工具实战

如果你做过 RTS、塔防或者城市建造类地图,一定体会过手动摆放围墙的折磨:一段一段拖模型、对齐、旋转,稍微改一下走向,整面墙都要全部重来。最近在整理 UE5 程序化生成相关工程时,我重新把围墙系统做成了一个“可拖拽、…

2026/10/6 10:58:16 阅读更多 →
AI嵌入CI/CD流水线:代码审查与安全扫描误报收敛实战

AI嵌入CI/CD流水线:代码审查与安全扫描误报收敛实战

1. 当AI钻进CI/CD流水线,到底在解决什么问题 第一次听到“AI钻进CI/CD流水线”这个说法,我脑子里浮现的画面是:一条高速运转的装配线,每个工位都在拧螺丝、装零件,突然来了个机器人,站在质检工位旁边&#…

2026/10/6 10:58:16 阅读更多 →
GPT-6.1 Sol实测:五分之一价格接近旗舰的降本增效方案

GPT-6.1 Sol实测:五分之一价格接近旗舰的降本增效方案

昨天下午朋友给我发来一条消息,OpenAI 出了 GPT-6.1 Sol,原话是“用五分之一的价格,拿到接近旗舰的能力”。我第一反应是不太信,毕竟“便宜没好货”这五个字在模型领域里印得比谁都深。但作为靠 API 跑业务的人,账单上…

2026/10/6 10:57:15 阅读更多 →

日新闻

杰理AC7916A硬件设计全指南:电源、时钟与射频三大关键

杰理AC7916A硬件设计全指南:电源、时钟与射频三大关键

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 1:01:12 阅读更多 →
探针座选型指南:从需求梳理到验收避坑,稳稳解决半导体测试难题

探针座选型指南:从需求梳理到验收避坑,稳稳解决半导体测试难题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 1:01:36 阅读更多 →
SO-DIMM内存设计指南:DDR3与DDR4引脚、拓扑、布线及调试

SO-DIMM内存设计指南:DDR3与DDR4引脚、拓扑、布线及调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 1:01:44 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 7:15:40 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 5:29:09 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 6:26:51 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 8:21:32 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 4:21:51 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 1:18:13 阅读更多 →