【VUE小型网站开发】初始环境搭建

1. 初始化VUE项目

1.1 创建vue项目

在这里插入图片描述

1.2 删除多余的界面

根据自己情况删除红框内的文件
在这里插入图片描述
清理app页面代码
在这里插入图片描述

1.3 引入vue-router

1.3.1 下载vue-router

npm install vue-router

1.3.2 配置vue-router

在 main.js 或 main.ts 中引入 vue-router

import './assets/main.css'
import router from './router';
import { createApp } from 'vue'
import App from './App.vue'

// createApp(App).mount('#app')
const app = createApp(App);
app.use(router);
app.mount('#app');

在项目中创建一个 router 目录,并在其中创建 index.js 文件来配置路由:

// src/router/index.js
import { createRouter, createWebHistory } from 'vue-router';
import Home from '../views/Home.vue';
import About from '../views/About.vue';

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home,
  },
  {
    path: '/about',
    name: 'About',
    component: About,
  },
];

const router = createRouter({
  // history: createWebHistory(process.env.BASE_URL),
  history: createWebHistory(),
  routes,
});

export default router;

1.3.3 创建视图组件

在 src/views 目录下创建两个简单的视图组件 Home.vue 和 About.vue:

<!-- src/views/Home.vue -->
<template>
  <div>
    <h1>Home Page</h1>
  </div>
</template>

<script>
export default {
  name: 'Home',
};
</script>

<style scoped>
</style>

1.4 引入elementui

1.4.1 下载element-plus

因为用的是vue3版本,所以引入element-plus

npm install element-plus

1.4.2 配置element-plus

在 main.js 或 main.ts 中引入 element-plus

import './assets/main.css'

import router from './router';
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
import { createApp } from 'vue'
import App from './App.vue'

// createApp(App).mount('#app')
const app = createApp(App);
//使用路由器
app.use(router);
//使用ElementPlus
app.use(ElementPlus);
app.mount('#app');

1.5 创建侧边栏组件

1.5.1 在 src/components 目录下创建 SideBar.vue 组件:

<script setup>
import { RouterLink } from 'vue-router';
</script>

<template>
  <el-menu :router="true" default-active="1" class="el-menu-vertical-demo">
    <el-sub-menu index="1">
      <template #title>
        <span>一级菜单</span>
      </template>
      <el-menu-item index="home">
        <span>首页</span>
      </el-menu-item>
      <el-menu-item index="about">
        <span>关于</span>
      </el-menu-item>
    </el-sub-menu>
    <el-sub-menu index="2">
      <template #title>
        <span>二级菜单</span>
      </template>
      <el-menu-item index="2-1" :to="{ name: 'AnotherPage' }">
        <span>另一个页面</span>
      </el-menu-item>
      <el-sub-menu index="2-2">
        <template #title>
          <span>三级菜单</span>
        </template>
        <el-menu-item index="2-2-1" :to="{ name: 'SubPage' }">
          <span>子页面</span>
        </el-menu-item>
      </el-sub-menu>
    </el-sub-menu>
  </el-menu>
</template>

<style scoped>
.el-menu-vertical-demo {
  height: 100%;
}
</style>

1.5.2 更新主应用APP.VUE组件

<!-- src/App.vue -->
<script setup>
import { RouterView } from 'vue-router';
import SideBar from './components/SideBar.vue';
</script>

<template>
  <div id="app">
    <el-container style="height: 100vh; width: 100%;">
      <el-aside width="200px">
        <SideBar />
      </el-aside>
      <el-main>
        <div class="router-view-container">
          <RouterView />
        </div>
      </el-main>
    </el-container>
  </div>
</template>

<style scoped>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  height: 100vh;
  width: 98vw;
}

.el-aside {
  background-color: #d3dce6;
  color: #333;
  text-align: center;
  line-height: 200px;
}

.el-main {
  background-color: #e9eef3;
  color: #333;
  text-align: center;
  padding: 20px;
  height: 100%;
  overflow: auto;
}

.router-view-container {
  flex-grow: 1;
  overflow: auto;
  padding: 20px; /* 可选:恢复内边距 */
}
</style>

2. 初始化Java项目

2.1 创建Java项目

2.1.1 创建springboot项目

在这里插入图片描述
添加为maven项目
在这里插入图片描述

2.1.2 修改jdk配置

因为使用的是jdk8,所以需要修改配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改idea Java项目配置
在这里插入图片描述
修改maven 配置指定Java版本和springboot版本
在这里插入图片描述
修改application
在这里插入图片描述

2.2 创建初始化接口

2.2.1 添加web maven

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
     <version>RELEASE</version>
     <scope>compile</scope>
 </dependency>

2.2.2 创建testController

package com.tool.tooladmin.algorithm;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
public class testController {
    @GetMapping("/test")
    public Map<String, Object> test() {
        Map<String, Object> map = new HashMap<>();
        map.put("code", 200);
        map.put("msg", "test");
        return map;
    }
}

2.2.3 修改application

server:
  port: 8888
  servlet:
    # 应用的访问路径
    context-path: /tool-admin
spring:
  application:
    name: tool-admin

启动验证可以正常访问即可

3. 封装统一http请求(Vue)

3.1 安装axios

npm install axios

3.2 创建封装请求的文件,http.js

// http.js
import axios from 'axios';
import { ElMessageBox, ElMessage } from 'element-plus';

// 创建axios实例
const service = axios.create({
    // baseURL: process.env.VUE_APP_BASE_API, // api的base_url
    baseURL: 'http://localhost:8080', // api的base_url
    timeout: 5000 // 请求超时时间
});

// 请求拦截器
service.interceptors.request.use(
    config => {
        // 可以在这里添加请求头等信息
        return config;
    },
    error => {
        // 请求错误处理
        console.log(error); // for debug
        Promise.reject(error).then(() => {
            // 可以在这里进行错误处理
            return Promise.reject(error);
        });
    }
);

// 响应拦截器
service.interceptors.response.use(
    response => {
        const res = response.data;
        // 根据返回的状态码做相应处理,例如这里以200为正确响应
        if (res.code !== 200) {
            ElMessageBox.alert(res.message, '错误', { type: 'error' }).then(() => {
                if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
                    // 根据错误代码进行对应操作,例如登录失效等
                }
            });
            return Promise.reject('error');
        } else {
            return response.data;
        }
    },
    error => {
        console.log('err' + error); // for debug
        ElMessage({
            message: '服务器异常',
            type: 'error',
            duration: 5 * 1000
        });
        return Promise.reject(error);
    }
);

export default service;

3.3 在main.js中引入这个封装后的请求文件

import './assets/main.css'

import router from './router';
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
import { createApp } from 'vue'
import App from './App.vue'
import http from './utils/http'; // 引入封装的http请求

// createApp(App).mount('#app')
const app = createApp(App);
//使用路由器
app.use(router);
//使用ElementPlus
app.use(ElementPlus);
//将http请求挂载到全局
app.config.globalProperties.$http = http;
app.mount('#app');

4. 解决跨域问题(Java)

4.1 创建CorsConfig

package com.tool.tooladmin.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    /**
     * 跨域配置
     */
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        // 设置访问源地址
        config.addAllowedOriginPattern("*");
        // 设置访问源请求头
        config.addAllowedHeader("*");
        // 设置访问源请求方法
        config.addAllowedMethod("*");
        // 有效期 1800秒
        config.setMaxAge(1800L);
        // 添加映射路径,拦截一切请求
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        // 返回新的CorsFilter
        return new CorsFilter(source);
    }
}
   

5. 调用

5.1 修改Home.vue

<!-- src/views/Home.Vue -->
<template>
  <div>
    <h1>Home Page</h1>
  </div>
  {{ message }}
</template>

<script>
export default {
  name: 'Home',
  data() {
    return {
      message: null
    }
  },
  methods: {
    fetchData() {
      this.$http.get('/test/test').then(response => {
        console.log(response);
        this.message = response.msg;
      }).catch(error => {
        console.error(error);
      });
    }
  },
  mounted() {
    // 当组件挂载到DOM上后调用方法
    this.fetchData();
  }
};
</script>

<style scoped>
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL-28.事务-介绍与操作

一.为什么需要事务 -- 事务 -- 删除部门 delete from tb_dept where id 1;-- 删除部门下的员工 delete from tb_emp where dept_id 1; 这样的话就可以成功删除&#xff0c;但是有一个问题&#xff1a;如果部门id1的被成功删除了&#xff0c;但是部门下的员工在删除时出错了…

各种查询sql介绍

1. 关联查询&#xff08;JOIN&#xff09; 关联查询用于从多个表中检索数据。它基于两个或多个表之间的共同字段&#xff08;通常是主键和外键&#xff09;来组合数据。 内连接&#xff08;INNER JOIN&#xff09;&#xff1a; sql SELECT a.name, b.order_date FROM custome…

git add操作,文件数量太多卡咋办呢,

git add介绍 Git的add命令是用于将文件或目录添加到暂存区&#xff08;也就是索引库&#xff09;&#xff0c;以便在后续的提交&#xff08;commit&#xff09;操作中一并上传到版本库的。具体来说&#xff0c;git add命令有以下几种常见用法&#xff1a; 添加单个文件&#…

【每日一题】24.10.14 - 24.10.20

10.14 直角三角形1. 题目2. 解题思路3. 代码实现&#xff08;AC_Code&#xff09; 10.15 回文判定1. 题目2. 解题思路3. 代码实现&#xff08;AC_Code&#xff09; 10.16 二次方程1. 题目2. 解题思路3. 代码实现&#xff08;AC_Code&#xff09; 10.17 互质1. 题目2. 解题思路3…

基于单片机的多功能鱼缸控制系统设计

本设计以STC12C5A60S2单片机为核心的多功能鱼缸控制系统&#xff0c;该系统可分别利用温度传感器、水位传感器和浑浊度传感器来检测鱼缸内部的水温、液体高度和浑浊程度&#xff0c;并在显示屏上进行显示。若检测结果超出阈值范围&#xff0c;则继电器工作从而控制内部环境。通…

Golang | Leetcode Golang题解之第482题秘钥格式化

题目&#xff1a; 题解&#xff1a; func licenseKeyFormatting(s string, k int) string {ans : []byte{}for i, cnt : len(s)-1, 0; i > 0; i-- {if s[i] ! - {ans append(ans, byte(unicode.ToUpper(rune(s[i]))))cntif cnt%k 0 {ans append(ans, -)}}}if len(ans) &…

汽车电子存储解决方案:IS61WV20488FALL

ISSI在SRAM领域的技术创新体现在采用高性能CMOS工艺制造&#xff0c;提供低功耗设计&#xff0c;以及支持宽温度范围的稳定运行。其产品集成了错误更正代码&#xff08;ECC&#xff09;&#xff0c;增强了数据完整性和可靠性。ISSI的SRAM优化了数据处理速度&#xff0c;提供多访…

教你不用下载 maven,不用配置环境变量,在 idea 上创建 maven 项目

我的主页&#xff1a;2的n次方_ 1. Maven Maven是⼀个项⽬管理⼯具, 通过 pom.xml ⽂件的配置获取 jar 包&#xff0c;⽽不⽤⼿动去添加 jar 包&#xff0c;这样就大大的提高了开发效率 2. Maven 的核心功能 2.1. 项目构建 创建第一个 Maven 项目 Maven 提供了标准的…

CDC变更数据捕捉技术是什么?和ETL有什么不同?

一、什么是CDC技术? 变更数据捕获&#xff08;Change Data Capture&#xff0c;简称 CDC&#xff09;是一种用于识别和跟踪数据源中发生变化的数据的技术。 工作原理&#xff1a; 1.监测数据源&#xff1a;CDC 工具会持续监测指定的数据源&#xff0c;如数据库表、文件系统…

Qt开发------容器控件(QWidget,QFrame、QMainWindow、QScrollArea)

目录 一、QWidget 二、QFrame 三、QMainWindow 四、QScrollArea&#xff08;面板滚动&#xff09; 层次结构如下&#xff1a; QObject└── QPaintDevice└── QWidget├── QMainWindow├── QDialog├── QFrame│ ├── QLabel│ ├── QSplitter│ …

react 中的hooks中的useState

(1). State Hook让函数组件也可以有state状态, 并进行状态数据的读写操作 (2). 语法: const [xxx, setXxx] React.useState(initValue) (3). useState()说明:参数: 第一次初始化指定的值在内部作缓存返回值: 包含2个元素的数组, 第1个为内部当前状态值, 第2个为更新状态值的…

关于SSD1306的OLED的显示的研究

文章目录 函数作用参数解释嵌套函数分析主代码分析逻辑流程总结 难点的解析&#xff1a;生成器的主要逻辑分解&#xff1a;每次生成的元组 (pixel_x, pixel_y, pixel_mask)&#xff1a;生成器的整体流程举例总结 反转后的文本绘制竖直布局有问题的旋转180度旋转坐标轴绘制矩形绘…

Chromium form表单post提交过程分析c++

form表单get提交参考之前文章Chromium 前端form表单提交过程分析c-CSDN博客 一、表单post提交测试例子&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title> </head&…

【火山引擎】AIGC图像风格化 | 风格实践 | PYTHON

目录 1 准备工作 2 实践 代码 效果图 1 准备工作 ① 服务开通 确保已开通需要访问的服务。您可前往火山引擎控制台,在左侧菜单中选择或在顶部搜索栏中搜索需要使用的服务,进入服务控制台内完成开通流程。

TWS蓝牙耳机发展史

目录 1&#xff1a;人类历史第一副耳机 2&#xff1a;第一台手持式耳机 3&#xff1a;第一台头戴式耳机 4&#xff1a;第一台动圈式耳机 5&#xff1a;第一台立体声耳机 6&#xff1a;第一台压耳式耳机 7&#xff1a;随身听 8&#xff1a;商用降噪耳机 9&#xff1a;i…

数据结构7——二叉树的顺序结构以及堆的实现

在上篇文章数据结构6——树与二叉树中&#xff0c;我们了解了树和二叉树的概念&#xff0c;接着上篇文章&#xff0c;在本篇文章中我们学习二叉树顺序结构的实现。 目录 1. 二叉树的顺序存储结构 2. 堆的概念及结构 1. 堆的概念 2. 堆的结构 3. 堆的实现 1. 堆节点 2. 交…

《献给阿尔吉侬的花束》

这是看过的错别字最多的一本书&#xff0c;错别字多并不是这本书的缺点&#xff0c;反而是一个亮点。全书以“近步抱告”的形式讲述了想变“聪明”的查理的故事。很治愈&#xff0c;也很虐心。聪明有聪明的代价&#xff0c;看到的感受到的越多&#xff0c;需要强大的内心去承受…

LeetCode 精选 75 回顾

目录 一、数组 / 字符串 1.交替合并字符串 &#xff08;简单&#xff09; 2.字符串的最大公因子 &#xff08;简单&#xff09; 3.拥有最多糖果的孩子&#xff08;简单&#xff09; 4.种花问题&#xff08;简单&#xff09; 5.反转字符串中的元音字母&#xff08;简单&a…

高性能 JSON 处理:为何选择 Fastjson?

一、关于Fastjson 1.1 简介 Fastjson 是由阿里巴巴集团开发的一个高性能的 JSON 处理库&#xff0c;它支持 Java 对象与 JSON 字符串之间的互相转换。Fastjson 自 2011 年发布以来&#xff0c;以其卓越的性能和丰富的功能在 Java 社区中获得了广泛的应用。 Alibaba Fastjson:…

RabbitMQ系列学习笔记(九)--路由模式

文章目录 一、路由模式原理二、多重绑定三、路由模式实战1、消费者代码2、生产者代码3、运行结果分析 本文参考 尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmq RabbitMQ 详解 Centos7环境安装Erlang、RabbitMQ详细过程(配图) 一、路由模式原理 使用发布订阅模式时&#x…