Commit cc5f2eb36c720cc61f529147434c05430dd55a36
Merge branch 'fix/rule-chain-field' into 'main_dev'
隐藏规则链相关的节点和修改节点字段名 See merge request yunteng/thingskit-front!1049
Showing
12 changed files
with
148 additions
and
81 deletions
src/assets/svg/down-svg.svg
0 → 100644
| 1 | +<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1701135308389" class="icon" viewBox="0 0 1079 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1473" xmlns:xlink="http://www.w3.org/1999/xlink" width="210.7421875" height="200"><path d="M602.973867 717.627733l342.024533-342.075733a48.759467 48.759467 0 0 0 14.344533-34.577067 48.896 48.896 0 0 0-83.456-34.5856l-307.5072 307.541334-307.464533-307.549867a48.913067 48.913067 0 0 0-69.128533 0 48.955733 48.955733 0 0 0 0 69.154133L533.845333 717.610667a48.930133 48.930133 0 0 0 69.128534 0.017066z" fill="#AAAAAA" p-id="1474"></path></svg> | |
| \ No newline at end of file | ... | ... |
| ... | ... | @@ -25,7 +25,7 @@ export default { |
| 25 | 25 | CLIENT_ATTRIBUTE_NAMES: '客户端属性', |
| 26 | 26 | SHARED_ATTRIBUTE_NAMES: '共享属性', |
| 27 | 27 | SERVER_ATTRIBUTE_NAMES: '服务器属性', |
| 28 | - LATEST_TS_KEY_NAMES: '最新时间序列', | |
| 28 | + LATEST_TS_KEY_NAMES: '最新时序数据-标识符', | |
| 29 | 29 | GET_LATEST_VALUE_WITH_TS: '获取带有时间戳的最新遥测', |
| 30 | 30 | }, |
| 31 | 31 | OriginatorFieldsNameEnum: { | ... | ... |
| ... | ... | @@ -28,24 +28,24 @@ export enum RelationTypeNameEnum { |
| 28 | 28 | */ |
| 29 | 29 | export enum EntityTypeEnum { |
| 30 | 30 | DEVICE = 'DEVICE', |
| 31 | - ASSET = 'ASSET', | |
| 32 | - ENTITY_VIEW = 'ENTITY_VIEW', | |
| 31 | + // ASSET = 'ASSET', | |
| 32 | + // ENTITY_VIEW = 'ENTITY_VIEW', | |
| 33 | 33 | TENANT = 'TENANT', |
| 34 | 34 | CUSTOMER = 'CUSTOMER', |
| 35 | 35 | USER = 'USER', |
| 36 | - DASHBOARD = 'DASHBOARD', | |
| 37 | - EDGE = 'EDGE', | |
| 36 | + // DASHBOARD = 'DASHBOARD', | |
| 37 | + // EDGE = 'EDGE', | |
| 38 | 38 | } |
| 39 | 39 | |
| 40 | 40 | export enum EntityTypeNameEnum { |
| 41 | 41 | DEVICE = '设备', |
| 42 | - ASSET = '资产', | |
| 43 | - ENTITY_VIEW = '实体视图', | |
| 42 | + // ASSET = '资产', | |
| 43 | + // ENTITY_VIEW = '实体视图', | |
| 44 | 44 | TENANT = '租户', |
| 45 | 45 | CUSTOMER = '客户', |
| 46 | 46 | USER = '用户', |
| 47 | - DASHBOARD = '仪表板', | |
| 48 | - EDGE = '边缘', | |
| 47 | + // DASHBOARD = '仪表板', | |
| 48 | + // EDGE = '边缘', | |
| 49 | 49 | } |
| 50 | 50 | |
| 51 | 51 | /** | ... | ... |
| 1 | 1 | <script setup lang="ts"> |
| 2 | - import { Spin } from 'ant-design-vue'; | |
| 2 | + import { Spin, Tooltip } from 'ant-design-vue'; | |
| 3 | 3 | import { Background, BackgroundVariant } from '@vue-flow/background'; |
| 4 | 4 | import { Controls } from '@vue-flow/controls'; |
| 5 | 5 | import { Panel, PanelPosition, VueFlow } from '@vue-flow/core'; |
| ... | ... | @@ -24,6 +24,11 @@ |
| 24 | 24 | import { UpdateNodeDrawer } from './src/components/UpdateNodeDrawer'; |
| 25 | 25 | import { UpdateEdgeDrawer } from './src/components/UpdateEdgeDrawer'; |
| 26 | 26 | import { CreateRuleChainModal } from './src/components/CreateRuleChainModal'; |
| 27 | + import { useRouter } from 'vue-router'; | |
| 28 | + | |
| 29 | + // import { getRuleChinsList } from '/@/api/ruleengine/ruleengineApi'; | |
| 30 | + // import { ApiSelect } from '/@/components/Form'; | |
| 31 | + // import DownImage from '/@/assets/svg/down-svg.svg'; | |
| 27 | 32 | |
| 28 | 33 | const getId = Number(Math.random().toString().substring(2)).toString(16); |
| 29 | 34 | |
| ... | ... | @@ -96,6 +101,20 @@ |
| 96 | 101 | useSaveAndRedoActionType.triggerChange?.(); |
| 97 | 102 | }; |
| 98 | 103 | |
| 104 | + const ROUTER = useRouter(); | |
| 105 | + // const isShowSelect = ref<boolean>(false); | |
| 106 | + const handleBack = () => { | |
| 107 | + ROUTER.go(-1); | |
| 108 | + }; | |
| 109 | + | |
| 110 | + // const handleDown = () => { | |
| 111 | + // isShowSelect.value = !unref(isShowSelect); | |
| 112 | + // }; | |
| 113 | + | |
| 114 | + // const handleSelectChange = (e) => { | |
| 115 | + // ROUTER.replace(`${e}`); | |
| 116 | + // }; | |
| 117 | + | |
| 99 | 118 | onMounted(() => { |
| 100 | 119 | getCurrentPageMetaData(flowActionType); |
| 101 | 120 | getCurrentRuleChainDetail(); |
| ... | ... | @@ -131,9 +150,7 @@ |
| 131 | 150 | <template #edge-custom="props"> |
| 132 | 151 | <BasicEdge v-bind="props" /> |
| 133 | 152 | </template> |
| 134 | - | |
| 135 | 153 | <BasicConnectionArrow /> |
| 136 | - | |
| 137 | 154 | <Background :variant="BackgroundVariant.Lines" :gap="25" pattern-color="#cfcfcf" /> |
| 138 | 155 | |
| 139 | 156 | <Controls :position="PanelPosition.BottomLeft" /> |
| ... | ... | @@ -171,14 +188,56 @@ |
| 171 | 188 | </section> |
| 172 | 189 | </Panel> |
| 173 | 190 | |
| 174 | - <Panel position="top-right"> | |
| 191 | + <Panel position="top-right" class="flex"> | |
| 192 | + <Tooltip title="返回"> | |
| 193 | + <button | |
| 194 | + class="w-10 h-10 bg-gray-300 flex justify-center items-center rounded-full dark:bg-dark-50" | |
| 195 | + @click="handleBack" | |
| 196 | + ><Icon icon="ant-design:rollback-outlined" class="cursor-pointer svg:text-xl" /> | |
| 197 | + </button> | |
| 198 | + </Tooltip> | |
| 175 | 199 | <button |
| 176 | - class="w-10 h-10 bg-gray-300 flex justify-center items-center rounded-full dark:bg-dark-50" | |
| 200 | + class="w-10 h-10 bg-gray-300 mx-1 flex justify-center items-center rounded-full dark:bg-dark-50" | |
| 177 | 201 | @click="handleFullScreen" |
| 178 | 202 | > |
| 179 | 203 | <Icon class="!text-2xl dark:text-light-50" :icon="getFullScreenIcon" /> |
| 180 | 204 | </button> |
| 181 | 205 | </Panel> |
| 206 | + <!-- <Panel position="top-left"> | |
| 207 | + <h1 class="ml-10">{{ ruleChainDetail?.name }}</h1> | |
| 208 | + </Panel> --> | |
| 209 | + <!-- <Panel position="top-center" class="flex flex-col items-center"> | |
| 210 | + <button | |
| 211 | + class="w-10 h-10 bg-gray-300 mx-1 flex justify-center items-center rounded-full dark:bg-dark-50" | |
| 212 | + @click="handleDown" | |
| 213 | + > | |
| 214 | + <img :src="DownImage" alt="avatar" /> | |
| 215 | + </button> | |
| 216 | + <div v-if="isShowSelect" class="mt-1"> | |
| 217 | + <ApiSelect | |
| 218 | + class="!mx-2 flex-auto w-40" | |
| 219 | + :api=" | |
| 220 | + async (params) => { | |
| 221 | + const options = await getRuleChinsList(params); | |
| 222 | + return options?.data | |
| 223 | + .map((item) => ({ label: item.name, value: item.id.id })) | |
| 224 | + .filter((item) => item.label !== ruleChainDetail?.name); | |
| 225 | + } | |
| 226 | + " | |
| 227 | + :showSearch="true" | |
| 228 | + :filterOption="(inputValue: string, option: Record<'label' | 'value', string>) => | |
| 229 | + option.label.includes(inputValue)" | |
| 230 | + placeholder="请选择规则链" | |
| 231 | + :params="{ | |
| 232 | + page: 0, | |
| 233 | + pageSize: 100, | |
| 234 | + sortProperty: 'createdTime', | |
| 235 | + sortOrder: 'DESC', | |
| 236 | + }" | |
| 237 | + @change="handleSelectChange" | |
| 238 | + /> | |
| 239 | + </div> | |
| 240 | + </Panel> --> | |
| 182 | 241 | </VueFlow> |
| 183 | 242 | </Spin> |
| 184 | 243 | |
| ... | ... | @@ -203,5 +262,9 @@ |
| 203 | 262 | .ant-spin-container { |
| 204 | 263 | @apply w-full h-full; |
| 205 | 264 | } |
| 265 | + | |
| 266 | + // :deep(.top .center) { | |
| 267 | + // margin: 0 !important; | |
| 268 | + // } | |
| 206 | 269 | } |
| 207 | 270 | </style> | ... | ... |
| ... | ... | @@ -8,54 +8,54 @@ import { useI18n } from '/@/hooks/web/useI18n'; |
| 8 | 8 | const { t } = useI18n(); |
| 9 | 9 | |
| 10 | 10 | export const formSchemas: FormSchema[] = [ |
| 11 | - { | |
| 12 | - field: OriginatorAttributesEnum.TELL_FAILURE_IF_ABSENT, | |
| 13 | - component: 'Checkbox', | |
| 14 | - label: t(OriginatorAttributesNameEnum.TELL_FAILURE_IF_ABSENT), | |
| 15 | - renderComponentContent: () => ({ | |
| 16 | - default: () => | |
| 17 | - 'If at least one selected key doesn\'t exist the outbound message will report "Failure".', | |
| 18 | - }), | |
| 19 | - }, | |
| 20 | - { | |
| 21 | - field: OriginatorAttributesEnum.CLIENT_ATTRIBUTE_NAMES, | |
| 22 | - component: 'Select', | |
| 23 | - label: t(OriginatorAttributesNameEnum.CLIENT_ATTRIBUTE_NAMES), | |
| 24 | - helpMessage: [ | |
| 25 | - `Hint: use \${metadataKey} for value from metadata, $[messageKey] for value from message body`, | |
| 26 | - ], | |
| 27 | - componentProps: { | |
| 28 | - mode: 'tags', | |
| 29 | - open: false, | |
| 30 | - placeholder: `请输入${t(OriginatorAttributesNameEnum.CLIENT_ATTRIBUTE_NAMES)}`, | |
| 31 | - }, | |
| 32 | - }, | |
| 33 | - { | |
| 34 | - field: OriginatorAttributesEnum.SHARED_ATTRIBUTE_NAMES, | |
| 35 | - component: 'Select', | |
| 36 | - label: t(OriginatorAttributesNameEnum.SHARED_ATTRIBUTE_NAMES), | |
| 37 | - helpMessage: [ | |
| 38 | - `Hint: use \${metadataKey} for value from metadata, $[messageKey] for value from message body`, | |
| 39 | - ], | |
| 40 | - componentProps: { | |
| 41 | - mode: 'tags', | |
| 42 | - open: false, | |
| 43 | - placeholder: `请输入${t(OriginatorAttributesNameEnum.SHARED_ATTRIBUTE_NAMES)}`, | |
| 44 | - }, | |
| 45 | - }, | |
| 46 | - { | |
| 47 | - field: OriginatorAttributesEnum.SERVER_ATTRIBUTE_NAMES, | |
| 48 | - component: 'Select', | |
| 49 | - label: t(OriginatorAttributesNameEnum.SERVER_ATTRIBUTE_NAMES), | |
| 50 | - helpMessage: [ | |
| 51 | - `Hint: use \${metadataKey} for value from metadata, $[messageKey] for value from message body`, | |
| 52 | - ], | |
| 53 | - componentProps: { | |
| 54 | - mode: 'tags', | |
| 55 | - open: false, | |
| 56 | - placeholder: `请输入${t(OriginatorAttributesNameEnum.SERVER_ATTRIBUTE_NAMES)}`, | |
| 57 | - }, | |
| 58 | - }, | |
| 11 | + // { | |
| 12 | + // field: OriginatorAttributesEnum.TELL_FAILURE_IF_ABSENT, | |
| 13 | + // component: 'Checkbox', | |
| 14 | + // label: t(OriginatorAttributesNameEnum.TELL_FAILURE_IF_ABSENT), | |
| 15 | + // renderComponentContent: () => ({ | |
| 16 | + // default: () => | |
| 17 | + // 'If at least one selected key doesn\'t exist the outbound message will report "Failure".', | |
| 18 | + // }), | |
| 19 | + // }, | |
| 20 | + // { | |
| 21 | + // field: OriginatorAttributesEnum.CLIENT_ATTRIBUTE_NAMES, | |
| 22 | + // component: 'Select', | |
| 23 | + // label: t(OriginatorAttributesNameEnum.CLIENT_ATTRIBUTE_NAMES), | |
| 24 | + // helpMessage: [ | |
| 25 | + // `Hint: use \${metadataKey} for value from metadata, $[messageKey] for value from message body`, | |
| 26 | + // ], | |
| 27 | + // componentProps: { | |
| 28 | + // mode: 'tags', | |
| 29 | + // open: false, | |
| 30 | + // placeholder: `请输入${t(OriginatorAttributesNameEnum.CLIENT_ATTRIBUTE_NAMES)}`, | |
| 31 | + // }, | |
| 32 | + // }, | |
| 33 | + // { | |
| 34 | + // field: OriginatorAttributesEnum.SHARED_ATTRIBUTE_NAMES, | |
| 35 | + // component: 'Select', | |
| 36 | + // label: t(OriginatorAttributesNameEnum.SHARED_ATTRIBUTE_NAMES), | |
| 37 | + // helpMessage: [ | |
| 38 | + // `Hint: use \${metadataKey} for value from metadata, $[messageKey] for value from message body`, | |
| 39 | + // ], | |
| 40 | + // componentProps: { | |
| 41 | + // mode: 'tags', | |
| 42 | + // open: false, | |
| 43 | + // placeholder: `请输入${t(OriginatorAttributesNameEnum.SHARED_ATTRIBUTE_NAMES)}`, | |
| 44 | + // }, | |
| 45 | + // }, | |
| 46 | + // { | |
| 47 | + // field: OriginatorAttributesEnum.SERVER_ATTRIBUTE_NAMES, | |
| 48 | + // component: 'Select', | |
| 49 | + // label: t(OriginatorAttributesNameEnum.SERVER_ATTRIBUTE_NAMES), | |
| 50 | + // helpMessage: [ | |
| 51 | + // `Hint: use \${metadataKey} for value from metadata, $[messageKey] for value from message body`, | |
| 52 | + // ], | |
| 53 | + // componentProps: { | |
| 54 | + // mode: 'tags', | |
| 55 | + // open: false, | |
| 56 | + // placeholder: `请输入${t(OriginatorAttributesNameEnum.SERVER_ATTRIBUTE_NAMES)}`, | |
| 57 | + // }, | |
| 58 | + // }, | |
| 59 | 59 | { |
| 60 | 60 | field: OriginatorAttributesEnum.LATEST_TS_KEY_NAMES, |
| 61 | 61 | component: 'Select', |
| ... | ... | @@ -75,7 +75,7 @@ export const formSchemas: FormSchema[] = [ |
| 75 | 75 | label: t(OriginatorAttributesNameEnum.GET_LATEST_VALUE_WITH_TS), |
| 76 | 76 | renderComponentContent: () => ({ |
| 77 | 77 | default: () => |
| 78 | - 'If selected, latest telemetry values will be added to the outbound message metadata with timestamp, e.g: "temp": "{"ts":1574329385897, "value":42}"', | |
| 78 | + '如果选中,最新的遥测值将添加到带有时间戳的出站消息元数据中, 例如: "temp": "{"ts":1574329385897, "value":42}"', | |
| 79 | 79 | }), |
| 80 | 80 | }, |
| 81 | 81 | ]; | ... | ... |
| ... | ... | @@ -13,6 +13,7 @@ export const formSchemas: FormSchema[] = [ |
| 13 | 13 | component: 'AttributeConfiguration', |
| 14 | 14 | label: t(OriginatorFieldsNameEnum.FIELDS_MAPPING), |
| 15 | 15 | slot: OriginatorFieldsEnum.FIELDS_MAPPING, |
| 16 | + helpMessage: '允许发起者类型: 租户、客户、用户、设备、告警、规则链', | |
| 16 | 17 | valueField: 'value', |
| 17 | 18 | changeEvent: 'update:value', |
| 18 | 19 | }, | ... | ... |
| ... | ... | @@ -139,7 +139,7 @@ export const formSchemas: FormSchema[] = [ |
| 139 | 139 | { |
| 140 | 140 | field: RelatedDeviceAttributeFieldsEnum.LATEST_TS_KEY_NAMES, |
| 141 | 141 | component: 'Select', |
| 142 | - label: t(RelatedDeviceAttributeFieldsNameEnum.LATEST_TS_KEY_NAMES), | |
| 142 | + label: t(RelatedDeviceAttributeFieldsNameEnum.LATEST_TS_KEY_NAMES) + '123', | |
| 143 | 143 | componentProps: { |
| 144 | 144 | open: false, |
| 145 | 145 | mode: 'tags', | ... | ... |
| 1 | 1 | import type { CategoryConfigType, NodeItemConfigType } from '../../types/node'; |
| 2 | 2 | import { RuleNodeTypeEnum } from '../index.type'; |
| 3 | -import { CustomerAttributesConfig } from './CustomerAttributes'; | |
| 3 | +// import { CustomerAttributesConfig } from './CustomerAttributes'; | |
| 4 | 4 | import { OriginatorTelemetryConfig } from './OriginatorTelemetry'; |
| 5 | 5 | import { OriginatorFieldsConfig } from './OriginatorFields'; |
| 6 | 6 | import { CalculateDeltaConfig } from './CalculateDelta'; |
| 7 | -import { TenantAttributesConfig } from './TenantAttributes'; | |
| 8 | -import { RelatedDeviceAttributesConfig } from './RelatedDeviceAttributes'; | |
| 9 | -import { RelatedAttributesConfig } from './RelatedAttributes'; | |
| 10 | -import { TenantDetailsConfig } from './TenantDetails'; | |
| 7 | +// import { TenantAttributesConfig } from './TenantAttributes'; | |
| 8 | +// import { RelatedDeviceAttributesConfig } from './RelatedDeviceAttributes'; | |
| 9 | +// import { RelatedAttributesConfig } from './RelatedAttributes'; | |
| 10 | +// import { TenantDetailsConfig } from './TenantDetails'; | |
| 11 | 11 | import { OriginatorAttributesConfig } from './OriginatorAttributes'; |
| 12 | -import { CustomerDetailsConfig } from './CustomerDetails'; | |
| 12 | +// import { CustomerDetailsConfig } from './CustomerDetails'; | |
| 13 | 13 | import { useI18n } from '/@/hooks/web/useI18n'; |
| 14 | 14 | |
| 15 | 15 | const { t } = useI18n(); // 加载国际化 |
| ... | ... | @@ -23,13 +23,13 @@ export const EnrichmentCategoryConfig: CategoryConfigType = { |
| 23 | 23 | |
| 24 | 24 | export const EnrichmentComponents: NodeItemConfigType[] = [ |
| 25 | 25 | CalculateDeltaConfig, |
| 26 | - CustomerAttributesConfig, | |
| 27 | - CustomerDetailsConfig, | |
| 26 | + // CustomerAttributesConfig, | |
| 27 | + // CustomerDetailsConfig, | |
| 28 | 28 | OriginatorAttributesConfig, |
| 29 | 29 | OriginatorFieldsConfig, |
| 30 | 30 | OriginatorTelemetryConfig, |
| 31 | - RelatedAttributesConfig, | |
| 32 | - RelatedDeviceAttributesConfig, | |
| 33 | - TenantAttributesConfig, | |
| 34 | - TenantDetailsConfig, | |
| 31 | + // RelatedAttributesConfig, | |
| 32 | + // RelatedDeviceAttributesConfig, | |
| 33 | + // TenantAttributesConfig, | |
| 34 | + // TenantDetailsConfig, | |
| 35 | 35 | ]; | ... | ... |
| ... | ... | @@ -9,6 +9,7 @@ |
| 9 | 9 | import { useForm, BasicForm } from '/@/components/Form'; |
| 10 | 10 | import { BottomFormSchemas, TopFormSchemas } from '../CreateNodeModal/config'; |
| 11 | 11 | import { toRaw, unref } from 'vue'; |
| 12 | + | |
| 12 | 13 | import { BasicEvents } from './BasicEvents'; |
| 13 | 14 | |
| 14 | 15 | const [topFormRegister, topFormActionType] = useForm({ |
| ... | ... | @@ -79,7 +80,7 @@ |
| 79 | 80 | <template> |
| 80 | 81 | <BasicDrawer |
| 81 | 82 | v-model:visible="visible" |
| 82 | - :width="nodeData?.created ? '50%' : '40%'" | |
| 83 | + :width="!nodeData?.created ? '55%' : '40%'" | |
| 83 | 84 | showFooter |
| 84 | 85 | showCancelBtn |
| 85 | 86 | showOkBtn | ... | ... |