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> |