# leadnews **Repository Path**: hea7en/leadnews ## Basic Information - **Project Name**: leadnews - **Description**: 头条新闻项目,前后端分离微服务架构 - **Primary Language**: Java - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-08-17 - **Last Updated**: 2025-04-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LeadNews - 新闻头条项目 [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![JDK](https://img.shields.io/badge/JDK-1.8-green.svg)](#) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-2.3.9.RELEASE-brightgreen.svg)](#) [![Spring Cloud](https://img.shields.io/badge/Spring%20Cloud-Hoxton.SR8-brightgreen.svg)](#) ## 目录 - [项目介绍](#项目介绍) - [项目架构](#项目架构) - [技术栈详解](#技术栈详解) - [核心功能实现](#核心功能实现) - [环境搭建](#环境搭建) - [项目特点](#项目特点) - [开发规范](#开发规范) - [部署说明](#部署说明) - [监控运维](#监控运维) - [接口文档](#接口文档) - [常见问题](#常见问题) - [版本历史](#版本历史) - [后续规划](#后续规划) - [贡献指南](#贡献指南) - [联系方式](#联系方式) - [许可证](#许可证) ## 项目介绍 LeadNews是一个基于Spring Cloud微服务架构的新闻头条类项目,提供包括文章发布、用户管理等功能的完整新闻平台解决方案。项目采用前后端分离设计,后端采用微服务架构,前端采用Vue.js框架。 ### 项目背景 随着移动互联网的发展,新闻资讯类应用已成为用户获取信息的重要渠道。本项目旨在提供一个功能完善、架构先进的新闻头条平台,满足用户对新闻资讯的需求,同时为开发者提供一个学习微服务架构的实践项目。 ### 目标用户 - 普通用户:浏览新闻、关注作者、评论互动 - 内容创作者:发布文章、管理内容 - 平台管理员:内容审核、用户管理 ### 应用场景 - 新闻资讯浏览 - 内容创作与发布 - 用户互动与社交 - 个性化推荐 ## 项目架构 ### 整体架构 项目采用微服务架构,主要包含以下模块: ```ascii leadnews ├── leadnews-basic // 基础服务模块 │ └── file-upload-starter // 文件上传starter ├── leadnews-common // 通用模块 ├── leadnews-feign-api // Feign接口模块 ├── leadnews-gateway // 网关服务模块 │ └── leadnews-app-gateway // APP网关 ├── leadnews-model // 数据模型模块 ├── leadnews-service // 业务服务模块 │ ├── leadnews-article // 文章微服务 │ └── leadnews-user // 用户微服务 ├── leadnews-test // 测试模块 │ ├── freemarker-demo // Freemarker模板引擎测试 │ └── minio-demo // MinIO对象存储测试 └── leadnews-utils // 工具类模块 ``` ### 模块说明 #### 1. leadnews-basic 基础服务模块,提供项目的基础功能支持。 - **file-upload-starter**: - 文件上传的自定义starter - 支持本地存储和MinIO对象存储 - 提供统一的文件上传接口 #### 2. leadnews-common 通用模块,包含项目共用的工具类和配置。 - Swagger配置 - 统一异常处理 - 通用响应实体 - 常量定义 - 工具类 #### 3. leadnews-model 数据模型模块,定义所有微服务使用的实体类。 - **文章相关**: - `ApArticle`: 文章主体信息 - `ApArticleContent`: 文章内容 - `ApArticleConfig`: 文章配置信息 - **用户相关**: - 用户信息实体 - 认证信息实体 - **其他**: - DTO对象 - 枚举类型 - 通用响应对象 #### 4. leadnews-service 业务服务模块,包含所有业务微服务。 ##### 4.1 leadnews-article(文章服务) - **功能特点**: - 文章的CRUD操作 - 文章页面静态化 - 文章搜索 - 文章推荐 - **核心类**: - `ArticleController`: 文章相关接口 - `ArticleService`: 文章业务逻辑 - `ArticleMapper`: 数据库操作 ##### 4.2 leadnews-user(用户服务) - **功能特点**: - 用户注册登录 - 用户信息管理 - 用户关注关系 - **核心类**: - 用户认证 - 用户信息CRUD - 用户关系管理 #### 5. leadnews-gateway 网关服务模块,负责请求的统一处理和路由。 - 统一鉴权 - 请求过滤 - 负载均衡 - 路由转发 - 限流控制 #### 6. leadnews-feign-api Feign接口模块,定义服务间调用的接口。 - 文章服务接口 - 用户服务接口 - 其他微服务接口 #### 7. leadnews-utils 工具类模块,提供各种通用工具类。 - 文件处理工具 - JSON工具 - 加密工具 - 日期工具 - 分片桶字段算法 #### 8. leadnews-test 测试模块,包含各种测试用例和demo。 - Freemarker模板测试 - MinIO存储测试 - 其他功能测试 ## 技术栈详解 ### 架构图 ``` +------------------+ +------------------+ +------------------+ | | | | | | | 前端应用 | | APP 网关 | | 微服务集群 | | (Vue.js) |---->| (Gateway) |---->| (Spring Cloud) | | | | | | | +------------------+ +------------------+ +------------------+ | | v +------------------+ +------------------+ +------------------+ | | | | | | | 对象存储 | | 数据库 | | 服务注册/配置 | | (MinIO) |<----| (MySQL) |<----| (Nacos) | | | | | | | +------------------+ +------------------+ +------------------+ ``` ### 后端技术 #### 微服务框架 - **Spring Boot** (2.3.9.RELEASE): 应用开发框架 - **Spring Cloud** (Hoxton.SR8): 微服务基础框架 - **Spring Cloud Gateway**: API网关,负责请求路由与过滤 - **Spring Cloud OpenFeign**: 声明式服务调用客户端 - **Spring Cloud Alibaba** (2.2.5.RELEASE): 阿里巴巴微服务生态系统 - **Nacos** (2.0.0): 服务注册与配置中心 #### 数据存储 - **MySQL** (5.7+): 关系型数据库 - **MyBatis-Plus** (3.4.1): 增强版MyBatis ORM框架 - **Redis** (5.0+): 缓存与数据结构存储 - **MinIO**: 分布式对象存储,用于存储文章静态页面和媒体文件 #### 模板引擎 - **FreeMarker**: 实现文章页面静态化,生成HTML页面 #### 消息中间件 - **Kafka**: 分布式消息队列,用于异步通信和事件驱动 #### API文档与测试 - **Swagger2**: RESTful API文档生成 - **Knife4j** (2.0.8): 基于Swagger的增强文档工具 - **JUnit**: 单元测试框架 #### 工具库 - **FastJSON**: JSON处理库 - **HanLP**: 自然语言处理库,用于文章分析 - **JWT**: JSON Web Token,用于用户认证 - **Apache Commons**: 常用工具类库 - commons-lang3: 字符串处理等工具 - commons-pool2: 对象池管理 - commons-codec: 编码解码工具 ### 前端技术 - **Vue.js**: 渲染框架 - **Vant**: 移动端UI组件库 - **Axios**: HTTP客户端 - **Webpack**: 模块打包工具 ### 数据模型设计 #### 文章相关表 - ap_article: 文章主表 - ap_article_content: 文章内容表 - ap_article_config: 文章配置表 #### 用户相关表 - ap_user: 用户信息表 - ap_user_follow: 用户关注表 ## 核心功能实现 ### 1. 文章服务 #### 1.1 文章发布流程 1. 接收文章内容 2. 使用FreeMarker生成静态页面 3. 上传到MinIO存储 4. 保存文章信息到数据库 #### 1.2 文章列表加载 - 支持上拉加载更多 - 支持下拉加载最新 - 基于用户兴趣的个性化推荐 ### 2. 用户服务 #### 2.1 用户认证 - JWT token认证 - 统一的用户鉴权 #### 2.2 用户关注 - 关注/取关功能 - 关注列表查询 ## 环境搭建 ### 1. 开发环境要求 | 软件 | 版本 | 说明 | |---------|------|------| | JDK | 1.8+ | Java开发工具包 | | Maven | 3.6+ | 项目构建工具 | | MySQL | 5.7+ | 关系型数据库 | | Nacos | 2.0.0 | 服务注册与配置中心 | | MinIO | 最新版 | 对象存储服务 | | Redis | 5.0+ | 缓存服务 | | IDE | IntelliJ IDEA | 推荐的集成开发环境 | ### 2. 环境搭建步骤 #### 2.1 安装并配置JDK ```bash # 下载并安装JDK 8 # 配置环境变量 JAVA_HOME=/path/to/jdk PATH=$JAVA_HOME/bin:$PATH # 验证安装 java -version ``` #### 2.2 安装并配置Maven ```bash # 下载并解压Maven wget https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz tar -xvf apache-maven-3.8.6-bin.tar.gz # 配置环境变量 MAVEN_HOME=/path/to/maven PATH=$MAVEN_HOME/bin:$PATH # 验证安装 mvn -v ``` #### 2.3 安装并启动Nacos ```bash # 下载并解压Nacos wget https://github.com/alibaba/nacos/releases/download/2.0.0/nacos-server-2.0.0.tar.gz tar -xvf nacos-server-2.0.0.tar.gz # 启动Nacos cd nacos/bin ./startup.sh -m standalone # 验证Nacos是否启动成功 curl http://localhost:8848/nacos/ ``` #### 2.4 安装并启动MinIO ```bash # Linux/MacOS wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio ./minio server /data # Windows # 下载 MinIO Server # 创建数据目录 mkdir D:\minio\data # 启动MinIO minio.exe server D:\minio\data ``` #### 2.5 安装并启动Redis ```bash # Linux/MacOS # 安装Redis # Ubuntu apt-get install redis-server # CentOS yum install redis # 启动Redis redis-server # Windows # 下载 Windows版Redis # 启动Redis redis-server.exe ``` #### 2.6 初始化数据库 ```bash # 创建数据库 mysql -uroot -p CREATE DATABASE leadnews DEFAULT CHARACTER SET utf8mb4; # 导入数据 mysql -uroot -p leadnews < init.sql ``` #### 2.7 配置项目 1. 克隆项目 ```bash git clone https://github.com/yourusername/leadnews.git cd leadnews ``` 2. 修改配置文件 为每个服务模块的`bootstrap.yaml`文件修改相应配置: ```yaml spring: cloud: nacos: server-addr: localhost:8848 # Nacos服务地址 discovery: namespace: news_dev # 命名空间 config: namespace: news_dev file-extension: yaml ``` 3. 编译项目 ```bash mvn clean package -DskipTests ``` ### 3. 服务启动顺序 1. 启动外部依赖服务 - Nacos注册中心 - MySQL数据库 - Redis缓存 - MinIO对象存储 2. 启动微服务(按顺序) - Gateway网关服务 (`leadnews-app-gateway`) - User用户服务 (`leadnews-user`) - Article文章服务 (`leadnews-article`) - 其他业务服务 3. 启动命令示例 ```bash # 启动网关服务 java -jar leadnews-gateway/leadnews-app-gateway/target/leadnews-app-gateway-1.0-SNAPSHOT.jar # 启动用户服务 java -jar leadnews-service/leadnews-user/target/leadnews-user-1.0-SNAPSHOT.jar # 启动文章服务 java -jar leadnews-service/leadnews-article/target/leadnews-article-1.0-SNAPSHOT.jar ``` ### 4. 验证环境 1. 检查Nacos控制台中的服务列表:`http://localhost:8848/nacos` 2. 访问接口文档:`http://localhost:51601/doc.html` 3. 测试用户服务接口:`http://localhost:51601/user/api/v1/login` ## 项目特点 - **微服务架构**: 服务解耦,便于扩展 - **统一网关**: 统一的接入点和鉴权 - **文章处理**: - 文章页面静态化 - MinIO分布式存储 - **接口文档**: Swagger + Knife4j自动生成 - **异常处理**: 统一的异常处理机制 - **权限控制**: 完善的用户权限控制 ## 开发规范 ### 1. 代码规范 - 遵循阿里巴巴Java开发规范 - 统一的代码格式化配置 - 规范的命名约定 ### 2. 接口规范 - RESTful API设计规范 - 统一的响应格式 - 详细的接口文档 ### 3. 提交规范 - 规范的Git提交信息 - 分支管理策略 ## 部署说明 ### 1. 开发环境部署 #### 1.1 构建项目 ```bash # 清理并打包所有模块 mvn clean package -DskipTests # 或者打包单个模块 cd leadnews-service/leadnews-user mvn clean package -DskipTests ``` #### 1.2 运行服务 ```bash # 运行用户服务 java -jar leadnews-service/leadnews-user/target/leadnews-user-1.0-SNAPSHOT.jar # 指定配置文件运行 java -jar leadnews-service/leadnews-user/target/leadnews-user-1.0-SNAPSHOT.jar --spring.config.location=./config/application.yml # 指定配置参数运行 java -jar leadnews-service/leadnews-user/target/leadnews-user-1.0-SNAPSHOT.jar --server.port=8090 --spring.datasource.url=jdbc:mysql://localhost:3306/leadnews ``` #### 1.3 使用IDE运行 1. 在IntelliJ IDEA中打开项目 2. 运行各个服务的启动类(如`UserApplication`、`ArticleApplication`等) ### 2. 生产环境部署 #### 2.1 Docker容器化部署 1. 创建Dockerfile ```dockerfile # 基础镜像 FROM openjdk:8-jdk-alpine # 工作目录 WORKDIR /app # 添加JAR文件 ADD target/leadnews-user-1.0-SNAPSHOT.jar app.jar # 暴露端口 EXPOSE 51801 # 启动命令 ENTRYPOINT ["java", "-jar", "app.jar"] ``` 2. 构建镜像 ```bash docker build -t leadnews/user-service:1.0 . ``` 3. 运行容器 ```bash docker run -d -p 51801:51801 --name leadnews-user leadnews/user-service:1.0 ``` #### 2.2 Docker Compose部署 1. 创建docker-compose.yml文件 ```yaml version: '3' services: nacos: image: nacos/nacos-server:2.0.0 container_name: nacos environment: - MODE=standalone ports: - "8848:8848" networks: - leadnews-net mysql: image: mysql:5.7 container_name: mysql environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=leadnews ports: - "3306:3306" volumes: - ./mysql/data:/var/lib/mysql - ./mysql/init:/docker-entrypoint-initdb.d/ networks: - leadnews-net redis: image: redis:5.0 container_name: redis ports: - "6379:6379" networks: - leadnews-net minio: image: minio/minio container_name: minio command: server /data ports: - "9000:9000" environment: - MINIO_ACCESS_KEY=minioadmin - MINIO_SECRET_KEY=minioadmin volumes: - ./minio/data:/data networks: - leadnews-net gateway: image: leadnews/gateway:1.0 container_name: leadnews-gateway ports: - "51601:51601" depends_on: - nacos networks: - leadnews-net user-service: image: leadnews/user-service:1.0 container_name: leadnews-user ports: - "51801:51801" depends_on: - nacos - mysql - redis networks: - leadnews-net article-service: image: leadnews/article-service:1.0 container_name: leadnews-article ports: - "51802:51802" depends_on: - nacos - mysql - redis - minio networks: - leadnews-net networks: leadnews-net: driver: bridge ``` 2. 启动服务 ```bash docker-compose up -d ``` #### 2.3 配置文件外部化 在生产环境中,建议将配置文件与应用分离,便于配置的灵活管理: 1. 将配置文件存储在Nacos配置中心 2. 或者使用外部配置文件,在启动时指定配置文件路径 ```bash java -jar app.jar --spring.config.location=file:/path/to/config/ ``` #### 2.4 日志收集方案 在生产环境中,建议使用ELK(Elasticsearch + Logstash + Kibana)或EFK(Elasticsearch + Fluentd + Kibana)栈来收集和分析日志。 1. 配置logback.xml以输出日志到指定位置 2. 使用Filebeat或Logstash收集日志 3. 将日志存储到Elasticsearch 4. 使用Kibana进行日志可视化和分析 ## 监控运维 - 服务监控 - 日志收集 - 性能监控 - 告警机制 ## 接口文档 ### 文档访问地址 项目使用Knife4j增强版Swagger文档,启动服务后可通过以下地址访问: - **网关聚合文档**: http://localhost:51601/doc.html - **用户服务文档**: http://localhost:51801/doc.html - **文章服务文档**: http://localhost:51802/doc.html ### 主要API概览 #### 用户服务API | 接口名称 | 请求方式 | 请求路径 | 描述 | |---------|------|------|------| | 用户登录 | POST | /api/v1/login | 用户登录认证 | | 用户注册 | POST | /api/v1/register | 新用户注册 | | 获取用户信息 | GET | /api/v1/user/{id} | 获取指定用户信息 | | 关注用户 | POST | /api/v1/user/follow | 关注指定用户 | | 取消关注 | POST | /api/v1/user/unfollow | 取消关注指定用户 | | 获取关注列表 | GET | /api/v1/user/follows | 获取当前用户的关注列表 | #### 文章服务API | 接口名称 | 请求方式 | 请求路径 | 描述 | |---------|------|------|------| | 文章列表 | GET | /api/v1/articles | 获取文章列表 | | 文章详情 | GET | /api/v1/article/{id} | 获取文章详情 | | 发布文章 | POST | /api/v1/article | 发布新文章 | | 更新文章 | PUT | /api/v1/article/{id} | 更新文章内容 | | 删除文章 | DELETE | /api/v1/article/{id} | 删除指定文章 | ### API调用示例 #### 用户登录 **请求**: ```bash curl -X POST "http://localhost:51601/user/api/v1/login" \ -H "Content-Type: application/json" \ -d '{"phone":"13800138000","password":"123456"}' ``` **响应**: ```json { "code": 200, "message": "操作成功", "data": { "token": "eyJhbGciOiJIUzI1NiJ9...", "user": { "id": 1, "name": "测试用户", "phone": "13800138000" } } } ``` #### 获取文章列表 **请求**: ```bash curl -X GET "http://localhost:51601/article/api/v1/articles?page=1&size=10" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9..." ``` **响应**: ```json { "code": 200, "message": "操作成功", "data": { "total": 100, "size": 10, "current": 1, "records": [ { "id": 1, "title": "测试文章", "authorId": 1, "authorName": "测试用户", "publishTime": "2024-01-01 12:00:00", "layout": 1, "images": ["http://localhost:9000/my-bucket/images/1.jpg"], "staticUrl": "http://localhost:9000/my-bucket/html/1.html" } ] } } ``` ## 常见问题 ### 1. 环境配置问题 #### 1.1 服务注册失败 **问题现象**:服务启动后无法注册到Nacos。 **解决方案**: - 检查Nacos服务是否正常运行:`curl http://localhost:8848/nacos` - 检查服务配置中的Nacos地址是否正确 - 检查网络连接是否正常,特别是在Docker环境中 - 检查服务的namespace配置是否与Nacos中的一致 ```bash # 查看Nacos日志 cat nacos/logs/nacos.log # 查看服务日志 cat logs/leadnews-user.log ``` #### 1.2 数据库连接失败 **问题现象**:服务启动时报数据库连接错误。 **解决方案**: - 检查MySQL服务是否正常运行 - 检查数据库连接配置(URL、用户名、密码) - 检查数据库是否存在且用户有访问权限 ```bash # 测试数据库连接 mysql -h localhost -u root -p -e "show databases;" ``` #### 1.3 Redis连接失败 **问题现象**:服务启动时报Redis连接错误。 **解决方案**: - 检查Redis服务是否正常运行 - 检查Redis连接配置(主机、端口、密码) ```bash # 测试Redis连接 redis-cli ping ``` ### 2. 文件存储问题 #### 2.1 MinIO文件上传失败 **问题现象**:上传文件到MinIO失败。 **解决方案**: - 检查MinIO服务是否正常运行:`curl http://localhost:9000` - 检查MinIO的配置信息(endpoint、accessKey、secretKey) - 检查bucket是否存在且有写入权限 - 检查存储空间是否足够 ```bash # 使用MinIO客户端测试 mc config host add myminio http://localhost:9000 minioadmin minioadmin mc ls myminio ``` #### 2.2 文件访问路径错误 **问题现象**:文件上传成功但无法访问。 **解决方案**: - 检查MinIO的readPath配置是否正确 - 检查文件路径生成逻辑 - 检查文件权限设置 ### 3. 服务调用问题 #### 3.1 Feign调用失败 **问题现象**:服务间Feign调用报错。 **解决方案**: - 检查目标服务是否正常运行并注册到Nacos - 检查Feign接口定义是否正确 - 检查服务名称和路径是否一致 - 检查网络连接是否正常 ```bash # 查看服务是否注册到Nacos curl -X GET "http://localhost:8848/nacos/v1/ns/instance/list?serviceName=leadnews-user" ``` #### 3.2 网关路由错误 **问题现象**:通过网关访问服务报404错误。 **解决方案**: - 检查网关路由配置是否正确 - 检查服务是否正常注册到Nacos - 检查请求路径是否符合路由规则 ### 4. 其他常见问题 #### 4.1 内存溢出 **问题现象**:服务运行一段时间后出现OutOfMemoryError。 **解决方案**: - 增加JVM内存参数:`java -Xmx1024m -jar app.jar` - 检查代码中的内存泄漏问题 - 使用JVM分析工具进行内存分析 #### 4.2 日志目录权限不足 **问题现象**:服务启动后无法写入日志。 **解决方案**: - 检查日志目录权限:`ls -la /path/to/logs` - 修改目录权限:`chmod 755 /path/to/logs` - 或者修改logback.xml中的日志路径 #### 4.3 端口被占用 **问题现象**:服务启动时报端口被占用错误。 **解决方案**: - 查找占用端口的进程: - Linux/MacOS:`lsof -i:51801` - Windows:`netstat -ano | findstr 51801` - 终止占用端口的进程或修改服务端口 ### 5. 常用调试命令 ```bash # 查看服务日志 tail -f logs/leadnews-user.log # 检查服务进程 ps -ef | grep java # 检查端口占用 netstat -tunlp | grep 51801 # 检查磁盘空间 df -h # 检查内存使用 free -m ``` ### 6. 常用测试接口 ```bash # 测试用户服务 curl -X POST "http://localhost:51601/user/api/v1/login" \ -H "Content-Type: application/json" \ -d '{"phone":"13800138000","password":"123456"}' # 测试文章服务 curl "http://localhost:51601/article/api/v1/articles?page=1&size=10" ``` ## 版本历史 ### v1.0.0 (2024-01-01) - 项目初始版本 - 基础功能实现 - 微服务架构搭建 - 文章服务实现 - 用户服务实现 ## 后续规划 1. 性能优化 - 引入缓存机制 - 优化数据库查询 2. 功能扩展 - 评论系统 - 消息通知 - 数据统计 ## 贡献指南 我们非常欢迎并感谢所有的贡献者!以下是参与项目开发的指南。 ### 开发流程 1. **Fork 本仓库**:点击GitHub仓库页面右上角的Fork按钮 2. **克隆你的Fork**: ```bash git clone https://github.com/YOUR_USERNAME/leadnews.git cd leadnews ``` 3. **添加原始仓库为远程**: ```bash git remote add upstream https://github.com/hea7en/leadnews.git ``` 4. **创建特性分支**: ```bash git checkout -b feature/your-feature-name ``` 5. **进行开发**:实现你的功能或修复错误 6. **提交你的变更**: ```bash git add . git commit -m "feat: add your feature description" git push origin feature/your-feature-name ``` 7. **创建Pull Request**:在GitHub上创建PR,从你的分支到原始仓库的main分支 ### 提交规范 我们采用[约定式提交消息](https://www.conventionalcommits.org/)格式: - `feat`: 新功能 - `fix`: 错误修复 - `docs`: 文档更新 - `style`: 代码格式调整,不影响代码功能 - `refactor`: 代码重构,不添加新功能或修复错误 - `perf`: 性能优化 - `test`: 测试相关 - `chore`: 构建过程或辅助工具的变动 示例:`feat: 添加用户头像上传功能` ### 代码规范 - 遵循项目现有的代码风格 - 添加必要的注释和文档 - 确保代码通过所有测试 - 避免引入不必要的依赖 ### 问题报告与功能请求 - 使用GitHub Issues提交问题报告或功能请求 - 提供详细的问题描述或功能需求 - 如果是错误报告,请提供复现步骤和环境信息 ## 联系方式 如果你有任何问题或建议,可以通过以下方式联系我们: - **作者**: hea7en - **邮箱**: hea7enn@qq.com - **GitHub Issues**: [提交问题](https://github.com/hea7en/leadnews/issues) ## 许可证 本项目采用 [MIT 许可证](LICENSE)。