Browse Source

Merge remote-tracking branch 'origin/master'

lmm 4 months ago
parent
commit
dafc97a90a

+ 7 - 1
src/api/museums/specimenoutbound/index.ts

@@ -41,7 +41,7 @@ export const SpecimenOutboundApi = {
 
   // 查询标本出库回库信息详情
   getSpecimenOutbound: async (id: number) => {
-    return await request.get({ url: `/museums/specimen-outbound/get?id=` + id })
+    return await request.get({ url: `/museums/specimen-outbound/query?id=` + id })
   },
 
   // 新增标本出库回库申请
@@ -99,4 +99,10 @@ export const SpecimenOutboundApi = {
   alterSpecimenOutbound: async (data: SpecimenOutboundVO) => {
     return await request.put({ url: `/museums/specimen-outbound/recompile`, data })
   },
+  // 获得标本回库信息
+  getSpecimenReturn: async (id: number) => {
+    return await request.get({ url: `/museums/specimen-outbound/getReturn?id=` + id })
+  },
+
+
 }

+ 3 - 3
src/router/modules/remaining.ts

@@ -660,8 +660,8 @@ const remainingRouter: AppRouteRecordRaw[] = [
           noCache: true,
           hidden: true,
           canTo: true,
-          title: '查看标本出库详情',
-          activeMenu: '/museums/specimenoutbound/OutboundManagement'
+          title: '查看标本出库入库详情',
+          activeMenu: '/museumsdocument/OutboundManagement'
         }
       },
       {
@@ -673,7 +673,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
           hidden: true,
           canTo: true,
           title: '查看标本出库申请详情',
-          activeMenu: 'outboundmanage/approalprocess'
+          activeMenu: '/museumsdocument/ApproalProcess'
         }
       },
     ]

+ 53 - 13
src/views/museums/specimenoutbound/OutboundForm/ApproalDetails.vue

@@ -17,7 +17,7 @@
            :size="size"
            v-if="outboundData"
          >
-           <el-descriptions-item label="审批状态:"  label-align="right" label-class-name="my-label">{{ outboundData.status }}</el-descriptions-item>
+           <el-descriptions-item label="审批状态:"  label-align="right" label-class-name="my-label">{{ StatusText }}</el-descriptions-item>
            <el-descriptions-item label="申请人姓名:"   label-align="right" label-class-name="my-label">{{ outboundData.applicantName }}</el-descriptions-item>
            <el-descriptions-item label="申请单位:" label-align="right" label-class-name="my-label">{{outboundData.applicationUsage }}</el-descriptions-item>
            <el-descriptions-item label="电话号码:" label-align="right" label-class-name="my-label">{{ outboundData.phoneNumber}}</el-descriptions-item>
@@ -51,10 +51,13 @@
                label-class-name="my-label"
                class-name="my-content"
              >
-               <div class="demo-image__preview" v-if="outboundData" >
+<!--               <div class="demo-image__preview" v-if="outboundData" >-->
+<!--                 <div class="demo-image__preview" v-if="outboundData">-->
+<!--                   <a :href="outboundData.attachments" target="_blank">下载附件</a>-->
+<!--                 </div>-->
 
+<!--               </div>-->
 
-               </div>
              </el-descriptions-item>
            </el-descriptions>
 <!--           <div class="demo-image__preview" v-if="outboundData ">-->
@@ -97,7 +100,7 @@
              <h1 class="text1">申请出库标本信息</h1>
            </div>
          </template>
-         <el-table v-loading="loading" :data="outboundData.specimenInfoList" :stripe="true" :show-overflow-tooltip="true" >
+         <el-table v-loading="loading" :data="outboundData.specimenInfoList.list" :stripe="true" :show-overflow-tooltip="true" >
 <!--           <el-table-column label="标本ID" align="center" prop="id" />-->
            <el-table-column label="标本编号" align="center" prop="specimenNumber" />
            <el-table-column label="中文名称" align="center" prop="chineseName" />
@@ -119,6 +122,7 @@
                <div class="demo-image__preview" v-if="queryParams" >
                  <block  v-for="(image, index) in row.imagePath" :key="index">
                    <el-image
+                     style="width: 40px; height:40px;margin-right: 5px"
                      class="image-class"
                      lazy
                      :src="image"
@@ -131,20 +135,20 @@
            </el-table-column>
          </el-table>
          <!-- 分页 -->
-<!--         <Pagination-->
-<!--           :total="total"-->
-<!--           v-model:page="queryParams.pageNo"-->
-<!--           v-model:limit="queryParams.pageSize"-->
-<!--           @pagination="getList"-->
-<!--         />-->
-         <div v-if="outboundData.status === 0 || outboundData.status === 1 ">
+         <Pagination
+           :total="total"
+           v-model:page="queryParams.pageNo"
+           v-model:limit="queryParams.pageSize"
+           @pagination="getList"
+         />
+<!--         <div v-if="outboundData.status === 0 || outboundData.status === 1 ">-->
          <el-button
            @click="handleApproval"
            type="primary"
            style="float: right; margin-left: 20px;margin-top: 20px;margin-bottom: 20px"
          > 审批
          </el-button>
-         </div>
+<!--         </div>-->
        </el-card>
      </el-col>
 
@@ -160,7 +164,7 @@
 import {type ComponentSize, ElCol, ElImage} from "element-plus";
 import {SpecimenOutboundApi, SpecimenOutboundVO} from "@/api/museums/specimenoutbound";
 import {formatDate} from "@/utils/formatTime";
-import {reactive, ref} from "vue";
+import {reactive, ref, computed} from "vue";
 import {DICT_TYPE} from "@/utils/dict";
 import Approval from "@/views/museums/specimenoutbound/approval.vue"
 
@@ -171,6 +175,7 @@ const loading = ref(true) // 列表的加载中
 const list = ref<SpecimenOutboundVO[]>([]) // 列表的数据
 const total = ref(0) // 列表的总页数
 const queryParams = reactive({
+  id:query.dataId,
   pageNo: 1,
   pageSize: 10,
   infoId: undefined,
@@ -204,6 +209,41 @@ const fetchData = async () => {
   }
 }
 
+/**审批状态**/
+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 '已回库';
+    case 5:
+      return '二审通过';
+    case 6:
+      return '二审驳回';
+    default:
+      return '';
+  }
+});
+
+watch(
+  () => [queryParams.pageNo, queryParams.pageSize],
+  (newValues) => {
+    queryParams.pageNo = newValues[0];
+    queryParams.pageSize = newValues[1];
+    getList();
+  },
+  { immediate: true }
+);
+
 // // 在组件加载时获取数据
 onMounted(async () => {
   await fetchData()

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

@@ -43,11 +43,11 @@
                     outboundData.approvalTime
                   }}
                 </el-descriptions-item>
-                <el-descriptions-item label="一审批者:" label-align="right"  label-class-name="my-label">{{
+                <el-descriptions-item label="一审批者:" label-align="right"  label-class-name="my-label">{{
                     outboundData.approveUsers
                   }}
                 </el-descriptions-item>
-                <el-descriptions-item label="一审建议" label-align="right"  label-class-name="my-label">{{
+                <el-descriptions-item label="一建议" label-align="right"  label-class-name="my-label">{{
                     outboundData.processInstanceId
                   }}
                 </el-descriptions-item>
@@ -63,11 +63,11 @@
           outboundData.twoApprovalTime
         }}
       </el-descriptions-item>
-      <el-descriptions-item label="二审批者:" label-align="right"  label-class-name="my-label">{{
+      <el-descriptions-item label="二审批者:" label-align="right"  label-class-name="my-label">{{
           outboundData.twoApproveUsers
         }}
       </el-descriptions-item>
-      <el-descriptions-item label="二审建议" label-align="right"  label-class-name="my-label">{{
+      <el-descriptions-item label="二建议" label-align="right"  label-class-name="my-label">{{
           outboundData.rejectionReasons
         }}
       </el-descriptions-item>
@@ -176,7 +176,7 @@
                 </template>
 
 
-                  <el-table v-loading="loading" :data="outboundData.specimenInfoList" :stripe="true" :show-overflow-tooltip="true" >
+                  <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" >
                     <el-table-column label="标本编号" align="center" prop="specimenNumber" />
                     <el-table-column label="中文名称" align="center" prop="chineseName" />
                     <el-table-column label="标本类型" align="center" prop="specimenType">
@@ -196,6 +196,7 @@
                         <div class="demo-image__preview" v-if="queryParams" >
                         <block  v-for="(image, index) in row.imagePath" :key="index">
                         <el-image
+
                           class="image-class"
                           lazy
                           :src="image"
@@ -239,6 +240,7 @@ let outboundData = ref(null); // 初始化响应式数据
 const queryParams = reactive({
   pageNo: 1,
   pageSize: 10,
+  id: query.dataId,
   infoId: undefined,
   chineseName: undefined,
   specimenNumber: undefined,
@@ -252,7 +254,8 @@ const queryParams = reactive({
 const getList = async () => {
   loading.value = true
   try {
-    const data = await SpecimenOutboundApi.getSpecimenOutboundDetails(query.dataId)
+    const data = await SpecimenOutboundApi.getSpecimenOutboundDetailsPage(queryParams)
+    console.log(data)
     list.value = data.list
     total.value = data.total
   } finally {

+ 54 - 39
src/views/museums/specimenoutbound/OutboundForm/specimenReturnForm.vue

@@ -1,6 +1,6 @@
 <template>
 
-  <Dialog :title="dialogTitle" v-model="dialogVisible" v-loading="formLoading">
+  <Dialog :title="dialogTitle" v-model="dialogVisible" v-loading="formLoading" style="width: 850px">
     <el-form
       ref="formRef"
       :model="formData"
@@ -14,17 +14,25 @@
       <el-form-item label="点收人" prop="receiver">
         <el-input v-model="formData.receiver" placeholder="请输入点收人"/>
       </el-form-item>
-      <el-form-item label="退还日期" prop="returnDate">
-        <el-date-picker
-          v-model="formData.returnDate"
-          type="date"
-          value-format="x"
-          placeholder="选择退还日期"
-        />
-      </el-form-item>
+<!--      <el-form-item label="退还日期" prop="returnDate">-->
+<!--        <el-date-picker-->
+<!--          v-model="formData.returnDate"-->
+<!--          type="date"-->
+<!--          value-format="x"-->
+<!--          placeholder="选择退还日期"-->
+<!--        />-->
+<!--      </el-form-item>-->
       <el-form-item label="标本情况" prop="specimenCondition">
         <el-input v-model="formData.specimenCondition" placeholder="请输入标本情况"/>
       </el-form-item>
+      <el-form-item label="附件上传" prop="sampleStatus" >
+        <UploadFile
+          v-model="formData.sampleStatus"
+          :limit="1"
+          class="min-w-80px"
+        />
+
+      </el-form-item>
       <el-form-item label="备注信息" prop="remarks">
         <el-input v-model="formData.remarks" placeholder="备注信息"/>
       </el-form-item>
@@ -52,7 +60,10 @@ const formLoading = ref(false) // 表单的加载中:1)修改时的数据加
 const formType = ref('') // 表单的类型:create - 新增;update - 修改
 
 const formData = ref({
+  id: -1,
   infoId: undefined,
+  chineseName: undefined,
+  specimenNumber: undefined,
   applicantName: undefined,
   applicationDate: undefined,
   applicationUsage: undefined,
@@ -64,6 +75,7 @@ const formData = ref({
   returner: undefined,
   receiver: undefined,
   returnDate: undefined,
+  outgoingTime: undefined,
   specimenCondition: undefined,
   sampleStatus: undefined
 })
@@ -77,14 +89,15 @@ const formRules = reactive({
 
 
 /** 打开弹窗 */
-const open = async (type: string, id?: number) => {
+const open = async ( id?: number) => {
   dialogVisible.value = true
   dialogTitle.value = t('回库表单')
-  formType.value = type
   resetForm()
   if (id) {
     formLoading.value = true
     try {
+      console.log('hhh',formData.value)
+      formData.value.id = id
       formData.value = await SpecimenOutboundApi.getSpecimenOutbound(id)
     } finally {
       formLoading.value = false
@@ -94,39 +107,41 @@ const open = async (type: string, id?: number) => {
 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 = () => {
-  if (formRef.value) {
-
-    formRef.value.resetFields();
+  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 = () => {
+//   if (formRef.value) {
+//
+//     formRef.value.resetFields();
+//   }
+// };
 /** 提交回库表单 */
 const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
 const submitForm = async () => {
+  // 校验表单
+  await formRef.value.validate()
   // 提交请求
   formLoading.value = true
   try {

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

@@ -281,8 +281,8 @@ const handleOutbound = async (id) => {
 
 /** 回库 */
 const formRef = ref()
-const openForm = (type: string, id?: number) => {
-  formRef.value.open(type, id)
+const openForm = (id?: number) => {
+  formRef.value.open( id)
 }
 
 

+ 15 - 36
src/views/museums/specimenoutbound/SpecimenOutboundForm.vue

@@ -19,29 +19,27 @@
       <div>
       <el-button type="primary"
                  style="float: right ;margin-left: 5px; padding: 5px 10px; font-size: 12px;"
-                 @click="removeSpecimenNumber"
-                >-</el-button>
+                 @click="removeSpecimenNumber">-</el-button>
       <el-button type="primary"
                  style="float: right; padding: 5px 10px; font-size: 12px;"
                  @click="addSpecimenNumber">+</el-button>
          </div>
-<!--      <el-form-item label="标本编号"  prop="number" label-width="150px">-->
-<!--        <el-input v-model="formData.number" placeholder="请输入标本编号" label-width="150px"/>-->
-<!--      </el-form-item>-->
+      <el-form-item label="标本编号"  prop="number" label-width="150px">
+        <el-input v-model="formData.number[0]" placeholder="请输入标本编号" label-width="150px"/>
+      </el-form-item>
+
       <template v-if="formData.number && formData.number.length > 1">
         <el-form-item
-          v-for="item in numberArray"
-          :key="item"
-          :label="`标本编号 ${item + 1}`"
+          v-for="(item, index) in formData.number.slice(1)"
+          :key="index + 1"
+          :label="`标本编号 ${index + 2}`"
           prop="number"
           label-width="150px"
         >
-          <el-input v-model="formData.number[item]" placeholder="请输入标本编号" />
+          <el-input v-model="formData.number[index + 1]" placeholder="请输入标本编号" />
         </el-form-item>
       </template>
-<!--      <el-form-item label="标本编号" prop="number" label-width="150px" v-for="(item, index) in formData.number" :key="index">-->
-<!--        <el-input v-model="formData.number[index]" placeholder="请输入标本编号" label-width="150px" />-->
-<!--      </el-form-item>-->
+
       <el-form-item label="申请人姓名"  prop="applicantName" label-width="150px">
         <el-input v-model="formData.applicantName" placeholder="请输入申请人姓名" label-width="150px"/>
       </el-form-item>
@@ -96,7 +94,7 @@
 
 import {SpecimenOutboundApi, SpecimenOutboundVO} from '@/api/museums/specimenoutbound'
 //import { UploadFilled } from '@element-plus/icons-vue'
-import {ref, reactive, defineEmits,computed} from "vue";
+import {ref, reactive, defineEmits} from "vue";
 
 /** 标本出库回库信息 表单 */
 defineOptions({name: 'SpecimenOutboundForm'})
@@ -112,7 +110,7 @@ const formLoading = ref(false) // 表单的加载中:1)修改时的数据加
 const formType = ref('') // 表单的类型:create - 新增;update - 修改
 const formData = ref({
   id: undefined,
-  infoId: [],
+  infoId: undefined,
   chineseName: undefined,// 确保初始值为数组
   number:[''] ,// 确保初始值为数组
   applicantName: undefined,
@@ -133,6 +131,7 @@ const formData = ref({
   endTime: undefined,
   projectName:undefined,
   phoneNumber:undefined
+
 })
 
 
@@ -146,19 +145,8 @@ const formRules = reactive({
   endTime: [{required: true, message: '项目结束时间不能为空', trigger: 'blur'}]
 })
 const formRef = ref() // 表单 Ref
-/**增减标本编号**/
 
-// 将字符串解析为数组的计算属性
-const numberArray = computed(() => {
-  try {
-    // 尝试解析字符串为数组
-    return ref(JSON.parse(numberStr.value));
-  } catch (error) {
-    // 如果解析失败,返回一个包含空字符串的数组
-    console.error("解析标本编号失败", error);
-    return ref(['']);
-  }
-});
+/**增减标本编号**/
 const addSpecimenNumber = () => {
   formData.value.number.push(''); // 向数组中添加一个新的空字符串
 };
@@ -179,15 +167,6 @@ const open = async (type: string, id?: number) => {
     formLoading.value = true
     try {
       formData.value = await SpecimenOutboundApi.getSpecimenOutbound(id)
-      //
-      // if (!formData.value.number || !Array.isArray(formData.value.number) || formData.value.number.length === 0) {
-      //   formData.value.number = ['']; // 如果不是数组或为空,则初始化为包含一个空字符串的数组
-      // }
-      // if (!Array.isArray(formData.value.number)) {
-      //   formData.value.number = [];// 如果不是数组,则转换为包含该数据的数组
-      // } else if (formData.value.number.length === 0) {
-      //   formData.value.number = ['']; // 如果数组为空,则初始化为包含一个空字符串的数组
-      // }
 
     } finally {
       formLoading.value = false
@@ -239,7 +218,7 @@ const submitForm = async () => {
 const resetForm = () => {
   formData.value = {
     id: undefined,
-    infoId: [],
+    infoId: undefined,
     chineseName: undefined,// 确保初始值为数组
     number: [],// 确保初始值为数组
     applicantName: undefined,

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

@@ -95,7 +95,7 @@ const submitApproval = async () => {
     };
     console.log(data,"wozaizheli")
     await SpecimenOutboundApi.ApprovalSpecimenOutbound(data)
-    message.success(t('common.updateSuccess'));
+    message.success(t('审批成功'));
     dialogVisible.value = false
     // 发送操作成功的事件
     emit('success')