index.vue
5.7 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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<script setup lang="ts">
import { computed, ref, unref } from 'vue';
import { SceneLinkageDrawerDataType } from './type';
import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
import { DataActionModeEnum, DataActionModeNameEnum } from '/@/enums/toolEnum';
import { BasicForm, useForm } from '/@/components/Form';
import { getFormSchemas, FormFieldsEnum } from './config';
import { createSceneLinkageDrawerContext } from './sceneLinkageDrawerContext';
import { FlipFlop } from '../FlipFlop';
import { Divider, Tooltip } from 'ant-design-vue';
import { Icon } from '/@/components/Icon';
import { ExecutionAction } from '../ExecutionAction';
import { useSceneLinkageData } from './useSceneLinkedgeData';
import { screenLinkPageAddApi } from '/@/api/ruleengine/ruleengineApi';
import { useMessage } from '/@/hooks/web/useMessage';
import { OrganizationListItem } from '/@/api/system/model/systemModel';
const emit = defineEmits(['success', 'register']);
const drawerMode = ref(DataActionModeEnum.CREATE);
const getDrawTitle = computed(() => `${DataActionModeNameEnum[unref(drawerMode)]}场景联动`);
const disabledDrawer = ref(false);
const currentUpdateLinkedgeId = ref<string>();
const [register, { setDrawerProps, closeDrawer }] = useDrawerInner(
(data: SceneLinkageDrawerDataType) => {
const { mode, record } = data;
drawerMode.value = mode;
disabledDrawer.value = mode === DataActionModeEnum.READ;
resetFieldsValue?.();
if (mode === DataActionModeEnum.UPDATE || mode === DataActionModeEnum.READ) {
currentUpdateLinkedgeId.value = record.id;
setDrawerProps({ loading: true });
handleOnOrganizationChange(data.record.organizationId);
setTimeout(() => {
setFieldsValue(record);
setDrawerProps({ loading: false });
}, 300);
}
setDrawerProps({
showOkBtn: !unref(disabledDrawer),
cancelText: unref(disabledDrawer) ? '关闭' : '取消',
});
}
);
const [registerForm, basicFormActionType] = useForm({
schemas: getFormSchemas(handleOnOrganizationChange, handleOnOrganizationOptionsChange),
layout: 'horizontal',
labelWidth: 120,
showActionButtonGroup: false,
});
const organizationId = ref<string>();
function handleOnOrganizationChange(id: string) {
organizationId.value = id;
}
function handleOnOrganizationOptionsChange(options: OrganizationListItem[]) {
if (unref(drawerMode) === DataActionModeEnum.CREATE) {
const [firsetItem] = options;
organizationId.value = firsetItem?.id;
basicFormActionType.setFieldsValue({ [FormFieldsEnum.ORGANIZATION_ID]: firsetItem?.id });
}
}
createSceneLinkageDrawerContext({
organizationId: computed(() => unref(organizationId)),
disabledDrawer: computed(() => unref(disabledDrawer)),
});
const flipFlopElRef = ref<InstanceType<typeof FlipFlop>>();
const executionConditionElRef = ref<InstanceType<typeof FlipFlop>>();
const executionActionElRef = ref<InstanceType<typeof ExecutionAction>>();
const { getFieldsValue, setFieldsValue, validate, resetFieldsValue } = useSceneLinkageData({
flipFlopElRef,
executionActionElRef,
executionConditionElRef,
basicFormActionType,
});
const { createMessage } = useMessage();
const handleSave = async () => {
await validate?.();
setDrawerProps({ loading: true, confirmLoading: true });
try {
const value = getFieldsValue();
if (unref(drawerMode) === DataActionModeEnum.UPDATE) {
Reflect.set(value, 'id', unref(currentUpdateLinkedgeId));
}
await screenLinkPageAddApi(value, unref(drawerMode) === DataActionModeEnum.UPDATE);
createMessage.success(`${DataActionModeNameEnum[unref(drawerMode)]}成功`);
closeDrawer();
emit('success');
} finally {
setDrawerProps({ loading: false, confirmLoading: false });
}
};
</script>
<template>
<BasicDrawer
@register="register"
:title="getDrawTitle"
width="50%"
@ok="handleSave"
show-cancel-btn
show-footer
>
<BasicForm @register="registerForm" :disabled="disabledDrawer">
<template #flipFlop>
<Divider orientation="left">
<Tooltip>
<template #title> 触发器不可为空,消息只要满足触发条件中任意一个即可触发。 </template>
<label><span class="text-red-400 mr-1">*</span>触发器</label>
<Icon icon="ant-design:question-circle-outlined" class="ml-2" />
</Tooltip>
</Divider>
<FlipFlop ref="flipFlopElRef" />
</template>
<template #executionCondition>
<Divider orientation="left">
<Tooltip>
<template #title> 执行条件可为空,消息需要满足所有执行条件才会被处理。 </template>
<label>执行条件</label>
<Icon icon="ant-design:question-circle-outlined" class="ml-2" />
</Tooltip>
</Divider>
<FlipFlop
ref="executionConditionElRef"
addButtonName="执行条件 (AND)"
default-null
:panel-title="(index) => `执行条件${index}`"
/>
</template>
<template #executionAction>
<Divider orientation="left">
<Tooltip>
<template #title>
触发器和执行条件都满足时,场景联动会做什么,例如:设备联动、告警通知等。
</template>
<label><span class="text-red-400 mr-1">*</span>执行动作</label>
<Icon icon="ant-design:question-circle-outlined" class="ml-2" />
</Tooltip>
</Divider>
<ExecutionAction ref="executionActionElRef" />
</template>
</BasicForm>
</BasicDrawer>
</template>