基于vue-admin-element开发后台管理系统【技术点整理】
一、Vue点击跳转外部链接
点击重新打开一个页面窗口,不覆盖当前的页面
window.open('https://www.baidu.com',"_blank")"_blank" 新打开一个窗口"_self" 覆盖当前的窗口
例如:导入用户模板下载
templateDownload() {window.open('https:网址', "_self")
},
二、js 循环修改数组属性key值
思路:建一个空数组,进行push
let arrayNew = [];
datas.map((item, index) => {arryNew.push(Object.assign({}, item, {name: item.myName,value:item}));return arrayNew;
});
this.List = arrayNew;
三、vue中el-cascader(级联选择器) 根据下拉数据的id获取所对应的文字
<template><div class="app-container"><el-cascader style="width: 280px;" ref="cascader" v-model="select_address" :props="props"placeholder="选择地区" :options="address_options"@change="select_addressFun" clearable /> </div>
</template><script>import { Address } from '@/api/user' //封装的获取省市区的接口export default {data() {return {props: {value: "Code",label: "Name"},address_options: [],select_address: '',}},created() {this.getAddress() //调用省市区接口},methods: {// 获取省市区getAddress() {Address().then(res => {console.log(res)this.address_options = this.getTrees(res.DataList, '');console.log('省市区', this.address_options)})},getTrees(ary, pid) {if (!pid) {// 如果没有父id(第一次递归的时候)将所有父级查询出来return ary.filter(item => item.Level == 1).map(item => {// 通过父节点ID查询所有子节点item.children = this.getTrees(ary, item.Code)return item})} else {return ary.filter(item => item.FatherCode === pid).map(item => {// 通过父节点ID查询所有子节点if (this.getTrees(ary, item.Code).length > 0) {item.children = this.getTrees(ary, item.Code)}return item})}},//筛选省市区-删除选中状态reset() {this.select_address = []; //v-model绑定值清空this.$nextTick(() => {// 清空级联选择器选中状态this.$refs.cascader.$refs.panel.clearCheckedNodes()// 清除⾼亮this.$refs.cascader.$refs.panel.activePath = []})},//筛选省市区select_addressFun(value) {console.log("筛选省市区", value)// this.listQuery.PCode = value[0]// this.listQuery.CityCode = value[1]this.listQuery.ParamCode = value[2] || '' //行政区划代码// 获取节点下的汉字 (主要代码)let data = this.$refs.cascader.getCheckedNodes()[0].pathLabels.toString()//用for循环遍历获取的数据,并把逗号裁掉for (let i = 0; i < data.length; i++) {if (data[i] === ',') {data = data.replace(data[i], '')}}console.log('获取节点下的汉字', data);// this.temp.ProvinceCode = value[0]// this.temp.CityCode = value[1]// this.temp.AreaCode = value[2]// this.temp.OrgAddress = data},}}
</script>
四、el-cascader (级联选择器 )可以单独选择任意一级选项
在第三个问题的代码上进行添加:
<el-cascader style="width: 280px;" ref="cascader" v-model="select_address" :props="props"placeholder="选择地区" :options="address_options"@change="select_addressFun" clearable />data() {return {props: {value: "Code",label: "Name",checkStrictly:true //关键代码:设置父子节点取消选中关联,可以选择任意一级选项},}}

五、vue 实现手机号中间四位隐藏,显示*号
const tel = '15611116666' //获取到接口返回的手机号
this.userTel= tel.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
六、el-input 限制只能输入数字
<el-input v-model="myDayNum"oninput="value=value.replace(/^\.+|[^\d.]/g,'')" //关键代码placeholder="输入次数" />
七、vue实现导出excel 功能
通过vue实现导出有2种方式:
(1)后端返回的是一个地址,直接拼接打开下载即可。
(2)后端返回的是文件流的形式,这个时候就需要在 请求头和返回值 这两处设置一下。
1.后端返回的是地址
// 页面代码
<el-buttontype="primary"size="mini"class="filter-item"icon="el-icon-download"@click="exportFun">导出</el-button>exportFun() { //导出方法ExpUserList(this.listQuery) //导出接口.then(result => {const url = result.datawindow.open(url) //通过这个打开网页就可下载导出}).catch(err => console.log(err))}
2.后端返回的是文件流
1)设置请求头
// 导出用户数据查询(封装的接口)
export function ExpUserList(StartDate, EndDate, DistrictCode, IsNormal, Age) {return request({url: 'admin/Export/ExpUserList.ashx' + '?token=' + getToken() + '&StartDate=' + StartDate +'&EndDate=' + EndDate + '&DistrictCode=' + DistrictCode + '&IsNormal=' + IsNormal + '&Age=' + Age,method: 'Get',responseType: 'blob' //指明返回格式( 需要在此处设置请求头,设置请求的类型为blob文件流的形式)})
}
2)设置返回结果,处理返回的文件流
// 页面代码
<el-buttontype="primary"size="mini"class="filter-item"icon="el-icon-download"@click="exportFun">导出</el-button>//调用导出接口
exportFun() {ExpUserList(this.listQuery.StartDate, this.listQuery.EndDate, this.listQuery.DistrictCode, this.listQuery.IsNormal, this.listQuery.Age).then(res => {console.log(res)this.exportName = `用户数据` //导出的文件名称let href = window.URL.createObjectURL(new Blob([res])); //将文件流转化为blob地址let link = document.createElement('a'); //创建a标签link.style.display = 'none';// 设置连接link.href = href;link.setAttribute('download', this.exportName + '.xlsx');document.body.appendChild(link);//设置点击事件link.click();document.body.removeChild(link); // 下载完成移除元素window.URL.revokeObjectURL(href); // 释放掉blob对象}).catch(err => {console.log(err)})
},
3)小提示:
有的时候做到上述几步还是不能导出,debugger 之后,发现接口调用的时候直接走的.catch,没走.then,
所以需要我们在全局响应拦截做一些判断。
//一般在utils下面的requext.js文件里面
export function validResponse(res, errorMessage) {if (res instanceof Blob) { //如果返回的是文件流的形式,直接return resreturn res} else if (res.code !== 200 && res.code !== 201 && res.code !== 204) {return Promise.reject(new Error(res.message || '发生错误!'))} else {return res}
}
八、el-radio (单选框) 绑定 —1布尔类型/ 2数字/ 3类型字符串
1.布尔类型(在label前加上 [ : ] )
<el-radio-group v-model="myRadio"><el-radio :label="true">是</el-radio><el-radio :label="false">否</el-radio>
</el-radio-group>export default {data() {return {myRadio: false, //布尔值};}
};
2.数字类型(在label前加上 [ : ] )
<el-radio-group v-model="myRadio"><el-radio :label="1">是</el-radio><el-radio :label="2">否</el-radio><el-radio :label="3">不清楚</el-radio>
</el-radio-group>export default {data() {return {myRadio: 1, //这里改为数字};}
};
3.字符串类型(在label后加单引号(‘’)包起来)
<el-radio-group v-model="myRadio" @change="$forceUpdate()" size="medium"><el-radio :label="'是'">是</el-radio><el-radio :label="'否'">否</el-radio></el-radio-group><script>export default {data () {return {myRadio: "是"};}}
</script>
九、JS使用split()类 通过逗号将字符串拆分为数组
var intArray = "1,3,5,6";
var newArray = new Array();
newArray = intArray.split(",");console.log(typeof(newArray)); //"object"
console.log(newArray); //["1", "3", "5", "6"]for (var element in newArray) {newArray[element] = parseInt(newArray[element], 10);
}console.log(typeof(newArray)); //"object"
console.log(newArray); //[1, 3, 5, 6]
十、关于 vue-element-admin 退出登录后,切换账号时的路由缓存问题。
原因:keep-alive缓存标签没有清空。
解决:在layout/components/Navbar.vue中将里面的logout()方法改一下,把跳转路由的参数删除,这样退出登录就没有上次登录保留的页面了。
async logout() {await this.$store.dispatch('user/logout')// this.$router.push(`/login?redirect=${this.$route.fullPath}`) //去掉页面上原有的这行//新增这一行关于 vue-element-admin 退出登录后keep-alive缓存标签没有清空this.$router.push("/login")
}

十一、elementui el-cascader(日期控件) 清除级联选择框选中状态
<el-cascaderref="cascader"v-model="optionsValue":options="options":props="Options"@change="handleChange" clearable>
</el-cascader>放在methods中:
reset () {this.optionsValue=[]; //v-model绑定值清空this.$nextTick(() => {// 清空级联选择器选中状态this.$refs.cascader.$refs.panel.clearCheckedNodes()// 清除高亮this.$refs.cascader.$refs.panel.activePath = []})}
十二、js提取数组中的某个属性 组成一个新数组
原数组
this.oldArr = [{name:'aa',id:1,age:'12'},{name:'bb',id:2,age:'18'},{name:'cc',id:3,age:'22'},{name:'dd',ide:4,age:'30'}
];想要的结果是:newArr = [1,2,3,4];
//第一种方法:
let newArr=[]
//通过map方法将原始数组中的每一项循环
this.oldArr.map(item=>{this.newArr.push(item.id);
})//第二种方法:
let newArr=this.oldArr.map(item=>{return item.id;
})//第三种方法:
let newArr=this.oldArr.map(item=>{return Object.assign({},{'id':item.id})
})
持续更新中……
相关文章:
基于vue-admin-element开发后台管理系统【技术点整理】
一、Vue点击跳转外部链接 点击重新打开一个页面窗口,不覆盖当前的页面 window.open(https://www.baidu.com,"_blank")"_blank" 新打开一个窗口"_self" 覆盖当前的窗口例如:导入用户模板下载 templateDownload() {wi…...
【C语言学习笔记】:通讯录管理系统
系统中需要实现的功能如下: ✿ 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人 ✿ 显示联系人:显示通讯录中所有的联系人信息 ✿ 删除联系人:按…...
开关电源环路稳定性分析(10)——OPA和OTA型补偿器传递函数
大家好,这里是大话硬件。 在前面9讲的内容中将开关电源环路分析进行了梳理,我相信很多人即使都看完了,应该还是不会设计,而且还存在几个疑问。比如我随便举几个: 开关电源的带宽怎么设定?开关电源精度和什…...
2.11知识点整理(关于pycharm,python,pytorch,conda)
pycharm 设置anaconda环境: File -> Settings->选择左侧的project xxx再选择打开Project Interpreter页->选择add添加解释器->添加Anaconda中Python解释器(Anaconda安装目录下的python.exe) (选择existing environment ÿ…...
Linux服务器开发-2. Linux多进程开发
文章目录1. 进程概述1.1 程序概览1.2 进程概念1.3 单道、多道程序设计1.4 时间片1.5 并行与并发1.6 进程控制块(PCB)2. 进程的状态转换2.1 进程的状态2.2 进程相关命令查看进程实时显示进程动态杀死进程进程号和相关函数3. 进程的创建-fork函数3.1 进程创…...
Excel中缺失数据值的自动填充
目录简单方法示例1:数据满足线性趋势示例2:数据满足增长(指数)趋势参考实验做完处理数据,发现有一组数据因为设备中途出现问题缺失了,之前做过的数据也找不到,为了不影响后续处理,这里使用Excel插入缺失值。…...
路由器刷固件
前言 我希望可以远程访问我的电脑。但,我不希望电脑总是处于运行状态,因为那样比较费电。所以需要一个方案,能将睡眠/关机中的电脑唤醒。 方案一:选用智能插座,远程给电脑上电。电脑设置上电自启。但,这存…...
leetcode: Two Sum II - Input Array is Sorted
leetcode: Two Sum II - Input Array is Sorted1. 题目2. 解答3. 总结1. 题目 Given a 1-indexed array of integers numbers that is already sorted in non-decreasing order, find two numbers such that they add up to a specific target number. Let these two number…...
STL——list
一、list介绍及使用 1. list文档介绍 (1)list是可以在常数范围内,在任意位置进行插入、删除的序列式容器,并且该容器可以前后双向迭代。 (2)list的底层是带头结点的双向循环链表,其中每个元素…...
实战打靶集锦-004-My-Cmsms
**写在前面:**记录一次艰难曲折的打靶经历。 目录1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 WEB服务探查4.1.1 浏览器访问4.1.2 目录枚举4.1.3 控制台探查4.1.4 其他目录探查4.2 阶段小结5. 公共EXP搜索5.1 CMS搜索5.2 Apache搜索5.3 PHP搜索5.4 MySQL搜索5…...
c++代码实现我的世界(14)
c代码实现我的世界14|生成地貌兼工作台1前言的前言~前言生成地貌函数结构体struct dimao根据比例生成地貌工作台函数准备的东西写在最后前言的前言~ 实在对不起大家,有挺长时间没更新了。 前言 今天我们将写生成地形的函数与工作台前传的代码; 注&…...
RMQ--区间最值问题(在更)
RMQ(Range Minimum/Maximum Query)RMQ解决的问题ST算法 O(nlogn)线段树例题数列区间最大值最敏捷的机器人天才的记忆Frequent values总结(ST和线段树对比)RMQ解决的问题 RMQ是一个解决多个区间最值查询的算法,即区间最值查询&…...
一篇文章搞懂Cookie
目录 1 什么是Cookie 2 创建Cookie 3 浏览器查看Cookie 3.1 浏览器查看Cookie的第一种方式 3.2 浏览器查看Cookie的第二种方式 4 获取Cookie 5 修改Cookie 6 Cookie编码与解码 6.1 创建带中文Cookie 6.2 读取带中文Cookie 6.3 获取中文Cookie请求效果 6.4 解决创建和…...
深入解读.NET MAUI音乐播放器项目(二):播放内核
播放控制服务 IMusicControlService: 播放控制类,用于当前平台播放器对象的操作,对当前所播放曲目的暂停/播放,下一首/上一首,快进快退(寻迹),随机、单曲模式等功能的控制。 播放控制类包含一…...
4.SpringWeb
一、创建项目LomBok:辅助开发工具,减少代码编写Spring Web:带上Spring MVC,可以做Web开发了Thymleaf: Web开发末班引擎(不常用)创建好,如下:static/ 放置静态资源的根目录templates/ 放置模板文件的根目录 二、资源配置…...
C++中的枚举与位域
枚举在传统 C中,枚举类型并非类型安全,枚举类型会被视作整数,则会让两种完全不同的枚举类型可以进行直接的比较(虽然编译器给出了检查,但并非所有),甚至同一个命名空间中的不同枚举类型的枚举值…...
第19章 MongoDB Limit与Skip方法教程
第19章 MongoDB Limit与Skip方法教程 MongoDB Limit() 方法 如果仁兄需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。 语法 limit()方法基本语法请…...
进程间通信——消息队列
多线程 进程间通信——消息队列 消息队列——发送 测试代码 #include <sys/types.h> #include <sys/msg.h> #include <sys/ipc.h>#include <stdlib.h> #include <stdio.h> #include <string.h>#define MAX_BUF_SIZE 255struct msgtype {…...
OpenMMLab 实战营打卡 - 第 7 课
OpenMMLab MMSegmentation内容概要MMSegmentation统一超参MMSegmentation 的项目结构分割模型的模块化设计分割模型的配置文件主干网络的配置ResNet v1c主解码头的配置辅助解码头的配置数据集配置数据处理流水线常用训练策略参考资料内容概要 • MMSegmentation 项目概述 • M…...
MAC Boook打印长图
有时老师给留的作业是一张长图,直接打印或者通过把图放入word打印都不能实现把长页分成多页进行打印。通过网上找到思路可以通过EXCEL实现将长图分成多页打印。 测试版本 macos:ventura 13.1 office 365 注:同样适用windows版本的excel 第…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
python基础语法Ⅰ
python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器,来进行一些算术…...
Qt Quick Controls模块功能及架构
Qt Quick Controls是Qt Quick的一个附加模块,提供了一套用于构建完整用户界面的UI控件。在Qt 6.0中,这个模块经历了重大重构和改进。 一、主要功能和特点 1. 架构重构 完全重写了底层架构,与Qt Quick更紧密集成 移除了对Qt Widgets的依赖&…...
