Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/views/museums/photogroup/ImageImportForm .vue
wwj 4 months ago
parent
commit
a4d19d8d74

+ 33 - 5
src/api/museums/specimenoutbound/index.ts

@@ -54,13 +54,41 @@ export const SpecimenOutboundApi = {
   exportSpecimenOutbound: async (params) => {
     return await request.download({ url: `/museums/specimen-outbound/export-excel`, params })
   },
-
+  // 审批通过标本出库回库
+  ApprovalPassSpecimenOutbound: async (data: SpecimenOutboundVO) => {
+    return await request.post({ url: `/museums/specimen-outbound/approve`, data })
+  },
   // 审批驳回标本出库回库
- ApprovalSpecimenOutbound: async (id: number) => {
-    return await request.put({ url: `/museums/specimen-outbound/reject?id=` + id })
+ ApprovalSpecimenOutbound: async (data: SpecimenOutboundVO) => {
+    return await request.post({ url: `/museums/specimen-outbound/reject`, data })
   },
+  // // 确认回标本回库
+  // SpecimenOutboundReturn: async (data: SpecimenOutboundVO) => {
+  //   return await request.post({ url: `/museums/specimen-outbound/update`,data})
+  // },
   // 确认回标本出库
-  ConfirmSpecimenOutbound: async (id: number) => {
-    return await request.put({ url: `/museums/specimen-outbound/confirmOutbound?id=` + id })
+  ConfirmSpecimenOutbound :async (id: number) => {
+    // 构造请求体
+    const reqBody = {
+      id: id
+    };
+    // 发送POST请求,包含请求体
+    return await request.post({
+      url: `/museums/specimen-outbound/confirmOutbound`,
+      data: reqBody
+    });
   },
+ //  // 确认标本回库
+ // SpecimenOutboundReturn :async (id: number) => {
+ //    // 构造请求体
+ //    const reqBody = {
+ //      id: id
+ //    };
+ //    // 发送POST请求,包含请求体
+ //    return await request.post({
+ //      url: `/museums/specimen-outbound/update`,
+ //      data: reqBody
+ //    });
+ //  }
+
 }

+ 2 - 0
src/views/museums/museumsdocument/index.vue

@@ -1,4 +1,5 @@
 <template>
+  <el-skeleton :loading="loading" animated>
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form
@@ -190,6 +191,7 @@
 
   <!-- 表单弹窗:添加/修改 -->
   <DocumentForm ref="formRef" @success="getList" />
+  </el-skeleton>
 </template>
 
 <script setup lang="ts">

+ 1 - 1
src/views/museums/photogroup/ImageImportForm .vue

@@ -68,7 +68,7 @@
 import { useUpload } from "@/components/UploadFile/src/useUpload";
 import { getAccessToken } from "@/utils/auth";
 const importUrl =
-  import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + '/museums/photo-group/createe'
+  import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + '/photosmanage/photo-group/create'
 defineOptions({ name: 'imageImportForm' })
 const dialogVisible = ref(false) // 弹窗的是否展示
 const dialogTitle = ref('') // 弹窗的标题

+ 4 - 1
src/views/museums/photogroup/PhotosForm.vue

@@ -1,4 +1,5 @@
 <template>
+  <el-skeleton :loading="loading" animated>
   <Dialog :title="dialogTitle" v-model="dialogVisible">
     <el-form
       ref="formRef"
@@ -27,16 +28,18 @@
       <el-button @click="dialogVisible = false">取 消</el-button>
     </template>
   </Dialog>
+    </el-skeleton>
 </template>
 <script setup lang="ts">
 import { PhotosApi, PhotosVO } from '@/api/museums/photos'
+import {ref} from "vue";
 
 /** 博物馆照片 表单 */
 defineOptions({ name: 'PhotosForm' })
 
 const { t } = useI18n() // 国际化
 const message = useMessage() // 消息弹窗
-
+const loading = ref(true) // 列表的加载中
 const dialogVisible = ref(false) // 弹窗的是否展示
 const dialogTitle = ref('') // 弹窗的标题
 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用

+ 4 - 0
src/views/museums/specimeninfo/SpecimenImportForm.vue

@@ -1,4 +1,5 @@
 <template>
+  <el-skeleton :loading="loading" animated>
   <Dialog v-model="dialogVisible" title="标本信息导入" width="600">
     <el-alert title="可单独上传xlsx表或者图片压缩包。需确保图片命名规范,不与旧图片命名重复。" type="warning" style="margin-bottom: 10px"/>
     <el-upload
@@ -65,6 +66,7 @@
       <el-button @click="dialogVisible = false">取 消</el-button>
     </template>
   </Dialog>
+  </el-skeleton>
 </template>
 
 <script lang="ts" setup>
@@ -74,8 +76,10 @@ import {SpecimenInfoApi} from "@/api/museums/specimeninfo";
 import { ref, nextTick } from 'vue';
 import {UploadFilled} from "@element-plus/icons-vue";
 import {useUpload} from "@/components/UploadFile/src/useUpload";
+import {ref} from "vue";
 
 defineOptions({ name: 'SpecimenImportForm' })
+const loading = ref(true) // 列表的加载中
 const dialogVisible = ref(false) // 弹窗的是否展示
 const formLoading = ref(false) // 表单的加载中
 const uploadRef = ref()

+ 4 - 1
src/views/museums/specimeninfo/imageImportForm.vue

@@ -1,4 +1,5 @@
 <template>
+  <el-skeleton :loading="loading" animated>
   <Dialog v-model="dialogVisible" title="标本图片批量导入" width="500" >
     <el-upload
       ref="uploadRef"
@@ -31,7 +32,7 @@
       <el-button @click="dialogVisible = false">取 消</el-button>
     </template>
   </Dialog>
-
+    </el-skeleton>
 </template>
 
 <script lang="ts" setup>
@@ -39,6 +40,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'
 defineOptions({ name: 'imageImportForm' })
@@ -48,6 +50,7 @@ const uploadRef = ref()
 const message = useMessage() // 消息弹窗
 const updateSupport = ref(0) // 是否更新已经存在的用户数据
 const fileList = ref([]) // 文件列表
+const loading = ref(true) // 列表的加载中
 const uploadHeaders = ref() // 上传 Header 头
 /** 打开弹窗 */
 const open = () => {

+ 3 - 2
src/views/museums/specimeninfo/specimenDetails.vue

@@ -158,13 +158,14 @@
         <el-col :xl="24" :lg="24" :md="24" :sm="24" :xs="24" class="mb-8px">
           <div class="demo-image__preview" v-if="specimenData ">
             <el-image
+
               style=" align-items: center"
               :src="specimenData.imagePath[0]"
               :zoom-rate="1.2"
               :max-scale="7"
               :min-scale="0.2"
-              :preview-src-list="specimenData.imagePath"
-              :initial-index="4"
+              :preview-src-list="specimenData.imagePaths"
+              :initial-index="index"
               fit="cover"
             />
           </div>

+ 15 - 21
src/views/museums/specimenoutbound/ApproalProcess.vue

@@ -1,4 +1,5 @@
 <template>
+  <el-skeleton :loading="loading" animated>
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form
@@ -62,14 +63,7 @@
       <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
@@ -87,9 +81,9 @@
   <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="chineseName" />
+<!--      <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="申请日期"
@@ -99,6 +93,7 @@
         width="180px"
       />
       <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" />-->
@@ -121,7 +116,7 @@
 <!--      <el-table-column label="标本情况" align="center" prop="specimenCondition" />-->
       <el-table-column label="审批状态" align="center" prop="sampleStatus" >
         <template #default="scope">
-          <dict-tag :type="DICT_TYPE.MUSEUMS_APPROAL_STATUS" :value="scope.row.status" />
+          <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">
@@ -144,6 +139,7 @@
       />
    </ContentWrap>
   <Approval ref="ApprovalRef" @success="getList" />
+  </el-skeleton>
 </template>
 
 
@@ -157,7 +153,7 @@ import {DICT_TYPE, getIntDictOptions} from "@/utils/dict";
 
 defineOptions({ name: 'ApproalProcess' })
 const message = useMessage() // 消息弹窗
-//const { t } = useI18n() // 国际化
+const { t } = useI18n() // 国际化
 const loading = ref(true) // 列表的加载中
 const list = ref<SpecimenOutboundVO[]>([]) // 列表的数据
 const total = ref(0) // 列表的总页数
@@ -186,11 +182,11 @@ const queryParams = reactive({
 const queryFormRef = ref() // 搜索的表单
 const exportLoading = ref(false) // 导出的加载中
 
-/** 添加/修改操作 */
-const formRef = ref()
-const openForm = (type: string, id?: number) => {
-  formRef.value.open(type, id)
-}
+// /** 添加/修改操作 */
+// const formRef = ref()
+// const openForm = (type: string, id?: number) => {
+//   formRef.value.open(type, id)
+// }
 /** 查询列表 */
 const getList = async () => {
   loading.value = true
@@ -218,11 +214,9 @@ const resetQuery = () => {
 /** 审批按钮操作 */
 
 // 检查用户权限的方法
-
-
 const ApprovalRef = ref()
-const handleApproval = (type: string, id?: number) => {
-  ApprovalRef.value.open(type, id)
+const handleApproval = ( id?: number) => {
+  ApprovalRef.value.open( id)
 
 }
 /** 导出按钮操作 */

+ 13 - 11
src/views/museums/specimenoutbound/OutboundApplication.vue

@@ -1,4 +1,5 @@
 <template>
+  <el-skeleton :loading="loading" animated>
   <ContentWrap>
   <!-- 搜索工作栏 -->
   <el-form
@@ -97,9 +98,9 @@
   <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="chineseName" />
+<!--      <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="申请日期"
@@ -117,15 +118,15 @@
         :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="sampleStatus"/>
+<!--      <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" />
@@ -164,6 +165,7 @@
   <!-- 表单弹窗:审批 -->
   <SpecimenOutboundForm ref="formRef" @success="getList" />
   <Approval ref="ApprovalRef" @success="getList" />
+  </el-skeleton>
 </template>
 
 

+ 9 - 45
src/views/museums/specimenoutbound/OutboundForm/outboundDetail.vue

@@ -1,5 +1,5 @@
 <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>
@@ -8,17 +8,14 @@
 
             <template #header>
               <div class="card-header" style="text-align: center">
-                <h1 class="text1">标本出库申请详情</h1>
+                <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">{{
@@ -73,43 +70,10 @@
               </div>
             </el-descriptions>
           </el-card>
-<!--          <el-card >-->
-<!--              <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-->
-<!--            >-->
-<!--              <div >-->
-<!--              <el-descriptions-item label="出库时间:" label-align="right" >{{ outboundData.outgoingTime }}</el-descriptions-item>-->
-<!--              <el-descriptions-item label="出库员:">{{  outboundData.operator}}-->
-<!--              </el-descriptions-item>-->
-
-<!--              <el-descriptions-item label="退还日期" label-align="right" >{{-->
-<!--                  outboundData.returnDate-->
-<!--                }}-->
-<!--              </el-descriptions-item>-->
-<!--              <el-descriptions-item label="点收人:" label-align="right" >{{-->
-<!--                  outboundData.receiver-->
-<!--                }}-->
-<!--              </el-descriptions-item>-->
-
-
-<!--              <el-descriptions-item label="退还人" label-align="right">{{-->
-<!--                  outboundData.returner-->
-<!--                }}-->
-<!--              </el-descriptions-item>-->
-<!--              </div>-->
-<!--            </el-descriptions>-->
-<!--            </el-card>-->
+
 
             <ContentWrap>
-              <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
+              <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" />
@@ -128,14 +92,15 @@
       </div>
     </el-col>
   </el-row>
-
+  </el-skeleton>
 </template>
 <script setup lang="ts">
 import {ElCol} from "element-plus";
 import {ref} from "vue";
-
 import {SpecimenOutboundApi, SpecimenOutboundVO} from "@/api/museums/specimenoutbound";
-import {dateFormatter, formatDate} from "@/utils/formatTime";
+import { formatDate} from "@/utils/formatTime";
+
+
 defineOptions({ name: 'outboundDetail' })
 const {query} = useRoute() // 查询参数
 const loading = ref(true) // 列表的加载中
@@ -159,10 +124,9 @@ const queryParams = reactive({
 const getList = async () => {
   loading.value = true
   try {
-    const data = await SpecimenOutboundApi.getSpecimenOutbound(queryParams)
+    const data = await SpecimenOutboundApi.getSpecimenOutbound(query.dataId)
     list.value = data.list
     total.value = data.total
-
   } finally {
     loading.value = false
   }

+ 75 - 59
src/views/museums/specimenoutbound/OutboundForm/specimenReturnForm.vue

@@ -1,11 +1,15 @@
 <template>
-  <Dialog :title="dialogTitle" v-model="dialogVisible" ref="formRef" >
+
+  <Dialog :title="dialogTitle" v-model="dialogVisible" v-loading="formLoading">
     <el-form
       ref="formRef"
       :model="formData"
       :rules="formRules"
       label-width="100px"
-      v-loading="formLoading">
+    >
+      <el-form-item label="标本ID" prop="infoId">
+        <el-input v-model="formData.infoId" placeholder="请输入标本ID"/>
+      </el-form-item>
       <el-form-item label="退还人" prop="returner">
         <el-input v-model="formData.returner" placeholder="请输入退还人"/>
       </el-form-item>
@@ -23,53 +27,56 @@
       <el-form-item label="标本情况" prop="specimenCondition">
         <el-input v-model="formData.specimenCondition" placeholder="请输入标本情况"/>
       </el-form-item>
+      <el-form-item label="备注信息" prop="remarks">
+        <el-input v-model="formData.remarks" placeholder="备注信息"/>
+      </el-form-item>
     </el-form>
     <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">
+import {onMounted} from 'vue';
 import {SpecimenOutboundApi, SpecimenOutboundVO} from '@/api/museums/specimenoutbound'
-import {ref,reactive} from "vue"
+import {ref, reactive} from "vue"
+
 /** 标本出库回库信息 表单 */
-defineOptions({ name: 'ReturnForm' })
+defineOptions({name: 'ReturnForm'})
 const {t} = useI18n() // 国际化
 const dialogVisible = ref(false) // 弹窗的是否展示
 const dialogTitle = ref('') // 弹窗的标题
 const message = useMessage() // 消息弹窗
 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
 const formType = ref('') // 表单的类型:create - 新增;update - 修改
+
 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
+  infoId: undefined,
+  applicantName: undefined,
+  applicationDate: undefined,
+  applicationUsage: undefined,
+  attachments: undefined,
+  status: undefined,
+  remarks: undefined,
+  processInstanceId: undefined,
+  operator: undefined,
+  returner: undefined,
+  receiver: undefined,
+  returnDate: undefined,
+  specimenCondition: undefined,
+  sampleStatus: undefined
 })
 
 const formRules = reactive({
-  operator: [{ required: true, message: '出库员不能为空', trigger: 'blur' }],
-  returner: [{ required: true, message: '退还人不能为空', trigger: 'blur' }],
-  receiver: [{ required: true, message: '点收人不能为空', trigger: 'blur' }],
-  returnDate: [{ required: true, message: '退还日期不能为空', trigger: 'blur' }]
+  operator: [{required: true, message: '出库员不能为空', trigger: 'blur'}],
+  returner: [{required: true, message: '退还人不能为空', trigger: 'blur'}],
+  receiver: [{required: true, message: '点收人不能为空', trigger: 'blur'}],
+  returnDate: [{required: true, message: '退还日期不能为空', trigger: 'blur'}]
 })
-const formRef = ref() // 表单 Ref
+
 
 /** 打开弹窗 */
 const open = async (type: string, id?: number) => {
@@ -86,55 +93,64 @@ const open = async (type: string, id?: number) => {
     }
   }
 }
-defineExpose({ open }) // 提供 open 方法,用于打开弹窗
+defineExpose({open}) // 提供 open 方法,用于打开弹窗
 
 /** 重置表单 */
+// const resetForm = () => {
+//   formData.value = {
+//     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
+//   }
+//   formRef.value?.resetFields()
+// }
+const formRef = ref() // 表单 Ref
 const resetForm = () => {
-  formData.value = {
-    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
-  }
-  formRef.value?.resetFields()
-}
+  if (formRef.value) {
 
+    formRef.value.resetFields();
+  }
+};
 /** 提交回库表单 */
 const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
 const submitForm = async () => {
-
   // 提交请求
   formLoading.value = true
   try {
     const data = formData.value as unknown as SpecimenOutboundVO
-    if (formType.value === 'create') {
-      await SpecimenOutboundApi.updateSpecimenOutbound(data)
-      message.success(t('common.createSuccess'))
-    } else {
-      await SpecimenOutboundApi.updateSpecimenOutbound(data)
-      message.success(t('common.updateSuccess'))
-    }
+    console.log(formType.value)
+
+    await SpecimenOutboundApi.updateSpecimenOutbound(data)
+    message.success(t('回库成功'))
+
     dialogVisible.value = false
     // 发送操作成功的事件
     emit('success')
+  } catch (error) {
+    // 错误处理
+    console.error('提交表单失败:', error);
+    message.error(t('回库失败'));
   } finally {
     formLoading.value = false
   }
 }
 
-
+onMounted(() => {
+  resetForm();
+})
 </script>

+ 23 - 18
src/views/museums/specimenoutbound/OutboundManagement.vue

@@ -1,4 +1,6 @@
 <template>
+  <div>
+  <el-skeleton :loading="loading" animated>
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form
@@ -59,16 +61,16 @@
             :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 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>
@@ -122,7 +124,7 @@
         width="180px"
       />
 <!--      <el-table-column label="标本情况" align="center" prop="specimenCondition" />-->
-      <el-table-column label="标本状态" align="center" prop="sampleStatus" />
+<!--      <el-table-column label="标本状态" align="center" prop="sampleStatus" />-->
       <el-table-column label="操作" align="center" min-width="150px">
         <template #default="scope" >
           <el-button
@@ -160,12 +162,14 @@
 
   <!-- 表单弹窗:回库 -->
   <specimenReturnForm ref="formRef" @success="getList" />
+  </el-skeleton>
+  </div>
 </template>
 
 <script setup lang="ts">
 import download from '@/utils/download'
 import { dateFormatter } from '@/utils/formatTime'
-import {defineComponent, ref} from "vue";
+import {defineComponent, ref,reactive} from "vue";
 import { SpecimenOutboundApi, SpecimenOutboundVO } from '@/api/museums/specimenoutbound'
 import specimenReturnForm from '@/views/museums/specimenoutbound/OutboundForm/specimenReturnForm.vue'
  defineComponent({name:'OutboundManagement'})
@@ -256,25 +260,26 @@ const detail=(dataId: number) => {
 }
 
 /** 出库操作 */
-const handleOutbound = async (id: number) => {
+const handleOutbound = async (id) => {
   try {
     // 出库的二次确认
     await message.OutboundConfirm()
     // 发起出库
     await  SpecimenOutboundApi.ConfirmSpecimenOutbound(id)
-    message.success(t('common.outboundSuccess'))
+    message.success(t('出库成功'))
     // 刷新列表
     await getList()
-  } catch {}
-}
+  } catch (error) {
+    message.error(t('出库失败'));
+  }
+};
 
 /** 回库 */
-const formRef = ref
+const formRef = ref()
 const openForm = (type: string, id?: number) => {
   formRef.value.open(type, id)
 }
 
-
 /** 初始化 **/
 onMounted(() => {
   getList()

+ 3 - 4
src/views/museums/specimenoutbound/SpecimenOutboundForm.vue

@@ -31,10 +31,7 @@
         <el-input v-model="formData.applicationUsage" placeholder="请输入申请出库的用途" />
       </el-form-item>
       <el-form-item label="附件上传" prop="attachments">
-        <el-upload v-model="formData.attachments" placeholder="请输入附件上传" >
-          <el-icon class="el-icon--upload"><upload-filled /></el-icon>
-          <div class="el-upload__text"> 将文件拖到此处,或 <em>点击上传</em></div>
-        </el-upload>
+          <UploadImg v-model="formData.attachments" />
       </el-form-item>
 <!--      <el-form-item label="审批状态" prop="status">-->
 <!--        <el-select v-model="formData.status" placeholder="请选择审批状态">-->
@@ -86,10 +83,12 @@
       <el-button @click="dialogVisible = false">取 消</el-button>
     </template>
   </Dialog>
+
 </template>
 <script setup lang="ts">
 import { SpecimenOutboundApi, SpecimenOutboundVO } from '@/api/museums/specimenoutbound'
 import { UploadFilled } from '@element-plus/icons-vue'
+import {ref} from "vue";
 /** 标本出库回库信息 表单 */
 defineOptions({ name: 'SpecimenOutboundForm' })
 

+ 54 - 35
src/views/museums/specimenoutbound/approval.vue

@@ -5,8 +5,8 @@
     width="800"
   >
     <el-form
-
-      :action="approvalUrl + '?updateSupport=' + updateSupport">
+      v-loading="formLoading"
+     >
       <el-form-item>
         <el-radio-group  v-model="approvalStatus">
           <el-radio :label="1">通过</el-radio>
@@ -15,13 +15,12 @@
       </el-form-item>
       <el-form-item  v-if="approvalStatus === 2">
         <el-input
-          v-model="chkRemarks"
+          v-model="formData.remarks"
           style="width:800px ;height: 200px"
           placeholder="请输入驳回原因"
           type="textarea"
           autosize
         />
-
       </el-form-item>
     </el-form>
 
@@ -30,67 +29,87 @@
         <el-button type="danger" @click="dialogVisible = false">取消</el-button>
     </div>
   </Dialog>
+
 </template>
 
 
 
 <script setup lang="ts">
-import { getAccessToken, getTenantId } from '@/utils/auth'
-import { ref } from 'vue'
-const approvalUrl =
-  import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + '/museums/specimen-outbound/reject'
+import { ref, defineEmits, nextTick  } from 'vue'
 
+import {SpecimenOutboundApi} from "@/api/museums/specimenoutbound";
 const {t} = useI18n() // 国际化
 const approvalStatus = ref(0);
 const uploadRef = ref()
 const formLoading = ref(false) // 表单的加载中
 const dialogVisible = ref(false) // 弹窗的是否展示
-const dialogTitle = ref('') // 弹窗的标题
+
 const chkRemarks = ref('')
 const message = useMessage() // 消息弹窗
-const processInstanceId = ref([]) // 文件列表
-const uploadHeaders = ref() // 上传 Header 头
-const updateSupport = ref(0) // 是否更新已经存在的用户数据
+// const processInstanceId = ref([]) // 文件列表
+
+// const updateSupport = ref(0) // 是否更新已经存在的标本数据
+const formData = ref({
+  id: undefined,
+  processInstanceId:undefined,
+  remarks : undefined
+})
 /** 打开弹窗 */
-const open = async (type: string, ) => {
+const open = async (id?: number) => {
   dialogVisible.value = true
-  formLoading.value = true
+  // formLoading.value = true
   approvalStatus.value = 0
-  dialogVisible.value = true
-  updateSupport.value = 0
-  dialogTitle.value = t('action.' + type)
-  processInstanceId.value = []
+
+  // updateSupport.value = 0
+  // processInstanceId.value = []
+  chkRemarks.value = '';
+  formData.value.id = id
   resetForm()
+  console.log(id)
+  // if (id) {
+  //   // console.log(id,formData)
+  //   formData.value.id = id
+  //   console.log(formData.value)
+  //   formLoading.value = true
+  //   // try {
+  //   //   // formData.value = await SpecimenOutboundApi.ApprovalSpecimenOutbound(id)
+  //   // }
+  //   finally {
+  //     formLoading.value = false
+  //   }
+  // }
 }
 defineExpose({ open })// 提供 open 方法,用于打开弹窗
 
 
+
 /** 提交审批 */
+const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
 const submitApproval = async () => {
+
+  // const id= formData.value as unknown as SpecimenOutboundVO
   if (approvalStatus.value === 2 && !chkRemarks.value.trim()) {
-    message.error('请输入驳回原因')
-    formLoading.value = false
-    return
-  }
-  // 提交请求
-  uploadHeaders.value  = {
-    Authorization: 'Bearer ' + getAccessToken(),
-    'tenant-id': getTenantId()
+    // await SpecimenOutboundApi.ApprovalSpecimenOutbound(formData.value.id)
+    message.error(t('请输入驳回原因'))
+    return// 阻止表单提交
   }
-  formLoading.value = true
-
+  // formLoading.value = true;
   try {
-    // 这里应该添加实际的请求发送代码,例如使用 axios 或其他 HTTP 库
-    // await axios.post(approvalUrl, { approvalStatus, chkRemarks, updateSupport }, { headers })
-    console.log('提交审批请求...')
-    dialogVisible.value = false;
-  } catch (error) {
-    message.error('审批提交失败')
+    formLoading.value = true;
+    if (approvalStatus.value === 1) {
+      await SpecimenOutboundApi.ApprovalPassSpecimenOutbound(formData.value)
+    } else {
+      await SpecimenOutboundApi.ApprovalSpecimenOutbound(formData.value);
+    }
+    message.success(t('common.updateSuccess'));
+    dialogVisible.value = false
+    // 发送操作成功的事件
+    emit('success')
   } finally {
     formLoading.value = false
-
   }
 }
+
 /** 重置表单 */
 const resetForm = async (): Promise<void> => {
   // 重置上传状态和文件

+ 3 - 1
src/views/museums/specimenoutbound/index.vue

@@ -1,4 +1,5 @@
 <template>
+  <el-skeleton :loading="loading" animated>
   <ContentWrap>
     <!-- 搜索工作栏 -->
     <el-form
@@ -290,9 +291,10 @@
     />
   </ContentWrap>
 
-  <!-- 表单弹窗:添加/修改 -->
+  <!-- 表单弹窗:出库/审批 -->
   <SpecimenOutboundForm ref="formRef" @success="getList" />
   <Approval ref="ApprovalRef" @success="getList" />
+  </el-skeleton>
 </template>
 
 <script setup lang="ts">