创建vue3项目步骤

news2024/11/19 2:06:53

脚手架创建项目:

pnpm  create vue

  1. Cd   项目名称
  2. 安装依赖:Pnpm  i
  3. Pnpm  Lint:修复所有文件风格 ,不然eslint语法警告报错要双引号
  4. Pnpm  dev启动项目

拦截错误代码提交到git仓库:提交前做代码检查

pnpm dlx husky-init

pnpm install

目录调整:

访问权限控制router.ts:

前置守卫:

import { userStore } from '@/stores';
// vue3的前置导航
router.beforeEach((to,from)=>{
// next现在可选,next()放行  next(‘/login’)跳转指定路由路径
// 返回false取消
// 返回true|undefined放行
// 返回路由地址(对象格式)重定向

//获取token的
const store=userStore()
// 白名单:不需要登陆的页面可以直接访问
const wihteList=['/login','register']
// 如果没有token并且没有白名单,就重定向到登陆页面
if(!store.token&&!wihteList.includes(to.path)) return '/login'

})

后置守卫页面标题:

router.afterEach((to)=>{
    document.title=`sealtool-${to.meta.title||''}`
})

type文件定义vue-router.d.ts文件类型:

import 'vue-router'

declare module 'vue-router'{扩展vue-router里面得routeMeta接口里面得属性title类型
    interface RouteMeta{
        title?:string
    }
}

手机端安装命令:

1.引入vant组件:

Pnpm  add  vant

2.main.ts引入样式:

import 'vant/lib/index.css'

移动端适配:单位自动转为vw,进行等比例缩放

pnpm i postcss-px-to-viewport -D

新建一个postcss.config.js项目文件:加上一些插件的配置

Vant组件自动注册:

好处:components文件下和vant框架都可以自动注册,不用手动导入

pnpm add unplugin-vue-components -D

主题定制css:

main.scss文件:

定义全局变量::root{ 变量名字 : #069;  }

局部变量: 选择器(.)类名{ 变量名字 : #069;  }

使用变量的方法:  color:var(变量名字)

覆盖vant主题色方法:

持久化:

pnpm  i  pinia-plugin-persistedstate

persidt:true 可以开启持久化存储

pinia如何统一管理:

1.stores/index.ts引入持久化存储

import {createPinia} from 'pinia'
import presist from 'pinia-plugin-persistedstate'

const pinia =createPinia()
pinia.use(presist)

export default pinia

// 将user模块里面所有的按需导出
// export * from './modules/user'

2.main.ts导出pinia

import { createApp } from 'vue'
// pinia
import pinia from '@/stores'
const app = createApp(App)
app.use(pinia)

Axios请求工具:

pnpm  i  axios

utils文件夹里面新建request.ts文件:设置请求拦截器和响应拦截器

import axios from 'axios'
import type { AxiosError } from 'axios'
import {showFailToast} from 'vant'
import { userStore } from '@/stores';

//1.创建根地址和时间
const api = axios.create({
  baseURL: '',
  timeout: 10000
})


api.interceptors.request.use(
  (request) => {
    // 2.全局拦截请求发送前提交的参数
    const userStores = userStore()
    // 设置请求头
    if (request.headers) {
        if (userStores.isLogin) {
            request.headers.Authorization = `Bearer ${userStores.token}`
          }
      }
    return request
  },
)

api.interceptors.response.use(
  (response) => {
    //3.处理业务失败
    if (response.data.code === 后端规定的失败数字是多少) {
      // 这里做错误提示
      showFailToast(response.data.msg||'业务失败')
      return Promise.reject(response.data.msg)
    }
    // 4.摘取核心响应数据
    return Promise.resolve(response.data)
  },

  (error:AxiosError) => {
    // 5.处理401错误
    if (error.response?.status === 401) {
      // 清除本地信息
      // 跳转到登录页面  ,携带当前访问页面地址
        router.push({path:'/login',query:{returnUrl:router.currentRoute.value})
    }
    else {
      let message = error.message
      if (message === 'Network Error') {
        message = '后端网络故障'
      }
      else if (message.includes('timeout')) {
        message = '接口请求超时'
      }
      else if (message.includes('Request failed with status code')) {
        message = `接口${message.substr(message.length - 3)}异常`
      }

    }
    return Promise.reject(error)
  },
)

export default api


//设置类型
type Data<T> = {
  code:number,
  msg:string,
  total?: number,
  data:T,
}

type Method = 'get' | 'post' | 'put' | 'delete' | 'patch'
export const request=<T>(
  url: string,
  method: Method='get',
  submitData?: object
)=>{
  // 参数:地址,请求方式,提交的数据
  // 返回:promise
  return api.request<any,Data<T>>({
    url,
    method,
    [method.toUpperCase() === 'GET' ? 'params' : 'data'] : submitData
  })
}


打包svg图标配置:

官网地址:https://github.com/vbenjs/vite-plugin-svg-icons

pnpm install  vite-plugin-svg-icons -D
配置:vite.config.ts

import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'

  createSvgIconsPlugin({
        iconDirs: [path.resolve(process.cwd(), 'src/icons')],
})


导入:main.ts

import 'virtual:svg-icons-register'

全局使用:se-icon.vue文件:



<template>
  <div>
    <svg aria-hidden="true" class="seal-icon">
      <use :href="`#icon-${name}`" />
    </svg>
  </div>
</template>

<script setup lang="ts">
import { ref, reactive, toRefs, onMounted } from 'vue'
defineProps<{
  name: string
}>()


</script>
<style scoped lang="less">
.seal-icon {
  width: 24px;
  height: 24px;
}

//和字体大小一样</style>

组件中使用

  <se-icon :name="`icon_touxiangbeijing`"></se-icon>

安装进度条:要安装两个命令

pnpm i nprogress
pnpm i @types/nprogress -D

vue-router.ts文件配置:

import Nprogress from 'nprogress'
import 'nprogress/nprogress.css'

//去掉转圈的那个环形圈
NProgress.configure({
  showSpinner:false
})

// vue3的前置导航
router.beforeEach((to)=>{
//开启进度条
  NProgress.start()
})


router.afterEach((to)=>{
document.title=`sealtool-${to.meta.title||''}`
//关闭进度条
     NProgress.done()
})

//全局css,改变进度条颜色
#nprogress .bar {
  background-color: #f8e1f1 !important;
}

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

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

相关文章

C语言项⽬实践-贪吃蛇

目录 1.项目要点 2.窗口设置 2.1mode命令 2.2title命令 2.3system函数 2.Win32 API 2.1 COORD 2.2 GetStdHandle 2.3 CONSOLE_CURSOR_INFO 2.4 GetConsoleCursorInfo 2.5 SetConsoleCursorInfo 2.5 SetConsoleCursorPosition 2.7 GetAsyncKeyState 3.贪吃蛇游戏设…

nfs服务器--RHCE

一&#xff0c;简介 NFS&#xff08;Network File System&#xff0c;网络文件系统&#xff09;是FreeBSD支持的文件系统中的一种&#xff0c;它允许网络中的计 算机&#xff08;不同的计算机、不同的操作系统&#xff09;之间通过TCP/IP网络共享资源&#xff0c;主要在unix系…

自动化运维(k8s):一键获取指定命名空间镜像包脚本

前言&#xff1a;脚本写成并非一蹴而就&#xff0c;需要不断的调式和修改&#xff0c;这里也是改到了7版本才在 生产环境 中验证成功。 该命令 和 脚本适用于以下场景&#xff1a;在某些项目中&#xff0c;由于特定的安全或政策要求&#xff0c;不允许连接到你的镜像仓库。然而…

HuggingFace:基于YOLOv8的人脸检测模型

个人操作经验总结 1、YOLO的环境配置 github 不论base环境版本如何&#xff0c;建议在conda的虚拟环境中安装 1.1、创建虚拟环境 conda create -n yolov8-face python3.9conda create &#xff1a;创建conda虚拟环境&#xff0c; -n &#xff1a;给虚拟环境命名的…

Unet++改进28:添加PPA(2024最新改进方法)|多分支特征提取策略,捕获不同尺度和层次的特征信息。

本文内容:添加PPA 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 红外小目标检测是一项重要的计算机视觉任务,涉及对红外图像中通常只有几个像素的微小目标进行识别和定位。然而,由于红外图像中物体的体积小,背景一般比较复杂,这给红外图像的识别带来…

CTF攻防世界小白刷题自学笔记13

1.fileinclude,难度&#xff1a;1,方向&#xff1a;Web 题目来源:宜兴网信办 题目描述:无 给一下题目链接&#xff1a;攻防世界Web方向新手模式第16题。 打开一看给了很多提示&#xff0c;什么language在index.php的第九行&#xff0c;flag在flag.php中&#xff0c;但事情显…

同三维T610UDP-4K60 4K60 DP或HDMI或手机信号采集卡

1路DP/HDMI/TYPE-C&#xff08;手机/平板等&#xff09;视频信号输入1路MIC1路LINE OUT,带1路HDMI环出&#xff0c;USB免驱&#xff0c;分辨率4K60&#xff0c;可采集3路信号中其中1路&#xff0c;按钮切换&#xff0c;可采集带TYPE-C接口的各品牌手机/平板/笔记本电脑等 同三维…

小程序如何完成订阅

小程序如何完成订阅 参考相关文档实践问题处理授权弹窗不再触发引导用户重新授权 参考相关文档 微信小程序实现订阅消息推送的实现步骤 发送订阅消息 小程序订阅消息&#xff08;用户通过弹窗订阅&#xff09;开发指南 实践 我们需要先选这一个模板&#xff0c;具体流程参考…

解决Xeyes: Error can‘t open display,远程X无法连通问题。

一、问题分析 提前申明&#xff1a; 本次实验使用REHL 8 进行操作&#xff01; 客户机 A 为X-Client &#xff0c;即远程X的客户端。 服务机 B 为X-Server&#xff0c;即远程X的服务端。 问题的所有操作均在已经配置好Xorg的前提下进行的&#xff0c;不知道不配置会有什么影响&…

JS学习日记(jQuery库)

前言 今天先更新jQuery库的介绍&#xff0c;它是一个用来帮助快速开发的工具 介绍 jQuery是一个快速&#xff0c;小型且功能丰富的JavaScript库&#xff0c;jQuery设计宗旨是“write less&#xff0c;do more”&#xff0c;即倡导写更少的代码&#xff0c;做更多的事&#xf…

华为HCIP——MSTP/RSTP与STP的兼容性

一、MSTP/RSTP与STP的兼容性的原理&#xff1a; 1.BPDU版本号识别&#xff1a;运行MSTP/RSTP协议的交换机会根据收到的BPDU&#xff08;Bridge Protocol Data Unit&#xff0c;桥协议数据单元&#xff09;版本号信息自动判断与之相连的交换机的运行模式。如果收到的是STP BPDU…

基于YOLOv8深度学习的智慧课堂学生专注度检测系统(PyQt5界面+数据集+训练代码)

本研究提出了一种基于YOLOv8深度学习的智慧课堂学生专注度检测系统&#xff0c;旨在实现对课堂中学生专注度的实时分析与评估。随着智慧教育的快速发展&#xff0c;学生的课堂表现和专注度成为评估学习效果的重要因素之一。然而&#xff0c;传统的专注度评估方法往往依赖于主观…

【汇编】c++游戏开发

由一起学编程创作的‘C/C项目实战&#xff1a;2D射击游戏开发&#xff08;简易版&#xff09;&#xff0c; 440 行源码分享来啦~’&#xff1a; C/C项目实战&#xff1a;2D射击游戏开发&#xff08;简易版&#xff09;&#xff0c; 440 行源码分享来啦~_射击c-CSDN博客文章浏览…

QT_CONFIG宏使用

时常在Qt代码中看到QT_CONFIG宏&#xff0c;之前以为和#define、DEFINES 差不多&#xff0c;看了定义才发现不是那么回事&#xff0c;定义如下&#xff1a; 看注释就知道了QT_CONFIG宏&#xff0c;其实是&#xff1a;实现了一个在编译时期安全检查&#xff0c;检查指定的Qt特性…

Area-Composition模型部署指南

一、介绍 本模型可以通过输入不同的提示词&#xff0c;然后根据各部分提示词进行融合生成图片。如下图&#xff1a; 此图像包含 4 个不同的区域&#xff1a;夜晚、傍晚、白天、早晨 二、部署 环境要求&#xff1a; 最低显存&#xff1a;10G 1. 部署ComfyUI 本篇的模型部署…

计算机网络 (1)互联网的组成

一、互联网的边缘部分 互联网的边缘部分由所有连接在互联网上的主机组成&#xff0c;这些主机又称为端系统&#xff08;end system&#xff09;。端系统可以是各种类型的计算机设备&#xff0c;如个人电脑、智能手机、网络摄像头等&#xff0c;也可以是大型计算机或服务器。端系…

构建SSH僵尸网络

import argparse import paramiko# 定义一个名为Client的类&#xff0c;用于表示SSH客户端相关操作 class Client:# 类的初始化方法&#xff0c;接收主机地址、用户名和密码作为参数def __init__(self, host, user, password):self.host hostself.user userself.password pa…

永磁同步电机负载估计算法--直接计算法

一、原理介绍 本文采用直接计算法估计负载转矩并将估计值前馈至转速环输出&#xff0c;来提高PI调节器应对负载扰动的性能。直接计算法是一种将 PMSM 的运动方程中的负载转矩项直接作为观测量&#xff0c;通过公式的逆向推导整理&#xff0c;将负载转矩项提取出来移到等式的一…

Java:什么是RPC框架?

RPC 远程调用的通信&#xff08;RPC&#xff09; RPC&#xff08;Remote Procedure Call Protocol&#xff09;是指远程过程调用协议。 通俗描述 客户端在不知道调用细节的情况下&#xff0c;可以像调用本地应用程序中的对象一样&#xff0c;调用存在于远程计算机上的某个对…

HTML之列表学习记录

练习题&#xff1a; 图所示为一个问卷调查网页&#xff0c;请制作出来。要求&#xff1a;大标题用h1标签&#xff1b;小题目用h3标签&#xff1b;前两个问题使用有序列表&#xff1b;最后一个问题使用无序列表。 代码&#xff1a; <!DOCTYPE html> <html> <he…