Vue3.5 企业级管理系统实战(十四):动态主题切换
动态主题切换是针对用户体验的常见的功能之一,我们可以自己实现如暗黑模式、明亮模式的切换,也可以利用 Element Plus 默认支持的强大动态主题方案实现。这里我们探讨的是后者通过 CSS 变量设置的方案。
1 组件准备
1.1 修改 Navbar 组件
在 src/layout/components/Navbar.vue 中添加设置按钮,代码如下:
//src/layout/components/Navbar.vue
<template><div class="navbar" flex><hamburger@toggleCollapse="toggleSidebar":collapse="sidebar.opened"></hamburger><BreadCrumb></BreadCrumb><div flex justify-end flex-1 items-center mr-20px><screenfull mx-5px></screenfull><el-tooltip content="ChangeSize" placement="bottom"><size-select></size-select></el-tooltip><svg-iconicon-name="ant-design:setting-outlined"size-2em@click="openShowSetting"></svg-icon></div></div>
</template><style scoped lang="scss">
.navbar {@apply h-[var(--navbar-height)];
}
</style><script lang="ts" setup>
import { useAppStore } from "@/stores/app";
// 在解构的时候要考虑值是不是对象,如果非对象解构出来就 丧失响应式了
const { toggleSidebar, sidebar } = useAppStore();const emit = defineEmits<{(event: "showSetting", isShow: boolean): void;
}>();const openShowSetting = () => {emit("showSetting", true);
};
</script>
1.2 封装 RightPanel 组件
我们希望点击设置按钮后,右侧出现抽屉面板。在 src/components 下新建 RightPanel,然后新建 index.vue 文件,代码如下:
//src/components/RightPanel/index.vue
<template><el-drawer:model-value="modelValue":direction="direction":title="title"@close="handleClose"><slot></slot></el-drawer>
</template><script lang="ts" setup>
import type { DrawerProps } from "element-plus";
import type { PropType } from "vue";
defineProps({modelValue: {type: Boolean,default: false},direction: {type: String as PropType<DrawerProps["direction"]>,default: "rtl"},title: {type: String,default: ""}
});
const emit = defineEmits(["update:modelValue"]);
const handleClose = () => {emit("update:modelValue", false);
};
</script>
1.3 封装 ThemePicker 组件
在 src/components 下新建 ThemePicker/index.vue 用来选择主题颜色,代码如下:
//src/components/ThemeOicker/index.vue
<template><el-color-picker v-model="theme" :predefine="predefineColors" />
</template><script lang="ts" setup>
import { useSettingStore } from "@/stores/settings";const store = useSettingStore();const theme = ref(store.settings.theme);
const predefineColors = ["#ff4500","#ff8c00","#ffd700","#90ee90","#00ced1","#1e90ff","#c71585"
];
watch(theme, (newValue) => {store.changeSetting({ key: "theme", value: newValue });
});
</script>
注:useSettingStore 会在后文中说明。
1.4 封装 Settings 组件
在 src/layout/components 下新建 Settings/index.vue,用来引入系统配置相关的组件,代码如下:
//src/layout/components/Settings/index.vue
<template><div class="drawer-item"><span>主题色</span><theme-picker></theme-picker></div><!--后面可以放其他配置项-->
</template>
1.5 页面引用
修改 src/layout/index.vue,引入 RightPanel 组件,并修改 navbar 组件自定义事件,代码如下:
//src/layout/index.vue
<template><div class="app-wrapper"><div class="sidebar-container"><sidebar></sidebar></div><div class="main-container"><div class="header"><!-- 上边包含收缩的导航条 --><navbar @showSetting="openSetting"></navbar><tags-view></tags-view></div><div class="app-main"><app-main></app-main></div></div><right-panel v-model="setting" title="设置"><!-- 设置功能 --><Settings></Settings></right-panel></div>
</template><script lang="ts" setup>
const setting = ref(false);
const openSetting = () => {setting.value = true;
};
</script>
<style lang="scss" scoped>
.app-wrapper {@apply flex w-full h-full;.sidebar-container {// 跨组件设置样式@apply bg-[var(--menu-bg)];:deep(.sidebar-container-menu:not(.el-menu--collapse)) {@apply w-[var(--sidebar-width)];}}.main-container {@apply flex flex-col flex-1 overflow-hidden;}.header {@apply h-84px;.navbar {@apply h-[var(--navbar-height)] bg-yellow;}.tags-view {@apply h-[var(--tagsview-height)] bg-blue;}}.app-main {@apply bg-cyan;min-height: calc(100vh - var(--tagsview-height) - var(--navbar-height));}
}
</style>
2 主题设置方法
2.1 修改 Style
在 src/style 下,添加默认主题色,分别修改 variables.module.scss 和 variables.module.scss.d.ts,代码如下:
//variables.module.scss
$sideBarWidth: 210px;
$navBarHeight: 50px;
$tagsViewHeight: 34px;// 导航颜色
$menuText: #bfcbd9;
// 导航激活的颜色
$menuActiveText: #409eff;
// 菜单背景色
$menuBg: #304156;
$theme: #409eff;:export {menuText: $menuText;menuActiveText: $menuActiveText;menuBg: $menuBg;theme: $theme;
}
//variables.module.scss.d.ts
interface IVaraibles {menuText: string;menuActiveText: string;menuBg: string;theme: string;navBarHeight: string;tagsViewHeight: string;
}export const varaibles: IVaraibles;
export default varaibles;
2.2 添加 settings Store
在 src/stores 下新建 settings.ts,代码如下:
//src/stores/settings.ts
import varaibles from "@/style/variables.module.scss";// 定义一个名为 "setting" 的 Vuex 存储,用于管理应用的设置
export const useSettingStore = defineStore("setting",() => {// 如果选择的是同样的主题颜色,就不更改,节省const settings = reactive({theme: varaibles.theme, //当前选择的颜色originalTheme: "" //正在应用的颜色});type ISetting = typeof settings;// 定义一个方法来更改设置const changeSetting = <T extends keyof ISetting>({key,value}: {key: T;value: ISetting[T];}) => {settings[key] = value;};return { changeSetting, settings };},{persist: {storage: sessionStorage, // 使用 sessionStorage 作为持久化存储pick: ["settings.theme"] // 持久化 settings 对象中的 theme 属性}}
);
2.3 安装 css-color-function
查看 Element Plus 源码(如下图,详细代码感兴趣的可以自己去看看源码),可以发现它是用 --el-color-#{$type} 、--el-color-#{$type}-light-{$i} 来设置基础颜色的,我们只需要修改这两个变量对应的颜色,就可以更换主题了。
要生成以上两个变量的形式,我们需要借助一个库 css-color-function,使用 pnpm 安装,代码如下:
pnpm i css-color-function
在 src/vite-env.d.ts中添加声明,增加 ts 提示,代码如下:
/// <reference types="vite/client" />declare module "element-plus/dist/locale/en.mjs";
declare module "element-plus/dist/locale/zh-cn.mjs";declare module "css-color-function" {export function convert(color: string): string;
}
2.4 color 公共方法
在 src/utils 下新建 color.ts,封装生成和设置主题颜色的方法,代码如下:
//src/utils/color.ts
// 引入 css-color-function 库,该库用于处理 CSS 颜色函数表达式
import cssFunc from "css-color-function";// 定义一个对象 formula,用于存储颜色生成公式
// 每个属性名代表生成的颜色名称,属性值是一个 CSS 颜色函数表达式
// "xxx" 是一个占位符,后续会被实际的主色调替换
// tint 函数用于将颜色变亮,括号内的百分比表示变亮的程度
const formula: { [prop: string]: string } = {"primary-light-1": "color(xxx tint(10%))","primary-light-2": "color(xxx tint(20%))","primary-light-3": "color(xxx tint(30%))","primary-light-4": "color(xxx tint(40%))","primary-light-5": "color(xxx tint(50%))","primary-light-6": "color(xxx tint(60%))","primary-light-7": "color(xxx tint(70%))","primary-light-8": "color(xxx tint(80%))","primary-light-9": "color(xxx tint(90%))"
};// 定义一个函数 generateColors,用于根据主色调生成一系列变亮的颜色
// 参数 primary 是传入的主色调,通常是一个有效的 CSS 颜色值
const generateColors = (primary: string) => {// 定义一个空对象 colors,用于存储生成的颜色const colors: Record<string, string> = {};// 遍历 formula 对象的每个键值对Object.entries(formula).forEach(([key, v]) => {// 将颜色公式中的占位符 "xxx" 替换为实际的主色调const value = v.replace(/xxx/g, primary);// 使用 cssFunc.convert 方法将颜色函数表达式转换为实际的 CSS 颜色值// 并将生成的颜色存储到 colors 对象中,键为颜色名称,值为实际颜色值colors[key] = cssFunc.convert(value);});// 返回生成的颜色对象return colors;
};// 定义一个函数 setColors,用于将生成的颜色设置为 HTML 根元素的自定义属性
// 参数 colors 是一个对象,包含颜色名称和对应的实际颜色值
const setColors = (colors: Record<string, string>) => {// 获取 HTML 根元素const el = document.documentElement;// 遍历 colors 对象的每个键值对Object.entries(colors).forEach(([key, value]) => {// 使用 el.style.setProperty 方法将颜色值设置为根元素的自定义属性// 自定义属性的名称为 --el-color- 加上颜色名称el.style.setProperty(`--el-color-${key}`, value);});
};// 导出 generateColors 和 setColors 函数,以便在其他模块中使用
export { generateColors, setColors };
2.5 设置主题
在 src 下新建 hooks 文件夹,新建 useGenerateTheme.ts 文件,用于监控主题颜色变化并设置主题颜色,代码如下:
//src/hooks/useGenerateTheme.ts
// 从 @/stores/settings 模块中导入 useSettingStore 函数,该函数用于获取设置状态的存储实例
import { useSettingStore } from "@/stores/settings";
// 从 @/utils/color 模块中导入 generateColors 和 setColors 函数
// generateColors 用于根据主色调生成一系列变亮的颜色
// setColors 用于将生成的颜色设置为 HTML 根元素的自定义属性
import { generateColors, setColors } from "@/utils/color";// 定义一个组合式函数 useGenerateTheme,用于处理主题生成和更新逻辑
export const useGenerateTheme = () => {// 通过调用 useSettingStore 函数获取设置状态的存储实例const store = useSettingStore();const theme = computed(() => store.settings.theme);const originalTheme = computed(() => store.settings.originalTheme);// 使用 watchEffect 函数创建一个副作用函数,该函数会在其依赖项发生变化时自动执行watchEffect(() => {// 检查当前的主题值 theme.value 是否与原始主题值 originalTheme.value 不同if (theme.value !== originalTheme.value) {// 如果主题值发生了变化,生成新的颜色对象const colors = {// 将当前主题颜色作为主色调primary: theme.value,// 调用 generateColors 函数,根据当前主题颜色生成一系列变亮的颜色// 并将这些颜色合并到 colors 对象中...generateColors(theme.value)};// 调用 setColors 函数,将生成的颜色对象应用到 HTML 根元素的自定义属性上// 从而实现主题颜色的更新setColors(colors);// 调用存储实例的 changeSetting 方法,更新存储中的原始主题值// 使其与当前主题值保持一致store.changeSetting({ key: "originalTheme", value: theme.value });}});// 此函数的主要目的是生成主题颜色并将其应用到 HTML 根元素上// 以实现主题的动态更新
};
2.6 页面引入
在 App.vue 中引入 useGenerateTheme.ts 进行应用,代码如下:
//src/App.vue
<template><el-config-provider :size="store.size" :locale="locale"><router-view></router-view></el-config-provider>
</template><script lang="ts" setup>
import { useAppStore } from "./stores/app";
import en from "element-plus/dist/locale/en.mjs";
import zhCn from "element-plus/dist/locale/zh-cn.mjs";
import { useGenerateTheme } from "@/hooks/useGenerateTheme";
const language = ref("zh-cn");
const locale = computed(() => (language.value === "zh-cn" ? zhCn : en));const store = useAppStore();useGenerateTheme(); // watch主题
</script>
3 组件应用
3.1 Element 组件
完成文章前面的步骤后,Element 组件都可以在选择主题后,自动变化主题颜色了。效果如下:
3.2 自定义组件
自定义组件要使用主题切换,需要在组件中进行添加,示例如下:
示例1:
修改 TagsView 组件,添加主题部分,因原代码太长,省略其他后的代码如下:
<template><div class="tags-view-container"><el-scrollbar w-full whitespace-nowrap><router-linkclass="tags-view-item"v-for="(tag, index) in visitedViews":class="{active: isActive(tag)}":style="{backgroundColor: isActive(tag) ? theme : '',borderColor: isActive(tag) ? theme : ''}":key="index":to="{ path: tag.path, query: tag.query }"><!-- 省略其他代码 --></router-link></el-scrollbar></div>
</template><script lang="ts" setup>
import { useTagsView } from "@/stores/tagsView";
import type {RouteLocationNormalizedGeneric,RouteRecordRaw
} from "vue-router";
import { join } from "path-browserify";
import { routes } from "@/router/index"; //从应用的路由配置文件中导入了所有的路由定义
import { useSettingStore } from "@/stores/settings";
//...省略其他代码...
const isActive = (tag: RouteLocationNormalizedGeneric) => {return tag.path === route.path;
};
//...省略其他代码...
const settingsStore = useSettingStore();
const theme = computed(() => settingsStore.settings.theme);
</script><style scoped>
//...省略其他代码...
</style>
示例2:
修改 Sidebar 组件,添加主题部分,完整代码如下:
//src/layout/components/Sidebar/index.vue
<template><div><el-menuclass="sidebar-container-menu"router:default-active="defaultActive":background-color="varaibles.menuBg":text-color="varaibles.menuText":active-text-color="theme":collapse="sidebar.opened"><sidebar-itemv-for="route in routes":key="route.path":item="route":base-path="route.path"/><!-- 增加父路径,用于el-menu-item渲染的时候拼接 --></el-menu></div><!-- :collapse="true" -->
</template><script lang="ts" setup>
import { useAppStore } from "@/stores/app";
import varaibles from "@/style/variables.module.scss";
import { routes } from "@/router";
import { useSettingStore } from "@/stores/settings";const route = useRoute();const { sidebar } = useAppStore();const defaultActive = computed(() => {// .....return route.path;
});const settingsStore = useSettingStore();
const theme = computed(() => settingsStore.settings.theme);
</script><style scoped></style>
完成后,页面效果如下:
以上,就是主题切换的全部内容。
下一篇将继续探讨 tagsView 切换设置,敬请期待~
相关文章:
Vue3.5 企业级管理系统实战(十四):动态主题切换
动态主题切换是针对用户体验的常见的功能之一,我们可以自己实现如暗黑模式、明亮模式的切换,也可以利用 Element Plus 默认支持的强大动态主题方案实现。这里我们探讨的是后者通过 CSS 变量设置的方案。 1 组件准备 1.1 修改 Navbar 组件 在 src/layo…...
Python中for循环及其相关函数range(), zip(), enumerate()等
一、Python中的for循环及其相关函数 Python的for循环是算法竞赛中最常用的迭代工具之一,因其简洁和灵活性非常适合快速实现逻辑。以下详细讲解for循环及相关函数在竞赛中的使用场景。 1. for循环基本语法 Python的for循环用于遍历可迭代对象(如列表、…...
数据结构与算法——链表OJ题详解(2)
文章目录 一、前言二、OJ续享2.1相交链表2.2环形链表12.2环形链表2 三、总结 一、前言 哦了兄弟们,咱们上次在详解链表OJ题的时候,有一部分OJ题呢up并没有整理完,这一个星期呢,up也是在不断的学习并且沉淀着,也是终于…...
免费送源码:Java+ssm+MySQL 基于PHP在线考试系统的设计与实现 计算机毕业设计原创定制
摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对在线考试等问题,对如何通过计算…...
Android之JNI详解
Android之JNI详解 简介创建项目注册动态注册静态注册 关键词解读基础数据类型引用java对象JNI引用与释放cmake配置文件 简介 JNI(Java Native Interface) 是 Java 提供的一种编程框架,用于在 Java 应用程序中调用和与用其他编程语言…...
React Hooks: useRef,useCallback,useMemo用法详解
1. useRef(保存引用值) useRef 通常用于保存“不会参与 UI 渲染,但生命周期要长”的对象引用,比如获取 DOM、保存定时器 ID、WebSocket等。 新建useRef.js组件,写入代码: import React, { useRef, useSt…...
Java基础知识
概念 请介绍全局变量和局部变量的区别 Java中的变量分为成员变量和局部变量,它们的区别如下: 成员变量: 1. 成员变量是在类的范围里定义的变量; 2. 成员变量有默认初始值; 3. 未被static修饰的成员变量也叫…...
体验智能体构建过程:从零开始构建Agent
1. 什么是智能体? 智能体(Agents)是一种能够感知环境、做出决策并采取行动来实现特定目标的自主实体。智能体的复杂程度各不相同,从简单的响应式智能体(对刺激直接做出反应)到更高级的智能体(能…...
如何从项目目标到成功标准:构建可量化、可落地的项目评估体系
引言 在项目管理领域,"项目成功"的定义往往比表面看起来更复杂。根据PMI的行业报告,67%的项目失败源于目标与成功标准的不匹配。当项目团队仅关注"按时交付"或"预算达标"时,常会忽视真正的价值创造。本文将通…...
大模型论文:Language Models are Few-Shot Learners(GPT3)
大模型论文:Language Models are Few-Shot Learners(GPT3) 文章地址:https://proceedings.neurips.cc/paper_files/paper/2020/file/1457c0d6bfcb4967418bfb8ac142f64a-Paper.pdf 一、摘要 我们证明了,扩大语言模型的规模在任务无关的 few…...
驱动学习专栏--字符设备驱动篇--1_chrdevbase
字符设备驱动简介 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节 流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、 IIC 、 SPI , LCD 等等都是字符设备&…...
muduo库源码分析: TcpConnection
一. 主要成员: socket_:用于保存已连接套接字文件描述符。channel_:封装了上面的socket_及其各类事件的处理函数(读、写、错误、关闭等事件处理函数)。这个Channel中保存的各类事件的处理函数是在TcpConnection对象构造函数中注册…...
【SLAM】ubuntu 18.04 编译安装 OpenCV 3.2.0 时出现哈希错误
本文首发于❄慕雪的寒舍 1. 前言 1.1. 问题说明 在amd64的ubuntu 18.04 desktop上编译安装 OpenCV 3.2.0 的时候,我遇到了cmake构建错误。错误的核心报错如下 for file: [/home/king/slam/pkg/opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32…...
挂马漏洞 asp连接冰蝎webshell (附webshell源码 仅限学习研究)
目录 ASP WebShell代码 代码说明: 部署步骤: 使用冰蝎客户端连接: 注意事项: ASP WebShell代码 <% 冰蝎连接密码(需与冰蝎客户端配置一致) Dim key key "mysecretkey123" 自定义密码…...
Grafana将弃用AngularJS-我们该如何迁移
AngularJS 弃用时间线 AngularJS 支持已在 Grafana 9 中正式弃用。在 2024 年 5 月发布的 Grafana 11 中,所有 Grafana Cloud 和自托管安装默认关闭该功能。到 Grafana 12 版本时,将完全移除对 AngularJS 的支持,包括配置参数开关 angular_s…...
基于单片机的病房呼叫系统设计
2.1 总体方案设计 本课题为基于单片机的病房呼叫系统设计,在此将整个系统架构设计如图2.1所示,在此采用八个按键模拟8个不同的病房号,再通过8个LED指示灯对病房号的状态进行指示,当用户按键按键时,相应的LED灯会点亮…...
简述一下Unity的UnityWebRequest
UnityWebRequest是Unity引擎中用于处理网络请求的强大工具,尤其适用于与Web服务器进行交互,比如获取数据、上传文件或下载资源等。相较于旧版的WWW类,UnityWebRequest提供了更灵活、更高效的API,支持多种HTTP方法,并能…...
文件操作和IO - 2
目录 Java 中操作文件 File 概述 属性 构造方法 方法 getParent getName getPath getAbsolutePath getCanonicalPath exists isFile isDirectory createNewFile delete deleteOnExit list listFiles mkdir mkdirs 完! Java 中操作文件 Java 对于文件操…...
⑪数据中心网络M-LAG实战
一、DeviceA-M-LAG-Mater配置 1、M-LAG 系统配置。 # m-lag mad exclude interface GigabitEthernet1/0/7 m-lag mad exclude interface Vlan-interface100 m-lag mad exclude interface Vlan-interface101 m-lag system-mac 0002-0002-0002 m-lag system-number 1 m-la…...
Win10系统安装WSL2-Ubuntu, 并使用VScode开始工作
本教程基于博主当前需要使用 WSL2(Windows Subsystem for Linux 2) 而编写,将自己使用的经过分享给大家。有什么意见建议敬请大家批评指正。此过程需要打开 Microsoft Store 话不多说,立即开始~ 文章目录 1. 检查系统版本2. 启动 WSL 功能3. 安装Ubuntu4…...
Node.js种cluster模块详解
Node.js 中 cluster 模块全部 API 详解 1. 模块属性 const cluster require(cluster);// 1. isMaster // 判断当前进程是否为主进程 console.log(是否为主进程:, cluster.isMaster);// 2. isWorker // 判断当前进程是否为工作进程 console.log(是否为工作进程:, cluster.isW…...
Window 10使用WSL2搭建Linux版Android Studio应用开发环境
一、背景 公司基于高通SA8155、SA8295等车载芯片进行座舱系统开发,使用repo统一管理系统及应用源码仓库。 Android应用端使用Ubuntu环境Android Studio进行开发,使用repo进行平台性管理,包含所有应用仓库。由于gradle配置使用了linux下文件软链接,无法直接使用Window环境…...
PostgreSQL 的统计信息
PostgreSQL 的统计信息 PostgreSQL 的统计信息是查询优化和性能调优的基础,系统通过多种统计信息来评估数据分布和访问模式,从而生成高效的执行计划。 一 统计信息类型与用途 1.1 核心统计类别 统计类型存储位置主要用途更新机制表和索引扫描统计pg_…...
【Linux】Linux基础指令
Linux系统初步介绍 Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯托瓦兹在1991年首次发布,之后,在加上用户空间的应用程序之后,就成为了Linux操作系统。 严格来讲,Linux 只是操作系统内核本身,但通常采用“Linux内核”来表达该意思&#…...
【SLAM】在ORB_SLAM2的ROS模式下使用RealSense D435相机
本文介绍了如何在ORB_SLAM2项目中使用RealSense D435相机作为RGB-D输入源,包括ROS下启动D435相机、ORB_SLAM2订阅Topic、ORB_SLAM2读取realsense-viewer录制的rosbag文件等步骤。。 本文首发于❄慕雪的寒舍 1. 前言 先前已经编写了如何用TUM数据集运行ORB_SLAM3以及…...
scapy使用
https://scapy.readthedocs.io/en/latest/introduction.html 在 Mac 上使用 Scapy 抓取特定 IP 的流量并保存到 a.pcap 的步骤如下: 步骤 1:安装 Scapy 在终端中执行以下命令安装: pip install scapy步骤 2:创建 Python 脚本 …...
C2000 系统控制(4) — CPU Memory
CPU 内存 内存控制器 在 C2000 实时微控制器上,RAM 具有不同的特性。这些特性包括: CPU 专用:M0、M1 RAMCPU 和 CLA 共享:LSx RAMCPU、DMA 和 HIC 共享:GSx RAM用于在处理器之间发送和接收消息:MSG RAM …...
Linux网络编程——详解网络层IP协议、网段划分、路由
目录 一、前言 二、IP协议的认识 1、什么是IP协议? 2、IP协议报头 三、网段划分 1、初步认识IP与路由 2、IP地址 I、DHCP动态主机配置协议 3、IP地址的划分 I、CIDR设计 II、子网数目的计算 III、子网掩码的确定 四、特殊的IP地址 五、IP地址的数量限…...
解析医疗器械三大文档:DHF、DMR与DHR
医疗器械的 DHF、DMR 和 DHR 是质量管理体系(QMS)中的核心文件,贯穿产品全生命周期, 确保医疗器械的安全性、有效性和合规性。 一、三大文件的定义与法规依据 缩写全称法规依据(以 FDA 为例)核心目的DHF…...
SQL 全文检索原理
全文检索(Full-Text Search)是SQL中用于高效搜索文本数据的技术,与传统的LIKE操作或简单字符串比较相比,它能提供更强大、更灵活的文本搜索能力。 基本概念 全文检索的核心思想是将文本内容分解为可索引的单元(通常是词或词组),然后建立倒排…...
基于Rosen梯度投影法的约束优化问题求解及MATLAB实现
摘要 在工程优化、经济建模等领域,约束优化问题普遍存在,其核心是在满足线性或非线性约束条件下求解目标函数的极值。本文聚焦Rosen梯度投影法,系统阐述其算法原理、实现步骤及MATLAB编程方法。 关键词:Rosen梯度投影法…...
Model Context Protocol (MCP) - 尝试创建和测试一下MCP Server
1.简单介绍 MCP是Model Context Protocol的缩写,是Anthropic开源的一个标准协议。MCP使得大语言模型可以和外部的数据源,工具进行集成。当前MCP在社区逐渐地流行起来了。同时official C# SDK(仓库是csharp-sdk) 也在不断更新中,目前最新版本…...
Linux上位机开发实践(关于Qt的移植)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 linux平台上面,很多界面应用,都是基于qt开发的。不管是x86平台,还是arm平台,qt使用的地方都比较多。…...
Node.js 项目 用 `Docker Compose` 发布的完整流程
Node.js 项目 用 Docker Compose 发布的完整流程 ✅ 一、基本项目结构示例 以一个简单 Express 项目为例: my-node-app/ ├── app.js # 启动文件 ├── package.json ├── package-lock.json ├── Dockerfile # 构建 Node 容器 ├…...
Java基础:浅析Java中的XML文件处理
概述 XML(全称Extensible Markup Language,可扩展标记语言) .本质是一种数据的格式,可以用来存储复杂的数据结构,和数据关系 XML特点 1.XML中的“<标签名>”成为一个标签或者一个元素,一般成对出现的 2.XML…...
MCU刷写——S19(S-Record)文件格式详解及Python代码
工作之余来写写关于MCU的Bootloader刷写的相关知识,以免忘记。今天就来聊聊S19这种文件的格式,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问,可底下评论! 如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢…...
HTML — 过渡与动画
HTML过渡与动画是提升网页交互体验的核心技术,主要通过CSS实现动态效果。 过渡 CSS过渡(Transition)介绍 适用于元素属性变化时的平滑渐变效果,如悬停变色、尺寸调整。通过定义transition-property(过渡属性…...
python【标准库】multiprocessing
文章目录 介绍多进程Process 创建子进程共享内存数据多进程通信Pool创建子进程多进程案例多进程注意事项介绍 python3.10.17版本multiprocessing 是一个多进程标准模块,使用类似于threading模块的API创建子进程,充分利用多核CPU来并行处理任务。提供本地、远程的并发,高效避…...
BANK OF CHINA(HONG KONG)网点
BANK OF CHINA(HONG KONG)网点开户 ZoneBankAddressDates东区杏花邨分行香港柴湾杏花邨东翼商场205-208号20240415: 11:15, 13:00, 11:15, 13:00, 11:15, 13:0020240412: 11:15, 13:00东区鲗鱼涌分行香港鰂鱼涌英皇道1060号柏惠苑20240412: 09:45 注意事项 到达指定分行时&am…...
基于springboot的“嗨玩旅游网站”的设计与实现(源码+数据库+文档+PPT)
基于springboot的“嗨玩旅游网站”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:springboot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 局部E-R图 系统首页界面 系统注册…...
机器学习(3)——决策树
文章目录 1. 决策树基本原理1.1. 什么是决策树?1.2. 决策树的基本构成:1.3. 核心思想 2. 决策树的构建过程2.1. 特征选择2.1.1. 信息增益(ID3)2.1.2. 基尼不纯度(CART)2.1.3. 均方误差(MSE&…...
【人脸识别中的“类内差异”和“类间差异】
核心问题:人脸识别中的“类内差异”和“类间差异” 想象你在教一个小朋友认人: 类间差异(不同人之间的区别): 目标:让小朋友能分清“爸爸”和“妈妈”。方法:指着爸爸说“这是爸爸”࿰…...
第十六届蓝桥杯 省赛C/C++ 大学B组
编程题目现在在洛谷上都可以提交了。 未完待续,写不动了。 C11 编译命令 g A.cpp -o A -Wall -lm -stdc11A. 移动距离 本题总分:5 分 问题描述 小明初始在二维平面的原点,他想前往坐标 ( 233 , 666 ) (233, 666) (233,666)。在移动过程…...
SpringBoot3.0 +GraalVM21 + Docker 打包成可执行文件
SpringBoot3.0 GraalVM21 Docker 打包成可执行文件 前言 随着时代的飞速发展,JDK 17 及以上版本开始支持通过 GraalVM 将运行在 JVM 上的 jar 包直接打包成可在操作系统上运行的原生可执行文件。这一特性能使开发者在某些场景下更加灵活地部署 Java 程序。 在云原…...
从编程范式看 “万物皆智能,万事皆自动” 愿景
从编程范式看“万物皆智能,万事皆自动”愿景 引言 在信息技术飞速发展的今天,“万物皆智能,万事皆自动”成为了众多 IT 从业者和科技爱好者心中的终极愿景。这一愿景描绘了一个所有事物都具备智能、所有事情都能自动完成的美好未来。而在实现这一愿景的征程中,面向对象编…...
Vue 项目中 package.json 文件的深度解析
Vue 项目中 package.json 文件的深度解析 在 Vue 项目中,package.json 文件是项目配置的核心,它管理着项目的依赖关系、脚本命令、版本信息等重要内容。正确理解和配置 package.json 文件,对于项目的开发、构建、测试和部署都至关重要。本文…...
解决2080Ti使用节点ComfyUI-PuLID-Flux-Enhanced中遇到的问题
使用蓝大的工作流《一键同时换头、换脸、发型、发色之双pulid技巧》 刚开始遇到的是不支持bf16的错误 根据《bf16 is only supported on A100 GPUs #33》中提到,修改pulidflux.py中的dtype 为 dtype torch.float16 后,出现新的错误,这个…...
1 程序的本质,计算机语言简史,TIOBE 指数,C 语言的独特魅力、发展历程、发行版本和应用场景
👋 嘿,各位编程探险家们!是不是一提到 C 语言,脑海中就浮现出指针乱舞、内存泄漏的恐怖画面?别怕,你并不孤单!😅 今天,你踏入了这个专为 “C 语言恐惧症” 患者打造的避…...
python格式化字符串漏洞
什么是python格式化字符串漏洞 python中,存在几种格式化字符串的方式,然而当我们使用的方式不正确的时候,即格式化的字符串能够被我们控制时,就会导致一些严重的问题,比如获取敏感信息 python常见的格式化字符串 百…...
撰写学位论文Word图表目录的自动生成
第一步:为图片和表格添加题注 选中图片或表格 右键点击需要编号的图片或表格,选择 【插入题注】(或通过菜单栏 引用 → 插入题注)。 设置题注标签 在弹窗中选择 标签(如默认有“图”“表”,若无需自定义标…...