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 } " >
107108<script setup lang="ts">
108109import { onMounted , ref } from ' vue'
109110import { set } from ' lodash'
111+ import Sortable from ' sortablejs'
110112import UserFieldFormDialog from ' ./UserFieldFormDialog.vue'
111113import { MsgError } from ' @/utils/message'
112114import { t } from ' @/locales'
113115import UserInputTitleDialog from ' @/workflow/nodes/base-node/component/UserInputTitleDialog.vue'
114116const props = defineProps <{ nodeModel: any }>()
115117
118+ const tableRef = ref ()
116119const UserFieldFormDialogRef = ref ()
117120const UserInputTitleDialogRef = ref ()
118121const inputFieldList = ref <any []>([])
@@ -129,6 +132,7 @@ function openChangeTitleDialog() {
129132function deleteField(index : any ) {
130133 inputFieldList .value .splice (index , 1 )
131134 props .nodeModel .graphModel .eventCenter .emit (' refreshFieldList' )
135+ ondragHandel ()
132136}
133137
134138function 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
158163function 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+
181213onMounted (() => {
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