Selaa lähdekoodia

review:【iot 物联网】场景联动的逻辑

YunaiV 9 kuukautta sitten
vanhempi
commit
d74080d6b0

+ 2 - 0
src/views/iot/rule/scene/form/configs/ConditionGroupContainerConfig.vue

@@ -155,11 +155,13 @@ const addSubGroup = () => {
   }
 
   // 检查是否达到最大子组数量限制
+  // TODO @puhui999:最大的数量限制
   if (container.value?.length >= maxSubGroups) {
     return
   }
 
   // 使用 nextTick 确保响应式更新完成后再添加新的子组
+  // TODO @puhui999:这里 nextTick 要不要 await
   nextTick(() => {
     if (container.value) {
       container.value.push([])

+ 1 - 1
src/views/iot/rule/scene/form/configs/MainConditionInnerConfig.vue

@@ -1,13 +1,13 @@
 <template>
   <div class="space-y-16px">
     <!-- 触发事件类型选择 -->
+    <!-- TODO @puhui999:事件上报时,应该也是 json? -->
     <el-form-item label="触发事件类型" required>
       <el-select
         :model-value="triggerType"
         @update:model-value="handleTriggerTypeChange"
         placeholder="请选择触发事件类型"
         class="w-full"
-        style="width: 100%"
       >
         <el-option
           v-for="option in triggerTypeOptions"

+ 14 - 9
src/views/iot/rule/scene/form/inputs/ServiceParamsInput.vue

@@ -39,7 +39,7 @@
             :class="jsonError ? 'text-[var(--el-color-danger)]' : 'text-[var(--el-color-success)]'"
             class="text-12px"
           >
-            {{ jsonError || 'JSON格式正确' }}
+            {{ jsonError || 'JSON 格式正确' }}
           </span>
         </div>
 
@@ -49,6 +49,7 @@
           <el-button size="small" type="primary" plain @click="fillExampleJson">
             示例数据
           </el-button>
+          <!-- TODO @puhui999:这里的 type 有告警 -->
           <el-button size="small" type="default" plain @click="clearParams"> 清空 </el-button>
         </div>
       </div>
@@ -89,9 +90,9 @@
                     <div class="flex-1">
                       <div class="text-12px font-500 text-[var(--el-text-color-primary)]">
                         {{ param.name }}
-                        <el-tag v-if="param.required" size="small" type="danger" class="ml-4px"
-                          >必填</el-tag
-                        >
+                        <el-tag v-if="param.required" size="small" type="danger" class="ml-4px">
+                          必填
+                        </el-tag>
                       </div>
                       <div class="text-11px text-[var(--el-text-color-secondary)]">
                         {{ param.identifier }}
@@ -110,11 +111,13 @@
 
                 <div class="mt-12px ml-22px">
                   <div class="text-12px text-[var(--el-text-color-secondary)] mb-6px">
-                    完整JSON格式:
+                    完整 JSON 格式:
                   </div>
                   <pre
                     class="p-12px bg-[var(--el-fill-color-light)] rounded-4px text-11px text-[var(--el-text-color-primary)] overflow-x-auto border-l-3px border-[var(--el-color-primary)]"
-                  ><code>{{ generateExampleJson() }}</code></pre>
+                  >
+                    <code>{{ generateExampleJson() }}</code>
+                  </pre>
                 </div>
               </div>
 
@@ -166,6 +169,8 @@ const localValue = useVModel(props, 'modelValue', emit, {
   defaultValue: ''
 })
 
+// TODO @puhui999:一些注释风格;
+
 // 状态
 const paramsJson = ref('')
 const jsonError = ref('')
@@ -192,7 +197,7 @@ const handleParamsChange = () => {
 
       // 额外的参数验证
       if (typeof parsed !== 'object' || parsed === null) {
-        jsonError.value = '参数必须是一个有效的JSON对象'
+        jsonError.value = '参数必须是一个有效的 JSON 对象'
         emit('validate', { valid: false, message: jsonError.value })
         return
       }
@@ -219,8 +224,7 @@ const handleParamsChange = () => {
 
 // 快速填充示例数据
 const fillExampleJson = () => {
-  const exampleData = generateExampleJson()
-  paramsJson.value = exampleData
+  paramsJson.value = generateExampleJson()
   handleParamsChange()
 }
 
@@ -233,6 +237,7 @@ const clearParams = () => {
 }
 
 // 工具函数
+// TODO @puhui999:这里的复用
 const getParamTypeName = (dataType: string) => {
   const typeMap = {
     int: '整数',

+ 1 - 0
src/views/iot/rule/scene/form/sections/ActionSection.vue

@@ -146,6 +146,7 @@ const createDefaultActionData = (): ActionFormData => {
 }
 
 // 配置常量
+// TODO @puhui999:去掉最大;注释风格改下;
 const maxActions = 5
 
 // 工具函数

+ 1 - 0
src/views/iot/rule/scene/form/sections/TriggerSection.vue

@@ -121,6 +121,7 @@ const triggers = useVModel(props, 'triggers', emit)
 const triggerTypeOptions = getTriggerTypeOptions()
 
 // 工具函数
+// TODO @puhui999:这里是不是重复了哈;
 const getTriggerTypeLabel = (type: number): string => {
   const option = triggerTypeOptions.find((opt) => opt.value === type)
   return option?.label || '未知类型'

+ 2 - 0
src/views/iot/rule/scene/form/selectors/ActionTypeSelector.vue

@@ -2,6 +2,7 @@
 <template>
   <div class="w-full">
     <!-- TODO @puhui999:1)设备属性设置时,貌似没选属性;2)服务调用时,貌似也没的设置哈; -->
+    <!-- TODO @puhui999:执行器的样式风格,需要统一; -->
     <el-form-item label="执行类型" required>
       <el-select
         v-model="localValue"
@@ -62,6 +63,7 @@ const emit = defineEmits<Emits>()
 const localValue = useVModel(props, 'modelValue', emit)
 
 // 执行器类型选项
+// TODO @puhui999:我们是不是弱化 icon 和 tag;所有组件,让整体交互更简洁和一致;
 const actionTypeOptions = [
   {
     value: IotRuleSceneActionTypeEnum.DEVICE_PROPERTY_SET,

+ 2 - 0
src/views/iot/rule/scene/form/selectors/ServiceSelector.vue

@@ -195,6 +195,7 @@ const emit = defineEmits<{
   (e: 'change', value?: string, service?: ThingModelService): void
 }>()
 
+// TODO @puhui999:这里不用的
 const localValue = useVModel(props, 'modelValue', emit)
 
 // 状态
@@ -240,6 +241,7 @@ const getCallTypeTag = (callType: string) => {
   return callType === 'sync' ? 'primary' : 'success'
 }
 
+// TODO @puhui999:一些注释风格;
 const getParamTypeName = (dataType: string) => {
   const typeMap = {
     int: '整数',

+ 4 - 0
src/views/iot/rule/scene/index.vue

@@ -283,6 +283,7 @@ const statistics = ref({
 
 /** 格式化 CRON 表达式显示 */
 /** 注:后续可考虑将此功能移至 CRON 组件内部 */
+// TODO @puhui999:优化这个format
 const formatCronExpression = (cron: string): string => {
   if (!cron) return ''
 
@@ -418,6 +419,7 @@ const getRuleSceneSummary = (rule: IotRuleSceneDO) => {
 const getList = async () => {
   loading.value = true
   try {
+    // TODO @puhui999:这里的注释优化下;
     // 调用真实API获取数据
     const data = await RuleSceneApi.getRuleScenePage(queryParams)
     list.value = data.list
@@ -427,6 +429,7 @@ const getList = async () => {
     updateStatistics()
   } catch (error) {
     console.error('获取列表失败:', error)
+    // TODO @puhui999:这里的处理,是不是和其他模块一致哈;
     ElMessage.error('获取列表失败')
 
     // 清空列表数据
@@ -506,6 +509,7 @@ const handleDelete = async (id: number) => {
 const handleToggleStatus = async (row: IotRuleSceneDO) => {
   try {
     // 修改状态的二次确认
+    // TODO @puhui999:status 枚举;
     const text = row.status === 0 ? '禁用' : '启用'
     await message.confirm('确认要' + text + '"' + row.name + '"吗?')
     // 发起修改状态