目录

关键:去获取一下每个视频末的Typora去复习

1导学

2若依搭建

问题

若是没有下侧图片中的蓝色小框(没有识别出maven项目)该怎么解决?

问题:

若依工具搭建步骤?

问题:redis启动命令?

3入门案例

问题:

注意实体类和作者记着修改,生成信息也记得修改

问题:

使用若依生成代码的步骤及细节操作?

4功能详解

问题:

1菜单有几种类型?

2这些权限等底层原理是怎么实现的?

5数据字典

问题:

什么是数据字典?

问题:

为什么男女要对应1和0?

6其他功能

7监控相关

8定时任务

问题:定时任务放在哪里?

问题:调用方法有哪两种?

9表单构建

问题:表单构建默认会生成什么按钮?

问题:这样的表单构建有什么用?又没有与后端进行绑定

10代码生成

11系统接口

12项目结构

问题:模块依赖怎么设置的?

问题:后端模块的作用?

问题:vue项目中components组件下的.vue有什么作用?

问题:上面对于前后端的组成你记住多少?试着讲一讲?

13前端代码分析

问题:复选框是怎么控制的?

14后端代码分析

15权限注解

16前后端交互流程

17新建业务模块

问题:什么是父工程版本锁定?

18菜品管理

问题:何时用数据字典?

问题:怎么使用数据字典?

问题:字段信息根据什么进行设置?

19列表改造

20口味改造

21页面调整

22项目介绍

23初始AI-AIGC介绍

24提示工程

25帝可德-项目搭建

26帝可德-点位管理相关需求说明

27帝可德-点位管理相关库表设计(使用AI)

问题:数据字典怎么使用?

问题:给你一个业务开发需求,你该怎么使用若依?

28帝可德-点位管理相关代码生成

29区域管理改造

问题:序号和主键id(怎么将主键id列变成序号)?

问题:下面注解是干什么的?

问题:怎么在展示区域表的时候,将点位数(点位表里的主键)也展示出来?

问题:内连接的话,如果没有交集就不会展示

注意ifnull()的使用

问题:AI生成的SQL语句优点在哪里?

​编辑

30合作商改造-查看详情

问题:prop="profitRatio"前端这个代码的作用?

问题:下面图片代码什么意思?

问题:使用若依创建的前端中新增和修改共用一个弹窗,有时候业务需求导致这两个不一样,该怎么办?

问题:怎么给数据库密码加密?

问题:这个代码里面的getParterner有什么用?

问题:下图中的v-hasPermi有什么用?

问题:下图的form数据是从哪里获取的?

问题:  上面的:span="12"有什么用?

问题:

31合作商改造-列表查询

问题:前面几节的代码你真的能独立完成了吗?想一想

32合作商改造-重置密码

问题:前端还得import里面加入,和重置密码标签

问题:下图代码是如何做到只重置密码而其它信息不丢失的?

33点位管理改造-基础布局

问题:怎么将下图的搜索文本框改成下拉框?

问题:index.vue中的import中导入的是什么?以及里面的@符有什么用?

问题:响应式对象何时用ref何时用reactive?

问题:搜索流程的步骤?

问题:下图的省略号功能是怎么实现的?

34点位管理改造-列表查询

问题:下图3个有什么作用?

问题:上面3个不会使用?

35点位管理改造-区域详情

问题:标签里面加上disabled有什么作用?

36数据完整性

问题:当使用no action限制父表有子表关联时禁止删除前端报错框怎么换成友好提示框?

​编辑

37人员管理需求说明

问题:冗余字段有什么好处?

38人员管理代码生成

39人员列表改造-基础布局

40同步存储

问题:还记得@Param注解是干甚的?

41阿里云OSS介绍

42阿里云OSS准备

43阿里云OSS入门

44集成x-file-storage

​编辑45设备管理需求说明

46设备管理代码生成

47设备管理改造 - 基础布局

问题:怎么添加/删除复选框?

问题:怎么添加数字框?

问题:怎么控制前端界面日期展示的格式?

48设备管理改造 - 新增

49设备管理改造 - 修改

50设备状态改造

问题:设备状态里面存储的是bool,怎么显示为正常/异常?

51帝可得 - 点位管理改造 - 点位详情实战篇

52. 帝可得 - 策略管理需求说明实战篇

53. 帝可得 - 策略管理代码生成实战篇

54. 帝可得 - 策略管理改造 - 基础布局实战篇

55. 帝可得 - 策略管理改造 - 策略详情实战篇

问题:下图最后的form是什么意思?

56. 帝可得 - 设备策略分配实战篇

问题:下图为什么要加if判断?

57. 帝可得 - 商品管理需求说明实战篇

58. 帝可得 - 商品管理代码生成实战篇

59. 帝可得 - 商品类型改造实战篇

问题:下图的高亮显示是怎么做到的?

问题:怎么将类型由数值型显示为汉字?

问题:数字框怎么确保精度?

60. 帝可得 - 商品管理改造 - 基础布局实战篇

61. 帝可得 - 商品管理改造 - 商品删除实战篇

62. 帝可得 - 商品批量导入 - 前端上

问题:怎么动态拼接url?

 63. 帝可得  商品批量导入  前端下实战篇

 64. 帝可得  商品批量导入  后端实战篇

​编辑65. 帝可得  商品批量导入  EasyExcel实战篇

​编辑 66. 帝可得  货道关联商品需求说明实战篇 

​编辑

​编辑

 67. 帝可得  货道关联商品前端实现实战篇

​编辑 68. 帝可得  根据售货机编号查询货道列表实战篇

​编辑

​编辑

问题:IDEA和vscode中怎么全局查找前端代码中的位置?

​编辑 69. 帝可得  货道关联商品后端实现实战篇 

问题:为什么要将DTO变成PO?

​编辑

问题:什么适合类型转换?(dto->vo等)

问题:什么是动态SQL?

问题:怎么允许mybatis框架在单个请求中发送多个SQL?

​编辑70. 帝可得  工单管理需求说明实战篇

​编辑

​编辑

​编辑71. 帝可得  工单管理代码生成实战篇

问题:sql语句中的关键字字段想要当普通字段怎么使用?

​编辑

问题:下图报错是什么出现的以及怎么解决?

72. 帝可得  工单管理改造  查询工单列表实战篇

​编辑

问题:下图SQL语句学习?

​编辑

​编辑73. 帝可得  工单管理改造  获取运营人员列表实战篇

74. 帝可得  工单管理改造  获取运维人员列表实战篇

75. 帝可得  工单管理改造  新增工单上实战篇 

76. 帝可得  工单管理改造  新增工单中实战篇

问题:下图代码不明白怎么写的?

77. 帝可得  工单管理改造  新增工单下实战篇

78. 帝可得  工单管理改造  查询工单详情实战篇 

79. 帝可得  工单管理改造  取消工单实战篇 

80. 帝可得  工单管理改造  补货工单详情

81Knife4j

问题:为什么下图的返回值在swagger中没有响应结果以及怎么解决?

因为swaager或者knife4j不兼容HashMap

解决方法:可以使用若以编写的泛型R

实战篇 -82. 帝可得 - 运营管理 App - 环境搭建

实战篇 -83. 帝可得 - 运营管理 App - 功能测试

实战篇 -84. 帝可得 - 运营管理 App - 源码介绍

实战篇 -85. 帝可得 - 设备屏幕墙 - 环境搭建

实战篇 -86. 帝可得 - 设备屏幕墙 - 功能测试

实战篇 -87. 帝可得 - 设备屏幕墙 - 源码介绍

实战篇 -88. 帝可得 - 订单管理实战

原理篇 - 82. 课程安排

原理篇 - 83. 代码生成器 - 源码 - 介绍

问题:代码生成器是怎么根据数据库的表生成前后端代码的?

原理篇 - 84. 代码生成器 - 源码 - 查询数据库

问题:通义灵码都有哪些功能以及怎么使用?

原理篇 - 85. 代码生成器 - 源码 - 导入表结构

问题:多个表中间是用逗号分隔的,这个是怎么去掉逗号的?

原理篇 - 86. 代码生成器 - 源码 - 生成代码

问题:下图几行代码的功能?

原理篇 - 87. 代码生成器 - 源码 - 修改配置文件

原理篇 - 88. 代码生成器 - velocity - 入门

问题:什么案例怎么实现?

问题:上图后端读取模版这一步骤有什么用?

原理篇 - 89. 代码生成器 - velocity - 变量声明

原理篇 - 90. 代码生成器 - velocity - 循环判断

问题:@Excel注解有什么用?

原理篇 - 91. 代码生成器 - velocity - 模板阅读

原理篇 - 92. 代码生成器 - lombok 集成

原理篇 - 93. 代码生成器 - swagger 集成

原理篇 - 94.RBAC 权限控制 - springSecurity 介绍

原理篇 - 95.RBAC 权限控制 - 用户登录流程

​编辑

问题:下图写法有什么用?

​编辑

​编辑

​编辑原理篇 - 96.RBAC 权限控制 - 获取用户角色和权限

​编辑

​编辑

​编辑原理篇 - 97.RBAC 权限控制 - 获取动态菜单路由

​编辑原理篇 - 98.RBAC 权限控制 - 权限注解

​编辑

​编辑

​编辑

​编辑

问题:注解@Annoymous作用?

​编辑原理篇 - 99. 异步任务管理器

​编辑

问题:为什么异步管理器可以提高性能?

问题:具体操作线程池这些自己还是不能单独写出来?

​编辑原理篇 - 100. 操作日志

问题:下图注解@Target和@Retention这两个注解作用?

问题:日志是怎么记录到数据库中的?

原理篇 - 101. 定时任务 - 源码 - 介绍

原理篇 - 102. 定时任务 - 源码 - quartz 概念

原理篇 - 103. 定时任务 - 源码 - 任务执行

原理篇 - 104. 定时任务 - 源码 - 新增任务

问题:这章没看懂,后面触及知识盲区的,后面有能力了再补充

原理篇 - 105. 定时任务 - 源码 - 状态修改

原理篇 - 106. 定时任务 - 集群模式 - 介绍

原理篇 - 107. 定时任务 - 集群模式 - 改造

原理篇 - 108. 定时任务 - 集群模式 - 配置类

原理篇 - 109. 数据权限 - 功能介绍

原理篇 - 110. 数据权限 - 源码分析上

原理篇 - 111. 数据权限 - 源码分析下

原理篇 - 112. 数据权限 - 业务改造

完结撒花


关键:去获取一下每个视频末的Typora去复习

1导学

单体后端gitee.com/y_project/RuoYi-Vue

前端gitee.com/ys-gitee/RuoYi-Vue3

密码是admin123

2若依搭建

问题

若是没有下侧图片中的蓝色小框(没有识别出maven项目)该怎么解决?

点击右侧mvn栏,去里面先clean再重新package即可

问题:

若依工具搭建步骤?

1首先去git找到后端和前端

单体后端gitee.com/y_project/RuoYi-Vue

前端gitee.com/ys-gitee/RuoYi-Vue3

然后分别在IDEA(右上角导入按钮)和visual stdion(文件拖入)中导入

2然后在.properties修改mysql的密码并创建数据库和将.sql文件导入

3启动redis

4运行后端

5在前端的终端运行npm install   和npm run dev即可启动

问题:redis启动命令?

redis-server.exe redis.windows.conf

3入门案例

问题:

注意实体类和作者记着修改,生成信息也记得修改

问题:

使用若依生成代码的步骤及细节操作?

1先将需要使用若依的.sql文件导入到数据库中

2然后在若依的系统工具中的代码生成中导入表名称

3编辑表中的各种配置信息(重要的是复选框)

4下载压缩包解压缩

5将后端放到admin的java下  和将mapper放到resourece下

6将前端的api下的东西放到api下,将view下的放到view下

7重新运行后端即可(前端自动运行)

4功能详解

问题:

1菜单有几种类型?

3种:目录,页面,按钮

2这些权限等底层原理是怎么实现的?

咱们后面原理篇进行剖析

5数据字典

问题:

什么是数据字典?

数据字典(Data Dictionary)对数据元素、数据结构、数据关系、数据约束等信息的规范化描述与管理工具,它是数据库设计、软件开发、数据管理中的核心文档,相当于数据的 “说明书” 或 “百科全书”。

简单来说,数据字典的作用是让所有参与项目的人员(开发、测试、运维、产品)对数据的定义达成共识,避免因对数据的理解不一致而产生问题。

问题:

为什么男女要对应1和0?

这样可以优化性能

下面这张图片就是数据字典的作用(从数据字典中加载下拉框)

6其他功能

7监控相关

8定时任务

问题:定时任务放在哪里?

放在ruoyi-quartz下的task包下

问题:调用方法有哪两种?

第一种是对象名.方法名即可(对象名就是类名,其中首字母小写即可)

问题:有参方法怎么办?

9表单构建

问题:表单构建默认会生成什么按钮?

提交和重置按钮(无需自己处理)

问题:这样的表单构建有什么用?又没有与后端进行绑定

10代码生成

11系统接口

先授权,F12里面找cookie的值,放在下图中的里面

然后进行测试,若出现404的错误,可能swagger里面的前缀配置错误

12项目结构

问题:模块依赖怎么设置的?

a需要使用b,就在a的pom.xml中写入b的groupId和artifactId即可

问题:后端模块的作用?

问题:vue项目中components组件下的.vue有什么作用?

问题:上面对于前后端的组成你记住多少?试着讲一讲?

后端有admin(后台服务),common(通用服务),framework(框架核心),generator(代码生成),quartz(定时生成),system(系统生成)

前端主要是src里面的路径需要记住放的是什么以及各自的功能

13前端代码分析

问题:复选框是怎么控制的?

使用:disabled来进行控制的

14后端代码分析

15权限注解

16前后端交互流程

17新建业务模块

问题:什么是父工程版本锁定?

就是在父工程的pom.xml中引入其子模块的坐标,然后其他子模块可以直接使用其(只需要在自己的pom.xml中引入其坐标即可)

18菜品管理

问题:何时用数据字典?

一般代码生成的是文本框,当你的搜索框需要时下拉框的时候,这时候就需要使用数据字典了

问题:怎么使用数据字典?

最后在代码生成那里编辑修改即可

下面这个基本信息只需要去掉实体类名称的前缀和修改作者信息即可

问题:字段信息根据什么进行设置?

页面原型(前端界面)

19列表改造

20口味改造

21页面调整

22项目介绍

23初始AI-AIGC介绍

24提示工程

25帝可德-项目搭建

26帝可德-点位管理相关需求说明

27帝可德-点位管理相关库表设计(使用AI)

问题:数据字典怎么使用?

问题:给你一个业务开发需求,你该怎么使用若依?

第一步:去gitee上找到若依的前后端代码,在IDEA和vs里面导入,修改其properties里面的代码和npm install和npm run dev

第二步:更换细节信息(将若依的logo标题等信息换成自己的项目相关的)(详情见21页面调整)

第三步:根据用户需求构造页面原型,并根据页面原型分析设计库表结构

第四步:使用若依生成基础代码(详情见28)

28帝可德-点位管理相关代码生成

29区域管理改造

问题:序号和主键id(怎么将主键id列变成序号)?

一般序号使用的多,因为如果是主键id的话,经过删除或者修改之后顺序就会显得紊乱

给标签设置type="index"即可

问题:下面注解是干什么的?

怎么校验的?就是看其用户登录的数据库中是否存储'manage:region:list'这些信息

问题:怎么在展示区域表的时候,将点位数(点位表里的主键)也展示出来?

问题:内连接的话,如果没有交集就不会展示

一般选择使用外连接

注意ifnull()的使用

问题:AI生成的SQL语句优点在哪里?

先关联在分组,避免空值的产生,启示:顺序很重要(有时候咱把顺序颠倒可以试试看看是不是更好)

30合作商改造-查看详情

问题:prop="profitRatio"前端这个代码的作用?

绑定表格数据中对应的字段名(绑定并展示数据(从后端获取的))

问题:下面图片代码什么意思?

问题:使用若依创建的前端中新增和修改共用一个弹窗,有时候业务需求导致这两个不一样,该怎么办?

可以使用v-if="form.id==null"//将修改时不需要的数据隐藏即

问题:怎么给数据库密码加密?

问题:这个代码里面的getParterner有什么用?

问题:下图中的v-hasPermi有什么用?

问题:下图的form数据是从哪里获取的?

问题:  上面的:span="12"有什么用?

问题:

当你写好前端后,发现不美观,可以使用AI解决

31合作商改造-列表查询

问题:前面几节的代码你真的能独立完成了吗?想一想

32合作商改造-重置密码

问题:前端还得import里面加入,和重置密码标签

问题:下图代码是如何做到只重置密码而其它信息不丢失的?

MyBatis-Plus 的动态更新updateById会自动忽略null字段,只更新有值的字段(这里只有密码);

33点位管理改造-基础布局

问题:怎么将下图的搜索文本框改成下拉框?

一:.js中从后端获取数据,封装到响应式集合中

二:将文本框修改为下拉框,数据是第一步中集合中的

问题:index.vue中的import中导入的是什么?以及里面的@符有什么用?

导入的一般是.Js,@符表示src

问题:响应式对象何时用ref何时用reactive?

问题:搜索流程的步骤?

问题:下图的省略号功能是怎么实现的?

34点位管理改造-列表查询

问题:下图3个有什么作用?

问题:上面3个不会使用?

35点位管理改造-区域详情

问题:标签里面加上disabled有什么作用?

表示不可修改

36数据完整性

问题:当使用no action限制父表有子表关联时禁止删除前端报错框怎么换成友好提示框?

使用全局异常处理器

37人员管理需求说明

问题:冗余字段有什么好处?

将多表查询优化成单标查询,提高查询效率(避免笛卡尔积)

38人员管理代码生成

39人员列表改造-基础布局

40同步存储

问题:还记得@Param注解是干甚的?

别名映射,service里面涉及多表以上的修改删除,记得加上@Transactional注解

41阿里云OSS介绍

42阿里云OSS准备

43阿里云OSS入门

44集成x-file-storage

45设备管理需求说明

46设备管理代码生成

47设备管理改造 - 基础布局

问题:怎么添加/删除复选框?

问题:怎么添加数字框?

问题:怎么控制前端界面日期展示的格式?

48设备管理改造 - 新增

49设备管理改造 - 修改

50设备状态改造

问题:设备状态里面存储的是bool,怎么显示为正常/异常?

使用差值表达式

51帝可得 - 点位管理改造 - 点位详情实战篇

52. 帝可得 - 策略管理需求说明实战篇

53. 帝可得 - 策略管理代码生成实战篇

54. 帝可得 - 策略管理改造 - 基础布局实战篇

55. 帝可得 - 策略管理改造 - 策略详情实战篇

问题:下图最后的form是什么意思?

56. 帝可得 - 设备策略分配实战篇

问题:下图为什么要加if判断?

因为只修改策略id的时候不需要去修改设备表,当修改设备的时候才需要全部修改

57. 帝可得 - 商品管理需求说明实战篇

58. 帝可得 - 商品管理代码生成实战篇

59. 帝可得 - 商品类型改造实战篇

问题:下图的高亮显示是怎么做到的?

使用的是这个标签

问题:怎么将类型由数值型显示为汉字?

首先得从后端查询将对象数据封装到sku集合中 然后v-for和v-if一起使用即可

问题:数字框怎么确保精度?

使用:precision="位数"//表示的是小数点后有几位

60. 帝可得 - 商品管理改造 - 基础布局实战篇

61. 帝可得 - 商品管理改造 - 商品删除实战篇

62. 帝可得 - 商品批量导入 - 前端上

问题:怎么动态拼接url?

 63. 帝可得  商品批量导入  前端下实战篇


 64. 帝可得  商品批量导入  后端实战篇


65. 帝可得  商品批量导入  EasyExcel实战篇


 66. 帝可得  货道关联商品需求说明实战篇 


 67. 帝可得  货道关联商品前端实现实战篇


 68. 帝可得  根据售货机编号查询货道列表实战篇

问题:IDEA和vscode中怎么全局查找前端代码中的位置?


 69. 帝可得  货道关联商品后端实现实战篇 

问题:为什么要将DTO变成PO?

问题:什么适合类型转换?(dto->vo等)

使用stream(可以使用AI)

问题:什么是动态SQL?

问题:怎么允许mybatis框架在单个请求中发送多个SQL?


70. 帝可得  工单管理需求说明实战篇


71. 帝可得  工单管理代码生成实战篇

问题:sql语句中的关键字字段想要当普通字段怎么使用?

加上反引号,如下图的desc

问题:下图报错是什么出现的以及怎么解决?

主要原因就是问题4,解决方法就是将.xml文件再在target中复制一份即可


72. 帝可得  工单管理改造  查询工单列表实战篇

问题:下图SQL语句学习?


73. 帝可得  工单管理改造  获取运营人员列表实战篇


74. 帝可得  工单管理改造  获取运维人员列表实战篇


75. 帝可得  工单管理改造  新增工单上实战篇 


76. 帝可得  工单管理改造  新增工单中实战篇

问题:下图代码不明白怎么写的?


77. 帝可得  工单管理改造  新增工单下实战篇


78. 帝可得  工单管理改造  查询工单详情实战篇 


79. 帝可得  工单管理改造  取消工单实战篇 


80. 帝可得  工单管理改造  补货工单详情

81Knife4j

需要的时候如果不知道什么时候加@Api,@ApiMoudle,@ApiOperation可以使用AI

问题:为什么下图的返回值在swagger中没有响应结果以及怎么解决?

因为swaager或者knife4j不兼容HashMap

解决方法:可以使用若以编写的泛型R

实战篇 -82. 帝可得 - 运营管理 App - 环境搭建

实战篇 -83. 帝可得 - 运营管理 App - 功能测试

实战篇 -84. 帝可得 - 运营管理 App - 源码介绍

实战篇 -85. 帝可得 - 设备屏幕墙 - 环境搭建

实战篇 -86. 帝可得 - 设备屏幕墙 - 功能测试

实战篇 -87. 帝可得 - 设备屏幕墙 - 源码介绍

实战篇 -88. 帝可得 - 订单管理实战

原理篇 - 82. 课程安排

原理篇 - 83. 代码生成器 - 源码 - 介绍

问题:代码生成器是怎么根据数据库的表生成前后端代码的?

原理篇 - 84. 代码生成器 - 源码 - 查询数据库

问题:通义灵码都有哪些功能以及怎么使用?

原理篇 - 85. 代码生成器 - 源码 - 导入表结构

问题:多个表中间是用逗号分隔的,这个是怎么去掉逗号的?

是靠下图的Convert来解决的

原理篇 - 86. 代码生成器 - 源码 - 生成代码

问题:下图几行代码的功能?

原理篇 - 87. 代码生成器 - 源码 - 修改配置文件

原理篇 - 88. 代码生成器 - velocity - 入门

问题:什么案例怎么实现?

问题:上图后端读取模版这一步骤有什么用?

原理篇 - 89. 代码生成器 - velocity - 变量声明

原理篇 - 90. 代码生成器 - velocity - 循环判断

问题:@Excel注解有什么用?

原理篇 - 91. 代码生成器 - velocity - 模板阅读

原理篇 - 92. 代码生成器 - lombok 集成

原理篇 - 93. 代码生成器 - swagger 集成

原理篇 - 94.RBAC 权限控制 - springSecurity 介绍

原理篇 - 95.RBAC 权限控制 - 用户登录流程

问题:下图写法有什么用?


原理篇 - 96.RBAC 权限控制 - 获取用户角色和权限


原理篇 - 97.RBAC 权限控制 - 获取动态菜单路由


原理篇 - 98.RBAC 权限控制 - 权限注解

问题:注解@Annoymous作用?

可以匿名访问这个类或方法


原理篇 - 99. 异步任务管理器

问题:为什么异步管理器可以提高性能?

问题:具体操作线程池这些自己还是不能单独写出来?


原理篇 - 100. 操作日志

问题:下图注解@Target和@Retention这两个注解作用?

一个表示作用在哪里{类,方法等},一个表示作用范围

问题:日志是怎么记录到数据库中的?


原理篇 - 101. 定时任务 - 源码 - 介绍


原理篇 - 102. 定时任务 - 源码 - quartz 概念


原理篇 - 103. 定时任务 - 源码 - 任务执行


原理篇 - 104. 定时任务 - 源码 - 新增任务

问题:这章没看懂,后面触及知识盲区的,后面有能力了再补充


原理篇 - 105. 定时任务 - 源码 - 状态修改


原理篇 - 106. 定时任务 - 集群模式 - 介绍


原理篇 - 107. 定时任务 - 集群模式 - 改造


原理篇 - 108. 定时任务 - 集群模式 - 配置类


原理篇 - 109. 数据权限 - 功能介绍


原理篇 - 110. 数据权限 - 源码分析上


原理篇 - 111. 数据权限 - 源码分析下


原理篇 - 112. 数据权限 - 业务改造


完结撒花

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐