Vue3+vxe-table实现树形表格同级之间的拖拽

Vue3+vxe-table实现树形表格拖拽

效果展示

在这里插入图片描述
拖拽拦截
在这里插入图片描述

代码

<vxe-grid ref="vxeGridTable" v-bind="gridOptions" class="vxe-gridTable" @row-dragend="rowDragend">
  <template #deptSum_default="{ row }">
    <span @click="jumpToUser(row)" class="link-type">{{ row.deptSum }}</span>
  </template>
  <template #operation_default="{ row }">
    <div class="operation">
      <el-button
        link
        type="primary"
        icon="Edit"
        @click="handleUpdate(row)"
      ></el-button>
      <el-button
        link
        type="primary"
        @click="handleAdd(row)"
        v-if="computedLevel(row)"
        >新增</el-button>
      <el-button
        v-show="row.parentId != 0"
        link
        type="primary"
        @click="handleDelete(row)"
        >删除</el-button>
    </div>
  </template>
  <template #empty>
    暂无数据
  </template>
</vxe-grid>

const gridOptions = ref({
  treeConfig: {
    transform: true,
    rowField: 'deptId',
    parentField: 'parentId',
    childrenField: 'children',
    expandAll: true
  },
  showOverflow: true,
  height: 650,
  align: 'center',
  round: true,
  rowConfig: {
    drag: true
  },
  rowDragConfig: {
    isPeerDrag: true,
    // trigger: 'row',
    showGuidesStatus: true,
    async dragEndMethod({ newRow, oldRow, dragRow, dragPos, dragToChild }) {
      let flag = false
      const type = await ElMessage({
        title: '提示',
        message: '是否确认调整顺序?',
        cancelButtonText: '返回',
        confirmButtonText: '确认',
        type: 'info'
      })
      if (type === 'confirm') {
        flag = true
      } else {
        ElMessage({
          type: 'success',
          message: '已取消该操作'
        })
        flag = false
      }
      return flag
    }
  },
  columnConfig: {
    width: '20%'
  },
  columns: [
    { field: 'deptName', title: '部门名称', treeNode: true, dragSort: true },
    { field: 'leaderName', title: '负责人' },
    { field: 'deptSum', title: '人数', slots: { default: 'deptSum_default' } },
    { field: 'deptTime', title: '成立时间' },
    { title: '操作', slots: { default: 'operation_default' } }
  ],
  data: []
})

// 拖拽结束
const rowDragend = ({ newRow, oldRow, dragRow, dragPos, dragToChild }) => {
  const children = proxy.$refs.vxeGridTable.getTreeParentRow(oldRow).children
  changeOrder(children)
    .then(res => {
      if (res.code) {
        proxy.$modal.msgSuccess('成功')
      } else {
        proxy.$modal.msgError('失败')
      }
    })
    .finally(() => {
      getList()
    })
}
Vue3中使用vxe-table和TypeScript进行国际化的步骤如下: 1. 首先,安装vxe-tablevue-i18n依赖: ```shell npm install vxe-table vue-i18n ``` 2.Vue的入口文件(通常是main.ts)中,引入vxe-tablevue-i18n,并进行相关配置: ```typescript import { createApp } from &#39;vue&#39;; import App from &#39;./App.vue&#39;; import XEUtils from &#39;xe-utils&#39;; import VXETable from &#39;vxe-table&#39;; import &#39;vxe-table/lib/style.css&#39;; import { createI18n } from &#39;vue-i18n&#39;; // 导入vxe-table的国际化语言包 import zhCN from &#39;vxe-table/lib/locale/lang/zh-CN&#39;; import enUS from &#39;vxe-table/lib/locale/lang/en-US&#39;; // 创建vue-i18n实例 const i18n = createI18n({ locale: &#39;zh-CN&#39;, // 设置默认语言 messages: { &#39;zh-CN&#39;: zhCN, &#39;en-US&#39;: enUS } }); // 使用vxe-table const app = createApp(App); app.use(VXETable); app.use(i18n); app.mount(&#39;#app&#39;); ``` 3. 在组件中使用vxe-table的国际化功能,可以通过`$t`方法来获取对应的翻译文本: ```html <template> <div> <vxe-table :data="tableData"> <vxe-table-column type="index" title="序号"></vxe-table-column> <vxe-table-column field="name" title="姓名"></vxe-table-column> <vxe-table-column field="age" title="年龄"></vxe-table-column> </vxe-table> </div> </template> <script> export default { data() { return { tableData: [ { name: &#39;张三&#39;, age: 20 }, { name: &#39;李四&#39;, age: 25 }, { name: &#39;王五&#39;, age: 30 } ] }; } }; </script> ``` 4. 在组件中使用vue-i18n的国际化功能,可以通过`$t`方法来获取对应的翻译文本: ```html <template> <div> <p>{{ $t(&#39;message.greeting&#39;) }}</p> </div> </template> <script> export default { mounted() { console.log(this.$t(&#39;message.greeting&#39;)); } }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值