DeepSeek 助力 Vue 开发:打造丝滑的颜色选择器(Color Picker)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕

共同探索软件研发!敬请关注【宝码香车】
关注描述

csdngif标识

目录

  • DeepSeek 助力 Vue 开发:打造丝滑的颜色选择器(Color Picker)
    • 📚前言
    • 📚进入安装好的DeepSeek
    • 📚页面效果
    • 📚指令输入
      • 属性
      • 事件
      • 其他功能
    • 📚think
      • 📘定义组件 src\components\ColorPicker\ColorPicker.vue
      • 📘使用组件 src\views\ColorPickerView.vue
    • 📚代码测试
    • 📚测试代码正常跑通,附其他基本代码
      • 📘编写路由 src\router\index.js
      • 📘编写展示入口 src\App.vue
    • 📚页面效果
    • 📚自己部署 DeepSeek 安装地址
    • 📚相关文章


📚📗📕📘📖🕮💡📝🗂️✍️🛠️💻🚀🎉🏗️🌐🖼️🔗📊👉🔖⚠️🌟🔐⬇️·正文开始⬇️·🎥😊🎓📩😺🌈🤝🤖📜📋🔍✅🧰❓📄📢📈 🙋0️⃣1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣🔟🆗*️⃣#️⃣

DeepSeek 助力 Vue 开发:打造丝滑的颜色选择器(Color Picker)

📚前言

公募基金行业也在积极拥抱 DeepSeek,以提升投资研究、产品销售等业务的效率和质量。

汇添富基金率先宣布,已完成 DeepSeek 系列开源模型的私有化部署,并将应用于投资研究、产品销售、风控合规、客户服务等核心业务场景。相较于传统模型,DeepSeek 系列模型具备更强的语言理解、逻辑推理及多轮对话能力,不仅保障了数据安全性与响应效率,更可针对金融场景需求进行定向优化,将显著提升金融数据分析的深度与广度,全面赋能公司各项业务。以电商为例,公司互金部门已组建代号为 “deepfund” 的 AI 团队,利用 AI 大模型全面提升基金电商的运营效率和用户体验,推动电商销售业务的智能化发展 。

📚进入安装好的DeepSeek

0基础3步部署自己的DeepSeek安装步骤

打开搭建好的DeepSeek应用。

DeepSeek应用

进入应用。

进入DeepSeek应用

📚页面效果

页面效果

📚指令输入

已经创建好了一个基于Vue3的组合式API的项目(Composition API),并能正常运行起来,请帮我用 Vue3的组合式API(Composition API) 生成一个 颜色选择器(Color Picker) 的功能组件,所有代码都保存在components/ColorPicker 下的文件夹中。功能组件的script标签中只有setup属性,使用普通 JavaScript 实现,不使用TypeScript。
功能要有,如下属性:

属性

  1. modelValue (String/Object)

    • 支持多种格式:HEX、RGB/RGBA、HSL/HSLA 等
    • 可考虑使用 v-model 双向绑定
  2. defaultColor (String)

    • 初始默认颜色值(当 modelValue 为空时使用)
  3. showAlpha (Boolean)

    • 是否显示透明度控制条
  4. presetColors (Array)

    • 预设颜色数组,可支持自定义格式
    • 示例:[“#FF0000”, “rgba(0,255,0,0.5)”]
  5. colorMode (String)

    • 显示的颜色模式选择:‘hex’ | ‘rgb’ | ‘hsl’
    • 或允许同时显示多种输入模式
  6. disabled (Boolean)

    • 是否禁用组件

事件

  1. update:modelValue

    • 颜色值变更时触发(用于 v-model 绑定)
  2. change

    • 当用户完成颜色选择时触发(比 input 更确定的操作)
  3. invalid

    • 当输入非法颜色值时触发

其他功能

  1. 交互设计

    • 色相环 + 饱和度/明度平面选择器
    • 直接输入颜色值的文本输入框
    • 颜色预览区域
    • 透明度控制条(当 showAlpha=true 时)
  2. 无障碍访问

    • 支持键盘导航操作
    • 添加 ARIA 标签
    • 高对比度模式支持
  3. 扩展功能

    • 颜色历史记录功能
    • 支持吸管取色(需要浏览器支持)
    • 颜色格式自动识别与转换
  4. 性能优化

    • 高频操作(如拖动选择时)使用 debounce
    • 复杂计算使用 Web Worker
  5. 样式建议

    • 提供 CSS 变量供主题定制
    • 支持插槽(slots)自定义部分区域
    • 移动端触摸优化
  6. 开发建议

    • 使用 TypeScript 定义颜色类型
    • 提供颜色转换工具函数(如 hexToRgb)
    • 编写单元测试覆盖各种颜色格式转换
  7. 兼容性

    • 提供不同颜色格式间的自动转换
    • 处理浏览器前缀和兼容性问题
    • 响应式布局支持
  8. 文档建议

    • 提供不同使用场景的示例
    • 说明支持的颜色格式规范
    • 添加交互演示示例

建议先实现核心功能(色盘选择 + HEX 输入),再逐步扩展高级功能。可参考成熟颜色选择器(如 Photoshop、Chrome 开发者工具)的交互模式,同时保持 Vue3 组件的声明式特性。

你有更好的建议也可以添加,要注明。组件定义好后给出3个及以上的调用示例。
下面是现有目录
vueAndDeepseek/
├── src/ # 源代码目录
│ ├── assets/ # 静态资源
│ │ ├── base.css
│ │ ├── main.css
│ │ └── logo.svg
│ ├── components/ # 组件目录
│ │ ├── HelloWorld.vue
│ │ ├── TheWelcome.vue
│ │ ├── WelcomeItem.vue
│ │ ├── Progress/
│ │ │ └── Progress.vue
│ │ ├── Accordion/
│ │ ├── BackToTop/
│ │ ├── Card/
│ │ ├── InfiniteScroll/
│ │ ├── Notification/
│ │ ├── Timeline/
│ │ ├── Switch/
│ │ ├── Tabs/
│ │ ├── Sidebar/
│ │ ├── Breadcrumbs/
│ │ ├── MasonryLayout/
│ │ ├── Rating/
│ │ ├── ColorPicker/
│ │ ├── DatePicker/
│ │ └── icons/
│ ├── router/ # 路由配置
│ │ └── index.js
│ ├── stores/ # Pinia 状态管理
│ │ └── counter.js
│ ├── views/ # 页面组件
│ │ ├── ProgressView.vue
│ │ ├── TabsView.vue
│ │ ├── SwitchView.vue
│ │ ├── TimelineView.vue
│ │ ├── NotificationView.vue
│ │ ├── CardView.vue
│ │ ├── InfiniteScrollView.vue
│ │ ├── BackToTopView.vue
│ │ ├── AccordionView.vue
│ │ ├── SidebarView.vue
│ │ ├── BreadcrumbsView.vue
│ │ ├── MasonryLayoutView.vue
│ │ ├── RatingView.vue
│ │ ├── ColorPickerView.vue
│ │ ├── DatePickerView.vue
│ │ └── AboutView.vue
│ ├── App.vue # 根组件
│ └── main.js # 应用入口
├── public/ # 公共资源目录
├── index.html # HTML 模板
├── package.json # 项目配置
├── vite.config.js # Vite 配置
└── node_modules/ # 依赖包目录

📚think

嗯,我现在需要帮用户生成一个基于Vue3组合式API的颜色选择器组件。用户已经有一个Vue3项目,使用的是Composition API,并且要求所有代码放在components/ColorPicker文件夹下。组件的script标签中只有setup属性,用普通JavaScript实现,不使用TypeScript。

首先,我得理解用户的需求。他们需要一个功能丰富的颜色选择器,支持多种颜色格式,如HEX、RGB、RGBA、HSL等,并且能够通过v-model双向绑定。还有其他属性如defaultColor、showAlpha、presetColors、colorMode、disabled等等。同时,事件包括update:modelValue、change和invalid。

接下来,我得考虑核心功能的实现。用户建议先实现色盘选择和HEX输入,再逐步扩展高级功能。所以,我应该先专注于这两个部分,确保它们能正常工作。

在组件结构方面,需要一个色相环和饱和度/明度平面选择器,以及文本输入框、颜色预览区域,还有可选的透明度控制条。交互设计要支持键盘导航,添加ARIA标签,高对比度模式等无障碍访问特性。

考虑到性能优化,高频操作如拖动时需要使用 debounce,复杂计算可能用Web Worker,但目前核心功能可能不需要。

样式方面,要提供CSS变量供主题定制,支持插槽,移动端触摸优化。开发建议包括颜色转换工具函数和单元测试,这些可能后续再处理。

兼容性方面,不同浏览器的支持和响应式布局需要考虑,但当前版本可以先实现基本功能,后续再做兼容性调整。

现在,我得开始编写组件代码。首先,在components/ColorPicker下创建一个ColorPicker.vue文件。script部分使用setup函数,导入vue的ref、computed等组合式API。

处理modelValue:由于v-model需要双向绑定,内部会管理一个colorValue的状态,当外部传入modelValue时,初始化这个状态,并在更新时触发update:modelValue事件。

defaultColor属性用于在modelValue为空时设置初始值。showAlpha控制透明度滑块的显示与否。presetColors是一个数组,用户可以自定义颜色列表,可能需要渲染成小色块供选择。

colorMode允许用户切换显示的颜色格式模式,如hex、rgb、hsl等。这会影响输入框和显示的内容,所以需要根据colorMode来处理颜色值的转换。

disabled属性控制组件是否禁用,影响交互元素的可用性。

事件部分,update:modelValue在颜色变化时触发,change事件在用户完成选择后触发,invalid在非法输入时触发。

接下来是核心功能:色盘选择和HEX输入。我需要一个色相环,允许用户选择色相,以及一个平面来调整饱和度和明度。这可能涉及到计算颜色坐标,并根据拖拽位置更新颜色值。

文本输入框用于直接输入颜色值,如#FF0000或rgb(255,0,0)等格式。需要处理输入的变化,解析为正确的颜色值,并在无效时触发invalid事件。

颜色预览区域显示当前选择的颜色,并可能作为点击目标来打开色盘或其他操作。

透明度控制条是一个滑块,允许调整alpha通道的值,这在showAlpha为true时显示。

现在,我得考虑如何实现这些功能。首先,设置组件的状态变量:

colorValue:存储当前颜色值,可能是对象形式,包含h、s、l或r、g、b、a等属性。
hsv:用于色相环和饱和度明度平面的坐标。
inputText:用户输入的颜色字符串,可能与colorValue不同步,需要解析。
在setup函数中,初始化这些状态变量,并处理props。例如,当modelValue变化时,更新colorValue;当showAlpha变化时,调整滑块的显示。

接下来是事件处理。比如,点击色盘时,计算新的hsv值并更新颜色。拖拽鼠标时,同样需要计算新的坐标,并使用debounce来防止频繁更新。

文本输入的变化需要解析为颜色对象,如果解析失败,则触发invalid事件。可能需要一个函数parseColor来处理不同的格式。

组件的模板部分需要布局各个元素:色盘、滑块、输入框、预览区域等。同时,根据colorMode显示相应的信息,如HEX或RGB值。

最后,测试组件是否能正确响应用户交互,颜色值是否更新,事件是否触发,以及状态是否保持一致。

在编写代码时,可能会遇到一些问题,比如如何将鼠标位置映射到色相环和饱和度平面,或者处理不同颜色格式的转换。可能需要引入一些数学计算或查找现成的算法。

📘定义组件 src\components\ColorPicker\ColorPicker.vue

<script setup>
import { ref, computed, watch, onMounted } from 'vue';
import { hexToRgb, rgbToHex, hslToRgb } from './utils';const props = defineProps({modelValue: {type: [String, Object],default: ''},defaultColor: {type: String,default: '#000000'},showAlpha: {type: Boolean,default: false},presetColors: {type: Array,default: () => ['#ff0000', '#00ff00', '#0000ff', '#ffff00', '#00ffff', '#ff00ff']},colorMode: {type: String,default: 'hex'},disabled: {type: Boolean,default: false}
});const emit = defineEmits(['update:modelValue', 'change', 'invalid']);const currentColor = ref(props.modelValue || props.defaultColor);
const hue = ref(0);
const saturation = ref(100);
const lightness = ref(50);
const alpha = ref(100);const colorPanelRef = ref(null);
const hueSliderRef = ref(null);const updateColor = (h, s, l, a = 100) => {hue.value = h;saturation.value = s;lightness.value = l;alpha.value = a;const rgb = hslToRgb(h/360, s/100, l/100);const hex = rgbToHex(rgb.r, rgb.g, rgb.b);currentColor.value = hex;emit('update:modelValue', hex);emit('change', hex);
};const handleColorPanelClick = (event) => {if (props.disabled) return;const rect = event.target.getBoundingClientRect();const x = event.clientX - rect.left;const y = event.clientY - rect.top;const s = Math.round((x / rect.width) * 100);const l = Math.round(100 - (y / rect.height) * 100);updateColor(hue.value, s, l);
};const handleHueSliderChange = (event) => {if (props.disabled) return;const rect = event.target.getBoundingClientRect();const x = event.clientX - rect.left;const h = Math.round((x / rect.width) * 360);updateColor(h, saturation.value, lightness.value);
};const handlePresetColorClick = (color) => {if (props.disabled) return;currentColor.value = color;emit('update:modelValue', color);emit('change', color);
};onMounted(() => {if (!props.modelValue && props.defaultColor) {currentColor.value = props.defaultColor;emit('update:modelValue', props.defaultColor);}
});watch(() => props.modelValue, (newVal) => {if (newVal !== currentColor.value) {currentColor.value = newVal;}
});
</script><template><div class="color-picker" :class="{ 'is-disabled': disabled }"><div class="color-display"><div class="current-color" :style="{ backgroundColor: currentColor }"></div></div><div class="color-panel" ref="colorPanelRef"@click="handleColorPanelClick"><div class="saturation-lightness-panel":style="{ backgroundColor: `hsl(${hue}, 100%, 50%)` }"></div></div><div class="hue-slider" ref="hueSliderRef"@click="handleHueSliderChange"><div class="hue-track"></div><div class="hue-thumb" :style="{ left: `${(hue/360)*100}%` }"></div></div><div v-if="showAlpha" class="alpha-slider"><input type="range" v-model="alpha" min="0" max="100":disabled="disabled"></div><div class="preset-colors"><div v-for="color in presetColors" :key="color"class="preset-color":style="{ backgroundColor: color }"@click="handlePresetColorClick(color)"></div></div><div class="color-inputs"><input type="text" v-model="currentColor":disabled="disabled"@input="$emit('update:modelValue', $event.target.value)"></div></div>
</template><style scoped>
.color-picker {width: 280px;padding: 15px;background: #fff;border: 1px solid #ddd;border-radius: 4px;box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}.color-display {margin-bottom: 10px;
}.current-color {width: 100%;height: 30px;border-radius: 4px;border: 1px solid #ddd;
}.color-panel {width: 100%;height: 150px;position: relative;margin-bottom: 10px;border: 1px solid #ddd;cursor: pointer;
}.saturation-lightness-panel {width: 100%;height: 100%;background-image: linear-gradient(to right, #fff, transparent),linear-gradient(to top, #000, transparent);
}.hue-slider {width: 100%;height: 20px;position: relative;margin-bottom: 10px;cursor: pointer;
}.hue-track {width: 100%;height: 100%;background: linear-gradient(to right, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);border-radius: 4px;
}.hue-thumb {position: absolute;width: 4px;height: 100%;background: #fff;border: 1px solid #999;top: 0;transform: translateX(-50%);
}.preset-colors {display: flex;flex-wrap: wrap;gap: 5px;margin-bottom: 10px;
}.preset-color {width: 20px;height: 20px;border-radius: 4px;border: 1px solid #ddd;cursor: pointer;
}.color-inputs input {width: 100%;padding: 5px;border: 1px solid #ddd;border-radius: 4px;
}.is-disabled {opacity: 0.6;pointer-events: none;
}.alpha-slider {width: 100%;margin-bottom: 10px;
}.alpha-slider input {width: 100%;
}
</style>

📘使用组件 src\views\ColorPickerView.vue

<script setup>
import { ref } from 'vue';
import ColorPicker from '../components/ColorPicker/ColorPicker.vue';const color1 = ref('#ff0000');
const color2 = ref('#00ff00');
const color3 = ref('#0000ff');const handleColorChange = (color) => {console.log('颜色已更改:', color);
};
</script><template><div class="color-picker-demo"><h2>颜色选择器示例</h2><div class="demo-item"><h3>基础用法</h3><ColorPicker v-model="color1" @change="handleColorChange" /><p>选中的颜色: {{ color1 }}</p></div><div class="demo-item"><h3>带透明度</h3><ColorPicker v-model="color2":show-alpha="true":preset-colors="['#ff0000', '#00ff00', '#0000ff', '#ffff00']"/><p>选中的颜色: {{ color2 }}</p></div><div class="demo-item"><h3>禁用状态</h3><ColorPicker v-model="color3":disabled="true"default-color="#666666"/><p>选中的颜色: {{ color3 }}</p></div></div>
</template><style scoped>
.color-picker-demo {padding: 20px;
}.demo-item {margin-bottom: 30px;
}h2 {margin-bottom: 20px;
}h3 {margin-bottom: 15px;
}
</style>

📚代码测试

正常

📚测试代码正常跑通,附其他基本代码

  • 添加路由
  • 页面展示入口

📘编写路由 src\router\index.js

\router\index.js

import { createRouter, createWebHistory } from 'vue-router'const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{path: '/',name: 'progress',component:  () => import('../views/ProgressView.vue'),},{path: '/tabs',name: 'tabs',// route level code-splitting// this generates a separate chunk (About.[hash].js) for this route// which is lazy-loaded when the route is visited.// 标签页(Tabs)component: () => import('../views/TabsView.vue'),},{path: '/accordion',name: 'accordion',// 折叠面板(Accordion)component: () => import('../views/AccordionView.vue'),},{path: '/timeline',name: 'timeline',// 时间线(Timeline)component: () => import('../views/TimelineView.vue'),},{path: '/backToTop',name: 'backToTop',component: () => import('../views/BackToTopView.vue')},{path: '/notification',name: 'notification',component: () => import('../views/NotificationView.vue')},{path: '/card',name: 'card',component: () => import('../views/CardView.vue')},{path: '/infiniteScroll',name: 'infiniteScroll',component: () => import('../views/InfiniteScrollView.vue')},{path: '/switch',name: 'switch',component: () => import('../views/SwitchView.vue')},{path: '/sidebar',name: 'sidebar',component: () => import('../views/SidebarView.vue')},{path: '/breadcrumbs',name: 'breadcrumbs',component: () => import('../views/BreadcrumbsView.vue')},{path: '/masonryLayout',name: 'masonryLayout',component: () => import('../views/masonryLayoutView.vue')},{path: '/rating',name: 'rating',component: () => import('../views/RatingView.vue')},{path: '/datePicker',name: 'datePicker',component: () => import('../views/DatePickerView.vue')},{path: '/colorPicker',name: 'colorPicker',component: () => import('../views/ColorPickerView.vue')}],
})export default router

📘编写展示入口 src\App.vue

 src\App.vue

<script setup>
import { RouterLink, RouterView } from 'vue-router'
import HelloWorld from './components/HelloWorld.vue'
</script><template><header><img alt="Vue logo" class="logo" src="@/assets/logo.svg" width="125" height="125" /><div class="wrapper"><HelloWorld msg="You did it!" /><nav><RouterLink to="/">Progress</RouterLink><RouterLink to="/tabs">Tabs</RouterLink><RouterLink to="/accordion">Accordion</RouterLink><RouterLink to="/timeline">Timeline</RouterLink><RouterLink to="/backToTop">BackToTop</RouterLink><RouterLink to="/notification">Notification</RouterLink><RouterLink to="/card">Card</RouterLink><RouterLink to="/infiniteScroll">InfiniteScroll</RouterLink><RouterLink to="/switch">Switch</RouterLink><RouterLink to="/sidebar">Sidebar</RouterLink><RouterLink to="/breadcrumbs">Breadcrumbs</RouterLink><RouterLink to="/masonryLayout">MasonryLayout</RouterLink><RouterLink to="/rating">Rating</RouterLink><RouterLink to="/datePicker">DatePicker</RouterLink><RouterLink to="/colorPicker">ColorPicker</RouterLink></nav></div></header><RouterView />
</template><style scoped>
header {line-height: 1.5;max-height: 100vh;
}.logo {display: block;margin: 0 auto 2rem;
}nav {width: 100%;font-size: 12px;text-align: center;margin-top: 2rem;
}nav a.router-link-exact-active {color: var(--color-text);
}nav a.router-link-exact-active:hover {background-color: transparent;
}nav a {display: inline-block;padding: 0 1rem;border-left: 1px solid var(--color-border);
}nav a:first-of-type {border: 0;
}@media (min-width: 1024px) {header {display: flex;place-items: center;padding-right: calc(var(--section-gap) / 2);}.logo {margin: 0 2rem 0 0;}header .wrapper {display: flex;place-items: flex-start;flex-wrap: wrap;}nav {text-align: left;margin-left: -1rem;font-size: 1rem;padding: 1rem 0;margin-top: 1rem;}
}
</style>

📚页面效果

页面效果

📚自己部署 DeepSeek 安装地址

蓝耘元生代智算云平台地址:https://cloud.lanyun.net/#/registerPage?promoterCode=07100c37a0

📚相关文章

 

———— 相 关 文 章 ————

 

  1. 0基础3步部署自己的DeepSeek安装步骤

  2. DeepSeek 助力 Vue 开发:打造丝滑的步骤条(Step bar)

  3. DeepSeek 助力 Vue 开发:打造丝滑的进度条(Progress Bar)

  4. 自己部署 DeepSeek 助力 Vue 开发:打造丝滑的标签页(Tabs)

  5. 自己部署 DeepSeek 助力 Vue 开发:打造丝滑的折叠面板(Accordion)

  6. 自己部署 DeepSeek 助力 Vue 开发:打造丝滑的时间线(Timeline )

  7. DeepSeek 助力 Vue 开发:打造丝滑的返回顶部按钮(Back to Top)

  8. DeepSeek 助力 Vue 开发:打造丝滑的通知栏(Notification Bar)

  9. DeepSeek 助力 Vue 开发:打造丝滑的卡片(Card)

  10. DeepSeek 助力 Vue 开发:打造丝滑的无限滚动(Infinite Scroll)

  11. DeepSeek 助力 Vue 开发:打造丝滑的开关切换(Switch)

  12. DeepSeek 助力 Vue 开发:打造丝滑的侧边栏(Sidebar)

  13. DeepSeek 助力 Vue 开发:打造丝滑的面包屑导航(Breadcrumbs)

  14. DeepSeek 助力 Vue 开发:打造丝滑的瀑布流布局(Masonry Layout)

  15. DeepSeek 助力 Vue 开发:打造丝滑的评分组件(Rating)

  16. DeepSeek 助力 Vue 开发:打造丝滑的日期选择器(Date Picker),未使用第三方插件

到此这篇文章就介绍到这了,更多精彩内容请关注本人以前的文章或继续浏览下面的文章,创作不易,如果能帮助到大家,希望大家多多支持宝码香车~💕,若转载本文,一定注明本文链接。


整理不易,点赞关注宝码香车

更多专栏订阅推荐:
👍 html+css+js 绚丽效果
💕 vue
✈️ Electron
⭐️ js
📝 字符串
✍️ 时间对象(Date())操作

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

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

相关文章

Jenkinsdebug:遇到ERROR: unable to select packages:怎么处理

报错信息&#xff1a; 报错信息解释&#xff1a; musl-1.2.5-r0 和 musl-dev-1.2.5-r1: 这里说明 musl-dev 需要一个特定版本的 musl&#xff0c;即 musl1.2.5-r1&#xff0c;但是当前版本的 musl&#xff08;1.2.5-r0&#xff09;并不满足这个条件。版本冲突: 当尝试安装新…

并查集基础+优化(下标从0开始)

#include<iostream> #include<algorithm> #include<vector> using namespace std; const int N 1e510; int n,m; int fa[N]; void set(int u,int v) {fa[v] u; } int find(int arr[],int i) {while(arr[i] ! -1){i arr[i]; } return i;//返回的是这个节点…

STM32创建静态库lib

创建静态库lib 1. 新建工程1.1 创建工程文件夹1.2 编写用户相关代码1.2.1 stm32f4xx_it.h1.2.2 stm32f4xx_it.c1.2.3 标准库配置&#xff1a;stm32f4xx_conf.h1.2.4 HAL库的配置&#xff1a;stm32f4xx_hal_conf.h1.2.5 LL库配置&#xff1a;stm32f4xx_ll_conf.h 1.3 移植通用文…

CV -- 基于GPU版显卡CUDA环境+Pycharm YOLOv8 检测

目录 下载 CUDA 下载 cuDNN 下载 anaconda 安装 PyTorch pycharm 搭配 yolo 环境并运行 阅读本文须知&#xff0c;需要电脑中有 Nvidia 显卡 下载 CUDA 打开 cmd &#xff0c;输入 nvidia-smi &#xff0c;查看电脑支持 CUDA 版本&#xff1a; 我这里是12.0&#xff0c;进入…

MATLAB图像处理:图像分割方法

图像分割将图像划分为具有特定意义的子区域&#xff0c;是目标检测、医学影像分析、自动驾驶等领域的核心预处理步骤。本文讲解阈值分割、边缘检测、区域生长、聚类分割、基于图的方法等经典与前沿技术&#xff0c;提供MATLAB代码实现。 目录 1. 图像分割基础 2. 经典分割方…

海康摄像头IPV6模式,手动,自动,路由公告

海康摄像头DS-2DC7220IW-A 网络设置中的IPv6配置选项。IPv6是互联网协议&#xff08;IP&#xff09;的第六版&#xff0c;用于替代IPv4&#xff0c;提供更多的IP地址和改进的网络功能。图片中的选项允许用户选择如何配置设备的IPv6网络连接&#xff1a; 手动&#xff1a;用户可…

NewMap10.3土地勘测定界自动化系统

“NewMap报件通”适用于建设项目用地土地勘测定界工作&#xff0c;其设计理念是以最大化提高作业效率与最简化作业员操作为原则&#xff0c;后台采用数据库管理技术&#xff0c;以“GIS概念”实现了图形数据与属性数据的双向联动&#xff0c;利用该系统可以方便快捷地绘制数字化…

栈(典型算法思想)—— OJ例题算法解析思路

目录 一、1047. 删除字符串中的所有相邻重复项 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a; 1. 初始化结果字符串 2. 遍历输入字符串 3. 检查和处理字符 4. 返回结果 总结 二、844. 比较含退格的字符串 - 力扣&#xff08;LeetCode&#xff09; 算…

Qt中基于开源库QRencode生成二维码(附工程源码链接)

目录 1.QRencode简介 2.编译qrencode 3.在Qt中直接使用QRencode源码 3.1.添加源码 3.2.用字符串生成二维码 3.3.用二进制数据生成二维码 3.4.界面设计 3.5.效果展示 4.注意事项 5.源码下载 1.QRencode简介 QRencode是一个开源的库&#xff0c;专门用于生成二维码&…

字符串哈希动态规划_6

一.字符串哈希 字符串哈希概述 字符串哈希是一种将字符串映射到一个数值的技术&#xff0c;常用于处理字符串相关的算法问题&#xff0c;尤其在处理字符串匹配、子串查找等问题时非常高效。它的核心思想是利用一个哈希函数将字符串映射成一个整数&#xff0c;并根据该整数来判…

Kubernetes控制平面组件:Kubernetes如何使用etcd

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…

Mybatis后端数据库查询多对多查询解决方案

问题场景&#xff1a; 我开发的是一个论文选择系统。 后端用一个论文表paper来存储论文信息。 论文信息中&#xff0c;包含前置课程&#xff0c;也就是你需要修过这些课程才能选择这个论文。 而一个论文对应的课程有很多个。 这样就造成了一个数据库存储的问题。一个paper…

BGP配置华为——RR反射器配置

实验拓扑 与之前实验同理将loop0作为routerID使用&#xff0c;且R1和R2上用loop1接口用于模拟用户其他网段 实验要求 1&#xff0c;在AS100内运行OSPF协议 2.配置路由反射器&#xff0c;使得从R1进入的数据能够反射到全局网络 3.在R1和R2上分别宣告自己的loop1口网段用于观…

CentOS7 离线安装 Postgresql 指南

一、背景 服务器通常都是离线内网环境&#xff0c;想要通过联网方式一键下载安装 Postgresql 不太现实&#xff0c;本文将介绍如何在 CentOS7 离线安装 Postgresql&#xff0c;以及遇到困难如何解决。 二、安装包下载 先在本地下载好 rpm 包&#xff0c;再通过 ftp 上传到服…

vue3项目实践心得-寻找未被使用的最小编号

&#x1f9e1;&#x1f9e1;遇到的问题&#x1f9e1;&#x1f9e1; 在用vue3ts编写编译原理项目中”绘制状态转换图“时&#xff0c;有一个添加状态的功能按钮&#xff0c;用户点击按钮即可添加一个新的状态&#xff0c;至于新的状态的编号值&#xff0c;想着以”最小未被使用…

FPGA简介|结构、组成和应用

Field Programmable Gate Arrays&#xff08;FPGA&#xff0c;现场可编程逻辑门阵列&#xff09;&#xff0c;是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物&#xff0c; 是作为专用集成电路&#xff08;ASIC&#xff09;领域中的一种半定制电路而出现的&#xff0c…

C# 入门简介

关于C# ​ C# &#xff08;读作C Sharp&#xff09;是由微软公司开发的一种面向对象、类型安全、高效且简单的编程语言&#xff0c;最初于 2000 年发布&#xff0c;并随后成为 .NET 框架的一部分。所以学习C#语言的同时&#xff0c;也是需要同步学习.NET框架的&#xff0c;不过…

处理使用 mapstruct 导致分页总数丢失问题

问题 PageHelper 分页总数不对&#xff0c;返回的总数老是等于当前页数目 分析 问题出现在 domain 转 VO 这个步骤&#xff0c;当我把数据库实体类型的 list 转为 vo 类型的 list&#xff0c;然后放进 PageInfo 则会丢失分页信息&#xff1b; 解决方式 从数据库查询出来后…

LabVIEW中的icon.llb 库

icon.llb 库位于 C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform 目录下&#xff0c;是 LabVIEW 系统中的一个重要库。它的主要功能是与图标相关的操作&#xff0c;提供了一些实用的 VI 用于处理 LabVIEW 图标的显示、修改和设置。通过该库&#x…

【ProtoBuf】文件编写及序列化

ProtoBuf文件编写及序列化 文章目录 ProtoBuf文件编写及序列化快速上手ProtoBuf创建.proto 文件指定Proto3语法Package声明符定义消息(message)定义消息字段编译命令 序列化与反序列化的使用小结 快速上手ProtoBuf 为了快速上手以及完整的使用ProtoBuf&#xff0c;我们将编写一…