From 6b988bd582bfcd17fee48c476a5a6e5cc172b0d5 Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期三, 12 三月 2025 10:08:33 +0800 Subject: [PATCH] dev-2 --- src/bpmn/panel/property/ListenerParam.vue | 121 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 121 insertions(+), 0 deletions(-) diff --git a/src/bpmn/panel/property/ListenerParam.vue b/src/bpmn/panel/property/ListenerParam.vue new file mode 100644 index 0000000..21c6de1 --- /dev/null +++ b/src/bpmn/panel/property/ListenerParam.vue @@ -0,0 +1,121 @@ +<template> + <vxe-toolbar> + <template #buttons> + <el-button icon="Plus" @click="insertRow">鏂板</el-button> + </template> + </vxe-toolbar> + <vxe-table + ref="tableRef" + :height="height" + border + show-overflow + keep-source + :data="tableData" + :edit-rules="tableRules" + :edit-config="{ trigger: 'click', mode: 'row', showStatus: true }" + > + <vxe-column type="seq" width="40"></vxe-column> + <vxe-column field="type" title="绫诲瀷" :edit-render="{}"> + <template #default="slotParams"> + <span>{{ typeSelect.find((e) => e.value === slotParams.row.type)?.label }}</span> + </template> + <template #edit="slotParams"> + <vxe-select v-model="slotParams.row.type"> + <vxe-option v-for="item in typeSelect" :key="item.id" :value="item.value" :label="item.label"></vxe-option> + </vxe-select> + </template> + </vxe-column> + <vxe-column field="name" title="鍚嶇О" :edit-render="{}"> + <template #edit="slotParams"> + <vxe-input v-model="slotParams.row.name" type="text"></vxe-input> + </template> + </vxe-column> + <vxe-column field="value" title="鍊�" :edit-render="{}"> + <template #edit="slotParams"> + <vxe-input v-model="slotParams.row.value" type="text"></vxe-input> + </template> + </vxe-column> + <vxe-column title="鎿嶄綔" width="100" show-overflow align="center"> + <template #default="slotParams"> + <el-tooltip content="鍒犻櫎" placement="top"> + <el-button link type="danger" icon="Delete" @click="removeRow(slotParams.row)"></el-button> + </el-tooltip> + </template> + </vxe-column> + </vxe-table> +</template> + +<script setup lang="ts"> +import { VXETable, VxeTableInstance, VxeTablePropTypes } from 'vxe-table'; +import type { ParamVO } from 'bpmnDesign'; +import useDialog from '@/hooks/useDialog'; + +interface PropType { + height?: string; + tableData?: ParamVO[]; +} + +const { proxy } = getCurrentInstance() as ComponentInternalInstance; + +const props = withDefaults(defineProps<PropType>(), { + height: '200px', + tableData: () => [] +}); + +const tableRules = ref<VxeTablePropTypes.EditRules>({ + type: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }], + name: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }], + value: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }] +}); + +const { title, visible, openDialog, closeDialog } = useDialog({ + title: '鐩戝惉鍣ㄥ弬鏁�' +}); +const typeSelect = [ + { id: '742fdeb7-23b4-416b-ac66-cd4ec8b901b7', label: '瀛楃涓�', value: 'stringValue' }, + { id: '660c9c46-8fae-4bae-91a0-0335420019dc', label: '琛ㄨ揪寮�', value: 'expression' } +]; + +const tableRef = ref<VxeTableInstance<ParamVO>>(); + +const getTableData = () => { + const $table = tableRef.value; + if ($table) { + return $table.getTableData().fullData; + } + return []; +}; + +const insertRow = async () => { + const $table = tableRef.value; + if ($table) { + const { row: newRow } = await $table.insertAt({}, -1); + // 鎻掑叆涓�鏉℃暟鎹苟瑙﹀彂鏍¢獙 + await $table.validate(newRow); + } +}; + +const removeRow = async (row: ParamVO) => { + await proxy?.$modal.confirm('鎮ㄧ‘瀹氳鍒犻櫎璇ユ暟鎹�?'); + const $table = tableRef.value; + if ($table) { + await $table.remove(row); + } +}; + +const validate = async () => { + const $table = tableRef.value; + if ($table) { + return await $table.validate(true); + } +}; + +defineExpose({ + closeDialog, + openDialog, + validate, + getTableData +}); +</script> + +<style scoped lang="scss"></style> -- Gitblit v1.9.3