yanghao 1 zi în urmă
părinte
comite
3fd548f702

+ 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='https://iot.deepoil.cc'
+VITE_BASE_URL='http://192.168.188.79:48080'
 
 # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
 VITE_UPLOAD_TYPE=server

+ 1 - 1
src/api/pms/qhse/index.ts

@@ -344,7 +344,7 @@ export const IotSocSummaryApi = {
   },
   // SOC卡预览
   previewIotSocSummary: async (id) => {
-    return await request.download({ url: `/rq/iot-soc-summary/safety-card/preview/${id}` })
+    return await request.download({ url: `/rq/iot-soc-summary/safety-card/preview?id=${id}` })
   },
   // 下载SOC卡
   downloadIotSocSummary: async (id) => {

+ 60 - 4
src/views/pms/qhse/socSummary/IotSocSummaryForm.vue

@@ -39,6 +39,7 @@
           check-strictly
           node-key="id"
           filterable
+          multiple
           placeholder="请选择soc类型"
         />
       </el-form-item>
@@ -80,7 +81,8 @@ const formType = ref('') // 表单的类型:create - 新增;update - 修改
 const formData = ref({
   project: undefined,
   observationDate: undefined,
-  socClass: undefined,
+
+  socClass: [],
   userName: undefined,
   post: undefined,
   deptId: undefined,
@@ -88,6 +90,7 @@ const formData = ref({
 })
 const formRules = reactive({
   observationDate: [{ required: true, message: '观察日期不能为空', trigger: 'blur' }],
+
   socClass: [{ required: true, message: 'soc类型不能为空', trigger: 'blur' }],
   className: [{ required: true, message: '类型名称不能为空', trigger: 'blur' }],
   deptId: [{ required: true, message: '队伍不能为空', trigger: 'change' }],
@@ -102,11 +105,20 @@ const open = async (type: string, id?: number) => {
   dialogTitle.value = t('action.' + type)
   formType.value = type
   resetForm()
+  if (!socList.value.length) {
+    const data = await IotSocApi.getSocList({})
+    socList.value = handleTree(data)
+  }
   // 修改时,设置数据
   if (id) {
     formLoading.value = true
     try {
-      formData.value = await IotSocSummaryApi.getIotSocSummary(id)
+      const data = await IotSocSummaryApi.getIotSocSummary(id)
+      formData.value = {
+        ...data,
+
+        socClass: normalizeSocClasses(data.socClass, socList.value)
+      }
     } finally {
       formLoading.value = false
     }
@@ -122,7 +134,12 @@ const submitForm = async () => {
   // 提交请求
   formLoading.value = true
   try {
-    const data = formData.value
+    const data = {
+      ...formData.value,
+
+      socClasses: formData.value.socClass,
+      socClass: undefined
+    }
     if (formType.value === 'create') {
       await IotSocSummaryApi.createIotSocSummary(data)
       message.success(t('common.createSuccess'))
@@ -151,7 +168,8 @@ const resetForm = () => {
     id: undefined,
     project: undefined,
     observationDate: undefined,
-    socClass: undefined,
+
+    socClass: [],
     className: undefined,
     userName: undefined,
     post: undefined,
@@ -162,6 +180,44 @@ const resetForm = () => {
   formRef.value?.resetFields()
 }
 
+const normalizeSocClasses = (value: unknown, tree: Tree[] = []): (string | number)[] => {
+  const values = Array.isArray(value)
+    ? value
+    : typeof value === 'string'
+      ? value
+          .split(',')
+          .map((item) => item.trim())
+          .filter(Boolean)
+      : value === null || value === undefined || value === ''
+        ? []
+        : [value as string | number]
+
+  const idMap = new Map<string, string | number>()
+  const stack = [...tree]
+  while (stack.length) {
+    const node = stack.shift() as any
+    if (!node) continue
+    idMap.set(String(node.id), node.id)
+    if (Array.isArray(node.children) && node.children.length) {
+      stack.push(...node.children)
+    }
+  }
+
+  return values.map((item) => idMap.get(String(item)) ?? item)
+}
+
+const serializeSocClasses = (value: unknown): string => {
+  if (Array.isArray(value)) {
+    return value
+      .map((item) => String(item).trim())
+      .filter(Boolean)
+      .join(',')
+  }
+  if (typeof value === 'string') return value
+  if (value === null || value === undefined) return ''
+  return String(value)
+}
+
 onMounted(async () => {
   deptList2.value = handleTree(await DeptApi.getSimpleDeptList())
 

+ 7 - 3
src/views/pms/qhse/socSummary/index.vue

@@ -76,10 +76,11 @@
             align="center"
             prop="observationDate"
             :formatter="dateFormatter"
+            类型名称
             width="180px"
           />
 
-          <el-table-column label="类型名称" align="center" prop="className" />
+          <el-table-column label="类型名称" align="center" prop="className" min-width="120" />
           <el-table-column label="姓名" align="center" prop="userName" />
           <el-table-column label="岗位" align="center" prop="post" />
 
@@ -94,7 +95,7 @@
 
           <el-table-column label="操作" align="center" min-width="180px" fixed="right">
             <template #default="scope">
-              <el-button link type="primary" @click="view(scope.row.id)"> 查看 </el-button>
+              <!-- <el-button link type="primary" @click="view(scope.row.id)"> 查看 </el-button> -->
               <el-button link type="primary" @click="downloadSOC(scope.row)"> 下载 </el-button>
               <el-button
                 link
@@ -255,12 +256,15 @@ const handleExport = async () => {
 
 const view = async (id) => {
   dialogVisible.value = true
+  // 等待弹框渲染完成后再加载文档
+
   // 等待弹框渲染完成后再加载文档
   await nextTick()
-  const container = document.getElementById('docx-viewer') as HTMLElement
+  const container = document.getElementById('docx-viewer')
   if (container) {
     container.innerHTML = '' // 清空之前的内容
     const res = await IotSocSummaryApi.previewIotSocSummary(id)
+
     await renderAsync(res, container)
   }
 }