vite+vue3+element-plus項目搭建的方法步驟
使用vite搭建vue3項目
通過在終端中運行以下命令,可以使用 Vite 快速構建 Vue 項目。
$ npm init vite-app <project-name> $ cd <project-name> $ npm install $ npm run dev
引入Element Plus
安裝Element Plus:
npm install element-plus --save
main.js中完整引入 Element Plus:
import { createApp } from 'vue'
import ElementPlus from 'element-plus';
import 'element-plus/lib/theme-chalk/index.css';
import App from './App.vue';
const app = createApp(App)
app.use(ElementPlus)
app.mount('#app')
引入SCSS
執(zhí)行命令安裝sass, npm i sass -D, 然后在vue文件的style標簽下加入lang="scss"即可,這些與以前vue2都是一樣的。
npm i sass -D
引入eslint
安裝eslint
npm i eslint -D
使用eslint對本項目進行初始化
npx eslint --init
按照提示進行設置,這是我選擇的設置

引入vue-router
安裝Vue Router 4
npm install vue-router@4
在src目錄下新建router文件夾,并在router下新建index.js進行路由配置
import * as VueRouter from 'vue-router'
const routes = [
{
path: '/',
component: () => import('../page/Home.vue')
}, {
path: '/login',
component: () => import('../page/Login.vue')
}
]
export default VueRouter.createRouter({
history: VueRouter.createWebHashHistory(),
routes
})
在main.js下使用該中間件
import router from './router' //... app.use(router)
引入vuex
安裝vuex
npm install vuex@next --save
在src下創(chuàng)建store路徑,并在store下創(chuàng)建index.js
import { createStore } from 'vuex'
export default createStore({
state () {
return {
username: ''
}
},
mutations: {
setUserName (state, payload) {
state.username = payload
}
}
})
在main.js下使用store
import vuex from './store' //... app.use(vuex)
引入axios
對于網(wǎng)絡請求,這里使用axios,首先安裝axios
npm i axios
在src目錄下創(chuàng)建api目錄,并在api路徑下創(chuàng)建axios.js,配置axios實例
// axios.js
import axios from 'axios'
// import config from '../../config'
import { useRouter } from 'vue-router'
export default function () {
// 1. 發(fā)送請求的時候,如果有token,需要附帶到請求頭中
const token = localStorage.getItem('token')
let instance = axios
if (token) {
instance = axios.create({
// baseURL: config.server,
headers: {
authorization: 'Bearer ' + token
}
})
}
const router = useRouter()
instance.interceptors.response.use(
(resp) => {
// 2. 響應的時候,如果有token,保存token到本地(localstorage)
if (resp.data.data.token) {
localStorage.setItem('token', resp.data.data.token)
}
// 3. 響應的時候,如果響應的消息碼是403(沒有token,token失效),在本地刪除token
if (resp.data.code === 403) {
localStorage.removeItem('token')
localStorage.removeItem('username')
router.push({ name: 'Login' })
}
return resp
},
(err) => {
return Promise.reject(err)
}
)
return instance
}
在api路徑下創(chuàng)建index.js編寫api
import request from './axios.js'
import config from '../../config'
export default {
// 登錄
login (params) {
return request().post(`${config.server}/login`, params)
},
// 獲取用戶列表
getUserList (params) {
return request().get(`${config.server}/user/list`, {
params: params
})
},
// 添加一個用戶
createUser (params) {
return request().post(`${config.server}/user/`, params)
},
//...
接下來使用vue3的composition api進行組件的開發(fā),這里列舉一個User模塊的開發(fā):
<template>
<div class="user-wrap">
<el-button
class="create-btn"
type="success"
size="small"
@click="handleCreate">新增用戶 +</el-button>
<el-table
:data="tableData"
style="width: 100%">
<el-table-column
label="用戶名"
prop="username">
</el-table-column>
<el-table-column
label="密碼"
prop="password">
</el-table-column>
<el-table-column
align="right">
<template #header>
<el-input
v-model="search"
@blur="searchUser"
size="mini"
placeholder="輸入用戶名搜索"/>
</template>
<template #default="scope">
<el-button
size="mini"
@click="handleEdit(scope.$index, scope.row)">編輯</el-button>
<el-button
size="mini"
type="danger"
@click="handleDelete(scope.$index, scope.row)">刪除</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
:hide-on-single-page="hideOnSinglePage"
class="page-wrap"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[10, 20, 30, 40]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalCount">
</el-pagination>
<el-dialog title="用戶信息" v-model="dialogFormVisible">
<el-form :model="form">
<el-form-item label="用戶名" :label-width="formLabelWidth">
<el-input v-model="form.username" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="密碼" :label-width="formLabelWidth">
<el-input v-model="form.password" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogFormVisible = false">取 消</el-button>
<el-button type="primary" @click="confirmUser">確 定</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script>
import { ref, computed } from 'vue'
import api from '../../../api/index'
import { ElMessage, ElMessageBox } from 'element-plus'
export default {
setup () {
let status = ''
let userId = null
const formLabelWidth = ref('120px')
// 獲取用戶列表
const tableData = ref([])
async function getList (params) {
const res = await api.getUserList(params)
if (res.data.success) {
tableData.value = res.data.data.userList
totalCount.value = res.data.data.count
search.value = ''
} else {
ElMessage.error('獲取用戶列表失?。? + res.data.msg)
}
}
getList()
const form = ref({
username: '',
password: ''
})
const dialogFormVisible = ref(false)
// 提交用戶信息
async function confirmUser () {
// 驗證信息是否齊全
if (!(form.value.username && form.value.password)) {
ElMessage.error('表單信息不全')
return
}
switch (status) {
case 'create':
createUser(form.value)
break
case 'edit':
updateUser(userId, form.value)
break
}
}
// 添加用戶
async function handleCreate () {
form.value = {
username: '',
password: ''
}
dialogFormVisible.value = true
status = 'create'
}
// 添加用戶信息
async function createUser (params) {
const res = await api.createUser(params)
if (res.data.success) {
getList()
ElMessage.success({
message: '添加成功',
type: 'success'
})
dialogFormVisible.value = false
} else {
ElMessage.error('添加失?。? + res.data.msg)
}
}
// 編輯用戶
async function handleEdit (index, row) {
console.log(index, row)
dialogFormVisible.value = true
status = 'edit'
form.value.username = row.username
form.value.password = row.password
userId = row.id
}
// 修改用戶信息
async function updateUser (id, params) {
const res = await api.updateUser(id, params)
if (res.data.success) {
ElMessage.success({
message: '修改成功',
type: 'success'
})
getList()
dialogFormVisible.value = false
} else {
ElMessage.error('修改失?。? + res.data.msg)
}
}
// 刪除用戶
const handleDelete = async (index, row) => {
ElMessageBox.confirm('此操作將永久刪除該用戶, 是否繼續(xù)?', '提示', {
confirmButtonText: '確定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
await delUser(row.id)
}).catch(() => {
ElMessage({
type: 'info',
message: '已取消刪除'
})
})
}
// 刪除用戶信息
async function delUser (id) {
const res = await api.delUser(id)
if (res.data.success) {
getList()
ElMessage.success({
type: 'success',
message: '刪除成功!'
})
} else {
ElMessage.error('刪除失?。? + res.data.msg)
}
}
// 搜索用戶
const search = ref('')
async function searchUser () {
currentPage.value = 1
pageSize.value = 10
if (search.value === '') {
getList({ pageindex: currentPage.value, pagesize: pageSize.value })
return
}
currentPage.val = 1
const res = await api.findUserByUsername({ username: search.value })
if (res.data.success) {
tableData.value = res.data.data.userList
ElMessage.success({
message: '搜索成功',
type: 'success'
})
} else {
ElMessage.error('修改失?。? + res.data.msg)
}
}
// 分頁相關
const totalCount = ref(0)
const currentPage = ref(1)
const pageSize = ref(10)
function handleSizeChange (val) {
pageSize.value = val
getList({ pageindex: currentPage.value, pagesize: val })
}
function handleCurrentChange (val) {
currentPage.value = val
getList({ pageindex: val, pagesize: pageSize.value })
}
// 超過一頁就隱藏分頁插件
const hideOnSinglePage = computed(() => {
return totalCount.value <= 10
})
return {
tableData,
search,
dialogFormVisible,
form,
formLabelWidth,
createUser,
handleEdit,
handleDelete,
confirmUser,
handleCreate,
searchUser,
currentPage,
totalCount,
handleSizeChange,
handleCurrentChange,
pageSize,
hideOnSinglePage
}
}
}
</script>
<style lang="scss" scoped>
.user-wrap{
width: 100%;
min-width: 500px;
.create-btn{
margin-bottom: 10px;
display: flex;
justify-content: flex-end;
}
.page-wrap{
margin-top: 10px;
}
}
</style>
到此這篇關于vite+vue3+element-plus項目搭建的方法步驟的文章就介紹到這了,更多相關vite搭建vue3+ElementPlus內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vue路由守衛(wèi)及路由守衛(wèi)無限循環(huán)問題詳析
這篇文章主要給大家介紹了關于vue路由守衛(wèi)及路由守衛(wèi)無限循環(huán)問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用vue具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-09-09
vue+elementUI實現(xiàn)表單和圖片上傳及驗證功能示例
這篇文章主要介紹了vue+elementUI實現(xiàn)表單和圖片上傳及驗證功能,結合實例形式分析了vue+elementUI表單相關操作技巧,需要的朋友可以參考下2019-05-05
使用Vue-scroller頁面input框不能觸發(fā)滑動的問題及解決方法
這篇文章主要介紹了使用Vue-scroller頁面input框不能觸發(fā)滑動的問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
關于el-table-column的formatter的使用及說明
這篇文章主要介紹了關于el-table-column的formatter的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10
vue實現(xiàn)點擊導航欄滾動頁面到指定位置的功能(推薦)
這篇文章主要介紹了vue實現(xiàn)點擊導航欄滾動頁面到指定位置的功能(推薦),步驟一是是通過獲取不同板塊的滾輪高度,步驟二通過編寫執(zhí)行滾動操作的函數(shù),結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2023-11-11

