Skip to content

Commit f7c0eed

Browse files
feat: table support sort(#2103)
1 parent 33c07fd commit f7c0eed

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

ui/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"@ctrl/tinycolor": "^4.1.0",
1919
"@logicflow/core": "^1.2.27",
2020
"@logicflow/extension": "^1.2.27",
21+
"@types/sortablejs": "^1.15.8",
2122
"@vavt/cm-extension": "^1.6.0",
2223
"@vueuse/core": "^10.9.0",
2324
"@wecom/jssdk": "^2.1.0",
@@ -42,6 +43,7 @@
4243
"pinyin-pro": "^3.18.2",
4344
"recorder-core": "^1.3.24040900",
4445
"screenfull": "^6.0.2",
46+
"sortablejs": "^1.15.6",
4547
"use-element-plus-theme": "^0.0.5",
4648
"vue": "^3.3.4",
4749
"vue-clipboard3": "^2.0.0",

ui/src/workflow/nodes/base-node/component/UserInputFieldTable.vue

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
v-if="props.nodeModel.properties.user_input_field_list?.length > 0"
2222
:data="props.nodeModel.properties.user_input_field_list"
2323
class="mb-16"
24+
ref="tableRef"
2425
>
2526
<el-table-column prop="field" :label="$t('dynamicsForm.paramForm.field.label')" width="95">
2627
<template #default="{ row }">
@@ -107,12 +108,14 @@
107108
<script setup lang="ts">
108109
import { onMounted, ref } from 'vue'
109110
import { set } from 'lodash'
111+
import Sortable from 'sortablejs'
110112
import UserFieldFormDialog from './UserFieldFormDialog.vue'
111113
import { MsgError } from '@/utils/message'
112114
import { t } from '@/locales'
113115
import UserInputTitleDialog from '@/workflow/nodes/base-node/component/UserInputTitleDialog.vue'
114116
const props = defineProps<{ nodeModel: any }>()
115117
118+
const tableRef = ref()
116119
const UserFieldFormDialogRef = ref()
117120
const UserInputTitleDialogRef = ref()
118121
const inputFieldList = ref<any[]>([])
@@ -129,6 +132,7 @@ function openChangeTitleDialog() {
129132
function deleteField(index: any) {
130133
inputFieldList.value.splice(index, 1)
131134
props.nodeModel.graphModel.eventCenter.emit('refreshFieldList')
135+
ondragHandel()
132136
}
133137
134138
function refreshFieldList(data: any, index: any) {
@@ -153,6 +157,7 @@ function refreshFieldList(data: any, index: any) {
153157
}
154158
UserFieldFormDialogRef.value.close()
155159
props.nodeModel.graphModel.eventCenter.emit('refreshFieldList')
160+
ondragHandel()
156161
}
157162
158163
function refreshFieldTitle(data: any) {
@@ -178,6 +183,33 @@ const getDefaultValue = (row: any) => {
178183
}
179184
}
180185
186+
function ondragHandel() {
187+
if (!tableRef.value) return
188+
189+
// 获取表格的 tbody DOM 元素
190+
const wrapper = tableRef.value.$el as HTMLElement
191+
const tbody = wrapper.querySelector('.el-table__body-wrapper tbody')
192+
if (!tbody) return
193+
console.log(tbody)
194+
// 初始化 Sortable
195+
Sortable.create(tbody, {
196+
animation: 150,
197+
ghostClass: 'ghost-row',
198+
onEnd: (evt) => {
199+
if (evt.oldIndex === undefined || evt.newIndex === undefined) return
200+
console.log(inputFieldList.value)
201+
// 更新数据顺序
202+
const items = [...inputFieldList.value]
203+
const [movedItem] = items.splice(evt.oldIndex, 1)
204+
items.splice(evt.newIndex, 0, movedItem)
205+
inputFieldList.value = items
206+
console.log(inputFieldList.value)
207+
// set(props.nodeModel.properties, 'user_input_field_list', inputFieldList.value)
208+
props.nodeModel.graphModel.eventCenter.emit('refreshFieldList')
209+
}
210+
})
211+
}
212+
181213
onMounted(() => {
182214
if (!props.nodeModel.properties.user_input_field_list) {
183215
if (props.nodeModel.properties.input_field_list) {
@@ -211,6 +243,7 @@ onMounted(() => {
211243
})
212244
set(props.nodeModel.properties, 'user_input_field_list', inputFieldList)
213245
set(props.nodeModel.properties, 'user_input_config', inputFieldConfig)
246+
ondragHandel()
214247
})
215248
</script>
216249

0 commit comments

Comments
 (0)