vue组件大全
作用#
此随笔记录我人生中所有自己写出来的组件样式
图片加文字组件#
<template>
<div class="set_img">
<el-container>
<el-aside width="300px">
<p class="set_img_p">弹框一:</p>
<div class="set_img_bk">
<el-upload class="avatar-uploader custom-uploader"
action="https://jsonplaceholder.typicode.com/posts/" :show-file-list="false"
:on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload">
<img v-if="imageUrl" :src="imageUrl" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</div>
</el-aside>
<el-main>
<div class="set_img_attribute">
<p>关闭方式:</p>
<el-checkbox style="margin-left: 6%;margin-top: 6%;" v-model="checked1">5秒后自动关闭</el-checkbox>
<el-checkbox v-model="checked2">手动关闭</el-checkbox>
<p style="margin-top: 6%;">弹出时效:</p>
<el-radio style="margin-left: 6%;margin-top: 6%;" v-model="radio" label="1">默认弹窗5天</el-radio>
<el-radio v-model="radio" label="2">播放至</el-radio>
<el-date-picker style="width: 30%;" v-model="value1" type="date" placeholder="请选择日期">
</el-date-picker><br>
<el-button style="margin-top: 10%;margin-right: 15%;float: right;" type="primary">保存</el-button>
</div>
</el-main>
</el-container>
</div>
</template>
<script>
export default {
name: 'PopupBox',
data() {
return {
//单选框
value1:'',
radio: '1',
//多选框
checked1: true,
checked2: true,
imageUrl: ''
};
},
methods: {
handleAvatarSuccess(res, file) {
this.imageUrl = URL.createObjectURL(file.raw);
},
beforeAvatarUpload(file) {
const isJPG = file.type === 'image/jpeg';
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isJPG) {
this.$message.error('上传头像图片只能是 JPG 格式!');
}
if (!isLt2M) {
this.$message.error('上传头像图片大小不能超过 2MB!');
}
return isJPG && isLt2M;
}
}
}
</script>
<style scoped>
.set_img_p {
margin-left: 5%;
}
.set_img {
margin-left: 2%;
border: 1px solid rgb(228, 228, 228);
width: 750px;
height: 360px;
}
.set_img_attribute {}
.avatar {
width: 100%;
height: 100%;
display: block;
}
/* .avatar-uploader .el-upload {
border: 1px dashed #1a0e0e;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
} */
.avatar-uploader .el-upload:hover {
border-color: #1c5792;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
}
.custom-uploader {
background-color: #f0f0f0;
/* 设置背景颜色 */
padding: 10px;
/* 添加一些内边距 */
border-radius: 5px;
/* 添加圆角 */
border: 1px solid #dcdcdc;
/* 添加边框 */
display: flex;
/* 使用 Flexbox 布局 */
justify-content: center;
/* 水平居中 */
align-items: center;
/* 垂直居中 */
width: 200px;
/* 设置宽度 */
height: 250px;
/* 设置高度 */
margin-left: 10%;
}
</style>
后端返回数据前端进行格式化方法#
// 日期格式化工具函数
function formatDate(dateStr) {
const date = new Date(dateStr);
return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}:${String(date.getSeconds()).padStart(2, '0')}`;
}
使用
// 遍历格式化 registerTime
if (data.data) {
data.data = data.data.map((item) => ({
...item,
lastLoginTime:formatDate(item.lastLoginTime),
registerTime: formatDate(item.registerTime),
}));
}
格式化前数据:2025-01-15T18:22:58+08:00
格式化后数据:2025-01-16 10:31:25
前端日期时间格式化#
更简单的方法是使用日期库,例如 Day.js:
安装 Day.js
npm install dayjs
使用 Day.js 格式化时间戳
import dayjs from 'dayjs';
export default {
methods: {
formatDate(timestamp) {
return timestamp ? dayjs(timestamp * 1000).format('YYYY-MM-DD HH:mm:ss') : '无数据';
},
},
};
模板中调用
<el-descriptions-item label="注册时间">
{{ userInfo ? formatDate(userInfo.reg_time) : '无数据' }}
</el-descriptions-item>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix