From a277fe1cb67d804e6f20ba2c06dee9c841025a0d Mon Sep 17 00:00:00 2001 From: xieyonghong <18010623010@163.com> Date: Thu, 16 Mar 2023 20:14:47 +0800 Subject: [PATCH] =?UTF-8?q?update:=20=E4=BC=98=E5=8C=96=E5=9C=BA=E6=99=AF?= =?UTF-8?q?=E8=81=94=E5=8A=A8=E8=BF=87=E6=BB=A4=E6=9D=A1=E4=BB=B6=E4=B8=AD?= =?UTF-8?q?=E7=9A=84columns?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/scene.ts | 4 +-- .../Save/action/ListItem/FilterCondition.vue | 31 ++++++++++++++++++- .../Save/action/ListItem/FilterGroup.vue | 25 +++++++++++---- .../Scene/Save/action/ListItem/Item.vue | 20 +++++++++--- .../Scene/Save/action/ListItem/List.vue | 6 +--- .../Scene/Save/action/Modal/index.vue | 3 +- .../rule-engine/Scene/Save/action/index.vue | 15 ++++----- src/views/rule-engine/Scene/Save/util.ts | 4 +-- 8 files changed, 79 insertions(+), 29 deletions(-) diff --git a/src/store/scene.ts b/src/store/scene.ts index 973f334e..a1f1d94a 100644 --- a/src/store/scene.ts +++ b/src/store/scene.ts @@ -94,8 +94,8 @@ export const useSceneStore = defineStore('scene', () => { const branchesLength = branches.length; if ( triggerType === 'device' && - ((branchesLength === 1 && !!branches[0]?.when?.length) || // 有一组数据并且when有值 - (branchesLength > 1 && !branches[branchesLength - 1]?.when?.length)) // 有多组否则数据,并且最后一组when有值 + ((branchesLength === 1 && branches[0]?.when?.length) || // 有一组数据并且when有值 + (branchesLength > 1 && branches[branchesLength - 1]?.when?.length)) // 有多组否则数据,并且最后一组when有值 ) { branches.push(null); } diff --git a/src/views/rule-engine/Scene/Save/action/ListItem/FilterCondition.vue b/src/views/rule-engine/Scene/Save/action/ListItem/FilterCondition.vue index 13b973fd..4de9e365 100644 --- a/src/views/rule-engine/Scene/Save/action/ListItem/FilterCondition.vue +++ b/src/views/rule-engine/Scene/Save/action/ListItem/FilterCondition.vue @@ -82,6 +82,7 @@ import ParamsDropdown, { DoubleParamsDropdown } from '../../components/ParamsDro import { inject } from 'vue' import { useSceneStore } from 'store/scene' import { storeToRefs } from 'pinia'; +import { flattenDeep, set } from 'lodash-es' const sceneStore = useSceneStore() const { data: formModel } = storeToRefs(sceneStore) @@ -207,12 +208,32 @@ const mouseout = () => { } } -const columnSelect = () => { +const handleOptionsColumnsValue = (termsColumns: any[], _options: any) => { + formModel.value.branches![props.branchName].then[props.thenName].actions[props.name].options!.termsColumns = termsColumns + const flatten = new Set(flattenDeep(termsColumns)) + let newColumns = [...flatten.values()] + if (_options?.otherColumns) { + newColumns = [..._options?.otherColumns, ...newColumns] + } + formModel.value.branches![props.branchName].then[props.thenName].actions[props.name].options!.columns = newColumns +} + +const columnSelect = (e: any) => { paramsValue.termType = 'eq' paramsValue.value = { source: tabsOptions.value[0].key, value: undefined } + + const columns = e.metadata === true ? [e.column] : [] + const _options = formModel.value.branches![props.branchName].then[props.thenName].actions[props.actionName].options + const termsColumns = _options?.termsColumns || [] + set( + termsColumns, + [props.termsName, props.name], + columns + ) + handleOptionsColumnsValue(termsColumns, _options) emit('update:value', { ...paramsValue }) } @@ -245,6 +266,14 @@ const termAdd = () => { const onDelete = () => { formModel.value.branches?.[props.branchName]?.then?.[props.thenName]?.actions?.[props.actionName].terms?.[props.termsName].terms?.splice(props.name, 1) + const _options = formModel.value.branches![props.branchName].then[props.thenName].actions[props.name].options + const termsColumns = _options?.termsColumns || [] + set( + termsColumns, + [props.termsName, props.name], + [] + ) + handleOptionsColumnsValue(termsColumns, _options) } nextTick(() => { diff --git a/src/views/rule-engine/Scene/Save/action/ListItem/FilterGroup.vue b/src/views/rule-engine/Scene/Save/action/ListItem/FilterGroup.vue index f7c1c7ec..77bd060d 100644 --- a/src/views/rule-engine/Scene/Save/action/ListItem/FilterGroup.vue +++ b/src/views/rule-engine/Scene/Save/action/ListItem/FilterGroup.vue @@ -58,7 +58,7 @@ import { storeToRefs } from 'pinia' import { useSceneStore } from 'store/scene' import DropdownButton from '../../components/DropdownButton' import FilterItem from './FilterCondition.vue' -import { isArray } from 'lodash-es' +import { flattenDeep, isArray, set } from 'lodash-es' import { provide } from 'vue' import { randomString } from '@/utils/utils' import { useParams } from '@/views/rule-engine/Scene/Save/util' @@ -66,8 +66,6 @@ import { useParams } from '@/views/rule-engine/Scene/Save/util' const sceneStore = useSceneStore() const { data: formModel } = storeToRefs(sceneStore) - - const props = defineProps({ isFirst: { type: Boolean, @@ -103,9 +101,7 @@ const { columnOptions } = useParams({ branch: props.branchName, branchGroup: props.thenName, action: props.actionName -}, [ - formModel.value.branches![props.branchName].then[props.thenName].actions[props.actionName] -]) +}) provide('filter-params', columnOptions) @@ -123,6 +119,16 @@ const mouseout = () => { showDelete.value = false } +const handleOptionsColumnsValue = (termsColumns: any[], _options: any) => { + formModel.value.branches![props.branchName].then[props.thenName].actions[props.name].options!.termsColumns = termsColumns + const flatten = new Set(flattenDeep(termsColumns)) + let newColumns = [...flatten.values()] + if (_options?.otherColumns) { + newColumns = [..._options?.otherColumns, ...newColumns] + } + formModel.value.branches![props.branchName].then[props.thenName].actions[props.name].options!.columns = newColumns +} + const addTerms = () => { const item: any = { type: 'and', @@ -154,6 +160,13 @@ const onDelete = () => { .then[props.thenName] .actions[props.actionName] .terms?.splice(props.name, 1) + + const _options = formModel.value.branches![props.branchName].then[props.thenName].actions[props.actionName].options + const termsColumns = _options?.termsColumns || [] + if (_options?.termsColumns) { + termsColumns.splice(props.name, 1) + handleOptionsColumnsValue(termsColumns, _options) + } } const rules = [ diff --git a/src/views/rule-engine/Scene/Save/action/ListItem/Item.vue b/src/views/rule-engine/Scene/Save/action/ListItem/Item.vue index f93c8e96..0a34f6d5 100644 --- a/src/views/rule-engine/Scene/Save/action/ListItem/Item.vue +++ b/src/views/rule-engine/Scene/Save/action/ListItem/Item.vue @@ -446,6 +446,11 @@ const termsOptions = computed(() => { }); const onDelete = () => { + if (props.name !== 0 && !props.parallel) { // 清空上一个串行执行动作中的options.termsColumns和terms + _data.value.branches![props.branchesName].then[props.thenName].actions[props.name - 1].options!.termsColumns = [] + _data.value.branches![props.branchesName].then[props.thenName].actions[props.name - 1].options!.terms = [] + _data.value.branches![props.branchesName].then[props.thenName].actions[props.name - 1].terms = [] + } emit('delete'); }; @@ -453,11 +458,16 @@ const onClose = () => { visible.value = false; }; -const onSave = (data: ActionsType, options?: any) => { - emit('update', data, options); - // setTimeout(() => { - // getParams(); - // }, 10); +const onSave = (data: ActionsType, options: any) => { + const { key, terms } = _data.value.branches![props.branchesName].then?.[props.thenName].actions?.[props.name] + const actionItem: ActionsType = { + ...data, + options, + key, + terms + } + _data.value.branches![props.branchesName].then[props.thenName].actions.splice(props.name, 1, actionItem) + visible.value = false; }; diff --git a/src/views/rule-engine/Scene/Save/action/ListItem/List.vue b/src/views/rule-engine/Scene/Save/action/ListItem/List.vue index ec79be4f..1d15c422 100644 --- a/src/views/rule-engine/Scene/Save/action/ListItem/List.vue +++ b/src/views/rule-engine/Scene/Save/action/ListItem/List.vue @@ -11,7 +11,6 @@ :isLast="index === actions.length - 1" :options="item.options" @delete="_delete(item.key || '')" - @update="(data, options) => _update(data, options, item)" />