RouYi-Vue前后端分离 --- 项目的启动、登录功能是怎么实现的、怎么样创建新模块

RouYi-Vue前后端分离

1、项目启动

(1)环境准备

JDK >= 1.8 (推荐1.8版本)
Mysql >= 5.7.0 (推荐5.7版本)
Redis >= 3.0
Maven >= 3.0
Node >= 12

(2)后台运行

  • 启动本地的Redis服务

在这里插入图片描述

在这里插入图片描述

1、前往Gitee下载页面(https://gitee.com/y_project/RuoYi-Vue (opens new window))下载解压到工作目录
2、导入到项目到idea中。
3、创建数据库ry-vue并导入数据脚本ry_2021xxxx.sqlquartz.sql
4、修改数据库连接,编辑resources目录下的application-druid.yml

# 数据源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.cj.jdbc.Driver
        druid:
            # 主库数据源
            master:
                url: 数据库地址
                username: 数据库账号
                password: 数据库密码

5、打开项目运行com.ruoyi.RuoYiApplication.java,出现如下图表示启动成功。

(♥◠‿◠)ノ゙  若依启动成功   ლ(´ڡ`)゙  
 .-------.       ____     __        
 |  _ _   \      \   \   /  /    
 | ( ' )  |       \  _. /  '       
 |(_ o _) /        _( )_ .'         
 | (_,_).' __  ___(_ o _)'          
 |  |\ \  |  ||   |(_,_)'         
 |  | \ `'   /|   `-'  /           
 |  |  \    /  \      /           
 ''-'   `'-'    `-..-'    

在这里插入图片描述

(3)前端运行

# 进入项目目录
cd ruoyi-ui

# 安装依赖
npm install

# 强烈建议不要用直接使用 cnpm 安装,会有各种诡异的 bug,可以通过重新指定 registry 来解决 npm 安装速度慢的问题。
npm install --registry=https://registry.npmmirror.com

# 本地开发 启动项目
npm run dev

在这里插入图片描述

打开浏览器,输入:(http://localhost:81 (opens new window)) 默认账户/密码 admin/admin123
若能正确展示登录页面,并能成功登录,菜单及页面展示正常,则表明环境搭建成功

在这里插入图片描述

2、登录实现

(1)生成验证码

1、前端代码实现
  • 基本思路

后端生成一个表达式:6+2=8

1+1=?@2

1+1=?转成图片,传到前端展示

8 存入到Redis中

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 代码实现

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

访问地址:http://localhost:81/dev-api/captchaImage

Vue获取图片请求的是前端,再反向代理映射到后端,解决跨域问题

/dev-api 被替换成 ’ ’ ,再映射到:http://localhost:8080,变成:http://localhost:8080/captchaImage

在这里插入图片描述

2、后端代码实现

在这里插入图片描述

/**
 * 验证码操作处理
 * 
 * @author ruoyi
 */
@RestController
public class CaptchaController
{
    @Resource(name = "captchaProducer")
    private Producer captchaProducer;

    @Resource(name = "captchaProducerMath")
    private Producer captchaProducerMath;

    @Autowired
    private RedisCache redisCache;
    
    @Autowired
    private ISysConfigService configService;
    /**
     * 生成验证码
     */
    @GetMapping("/captchaImage")
    public AjaxResult getCode(HttpServletResponse response) throws IOException
    {
        AjaxResult ajax = AjaxResult.success();
        boolean captchaEnabled = configService.selectCaptchaEnabled();
        ajax.put("captchaEnabled", captchaEnabled);
        if (!captchaEnabled)
        {
            return ajax;
        }

        // 保存验证码信息
        String uuid = IdUtils.simpleUUID();
        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;

        String capStr = null, code = null;
        BufferedImage image = null;

        // 生成验证码
        String captchaType = RuoYiConfig.getCaptchaType();
        if ("math".equals(captchaType))
        {
            String capText = captchaProducerMath.createText();
            capStr = capText.substring(0, capText.lastIndexOf("@"));
            code = capText.substring(capText.lastIndexOf("@") + 1);
            image = captchaProducerMath.createImage(capStr);
        }
        else if ("char".equals(captchaType))
        {
            capStr = code = captchaProducer.createText();
            image = captchaProducer.createImage(capStr);
        }

        redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
        // 转换流信息写出
        FastByteArrayOutputStream os = new FastByteArrayOutputStream();
        try
        {
            ImageIO.write(image, "jpg", os);
        }
        catch (IOException e)
        {
            return AjaxResult.error(e.getMessage());
        }

        ajax.put("uuid", uuid);
        ajax.put("img", Base64.encode(os.toByteArray()));
        return ajax;
    }
}
/**
 * 返回成功消息
 * 
 * @return 成功消息
 */
public static AjaxResult success()
{
    return AjaxResult.success("操作成功");
}
/**
 * 返回成功消息
 * 
 * @param msg 返回内容
 * @return 成功消息
 */
public static AjaxResult success(String msg)
{
    return AjaxResult.success(msg, null);
}

/**
 * 返回成功消息
 * 
 * @param msg 返回内容
 * @param data 数据对象
 * @return 成功消息
 */
public static AjaxResult success(String msg, Object data)
{
    return new AjaxResult(HttpStatus.SUCCESS, msg, data);
}

在这里插入图片描述

(2)用户登录

1、前端代码实现

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、后端代码实现

http://localhost:81/dev-api/login

在这里插入图片描述

在这里插入图片描述

  • 校验验证码

  • 校验用户名和密码

  • 生成Token

(3)获取用户角色和权限

1、前端代码实现

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、后端代码实现

在这里插入图片描述

3、创建新模块

1.创建自己的模块

在这里插入图片描述

选择maven项目

我创建的是 com.ruoyi公司 出品的ruoyi-his项目

在这里插入图片描述

2.更新maven依赖

2.1 因为我的ruoyi-his模块 用到了ruoyi-common 所以:

在这里插入图片描述

<dependencies>
      <!-- 通用工具-->
       <dependency>
           <groupId>com.ruoyi</groupId>
           <artifactId>ruoyi-common</artifactId>
       </dependency>
</dependencies>

2.2 因为ruoyi-admin是启动模块,用到了我自己的ruoyi-his项目,所以:

在这里插入图片描述

    <dependency>
        <groupId>com.ruoyi</groupId>
        <artifactId>ruoyi-his</artifactId>
    </dependency>

2.3 根目录下的pom.xml:
< modules> 自动加入了我的ruoyi-his模块

在这里插入图片描述

        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-his</artifactId>
            <version>${ruoyi.version}</version>
        </dependency>

如果有问题 记得刷新一下maven

3.自动生成代码

3.1 数据库建设好

若依自带的sql文件在后端文件夹里面,导入即可

HIS项目涉及的sql文件是他们培训机构设计的,在下面提供了

目前他们只提供了一个科室表,就是一个单表

create table his_dept(
    dept_id bigint(20) primary key  NOT NULL AUTO_INCREMENT COMMENT '科室ID',
    dept_name varchar(50) NOT NULL COMMENT '科室名称',
    dept_code varchar(64) NOT NULL COMMENT '科室编码',
    dept_num bigint DEFAULT 0 COMMENT '当前挂号量',
    dept_leader varchar(64) DEFAULT '' COMMENT '负责人',
    dept_phone varchar(11) DEFAULT '' COMMENT '手机号码',
    `status` char(1) NOT NULL COMMENT '状态(0正常 1停用)',
    `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注'
) comment '科室表';
 
insert into his_dept values(1,'内科','HIS-NK',1,'北京尚学堂','18612345678',0,'admin',now(),'admin',now(),'');
insert into his_dept values(2,'外科','HIS-WK',1,'北京尚学堂','18612345678',0,'admin',now(),'admin',now(),'');
insert into his_dept values(3,'骨科','HIS-GK',1,'北京尚学堂','18612345678',0,'admin',now(),'admin',now(),'');
insert into his_dept values(4,'儿科','HIS-EK',1,'北京尚学堂','18612345678',0,'admin',now(),'admin',now(),'');
insert into his_dept values(5,'妇科','HIS-FK',1,'北京尚学堂','18612345678',0,'admin',now(),'admin',now(),'');
insert into his_dept values(6,'泌尿外科','HIS-NK',1,'北京尚学堂','18612345678',0,'admin',now(),'admin',now(),'');
insert into his_dept values(7,'心内科','HIS-XK',1,'北京尚学堂','18612345678',0,'admin',now(),'admin',now(),'');
insert into his_dept values(8,'血液科','HIS-XYK',1,'北京尚学堂','18612345678',0,'admin',now(),'admin',now(),'');
insert into his_dept values(9,'放射科','HIS-FSK',1,'北京尚学堂','18612345678',0,'admin',now(),'admin',now(),'');
insert into his_dept values(10,'化验科','HIS-HSK',1,'北京尚学堂','18612345678',0,'admin',now(),'admin',now(),'');
insert into his_dept values(11,'精神科','HIS-JSK',1,'北京尚学堂','18612345678',0,'admin',now(),'admin',now(),'');

选中的his_dept是自己创建的,其他表是若依框架自带的

在这里插入图片描述

3.2 启动项目

记得开redis

在这里插入图片描述

在这里插入图片描述

3.3 更新左侧栏目

创建目录【医院管理】 路由地址:hospital

在这里插入图片描述

创建菜单【科室管理】 路由地址:dept

在这里插入图片描述

3.4 生成代码

下载代码并解压,得到:

在这里插入图片描述

【生成功能名】如果是‘科室’,他会创建一个menu名字叫’科室’ parent_id看自己指定的上级菜单

所以 会创建出目录结构:

+医院管理

  • 科室管理

    – 科室

这是不对的 所以不运行sql 具体看sql语句就明白了。

在这里插入图片描述

main是生成的后端代码 也是复制到src目录下

在这里插入图片描述

vue文件夹是生成的前端代码 复制到ui项目的src目录下

在这里插入图片描述

4.重新启动

重启前后端

在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@烟雨倾城ゝ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值