vue拖拉拽动态表单

Vue表单拖拽排序 Vue table表单拖拽排序 业务需求: 因为数据展示使用的是 elementUI的 Table进行数据展示的,现在的需求是通过拖拽表单进行表单排序。同时,动态修改表单中的数据排列顺序。查阅了好多资料,也翻看了好多github上别人封装好的表单插件,但是最终都不是自己想要的,其中主要原因就是,后台管理系统页面中,同一个窗口可能涉及到多个表单拖拽排序,与此同时,使用部分插件就有可能导致数据更新不及时,或者下次在使用的时候,数据无论如何赋值就是更新不成功,导致最终渲染的要拖拽的表单一会有数据,一会无数据的,体 阅读详情

 

<template>

  <div class="box">
    <h4>这是发布页面</h4>
    <el-row :gutter="10">
      <el-col :span="8">
        <div class="grid-content bg-purple-light">
          <div id="ComponentFactory">
            <el-form ref="form" :model="form" label-width="80px">

              <div class="item" draggable="true" id="item1"  @dragstart='copydrop($event)'>
                <el-form-item label="输入框">
                  <el-input v-model="form.name"></el-input>
                </el-form-item>
              </div>

              <div class="item"  draggable="true" id="item2"   @dragstart='copydrop($event)'>
                <!-- 复选框 -->
                <!--<el-form-item label="复选框">
                  <el-checkbox-group v-model="form.type">
                    <el-checkbox label="美食" name="type"></el-checkbox>
                    <el-checkbox label="活动" name="type"></el-checkbox>
                    <el-checkbox label="线下" name="type"></el-checkbox>
                    <el-checkbox label="单纯" name="type"></el-checkbox>
                  </el-checkbox-group>
                </el-form-item>-->
                <el-form-item label="日期时间">
                  <el-date-picker
                    v-model="datetimevalue"
                    type="datetime"
                    placeholder="选择日期时间"
                    align="right"
                    :picker-options="pickerOptions1">
                  </el-date-picker>
                </el-form-item>

              </div>

              <div class="item" id="item4" draggable="true"  @dragstart='copydrop($event)'>
                <!-- 单选框 -->
                <el-form-item label="单选框">
                  <el-radio-group v-model="form.resource">
                    <el-radio label="线上"></el-radio>
                    <el-radio label="线下"></el-radio>
                  </el-radio-group>
                </el-form-item>
              </div>

              <div class="item" id="item5" draggable="true"  @dragstart='copydrop($event)'>
                <!-- 下拉列表框 -->
                <el-form-item label="下拉框">
                  <el-select v-model="form.region" placeholder="请选择活动区域">
                    <el-option label="区域一" value="shanghai"></el-option>
                    <el-option label="区域二" value="beijing"></el-option>
                  </el-select>
                </el-form-item>
              </div>

              <div class="item" id="item7" draggable="true"  @dragstart='copydrop($event)'>
                <!-- (一般信息)Info -->
                <el-form-item label="按钮">
                  <el-button type="primary">主要按钮</el-button>
                </el-form-item>
              </div>

              <div class="item" id="item8" draggable="true"  @dragstart='copydrop($event)'>
                <!-- (成功)Success -->
                <el-form-item label="按钮">
                  <el-button type="success">成功按钮</el-button>
                </el-form-item>
              </div>

              <div class="item" id="item9" draggable="true"  @dragstart='copydrop($event)'>
                <!-- (危险)Danger-->
                <el-form-item label="按钮">
                  <el-button type="danger">危险按钮</el-button>
                </el-form-item>
              </div>

              <div class="item" id="item11" draggable="true"  @dragstart='copydrop($event)'>
                <!-- 按钮组 -->
                <el-form-item label="按钮">
                  <el-button type="success">成功按钮</el-button>
                  <el-button type="danger">危险按钮</el-button>
                </el-form-item>
              </div>

              <div class="item2" id="item10" draggable="true"  @dragstart='copydrop($event)'>
                <!-- 文本域 -->
                <el-form-item label="活动形式">
                  <el-input type="textarea" v-model="form.desc"></el-input>
                </el-form-item>
              </div>
            </el-form>
          </div>

        </div>
      </el-col>
      <el-col :span="8" class="flxed">
        <!--视图区-->
        <div class="grid-content">

        <!--选项卡-->
          <el-tabs v-model="editableTabsValue" type="card" editable @edit="handleTabsEdit">
            <el-tab-pane :key="item.name" v-for="(item, index) in editableTabs" :label="item.title" :name="item.name">
              <!--视图区-->
              <div class="tab-content" id="box" v-model="htmlcode" @dragstart='removedrop($event)' @drop='copydrap($event)' @dragover='allowDrop($event)'>

              {{item.content}}


              </div>

            </el-tab-pane>
          </el-tabs>
        </div>
        <!--移除区-->
        <div class="bg-purple-light" id="removeBox" @drop='removedrap($event)' @dragover='allowDrop($event)'>
        </div>
      </el-col>
      <el-col :span="8" class="flxed">
        <!--查看源码-->
        <div class="grid-content bg-purple-light" id="codeBox" >{{ htmlcode }}</div>
      </el-col>
    </el-row>
    <!--模态框-->
    <el-dialog title="修改名称" :visible.sync="dialogFormVisible" width="20%">
      <el-form :model="form">
        <el-form-item label="名称" >
          <el-input v-model="labelname"></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取 消</el-button>
        <el-button type="primary" @click="updateLabel">确 定</el-button>
      </div>
    </el-dialog>
  </div>
</template>

import
<script type="application/javascript">
  let id = null
  let itemName = null
  let cloneObject = null
  let removeid = null
  let moveObj = null
  export default {
    data() {
      return {
        form: {
          name: '',
          region: '',
          date1: '',
          date2: '',
          delivery: false,
          type: [],
          resource: '',
          desc: ''
        },
        pickerOptions1: {
          shortcuts: [{
            text: '今天',
            onClick(picker) {
              picker.$emit('pick', new Date());
            }
          }, {
            text: '昨天',
            onClick(picker) {
              const date = new Date();
              date.setTime(date.getTime() - 3600 * 1000 * 24);
              picker.$emit('pick', date);
            }
          }, {
            text: '一周前',
            onClick(picker) {
              const date = new Date();
              date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
              picker.$emit('pick', date);
            }
          }]
        },
        /* 日期插件*/
        datetimevalue: '',
        /* 模态框状态*/
        dialogFormVisible: false,
        labelid: '',
        labelname: '',
        htmlcode: '',
        /* 选项卡属性*/
        editableTabsValue: '2',
        editableTabs: [{
          title: 'Tab 1',
          name: '1',
          content: 'Tab 1 content'
        }, {
          title: 'Tab 2',
          name: '2',
          content: 'Tab 2 content'
        }],
        tabIndex: 2
      }
    },
    methods: {
      // 抓起
      copydrop: function(e) {
        console.log('SET -> addBuffer', e.target.id)
        e.dataTransfer.setData('addBuffer', e.target.id)
        this.CopyCss(e.target.id, '1px dashed #66CC99', 'rgba(204,204,204,0.3)', '4px')
      },
      // 移除起
      removedrop: function(e) {
        console.log('移除节点托起ID:', e.target.id)
        e.dataTransfer.setData('removeBuffer', e.target.id)
        this.CopyCss(e.target.id, '1px dashed red', 'rgba(204,204,204,0.3)', '4px')
      },
      // 移除放下
      removedrap: function(e) {
        removeid = e.dataTransfer.getData('removeBuffer')
        if (removeid === null || removeid === '') {
          console.log('removeId == null')
          return
        }
        console.log('移除节点放下ID:', removeid)
        // 删除节点
        document.getElementById(removeid).parentNode.removeChild(document.getElementById(removeid));
      },
      // 放下
      copydrap: function(e) {
        // console.log('放下')
        e.preventDefault()
        id = e.dataTransfer.getData('addBuffer')
        if (id === null || id === '') {
          console.log('id is NULL!')
          return
        }
        itemName = 'item' + parseInt(Math.random() * (1000000 - 1 + 1) + 1)
        console.log('GET-> addBuffer:', itemName)
        // 克隆真实对象
        cloneObject = document.getElementById(id).cloneNode(true)

        // 为克隆对象设置唯一Id
        cloneObject.setAttribute('id', itemName)
        // this.$set(cloneObject, 'id', itemName)
        // this.$set(cloneObject, '@click', 'updateLabel()')
        // 把新的节点添加到新的区域中
        e.target.appendChild(cloneObject)

        console.log(e.target.id)
        // console.log(cloneObject)
        // 设置样式
        this.CopyCss(id, '', '', '')

        // 修改名称
        this.dialogFormVisible = true
        this.labelid = itemName
      },
      // 拖动过程
      allowDrop: function(e) {
        console.log(e.target.id)
        e.preventDefault()
      },
      updateLabel: function() {
        this.dialogFormVisible = false
        // 设置labelname 到对呀的label
        document.getElementById(this.labelid).children[0].children[0].innerHTML = this.labelname
        // console.log(label)
        this.htmlcode = document.getElementById('box').innerHTML
        document.getElementById('codeBox').innerHTML = this.htmlcode
      },
      CopyCss: function(obj, border, background, borderradius) {
        moveObj = document.getElementById(obj)
        moveObj.style.border = border
        moveObj.style.background = background
        moveObj.style.borderRadius = borderradius
      },
      /* 选项卡属性*/
      handleTabsEdit(targetName, action) {
        if (action === 'add') {
          let newTabName = ++this.tabIndex + ''
          this.editableTabs.push({
            title: 'New Tab',
            name: newTabName,
            content: 'New Tab content'
          });
          this.editableTabsValue = newTabName
        }
        if (action === 'remove') {
          let tabs = this.editableTabs;
          let activeName = this.editableTabsValue
          if (activeName === targetName) {
            tabs.forEach((tab, index) => {
              if (tab.name === targetName) {
                let nextTab = tabs[index + 1] || tabs[index - 1]
                if (nextTab) {
                  activeName = nextTab.name
                }
              }
            });
          }

          this.editableTabsValue = activeName
          this.editableTabs = tabs.filter(tab => tab.name !== targetName)
        }
      }
    }
  }
</script>

<style scoped>
  .box{
    padding:20px;
  }
  .bg-purple {
    background: #d3dce6;
  }
  .bg-purple-light {
    background: #e5e9f2;
  }
  .grid-content {
    border-radius: 4px;
    height: 700px;
    overflow: auto;
    padding:20px;
  }
  .tab-content{
    border:1px solid #eee;
    border-radius: 4px;
    min-height: 200px;
    overflow: auto;
    padding:20px;
  }
  .item{
    height: 60px;
    border:0px solid #333;
    /*border-radius: 4px;
    border-style: dashed;*/
    padding: 10px;
    margin-bottom: 5px;
    cursor: pointer;
  }
  .item2{
    height: 80px;
    border:0px solid #333;
    /*border-radius: 4px;
    border-style: dashed;*/
    padding: 10px;
    margin-bottom: 5px;
    cursor: pointer;
  }
  #removeBox{
    height: 100px;
    width: 100px;
    border:2px dashed #999;
    background: rgba(0,0,0,0.3);
    position: absolute;
    bottom: 10px;
    right: 20px;
    background: url(/static/image/deleteBox.png) no-repeat;
    background-size: 90%;
    background-position: center center;
  }
  .flxed{
    position: relative;
    top: 0;
    left: 0;
  }
</style>
 

基于vue的 表单设计器(拖拽生成表单) 日常开发时想要快速构建节省时间或者功能需求需要拖拽生成表单,推荐使用以下表单设计器。 1.基于vue+elementui 的表单设计及代码生成器 Form Generator 码云仓库:form-generator: Element UI表单设计及代码生成器 演示地址:form-generator ... 阅读详情

相关推荐

Vue可视化拖拽表单实战:从零搭建动态表单编辑器

本文详细介绍了如何使用Vue和vuedraggable从零搭建可视化拖拽表单编辑器,提升开发效率并优化用户体验。通过环境准备、核心功能实现到高级优化,帮助开发者快速掌握动态表单开发技巧,适用于低代码平台和业务系统搭建。

weixin_27240351的博客 146

element form表单二次封装,并做成可拖拽的表单

今天为大家带来一篇element form表单二次封装,并做成可拖拽的表单 现阶段大部分功能已经完善,后续会添加更多的组件 首先先带搭建看一下页面 项目基于element ui 二次封装后的zx-lib 现在先来说一下zx-lib zx-lib 为element ui 二次封装的form表单以及table组件,现在已上传到npm 大家可以在线使用 使用方法: npm i zx-lib -S main.js 中引用 import zxLib from ‘zx-lib’ Vue.use(zxLib

轮回千载 1971

【开源】Vue+ElementUI拖拽表单设计器实战:从零构建自定义表单系统

本文详细介绍了如何使用Vue和ElementUI从零开发一个拖拽表单设计器,实现自定义表单系统。通过组件化设计和动态渲染技术,开发者可以快速搭建表单界面,提升开发效率。文章涵盖环境搭建、核心功能实现、表单验证与数据收集等关键环节,并提供了性能优化和扩展性设计的实用建议。

weixin_27603469的博客 352

vue----实现不同面板之间的拖拽按钮功能

vue----实现不同面板之间的拖拽按钮功能

wlijun_0808的博客 1295

低代码可视化大屏开发:从拖拉拽到FlyFish架构深度解析

数据可视化是将抽象数据转化为直观图形的关键技术,其核心原理在于通过视觉编码映射数据属性,帮助用户快速洞察信息模式。在工程实践中,传统编码开发方式面临效率瓶颈,催生了低代码开发平台的兴起。这类平台通过封装底层渲染引擎与布局算法,将可变的数据映射与样式配置抽象为可视化配置项,显著降低了可视化应用的构建门槛。其技术价值在于实现了开发范式的转变,使业务人员也能通过拖拉拽方式快速搭建专业大屏。典型的应用场景包括企业经营分析、实时监控看板和业务数据汇报等。本文以FlyFish平台为例,深入剖析其支撑“拖拉拽”体验的核心

weixin_29311017的博客 325

vue-dynamic-form:vue+antd实现的动态表单,可拖拽,可响应式,完全自定义布局

form-builder 技术栈: 基于VUE2.x + ant-design-vue 1.6.2 + sortable.js(拖拽) 实现的动态表单功能,支持编辑模式,表格模式,详情模式 代码按单元组件模块式划分,结构清晰、维护简单 (2核1G服务器,请勿攻击) 欢迎有兴趣的同学star,如有问题请提issues 或者联系: 以下为截图: Project setup npm install Compiles and hot-reloads for development npm run serve Compiles and minifies for production npm run build Customize configuration See Configuration Reference.

vue拖拉拽动态表单(转)

jquery/Bootstrap表单动态拖拉拽添加 先分享代码了 ,原理可以看上面jquery的原理,差不多的。 <template> <div class="box"> <h4>这是发布页面</h4> <el-row :gutter="10"> <el-col :span="8"> <div class="grid-content bg-purple-light"&gt...

doasmaster的博客 1003

基于Vue和Element UI的动态表单组件设计源码

基于Vue和Element UI的动态表单组件设计源码,该项目包含217个文件,主要文件类型有95个Vue前端文件,78个JavaScript文件,10个json配置文件,6个gif动画文件,5个Markdown文档,5个HTML页面文件,4个CSS样式文件,3个woff字体文件,以及3个png图像文件和2个ico图标文件。该组件通过vue+element ui实现,支持通过拖拽组件到面板来快速创建表单,并可以动态隐藏或显示各个组件,实现弹窗式维护。该项目致力于打造开源最强的Vue动态表单组件,并持续维护以提供更好的用户体验。

开源 | Lemon-form(柠檬轻表单) 基于Vue3实现的开源表单系统

简单来说渲染器是一个函数:根据表单的配置动态渲染出UI的业务逻辑,并动态完成配置的逻辑配置,数据绑定,交互方式。开发画布渲染:开发状态画布渲染,涉及到用户动态配置,拖拉拽用户调整导致的动态渲染逻辑,复杂一些的包括多人协同导致的算法调度和实时渲染逻辑,功能最全,最复杂预览:针对开发态的页面进行实时预览,查看页面搭建效果,可以调整预览终端,页面大小,主题等元素并实时获取反馈。

2504_91996561的博客 1733

对称加密和非对称加密,数字签名和证书

在对称加密中,任何人都可以使用公钥进行加密。在数字签名中,任何人都可以使用公钥验证签名。数字签名,其实就是将非对称加密反过来使用。公钥私钥非对称加密发送者加密时使用接收者解密时使用数字签名验证者验证签名时使用签名者生成签名时使用谁持有密钥?只要有需要,任何人都可以持有个人持有既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密。公钥负责加密,私钥负责解密。既然是签名,那肯定是不希望有人冒充我发消息,所以只有我才能签名。私钥负责签名,公钥负责验签。

m0_70432049的博客 1409

手把手教你配置UFS的PSA状态机:WRITE/UNMAP命令实战与LBA映射避雷

本文详细解析了UFS PSA状态机的配置流程,重点探讨了在Pre-soldering状态下WRITE命令的原子性操作原则与单次写入LBA的重要性。通过实战代码示例,指导开发者如何正确初始化PSA环境、切换状态机,并深入剖析了使用UNMAP命令清理LBA映射时的常见陷阱与避雷指南,确保量产数据安全与良率。

weixin_29213525的博客 420

Vuejs动态表单,拖拉拽生成

vue拖拉拽动态表单 之前写了一个jquery的拖来拽表单,但是用到vue项目,太麻烦,于是有重写了一边,虽说差不多,但是对vue还不太了解,写了一个大概,大家不会的可以参考一下,改一改。 jquery/Bootstrap表单动态拖拉拽添加 先分享代码了 ,原理可以看上面jquery的原理,差不多的。 <template> <div class="box"> <h4>这是发布页面<

J、wen的博客 2万+

SPSS实战:如何用Harman单因素检验搞定共同方法偏差(附完整操作步骤)

本文提供了一份详尽的SPSS实战指南,手把手教你运用Harman单因素检验来诊断共同方法偏差。文章从核心概念讲起,逐步详解数据准备、SPSS操作步骤、结果解读与报告撰写,帮助研究者快速掌握这一关键的数据质量控制方法,确保量化研究结论的可靠性。

weixin_29263201的博客 1704

ruoyi vue plus 中的warm flow用法

主要介绍了 RuoYi Vue Plus +Warm Flow的使用

qq_33925837的博客 874

Apache NiFi新手必看:从零开始的数据流设计入门教程(含实战案例)

本文为Apache NiFi新手提供从零开始的数据流设计入门指南。通过实战案例,详细讲解了如何利用这一强大的数据采集工具,以可视化拖拽方式构建自动化数据流,实现从文件监控、内容处理到数据入库的全流程,并涵盖核心概念、环境搭建及生产环境调优要点。

weixin_29066781的博客 149

汽车诊断服务(UDS——0x11服务解析)

ECU复位服务(0x11)详解:该服务支持硬件/钥匙开关/软件三种复位类型(0x01-0x03),复位前需发送肯定响应。请求格式为11+子功能,响应含51+子功能。典型应用需配合安全访问流程,测试时需监控CAN总线通信及DTC状态。复位后ECU将返回默认会话,期间不处理任何诊断请求。服务在编程会话且安全解锁后执行,硬复位会初始化存储数据。

从事汽车行业 979

Vue.Draggable终极指南:如何在Vue.js中实现拖拽排序功能

Vue.Draggable是Vue.js生态中功能最强大的**拖拽排序组件**,基于SortableJS构建,让开发者能够轻松实现**列表拖拽排序**功能。本指南将带你从零开始掌握这个强大的工具!✨ ## 什么是Vue.Draggable? Vue.Draggable是一个**Vue.js拖拽组件**,专门用于实现元素的拖拽排序功能。它完美地集成了SortableJS的所有特性,同时保持了Vu

gitblog_00539的博客 637

OPC与AI智能体集成实战:一人公司的技术栈构建与避坑指南

1. 先搞清楚“一人公司”和“AI工具”到底在解决什么问题 最近看到不少关于“裸辞搞OPC一人公司”和“AI时代骗局”的讨论,结合搜索热词里高频出现的 openclaw 、 AI编程 、 OPC ,我觉得有必要把这里面的水搅一搅,说点实在的。 首先得拆开看。标题里混了三个东西: 一人公司 、 OPC/OpenClaw 、 AI培训 。它们被放在一起讨论“骗局”,但本质上解决的是不同层面的问题。 一人公司 ,或者说个人工作室、独立开发者模式,核心是 用最小化团队(甚至一个人)去承接项目、开发产品或提供服务 。

weixin_29038345的博客 320

lemon-form:基于Vue3和TypeScript的开源表单解决方案

lemon-form:基于Vue3和TypeScript的开源表单解决方案 项目介绍 在现代Web开发中,表单是一个不可或缺的元素。无论是用户注册、信息提交还是数据交互,表单都扮演着重要的角色。然而,创建和管理表单往往是一件复杂且耗时的工作。柠檬表单(lemon-form)正是一个为了简化这一过程而诞生的开源项目。它基于最新的前端技术Vue3和TypeScript进行开发,提供了一个功能强大且易于...

gitblog_01041的博客 1048

Windows11 - Ubuntu 双系统及 ROS、ROS2 安装

在本教程中,我们将使用 Ubuntu 20.04 版本,该版本使用了新的 Ubuntu 桌面安装程序,该程序将包含在今后发布的所有 Ubuntu 版本中。如果你选择了这个选项,你会看到一个简单的界面,允许你选择要安装Ubuntu的硬盘,并通过滑块来决定你希望Ubuntu使用的磁盘空间大小。如果你的电脑有多个硬盘驱动器,那么只要它们各自有自己的驱动器,这个选项就能让你在安装 Ubuntu 的同时安装现有的操作系统。在此屏幕上,系统会提示您输入您的姓名和您的计算机名称,以显示在网络上。

机器人控制与仿真应用 4509

基于STM32L4XX、HAL库的 TMC2660C-PA 驱动程序设计

/ 默认灵敏度和电流。// 20/31最大电流。

zhusl6688的博客 384

Vue3 低代码平台项目实战(上)

本文介绍了低代码平台项目实战的前期准备工作。项目采用Vue3技术栈,结合Element Plus、Pinia等框架,实现用户通过拖拉拽组件进行可视化编辑的功能。文章详细讲解了项目搭建过程,包括创建Vue3项目、安装依赖(Sass、Element Plus等)、CSS样式配置(重置样式、通用样式、主题变量等),以及首页的基本实现。特别说明了如何禁用不必要的SCSS编译插件,并展示了项目的基本架构和页面布局。该低代码平台将为用户提供便捷的问卷设计功能,通过可视化操作降低开发门槛。

qq_39055970的博客 694

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

低代码平台

近些年来,随着Saas行业的高速发展,低代码的概念也逐渐流行了起来,而低代码产品也越来越多地出现在我们的身边,像国外的Mendix,国内的宜搭、苍穹、简道云等等。而我(博客作者)司自研的低代码应用构建平台也已服务了十余B端生产项目。基于这种新型的开发方式,图形化的拖拉拽配置界面,并兼容了自定义的组件、代码扩展,确实在B端后台管理类网站建设中很大程度上提升了效率。

qq_37581764的博客 860

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

低代码平台基础 Java+MySQL实现可拖拽的表单生成器后端

采用Spring Boot框架简化后端开发,搭配MyBatis-Plus操作MySQL数据库。前端通过JSON与后端交互表单配置数据,后端提供CRUD接口和动态表单渲染逻辑。完整实现需结合具体业务需求调整数据结构与接口逻辑,前端可通过Vue/React等框架实现拖拽交互。

xtrou234的博客 414

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

分享60个element-ui源码总有一个是您想要的

山高路远坑深,大军纵横驰奔,谁敢横刀立马?通过网盘分享的文件:62个element-ui源码.rar。分享60个element-ui源码总有一个是您想要的。知识付费甚欢喜,为咱码农谋福利。

zy0412326的专栏 1168

基于java+springboot的OA管理系统自动化办公系统

后端框架前端框架数据库辅助工具 如需完整源码或详细设计文档,可参考GitHub开源项目(如或),或基于上述技术栈自行搭建。

java python定制开发 648
上一篇: IDEA有用插件
下一篇: mxGraph 入门实例教程
兀兀术
博客等级 码龄19年 25粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值