Преглед на файлове

fix: 联动规则与转发规则bug

lvkun преди 2 години
родител
ревизия
d17ae09d5b
променени са 5 файла, в които са добавени 15846 реда и са изтрити 359 реда
  1. 15438 1
      package-lock.json
  2. 2 3
      src/api/iot/rule.ts
  3. 85 39
      src/pages/Iot/rule/forwardRule.vue
  4. 7 2
      src/pages/Iot/rule/linkRules.vue
  5. 314 314
      yarn.lock

Файловите разлики са ограничени, защото са твърде много
+ 15438 - 1
package-lock.json


+ 2 - 3
src/api/iot/rule.ts

@@ -157,9 +157,8 @@ export const getLinkCount = (params?: {status: boolean}) => {
 
 export const updateLinkStatus = (data: {status: boolean, id: string}) => {
   return request<number>({
-    url: '/linkRule/status',
-    method: 'PUT',
-    data
+    url: `/linkRule/status?status=${data.status}&id=${data.id}`,
+    method: 'PUT'
   })
 }
 

+ 85 - 39
src/pages/Iot/rule/forwardRule.vue

@@ -35,7 +35,7 @@
           <a-form-item label="触发事件" >
               <a-select allowClear v-model:value="queryParams.subjectEvent"  placeholder="选择触发事件">
                 <a-select-option
-                  v-for="item in subjectEventList"
+                  v-for="item in Array.from(RuleController.SubjectEventMap, ([key, value]) => ({ ...value, value: value.key }))"
                   :key="item.key"
                   :value="item.value"
                 >
@@ -129,19 +129,19 @@
       <div v-if="state.stepCount === 0" >针对部分类型数据提供的快速配置,将引导您完成简单的业务设置。您也可以直接编辑过滤语句,实现更复杂的查询要求</div>
       <div v-else-if="state.stepCount === 1" >您可以设置将数据转发至华为云其他服务或私有服务器。</div>
     </div>
-    <!-- <div v-if="state.stepCount == 0">
-      <a-form :label-col="{span: 4 }" :wrapper-col="{ span: 14 }" style="height: 600px; overflow-y: auto;">
-        <a-form-item  label="规则名称" >
-          <a-input></a-input>
+    <div v-if="state.stepCount == 0">
+      <a-form :label-col="{span: 4 }" :wrapper-col="{ span: 14 }" style="height: 400px; overflow-y: auto;">
+        <a-form-item  label="规则名称" v-bind="validateInfosStep1.ruleLabel" >
+          <a-input v-model:value="forwardRStateStep1.ruleLabel" ></a-input>
         </a-form-item>
-        <a-form-item label="转发目标">
+        <a-form-item label="数据来源" v-bind="validateInfosStep1.subjectResource">
             <a-select
             allowClear
             style="width: 100%;"
-            v-model:value="forwardState.targetType"
+            v-model:value="forwardRStateStep1.subjectResource"
           >
             <a-select-option
-              v-for="item in forwardTatget"
+              v-for="item in subjectResourceList"
               :key="item.key"
               :value="item.key"
             >
@@ -149,14 +149,30 @@
             </a-select-option>
           </a-select>
         </a-form-item>
+        <a-form-item label="数据来源" v-bind="validateInfosStep1.subjectEvent">
+            <a-select
+            allowClear
+            style="width: 100%;"
+            v-model:value="forwardRStateStep1.subjectEvent"
+          >
+            <a-select-option
+              v-for="item in subjectEventList"
+              :key="item.key"
+              :value="item.key"
+            >
+              {{item.name}}
+            </a-select-option>
+          </a-select>
+        </a-form-item>
+        <a-form-item label="规则描述" >
+          <a-textarea
+            v-model:value="forwardRStateStep1.ruleDescription"
+            placeholder="请输入规则描述"
+            :auto-size="{ minRows: 2, maxRows: 5 }"
+          />
+        </a-form-item>
       </a-form>
-    </div> -->
-    <form-pro
-      v-if="state.stepCount == 0"
-      validate
-      :formProps="formProps"
-      ref="formProo"
-    />
+    </div>
     <div v-if="state.stepCount == 1" >
       <a-row>
         <a-col>
@@ -167,7 +183,7 @@
       </a-row>
       <a-table
         style="margin-top: 20px;"
-        v-if="forwardRuleTargets.length "
+        v-if="forwardRuleTargets.length"
         :columns="forwardRuleTargetsColumns"
         :data-source="forwardRuleTargets"
         size="middle"
@@ -196,7 +212,7 @@
   @cancel="state.targetVisible = false"
   @ok="ok('targetVisible')"
 >
-    <a-form :label-col="{span: 4 }" :wrapper-col="{ span: 14 }" style="height: 600px; overflow-y: auto;">
+    <a-form :label-col="{span: 4 }" :wrapper-col="{ span: 14 }" style="height: 400px; overflow-y: auto;">
       <a-form-item label="转发目标">
         <a-select
         allowClear
@@ -433,6 +449,7 @@ import { computed } from '@vue/reactivity'
 import TestDialog from './components/testDialog.vue'
 import StatisticsTemplate from '@/components/StatisticsTemplate/index.vue'
 import { SubjectEventEnum, SubjectResourceEnum } from '@/enum/common'
+import { useId } from '@/hooks'
 
 const columns = [
   {
@@ -574,8 +591,6 @@ const HttpRequestMethods = [
 
 const subjectResourceList = Array.from(RuleController.SubjectResourceMap, ([key, value]) => ({ ...value, value: value.key }))
 
-console.log('subjectResourceList', subjectResourceList)
-
 const subjectEventListByResourceMap = new Map([
   [SubjectResourceEnum.DEVICE, [SubjectEventEnum.DEVICE_CREATE, SubjectEventEnum.DEVICE_DELETE]],
   [SubjectResourceEnum.DEVICE_STATUS, [SubjectEventEnum.DEVICE_ATTRIBUTE_REPORT]],
@@ -585,9 +600,7 @@ const subjectEventListByResourceMap = new Map([
 
 const subjectEventList = computed(() => {
   const subjectevents = Array.from(RuleController.SubjectEventMap, ([key, value]) => ({ ...value, value: value.key }))
-  const keys = subjectEventListByResourceMap.get(queryParams.subjectResource as SubjectResourceEnum)
-  console.log('keys:', keys)
-  const a = queryParams
+  const keys = subjectEventListByResourceMap.get(forwardRStateStep1.subjectResource as SubjectResourceEnum)
   return subjectevents.filter(subjectevent => keys?.includes(subjectevent.key))
 })
 
@@ -720,6 +733,13 @@ const forwardR1Ref = ref()
 
 let forwardState = reactive(JSON.parse(JSON.stringify(initForwardState)))
 
+const forwardRStateStep1 = reactive({
+  ruleLabel: '',
+  subjectResource: '',
+  subjectEvent: '',
+  ruleDescription: ''
+})
+
 const forwardRuleState = reactive({
   HTTP: {
     endpointUrl: [{ required: true, message: '请填写http地址' }],
@@ -765,6 +785,19 @@ let forwardRuleTargets = reactive([])
 const forwardRuleStateComputed = computed(() => forwardState.targetType === '' ? {} : forwardRuleState[forwardState.targetType])
 
 const { resetFields, validate, validateInfos } = useForm(forwardState, forwardRuleStateComputed)
+const { resetFields: resetFieldsStep1, validate: validateStep1, validateInfos: validateInfosStep1 } = useForm(forwardRStateStep1, reactive({
+  ruleLabel: [{ required: true, message: '请填写转发规则名称' }],
+  subjectResource: [{ required: true, message: '请填写转发规则名称' }],
+  subjectEvent: [{ required: true, message: '请填写转发规则名称' }]
+}))
+
+const updateForwardRuleTargets = (record, index) => {
+  state.targetVisible = true
+  forwardState.targetType = record.targetType
+  // forwardState.id = useId()
+  console.log('forwardState:', forwardState)
+  resetFields({ ...record })
+}
 
 const changePage = ({ current }) => {
   queryParams.page = current
@@ -775,8 +808,6 @@ const openDetailModal = async (id: string) => {
   state.detailVisible = true
   const { data } = await RuleController.forwardById(id)
   detailForwardRef.value = data
-  console.log('detailForwardRef.value :', detailForwardRef.value)
-
   // const _forwardRuleTargets = data.forwardRuleTargets
 }
 
@@ -785,6 +816,10 @@ const openModalDebug = (id: string) => {
   state.forwardId = id
 }
 
+const closeModal = () => {
+  state.stepCount = 1
+}
+
 const openModal = async (opraState: 'add' | 'update', record) => {
   state.opraState = opraState
 
@@ -796,12 +831,14 @@ const openModal = async (opraState: 'add' | 'update', record) => {
   if (opraState === 'update') {
     state.forwardId = record.id
     const { data } = await RuleController.forwardById(record.id)
-    formProps[0].value = data.ruleLabel
-    formProps[1].value = data.subjectResource
-    formProps[2].value = data.subjectEvent
-    formProps[3].value = data.ruleDescription
+    resetFieldsStep1(data)
 
-    const _forwardRuleTargets = data.forwardRuleTargets
+    const _forwardRuleTargets = data.forwardRuleTargets!.map(item => {
+      return {
+        ...item,
+        id: useId()
+      }
+    })
 
     _forwardRuleTargets.forEach(item => {
       const _requestHeaders = item.requestHeaders
@@ -862,12 +899,19 @@ const ok = async (visibleKey: string) => {
   if (state.stepCount === 1) {
     if (state.targetVisible) {
       validate().then(() => {
-        console.log('forwardState:', forwardState)
-        forwardRuleTargets.push({ ...forwardState })
-        forwardState = reactive(JSON.parse(JSON.stringify(initForwardState)))
+        console.log('触发这里11111')
+        const index = forwardRuleTargets.findIndex(item => item.id === forwardState.id)
+        if (index >= 0) {
+          forwardRuleTargets.splice(index, 1, forwardState)
+        } else {
+          forwardRuleTargets.push({ ...forwardState, id: useId() })
+          forwardState = reactive(JSON.parse(JSON.stringify(initForwardState)))
+        }
         state.targetVisible = false
       })
     } else {
+      console.log('触发这里222')
+
       const _otherProperties: Record<string, string> = {}
 
       forwardRuleTargets.forEach(item => {
@@ -885,13 +929,15 @@ const ok = async (visibleKey: string) => {
         item.otherProperties = _otherProperties
       })
 
+      console.log('forwardState:', forwardState)
+
       forwardState.otherProperties.forEach(item => {
         _otherProperties[item.key] = item.value
       })
       if (state.opraState === 'add') {
-        await RuleController.postForward({ ...forwardR1Ref.value, forwardRuleTargets })
+        await RuleController.postForward({ ...forwardRStateStep1, forwardRuleTargets })
       } else {
-        await RuleController.updateForward({ ...forwardR1Ref.value, forwardRuleTargets, id: state.forwardId })
+        await RuleController.updateForward({ ...forwardRStateStep1, forwardRuleTargets, id: state.forwardId })
       }
 
       state.visible = false
@@ -900,11 +946,11 @@ const ok = async (visibleKey: string) => {
   }
 
   if (state.stepCount === 0) {
-    const r1 = await formProo.value.onSubmit()
-    if (r1) {
-      state.stepCount = 1
-      forwardR1Ref.value = r1
-    }
+    validateStep1().then((r) => {
+      if (r) {
+        state.stepCount = 1
+      }
+    })
   }
 }
 

+ 7 - 2
src/pages/Iot/rule/linkRules.vue

@@ -103,7 +103,7 @@
                   <a-menu-item @click="changeConditionLogic('AND')" >
                     <a >全部</a>
                   </a-menu-item>
-                  <a-menu-item @click="changeConditionLogic('ALL')">
+                  <a-menu-item @click="changeConditionLogic('OR')">
                     <a >任意一个</a>
                   </a-menu-item>
                 </a-menu>
@@ -265,6 +265,7 @@
     @cancel="state.formVisible = false"
     @ok="selectConditionAndAction"
     style="width: 700px;"
+    zIndex="1001"
   >
     <div  style="width: 100%;" v-if="state.opraModel === 'conditions'" >
       <a-row :gutter="[8, 8]" style="width: 100%;" >
@@ -666,6 +667,7 @@
     :open="state.deviceModalVisible"
     @cancel="state.deviceModalVisible = false"
     @ok="selectDevice"
+    destroyOnClose
   >
     <SelectDevice
       ref="selectDeviceRef"
@@ -678,6 +680,7 @@
     @cancel="state.testVisble = false"
     @ok="dispatchDebug"
     style="width: 640px;"
+    destroyOnClose
   >
     <TestDialog ref="testDialogRef"/>
   </modal-pro>
@@ -813,7 +816,9 @@ const actionTypeList = [
   { key: 'DEVICE_CMD', name: '设备命令' },
   { key: 'REPORT_WARN', name: '上报告警' },
   { key: 'RESUME_WARN', name: '恢复告警' },
-  { key: 'NOTICE', name: '通知' }
+  { key: 'NOTICE', name: '通知' },
+  { key: 'DEVICE_MSG', name: '设备消息' },
+  { key: 'DEVICE_DISCONNECT', name: '设备断开连接' }
 ]
 
 const warnSeverityList = [

Файловите разлики са ограничени, защото са твърде много
+ 314 - 314
yarn.lock


Някои файлове не бяха показани, защото твърде много файлове са промени