vue若依前端项目搭建

news2025/5/28 3:41:49

1.项目搭建

首先进入到你需要创建的项目目录下面,然后输入命令vue create .创建项目
接下来选择手动搭建,然后把下面图片中的内容选上
需要选择的内容
再然后继续配置一些参数信息
配置参数内容
接下来运行npm run serve项目就启动起来了

2.配置登录界面文件

首先修改src/router/index.js这个界面,写若依的登录界面
先把这一串内容删除掉

{
  path: '/',
  name: 'home',
  component: HomeView
},

然后修改src/router/index.js下面的内容

const routes = [
  {
    path: '/login',
    name: 'login',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () => import(/* webpackChunkName: "about" */ '../views/login.vue')
  }
]

接下来到package.json下面打开lint的调试
打开lint的调试
然后把app.vue上面的导航部分删除掉
app下面的导航内容
打开login的界面
login的界面
注意这里的#号必须放在login的前面
查看package.json下面的dependencies之中是否存在着element-ui,如果不存在使用命令安装

npm install --save element-ui

并且把depencies之中的

"element-ui": "^2.15.14"

加入到下面的devDependencies之中
然后打开src/main.js之中,加入

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(Element-UI)

注意这里的特定index.css样式一定要引入,不然显示的样式跟element-ui官网中显示的样式不同
然后首先把背景图片放入src/assets/images/login-background.jpg,接着在login.vue之中先写界面

<template>
    <div class="login">
        <el-form class="login-form">
            <h3>管理系统</h3>
            <el-form-item>
            </el-form-item>
        </el-form>
        <div class="el-login-footer">
            <span>opyright © 2018-2021 ruoyi.vip All Rights Reserved.</span>
        </div>
    </div>
</template>

然后在style之中加入配置

<style scoped lang="scss">
.login{
    height: 100%;
background-image: url("../assets/images/login-background.jpg");
}
//.login定义上面的样式,这里的login证明login这部分占界面的100%
</style>

3.写登录文件的样式

首先把页面定义出来

<template>
    <div class="login">
        <el-form class="login-form" :model="loginForm">
            <!--这里的login-form是一个对象,在下面的data()中有所定义,否则这里无法进行输入-->
            <h3 class="title">管理系统</h3>
            <el-form-item class="login-item">
                <el-input v-model="loginForm.username" type="text" placeholder="账号"></el-input>
                <!--v-model跟下面data()中的数据绑定,placeholder为显示的提示-->
            </el-form-item>
            <el-form-item class="login-item">
                <el-input v-model="loginForm.password" type="password" placeholder="密码"></el-input>
            </el-form-item>

            <el-form-item class="login-item">
                <el-col :span="15">
                    <el-input class="code-item" v-model="loginForm.code" type="text" placeholder="验证码"></el-input>
                </el-col>
                <el-col :span="9">
                    <el-image class="login-code" :src="codeUrl" @click="getCode"></el-image>
                </el-col>
            </el-form-item>
            <el-form-item class="login-item">
                <el-row>
                  <el-checkbox v-model="loginForm.rememberMe" class="remeberpasswordcheck">记住密码</el-checkbox>
                </el-row>
            </el-form-item>
            <el-form-item class="login-item">
                <el-button class="login-button" type="primary">
                    <span>登录</span>
                </el-button>
            </el-form-item>
        </el-form>
        <div class="el-login-footer">
            <span>Copyright © 2018-2021 ruoyi.vip All Rights Reserved.</span>
        </div>
    </div>
</template>

<script>
import { getCodeImg } from '../api/login'

export default {
  name: 'login',
  data () {
    return {
      loginForm: {
        username: '',
        password: '',
        code: '',
        rememberMe: false
      },
      codeUrl: ''
    }
  },
  created () {
    this.getCode()
  },
  methods: {
    getCode () {
      console.log('getcode')
      getCodeImg().then(res => {
        console.log('gsdres', res)
      })
    }
  }
}
</script>

<style scoped lang="scss">
.login-item {
    margin-bottom: 10px;
    &:last-child {
      margin-bottom: 0;
    }
  }
.login{
    display: flex;
    //display: flex为弹性布局,能够扩展和收缩flex容器内的元素,以最大
    //限度地填充可用空间。Flex是Flexible Box的缩写,为弹性布局ß
    height: 100%;
    background-image: url("../assets/images/login-background.jpg");
    background-size: cover;
    //background-size: cover:背景图片拉伸或者缩放以适应元素,同时保持宽高比
    justify-content: center;//让上下居中
    align-items: center;//左右居中
}
.title{
    color:#707070;
    text-align: center;
    margin: 0px auto 30px auto;
}

//.login定义上面的样式,这里的login证明login这部分占界面的100%,调节完.login-form之后发现字到中间了需要调节

    .login-form{
        width: 400px;
        height: 350px;
        border-radius: 6px;
        background: #fff;
        padding: 25px 25px 5px 20px;//代表三个框在整个白框中的上 右 底 左四个位置的间距
    }
    //这里不加last-child调整大小不变的原因在于element ui自动在外套一层div,因此对其设置的宽度并没有直接设置在文本域上面
    //在last-child中的padding体现在文本框上右底左的间距上

    .code-item :last-child{
        width: 250px;
    }

    .login-code {
        width: 120px;
        float: right;
    }
    /***
    .code-item :last-child{
        height: 20px;
        width: 158px;
        font-size: 15px;
    }
    ***/
    //因为el-text本质上是div拼上普通的text标签,所以这里需要使用last-child取到最里面的标签

    /***
    .code-item{
        padding: 25px 25px 5px 40px;
    }
    ***/

    .el-login-footer{
        height: 40px;
        line-height: 40px;
        position: fixed;
        bottom: 0px;
        color: #fff;
        font-size: 12px;
        //letter-spacing: 1px;
        font-family: Arial;
    }
    //padding为上下左右,调节完.login-form这里发现脚标直接挪移到正中间了,此时需要挪移脚标的位置
    //这里position: fixed为固定定位,bottom:0px将字体放到最下面
.login-button {
    width: 100%;
}

.remeberpasswordcheck {
    float: left;
}
</style>

这里注意几点内容:
1.如果不知道格式和布局,可以查看element-ui的官网,上面有几种布局样式的定义
2.上面的html语句定义布局,下面的css语句定义样式
3.el-input实际上是div加上普通的input样式
4.如果需要在上面引用数据,则在data上面需要加上要引用的数据

export default {
   ......
   data() {
     return {
       ......
     }
   }
}

4.页面发送请求需要的相关配置

在页面中我们定义了相应的请求方法

import { getCodeImg } from '../api/login'
......
methods: {
    getCode () {
      console.log('getcode')
      getCodeImg().then(res => {
        console.log('gsdres', res)
      })
    }
  }

这里我们首先在根目录下配置.env.development文件

VUE_APP_BASE_URL = '/dev-api'

然后在src/utils/request.js下面定义创建service需要默认加入的url,便于前端在后台区分,这个文件定义为request.js

import axios from 'axios'
// 通过axios发送请求
// 这个axios需要从devDependencies传输到dependencies的依赖之中
// 如果没有axios时候需要安装一下!!!
// 有可能devDependencies中没有,但是dependencies中存在axios依赖
// npm install axios
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_URL,
  timeout: 10000
})
export default service

这样定义好之后默认请求前面都会加上url '/dev-api,然后我们定义getCodeImg方法

import request from '../utils/request.js'
export function getCodeImg () {
  return request({
    url: '/captchaImage',
    method: 'get',
    timeout: 20000
  })
}

最后还需要在vue.config.js之中配置默认的表头替换原则以及路径,注意这个vue.config.js在根目录下面

// const { defineConfig } = require('@vue/cli-service')
// 这个文件是自动生成的,下面的配置是手动加入的
// 手动配置的,在配置完成.env.development之后进行配置
// 代理url,在前端发送url的时候如何转换给后端
module.exports = {
  devServer: {
    host: '0.0.0.0',
    port: 8008,
    proxy: {
      [process.env.VUE_APP_BASE_URL]: {
        target: 'http://localhost:8080',
        changeOrigin: true,
        // 将发送的url转换成target的地址
        // '^'+process.env.VUE_APP_BASE_URL会转换成空字符串
        // 配置完之后还是访问localhost:8008/#/login登录页面
        pathRewrite: {
          ['^' + process.env.VUE_APP_BASE_URL]: ''
        }
      },
    },
    historyApiFallback: true,
    allowedHosts: "all",
    //注意如果这里报没有disableHostCheck属性的时候,对应的进行替换
  }
}

由于这个方法在created调用的时候就调用了getCodeImg的请求,因此在浏览器中可以看到发送出的相应请求。
页面发送的相关配置
发送请求之后,这里我们可以看到后端返回回来的数据
后端返回回来的数据
我们可以通过后端返回的数据生成图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1027467.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytest单元测试框架 —— Pytest+Allure+Jenkins的应用

一、简介 pytestallurejenkins进行接口测试、生成测试报告、结合jenkins进行集成。 pytest是python的一种单元测试框架&#xff0c;与python自带的unittest测试框架类似&#xff0c;但是比unittest框架使用起来更简洁&#xff0c;效率更高 allure-pytest是python的一个第三方…

深入理解函数模板

函数模板深入理解 编译器从函数模板通过具体类型产生不同的函数 编译器会队函数模板进行两次编译 对模板代码本身进行编译对参数替换后的代码进行编译 注意事项 函数模板本身不允许隐式类型转换 自动类型推导时&#xff0c;必须严格匹配显示类型指定时&#xff0c;能够进行…

推动统一供应链“度量衡”,上汽大通突破传统拥抱SaaS生态

中国汽车市场规模已连续14年位居世界第一&#xff0c;目前占世界汽车份额31%。近年来&#xff0c;物联网、人工智能、电池等技术的快速发展&#xff0c;也为中国从汽车大国逐步迈向汽车强国注入巨大动力。在新一轮的汽车产业变革中&#xff0c;构建一个更智能、更高效协同的供应…

linux内核——进程

Processes and threads 进程是正在运行的程序&#xff0c;包括下列部分的抽象&#xff1a; &#xff08;独立的&#xff09;地址空间一个或者多个线程打开的文件&#xff08;以描述符fd的形式呈现&#xff09;套接字信号量Semaphore共享的内存区域定时器信号句柄signal handl…

加密货币交易所偿付能力的零知识证明

如何检测下一个 FTX 和 Mt. Gox 加密货币交易所 FTX 的内爆导致数十亿客户资金流失&#xff0c;这是加密货币历史上交易所破产的最新例子。历史可以追溯到 2014 年&#xff0c;当时处理 70% 比特币交易的历史最悠久、规模最大的交易所 Mt. Gox 丢失了用户的 850,000 个比特币。…

亚马逊登山扣CPC认证ASTMF1774测试和UIAA121测试报告申请

一.什么是登山扣 答:登山扣是扣子的一种&#xff0c;顾名思义其就是用来在登山的时候配合绳子起到一个承重悬挂的作用.采用铝 吕合金、铁或者是不锈钢等材料制作而成的一种登山工具之一。其形状多样&#xff0c;比较常见的是椭圆 形和圆形的&#xff0c;除此之外还有长方形、…

halcon算子1、dev_open_window

标题dev_open_window 原形&#xff1a;dev_open_window( : : Row, Column, Width, Height, Background : WindowHandle) 功能&#xff1a;显示一个图形窗口 参数&#xff1a; Row:左上角索引行&#xff0c;一般默认0 Column:左上角索引列&#xff0c;一般默认0 Width&#xff…

蓝牙核心规范(V5.4)10.6-BLE 入门笔记之L2CAP

蓝牙篇之蓝牙核心规范(V5.4)深入详解汇总 1.概述 L2CAP负责协议复用、流量控制、服务数据单元(SDU)的分段和重组。它使用通道的概念来分隔在堆栈层之间传递的数据包序列。固定通道不需要设置,立即可用,并与特定的上层协议相关联。通道也可以通过指定的协议服务多路复用器…

【ROS入门】创建工作空间与功能包

文章结构 工作空间文件结构创建工作空间流程创建工作空间编译工作空间设置环境变量/创建功能包创建功能包编译功能包 检查环境变量 工作空间文件结构 工作空间(workspace)是一个存放工程开发相关文件的文件夹&#xff0c;类似于在windows中使用IDE创建的工程。主要分为以下四个…

【Linux基础】第27讲 Linux 查找和过滤命令(二)——grep命令

Grep命令 grep是根据文件的内容进行查找&#xff0c;会对文件的每一行按照给定的模式&#xff08;patter&#xff09;进行匹配查找 基本格式&#xff1a; grep [options]范围 [options] 主要参数 -c: 只输出匹配行的计数 -i : 不区分大小写 -n: 显示匹配行及行号 -w: 显示整个…

Anaconda下载安装教程,新手详细

Anaconda的安装包下载分为官网下载和清华源下载&#xff0c; ①官网&#xff1a;Anaconda官网 &#xff08;别的博主说官网较慢&#xff0c;有时候还进不去&#xff0c;我感觉还行&#xff0c;2分钟就下载好了。如果不顺利&#xff0c;请尝试使用清华源&#xff09; ②清华源…

python学习之【文件读写】

前言 上一篇文章​ ​ python学习——【第十四弹】 ​​​中学习了python中的包与内置模块&#xff0c;这篇文章接着学习python中的文件读写。 编码方式 在学习文件读写之前&#xff0c;我们先了解下python当中的编码方式: 字节(Byte)是计量单位&#xff0c;表示数据量多少…

[BJDCTF2020]Cookie is so stable 模板注入SSTI

这个题目已经在提示我们了 然后我们去hint看看 让我们看看cookie 那我们肯定直接抓包啊 cookie中存在 回显值 但是我觉得一眼看上去就不是sql注入 因为是我们提交东西 而且没有查询的东西 所以我们可以想到是不是其他注入 于是就思考到是不是模板注入 模板注入 模板注入 主要…

matlab读写json文件

Background 通常&#xff0c;在matlab中使用mat文件进行数据存储。MAT文件是MATLAB中用来存储数据的二进制文件格式。MAT文件可以包含各种数据类型&#xff0c;包括数字、矩阵、向量、结构体、字符和函数等。但是&#xff0c;当和其他语言有交互时&#xff0c;mat文件会不太方便…

Stm32标准库_1

代码&#xff1a; #include "stm32f10x.h" // Device headerGPIO_InitTypeDef GPIO_InitStructure;//定义变量结构体int main(void){/*使用RCC开启GPIO的时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//开启PA端口时钟/*使用GPIO_…

Java高级-反射

反射 1.介绍2.获取Class对象的三种方法3.获取类的构造器4.获取类的成员变量5.获取类的成员方法6.反射的作用和应用场景 1.介绍 反射 加载类&#xff0c;并允许以编程的方式解剖类的各种成分(成员变量、方法、构造器等) 反射步骤 1.加载类&#xff0c;获取类的字节码&#x…

Hiding Images within Images[精读]

Hiding Images within Images 第一次阅读时间&#xff1a;2023/9/15-2023/9/20 这里写目录标题 Hiding Images within Images1 背景介绍2 论文摘要3 相关工作3.1 隐藏信息的目的3.2 隐藏信息面临的挑战3.3 常见的隐藏技术3.4 和隐写术(steganography)的区别 4 提出方法4.1 学…

Nginx多出口IP解决代理端口数量限制,CentOS安装Nginx并开启https2.0

Nginx多出口IP解决代理端口数量限制,CentOS安装Nginx并开启https2.0。 配置文件如下: http {...upstream test {server www.test.com;}server {listen 80 default_server;server_name _;location / {proxy_pass http://test;proxy_bind $split_ip

BD就业复习第一天

hive 1.分区分桶 在Hive中&#xff0c;分区&#xff08;Partition&#xff09;和分桶&#xff08;Bucketing&#xff09;都是用于数据管理和查询性能优化的技术。它们有不同的用途和特点。 分区&#xff08;Partition&#xff09;&#xff1a; 定义&#xff1a;分区是将数据…

【UE 粒子练习】03——创建一个GPU粒子

目的 为了实现创建非常多的粒子的需求&#xff0c;我们就需要使用到GPU 效果 步骤 1. 复制一份上篇博文中创建的粒子&#xff0c;这里重命名为“P_Sparks_GPU” 打开“P_Sparks_GPU”&#xff0c;将生成的粒子数量改为2000&#xff0c;可以看到发射器最多只能生成1000个粒子…