国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

搭建后臺管理系統(tǒng)模板(v3+ts+vite)

這篇具有很好參考價值的文章主要介紹了搭建后臺管理系統(tǒng)模板(v3+ts+vite)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

項目初始化

環(huán)境準備

初始化項目

項目配置

一、eslint配置

.eslint.cjs配置文件

?vue3環(huán)境代碼校驗插件

安裝指令

修改.eslintrc.cjs配置文件?

.eslintignore忽略文件

1.4運行腳本?

二、配置prettier?

2.1安裝依賴包

2.2.prettierrc.json添加規(guī)則?

2.3.prettierignore忽略文件

?三、配置stylelint

3.1.stylelintrc.cjs配置文件

3.2.stylelintignore忽略文件

3.3運行腳本

四、配置husky

安裝husky

執(zhí)行

五、配置commitlint

六、強制使用pnpm包管理器工具

三、項目集成

集成element-plus

src別名的配置

環(huán)境變量的配置

SVG圖標配置

svg封裝為全局組件

集成sass

mock數(shù)據(jù)

axios二次封裝

API接口統(tǒng)一管理


項目初始化

今天來帶大家從0開始搭建一個vue3版本的后臺管理系統(tǒng)。一個項目要有統(tǒng)一的規(guī)范,需要使用eslint+stylelint+prettier來對我們的代碼質(zhì)量做檢測和修復,需要使用husky來做commit攔截,需要使用commitlint來統(tǒng)一提交規(guī)范,需要使用preinstall來統(tǒng)一包管理工具。

下面我們就用這一套規(guī)范來初始化我們的項目,集成一個規(guī)范的模版。

環(huán)境準備

  • node v16.14.2
  • pnpm 8.0.0

初始化項目

本項目使用vite進行構(gòu)建,vite官方中文文檔參考:cn.vitejs.dev/guide/

pnpm:performant npm ,意味“高性能的 npm”。pnpm由npm/yarn衍生而來,解決了npm/yarn內(nèi)部潛在的bug,極大的優(yōu)化了性能,擴展了使用場景。被譽為“最先進的包管理工具”

pnpm安裝指令

npm i -g pnpm

項目初始化命令:?

pnpm create vite

進入到項目根目錄pnpm install安裝全部依賴.安裝完依賴運行程序:pnpm run dev

運行完畢項目跑在http://127.0.0.1:5173/,可以訪問你得項目啦

項目配置

一、eslint配置

eslint中文官網(wǎng):ESLint - Pluggable JavaScript linter - ESLint中文

ESLint最初是由Nicholas C. Zakas?于2013年6月創(chuàng)建的開源項目。它的目標是提供一個插件化的javascript代碼檢測工具

首先安裝eslint

pnpm i eslint -D

生成配置文件:.eslint.cjs

npx eslint --init

.eslint.cjs配置文件

module.exports = {
   //運行環(huán)境
    "env": { 
        "browser": true,//瀏覽器端
        "es2021": true,//es2021
    },
    //規(guī)則繼承
    "extends": [ 
       //全部規(guī)則默認是關(guān)閉的,這個配置項開啟推薦規(guī)則,推薦規(guī)則參照文檔
       //比如:函數(shù)不能重名、對象不能出現(xiàn)重復key
        "eslint:recommended",
        //vue3語法規(guī)則
        "plugin:vue/vue3-essential",
        //ts語法規(guī)則
        "plugin:@typescript-eslint/recommended"
    ],
    //要為特定類型的文件指定處理器
    "overrides": [
    ],
    //指定解析器:解析器
    //Esprima 默認解析器
    //Babel-ESLint babel解析器
    //@typescript-eslint/parser ts解析器
    "parser": "@typescript-eslint/parser",
    //指定解析器選項
    "parserOptions": {
        "ecmaVersion": "latest",//校驗ECMA最新版本
        "sourceType": "module"http://設(shè)置為"script"(默認),或者"module"代碼在ECMAScript模塊中
    },
    //ESLint支持使用第三方插件。在使用插件之前,您必須使用npm安裝它
    //該eslint-plugin-前綴可以從插件名稱被省略
    "plugins": [
        "vue",
        "@typescript-eslint"
    ],
    //eslint規(guī)則
    "rules": {
    }
}

?vue3環(huán)境代碼校驗插件

# 讓所有與prettier規(guī)則存在沖突的Eslint rules失效,并使用prettier進行代碼檢查
"eslint-config-prettier": "^8.6.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-node": "^11.1.0",
# 運行更漂亮的Eslint,使prettier規(guī)則優(yōu)先級更高,Eslint優(yōu)先級低
"eslint-plugin-prettier": "^4.2.1",
# vue.js的Eslint插件(查找vue語法錯誤,發(fā)現(xiàn)錯誤指令,查找違規(guī)風格指南
"eslint-plugin-vue": "^9.9.0",
# 該解析器允許使用Eslint校驗所有babel code
"@babel/eslint-parser": "^7.19.1",

安裝指令

pnpm install -D eslint-plugin-import eslint-plugin-vue eslint-plugin-node eslint-plugin-prettier eslint-config-prettier eslint-plugin-node @babel/eslint-parser

修改.eslintrc.cjs配置文件?

// @see https://eslint.bootcss.com/docs/rules/

module.exports = {
  env: {
    browser: true,
    es2021: true,
    node: true,
    jest: true,
  },
  /* 指定如何解析語法 */
  parser: 'vue-eslint-parser',
  /** 優(yōu)先級低于 parse 的語法解析配置 */
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module',
    parser: '@typescript-eslint/parser',
    jsxPragma: 'React',
    ecmaFeatures: {
      jsx: true,
    },
  },
  /* 繼承已有的規(guī)則 */
  extends: [
    'eslint:recommended',
    'plugin:vue/vue3-essential',
    'plugin:@typescript-eslint/recommended',
    'plugin:prettier/recommended',
  ],
  plugins: ['vue', '@typescript-eslint'],
  /*
   * "off" 或 0    ==>  關(guān)閉規(guī)則
   * "warn" 或 1   ==>  打開的規(guī)則作為警告(不影響代碼執(zhí)行)
   * "error" 或 2  ==>  規(guī)則作為一個錯誤(代碼不能執(zhí)行,界面報錯)
   */
  rules: {
    // eslint(https://eslint.bootcss.com/docs/rules/)
    'no-var': 'error', // 要求使用 let 或 const 而不是 var
    'no-multiple-empty-lines': ['warn', { max: 1 }], // 不允許多個空行
    'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
    'no-unexpected-multiline': 'error', // 禁止空余的多行
    'no-useless-escape': 'off', // 禁止不必要的轉(zhuǎn)義字符

    // typeScript (https://typescript-eslint.io/rules)
    '@typescript-eslint/no-unused-vars': 'error', // 禁止定義未使用的變量
    '@typescript-eslint/prefer-ts-expect-error': 'error', // 禁止使用 @ts-ignore
    '@typescript-eslint/no-explicit-any': 'off', // 禁止使用 any 類型
    '@typescript-eslint/no-non-null-assertion': 'off',
    '@typescript-eslint/no-namespace': 'off', // 禁止使用自定義 TypeScript 模塊和命名空間。
    '@typescript-eslint/semi': 'off',

    // eslint-plugin-vue (https://eslint.vuejs.org/rules/)
    'vue/multi-word-component-names': 'off', // 要求組件名稱始終為 “-” 鏈接的單詞
    'vue/script-setup-uses-vars': 'error', // 防止<script setup>使用的變量<template>被標記為未使用
    'vue/no-mutating-props': 'off', // 不允許組件 prop的改變
    'vue/attribute-hyphenation': 'off', // 對模板中的自定義組件強制執(zhí)行屬性命名樣式
  },
}

.eslintignore忽略文件

dist
node_modules

1.4運行腳本?

package.json新增兩個運行腳本

"scripts": {
    "lint": "eslint src",
    "fix": "eslint src --fix",
}

二、配置prettier?

有了eslint,為什么還要有prettier?eslint針對的是javascript,他是一個檢測工具,包含js語法以及少部分格式問題,在eslint看來,語法對了就能保證代碼正常運行,格式問題屬于其次;

而prettier屬于格式化工具,它看不慣格式不統(tǒng)一,所以它就把eslint沒干好的事接著干,另外,prettier支持

包含js在內(nèi)的多種語言。

總結(jié)起來,eslint和prettier這倆兄弟一個保證js代碼質(zhì)量,一個保證代碼美觀。

2.1安裝依賴包

pnpm install -D eslint-plugin-prettier prettier eslint-config-prettier

2.2.prettierrc.json添加規(guī)則?

{
  "singleQuote": true,
  "semi": false,
  "bracketSpacing": true,
  "htmlWhitespaceSensitivity": "ignore",
  "endOfLine": "auto",
  "trailingComma": "all",
  "tabWidth": 2
}

2.3.prettierignore忽略文件

/dist/*
/html/*
.local
/node_modules/**
**/*.svg
**/*.sh
/public/*

通過pnpm run lint去檢測語法,如果出現(xiàn)不規(guī)范格式,通過pnpm run fix 修改

?三、配置stylelint

stylelint為css的lint工具??筛袷交痗ss代碼,檢查css語法錯誤與不合理的寫法,指定css書寫順序等。

我們的項目中使用scss作為預處理器,安裝以下依賴:

pnpm add sass sass-loader stylelint postcss postcss-scss postcss-html stylelint-config-prettier stylelint-config-recess-order stylelint-config-recommended-scss stylelint-config-standard stylelint-config-standard-vue stylelint-scss stylelint-order stylelint-config-standard-scss -D

3.1.stylelintrc.cjs配置文件

官網(wǎng):Home | Stylelint中文文檔 | Stylelint中文網(wǎng)

// @see https://stylelint.bootcss.com/

module.exports = {
  extends: [
    'stylelint-config-standard', // 配置stylelint拓展插件
    'stylelint-config-html/vue', // 配置 vue 中 template 樣式格式化
    'stylelint-config-standard-scss', // 配置stylelint scss插件
    'stylelint-config-recommended-vue/scss', // 配置 vue 中 scss 樣式格式化
    'stylelint-config-recess-order', // 配置stylelint css屬性書寫順序插件,
    'stylelint-config-prettier', // 配置stylelint和prettier兼容
  ],
  overrides: [
    {
      files: ['**/*.(scss|css|vue|html)'],
      customSyntax: 'postcss-scss',
    },
    {
      files: ['**/*.(html|vue)'],
      customSyntax: 'postcss-html',
    },
  ],
  ignoreFiles: [
    '**/*.js',
    '**/*.jsx',
    '**/*.tsx',
    '**/*.ts',
    '**/*.json',
    '**/*.md',
    '**/*.yaml',
  ],
  /**
   * null  => 關(guān)閉該規(guī)則
   * always => 必須
   */
  rules: {
    'value-keyword-case': null, // 在 css 中使用 v-bind,不報錯
    'no-descending-specificity': null, // 禁止在具有較高優(yōu)先級的選擇器后出現(xiàn)被其覆蓋的較低優(yōu)先級的選擇器
    'function-url-quotes': 'always', // 要求或禁止 URL 的引號 "always(必須加上引號)"|"never(沒有引號)"
    'no-empty-source': null, // 關(guān)閉禁止空源碼
    'selector-class-pattern': null, // 關(guān)閉強制選擇器類名的格式
    'property-no-unknown': null, // 禁止未知的屬性(true 為不允許)
    'block-opening-brace-space-before': 'always', //大括號之前必須有一個空格或不能有空白符
    'value-no-vendor-prefix': null, // 關(guān)閉 屬性值前綴 --webkit-box
    'property-no-vendor-prefix': null, // 關(guān)閉 屬性前綴 -webkit-mask
    'selector-pseudo-class-no-unknown': [
      // 不允許未知的選擇器
      true,
      {
        ignorePseudoClasses: ['global', 'v-deep', 'deep'], // 忽略屬性,修改element默認樣式的時候能使用到
      },
    ],
  },
}

3.2.stylelintignore忽略文件

/node_modules/*
/dist/*
/html/*
/public/*

3.3運行腳本

"scripts": {
	"lint:style": "stylelint src/**/*.{css,scss,vue} --cache --fix"
}

最后配置統(tǒng)一的prettier來格式化我們的js和css,html代碼?

 "scripts": {
    "dev": "vite --open",
    "build": "vue-tsc && vite build",
    "preview": "vite preview",
    "lint": "eslint src",
    "fix": "eslint src --fix",
    "format": "prettier --write \"./**/*.{html,vue,ts,js,json,md}\"",
    "lint:eslint": "eslint src/**/*.{ts,vue} --cache --fix",
    "lint:style": "stylelint src/**/*.{css,scss,vue} --cache --fix"
  },

當我們運行pnpm run format的時候,會把代碼直接格式化

四、配置husky

在上面我們已經(jīng)集成好了我們代碼校驗工具,但是需要每次手動的去執(zhí)行命令才會格式化我們的代碼。如果有人沒有格式化就提交了遠程倉庫中,那這個規(guī)范就沒什么用。所以我們需要強制讓開發(fā)人員按照代碼規(guī)范來提交。

要做到這件事情,就需要利用husky在代碼提交之前觸發(fā)git hook(git在客戶端的鉤子),然后執(zhí)行pnpm run format來自動的格式化我們的代碼。

安裝husky

pnpm install -D husky

執(zhí)行

npx husky-init

會在根目錄下生成個一個.husky目錄,在這個目錄下面會有一個pre-commit文件,這個文件里面的命令在我們執(zhí)行commit的時候就會執(zhí)行

.husky/pre-commit文件添加如下命令:

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
pnpm run format

當我們對代碼進行commit操作的時候,就會執(zhí)行命令,對代碼進行格式化,然后再提交。

?

五、配置commitlint

對于我們的commit信息,也是有統(tǒng)一規(guī)范的,不能隨便寫,要讓每個人都按照統(tǒng)一的標準來執(zhí)行,我們可以利用commitlint來實現(xiàn)。

安裝包

pnpm add @commitlint/config-conventional @commitlint/cli -D

添加配置文件,新建commitlint.config.cjs(注意是cjs),然后添加下面的代碼:

module.exports = {
  extends: ['@commitlint/config-conventional'],
  // 校驗規(guī)則
  rules: {
    'type-enum': [
      2,
      'always',
      [
        'feat',
        'fix',
        'docs',
        'style',
        'refactor',
        'perf',
        'test',
        'chore',
        'revert',
        'build',
      ],
    ],
    'type-case': [0],
    'type-empty': [0],
    'scope-empty': [0],
    'scope-case': [0],
    'subject-full-stop': [0, 'never'],
    'subject-case': [0, 'never'],
    'header-max-length': [0, 'always', 72],
  },
}

package.json中配置scripts命令

# 在scrips中添加下面的代碼
{
"scripts": {
    "commitlint": "commitlint --config commitlint.config.cjs -e -V"
  },
}

配置結(jié)束,現(xiàn)在當我們填寫commit信息的時候,前面就需要帶著下面的subject

'feat',//新特性、新功能
'fix',//修改bug
'docs',//文檔修改
'style',//代碼格式修改, 注意不是 css 修改
'refactor',//代碼重構(gòu)
'perf',//優(yōu)化相關(guān),比如提升性能、體驗
'test',//測試用例修改
'chore',//其他修改, 比如改變構(gòu)建流程、或者增加依賴庫、工具等
'revert',//回滾到上一個版本
'build',//編譯相關(guān)的修改,例如發(fā)布版本、對項目構(gòu)建或者依賴的改動

配置husky

npx husky add .husky/commit-msg 

在生成的commit-msg文件中添加下面的命令

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
pnpm commitlint

當我們 commit 提交信息時,就不能再隨意寫了,必須是 git commit -m 'fix: xxx' 符合類型的才可以,需要注意的是類型的后面需要用英文的 :,并且冒號后面是需要空一格的,這個是不能省略的

六、強制使用pnpm包管理器工具

團隊開發(fā)項目的時候,需要統(tǒng)一包管理器工具,因為不同包管理器工具下載同一個依賴,可能版本不一樣,

導致項目出現(xiàn)bug問題,因此包管理器工具需要統(tǒng)一管理?。?!

在根目錄創(chuàng)建scritps/preinstall.js文件,添加下面的內(nèi)容

if (!/pnpm/.test(process.env.npm_execpath || '')) {
  console.warn(
    `\u001b[33mThis repository must using pnpm as the package manager ` +
    ` for scripts to work properly.\u001b[39m\n`,
  )
  process.exit(1)
}

配置命令

"scripts": {
	"preinstall": "node ./scripts/preinstall.js"
}

當我們使用npm或者yarn來安裝包的時候,就會報錯了。原理就是在install的時候會觸發(fā)preinstall(npm提供的生命周期鉤子)這個文件里面的代碼。

三、項目集成

集成element-plus

硅谷甄選運營平臺,UI組件庫采用的element-plus,因此需要集成element-plus插件!??!

官網(wǎng)地址:一個 Vue 3 UI 框架 | Element Plus

pnpm install element-plus @element-plus/icons-vue

入口文件main.ts全局安裝element-plus,element-plus默認支持語言英語設(shè)置為中文

import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css'
//@ts-ignore忽略當前文件ts類型的檢測否則有紅色提示(打包會失敗)
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
app.use(ElementPlus, {
    locale: zhCn
})

Element Plus全局組件類型聲明

// tsconfig.json
{
  "compilerOptions": {
    // ...
    "types": ["element-plus/global"]
  }
}

配置完畢可以測試element-plus組件與圖標的使用.

src別名的配置

在開發(fā)項目的時候文件與文件關(guān)系可能很復雜,因此我們需要給src文件夾配置一個別名?。?!

// vite.config.ts
import {defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
export default defineConfig({
    plugins: [vue()],
    resolve: {
        alias: {
            "@": path.resolve("./src") // 相對路徑別名配置,使用 @ 代替 src
        }
    }
})

TypeScript 編譯配置

// tsconfig.json
{
  "compilerOptions": {
    "baseUrl": "./", // 解析非相對模塊的基地址,默認是當前目錄
    "paths": { //路徑映射,相對于baseUrl
      "@/*": ["src/*"] 
    }
  }
}

環(huán)境變量的配置

項目開發(fā)過程中,至少會經(jīng)歷開發(fā)環(huán)境、測試環(huán)境和生產(chǎn)環(huán)境(即正式環(huán)境)三個階段。不同階段請求的狀態(tài)(如接口地址等)不盡相同,若手動切換接口地址是相當繁瑣且易出錯的。于是環(huán)境變量配置的需求就應(yīng)運而生,我們只需做簡單的配置,把環(huán)境狀態(tài)切換的工作交給代碼。

開發(fā)環(huán)境(development)
顧名思義,開發(fā)使用的環(huán)境,每位開發(fā)人員在自己的dev分支上干活,開發(fā)到一定程度,同事會合并代碼,進行聯(lián)調(diào)。

測試環(huán)境(testing)
測試同事干活的環(huán)境啦,一般會由測試同事自己來部署,然后在此環(huán)境進行測試

生產(chǎn)環(huán)境(production)
生產(chǎn)環(huán)境是指正式提供對外服務(wù)的,一般會關(guān)掉錯誤報告,打開錯誤日志。(正式提供給客戶使用的環(huán)境。)

注意:一般情況下,一個環(huán)境對應(yīng)一臺服務(wù)器,也有的公司開發(fā)與測試環(huán)境是一臺服務(wù)器?。?!

項目根目錄分別添加 開發(fā)、生產(chǎn)和測試環(huán)境的文件!

.env.development
.env.production
.env.test

文件內(nèi)容

# 變量必須以 VITE_ 為前綴才能暴露給外部讀取
NODE_ENV = 'development'
VITE_APP_TITLE = '硅谷甄選運營平臺'
VITE_APP_BASE_API = '/dev-api'
NODE_ENV = 'production'
VITE_APP_TITLE = '硅谷甄選運營平臺'
VITE_APP_BASE_API = '/prod-api'
# 變量必須以 VITE_ 為前綴才能暴露給外部讀取
NODE_ENV = 'test'
VITE_APP_TITLE = '硅谷甄選運營平臺'
VITE_APP_BASE_API = '/test-api'

配置運行命令:package.json

 "scripts": {
    "dev": "vite --open",
    "build:test": "vue-tsc && vite build --mode test",
    "build:pro": "vue-tsc && vite build --mode production",
    "preview": "vite preview"
  },

通過import.meta.env獲取環(huán)境變量

SVG圖標配置

在開發(fā)項目的時候經(jīng)常會用到svg矢量圖,而且我們使用SVG以后,頁面上加載的不再是圖片資源,

這對頁面性能來說是個很大的提升,而且我們SVG文件比img要小的很多,放在項目中幾乎不占用資源。

安裝SVG依賴插件

pnpm install vite-plugin-svg-icons -D

vite.config.ts中配置插件

import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'
export default () => {
  return {
    plugins: [
      createSvgIconsPlugin({
        // Specify the icon folder to be cached
        iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
        // Specify symbolId format
        symbolId: 'icon-[dir]-[name]',
      }),
    ],
  }
}

入口文件導入

import 'virtual:svg-icons-register'

svg封裝為全局組件

因為項目很多模塊需要使用圖標,因此把它封裝為全局組件!??!

在src/components目錄下創(chuàng)建一個SvgIcon組件:代表如下

<template>
  <div>
    <svg :style="{ width: width, height: height }">
      <use :xlink:href="prefix + name" :fill="color"></use>
    </svg>
  </div>
</template>

<script setup lang="ts">
defineProps({
  //xlink:href屬性值的前綴
  prefix: {
    type: String,
    default: '#icon-'
  },
  //svg矢量圖的名字
  name: String,
  //svg圖標的顏色
  color: {
    type: String,
    default: ""
  },
  //svg寬度
  width: {
    type: String,
    default: '16px'
  },
  //svg高度
  height: {
    type: String,
    default: '16px'
  }

})
</script>
<style scoped></style>

在src文件夾目錄下創(chuàng)建一個index.ts文件:用于注冊components文件夾內(nèi)部全部全局組件!??!

import SvgIcon from './SvgIcon/index.vue';
import type { App, Component } from 'vue';
const components: { [name: string]: Component } = { SvgIcon };
export default {
    install(app: App) {
        Object.keys(components).forEach((key: string) => {
            app.component(key, components[key]);
        })
    }
}

在入口文件引入src/index.ts文件,通過app.use方法安裝自定義插件

import gloablComponent from './components/index';
app.use(gloablComponent);

集成sass

我們目前在組件內(nèi)部已經(jīng)可以使用scss樣式,因為在配置styleLint工具的時候,項目當中已經(jīng)安裝過sass sass-loader,因此我們再組件內(nèi)可以使用scss語法?。?!需要加上lang="scss"

<style scoped lang="scss"></style>

接下來我們?yōu)轫椖刻砑右恍┤值臉邮?/p>

在src/styles目錄下創(chuàng)建一個index.scss文件,當然項目中需要用到清除默認樣式,因此在index.scss引入reset.scss

@import reset.scss

在入口文件引入

import '@/styles'

但是你會發(fā)現(xiàn)在src/styles/index.scss全局樣式文件中沒有辦法使用變量.因此需要給項目中引入全局變量變量.因此需要給項目中引入全局變量.

在style/variable.scss創(chuàng)建一個variable.scss文件!

在vite.config.ts文件配置如下:

export default defineConfig((config) => {
	css: {
      preprocessorOptions: {
        scss: {
          javascriptEnabled: true,
          additionalData: '@import "./src/styles/variable.scss";',
        },
      },
    },
	}
}

@import "./src/styles/variable.less";后面的;不要忘記,不然會報錯!

配置完畢你會發(fā)現(xiàn)scss提供這些全局變量可以在組件樣式中使用了?。?!

mock數(shù)據(jù)

安裝依賴:vite-plugin-mock - npm

pnpm install -D vite-plugin-mock mockjs

在 vite.config.js 配置文件啟用插件。

import { UserConfigExport, ConfigEnv } from 'vite'
import { viteMockServe } from 'vite-plugin-mock'
import vue from '@vitejs/plugin-vue'
export default ({ command })=> {
  return {
    plugins: [
      vue(),
      viteMockServe({
        localEnabled: command === 'serve',
      }),
    ],
  }
}

在根目錄創(chuàng)建mock文件夾:去創(chuàng)建我們需要mock數(shù)據(jù)與接口!?。?/p>

在mock文件夾內(nèi)部創(chuàng)建一個user.ts文件

//用戶信息數(shù)據(jù)
function createUserList() {
    return [
        {
            userId: 1,
            avatar:
                'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
            username: 'admin',
            password: '111111',
            desc: '平臺管理員',
            roles: ['平臺管理員'],
            buttons: ['cuser.detail'],
            routes: ['home'],
            token: 'Admin Token',
        },
        {
            userId: 2,
            avatar:
                'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
            username: 'system',
            password: '111111',
            desc: '系統(tǒng)管理員',
            roles: ['系統(tǒng)管理員'],
            buttons: ['cuser.detail', 'cuser.user'],
            routes: ['home'],
            token: 'System Token',
        },
    ]
}

export default [
    // 用戶登錄接口
    {
        url: '/api/user/login',//請求地址
        method: 'post',//請求方式
        response: ({ body }) => {
            //獲取請求體攜帶過來的用戶名與密碼
            const { username, password } = body;
            //調(diào)用獲取用戶信息函數(shù),用于判斷是否有此用戶
            const checkUser = createUserList().find(
                (item) => item.username === username && item.password === password,
            )
            //沒有用戶返回失敗信息
            if (!checkUser) {
                return { code: 201, data: { message: '賬號或者密碼不正確' } }
            }
            //如果有返回成功信息
            const { token } = checkUser
            return { code: 200, data: { token } }
        },
    },
    // 獲取用戶信息
    {
        url: '/api/user/info',
        method: 'get',
        response: (request) => {
            //獲取請求頭攜帶token
            const token = request.headers.token;
            //查看用戶信息是否包含有次token用戶
            const checkUser = createUserList().find((item) => item.token === token)
            //沒有返回失敗的信息
            if (!checkUser) {
                return { code: 201, data: { message: '獲取用戶信息失敗' } }
            }
            //如果有返回成功信息
            return { code: 200, data: {checkUser} }
        },
    },
]

安裝axios

pnpm install axios

最后通過axios測試接口?。。?/p>

axios二次封裝

在開發(fā)項目的時候避免不了與后端進行交互,因此我們需要使用axios插件實現(xiàn)發(fā)送網(wǎng)絡(luò)請求。在開發(fā)項目的時候

我們經(jīng)常會把axios進行二次封裝。

目的:

1:使用請求攔截器,可以在請求攔截器中處理一些業(yè)務(wù)(開始進度條、請求頭攜帶公共參數(shù))

2:使用響應(yīng)攔截器,可以在響應(yīng)攔截器中處理一些業(yè)務(wù)(進度條結(jié)束、簡化服務(wù)器返回的數(shù)據(jù)、處理http網(wǎng)絡(luò)錯誤)

在根目錄下創(chuàng)建utils/request.ts

import axios from "axios";
import { ElMessage } from "element-plus";
//創(chuàng)建axios實例
let request = axios.create({
    baseURL: import.meta.env.VITE_APP_BASE_API,
    timeout: 5000
})
//請求攔截器
request.interceptors.request.use(config => {
    return config;
});
//響應(yīng)攔截器
request.interceptors.response.use((response) => {
    return response.data;
}, (error) => {
    //處理網(wǎng)絡(luò)錯誤
    let msg = '';
    let status = error.response.status;
    switch (status) {
        case 401:
            msg = "token過期";
            break;
        case 403:
            msg = '無權(quán)訪問';
            break;
        case 404:
            msg = "請求地址錯誤";
            break;
        case 500:
            msg = "服務(wù)器出現(xiàn)問題";
            break;
        default:
            msg = "無網(wǎng)絡(luò)";

    }
    ElMessage({
        type: 'error',
        message: msg
    })
    return Promise.reject(error);
});
export default request;

API接口統(tǒng)一管理

在開發(fā)項目的時候,接口可能很多需要統(tǒng)一管理。在src目錄下去創(chuàng)建api文件夾去統(tǒng)一管理項目的接口;

比如:下面方式文章來源地址http://www.zghlxwxcb.cn/news/detail-465934.html

//統(tǒng)一管理咱們項目用戶相關(guān)的接口

import request from '@/utils/request'

import type {

 loginFormData,

 loginResponseData,

 userInfoReponseData,

} from './type'

//項目用戶相關(guān)的請求地址

enum API {

 LOGIN_URL = '/admin/acl/index/login',

 USERINFO_URL = '/admin/acl/index/info',

 LOGOUT_URL = '/admin/acl/index/logout',

}
//登錄接口
export const reqLogin = (data: loginFormData) =>
 request.post<any, loginResponseData>(API.LOGIN_URL, data)
//獲取用戶信息

export const reqUserInfo = () =>

 request.get<any, userInfoReponseData>(API.USERINFO_URL)

//退出登錄

export const reqLogout = () => request.post<any, any>(API.LOGOUT_URL)

到了這里,關(guān)于搭建后臺管理系統(tǒng)模板(v3+ts+vite)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • vue3 + vite + ts + element-ui搭建后臺管理框架

    vue3 + vite + ts + element-ui搭建后臺管理框架

    vue3官網(wǎng) vue3官網(wǎng) vite vite官網(wǎng)連接 npm 安裝 按照提示輸出即可! vite 中使用 less 或 scss 安裝后在style 中設(shè)置對應(yīng)的 scss 或 less,推薦scss編譯 安裝less依賴 安裝sass依賴 推薦使用插件,vite.config.js配置; unplugin-vue-components // 自動導入vue中hook reactive ref等AIP; unplugin-auto-import // 自動

    2024年02月15日
    瀏覽(52)
  • 【vue3-element-admin 】基于 Vue3 + Vite4 + TypeScript + Element-Plus 從0到1搭建后臺管理系統(tǒng)(前后端開源)

    【vue3-element-admin 】基于 Vue3 + Vite4 + TypeScript + Element-Plus 從0到1搭建后臺管理系統(tǒng)(前后端開源)

    vue3-element-admin 是基于 vue-element-admin 升級的 Vue3 + Element Plus 版本的后臺管理前端解決方案,技術(shù)棧為 Vue3 + Vite4 + TypeScript + Element Plus + Pinia + Vue Router 等當前主流框架。 相較于其他管理前端框架,vue3-element-admin 的優(yōu)勢在于 一有一無 (有配套后端、無復雜封裝): 配套完整 Java 后

    2023年04月26日
    瀏覽(103)
  • 基于react18+vite4+arco.design搭建極簡版后臺管理模板

    基于react18+vite4+arco.design搭建極簡版后臺管理模板

    趁著國慶前夕整了一個 vite4 結(jié)合 react18 搭建后臺管理模板,搭配上字節(jié)團隊react組件庫 ArcoDesign ,整體操作功能非常絲滑。目前功能 支持多種模板布局、暗黑/亮色模式、國際化、權(quán)限驗證、多級路由菜單、tabview標簽欄快捷菜單、全屏控制 等功能。極簡非凡的布局界面、高定

    2024年02月08日
    瀏覽(22)
  • Vite-Admin后臺管理系統(tǒng)|vite4+vue3+pinia前端后臺框架實例

    Vite-Admin后臺管理系統(tǒng)|vite4+vue3+pinia前端后臺框架實例

    基于 vite4.x+vue3+pinia 前端后臺管理系統(tǒng)解決方案 ViteAdmin 。 前段時間分享了一篇vue3自研pc端UI組件庫VEPlus。這次帶來最新開發(fā)的基于 vite4+vue3+pinia 技術(shù)棧搭配ve-plus組件庫構(gòu)建的中后臺權(quán)限管理系統(tǒng)框架。 支持vue-i18n國際化多語言、動態(tài)路由鑒權(quán)、4種布局模板及tab頁面緩存 等功

    2023年04月13日
    瀏覽(27)
  • 后臺管理系統(tǒng)模板 - zhadminvue

    后臺管理系統(tǒng)模板 - zhadminvue

    沒事的時候?qū)懥艘粋€后臺管理系統(tǒng)模板:zhadminvue,歡迎大家提issue和PR,以及想要添加一些有意思的功能模塊,在沒事的時候我也會加進去~ github:https://github.com/iotzzh/zh-admin-vue gitee: https://gitee.com/iotzzh/zh-admin.git 預覽地址:https://zhadminvue.iotzzh.com/login nrm(1.2.5, taobao) + nvm(1.1.7) +

    2024年02月09日
    瀏覽(19)
  • 【vue3-element-admin 】基于 Vue3 + Vite4 + TypeScript + Element-Plus 從0到1搭建后臺管理系統(tǒng)(前后端開源@有來開源組織)

    【vue3-element-admin 】基于 Vue3 + Vite4 + TypeScript + Element-Plus 從0到1搭建后臺管理系統(tǒng)(前后端開源@有來開源組織)

    vue3-element-admin 是基于 vue-element-admin 升級的 Vue3 + Element Plus 版本的后臺管理前端解決方案,技術(shù)棧為 Vue3 + Vite4 + TypeScript + Element Plus + Pinia + Vue Router 等當前主流框架。 相較于其他管理前端框架,vue3-element-admin 的優(yōu)勢在于 一有一無 ( 有 配套后端、 無 復雜封裝): 配套完整 J

    2023年04月21日
    瀏覽(97)
  • 【vue3-element-admin 】基于 Vue3 + Vite4 + TypeScript5+ Element-Plus 從0到1搭建企業(yè)級后臺管理系統(tǒng)(前后端開源)

    【vue3-element-admin 】基于 Vue3 + Vite4 + TypeScript5+ Element-Plus 從0到1搭建企業(yè)級后臺管理系統(tǒng)(前后端開源)

    vue3-element-admin 是基于 vue-element-admin 升級的 Vue3 + Element Plus 版本的后臺管理前端解決方案,技術(shù)棧為 Vue3 + Vite4 + TypeScript + Element Plus + Pinia + Vue Router 等當前主流框架。 相較于其他管理前端框架,vue3-element-admin 的優(yōu)勢在于 一有一無 (有配套后端、無復雜封裝): 配套完整 Java 后

    2024年02月07日
    瀏覽(98)
  • Vue3后臺管理系統(tǒng)模板推薦

    Vue3后臺管理系統(tǒng)模板推薦

    Vue-Vben-Admin(github上的標星數(shù)為14.2k)是一個基于 Vue3.0、Vite、 Ant-Design-Vue、TypeScript 的后臺解決方案,目標是為開發(fā)中大型項目提供開箱即用的解決方案。包括二次封裝組件、utils、hooks、動態(tài)菜單、權(quán)限校驗、按鈕級別權(quán)限控制等功能。項目使用前端較新的技術(shù)棧,可以作為

    2024年02月13日
    瀏覽(22)
  • vue3開源后臺管理系統(tǒng)模板

    vue3開源后臺管理系統(tǒng)模板

    2022-08-28 推薦一些 Vue3 常用后臺管理系統(tǒng)模板。 Vue3 在今年2月份已成為新的默認版本,本文收集了一些 Vue3 的后臺管理系統(tǒng)模板,分享給在座的仌 ??。 還是老規(guī)矩,按照 Github 星標數(shù)量來依次介紹。 個人較推薦 vue-vben-admin、vue-pure-admin、naive-ui-admin、vue3-composition-admin、vue-

    2024年02月03日
    瀏覽(24)
  • 能不能推薦個 vue 后臺管理系統(tǒng)模板?

    能不能推薦個 vue 后臺管理系統(tǒng)模板?

    下面是我整理的vue2和vue3的一些后臺管理系統(tǒng)模板,希望對你有幫助~ 1、iview-admin Star: 16.4k 基于 iview組件庫開發(fā)的一款后臺管理系統(tǒng)框架,提供了一系列的強大組件和基礎(chǔ)模板,方便開發(fā)人員快速搭建一套功能豐富、界面美觀、易用的管理系統(tǒng)。iview-admin具有可定制化的主題樣

    2024年02月13日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包