浏览代码

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/views/museums/photogroup/ImageImportForm .vue
wwj 4 月之前
父节点
当前提交
b7716376ba

+ 11 - 3
src/api/museums/specimenoutbound/index.ts

@@ -35,7 +35,7 @@ export const SpecimenOutboundApi = {
     return await request.get({ url: `/museums/specimen-outbound/get?id=` + id })
   },
 
-  // 新增标本出库回库信息
+  // 新增标本出库回库申请
   createSpecimenOutbound: async (data: SpecimenOutboundVO) => {
     return await request.post({ url: `/museums/specimen-outbound/create`, data })
   },
@@ -78,7 +78,7 @@ export const SpecimenOutboundApi = {
       data: reqBody
     });
   },
- //  // 确认标本回库
+ // 确认标本回库
  // SpecimenOutboundReturn :async (id: number) => {
  //    // 构造请求体
  //    const reqBody = {
@@ -88,7 +88,15 @@ export const SpecimenOutboundApi = {
  //    return await request.post({
  //      url: `/museums/specimen-outbound/update`,
  //      data: reqBody
- //    });
+ //    });/museums/specimen-outbound/specimenInfo
  //  }
+  // 查询标本出库回库信息详情页面
+  getSpecimenOutboundDetails: async (id: number) => {
+    return await request.get({ url: `/museums/specimen-outbound/specimenInfo?id=` + id })
+  },
+  // 修改标本出库申请
+  alterSpecimenOutbound: async (data: SpecimenOutboundVO) => {
+    return await request.put({ url: `/museums/specimen-outbound/recompile`, data })
+  },
 
 }

+ 2 - 0
src/views/Home/Index.vue

@@ -225,6 +225,8 @@ onMounted(async () => {
   returnNumber.value = return1[return1.length - 1].number;
   enterNumber1.value = enter[enter.length - 2].number;
   outNumber1.value = out[out.length - 2].number;
+  // TODO 这里
+  console.log(return1)
   returnNumber1.value = return1[return1.length - 2].number;
   enterRatio.value = (enterNumber.value - enterNumber1.value) / enterNumber.value * 100;
   outRatio.value = (outNumber.value - outNumber1.value) / outNumber.value * 100;

+ 3 - 1
src/views/Home/echarts-data.ts

@@ -89,7 +89,9 @@ outNumber.value = out[out.length - 1].number;
 returnNumber.value = return1[return1.length - 1].number;
 enterNumber1.value = enter[enter.length - 2].number;
 outNumber1.value = out[out.length - 2].number;
-returnNumber1.value = return1[return1.length - 2].number;
+console.log(out)
+// TODO 这里
+// returnNumber1.value = return1[return1.length - 2].number;
 
 //月环比
 enterRatio.value = (enterNumber.value-enterNumber1.value)/enterNumber.value*100;

+ 2 - 2
src/views/museums/photogroup/PhotosForm.vue

@@ -1,5 +1,5 @@
 <template>
-  <el-skeleton :loading="loading" animated>
+
   <Dialog :title="dialogTitle" v-model="dialogVisible">
     <el-form
       ref="formRef"
@@ -28,7 +28,7 @@
       <el-button @click="dialogVisible = false">取 消</el-button>
     </template>
   </Dialog>
-    </el-skeleton>
+
 </template>
 <script setup lang="ts">
 import { PhotosApi, PhotosVO } from '@/api/museums/photos'

+ 2 - 0
src/views/museums/photogroup/PhotosIndex.vue

@@ -164,6 +164,7 @@
 
   <!-- 表单弹窗:添加/修改 -->
   <PhotosForm ref="formRef" @success="getList" />
+
 </template>
 
 <script setup lang="ts">
@@ -223,6 +224,7 @@ const resetQuery = () => {
 /** 添加/修改操作 */
 const formRef = ref()
 const openForm = (type: string, id?: number) => {
+  console.log('id',id)
   formRef.value.open(type, id)
 }
 

+ 2 - 2
src/views/museums/specimeninfo/imageImportForm.vue

@@ -39,7 +39,7 @@
 import {UploadFilled} from "@element-plus/icons-vue";
 
 import { useUpload } from '@/components/UploadFile/src/useUpload'
-import {getAccessToken, getTenantId} from "@/utils/auth";
+
 import {ref} from "vue";
 const importUrl =
   import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + '/museums/specimen-info/import-specimen-images'
@@ -51,7 +51,7 @@ const message = useMessage() // 消息弹窗
 const updateSupport = ref(0) // 是否更新已经存在的用户数据
 const fileList = ref([]) // 文件列表
 const loading = ref(true) // 列表的加载中
-const uploadHeaders = ref() // 上传 Header 头
+// const uploadHeaders = ref() // 上传 Header 头
 /** 打开弹窗 */
 const open = () => {
   dialogVisible.value = true

+ 9 - 5
src/views/museums/specimenoutbound/ApproalProcess.vue

@@ -94,11 +94,7 @@
       />
       <el-table-column label="用途" align="center" prop="applicationUsage" />
       <el-table-column label="附件" align="center" prop="attachments" />
-<!--      <el-table-column label="审批状态" align="center" prop="status" >-->
-<!--        <template #default="scope">-->
-<!--          <dict-tag :type="DICT_TYPE.MUSEUMS_APPROAL_STATUS" :value="scope.row.status" />-->
-<!--        </template>-->
-<!--      </el-table-column>-->
+
       <el-table-column
         label="出库时间"
         align="center"
@@ -122,6 +118,14 @@
       <el-table-column label="操作" align="center" min-width="150px">
         <template #default="scope" >
           <el-button
+            link
+            type="primary"
+            @click="Approvaldetails(scope.row.id)"
+          >
+            查看
+          </el-button>
+          <el-button
+            v-if="scope.row.status !== 1 && scope.row.status !== 2 && scope.row.status !== 3 && scope.row.status !== 2  && scope.row.status !== 4"
             link
             type="danger"
             @click="handleApproval(scope.row.id)"

+ 261 - 165
src/views/museums/specimenoutbound/OutboundApplication.vue

@@ -1,187 +1,250 @@
 <template>
   <el-skeleton :loading="loading" animated>
-  <ContentWrap>
-  <!-- 搜索工作栏 -->
-  <el-form
-    class="-mb-15px"
-    :model="queryParams"
-    ref="queryFormRef"
-    :inline="true"
-    label-width="68px">
-    <el-form-item label="标本ID" prop="infoId">
-      <el-input
-        v-model="queryParams.infoId"
-        placeholder="标本ID"
-        clearable
-        @keyup.enter="handleQuery"
-        class="!w-240px"
-      />
-    </el-form-item>
-    <el-form-item label="中文名称" prop="chineseName">
-      <el-input
-        v-model="queryParams.chineseName"
-        placeholder="请输入中文名称"
-        clearable
-        @keyup.enter="handleQuery"
-        class="!w-240px"
-      />
-    </el-form-item>
-    <el-form-item label="标本编号" prop="specimenNumber">
-      <el-input
-        v-model="queryParams.specimenNumber"
-        placeholder="请输入申请出库的标本编号"
-        clearable
-        @keyup.enter="handleQuery"
-        class="!w-240px"
-      />
-    </el-form-item>
-    <el-form-item label="申请日期" prop="applicationDate">
-      <el-date-picker
-        v-model="queryParams.applicationDate"
-        value-format="YYYY-MM-DD HH:mm:ss"
-        type="daterange"
-        start-placeholder="开始日期"
-        end-placeholder="结束日期"
-        :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
-        class="!w-220px"
-      />
-    </el-form-item>
-    <el-form-item label="审批状态" prop="status">
-      <el-select
-        v-model="queryParams.status"
-        placeholder="请选择审批状态"
-        clearable
-        class="!w-240px"
-      >
-        <el-option
-        v-for="dict in getIntDictOptions(DICT_TYPE. MUSEUMS_APPROAL_STATUS)"
-        :key="dict.value"
-        :label="dict.label"
-        :value="dict.value" />
-      </el-select>
-    </el-form-item>
-    <el-form-item label="标本状态" prop="sampleStatus">
-      <el-select
-        v-model="queryParams.sampleStatus"
-        placeholder="请选择标本状态"
-        clearable
-        class="!w-240px"
-      >
-        <el-option label="请选择字典生成" value="" />
-      </el-select>
-    </el-form-item>
-    <el-form-item>
-      <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
-      <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
-      <el-button
-        type="primary"
-        plain
-        @click="openForm('create')"
-        v-hasPermi="['museums:specimen-outbound:create']"
-      >
-        <Icon icon="ep:plus" class="mr-5px" /> 新增申请出库
-      </el-button>
-      <el-button
-        type="success"
-        plain
-        @click="handleExport"
-        :loading="exportLoading"
-        v-hasPermi="['museums:specimen-outbound:export']"
-      >
-        <Icon icon="ep:download" class="mr-5px" /> 导出
-      </el-button>
-    </el-form-item>
-  </el-form>
-  </ContentWrap>
-
-  <!-- 列表 -->
-  <ContentWrap>
-    <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
-      <el-table-column label="序号" align="center" prop="id" />
-<!--      <el-table-column label="标本ID" align="center" prop="infoId" />-->
-      <el-table-column label="标本编号" align="center" prop="specimenNumber" />
-      <el-table-column label="中文名称" align="center" prop="chineseName" />
-      <el-table-column label="申请人(单位)" align="center" width="120px" prop="applicantName" />
-      <el-table-column
-        label="申请日期"
-        align="center"
-        prop="applicationDate"
-        :formatter="dateFormatter"
-        width="180px"
-      />
-      <el-table-column label="用途" align="center" prop="applicationUsage" />
-<!--      <el-table-column label="审批状态" align="center" prop="status" />-->
-      <el-table-column
-        label="出库时间"
-        align="center"
-        prop="outgoingTime"
-        :formatter="dateFormatter"
-        width="180px"
-      />
-<!--      <el-table-column-->
-<!--        label="退还日期"-->
-<!--        align="center"-->
-<!--        prop="returnDate"-->
-<!--        :formatter="dateFormatter"-->
-<!--        width="180px"-->
-<!--      />-->
-<!--      <el-table-column label="标本情况" align="center" prop="specimenCondition" />-->
-      <el-table-column label="申请附件" align="center" prop="attachments"/>
-        <el-table-column label="审批状态" align="center" prop="sampleStatus" >
-          <template #default="scope">
-            <dict-tag :type="DICT_TYPE.MUSEUMS_APPROAL_STATUS" :value="scope.row.status" />
-          </template>
-        </el-table-column>
-      <el-table-column label="操作" align="center" min-width="150px">
-        <template #default="scope" >
+    <ContentWrap>
+      <!-- 搜索工作栏 -->
+      <el-form
+        class="-mb-15px"
+        :model="queryParams"
+        ref="queryFormRef"
+        :inline="true"
+        label-width="68px">
+        <el-form-item label="标本ID" prop="infoId">
+          <el-input
+            v-model="queryParams.infoId"
+            placeholder="标本ID"
+            clearable
+            @keyup.enter="handleQuery"
+            class="!w-240px"
+          />
+        </el-form-item>
+        <el-form-item label="中文名称" prop="chineseName">
+          <el-input
+            v-model="queryParams.chineseName"
+            placeholder="请输入中文名称"
+            clearable
+            @keyup.enter="handleQuery"
+            class="!w-240px"
+          />
+        </el-form-item>
+        <el-form-item label="标本编号" prop="specimenNumber">
+          <el-input
+            v-model="queryParams.specimenNumber"
+            placeholder="请输入申请出库的标本编号"
+            clearable
+            @keyup.enter="handleQuery"
+            class="!w-240px"
+          />
+        </el-form-item>
+        <el-form-item label="申请日期" prop="applicationDate">
+          <el-date-picker
+            v-model="queryParams.applicationDate"
+            value-format="YYYY-MM-DD HH:mm:ss"
+            type="daterange"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
+            class="!w-220px"
+          />
+        </el-form-item>
+        <el-form-item label="审批状态" prop="status">
+          <el-select
+            v-model="queryParams.status"
+            placeholder="请选择审批状态"
+            clearable
+            class="!w-240px"
+          >
+            <el-option
+              v-for="dict in getIntDictOptions(DICT_TYPE. MUSEUMS_APPROAL_STATUS)"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"/>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="标本状态" prop="sampleStatus">
+          <el-select
+            v-model="queryParams.sampleStatus"
+            placeholder="请选择标本状态"
+            clearable
+            class="!w-240px"
+          >
+            <el-option label="请选择字典生成" value=""/>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button @click="handleQuery">
+            <Icon icon="ep:search" class="mr-5px"/>
+            搜索
+          </el-button>
+          <el-button @click="resetQuery">
+            <Icon icon="ep:refresh" class="mr-5px"/>
+            重置
+          </el-button>
           <el-button
-            link
             type="primary"
-            @click="openForm('update', scope.row.id)"
-            v-hasPermi="['museums:specimen-outbound:update']"
+            plain
+            @click="openForm('create')"
+            v-hasPermi="['museums:specimen-outbound:create']"
           >
-          编辑
+            <Icon icon="ep:plus" class="mr-5px"/>
+            新增标本出库申请
           </el-button>
           <el-button
-            link
-            type="danger"
-            @click="handleDelete(scope.row.id)"
-            v-hasPermi="['museums:specimen-outbound:delete']"
+            type="success"
+            plain
+            @click="handleExport"
+            :loading="exportLoading"
+            v-hasPermi="['museums:specimen-outbound:export']"
           >
-            删除
+            <Icon icon="ep:download" class="mr-5px"/>
+            导出
           </el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <!-- 分页 -->
-    <Pagination
-      :total="total"
-      v-model:page="queryParams.pageNo"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
-  </ContentWrap>
+        </el-form-item>
+      </el-form>
+    </ContentWrap>
+
+    <!-- 列表 -->
+    <ContentWrap>
+      <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
+        <el-table-column label="序号" align="center" prop="id"/>
+        <!--      <el-table-column label="标本ID" align="center" prop="infoId" />-->
+        <el-table-column label="标本编号" align="center" prop="specimenNumber"/>
+        <el-table-column label="中文名称" align="center" prop="chineseName"/>
+        <el-table-column label="申请人(单位)" align="center" width="120px" prop="applicantName"/>
+        <el-table-column label="用途" align="center" prop="applicationUsage"/>
+        <el-table-column label="申请附件" align="center" prop="attachments">
+          <template #default="{ row }">
+            <div v-if="row.attachments">
+            <el-image
+              v-if="row.type && row.type.includes('image')"
+              class="h-80px w-80px"
+              lazy
+              :src="row.attachments"
+              :preview-src-list="[row.attachments]"
+              preview-teleported
+              fit="cover"
+            />
+            <el-link
+              v-else-if="row.type && row.type.includes('pdf')"
+              type="primary"
+              :href="row.attachments"
+              :underline="false"
+              target="_blank"
+            >预览</el-link
+            >
+            <el-link v-else type="primary" download :href="row.url" :underline="false" target="_blank"
+            >下载</el-link
+            >
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="申请日期"
+          align="center"
+          prop="applicationDate"
+          :formatter="dateFormatter"
+          width="180px"
+        />
+
+        <!--      <el-table-column label="审批状态" align="center" prop="status" />-->
+        <el-table-column
+          label="出库时间"
+          align="center"
+          prop="outgoingTime"
+          :formatter="dateFormatter"
+          width="180px"
+        />
+        <!--      <el-table-column label="申请附件" align="center" prop="url">-->
+        <!--          <template #default="{ row }">-->
+        <!--            <el-image-->
+        <!--              v-if="row.type.includes('image')"-->
+        <!--              class="h-80px w-80px"-->
+        <!--              lazy-->
+        <!--              :src="row.url"-->
+        <!--              :preview-src-list="[row.url]"-->
+        <!--              preview-teleported-->
+        <!--              fit="cover"-->
+        <!--            />-->
+        <!--            <el-link-->
+        <!--              v-else-if="row.type.includes('pdf')"-->
+        <!--              type="primary"-->
+        <!--              :href="row.url"-->
+        <!--              :underline="false"-->
+        <!--              target="_blank"-->
+        <!--            >预览</el-link-->
+        <!--            >-->
+        <!--            <el-link v-else type="primary" download :href="row.url" :underline="false" target="_blank"-->
+        <!--            >下载</el-link-->
+        <!--            >-->
+        <!--          </template>-->
+        <!--      </el-table-column>-->
+        <el-table-column label="审批状态" align="center" prop="sampleStatus">
+          <template #default="scope">
+            <dict-tag :type="DICT_TYPE.MUSEUMS_APPROAL_STATUS" :value="scope.row.status"/>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" min-width="150px">
+          <template #default="scope">
+            <!-- 只有当记录未被审批或驳回时,才显示编辑按钮 -->
+            <el-button
+              v-if="scope.row.status !== 1 &&  scope.row.status !== 3  && scope.row.status !== 4"
+              link
+              type="primary"
+              @click="openForm('update', scope.row.id)"
+              v-hasPermi="['museums:specimen-outbound:update']"
+            >
+              编辑
+            </el-button>
 
-  <!-- 表单弹窗:审批 -->
-  <SpecimenOutboundForm ref="formRef" @success="getList" />
-  <Approval ref="ApprovalRef" @success="getList" />
-  </el-skeleton>
-</template>
 
+            <el-button
+              v-if="scope.row.status !== 0 && scope.row.status !== 1 && scope.row.status !== 3 && scope.row.status !== 4"
+              link
+              type="success"
+              @click="handleInitiative(scope.row.id)"
+              v-hasPermi="['museums:specimen-outbound:delete']"
+            >
+             查看驳回原因
+            </el-button>
+            <el-button
+              link
+              type="danger"
+              @click="handleDelete(scope.row.id)"
+              v-hasPermi="['museums:specimen-outbound:delete']"
+            >
+              删除
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <!-- 分页 -->
+      <Pagination
+        :total="total"
+        v-model:page="queryParams.pageNo"
+        v-model:limit="queryParams.pageSize"
+        @pagination="getList"
+      />
+    </ContentWrap>
 
+    <!-- 表单弹窗:编辑标本出库申请 -->
+    <SpecimenOutboundForm ref="formRef" @success="getList"/>
+      <InitiativeProcessInstance ref="initiativeFormRef" @success="getList" />
+  </el-skeleton>
+</template>
 
 
 <script setup lang="ts">
 import {dateFormatter} from "@/utils/formatTime";
 import download from '@/utils/download'
-import { SpecimenOutboundApi, SpecimenOutboundVO } from '@/api/museums/specimenoutbound'
-import Approval from "@/views/museums/specimenoutbound/approval.vue";
+import {SpecimenOutboundApi, SpecimenOutboundVO} from '@/api/museums/specimenoutbound'
 import SpecimenOutboundForm from "@/views/museums/specimenoutbound/SpecimenOutboundForm.vue";
+import InitiativeProcessInstance from '@/views/museums/specimenoutbound/OutboundForm/InitiativeProcessInstance.vue'
 import {ref} from "vue";
-defineOptions({ name: 'OutboundApplication' })
-import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
+// import type { Action } from 'element-plus'
+defineOptions({name: 'OutboundApplication'})
+import {getIntDictOptions, DICT_TYPE} from '@/utils/dict'
+
 const message = useMessage() // 消息弹窗
-const { t } = useI18n() // 国际化
+const {t} = useI18n() // 国际化
 
 const loading = ref(true) // 列表的加载中
 const list = ref<SpecimenOutboundVO[]>([]) // 列表的数据
@@ -214,6 +277,7 @@ const exportLoading = ref(false) // 导出的加载中
 const getList = async () => {
   loading.value = true
   try {
+    console.log(queryParams)
     const data = await SpecimenOutboundApi.getSpecimenOutboundPage(queryParams)
     list.value = data.list
     total.value = data.total
@@ -239,9 +303,34 @@ const resetQuery = () => {
 /** 添加/修改操作 */
 const formRef = ref()
 const openForm = (type: string, id?: number) => {
+
   formRef.value.open(type, id)
 }
 
+/** 查看驳回原因*/
+const initiativeFormRef = ref(null)
+const handleInitiative = (id) => {
+
+  initiativeFormRef.value.open('someType', id)
+}
+// const handleInitiative = async (id) => {
+//   try {
+//     const processInstanceId = await SpecimenOutboundApi.getSpecimenOutboundPage(id); // 假设这是你的 API 请求方法
+//     console.log(processInstanceId)
+//     ElMessageBox({
+//       title: '驳回原因',
+//       message: processInstanceId, // 使用从后端获取的驳回原因
+//       dangerouslyUseHTMLString: true,
+//       showConfirmButton: false,
+//       customClass: 'custom-message-box',
+//     });
+//
+//   } catch (error) {
+//     // 处理错误
+//     console.error(error);
+//   }
+// }
+
 
 /** 删除按钮操作 */
 const handleDelete = async (id: number) => {
@@ -253,7 +342,8 @@ const handleDelete = async (id: number) => {
     message.success(t('common.delSuccess'))
     // 刷新列表
     await getList()
-  } catch {}
+  } catch {
+  }
 }
 
 /** 导出按钮操作 */
@@ -278,3 +368,9 @@ onMounted(() => {
 
 
 </script>
+<style lang="scss" scoped>
+.custom-message-box .el-message-box__content  {
+  width: 800px !important;
+}
+
+</style>

+ 75 - 0
src/views/museums/specimenoutbound/OutboundForm/InitiativeProcessInstance.vue

@@ -0,0 +1,75 @@
+<template>
+  <Dialog
+    v-model="dialogVisible"
+    title="标本出库申请驳回原因:"
+    width="800"
+    v-loading="formLoading">
+    <el-form
+      ref="initiativeFormRef"
+      v-loading="formLoading"
+      v-if="outboundData"
+     >
+<text>{{ outboundData.processInstanceId }}</text>
+    </el-form>
+    <template #footer>
+      <el-button @click="close">关闭</el-button>
+    </template>
+  </Dialog>
+
+</template>
+
+
+<script setup lang="ts">
+import {ref} from "vue";
+import {SpecimenOutboundApi} from '@/api/museums/specimenoutbound'
+
+defineOptions({name: 'InitiativeProcessInstance'})
+const formLoading = ref(false) // 表单的加载中
+const dialogVisible = ref(false) // 弹窗的是否展示
+const formType = ref('')
+const {query} = useRoute() // 查询参数
+let outboundData = ref(null)
+/** 打开弹窗 */
+const open = async (type: string, id?: number) => {
+  dialogVisible.value = true
+  formType.value = type
+  if (id) {
+    formLoading.value = true
+    try {
+      const data = await SpecimenOutboundApi.getSpecimenOutboundPage(id)
+      formData.value = data;
+      console.log(data)
+    } finally {
+      formLoading.value = false
+    }
+  }
+}
+defineExpose({open}) // 提供 open 方法,用于打开弹窗
+/** 关闭弹窗 */
+const close = () => {
+  dialogVisible.value = false;
+};
+
+const formData = ref({
+  infoId: undefined,
+  processInstanceId: undefined,
+})
+
+/**查看驳回信息*/
+const fetchData = async () => {
+  try {
+    console.log(query.dataId)
+    let res: any = await SpecimenOutboundApi.getSpecimenOutboundPage(query.dataId)
+    console.log(res)
+    outboundData.value = res
+    console.log(outboundData.value)
+  }  finally {
+  }
+}
+
+// // 在组件加载时获取数据
+onMounted(async () => {
+  await fetchData()
+
+})
+</script>

+ 56 - 56
src/views/museums/specimenoutbound/OutboundForm/OutboundForm.vue

@@ -1,56 +1,56 @@
-<template>
-  <Dialog :title="dialogTitle" v-model="dialogVisible">
-
-    <template #footer>
-      <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
-      <el-button @click="dialogVisible = false">取 消</el-button>
-    </template>
-  </Dialog>
-</template>
-
-<script setup lang="ts">
-
-
-const dialogVisible = ref(false) // 弹窗的是否展示
-const formData = ref({
-  id: undefined,
-  infoId: undefined,
-  chineseName: undefined,
-  specimenNumber: undefined,
-  applicantName: undefined,
-  applicationDate: undefined,
-  applicationUsage: undefined,
-  attachments: undefined,
-  status: undefined,
-  remarks: undefined,
-  processInstanceId: undefined,
-  operator: undefined,
-  outgoingTime: undefined,
-  returner: undefined,
-  receiver: undefined,
-  returnDate: undefined,
-  specimenCondition: undefined,
-  sampleStatus: undefined
-})
-
-
-
-/** 打开弹窗 */
-const open = async (type: string, id?: number) => {
-  dialogVisible.value = true
-  dialogTitle.value = t('action.' + type)
-  formType.value = type
-  resetForm()
-  // 修改时,设置数据
-  if (id) {
-    formLoading.value = true
-    try {
-      formData.value = await SpecimenOutboundApi.getSpecimenOutbound(id)
-    } finally {
-      formLoading.value = false
-    }
-  }
-}
-defineExpose({ open }) // 提供 open 方法,用于打开弹窗
-
-</script>
+<!--<template>-->
+<!--  <Dialog :title="dialogTitle" v-model="dialogVisible">-->
+
+<!--    <template #footer>-->
+<!--      <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>-->
+<!--      <el-button @click="dialogVisible = false">取 消</el-button>-->
+<!--    </template>-->
+<!--  </Dialog>-->
+<!--</template>-->
+
+<!--<script setup lang="ts">-->
+
+
+<!--const dialogVisible = ref(false) // 弹窗的是否展示-->
+<!--const formData = ref({-->
+<!--  id: undefined,-->
+<!--  infoId: undefined,-->
+<!--  chineseName: undefined,-->
+<!--  specimenNumber: undefined,-->
+<!--  applicantName: undefined,-->
+<!--  applicationDate: undefined,-->
+<!--  applicationUsage: undefined,-->
+<!--  attachments: undefined,-->
+<!--  status: undefined,-->
+<!--  remarks: undefined,-->
+<!--  processInstanceId: undefined,-->
+<!--  operator: undefined,-->
+<!--  outgoingTime: undefined,-->
+<!--  returner: undefined,-->
+<!--  receiver: undefined,-->
+<!--  returnDate: undefined,-->
+<!--  specimenCondition: undefined,-->
+<!--  sampleStatus: undefined-->
+<!--})-->
+
+
+
+<!--/** 打开弹窗 */-->
+<!--const open = async (type: string, id?: number) => {-->
+<!--  dialogVisible.value = true-->
+<!--  dialogTitle.value = t('action.' + type)-->
+<!--  formType.value = type-->
+<!--  resetForm()-->
+<!--  // 修改时,设置数据-->
+<!--  if (id) {-->
+<!--    formLoading.value = true-->
+<!--    try {-->
+<!--      formData.value = await SpecimenOutboundApi.getSpecimenOutbound(id)-->
+<!--    } finally {-->
+<!--      formLoading.value = false-->
+<!--    }-->
+<!--  }-->
+<!--}-->
+<!--defineExpose({ open }) // 提供 open 方法,用于打开弹窗-->
+
+<!--</script>-->

+ 121 - 40
src/views/museums/specimenoutbound/OutboundForm/outboundDetail.vue

@@ -1,27 +1,20 @@
 <template>
   <el-skeleton :loading="loading" animated>
   <el-row :gutter="8" justify="space-between">
-    <el-col :xl="24" :lg="24" :md="24" :sm="24" :xs="24">
-      <div>
+
         <el-col :xl="24" :lg="24" :md="24" :sm="24" :xs="24" >
-          <el-card style="margin-bottom: 5px">
+          <el-card style="margin-bottom: 10px">
 
             <template #header>
               <div class="card-header" style="text-align: center">
                 <h1 class="text1">标本出库入库申请详情</h1>
               </div>
             </template>
-            <el-descriptions
-              v-if="outboundData"
-              :column="3"
-              :size="small"
-              border
-            >
-              <el-descriptions-item label="标本ID:"    label-align="right" >{{ outboundData.infoId }}</el-descriptions-item>
-              <el-descriptions-item label="标本编号"    label-align="right">{{
-                  outboundData.number
-                }}
-              </el-descriptions-item>
+
+<el-row>
+           <el-col :xl="20" :lg="20" :md="24" :sm="24" :xs="24" >
+              <el-descriptions  v-if="outboundData"
+                                border>
               <el-descriptions-item label="申请人或申请单位:" label-align="right" >{{
                   outboundData.applicantName
                 }}
@@ -34,8 +27,12 @@
                   outboundData.applicationUsage
                 }}
               </el-descriptions-item>
-              <el-descriptions-item label="审批状态:" label-align="right" >{{
-                  outboundData.status
+              <el-descriptions-item label="审批状态:" label-align="right" v-if="outboundData">{{
+                  statusText
+                }}
+              </el-descriptions-item>
+              <el-descriptions-item label="驳回原因" label-align="right">{{
+                  outboundData.processInstanceId
                 }}
               </el-descriptions-item>
               <el-descriptions-item label="审批员:" label-align="right" >{{
@@ -48,7 +45,7 @@
               </el-descriptions-item>
               <el-descriptions-item label="备注信息:" label-align="right" >{{outboundData.remarks}}
               </el-descriptions-item>
-              <div >
+
                 <el-descriptions-item label="出库时间:" label-align="right" >{{ outboundData.outgoingTime }}</el-descriptions-item>
                 <el-descriptions-item label="出库员:" label-align="right">{{  outboundData.operator}}
                 </el-descriptions-item>
@@ -67,36 +64,99 @@
                     outboundData.returner
                   }}
                 </el-descriptions-item>
-              </div>
+
+
+
             </el-descriptions>
+    </el-col>
+
+
+              <el-col :xl="4" :lg="4" :md="24" :sm="24" :xs="24" >
+                <el-descriptions
+                  v-if="outboundData"
+                  direction="vertical"
+                  border
+                >
+                  <!--              <el-descriptions-item label="标本ID:"    label-align="right" >{{ outboundData.infoId }}</el-descriptions-item>-->
+                  <!--              <el-descriptions-item label="标本编号"    label-align="right">{{-->
+                  <!--                  outboundData.number-->
+                  <!--                }}-->
+                  <!--              </el-descriptions-item>-->
+                  <el-descriptions-item
+                    :rowspan="4"
+                    :width="140"
+                    label="申请附件"
+                    align="center"
+
+                  ><div class="demo-image__preview" v-if="outboundData" >
+                    <block  v-for="(image, index) in attachments" :key="index">
+                      <el-image
+                        style="width: 40px; height:40px;margin-right: 5px"
+                        class="h-80px w-80px"
+                        lazy
+                        :src="image"
+                        :preview-src-list="imagePath"
+                        preview-teleported
+                        fit="cover"
+
+                      />
+                    </block>
+                  </div>
+
+                  </el-descriptions-item>
+                </el-descriptions>
+              </el-col>
+</el-row>
           </el-card>
+        </el-col>
 
 
-            <ContentWrap>
-              <el-table  :data="list" :stripe="true" :show-overflow-tooltip="true">
-                <el-table-column label="标本ID" align="center" prop="infoId" />
-                <el-table-column label="中文名称" align="center" prop="chineseName" />
-                <el-table-column label="标本编号" align="center" prop="specimenNumber" />
-                <el-table-column label="标本图片" align="center" prop="imagePath" />
-              </el-table>
-              <!-- 分页 -->
-              <Pagination
-                :total="total"
-                v-model:page="queryParams.pageNo"
-                v-model:limit="queryParams.pageSize"
-                @pagination="getList"
-              />
-            </ContentWrap>
 
-        </el-col>
-      </div>
-    </el-col>
-  </el-row>
+
+            <el-col :xl="24" :lg="24" :md="24" :sm="24" :xs="24" >
+              <el-card>
+                <template #header>
+                  <div class="card-header" style="text-align: center">
+                    <h1 class="text1">标本信息</h1>
+                  </div>
+                </template>
+
+
+                  <el-table v-loading="loading" :data="outboundData.specimenInfoList" :stripe="true" :show-overflow-tooltip="true" >
+                    <el-table-column label="标本ID" align="center" prop="id" />
+                    <el-table-column label="中文名称" align="center" prop="chineseName" />
+                    <el-table-column label="标本编号" align="center" prop="specimenAmount" />
+                    <el-table-column label="标本类型" align="center" prop="specimenType" />
+                    <el-table-column label="标本重量(g)" align="center" prop="weight" />
+                    <el-table-column label="标本图片" align="center" prop="imagePath" >
+                      <template #default="{ row }">
+                        <el-image
+                          v-for="(image, index) in row.imagePath"
+                          :key="index"
+                          class="image-class"
+                          lazy
+                          :src="image"
+                          fit="cover" />
+                      </template>
+                    </el-table-column>
+                    <el-table-column label="保存位置" align="center" prop="storageLocation" />
+                  </el-table>
+                  <!-- 分页 -->
+                  <Pagination
+                    :total="total"
+                    v-model:page="queryParams.pageNo"
+                    v-model:limit="queryParams.pageSize"
+                    @pagination="getList"
+                  />
+
+                </el-card>
+            </el-col>
+      </el-row>
   </el-skeleton>
 </template>
 <script setup lang="ts">
 import {ElCol} from "element-plus";
-import {ref} from "vue";
+import {ref, reactive, onMounted, computed} from "vue";
 import {SpecimenOutboundApi, SpecimenOutboundVO} from "@/api/museums/specimenoutbound";
 import { formatDate} from "@/utils/formatTime";
 
@@ -124,7 +184,7 @@ const queryParams = reactive({
 const getList = async () => {
   loading.value = true
   try {
-    const data = await SpecimenOutboundApi.getSpecimenOutbound(query.dataId)
+    const data = await SpecimenOutboundApi.getSpecimenOutboundDetails(query.dataId)
     list.value = data.list
     total.value = data.total
   } finally {
@@ -134,7 +194,7 @@ const getList = async () => {
 const fetchData = async () => {
   try {
     console.log(query.dataId)
-    let res: any = await SpecimenOutboundApi.getSpecimenOutbound(query.dataId)
+    let res: any = await SpecimenOutboundApi.getSpecimenOutboundDetails(query.dataId)
     console.log(res)
     outboundData.value = res
     console.log(outboundData.value)
@@ -153,6 +213,27 @@ onMounted(async () => {
   await getList()
 })
 
+/**审批状态**/
+const statusText = computed(() => {
+  if ( outboundData.value === null) {
+    return '';
+  }
+  switch ( outboundData.value.status) {
+    case 0:
+      return '审批中';
+    case 1:
+      return '审批通过';
+    case 2:
+      return '审批驳回';
+    case 3:
+      return '已出库';
+    case 4:
+      return '已回库';
+    default:
+      return '';
+  }
+});
+
 </script>
 
 <style scoped>

+ 2 - 0
src/views/museums/specimenoutbound/OutboundManagement.vue

@@ -135,6 +135,7 @@
           查看
           </el-button>
           <el-button
+            v-if=" scope.row.status !== 2 && scope.row.status !== 3  && scope.row.status !== 4"
             link
             type="primary"
             @click="handleOutbound(scope.row.id)"
@@ -142,6 +143,7 @@
             出库
           </el-button>
           <el-button
+            v-if="scope.row.status !== 2 && scope.row.status !== 4"
             link
             type="success"
             @click=" openForm(scope.row.id)"

+ 5 - 5
src/views/museums/specimenoutbound/SpecimenOutboundForm.vue

@@ -1,5 +1,5 @@
 <template>
-  <Dialog :title="dialogTitle" v-model="dialogVisible">
+  <Dialog title="编辑标本出库申请" v-model="dialogVisible">
     <el-form
       ref="formRef"
       :model="formData"
@@ -161,10 +161,10 @@ const submitForm = async () => {
     const data = formData.value as unknown as SpecimenOutboundVO
     if (formType.value === 'create') {
       await SpecimenOutboundApi.createSpecimenOutbound(data)
-      message.success(t('common.createSuccess'))
+      message.success(t('新增标本出库申请成功'))
     } else {
-      await SpecimenOutboundApi.updateSpecimenOutbound(data)
-      message.success(t('common.updateSuccess'))
+      await SpecimenOutboundApi.alterSpecimenOutbound(data)
+      message.success(t('标本出库申请修改成功'))
     }
     dialogVisible.value = false
     // 发送操作成功的事件
@@ -173,7 +173,7 @@ const submitForm = async () => {
     formLoading.value = false
   }
 }
-
+//
 /** 重置表单 */
 const resetForm = () => {
   formData.value = {

+ 1 - 1
src/views/museums/specimenoutbound/approval.vue

@@ -1,7 +1,7 @@
 <template>
   <Dialog
     v-model="dialogVisible"
-    title="是否审批通过"
+    title="是否通过标本出库申请"
     width="800"
   >
     <el-form