当前位置: 首页 > news >正文

vue3中左右布局两个个组件使用vuedraggable实现左向右拖动,右组件列表可上下拖动

需求:左侧是个菜单组件,有对应的表单类型。
右侧是渲染组件,点击左侧菜单或者拖动即可渲染出对应的组件
项目中采用vuedraggable实现拖拽功能。

具体实现是使用elementplus的组件,然后根据tagName的类型去渲染不同的组件。

首先是大的组件包含左右的盒子组件,代码如下:

   <div class="iform_editor"><div class="iform_editor_menu"><FormMenuDrag  :formType="templateConf.type" @scroll-to-top="scrollToTop" /></div><div class="iform_editor_content"><ElScrollbar ref="renderScrollBar" class="iform_editor_content_sw"><el-backtoptarget=".iform_editor_content_sw .el-scrollbar__wrap":right="300":bottom="50"/><FormRenderDrag  @form-publish="formPublish" :formType="templateConf.type" /></ElScrollbar></div></div>

左侧菜单组件代码如下:

  <div class="form_menu_drag"><ElScrollbar v-loading="false"><div class="component_menu_list" v-for="(item, keyIndex) in formItemConf" :key="keyIndex"><h4 class="tool_bar_title">{{ item.groupTitle }}</h4><draggable:list="item.groupList"class="tool_item_list":group="{name: 'componentsGroup',pull: 'clone',put: false,}":clone="handleClone":sort="false":item-key="'renderKey'"><template #item="{ element, index }"><div class="tool_item"><ElPopoverplacement="right"trigger="hover"width="300":offset="index % 2 == 0 ? 150 : 12":disabled="!config.explainList[element.customConf.label]"><template #reference><divclass="tool_item_drag":class="{ disabled: checkItem(element?.customConf?.tagName || '') }"@click.stop="handleAdd(element)"><Icon class="tool_item_icon" :icon="`svg-icon:${element.customConf.tagIcon}`" />{{ element.customConf.label }}</div></template><FormItemExplainCardv-if="config.explainList[element.customConf.label]":explain="config.explainList[element.customConf.label]"/></ElPopover></div></template></draggable></div></ElScrollbar></div>
<script setup lang="ts">
import { ref } from 'vue';
import draggable from 'vuedraggable';
import EditorUtils from '@/utils/Editor_utils';
import { Icon } from '@/components/Icon';
import { IFormModel } from 'Editor';
import { useEditorStore } from '@/store/modules/iform/editor';
import FormItemExplainCard from './form_item_explain_card.vue';
import config from '@/config/iform_editor_config';
import { storeToRefs } from 'pinia';
import { cloneDeep } from 'lodash-es';const editorStore = useEditorStore();
let { formDataList } = storeToRefs(editorStore);
const emit = defineEmits(['scroll-to-top']);interface formGroupList {groupTitle: string;groupList: IFormModel.formItemConf[];
}
const props = defineProps<{ formType: number }>();
const formType = ref(props.formType);const commonList = [{groupTitle: '选择',groupList: EditorUtils.getDefaultItemConfig('select'),},{groupTitle: '文本',groupList: EditorUtils.getDefaultItemConfig('text'),},
];const assessmentList = [{groupTitle: '考前准备',groupList: EditorUtils.getDefaultItemConfig('assessmentPreparation'),},{groupTitle: '常用题型',groupList: EditorUtils.getDefaultItemConfig('assessmentCommon'),},
];const formItemConf = ref<formGroupList[]>(formType.value == 2 ? assessmentList : commonList);const handleClone = (e) => {return cloneDeep(e);
};const handleAdd = (e) => {const item = cloneDeep(e);const tagName = item.customConf.tagName;editorStore.addFormItem(tagName, '', undefined, true);editorStore.setFormSetting(false);nextTick(() => {const newDom = document.querySelector('.drag_item.isActive');newDom?.scrollIntoView({ behavior: 'smooth', block: 'center' });});
};const checkItem = (tagName: string) => {if (tagName == 'el-assessment-instructions' ||tagName == 'el-assessment-userinfo' ||tagName == 'el-assessment-cascader' ||tagName == 'el-assessment-text') {return unref(formDataList)?.find((item) => {return item?.customConf?.tagName == tagName;});} else {return false;}
};
</script>

中间组件内容:

<template><draggableclass="draggable_wrap":class="{ hide: dragFormDataList.length < 1 && !isAni }":group="{name: 'componentsGroup',}":list="dragFormDataList":handle="'.handle_bar'":item-key="'renderKey'":sort="true"@change="draggableChange"><template #item="{ element, index }"><divclass="drag_item":class="{ isActive: activeKey == element.renderKey }"@click.stop="selectItem(element.renderKey)":data-key="element.renderKey":id="element.formItemKey"><DragToolBarv-show="activeKey == element.renderKey":labelName="element?.customConf?.label || ''":tagName="element?.customConf?.tagName || ''":renderKey="element.renderKey":customConf="element?.customConf":formType="formType"@trigger-copy="onCopyFn(element?.customConf?.tagName || '', element.formItemKey, index + 1)"@trigger-del="onDeleteFn(element.formItemKey, index)"@trigger-change="(type) => onChangeFn(type, element.formItemKey)"/><div class="item_content"><FormReducer:sn="handleFormat(element.baseConf.numType, index, element.formItemKey)":formItemData="element"/></div></div></template></draggable></template>

FormReducer组件的内容:

<script lang="ts">
// placeholders里边都是写好的各个类型的组件,直接引入。
import BaseFormItem from './components/base_from_item.vue';
import {PInput,
} from './components/placeholders';
import { tagTypeEnum } from '@/types/option_enum';
import { IFormModel } from 'Editor';
import type { PropType } from 'vue';export default defineComponent({props: {sn: {type: Number,required: true,},formItemData: {type: Object as PropType<IFormModel.formItemConf>,required: true,},},emits: ['updateMsg'],setup(props) {const currentData = ref(props.formItemData);watch(() => props.formItemData,() => {currentData.value = props.formItemData;},);// const currentData = ref<IFormModel.formItemConf>(props.formItemData);if (unref(currentData).customConf) {switch (unref(currentData).customConf.tagType) {case tagTypeEnum.INPUT: {return () => {return h(BaseFormItem,{sn: props.sn,renderKey: unref(currentData)?.renderKey || '',},() => [h(PInput, {renderKey: unref(currentData)?.renderKey || '',}),],);};}case tagTypeEnum.INPUTGROUP: {return () => {return h(BaseFormItem,{sn: props.sn,renderKey: unref(currentData)?.renderKey || '',},() => [h(PInputGroup, {renderKey: unref(currentData)?.renderKey || '',}),],);};}default: {return () => {return h('');};}}}},
});
</script>

已上就是整个实现过程啦!

相关文章:

vue3中左右布局两个个组件使用vuedraggable实现左向右拖动,右组件列表可上下拖动

需求&#xff1a;左侧是个菜单组件&#xff0c;有对应的表单类型。 右侧是渲染组件&#xff0c;点击左侧菜单或者拖动即可渲染出对应的组件 项目中采用vuedraggable实现拖拽功能。 具体实现是使用elementplus的组件&#xff0c;然后根据tagName的类型去渲染不同的组件。 首先…...

gevent 高并发、 RabbitMQ 消息队列、Celery 分布式的案例和说明

1. gevent 高并发请求示例 gevent​​&#xff1a;基于协程的Python库&#xff0c;通过异步非阻塞模式实现高并发请求。例如&#xff0c;同时抓取100个网页时&#xff0c;无需等待每个请求完成&#xff0c;提升效率。 import gevent from gevent import monkey monkey.patch_…...

直线模组在电子行业具体的应用

在工业自动化高速发展的今天&#xff0c;直线模组作为重要的传动和控制元件&#xff0c;凭借其高效、精准、稳定的特性。在众多行业中得到了广泛应用&#xff0c;尤其是在电子行业中&#xff0c;通过提供精确的运动控制和定位&#xff0c;帮助提高电子制造过程的效率、质量和自…...

Ubuntu 24.04启用root账户

1.启用ubuntu中的root账号 ubuntu默认是禁用了root账号的,需要手动开始root权限 # 设置root账号密码 sudo passwd root # 用以下命令启用 root 账户&#xff1a; sudo usermod -aG sudo rootsu - root 然后输入你之前设置的 root 密码。 一旦你成功登录为 root 用户&#x…...

【ES系列】Elasticsearch简介:为什么需要它?(基础篇)

🔥 本文将详细介绍Elasticsearch的前世今生,以及为什么它在当今的技术栈中如此重要。本文是ES起飞之路系列的基础篇第一章,适合想要了解ES的读者。 文章目录 一、什么是Elasticsearch?1. ES的定义2. ES的核心特性2.1 分布式存储2.2 实时搜索2.3 高可用性2.4 RESTful API3.…...

SvelteKit 最新中文文档教程(19)—— 最佳实践之身份认证

前言 Svelte&#xff0c;一个语法简洁、入门容易&#xff0c;面向未来的前端框架。 从 Svelte 诞生之初&#xff0c;就备受开发者的喜爱&#xff0c;根据统计&#xff0c;从 2019 年到 2024 年&#xff0c;连续 6 年一直是开发者最感兴趣的前端框架 No.1&#xff1a; Svelte …...

Droris(强制)删除某一个分区数据

Doris如果想删除某一个分区的数据&#xff0c;可以这么操作&#xff1a; DROP PARTITION [IF EXISTS] partition_name [FORCE]需要注意的是&#xff1a; 必须为使用分区的表保留至少一个分区。执行DROP PARTITION一段时间后&#xff0c;可以通过RECOVER语句恢复被删除的分区:…...

Meta 最新 AI 模型系列 ——Llama 4

Meta 发布了最新 AI 模型系列 ——Llama 4&#xff0c;这是其 Llama 家族的最新成员。 在大模型竞技场&#xff08;Arena&#xff09;&#xff0c;Llama 4 Maverick 的总排名第二&#xff0c;成为第四个突破 1400 分的大模型。其中开放模型排名第一&#xff0c;超越了 DeepSeek…...

软考 系统架构设计师系列知识点 —— 设计模式之工厂模式

本文内容参考&#xff1a; 软考 系统架构设计师系列知识点之设计模式&#xff08;2&#xff09;_系统架构设计师中考设计模式吗-CSDN博客 https://baike.baidu.com/item/%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F?fromModulelemma_search-box 设计模式-工厂方法模式&#xff0…...

Jetpack Compose 状态保存机制全面解析:让UI状态持久化

在Android开发中&#xff0c;Jetpack Compose 的状态管理是一个核心话题&#xff0c;而状态保存则是确保良好用户体验的关键。本文将深入探讨Compose中各种状态保存技术&#xff0c;帮助你在配置变更和进程重建时保持UI状态。 一、基础保存&#xff1a;rememberSaveable reme…...

阿里云原生AI网关Higress:架构解析与应用实践

摘要 随着云原生与AI技术的深度融合&#xff0c;API网关作为流量治理的核心组件&#xff0c;正面临新的挑战与机遇。阿里云开源的Higress网关&#xff0c;凭借其“三网合一”&#xff08;流量网关、微服务网关、安全网关&#xff09;的高集成能力&#xff0c;以及面向AI场景的…...

如何在数据仓库中集成数据共享服务?

目录 1. Snowflake 数据共享服务&#xff1a;云端的最佳实践 2. 数据共享服务的重要性 3. 麦聪 QuickAPI&#xff1a;企业本地的理想选择 4. 云端与本地的互补 总结 数据共享服务是现代数据仓库的核心功能&#xff0c;能够提升协作效率、降低成本并释放数据潜力。 以 Sno…...

spark RDD相关概念和运行架构

核心概念 - RDD定义&#xff1a;弹性分布式数据集&#xff0c;是Spark中基础数据处理抽象&#xff0c;具弹性、不可变、可分区及并行计算特性。 弹性 存储的弹性&#xff1a;内存与磁盘的自动切换&#xff1b; 容错的弹性&#xff1a;数据丢失可以自动恢复&#xff1b; 计算…...

2025.04.09【Sankey】| 生信数据流可视化精讲

文章目录 引言Sankey图简介R语言中的Sankey图实现安装和加载networkD3包创建Sankey图的数据结构创建Sankey图绘制Sankey图 结论 引言 在生物信息学领域&#xff0c;数据可视化是理解和分析复杂数据集的关键工具之一。今天&#xff0c;我们将深入探讨一种特别适用于展示数据流动…...

《系统分析师-案例实践篇-16-22章总结》

案例实践篇...

spark core

Executor的核心功能 运行任务&#xff1a;Executor负责运行组成Spark应用的任务&#xff0c;并将结果返回给驱动器进程。 缓存管理&#xff1a;Executor通过自身的块管理器为用户程序中要求缓存的RDD提供内存或存储。 Master和Worker的角色 Master&#xff1a;负责资源调度和分…...

crawl4ai的实践(爬虫)

1.准备环境 !pip install -U crawl4ai !pip install nest_asynciocrawl4ai-setup 验证是否安装成功 # Check crawl4ai version import crawl4ai print(crawl4ai.__version__.__version__) 验证是否可以爬 crawl4ai-doctor 2.简单示例 import asyncio from playwright.as…...

Python从入门到精通全套视频教程免费

概述 &#x1f4e2; 所有想学Python的小伙伴看过来&#xff01;作为深耕编程领域的技术分享者&#xff0c;最新整理了一份Python从0到1的视频教程。 &#x1f4a1;亮点 ✅ 保姆级系统路线&#xff1a;从环境搭建、语法精讲&#xff0c;到爬虫/数据分析/AI/Web全栈开发&#…...

Node.js是js语言在服务器编译运行的环境,什么是IP和域名

一句话结论 Node.js 不是语言也不是框架&#xff0c;而是一个让 JavaScript 能运行在服务器端的“环境”&#xff08;类似 Python 的解释器&#xff09;。JavaScript 是语言&#xff0c;Node.js 是它的“执行工具”。 &#x1f330; 用 Python 类比理解 Python 和 JavaScript …...

checkra1n越狱出现的USB error -10问题解决

使用checkra1n进行越狱是出现&#xff1a; 解决办法(使用命令行进行越狱)&#xff1a; 1. cd /Applications/checkra1n.app/Contents/MacOS 2. ./checkra1n -cv 3. 先进入恢复模式 a .可使用爱思助手 b. 或者长按home,出现关机的滑条&#xff0c;同时按住home和电源键&#…...

如何利用 Java 爬虫获取京东商品详情信息

在电商领域&#xff0c;获取商品详情信息对于数据分析、市场研究和用户体验优化具有重要意义。京东作为国内知名的电商平台&#xff0c;提供了丰富的商品详情信息 API 接口。通过 Java 爬虫技术&#xff0c;我们可以高效地调用这些接口&#xff0c;获取商品的详细信息&#xff…...

【spark--scala】--环境配置

文章目录 scalaspark scala 官网下载二进制包 添加环境变量 #set scala export SCALA_HOME/usr/local/src/scala-2.11.8 export PATH$PATH:$SCALA_HOME/binspark 官网下载二进制包 解压后 spark/conf cp slaves.template slaves cp spark-env.sh.template spark-env.sh# s…...

Spark Core学习总结

一、Spark运行架构 1. 核心组件 Driver&#xff08;驱动器&#xff09;&#xff1a; 执行main方法&#xff0c;负责将用户程序转换为作业&#xff08;Job&#xff09;。 调度任务&#xff08;Task&#xff09;到Executor&#xff0c;并监控任务执行状态。 通过UI展示作业运行情…...

Python深度学习基础——深度神经网络(DNN)(PyTorch)

张量 数组与张量 PyTorch 作为当前首屈一指的深度学习库&#xff0c;其将 NumPy 数组的语法尽数吸收&#xff0c;作为自己处理张量的基本语法&#xff0c;且运算速度从使用 CPU 的数组进步到使用 GPU 的张量。 NumPy 和 PyTorch 的基础语法几乎一致&#xff0c;具体表现为&am…...

前端三件套—CSS入门

上篇文章&#xff1a; 前端三件套—HTML入门https://blog.csdn.net/sniper_fandc/article/details/147070026?fromshareblogdetail&sharetypeblogdetail&sharerId147070026&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目录 1 引入CSS …...

mapreduce-案例-简单的数据清洗案例代码

//1.从Mapper继承 //2.重写map方法 //LongWritable,Text:表示初始输入的键值对格式。LongWritable是键的数据类型&#xff0c;Text是值的数据类型 //Text,LongWritable:表示map函数输出的数据的格式。Text是键的数据类型&#xff0c;LongWritable是值的数据类型 public class W…...

为什么PDF文件更适合LLM大模型信息提取?

为什么PDF文件更适合LLM大模型信息提取&#xff1f; 在Dify平台中&#xff0c;我们通过LLM大模型提取上传文件中的指定信息。目前使用的大模型包括qwen2:7b和deepseek-r1:70b。然而&#xff0c;我们发现一个有趣的现象&#xff1a;在提取信息时&#xff0c;PDF文件的表现明显优…...

期权时间价值与隐含波动率怎么选?

期权隐含波动率与时间价值要怎么选&#xff1f;期权隐含波动率IV对期权价格有着巨大的影响。整体来看&#xff0c;期权隐波与期权价格呈正相关关系。当期权隐波从低水平上升时&#xff0c;期权价格也会相应上涨&#xff1b;反之&#xff0c;当隐波下降&#xff0c;期权价格则会…...

LangChain入门指南:调用DeepSeek api

文章目录 1. 什么是LangChain&#xff1f;2. 核心组件3. 为什么选择LangChain&#xff1f;4. 实战案例安装简单chat案例流式交互Prompt模板 5. 简单总结 1. 什么是LangChain&#xff1f; 定义&#xff1a;LangChain是一个用于构建大语言模型&#xff08;LLM&#xff09;应用的…...

Cherry Studio配置MCP server

MCP server在很多的app上开始支持了,从以前的claude desktop,到cursor,vscode等等,甚至现在开源的软件也都开始支持mcp协议的配置了.这里主要来说一下如何在cherry studio中配置好mcp的服务. cheery studio 中配置MCP并使用 基础配置过程Blender MCP百度地图GitGithubfilesyst…...

前端快速入门——JavaScript变量、控制语句

1.JavaScript 定义 JavaScript 简称 JS. JavaScript 是一种轻量级、解释型、面向对象的脚本语言。它主要被设计用于在网页上实现动态效果&#xff0c;增加用户与网页的交互性。 作为一种客户端脚本语言&#xff0c;JavaScript 可以直接嵌入 HTML&#xff0c;并在浏览器中执行。…...

[CISSP] [8] 安全模型,设计和能力的原则

开源软件&#xff08;Open Source Software, OSS&#xff09; 优点&#xff1a; 透明性高 开源软件的源代码对公众开放&#xff0c;安全专家和用户可以检查其实现&#xff0c;验证是否存在安全隐患。 社区驱动的漏洞发现 有大量开发者和安全研究人员参与代码审查&#xff0c;…...

docker使用

最近为了打vulhub也是搞了好久的docker&#xff0c;搞了半天搞得我头大&#xff0c;结果还是没能成功&#xff0c;不知道为什么起shiro550靶场总是报139的错误&#xff0c;在网上搜了半天也没有解决&#xff0c;有没有师傅救一下喵QaQ 安装就不说了喵&#xff0c;安装完记得换…...

phpexcel导出下拉框,超过255字符不显示的问题处理

用php生成excel模板&#xff0c;并设置下拉框的选项。如果选项太多&#xff0c;可能导致下拉框不显示的问题。下面会给出示例&#xff0c;以及解决方案&#xff0c;支持生成包含大量数据的下拉框。 // $info 为下拉框的数数据&#xff0c;[男,女,保密] function exportDataSel…...

【重构谷粒商城12】npm快速入门

重构谷粒商城12&#xff1a;npm快速入门 前言&#xff1a;这个系列将使用最前沿的cursor作为辅助编程工具&#xff0c;来快速开发一些基础的编程项目。目的是为了在真实项目中&#xff0c;帮助初级程序员快速进阶&#xff0c;以最快的速度&#xff0c;效率&#xff0c;快速进阶…...

【Pandas】pandas DataFrame bool

Pandas2.2 DataFrame Conversion 方法描述DataFrame.astype(dtype[, copy, errors])用于将 DataFrame 中的数据转换为指定的数据类型DataFrame.convert_dtypes([infer_objects, …])用于将 DataFrame 中的数据类型转换为更合适的类型DataFrame.infer_objects([copy])用于尝试…...

Django 在同一域名下使用 NGINX 服务器运行 Django 和 WordPress

在本文中&#xff0c;我们将介绍如何使用 NGINX 服务器在同一域名下同时运行 Django 和 WordPress。我们将使用反向代理和URL重写来实现这一目标。 1. 安装和配置 NGINX 首先&#xff0c;我们需要在服务器上安装并配置 NGINX。请根据您的操作系统类型和版本的要求&#xff0c;…...

LeetCode Hot100 刷题笔记(2)—— 子串、普通数组、矩阵

目录 前言 一、子串 1. 和为 K 的子数组 2. 滑动窗口最大值 3. 最小覆盖子串 二、普通数组 4. 最大子数组和 5. 合并区间 6. 轮转数组 7. 除自身以外数组的乘积 8. 缺失的第一个正数 三、矩阵 9. 矩阵置零 10. 螺旋矩阵 11. 旋转图像 12. 搜索二维矩阵 II 前言 一、子串&#…...

游戏引擎学习第213天

回顾并为今天的工作做准备 今天我们将继续在调试界面上进行一些编码工作。我们已经完成了很多内容&#xff0c;并且昨天完成了与游戏的集成&#xff0c;主要是在两个系统之间统一了用户界面。 今天的目标是进入调试界面&#xff0c;进一步整理并完善它&#xff0c;以便我们能…...

使用 Django 构建 Web 应用程序:症状检测 - 分步指南

使用 Django 构建 Web 应用程序:症状检测 - 分步指南 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 使用 Django 构建 Web 应用程序:症状检测 - 分步指南先决条件第 1 步:设置 …...

oracle将varchar2 转为clob类型存储。 oracle不支持直接使用sql,将 varchar2 到clob的类型转换,需要下面操作

将一个现有表中的 VARCHAR2 列数据迁移到一个 CLOB 列的过程。以下是对每一步操作的说明&#xff1a; 1. 添加一个新的 CLOB 类型列 首先&#xff0c;向表中添加一个新的 CLOB 类型的列。这个列将用来存储原本的 VARCHAR2 数据。 ALTER TABLE your_table ADD (new_column CL…...

React 之 Redux 第三十一节 useDispatch() 和 useSelector()使用以及详细案例

使用 Redux 实现购物车案例 由于 redux 5.0 已经将 createStore 废弃&#xff0c;我们需要先将 reduxjs/toolkit 安装一下&#xff1b; yarn add reduxjs/toolkit// 或者 npm install reduxjs/toolkit使用 vite 创建 React 项目时候 配置路径别名 &#xff1a; // 第一种写法…...

RHCSA Linux系统 vim 编辑器

1.使用 vi/vim 编辑文件 [rootlocalhost ~]# vim /etc/passwd 默认进入命令模式 2.命令模式下的常用快捷键 (1) 光标跳转快捷键 &#xff08;2&#xff09;复制、粘贴、删除 3&#xff0e;编辑模式 4.末行模式 &#xff08;1&#xff09;查找关键字替换 &#xff08;2&…...

ABAP小白开发操作手册+(十)验证和替代——下

目录 一、前言 二、替代步骤详解 1、新建替换 2、新建步骤 3、创建先决条件 4、补充替换 5、ZRGGBS000 三、传输请求 四、DEBUG 一、前言 本章内容分为上下两篇&#xff0c;包括验证和替代&#xff0c; 上篇&#xff1a;验证步骤、传输验证请求、DEBUG 下篇&#xf…...

鸿蒙小案例---心情日记

效果演示 代码实现 import { router, window } from kit.ArkUIEntry Component struct Index {async aboutToAppear(): Promise<void> {let w await window.getLastWindow(getContext())w.setWindowSystemBarProperties({statusBarColor: #00C6C3,statusBarContentColo…...

一种单脉冲雷达多通道解卷积前视成像方法【论文阅读】

一种单脉冲雷达多通道解卷积前视成像方法-李悦丽-2007 1. 论文的研究目标与实际意义1.1 研究目标1.2 实际问题与产业意义2. 论文提出的思路、方法及模型2.1 多通道解卷积(MCD)技术的核心思想2.1.1 数学模型与公式推导2.1.2 针对单脉冲雷达的改进2.2 方法与传统技术的对比3. 实…...

React中使用dnd-kit实现拖拽排序

使用dnd-kit实现拖拽排序 效果展示 实现源码 安装依赖 dad-kit github地址 yarn add dnd-kit/core dnd-kit/sortable dnd-kit/utilities dnd-kit/modifiers这几个包的作用 dnd-kit/core&#xff1a;核心库&#xff0c;提供基本的拖拽功能。dnd-kit/sortable&#xff1a;扩…...

深度学习总结(3)

数据批量的概念 通常来说&#xff0c;深度学习中所有数据张量的第一个轴&#xff08;也就是轴0&#xff0c;因为索引从0开始&#xff09;都是样本轴[samples axis&#xff0c;有时也叫样本维度&#xff08;samples dimension&#xff09;​]​。深度学习模型不会一次性处理整个…...

Android Studio Narwhal | 2025.1.1新功能

Android Studio 中的 Gemini 支持多模式图像附件 现在&#xff0c;您可以在 Android Studio 中将图像直接附加到 Gemini 提示中。您可以即时获取复杂技术图表的洞察&#xff0c;或使用设计模型生成相应的代码框架。这种将视觉环境无缝集成到 AI 辅助工作流程中的设计方式&…...

XML语法指南——从入门到精通

1、引言 XML&#xff08;可扩展标记语言&#xff09;是一种用于存储和传输数据的标记语言&#xff0c;它被设计为具有自我描述性且易于理解。本文将全面介绍XML的语法规则&#xff0c;包括元素、属性、命名规则、转义字符等核心概念。 2、XML文档基本结构 一个完整的XML文档…...