一个项目的整个流程

news/2024/5/18 12:03:14/文章来源:https://blog.csdn.net/qq_59076775/article/details/127069847

1.基本配置

基础配置包括

1.Vuex------------作用:存储公共的数据

2.Vue-router---------作用:配置页面的映射关系

3.node_modules--------作用:包的管理工具

npm  i  包的名字

4.vue.config.js-----------配置一些信息

例如配置跨域的问题

5.assets

放一些静态的资源,例如放一些图片,字体图标等

......等

这些都是一些基本的配置

2.封装api

1.下包

npm i  axios

2.创建副本

const _axios = axios.create({baseURL: process.env.VUE_APP_BASE_API,//基地址
});

3.请求拦截器


_axios.interceptors.request.use((config) => {return config;},(error) => {console.log(error, "请求失败之后的结果");return Promise.reject(error);}

可以在请求头里面加上token

 如:

config.headers.Authorization = window.sessionStorage.getItem('token')

4.响应拦截器


_axios.interceptors.response.use((res) => {if (res.data.success) {return res.data;} else {// 错误的提示信息return Promise.reject(res.data.message);}},(error) => {// return Promise.reject(error);return error, "响应失败的结果";}
);

如:

当返回成功的数据的时候,通常是状态码为200的时候。

做一层解析

 return  res.data

或者做一个统一错误处理

 return Promise.reject(res.data.message);

当返回401的时候,通常是权限不足导致的

如:

   return error, "响应失败的结果";

可以做一些逻辑的判断

如果返回401回到登录的页面。

5.暴露

export default _axios;

3.element-ui的引入

1.下包

 npm i element-ui

2.导入

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
// import App from './App.vue';Vue.use(ElementUI);

3.使用

如:

<template><div><el-button type="primary">点击</el-button></div>
</template><script>
export default {}
</script>

element-ui官网:Element - The world's most popular Vue UI framework

4.表单

1.基本的布局

<template><div class=""><el-form :model="form" :rules="rules" ref="form"><el-form-item prop="name" label="姓名"><el-input v-model="form.name"></el-input></el-form-item><el-form-item prop="age" label="年龄"><el-input v-model="form.age"></el-input></el-form-item></el-form><div style="text-align: right"><el-button type="primary" @click="submit">确定 </el-button></div></div>
</template><script>
export default {data() {return {form: {name: "",age: "",},rules: {name: [{ required: true, message: "必填", trigger: "change" }],age: [{ required: true, message: "必填", trigger: "change" }],},};},name: "",methods: {submit() {this.$refs.form.validate((result) => {if (result) {this.$message.success("提交成功");}});},},
};
</script><style scoped></style>

2.新增 

(1)弹窗

 弹窗绑定的字段需要和表单的一直:

(2)调用新增接口

  将弹窗里面表单的值传入进去。

(2)删除

  methods: {open(id) {this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {this.$message({type: 'success',message: '删除成功!'});}).catch(() => {this.$message({type: 'info',message: '已取消删除'});          });}}}

在点击确定的回调里面

调用接口直接传入id即可。

id的方法,可以通过作用域插槽获得当前行的id。

(3)查

1.出现弹窗

点击出现弹出。

2.回显数据

获取当前行的数据,深拷贝一份。

this.from=JSON.stringfiy(this.from)

也可以直接通过调用接口来进行回显

(4)修改

 1.出现弹窗

点击出现弹出。

2.回显数据

获取当前行的数据,深拷贝一份。

this.from=JSON.stringfiy(this.from)

也可以直接通过调用接口来进行回显

手动修改数据

调用修改的接口。

(5)表单置空的处理

在做新增完毕之后,我们需要情况表单

我们可以调用情况表单的方法。

上次在还远表单的弊端中提到这次在复习下:

reseFields还原表单的弊端_曾许人间第仪流的博客-CSDN博客

清空表单的验证但是存在弊端

所以在强行置空一次。

(6)接口使用场景的区分

通过定义一个变量mode来控制调用的是新增还是修改

因为公用的是一个弹窗。

具体的步骤是啥样的呢?

mode:'add'

如果调用修改

通过this.$refs.xxx.mode='edit'

接口判断的逻辑:

if(mode==add){

调用新增接口

}

else{

否则调用编辑接口

}

5.表格的处理

<template><el-table :data="tableData" style="width: 100%"><el-table-column prop="name" label="姓名" width="180"> </el-table-column><el-table-column prop="age" label="年龄"> </el-table-column></el-table>
</template><script>
export default {data() {return {tableData: [{name: "王小虎",age: "上海市普陀区金沙江路 1518 弄",},{date: "2016-05-04",name: "王小虎",age: "上海市普陀区金沙江路 1517 弄",},],};},
};
</script>

:data="tableData"  关联的是整个表格

prop:对应相关列的字段。

6.登录模块

调用登录接口会拿到token

1.存储

采用cookie

下载:

npm install --save js-cookie

导入:

import Cookies from 'js-cookie'

存:

Cookies.set(token, value)

取:

Cookies.get(token) // value

销毁

Cookies.remove(token) // value

2.存储在Vuex中

state:Cookies.get(token)  || ''  // 

3.在拦截器请求头携带token

config.headers.Authorization = window.sessionStorage.getItem('token')

4.在路由设置页面访问权限

那些页面需要token进行访问,如果不需要token就设置一个白名单。

7.分页器

<template><div class="setting"><el-card><el-tabs><el-tab-pane label="角色管理"><el-button type="primary" size="small">+新增角色</el-button><el-table :data="list"><!-- 数据绑定data --><!-- label表示标题 --><!-- prop='对应的字段名' --><!-- 自定义列 --><!-- <template><div v-slot="{$index:索引}:row:当前行数据"></div></template> --><el-table-column label="序号" type="index"><template v-slot="{ $index }"><div>{{ (page.page - 1) * page.pagesize + $index + 1 }}</div></template></el-table-column><el-table-column label="角色名" prop="name" /><el-table-column label="描述" prop="description" /><el-table-column label="操作"><template><div><el-button type="text">分配权限</el-button><el-button type="text">修改</el-button><el-button type="text">删除</el-button></div></template></el-table-column></el-table><div class="page"><!-- current-page当前页 --><!-- page-sizes 页容量 默认页容量一定要在页容量中存在--><!-- layout布局 --><el-paginationstyle="text-align: right":current-page="page.page":page-sizes="[1, 10, 100, 200, 300, 400]":page-size="page.pagesize"layout="total, sizes, prev, pager, next, jumper":total="page.total"@size-change="handleSizeChange"@current-change="handleCurrentChange"/></div></el-tab-pane><el-tab-pane label="公司信息" /></el-tabs></el-card></div>
</template><script>
import { sysRole } from '@/api/setting.js'
export default {name: '',data() {return {list: [],page: {page: 1, // 默认页码pagesize: 10, // 每页条数total: 100}}},created() {this.getData()},methods: {// 页码改变handleSizeChange(size) {this.page.pagesize = size// 页容量回到第一页this.page.page = 1this.getData()console.log(size)},// 页容量改变handleCurrentChange(page) {this.page.page = pagethis.getData()console.log(page)},// 获取列表async getData() {const res = await sysRole(this.page)// 存储分页总数this.page.total = res.data.total// 存储列表数据this.list = res.data.rowsconsole.log(res, '角色列表')}}
}
</script><style scoped></style>

(1)如果我传入的是 page:1  pagesize:10

当后端的数据大于10的时候

会出现两页

当后端的数据小于10的时候

只会出现一页

(2)当传入page:2  pagesize:10

当后端的数据大于10的时候

还是会出现两页,只不过显示的是第二页的数据。

如总共11条,那么会显示第二页的1条数据。

当后端的数据小于10的时候

就没有第二页,只会显示第一页的数据。

8.其它页面

还会存在树形结构和路由权限的管理,后面会持续进行更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_15235.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA毕设项目酒店员工管理系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)

JAVA毕设项目酒店员工管理系统&#xff08;VueMybatisMavenMysqlsprnigSpringMVC&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&am…

DoIP协议:通用DoIP首部否定确认码02和03的区别

通用DoIP首部否定确认消息 当外部测试设备(诊断仪)发送DoIP消息给DoIP实体时,DoIP实体的传输层把DoIP消息(传输层payload,即DoIP header + DoIP payload)上发给DoIP协议层。DoIP协议层取到数据后,不管它是什么类型的DoIP消息,首先都需要被DoIP通用首部处理程序按照规定…

【统计学习|书籍阅读】第六章 logistics回国和最大熵模型 p77-p88

文章目录思路logistic回归模型最大熵模型最大熵模型定义最大熵模型的学习极大似然估计模型学习的最优化算法思路 logistic 回归是统计学习的经典分类方法。最大熵是概率模型学习的一个准则&#xff0c;将其推广到分类问题得到最大熵模型。 logistic回归模型 logistic分布&am…

# 二叉树和线索二叉树相关问题v1

文章目录二叉树和线索二叉树相关问题v1遍历算法遍历顺序分类遍历要点核心递归方式非递归方式线索二叉树二叉树vs线索二叉树(逻辑结构OR存储结构)线索二叉树的空指针剩余问题线索二叉树的遍历二叉树和线索二叉树相关问题v1 遍历算法 pre (NLR)A{B(DHI)(EJK)}{C(FLM)(GNO)}:∠\a…

【云原生 • Kubernetes】配置管理 - Secret ConfigMap

本文导读一、机密配置抽象 Secret1. 认识 Secret2. Secret 的使用(1) 创建 Secret 加密数据(2) 将 Secret 以变量形式挂载到 pod 容器二、配置抽象 ConfigMap1. 认识 ConfigMap2. ConfigMap 的使用(1) 创建配置文件(2) 创建 ConfigMap(3) 将 ConfigMap 以变量形式挂载到 pod 容…

如何保存el-pagination组件的分页状态。

一文细解如何保存组件的分页状态。 文章目录一文细解如何保存组件的分页状态。背景一、实现原理二、代码展示1.分页组件模板背景 使用element-plus的分页组件搭建页面的时候&#xff0c;经常会出现这样一种情况&#xff1a;分页为列表页&#xff0c;当从列表页点击某一项进入详…

HTTP协议4)----对于数据链路层的详细讲解

꧁ 大家好&#xff0c;我是 兔7 &#xff0c;一位努力学习C的博主~ ꧂ ☙ 如果文章知识点有错误的地方&#xff0c;请指正&#xff01;和大家一起学习&#xff0c;一起进步❧ &#x1f680; 如有不懂&#xff0c;可以随时向我提问&#xff0c;我会全力讲解~&#x1f4ac; &…

Springboot2.x仿B站项目第五章查询Es和内容推荐功能实现笔记及源码

文章目录系统全局模块的开发1.系统全文搜索1.1docker 下安装ES以及kibana1.2 配置Es的相关的yaml和configuration1.3 ES全文检索需求视频投稿搜索查询2.观看记录的统计2.1观看视频的添加信息2.2查询观看记录3.用户视频推荐4.视频弹幕遮罩其他章节系统全局模块的开发 本章主要实…

嵌入式分享合集67

一、CAN的接口保护电路 在一个模块上&#xff0c;由于是中转的CAN&#xff0c;需要从两个不同的连接器上连接出去&#xff08;这种情况是根据客户的需求而定的&#xff09;。 一般的设计如图&#xff1a; 一般的&#xff0c;我们最多使用两个电压斜坡控制电容&#xff08;C2和…

Windows如何生成公钥和私钥

Windows如何生成公钥和私钥 方法一)使用git命令 一. 首先安装git二. 桌面上右键 Git Bash Here三. 命令ssh-keygen -t rsa然后 一直enter 四. 将公钥放到服务器上就可以使用SSH链接了. 方法二)使用openssl生成公钥和私钥 参考链接:https://blog.csdn.net/cduoa/article/deta…

组播路由协议——PIM DM工作机制

目录 扩散、剪枝机制 嫁接机制 状态刷新机制 断言机制 采用“推&#xff08;Push&#xff09;”的方式转发组播报文并生成组播表&#xff0c;建立SPT&#xff08;最短路径树&#xff09;转发组播报文。它假定每条链路都有接收者&#xff0c;在每条链路上都直接推送组播流量…

大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载 HTML5期末大作业

&#x1f329;️ 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f482; 作者主页: 【进入主页—&#x1f680;获取更多源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;HTML5网页期末作业 (1000套…

Oracle 常用的经典SQL查询

/*1、查看表空间的名称及大小*/ select t.tablespace_name, round(sum(bytes / (1024 * 1024)), 0) ts_sizefrom dba_tablespaces t, dba_data_files dwhere t.tablespace_name d.tablespace_namegroup by t.tablespace_name; /*2、查看表空间物理文件的名称及大小*/ select…

vue3 模版语法

App.vue 注释掉首页的文本内容&#xff0c;只剩下对应的图标即可。 <div class"wrapper"><!-- <HelloWorld msg"You did it!day day up 自己更新" /> --></div></header><main><!-- <TheWelcome /> -->&…

“发展与治理”2022元宇宙共治大会成功举行

2022年9月24日下午&#xff0c;“发展与治理”2022元宇宙共治大会暨《元宇宙发展与治理》课题征求意见会、元宇宙产业委数字藏品发展研讨会议&#xff0c;在央链直播平台线上召开&#xff0c;本次会议汇聚众多高科技产业引领者和建设者&#xff0c;以及数权藏品众多流量平台共聚…

Navicat设置utf8mb4后保存emoji仍然报错的解决方法

一、前言 最近遇到一个问题&#xff0c;需要查库并导出报表&#xff1b; 由于报表比较特殊&#xff0c;程序没有实现&#xff0c;因此准备先查询生产库、复制为insert语句&#xff0c;然后在本地Navicat里执行、处理、再导出xls&#xff0c;这样快一些。 但是&#xff0c;没想…

SwiftUI AR教程之如何使用 SwiftUI 按钮在 RealityKit 中切换前后摄像头(教程含源码)

iOS AR 开发快速指南 如果您正在为 iOS 构建增强现实体验,您可能希望让您的用户能够在前置(又称“自拍”或“正面”)摄像头和后置(又称“世界侧”)摄像头之间切换。这是有关如何将此功能添加到您的应用程序的基本教程。 基本设置 首先,让我们从 Xcode 中的 Augmented …

Nginx系列之反向代理过程

nginx通过proxy模块对上游服务使用http/https协议进行反向代理&#xff0c;下图是反向代理处理过程 在读取客户端发送的请求时&#xff0c;如果proxy_request_bufferringon,那么读取完整的包体后再发送给后端服务&#xff0c;如果 proxy_request_bufferringoff&#xff0c;则是…

DDL操作表-查询和DDL操作表-创建

DDL操作表-查询 1.C(Create):创建 2.R(Retrieve):查询 3.U(Update):修改 4.D(Delete):删除 R(Retrieve):查询 查询某个数据库中所有的表名称show tables;查询表结构desc 表名; DDL操作表-创建 C(Create):创建 1.语法:create table 表名(列名  数据类型1,列…

指针初阶详解

目录序言地址指针是什么指针和指针变量为什么定义指针指针指针的大小类型指针的解引用指针-整数指针运算指针 - 指针指针比较野指针二级指针指针数组序言 指针这个模块是C语言里面比较难理解的的,学习成本倒是不高,就是有点费脑子.我们这里重点关注什么是指针和指针的用法.这篇…