Bläddra i källkod

隐患排查修改

yanghao 1 vecka sedan
förälder
incheckning
ab68496b3b
2 ändrade filer med 68 tillägg och 78 borttagningar
  1. 2 1
      src/utils/dict.ts
  2. 66 77
      src/views/pms/qhse/safety/index.vue

+ 2 - 1
src/utils/dict.ts

@@ -326,7 +326,8 @@ export enum DICT_TYPE {
   ACCIDENT_REPORT_STATUS = 'accident_report_status',
   QHSE_HAZARD_STATUS = 'qhse_hazard_status',
   QHSE_PTW_TYPE = 'qhse_ptw_type',
-  QHSE_PTW_GRADE = 'qhse_ptw_grade'
+  QHSE_PTW_GRADE = 'qhse_ptw_grade',
+  QHSE_HAZARD_SOURCE = 'hazard_soure'
 }
 
 export function realValue(type: any, value: string) {

+ 66 - 77
src/views/pms/qhse/safety/index.vue

@@ -15,14 +15,12 @@
               v-model="queryParams.status"
               placeholder="请选择状态"
               clearable
-              style="width: 180px"
-            >
+              style="width: 180px">
               <el-option
                 v-for="dict in getStrDictOptions(DICT_TYPE.QHSE_HAZARD_STATUS)"
                 :key="dict.value"
                 :label="dict.label"
-                :value="dict.value"
-              />
+                :value="dict.value" />
             </el-select>
           </el-form-item>
 
@@ -50,8 +48,7 @@
           :data="list"
           :stripe="true"
           height="calc(85vh - 135px)"
-          :show-overflow-tooltip="true"
-        >
+          :show-overflow-tooltip="true">
           <zm-table-column :label="t('monitor.serial')" width="70" align="center">
             <template #default="scope">
               {{ scope.$index + 1 }}
@@ -59,6 +56,12 @@
           </zm-table-column>
 
           <zm-table-column label="单位" align="center" prop="deptName" />
+          <zm-table-column label="类型" align="center" prop="classifyName" />
+          <zm-table-column label="来源" align="center" min-width="90">
+            <template #default="scope">
+              <dict-tag :type="DICT_TYPE.QHSE_HAZARD_SOURCE" :value="scope.row.source" />
+            </template>
+          </zm-table-column>
 
           <zm-table-column label="地点" align="center" prop="address" />
 
@@ -113,23 +116,20 @@
             align="center"
             fixed="right"
             min-width="150px"
-            action
-          >
+            action>
             <template #default="scope">
               <el-button
                 v-if="scope.row.status === 'todo'"
                 link
                 type="primary"
-                @click="handleFix(scope.row)"
-              >
+                @click="handleFix(scope.row)">
                 整改
               </el-button>
               <el-button
                 v-if="scope.row.status === 'todo'"
                 link
                 type="primary"
-                @click="handleEdit(scope.row)"
-              >
+                @click="handleEdit(scope.row)">
                 编辑
               </el-button>
               <el-button link type="danger" @click="handleDelete(scope.row.id)"> 删除 </el-button>
@@ -142,8 +142,7 @@
           :total="total"
           v-model:page="queryParams.pageNo"
           v-model:limit="queryParams.pageSize"
-          @pagination="getList"
-        />
+          @pagination="getList" />
       </ContentWrap>
     </el-col>
   </el-row>
@@ -154,15 +153,34 @@
     v-model="dialogVisible"
     width="600px"
     destroy-on-close
-    @close="closeDialog"
-  >
+    @close="closeDialog">
     <el-form
       ref="formRef"
       :model="formData"
       :rules="formRules"
       label-width="120px"
-      v-loading="formLoading"
-    >
+      v-loading="formLoading">
+      <el-form-item label="隐患排查类型" prop="classify">
+        <el-tree-select
+          style="width: 500px; overflow: auto"
+          v-model="formData.classify"
+          :data="deptTree"
+          :props="defaultProps"
+          :check-strictly="false"
+          placeholder="请选择隐患排查类型"
+          value-key="id" />
+      </el-form-item>
+
+      <el-form-item label="隐患排查来源" prop="source">
+        <el-select v-model="formData.source" placeholder="请选择隐患排查来源" clearable>
+          <el-option
+            v-for="dict in getStrDictOptions(DICT_TYPE.QHSE_HAZARD_SOURCE)"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value" />
+        </el-select>
+      </el-form-item>
+
       <el-form-item label="地点" prop="address">
         <el-input v-model="formData.address" placeholder="请输入地点" />
       </el-form-item>
@@ -172,8 +190,7 @@
           type="textarea"
           :rows="2"
           v-model="formData.problem"
-          placeholder="请输入存在问题"
-        />
+          placeholder="请输入存在问题" />
       </el-form-item>
 
       <el-form-item label="照片" prop="hazardFile">
@@ -182,8 +199,7 @@
           :file-type="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'jpg', 'png', 'jpeg']"
           :limit="3"
           :file-size="100"
-          class="min-w-80px"
-        />
+          class="min-w-80px" />
       </el-form-item>
 
       <el-form-item label="备注" prop="remark">
@@ -192,8 +208,7 @@
           v-model="formData.remark"
           :rows="2"
           placeholder="请输入备注"
-          style="width: 100%"
-        />
+          style="width: 100%" />
       </el-form-item>
     </el-form>
 
@@ -209,22 +224,19 @@
     v-model="fixdDialogVisible"
     width="600px"
     destroy-on-close
-    @close="closeDialog"
-  >
+    @close="closeDialog">
     <el-form
       ref="formRef"
       :model="formData"
       :rules="formRules"
       label-width="120px"
-      v-loading="formLoading"
-    >
+      v-loading="formLoading">
       <el-form-item label="整改描述" prop="rectifyDesc">
         <el-input
           type="textarea"
           :rows="2"
           v-model="formData.rectifyDesc"
-          placeholder="请输入整改描述"
-        />
+          placeholder="请输入整改描述" />
       </el-form-item>
 
       <el-form-item label="整改附件" prop="rectifyFile">
@@ -233,8 +245,7 @@
           :file-type="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'jpg', 'png', 'jpeg']"
           :limit="3"
           :file-size="100"
-          class="min-w-80px"
-        />
+          class="min-w-80px" />
       </el-form-item>
     </el-form>
 
@@ -248,8 +259,7 @@
     <div
       v-for="(file, index) in fileList"
       :key="index"
-      class="flex items-center justify-between mt-5"
-    >
+      class="flex items-center justify-between mt-5">
       <span class="file-name-text">{{ extractFileName(file) }}</span>
       <div>
         <el-button link type="primary" @click="viewFileInfo(file)">
@@ -271,25 +281,22 @@
   <FilePreviewDialog
     v-model="filePreviewVisible"
     :title="filePreviewTitle"
-    :urls="filePreviewUrls"
-  />
+    :urls="filePreviewUrls" />
 </template>
 
 <script setup lang="ts">
-import { IotHiddenApi } from '@/api/pms/qhse/index'
+import { IotHiddenApi, IotHiddenTypeApi } from '@/api/pms/qhse/index'
 import DeptTree from '@/views/system/user/DeptTree2.vue'
-import { handleTree } from '@/utils/tree'
+
 import * as DeptApi from '@/api/system/dept'
 import { ElMessageBox, ElMessage } from 'element-plus'
 const deptList2 = ref<Tree[]>([]) // 树形结构
 import { formatDate } from '@/utils/formatTime'
-
+import { defaultProps, handleTree } from '@/utils/tree'
 import UploadFile from '@/components/UploadFile/src/UploadFile.vue'
 import FilePreviewDialog from '@/components/FilePreview/src/FilePreviewDialog.vue'
 import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
 
-import { selectedDeptsEmployee } from '@/api/system/user'
-
 import { useTableComponents } from '@/components/ZmTable/useTableComponents'
 const { ZmTable, ZmTableColumn } = useTableComponents()
 
@@ -302,7 +309,7 @@ const exportLoading = ref(false) // 导出按钮加载中
 const isLeftContentCollapsed = ref(false)
 
 const { t } = useI18n()
-
+const deptTree = ref() // 树形结构
 const list = ref([]) // 列表的数据
 const total = ref(0) // 列表的总页数
 const queryParams = reactive({
@@ -337,7 +344,9 @@ const formData = ref({
   hazardFile: '',
   rectifyDesc: '',
   rectifyFile: '',
-  status: ''
+  status: '',
+  classify: '',
+  source: ''
 })
 
 // 表单验证规则
@@ -348,7 +357,9 @@ const formRules = {
   problem: [{ required: true, message: '存在问题不能为空', trigger: 'blur' }],
   rectifyDesc: [{ required: true, message: '整改描述不能为空', trigger: 'blur' }],
   rectifyFile: [{ required: true, message: '整改附件不能为空', trigger: 'blur' }],
-  hazardFile: [{ required: true, message: '照片不能为空', trigger: 'blur' }]
+  hazardFile: [{ required: true, message: '照片不能为空', trigger: 'blur' }],
+  classify: [{ required: true, message: '分类不能为空', trigger: 'blur' }],
+  source: [{ required: true, message: '来源不能为空', trigger: 'blur' }]
 }
 
 /** 查询列表 */
@@ -397,9 +408,10 @@ const resetQuery = () => {
 }
 
 // 显示新增对话框
-const handleAdd = () => {
+const handleAdd = async () => {
   isEdit.value = false
   dialogTitle.value = '新增隐患排查'
+  await getTree()
   resetForm()
   dialogVisible.value = true
 }
@@ -425,27 +437,6 @@ const handleFix = (row) => {
   currentFixId.value = row.id
 }
 
-// 查看证书图片
-const viewHazardFile = (value: string) => {
-  filePreviewTitle.value = '隐患附件'
-  filePreviewUrls.value = normalizeUrls(value)
-  filePreviewVisible.value = true
-}
-
-const viewRectifyFile = (value: string) => {
-  filePreviewTitle.value = '整改附件'
-  filePreviewUrls.value = normalizeUrls(value)
-  filePreviewVisible.value = true
-}
-
-const normalizeUrls = (value: string) => {
-  if (!value) return []
-  return value
-    .split(',')
-    .map((s) => s.trim())
-    .filter(Boolean)
-}
-
 // 确保时间戳是毫秒级的
 const ensureMillisecondTimestamp = (timestamp) => {
   let time = Number(timestamp)
@@ -580,16 +571,6 @@ const handleDownload = async (url) => {
   }
 }
 
-let userList = ref([])
-const handleDeptChange = async (value) => {
-  const res = await selectedDeptsEmployee({
-    deptIds: value
-  })
-
-  userList.value = res
-  console.log('value>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>', userList.value)
-}
-
 let dialogFileView = ref(false)
 let fileList = ref([])
 const viewFile = (file) => {
@@ -618,7 +599,15 @@ const extractFileName = (url: string): string => {
     return url
   }
 }
-
+/** 获得分类树 */
+const getTree = async () => {
+  deptTree.value = []
+  const data = await IotHiddenTypeApi.getParentCategory()
+  let dept: Tree = { id: 0, name: '顶级分类', children: [] }
+  dept.children = handleTree(data)
+  deptTree.value.push(dept)
+  // firstLevelKeys.value = deptTree.value.map((node) => node.id)
+}
 onMounted(async () => {
   getList()
   deptList2.value = handleTree(await DeptApi.getSimpleDeptList())