diff --git a/src/typings/auto-imports.d.ts b/src/typings/auto-imports.d.ts index 63742cd..1d472d0 100644 --- a/src/typings/auto-imports.d.ts +++ b/src/typings/auto-imports.d.ts @@ -5,73 +5,85 @@ // Generated by unplugin-auto-import export {} declare global { - const EffectScope: typeof import('vue')['EffectScope'] - const ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] - const ElDivider: typeof import('element-plus/es')['ElDivider'] - const ElInput: typeof import('element-plus/es')['ElInput'] - const ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] - const ElRadio: typeof import('element-plus/es')['ElRadio'] - const ElSelect: typeof import('element-plus/es')['ElSelect'] - const computed: typeof import('vue')['computed'] - const createApp: typeof import('vue')['createApp'] - const customRef: typeof import('vue')['customRef'] - const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] - const defineComponent: typeof import('vue')['defineComponent'] - const effectScope: typeof import('vue')['effectScope'] - const getCurrentInstance: typeof import('vue')['getCurrentInstance'] - const getCurrentScope: typeof import('vue')['getCurrentScope'] - const h: typeof import('vue')['h'] - const inject: typeof import('vue')['inject'] - const isProxy: typeof import('vue')['isProxy'] - const isReactive: typeof import('vue')['isReactive'] - const isReadonly: typeof import('vue')['isReadonly'] - const isRef: typeof import('vue')['isRef'] - const markRaw: typeof import('vue')['markRaw'] - const nextTick: typeof import('vue')['nextTick'] - const onActivated: typeof import('vue')['onActivated'] - const onBeforeMount: typeof import('vue')['onBeforeMount'] - const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave'] - const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate'] - const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] - const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] - const onDeactivated: typeof import('vue')['onDeactivated'] - const onErrorCaptured: typeof import('vue')['onErrorCaptured'] - const onMounted: typeof import('vue')['onMounted'] - const onRenderTracked: typeof import('vue')['onRenderTracked'] - const onRenderTriggered: typeof import('vue')['onRenderTriggered'] - const onScopeDispose: typeof import('vue')['onScopeDispose'] - const onServerPrefetch: typeof import('vue')['onServerPrefetch'] - const onUnmounted: typeof import('vue')['onUnmounted'] - const onUpdated: typeof import('vue')['onUpdated'] - const provide: typeof import('vue')['provide'] - const reactive: typeof import('vue')['reactive'] - const readonly: typeof import('vue')['readonly'] - const ref: typeof import('vue')['ref'] - const resolveComponent: typeof import('vue')['resolveComponent'] - const shallowReactive: typeof import('vue')['shallowReactive'] - const shallowReadonly: typeof import('vue')['shallowReadonly'] - const shallowRef: typeof import('vue')['shallowRef'] - const toRaw: typeof import('vue')['toRaw'] - const toRef: typeof import('vue')['toRef'] - const toRefs: typeof import('vue')['toRefs'] - const toValue: typeof import('vue')['toValue'] - const triggerRef: typeof import('vue')['triggerRef'] - const unref: typeof import('vue')['unref'] - const useAttrs: typeof import('vue')['useAttrs'] - const useCssModule: typeof import('vue')['useCssModule'] - const useCssVars: typeof import('vue')['useCssVars'] - const useLink: typeof import('vue-router')['useLink'] - const useRoute: typeof import('vue-router')['useRoute'] - const useRouter: typeof import('vue-router')['useRouter'] - const useSlots: typeof import('vue')['useSlots'] - const watch: typeof import('vue')['watch'] - const watchEffect: typeof import('vue')['watchEffect'] - const watchPostEffect: typeof import('vue')['watchPostEffect'] - const watchSyncEffect: typeof import('vue')['watchSyncEffect'] + const EffectScope: (typeof import('vue'))['EffectScope'] + const ElCheckbox: (typeof import('element-plus/es'))['ElCheckbox'] + const ElDivider: (typeof import('element-plus/es'))['ElDivider'] + const ElInput: (typeof import('element-plus/es'))['ElInput'] + const ElInputNumber: (typeof import('element-plus/es'))['ElInputNumber'] + const ElRadio: (typeof import('element-plus/es'))['ElRadio'] + const ElSelect: (typeof import('element-plus/es'))['ElSelect'] + const computed: (typeof import('vue'))['computed'] + const createApp: (typeof import('vue'))['createApp'] + const customRef: (typeof import('vue'))['customRef'] + const defineAsyncComponent: (typeof import('vue'))['defineAsyncComponent'] + const defineComponent: (typeof import('vue'))['defineComponent'] + const effectScope: (typeof import('vue'))['effectScope'] + const getCurrentInstance: (typeof import('vue'))['getCurrentInstance'] + const getCurrentScope: (typeof import('vue'))['getCurrentScope'] + const h: (typeof import('vue'))['h'] + const inject: (typeof import('vue'))['inject'] + const isProxy: (typeof import('vue'))['isProxy'] + const isReactive: (typeof import('vue'))['isReactive'] + const isReadonly: (typeof import('vue'))['isReadonly'] + const isRef: (typeof import('vue'))['isRef'] + const markRaw: (typeof import('vue'))['markRaw'] + const nextTick: (typeof import('vue'))['nextTick'] + const onActivated: (typeof import('vue'))['onActivated'] + const onBeforeMount: (typeof import('vue'))['onBeforeMount'] + const onBeforeRouteLeave: (typeof import('vue-router'))['onBeforeRouteLeave'] + const onBeforeRouteUpdate: (typeof import('vue-router'))['onBeforeRouteUpdate'] + const onBeforeUnmount: (typeof import('vue'))['onBeforeUnmount'] + const onBeforeUpdate: (typeof import('vue'))['onBeforeUpdate'] + const onDeactivated: (typeof import('vue'))['onDeactivated'] + const onErrorCaptured: (typeof import('vue'))['onErrorCaptured'] + const onMounted: (typeof import('vue'))['onMounted'] + const onRenderTracked: (typeof import('vue'))['onRenderTracked'] + const onRenderTriggered: (typeof import('vue'))['onRenderTriggered'] + const onScopeDispose: (typeof import('vue'))['onScopeDispose'] + const onServerPrefetch: (typeof import('vue'))['onServerPrefetch'] + const onUnmounted: (typeof import('vue'))['onUnmounted'] + const onUpdated: (typeof import('vue'))['onUpdated'] + const provide: (typeof import('vue'))['provide'] + const reactive: (typeof import('vue'))['reactive'] + const readonly: (typeof import('vue'))['readonly'] + const ref: (typeof import('vue'))['ref'] + const resolveComponent: (typeof import('vue'))['resolveComponent'] + const shallowReactive: (typeof import('vue'))['shallowReactive'] + const shallowReadonly: (typeof import('vue'))['shallowReadonly'] + const shallowRef: (typeof import('vue'))['shallowRef'] + const toRaw: (typeof import('vue'))['toRaw'] + const toRef: (typeof import('vue'))['toRef'] + const toRefs: (typeof import('vue'))['toRefs'] + const toValue: (typeof import('vue'))['toValue'] + const triggerRef: (typeof import('vue'))['triggerRef'] + const unref: (typeof import('vue'))['unref'] + const useAttrs: (typeof import('vue'))['useAttrs'] + const useCssModule: (typeof import('vue'))['useCssModule'] + const useCssVars: (typeof import('vue'))['useCssVars'] + const useLink: (typeof import('vue-router'))['useLink'] + const useRoute: (typeof import('vue-router'))['useRoute'] + const useRouter: (typeof import('vue-router'))['useRouter'] + const useSlots: (typeof import('vue'))['useSlots'] + const watch: (typeof import('vue'))['watch'] + const watchEffect: (typeof import('vue'))['watchEffect'] + const watchPostEffect: (typeof import('vue'))['watchPostEffect'] + const watchSyncEffect: (typeof import('vue'))['watchSyncEffect'] } // for type re-export declare global { // @ts-ignore - export type { Component, ComponentPublicInstance, ComputedRef, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, VNode, WritableComputedRef } from 'vue' + export type { + Component, + ComponentPublicInstance, + ComputedRef, + ExtractDefaultPropTypes, + ExtractPropTypes, + ExtractPublicPropTypes, + InjectionKey, + PropType, + Ref, + VNode, + WritableComputedRef + } from 'vue' import('vue') } diff --git a/src/typings/components.d.ts b/src/typings/components.d.ts index c1fdb3c..87b9474 100644 --- a/src/typings/components.d.ts +++ b/src/typings/components.d.ts @@ -9,6 +9,7 @@ declare module 'vue' { export interface GlobalComponents { AdvancedFilter: typeof import('./../components/AdvancedFilter/index.vue')['default'] ElAvatar: typeof import('element-plus/es')['ElAvatar'] + ElBadge: typeof import('element-plus/es')['ElBadge'] ElButton: typeof import('element-plus/es')['ElButton'] ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup'] ElCard: typeof import('element-plus/es')['ElCard'] diff --git a/src/views/flowDesign/index.vue b/src/views/flowDesign/index.vue index f66c4ca..f1c4311 100644 --- a/src/views/flowDesign/index.vue +++ b/src/views/flowDesign/index.vue @@ -203,6 +203,7 @@ const addApproval = (node: FlowNode) => { pid: node.id, type: 'approval', name: '审批人', + executionListeners: [], child: child, // 属性 assigneeType: 'user', diff --git a/src/views/flowDesign/nodes/EndNode.vue b/src/views/flowDesign/nodes/EndNode.vue index 0cc7dd1..9e92bd9 100644 --- a/src/views/flowDesign/nodes/EndNode.vue +++ b/src/views/flowDesign/nodes/EndNode.vue @@ -1,22 +1,62 @@ - + diff --git a/src/views/flowDesign/nodes/type.ts b/src/views/flowDesign/nodes/type.ts index 41931f3..8627d4c 100644 --- a/src/views/flowDesign/nodes/type.ts +++ b/src/views/flowDesign/nodes/type.ts @@ -15,9 +15,16 @@ export interface FlowNode { pid?: string name: string type: NodeType + executionListeners?: NodeListener[] child?: FlowNode } +export interface NodeListener { + event: string + implementationType: 'class' | 'expression' | 'delegateExpression' + implementation: string +} + export interface StartNode extends FlowNode { formProperties: FormProperty[] } @@ -77,6 +84,8 @@ export interface ApprovalNode extends AssigneeNode { formProperties: FormProperty[] // 操作权限 operations: OperationPermissions + // 任务监听器 + taskListeners?: NodeListener[] } export interface TimerNode extends FlowNode { diff --git a/src/views/flowDesign/panels/ApprovalPanel.vue b/src/views/flowDesign/panels/ApprovalPanel.vue index f76fea8..59a27e8 100644 --- a/src/views/flowDesign/panels/ApprovalPanel.vue +++ b/src/views/flowDesign/panels/ApprovalPanel.vue @@ -4,6 +4,7 @@ import type { Field } from '@/components/Render/type' import UserSelector from '@/components/UserSelector/index.vue' import AssigneePanel from './AssigneePanel.vue' import type { Ref } from 'vue' +import TaskListeners from './TaskListeners.vue' const { fields } = inject<{ fields: Ref; admin: string[] }>('flowDesign', { fields: ref([]), @@ -133,6 +134,9 @@ watchEffect(() => { placeholder="指定人员" /> + + + diff --git a/src/views/flowDesign/panels/EndPanel.vue b/src/views/flowDesign/panels/EndPanel.vue new file mode 100644 index 0000000..c163d7f --- /dev/null +++ b/src/views/flowDesign/panels/EndPanel.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/src/views/flowDesign/panels/ExecutionListeners.vue b/src/views/flowDesign/panels/ExecutionListeners.vue new file mode 100644 index 0000000..23e8e87 --- /dev/null +++ b/src/views/flowDesign/panels/ExecutionListeners.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/src/views/flowDesign/panels/StartPanel.vue b/src/views/flowDesign/panels/StartPanel.vue index 1e52c4e..27be49a 100644 --- a/src/views/flowDesign/panels/StartPanel.vue +++ b/src/views/flowDesign/panels/StartPanel.vue @@ -2,11 +2,13 @@ import type { FormProperty, StartNode } from '../nodes/type' import type { Field } from '@/components/Render/type' import type { Ref } from 'vue' +import ExecutionListeners from './ExecutionListeners.vue' const { fields } = inject<{ fields: Ref }>('flowDesign', { fields: ref([]) }) const props = defineProps<{ activeData: StartNode }>() +const activeName = ref('basicSettings') const allReadonly = computed({ get() { return props.activeData.formProperties.every((e) => e.readonly) @@ -84,33 +86,46 @@ watchEffect(() => { - + diff --git a/src/views/flowDesign/panels/TaskListeners.vue b/src/views/flowDesign/panels/TaskListeners.vue new file mode 100644 index 0000000..9bee386 --- /dev/null +++ b/src/views/flowDesign/panels/TaskListeners.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/src/views/flowDesign/panels/index.vue b/src/views/flowDesign/panels/index.vue index c1de4b0..61fc5c4 100644 --- a/src/views/flowDesign/panels/index.vue +++ b/src/views/flowDesign/panels/index.vue @@ -7,6 +7,7 @@ import Cc from './CcPanel.vue' import Timer from './TimerPanel.vue' import Notify from './NotifyPanel.vue' import Condition from './ConditionPanel.vue' +import End from './EndPanel.vue' import type { FlowNode } from '../nodes/type' defineProps<{ @@ -19,7 +20,8 @@ const panels: Recordable = { cc: Cc, timer: Timer, notify: Notify, - condition: Condition + condition: Condition, + end: End } const showInput = ref(false) const onClickOutside = () => { diff --git a/src/views/home/index.vue b/src/views/home/index.vue index b1d5195..462175f 100644 --- a/src/views/home/index.vue +++ b/src/views/home/index.vue @@ -10,12 +10,14 @@ const process = ref({ pid: undefined, type: 'start', name: '发起人', + executionListeners: [], formProperties: [], child: { id: 'end', pid: 'root', type: 'end', - name: '结束', + name: '流程结束', + executionListeners: [], child: undefined } as EndNode } as StartNode)