- 博客(126)
- 收藏
- 关注
原创 鸿蒙 ArkTS 实战:Business Card Box 从状态建模到交互闭环完整解
鸿蒙 ArkTS 名片盒应用实战解析 本文以Business Card Box应用为例,详细拆解了基于ArkTS的鸿蒙应用开发全流程。项目采用单页状态驱动模式,核心内容包括: 数据模型:使用interface定义名片数据结构,确保类型安全 状态管理:通过@State管理列表数据、输入内容等响应式状态 业务逻辑:实现新增名片、状态切换、数据统计等核心功能 UI构建:运用@Builder复用组件,包括统计卡片、列表项等UI片段 交互闭环:从数据模型到UI呈现形成完整的状态驱动更新机制 项目展示了ArkTS在状态
2026-07-13 11:17:21
191
原创 鸿蒙 ArkTS 实战:Work Hour Tracker 从状态建模到交互闭环完整解析
摘要 本文深入解析鸿蒙ArkTS应用Work Hour Tracker的开发实践,重点剖析其状态管理与交互闭环设计。该工时记录应用通过单页状态驱动模式实现项目工时统计功能,核心架构包括: 数据模型:使用interface定义结构化数据,确保类型安全 状态管理:采用@State标记响应式变量,包括列表数据、输入状态和筛选条件 业务方法:实现统计计算、新增条目、状态切换等核心逻辑 组件复用:通过@Builder封装可复用的UI组件片段 交互闭环:建立"数据变更→状态更新→UI重绘"的完整链路 项目充分展示了Ar
2026-07-13 11:14:22
198
原创 鸿蒙 ArkTS 实战:Meeting Minutes Assistant 从状态建模到交互闭环完整解析
本文介绍了鸿蒙ArkTS应用Meeting Minutes Assistant的开发过程,重点分析了其数据模型、状态管理、业务逻辑和UI组件化设计。该应用通过interface定义会议待办事项结构,使用@State管理列表、输入和状态,实现新增、切换和统计功能,并通过@Builder复用UI组件。文章强调ArkTS开发的核心在于建立数据、状态与界面的闭环,适合作为轻量级单页状态驱动应用的练习项目。
2026-07-13 11:11:20
195
原创 鸿蒙 ArkTS 实战:Calligraphy Grid 从状态建模到交互闭环完整解析
本文解析了鸿蒙ArkTS小应用Calligraphy Grid的实现过程,重点分析其数据建模、状态管理、交互逻辑与UI构建的完整闭环。文章从项目定位出发,介绍其作为单页状态驱动应用的核心功能,包括书法作品记录与练习统计。通过拆解入口文件Index.ets,详细说明了: 数据模型设计:使用interface定义业务对象结构 状态管理:@State变量驱动UI更新的原理与实践 核心方法:实现新增、切换、统计等业务逻辑 组件复用:通过@Builder优化重复UI布局 项目采用标准的ArkTS开发模式,适合作为组件
2026-07-13 11:08:38
189
原创 鸿蒙 ArkTS 实战:Exam Countdown 从状态建模到交互闭环完整解析
文章摘要 本文深入解析鸿蒙ArkTS小应用Exam Countdown的实现过程,聚焦于状态管理与交互闭环设计。项目通过Interface定义考试任务模型,使用@State管理列表、输入等响应式状态,采用重建数组方式实现状态更新。核心功能包括:统计方法计算待办数量、新增方法验证输入并生成ID、切换方法更新完成状态。通过@Builder复用统计卡片和列表行等UI组件,形成"数据-状态-UI"的完整闭环。文章详细拆解了轻量级ArkTS应用从数据建模到交互实现的完整链路,重点阐述了状态驱动型应用的设计要点,适合作
2026-06-28 22:55:14
130
原创 鸿蒙 ArkTS 实战:Class Schedule Widget 从状态建模到交互闭环完整解析
鸿蒙ArkTS课程表Widget开发解析 本文以Class Schedule Widget为例,详细解析轻量级鸿蒙ArkTS应用开发全流程。项目通过interface定义课程数据模型,使用@State管理列表、输入和开关状态,实现了课程新增、状态切换和统计功能。核心开发要点包括: 状态驱动:采用响应式编程范式,通过重建数组实现状态更新 组件复用:利用@Builder封装统计卡片和列表行等UI片段 交互闭环:从数据模型到UI呈现形成完整业务链路 工程规范:遵循ArkTS最佳实践,保持代码结构清晰 项目适合作为
2026-06-28 22:53:34
212
原创 鸿蒙 ArkTS 实战:Recitation Timer 从状态建模到交互闭环完整解析
文章摘要 本文深入解析了鸿蒙ArkTS小应用"Recitation Timer"的开发过程。该项目是一个专注背诵管理的轻量工具,通过状态驱动实现数据闭环。文章从项目定位入手,详细拆解了工程结构、数据模型设计(使用interface约束数据结构)、状态变量管理(@State的四种类型)、核心业务方法(统计/新增/切换/过滤)和Builder组件复用策略。重点阐述了ArkTS开发中数据结构、状态变化与UI呈现形成稳定闭环的关键理念,并提供了实用的代码示例和最佳实践,为开发者构建轻量级状态驱动应用提供了完整参考。
2026-06-28 22:51:55
165
原创 鸿蒙 ArkTS 实战:Reading Clock 从状态建模到交互闭环完整解析
文章摘要: 本文解析鸿蒙ArkTS轻量应用Reading Clock的开发过程,重点从数据建模到交互闭环的实现。该应用通过卡片、列表和统计组件构建阅读计时功能,适合练习ArkTS组件化开发。核心内容包括:1) 使用interface定义数据模型,确保类型安全;2) 通过@State管理列表、输入框等响应式状态;3) 采用重建数组方式更新状态,驱动UI刷新;4) 利用@Builder复用统计卡片、列表行等UI组件。项目展现了ArkTS页面开发的核心逻辑——建立数据、状态与UI的稳定闭环,为轻量级鸿蒙应用开发提
2026-06-28 22:50:13
215
原创 鸿蒙 ArkTS 实战:Mistake Review Book 从状态建模到交互闭环完整解析
本文解析了鸿蒙ArkTS轻量应用Mistake Review Book的实现过程。文章从项目定位出发,重点分析了数据模型设计、状态管理、核心业务方法和UI组件复用等关键技术点。项目采用单页状态驱动架构,通过interface定义数据结构,使用@State管理响应式状态,运用Builder实现组件复用,形成完整的交互闭环。该案例展示了如何在ArkTS中构建一个包含列表操作、状态统计和用户输入功能的典型轻量级应用,适合作为ArkTS组件化开发的实践参考。
2026-06-28 22:48:33
224
原创 鸿蒙 ArkTS 实战:Hotline Directory 从状态建模到交互闭环完整解析
本文解析了一个轻量级鸿蒙ArkTS应用"Hotline Directory"的完整开发过程。该项目实现了家庭常用热线号码的分类管理功能,主要技术点包括: 数据建模:通过interface定义热线条目数据结构 状态管理:使用@State管理列表、输入框和选择状态 核心方法:实现新增、切换、统计等业务逻辑 组件复用:采用@Builder封装可复用的UI组件 交互闭环:建立数据-状态-UI的完整响应式流程 文章通过分析项目入口文件Index.ets,展示了如何从静态数据构建成可交互的ArkTS应用,适合作为Ark
2026-06-25 23:42:39
296
原创 鸿蒙 ArkTS 实战:Lost Found Board 从状态建模到交互闭环完整解析
文章摘要:本文以鸿蒙ArkTS开发的Lost Found Board应用为例,解析轻量工具应用从状态建模到交互闭环的全流程。该项目通过单页状态驱动管理失物信息,核心包含:1) 基于interface定义数据模型;2) 使用@State管理列表、输入等响应式状态;3) 实现新增/切换/统计等业务方法;4) 采用@Builder复用UI组件。重点阐述了ArkTS开发中数据结构、状态更新与UI呈现的闭环设计模式,展示了如何通过重建数组触发渲染更新,以及Builder组件在统计卡片、列表行等场景的复用价值。项目适合
2026-06-25 23:40:36
147
原创 鸿蒙 ArkTS 实战:Noise Recorder 从状态建模到交互闭环完整解析
本文解析了鸿蒙ArkTS轻量应用Noise Recorder的开发全流程,重点包括: 定位与功能:面向家庭健康监测的单页状态驱动应用,实现噪声记录与统计 技术架构:基于ArkTS状态管理,通过@State驱动UI刷新,采用Builder组件复用 核心实现: 数据模型:使用interface规范数据结构 状态管理:列表/输入/开关状态分类管理 关键方法:统计/新增/切换逻辑实现业务闭环 组件复用:通过@Builder抽象卡片/列表等UI模块 开发要点:强调数据模型、状态更新与UI呈现的闭环设计,适合作为Ark
2026-06-25 23:37:36
150
原创 鸿蒙 ArkTS 实战:Garden Care Album 从状态建模到交互闭环完整解析
本文解析了鸿蒙ArkTS小应用"Garden Care Album"的技术实现,该项目专注于家庭绿植养护管理。文章从项目定位、工程结构、数据模型设计、状态管理、核心业务方法和组件复用六个维度进行拆解,重点阐述了如何通过interface定义数据结构、@State管理响应式状态、数组重建实现状态更新等关键技术点。该项目采用典型的单页状态驱动架构,展示了ArkTS开发中数据模型、状态变化与UI呈现的完整闭环逻辑,特别适合作为鸿蒙应用开发的入门实践案例。通过Builder组件复用和声明式UI构建,实现了绿植记录、
2026-06-25 23:35:59
155
原创 鸿蒙 ArkTS 实战:Pet Feeding Clock 从状态建模到交互闭环完整解析
本文解析了鸿蒙ArkTS应用"Pet Feeding Clock"的完整开发过程。该项目通过状态驱动的单页应用实现对宠物喂食记录的管理,主要特点包括: 采用interface定义数据结构,确保类型安全 使用@State管理核心状态(列表数据、输入内容等) 通过重建数组实现状态更新,触发UI刷新 利用@Builder复用UI组件,保持界面一致性 实现完整功能闭环:新增记录、状态切换、数据统计 该案例展示了如何将业务数据、状态管理和UI呈现有机结合,适合作为ArkTS组件化开发的入门练习项目。项目体现了鸿蒙应用
2026-06-25 23:33:54
187
原创 Flutter 实战:hangman_game 猜词游戏的本地词库、字母键盘与鸿蒙适配解析
本文介绍了基于Flutter开发的本地猜词游戏hangman_game的实现细节。该游戏从内置英文词库随机选词,玩家通过点击字母键盘进行猜测,猜中字母显示对应位置,猜错则增加错误次数并由CustomPainter绘制游戏图形。文章重点分析了项目定位、核心功能、技术实现(包括状态管理、随机选词、字母键盘交互、胜负判断和自定义绘制)以及鸿蒙跨端适配要点。这个轻量级项目结构清晰,适合作为Flutter入门学习和跨平台开发实践的案例参考。
2026-06-18 11:33:09
300
原创 Flutter 实战:random_team_generator 随机分队器的名单解析、均匀分配与鸿蒙适配解析
本文介绍了一个基于Flutter开发的本地随机分队工具random_team_generator的项目解析。该工具可将输入的参与者名单随机均匀分配到指定数量的队伍中,适用于线下活动、课堂分组等场景。文章从项目定位、功能边界、核心文件和技术要点入手,详细分析了文本输入解析(支持换行、逗号、分号分隔)、状态管理、随机打乱算法(shuffle())和取模均匀分配的实现方案。同时介绍了主题配置、多页面切换、状态流转及跨端适配注意事项。该项目没有复杂依赖,主要聚焦Flutter基础开发能力,包括表单处理、列表布局和条
2026-06-18 11:28:52
275
原创 Flutter 实战:password_strength 密码强度检测的规则评分、可见性切换与鸿蒙适配解析
Flutter密码强度检测工具password_strength通过本地规则评估密码安全性,主要特点包括: 核心功能 实时检测密码强度(Weak/Medium/Strong) 提供视觉反馈:颜色标签、进度条、图标 显示未达标的规则项和改进建议 技术实现 基于Flutter StatefulWidget管理状态 使用TextEditingController处理输入 通过正则表达式验证密码规则 采用本地评分算法(长度、大小写、数字、特殊字符) 项目特点 纯前端实现,无后端交互 轻量级依赖(仅Flutter S
2026-06-18 11:25:27
380
原创 Flutter 实战:weather 天气应用的城市搜索、本地天气数据与鸿蒙适配解析
Flutter天气应用开发实战解析 本文介绍了基于Flutter实现的本地天气演示应用weather,重点分析了其核心功能实现: 数据结构:使用List<Map>存储城市天气数据,包含温度、湿度、风速等指标 搜索功能:通过TextEditingController实现城市实时过滤 城市切换:点击列表项更新当前城市卡片数据 视觉设计:根据天气类型动态映射颜色和图标 布局实现:主卡片展示温度,辅助卡片显示湿度和风速 跨端适配:特别关注鸿蒙平台的兼容性验证 项目特色: 完全本地数据驱动,无需网络请求 简洁的Mat
2026-06-18 11:17:52
380
原创 Flutter 实战:loan_calculator 贷款计算器的等额本息公式、实时重算与鸿蒙适配解析
本文介绍了基于Flutter实现的贷款计算器loan_calculator,重点解析其核心功能实现与技术要点。该应用支持用户输入贷款本金、年利率和年限,实时计算并展示等额本息月供、总还款和总利息,同时提供前5年简化还款表。 文章详细分析了TextEditingController输入管理、等额本息公式计算(包括手写幂运算实现)、实时重算机制、结果卡片布局设计等关键技术点。项目采用纯Dart实现核心计算逻辑,通过tryParse处理异常输入,并包含完整的Controller生命周期管理。此外还探讨了鸿蒙平台的
2026-06-18 11:13:27
324
原创 springboot整合mybatis-plus(保姆教学) 及搭建项目
一、Spring整合MyBatis。测试一下看看项目是否能运行起来。二:整合mybatis步骤。
2026-05-03 21:35:30
47
原创 Spring Boot3.3.X整合Mybatis-Plus
AttendanceMapper的deleteById方法是无效的绑定语句,也就是,无法识别到mybatis-plus自带的删除方法,但是可以识别自定义的mapper语句,能正常进行增删改查,也就是原mybatis的写法呗,但是,我想快速实现CRUD啊!注意括号里面的内容需要根据自己的包结构来配置,com.dormitory.dormitory_backend是我的包结构,主要看java,实在不懂,那就任意打开一个XXXmapper.java文件,看其包结构,框起来的一整个复制粘贴上去就可以了。
2026-05-03 20:01:53
369
原创 PageHelper 解析及实现原理
面向关系型数据库的 SQL 查询和数据导出时,如果数据条数非常大,直接将所有数据一次性查出或者导出显然是不可行的。这时候就需要进行分页查询或分页导出,将查询或导出的数据按照指定大小分页加载或写入,从而提高查询或导出的效率。而分页查询或分页导出的实现过程比较繁琐,需要考虑很多细节问题,容易出错。因此,出现了一些支持分页查询或分页导出的插件或工具类,例如 MyBatis-Plus 的分页插件 PageHelper。PageHelper是Mybatis-Plus中的一个插件,主要用于实现数据库的分页查询功能。
2026-05-03 18:30:51
253
原创 MySql中的事务、MySql事务详解、MySql隔离级别
思考:我去银行给朋友汇款,我卡上有100元,朋友卡上50元,我给朋友转账50元,如果我的钱刚扣,而朋友的钱又没加时,网线断了, 怎么办(Transaction)是数据库管理系统(DBMS)中的一个核心概念,它确保了一系列数据库操作要么全部成功,要么全部失败,从而维护数据库的完整性和一致性。MySQL在5.5版本开始,就将InnoDB引擎作为默认存储引擎。由于Mysql中的事务是存储引擎实现,而且只有InnoDB支持事务。
2026-05-03 17:00:06
356
原创 java进阶提高学什么用_阳光沙滩
对着上面这个列表吧,面向对象往后的应该算是进阶了,知道不难,理解是需要时间的。当然不是,分包也是封装的一种,多态的理解,这些主要是以后设计的时候用得上,怎么样写,扩展性好…所以,你要先知道的是编程语言只是工具,实现你想法的工具,也就是说,java编程语言是工具。好了,回到你的问题上。对于初学者来说,先知道怎么用就够了,至于设计模式,原则,一些思想相关的,后期再去学习吧。java只是招式,思想才是内容,先练招式吧,有了一定的招式,同时修炼内容。基本概念,比如说,变量,常量,类,编译,环境搭建之类的。
2026-05-03 15:27:37
24
原创 CentOS7安装Mysql5.7(ARM64架构)
看到 3、4、5 状态为开或者为 on 则表示成功。gcc 各版本下载地址: https://ftp.gnu.org/gnu/gcc/输入密码(上面操作 bin/mysqld --initialize xxx 生成)3.下载 GCC 源码,选择合适的版本,本文以 gcc-13.2.0 为例。解压安装包 mysql-5.7.27-aarch64.tar.gz。修改 mysql 用户的登陆密码(这里根据需要设置,可以略过)的版本太老,里面的动态链接库没有。将解压后的目录改名为 mysql。
2026-05-02 13:59:03
398
原创 springcloud-eureka与gateway简易搭建
启动服务后,可通过eureka提供的web控制台查看服务注册状态。启动服务,可以看到已经成功注册到eureka上。至此eureka已经部署完成。
2026-04-21 09:57:47
157
原创 Spring Boot应用关闭分析
本文挖掘了Spring Boot的关闭方式,并列举了关闭方式,从原理、源码的角度阐述了Spring Boot的关闭代码及扩展点。同时,额外说明了一些系统特性 和原理,比如,程序退出码和信号机制。
2026-04-21 07:36:09
316
原创 node.js+npm的环境配置以及添加镜像(保姆级教程)
双击安装包,点击【Next】,勾选使用许可协议,点击【Next】,选择安装位置(可根据个人情况更换路径,例如在 D:App odejs)我上面点了Add to PATH,在安装的时候就自动配置好了,如果不行再根据这个方法手动配置一下环境变量。4.5在这里填入nodejs的安装地址,比如:D:App odejs,之后点击【确定】不选中,直接点击【Next】按钮,之后点击【Install】安装。4.1进入环境变量,编辑【系统变量】下的变量【Path】4.3选中系统变量中的path,点击【编辑】
2026-04-21 05:20:01
59
原创 MySQL 的 INSERT(插入数据)详解
如果你要插入的值涵盖了表中的所有列,可以省略列名部分。但请注意,值的顺序必须与表中列的顺序相同。无论是基础的单行插入,还是高级的插入否则更新和数据迁移。语句非常灵活,支持多种语法形式,可以根据具体需求选择合适的用法。如果你希望在插入数据时忽略已经存在的记录(即不抛出错误),可以使用。如果你希望在插入数据时遇到主键或唯一键冲突时更新现有记录,可以使用。语法来插入数据,这种方式更适用于需要明确指定列名和值的场景。语法,适用于插入单行数据。子句中指定多组值,从而一次性插入多行数据。语句的详细语法和使用示例。
2026-04-21 03:03:10
214
原创 Failed to restart nginx.service Unit nginx.service not found
你可以选择手动启动和停止 Nginx,或者创建一个 systemd 服务单元文件来管理 Nginx 服务。当你遇到 Failed to restart nginx.service: Unit nginx.service not found 错误时,这意味着系统无法找到 Nginx 的服务单元文件。这通常是因为 Nginx 没有通过 systemd 管理,或者 Nginx 没有正确安装。如果你希望使用 systemd 来管理 Nginx,可以创建一个服务单元文件。首先,确保 Nginx 已经正确安装。
2026-04-21 00:46:05
54
原创 SQL进阶——JOIN操作详解
如果某个表中的行在另一个表中没有匹配的行,那么这些行将不会出现在查询结果中。在实际开发中,我们经常需要执行更复杂的查询,例如多表连接查询和子查询。与普通的子查询不同,关联子查询是指在子查询中使用主查询中的列作为条件。在每一行中,子查询都会使用不同的主查询行数据。子查询的结果通常用于限制主查询的结果集,或者作为表的输入。查询所有的员工和部门信息,不论员工是否有部门,或者部门是否有员工。有多种类型,不同的连接方式根据连接条件的不同展现出不同的结果。表的连接中,我们查询所有部门信息,即使某些部门没有员工。
2026-04-19 18:57:32
159
原创 springboot与springcloud以及springcloudalibaba版本对照
由于 Spring Boot 2.4+ 和以下版本之间变化较大,目前企业级客户老项目相关 Spring Boot 版本仍停留在 Spring Boot 2.4 以下,为了同时满足存量用户和新用户不同需求,社区以 Spring Boot 2.4 为分界线,同时维护 2.2.x 和 2021.x 两个分支迭代。为了规避相关构建过程中的依赖冲突问题,我们建议可以通过 云原生应用脚手架 进行项目创建。2.0.4.RELEASE(停止维护,建议升级)1.5.1.RELEASE(停止维护,建议升级)
2026-04-19 16:07:23
174
原创 Redis简介、常用命令及优化
关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。SQL 语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。主流的关系型数据库包括 Oracle、MySQL、SQL Server、Microsoft Access、DB2 等。① 易于维护:都是使用表结构,格式一致② 使用方便:SQL语言通用,可用于复杂查询③ 支持复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
2026-04-19 13:28:44
185
原创 Linux安装Redis以及Redis三种启动方式
也就是上面我们说的,窗口要一直打开。后台进程启动搞完之后,以后开启redis后,就可以去进行其他操作了(在src目录下 ./redis-server /opt/soft/redis-4.0.6/redis.conf启动redis)。此时Redis服务已经可以成功启动了,但是小问题来了,界面一直停留在Redis服务窗口中,按ctrl+c虽然可以屏蔽服务窗口,但是也会结束Redis服务。./redis-server代表要启动redis,后面一串代码进入redis.conf来开启redis,就是路径。
2026-04-19 02:10:11
229
原创 超详细MySQL,含下载安装配置环境变量,基础代码
1.这一步和MySQL5.X版本的有很的大区别,在这一步我们不多进行解释,直接选择“Custom(自定义)”,方便我们把MySQL安装到非系统盘。安装完成后会在系统的开始菜单下出现左图所示的程序,随便打开一个,输入之前设置的密码。查看在搜索界面已经下载的root登录界面点击进入MySQL。输入密码后,出现右图的界面,表示MySQL正常。注意:创建表之前要打开库,要在库的目录下对表操作。然后输入“exit”,退出MySQL。注意一定要选第二个!一直点击确定即可完成配置环境变量。6.设置root密码。
2026-04-18 08:05:55
210
原创 启动springboot项目时报错Web server failed to start. Port 8080 was already in use
在Windows上,您可以使用命令提示符(cmd)来检查端口的使用情况。点击菜单栏 -> 右键 - > 任务管理器 -> 详细信息,根据PID排序找到PID为10728的进程,选择后点击结束任务。【1】关闭该进程的方法一:如果查找到了占用端口,可以通过PID,去任务管理器找到对应的进程,然后暴力地直接杀了这个进程。报错原因:这个错误表明端口1717已经被其他程序占用,导致我们的的Web服务器无法在这个端口上启动。找到对应的PID后,我们可以使用任务管理器来结束该进程,或者在CMD中使用。
2026-04-18 05:43:01
187
原创 【MySQL数据库】Ubuntu下的mysql
所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个用户建立的数据库,一般开发人员会针对每一个应用创建一个数据库,而为保存应用中实体的数据,一般会在数据库中创建多个表结构,以保存程序中实体的数据。输入“ help ” 或 “ h ” 获取MYSQL基础命令帮助,例如:clear清除当前输入的指令,quit退出mysql等。:这是MySQL服务器的主要配置段,大部分与服务相关的设置都在这里,包括数据存储路径、缓冲池大小、线程数、日志设置等。在Ubuntu系统下,使用。
2026-04-18 03:18:23
182
原创 SpringBoot集成Flink-CDC,实现对数据库数据的监听
CDC 是(变更数据获取)的简称。核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入、 更新以及删除等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。/*** 反序列化数据,转为变更JSON对象*/@Override//5.获取操作类型 CREATE UPDATE DELETE2 : 3;//7.输出数据/*** 从元数据获取出变更之前或之后的数据*/= null) {
2026-04-17 23:56:42
416
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅