index.vue
4.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<script setup lang="ts">
import { CollapseContainer } from '/@/components/Container';
import { Icon } from '/@/components/Icon';
import { Tooltip, Button } from 'ant-design-vue';
import { BasicForm, FormActionType, ThingsModelForm } from '/@/components/Form';
import { getFormSchemas, FormFieldsEnum } from './config';
import { FlipFlop } from '../FlipFlop';
import { ComponentPublicInstance, ref, unref } from 'vue';
import { ExecutionActionListRefItemType } from './type';
import { useExecutionActionData } from './useExecutionActionData';
import { createNewExecutionActionItem } from '.';
import { useSceneLinkageDrawerContext } from '../SceneLinkageDrawer/sceneLinkageDrawerContext';
import { FlipFlopComponentTypeEnum } from '../FlipFlop/types';
const { disabledDrawer } = useSceneLinkageDrawerContext();
const hasAlarmNotify = ref(false);
const formSchemas = getFormSchemas(hasAlarmNotify);
const executionActionListRef = ref<ExecutionActionListRefItemType[]>([
createNewExecutionActionItem(),
]);
const handleAdd = () => {
executionActionListRef.value.push(createNewExecutionActionItem());
};
const handleDelete = (executionActionItem: ExecutionActionListRefItemType) => {
const index = unref(executionActionListRef).findIndex(
(item) => item.key === executionActionItem.key
);
~index && unref(executionActionListRef).splice(index, 1);
};
const setExecutionActionRef = (
el: Nullable<Element | ComponentPublicInstance>,
executionActionItem: ExecutionActionListRefItemType
) => {
executionActionItem.ref = el as unknown as FormActionType;
};
const setAlarmClearRuleRef = (
el: Nullable<Element | ComponentPublicInstance>,
executionActionItem: ExecutionActionListRefItemType
) => {
executionActionItem.alarmClearRuleElRef = el as unknown as InstanceType<typeof FlipFlop>;
};
const handleClearRuleDelete = (_executionActionItem: ExecutionActionListRefItemType) => {
//
};
const setThingsModelFormRef = (
el: Nullable<Element | ComponentPublicInstance>,
executionActionItem: ExecutionActionListRefItemType
) => {
executionActionItem.thingsModelFormRefl = el as unknown as InstanceType<typeof ThingsModelForm>;
};
const { getFieldsValue, setFieldsValue, validate, resetFieldsValue } = useExecutionActionData(
executionActionListRef,
hasAlarmNotify
);
defineExpose({
getFieldsValue,
setFieldsValue,
validate,
resetFieldsValue,
});
</script>
<template>
<section>
<CollapseContainer
class="mb-4"
v-for="(executionActionItem, index) in executionActionListRef"
:title="`执行动作${index + 1}`"
:key="executionActionItem.key"
>
<template #action>
<Tooltip title="删除">
<Icon
v-if="!disabledDrawer"
class="ml-2 cursor-pointer"
icon="fluent:delete-off-20-regular"
size="20"
@click="handleDelete(executionActionItem)"
/>
</Tooltip>
</template>
<BasicForm
:ref="(el) => setExecutionActionRef(el, executionActionItem)"
:disabled="disabledDrawer"
:show-action-button-group="false"
:baseColProps="{ span: 6, xxl: 6, xl: 8, lg: 12, sm: 24 }"
:schemas="formSchemas"
>
<template #alarmClearRule>
<FlipFlop
:ref="(el) => setAlarmClearRuleRef(el, executionActionItem)"
:panel-title="(index) => `清除告警${index}`"
:disabled="disabledDrawer"
addButtonName="新增清除告警"
@delete="handleClearRuleDelete(executionActionItem)"
:type="FlipFlopComponentTypeEnum.ALARM_CLEAR"
/>
</template>
<template #serviceCommand="{ field, model }">
<ThingsModelForm
:ref="(el) => setThingsModelFormRef(el, executionActionItem)"
:value="model[field]"
:identifier="model[FormFieldsEnum.CALL_SERVICE_IDENTIFIER]"
:input-data="model[FormFieldsEnum.CALL_SERVICE]?.functionJson?.inputData"
:title="model[FormFieldsEnum.CALL_SERVICE]?.functionName"
:disabled="disabledDrawer"
:transport-type="model[FormFieldsEnum.TRANSPORT_TYPE]"
/>
</template>
</BasicForm>
</CollapseContainer>
<Button v-if="!disabledDrawer" class="w-full" type="primary" @click="handleAdd">
<Icon icon="ant-design:plus-outlined" />
执行动作
</Button>
</section>
</template>