首页 > 其他分享 >从零开始vue3管理系统

从零开始vue3管理系统

时间:2022-12-30 09:34:35浏览次数:55  
标签:npm vue 管理系统 router 从零开始 vue3 import login vite

1,npm init vue@latest
TypeScript Yes
JSX No
Vue Router Yes
Pinia Yes //替代vuex做state
Vitest Yes //单元测试
ESLint Yes
Prettier Yes
2,cd vue-project
npm install
npm run dev
("node":">=14.18.0","npm":">=8.0.0")
3, vue3不支持 vetur 需要禁用 vscode vetur插件,否则有路径报错

4,App.vue 改成

<template>
  <RouterView />
</template>

<script setup lang="ts">
import { RouterView } from "vue-router";
</script>

 5,安装element-plus

npm install element-plus --save

6,引入element-plus

main.ts 改成

import { createApp } from 'vue'
import { createPinia } from 'pinia'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'
import router from './router'
import './assets/main.css'

const app = createApp(App)

app.use(createPinia())
app.use(router)
app.use(ElementPlus)
app.mount('#app')

7,安装scss

npm install sass --save-dev
npm install sass-loader --save-dev

新建空文件 assets/scss/global.scss

vite.config.ts 改成

import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  },
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: '@import "@/assets/scss/global.scss";'
      }
    }
  }
})

8,安装 axios

npm install axios --save

9,vite 启动时自动打开浏览器

vite.config.js 加上

  server: {
    open: true
  }

10,vite 多运行环境

.env.development

NODE_ENV="development"
VITE_APP_BASEAPI="https://www.dev.com"

.env.production

NODE_ENV="production"
VITE_APP_BASEAPI="https://www.production.com"

package.json 改成

    "dev": "vite --mode development",
    "build": "run-p type-check build-only --mode production",

判断当前环境

console.log(import.meta.env.MODE)
console.log(import.meta.env.VITE_APP_BASEAPI)

11,安装 vite-plugin-mock

npm i mockjs -s
npm i vite-plugin-mock -D

https://www.npmjs.com/package/vite-plugin-mock

 模拟接口,生产环境暂不使用,如果需要就得配置 vue.config.js

        prodEnabled: command !== 'serve' && prodMock,
        injectCode: `
          import { setupProdMockServer } from './mockProdServer';
          setupProdMockServer();
        `,

12,安装cookie 用于保存登录状态

npm i js-cookie --save

 13,登录

router/index.ts

    {
      path: '/login',
      name: 'login',
      component: () => import('../views/login.vue')
    }

view/login.vue

<!-- eslint-disable vue/multi-word-component-names -->
<template>
  <div class="login">
    <div class="login-title">欢迎登录</div>
    <el-form :model="form" label-width="120px" ref="ruleFormRef" :rules="rules">
      <el-form-item label="账号" prop="account">
        <el-input v-model="form.account" />
      </el-form-item>
      <el-form-item label="密码" prop="password">
        <el-input v-model="form.password" type="password" />
      </el-form-item>
      <el-form-item>
        <el-button
          type="primary"
          :disabled="loginBtnLoading"
          @click="onSubmit(ruleFormRef)"
          >登录</el-button
        >
      </el-form-item>
    </el-form>
  </div>
</template>

<script setup lang="ts">
import { ElMessage, type FormInstance, type FormRules } from "element-plus";
import { reactive, ref } from "vue";
import { login } from "@/api/auth";
import { setToken } from "@/utils/auth";
import router from "@/router";

const form = reactive({
  account: "admin",
  password: "123456",
});
const ruleFormRef = ref<FormInstance>();
const rules = reactive<FormRules>({
  account: [
    { required: true, message: "请输入账号" },
    { min: 5, max: 30, message: "长度为5-30个字符" },
  ],
  password: [
    { required: true, message: "请输入密码" },
    { min: 5, max: 30, message: "长度为5-30个字符" },
  ],
});
let loginBtnLoading = ref<boolean>(false);
const onSubmit = async (formEl: FormInstance | undefined) => {
  if (!formEl) return;
  loginBtnLoading.value = true;
  await formEl.validate(async (valid) => {
    if (valid) {
      let res: any = await login(form);
      loginBtnLoading.value = false;
      if (res.code == 200) {
        setToken(res.data.token);
        ElMessage.success("登录成功");
        router.push({ path: "/" });
      } else {
        ElMessage.error("登录失败");
      }
    }
  });
};
</script>

<style lang="scss" scoped>
.login {
  text-align: center;
  .login-title {
    margin-bottom: 20px;
  }
}
</style>

14,

 

标签:npm,vue,管理系统,router,从零开始,vue3,import,login,vite
From: https://www.cnblogs.com/jqynr/p/17012142.html

相关文章

  • 从零开始快速了解体系
    体系是什么体系即相互关联或相互作用的一组要素。管理体系:组织建立方针和目标以及实现这些目标的过程的相互关联或相互作用的一组要素。以上两个术语的定义来自《ISO900......
  • ASP.NET期末大作业————图片管理系统
    项目描述:本课题研究的主要内容是用户的注册与登陆,用户的授权及用户登录后的图片管理界面,包括:图片上传;图片审核;图片入库;图片检索;图片浏览及下载等。开发语言: Asp.net技术......
  • 房产管理系统项目结构及后端代码
      bean层经纪人agent类packagebean;publicclassagent{privateintid;privateStringname;privateStringaddress;privateStringphone;@OverridepublicStr......
  • 房产管理系统项目需求
    1、项目需求:某房产公司,欲开发一个房产信息管理系统,其主要功能描述如下:(1)公司销售的房产,房产信息包括,房产编号(唯一性)、房产证明,地址,建造年份,建造面积,销售报价,房产照片以及......
  • 图书管理系统BMS
    图书管理系统BMS效果图:主要代码:表关系的创建:fromdjango.dbimportmodels#Createyourmodelshere.classBook(models.Model):"""图书表"""ti......
  • 立足信创国产化运维,打造安全可控IT运维管理系统
    随着国产化信创应用试点行业的不断扩大,应用信创产品的企事业单位逐渐增多。大多数企业均面临着陌生的国产化环境与产品,其使用习惯和解决问题的方式都面临改变。北京智和信......
  • vue3的hook函数
    1.hook的定义(本质上是可以使用组合式API的封装好的函数)   2.使用示例:   ......
  • 若依管理系统-学习1
    原来不是前后端分离版的,直接换官方文档:RuoYi官网地址:http://ruoyi.vipRuoYi在线文档:http://doc.ruoyi.vip1.环境要求JDK>=1.8,MySQL>=5.5,Maven >=3.02.用......
  • vue3+TS 自定义指令:长按触发绑定的函数
    vue3+TS自定义指令:长按触发绑定的函数而然间看到一个在vue2中写的长按触发事件的自定义指定,想着能不能把他copy到我的vue3项目中呢。编写自定义指令时遇到的几个难点1.......
  • vue3 变量改变触发界面显示改变
    我们需要使用到 ref 和 reactive 来触发界面绑定变量的更新。reactive的参数对象一般是对象或者数组,能够将复杂数据类型变为响应式数据;它的响应式是深层次的,底层......