element组件封装

1.上传组件

<!--文件上传组件-->
<template><div class="upload-file"><el-uploadref="fileUpload"v-if="props.type === 'default'":action="baseURL + other.adaptationUrl(props.uploadFileUrl)":before-upload="handleBeforeUpload":file-list="fileList":headers="headers":limit="limit":on-error="handleUploadError":on-remove="handleRemove":on-preview="handlePreview":data="formData":auto-upload="autoUpload":on-success="handleUploadSuccess"class="upload-file-uploader"dragmultiple><i class="el-icon-upload"></i><div class="el-upload__text">{{ $t('excel.operationNotice') }}<em>{{ $t('excel.clickUpload') }}</em></div><template #tip><div class="el-upload__tip" v-if="props.isShowTip">{{ $t('excel.pleaseUpload') }}<template v-if="props.fileSize">{{ $t('excel.size') }} <b style="color: #f56c6c">{{ props.fileSize }}MB</b></template><template v-if="props.fileType">{{ $t('excel.format') }} <b style="color: #f56c6c">{{ props.fileType.join('/') }}</b></template>{{ $t('excel.file') }}</div></template></el-upload><el-uploadref="fileUpload"v-if="props.type === 'simple'":action="baseURL + other.adaptationUrl(props.uploadFileUrl)":before-upload="handleBeforeUpload":file-list="fileList":headers="headers":limit="limit":auto-upload="autoUpload":on-error="handleUploadError":on-remove="handleRemove":data="formData":on-success="handleUploadSuccess"class="upload-file-uploader"multiple><el-button type="primary" link>{{ $t('excel.clickUpload') }}</el-button></el-upload></div>
</template><script setup lang="ts" name="upload-file">
import {useMessage} from '/@/hooks/message';
import {Session} from '/@/utils/storage';
import other from '/@/utils/other';
import {useI18n} from 'vue-i18n';const props = defineProps({modelValue: [String, Array],// 数量限制limit: {type: Number,default: 5,},// 大小限制(MB)fileSize: {type: Number,default: 5,},fileType: {type: Array,default: () => ['png', 'jpg', 'jpeg', 'doc', 'xls', 'ppt', 'txt', 'pdf', 'docx', 'xlsx', 'pptx'],},// 是否显示提示isShowTip: {type: Boolean,default: true,},uploadFileUrl: {type: String,default: '/admin/sys-file/upload',},type: {type: String,default: 'default',validator: (value: string) => {return ['default', 'simple'].includes(value);},},data: {type: Object,default:{}},dir: {type: String,default: ''},autoUpload: {type: Boolean,default: true,},
});const emit = defineEmits(['update:modelValue', 'change']);const number = ref(0);
const fileList = ref([]) as any;
const uploadList = ref([]) as any;
const fileUpload = ref();
const { t } = useI18n();// 请求头处理
const headers = computed(() => {return {Authorization: 'Bearer ' + Session.get('token'),'TENANT-ID': Session.getTenant(),};
});// 请求参数处理
const formData = computed(() => {return Object.assign(props.data,{dir: props.dir});
});// 上传前校检格式和大小
const handleBeforeUpload = (file: File) => {// 校检文件类型if (props.fileType.length) {const fileName = file.name.split('.');const fileExt = fileName[fileName.length - 1];const isTypeOk = props.fileType.indexOf(fileExt) >= 0;if (!isTypeOk) {useMessage().error(`${t('excel.typeErrorText')} ${props.fileType.join('/')}!`);return false;}}// 校检文件大小if (props.fileSize) {const isLt = file.size / 1024 / 1024 < props.fileSize;if (!isLt) {useMessage().error(`${t('excel.sizeErrorText')} ${props.fileSize} MB!`);return false;}}number.value++;return true;
};// 上传成功回调
function handleUploadSuccess(res: any, file: any) {if (res.code === 0) {uploadList.value.push({ name: file.name, url: res.data.url });uploadedSuccessfully();} else {number.value--;useMessage().error(res.msg);fileUpload.value.handleRemove(file);uploadedSuccessfully();}
}// 上传结束处理
const uploadedSuccessfully = () => {if (number.value > 0 && uploadList.value.length === number.value) {fileList.value = fileList.value.filter((f) => f.url !== undefined).concat(uploadList.value);uploadList.value = [];number.value = 0;emit('change', listToString(fileList.value));emit('update:modelValue', listToString(fileList.value));}
};const handleRemove = (file: any) => {fileList.value = fileList.value.filter((f) => !(f === file.url));emit('change', listToString(fileList.value));emit('update:modelValue', listToString(fileList.value));
};const handlePreview = (file: any) => {other.downBlobFile(file.url, {}, file.name);
};/*** 将对象数组转为字符串,以逗号分隔。* @param list 待转换的对象数组。* @param separator 分隔符,默认为逗号。* @returns {string} 返回转换后的字符串。*/
const listToString = (list: { url: string }[], separator = ','): string => {let strs = '';separator = separator || ',';for (let i in list) {if (list[i].url) {strs += list[i].url + separator;}}return strs !== '' ? strs.substr(0, strs.length - 1) : '';
};const handleUploadError = () => {useMessage().error('上传文件失败');
};/*** 监听 props 中的 modelValue 值变化,更新 fileList。*/
watch(() => props.modelValue,(val) => {if (val) {let temp = 1;// 首先将值转为数组const list = Array.isArray(val) ? val : props?.modelValue?.split(',');// 然后将数组转为对象数组fileList.value = list.map((item) => {if (typeof item === 'string') {item = { name: item, url: item };}item.uid = item.uid || new Date().getTime() + temp++;return item;});} else {fileList.value = [];return [];}},{ deep: true, immediate: true }
);const submit = () => {fileUpload.value.submit();
};defineExpose({submit,
});
</script>

2.分页组件

<template><el-pagination@size-change="sizeChangeHandle"@current-change="currentChangeHandle"class="mt15":pager-count="5":page-sizes="props.pageSizes":current-page="props.current"background:page-size="props.size":layout="props.layout":total="props.total"></el-pagination>
</template><script setup lang="ts" name="pagination">
const emit = defineEmits(['sizeChange', 'currentChange']);const props = defineProps({current: {type: Number,default: 1,},size: {type: Number,default: 10,},total: {type: Number,default: 0,},pageSizes: {type: Array as () => number[],default: () => {return [1, 10, 20, 50, 100, 200];},},layout: {type: String,default: 'total, sizes, prev, pager, next, jumper',},
});
// 分页改变
const sizeChangeHandle = (val: number) => {emit('sizeChange', val);
};
// 分页改变
const currentChangeHandle = (val: number) => {emit('currentChange', val);
};
</script>

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

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

相关文章

屏幕翻译器下载哪个?语言达人必备这些

想象一下&#xff0c;你站在人头攒动的12分钟洛杉矶沙滩音乐节现场&#xff0c;四周是来自世界各地的音乐爱好者&#xff0c;他们带着各自的文化与热情&#xff0c;用不同的语言欢呼、交谈。 舞台上&#xff0c;乐队正激情演奏&#xff0c;旋律激荡人心&#xff0c;但偶尔传来…

HarmonyOS 开发

环境 下载IDE 代码 import { hilog } from kit.PerformanceAnalysisKit; import testNapi from libentry.so; import { router } from kit.ArkUI; import { common, Want } from kit.AbilityKit;Entry Component struct Index {State message: string Hello HarmonyOS!;p…

wordpress修改域名方法及验证登录方法

UPDATE wp_options SET option_value replace(option_value, 旧域名, 新域名) WHERE option_name home OR option_name siteurl;UPDATE wp_posts SET post_content replace(post_content, 旧域名, 新域名);UPDATE wp_posts SET guid replace(guid, 旧域名, 新域名);UPDATE…

AI赋能软件测试:从自动化到智能化,让测试工作事半功倍

引言 在当今这个日新月异的数字时代&#xff0c;人工智能&#xff08;AI&#xff09;正以不可阻挡之势渗透并重塑着各行各业&#xff0c;其中&#xff0c;软件开发与测试领域更是迎来了前所未有的变革。随着软件系统的复杂性日益增加&#xff0c;用户对软件质量、性能及安全性的…

SQL每日一练-0816

今日SQL题&#xff1a;计算每个项目的年度收入增长率 难度系数&#xff1a;&#x1f31f;☆☆☆☆☆☆☆☆☆ 1、题目要求 计算每个项目每年的收入总额&#xff0c;并计算项目收入环比增长率。找出每年收入增长率最高的项目。输出结果显示年份、项目ID、项目名称、项…

微软AI人工智能认证有哪些?

微软提供的人工智能认证主要包括以下几个方面&#xff1a; Azure AI Fundamentals&#xff08;AI900认证&#xff09;&#xff1a;这是一个基础认证&#xff0c;旨在展示与Microsoft Azure软件和服务开发相关的基本AI概念&#xff0c;以创建AI解决方案。它面向具有技术和非技术…

[数据集][目标检测]航拍屋顶检测数据集VOC+YOLO格式458张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;458 标注数量(xml文件个数)&#xff1a;458 标注数量(txt文件个数)&#xff1a;458 标注类别…

浅谈Java Spring Boot

一、基本介绍 Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。通过这种方式&#xff0c;Spring Boot致力于在蓬勃发展…

基于python的自适应svm电影评价倾向性分析设计与实现

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

【EI检索稳定】2024年第四届数字化社会与智能系统国际学术会议(DSInS 2024)

由悉尼科技大学和西南交通大学联合主办&#xff0c;四川大学、中南大学社会计算研究中心、西南财经大学、武汉理工大学协办的2024年第四届数字化社会与智能系统国际学术会议将于2024年11月22-24日在中国郑州举行。会议主题主要聚焦智能系统在数字化社会中的相关技术和应用发展。…

Vsphere连接ESXI主机创建虚拟机并安装操作系统

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f427;Linux基础知识(初学)&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; &#x1f510;Linux中firewalld防火墙&#xff1a;点击&#xff01; ⏰️创作…

Nature系列|病理人工智能综述以及模型的可解释性分析|顶刊速递·24-08-21

小罗碎碎念 文献日推主题&#xff1a;病理AI综述&模型可解释性分析 今天准备了四篇文章&#xff0c;感觉之前一次推六篇&#xff0c;多了点&#xff0c;以后都这个标准了。 前三篇都是nature reviews系列的大综述&#xff0c;其中两篇是不区分癌种的&#xff0c;第三篇是专…

FTP协议-匿名用户登录 从0到1

前言 日常大家可能接触web漏洞比较多而对其他端口及协议不那么了解&#xff0c;其实其他协议漏洞在渗透中也同样重要只是平时可能接触得不多。本文将介绍FTP协议、FTP匿名用户登录及其具体流程分析和自动化利用demo。 FTP简介 FTP是File Transfer Protocol&#xff08;文件传…

机器人走路问题优化解法

public class Test53 {//假设有N个位置&#xff0c;记为1-N&#xff0c;N大于或等于2//开始机器人在M位置上&#xff08;M为1-N中的一个&#xff09;//如果机器人来到1位置&#xff0c;那么下一步只能向右来到2位置//如果机器人来到N位置&#xff0c;那么下一步只能向左来到N-1…

Spring 中XmlWebApplicationContext

XmlWebApplicationContext 是 Spring Framework 中的一个重要类&#xff0c;位于 org.springframework.web.context.support 包中。它是 AbstractRefreshableWebApplicationContext 的实现&#xff0c;用于在 Web 应用程序中从 XML 配置文件加载 Spring bean 定义。 主要功能 …

MIAOYUN与CStack签署总代协议,共拓一体化云端交互管理市场!

在深刻洞察国内云原生技术日新月异的发展态势&#xff0c;并秉持着共谋市场蓝海、深化战略协同的高度共识下&#xff0c;成都元来云志科技有限公司&#xff08;简称“MIAOYUN”&#xff09;与上海酷栈科技有限公司&#xff08;简称“CStack”&#xff09;于近期签署了总代理合作…

SpringBoot项目多线程实现定时任务-只需要三步

众所周知&#xff0c;项目中需要使用定时任务发布的需求时非常常见的&#xff0c;例如&#xff1a;数据同步&#xff0c;清理垃圾文件&#xff0c;清理过期用户等需求&#xff0c;可能需要我们定时去清理数据。 但是我们如果集成xxl-job&#xff0c;Quartz&#xff0c;spring …

Avalonia开发中的一些踩坑点

文章目录 一、数据绑定问题二、布局问题三、命令绑定问题四、主题和样式问题五、资源管理问题六、事件处理问题七、跨平台兼容性问题八、性能优化问题一、数据绑定问题 绑定路径错误: 可能导致数据无法正确显示或更新。 示例: public class ViewModel {public string Name …

类的构造函数与析构函数

构造函数与析构函数 构造函数 在C++中,类可以有几种不同类型的构造函数,每种都有其特定用途和语义。这些构造函数类型包括: 1.默认构造函数 无参数的构造函数,或者所有参数都有默认值的构造函数。如果类中没有显式定义任何构造函数,编译器将自动生成一个默认构造函数。…

【C语言小项目】五子棋游戏

目录 前言 一、游戏规则 1.功能分析 2.玩法分析 3.胜负判定条件 二、游戏实现思路 三、代码实现与函数封装 1.项目文件创建 2.头文件说明 3.函数封装 1&#xff09;菜单实现 2&#xff09;进度条实现 3&#xff09;main函数实现 4&#xff09;Game函数 5&#xff0…