Ver código fonte

Merge branch 'master' of http://192.168.110.30:3000/shaoy/city-life-line

liziqian 1 mês atrás
pai
commit
71ccc52ad1
1 arquivos alterados com 39 adições e 13 exclusões
  1. 39 13
      src/views/subSystem/hidden/HazardList.vue

+ 39 - 13
src/views/subSystem/hidden/HazardList.vue

@@ -84,12 +84,12 @@
         </el-table-column>
         <el-table-column prop="reportUnit" label="上报单位" width="120" />
         <el-table-column prop="reportTime" label="上报时间" width="160" />
-        <el-table-column label="操作" width="320" fixed="right">
+        <el-table-column label="操作" width="350" fixed="right">
           <template #default="{ row }">
             <el-button type="primary" size="small" @click="handleEdit(row)">编辑</el-button>
             <el-button type="info" size="small" @click="handleDetail(row)">详情</el-button>
-            <el-button type="warning" size="small" @click="handleSubmitHazard(row)" :disabled="row.isSubmitted === 1">
-              {{ row.isSubmitted === 1 ? '已报送' : '报送' }}
+            <el-button type="success" size="small" @click="handleSubmitHazard(row)" :disabled="row.isSubmitted === 1">
+              {{ row.isSubmitted === 1 ? '已报送' : '报送并生成工单' }}
             </el-button>
             <el-button type="danger" size="small" @click="handleDelete(row)">删除</el-button>
           </template>
@@ -104,7 +104,7 @@
 
     <!-- 新增/编辑对话框 -->
     <el-dialog :title="dialogTitle" v-model="dialogVisible" width="750px" destroy-on-close>
-      <el-form :model="formData" ref="formRef" label-width="100px">
+      <el-form :model="formData" ref="formRef" label-width="100px" :rules="rules">
         <el-row :gutter="16">
           <el-col :span="12">
             <el-form-item label="隐患编号" prop="hazardNo">
@@ -126,8 +126,8 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="隐患来源">
-              <el-select v-model="formData.hazardSource" style="width: 100%">
+            <el-form-item label="隐患来源" prop="hazardSource">
+              <el-select v-model="formData.hazardSource" style="width: 100%" placeholder="请选择隐患来源">
                 <el-option v-for="d in hazardSourceDict" :key="d.dictValue" :label="d.dictLabel" :value="d.dictValue" />
               </el-select>
             </el-form-item>
@@ -140,7 +140,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="关联设备">
+            <el-form-item label="关联设备" prop="equipmentId">
               <el-select v-model="formData.equipmentId" placeholder="请选择" clearable style="width: 100%">
                 <el-option v-for="e in equipmentOptions" :key="e.equipmentId" :label="e.equipmentName" :value="e.equipmentId" />
               </el-select>
@@ -152,13 +152,13 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="上报时间">
-              <el-date-picker v-model="formData.reportTime" type="datetime" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" />
+            <el-form-item label="上报时间" prop="reportTime">
+              <el-date-picker v-model="formData.reportTime" type="datetime" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" placeholder="请选择上报时间" />
             </el-form-item>
           </el-col>
           <el-col :span="24">
-            <el-form-item label="隐患描述">
-              <el-input v-model="formData.hazardDesc" type="textarea" :rows="3" />
+            <el-form-item label="隐患描述" prop="hazardDesc">
+              <el-input v-model="formData.hazardDesc" type="textarea" :rows="3" placeholder="请输入隐患描述" />
             </el-form-item>
           </el-col>
           <el-col :span="24">
@@ -294,6 +294,17 @@ const searchForm = reactive({ hazardType: '', hazardLevel: '', hazardStatus: '',
 const dialogVisible = ref(false)
 const dialogTitle = ref('新增')
 const formRef = ref(null)
+
+// 表单校验规则
+const rules = {
+  hazardType: [{ required: true, message: '请选择隐患类型', trigger: 'change' }],
+  hazardLevel: [{ required: true, message: '请选择隐患等级', trigger: 'change' }],
+  hazardSource: [{ required: true, message: '请选择隐患来源', trigger: 'change' }],
+  equipmentId: [{ required: true, message: '请选择关联设备', trigger: 'change' }],
+  reportTime: [{ required: true, message: '请选择上报时间', trigger: 'change' }],
+  hazardDesc: [{ required: true, message: '请输入隐患描述', trigger: 'blur' }]
+}
+
 const formData = reactive({
   hazardId: '', hazardNo: '', hazardType: '', hazardLevel: '', hazardDesc: '',
   hazardSource: '', hazardStatus: '2', reportUnit: '', reportTime: '',
@@ -450,7 +461,9 @@ function handleEdit(row) {
   loadNetworkOptions(); loadEquipmentOptions()
 }
 async function handleSave() {
+  if (!formRef.value) return
   try {
+    await formRef.value.validate()
     if (imageUploading.value) { ElMessage.warning('图片正在上传,请稍候'); return }
     // 将图片URL列表拼接为逗号分隔字符串
     formData.hazardImages = imageUrls.value.join(',')
@@ -467,11 +480,24 @@ function handleDelete(row) {
     await deleteHazard(row.hazardId); ElMessage.success('删除成功'); loadData()
   }).catch(() => {})
 }
+/** 报送(同时自动生成工单) */
 async function handleSubmitHazard(row) {
-  ElMessageBox.confirm('确认报送该隐患?', '提示', { type: 'warning' }).then(async () => {
-    await submitHazard(row.hazardId); ElMessage.success('报送成功'); loadData()
+  ElMessageBox.confirm('确认报送该隐患?报送后将自动创建工单进入待派单状态。', '提示', { type: 'warning' }).then(async () => {
+    try {
+      const res = await submitHazard(row.hazardId)
+      if (res.code === 200) {
+        const msg = res.data ? '报送成功,已自动创建工单' : '报送成功'
+        ElMessage.success(msg)
+        loadData()
+      } else {
+        ElMessage.error(res.msg || '报送失败')
+      }
+    } catch (e) {
+      ElMessage.error(e?.response?.data?.msg || e?.message || '报送失败')
+    }
   }).catch(() => {})
 }
+
 async function handleDetail(row) {
   try {
     const res = await getHazardById(row.hazardId)