瀏覽代碼

Merge branch 'feature/ZUNYIYIKED-264' of dashoo/labsop_h5 into master

徐凯 4 月之前
父節點
當前提交
ba85335f23

+ 78 - 36
src/view/animal/application/components/Application.vue

@@ -127,7 +127,34 @@
           class="mt10"
           :gutter="20"
         >
-          <el-col :span="24">
+          <el-col :span="12">
+            <el-form-item
+              label="雄性"
+              prop="maleNumber"
+            >
+              <el-input-number
+                style="width: 100%"
+                placeholder="雄性数量"
+                v-model="state.form.maleNumber"
+                :min="0"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item
+              label="雌性"
+              prop="famaleNumber"
+            >
+              <el-input-number
+                style="width: 100%"
+                placeholder="雌性数量"
+                v-model="state.form.famaleNumber"
+                :min="0"
+              />
+            </el-form-item>
+          </el-col>
+
+          <!-- <el-col :span="24">
             <el-form-item
               label="数量(雄性+雌性)"
               prop="maleNumber"
@@ -152,7 +179,7 @@
                 />
               </div>
             </el-form-item>
-          </el-col>
+          </el-col> -->
         </el-row>
 
         <el-row
@@ -203,7 +230,7 @@
               <el-input-number
                 v-model="state.form.feedingDay"
                 style="width: 100%"
-                :min="0"
+                :min="1"
               />
             </el-form-item>
           </el-col>
@@ -238,21 +265,16 @@
         </el-row>
 
         <el-row
+          v-if="state.form.buyFrom === ProcurementChannels.PURCHASED_BY_MYSELF"
           class="mt10"
           :gutter="20"
         >
           <el-col :span="24">
             <el-form-item
-              label="动物到达时间"
-              prop="comeTime"
+              label="外购来源单位"
+              prop="comeFromUnit"
             >
-              <el-date-picker
-                v-model="state.form.comeTime"
-                type="date"
-                placeholder="请选择到达时间"
-                clearable
-                style="width: 100%"
-              />
+              <el-input v-model="state.form.comeFromUnit" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -263,10 +285,16 @@
         >
           <el-col :span="24">
             <el-form-item
-              label="外购来源单位"
-              prop="comeFromUnit"
+              label="动物到达时间"
+              prop="comeTime"
             >
-              <el-input v-model="state.form.comeFromUnit" />
+              <el-date-picker
+                v-model="state.form.comeTime"
+                type="date"
+                placeholder="请选择到达时间"
+                clearable
+                style="width: 100%"
+              />
             </el-form-item>
           </el-col>
         </el-row>
@@ -274,11 +302,13 @@
         <el-row
           class="mt10"
           :gutter="20"
+          v-if="state.form.buyFrom === ProcurementChannels.PURCHASED_BY_MYSELF"
         >
           <el-col :span="24">
             <el-form-item
-              label="生产许可证"
+              label="生产许可证副本"
               prop="licenseNumberFile"
+              :rules="{ required: state.form.buyFrom === ProcurementChannels.PURCHASED_BY_MYSELF, message: '不能为空', trigger: 'change' }"
             >
               <el-upload
                 v-model:file-list="licenseNumberFileList"
@@ -300,11 +330,13 @@
         <el-row
           class="mt10"
           :gutter="20"
+          v-if="state.form.buyFrom === ProcurementChannels.PURCHASED_BY_MYSELF"
         >
           <el-col :span="24">
             <el-form-item
               label="近三个月动物质量检测证明"
               prop="animalTestDateFile"
+              :rules="{ required: state.form.buyFrom === ProcurementChannels.PURCHASED_BY_MYSELF, message: '不能为空', trigger: 'change' }"
             >
               <el-upload
                 v-model:file-list="animalTestDateFileList"
@@ -326,14 +358,15 @@
         <el-row
           class="mt10"
           :gutter="20"
+          v-if="state.form.buyFrom === ProcurementChannels.PURCHASED_BY_MYSELF"
         >
           <el-col :span="24">
             <el-form-item
-              label="近三个月饲养环境检测证明"
-              prop="envTestDateFile"
+              label="基因鉴定报告"
+              prop="geneIdentificationFile"
             >
               <el-upload
-                v-model:file-list="envTestDateFileList"
+                v-model:file-list="geneIdentificationFileList"
                 class="upload-demo"
                 :action="uploadUrl"
                 :limit="1"
@@ -397,7 +430,7 @@
           </el-col>
         </el-row>
 
-        <el-row
+        <!-- <el-row
           class="mt10"
           :gutter="20"
         >
@@ -421,7 +454,7 @@
               </el-upload>
             </el-form-item>
           </el-col>
-        </el-row>
+        </el-row> -->
 
         <el-row
           class="mt10"
@@ -429,7 +462,7 @@
         >
           <el-col :span="24">
             <el-form-item
-              label="伦理审查表"
+              label="实验动物福利伦理审查申请表"
               prop="ethicsCheckFile"
             >
               <el-upload
@@ -455,7 +488,7 @@
         >
           <el-col :span="24">
             <el-form-item
-              label="伦理意见表"
+              label="实验动物福利伦理审查意见表"
               prop="ethicsAdviceFile"
             >
               <el-upload
@@ -539,21 +572,25 @@
     categoryId: { required: true, message: '不能为空', trigger: 'change' },
     number: { required: true, message: '不能为空', trigger: 'change' },
     startDate: { required: true, message: '不能为空', trigger: 'change' },
-    maleNumber: { required: true, message: '不能为空', trigger: 'change' },
-    weight: { required: true, message: '不能为空', trigger: 'change' },
+    // maleNumber: { required: true, message: '不能为空', trigger: 'change' },
+    // weight: { required: true, message: '不能为空', trigger: 'change' },
     buyFrom: { required: true, message: '不能为空', trigger: 'change' },
+    feedingDay: { required: true, message: '不能为空', trigger: 'change' },
     comeFromUnit: { required: true, message: '不能为空', trigger: 'change' },
+    feedingSpecialDesc: { required: true, message: '不能为空', trigger: 'change' },
+    ethicsCheckFile: { required: true, message: '不能为空', trigger: 'change' },
+    ethicsAdviceFile: { required: true, message: '不能为空', trigger: 'change' },
   }
 
-  const animalNumber = computed(() => {
-    const maleNumber = state.form.maleNumber || 0
-    const famaleNumber = state.form.famaleNumber || 0
-    return maleNumber + famaleNumber
-  })
+  // const animalNumber = computed(() => {
+  //   const maleNumber = state.form.maleNumber || 0
+  //   const famaleNumber = state.form.famaleNumber || 0
+  //   return maleNumber + famaleNumber
+  // })
 
   const licenseNumberFileList = ref<UploadFile[]>([])
   const animalTestDateFileList = ref<UploadFile[]>([])
-  const envTestDateFileList = ref<UploadFile[]>([])
+  const geneIdentificationFileList = ref<UploadFile[]>([])
   const cageAppointFileList = ref<UploadFile[]>([])
   const ethicsCheckFileList = ref<UploadFile[]>([])
   const ethicsAdviceFileList = ref<UploadFile[]>([])
@@ -579,7 +616,7 @@
       comeFromUnit: '',
       licenseNumberFile: [],
       animalTestDateFile: [],
-      envTestDateFile: [],
+      geneIdentificationFile: [],
       hasFeedingSpecial: FeedingSpecial.HAVE_FEEDING_SPECIAL,
       feedingSpecialDesc: '',
       cageAppointFile: [],
@@ -645,8 +682,8 @@
       animalTestDateFileList.value = []
       state.form.animalTestDateFile = []
     } else if (type === UploadFileType.ENV_TEST_DATE) {
-      envTestDateFileList.value = []
-      state.form.envTestDateFile = []
+      geneIdentificationFileList.value = []
+      state.form.geneIdentificationFile = []
     } else if (type === UploadFileType.CAGE_APPOINT_FILE) {
       cageAppointFileList.value = []
       state.form.cageAppointFile = []
@@ -666,7 +703,7 @@
     } else if (type === UploadFileType.ANIMAL_TEST_DATE) {
       state.form.animalTestDateFile = [{ name: file.name, url: res?.Data }]
     } else if (type === UploadFileType.ENV_TEST_DATE) {
-      state.form.envTestDateFile = [{ name: file.name, url: res?.Data }]
+      state.form.geneIdentificationFile = [{ name: file.name, url: res?.Data }]
     } else if (type === UploadFileType.CAGE_APPOINT_FILE) {
       state.form.cageAppointFile = [{ name: file.name, url: res?.Data }]
     } else if (type === UploadFileType.ETHICS_CHECK_FILE) {
@@ -686,6 +723,11 @@
         return
       }
 
+      if (!state.form.maleNumber && !state.form.famaleNumber) {
+        ElMessage.error('请输入雄性或雌性数量!')
+        return
+      }
+
       const params = {
         ...deepClone(state.form),
         categoryName: animalTypeList.value.find((item) => item.id == state.form.categoryId)?.name,
@@ -694,7 +736,7 @@
         comeTime: state.form.comeTime ? dayjs(state.form.comeTime).format('YYYY-MM-DD') : '',
         licenseNumberFile: JSON.stringify(state.form.licenseNumberFile),
         animalTestDateFile: JSON.stringify(state.form.animalTestDateFile),
-        envTestDateFile: JSON.stringify(state.form.envTestDateFile),
+        geneIdentificationFile: JSON.stringify(state.form.geneIdentificationFile),
         cageAppointFile: JSON.stringify(state.form.cageAppointFile),
         ethicsCheckFile: JSON.stringify(state.form.ethicsCheckFile),
         ethicsAdviceFile: JSON.stringify(state.form.ethicsAdviceFile),

+ 453 - 88
src/view/animal/application/components/Detail.vue

@@ -1,162 +1,516 @@
 <template>
   <div class="facilities-dialog-container">
-    <el-dialog title="详情" @close="closeDialog" :close-on-click-modal="false" v-model="props.showDialog" width="100%">
-      <el-form ref="expertDialogFormRef" disabled :model="state.form" size="default" label-width="140px" label-position="top">
+    <el-dialog
+      title="详情"
+      @close="closeDialog"
+      :close-on-click-modal="false"
+      v-model="props.showDialog"
+      width="100%"
+    >
+      <el-form
+        ref="expertDialogFormRef"
+        disabled
+        :model="state.form"
+        size="default"
+        label-width="140px"
+        label-position="top"
+      >
         <el-row :gutter="35">
-          <el-col :span="12" class="mb20">
-            <el-form-item label="申请人姓名" prop="memberName">
-              <el-input v-model="state.form.userName" disabled placeholder="请输入申请人姓名"></el-input>
+          <el-col
+            :span="12"
+            class="mb20"
+          >
+            <el-form-item
+              label="申请人姓名"
+              prop="memberName"
+            >
+              <el-input
+                v-model="state.form.userName"
+                disabled
+                placeholder="请输入申请人姓名"
+              ></el-input>
             </el-form-item>
           </el-col>
-          <el-col :span="12" class="mb20">
-            <el-form-item label="课题名称" prop="memberType">
-              <el-input v-model="state.form.projectGroupName" disabled placeholder="请输入课题名称"></el-input>
+          <el-col
+            :span="12"
+            class="mb20"
+          >
+            <el-form-item
+              label="课题名称"
+              prop="memberType"
+            >
+              <el-input
+                v-model="state.form.projectGroupName"
+                disabled
+                placeholder="请输入课题名称"
+              ></el-input>
             </el-form-item>
           </el-col>
         </el-row>
 
         <el-row :gutter="35">
-          <el-col :span="12" class="mb20">
-            <el-form-item label="申请时间" prop="memberPhone">
-              <el-input v-model="state.form.createdTime" disabled placeholder="请输入申请时间"></el-input>
+          <el-col
+            :span="12"
+            class="mb20"
+          >
+            <el-form-item
+              label="申请时间"
+              prop="memberPhone"
+            >
+              <el-input
+                v-model="state.form.createdTime"
+                disabled
+                placeholder="请输入申请时间"
+              ></el-input>
             </el-form-item>
           </el-col>
-          <el-col :span="12" class="mb20">
-            <el-form-item label="申请状态" prop="mentorName">
-              <el-input v-model="state.form.approveStatus" disabled placeholder="请输入申请状态"></el-input>
+          <el-col
+            :span="12"
+            class="mb20"
+          >
+            <el-form-item
+              label="申请状态"
+              prop="mentorName"
+            >
+              <el-input
+                v-model="state.form.approveStatus"
+                disabled
+                placeholder="请输入申请状态"
+              ></el-input>
             </el-form-item>
           </el-col>
         </el-row>
 
         <el-row :gutter="35">
-          <el-col :span="12" class="mb20">
-            <el-form-item :label="props.isReturnCageList ? '退还笼位(个)' : '申请笼位(个)'" prop="mentorObj">
-              <el-input v-if="!props.isReturnCageList" v-model="state.form.number" disabled placeholder="请输入申请笼位"></el-input>
-              <el-input v-else v-model="state.form.returnNumber" disabled placeholder="请输入申请笼位"></el-input>
+          <el-col
+            :span="12"
+            class="mb10"
+          >
+            <el-form-item
+              :label="props.isReturnCageList ? '退还笼位(个)' : '申请笼位(个)'"
+              prop="mentorObj"
+            >
+              <el-input
+                v-if="!props.isReturnCageList"
+                v-model="state.form.number"
+                disabled
+                placeholder="请输入申请笼位"
+              ></el-input>
+              <el-input
+                v-else
+                v-model="state.form.returnNumber"
+                disabled
+                placeholder="请输入申请笼位"
+              ></el-input>
             </el-form-item>
           </el-col>
 
-          <el-col :span="12" class="mb20">
-            <el-form-item label="动物类型" prop="mentorDeptName">
-              <el-input v-model="state.form.categoryName" disabled placeholder="请输入动物类型"></el-input>
+          <el-col
+            :span="12"
+            class="mb10"
+          >
+            <el-form-item
+              label="动物类型"
+              prop="mentorDeptName"
+            >
+              <el-input
+                v-model="state.form.categoryName"
+                disabled
+                placeholder="请输入动物类型"
+              ></el-input>
             </el-form-item>
           </el-col>
         </el-row>
 
-        <el-row class="mt10" :gutter="20">
+        <el-row
+          class="mt10"
+          :gutter="20"
+        >
+          <el-col :span="12">
+            <el-form-item
+              label="雄性"
+              prop="maleNumber"
+            >
+              <el-input
+                style="width: 100%"
+                disabled
+                placeholder="雄性数量"
+                v-model="state.form.maleNumber"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item
+              label="雌性"
+              prop="famaleNumber"
+            >
+              <el-input
+                style="width: 100%"
+                disabled
+                placeholder="雌性数量"
+                v-model="state.form.famaleNumber"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row
+          class="mt10"
+          :gutter="20"
+        >
           <el-col :span="24">
-            <el-form-item label="数量(雄性+雌性)" prop="maleNumber">
-              <div style="width: 100%; display: flex; justify-content: space-between">
-                <el-input-number disabled placeholder="雄性数量" v-model="state.form.maleNumber" :min="0" />
-                +
-                <el-input-number disabled placeholder="雌性数量" v-model="state.form.famaleNumber" :min="0" />
-              </div>
-              <div style="width: 100%; margin-top: 10px">
-                <el-input disabled placeholder="总数" v-model="animalNumber" />
-              </div>
+            <el-form-item
+              label="体重"
+              prop="weight"
+            >
+              <el-input
+                disabled
+                v-model="state.form.weight"
+                style="width: 100%"
+              />
             </el-form-item>
           </el-col>
         </el-row>
 
-        <el-row class="mt10" :gutter="20">
+        <el-row
+          class="mt10"
+          :gutter="20"
+        >
           <el-col :span="24">
-            <el-form-item label="体重" prop="weight">
-              <el-input-number disabled v-model="state.form.weight" style="width: 100%" :min="0" />
+            <el-form-item
+              label="周龄"
+              prop="age"
+            >
+              <el-input
+                disabled
+                v-model="state.form.age"
+                style="width: 100%"
+              />
             </el-form-item>
           </el-col>
         </el-row>
 
-        <el-row class="mt10" :gutter="20">
+        <el-row
+          class="mt10"
+          :gutter="20"
+        >
           <el-col :span="24">
-            <el-form-item label="周龄" prop="age">
-              <el-input-number disabled v-model="state.form.age" style="width: 100%" :min="0" />
+            <el-form-item
+              label="饲养总天数"
+              prop="feedingDay"
+            >
+              <el-input
+                disabled
+                v-model="state.form.feedingDay"
+                style="width: 100%"
+              />
             </el-form-item>
           </el-col>
         </el-row>
 
-        <el-row class="mt10" :gutter="20">
+        <el-row
+          class="mt10"
+          :gutter="20"
+        >
           <el-col :span="24">
-            <el-form-item label="饲养总天数" prop="feedingDay">
-              <el-input-number disabled v-model="state.form.feedingDay" style="width: 100%" :min="0" />
+            <el-form-item
+              label="采购渠道"
+              prop="buyFrom"
+            >
+              <el-radio-group
+                disabled
+                v-model="state.form.buyFrom"
+              >
+                <el-radio
+                  :label="ProcurementChannels.PURCHASED_BY_OTHERS"
+                  size="large"
+                >
+                  动物房代购
+                </el-radio>
+                <el-radio
+                  :label="ProcurementChannels.PURCHASED_BY_MYSELF"
+                  size="large"
+                >
+                  自行购买
+                </el-radio>
+              </el-radio-group>
             </el-form-item>
           </el-col>
         </el-row>
 
-        <h4 class="mb8 mt20">采购渠道</h4>
-        <el-row class="mt10" :gutter="20">
+        <el-row
+          class="mt10"
+          :gutter="20"
+        >
           <el-col :span="24">
-            <el-form-item label="采购渠道" prop="buyFrom">
-              <el-radio-group disabled v-model="state.form.buyFrom">
-                <el-radio :label="ProcurementChannels.PURCHASED_BY_OTHERS" size="large">动物房代购</el-radio>
-                <el-radio :label="ProcurementChannels.PURCHASED_BY_MYSELF" size="large">自行购买</el-radio>
+            <el-form-item
+              label="是否有特殊饲养要求"
+              prop="hasFeedingSpecial"
+            >
+              <el-radio-group
+                disabled
+                v-model="state.form.hasFeedingSpecial"
+              >
+                <el-radio
+                  :label="FeedingSpecial.HAVE_FEEDING_SPECIAL"
+                  size="large"
+                >
+                  有
+                </el-radio>
+                <el-radio
+                  :label="FeedingSpecial.NO_FEEDING_SPECIAL"
+                  size="large"
+                >
+                  无
+                </el-radio>
               </el-radio-group>
             </el-form-item>
           </el-col>
         </el-row>
 
-        <el-row class="mt10" :gutter="20">
+        <el-row>
           <el-col :span="24">
-            <el-form-item label="动物到达时间" prop="comeTime">
-              <el-date-picker disabled v-model="state.form.comeTime" type="date" placeholder="请选择到达时间" clearable style="width: 100%" />
+            <el-form-item
+              label="特殊饲养要求"
+              prop="feedingSpecialDesc"
+            >
+              <el-input
+                v-model="state.form.feedingSpecialDesc"
+                disabled
+                placeholder="请输入特殊饲养要求"
+              ></el-input>
             </el-form-item>
           </el-col>
         </el-row>
 
-        <el-row class="mt10" :gutter="20">
+        <el-row
+          class="mt10"
+          :gutter="20"
+        >
           <el-col :span="24">
-            <el-form-item label="外购来源单位" prop="comeFromUnit">
-              <el-input disabled v-model="state.form.comeFromUnit" />
+            <el-form-item
+              label="动物到达时间"
+              prop="comeTime"
+            >
+              <el-date-picker
+                disabled
+                v-model="state.form.comeTime"
+                type="date"
+                placeholder="请选择到达时间"
+                clearable
+                style="width: 100%"
+              />
             </el-form-item>
           </el-col>
         </el-row>
 
-        <el-row v-if="state.form.licenseNumberFile" class="mt10" :gutter="20">
-          <el-col :span="24" class="mb20">
-            <el-form-item label="生产许可证" prop="licenseNumberFile">
-              <el-link type="primary">{{ state.form.licenseNumberFile }}</el-link>
+        <el-row
+          class="mt10"
+          :gutter="20"
+        >
+          <el-col :span="24">
+            <el-form-item
+              label="外购来源单位"
+              prop="comeFromUnit"
+            >
+              <el-input
+                disabled
+                v-model="state.form.comeFromUnit"
+              />
             </el-form-item>
           </el-col>
         </el-row>
 
-        <el-row v-if="state.form.animalTestDateFile" class="mt10" :gutter="20">
-          <el-col :span="24" class="mb20">
-            <el-form-item label="近三个月动物质量检测证明" prop="animalTestDateFile">
-              <el-link type="primary">{{ state.form.animalTestDateFile }}</el-link>
+        <el-row
+          v-if="state.form.licenseNumberFile && JSON.stringify(state.form.licenseNumberFile) !== '[]'"
+          class="mt10"
+          :gutter="20"
+        >
+          <el-col
+            :span="24"
+            class="mb20"
+          >
+            <el-form-item
+              label="生产许可证"
+              prop="licenseNumberFile"
+            >
+              <el-link
+                v-for="item in state.form.licenseNumberFile"
+                :key="item.url"
+                :href="item.url"
+                target="_blank"
+                type="primary"
+              >
+                {{ item.name }}
+              </el-link>
             </el-form-item>
           </el-col>
         </el-row>
 
-        <el-row v-if="state.form.envTestDateFile" class="mt10" :gutter="20">
-          <el-col :span="24" class="mb20">
-            <el-form-item label="近三个月饲养环境检测证明" prop="envTestDateFile">
-              <el-link type="primary">{{ state.form.envTestDateFile }}</el-link>
+        <el-row
+          v-if="state.form.animalTestDateFile && JSON.stringify(state.form.animalTestDateFile) !== '[]'"
+          class="mt10"
+          :gutter="20"
+        >
+          <el-col
+            :span="24"
+            class="mb20"
+          >
+            <el-form-item
+              label="近三个月动物质量检测证明"
+              prop="animalTestDateFile"
+            >
+              <el-link
+                v-for="item in state.form.animalTestDateFile"
+                :key="item.url"
+                :href="item.url"
+                target="_blank"
+                type="primary"
+              >
+                {{ item.name }}
+              </el-link>
             </el-form-item>
           </el-col>
         </el-row>
 
-        <el-row v-if="state.form.cageAppointFile" class="mt10" :gutter="20">
-          <el-col :span="24" class="mb20">
-            <el-form-item label="笼位预约表" prop="cageAppointFile">
-              <el-link type="primary">{{ state.form.cageAppointFile }}</el-link>
+        <el-row
+          v-if="state.form.geneIdentificationFile && JSON.stringify(state.form.geneIdentificationFile) !== '[]'"
+          class="mt10"
+          :gutter="20"
+        >
+          <el-col
+            :span="24"
+            class="mb20"
+          >
+            <el-form-item
+              label="基因鉴定报告"
+              prop="geneIdentificationFile"
+            >
+              <el-link
+                v-for="item in state.form.geneIdentificationFile"
+                :key="item.url"
+                :href="item.url"
+                target="_blank"
+                type="primary"
+              >
+                {{ item.name }}
+              </el-link>
             </el-form-item>
           </el-col>
         </el-row>
 
-        <el-row v-if="state.form.ethicsCheckFile" class="mt10" :gutter="20">
-          <el-col :span="24" class="mb20">
-            <el-form-item label="伦理审查表" prop="ethicsCheckFile">
-              <el-link type="primary">{{ state.form.ethicsCheckFile }}</el-link>
+        <el-row
+          v-if="state.form.envTestDateFile && JSON.stringify(state.form.envTestDateFile) !== '[]'"
+          class="mt10"
+          :gutter="20"
+        >
+          <el-col
+            :span="24"
+            class="mb20"
+          >
+            <el-form-item
+              label="近三个月饲养环境检测证明"
+              prop="envTestDateFile"
+            >
+              <el-link
+                v-for="item in state.form.envTestDateFile"
+                :key="item.url"
+                :href="item.url"
+                target="_blank"
+                type="primary"
+              >
+                {{ item.name }}
+              </el-link>
             </el-form-item>
           </el-col>
         </el-row>
 
-        <el-row v-if="state.form.ethicsAdviceFile" class="mt10" :gutter="20">
-          <el-col :span="24" class="mb20">
-            <el-form-item label="伦理意见表" prop="ethicsAdviceFile">
-              <el-link type="primary">{{ state.form.ethicsAdviceFile }}</el-link>
+        <el-row
+          v-if="state.form.cageAppointFile && JSON.stringify(state.form.cageAppointFile) !== '[]'"
+          class="mt10"
+          :gutter="20"
+        >
+          <el-col
+            :span="24"
+            class="mb20"
+          >
+            <el-form-item
+              label="笼位预约表"
+              prop="cageAppointFile"
+            >
+              <el-link
+                v-for="item in state.form.cageAppointFile"
+                :key="item.url"
+                :href="item.url"
+                target="_blank"
+                type="primary"
+              >
+                {{ item.name }}
+              </el-link>
             </el-form-item>
           </el-col>
         </el-row>
+
+        <el-row
+          v-if="state.form.ethicsCheckFile && JSON.stringify(state.form.ethicsCheckFile) !== '[]'"
+          class="mt10"
+          :gutter="20"
+        >
+          <el-col
+            :span="24"
+            class="mb20"
+          >
+            <el-form-item
+              label="实验动物福利伦理审查申请表"
+              prop="ethicsCheckFile"
+            >
+              <el-link
+                v-for="item in state.form.ethicsCheckFile"
+                :key="item.url"
+                :href="item.url"
+                target="_blank"
+                type="primary"
+              >
+                {{ item.name }}
+              </el-link>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row
+          v-if="state.form.ethicsAdviceFile && JSON.stringify(state.form.ethicsAdviceFile) !== '[]'"
+          class="mt10"
+          :gutter="20"
+        >
+          <el-col
+            :span="24"
+            class="mb20"
+          >
+            <el-form-item
+              label="实验动物福利伦理审查意见表"
+              prop="ethicsAdviceFile"
+            >
+              <el-link
+                v-for="item in state.form.ethicsAdviceFile"
+                :key="item.url"
+                :href="item.url"
+                target="_blank"
+                type="primary"
+              >
+                {{ item.name }}
+              </el-link>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <div class="card">
+          <h4>审批记录</h4>
+          <FlowTable
+            :id="state.form.id"
+            :businessCode="`${state.form.id}`"
+            defCode="plat_cage_applications"
+          />
+        </div>
       </el-form>
     </el-dialog>
   </div>
@@ -164,12 +518,14 @@
 
 <script setup lang="ts" name="systemProDialog">
   import to from 'await-to-js'
-  import { nextTick, reactive, ref, computed } from 'vue'
+  import { nextTick, reactive, ref, computed, defineAsyncComponent } from 'vue'
   import dayjs from 'dayjs'
 
   import { usePlatAnimalCageApplicationApi } from '/@/api/platform/animal'
   import { ApproveStatusList, ProcurementChannels, FeedingSpecial } from '/@/constants/pageConstants'
-  
+
+  const FlowTable = defineAsyncComponent(() => import('/@/components/FlowTable.vue'))
+
   const animalNumber = computed(() => {
     const maleNumber = state.form.maleNumber || 0
     const famaleNumber = state.form.famaleNumber || 0
@@ -180,7 +536,7 @@
   const props = defineProps({
     code: { type: String, default: '' },
     showDialog: { type: Boolean, default: false },
-    isReturnCageList: { type: Boolean, default: false }
+    isReturnCageList: { type: Boolean, default: false },
   })
   const emit = defineEmits(['close'])
 
@@ -190,6 +546,7 @@
 
   const state = reactive({
     form: {
+      id: 0,
       userName: '',
       number: 0,
       approveStatus: '',
@@ -205,16 +562,17 @@
       buyFrom: ProcurementChannels.PURCHASED_BY_OTHERS,
       comeTime: '',
       comeFromUnit: '',
-      licenseNumberFile: '',
-      animalTestDateFile: '',
-      envTestDateFile: '',
+      licenseNumberFile: [],
+      animalTestDateFile: [],
+      envTestDateFile: [],
       hasFeedingSpecial: FeedingSpecial.HAVE_FEEDING_SPECIAL,
       feedingSpecialDesc: '',
-      cageAppointFile: '',
-      ethicsCheckFile: '',
-      ethicsAdviceFile: ''
+      cageAppointFile: [],
+      ethicsCheckFile: [],
+      ethicsAdviceFile: [],
+      geneIdentificationFile: [],
     },
-    disabled: false
+    disabled: false,
   })
 
   // 打开弹窗
@@ -225,7 +583,14 @@
     state.form = {
       ...res?.data,
       approveStatus: ApproveStatusList.find((item) => item.id == res?.data?.approveStatus)?.name,
-      createdTime: dayjs(res?.data?.createdTime).format('YYYY-MM-DD')
+      createdTime: dayjs(res?.data?.createdTime).format('YYYY-MM-DD'),
+      licenseNumberFile: res?.data?.licenseNumberFile ? JSON.parse(res?.data?.licenseNumberFile) : [],
+      animalTestDateFile: res?.data?.animalTestDateFile ? JSON.parse(res?.data?.animalTestDateFile) : [],
+      envTestDateFile: res?.data?.envTestDateFile ? JSON.parse(res?.data?.envTestDateFile) : [],
+      cageAppointFile: res?.data?.cageAppointFile ? JSON.parse(res?.data?.cageAppointFile) : [],
+      ethicsCheckFile: res?.data?.ethicsCheckFile ? JSON.parse(res?.data?.ethicsCheckFile) : [],
+      ethicsAdviceFile: res?.data?.ethicsAdviceFile ? JSON.parse(res?.data?.ethicsAdviceFile) : [],
+      geneIdentificationFile: res?.data?.geneIdentificationFile ? JSON.parse(res?.data?.geneIdentificationFile) : [],
     }
   }
 
@@ -236,7 +601,7 @@
 
   // 暴露变量
   defineExpose({
-    initForm
+    initForm,
   })
 </script>
 <style lang="scss" scoped>

+ 2 - 2
src/view/animal/return/index.vue

@@ -206,8 +206,8 @@
   }
 
   const handleCheckDetail = (row: any) => {
-    detailModalRef.value.initForm(row.id)
-    showDetailDialog.value = true
+    // detailModalRef.value.initForm(row.id)
+    // showDetailDialog.value = true
   }
 
   const search = () => {