Просмотр исходного кода

Merge branch 'qhse_cert' of shuzhihua/pms-iot-vue into master

yanghao 13 часов назад
Родитель
Сommit
b895b812d4

+ 6 - 0
src/locales/en.ts

@@ -647,6 +647,12 @@ export default {
     yd: 'NumberOfMonthsOfDepreciation',
     yy: 'AmountOfDepreciation',
     sy: 'RemainingAmount',
+    // 每月折旧金额
+    my: 'MonthlyDepreciation',
+    // 总折旧月份
+    mmy: 'TotalDepreciationMonths',
+    // 币种
+    currency: 'Currency',
     choose: 'Please select',
     expand: 'Expand',
     close: 'Close',

+ 6 - 0
src/locales/zh-CN.ts

@@ -1014,6 +1014,12 @@ export default {
     yd: '已提折旧月数:',
     yy: '已提折旧金额:',
     sy: '剩余金额:',
+    // 每月折旧金额
+    my: '每月折旧金额:',
+    // 总折旧月份
+    mmy: '总折旧月份:',
+    // 币种
+    currency: '币种:',
 
     fileLibrary: '资料库',
     deviceBOM: '设备BOM',

+ 22 - 1
src/views/pms/device/DeviceInfo.vue

@@ -135,6 +135,24 @@
                 {{ formData.remainAmount ? formData.remainAmount : '-' }}
               </el-form-item>
             </el-col>
+
+            <el-col :span="6">
+              <el-form-item :label="t('deviceInfo.my')" prop="monthAmount">
+                {{ formData.monthAmount ? formData.monthAmount : '-' }}
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="6">
+              <el-form-item :label="t('deviceInfo.mmy')" prop="totalMonth">
+                {{ formData.totalMonth ? formData.totalMonth : '-' }}
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="6">
+              <el-form-item :label="t('deviceInfo.currency')" prop="currency">
+                {{ formData.currency ? formData.currency : '-' }}
+              </el-form-item>
+            </el-col>
           </el-row>
           <el-row style="margin-top: 20px">
             <el-col v-for="field in list" :key="field.sort" :span="6">
@@ -294,7 +312,10 @@ const formData = ref({
   size: undefined,
   status: undefined,
   remark: undefined,
-  deptName: undefined
+  deptName: undefined,
+  monthAmount: undefined,
+  totalMonth: undefined,
+  currency: undefined
 })
 const pics = ref([])
 const imgSrc = ref('')

+ 13 - 2
src/views/pms/qhse/faultReport/index.vue

@@ -3,7 +3,18 @@
     <DeptTree @node-click="handleDeptNodeClick" v-model:collapsed="isLeftContentCollapsed" />
 
     <el-col :xs="24" :span="isLeftContentCollapsed ? 24 : 20">
-      <ContentWrap style="border: 0">
+      <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 style="border: 0; margin-top: 10px">
         <el-form
           class="-mb-15px"
           :model="queryParams"
@@ -63,7 +74,7 @@
           style="width: 100%"
           :header-cell-style="{ background: '#f5f7fa', color: '#333', height: '50px' }"
           :cell-style="{ padding: '12px 8px' }"
-          height="calc(85vh - 115px)"
+          height="calc(80vh - 115px)"
           :max-height="tableHeight"
         >
           <el-table-column prop="actualTime" label="事件时间" align="center" min-width="150">

+ 455 - 45
src/views/pms/qhse/ptw/index.vue

@@ -6,24 +6,12 @@
       <ContentWrap>
         <!-- 搜索工作栏 -->
         <el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true">
-          <el-form-item label="地址" prop="address">
-            <el-input placeholder="请输入地址" v-model="queryParams.address" />
+          <el-form-item label="PTW编号" prop="ptwNo">
+            <el-input placeholder="请输入PTW编号" v-model="queryParams.ptwNo" />
           </el-form-item>
 
-          <el-form-item label="状态" prop="status">
-            <el-select
-              v-model="queryParams.status"
-              placeholder="请选择状态"
-              clearable
-              style="width: 180px"
-            >
-              <el-option
-                v-for="dict in getStrDictOptions(DICT_TYPE.QHSE_HAZARD_STATUS)"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
-              />
-            </el-select>
+          <el-form-item label="PTW序号" prop="ptwXh">
+            <el-input placeholder="请输入PTW序号" v-model="queryParams.ptwXh" />
           </el-form-item>
 
           <el-form-item>
@@ -52,22 +40,22 @@
           height="calc(85vh - 130px)"
           :show-overflow-tooltip="true"
         >
-          <el-table-column :label="t('monitor.serial')" width="70" align="center">
+          <el-table-column :label="t('monitor.serial')" width="70" align="center" fixed="left">
             <template #default="scope">
               {{ scope.$index + 1 }}
             </template>
           </el-table-column>
 
-          <el-table-column label="PTW编号" align="center" prop="ptwNo" width="100" />
-          <el-table-column label="PTW序号" align="center" prop="ptwXh" width="100" />
+          <el-table-column label="PTW编号" align="center" prop="ptwNo" width="100" fixed="left" />
+          <el-table-column label="PTW序号" align="center" prop="ptwXh" width="100" fixed="left" />
 
           <el-table-column label="时间" align="center" show-overflow-tooltip>
             <template #default="{ row }">
-              {{ formatDate(row.ptwTime) }}
+              {{ formatDate(row.ptwTime).substring(0, 10) }}
             </template>
           </el-table-column>
 
-          <el-table-column label="作业票类型" align="center">
+          <el-table-column label="作业票类型" align="center" width="120">
             <template #default="{ row }">
               <dict-tag :type="DICT_TYPE.QHSE_PTW_TYPE" :value="row.ptwType" />
             </template>
@@ -160,7 +148,7 @@
   </el-row>
 
   <!-- 新增/编辑证书对话框 -->
-  <el-dialog
+  <Dialog
     :title="dialogTitle"
     v-model="dialogVisible"
     width="600px"
@@ -174,6 +162,13 @@
       label-width="120px"
       v-loading="formLoading"
     >
+      <el-form-item label="JSA编号" prop="ptwNo">
+        <el-input v-model="formData.ptwNo" disabled placeholder="选择JSA编号" style="width: 300px">
+          <template #append>
+            <el-link @click="selectJSA" :underline="false">选择</el-link>
+          </template>
+        </el-input>
+      </el-form-item>
       <el-form-item label="序号" prop="ptwXh">
         <el-input v-model="formData.ptwXh" placeholder="请输入序号" />
       </el-form-item>
@@ -187,10 +182,11 @@
         />
       </el-form-item>
 
-      <el-form-item label="作业分级" prop="ptwGrade">
-        <el-select v-model="formData.ptwGrade" placeholder="请选择作业分级">
+      <!-- 作业票类型 -->
+      <el-form-item label="作业票类型" prop="ptwType">
+        <el-select v-model="formData.ptwType" placeholder="请选择作业票类型">
           <el-option
-            v-for="item in getDictOptions(DICT_TYPE.QHSE_PTW_GRADE)"
+            v-for="item in getDictOptions(DICT_TYPE.QHSE_PTW_TYPE)"
             :key="item.value"
             :label="item.label"
             :value="item.value"
@@ -198,11 +194,14 @@
         </el-select>
       </el-form-item>
 
-      <!-- 作业票类型 -->
-      <el-form-item label="作业票类型" prop="ptwType">
-        <el-select v-model="formData.ptwType" placeholder="请选择作业票类型">
+      <el-form-item
+        label="作业分级"
+        prop="ptwGrade"
+        v-if="formData.ptwType === '1' || formData.ptwType === '4' || formData.ptwType === '3'"
+      >
+        <el-select v-model="formData.ptwGrade" placeholder="请选择作业分级">
           <el-option
-            v-for="item in getDictOptions(DICT_TYPE.QHSE_PTW_TYPE)"
+            v-for="item in getDictOptions(DICT_TYPE.QHSE_PTW_GRADE)"
             :key="item.value"
             :label="item.label"
             :value="item.value"
@@ -214,16 +213,53 @@
         <el-input v-model="formData.workLocation" placeholder="请输入作业地点" />
       </el-form-item>
 
+      <el-form-item label="作业时间" prop="ptwTime">
+        <el-date-picker
+          v-model="formData.ptwTime"
+          type="date"
+          value-format="x"
+          placeholder="请选择作业时间"
+          style="width: 100%"
+        />
+      </el-form-item>
+
       <el-form-item label="作业人员" prop="workPerson">
-        <el-input v-model="formData.workPerson" placeholder="请输入作业人员" />
+        <el-input
+          v-model="formData.workPerson"
+          disabled
+          placeholder="请选择作业人员"
+          style="width: 300px"
+        >
+          <template #append>
+            <el-link @click="selectworkPerson('workPerson')" :underline="false">选择</el-link>
+          </template>
+        </el-input>
       </el-form-item>
 
       <el-form-item label="监护人" prop="guardian">
-        <el-input v-model="formData.guardian" placeholder="请输入监护人" />
+        <el-input
+          v-model="formData.guardian"
+          disabled
+          placeholder="请选择监护人"
+          style="width: 300px"
+        >
+          <template #append>
+            <el-link @click="selectworkPerson('guardian')" :underline="false">选择</el-link>
+          </template>
+        </el-input>
       </el-form-item>
 
       <el-form-item label="作业负责人" prop="workDuty">
-        <el-input v-model="formData.workDuty" placeholder="请输入作业负责人" />
+        <el-input
+          v-model="formData.workDuty"
+          disabled
+          placeholder="请选择作业负责人"
+          style="width: 300px"
+        >
+          <template #append>
+            <el-link @click="selectworkPerson('workDuty')" :underline="false">选择</el-link>
+          </template>
+        </el-input>
       </el-form-item>
 
       <el-form-item label="附件" prop="file">
@@ -251,9 +287,10 @@
       <el-button @click="closeDialog">取 消</el-button>
       <el-button type="primary" @click="submitForm" :loading="submitLoading">确 定</el-button>
     </template>
-  </el-dialog>
+  </Dialog>
 
-  <el-dialog v-model="dialogFileView" title="附件" width="500">
+  <!-- 文件查看对话框 -->
+  <Dialog v-model="dialogFileView" title="附件" width="500">
     <div
       v-for="(file, index) in fileList"
       :key="index"
@@ -275,7 +312,203 @@
         <el-button type="primary" @click="dialogFileView = false"> 确认 </el-button>
       </div>
     </template>
-  </el-dialog>
+  </Dialog>
+
+  <!-- 选择作业人员对话框 -->
+  <Dialog :title="personDialog" v-model="personDialogVisible" width="60%">
+    <ContentWrap>
+      <!-- 搜索工作栏 -->
+      <el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true">
+        <el-form-item label="所属人员" prop="userName">
+          <el-input
+            v-model="queryParams2.userName"
+            placeholder="请输入所属人员"
+            clearable
+            @keyup.enter="handleQuery2"
+            class="!w-200px"
+          />
+        </el-form-item>
+        <el-form-item>
+          <el-button @click="handleQuery2"
+            ><Icon icon="ep:search" class="mr-5px" /> {{ t('devicePerson.search') }}</el-button
+          >
+          <el-button @click="resetQuery2"
+            ><Icon icon="ep:refresh" class="mr-5px" /> {{ t('devicePerson.reset') }}</el-button
+          >
+        </el-form-item>
+      </el-form>
+    </ContentWrap>
+    <div class="pb-10">
+      <el-table
+        v-loading="loading"
+        :data="certList"
+        :stripe="true"
+        :show-overflow-tooltip="true"
+        ref="measureTableRef"
+      >
+        <el-table-column width="50" align="center">
+          <template #default="scope">
+            <el-radio
+              :model-value="selectedPerson"
+              :label="scope.row.userName"
+              @change="handleRadioChange(scope.row)"
+            >
+              &nbsp;
+            </el-radio>
+          </template>
+        </el-table-column>
+        <el-table-column :label="t('monitor.serial')" width="70" align="center">
+          <template #default="scope">
+            {{ scope.$index + 1 }}
+          </template>
+        </el-table-column>
+        <el-table-column label="证书类型" align="center" prop="type">
+          <template #default="scope">
+            {{ getCertificateTypeText(scope.row.type) }}
+          </template>
+        </el-table-column>
+
+        <el-table-column label="证书类别" align="center" width="150" prop="classify">
+          <template #default="scope">
+            <dict-tag
+              v-if="scope.row.type === 'organization'"
+              :type="DICT_TYPE.ORG_CERT"
+              :value="scope.row.classify"
+            />
+            <dict-tag v-else :type="DICT_TYPE.PERSON_CERT" :value="scope.row.classify" />
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="证书名称"
+          width="150"
+          align="center"
+          prop="certName"
+          show-overflow-tooltip
+        />
+
+        <el-table-column label="所属人" align="center" prop="userName" />
+        <el-table-column label="所在部门" align="center" prop="deptName" />
+
+        <el-table-column label="颁发机构" align="center" prop="certOrg" width="120" />
+
+        <el-table-column label="证书标准" align="center" prop="certStandard" width="120" />
+
+        <el-table-column label="颁发时间" align="center" prop="certIssue">
+          <template #default="scope">
+            {{ formatDateCorrectly(scope.row.certIssue) }}
+          </template>
+        </el-table-column>
+
+        <el-table-column label="有效期" align="center">
+          <template #default="scope">
+            {{ formatDateCorrectly(scope.row.certExpire) }}
+          </template>
+        </el-table-column>
+
+        <el-table-column label="到期提醒" align="center">
+          <template #default="scope"> {{ scope.row.noticeBefore }}天前提醒 </template>
+        </el-table-column>
+
+        <el-table-column label="备注" align="center" prop="remark" />
+      </el-table>
+      <!-- 分页 -->
+      <Pagination
+        :total="total2"
+        v-model:page="queryParams2.pageNo"
+        v-model:limit="queryParams2.pageSize"
+        @pagination="getCertList"
+      />
+    </div>
+
+    <template #footer>
+      <el-button @click="confirmSelectMeasure" type="primary">确 定</el-button>
+      <el-button @click="((personDialogVisible = false), (selectedPerson = undefined))"
+        >取 消</el-button
+      >
+    </template>
+  </Dialog>
+
+  <!-- 选择JSA 对话框 -->
+  <Dialog title="选择JSA序号" v-model="dialogJSA" width="60%">
+    <ContentWrap>
+      <!-- 搜索工作栏 -->
+      <el-form class="-mb-15px" :model="queryParams3" ref="queryFormRef" :inline="true">
+        <el-form-item label="JSA序号" prop="jsaXh">
+          <el-input
+            v-model="queryParams3.jsaXh"
+            placeholder="请输入JSA序号"
+            clearable
+            @keyup.enter="handleQuery3"
+            class="!w-200px"
+          />
+        </el-form-item>
+        <el-form-item>
+          <el-button @click="handleQuery3"
+            ><Icon icon="ep:search" class="mr-5px" /> {{ t('devicePerson.search') }}</el-button
+          >
+          <el-button @click="resetQuery3"
+            ><Icon icon="ep:refresh" class="mr-5px" /> {{ t('devicePerson.reset') }}</el-button
+          >
+        </el-form-item>
+      </el-form>
+    </ContentWrap>
+    <div class="pb-10">
+      <el-table v-loading="loading" :data="JSAList" :stripe="true" :show-overflow-tooltip="true">
+        <el-table-column width="50" align="center">
+          <template #default="scope">
+            <el-radio
+              :model-value="selectedJSA"
+              :label="scope.row.jsaNo"
+              @change="handleRadioChange2(scope.row)"
+            >
+              &nbsp;
+            </el-radio>
+          </template>
+        </el-table-column>
+        <el-table-column label="JSA序号" align="center" prop="jsaXh" />
+        <el-table-column label="编号" align="center" prop="jsaNo" />
+
+        <el-table-column label="日期" align="center" prop="jsaTime">
+          <template #default="{ row }">
+            {{ formatDate(row.jsaTime).substring(0, 10) }}
+          </template>
+        </el-table-column>
+        <el-table-column label="工作任务" align="center" prop="jobTask" />
+
+        <el-table-column label="工作地点" align="center" prop="jobAddress" />
+
+        <el-table-column label="工作负责人" align="center" prop="jobDuty" />
+
+        <el-table-column label="附件" align="center" prop="jsaFile">
+          <template #default="{ row }">
+            <el-link
+              v-if="row.jsaFile"
+              :underline="false"
+              type="primary"
+              size="small"
+              @click="viewFile(row.jsaFile)"
+              >查看</el-link
+            >
+            <span v-else>-</span>
+          </template>
+        </el-table-column>
+
+        <el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip />
+      </el-table>
+      <!-- 分页 -->
+      <Pagination
+        :total="total3"
+        v-model:page="queryParams3.pageNo"
+        v-model:limit="queryParams3.pageSize"
+        @pagination="getJSAList"
+      />
+    </div>
+
+    <template #footer>
+      <el-button @click="confirmSelectJSA" type="primary">确 定</el-button>
+      <el-button @click="((dialogJSA = false), (selectedJSA = undefined))">取 消</el-button>
+    </template>
+  </Dialog>
 
   <FilePreviewDialog
     v-model="filePreviewVisible"
@@ -285,18 +518,19 @@
 </template>
 
 <script setup lang="ts">
-import { QHSEPtwApi } from '@/api/pms/qhse/index'
+import { QHSEPtwApi, IotMeasureCertApi, QHSEJsaApi } 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 { useUserStore } from '@/store/modules/user'
 import UploadFile from '@/components/UploadFile/src/UploadFile.vue'
 import FilePreviewDialog from '@/components/FilePreview/src/FilePreviewDialog.vue'
-import { DICT_TYPE, getStrDictOptions, getDictOptions } from '@/utils/dict'
-
+import { DICT_TYPE, getDictOptions } from '@/utils/dict'
+import { getUserProfile } from '@/api/system/user/profile'
+const userStore = useUserStore()
 defineOptions({ name: 'IotQHSEPTW' })
 
 const loading = ref(true) // 列表的加载中
@@ -312,8 +546,20 @@ const total = ref(0) // 列表的总页数
 const queryParams = reactive({
   pageNo: 1,
   pageSize: 10,
-  deptId: '',
-  address: ''
+  ptwXh: '',
+  ptwNo: ''
+})
+
+const queryParams2 = reactive({
+  pageNo: 1,
+  pageSize: 10,
+  userName: ''
+})
+
+const queryParams3 = reactive({
+  pageNo: 1,
+  pageSize: 10,
+  jsaXh: ''
 })
 const queryFormRef = ref(null) // 搜索的表单
 
@@ -337,10 +583,13 @@ const formData = ref({
   workLocation: '',
   workContent: '',
   ptwXh: '',
+  ptwNo: '',
   ptwGrade: '',
   ptwType: '',
   file: '',
-  remark: ''
+  remark: '',
+  ptwTime: '',
+  jsaId: ''
 })
 
 // 表单验证规则
@@ -354,7 +603,8 @@ const formRules = {
   ptwXh: [{ required: true, message: '作业票编号不能为空', trigger: 'blur' }],
   ptwGrade: [{ required: true, message: '作业票等级不能为空', trigger: 'blur' }],
   ptwType: [{ required: true, message: '作业票类型不能为空', trigger: 'blur' }],
-  file: [{ required: true, message: '附件不能为空', trigger: 'blur' }]
+  file: [{ required: true, message: '附件不能为空', trigger: 'blur' }],
+  ptwTime: [{ required: true, message: '作业票时间不能为空', trigger: 'blur' }]
 }
 
 /** 查询列表 */
@@ -501,7 +751,8 @@ const resetForm = () => {
     ptwGrade: '',
     ptwType: '',
     file: '',
-    remark: ''
+    remark: '',
+    jsaId: ''
   }
   formRef.value?.clearValidate()
 }
@@ -511,7 +762,7 @@ const closeDialog = () => {
   dialogVisible.value = false
   resetForm()
 }
-
+let userInfo = ref()
 // 提交表单
 const submitForm = async () => {
   if (!formRef.value) return
@@ -525,12 +776,16 @@ const submitForm = async () => {
       ...formData.value
     }
 
+    // submitData.deptName = userInfo.value.dept.name
+
     if (isEdit.value) {
       // 编辑
       await QHSEPtwApi.updatePtw(submitData)
       ElMessage.success('编辑成功')
     } else {
       // 新增
+      submitData.deptId = userStore.getUser.deptId
+
       await QHSEPtwApi.createPtw(submitData)
       ElMessage.success('新增成功')
     }
@@ -594,7 +849,162 @@ const extractFileName = (url: string): string => {
 onMounted(async () => {
   getList()
   deptList2.value = handleTree(await DeptApi.getSimpleDeptList())
+
+  const users = await getUserProfile()
+  userInfo.value = users
+  console.log('xxxxxxxxxxxxxxxxxx', userInfo.value)
 })
+
+let personDialogVisible = ref(false)
+let certList = ref([])
+const selectedPerson = ref<string | undefined>(undefined)
+
+const getCertificateTypeText = (type: string) => {
+  const map: Record<string, string> = {
+    personal: '个人证书',
+    organization: '组织证书',
+    other: '其他'
+  }
+  return map[type] || type
+}
+
+// 正确格式化日期的函数
+const formatDateCorrectly = (timestamp) => {
+  if (!timestamp) return ''
+
+  // 如果是秒级时间戳,转换为毫秒级
+  let time = Number(timestamp)
+  if (time < 10000000000) {
+    // 小于这个数通常表示秒级时间戳
+    time = time * 1000
+  }
+
+  return formatDate(time).substring(0, 10)
+}
+
+let total2 = ref(0)
+const getCertList = async () => {
+  loading.value = true
+  try {
+    const data = await IotMeasureCertApi.getIotMeasureCertPage(queryParams2)
+    certList.value = data.list
+    total2.value = data.total
+  } finally {
+    loading.value = false
+  }
+}
+
+let personType = ref('')
+const confirmSelectMeasure = () => {
+  if (!selectedPerson.value) {
+    ElMessage.warning('请先选择一个计量器具')
+    return
+  }
+
+  // 将选中的仪器信息填入表单
+  if (personType.value == 'workPerson') {
+    formData.value.workPerson = selectedPerson.value
+  }
+
+  if (personType.value == 'guardian') {
+    formData.value.guardian = selectedPerson.value
+  }
+
+  if (personType.value == 'workDuty') {
+    formData.value.workDuty = selectedPerson.value
+  }
+
+  // 关闭选择仪器对话框
+  personDialogVisible.value = false
+  selectedPerson.value = undefined
+}
+
+let personDialog = ref('')
+const selectworkPerson = (type) => {
+  personType.value = type
+  if (type == 'workPerson') {
+    personDialog.value = '选择作业人员'
+  } else if (type == 'guardian') {
+    personDialog.value = '选择监护人'
+  } else if (type == 'workDuty') {
+    personDialog.value = '选择作业负责人'
+  }
+  personDialogVisible.value = true
+  getCertList()
+}
+
+const handleRadioChange = (row: any) => {
+  selectedPerson.value = row.userName
+  // selectedMeasure.value = row
+}
+
+/** 搜索按钮操作 */
+const handleQuery2 = () => {
+  queryParams2.pageNo = 1
+  getCertList()
+}
+
+/** 重置按钮操作 */
+const resetQuery2 = () => {
+  queryParams2.userName = ''
+  queryFormRef.value?.resetFields()
+  handleQuery2()
+}
+
+// JSA序号***********************************88
+let dialogJSA = ref(false)
+let JSAList = ref([])
+let total3 = ref(0)
+const getJSAList = async () => {
+  loading.value = true
+  try {
+    const data = await QHSEJsaApi.getJsaList(queryParams3)
+    JSAList.value = data.list
+    total3.value = data.total
+  } finally {
+    loading.value = false
+  }
+}
+// 选择JSA序号
+const selectJSA = () => {
+  dialogJSA.value = true
+  getJSAList()
+}
+
+/** 搜索按钮操作 */
+const handleQuery3 = () => {
+  queryParams3.pageNo = 1
+  getJSAList()
+}
+
+/** 重置按钮操作 */
+const resetQuery3 = () => {
+  queryParams3.jsaXh = ''
+  queryFormRef.value?.resetFields()
+  handleQuery3()
+}
+
+let selectedJSA = ref<string | undefined>(undefined)
+const confirmSelectJSA = () => {
+  if (!selectedJSA.value) {
+    ElMessage.warning('请先选择一个JSA')
+    return
+  }
+
+  // 将选中的仪器信息填入表单
+  formData.value.ptwNo = selectedJSA.value
+  formData.value.jsaId = jsaId.value
+
+  // 关闭选择仪器对话框
+  dialogJSA.value = false
+  selectedJSA.value = undefined
+}
+let jsaId = ref(0)
+const handleRadioChange2 = (row: any) => {
+  console.log('row', row)
+  selectedJSA.value = row.jsaNo
+  jsaId.value = row.id
+}
 </script>
 
 <style scoped>