vue-manage-system 版本更新,让开发更加简单

news2024/11/17 11:25:38

vue-manage-system 近期进行了一次版本升级,主要是支持了更多功能、升级依赖版本和优化样式,并且上线了官方文档网站,大部分功能都有文档或者使用示例,更加适合新手上手开发,只需要根据实际业务简单修改,就可以完成产品需求。

视觉优化

比较长时间没对视觉做什么改动,多少会有点审美疲劳,所以这次也做了一些改动,至少我觉得比之前好看点了(请轻点喷,哭笑不得)

标签页

之前标签页的样式是自己实现,最多只能支持8个标签页,再多会覆盖之前的页面。现在直接用 el-tabs 组件实现,代码量更少,而且不限制标签数量,超出宽度可以滚动查看。

<el-tabs v-model="activePath" class="tabs" type="card" closable @tab-click="clickTabs" @tab-remove="closeTabs">
	<el-tab-pane v-for="item in tabs.list" :key="item.path" :label="item.title" :name="item.path" @click="setTags(item)"></el-tab-pane>
</el-tabs>
const activePath = ref(route.fullPath);
watch(() => route.fullPath, (newVal, oldVal) => {
	activePath.value = newVal;
})

activePath 用当前路由的路径来选中对应的标签页,当路由变化时,通过监听器 watch 来给 activePath 赋值新路由,以确保选中的标签一直是当前页面路由。

const tabs = useTabsStore();
const closeTabs = (name: string) => {
	const index = tabs.list.findIndex((item) => item.path === name);
	tabs.delTabsItem(index);
	const item = tabs.list[index] || tabs.list[index - 1];
	router.push(item?item.path:'/')
}

关闭标签时会触发 tab-remove 事件,把该标签从 tabs.list 列表中移除。先通过 findIndex 找到该标签的索引,传到 pinia 中的 delTabsItem 方法进行移除标签,移除后路由跳转到下一个标签或者上一个标签,如果标签已清空,则跳到首页。

设置主题

Element plus的默认主题色是#409EFF,CSS变量是--el-color-primary,要改变主题色时,给这个变量赋值即可。

document.documentElement.style.setProperty('--el-color-primary', '#ff0000');

同时要修改它的附属颜色,比如:hover、:active等用到的颜色变量

--el-color-primary-light-3: #79bbff;
--el-color-primary-light-5: #a0cfff;
--el-color-primary-light-7: #c6e2ff;
--el-color-primary-light-8: #d9ecff;
--el-color-primary-light-9: #ecf5ff;
--el-color-primary-dark-2: #337ecc;

修改附属颜色变量

const mix = (color1, color2, weight) => {
    let color = '#';
    for (let i = 0; i <= 2; i++) {
        const c1 = parseInt(color1.substring(1 + i * 2, 3 + i * 2), 16);
        const c2 = parseInt(color2.substring(1 + i * 2, 3 + i * 2), 16);
        const c = Math.round(c1 * weight + c2 * (1 - weight));
        color += c.toString(16).padStart(2, '0');
    }
    return color;
};
const setThemeLight (type) => {
	[3, 5, 7, 8, 9].forEach((v) => {
		setProperty(`--el-color-${type}-light-${v}`, mix('#ffffff', this[type], v / 10));
	});
	setProperty(`--el-color-${type}-dark-2`, mix('#000000', this[type], 0.2));
}

封装表格

表格是后台管理系统中最常见的功能了,会在多个页面中重复使用,所以这里对 element 表格组件做了二次封装,包括了查询、分页、查看详情、添加/编辑/删除等常用功能,在使用表格的时候代码量可以更少,比较方便维护。

  • /src/components/table-custom.vue: 表格组件
  • /src/components/table-edit.vue: 添加/编辑表单
  • /src/components/table-detail.vue: 查看详情组件
  • /src/components/table-search.vue: 查询组件

使用方式如下:

<template>
	<div>
		<!-- 查询组件 -->
		<TableSearch :query="query" :options="searchOpt" :search="handleSearch" />
		<!-- 表格组件 -->
		<TableCustom :columns="columns" :tableData="tableData" :total="page.total" :viewFunc="handleView" :delFunc="handleDelete" :editFunc="handleEdit" :refresh="getData" :currentPage="page.index" :changePage="changePage">
			<!-- 自定义内容 -->
			<template #toolbarBtn>
				<el-button type="warning" :icon="CirclePlusFilled" @click="visible = true">新增</el-button>
			</template>
			<template #money="{ rows }">¥{{ rows.money }}</template>
			<template #thumb="{ rows }">
				<el-image class="table-td-thumb" :src="rows.thumb" :z-index="10" :preview-src-list="[rows.thumb]" preview-teleported></el-image>
			</template>
			<template #state="{ rows }">
				<el-tag :type="rows.state ? 'success' : 'danger'">
					{{ rows.state ? '正常' : '异常' }}
				</el-tag>
			</template>
		</TableCustom>
		<!-- 新增/编辑 -->
		<el-dialog :title="isEdit ? '编辑' : '新增'" v-model="visible" width="700px" destroy-on-close :close-on-click-modal="false" @close="closeDialog">
			<TableEdit :form-data="rowData" :options="options" :edit="isEdit" :update="updateData">
				<template #thumb="{ rows }">
					<img class="table-td-thumb" :src="rows.thumb" />
				</template>
			</TableEdit>
		</el-dialog>
		<!-- 表格详情 -->
		<el-dialog title="查看详情" v-model="visible1" width="700px" destroy-on-close>
			<TableDetail :data="viewData">
				<template #thumb="{ rows }">
					<el-image :src="rows.thumb" />
				</template>
			</TableDetail>
		</el-dialog>
	</div>
</template>

具体组件的传参可以参考文档:vuems-doc

词云图

echarts 没有词云图,需要引入第三方库 echarts-wordcloud

<template>
	<v-chart class="schart" :option="wordOptions" />
</template>
<script setup>
import VChart from 'vue-echarts';
import 'echarts-wordcloud';
const wordOptions = {
    series: [
        {
            type: 'wordCloud',
            rotationRange: [0, 0],
            autoSize: { enable: true, minSize: 14,},
            textStyle: {
                fontFamily: '微软雅黑,sans-serif',
                color: () => (
                    'rgb(' +
                    [
                        Math.round(Math.random() * 160),
                        Math.round(Math.random() * 160),
                        Math.round(Math.random() * 160),
                    ].join(',') +
                    ')'
                )
            },
            data: [
                {name: 'Vue',value: 10000},
                {name: 'React',value: 9000},
                {name: '图表',value: 4000},
                {name: 'vue-manage-system',value: 2000},
            ],
        },
    ],
};
</script>

数字滚动

数字展示时带有滚动动画,能给视觉上带来一点冲击。Element Plus 的统计组件也可以实现这个效果,但是需要结合 vueuse 实现,比较麻烦。所以引入了第三方库 countup.js,封装成小组件,使用方便。

// countup.vue
<template>
    <span ref="countRef"></span>
</template>

<script setup lang="ts">
import { onMounted, ref, watch } from 'vue';
import { CountUp } from 'countup.js';

const props = defineProps({
    end: { type: Number, required: true, },
    options: { type: Object, default: () => ({}), required: false, },
});
const countRef = ref<any>(null);
let countUp: any;
onMounted(() => {
    countUp = new CountUp(countRef.value, props.end, props.options);
    if (countUp.error) return;
    countUp.start();
});

watch(() => props.end, (newVal) => {
    countUp && countUp.update(newVal);
});
</script>

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

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

相关文章

记录:阿里云服务器网站搭建(3)

Docker安装配置Tomcat 拉取镜像 docker pull tomcat:8启动一个tomcat容器用于拷贝配置文件 docker run -d -p 8080:8080 --name tomcat tomcat:8拷贝容器内tomcat配置文件和日志到本地准备映射 docker cp tomcat:/usr/local/tomcat/conf /mydata/tomcat/confdocker cp tomca…

【Linux系统化学习】线程控制

目录 前言 POSIX线程库 线程控制 创建线程 线程终止 pthread_exit()函数 pthread_cancel()函数&#xff08;会在下面线程等待部分详解&#xff09; 线程等待 pthread_join()函数 获取线程退出码 分离线程 线程取消(pthread_cancel()函数&#xff09; 线程ID及进程…

http 3.0 有哪些新特性

HTTP/3 是超文本传输协议&#xff08;HTTP&#xff09;的最新主要版本&#xff0c;其显著特点是放弃了传统的TCP作为传输层协议&#xff0c;转而采用基于UDP的QUIC&#xff08;Quick UDP Internet Connections&#xff09;协议。以下是HTTP/3利用QUIC实现高性能传输的关键特性&…

街道社区信息宣传工作做的好这个投稿方法不能少

作为一名刚刚接手街道社区信息宣传工作的新人,伊始对于如何有效地向各大媒体平台投稿我可谓是一头雾水。那时的日子充满了曲折与挑战,每一步都似乎布满了荆棘。为了让更多居民了解社区的工作动态和服务亮点,我怀揣着满腔热情,着手撰写一篇篇生动详实的新闻稿件。然而,投稿的过程…

mac上VMware fusion net模式无法正常使用的问题

更新时间&#xff1a;2024年04月22日21:39:04 1. 问题 环境&#xff1a; intel芯片的macbook pro VMware fusion 13.5.1 无法将“Ethernet0”连接到虚拟网络“/dev/vmnet8”。在这里显示这个之后&#xff0c;应该是vmnet8的网段发生了冲突&#xff0c;所以导致无法正常使用…

HTML 如何实现一个带间隙的圆环

实际效果&#xff1a; ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/5e634cedded9424d96fbe6d46f34f61a.png#pic_center 代码实现&#xff1a; HTML部分&#xff1a; <svg width"500" height"500" viewBox"0 0 100 100">&…

【机器学习-17】数据变换---小波变换特征提取及应用案列介绍

引言 在机器学习领域&#xff0c;数据变换是一种常见且重要的预处理步骤。通过对原始数据进行变换&#xff0c;我们可以提取出更有意义的特征&#xff0c;提高模型的性能。在众多数据变换方法中&#xff0c;小波变换是一种非常有效的方法&#xff0c;尤其适用于处理非平稳信号和…

科学中的概率大师:Avi Wigderson 教授的图灵奖探索

文章目录 前言一、图灵奖的新星二、揭秘计算随机性三、Wigderson 的研究突破四、学术与产业的共鸣五、荣誉与责任总结 前言 在计算机科学的辽阔星空中&#xff0c;随机性与伪随机性犹如迷人的双子星座&#xff0c;挑战着我们的智力边界。Avi Wigderson&#xff0c;普林斯顿大学…

创建虚拟环境(记录一下)

conda create -n name python3.8版本高于11.7&#xff1a; pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117 --force-reinstall --user 检验是否为true import torch print(torch.cuda.is_available()) stable diff…

(十六)call、apply、bind介绍、区别和实现

函数中的this指向&#xff1a; 函数中的this指向是在函数被调用的时候确定的&#xff0c;也就是执行上下文被创建时确定的。在一个执行上下文中&#xff0c;this由调用者提供&#xff0c;由调用函数的方式来决定。 类数组对象arguments&#xff1a; arguments只在函数&#…

消息队列选型(RabbitMq、RocketMq、Kafaka)

文章目录 前言RabbitMq优点缺点 RocketMq优点缺点 Kafaka优点缺点 总结 前言 当引入消息队列时&#xff0c;常见的选择包括ActiveMQ、Kafka、RabbitMQ和RocketMQ。然而&#xff0c;近年来&#xff0c;ActiveMQ的活跃度已经下降&#xff0c;很多公司已经不再使用这款消息队列中…

DBeaver导入sql文件

DBeaver导入sql文件 下载数据库 数据库下载地址&#xff1a; https://www.begtut.com/mysql/mysql-sample-database.html数据库导入 获取sql文件中创建的数据库的名称&#xff0c;创建一个同名的数据库。 输入数据库的名称&#xff0c;设置字符集和排序规则 数据库创建完…

基于Springboot的人职匹配推荐系统

基于SpringbootVue的人职匹配推荐系统的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 企业信息 岗位信息 新闻资讯 后台管理 用户管理 企业信息管理 岗位信…

【Linux高性能服务器编程】——高性能服务器框架

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的Linux高性能服务器编程系列之高性能服务器框架介绍&#xff0c;在这篇文章中&#xff0c;你将会学习到高效的创建自己的高性能服务器&#xff0c;并且我会给出源码进行剖析&#xff0c;以及手绘UML图来帮助大家来理解&…

LeetCode:组合求和III之回溯法

题目 题目链接 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a;只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回。题目图解 ** ** cpp代码 class …

大模型改变了NLP的游戏规则了吗

NLP已经死了吗&#xff1f; 自从 ChatGPT 横空出世以来&#xff0c;自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09; 研究领域就出现了一种消极的声音&#xff0c;认为大模型技术导致 NLP “死了”。在某乎上就有一条热门问答&#xff0c;大…

03-为啥大模型LLM还没能完全替代你?

1 不具备记忆能力的 它是零状态的&#xff0c;我们平常在使用一些大模型产品&#xff0c;尤其在使用他们的API的时候&#xff0c;我们会发现那你和它对话&#xff0c;尤其是多轮对话的时候&#xff0c;经过一些轮次后&#xff0c;这些记忆就消失了&#xff0c;因为它也记不住那…

Python 开发实现登陆和注册模块

Python 开发实现登陆和注册模块 一、案例介绍 本例设计一个用户登录和注册模块&#xff0c;使用Tkinter框架构建界面&#xff0c;主要用到画布、文本框、按钮等组件。涉及知识点&#xff1a;Python Tkinter界面编程、pickle数据存储。本例实现了基本的用户登录和注册互动界面…

纹理合成在AI去衣技术中的关键作用

随着人工智能技术的飞速发展&#xff0c;图像处理和计算机视觉领域取得了显著的进步。其中&#xff0c;AI去衣技术作为图像处理的一个分支&#xff0c;近年来引起了广泛关注。在AI去衣技术中&#xff0c;纹理合成发挥着至关重要的作用&#xff0c;它不仅能够保证图像的真实性&a…

YOLO算法改进Backbone系列之MogaNet:

卷积神经网络&#xff08;ConvNets&#xff09;一直是计算机视觉的首选方法。受灵长类视觉系统的启发&#xff0c;卷积层可以对具有区域密集连接和平移等方差约束的观测图像的邻域相关性进行编码。通过交错分层&#xff0c;ConvNets获得了被动增加的感受野&#xff0c;并善于识…