1 <template>
2 <div>
3 <el-table :data="addReportForm.tableData" border style="width: 100%; margin-top: 8px" max-height="210" row-key="id" class="draggable-table">
4 <el-table-column type="index" :label="$t('general.No.')" width="70" align="center" />
5 <el-table-column prop="title" :label="$t('report.chartName')" header-align="center" />
6 </el-table>
7 </div>
8 </template>
9
10 <script setup lang="ts">
11 import { reactive, onMounted, nextTick } from 'vue';
12 import { ElTable, ElTableColumn } from 'element-plus';
13 import Sortable from 'sortablejs';
14
15 const $t = $.t;
16 // 左侧新增节点表单
17 const addReportForm = reactive({
18 title: '',
19 tableData: [],
20 });
21
22 onMounted(() => {
23 nextTick(() => {
24 drag();
25 });
26 });
27 function drag() {
28 const tbody: HTMLElement = document.querySelector('.draggable-table .el-table__body-wrapper tbody');
29 new Sortable(tbody, {
30 animation: 150,
31 onEnd: ({ newIndex, oldIndex }) => {
32 const targetRow = addReportForm.tableData[oldIndex];
33 addReportForm.tableData.splice(oldIndex, 1);
34 addReportForm.tableData.splice(newIndex, 0, targetRow);
35 },
36 });
37 };
38 </script>
39
40 <style lang="scss" scoped>
41 .draggable-table {
42 cursor: pointer;
43 }
44 :deep(.el-dialog__body.el-dialog__body) {
45 padding: 30px !important;
46 }
47 </style>