Vue3+TS电商后台管理系统项目实战(2022最新版)

YBN娜 2024-10-02 08:33:06 阅读 66

1.搭建项目

`npm create vue@latest`

```plaintext

✔ Project name: … vue3-ts-demo-2

✔ Add TypeScript? … No / Yes

✔ Add JSX Support? … No / Yes

✔ Add Vue Router for Single Page Application development? … No / Yes

✔ Add Pinia for state management? … No / Yes

✔ Add Vitest for Unit Testing? … No / Yes

✔ Add an End-to-End Testing Solution? › No

✔ Add ESLint for code quality? … No / Yes

✔ Add Prettier for code formatting? … No / Yes

✔ Add Vue DevTools 7 extension for debugging? (experimental) … No / Yes

```

`npm run dev`       

2.引入element-plus

`npm install element-plus --save`

全局引入

```ts

// main.ts

import './assets/main.css'

import { createApp } from 'vue'

import ElementPlus from 'element-plus'

import 'element-plus/dist/index.css'

import App from './App.vue'

import router from './router'

const app = createApp(App)

app.use(ElementPlus)

app.use(router)

app.mount('#app')

```

按需引入

```sh

npm install -D unplugin-vue-components unplugin-auto-import

```

`vite.config.ts`

```ts

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

import { defineConfig } from 'vite'

import vue from '@vitejs/plugin-vue'

// element-plus auto import

import AutoImport from 'unplugin-auto-import/vite'

import Components from 'unplugin-vue-components/vite'

import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

// https://vitejs.dev/config/

export default defineConfig({

plugins: [

vue(),

AutoImport({

resolvers: [ElementPlusResolver()]

}),

Components({

resolvers: [ElementPlusResolver()]

})

],

resolve: {

alias: {

'@': fileURLToPath(new URL('./src', import.meta.url))

}

}

})

```

 3.登录页:

### 视图和路由

安装插件:

```plaintext

Id: sdras.vue-vscode-snippets

Description: Snippets that will supercharge your Vue workflow

Version: 3.1.1

Publisher: sarah.drasner

VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=sdras.vue-vscode-snippets

```

使用代码片段:

![image-20240529145617816](./README.assets/image-20240529145617816.png)

安装 `scss`:`npm i -D sass`

 

修改 `router.ts`

```ts

import { createRouter, createWebHistory } from 'vue-router'

import HomeView from '../views/HomeView.vue'

import NotFoundView from '@/views/NotFoundView.vue'

const router = createRouter({

history: createWebHistory(import.meta.env.BASE_URL),

routes: [

{

path: '/',

name: 'home',

component: HomeView

},

{

path: '/about',

name: 'about',

component: () => import('../views/AboutView.vue')

},

{

path: '/login',

name: 'login',

component: () => import('../views/LoginView.vue')

},

{

path: '/:pathMatch(.*)*',

name: 'not-found',

component: NotFoundView

}

]

})

export default router

```

修改 `App.ts`

```vue

<script setup lang="ts">code>

import { RouterView } from 'vue-router'

</script>

<template>

<RouterView />

</template>

<style lang="scss">code>

* {

padding: 0;

margin: 0;

}

html,

body,

#app {

width: 100%;

height: 100%;

}

</style>

```

添加表单组件:

 添加表单以和校验逻辑:

 添加类型约束:

 登录逻辑:1.src-request-api.ts中引入并封装 axios

 2.src-request-api创建接口

注释:通过 <code>axios.create() 创建的 service,赋予了动态配置 urlmethoddata 的能力,使得网络请求的处理更加灵活和高效。3.添加登录逻辑,即登录成功后进行跳转

 4.首页布局

### 头部

分为三部分:logo、标题、退出

对齐

侧边栏及动态路由并根据当前路由做菜单栏自动高亮

动态路由默认重定向到 `/index`

## 05商品页

1.配置axios

src-request-api

2.定义数据->接口(通过ts规范)

src-type-goods

3.页面

4.页面逻辑脚本部分

服务端分页;前端渲染

### 搜索商品功能

## 06用户页

用户包含若干个角色,初始化数据为:

<code>```js

var userList = [

{

id: 1,

nickName: '小明',

userName: '小明',

roles: [

{

id: 1,

name: '管理员'

},

{

id: 2,

name: '普通用户'

}

]

},

{

id: 2,

nickName: '红红',

userName: '红红',

roles: [

{

id: 1,

name: '管理员'

}

]

},

{

id: 3,

nickName: '绿绿',

userName: '绿绿',

roles: [

{

id: 2,

name: '普通用户'

}

]

}

]

var roleList = [

{

name: '管理员',

id: 1,

authority: [1, 2, 4, 5, 6, 7, 8, 9, 11, 13, 14, 15, 16]

},

{

name: '普通用户',

id: 2,

authority: [1, 3, 4, 6, 7, 8, 9, 11, 12, 13]

}

]

```

### 搜索区和表格

包含下拉框的搜索区

```vue

<el-form :inline="true" :model="selectData">code>

<el-form-item label="昵称">code>

<el-input v-model="selectData.nickName" clearable />code>

</el-form-item>

<el-form-item label="角色">code>

<el-select v-model="selectData.roleId" size="large" style="width: 240px">code>

<!-- 搜索时,如果 roleId=0 则去掉这个条件 -->

<el-option label="请选择" :value="0" />code>

<el-option

v-for="item in roleList"code>

:key="item.id"code>

:label="item.name"code>

:value="item.id"code>

/>

</el-select>

</el-form-item>

<el-form-item>

<el-button type="primary" @click="handleSubmit">搜索</el-button>code>

</el-form-item>

</el-form>

```

表格:在角色一列,用插槽展示所有角色信息

```vue

<el-table :data="list" style="width: 100%" :border="true">code>

<el-table-column align="center" prop="id" label="ID" width="50"></el-table-column>code>

<el-table-column align="center" prop="nickName" label="昵称" width="150"></el-table-column>code>

<el-table-column prop="role" label="角色">code>

<template #default="scope">code>

<div class="roles-container">code>

<el-tag v-for="(item, index) in scope.row.roles" :key="index">{ { item.name }}</el-tag>code>

</div>

</template>

</el-table-column>

</el-table>

```

### 搜索用户功能

### 修改用户信息功能

在弹出对话框中呈现用于修改的表单

7.角色页:

接口->src-request-api

角色部分数据:

type-role

### 添加角色

添加后台接口,前台请求接口添加角色

### 展示角色

### 路由跳转

点击修改角色,会跳转到权限列表页,在这个页面中做角色信息修改

### 权限列表展示

使用树形控件展示角色的权限列表

### 权限列表修改

另外添加修改角色名的功能

如果让我来做,我会把角色信息修改的页面放在[抽屉](https://element-plus.org/zh-CN/component/drawer.html)里

## 08路由守卫和退出登录

退出登录时做二次提示



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。