yanghao пре 1 дан
родитељ
комит
d88c8e9ed7

+ 1 - 1
.env.local

@@ -4,7 +4,7 @@ NODE_ENV=development
 VITE_DEV=true
 
 # 请求路径  http://192.168.188.79:48080  https://iot.deepoil.cc  http://172.26.0.56:48080
-VITE_BASE_URL='http://172.21.0.198:48080'
+VITE_BASE_URL='https://iot.deepoil.cc'
 
 # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
 VITE_UPLOAD_TYPE=server

+ 21 - 0
src/router/modules/remaining.ts

@@ -2243,6 +2243,27 @@ const remainingRouter: AppRouteRecordRaw[] = [
       //   }
       // }
     ]
+  },
+
+  // qhse事故事件上报详情
+  {
+    path: '/qhse',
+    component: Layout,
+    name: 'Qhse',
+    meta: {
+      hidden: true
+    },
+    children: [
+      {
+        path: 'qhse_faultReport/detail',
+        component: () => import('@/views/pms/qhse/faultReport/QhseFaultReportInfo.vue'),
+        name: 'QhseFaultReportDetail',
+        meta: {
+          title: '事故事件详情',
+          hidden: true
+        }
+      }
+    ]
   }
 ]
 

+ 9 - 1
src/views/pms/dingding.vue

@@ -58,7 +58,8 @@ const businessRoutes: Record<string, string> = {
   ryDailyReport: 'ryDailyReport',
   ryReportApproval: 'ryReportApproval',
   ryXjDailyReport: 'ryXjDailyReport',
-  ryXjReportApproval: 'ryXjReportApproval'
+  ryXjReportApproval: 'ryXjReportApproval',
+  'qhse-accident': 'qhse-accident'
 }
 
 // const href = ref('')
@@ -128,6 +129,8 @@ onMounted(async () => {
     } else if (type === 'ryXjReportApproval') {
       window.location.href =
         import.meta.env.VITE_BASE_URL + '/deepoil/#/pages/ruiyingx/approval?id=' + id
+    } else if (type === 'qhse-accident') {
+      window.location.href = import.meta.env.VITE_BASE_URL + '/deepoil/#/pages/qhse/detail?id=' + id
     } else {
       window.location.href =
         import.meta.env.VITE_BASE_URL +
@@ -225,6 +228,11 @@ onMounted(async () => {
         path: '/iotdayilyreport/IotRyXjDailyReport/approval',
         query: { id: id }
       })
+    } else if (type === 'qhse-accident') {
+      push({
+        path: '/qhse/qhse_faultReport/detail',
+        query: { id: id }
+      })
     }
   } else {
     // 默认跳转

+ 15 - 2
src/views/pms/qhse/faultReport/QhseFaultReportForm.vue

@@ -157,7 +157,7 @@
 
 <script setup>
 import { ref, reactive } from 'vue'
-import { ElMessage } from 'element-plus'
+import { ElMessage, ElMessageBox } from 'element-plus'
 import { IotFailureApi } from '@/api/pms/qhse/index'
 import UploadImage from '@/components/UploadFile/src/UploadImg.vue'
 
@@ -245,8 +245,18 @@ const submitForm = async () => {
 
   await formRef.value.validate(async (valid) => {
     if (valid) {
-      submitLoading.value = true
       try {
+        await ElMessageBox.confirm(
+          '请确认事故事件信息内容,提交后会发送消息至公司总经理及集团领导。',
+          '确认提交',
+          {
+            confirmButtonText: '确认',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }
+        )
+
+        submitLoading.value = true
         // 在提交前确保时间是时间戳格式
         const submitData = { ...formData.value }
 
@@ -263,6 +273,9 @@ const submitForm = async () => {
         dialogVisible.value = false
         emit('success')
       } catch (error) {
+        if (error === 'cancel' || error === 'close') {
+          return
+        }
         ElMessage.error(error.message || '操作失败')
       } finally {
         submitLoading.value = false

+ 119 - 126
src/views/pms/qhse/faultReport/QhseFaultReportInfo.vue

@@ -1,139 +1,132 @@
 <template>
-  <el-form ref="formRef" :model="formData" label-width="120px">
-    <el-row :gutter="20">
-      <el-col :span="24" :xs="24" :sm="24" :md="12">
-        <el-form-item label="事件时间" prop="actualTime">
-          <el-date-picker
-            v-model="formData.actualTime"
-            type="datetime"
-            format="YYYY-MM-DD HH:mm:ss"
-            value-format="x"
-            placeholder="选择事件发生时间"
-            style="width: 100%"
-            :disabled="true"
-          />
-        </el-form-item>
-      </el-col>
+  <el-card>
+    <el-form ref="formRef" :model="formData" label-width="120px">
+      <el-row :gutter="20">
+        <el-col :span="24" :xs="24" :sm="24" :md="12">
+          <el-form-item label="事件时间" prop="actualTime">
+            <el-date-picker
+              v-model="formData.actualTime"
+              type="datetime"
+              format="YYYY-MM-DD HH:mm:ss"
+              value-format="x"
+              placeholder="选择事件发生时间"
+              style="width: 100%"
+              :disabled="true" />
+          </el-form-item>
+        </el-col>
 
-      <el-col :span="24" :xs="24" :sm="24" :md="12">
-        <el-form-item label="事件级别" prop="accidentGrade">
-          <el-input
-            v-model="formData.accidentGrade"
-            placeholder="请输入事件级别"
-            clearable
-            :disabled="true"
-          />
-        </el-form-item>
-      </el-col>
-    </el-row>
+        <el-col :span="24" :xs="24" :sm="24" :md="12">
+          <el-form-item label="事件级别" prop="accidentGrade">
+            <el-input
+              v-model="formData.accidentGrade"
+              placeholder="请输入事件级别"
+              clearable
+              :disabled="true" />
+          </el-form-item>
+        </el-col>
+      </el-row>
 
-    <el-row :gutter="20">
-      <el-col :span="24" :xs="24" :sm="24" :md="12">
-        <el-form-item label="事件类型" prop="accidentType">
-          <el-input
-            v-model="formData.accidentType"
-            placeholder="请选择事件类型"
-            clearable
-            style="width: 100%"
-            :disabled="true"
-          />
-        </el-form-item>
-      </el-col>
+      <el-row :gutter="20">
+        <el-col :span="24" :xs="24" :sm="24" :md="12">
+          <el-form-item label="事件类型" prop="accidentType">
+            <el-input
+              v-model="formData.accidentType"
+              placeholder="请选择事件类型"
+              clearable
+              style="width: 100%"
+              :disabled="true" />
+          </el-form-item>
+        </el-col>
 
-      <el-col :span="24" :xs="24" :sm="24" :md="12">
-        <el-form-item label="事件地址" prop="accidentAddress">
-          <el-input
-            v-model="formData.accidentAddress"
-            placeholder="请输入事件地址"
-            clearable
-            :disabled="true"
-          />
-        </el-form-item>
-      </el-col>
-    </el-row>
+        <el-col :span="24" :xs="24" :sm="24" :md="12">
+          <el-form-item label="事件地址" prop="accidentAddress">
+            <el-input
+              v-model="formData.accidentAddress"
+              placeholder="请输入事件地址"
+              clearable
+              :disabled="true" />
+          </el-form-item>
+        </el-col>
+      </el-row>
 
-    <el-row :gutter="20">
-      <el-col :span="24" :xs="24" :sm="24" :md="12">
-        <el-form-item label="现场负责人" prop="dutyPerson">
-          <el-input
-            v-model="formData.dutyPerson"
-            placeholder="请输入现场负责人姓名"
-            clearable
-            :disabled="true"
-          />
-        </el-form-item>
-      </el-col>
-    </el-row>
+      <el-row :gutter="20">
+        <el-col :span="24" :xs="24" :sm="24" :md="12">
+          <el-form-item label="现场负责人" prop="dutyPerson">
+            <el-input
+              v-model="formData.dutyPerson"
+              placeholder="请输入现场负责人姓名"
+              clearable
+              :disabled="true" />
+          </el-form-item>
+        </el-col>
+      </el-row>
 
-    <el-row :gutter="20">
-      <el-col :span="24">
-        <el-form-item label="事件损失情况" prop="lossSituation">
-          <el-input
-            v-model="formData.lossSituation"
-            placeholder="请输入事件损失情况"
-            clearable
-            type="textarea"
-            :rows="2"
-            :disabled="true"
-          />
-        </el-form-item>
-      </el-col>
-    </el-row>
+      <el-row :gutter="20">
+        <el-col :span="24">
+          <el-form-item label="事件损失情况" prop="lossSituation">
+            <el-input
+              v-model="formData.lossSituation"
+              placeholder="请输入事件损失情况"
+              clearable
+              type="textarea"
+              :rows="2"
+              :disabled="true" />
+          </el-form-item>
+        </el-col>
+      </el-row>
 
-    <el-row :gutter="20">
-      <el-col :span="24">
-        <el-form-item label="现场采取措施" prop="emergencyMeasure">
-          <el-input
-            v-model="formData.emergencyMeasure"
-            type="textarea"
-            :rows="2"
-            placeholder="请输入现场采取的应急措施"
-            maxlength="500"
-            show-word-limit
-            :disabled="true"
-          />
-        </el-form-item>
-      </el-col>
-    </el-row>
+      <el-row :gutter="20">
+        <el-col :span="24">
+          <el-form-item label="现场采取措施" prop="emergencyMeasure">
+            <el-input
+              v-model="formData.emergencyMeasure"
+              type="textarea"
+              :rows="2"
+              placeholder="请输入现场采取的应急措施"
+              maxlength="500"
+              show-word-limit
+              :disabled="true" />
+          </el-form-item>
+        </el-col>
+      </el-row>
 
-    <el-row :gutter="20">
-      <el-col :span="24">
-        <el-form-item label="事件简要经过" prop="description">
-          <el-input
-            v-model="formData.description"
-            type="textarea"
-            :rows="2"
-            placeholder="请输入事件详细经过"
-            maxlength="1000"
-            show-word-limit
-            :disabled="true"
-          />
-        </el-form-item>
-      </el-col>
-    </el-row>
+      <el-row :gutter="20">
+        <el-col :span="24">
+          <el-form-item label="事件简要经过" prop="description">
+            <el-input
+              v-model="formData.description"
+              type="textarea"
+              :rows="2"
+              placeholder="请输入事件详细经过"
+              maxlength="1000"
+              show-word-limit
+              :disabled="true" />
+          </el-form-item>
+        </el-col>
+      </el-row>
 
-    <el-row :gutter="20">
-      <el-col :span="12">
-        <el-form-item label="附件/现场图片" prop="pic">
-          <UploadImage v-model="formData.pic" width="260px" :disabled="true" />
-        </el-form-item>
-      </el-col>
+      <el-row :gutter="20">
+        <el-col :span="12">
+          <el-form-item label="附件/现场图片" prop="pic">
+            <UploadImage v-model="formData.pic" width="260px" :disabled="true" />
+          </el-form-item>
+        </el-col>
 
-      <el-col :span="12">
-        <el-form-item label="备注" prop="remark">
-          <el-input
-            v-model="formData.remark"
-            type="textarea"
-            :rows="3"
-            placeholder="请输入备注信息"
-            maxlength="500"
-            show-word-limit
-            :disabled="true"
-          />
-        </el-form-item>
-      </el-col>
-    </el-row>
-  </el-form>
+        <el-col :span="12">
+          <el-form-item label="备注" prop="remark">
+            <el-input
+              v-model="formData.remark"
+              type="textarea"
+              :rows="3"
+              placeholder="请输入备注信息"
+              maxlength="500"
+              show-word-limit
+              :disabled="true" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+  </el-card>
 </template>
 
 <script setup lang="ts">

+ 49 - 36
src/views/pms/qhse/faultReport/index.vue

@@ -3,16 +3,42 @@
     <DeptTree @node-click="handleDeptNodeClick" v-model:collapsed="isLeftContentCollapsed" />
 
     <el-col :xs="24" :span="isLeftContentCollapsed ? 24 : 20">
-      <el-alert title="" type="warning" :closable="false">
-        <template #default>
-          <div class="text-[16px]">
-            <p>发生C级事故,应1小时内上报到专业公司,24小时内上报到集团运营共享中心及总裁;</p>
-            <p>发生B级事故,应半小时内上报到专业公司,12小时内上报到集团运营共享中心及总裁;</p>
-            <p>发生A级事故,应立即上报到专业公司,2小时内上报到集团运营共享中心及总裁;</p>
-            <p>严谨迟报、漏报、瞒报!!!</p>
-          </div>
-        </template>
-      </el-alert>
+      <ContentWrap>
+        <el-alert title="" type="warning" :closable="false">
+          <template #default>
+            <div class="text-[16px]">
+              <p>发生C级事故,应1小时内上报到专业公司,24小时内上报到集团运营共享中心及总裁;</p>
+            </div>
+          </template>
+        </el-alert>
+
+        <el-alert title="" type="warning" :closable="false" style="margin-top: 5px">
+          <template #default>
+            <div class="text-[16px]">
+              <p>发生B级事故,应半小时内上报到专业公司,12小时内上报到集团运营共享中心及总裁;</p>
+            </div>
+          </template>
+        </el-alert>
+
+        <el-alert title="" type="error" :closable="false" style="margin-top: 5px">
+          <template #default>
+            <div class="text-[16px]">
+              <p>发生A级事故,应立即上报到专业公司,2小时内上报到集团运营共享中心及总裁;</p>
+            </div>
+          </template>
+        </el-alert>
+
+        <el-alert title="" type="warning" :closable="false" style="margin-top: 5px" show-icon>
+          <template #icon>
+            <Icon icon="ep:info-filled" />
+          </template>
+          <template #default>
+            <div class="text-[17px]">
+              <p>严谨迟报、漏报、瞒报!!!</p>
+            </div>
+          </template>
+        </el-alert>
+      </ContentWrap>
 
       <ContentWrap style="border: 0; margin-top: 10px">
         <el-form
@@ -20,8 +46,7 @@
           :model="queryParams"
           ref="queryForm"
           :inline="true"
-          label-width="100px"
-        >
+          label-width="100px">
           <el-row :gutter="20">
             <el-col :span="24" :xs="24" :sm="12" :md="6">
               <el-form-item label="事件级别" prop="accidentGrade">
@@ -30,8 +55,7 @@
                   placeholder="请输入事件级别"
                   clearable
                   @keyup.enter="handleQuery"
-                  style="width: 200px"
-                />
+                  style="width: 200px" />
               </el-form-item>
             </el-col>
             <el-col :span="24" :xs="24" :sm="12" :md="6">
@@ -40,8 +64,7 @@
                   v-model="queryParams.accidentType"
                   placeholder="请选择事件类型"
                   clearable
-                  style="width: 200px"
-                />
+                  style="width: 200px" />
               </el-form-item>
             </el-col>
             <el-col :span="24" :xs="24" :sm="24" :md="12">
@@ -52,8 +75,7 @@
                   type="primary"
                   @click="openForm('create', undefined, false)"
                   color="#626aef"
-                  v-hasPermi="['rq:iot-accident-report:create']"
-                >
+                  v-hasPermi="['rq:iot-accident-report:create']">
                   <Icon icon="ep:plus" class="mr-5px" /> 新增
                 </el-button>
                 <!-- <el-button type="success" plain @click="handleExport" :loading="exportLoading">
@@ -75,8 +97,7 @@
           :header-cell-style="{ background: '#f5f7fa', color: '#333', height: '50px' }"
           :cell-style="{ padding: '12px 8px' }"
           height="calc(70vh - 118px)"
-          :max-height="tableHeight"
-        >
+          :max-height="tableHeight">
           <zm-table-column prop="actualTime" label="事件时间" align="center" min-width="150">
             <template #default="{ row }">
               {{ formatDate(row.actualTime) }}
@@ -93,15 +114,13 @@
             prop="lossSituation"
             label="事件损失情况"
             align="center"
-            show-overflow-tooltip
-          />
+            show-overflow-tooltip />
 
           <zm-table-column
             prop="accidentAddress"
             label="事件地址"
             align="center"
-            show-overflow-tooltip
-          />
+            show-overflow-tooltip />
           <zm-table-column prop="deptName" label="部门名称" align="center" />
           <zm-table-column prop="dutyPerson" label="现场负责人" align="center" />
           <zm-table-column prop="actualTime" label="创建时间" align="center" min-width="150">
@@ -134,8 +153,7 @@
             layout="total, sizes, prev, pager, next"
             @size-change="handleSizeChange"
             @current-change="handleCurrentChange"
-            background
-          />
+            background />
         </div>
       </ContentWrap>
     </el-col>
@@ -151,8 +169,7 @@
       size="650px"
       :with-header="true"
       :close-on-click-modal="false"
-      destroy-on-close
-    >
+      destroy-on-close>
       <template #header>
         <div class="drawer-header">
           <span>{{ approvalDialogTitle }}</span>
@@ -167,13 +184,11 @@
             :key="index"
             placement="top"
             :color="getNodeStatusColor(item.status)"
-            :icon="Check"
-          >
+            :icon="Check">
             <el-card
               shadow="never"
               class="approval-card"
-              :class="{ 'status-completed': item.status === '已完成' || item.status === '已批准' }"
-            >
+              :class="{ 'status-completed': item.status === '已完成' || item.status === '已批准' }">
               <div class="card-header">
                 <div class="node-info">
                   <el-tag :type="getTagTypeByStatus(item.status)" size="small" class="status-tag">
@@ -198,8 +213,7 @@
                 </div>
                 <div
                   class="attachment-section"
-                  v-if="item.attachments && item.attachments.length > 0"
-                >
+                  v-if="item.attachments && item.attachments.length > 0">
                   <span class="label">附件:</span>
                   <div class="attachments">
                     <el-link
@@ -208,8 +222,7 @@
                       type="primary"
                       :href="attachment.url"
                       target="_blank"
-                      class="attachment-link"
-                    >
+                      class="attachment-link">
                       {{ attachment.name }}
                     </el-link>
                   </div>