vue3框架搭建

技术选型

vue3

vue-router@4

element-plus

pinia

axios

sass

vue3项目创建

vite中文官网。其他包管理器的命令可去官网查看。

注意事项:npm原生代理很卡,可能会出现没有反应的现象。
解决方案:下载cnpm配置淘宝镜像。

vite创建vue项目
npm create vite@latest

执行命令出现的步骤:

可以继续吗?yes

技术选型:

项目名:viteadmin

选择框架:vue

选择js或者ts:js

后面就是:

进入项目:cd viteadmin

下载依赖:npm i

启动项目:npm run dev

ok到此项目创建成功。

全家桶配置

配置别名

在vite.config.js中配置下方指定代码

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path' // 新增
export default defineConfig({
  plugins: [vue()],
---------------------开始
  resolve: {
    //设置别名
    alias: {
      '@': resolve(__dirname, './src'),
    },
  },
---------------------结束
})

配置vue-router

npm install vue-router@4

 main.js中引入vue-router

import { createApp } from 'vue'
import App from './App.vue'
import router from '@/router'//引入vue-router
const app = createApp(App)
app.use(router)//引入vue-router
app.mount('#app')

在/src/view文件夹下新建main.vue、home.vue、admin.vue、pinia.vue、sass.vue文件

admin.vue文件
<template>admin</template>
<script setup></script>
home.vue文件
<template>home</template>
<script setup></script>
main.vue文件
<template>
  <div>
    <router-link style="margin-right: 20px;" to="/home">home</router-link>
    <router-link style="margin-right: 20px;" to="/admin">admin</router-link>
  </div>
  <div>
    <router-view></router-view>
  </div>
</template>
<script setup></script>
pinia.vue文件
<template>
  {{ '直接使用' +  firstStore.count}}
  {{count}}
  {{'解构使用' + arr}}
</template>
<script setup>
import { useCountStore } from '@/stores/countStore.js';
import { storeToRefs } from 'pinia';
  // 拿到store
  const firstStore = useCountStore()
  console.log(firstStore.count) //直接使用 0
//   const { count,arr } = firstStore  // 该写法不是响应式的,当我们修改count的值的时候,页面不会响应式变化
  const { count,arr } = storeToRefs(firstStore) // 正确的做法
</script>
sass.vue文件
<template>
  <dl class="level">
    <dt class="m-b-30">等级:</dt>
    <dd
      v-for="(item,index) in levels"
      :key="index"
      :class="index === cutIdx ? 'active' : ''"
    >{{ item.level }}</dd>
  </dl>
  <div class="text">
    dsafjadsjf;adshf;dshf;ahdsf;dshfhsd;fha;dshf;dshfdkshfahd;fha;dfha;
  </div>
</template>
<script setup>
import { ref } from "vue";
 
const levels = ref([
  { level: "全部" },
  { level: "三级甲等" },
  { level: "三级乙等" },
  { level: "二级甲等" },
  { level: "二级乙等" },
  { level: "一级" }
]);
 
const cutIdx = ref(0);
</script>
<style scoped lang='scss'>
.level {
  @include level-and-area;
}
.text{
    width: 200px;
    @include ellipsis;
}
</style>
app文件代码修改
<template>
  <Main></Main>
</template>
<script setup>
import Main from "@/view/main.vue";
</script>
<style scoped></style>

新建/src/router/index.js文件

这个时候你就可以看到跳转了,我粘的代码有些是后面才会出现的。所以可能会报错,大家学习处理一下。

import { createRouter, createWebHashHistory } from "vue-router";
import Main from "@/view/main.vue";
import Home from "@/view/home.vue";
import Admin from "@/view/admin.vue";
import Pinia from "@/view/pinia.vue"
import Sass from "@/view/sass.vue"
const router = createRouter({
  history: createWebHashHistory(),
  routes: [
    {
      path: "/",
      redirect: "/home",
    },
    {
      path: "/main",
      component: Main,
    },
    {
      path: "/home",
      component: Home,
    },
    {
      path: "/admin",
      component: Admin,
    },
    {
      path: "/pinia",
      component: Pinia,
    },
    {
      path: "/sass",
      component: Sass,
    },
  ],
});
export default router;

配置element-plus

npm install element-plus --save
import { createApp } from 'vue'
import App from './App.vue'
import router from '@/router'//引入vue-router
const app = createApp(App)
import ElementPlus from 'element-plus'//引入element-plus
import 'element-plus/dist/index.css'//引入element-plus
app.use(ElementPlus)//引入element-plus
app.use(router)//引入vue-router
app.mount('#app')
在admin页面创建按钮
<template>
admin
<el-button type="primary">就这样</el-button>
<el-button type="info" icon="Message" circle />
</template>
<script setup></script>

element-plus的icon图标引入

npm install @element-plus/icons-vue
import { createApp } from 'vue'
import App from './App.vue'
import router from '@/router'//引入vue-router
const app = createApp(App)
import ElementPlus from 'element-plus'//引入element-plus
import 'element-plus/dist/index.css'//引入element-plus
---------------------------注册所有icon
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
const app = createApp(App)
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  app.component(key, component)
}
---------------------------------------
app.use(ElementPlus)//引入element-plus
app.use(router)//引入vue-router
app.mount('#app')

配置pinia

npm install pinia
创建文件src/stores/indexjs
import { createPinia } from "pinia";
const pinia = createPinia()
export default pinia
 
 
mainjs文件中引入
import pinia from './stores'
app.use(pinia)

定义一个带有初始值的store 

文件位置:src/stores/countStorejs
import { defineStore } from 'pinia'
export const useCountStore = defineStore('countStore',{
  // 定义state
  state:()=>{
    return {
      count:0,
      arr:[1,2,3]
    }
  },
  // 定义getters,类似于computed
  getters:{},
  // 定义actions,类似于methods
  actions:{}
})

使用state的注意事项:

坚决不能直接解构使用这样无法获得响应式数据,需要使用storeToRefs函数才能做到响应式数据。

<template>
  {{ '直接使用' +  firstStore.count}}
  {{count}}
  {{'解构使用' + arr}}
</template>
<script setup>
import { useCountStore } from '@/stores/countStore.js';
import { storeToRefs } from 'pinia';
  // 拿到store
  const firstStore = useCountStore()
  console.log(firstStore.count) //直接使用 0
//   const { count,arr } = firstStore  // 该写法不是响应式的,当我们修改count的值的时候,页面不会响应式变化
  const { count,arr } = storeToRefs(firstStore) // 正确的做法
</script>

确认可以使用就说明配置完成。

配置sass

npm install -D sass

在src/styles文件夹下创建文件global.scss、mixin.scss、reset.scss

reset.scss 全局元素样式重置文件 主要用于清除 HTML 元素默认样式用

网上随便找好用不好用不知道我们就用来验证配置,后面可自行寻找更加完善的内容替代
/* 清除所有元素的边距和内边距 */
* {
    margin: 0;
    padding: 0;
  }
  /* 清除所有元素的默认样式 */
  html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {
    margin: 0;
    padding: 0;
    border: 0;
    outline: 0;
    font-size: 100%;
    vertical-align: baseline;
    background: transparent;
  }
  /* 清除链接默认样式 */
  a {
    text-decoration: none;
    color: inherit;
  }
  /* 清除列表默认样式 */
  ul, ol {
    list-style: none;
  }
  /* 清除图片默认边框 */
  img {
    border: none;
  }
  /* 清除表格默认边框 */
  table {
    border-collapse: collapse;
    border-spacing: 0;
  }

global.scss 全局样式文件引入 reset.scss 文件,也可以写一些自定义的样式

@import url('./reset.scss');
.mlr-2{
    margin-left: 20px;
    margin-right: 20px;
}

mixin.scss 全局的混合 mixin 样式文件

// 单行文本溢出显示 ...
@mixin ellipsis {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
// 等级和地区样式
@mixin level-and-area {
    display: flex;
    flex-wrap: wrap;
    margin: 10px 0;
    color: gray;
  
    dd {
      margin-right: 20px;
      margin-bottom: 16px;
      cursor: pointer;
  
      &:hover,
      &.active {
        color: #4993f2;
      }
    }
}

main.js引入内容

// 引入全局样式文件
import '@/styles/global.scss

写个页面进行测试


<template>
  <dl class="level">
    <dt class="m-b-30">等级:</dt>
    <dd
      v-for="(item,index) in levels"
      :key="index"
      :class="index === cutIdx ? 'active' : ''"
    >{{ item.level }}</dd>
  </dl>
  <div class="text">
    dsafjadsjf;adshf;dshf;ahdsf;dshfhsd;fha;dshf;dshfdkshfahd;fha;dfha;
  </div>
</template>
<script setup>
import { ref } from "vue";
 
const levels = ref([
  { level: "全部" },
  { level: "三级甲等" },
  { level: "三级乙等" },
  { level: "二级甲等" },
  { level: "二级乙等" },
  { level: "一级" }
]);
 
const cutIdx = ref(0);
</script>
<style scoped lang='scss'>
.level {
  @include level-and-area;
}
.text{
    width: 200px;
    @include ellipsis;
}
</style>

这个时候可能会报类似的错

这个时候就改一下vite.config.js文件,添加指定范围的代码就不报错了

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path' // 新增
export default defineConfig({
  plugins: [vue()],
  resolve: { // 新增
    //设置别名
    alias: {
      '@': resolve(__dirname, './src'),
    },
  },
---------------------从这里开始------------------------------
  css: {
    preprocessorOptions: {
    // 这里配置 mixin.scss 混合文件的全局引入
      scss: {
        additionalData: `@import "@/styles/mixin.scss";`
      }
    }
  }
---------------------到这里结束------------------------------
})

确认出效果,sass配置就完成了。

配置axios

npm install axios

设置axios实例

//引入axios
import axios from 'axios'
// 创建axios实例
const request = axios.create({
  //base接口,表示请求URL的公共部分
  baseURL:'http://127.0.0.1:8888/api/',
  // 超时
  timeout: 30000
})

请求拦截器

request.interceptors.request.use(config => {
  //对请求数据进行处理
  return config
}, error => {
  console.log('请求拦截器错误', error)
  //请求拦截错误处理
})

响应拦截器

request.interceptors.response.use(async(res) => {
      // 获取错误信息
      const message = res.data.message 
      return res.data
    }, async error => {
      //响应发生错误时的处理
      console.log('error')
      return false
    }
)

导出request

export default request;

封装接口

import request from '@/utils/request'
// 风险事故等级列表接口
export function getRiskLevelList(params) {
  return request({
    url: '/cim-service/riskMapEvents/listPage',//请求的接口地址
    method: 'get',//请求的方式
    params: params//请求的数据
  })
}
// 修改风险事故等级数据
export function postUpdataRiskLevel(data) {
  return request({
    url: '/cim-service/riskMapEvents/update',//请求的接口地址
    method: 'post',//请求的方式
    data: data//请求的数据
  })
}

使用接口

import {postUpdataRiskLevel} from '@/api/risk.js'
postUpdataRiskLevel(this.dialogForm).then(res => {
 if (res.code == 200) {
   this.$message.success('成功')
 }
})

全家桶配置就这样了,最后的这个axios封装是按理解整理的,大家可以参考就好

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值