Showing
13 changed files
with
806 additions
and
1192 deletions
... | ... | @@ -10,8 +10,9 @@ VITE_PUBLIC_PATH = / |
10 | 10 | # 本地 |
11 | 11 | # VITE_PROXY = [["/api","http://192.168.10.113:8080/api"]] |
12 | 12 | |
13 | -# 线上 | |
13 | +# 线上演示环境 | |
14 | 14 | # VITE_PROXY = [["/api","http://101.133.234.90:8080/api"]] |
15 | +# 线上测试环境 | |
15 | 16 | VITE_PROXY = [["/api","http://47.99.141.212:8080/api"]] |
16 | 17 | |
17 | 18 | # 实时数据的ws地址 | ... | ... |
... | ... | @@ -44,23 +44,12 @@ export const screenLinkPageGetApi = (params?: ScreenLinkPageQueryParam) => { |
44 | 44 | }; |
45 | 45 | |
46 | 46 | /** |
47 | - * 新增场景联动 | |
47 | + * 新增或更新场景联动 | |
48 | 48 | * @param params pageSize page name |
49 | 49 | */ |
50 | -export const screenLinkPageAddApi = (params: ScreenAddModel) => { | |
50 | +export const screenLinkPageAddApi = (params: ScreenAddModel, isUpdate: boolean) => { | |
51 | 51 | return defHttp.post<ScreenAddModel>({ |
52 | - url: ScreenManagerApi.SCREEN_ADD_URL, | |
53 | - params, | |
54 | - }); | |
55 | -}; | |
56 | - | |
57 | -/** | |
58 | - * 更新场景联动 | |
59 | - * @param params pageSize page name | |
60 | - */ | |
61 | -export const screenLinkPageUpdateApi = (params: ScreenUpdateModel) => { | |
62 | - return defHttp.post<ScreenUpdateModel>({ | |
63 | - url: ScreenManagerApi.SCREEN_UPDATE_URL, | |
52 | + url: isUpdate ? ScreenManagerApi.SCREEN_UPDATE_URL : ScreenManagerApi.SCREEN_ADD_URL, | |
64 | 53 | params, |
65 | 54 | }); |
66 | 55 | }; |
... | ... | @@ -73,7 +62,7 @@ export const screenLinkPageDeleteApi = (ids: string[]) => { |
73 | 62 | return defHttp.delete({ |
74 | 63 | url: ScreenManagerApi.SCREEN_DELETE_URL, |
75 | 64 | data: { |
76 | - ids: ids, | |
65 | + ids, | |
77 | 66 | }, |
78 | 67 | }); |
79 | 68 | }; | ... | ... |
... | ... | @@ -45,7 +45,7 @@ |
45 | 45 | const lockStore = useLockStore(); |
46 | 46 | |
47 | 47 | const getRealName = computed(() => userStore.getUserInfo?.realName); |
48 | - console.log(getRealName); | |
48 | + | |
49 | 49 | const [register, { closeModal }] = useModalInner(); |
50 | 50 | |
51 | 51 | const [registerForm, { validateFields, resetFields }] = useForm({ | ... | ... |
... | ... | @@ -136,7 +136,7 @@ |
136 | 136 | async onConnected() { |
137 | 137 | if (isAdmin(props.role)) return; |
138 | 138 | const res = await getEntitiesId(); |
139 | - entityId = res.data[0].entityId; | |
139 | + entityId = res.data[0]?.entityId; | |
140 | 140 | const sendValue = JSON.stringify({ |
141 | 141 | entityDataCmds: [ |
142 | 142 | { | ... | ... |
1 | +<template> | |
2 | + <div> | |
3 | + <BasicDrawer | |
4 | + v-bind="$attrs" | |
5 | + @register="registerDrawer" | |
6 | + showFooter | |
7 | + @ok="handleSubmit" | |
8 | + width="100vw" | |
9 | + @close="handleClose" | |
10 | + :title="title" | |
11 | + > | |
12 | + <div> | |
13 | + <!-- 基础表单 --> | |
14 | + <BasicForm @register="registerForm" /> | |
15 | + <!-- 基础表单 --> | |
16 | + <!-- 触发器-begin --> | |
17 | + <div> | |
18 | + <template v-for="(item, index) in triggerData" :key="item"> | |
19 | + <Trigger | |
20 | + class="mt-4" | |
21 | + :triggerIndex="index" | |
22 | + :ref="skipUnwrap.triggerItemRefs" | |
23 | + @deleteTrigger="deleteTrigger" | |
24 | + /> | |
25 | + </template> | |
26 | + <!-- 按钮 --> | |
27 | + <a-button type="primary" class="mt-4" @click="addTrigger"> 添加触发器</a-button> | |
28 | + <!-- 按钮 --> | |
29 | + </div> | |
30 | + <!-- 触发器-end --> | |
31 | + | |
32 | + <!-- 执行条件-begin --> | |
33 | + <div> | |
34 | + <template v-for="(item, index) in conditionData" :key="item"> | |
35 | + <Condition | |
36 | + class="mt-4" | |
37 | + :conditionIndex="index" | |
38 | + :ref="skipUnwrap.conditionItemRefs" | |
39 | + @deleteCondition="deleteCondition" | |
40 | + /> | |
41 | + </template> | |
42 | + <!-- 按钮 --> | |
43 | + <a-button type="primary" class="mt-4" @click="addCondition"> 添加执行条件</a-button> | |
44 | + <!-- 按钮 --> | |
45 | + </div> | |
46 | + <!-- 执行条件-end --> | |
47 | + | |
48 | + <!-- 执行动作-begin --> | |
49 | + <div> | |
50 | + <template v-for="(item, index) in actionData" :key="item"> | |
51 | + <Action | |
52 | + class="mt-4" | |
53 | + :actionIndex="index" | |
54 | + :actionData="actionData" | |
55 | + :ref="skipUnwrap.actionItemRefs" | |
56 | + @deleteAction="deleteAction" | |
57 | + /> | |
58 | + </template> | |
59 | + | |
60 | + <!-- 按钮 --> | |
61 | + <a-button type="primary" class="mt-4" @click="addAction"> 添加执行动作</a-button> | |
62 | + <!-- 按钮 --> | |
63 | + </div> | |
64 | + <!-- 执行动作-end --> | |
65 | + </div> | |
66 | + </BasicDrawer> | |
67 | + </div> | |
68 | +</template> | |
69 | +<script lang="ts"> | |
70 | + import { defineComponent, ref, watch, unref, computed, nextTick } from 'vue'; | |
71 | + import { BasicDrawer, useDrawerInner } from '/@/components/Drawer'; | |
72 | + import { formSchema, organizationId } from './config'; | |
73 | + import { BasicForm, useForm } from '/@/components/Form'; | |
74 | + import { formatTriggerData, formatConditionData } from './cpns/format-data'; | |
75 | + import { useMessage } from '/@/hooks/web/useMessage'; | |
76 | + import { | |
77 | + screenLinkPageAddApi, | |
78 | + screenLinkPageByDeptIdGetDevice, | |
79 | + } from '/@/api/ruleengine/ruleengineApi'; | |
80 | + import Trigger from './cpns/Trigger.vue'; | |
81 | + import Condition from './cpns/Condition.vue'; | |
82 | + import Action from './cpns/Action.vue'; | |
83 | + export default defineComponent({ | |
84 | + name: 'SceneLinkAgeDrawer', | |
85 | + components: { | |
86 | + BasicDrawer, | |
87 | + BasicForm, | |
88 | + Trigger, | |
89 | + Condition, | |
90 | + Action, | |
91 | + }, | |
92 | + emits: ['register', 'success'], | |
93 | + setup(_, { emit }) { | |
94 | + const { createMessage } = useMessage(); | |
95 | + const triggerData = ref([]); | |
96 | + const conditionData = ref([]); | |
97 | + const actionData = ref([]); | |
98 | + const skipUnwrap = { | |
99 | + triggerItemRefs: ref([]), | |
100 | + conditionItemRefs: ref([]), | |
101 | + actionItemRefs: ref([]), | |
102 | + }; | |
103 | + const title = computed(() => `${isUpdate.value ? '编辑' : '新增'}场景联动`); | |
104 | + let getTriggerFormValue = ref([]); | |
105 | + let getConditionFormValue = ref([]); | |
106 | + let getActionFormValue = ref([]); | |
107 | + const editEntryIdData = ref([]); | |
108 | + const isUpdate = ref(false); | |
109 | + const id = ref(undefined); | |
110 | + const tenantId = ref(undefined); | |
111 | + const [registerForm, { resetFields, validate, setFieldsValue }] = useForm({ | |
112 | + labelWidth: 120, | |
113 | + schemas: formSchema, | |
114 | + showActionButtonGroup: false, | |
115 | + }); | |
116 | + const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => { | |
117 | + setDrawerProps({ confirmLoading: false }); | |
118 | + isUpdate.value = data.isUpdate; | |
119 | + if (!unref(isUpdate)) { | |
120 | + resetFields(); | |
121 | + //初始化执行动作 | |
122 | + actionData.value = [Date.now()]; | |
123 | + } else { | |
124 | + // 取值 | |
125 | + const { | |
126 | + id: recordId, | |
127 | + tenantId: recordTenantId, | |
128 | + organizationId, | |
129 | + triggers, | |
130 | + doConditions, | |
131 | + doActions, | |
132 | + } = data.record; | |
133 | + // 赋值 | |
134 | + await setFieldsValue(data.record); | |
135 | + id.value = recordId; | |
136 | + tenantId.value = recordTenantId; | |
137 | + // 获取当前组织下的设备列表 | |
138 | + const options = await screenLinkPageByDeptIdGetDevice({ | |
139 | + organizationId, | |
140 | + }); | |
141 | + // 生成回显时对应得组件数量 | |
142 | + triggerData.value = [...new Array(triggers.length).keys()]; | |
143 | + conditionData.value = [...new Array(doConditions.length).keys()]; | |
144 | + actionData.value = [...new Array(doActions.length).keys()]; | |
145 | + // 回显设备列表 | |
146 | + editEntryIdData.value = options.items.map((v) => { | |
147 | + return { | |
148 | + value: v.tbDeviceId, | |
149 | + label: v.name, | |
150 | + }; | |
151 | + }); | |
152 | + nextTick(() => { | |
153 | + setEditFields(skipUnwrap.triggerItemRefs, editEntryIdData); | |
154 | + setEditFields(skipUnwrap.conditionItemRefs, editEntryIdData); | |
155 | + setEditFields(skipUnwrap.actionItemRefs, editEntryIdData); | |
156 | + }); | |
157 | + | |
158 | + // 回显触发器数据---此处是个闭包! | |
159 | + triggers.forEach((trigger, index) => { | |
160 | + nextTick(() => { | |
161 | + unref(skipUnwrap.triggerItemRefs)[index].setFieldsFormValueFun({ | |
162 | + triggerType: trigger.triggerType, | |
163 | + entityId: trigger.entityId, | |
164 | + type1: trigger.triggerCondition?.condition[0]?.key?.type, | |
165 | + type2: trigger.triggerCondition?.condition[0]?.key?.key, | |
166 | + operation: trigger.triggerCondition?.condition[0]?.predicate?.operation, | |
167 | + value: trigger.triggerCondition?.condition[0]?.predicate?.value?.defaultValue, | |
168 | + }); | |
169 | + }); | |
170 | + }); | |
171 | + | |
172 | + doConditions.forEach((item, index) => { | |
173 | + nextTick(() => { | |
174 | + unref(skipUnwrap.conditionItemRefs)[index].setFieldsFormValueFun({ | |
175 | + triggerType: item?.triggerType, | |
176 | + entityId: item?.entityId, | |
177 | + type: item.triggerCondition?.condition[0].key.key, | |
178 | + operation: item?.triggerCondition?.condition[0]?.predicate?.operation, | |
179 | + value: item?.triggerCondition?.condition[0]?.predicate?.value?.defaultValue, | |
180 | + }); | |
181 | + }); | |
182 | + }); | |
183 | + | |
184 | + doActions.forEach((item, index) => { | |
185 | + nextTick(() => { | |
186 | + unref(skipUnwrap.actionItemRefs)[index].setFieldsFormValueFun({ | |
187 | + outTarget: item.outTarget, | |
188 | + deviceId: item.deviceId, | |
189 | + }); | |
190 | + unref(skipUnwrap.actionItemRefs)[index].setJsonValue(item.doContext.params); | |
191 | + }); | |
192 | + }); | |
193 | + } | |
194 | + }); | |
195 | + | |
196 | + // 设置设备的options | |
197 | + const setEditFields = (linkAge, deviceList) => { | |
198 | + unref(linkAge).map((item) => { | |
199 | + item.updateFieldDeviceId(deviceList); | |
200 | + }); | |
201 | + }; | |
202 | + // 监听组织变化更新设备列表 | |
203 | + const deviceList = ref([]); | |
204 | + watch(organizationId, async (newValue: string) => { | |
205 | + if (!newValue) return; | |
206 | + const { items } = await screenLinkPageByDeptIdGetDevice({ organizationId: newValue }); | |
207 | + deviceList.value = items.map((item) => ({ label: item.name, value: item.tbDeviceId })); | |
208 | + setFields(skipUnwrap.triggerItemRefs, true); | |
209 | + setFields(skipUnwrap.conditionItemRefs, true); | |
210 | + setFields(skipUnwrap.actionItemRefs, true); | |
211 | + }); | |
212 | + | |
213 | + // 根据上面组织变化动态改变触发器,执行条件,执行动作的设备值 | |
214 | + function setFields(linkAge, isOrganizationChange = false) { | |
215 | + unref(linkAge).map((item) => { | |
216 | + isOrganizationChange && item.resetFieldsValueFunc(); | |
217 | + item.updateFieldDeviceId(deviceList); | |
218 | + }); | |
219 | + } | |
220 | + | |
221 | + // 添加触发器 | |
222 | + const addTrigger = () => { | |
223 | + unref(triggerData).push(Date.now()); | |
224 | + nextTick(() => { | |
225 | + setFields(skipUnwrap.triggerItemRefs); | |
226 | + }); | |
227 | + }; | |
228 | + // 添加执行条件 | |
229 | + const addCondition = () => { | |
230 | + unref(conditionData).push(Date.now()); | |
231 | + nextTick(() => { | |
232 | + setFields(skipUnwrap.conditionItemRefs); | |
233 | + }); | |
234 | + }; | |
235 | + // 添加执行动作 | |
236 | + const addAction = () => { | |
237 | + unref(actionData).push(Date.now()); | |
238 | + nextTick(() => { | |
239 | + setFields(skipUnwrap.actionItemRefs); | |
240 | + }); | |
241 | + }; | |
242 | + | |
243 | + /** | |
244 | + * 获取触发器、执行条件、执行动作表单值--多个 | |
245 | + */ | |
246 | + const getFormValueFunc = () => { | |
247 | + getTriggerFormValue.value = unref(skipUnwrap.triggerItemRefs)?.map((item) => { | |
248 | + return formatTriggerData(item.getFieldsValueFunc()); | |
249 | + }); | |
250 | + getConditionFormValue.value = unref(skipUnwrap.conditionItemRefs).map((item) => { | |
251 | + return formatConditionData(item.getFieldsValueFunc()); | |
252 | + }); | |
253 | + getActionFormValue.value = unref(skipUnwrap.actionItemRefs).map((item) => { | |
254 | + return item.getFieldsValueFunc(); | |
255 | + }); | |
256 | + }; | |
257 | + const handleSubmit = async () => { | |
258 | + let basicFormValue = await validate(); | |
259 | + if (!basicFormValue) return; | |
260 | + for (const item of unref(skipUnwrap.actionItemRefs)) { | |
261 | + const valid = await item.validateForm(); | |
262 | + if (!valid) return; | |
263 | + } | |
264 | + try { | |
265 | + setDrawerProps({ confirmLoading: true }); | |
266 | + getFormValueFunc(); | |
267 | + const postAddOrEditData = { | |
268 | + ...basicFormValue, | |
269 | + triggers: unref(getTriggerFormValue), | |
270 | + doConditions: unref(getConditionFormValue), | |
271 | + doActions: unref(getActionFormValue), | |
272 | + ...{ | |
273 | + id: unref(id), | |
274 | + tenantId: unref(tenantId), | |
275 | + }, | |
276 | + }; | |
277 | + await screenLinkPageAddApi(postAddOrEditData, unref(isUpdate)); | |
278 | + createMessage.success(`${unref(isUpdate) ? '编辑' : '新增'}成功`); | |
279 | + closeDrawer(); | |
280 | + handleClose(); | |
281 | + emit('success'); | |
282 | + } finally { | |
283 | + setDrawerProps({ confirmLoading: false }); | |
284 | + } | |
285 | + }; | |
286 | + | |
287 | + // 删除 | |
288 | + const deleteTrigger = (triggerIndex: number) => { | |
289 | + unref(triggerData).splice(triggerIndex, 1); | |
290 | + }; | |
291 | + const deleteCondition = (conditionIndex: number) => { | |
292 | + unref(conditionData).splice(conditionIndex, 1); | |
293 | + }; | |
294 | + const deleteAction = (actionIndex: number) => { | |
295 | + unref(actionData).splice(actionIndex, 1); | |
296 | + }; | |
297 | + const handleClose = () => { | |
298 | + id.value = undefined; | |
299 | + tenantId.value = undefined; | |
300 | + organizationId.value = undefined; | |
301 | + getTriggerFormValue.value = []; | |
302 | + getConditionFormValue.value = []; | |
303 | + getActionFormValue.value = []; | |
304 | + triggerData.value = []; | |
305 | + conditionData.value = []; | |
306 | + actionData.value = []; | |
307 | + unref(skipUnwrap.triggerItemRefs).map((item) => { | |
308 | + item.resetFieldsValueFunc(); | |
309 | + }); | |
310 | + unref(skipUnwrap.conditionItemRefs).map((item) => { | |
311 | + item.resetFieldsValueFunc(); | |
312 | + }); | |
313 | + unref(skipUnwrap.actionItemRefs).map((item) => { | |
314 | + item.resetFieldsValueFunc(); | |
315 | + }); | |
316 | + }; | |
317 | + | |
318 | + return { | |
319 | + title, | |
320 | + isUpdate, | |
321 | + registerDrawer, | |
322 | + registerForm, | |
323 | + // 添加 or 删除 触发器,条件,动作 | |
324 | + triggerData, | |
325 | + conditionData, | |
326 | + actionData, | |
327 | + addCondition, | |
328 | + addTrigger, | |
329 | + addAction, | |
330 | + deleteTrigger, | |
331 | + deleteCondition, | |
332 | + deleteAction, | |
333 | + // Refs引用 | |
334 | + skipUnwrap, | |
335 | + handleSubmit, | |
336 | + handleClose, | |
337 | + }; | |
338 | + }, | |
339 | + }); | |
340 | +</script> | ... | ... |
1 | +import { ref, h } from 'vue'; | |
1 | 2 | import { BasicColumn, FormSchema } from '/@/components/Table'; |
2 | -import { ref } from 'vue'; | |
3 | 3 | import { |
4 | 4 | screenLinkOrganizationGetApi, |
5 | 5 | screenLinkPagePutApi, |
6 | 6 | } from '/@/api/ruleengine/ruleengineApi'; |
7 | -import { h } from 'vue'; | |
8 | 7 | import { Switch } from 'ant-design-vue'; |
9 | 8 | import { useMessage } from '/@/hooks/web/useMessage'; |
10 | 9 | import { copyTransFun } from '/@/utils/fnUtils'; |
... | ... | @@ -36,25 +35,10 @@ export enum AttrAndWenDuEnum { |
36 | 35 | IS_CONDITION_SHIDU = 'NUMERIC1', |
37 | 36 | IS_TYPE2 = 'type2', |
38 | 37 | } |
39 | -export const isType2 = (type: string) => { | |
40 | - return type === AttrAndWenDuEnum.IS_TYPE2; | |
41 | -}; | |
42 | - | |
43 | -export const isConditionShiDu = (type: string) => { | |
44 | - return type === AttrAndWenDuEnum.IS_CONDITION_SHIDU; | |
45 | -}; | |
46 | -export const isConditionWenDu = (type: string) => { | |
47 | - return type === AttrAndWenDuEnum.IS_CONDITION_WENDU; | |
48 | -}; | |
49 | - | |
50 | -export const isShiDu = (type: string) => { | |
51 | - return type === AttrAndWenDuEnum.IS_SHIDU; | |
52 | -}; | |
53 | 38 | |
54 | -export const isWenDu = (type: string) => { | |
55 | - return type === AttrAndWenDuEnum.IS_WENDU_ACT; | |
39 | +export const isUpAndDown = (type: string) => { | |
40 | + return type === AttributeActionEnum.IS_UP_DOWN_ACT; | |
56 | 41 | }; |
57 | - | |
58 | 42 | export const isTimeAll = (type: string) => { |
59 | 43 | return type === TriggerEnum.IS_TIME_ACT; |
60 | 44 | }; |
... | ... | @@ -63,10 +47,6 @@ export const isMsg = (type: string) => { |
63 | 47 | return type === TriggerEnum.IS_MSG_NOTIFY; |
64 | 48 | }; |
65 | 49 | |
66 | -export const isUpAndDown = (type: string) => { | |
67 | - return type === AttributeActionEnum.IS_UP_DOWN_ACT; | |
68 | -}; | |
69 | - | |
70 | 50 | export const isDevice = (type: string) => { |
71 | 51 | return type === TriggerEnum.IS_DEVICE_ACT; |
72 | 52 | }; |
... | ... | @@ -82,14 +62,27 @@ export const isScene = (type: string) => { |
82 | 62 | export const isHand = (type: string) => { |
83 | 63 | return type === TriggerEnum.IS_HAND_ACT; |
84 | 64 | }; |
65 | +export const isType2 = (type: string) => { | |
66 | + return type === AttrAndWenDuEnum.IS_TYPE2; | |
67 | +}; | |
68 | + | |
69 | +export const isConditionShiDu = (type: string) => { | |
70 | + return type === AttrAndWenDuEnum.IS_CONDITION_SHIDU; | |
71 | +}; | |
72 | +export const isConditionWenDu = (type: string) => { | |
73 | + return type === AttrAndWenDuEnum.IS_CONDITION_WENDU; | |
74 | +}; | |
75 | + | |
76 | +export const isShiDu = (type: string) => { | |
77 | + return type === AttrAndWenDuEnum.IS_SHIDU; | |
78 | +}; | |
79 | + | |
80 | +export const isWenDu = (type: string) => { | |
81 | + return type === AttrAndWenDuEnum.IS_WENDU_ACT; | |
82 | +}; | |
85 | 83 | |
86 | 84 | export const columns: BasicColumn[] = [ |
87 | 85 | { |
88 | - title: '创建时间', | |
89 | - dataIndex: 'createTime', | |
90 | - width: 180, | |
91 | - }, | |
92 | - { | |
93 | 86 | title: '场景联动名称', |
94 | 87 | dataIndex: 'name', |
95 | 88 | width: 200, |
... | ... | @@ -97,7 +90,7 @@ export const columns: BasicColumn[] = [ |
97 | 90 | { |
98 | 91 | title: '触发方式', |
99 | 92 | dataIndex: 'triggerType', |
100 | - format: (text: string, record: Recordable) => { | |
93 | + format: (_: string, record: Recordable) => { | |
101 | 94 | return record.triggers[0]?.triggerType == 'DEVICE_TRIGGER' |
102 | 95 | ? '设备触发' |
103 | 96 | : record.triggers[0]?.triggerType == 'SCHEDULE_TRIGGER' |
... | ... | @@ -131,12 +124,9 @@ export const columns: BasicColumn[] = [ |
131 | 124 | if (record.status == 1) { |
132 | 125 | createMessage.success(`已启用`); |
133 | 126 | } else { |
134 | - createMessage.error('已禁用'); | |
127 | + createMessage.success('已禁用'); | |
135 | 128 | } |
136 | 129 | }) |
137 | - .catch(() => { | |
138 | - createMessage.error('已禁用'); | |
139 | - }) | |
140 | 130 | .finally(() => { |
141 | 131 | record.pendingStatus = false; |
142 | 132 | }); |
... | ... | @@ -149,10 +139,13 @@ export const columns: BasicColumn[] = [ |
149 | 139 | dataIndex: 'description', |
150 | 140 | width: 200, |
151 | 141 | }, |
142 | + { | |
143 | + title: '创建时间', | |
144 | + dataIndex: 'createTime', | |
145 | + width: 180, | |
146 | + }, | |
152 | 147 | ]; |
153 | - | |
154 | -export const changeOriginId = ref(null); | |
155 | - | |
148 | +export const organizationId = ref(''); | |
156 | 149 | export const formSchema: FormSchema[] = [ |
157 | 150 | { |
158 | 151 | field: 'name', |
... | ... | @@ -160,6 +153,7 @@ export const formSchema: FormSchema[] = [ |
160 | 153 | colProps: { span: 24 }, |
161 | 154 | required: true, |
162 | 155 | component: 'Input', |
156 | + | |
163 | 157 | componentProps: { |
164 | 158 | maxLength: 36, |
165 | 159 | placeholder: '请输入场景联动名称', |
... | ... | @@ -171,28 +165,15 @@ export const formSchema: FormSchema[] = [ |
171 | 165 | label: '所属组织', |
172 | 166 | colProps: { span: 24 }, |
173 | 167 | component: 'ApiTreeSelect', |
174 | - componentProps: ({ formModel, formActionType }) => { | |
175 | - return { | |
176 | - api: async () => { | |
177 | - const data = await screenLinkOrganizationGetApi(); | |
178 | - copyTransFun(data as any as any[]); | |
179 | - return data; | |
180 | - }, | |
181 | - onChange: async (v) => { | |
182 | - if (v == undefined) { | |
183 | - formModel.entityId = undefined; | |
184 | - const { updateSchema } = formActionType; | |
185 | - updateSchema({ | |
186 | - field: 'entityId', | |
187 | - componentProps: { | |
188 | - options: undefined, | |
189 | - }, | |
190 | - }); | |
191 | - } else { | |
192 | - changeOriginId.value = v; | |
193 | - } | |
194 | - }, | |
195 | - }; | |
168 | + componentProps: { | |
169 | + api: async () => { | |
170 | + const data = await screenLinkOrganizationGetApi(); | |
171 | + copyTransFun(data as any as any[]); | |
172 | + return data; | |
173 | + }, | |
174 | + onChange(value) { | |
175 | + organizationId.value = value; | |
176 | + }, | |
196 | 177 | }, |
197 | 178 | }, |
198 | 179 | { |
... | ... | @@ -237,7 +218,7 @@ export const searchFormSchema: FormSchema[] = [ |
237 | 218 | label: '状态', |
238 | 219 | component: 'Select', |
239 | 220 | componentProps: { |
240 | - placeholder: '请选择', | |
221 | + placeholder: '请选择状态', | |
241 | 222 | options: [ |
242 | 223 | { label: '已启用', value: '1' }, |
243 | 224 | { label: '未启用', value: '0' }, |
... | ... | @@ -256,9 +237,9 @@ export const useTriggerDrawerSchema: FormSchema[] = [ |
256 | 237 | placeholder: '设备触发', |
257 | 238 | options: [ |
258 | 239 | { label: '设备触发', value: 'DEVICE_TRIGGER' }, |
259 | - { label: '定时触发', value: 'SCHEDULE_TRIGGER' }, | |
260 | - { label: '场景触发', value: 'SCENE_TRIGGER' }, | |
261 | - { label: '手动触发', value: 'HAND_ACT' }, | |
240 | + // { label: '定时触发', value: 'SCHEDULE_TRIGGER' }, | |
241 | + // { label: '场景触发', value: 'SCENE_TRIGGER' }, | |
242 | + // { label: '手动触发', value: 'HAND_ACT' }, | |
262 | 243 | ], |
263 | 244 | }, |
264 | 245 | colProps: { span: 12 }, |
... | ... | @@ -270,39 +251,21 @@ export const useTriggerDrawerSchema: FormSchema[] = [ |
270 | 251 | componentProps: { |
271 | 252 | placeholder: '请选择设备', |
272 | 253 | }, |
273 | - ifShow: ({ values }) => | |
274 | - !isTime(Reflect.get(values, 'triggerType')) && | |
275 | - !isScene(Reflect.get(values, 'triggerType')) && | |
276 | - !isHand(Reflect.get(values, 'triggerType')), | |
277 | - colProps: { | |
278 | - span: 12, | |
279 | - }, | |
280 | - }, | |
281 | - { | |
282 | - field: 'entityId1', | |
283 | - component: 'Input', | |
284 | - label: '', | |
285 | - componentProps: { | |
286 | - maxLength: 255, | |
287 | - placeholder: '请输入Cron表达式', | |
288 | - }, | |
254 | + ifShow: ({ values }) => isDevice(values.triggerType), | |
289 | 255 | colProps: { |
290 | 256 | span: 12, |
291 | 257 | }, |
292 | - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'triggerType')), | |
293 | 258 | }, |
294 | 259 | { |
295 | 260 | field: 'type1', |
296 | 261 | label: '', |
297 | 262 | component: 'Select', |
298 | 263 | componentProps: { |
299 | - placeholder: '属性触发', | |
264 | + placeholder: '属性触发方式', | |
300 | 265 | options: [{ label: '属性触发', value: 'TIME_SERIES' }], |
301 | 266 | }, |
302 | - ifShow: ({ values }) => | |
303 | - !isTime(Reflect.get(values, 'triggerType')) && | |
304 | - !isScene(Reflect.get(values, 'triggerType')) && | |
305 | - !isHand(Reflect.get(values, 'triggerType')), | |
267 | + ifShow: ({ values }) => isDevice(values.triggerType), | |
268 | + dynamicDisabled: ({ values }) => !values.entityId, | |
306 | 269 | colProps: { span: 12 }, |
307 | 270 | }, |
308 | 271 | { |
... | ... | @@ -311,15 +274,9 @@ export const useTriggerDrawerSchema: FormSchema[] = [ |
311 | 274 | component: 'Select', |
312 | 275 | componentProps: { |
313 | 276 | placeholder: '请选择属性', |
314 | - onChange(v) { | |
315 | - console.log(v); | |
316 | - }, | |
317 | 277 | }, |
318 | - ifShow: ({ values }) => | |
319 | - !isTime(Reflect.get(values, 'triggerType')) && | |
320 | - !isScene(Reflect.get(values, 'triggerType')) && | |
321 | - !isHand(Reflect.get(values, 'triggerType')) && | |
322 | - isUpAndDown(Reflect.get(values, 'type1')), | |
278 | + ifShow: ({ values }) => isDevice(values.triggerType), | |
279 | + dynamicDisabled: ({ values }) => !values.type1, | |
323 | 280 | colProps: { span: 12 }, |
324 | 281 | }, |
325 | 282 | { |
... | ... | @@ -327,7 +284,7 @@ export const useTriggerDrawerSchema: FormSchema[] = [ |
327 | 284 | label: '', |
328 | 285 | component: 'Select', |
329 | 286 | componentProps: { |
330 | - placeholder: '', | |
287 | + placeholder: '请选择比较模式', | |
331 | 288 | options: [ |
332 | 289 | { label: '=', value: 'EQUAL' }, |
333 | 290 | { label: '<', value: 'LESS' }, |
... | ... | @@ -336,48 +293,39 @@ export const useTriggerDrawerSchema: FormSchema[] = [ |
336 | 293 | { label: '>=', value: 'GREATER_OR_EQUAL' }, |
337 | 294 | ], |
338 | 295 | }, |
339 | - ifShow: ({ values }) => isType2(Reflect.get(values, 'type2')), | |
340 | - show: ({ values }) => | |
341 | - !isTime(Reflect.get(values, 'triggerType')) && | |
342 | - !isScene(Reflect.get(values, 'triggerType')) && | |
343 | - !isHand(Reflect.get(values, 'triggerType')), | |
296 | + show: ({ values }) => isDevice(values.triggerType), | |
297 | + dynamicDisabled: ({ values }) => !values.type2, | |
344 | 298 | colProps: { span: 12 }, |
345 | 299 | }, |
346 | 300 | { |
347 | 301 | field: 'value', |
348 | - component: 'Input', | |
349 | 302 | label: '', |
350 | - defaultValue: 0, | |
303 | + component: 'Input', | |
351 | 304 | componentProps: { |
352 | 305 | maxLength: 16, |
353 | 306 | placeholder: '请输入比较值', |
354 | 307 | }, |
355 | - ifShow: ({ values }) => isType2(Reflect.get(values, 'type2')), | |
356 | - show: ({ values }) => | |
357 | - !isTime(Reflect.get(values, 'triggerType')) && | |
358 | - !isScene(Reflect.get(values, 'triggerType')) && | |
359 | - !isHand(Reflect.get(values, 'triggerType')), | |
308 | + show: ({ values }) => isDevice(values.triggerType), | |
309 | + dynamicDisabled: ({ values }) => !values.operation, | |
360 | 310 | colProps: { |
361 | 311 | span: 12, |
362 | 312 | }, |
363 | 313 | }, |
364 | - // { | |
365 | - // field: 'sceneLinkageId', | |
366 | - // label: '', | |
367 | - // component: 'Select', | |
368 | - // colProps: { | |
369 | - // span: 12, | |
370 | - // }, | |
371 | - // componentProps: { | |
372 | - // placeholder: '请选择场景', | |
373 | - // options: [ | |
374 | - // { label: '场景触发器1', value: '' }, | |
375 | - // { label: '场景触发器2', value: '' }, | |
376 | - // ], | |
377 | - // }, | |
378 | - // ifShow: ({ values }) => isScene(Reflect.get(values, 'triggerType')), | |
379 | - // }, | |
314 | + { | |
315 | + field: 'entityId1', | |
316 | + label: '', | |
317 | + component: 'Input', | |
318 | + componentProps: { | |
319 | + maxLength: 255, | |
320 | + placeholder: '请输入Cron表达式', | |
321 | + }, | |
322 | + colProps: { | |
323 | + span: 12, | |
324 | + }, | |
325 | + ifShow: ({ values }) => values.triggerType === TriggerEnum.IS_TIME_ACT, | |
326 | + }, | |
380 | 327 | ]; |
328 | +// !!!----------------------------------------------------^_^------------------------------------------------------------!!! | |
381 | 329 | |
382 | 330 | export const useConditionDrawerSchema: FormSchema[] = [ |
383 | 331 | { |
... | ... | @@ -385,10 +333,10 @@ export const useConditionDrawerSchema: FormSchema[] = [ |
385 | 333 | label: '', |
386 | 334 | component: 'Select', |
387 | 335 | componentProps: { |
388 | - placeholder: '设备状态', | |
336 | + placeholder: '设备触发', | |
389 | 337 | options: [ |
390 | 338 | { label: '设备触发', value: 'DEVICE_TRIGGER' }, |
391 | - { label: '时间范围', value: 'SCHEDULE_TRIGGER' }, | |
339 | + // { label: '时间范围', value: 'SCHEDULE_TRIGGER' }, | |
392 | 340 | ], |
393 | 341 | }, |
394 | 342 | colProps: { span: 12 }, |
... | ... | @@ -402,48 +350,20 @@ export const useConditionDrawerSchema: FormSchema[] = [ |
402 | 350 | placeholder: '请选择设备', |
403 | 351 | }; |
404 | 352 | }, |
405 | - ifShow: ({ values }) => !isTimeAll(Reflect.get(values, 'triggerType')), | |
406 | - colProps: { | |
407 | - span: 12, | |
408 | - }, | |
409 | - }, | |
410 | - { | |
411 | - field: 'createTime', | |
412 | - component: 'DatePicker', | |
413 | - label: '', | |
414 | - componentProps: { | |
415 | - placeholder: '请选择起始时间', | |
416 | - }, | |
417 | - colProps: { | |
418 | - span: 12, | |
419 | - }, | |
420 | - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'triggerType')), | |
421 | - }, | |
422 | - { | |
423 | - field: 'updateTime', | |
424 | - component: 'DatePicker', | |
425 | - label: '', | |
426 | - componentProps: { | |
427 | - placeholder: '请选择结束时间', | |
428 | - }, | |
353 | + ifShow: ({ values }) => isDevice(values.triggerType), | |
429 | 354 | colProps: { |
430 | 355 | span: 12, |
431 | 356 | }, |
432 | - ifShow: ({ values }) => isTimeAll(Reflect.get(values, 'triggerType')), | |
433 | 357 | }, |
434 | 358 | { |
435 | 359 | field: 'type', |
436 | 360 | label: '', |
437 | 361 | component: 'Select', |
438 | - componentProps() { | |
439 | - return { | |
440 | - placeholder: '请选择属性', | |
441 | - onChange(v) { | |
442 | - console.log(v); | |
443 | - }, | |
444 | - }; | |
362 | + componentProps: { | |
363 | + placeholder: '请选择属性', | |
445 | 364 | }, |
446 | - ifShow: ({ values }) => !isTimeAll(Reflect.get(values, 'triggerType')), | |
365 | + ifShow: ({ values }) => isDevice(values.triggerType), | |
366 | + dynamicDisabled: ({ values }) => !values.entityId, | |
447 | 367 | colProps: { span: 12 }, |
448 | 368 | }, |
449 | 369 | { |
... | ... | @@ -451,7 +371,7 @@ export const useConditionDrawerSchema: FormSchema[] = [ |
451 | 371 | label: '', |
452 | 372 | component: 'Select', |
453 | 373 | componentProps: { |
454 | - placeholder: '', | |
374 | + placeholder: '请选择比较模式', | |
455 | 375 | options: [ |
456 | 376 | { label: '=', value: 'EQUAL' }, |
457 | 377 | { label: '<', value: 'LESS' }, |
... | ... | @@ -460,24 +380,53 @@ export const useConditionDrawerSchema: FormSchema[] = [ |
460 | 380 | { label: '>=', value: 'GREATER_OR_EQUAL' }, |
461 | 381 | ], |
462 | 382 | }, |
463 | - ifShow: false, | |
383 | + show: ({ values }) => isDevice(values.triggerType), | |
384 | + dynamicDisabled: ({ values }) => !values.type, | |
464 | 385 | colProps: { span: 12 }, |
465 | 386 | }, |
466 | 387 | { |
467 | 388 | field: 'value', |
468 | - component: 'Input', | |
469 | 389 | label: '', |
390 | + component: 'Input', | |
470 | 391 | componentProps: { |
471 | 392 | maxLength: 16, |
472 | 393 | placeholder: '请输入比较值', |
473 | 394 | }, |
474 | - ifShow: false, | |
395 | + show: ({ values }) => isDevice(values.triggerType), | |
396 | + dynamicDisabled: ({ values }) => !values.operation, | |
475 | 397 | colProps: { |
476 | 398 | span: 12, |
477 | 399 | }, |
478 | 400 | }, |
401 | + // { | |
402 | + // field: 'createTime', | |
403 | + // component: 'DatePicker', | |
404 | + // label: 'createTime', | |
405 | + // componentProps: { | |
406 | + // placeholder: '请选择起始时间', | |
407 | + // }, | |
408 | + // colProps: { | |
409 | + // span: 12, | |
410 | + // }, | |
411 | + // ifShow: ({ values }) => isTimeAll(values.triggerType), | |
412 | + // }, | |
413 | + // { | |
414 | + // field: 'updateTime', | |
415 | + // component: 'DatePicker', | |
416 | + // label: 'updateTime', | |
417 | + // componentProps: { | |
418 | + // placeholder: '请选择结束时间', | |
419 | + // }, | |
420 | + // colProps: { | |
421 | + // span: 12, | |
422 | + // }, | |
423 | + // ifShow: ({ values }) => isTimeAll(values.triggerType), | |
424 | + // }, | |
479 | 425 | ]; |
480 | - | |
426 | +enum ActionEnum { | |
427 | + DEVICE_OUT = 'DEVICE_OUT', | |
428 | +} | |
429 | +const isDeviceOut = (type: string) => type === ActionEnum.DEVICE_OUT; | |
481 | 430 | export const useActionDrawerSchema: FormSchema[] = [ |
482 | 431 | { |
483 | 432 | field: 'outTarget', |
... | ... | @@ -488,8 +437,8 @@ export const useActionDrawerSchema: FormSchema[] = [ |
488 | 437 | placeholder: '设备输出', |
489 | 438 | options: [ |
490 | 439 | { label: '设备输出', value: 'DEVICE_OUT' }, |
491 | - { label: '消息通知', value: 'MSG_NOTIFY' }, | |
492 | - { label: '场景联动', value: 'SCENE_TRIGGER' }, | |
440 | + // { label: '消息通知', value: 'MSG_NOTIFY' }, | |
441 | + // { label: '场景联动', value: 'SCENE_TRIGGER' }, | |
493 | 442 | ], |
494 | 443 | }, |
495 | 444 | colProps: { span: 12 }, |
... | ... | @@ -497,12 +446,12 @@ export const useActionDrawerSchema: FormSchema[] = [ |
497 | 446 | { |
498 | 447 | field: 'deviceId', |
499 | 448 | label: '', |
449 | + required: true, | |
500 | 450 | component: 'Select', |
501 | 451 | componentProps: { |
502 | 452 | placeholder: '请选择设备', |
503 | 453 | }, |
504 | - ifShow: ({ values }) => | |
505 | - !isScene(Reflect.get(values, 'outTarget')) && !isMsg(Reflect.get(values, 'outTarget')), | |
454 | + ifShow: ({ values }) => isDeviceOut(values.outTarget), | |
506 | 455 | colProps: { |
507 | 456 | span: 12, |
508 | 457 | }, |
... | ... | @@ -511,86 +460,67 @@ export const useActionDrawerSchema: FormSchema[] = [ |
511 | 460 | field: 'doContext', |
512 | 461 | component: 'InputTextArea', |
513 | 462 | label: '', |
514 | - // defaultValue: | |
515 | - // '{"method": "setDOValue","params": {"devID": "492S211218028819","data": {"DO1": 1}}}', | |
516 | 463 | componentProps: { |
517 | 464 | maxLength: 255, |
518 | - placeholder: '请输入下发指定', | |
519 | 465 | }, |
520 | - ifShow: ({ values }) => | |
521 | - !isScene(Reflect.get(values, 'outTarget')) && !isMsg(Reflect.get(values, 'outTarget')), | |
466 | + slot: 'doContext', | |
467 | + show: ({ values }) => isDeviceOut(values.outTarget), | |
522 | 468 | colProps: { |
523 | 469 | span: 12, |
524 | 470 | }, |
525 | 471 | }, |
526 | 472 | // { |
527 | - // field: 'no', | |
528 | - // component: 'InputTextArea', | |
473 | + // field: 'wu2', | |
474 | + // component: 'Input', | |
529 | 475 | // label: '', |
530 | - // defaultValue: | |
531 | - // '(可复制)下发指定格式(JSON格式:{"method": "setDOValue","params": {"devID": "492S211218028819","data": {"DO1": 1}})', | |
532 | 476 | // componentProps: { |
533 | - // maxLength: 255, | |
534 | - // disabled: true, | |
477 | + // placeholder: '暂不实现', | |
535 | 478 | // }, |
536 | - // ifShow: ({ values }) => | |
537 | - // !isScene(Reflect.get(values, 'outTarget')) && !isMsg(Reflect.get(values, 'outTarget')), | |
538 | 479 | // colProps: { |
539 | 480 | // span: 12, |
540 | 481 | // }, |
482 | + // ifShow: ({ values }) => isMsg(Reflect.get(values, 'outTarget')), | |
483 | + // }, | |
484 | + // { | |
485 | + // field: 'wu3', | |
486 | + // label: '', | |
487 | + // component: 'Input', | |
488 | + // componentProps: { | |
489 | + // placeholder: '无', | |
490 | + // style: { | |
491 | + // visibility: 'hidden', | |
492 | + // }, | |
493 | + // }, | |
494 | + // colProps: { span: 12 }, | |
495 | + // ifShow: ({ values }) => isMsg(Reflect.get(values, 'outTarget')), | |
496 | + // }, | |
497 | + // { | |
498 | + // field: 'entityId', | |
499 | + // label: '', | |
500 | + // component: 'Select', | |
501 | + // colProps: { | |
502 | + // span: 12, | |
503 | + // }, | |
504 | + // componentProps: { | |
505 | + // placeholder: '请选择场景', | |
506 | + // options: [ | |
507 | + // { label: '场景触发器1', value: '1' }, | |
508 | + // { label: '场景触发器2', value: '2' }, | |
509 | + // ], | |
510 | + // }, | |
511 | + // ifShow: ({ values }) => isScene(Reflect.get(values, 'outTarget')), | |
512 | + // }, | |
513 | + // { | |
514 | + // field: 'wu4', | |
515 | + // label: '', | |
516 | + // component: 'Input', | |
517 | + // componentProps: { | |
518 | + // placeholder: '无', | |
519 | + // style: { | |
520 | + // visibility: 'hidden', | |
521 | + // }, | |
522 | + // }, | |
523 | + // colProps: { span: 12 }, | |
524 | + // ifShow: ({ values }) => isScene(Reflect.get(values, 'outTarget')), | |
541 | 525 | // }, |
542 | - { | |
543 | - field: 'wu2', | |
544 | - component: 'Input', | |
545 | - label: '', | |
546 | - componentProps: { | |
547 | - placeholder: '暂不实现', | |
548 | - }, | |
549 | - colProps: { | |
550 | - span: 12, | |
551 | - }, | |
552 | - ifShow: ({ values }) => isMsg(Reflect.get(values, 'outTarget')), | |
553 | - }, | |
554 | - { | |
555 | - field: 'wu3', | |
556 | - label: '', | |
557 | - component: 'Input', | |
558 | - componentProps: { | |
559 | - placeholder: '无', | |
560 | - style: { | |
561 | - visibility: 'hidden', | |
562 | - }, | |
563 | - }, | |
564 | - colProps: { span: 12 }, | |
565 | - ifShow: ({ values }) => isMsg(Reflect.get(values, 'outTarget')), | |
566 | - }, | |
567 | - { | |
568 | - field: 'entityId', | |
569 | - label: '', | |
570 | - component: 'Select', | |
571 | - colProps: { | |
572 | - span: 12, | |
573 | - }, | |
574 | - componentProps: { | |
575 | - placeholder: '请选择场景', | |
576 | - options: [ | |
577 | - { label: '场景触发器1', value: '1' }, | |
578 | - { label: '场景触发器2', value: '2' }, | |
579 | - ], | |
580 | - }, | |
581 | - ifShow: ({ values }) => isScene(Reflect.get(values, 'outTarget')), | |
582 | - }, | |
583 | - { | |
584 | - field: 'wu4', | |
585 | - label: '', | |
586 | - component: 'Input', | |
587 | - componentProps: { | |
588 | - placeholder: '无', | |
589 | - style: { | |
590 | - visibility: 'hidden', | |
591 | - }, | |
592 | - }, | |
593 | - colProps: { span: 12 }, | |
594 | - ifShow: ({ values }) => isScene(Reflect.get(values, 'outTarget')), | |
595 | - }, | |
596 | 526 | ]; | ... | ... |
1 | 1 | <template> |
2 | - <CollapseContainer class="prefixRedDot" style="background-color: #eeeeee"> | |
3 | - <div style="position: relative"> | |
4 | - <BasicForm | |
5 | - :labelWidth="100" | |
6 | - :showResetButton="false" | |
7 | - :showSubmitButton="false" | |
8 | - :emptySpan="10" | |
9 | - @register="registerAction" | |
10 | - /> | |
11 | - </div> | |
2 | + <CollapseContainer style="background-color: #eeeeee" :title="`执行动作 ${actionIndex + 1}`"> | |
3 | + <template #action> | |
4 | + <Tooltip title="移除" v-if="actionData.length > 1"> | |
5 | + <Icon | |
6 | + icon="fluent:delete-off-20-regular" | |
7 | + size="20" | |
8 | + class="mr-2 cursor-pointer" | |
9 | + @click="handleDelete(actionIndex)" | |
10 | + /> | |
11 | + </Tooltip> | |
12 | + </template> | |
13 | + <BasicForm @register="registerAction"> | |
14 | + <template #doContext> | |
15 | + <div class="flex"> | |
16 | + <div ref="jsoneditorRef" style="height: 100%; width: 100%"></div> | |
17 | + <Tooltip | |
18 | + title='{"method":"setDOValue","params":{"devID":"492S211218028819","data":{"DO1":1}}}' | |
19 | + class="ml-2" | |
20 | + > | |
21 | + <QuestionCircleOutlined style="font-size: 1rem" | |
22 | + /></Tooltip> | |
23 | + </div> | |
24 | + </template> | |
25 | + </BasicForm> | |
12 | 26 | </CollapseContainer> |
13 | 27 | </template> |
14 | 28 | <script lang="ts"> |
15 | - import { defineComponent, reactive, ref } from 'vue'; | |
29 | + import { defineComponent, ref, onMounted, nextTick, unref } from 'vue'; | |
16 | 30 | import { CollapseContainer } from '/@/components/Container/index'; |
17 | 31 | import { BasicForm, useForm } from '/@/components/Form/index'; |
18 | - import { Input } from 'ant-design-vue'; | |
32 | + import { Tooltip } from 'ant-design-vue'; | |
33 | + import { Icon } from '/@/components/Icon'; | |
19 | 34 | import { useActionDrawerSchema } from '../config'; |
35 | + import jsoneditor from 'jsoneditor'; | |
36 | + import 'jsoneditor/dist/jsoneditor.min.css'; | |
37 | + import { Tooltip } from 'ant-design-vue'; | |
38 | + import { QuestionCircleOutlined } from '@ant-design/icons-vue'; | |
20 | 39 | |
21 | 40 | export default defineComponent({ |
22 | - components: { CollapseContainer, BasicForm, [Input.name]: Input }, | |
23 | - props: ['bindActionFather', 'bindActionEntryIdFather'], | |
24 | - setup(props) { | |
25 | - let fieldValue = reactive({}); | |
26 | - const option = ref<[]>([]); | |
27 | - const [registerAction, { setFieldsValue, getFieldsValue, resetFields, updateSchema }] = | |
28 | - useForm({ | |
29 | - labelWidth: 100, | |
30 | - schemas: useActionDrawerSchema, | |
31 | - actionColOptions: { span: 24 }, | |
32 | - }); | |
33 | - const getFieldsValueFunc = () => { | |
34 | - fieldValue = getFieldsValue(); | |
35 | - return fieldValue; | |
36 | - }; | |
37 | - const resetFieldsValueFunc = () => { | |
38 | - resetFields(); | |
39 | - }; | |
40 | - const updateFieldDeviceId = (v) => { | |
41 | - if (v.length == 0 || v.length > 0) { | |
42 | - option.value = v; | |
43 | - updateSchema({ | |
44 | - field: 'deviceId', | |
45 | - componentProps: { | |
46 | - options: option.value, | |
47 | - }, | |
48 | - }); | |
49 | - } else if (v.length == undefined) { | |
50 | - setTimeout(() => { | |
51 | - updateSchema({ | |
52 | - field: 'deviceId', | |
53 | - componentProps: { | |
54 | - options: v.item, | |
55 | - }, | |
56 | - }); | |
57 | - }, 10); | |
58 | - } | |
59 | - }; | |
60 | - | |
61 | - //回显数据 | |
62 | - const setFieldsFormValueFun = () => { | |
63 | - if (props.bindActionFather !== 1) { | |
64 | - setTimeout(() => { | |
65 | - setFieldsValue(props.bindActionFather); | |
66 | - }, 10); | |
67 | - } | |
68 | - }; | |
69 | - setFieldsFormValueFun(); | |
70 | - const editSelectDevice = () => { | |
71 | - if (props.bindActionEntryIdFather !== 1) { | |
72 | - setTimeout(() => { | |
73 | - updateSchema({ | |
74 | - field: 'deviceId', | |
75 | - componentProps: { | |
76 | - options: props.bindActionEntryIdFather, | |
77 | - }, | |
78 | - }); | |
79 | - }, 10); | |
80 | - } | |
41 | + components: { CollapseContainer, BasicForm, Tooltip, Icon, Tooltip, QuestionCircleOutlined }, | |
42 | + props: { | |
43 | + actionIndex: { | |
44 | + type: Number, | |
45 | + required: true, | |
46 | + }, | |
47 | + actionData: { | |
48 | + type: Array, | |
49 | + default: () => [], | |
50 | + }, | |
51 | + }, | |
52 | + emits: ['deleteAction'], | |
53 | + setup(props, { emit }) { | |
54 | + const [ | |
55 | + registerAction, | |
56 | + { getFieldsValue, resetFields, updateSchema, setFieldsValue, validate }, | |
57 | + ] = useForm({ | |
58 | + schemas: useActionDrawerSchema, | |
59 | + showActionButtonGroup: false, | |
60 | + }); | |
61 | + const getFieldsValueFunc = () => ({ | |
62 | + ...getFieldsValue(), | |
63 | + doContext: unref(jsonInstance.value).get(), | |
64 | + }); | |
65 | + const setFieldsFormValueFun = (fieldsValue) => { | |
66 | + setFieldsValue(fieldsValue); | |
81 | 67 | }; |
82 | - editSelectDevice(); | |
83 | - //新增清空设备选择 | |
84 | - const clearSelectDevice = () => { | |
68 | + const resetFieldsValueFunc = () => resetFields(); | |
69 | + const updateFieldDeviceId = (deviceList) => { | |
85 | 70 | updateSchema({ |
86 | 71 | field: 'deviceId', |
87 | 72 | componentProps: { |
88 | - options: [], | |
73 | + options: deviceList, | |
89 | 74 | }, |
90 | 75 | }); |
91 | 76 | }; |
77 | + const validateForm = () => { | |
78 | + return validate(); | |
79 | + }; | |
80 | + const handleDelete = (actionIndex) => { | |
81 | + emit('deleteAction', actionIndex); | |
82 | + }; | |
83 | + | |
84 | + // json 以及初始化JSON | |
85 | + const jsoneditorRef = ref(); | |
86 | + const jsonValue = ref({}); | |
87 | + const jsonInstance = ref(); | |
88 | + onMounted(() => { | |
89 | + nextTick(() => { | |
90 | + let options = { | |
91 | + mode: 'code', | |
92 | + mainMenuBar: false, | |
93 | + statusBar: false, | |
94 | + onError(err) { | |
95 | + alert('EF1 ->' + err.toString()); | |
96 | + }, | |
97 | + }; | |
98 | + let editor = new jsoneditor(jsoneditorRef.value, options); | |
99 | + editor.set(jsonValue.value); | |
100 | + jsonInstance.value = editor; | |
101 | + }); | |
102 | + }); | |
103 | + | |
104 | + const getJsonValue = () => unref(jsonInstance).get(); | |
105 | + const setJsonValue = (Json) => { | |
106 | + nextTick(() => { | |
107 | + unref(jsonInstance).set(Json); | |
108 | + }); | |
109 | + }; | |
92 | 110 | return { |
93 | 111 | updateFieldDeviceId, |
94 | - clearSelectDevice, | |
95 | - editSelectDevice, | |
96 | 112 | resetFieldsValueFunc, |
97 | 113 | getFieldsValueFunc, |
114 | + validateForm, | |
98 | 115 | registerAction, |
116 | + handleDelete, | |
117 | + setFieldsFormValueFun, | |
118 | + jsoneditorRef, | |
119 | + jsonInstance, | |
120 | + getJsonValue, | |
121 | + setJsonValue, | |
99 | 122 | }; |
100 | 123 | }, |
101 | 124 | }); |
102 | 125 | </script> |
103 | 126 | |
104 | -<style lang="less"> | |
105 | - .prefixRedDot:before { | |
106 | - content: '* '; | |
107 | - color: red; | |
108 | - vertical-align: middle; | |
109 | - display: inline-block; | |
110 | - position: relative; | |
111 | - top: 1vh; | |
112 | - left: 5px; | |
127 | +<style> | |
128 | + .jsoneditor { | |
129 | + border: none; | |
113 | 130 | } |
114 | 131 | </style> | ... | ... |
1 | 1 | <template> |
2 | - <CollapseContainer style="background-color: #eeeeee"> | |
3 | - <div style="position: relative"> | |
4 | - <BasicForm | |
5 | - :labelWidth="100" | |
6 | - :emptySpan="10" | |
7 | - :showResetButton="false" | |
8 | - :showSubmitButton="false" | |
9 | - @register="registerCondition" | |
10 | - /> | |
11 | - </div> | |
2 | + <CollapseContainer style="background-color: #eeeeee" :title="`执行条件 ${conditionIndex + 1}`"> | |
3 | + <template #action> | |
4 | + <Tooltip title="移除"> | |
5 | + <Icon | |
6 | + icon="fluent:delete-off-20-regular" | |
7 | + size="20" | |
8 | + class="mr-2 cursor-pointer" | |
9 | + @click="handleDelete(conditionIndex)" | |
10 | + /> | |
11 | + </Tooltip> | |
12 | + </template> | |
13 | + <BasicForm @register="registerCondition" /> | |
12 | 14 | </CollapseContainer> |
13 | 15 | </template> |
14 | 16 | <script lang="ts"> |
15 | - import { defineComponent, reactive, ref } from 'vue'; | |
17 | + import { defineComponent } from 'vue'; | |
16 | 18 | import { CollapseContainer } from '/@/components/Container/index'; |
17 | 19 | import { BasicForm, useForm } from '/@/components/Form/index'; |
18 | - import { Input } from 'ant-design-vue'; | |
20 | + import { Tooltip } from 'ant-design-vue'; | |
19 | 21 | import { useConditionDrawerSchema } from '../config'; |
20 | 22 | import { screenLinkPageByDeviceIdGetAttribut } from '/@/api/ruleengine/ruleengineApi'; |
23 | + import { Icon } from '/@/components/Icon'; | |
21 | 24 | |
22 | 25 | export default defineComponent({ |
23 | - components: { CollapseContainer, BasicForm, [Input.name]: Input }, | |
24 | - props: ['bindConditionFather', 'bindConditionEntryIdFather'], | |
25 | - setup(props) { | |
26 | - let fieldValue = reactive({}); | |
27 | - const option = ref<[]>([]); | |
28 | - const [registerCondition, { setFieldsValue, getFieldsValue, updateSchema, resetFields }] = | |
26 | + components: { CollapseContainer, BasicForm, Tooltip, Icon }, | |
27 | + props: { | |
28 | + conditionIndex: { | |
29 | + type: Number, | |
30 | + required: true, | |
31 | + }, | |
32 | + }, | |
33 | + emits: ['deleteCondition'], | |
34 | + setup(props, { emit }) { | |
35 | + const [registerCondition, { getFieldsValue, updateSchema, resetFields, setFieldsValue }] = | |
29 | 36 | useForm({ |
30 | - labelWidth: 100, | |
31 | 37 | schemas: useConditionDrawerSchema, |
32 | - actionColOptions: { span: 24 }, | |
38 | + showActionButtonGroup: false, | |
33 | 39 | }); |
34 | - const getFieldsValueFunc = () => { | |
35 | - fieldValue = getFieldsValue(); | |
36 | - return fieldValue; | |
37 | - }; | |
38 | - const resetFieldsValueFunc = () => { | |
39 | - resetFields(); | |
40 | - }; | |
41 | - const updateFieldDeviceId = (v) => { | |
42 | - if (v.length == 0 || v.length > 0) { | |
43 | - option.value = v; | |
44 | - updateSchema({ | |
45 | - field: 'entityId', | |
46 | - componentProps: { | |
47 | - options: option.value, | |
48 | - onChange(e) { | |
49 | - if (e) { | |
50 | - setTimeout(() => { | |
51 | - updateFieldAttributeFunc(e); | |
52 | - }, 10); | |
53 | - } | |
54 | - }, | |
40 | + const getFieldsValueFunc = () => getFieldsValue(); | |
41 | + const resetFieldsValueFunc = () => resetFields(); | |
42 | + const updateFieldDeviceId = (deviceList: any[]) => { | |
43 | + updateSchema({ | |
44 | + field: 'entityId', | |
45 | + componentProps: { | |
46 | + options: deviceList, | |
47 | + onChange(e) { | |
48 | + if (e) { | |
49 | + updateFieldAttributeFunc(e); | |
50 | + } | |
55 | 51 | }, |
56 | - }); | |
57 | - } else if (v.length == undefined) { | |
58 | - setTimeout(() => { | |
59 | - updateSchema({ | |
60 | - field: 'entityId', | |
61 | - componentProps: { | |
62 | - options: v.item, | |
63 | - onChange(e) { | |
64 | - if (e) { | |
65 | - setTimeout(() => { | |
66 | - updateFieldAttributeFunc(e); | |
67 | - }, 10); | |
68 | - } | |
69 | - }, | |
70 | - }, | |
71 | - }); | |
72 | - }, 10); | |
73 | - } | |
52 | + }, | |
53 | + }); | |
74 | 54 | }; |
75 | 55 | const updateFieldAttributeFunc = async (e) => { |
76 | 56 | const data1 = await screenLinkPageByDeviceIdGetAttribut('DEVICE', e); |
... | ... | @@ -80,76 +60,42 @@ |
80 | 60 | value: m, |
81 | 61 | }; |
82 | 62 | }); |
83 | - setTimeout(() => { | |
84 | - updateSchema({ | |
85 | - field: 'type', | |
86 | - componentProps() { | |
87 | - return { | |
88 | - placeholder: '请选择属性', | |
89 | - options: data, | |
90 | - onChange(e) { | |
91 | - if (e) { | |
92 | - updateSchema([ | |
93 | - { | |
94 | - field: 'operation', | |
95 | - ifShow: true, | |
96 | - }, | |
97 | - { | |
98 | - field: 'value', | |
99 | - ifShow: true, | |
100 | - }, | |
101 | - ]); | |
102 | - } else { | |
103 | - updateSchema([ | |
104 | - { | |
105 | - field: 'operation', | |
106 | - ifShow: false, | |
107 | - }, | |
108 | - { | |
109 | - field: 'value', | |
110 | - ifShow: false, | |
111 | - }, | |
112 | - ]); | |
113 | - } | |
114 | - }, | |
115 | - }; | |
116 | - }, | |
117 | - }); | |
118 | - }, 10); | |
119 | - }; | |
120 | - const clearSelectAttribute = () => { | |
121 | 63 | updateSchema({ |
122 | 64 | field: 'type', |
123 | 65 | componentProps: { |
124 | - options: [], | |
66 | + placeholder: '请选择属性', | |
67 | + options: data, | |
68 | + onChange(e) { | |
69 | + if (e) { | |
70 | + updateSchema([ | |
71 | + { | |
72 | + field: 'operation', | |
73 | + ifShow: true, | |
74 | + }, | |
75 | + { | |
76 | + field: 'value', | |
77 | + ifShow: true, | |
78 | + }, | |
79 | + ]); | |
80 | + } else { | |
81 | + updateSchema([ | |
82 | + { | |
83 | + field: 'operation', | |
84 | + ifShow: false, | |
85 | + }, | |
86 | + { | |
87 | + field: 'value', | |
88 | + ifShow: false, | |
89 | + }, | |
90 | + ]); | |
91 | + } | |
92 | + }, | |
125 | 93 | }, |
126 | 94 | }); |
127 | 95 | }; |
128 | - //回显数据 | |
129 | - const setFieldsFormValueFun = () => { | |
130 | - if (props.bindConditionFather !== 1) { | |
131 | - setTimeout(() => { | |
132 | - setFieldsValue(props.bindConditionFather); | |
133 | - setFieldsValue({ | |
134 | - type: | |
135 | - props.bindConditionFather?.triggerCondition?.condition[0]?.valueType == 'NUMERIC' | |
136 | - ? 'NUMERIC1' | |
137 | - : 'NUMERIC2', | |
138 | - operation1: | |
139 | - props.bindConditionFather?.triggerCondition?.condition[0]?.predicate?.operation, | |
140 | - operation2: | |
141 | - props.bindConditionFather?.triggerCondition?.condition[0]?.predicate?.operation, | |
142 | - value1: | |
143 | - props.bindConditionFather?.triggerCondition?.condition[0]?.predicate?.value | |
144 | - ?.defaultValue, | |
145 | - value2: | |
146 | - props.bindConditionFather?.triggerCondition?.condition[0]?.predicate?.value | |
147 | - ?.defaultValue, | |
148 | - }); | |
149 | - }, 100); | |
150 | - } | |
96 | + const setFieldsFormValueFun = (fieldsValue) => { | |
97 | + setFieldsValue(fieldsValue); | |
151 | 98 | }; |
152 | - setFieldsFormValueFun(); | |
153 | 99 | const editSelectDevice = () => { |
154 | 100 | if (props.bindConditionEntryIdFather !== 1) { |
155 | 101 | setTimeout(() => { |
... | ... | @@ -162,25 +108,19 @@ |
162 | 108 | }, 100); |
163 | 109 | } |
164 | 110 | }; |
165 | - editSelectDevice(); | |
166 | - //新增清空设备选择 | |
167 | - const clearSelectDevice = () => { | |
168 | - updateSchema({ | |
169 | - field: 'entityId', | |
170 | - componentProps: { | |
171 | - options: [], | |
172 | - }, | |
173 | - }); | |
174 | - }; | |
175 | 111 | |
112 | + const handleDelete = (conditionIndex) => { | |
113 | + emit('deleteCondition', conditionIndex); | |
114 | + }; | |
176 | 115 | return { |
177 | 116 | updateFieldDeviceId, |
178 | - clearSelectDevice, | |
179 | 117 | editSelectDevice, |
180 | 118 | getFieldsValueFunc, |
181 | 119 | registerCondition, |
182 | 120 | resetFieldsValueFunc, |
183 | - clearSelectAttribute, | |
121 | + handleDelete, | |
122 | + | |
123 | + setFieldsFormValueFun, | |
184 | 124 | }; |
185 | 125 | }, |
186 | 126 | }); | ... | ... |
1 | -export const formatTriggerData = (m) => { | |
1 | +export const formatTriggerData = (triggerData) => { | |
2 | + const { triggerType, entityId, type1, type2, operation, value } = triggerData; | |
2 | 3 | return { |
3 | - triggerType: m?.triggerType, | |
4 | - entityId: m?.entityId || m?.entityId1 || m?.entityId2, | |
4 | + triggerType, | |
5 | + entityId, | |
5 | 6 | triggerCondition: { |
6 | 7 | condition: [ |
7 | 8 | { |
8 | 9 | key: { |
9 | - key: m.type2 == null ? 'CO2' : m.type2, | |
10 | - type: m.type1 == null ? 'TIME_SERIES' : m.type1, | |
10 | + type: type1, | |
11 | + key: type2, | |
11 | 12 | }, |
12 | 13 | valueType: 'NUMERIC', |
13 | 14 | predicate: { |
14 | 15 | type: 'NUMERIC', |
16 | + operation: operation, | |
15 | 17 | value: { |
16 | - defaultValue: Number(m.value), | |
18 | + defaultValue: Number(value), | |
17 | 19 | }, |
18 | - operation: m.operation == null ? 'EQUAL' : m.operation, | |
19 | 20 | }, |
20 | 21 | }, |
21 | 22 | ], |
... | ... | @@ -26,25 +27,25 @@ export const formatTriggerData = (m) => { |
26 | 27 | }; |
27 | 28 | }; |
28 | 29 | |
29 | -export const formatConditionData = (m) => { | |
30 | +export const formatConditionData = (conditionData) => { | |
31 | + const { triggerType, entityId, type, operation, value } = conditionData; | |
30 | 32 | return { |
31 | - triggerType: m?.triggerType, | |
32 | - entityId: m?.entityId, | |
33 | + triggerType, | |
34 | + entityId, | |
33 | 35 | triggerCondition: { |
34 | 36 | condition: [ |
35 | 37 | { |
36 | 38 | key: { |
37 | - key: m.type == null ? 'CO2' : m.type, | |
39 | + key: type, | |
38 | 40 | type: 'TIME_SERIES', |
39 | 41 | }, |
40 | 42 | valueType: 'NUMERIC', |
41 | - // value: {}, | |
42 | 43 | predicate: { |
43 | 44 | type: 'NUMERIC', |
44 | 45 | value: { |
45 | - defaultValue: Number(m.value) == null ? 0 : Number(m.value), | |
46 | + defaultValue: Number(value), | |
46 | 47 | }, |
47 | - operation: m.operation, | |
48 | + operation: operation, | |
48 | 49 | }, |
49 | 50 | }, |
50 | 51 | ], | ... | ... |
1 | 1 | <template> |
2 | 2 | <div> |
3 | - <CollapseContainer style="background-color: #eeeeee"> | |
4 | - <div> | |
5 | - <BasicForm | |
6 | - :labelWidth="100" | |
7 | - :showResetButton="false" | |
8 | - :showSubmitButton="false" | |
9 | - :emptySpan="10" | |
10 | - @register="registerForm" | |
11 | - /> | |
12 | - </div> | |
3 | + <CollapseContainer style="background-color: #eee" :title="`触发器 ${triggerIndex + 1}`"> | |
4 | + <template #action> | |
5 | + <Tooltip title="移除"> | |
6 | + <Icon | |
7 | + icon="fluent:delete-off-20-regular" | |
8 | + size="20" | |
9 | + class="mr-2 cursor-pointer" | |
10 | + @click="handleDelete(triggerIndex)" | |
11 | + /> | |
12 | + </Tooltip> | |
13 | + </template> | |
14 | + <BasicForm @register="registerForm" /> | |
13 | 15 | </CollapseContainer> |
14 | 16 | </div> |
15 | 17 | </template> |
16 | 18 | <script lang="ts"> |
17 | - import { defineComponent, reactive, ref } from 'vue'; | |
19 | + import { defineComponent } from 'vue'; | |
18 | 20 | import { CollapseContainer } from '/@/components/Container/index'; |
19 | 21 | import { BasicForm, useForm } from '/@/components/Form/index'; |
20 | - import { Input } from 'ant-design-vue'; | |
22 | + import { Icon } from '/@/components/Icon'; | |
23 | + import { Tooltip } from 'ant-design-vue'; | |
21 | 24 | import { useTriggerDrawerSchema } from '../config'; |
22 | 25 | import { screenLinkPageByDeviceIdGetAttribut } from '/@/api/ruleengine/ruleengineApi'; |
23 | - | |
24 | 26 | export default defineComponent({ |
25 | - components: { CollapseContainer, BasicForm, [Input.name]: Input }, | |
26 | - props: ['bindTriggerFather', 'bindTriggerEntryIdFather'], | |
27 | - setup(props) { | |
28 | - let fieldValue = reactive({}); | |
29 | - const option = ref<[]>([]); | |
30 | - const data = ref<[]>([]); | |
31 | - const [registerForm, { setFieldsValue, resetFields, getFieldsValue, updateSchema }] = useForm( | |
27 | + components: { CollapseContainer, BasicForm, Icon, Tooltip }, | |
28 | + props: { | |
29 | + triggerIndex: { | |
30 | + type: Number, | |
31 | + required: true, | |
32 | + }, | |
33 | + }, | |
34 | + emits: ['deleteTrigger'], | |
35 | + setup(props, { emit }) { | |
36 | + const [registerForm, { resetFields, getFieldsValue, updateSchema, setFieldsValue }] = useForm( | |
32 | 37 | { |
33 | - labelWidth: 100, | |
34 | 38 | schemas: useTriggerDrawerSchema, |
35 | - actionColOptions: { span: 24 }, | |
39 | + showActionButtonGroup: false, | |
36 | 40 | } |
37 | 41 | ); |
38 | - const getFieldsValueFunc = () => { | |
39 | - fieldValue = getFieldsValue(); | |
40 | - return fieldValue; | |
41 | - }; | |
42 | - const updateFieldDeviceId = (v) => { | |
43 | - if (v.length == 0 || v.length > 0) { | |
44 | - option.value = v; | |
45 | - updateSchema({ | |
46 | - field: 'entityId', | |
47 | - componentProps: { | |
48 | - options: option.value, | |
49 | - onChange(e) { | |
50 | - if (e) { | |
51 | - setTimeout(() => { | |
52 | - updateFieldAttributeFunc(e); | |
53 | - }, 10); | |
54 | - } | |
55 | - }, | |
42 | + const getFieldsValueFunc = () => getFieldsValue(); | |
43 | + | |
44 | + const updateFieldDeviceId = (deviceList: any[]) => { | |
45 | + updateSchema({ | |
46 | + field: 'entityId', | |
47 | + componentProps: { | |
48 | + options: deviceList, | |
49 | + onChange(e) { | |
50 | + if (e) { | |
51 | + updateFieldAttributeFunc(e); | |
52 | + } | |
56 | 53 | }, |
57 | - }); | |
58 | - } else if (v.length == undefined) { | |
59 | - setTimeout(() => { | |
60 | - updateSchema({ | |
61 | - field: 'entityId', | |
62 | - componentProps: { | |
63 | - options: v.item, | |
64 | - onChange(e) { | |
65 | - if (e) { | |
66 | - setTimeout(() => { | |
67 | - updateFieldAttributeFunc(e); | |
68 | - }, 10); | |
69 | - } | |
70 | - }, | |
71 | - }, | |
72 | - }); | |
73 | - }, 10); | |
74 | - } | |
54 | + }, | |
55 | + }); | |
75 | 56 | }; |
76 | 57 | const updateFieldAttributeFunc = async (e) => { |
77 | 58 | const data1 = await screenLinkPageByDeviceIdGetAttribut('DEVICE', e); |
78 | - data.value = data1.map((m) => { | |
59 | + const options = data1.map((m) => { | |
79 | 60 | return { |
80 | 61 | label: m, |
81 | 62 | value: m, |
... | ... | @@ -85,9 +66,9 @@ |
85 | 66 | field: 'type2', |
86 | 67 | componentProps: { |
87 | 68 | placeholder: '请选择属性', |
88 | - options: data.value, | |
89 | - onChange(e) { | |
90 | - if (e) { | |
69 | + options, | |
70 | + onChange(value) { | |
71 | + if (value) { | |
91 | 72 | updateSchema([ |
92 | 73 | { |
93 | 74 | field: 'operation', |
... | ... | @@ -98,109 +79,62 @@ |
98 | 79 | ifShow: true, |
99 | 80 | }, |
100 | 81 | ]); |
101 | - } else { | |
102 | - updateSchema([ | |
103 | - { | |
104 | - field: 'operation', | |
105 | - ifShow: false, | |
106 | - }, | |
107 | - { | |
108 | - field: 'value', | |
109 | - ifShow: false, | |
110 | - }, | |
111 | - ]); | |
82 | + setFieldsValue({ | |
83 | + operation: '', | |
84 | + value: '', | |
85 | + }); | |
86 | + return; | |
112 | 87 | } |
113 | - }, | |
114 | - }, | |
115 | - }); | |
116 | - }; | |
117 | - const updateOperatorAndValue = () => { | |
118 | - updateSchema([ | |
119 | - { | |
120 | - field: 'operation', | |
121 | - ifShow: false, | |
122 | - }, | |
123 | - { | |
124 | - field: 'value', | |
125 | - ifShow: false, | |
126 | - }, | |
127 | - ]); | |
128 | - }; | |
129 | - const resetFieldsValueFunc = () => { | |
130 | - resetFields(); | |
131 | - }; | |
132 | - //回显数据 | |
133 | - const setFieldsFormValueFun = () => { | |
134 | - if (props.bindTriggerFather != 1) { | |
135 | - setTimeout(() => { | |
136 | - setFieldsValue(props.bindTriggerFather); | |
137 | - setFieldsValue({ | |
138 | - entityId1: props.bindTriggerFather.entityId, | |
139 | - entityId2: props.bindTriggerFather.entityId, | |
140 | - type1: props.bindTriggerFather?.triggerCondition?.condition[0]?.key?.type, | |
141 | - type2: props.bindTriggerFather?.triggerCondition?.condition[0]?.key?.key, | |
142 | - operation: | |
143 | - props.bindTriggerFather?.triggerCondition?.condition[0]?.predicate?.operation, | |
144 | - value: | |
145 | - props.bindTriggerFather?.triggerCondition?.condition[0]?.predicate?.value | |
146 | - ?.defaultValue, | |
147 | - }); | |
148 | - if (props.bindTriggerFather?.triggerCondition?.condition[0]?.key?.key) { | |
149 | 88 | updateSchema([ |
150 | 89 | { |
151 | 90 | field: 'operation', |
152 | - ifShow: true, | |
91 | + ifShow: false, | |
153 | 92 | }, |
154 | 93 | { |
155 | 94 | field: 'value', |
156 | - ifShow: true, | |
95 | + ifShow: false, | |
157 | 96 | }, |
158 | 97 | ]); |
159 | - } | |
160 | - }, 1); | |
161 | - } | |
162 | - }; | |
163 | - setFieldsFormValueFun(); | |
164 | - //新增清空设备选择 | |
165 | - const clearSelectDevice = () => { | |
166 | - updateSchema({ | |
167 | - field: 'entityId', | |
168 | - componentProps: { | |
169 | - options: [], | |
98 | + setFieldsValue({ | |
99 | + operation: '', | |
100 | + value: '', | |
101 | + }); | |
102 | + }, | |
170 | 103 | }, |
171 | 104 | }); |
172 | 105 | }; |
173 | - const clearSelectAttribute = () => { | |
174 | - updateSchema({ | |
175 | - field: 'type2', | |
176 | - componentProps: { | |
177 | - options: [], | |
178 | - }, | |
179 | - }); | |
106 | + | |
107 | + const resetFieldsValueFunc = () => resetFields(); | |
108 | + // 回显数据函数 | |
109 | + const setFieldsFormValueFun = (fieldsValue) => { | |
110 | + setFieldsValue(fieldsValue); | |
180 | 111 | }; |
112 | + | |
181 | 113 | const editSelectDevice = () => { |
182 | 114 | if (props.bindTriggerEntryIdFather != 1) { |
183 | - setTimeout(() => { | |
184 | - updateSchema({ | |
185 | - field: 'entityId', | |
186 | - componentProps: { | |
187 | - options: props.bindTriggerEntryIdFather, | |
188 | - }, | |
189 | - }); | |
190 | - }, 100); | |
115 | + updateSchema({ | |
116 | + field: 'entityId', | |
117 | + componentProps: { | |
118 | + options: props.bindTriggerEntryIdFather, | |
119 | + }, | |
120 | + }); | |
191 | 121 | } |
192 | 122 | }; |
193 | - editSelectDevice(); | |
123 | + // editSelectDevice(); | |
124 | + | |
125 | + const handleDelete = (triggerIndex) => { | |
126 | + emit('deleteTrigger', triggerIndex); | |
127 | + }; | |
194 | 128 | return { |
195 | - updateOperatorAndValue, | |
196 | - clearSelectAttribute, | |
197 | 129 | updateFieldAttributeFunc, |
198 | 130 | updateFieldDeviceId, |
199 | 131 | resetFieldsValueFunc, |
200 | - clearSelectDevice, | |
201 | 132 | editSelectDevice, |
202 | 133 | getFieldsValueFunc, |
203 | 134 | registerForm, |
135 | + handleDelete, | |
136 | + | |
137 | + setFieldsFormValueFun, | |
204 | 138 | }; |
205 | 139 | }, |
206 | 140 | }); | ... | ... |
src/views/rule/linkedge/index.ts
deleted
100644 → 0
1 | -export interface IAddTrigger { | |
2 | - triggerType: string; | |
3 | - entityId: string; | |
4 | - touchWay: string; | |
5 | - attributeChoose: string; | |
6 | - compare: string; | |
7 | - value: string; | |
8 | -} | |
9 | - | |
10 | -export interface IAddCondition { | |
11 | - triggerType: string; | |
12 | - entityId: string; | |
13 | - createTime: string; | |
14 | - updateTime: string; | |
15 | - compare: string; | |
16 | - value: string; | |
17 | -} | |
18 | - | |
19 | -export interface IAddAction { | |
20 | - outTarget: string; | |
21 | - deviceId: string; | |
22 | - command: string; | |
23 | - sceneLinkageId: string; | |
24 | -} |
1 | 1 | <template> |
2 | 2 | <div> |
3 | - <BasicTable | |
4 | - @register="registerTable" | |
5 | - @selection-change="useSelectionChange" | |
6 | - :rowSelection="{ type: 'checkbox' }" | |
7 | - > | |
3 | + <BasicTable @register="registerTable"> | |
8 | 4 | <template #toolbar> |
9 | 5 | <a-button v-if="isTenant || isCustomer || isPlatform" type="primary" @click="handleAdd"> |
10 | 6 | 新增场景联动 |
... | ... | @@ -52,21 +48,18 @@ |
52 | 48 | import { defineComponent, ref, computed } from 'vue'; |
53 | 49 | import { BasicTable, useTable, TableAction } from '/@/components/Table'; |
54 | 50 | import { useDrawer } from '/@/components/Drawer'; |
55 | - import SceneLinkAgeDrawer from './useDrawer.vue'; | |
56 | - import { columns, searchFormSchema } from './config'; | |
57 | - import { useMessage } from '/@/hooks/web/useMessage'; | |
58 | 51 | import { screenLinkPageGetApi, screenLinkPageDeleteApi } from '/@/api/ruleengine/ruleengineApi'; |
59 | 52 | import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; |
60 | 53 | import { RoleEnum } from '/@/enums/roleEnum'; |
61 | - import { usePermission } from '/@/hooks/web/usePermission'; | |
62 | 54 | import { useUserStore } from '/@/store/modules/user'; |
55 | + import { columns, searchFormSchema } from './config'; | |
56 | + import SceneLinkAgeDrawer from './SceneLinkAgeDrawer.vue'; | |
63 | 57 | |
64 | 58 | export default defineComponent({ |
65 | - name: 'Index', | |
59 | + name: 'LinkEdge', | |
66 | 60 | components: { BasicTable, SceneLinkAgeDrawer, TableAction }, |
67 | - emits: ['default', 'registerTable', 'registerDrawer', 'register'], | |
61 | + | |
68 | 62 | setup() { |
69 | - const { hasPermission } = usePermission(); | |
70 | 63 | const userStore = useUserStore(); |
71 | 64 | const isTenant = computed(() => userStore.getRoleList.includes(RoleEnum.TENANT_ADMIN)); |
72 | 65 | const isCustomer = computed(() => userStore.getRoleList.includes(RoleEnum.CUSTOMER_USER)); |
... | ... | @@ -77,10 +70,9 @@ |
77 | 70 | screenLinkPageDeleteApi, |
78 | 71 | handleSuccess |
79 | 72 | ); |
80 | - let selectedRowKeys: Array<string> = []; | |
73 | + | |
81 | 74 | const [registerDrawer, { openDrawer }] = useDrawer(); |
82 | - const { createMessage } = useMessage(); | |
83 | - const [registerTable, { reload, getSelectRowKeys }] = useTable({ | |
75 | + const [registerTable, { reload }] = useTable({ | |
84 | 76 | title: '场景联动列表', |
85 | 77 | api: screenLinkPageGetApi, |
86 | 78 | columns, |
... | ... | @@ -108,32 +100,12 @@ |
108 | 100 | }); |
109 | 101 | } |
110 | 102 | |
111 | - const useSelectionChange = () => { | |
112 | - selectedRowKeys = getSelectRowKeys(); | |
113 | - }; | |
114 | - | |
115 | - async function handleToolbarDel() { | |
116 | - await screenLinkPageDeleteApi(selectedRowKeys); | |
117 | - createMessage.success('删除成功'); | |
118 | - reload(); | |
119 | - } | |
120 | - | |
121 | 103 | function handleEdit(record: Recordable) { |
122 | 104 | openDrawer(true, { |
123 | 105 | record, |
124 | 106 | isUpdate: true, |
125 | 107 | }); |
126 | 108 | } |
127 | - async function handleDelete(record: Recordable) { | |
128 | - try { | |
129 | - let ids = [record.id]; | |
130 | - await screenLinkPageDeleteApi(ids); | |
131 | - createMessage.success('删除成功'); | |
132 | - reload(); | |
133 | - } catch (e) { | |
134 | - return e; | |
135 | - } | |
136 | - } | |
137 | 109 | function handleSuccess() { |
138 | 110 | reload(); |
139 | 111 | } |
... | ... | @@ -142,16 +114,11 @@ |
142 | 114 | isSysadmin, |
143 | 115 | isCustomer, |
144 | 116 | isTenant, |
145 | - RoleEnum, | |
146 | - hasPermission, | |
147 | 117 | sceneLinkAgeDrawerRef, |
148 | - useSelectionChange, | |
149 | 118 | registerTable, |
150 | 119 | registerDrawer, |
151 | 120 | handleAdd, |
152 | - handleToolbarDel, | |
153 | 121 | handleEdit, |
154 | - handleDelete, | |
155 | 122 | handleSuccess, |
156 | 123 | hasBatchDelete, |
157 | 124 | handleDeleteOrBatchDelete, |
... | ... | @@ -160,4 +127,25 @@ |
160 | 127 | }); |
161 | 128 | </script> |
162 | 129 | |
163 | -<style lang="less" scoped></style> | |
130 | +<!-- <script setup lang="ts"> | |
131 | + import { ref, onMounted } from 'vue'; | |
132 | + const refList = ref([]); | |
133 | + const list = ref(['张三', '李四', '王五', '赵牛']); | |
134 | + onMounted(() => { | |
135 | + console.log(refList.value); | |
136 | + }); | |
137 | + let flag = 0; | |
138 | + const add = () => { | |
139 | + refList.value = []; | |
140 | + list.value.push(`哈哈${flag++}`); | |
141 | + console.log(refList.value); | |
142 | + }; | |
143 | +</script> | |
144 | +<template> | |
145 | + <div> | |
146 | + <template v-for="item in list" :key="item"> | |
147 | + <div :ref="(el) => refList.push(el)">{{ item }}</div> | |
148 | + </template> | |
149 | + <a-button @click="add" type="primary" class="ml-4 mt-4">添加元素</a-button> | |
150 | + </div> | |
151 | +</template> --> | ... | ... |
src/views/rule/linkedge/useDrawer.vue
deleted
100644 → 0
1 | -<template> | |
2 | - <div> | |
3 | - <BasicDrawer | |
4 | - v-bind="$attrs" | |
5 | - @register="registerDrawer" | |
6 | - showFooter | |
7 | - width="50vw" | |
8 | - @ok="handleSubmit(drawerStatus)" | |
9 | - @close="handleClose" | |
10 | - > | |
11 | - <div> | |
12 | - <!-- 基础表单 --> | |
13 | - <BasicForm @register="registerForm" /> | |
14 | - <!-- 基础表单 --> | |
15 | - <!-- 触发器 --> | |
16 | - <div style="border-radius: 4px"> | |
17 | - <template | |
18 | - v-for="(item, index) in !drawerStatus ? triggerData : editTriggerData" | |
19 | - :key="index" | |
20 | - > | |
21 | - <span style="display: none">{{ item + index }}</span> | |
22 | - <span style="position: relative; top: 3.2vh; left: 0.6vw">触发器 {{ index + 1 }}</span> | |
23 | - <useTriggerCpn | |
24 | - ref="triggerBindRef" | |
25 | - :bindTriggerFather="!drawerStatus ? 1 : item" | |
26 | - :bindTriggerEntryIdFather="!drawerStatus ? 1 : getTriggerFatherEntryIdData" | |
27 | - /> | |
28 | - </template> | |
29 | - <!-- 按钮 --> | |
30 | - <div | |
31 | - style=" | |
32 | - display: flex; | |
33 | - width: 11vw; | |
34 | - height: 4vh; | |
35 | - flex-direction: row; | |
36 | - justify-content: space-between; | |
37 | - " | |
38 | - > | |
39 | - <div style="display: flex; width: 4vw; height: 4vh"> | |
40 | - <Button | |
41 | - type="primary" | |
42 | - style="border-radius: 2px" | |
43 | - class="mt-5" | |
44 | - @click="triggerClickAdd(drawerStatus)" | |
45 | - >触发器</Button | |
46 | - > | |
47 | - </div> | |
48 | - <div style="display: flex; width: 4vw; height: 4vh"> | |
49 | - <Button | |
50 | - v-if="triggerData.length !== 0 || editTriggerData.length !== 0" | |
51 | - type="default" | |
52 | - style="border-radius: 2px; background-color: rgba(237, 111, 111, 1)" | |
53 | - class="mt-5" | |
54 | - @click="triggerClickRemove(drawerStatus)" | |
55 | - > | |
56 | - <span style="color: white">删除</span></Button | |
57 | - > | |
58 | - </div> | |
59 | - </div> | |
60 | - <!-- 按钮 --> | |
61 | - </div> | |
62 | - <!-- 触发器 --> | |
63 | - <div style="height: 5vh"></div> | |
64 | - <!-- 执行条件 --> | |
65 | - <div style="border-radius: 4px"> | |
66 | - <template | |
67 | - v-for="(item, index) in !drawerStatus ? conditionData : editConditionData" | |
68 | - :key="index" | |
69 | - > | |
70 | - <span style="display: none">{{ item + index }}</span> | |
71 | - <span style="position: relative; top: 3.2vh; left: 0.6vw" | |
72 | - >执行条件 {{ index + 1 }}</span | |
73 | - > | |
74 | - <useConditionCpn | |
75 | - ref="conditionBindRef" | |
76 | - :bindConditionFather="!drawerStatus ? 1 : item" | |
77 | - :bindConditionEntryIdFather="!drawerStatus ? 1 : getConditionFatherEntryIdData" | |
78 | - /> | |
79 | - </template> | |
80 | - <!-- 按钮 --> | |
81 | - <div | |
82 | - style=" | |
83 | - display: flex; | |
84 | - width: 11vw; | |
85 | - height: 4vh; | |
86 | - flex-direction: row; | |
87 | - justify-content: space-between; | |
88 | - " | |
89 | - > | |
90 | - <div style="display: flex; width: 4vw; height: 4vh"> | |
91 | - <Button | |
92 | - type="primary" | |
93 | - style="border-radius: 2px" | |
94 | - class="mt-5" | |
95 | - @click="conditionClickAdd(drawerStatus)" | |
96 | - >执行条件</Button | |
97 | - > | |
98 | - </div> | |
99 | - <div style="display: flex; width: 4vw; height: 4vh"> | |
100 | - <Button | |
101 | - v-if="conditionData.length !== 0 || editConditionData.length !== 0" | |
102 | - type="default" | |
103 | - style="border-radius: 2px; background-color: rgba(237, 111, 111, 1)" | |
104 | - class="mt-5" | |
105 | - @click="conditionClickRemove(drawerStatus)" | |
106 | - > | |
107 | - <span style="color: white">删除</span></Button | |
108 | - > | |
109 | - </div> | |
110 | - </div> | |
111 | - <!-- 按钮 --> | |
112 | - </div> | |
113 | - <!-- 执行条件 --> | |
114 | - <div style="height: 5vh"></div> | |
115 | - <!-- 执行动作 --> | |
116 | - <div style="border-radius: 4px"> | |
117 | - <template | |
118 | - v-for="(item, index) in !drawerStatus ? actionData : editActionData" | |
119 | - :key="index" | |
120 | - > | |
121 | - <span style="display: none">{{ item + index }}</span> | |
122 | - <span style="position: relative; top: 3.6vh; left: 1vw">执行动作 {{ index + 1 }}</span> | |
123 | - <useActionCpn | |
124 | - ref="actionBindRef" | |
125 | - :bindActionFather="!drawerStatus ? 1 : item" | |
126 | - :bindActionEntryIdFather="!drawerStatus ? 1 : getActionFatherEntryIdData" | |
127 | - /> | |
128 | - </template> | |
129 | - <!-- 按钮 --> | |
130 | - <div | |
131 | - style=" | |
132 | - display: flex; | |
133 | - width: 11vw; | |
134 | - height: 4vh; | |
135 | - flex-direction: row; | |
136 | - justify-content: space-between; | |
137 | - " | |
138 | - > | |
139 | - <div style="display: flex; width: 4vw; height: 4vh"> | |
140 | - <Button | |
141 | - type="primary" | |
142 | - style="border-radius: 2px" | |
143 | - class="mt-5" | |
144 | - @click="actionClickAdd(drawerStatus)" | |
145 | - >执行动作</Button | |
146 | - > | |
147 | - </div> | |
148 | - <div style="display: flex; width: 4vw; height: 4vh"> | |
149 | - <Button | |
150 | - v-if="actionData.length !== 0 || editActionData.length !== 0" | |
151 | - type="default" | |
152 | - style="border-radius: 2px; background-color: rgba(237, 111, 111, 1)" | |
153 | - class="mt-5" | |
154 | - @click="actionClickRemove(drawerStatus)" | |
155 | - > | |
156 | - <span style="color: white">删除</span></Button | |
157 | - > | |
158 | - </div> | |
159 | - </div> | |
160 | - <!-- 按钮 --> | |
161 | - </div> | |
162 | - <!-- 执行动作 --> | |
163 | - </div> | |
164 | - </BasicDrawer> | |
165 | - </div> | |
166 | -</template> | |
167 | -<script lang="ts"> | |
168 | - import { defineComponent, reactive, ref, getCurrentInstance, watch } from 'vue'; | |
169 | - import { BasicDrawer, useDrawerInner } from '/@/components/Drawer'; | |
170 | - import { formSchema, changeOriginId } from './config'; | |
171 | - import { BasicForm, useForm } from '/@/components/Form'; | |
172 | - import useTriggerCpn from './cpns/trigger.vue'; | |
173 | - import useConditionCpn from './cpns/condition.vue'; | |
174 | - import useActionCpn from './cpns/action.vue'; | |
175 | - import { Button } from '/@/components/Button'; | |
176 | - import { formatTriggerData, formatConditionData } from './cpns/format-data/index'; | |
177 | - import { useMessage } from '/@/hooks/web/useMessage'; | |
178 | - import { | |
179 | - screenLinkPageAddApi, | |
180 | - screenLinkPageByDeptIdGetDevice, | |
181 | - screenLinkPageUpdateApi, | |
182 | - } from '/@/api/ruleengine/ruleengineApi'; | |
183 | - | |
184 | - export default defineComponent({ | |
185 | - name: 'ConfigDrawer', | |
186 | - components: { | |
187 | - BasicDrawer, | |
188 | - BasicForm, | |
189 | - useTriggerCpn, | |
190 | - useConditionCpn, | |
191 | - useActionCpn, | |
192 | - Button, | |
193 | - }, | |
194 | - emits: ['register', 'success'], | |
195 | - setup(_, { emit }) { | |
196 | - const { proxy } = getCurrentInstance() as any; | |
197 | - const { createMessage } = useMessage(); | |
198 | - const triggerData = reactive([]); | |
199 | - const conditionData = reactive([]); | |
200 | - const actionData = reactive([1]); | |
201 | - const triggerBindRef = ref(null); | |
202 | - const conditionBindRef = ref(null); | |
203 | - const actionBindRef = ref(null); | |
204 | - let getTriggerFormValue: any = reactive({}); | |
205 | - let getConditionFormValue: any = reactive({}); | |
206 | - let getActionFormValue: any = reactive({}); | |
207 | - const drawerStatus = ref(true); | |
208 | - let postAddOrEditData: any = reactive({}); | |
209 | - let concatTrigger: any = reactive([]); | |
210 | - let concatCondition: any = reactive([]); | |
211 | - let concatAction: any = reactive([]); | |
212 | - let optionsItemDeviceId: any = ref([]); | |
213 | - let editTriggerData: any = ref([]); | |
214 | - let editConditionData: any = ref([]); | |
215 | - let editActionData: any = ref([]); | |
216 | - let getTriggerFatherEntryIdData: any = reactive([]); | |
217 | - let getConditionFatherEntryIdData: any = reactive([]); | |
218 | - let getActionFatherEntryIdData: any = reactive([]); | |
219 | - const editEntryIdData: any = ref([]); | |
220 | - const getId = ref(''); | |
221 | - const getTenantId = ref(''); | |
222 | - const [registerForm, { resetFields, validate, setFieldsValue }] = useForm({ | |
223 | - labelWidth: 120, | |
224 | - schemas: formSchema, | |
225 | - showActionButtonGroup: false, | |
226 | - }); | |
227 | - const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => { | |
228 | - setDrawerProps({ confirmLoading: false }); | |
229 | - drawerStatus.value = data.isUpdate; | |
230 | - if (!drawerStatus.value) { | |
231 | - triggerData.length = 0; | |
232 | - conditionData.length = 0; | |
233 | - actionData.length = 0; | |
234 | - resetFields(); | |
235 | - defaultAddAction(); | |
236 | - try { | |
237 | - proxy.$refs.triggerBindRef?.resetFieldsValueFunc(); | |
238 | - proxy.$refs.triggerBindRef?.clearSelectDevice(); | |
239 | - proxy.$refs.triggerBindRef?.clearSelectAttribute(); | |
240 | - proxy.$refs.conditionBindRef?.resetFieldsValueFunc(); | |
241 | - proxy.$refs.conditionBindRef?.clearSelectDevice(); | |
242 | - proxy.$refs.conditionBindRef?.clearSelectAttribute(); | |
243 | - proxy.$refs.actionBindRef?.clearSelectDevice(); | |
244 | - proxy.$refs.actionBindRef.resetFieldsValueFunc(); | |
245 | - } catch {} | |
246 | - } else { | |
247 | - emit('success'); | |
248 | - editTriggerData.value.length = 0; | |
249 | - editConditionData.value.length = 0; | |
250 | - editActionData.value.length = 0; | |
251 | - editEntryIdData.value.length = 0; | |
252 | - await setFieldsValue({ | |
253 | - ...data.record, | |
254 | - }); | |
255 | - getId.value = data.record.id; | |
256 | - getTenantId.value = data.record.tenantId; | |
257 | - editTriggerData.value = data.record.triggers; | |
258 | - editConditionData.value = data.record.doConditions; | |
259 | - editActionData.value = data.record.doActions; | |
260 | - const options = await screenLinkPageByDeptIdGetDevice({ | |
261 | - organizationId: data.record.organizationId, | |
262 | - }); | |
263 | - data.record.triggers.forEach((f1) => { | |
264 | - options.items?.forEach((f2) => { | |
265 | - if (f2.tbDeviceId == f1.entityId) { | |
266 | - getTriggerFatherEntryIdData.push({ | |
267 | - value: f2.tbDeviceId, | |
268 | - label: f2.name, | |
269 | - } as never); | |
270 | - } | |
271 | - }); | |
272 | - }); | |
273 | - data.record.doConditions.forEach((f1) => { | |
274 | - options.items?.forEach((f2) => { | |
275 | - if (f2.tbDeviceId == f1.entityId) { | |
276 | - getConditionFatherEntryIdData.push({ | |
277 | - value: f2.tbDeviceId, | |
278 | - label: f2.name, | |
279 | - } as never); | |
280 | - } | |
281 | - }); | |
282 | - }); | |
283 | - data.record.doActions.forEach((f1) => { | |
284 | - options.items?.forEach((f2) => { | |
285 | - if (f2.tbDeviceId == f1.deviceId) { | |
286 | - getActionFatherEntryIdData.push({ | |
287 | - value: f2.tbDeviceId, | |
288 | - label: f2.name, | |
289 | - } as never); | |
290 | - } | |
291 | - }); | |
292 | - }); | |
293 | - editEntryIdData.value = options.items.map((v) => { | |
294 | - return { | |
295 | - value: v.tbDeviceId, | |
296 | - label: v.name, | |
297 | - }; | |
298 | - }); | |
299 | - setTimeout(() => { | |
300 | - proxy.$refs.triggerBindRef?.updateFieldDeviceId(editEntryIdData.value); | |
301 | - proxy.$refs.conditionBindRef?.updateFieldDeviceId(editEntryIdData.value); | |
302 | - proxy.$refs.actionBindRef?.updateFieldDeviceId(editEntryIdData.value); | |
303 | - }, 10); | |
304 | - } | |
305 | - }); | |
306 | - watch(changeOriginId, async (newV: string) => { | |
307 | - const result = await screenLinkPageByDeptIdGetDevice({ organizationId: newV }); | |
308 | - optionsItemDeviceId.value = result.items.map((v) => { | |
309 | - return { | |
310 | - value: v.tbDeviceId, | |
311 | - label: v.name, | |
312 | - }; | |
313 | - }); | |
314 | - setTimeout(() => { | |
315 | - proxy.$refs.triggerBindRef?.updateFieldDeviceId(optionsItemDeviceId.value); | |
316 | - proxy.$refs.conditionBindRef?.updateFieldDeviceId(optionsItemDeviceId.value); | |
317 | - proxy.$refs.actionBindRef?.updateFieldDeviceId(optionsItemDeviceId.value); | |
318 | - }, 10); | |
319 | - }); | |
320 | - | |
321 | - /** | |
322 | - * 获取触发器表单值 | |
323 | - */ | |
324 | - const getTriggerFormValueFunc = () => { | |
325 | - try { | |
326 | - getTriggerFormValue = proxy.$refs.triggerBindRef.getFieldsValueFunc(); | |
327 | - } catch {} | |
328 | - }; | |
329 | - const triggerClickAdd = (e) => { | |
330 | - if (!e) { | |
331 | - getTriggerFormValueFunc(); | |
332 | - triggerData.push(getTriggerFormValue as never); | |
333 | - setTimeout(() => { | |
334 | - proxy.$refs.triggerBindRef?.updateFieldDeviceId(optionsItemDeviceId.value); | |
335 | - }, 10); | |
336 | - } else { | |
337 | - //TODO | |
338 | - editTriggerData.value.push(getTriggerFormValue); | |
339 | - } | |
340 | - }; | |
341 | - const triggerClickRemove = (e) => { | |
342 | - if (!e) { | |
343 | - triggerData.pop(); | |
344 | - } else { | |
345 | - editTriggerData.value.pop(); | |
346 | - } | |
347 | - }; | |
348 | - | |
349 | - /** | |
350 | - * 获取执行条件表单值 | |
351 | - */ | |
352 | - const getConditionFormValueFunc = () => { | |
353 | - try { | |
354 | - getConditionFormValue = proxy.$refs.conditionBindRef.getFieldsValueFunc(); | |
355 | - } catch {} | |
356 | - }; | |
357 | - const conditionClickAdd = (e) => { | |
358 | - if (!e) { | |
359 | - getConditionFormValueFunc(); | |
360 | - conditionData.push(getConditionFormValue as never); | |
361 | - setTimeout(() => { | |
362 | - proxy.$refs.conditionBindRef?.updateFieldDeviceId(optionsItemDeviceId.value); | |
363 | - }, 10); | |
364 | - } else { | |
365 | - //TODO | |
366 | - } | |
367 | - }; | |
368 | - const conditionClickRemove = (e) => { | |
369 | - if (!e) { | |
370 | - conditionData.pop(); | |
371 | - } else { | |
372 | - editConditionData.value.pop(); | |
373 | - } | |
374 | - }; | |
375 | - | |
376 | - /** | |
377 | - * 获取执行动作表单值 | |
378 | - */ | |
379 | - const getActionFormValueFunc = () => { | |
380 | - try { | |
381 | - getActionFormValue = proxy.$refs.actionBindRef.getFieldsValueFunc(); | |
382 | - } catch {} | |
383 | - }; | |
384 | - //默认新增执行动作 | |
385 | - const defaultAddAction = () => { | |
386 | - if (actionData.length == 0) { | |
387 | - actionClickAdd(false); | |
388 | - } | |
389 | - }; | |
390 | - const actionClickAdd = (e) => { | |
391 | - if (!e) { | |
392 | - getActionFormValueFunc(); | |
393 | - actionData.push(getActionFormValue as never); | |
394 | - setTimeout(() => { | |
395 | - proxy.$refs.actionBindRef?.updateFieldDeviceId(optionsItemDeviceId.value); | |
396 | - }, 10); | |
397 | - } else { | |
398 | - //TODO | |
399 | - } | |
400 | - }; | |
401 | - const actionClickRemove = (e) => { | |
402 | - if (!e) { | |
403 | - actionData.pop(); | |
404 | - } else { | |
405 | - editActionData.value.pop(); | |
406 | - } | |
407 | - }; | |
408 | - const submitOrEditFunc = (e) => { | |
409 | - if (!e) { | |
410 | - getTriggerFormValueFunc(); | |
411 | - concatTrigger = triggerData.concat(getTriggerFormValue); | |
412 | - //去除第一个空对象 | |
413 | - concatTrigger.shift(); | |
414 | - concatTrigger = concatTrigger.map((m) => formatTriggerData(m)); | |
415 | - getConditionFormValueFunc(); | |
416 | - concatCondition = conditionData.concat(getConditionFormValue); | |
417 | - //去除第一个空对象 | |
418 | - concatCondition.shift(); | |
419 | - concatCondition = concatCondition.map((m) => formatConditionData(m)); | |
420 | - getActionFormValueFunc(); | |
421 | - concatAction = actionData.concat(getActionFormValue); | |
422 | - // 去除第一个空对象; | |
423 | - concatAction.shift(); | |
424 | - } else { | |
425 | - //TODO | |
426 | - } | |
427 | - }; | |
428 | - | |
429 | - const handleSubmit = async (e) => { | |
430 | - let basicFormValue = await validate(); | |
431 | - if (!basicFormValue) return; | |
432 | - if (!e) { | |
433 | - submitOrEditFunc(e); | |
434 | - let isKongNum = 0; | |
435 | - concatAction.forEach((f) => { | |
436 | - isKongNum = Object.keys(f).length; | |
437 | - }); | |
438 | - if (concatAction.length == 1 && isKongNum == 0) | |
439 | - return createMessage.error('请填写执行动作'); | |
440 | - postAddOrEditData = { | |
441 | - ...basicFormValue, | |
442 | - ...{ | |
443 | - triggers: concatTrigger, | |
444 | - }, | |
445 | - ...{ | |
446 | - doConditions: concatCondition, | |
447 | - }, | |
448 | - ...{ | |
449 | - doActions: concatAction, | |
450 | - }, | |
451 | - }; | |
452 | - await screenLinkPageAddApi(postAddOrEditData); | |
453 | - createMessage.success('新增成功'); | |
454 | - closeDrawer(); | |
455 | - emit('success'); | |
456 | - } else { | |
457 | - submitOrEditFunc(e); | |
458 | - postAddOrEditData = { | |
459 | - ...basicFormValue, | |
460 | - ...{ id: getId.value }, | |
461 | - ...{ tenantId: getTenantId.value }, | |
462 | - }; | |
463 | - await screenLinkPageUpdateApi(postAddOrEditData); | |
464 | - createMessage.success('编辑成功'); | |
465 | - closeDrawer(); | |
466 | - emit('success'); | |
467 | - } | |
468 | - }; | |
469 | - const handleClose = () => { | |
470 | - closeDrawer(); | |
471 | - }; | |
472 | - | |
473 | - return { | |
474 | - registerDrawer, | |
475 | - registerForm, | |
476 | - triggerData, | |
477 | - triggerClickAdd, | |
478 | - triggerClickRemove, | |
479 | - conditionClickAdd, | |
480 | - conditionClickRemove, | |
481 | - actionClickAdd, | |
482 | - actionClickRemove, | |
483 | - triggerBindRef, | |
484 | - conditionBindRef, | |
485 | - actionBindRef, | |
486 | - handleSubmit, | |
487 | - handleClose, | |
488 | - drawerStatus, | |
489 | - conditionData, | |
490 | - actionData, | |
491 | - editTriggerData, | |
492 | - editConditionData, | |
493 | - editActionData, | |
494 | - getTriggerFatherEntryIdData, | |
495 | - getConditionFatherEntryIdData, | |
496 | - getActionFatherEntryIdData, | |
497 | - }; | |
498 | - }, | |
499 | - }); | |
500 | -</script> | |
501 | - | |
502 | -<style lang="less" scoped></style> |