فهرست منبع

feat(warning): 更新预警信息功能以支持状态管理和字段优化

- 在后端服务中添加预警状态默认值逻辑,当状态为空时设置为启用状态
- 将前端预警专项选择器改为输入框,简化用户操作流程
- 扩展预警状态选项,新增启用、禁用和作废三种状态
- 实现报警类型字段的数据格式化显示功能
- 移除废弃的预警项目列表相关代码和数据获取方法
- 更新字典数据获取接口调用参数,统一使用警报类型字典
- 添加数据规范化函数以处理不同数据源的字段映射
- 优化详情页面数据加载逻辑,增强数据兼容性处理
- 调整状态标签样式和显示文本,完善状态管理界面体验
- 修复表单初始化状态设置,确保新建预警默认为启用状态
- 优化API请求参数处理,避免空预警ID导致的提交问题
nahida 1 ماه پیش
والد
کامیت
9e49fe8c56
2فایلهای تغییر یافته به همراه55 افزوده شده و 53 حذف شده
  1. 3 0
      src/api/smxyjldczxt/yjxxfb/yjfb.js
  2. 52 53
      src/views/subSystem/lifeCompany/lAlertInformation/LRelease.vue

+ 3 - 0
src/api/smxyjldczxt/yjxxfb/yjfb.js

@@ -6,6 +6,9 @@ function buildWarningFormData(payload = {}) {
 
   Object.keys(warning).forEach((key) => {
     const value = warning[key]
+    if (key === 'warningId' && !value) {
+      return
+    }
     formData.append(`warning.${key}`, value ?? '')
   })
 

+ 52 - 53
src/views/subSystem/lifeCompany/lAlertInformation/LRelease.vue

@@ -138,14 +138,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="预警专项">
-              <el-select v-model="formData.warningSpecial" filterable clearable allow-create default-first-option placeholder="请选择或输入预警专项" style="width: 100%">
-                <el-option
-                  v-for="item in filteredSpecialOptions"
-                  :key="`${item.itemId}-${item.warningSpecial}`"
-                  :label="item.warningSpecial"
-                  :value="item.warningSpecial"
-                />
-              </el-select>
+              <el-input v-model="formData.warningSpecial" placeholder="请输入预警专项" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -197,7 +190,9 @@
           <el-col :span="12">
             <el-form-item label="状态">
               <el-select v-model="formData.status" style="width: 100%">
-                <el-option label="草稿" value="DRAFT" />
+                <el-option label="启用" value="ENABLED" />
+                <el-option label="禁用" value="DISABLED" />
+                <el-option label="作废" value="INVALID" />
               </el-select>
             </el-form-item>
           </el-col>
@@ -305,7 +300,11 @@
         <el-table :data="detailData.alarmList || []" border size="small">
           <el-table-column label="报警ID" prop="alarmId" min-width="160" />
           <el-table-column label="报警名称" prop="alarmName" min-width="180" show-overflow-tooltip />
-          <el-table-column label="报警类型" prop="alarmType" min-width="120" />
+          <el-table-column label="报警类型" min-width="120">
+            <template #default="scope">
+              {{ formatTypeText(scope.row.alarmType || scope.row.warningType) }}
+            </template>
+          </el-table-column>
         </el-table>
 
         <el-divider content-position="left">处置记录</el-divider>
@@ -332,15 +331,14 @@
 </template>
 
 <script setup>
-import { computed, onMounted, reactive, ref } from "vue";
-import { ElMessage, ElMessageBox } from "element-plus";
+import {computed, onMounted, reactive, ref} from "vue";
+import {ElMessage, ElMessageBox} from "element-plus";
 import {
   deleteYjxxData,
   getAlertTypeDictionaryData,
+  getdbyjlistData,
   getWarningDetailData,
-  getWarningItemListData,
   getWarningReasonListData,
-  getdbyjlistData,
   releaseYjxxData,
   submitYjxxData,
   updateYjxxData
@@ -352,7 +350,6 @@ const total = ref(0);
 const warningList = ref([]);
 const warningTypeOptions = ref([]);
 const warningLevelOptions = ref([]);
-const warningItems = ref([]);
 const reasonOptions = ref([]);
 const uploadRef = ref();
 const formAttachments = ref([]);
@@ -398,21 +395,6 @@ const warningLevelLabelMap = computed(() => {
   }, {});
 });
 
-const filteredSpecialOptions = computed(() => {
-  return warningItems.value.filter((item) => {
-    if (item.status && item.status !== "ENABLED") {
-      return false;
-    }
-    if (formData.warningType && item.warningType !== formData.warningType) {
-      return false;
-    }
-    if (formData.warningLevel && item.warningLevel !== formData.warningLevel) {
-      return false;
-    }
-    return !!item.warningSpecial;
-  });
-});
-
 function createEmptyForm() {
   return {
     warningId: "",
@@ -428,7 +410,7 @@ function createEmptyForm() {
     publisher: "",
     publishTime: "",
     handler: "",
-    status: "DRAFT",
+    status: "ENABLED",
     warningContent: "",
     remark: ""
   };
@@ -500,6 +482,7 @@ function formatLevelText(value) {
 
 function getLevelTagType(level) {
   return {
+    "0": "danger",
     "1": "danger",
     "2": "warning",
     "3": "success",
@@ -509,6 +492,9 @@ function getLevelTagType(level) {
 
 function getStatusText(status) {
   return {
+    ENABLED: "启用",
+    DISABLED: "禁用",
+    INVALID: "作废",
     DRAFT: "草稿",
     RELEASED: "已发布",
     PENDING: "待处理",
@@ -521,12 +507,15 @@ function getStatusText(status) {
 
 function getStatusTagType(status) {
   return {
+    ENABLED: "success",
+    DISABLED: "warning",
+    INVALID: "danger",
     DRAFT: "info",
     RELEASED: "success",
     PENDING: "warning",
     PROCESSING: "warning",
     HANDLED: "success",
-    CLOSED: "",
+    CLOSED: "info",
     RETURNED: "danger"
   }[status] || "";
 }
@@ -554,24 +543,34 @@ function normalizeWarningRow(item) {
   return row;
 }
 
+function normalizeAlarmRow(item) {
+  return {
+    ...item,
+    alarmId: item.alarmId || item.alarm_id || "",
+    alarmName: item.alarmName || item.alarm_name || item.deviceName || item.device_name || "",
+    alarmType: item.alarmType || item.alarm_type || item.warningType || item.warning_type || ""
+  };
+}
+
+function normalizeDisposalRow(item) {
+  return {
+    ...item,
+    disposalTypeName: item.disposalTypeName || item.disposal_type_name || item.disposalType || item.disposal_type || "",
+    disposalUser: item.disposalUser || item.disposal_user || "",
+    disposalContent: item.disposalContent || item.disposal_content || "",
+    createTime: item.createTime || item.create_time || ""
+  };
+}
+
 async function loadDicts() {
   const [typeRes, levelRes] = await Promise.all([
-    getAlertTypeDictionaryData({ dictType: "warning_type" }),
-    getAlertTypeDictionaryData({ dictType: "warning_level" })
+    getAlertTypeDictionaryData({ dictType: "alert_type" }),
+    getAlertTypeDictionaryData({ dictType: "alert_level" })
   ]);
   warningTypeOptions.value = typeRes.rows || [];
   warningLevelOptions.value = levelRes.rows || [];
 }
 
-async function loadWarningItems() {
-  const res = await getWarningItemListData({
-    pageNum: 1,
-    pageSize: 200,
-    status: "ENABLED"
-  });
-  warningItems.value = res.data?.records || [];
-}
-
 async function loadReasonOptions() {
   if (!formData.warningType || !formData.warningLevel) {
     reasonOptions.value = [];
@@ -668,7 +667,7 @@ async function submitForm() {
         publisher: formData.publisher,
         publishTime: formData.publishTime,
         handler: formData.handler,
-        status: formData.status || "DRAFT",
+        status: formData.status || "ENABLED",
         warningContent: formData.warningContent,
         remark: formData.remark
       },
@@ -690,14 +689,14 @@ async function submitForm() {
 
 async function handleView(row) {
   const res = await getWarningDetailData(row.warningId);
-  detailData.value = res.data || {};
-  if (!detailData.value.basicInfo) {
-    detailData.value = {
-      basicInfo: row,
-      alarmList: [],
-      disposalList: []
-    };
-  }
+  const detail = res.data || {};
+  const basicSource = detail.basicInfo || detail;
+  detailData.value = {
+    ...detail,
+    basicInfo: normalizeWarningRow({ ...row, ...basicSource }),
+    alarmList: (detail.alarmList || []).map(normalizeAlarmRow),
+    disposalHistory: (detail.disposalHistory || detail.disposalList || []).map(normalizeDisposalRow)
+  };
   detailVisible.value = true;
 }
 
@@ -724,7 +723,7 @@ async function handlePublish(row) {
 }
 
 onMounted(async () => {
-  await Promise.all([loadDicts(), loadWarningItems()]);
+  await loadDicts();
   await loadList();
 });
 </script>