vue3使用表格、列表的拖拽排序

news2024/11/26 18:31:35

常量变量声明都已省略。。。。自己定义

1.效果

   <a-table
      size="small"
      :columns="sourceColumns"
      :data-source="sourceData"
      bordered
      :pagination="
        SourceTableConfig.pagination ? objArray.sourcePagination : false
      "
      v-if="SourceTableConfig.showSource"
      :row-selection="
        SourceTableConfig.sourceRowSelection
          ? {
              fixed: true,
              hideSelectAll: true,
              selectedRowKeys: objArray.selectedSourceRowKey,
              onChange: changeSourceRow,
            }
          : null
      "
      :rowKey="(record) => record.id"
      class="sortTable"
    >
      <template #bodyCell="{ column, index, record, text }">
        <template v-if="column.ellipsis == true">
          <a-tooltip placement="topLeft" :title="text">
            <span class="ellipsis">{{ text }}</span>
          </a-tooltip>
        </template>
        <template v-if="column && column.dataIndex == 'index'">
          <span>{{
            `${
              (objArray.sourcePagination.current - 1) *
                objArray.sourcePagination.pageSize +
              index +
              1
            }`
          }}</span>
        </template>
        <template v-if="column.key === 'lastModificationTime'">
          <span>{{
            record.lastModificationTime
              ? moment(record.lastModificationTime).format(
                  "YYYY-MM-DD HH:mm:ss"
                )
              : moment(record.creationTime).format("YYYY-MM-DD HH:mm:ss")
          }}</span>
        </template>
        <template v-if="column.key === 'creationTimes'">
          <span>{{
            record.creationTimes
              ? moment(record.creationTimes).format("YYYY-MM-DD HH:mm:ss")
              : ""
          }}</span>
        </template>
        <template v-if="column && column.dataIndex == 'action'">
          <span>
            <a @click="showUser(record)">对应用户</a>
            <a-divider type="vertical" />
            <a @click="delSourceEvent(record)">删除</a>
          </span>
        </template>
      </template>
      <template #title>
        <a-button @click="addSourceEvent" v-show="curID">{{
          SourceTableConfig.addName
        }}</a-button>
        <a-button
          v-if="SourceTableConfig.isSort && sourceData.length"
          @click="changeSort"
          style="margin-left: 20px"
          v-show="curID"
          >调整排序</a-button
        >
        <a-alert
          v-if="sortType"
          message=""
          style="margin-top: 10px"
          type="warning"
        >
          <template #description>
            <span>
              上下移动调整位置
              <a
                class="c_link"
                style="margin-left: 10px"
                @click="handleSaveSort"
                >保存</a
              >
              <a class="c_link" style="margin-left: 10px" @click="cencleSort"
                >撤销</a
              >
            </span>
          </template>
        </a-alert>
      </template>
    </a-table>
// 排序
onMounted(() => {
  rowDrop();
});
let sortTable = ref(null);
function rowDrop() {
  nextTick(() => {
    const el = document.querySelector(".sortTable .ant-table-tbody");
    if (el) {
      if (sortTable.value) {
        sortTable.value.destroy();
      }
      sortTable.value = new Sortable(el, {
        // draggable: ".ant-table-row",
        disabled: !sortType.value,
        onEnd({ newIndex, oldIndex }) {
          const currRow = sourceData.value.splice(oldIndex, 1)[0];
          sourceData.value.splice(newIndex, 0, currRow);
          // 截止上面为止,数组已经进行了更换,但是会看到视图没有更新,所以就进行了数组清空重新赋值
          const newArray = sourceData.value.slice(0);
          sourceData.value = [];
          sourceData.value = [...newArray];
        },
      });
    }
  });
}
const sortType = ref(false);
const changeSort = () => {
  sortType.value = !sortType.value;
  rowDrop();
};
const handleSaveSort = () => {
  changeSort();
  const params = sourceData.value.map((e, i) => {
    return {
      id: e.curid,
      ordinal: i,
      roleId: e.roleId,
    };
  });
  props.SourceTableConfig.bulkOrganizationUpdate([...params], props.curID)
    .then((res) => {
      if (res) {
        openNotificationWithIcon("success", "成功", `调整排序成功`, () => {
          this.$emit("getTreeData");
        });
      } else openNotificationWithIcon("error", "提示");
    })
    .catch((err) => {
      openNotificationWithIcon("error", "提示");
      console.log(err);
    });
};
const cencleSort = () => {
  sortType.value = !sortType.value;
  sourceData.value.splice(0);
  getSourceTableData();
};

2.列表排序

    <div class="c_action_content">
      <a-button class="contact_btn" size="small" @click="addSourceEvent" v-show="curID">添加子部门</a-button>
      <a-button class="contact_btn" size="small" @click="changeSort" v-show="curID&&sourceData.length">调整排序</a-button>
    </div>
    <a-alert v-if="sortType == true" message="" type="warning">
      <template v-slot:description>
       <span>
        上下移动调整位置
        <a class="c_link" style="margin-left:10px;" @click="handleSaveSort">保存</a>
        <a class="c_link" style="margin-left:10px;" @click="cencleSort">撤销</a>
      </span>
      </template>
    </a-alert>
    <a-list bordered class="c_subDep_list" size="small" :data-source="sourceData">
     <div class="floor"> 
        <a-list-item v-for="(item, index) in sourceData" :key="`sourceData${index}`" :class="sortType == true ? 'test' : '' " @click="handleNext(item)">
          <span>{{ item.name }}</span>
         <right-outlined />
        </a-list-item>
      </div>
    </a-list>
     <a-empty class="ant-empty-normal" v-show="sourceData.length==0" :image="simpleImage"/>
// 排序
let sortTable = ref(null);
function rowDrop() {
        const tbody = document.querySelector('.floor')
      if(tbody) {
        Sortable.create(tbody, {
          draggable: '.test',
          chosenClass: 'sortable-chosen',
          ghostClass: 'sortable-ghost',
          onEnd ({ newIndex, oldIndex }) {
            const currRow = sourceData.value.splice(oldIndex, 1)[0]
           sourceData.value.splice(newIndex, 0, currRow)
            // 截止上面为止,数组已经进行了更换,但是会看到视图没有更新,所以就进行了数组清空重新赋值
            const newArray = sourceData.value.slice(0)
           sourceData.value= []
           nextTick(() => {
              sourceData.value = [...newArray]
            })
          }
        })
      }
}
const sortType = ref(false);
const changeSort = () => {
  sortType.value = !sortType.value;
  rowDrop();
};
const handleSaveSort = () => {
  changeSort()
   const params = sourceData.value.map((e, i) => {
    return {
      id: e.id,
      ordinal: i
    }
  })
  props.SourceTableConfig.bulkOrganizationUpdate([...params],props.curID).then(res => {
    if (res) {
      message.success('调整排序成功')
      props.refreshFunc()
    } else message.error('调整排序失败')
  }).catch(err => {
     message.error('调整排序失败')
    console.log(err)
  })
};
const cencleSort = () => {
   sortType.value = !sortType.value;
   getSourceTableData()
   rowDrop();
};

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

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

相关文章

uniapp快速开发小程序全流程

uniapp快速开发小程序全流程 完整项目代码&#xff1a;https://gitee.com/Zifasdfa/ziyi-app 欢迎fork与star 1 项目效果及环境准备 1.1 项目效果 本文主要使用uniapp实现一个简单的app应用 1.2 环境准备&项目初始化 ①node环境&#xff1a;去node.js官网下载稳定版的nod…

Android 实现透明度

开发时&#xff0c;UI上的一些布局总需要设置他是有一定的透明度的&#xff0c;有些UI不会给AHEX的代码&#xff0c;只有无透明度的HEX颜色代码&#xff0c;我也懒得去算&#xff0c;每次都要去网上查&#xff0c;所有今天自己总结一份&#xff0c;下次懒得再去找了。 1.颜色C…

群测群防体系建设自然灾害风险识别预警监测建设方案

实现感知全域覆盖实现监测全面汇聚实现风险早期识别实现预报预警精细精准实现预警靶向发布实现全过程监测预警 健全完善水旱、地质、森林草原、气象、地震、农业等灾害监测感知手段&#xff0c;形成空、天、地一体化全覆盖的自然灾害监测感知网络体系。 基于空、天、地全覆盖…

Segment Anything:突破边界的图像分割新技术解析

Segment Anything论文地址&#xff1a;https://arxiv.org/pdf/2304.02643.pdf Segment Anything&#xff1a;突破边界的图像分割新技术解析 论文背景Segment Anything任务方法Segment Anything 模型架构图像编码器&#xff08;Image Encoder&#xff09;提示编码器&#xff08;…

黑马微服务课程cloud-demo项目出现No instances available for userservice错误解决办法

错误描述 如果你的cloud-demo项目当输入http://localhost:8080/order/101&#xff0c;想查看订单编号为101的数据&#xff0c;网页前端显示如下错误 IDEA显示错误&#xff1a; 07-05 16:39:16:251 ERROR 10056 — [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] …

ElasticSearch - 批量更新bulk死锁问题排查 | 京东云技术团队

一、问题系统介绍 监听商品变更MQ消息&#xff0c;查询商品最新的信息&#xff0c;调用BulkProcessor批量更新ES集群中的商品字段信息; 由于商品数据非常多&#xff0c;所以将商品数据存储到ES集群上&#xff0c;整个ES集群共划分了256个分片&#xff0c;并根据商品的三级类目…

Elasticsearch脚本查询

Elasticsearch脚本查询 什么/为什么 Scripting是Elasticsearch支持的一种专门用于复杂场景下支持自定义编程的强大的脚本功能&#xff0c;ES支持多种脚本语言&#xff0c;如painless&#xff0c;其语法类似于Java,也有注释、关键字、类型、变量、函数等&#xff0c;其就要相对…

AI绘画:Stable Diffusion 终极炼丹宝典:从入门到精通

本文收集于教程合集&#xff1a;AIGC从入门到精通教程汇总 我是小梦&#xff0c;以浅显易懂的方式&#xff0c;与大家分享那些实实在在可行之宝藏。 历经耗时数十个小时&#xff0c;总算将这份Stable Diffusion的使用教程整理妥当。 从最初的安装与配置&#xff0c;细至界面…

fdisk和df -h的区别以及如何看懂和提取信息

前几天要查看linux系统磁盘大小&#xff0c;但是发现fdisk和df -h出来的大小和信息不一样&#xff0c;了解了一下linux的磁盘分区和内存大小&#xff0c;查阅了相关资料&#xff0c;总结以下信息&#xff1a; 一、相关理念 在计算机中&#xff0c;存放信息的主要存储设备就是…

天猫数据分析工具(天猫实时数据)

后疫情时代&#xff0c;聚会、聚餐与送礼热度上涨&#xff0c;酒类产品既作为送礼首选又作为佐餐饮品的热门选手也受此影响迎来消费小高峰。在此背景下&#xff0c;白酒市场也开始复苏并不断加快速度。 根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;2023年1月份至4月…

小程序 事件委托给父元素scrollview 获取不到子元素view的绑定的dataset值

点击事件委托到父元素&#xff1a;scrollview 减少多次循环绑定 &#xff1a; 通过点击事件的dataset判断了点击哪个子元素。 常能见到e.target或者e.currentTarget。 简单来说&#xff0c;currentTarget就是当前对象&#xff0c;target就是整个对象&#xff08;包含子元素&…

如何实现移动端侧边目录栏收缩,并监听点击目录栏以外则自动收缩

父组件&#xff0c;index界面&#xff0c;注意此时expend按钮在父组件中 <template><el-container><el-aside class"Aside"><MAside expendClick"expendClick" :message"message" /></el-aside><div class&qu…

2、CCesium二次开发环境搭建

CCesium是使用c和opengl实现的桌面三维地球&#xff0c;所以进行二次开发需要搭建c的开发环境。 在windows系统上c开发可以使用vs或cmake和mingw clion开发。本人使用mingwclion&#xff0c;如果使用其他ide那我也帮不了你。cmake是构建项目的&#xff0c;clion使用2020.1版本…

Lesson3-1:OpenCV图像处理---几何变换

几何变换 学习目标 掌握图像的缩放&#xff0c;平移&#xff0c;旋转等了解数字图像的仿射变换和透射变换 1 图像缩放 缩放是对图像的大小进行调整&#xff0c;即使图像放大或缩小。 API cv2.resize(src,dsize,fx0,fy0,interpolationcv2.INTER_LINEAR)参数&#xff1a; s…

数据结构 | 二叉排序树

一、数据结构定义 /* 二叉排序树 */ typedef int TreeType; typedef struct BSTNode {TreeType data;struct BSTNode* lchild, * rchild; }*BSTree, BSTNode;二、方法概览 BSTNode* CreateTreeNode(TreeType data); // 创建二叉树结点 BSTNode* InsertTree(TreeType data, BS…

Vulnhub靶机PWNLAB:INIT writeup

靶机介绍 靶机下载&#xff1a;https://www.vulnhub.com/entry/matrix-2,279/ ​ 个人微信公众号&#xff1a;网络安全学习爱好者 信息搜集 arp扫描存活主机 ​​​ 根据MAC地址比较靶机IP为​192.168.30.131 ​​ nmap扫描全端口及端口服、版本 ​​​ 目录扫描123…

通信相关知识(三) 接入网

接入网的定界 接入网的功能 用户口功能、业务口功能、核心功能、传送功能、接入网系统管理功能。 ADSL 非对称数字用户线路&#xff08;ADSL&#xff0c;Asymmetric Digital Subscriber Line&#xff09;是数字用户线路&#xff08;xDSL&#xff0c;Digital Subscriber Lin…

【Java从入门到大牛】Java基础语法

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;Java从入门到大牛 &#x1f320; 首发时间&#xff1a;2023年7月5日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e…

黑客(自学笔记)

黑客&#xff0c;对很多人来说充满诱惑力。很多人可以发现这门领域如同任何一门领域&#xff0c;越深入越敬畏&#xff0c;知识如海洋&#xff0c;黑客也存在一些等级&#xff0c;参考知道创宇 CEO ic&#xff08;世界顶级黑客团队 0x557 成员&#xff09;的分享如下&#xff1…

第一章:项目架构演变

1、在设计系统时&#xff0c;应该多思考 墨菲定律 1. 任何事都没有表面上看起来那么简单。 2. 所有的事做起来都会比你预计的时间长。 3. 可能出错的事总会出错。 4. 如果你担心某种情况发生&#xff0c;那么它就更有可能发生。 2、在划分时&#xff0c;也要思考康威定律。…