14-vue项目搭建.md

本文详细介绍了如何使用Vue CLI搭建一个Web应用,包括初始化项目、配置跨域代理、安装Element UI和Axios库。通过实例展示了登录功能的实现,涉及Vue组件、表单验证、HTTP请求等关键步骤,帮助开发者快速入门Vue.js开发。
摘要由CSDN通过智能技术生成

使用 Vue 脚手架

初始化脚手架

\1. Vue 脚手架是 Vue 官方提供的标准化开发工具(开发平台)。

\2. 最新的版本是 4.x。

\3. 文档: https://cli.vuejs.org/zh/。

具体步骤

第一步(仅第一次执行):全局安装@vue/cli。

npm install -g @vue/cli

第二步:切换到你要创建项目的目录,然后使用命令创建项目

vue create xxxx

第三步:启动项目

npm run serve

备注:

如出现下载缓慢请配置 npm 淘宝镜像:npm config set registry https://registry.npm.taobao.org

├── node_modules

├── public

│ ├── favicon.ico: 页签图标

│ └── index.html: 主页面

├── src

│ ├── assets: 存放静态资源

│ │ └── logo.png

│ │── component: 存放组件

│ │ └── HelloWorld.vue

│ │── App.vue: 汇总所有组件

│ │── main.js: 入口文件

├── .gitignore: git 版本管制忽略的配置

├── babel.config.js: babel 的配置文件

├── package.json: 应用包配置文件

├── README.md: 应用描述文件

├── package-lock.json:包版本控制文件

image-20220801001526847

image-20220801001550090

vue跨域处理

vue.config.js

module.exports = {
    devServer: {
        proxy: {
            "/api": {
                target: "http://localhost:9001",
                changeOrigin: true,
                pathRewrite: {
                    "^/api": ""
                }
            }
        },
        disableHostCheck: true
    }
};

安装element-ui

npm i element-ui

/**
 * element-ui   main.js
 */
//全局导入组件
import ElementUI from "element-ui";
import "element-ui/lib/theme-chalk/index.css";
//使用element插件
Vue.use(ElementUI);

安装axios

npm i axios

npm i vue-axios





/**
 * axios			main.js 
 * vue-axios
 */
//axios组件,发送请求组件
import axios from "axios";
import VueAxios from "vue-axios";
Vue.use(VueAxios, axios);

requet.js

import Axios from "axios";
const instance = Axios.create({
    baseURL: '/api',
    timeout: 3000,
    withCredentials: true //default
})

export default instance;

login.js

import request from "../request";

//后台用户登录
//这里指定使用login
export const login = (data)=>{
    return request({
        url: "/api/v1/auth/login",
        method: "post",
        data: data,
    })
}

export const logout = (data)=>{
    return request({
        url: "/api/v1/auth/logout",
        method: "post",
        data: data,
    })
}

login.vue

<template>
  <div class="login-container">
    <div class="login-card">
      <div class="login-title">管理员登录</div>
      <!-- 登录表单 -->
      <!--
        model:表单数据对象
        rules:表单验证规则
        status-icon:是否在输入框中显示校验结果反馈图标
      -->
      <el-form
          :model="loginForm"
          :rules="rules"
          status-icon
          class="login-form"
          ref="ruleForm"
      >
        <!-- 用户名输入框 -->
        <el-form-item prop="userName">
          <el-input
              v-model="loginForm.userName"
              prefix-icon="el-icon-user-solid"
              placeholder="用户名"
              @keyup.enter="login()"
          />
        </el-form-item>
        <!-- 密码输入框 -->
        <!--
        @keyup.enter.native
        .native: 就是在父组件中给子组件绑定一个原生的事件,就将子组件变成了普通的HTML标签,不加'. native'事件是无法触 发的。
        -->
        <el-form-item prop="password">
          <el-input
              v-model="loginForm.password"
              show-password
              prefix-icon="iconfont el-icon-lock"
              placeholder="密码"
              @keyup.enter.native="login"
          />
        </el-form-item>
      </el-form>
      <!-- 登录按钮 -->
      <el-button type="primary" @click="login">登录</el-button>
    </div>
  </div>
</template>

<script>
// import { generaMenu } from "../../assets/js/menu";
import {login} from "../../utils/apis/login.js"
export default {
  data: function() {
    return {
      loginForm: {
        userName: "",
        password: "",
      },


      rules: {
        userName: [
          { required: true, message: "用户名不能为空", trigger: "blur" }
        ],
        password: [{ required: true, message: "密码不能为空", trigger: "blur" }]
      }

    };
  },
  methods: {
    login() {
      login(this.loginForm).then(({data})=>{
        console.log(data)
        if (data.code == 200) {
          // 登录后保存用户信息
          // that.$store.commit("login", data.data);
          // 加载用户菜单
          // generaMenu();
          this.$message.success("登录成功");
          // that.$router.push({ path: "/" });
        } else {
          // that.$message.error(data.message);
        }

        // this.$message.success("发送登录请求");
      }).catch(()=>{
        this.$message.error("发送登录请求失败");
      })
    }
  }
};
</script>

<style scoped lang="less">
/*登录容器
  主要加载了一下背景图片
*/
.login-container {
  //开启绝对定位
  position: absolute;
  top: 0;
  bottom: 0;
  right: 0;
  left: 0;
  //添加背景图片
  background: url('../../assets/images/infinity-1563061.jpg') center center / cover no-repeat;

  //登录卡片位置
  .login-card {
    position: absolute;
    top: 0;
    bottom: 0;
    right: 0;
    background: rgba(255,255,255,0.7);
    padding: 170px 60px 180px;
    width: 350px;

    //标题:颜色 + 加粗 + 字体大小
    .login-title {
      color: #303133;
      font-weight: bold;
      font-size: 1rem;
    }

    //表单:位置调整
    .login-form {
      margin-top: 1.2rem;
    }

    //登录按钮: 按钮距离,按钮宽度
    button {
      margin-top: 1rem;
      width: 100%;
    }
  }
}
</style>

App.vue

<template>
  <div id="app">
    <router-view />
  </div>
</template>

安装less 以及 less-loader

"less": "^3.0.4",
"less-loader": "^5.0.0",
"vue-template-compiler": "^2.6.11"

启动项目测试

npm run serve

image-20220801005837066

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

悠闲的线程池

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

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

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

打赏作者

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

抵扣说明:

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

余额充值