vue可以用vite打包吗(vite+vue3+element-plus项目搭建的方法步骤)
类别:编程学习 浏览量:2819
时间:2022-01-14 02:14:55 vue可以用vite打包吗
vite+vue3+element-plus项目搭建的方法步骤使用vite搭建vue3项目通过在终端中运行以下命令,可以使用 Vite 快速构建 Vue 项目。
$ npm init vite-app <project-name> $ cd <project-name> $ npm install $ npm run dev
安装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')
执行命令安装sass, npm i sass -D, 然后在vue文件的style标签下加入lang="scss"即可,这些与以前vue2都是一样的。
npm i sass -D
安装eslint
npm i eslint -D
使用eslint对本项目进行初始化
npx eslint --init
按照提示进行设置,这是我选择的设置
安装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
npm install vuex@next --save
在src下创建store路径,并在store下创建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,首先安装axios
npm i axios
在src目录下创建api目录,并在api路径下创建axios.js,配置axios实例
// axios.js import axios from 'axios' // import config from '../../config' import { useRouter } from 'vue-router' export default function () { // 1. 发送请求的时候,如果有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路径下创建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进行组件的开发,这里列举一个User模块的开发:
<template> <li 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> </li> </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('此操作将永久删除该用户, 是否继续?', '提示', { 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内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- vio更新后怎么是黑页面(vite2.0 踩坑实录)
- vite2源码解析(Vite创建项目的实现步骤)
- vue2和vue3都如何创建项目(vue3.0+vite2实现动态异步组件懒加载)
- vue可以用vite打包吗(vite+vue3+element-plus项目搭建的方法步骤)
- vue3.0全家桶教程elementui学习(vite+vue3.0+ts+element-plus快速搭建项目的实现)
- 花不语 下 如果重来一次的话,你还会这么选择吗(花不语下如果重来一次的话)
- 城市记忆之上海 最难忘的是老弄堂里的市井味道(城市记忆之上海)
- 太鸡贼了,这老小区轻松搞定了停车问题(这老小区轻松搞定了停车问题)
- 太鸡贼了,这老小区轻松搞定了停车问题(这老小区轻松搞定了停车问题)
- 节日我在岗|警景相融 平安相伴(节日我在岗警景相融)
- 战 疫 时刻 致敬每一位石化大学的 守护者(战疫时刻)
热门推荐
- linuxudp通信程序(linux对于UDP的学习)
- html5开发的app(浅谈Html5页面打开app的一些思考)
- word-break、word-wrap、white-space的用法
- mysqltimestamp如何比较(为什么MySQL 使用timestamp可以无视时区问题.)
- 腾讯云轻量服务器怎么降低延迟(腾讯云星星海SA2云服务器配置规格性能实际评测)
- webapp隐藏地址栏
- php 处理html表单(PHP使用HTML5 FormData对象提交表单操作示例)
- 织梦cms申请代码怎么填(织梦CMS常用的几种字段判断输出实例详解)
- 织梦标签在哪里设置(织梦dedecms gbk站点转utf8之mip改造方案分享)
- Mysql官方性能测试工具mysqlslap的使用简介(Mysql官方性能测试工具mysqlslap的使用简介)