Showing
9 changed files
with
151 additions
and
417 deletions
@@ -15,10 +15,10 @@ export enum Number_Operation { | @@ -15,10 +15,10 @@ export enum Number_Operation { | ||
15 | export enum String_Operation { | 15 | export enum String_Operation { |
16 | EQUAL = 'EQUAL', | 16 | EQUAL = 'EQUAL', |
17 | NOT_EQUAL = 'NOT_EQUAL', | 17 | NOT_EQUAL = 'NOT_EQUAL', |
18 | - BEGAN_IN = 'BEGAN_IN', | ||
19 | - END_IN = 'END_IN', | ||
20 | - INCLUDE = 'INCLUDE', | ||
21 | - NOT_INCLUDE = 'NOT_INCLUDE', | 18 | + BEGAN_IN = 'STARTS_WITH', |
19 | + END_IN = 'ENDS_WITH', | ||
20 | + INCLUDE = 'CONTAINS', | ||
21 | + NOT_INCLUDE = 'NOT_CONTAINS', | ||
22 | } | 22 | } |
23 | 23 | ||
24 | export enum Boolean_Operation { | 24 | export enum Boolean_Operation { |
@@ -15,7 +15,8 @@ export interface selectionOptions { | @@ -15,7 +15,8 @@ export interface selectionOptions { | ||
15 | rowKey: string; | 15 | rowKey: string; |
16 | clickToRowSelect: boolean; | 16 | clickToRowSelect: boolean; |
17 | rowSelection: { | 17 | rowSelection: { |
18 | - onChange: (selectedRowKeys: string[]) => void; | 18 | + onSelect: (_, __, selectedRowKeys: string[]) => void; |
19 | + getCheckboxProps: (record: Recordable) => void; | ||
19 | type: 'radio' | 'checkbox'; | 20 | type: 'radio' | 'checkbox'; |
20 | }; | 21 | }; |
21 | } | 22 | } |
@@ -27,7 +28,8 @@ export const useBatchDelete = ( | @@ -27,7 +28,8 @@ export const useBatchDelete = ( | ||
27 | const selectedRowIds = ref<string[]>([]); | 28 | const selectedRowIds = ref<string[]>([]); |
28 | const hasBatchDelete = computed(() => selectedRowIds.value.length <= 0); | 29 | const hasBatchDelete = computed(() => selectedRowIds.value.length <= 0); |
29 | // 复选框事件 | 30 | // 复选框事件 |
30 | - const onSelectRowChange = (selectedRowKeys: string[]) => { | 31 | + const onSelectRow = (_, __, selectedRows) => { |
32 | + const selectedRowKeys = selectedRows.map((item) => item.id); | ||
31 | selectedRowIds.value = selectedRowKeys; | 33 | selectedRowIds.value = selectedRowKeys; |
32 | }; | 34 | }; |
33 | const handleDeleteOrBatchDelete = async (record: Recordable | null) => { | 35 | const handleDeleteOrBatchDelete = async (record: Recordable | null) => { |
@@ -41,19 +43,26 @@ export const useBatchDelete = ( | @@ -41,19 +43,26 @@ export const useBatchDelete = ( | ||
41 | try { | 43 | try { |
42 | await deleteFn(selectedRowIds.value); | 44 | await deleteFn(selectedRowIds.value); |
43 | createMessage.success('批量删除成功'); | 45 | createMessage.success('批量删除成功'); |
44 | - selectedRowIds.value = []; | 46 | + console.log(selectedRowIds.value); |
45 | handleSuccess(); | 47 | handleSuccess(); |
46 | - } catch (e) { | ||
47 | - selectedRowIds.value = []; | ||
48 | - } | 48 | + } catch (e) {} |
49 | + selectedRowIds.value = []; | ||
49 | } | 50 | } |
50 | }; | 51 | }; |
51 | const selectionOptions: selectionOptions = { | 52 | const selectionOptions: selectionOptions = { |
52 | rowKey: 'id', | 53 | rowKey: 'id', |
53 | clickToRowSelect: false, | 54 | clickToRowSelect: false, |
54 | rowSelection: { | 55 | rowSelection: { |
55 | - onChange: onSelectRowChange, | 56 | + onSelect: onSelectRow, |
56 | type: 'checkbox', | 57 | type: 'checkbox', |
58 | + getCheckboxProps(record: Recordable) { | ||
59 | + // Demo:status为1的选择框禁用 | ||
60 | + if (record.status === 1) { | ||
61 | + return { disabled: true }; | ||
62 | + } else { | ||
63 | + return { disabled: false }; | ||
64 | + } | ||
65 | + }, | ||
57 | }, | 66 | }, |
58 | }; | 67 | }; |
59 | return { hasBatchDelete, selectionOptions, handleDeleteOrBatchDelete }; | 68 | return { hasBatchDelete, selectionOptions, handleDeleteOrBatchDelete }; |
@@ -17,11 +17,12 @@ | @@ -17,11 +17,12 @@ | ||
17 | <Divider orientation="left">触发器</Divider> | 17 | <Divider orientation="left">触发器</Divider> |
18 | <div> | 18 | <div> |
19 | <template v-for="(item, index) in triggerData" :key="item"> | 19 | <template v-for="(item, index) in triggerData" :key="item"> |
20 | - <Trigger | 20 | + <TriggerOrCondition |
21 | class="mt-4" | 21 | class="mt-4" |
22 | - :triggerIndex="index" | 22 | + title="触发器" |
23 | + :index="index" | ||
23 | :ref="skipUnwrap.triggerItemRefs" | 24 | :ref="skipUnwrap.triggerItemRefs" |
24 | - @deleteTrigger="deleteTrigger" | 25 | + @delete="deleteTriggerOrCondition" |
25 | /> | 26 | /> |
26 | </template> | 27 | </template> |
27 | <!-- 按钮 --> | 28 | <!-- 按钮 --> |
@@ -37,11 +38,12 @@ | @@ -37,11 +38,12 @@ | ||
37 | <Divider orientation="left">执行条件</Divider> | 38 | <Divider orientation="left">执行条件</Divider> |
38 | <div> | 39 | <div> |
39 | <template v-for="(item, index) in conditionData" :key="item"> | 40 | <template v-for="(item, index) in conditionData" :key="item"> |
40 | - <Condition | 41 | + <TriggerOrCondition |
41 | class="mt-4" | 42 | class="mt-4" |
42 | - :conditionIndex="index" | 43 | + title="执行条件" |
44 | + :index="index" | ||
43 | :ref="skipUnwrap.conditionItemRefs" | 45 | :ref="skipUnwrap.conditionItemRefs" |
44 | - @deleteCondition="deleteCondition" | 46 | + @delete="deleteTriggerOrCondition" |
45 | /> | 47 | /> |
46 | </template> | 48 | </template> |
47 | <!-- 按钮 --> | 49 | <!-- 按钮 --> |
@@ -92,8 +94,7 @@ | @@ -92,8 +94,7 @@ | ||
92 | screenLinkPageByDeptIdGetDevice, | 94 | screenLinkPageByDeptIdGetDevice, |
93 | getOrganizationAlarmConfig, | 95 | getOrganizationAlarmConfig, |
94 | } from '/@/api/ruleengine/ruleengineApi'; | 96 | } from '/@/api/ruleengine/ruleengineApi'; |
95 | - import Trigger from './cpns/Trigger.vue'; | ||
96 | - import Condition from './cpns/Condition.vue'; | 97 | + import TriggerOrCondition from './cpns/Trigger-Condition.vue'; |
97 | import Action from './cpns/Action.vue'; | 98 | import Action from './cpns/Action.vue'; |
98 | import { useUserStore } from '/@/store/modules/user'; | 99 | import { useUserStore } from '/@/store/modules/user'; |
99 | import { findOperation } from './config/formatData.ts'; | 100 | import { findOperation } from './config/formatData.ts'; |
@@ -182,13 +183,17 @@ | @@ -182,13 +183,17 @@ | ||
182 | triggers.forEach((trigger, index) => { | 183 | triggers.forEach((trigger, index) => { |
183 | nextTick(async () => { | 184 | nextTick(async () => { |
184 | unref(skipUnwrap.triggerItemRefs)[index].setFieldsFormValueFun({ | 185 | unref(skipUnwrap.triggerItemRefs)[index].setFieldsFormValueFun({ |
185 | - triggered: trigger.triggerCondition.condition.spec.type, | ||
186 | - device: trigger.entityType, | ||
187 | - triggerType: trigger.triggerType, | ||
188 | - type1: trigger.triggerCondition?.condition.condition[0]?.key?.type, | ||
189 | - type2: trigger.triggerCondition?.condition.condition[0]?.key?.key, | ||
190 | - operationType: trigger.triggerCondition?.condition.condition[0].valueType, | ||
191 | - detail: trigger.triggerCondition?.alarmDetails, | 186 | + triggered: trigger?.triggerCondition?.condition?.spec?.type, |
187 | + device: trigger?.entityType, | ||
188 | + triggerType: trigger?.triggerType, | ||
189 | + type1: trigger?.triggerCondition?.condition?.condition[0]?.key?.type, | ||
190 | + type2: trigger?.triggerCondition?.condition?.condition[0]?.key?.key, | ||
191 | + operationType: trigger?.triggerCondition?.condition?.condition[0]?.valueType, | ||
192 | + detail: trigger?.triggerCondition?.alarmDetails, | ||
193 | + entityId: trigger?.entityId, | ||
194 | + replaceValue: trigger?.triggerCondition?.condition?.spec?.predicate?.defaultValue, | ||
195 | + time: trigger?.triggerCondition?.condition?.spec?.predicate?.defaultValue, | ||
196 | + timeUnit: trigger?.triggerCondition?.condition?.spec?.unit, | ||
192 | }); | 197 | }); |
193 | // 设置值operationType | 198 | // 设置值operationType |
194 | unref(skipUnwrap.triggerItemRefs)[index].operationType = | 199 | unref(skipUnwrap.triggerItemRefs)[index].operationType = |
@@ -197,7 +202,6 @@ | @@ -197,7 +202,6 @@ | ||
197 | const ConditionScreeningForm = await unref(skipUnwrap.triggerItemRefs)[ | 202 | const ConditionScreeningForm = await unref(skipUnwrap.triggerItemRefs)[ |
198 | index | 203 | index |
199 | ].getRefItemConditionScreeningRefs(); | 204 | ].getRefItemConditionScreeningRefs(); |
200 | - triggerData.value = [...new Array(triggers.length).keys()]; | ||
201 | 205 | ||
202 | // 设置对应条件筛选的个数 | 206 | // 设置对应条件筛选的个数 |
203 | unref(skipUnwrap.triggerItemRefs)[index].setConditionScreeningList([ | 207 | unref(skipUnwrap.triggerItemRefs)[index].setConditionScreeningList([ |
@@ -209,7 +213,7 @@ | @@ -209,7 +213,7 @@ | ||
209 | // 循环设置条件筛选值。TODO:此处设置顺序有问题 | 213 | // 循环设置条件筛选值。TODO:此处设置顺序有问题 |
210 | nextTick(() => { | 214 | nextTick(() => { |
211 | const richTextList = []; | 215 | const richTextList = []; |
212 | - trigger.triggerCondition.condition.condition.forEach(async (item, index) => { | 216 | + trigger.triggerCondition.condition.condition.forEach((item, index) => { |
213 | const formItem = { | 217 | const formItem = { |
214 | operation: item.predicate.operation, | 218 | operation: item.predicate.operation, |
215 | value: String(item.predicate.value.defaultValue), | 219 | value: String(item.predicate.value.defaultValue), |
@@ -231,13 +235,17 @@ | @@ -231,13 +235,17 @@ | ||
231 | doConditions.forEach((condition, index) => { | 235 | doConditions.forEach((condition, index) => { |
232 | nextTick(async () => { | 236 | nextTick(async () => { |
233 | unref(skipUnwrap.conditionItemRefs)[index].setFieldsFormValueFun({ | 237 | unref(skipUnwrap.conditionItemRefs)[index].setFieldsFormValueFun({ |
234 | - triggered: condition.triggerCondition.condition.spec.type, | ||
235 | - device: condition.entityType, | ||
236 | - triggerType: condition.triggerType, | ||
237 | - type1: condition.triggerCondition?.condition.condition[0]?.key?.type, | ||
238 | - type2: condition.triggerCondition?.condition.condition[0]?.key?.key, | ||
239 | - operationType: condition.triggerCondition?.condition.condition[0].valueType, | ||
240 | - detail: condition.triggerCondition?.alarmDetails, | 238 | + triggered: condition?.triggerCondition?.condition?.spec?.type, |
239 | + device: condition?.entityType, | ||
240 | + triggerType: condition?.triggerType, | ||
241 | + type1: condition?.triggerCondition?.condition?.condition[0]?.key?.type, | ||
242 | + type2: condition?.triggerCondition?.condition?.condition[0]?.key?.key, | ||
243 | + operationType: condition?.triggerCondition?.condition?.condition[0]?.valueType, | ||
244 | + detail: condition?.triggerCondition?.alarmDetails, | ||
245 | + entityId: condition?.entityId, | ||
246 | + replaceValue: condition?.triggerCondition?.condition?.spec?.predicate?.defaultValue, | ||
247 | + time: condition?.triggerCondition?.condition?.spec?.predicate?.defaultValue, | ||
248 | + timeUnit: condition?.triggerCondition?.condition?.spec?.unit, | ||
241 | }); | 249 | }); |
242 | // 设置值operationType | 250 | // 设置值operationType |
243 | unref(skipUnwrap.conditionItemRefs)[index].operationType = | 251 | unref(skipUnwrap.conditionItemRefs)[index].operationType = |
@@ -246,7 +254,6 @@ | @@ -246,7 +254,6 @@ | ||
246 | const ConditionScreeningForm = await unref(skipUnwrap.conditionItemRefs)[ | 254 | const ConditionScreeningForm = await unref(skipUnwrap.conditionItemRefs)[ |
247 | index | 255 | index |
248 | ].getRefItemConditionScreeningRefs(); | 256 | ].getRefItemConditionScreeningRefs(); |
249 | - triggerData.value = [...new Array(condition.length).keys()]; | ||
250 | 257 | ||
251 | // 设置对应条件筛选的个数 | 258 | // 设置对应条件筛选的个数 |
252 | unref(skipUnwrap.conditionItemRefs)[index].setConditionScreeningList([ | 259 | unref(skipUnwrap.conditionItemRefs)[index].setConditionScreeningList([ |
@@ -258,7 +265,7 @@ | @@ -258,7 +265,7 @@ | ||
258 | // 循环设置条件筛选值。TODO:此处设置顺序有问题 | 265 | // 循环设置条件筛选值。TODO:此处设置顺序有问题 |
259 | nextTick(() => { | 266 | nextTick(() => { |
260 | const richTextList = []; | 267 | const richTextList = []; |
261 | - condition.triggerCondition.condition.condition.forEach(async (item, index) => { | 268 | + condition.triggerCondition.condition.condition.forEach((item, index) => { |
262 | const formItem = { | 269 | const formItem = { |
263 | operation: item.predicate.operation, | 270 | operation: item.predicate.operation, |
264 | value: String(item.predicate.value.defaultValue), | 271 | value: String(item.predicate.value.defaultValue), |
@@ -292,14 +299,25 @@ | @@ -292,14 +299,25 @@ | ||
292 | unref(skipUnwrap.actionItemRefs)[index].checked = true; | 299 | unref(skipUnwrap.actionItemRefs)[index].checked = true; |
293 | nextTick(async () => { | 300 | nextTick(async () => { |
294 | unref(skipUnwrap.actionItemRefs)[index].clearAlarmRef.setFieldsFormValueFun({ | 301 | unref(skipUnwrap.actionItemRefs)[index].clearAlarmRef.setFieldsFormValueFun({ |
295 | - triggered: action.doContext?.clearRule?.triggerCondition?.condition.spec.type, | ||
296 | - device: action.entityType, | ||
297 | - triggerType: action.doContext?.clearRule.triggerType, | ||
298 | - type1: action.doContext.clearRule.triggerCondition.condition.condition[0].key.type, | ||
299 | - type2: action.doContext.clearRule.triggerCondition.condition.condition[0].key.key, | 302 | + triggered: action.doContext?.clearRule?.triggerCondition?.condition?.spec?.type, |
303 | + device: action?.entityType, | ||
304 | + triggerType: action?.doContext?.clearRule?.triggerType, | ||
305 | + type1: | ||
306 | + action?.doContext?.clearRule?.triggerCondition?.condition?.condition[0]?.key | ||
307 | + ?.type, | ||
308 | + type2: | ||
309 | + action?.doContext?.clearRule?.triggerCondition?.condition?.condition[0]?.key?.key, | ||
300 | operationType: | 310 | operationType: |
301 | - action.doContext.clearRule.triggerCondition.condition.condition[0].valueType, | ||
302 | - detail: action.doContext.clearRule.triggerCondition?.alarmDetails, | 311 | + action?.doContext?.clearRule?.triggerCondition?.condition?.condition[0] |
312 | + ?.valueType, | ||
313 | + detail: action?.doContext?.clearRule?.triggerCondition?.alarmDetails, | ||
314 | + entityId: action?.doContext?.clearRule?.entityId, | ||
315 | + replaceValue: | ||
316 | + action?.doContext?.clearRule?.triggerCondition?.condition?.spec?.predicate | ||
317 | + ?.defaultValue, | ||
318 | + time: action?.doContext?.clearRule?.triggerCondition?.condition?.spec?.predicate | ||
319 | + ?.defaultValue, | ||
320 | + timeUnit: action?.doContext?.clearRule?.triggerCondition?.condition?.spec?.unit, | ||
303 | }); | 321 | }); |
304 | // 设置值operationType | 322 | // 设置值operationType |
305 | 323 | ||
@@ -309,7 +327,6 @@ | @@ -309,7 +327,6 @@ | ||
309 | const ConditionScreeningForm = await unref(skipUnwrap.actionItemRefs)[ | 327 | const ConditionScreeningForm = await unref(skipUnwrap.actionItemRefs)[ |
310 | index | 328 | index |
311 | ].getRefItemConditionScreeningRefs(); | 329 | ].getRefItemConditionScreeningRefs(); |
312 | - triggerData.value = [...new Array(action.length).keys()]; | ||
313 | 330 | ||
314 | // // 设置对应条件筛选的个数 | 331 | // // 设置对应条件筛选的个数 |
315 | unref(skipUnwrap.actionItemRefs)[index].setConditionScreeningList([ | 332 | unref(skipUnwrap.actionItemRefs)[index].setConditionScreeningList([ |
@@ -390,7 +407,6 @@ | @@ -390,7 +407,6 @@ | ||
390 | item.updateFieldDeviceId(deviceList); | 407 | item.updateFieldDeviceId(deviceList); |
391 | }); | 408 | }); |
392 | } | 409 | } |
393 | - | ||
394 | function setAlarmConfig(linkAge, isOrganizationChange = false) { | 410 | function setAlarmConfig(linkAge, isOrganizationChange = false) { |
395 | unref(linkAge).map((item) => { | 411 | unref(linkAge).map((item) => { |
396 | isOrganizationChange && item.resetFieldsValueFunc(); | 412 | isOrganizationChange && item.resetFieldsValueFunc(); |
@@ -463,11 +479,12 @@ | @@ -463,11 +479,12 @@ | ||
463 | }; | 479 | }; |
464 | const userStore = useUserStore(); | 480 | const userStore = useUserStore(); |
465 | // 删除 | 481 | // 删除 |
466 | - const deleteTrigger = (triggerIndex: number) => { | ||
467 | - unref(triggerData).splice(triggerIndex, 1); | ||
468 | - }; | ||
469 | - const deleteCondition = (conditionIndex: number) => { | ||
470 | - unref(conditionData).splice(conditionIndex, 1); | 482 | + const deleteTriggerOrCondition = ({ index, title }) => { |
483 | + if (title === '触发器') { | ||
484 | + unref(triggerData).splice(index, 1); | ||
485 | + } else if (title === '执行条件') { | ||
486 | + unref(conditionData).splice(index, 1); | ||
487 | + } | ||
471 | }; | 488 | }; |
472 | const deleteAction = ({ actionIndex, outTarget }) => { | 489 | const deleteAction = ({ actionIndex, outTarget }) => { |
473 | unref(actionData).splice(actionIndex, 1); | 490 | unref(actionData).splice(actionIndex, 1); |
@@ -182,10 +182,10 @@ export const searchFormSchema: FormSchema[] = [ | @@ -182,10 +182,10 @@ export const searchFormSchema: FormSchema[] = [ | ||
182 | ]; | 182 | ]; |
183 | // 持续时间 | 183 | // 持续时间 |
184 | const isTimeDuration = (type) => { | 184 | const isTimeDuration = (type) => { |
185 | - return type === 'timeDuration'; | 185 | + return type === 'DURATION'; |
186 | }; | 186 | }; |
187 | const isReplace = (type) => { | 187 | const isReplace = (type) => { |
188 | - return type === 'replace'; | 188 | + return type === 'REPEATING'; |
189 | }; | 189 | }; |
190 | // 部分 | 190 | // 部分 |
191 | const isPart = (type: string) => { | 191 | const isPart = (type: string) => { |
@@ -201,8 +201,8 @@ export const trigger_condition_schema: FormSchema[] = [ | @@ -201,8 +201,8 @@ export const trigger_condition_schema: FormSchema[] = [ | ||
201 | placeholder: '请选择触发类型', | 201 | placeholder: '请选择触发类型', |
202 | options: [ | 202 | options: [ |
203 | { label: '简单', value: 'SIMPLE' }, | 203 | { label: '简单', value: 'SIMPLE' }, |
204 | - { label: '持续时长', value: 'timeDuration' }, | ||
205 | - { label: '重复次数', value: 'replace' }, | 204 | + { label: '持续时长', value: 'DURATION' }, |
205 | + { label: '重复次数', value: 'REPEATING' }, | ||
206 | ], | 206 | ], |
207 | }, | 207 | }, |
208 | colProps: { span: 6 }, | 208 | colProps: { span: 6 }, |
@@ -235,21 +235,17 @@ export const trigger_condition_schema: FormSchema[] = [ | @@ -235,21 +235,17 @@ export const trigger_condition_schema: FormSchema[] = [ | ||
235 | field: 'time', | 235 | field: 'time', |
236 | label: '', | 236 | label: '', |
237 | component: 'Input', | 237 | component: 'Input', |
238 | - componentProps: { | ||
239 | - placeholder: '请输入持续时间', | ||
240 | - }, | ||
241 | ifShow: ({ values }) => isTimeDuration(values.triggered), | 238 | ifShow: ({ values }) => isTimeDuration(values.triggered), |
242 | colProps: { span: 6 }, | 239 | colProps: { span: 6 }, |
240 | + slot: 'time', | ||
243 | }, | 241 | }, |
244 | { | 242 | { |
245 | field: 'timeUnit', | 243 | field: 'timeUnit', |
246 | label: '', | 244 | label: '', |
247 | - component: 'Input', | ||
248 | - componentProps: { | ||
249 | - placeholder: '请输入持续时间单位', | ||
250 | - }, | 245 | + component: 'Select', |
246 | + defaultValue: 'SECONDS', | ||
251 | ifShow: ({ values }) => isTimeDuration(values.triggered), | 247 | ifShow: ({ values }) => isTimeDuration(values.triggered), |
252 | - colProps: { span: 6 }, | 248 | + show: false, |
253 | }, | 249 | }, |
254 | { | 250 | { |
255 | field: 'replaceValue', | 251 | field: 'replaceValue', |
1 | import { formatToDateTime } from '/@/utils/dateUtil'; | 1 | import { formatToDateTime } from '/@/utils/dateUtil'; |
2 | - | 2 | +import { Number_Operation, String_Operation, Boolean_Operation } from '/@/enums/operationEnum'; |
3 | // 生成触发器或执行条件JSON数据 | 3 | // 生成触发器或执行条件JSON数据 |
4 | export const genTriggerOrConditionData = (triggerData) => { | 4 | export const genTriggerOrConditionData = (triggerData) => { |
5 | const { | 5 | const { |
@@ -13,7 +13,11 @@ export const genTriggerOrConditionData = (triggerData) => { | @@ -13,7 +13,11 @@ export const genTriggerOrConditionData = (triggerData) => { | ||
13 | operationType, | 13 | operationType, |
14 | triggered, | 14 | triggered, |
15 | schedule, | 15 | schedule, |
16 | + time, | ||
17 | + timeUnit, | ||
18 | + replaceValue, | ||
16 | } = triggerData; | 19 | } = triggerData; |
20 | + console.log(time, timeUnit, replaceValue); | ||
17 | const mapPredicate = predicate?.map((item) => { | 21 | const mapPredicate = predicate?.map((item) => { |
18 | return { | 22 | return { |
19 | key: { | 23 | key: { |
@@ -21,15 +25,15 @@ export const genTriggerOrConditionData = (triggerData) => { | @@ -21,15 +25,15 @@ export const genTriggerOrConditionData = (triggerData) => { | ||
21 | key: type2, | 25 | key: type2, |
22 | }, | 26 | }, |
23 | valueType: operationType, | 27 | valueType: operationType, |
24 | - value: null, | 28 | + // value: null, |
25 | predicate: { | 29 | predicate: { |
26 | type: operationType === 'DATE_TIME' ? 'NUMERIC' : operationType, | 30 | type: operationType === 'DATE_TIME' ? 'NUMERIC' : operationType, |
27 | operation: item.operation, | 31 | operation: item.operation, |
28 | value: { | 32 | value: { |
29 | defaultValue: | 33 | defaultValue: |
30 | operationType === 'DATE_TIME' ? Number(formatToDateTime(item.value, 'x')) : item.value, | 34 | operationType === 'DATE_TIME' ? Number(formatToDateTime(item.value, 'x')) : item.value, |
31 | - userValue: null, | ||
32 | - dynamicValue: null, | 35 | + // userValue: null, |
36 | + // dynamicValue: null, | ||
33 | }, | 37 | }, |
34 | }, | 38 | }, |
35 | }; | 39 | }; |
@@ -44,12 +48,17 @@ export const genTriggerOrConditionData = (triggerData) => { | @@ -44,12 +48,17 @@ export const genTriggerOrConditionData = (triggerData) => { | ||
44 | condition: mapPredicate, | 48 | condition: mapPredicate, |
45 | spec: { | 49 | spec: { |
46 | type: triggered, | 50 | type: triggered, |
47 | - // unit: 'SECONDS', | ||
48 | - // predicate: { | ||
49 | - // defaultValue: 30, | ||
50 | - // userValue: null, | ||
51 | - // dynamicValue: null, | ||
52 | - // }, | 51 | + unit: triggered === 'DURATION' ? timeUnit : undefined, |
52 | + predicate: { | ||
53 | + defaultValue: | ||
54 | + triggered === 'DURATION' | ||
55 | + ? time | ||
56 | + : triggered === 'REPEATING' | ||
57 | + ? replaceValue | ||
58 | + : undefined, | ||
59 | + // userValue: null, | ||
60 | + // dynamicValue: null, | ||
61 | + }, | ||
53 | }, | 62 | }, |
54 | }, | 63 | }, |
55 | schedule: { | 64 | schedule: { |
@@ -80,8 +89,10 @@ export const genActionData = (conditionData) => { | @@ -80,8 +89,10 @@ export const genActionData = (conditionData) => { | ||
80 | schedule, | 89 | schedule, |
81 | entityId, | 90 | entityId, |
82 | deviceId, | 91 | deviceId, |
83 | - checked, | 92 | + time, |
93 | + timeUnit, | ||
84 | } = conditionData; | 94 | } = conditionData; |
95 | + | ||
85 | const mapPredicate = predicate?.map((item) => { | 96 | const mapPredicate = predicate?.map((item) => { |
86 | return { | 97 | return { |
87 | key: { | 98 | key: { |
@@ -89,14 +100,14 @@ export const genActionData = (conditionData) => { | @@ -89,14 +100,14 @@ export const genActionData = (conditionData) => { | ||
89 | key: type2, | 100 | key: type2, |
90 | }, | 101 | }, |
91 | valueType: operationType, | 102 | valueType: operationType, |
92 | - value: null, | 103 | + // value: null, |
93 | predicate: { | 104 | predicate: { |
94 | type: operationType, | 105 | type: operationType, |
95 | operation: item.operation, | 106 | operation: item.operation, |
96 | value: { | 107 | value: { |
97 | defaultValue: item.value, | 108 | defaultValue: item.value, |
98 | - userValue: null, | ||
99 | - dynamicValue: null, | 109 | + // userValue: null, |
110 | + // dynamicValue: null, | ||
100 | }, | 111 | }, |
101 | }, | 112 | }, |
102 | }; | 113 | }; |
@@ -119,12 +130,12 @@ export const genActionData = (conditionData) => { | @@ -119,12 +130,12 @@ export const genActionData = (conditionData) => { | ||
119 | condition: mapPredicate, | 130 | condition: mapPredicate, |
120 | spec: { | 131 | spec: { |
121 | type: triggered, | 132 | type: triggered, |
122 | - // unit: 'SECONDS', | ||
123 | - // predicate: { | ||
124 | - // defaultValue: 30, | ||
125 | - // userValue: null, | ||
126 | - // dynamicValue: null, | ||
127 | - // }, | 133 | + unit: timeUnit, |
134 | + predicate: { | ||
135 | + defaultValue: time, | ||
136 | + // userValue: null, | ||
137 | + // dynamicValue: null, | ||
138 | + }, | ||
128 | }, | 139 | }, |
129 | }, | 140 | }, |
130 | schedule: { | 141 | schedule: { |
@@ -145,8 +156,6 @@ export const genActionData = (conditionData) => { | @@ -145,8 +156,6 @@ export const genActionData = (conditionData) => { | ||
145 | ]; | 156 | ]; |
146 | }; | 157 | }; |
147 | 158 | ||
148 | -import { Number_Operation, String_Operation, Boolean_Operation } from '/@/enums/operationEnum'; | ||
149 | - | ||
150 | export const operationNumber_OR_TIME = [ | 159 | export const operationNumber_OR_TIME = [ |
151 | { label: '等于', value: Number_Operation.EQUAL }, | 160 | { label: '等于', value: Number_Operation.EQUAL }, |
152 | { label: '不等于', value: Number_Operation.NOT_EQUAL }, | 161 | { label: '不等于', value: Number_Operation.NOT_EQUAL }, |
@@ -17,6 +17,17 @@ | @@ -17,6 +17,17 @@ | ||
17 | allowClear | 17 | allowClear |
18 | /> | 18 | /> |
19 | </template> | 19 | </template> |
20 | + <template #time="{ model, field }"> | ||
21 | + <Input v-model:value="model[field]" placeholder="请输入持续时间"> | ||
22 | + <template #addonAfter> | ||
23 | + <Select | ||
24 | + v-model:value="model[`timeUnit`]" | ||
25 | + :options="timeUnitOptions" | ||
26 | + style="width: 60px" | ||
27 | + /> | ||
28 | + </template> | ||
29 | + </Input> | ||
30 | + </template> | ||
20 | </BasicForm> | 31 | </BasicForm> |
21 | <Card size="small" :bordered="false" style="border: 2px dashed #797979" v-if="operationType"> | 32 | <Card size="small" :bordered="false" style="border: 2px dashed #797979" v-if="operationType"> |
22 | <ConditionScreening | 33 | <ConditionScreening |
@@ -31,7 +42,7 @@ | @@ -31,7 +42,7 @@ | ||
31 | import { ref, provide } from 'vue'; | 42 | import { ref, provide } from 'vue'; |
32 | import { CollapseContainer } from '/@/components/Container/index'; | 43 | import { CollapseContainer } from '/@/components/Container/index'; |
33 | import { BasicForm, useForm } from '/@/components/Form/index'; | 44 | import { BasicForm, useForm } from '/@/components/Form/index'; |
34 | - import { Radio, Card, Select } from 'ant-design-vue'; | 45 | + import { Radio, Card, Select, Input } from 'ant-design-vue'; |
35 | import { trigger_condition_schema } from '../config/config.data.ts'; | 46 | import { trigger_condition_schema } from '../config/config.data.ts'; |
36 | import { getAttribute } from '/@/api/ruleengine/ruleengineApi'; | 47 | import { getAttribute } from '/@/api/ruleengine/ruleengineApi'; |
37 | import ConditionScreening from './ConditionScreening.vue'; | 48 | import ConditionScreening from './ConditionScreening.vue'; |
@@ -103,6 +114,25 @@ | @@ -103,6 +114,25 @@ | ||
103 | value: 'DATE_TIME', | 114 | value: 'DATE_TIME', |
104 | }, | 115 | }, |
105 | ]; | 116 | ]; |
117 | + | ||
118 | + const timeUnitOptions = [ | ||
119 | + { | ||
120 | + label: '秒', | ||
121 | + value: 'SECONDS', | ||
122 | + }, | ||
123 | + { | ||
124 | + label: '分', | ||
125 | + value: 'MINUTES', | ||
126 | + }, | ||
127 | + { | ||
128 | + label: '时', | ||
129 | + value: 'HOURS', | ||
130 | + }, | ||
131 | + { | ||
132 | + label: '天', | ||
133 | + value: 'DAYS', | ||
134 | + }, | ||
135 | + ]; | ||
106 | const childGetFieldsValue = () => getFieldsValue(); | 136 | const childGetFieldsValue = () => getFieldsValue(); |
107 | provide('operationType', operationType); | 137 | provide('operationType', operationType); |
108 | 138 |
src/views/rule/linkedge/cpns/condition.vue
deleted
100644 → 0
1 | -<template> | ||
2 | - <div> | ||
3 | - <CollapseContainer style="background-color: #f2f2f2" :title="`执行条件${conditionIndex + 1}`"> | ||
4 | - <template #action> | ||
5 | - <div class="flex"> | ||
6 | - <div> | ||
7 | - <span class="mr-2">启用规则</span> | ||
8 | - <RadioGroup v-model:value="schedule" :options="scheduleOptions" /> | ||
9 | - </div> | ||
10 | - <Tooltip title="移除" class="ml-4"> | ||
11 | - <Icon | ||
12 | - icon="fluent:delete-off-20-regular" | ||
13 | - size="20" | ||
14 | - class="mr-2 cursor-pointer" | ||
15 | - @click="handleDelete(conditionIndex)" | ||
16 | - /> | ||
17 | - </Tooltip> | ||
18 | - </div> | ||
19 | - </template> | ||
20 | - <BasicForm @register="registerForm"> | ||
21 | - <template #operationType="{ model, field }"> | ||
22 | - <Select | ||
23 | - :options="options" | ||
24 | - v-model:value="model[field]" | ||
25 | - @change="operationType = model[field]" | ||
26 | - placeholder="请选择比较类型" | ||
27 | - allowClear | ||
28 | - /> | ||
29 | - </template> | ||
30 | - </BasicForm> | ||
31 | - <Card size="small" :bordered="false" style="border: 2px dashed #797979" v-if="operationType"> | ||
32 | - <ConditionScreening | ||
33 | - :childGetFieldsValue="childGetFieldsValue" | ||
34 | - ref="conditionScreeningRef" | ||
35 | - /> | ||
36 | - </Card> | ||
37 | - </CollapseContainer> | ||
38 | - </div> | ||
39 | -</template> | ||
40 | -<script lang="ts" setup> | ||
41 | - import { ref, provide, nextTick } from 'vue'; | ||
42 | - import { CollapseContainer } from '/@/components/Container/index'; | ||
43 | - import { BasicForm, useForm } from '/@/components/Form/index'; | ||
44 | - import { Icon } from '/@/components/Icon'; | ||
45 | - import { Tooltip, Radio, Card, Select } from 'ant-design-vue'; | ||
46 | - import { trigger_condition_schema } from '../config/config.data.ts'; | ||
47 | - import { getAttribute } from '/@/api/ruleengine/ruleengineApi'; | ||
48 | - import ConditionScreening from './ConditionScreening.vue'; | ||
49 | - const RadioGroup = Radio.Group; | ||
50 | - | ||
51 | - defineProps({ | ||
52 | - conditionIndex: { | ||
53 | - type: Number, | ||
54 | - required: true, | ||
55 | - }, | ||
56 | - }); | ||
57 | - const emit = defineEmits(['deleteCondition']); | ||
58 | - const conditionScreeningRef = ref(); | ||
59 | - const [registerForm, { resetFields, getFieldsValue, updateSchema, setFieldsValue }] = useForm({ | ||
60 | - schemas: trigger_condition_schema, | ||
61 | - showActionButtonGroup: false, | ||
62 | - }); | ||
63 | - | ||
64 | - const getFieldsValueFunc = () => { | ||
65 | - const predicate = conditionScreeningRef?.value?.refItem?.conditionScreeningRefs?.value?.map( | ||
66 | - (item) => { | ||
67 | - return item.getFieldsValue(); | ||
68 | - } | ||
69 | - ); | ||
70 | - return { ...getFieldsValue(), predicate, schedule: schedule.value }; | ||
71 | - }; | ||
72 | - const updateFieldDeviceId = (deviceList: any[]) => { | ||
73 | - updateSchema({ | ||
74 | - field: 'entityId', | ||
75 | - componentProps: { | ||
76 | - options: deviceList, | ||
77 | - onChange(e) { | ||
78 | - if (e) { | ||
79 | - updateFieldAttributeFunc(); | ||
80 | - } | ||
81 | - }, | ||
82 | - }, | ||
83 | - }); | ||
84 | - }; | ||
85 | - const resetFieldsValueFunc = () => resetFields(); | ||
86 | - // 回显数据函数 | ||
87 | - const setFieldsFormValueFun = (fieldsValue) => { | ||
88 | - setFieldsValue(fieldsValue); | ||
89 | - }; | ||
90 | - const updateFieldAttributeFunc = async () => { | ||
91 | - const data1 = await getAttribute(); | ||
92 | - const options = data1.map((m) => { | ||
93 | - return { | ||
94 | - label: m, | ||
95 | - value: m, | ||
96 | - }; | ||
97 | - }); | ||
98 | - updateSchema({ | ||
99 | - field: 'type2', | ||
100 | - componentProps: { | ||
101 | - placeholder: '请选择属性', | ||
102 | - options, | ||
103 | - }, | ||
104 | - }); | ||
105 | - }; | ||
106 | - | ||
107 | - const handleDelete = (triggerIndex) => { | ||
108 | - emit('deleteCondition', triggerIndex); | ||
109 | - }; | ||
110 | - | ||
111 | - const schedule = ref('ANY_TIME'); | ||
112 | - const scheduleOptions = [ | ||
113 | - { label: '始终启用', value: 'ANY_TIME' }, | ||
114 | - { label: '定时启用', value: 'SPECIFIC_TIME' }, | ||
115 | - { label: '自定义启用', value: 'CUSTOM' }, | ||
116 | - ]; | ||
117 | - const operationType = ref<string>(''); | ||
118 | - | ||
119 | - const options = [ | ||
120 | - { | ||
121 | - label: '数字', | ||
122 | - value: 'NUMERIC', | ||
123 | - }, | ||
124 | - { | ||
125 | - label: '布尔值', | ||
126 | - value: 'BOOLEAN', | ||
127 | - }, | ||
128 | - { | ||
129 | - label: '字符串', | ||
130 | - value: 'STRING', | ||
131 | - }, | ||
132 | - { | ||
133 | - label: '时间', | ||
134 | - value: 'DATE_TIME', | ||
135 | - }, | ||
136 | - ]; | ||
137 | - // 子组件获取父组件的值 | ||
138 | - const childGetFieldsValue = () => getFieldsValue(); | ||
139 | - | ||
140 | - provide('operationType', operationType); | ||
141 | - | ||
142 | - // 获取conditionScreeningForm的组件 | ||
143 | - const getRefItemConditionScreeningRefs = async () => { | ||
144 | - await nextTick(); | ||
145 | - return conditionScreeningRef.value.refItem.conditionScreeningRefs; | ||
146 | - }; | ||
147 | - | ||
148 | - const setConditionScreeningList = (list) => { | ||
149 | - conditionScreeningRef.value.conditionScreeningList = list; | ||
150 | - }; | ||
151 | - const setRichText = (list) => { | ||
152 | - conditionScreeningRef.value.otherAttribute = list; | ||
153 | - }; | ||
154 | - defineExpose({ | ||
155 | - getFieldsValueFunc, | ||
156 | - updateFieldDeviceId, | ||
157 | - resetFieldsValueFunc, | ||
158 | - setFieldsFormValueFun, | ||
159 | - childGetFieldsValue, | ||
160 | - operationType, | ||
161 | - getRefItemConditionScreeningRefs, | ||
162 | - setConditionScreeningList, | ||
163 | - setRichText, | ||
164 | - }); | ||
165 | -</script> |
src/views/rule/linkedge/cpns/trigger.vue
deleted
100644 → 0
1 | -<template> | ||
2 | - <div> | ||
3 | - <CollapseContainer style="background-color: #f2f2f2" :title="`触发器 ${triggerIndex + 1}`"> | ||
4 | - <template #action> | ||
5 | - <div class="flex"> | ||
6 | - <div> | ||
7 | - <span class="mr-2">启用规则</span> | ||
8 | - <RadioGroup v-model:value="schedule" :options="scheduleOptions" /> | ||
9 | - </div> | ||
10 | - <Tooltip title="移除" class="ml-4"> | ||
11 | - <Icon | ||
12 | - icon="fluent:delete-off-20-regular" | ||
13 | - size="20" | ||
14 | - class="mr-2 cursor-pointer" | ||
15 | - @click="handleDelete(triggerIndex)" | ||
16 | - /> | ||
17 | - </Tooltip> | ||
18 | - </div> | ||
19 | - </template> | ||
20 | - <BasicForm @register="registerForm"> | ||
21 | - <template #operationType="{ model, field }"> | ||
22 | - <Select | ||
23 | - :options="options" | ||
24 | - v-model:value="model[field]" | ||
25 | - @change="operationType = model[field]" | ||
26 | - placeholder="请选择比较类型" | ||
27 | - allowClear | ||
28 | - /> | ||
29 | - </template> | ||
30 | - </BasicForm> | ||
31 | - <Card size="small" :bordered="false" style="border: 2px dashed #797979" v-if="operationType"> | ||
32 | - <ConditionScreening | ||
33 | - :childGetFieldsValue="childGetFieldsValue" | ||
34 | - ref="conditionScreeningRef" | ||
35 | - /> | ||
36 | - </Card> | ||
37 | - </CollapseContainer> | ||
38 | - </div> | ||
39 | -</template> | ||
40 | -<script lang="ts" setup> | ||
41 | - import { ref, provide, nextTick } from 'vue'; | ||
42 | - import { CollapseContainer } from '/@/components/Container/index'; | ||
43 | - import { BasicForm, useForm } from '/@/components/Form/index'; | ||
44 | - import { Icon } from '/@/components/Icon'; | ||
45 | - import { Tooltip, Radio, Card, Select } from 'ant-design-vue'; | ||
46 | - import { trigger_condition_schema } from '../config/config.data.ts'; | ||
47 | - import { getAttribute } from '/@/api/ruleengine/ruleengineApi'; | ||
48 | - import ConditionScreening from './ConditionScreening.vue'; | ||
49 | - const RadioGroup = Radio.Group; | ||
50 | - | ||
51 | - defineProps({ | ||
52 | - triggerIndex: { | ||
53 | - type: Number, | ||
54 | - required: true, | ||
55 | - }, | ||
56 | - }); | ||
57 | - const emit = defineEmits(['deleteTrigger']); | ||
58 | - const conditionScreeningRef = ref(); | ||
59 | - const [registerForm, { resetFields, getFieldsValue, updateSchema, setFieldsValue }] = useForm({ | ||
60 | - schemas: trigger_condition_schema, | ||
61 | - showActionButtonGroup: false, | ||
62 | - }); | ||
63 | - | ||
64 | - const getFieldsValueFunc = () => { | ||
65 | - const predicate = conditionScreeningRef?.value?.refItem?.conditionScreeningRefs?.value?.map( | ||
66 | - (item) => { | ||
67 | - return item.getFieldsValue(); | ||
68 | - } | ||
69 | - ); | ||
70 | - return { ...getFieldsValue(), predicate, schedule: schedule.value }; | ||
71 | - }; | ||
72 | - const updateFieldDeviceId = (deviceList: any[]) => { | ||
73 | - updateSchema({ | ||
74 | - field: 'entityId', | ||
75 | - componentProps: { | ||
76 | - options: deviceList, | ||
77 | - onChange(e) { | ||
78 | - if (e) { | ||
79 | - updateFieldAttributeFunc(); | ||
80 | - } | ||
81 | - }, | ||
82 | - }, | ||
83 | - }); | ||
84 | - }; | ||
85 | - const resetFieldsValueFunc = () => resetFields(); | ||
86 | - // 回显数据函数 | ||
87 | - const setFieldsFormValueFun = (fieldsValue) => { | ||
88 | - setFieldsValue(fieldsValue); | ||
89 | - }; | ||
90 | - const updateFieldAttributeFunc = async () => { | ||
91 | - const data1 = await getAttribute(); | ||
92 | - const options = data1.map((m) => { | ||
93 | - return { | ||
94 | - label: m, | ||
95 | - value: m, | ||
96 | - }; | ||
97 | - }); | ||
98 | - updateSchema({ | ||
99 | - field: 'type2', | ||
100 | - componentProps: { | ||
101 | - placeholder: '请选择属性', | ||
102 | - options, | ||
103 | - }, | ||
104 | - }); | ||
105 | - }; | ||
106 | - | ||
107 | - const handleDelete = (triggerIndex) => { | ||
108 | - emit('deleteTrigger', triggerIndex); | ||
109 | - }; | ||
110 | - | ||
111 | - const schedule = ref('ANY_TIME'); | ||
112 | - const scheduleOptions = [ | ||
113 | - { label: '始终启用', value: 'ANY_TIME' }, | ||
114 | - { label: '定时启用', value: 'SPECIFIC_TIME' }, | ||
115 | - { label: '自定义启用', value: 'CUSTOM' }, | ||
116 | - ]; | ||
117 | - const operationType = ref<string>(''); | ||
118 | - | ||
119 | - const options = [ | ||
120 | - { | ||
121 | - label: '数字', | ||
122 | - value: 'NUMERIC', | ||
123 | - }, | ||
124 | - { | ||
125 | - label: '布尔值', | ||
126 | - value: 'BOOLEAN', | ||
127 | - }, | ||
128 | - { | ||
129 | - label: '字符串', | ||
130 | - value: 'STRING', | ||
131 | - }, | ||
132 | - { | ||
133 | - label: '时间', | ||
134 | - value: 'DATE_TIME', | ||
135 | - }, | ||
136 | - ]; | ||
137 | - // 子组件获取父组件的值 | ||
138 | - const childGetFieldsValue = () => getFieldsValue(); | ||
139 | - | ||
140 | - provide('operationType', operationType); | ||
141 | - | ||
142 | - // 获取conditionScreeningForm的组件 | ||
143 | - const getRefItemConditionScreeningRefs = async () => { | ||
144 | - await nextTick(); | ||
145 | - return conditionScreeningRef.value.refItem.conditionScreeningRefs; | ||
146 | - }; | ||
147 | - | ||
148 | - const setConditionScreeningList = (list) => { | ||
149 | - conditionScreeningRef.value.conditionScreeningList = list; | ||
150 | - }; | ||
151 | - const setRichText = (list) => { | ||
152 | - conditionScreeningRef.value.otherAttribute = list; | ||
153 | - }; | ||
154 | - defineExpose({ | ||
155 | - getFieldsValueFunc, | ||
156 | - updateFieldDeviceId, | ||
157 | - resetFieldsValueFunc, | ||
158 | - setFieldsFormValueFun, | ||
159 | - childGetFieldsValue, | ||
160 | - operationType, | ||
161 | - getRefItemConditionScreeningRefs, | ||
162 | - setConditionScreeningList, | ||
163 | - setRichText, | ||
164 | - }); | ||
165 | -</script> |
@@ -13,7 +13,6 @@ | @@ -13,7 +13,6 @@ | ||
13 | { | 13 | { |
14 | label: '查看', | 14 | label: '查看', |
15 | icon: 'ant-design:eye-outlined', | 15 | icon: 'ant-design:eye-outlined', |
16 | - ifShow: record.creator !== userId, | ||
17 | onClick: handleView.bind(null, record), | 16 | onClick: handleView.bind(null, record), |
18 | }, | 17 | }, |
19 | { | 18 | { |
@@ -65,6 +64,9 @@ | @@ -65,6 +64,9 @@ | ||
65 | screenLinkPageDeleteApi, | 64 | screenLinkPageDeleteApi, |
66 | handleSuccess | 65 | handleSuccess |
67 | ); | 66 | ); |
67 | + const handleLog = (log) => { | ||
68 | + console.log(log); | ||
69 | + }; | ||
68 | const userInfo: any = getAuthCache(USER_INFO_KEY); | 70 | const userInfo: any = getAuthCache(USER_INFO_KEY); |
69 | const userId = userInfo.userId; | 71 | const userId = userInfo.userId; |
70 | const role: string = userInfo.roles[0]; | 72 | const role: string = userInfo.roles[0]; |
@@ -125,6 +127,7 @@ | @@ -125,6 +127,7 @@ | ||
125 | authBtn, | 127 | authBtn, |
126 | role, | 128 | role, |
127 | userId, | 129 | userId, |
130 | + handleLog, | ||
128 | }; | 131 | }; |
129 | }, | 132 | }, |
130 | }); | 133 | }); |