ソースを参照

标本出入库页面

iker 1 週間 前
コミット
63d75b0d50

+ 75 - 41
src/views/system/Inner/InnerForm.vue

@@ -5,32 +5,59 @@
       v-loading="formLoading"
       :model="formData"
       :rules="formRules"
-      label-width="80px"
+      label-width="100px"
     >
-      <el-form-item label="角色名称" prop="name">
-        <el-input v-model="formData.name" placeholder="请输入角色名称" />
+      <el-form-item label="标本编号" prop="number">
+        <el-input
+          v-model="formData.number[0]" placeholder="请输入标本编号" >
+        <template #append>
+          <el-button
+            type="primary"
+            @click="add()"
+          >
+            +
+          </el-button>
+          <el-button
+            type="primary"
+            @click="remove()"
+          >
+            -
+          </el-button>
+        </template>
+        </el-input>
       </el-form-item>
-      <el-form-item label="角色标识" prop="code">
-        <el-input v-model="formData.code" placeholder="请输入角色标识" />
-      </el-form-item>
-      <el-form-item label="显示顺序" prop="sort">
-        <el-input v-model="formData.sort" placeholder="请输入显示顺序" />
-      </el-form-item>
-      <el-form-item label="状态" prop="status">
-        <el-select v-model="formData.status" clearable placeholder="请选择状态">
-          <el-option
-            v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
+      <template v-if="formData.number && formData.number.length > 1">
+        <el-form-item
+          v-for="(item,index) in formData.number.slice(1)"
+          :key="index + 1"
+          :label="`标本编号 ${index + 2}`"
+          :prop="`number.${index + 1}`"
+        >
+          <el-input
+            v-model="formData.number[index + 1]"
+            placeholder="请输入标本编号"
           />
-        </el-select>
+        </el-form-item>
+      </template>
+      <el-form-item label="入库时间" prop="returnTime">
+        <el-date-picker
+          v-model="formData.returnTime"
+          range-separator="-"
+          placeholder="入库时间"
+        />
+      </el-form-item>
+        <el-form-item label="退换人" prop="returnPerson">
+          <el-input v-model="formData.returnPerson" placeholder="请输入退换人姓名" />
+        </el-form-item>
+      <el-form-item label="标本情况" prop="annex_return">
+        <el-input v-model="formData.annex_return" placeholder="请输入标本情况" />
       </el-form-item>
+
       <el-form-item label="备注" prop="remark">
         <el-input v-model="formData.remark" placeholder="请输备注" type="textarea" />
       </el-form-item>
     </el-form>
-    <template #footer>
+      <template #footer>
       <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
       <el-button @click="dialogVisible = false">取 消</el-button>
     </template>
@@ -40,6 +67,7 @@
 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
 import { CommonStatusEnum } from '@/utils/constants'
 import * as RoleApi from '@/api/system/role'
+import * as OutBoundApi from "@/api/system/Out";
 
 defineOptions({ name: 'SystemRoleForm' })
 
@@ -52,22 +80,17 @@ const formLoading = ref(false) // 表单的加载中:1)修改时的数据加
 const formType = ref('') // 表单的类型:create - 新增;update - 修改
 const formData = ref({
   id: undefined,
-  name: '',
-  code: '',
-  sort: undefined,
-  status: CommonStatusEnum.ENABLE,
-  remark: ''
+  // name: '',
+  // code: '',
+  // sort: undefined,
+  // status: CommonStatusEnum.ENABLE,
+  // remark: ''
+  number:['']
 })
 const formRules = reactive({
-  name: [{ required: true, message: '角色名称不能为空', trigger: 'blur' }],
-  code: [{ required: true, message: '角色标识不能为空', trigger: 'change' }],
-  sort: [{ required: true, message: '显示顺序不能为空', trigger: 'change' }],
-  status: [{ required: true, message: '状态不能为空', trigger: 'change' }],
-  remark: [{ required: false, message: '备注不能为空', trigger: 'blur' }]
 })
 const formRef = ref() // 表单 Ref
 
-/** 打开弹窗 */
 const open = async (type: string, id?: number) => {
   dialogVisible.value = true
   dialogTitle.value = t('action.' + type)
@@ -77,49 +100,60 @@ const open = async (type: string, id?: number) => {
   if (id) {
     formLoading.value = true
     try {
-      formData.value = await RoleApi.getRole(id)
+      formData.value = await OutBoundApi.getRole(id)
     } finally {
       formLoading.value = false
     }
   }
 }
 
+const add = () => {
+  formData.value.number.push('')
+}
+const remove = () => {
+  if (formData.value.number.length > 1) {
+    formData.value.number.pop(); // 删除最后一个输入框
+  }
+};
+
 /** 重置表单 */
 const resetForm = () => {
   formData.value = {
     id: undefined,
-    name: '',
-    code: '',
-    sort: undefined,
-    status: CommonStatusEnum.ENABLE,
-    remark: ''
+    number:['']
   }
   formRef.value?.resetFields()
 }
 defineExpose({ open }) // 提供 open 方法,用于打开弹窗
 
+
 /** 提交表单 */
 const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
 const submitForm = async () => {
-  // 校验表单
+//   校验表单
   if (!formRef) return
   const valid = await formRef.value.validate()
   if (!valid) return
-  // 提交请
+// 提交
   formLoading.value = true
   try {
-    const data = formData.value as unknown as RoleApi.RoleVO
+    const data = formData.value as unknown as OutBoundApi.OouBoundVO
     if (formType.value === 'create') {
-      await RoleApi.createRole(data)
+      console.log(data,'新增时')
+      await OutBoundApi.createOutBound(data)
       message.success(t('common.createSuccess'))
     } else {
-      await RoleApi.updateRole(data)
+      await OutBoundApi.updateForm(data)
       message.success(t('common.updateSuccess'))
     }
     dialogVisible.value = false
     // 发送操作成功的事件
     emit('success')
-  } finally {
+  }
+  catch (error) {
+    console.error('Error:', error);
+  }
+  finally {
     formLoading.value = false
   }
 }

+ 66 - 254
src/views/system/Inner/iker.vue

@@ -6,26 +6,24 @@
   :model="queryParams"
   ref="queryFormRef"
   :inline="true"
-  label-width="68px"
+  label-width="100px"
 >
-  <el-form-item label="名称" prop="name">
-    <el-input
-      v-model="queryParams.name"
-      placeholder="请输入名称"
-      clearable
-      @keyup.enter="handleQuery"
-      class="!w-240px"
-    />
-  </el-form-item>
-  <el-form-item label="编号" prop="number">
+  <el-form-item label="标本编号" prop="number">
     <el-input
       v-model="queryParams.number"
-      placeholder="请输入手机号码"
+      placeholder="请输入编号"
       clearable
       @keyup.enter="handleQuery"
       class="!w-240px"
     />
   </el-form-item>
+  <el-form-item label="入库时间" prop="returnTime">
+<el-date-picker
+  v-model="queryParams.returnTime"
+  range-separator="-"
+  placeholder="入库时间"
+  />
+  </el-form-item>
   <el-form-item>
     <el-button @click="handleQuery"><Icon icon="ep:search" />搜索</el-button>
     <el-button @click="resetQuery"><Icon icon="ep:refresh" />重置</el-button>
@@ -36,280 +34,94 @@
                 >
                   <Icon icon="ep:plus" /> 新增
                 </el-button>
-                <el-button
-                  type="warning"
-                  plain
-                  @click="handleImport"
-                >
-                  <Icon icon="ep:upload" /> 导入
-                </el-button>
-                <el-button
-                  type="success"
-                  plain
-                  @click="handleExport"
-                  :loading="exportLoading"
-                >
-                  <Icon icon="ep:download" />导出
-                </el-button>
   </el-form-item>
 </el-form>
 </contentwrap>
 <!-- 数据表格 -->
 <ContentWrap>
 <el-table v-loading="loading" :data="list">
-  <el-table-column label="编号" align="center" prop="number" />
-  <el-table-column
-    label="名称"
-    align="center"
-    prop="name"
-    :show-overflow-tooltip="true"
-  />
-  <el-table-column
-    label="存放位置"
-    align="center"
-    prop="location"
-    :show-overflow-tooltip="true"
-  />
-  <el-table-column
-    label="图片"
-    align="center"
-    prop="image"
-    :show-overflow-tooltip="true"
-  />
-  <el-table-column label="退还人" align="center" prop="returner" width="120" />
-  <el-table-column
-    :formatter="dateFormatter"
-    label="退还时间"
-    prop="returnTime"
-  />
-  <el-table-column
-    label="点收人"
-    align="center"
-    prop="receiver"
-    width="180"
+  <el-table-column label="申请单号" align="center" prop="id" />
+  <el-table-column label="标本编号" align="center" prop="number" />
+  <el-table-column label="标本名称" align="center" prop="name" />
+  <el-table-column label="入库时间" align="center" prop="returnTime" />
+  <el-table-column label="退换人" align="center" prop="returnPerson" />
+  <el-table-column label="点收人" align="center" prop="receivePerson" />
+  <el-table-column label="备注" align="center" prop="remark" />
+  <el-table-column label="操作" align="center" width="220">
+    <template #default="scope">
+      <el-button
+        link
+        type="primary"
+        @click="openForm('update', scope.row.id)"
+      >
+        编辑
+      </el-button>
+      <el-button
+        v-hasPermi="['system:role:delete']"
+        link
+        type="danger"
+        @click="handleDelete(scope.row.id)"
+      >
+        删除
+      </el-button>
+    </template>
+  </el-table-column>
+</el-table>
+  <!-- 分页 -->
+  <Pagination
+    :page="queryParams.pageNo"
+    :limit="queryParams.pageSize"
+    :total="total"
   />
-  <el-table-column
-    label="回库状态"
-    align="center"
-    prop="status"
-    :show-overflow-tooltip="true"
-  />
-  <!--          <el-table-column label="操作" align="center" width="160">-->
-  <!--            <template #default="scope">-->
-  <!--              <div class="flex items-center justify-center">-->
-  <!--                <el-button-->
-  <!--                  type="primary"-->
-  <!--                  link-->
-  <!--                  @click="openForm('update', scope.row.id)"-->
-  <!--                  v-hasPermi="['system:user:update']"-->
-  <!--                >-->
-  <!--                  <Icon icon="ep:edit" />修改-->
-  <!--                </el-button>-->
-  <!--                <el-dropdown-->
-  <!--                  @command="(command) => handleCommand(command, scope.row)"-->
-  <!--                  v-hasPermi="[-->
-  <!--                    'system:user:delete',-->
-  <!--                    'system:user:update-password',-->
-  <!--                    'system:permission:assign-user-role'-->
-  <!--                  ]"-->
-  <!--                >-->
-  <!--                  <el-button type="primary" link><Icon icon="ep:d-arrow-right" /> 更多</el-button>-->
-  <!--                  <template #dropdown>-->
-  <!--                    <el-dropdown-menu>-->
-  <!--                      <el-dropdown-item-->
-  <!--                        command="handleDelete"-->
-  <!--                        v-if="checkPermi(['system:user:delete'])"-->
-  <!--                      >-->
-  <!--                        <Icon icon="ep:delete" />删除-->
-  <!--                      </el-dropdown-item>-->
-  <!--                      <el-dropdown-item-->
-  <!--                        command="handleResetPwd"-->
-  <!--                        v-if="checkPermi(['system:user:update-password'])"-->
-  <!--                      >-->
-  <!--                        <Icon icon="ep:key" />重置密码-->
-  <!--                      </el-dropdown-item>-->
-  <!--                      <el-dropdown-item-->
-  <!--                        command="handleRole"-->
-  <!--                        v-if="checkPermi(['system:permission:assign-user-role'])"-->
-  <!--                      >-->
-  <!--                        <Icon icon="ep:circle-check" />分配角色-->
-  <!--                      </el-dropdown-item>-->
-  <!--                    </el-dropdown-menu>-->
-  <!--                  </template>-->
-  <!--                </el-dropdown>-->
-  <!--              </div>-->
-  <!--            </template>-->
-  <!--          </el-table-column>-->
-          </el-table>
-  <!--        <Pagination-->
-  <!--          :total="total"-->
-  <!--          v-model:page="queryParams.pageNo"-->
-  <!--          v-model:limit="queryParams.pageSize"-->
-  <!--          @pagination="getList"-->
-  <!--        />-->
 </ContentWrap>
-<!--  &lt;!&ndash; 添加或修改用户对话框 &ndash;&gt;-->
-<!--  <UserForm ref="formRef" @success="getList" />-->
-<!--  &lt;!&ndash; 用户导入对话框 &ndash;&gt;-->
-<!--  <UserImportForm ref="importFormRef" @success="getList" />-->
-<!--  &lt;!&ndash; 分配角色 &ndash;&gt;-->
-<!--  <UserAssignRoleForm ref="assignRoleFormRef" @success="getList" />-->
+  <!-- 表单弹窗:添加/修改 -->
+  <InnerForm ref="formRef" @success="getList" />
 </template>
 <script lang="ts" setup>
-import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
-import { checkPermi } from '@/utils/permission'
-import { dateFormatter } from '@/utils/formatTime'
-import download from '@/utils/download'
-import { CommonStatusEnum } from '@/utils/constants'
-// import * as UserApi from '@/api/system/user'
-
-defineOptions({ name: 'SystemUser' })
-
-const message = useMessage() // 消息弹窗
-const { t } = useI18n() // 国际化
-
-const loading = ref(true) // 列表的加载中
-const total = ref(0) // 列表的总页数
-const list = ref() // 列表的数
+import InnerForm from './InnerForm.vue'
+import * as OutBoundApi from '@/api/system/In/index'
 const queryParams = reactive({
   pageNo: 1,
   pageSize: 10,
-  number: undefined,
-  name: undefined,
-  // status: undefined,
-  // deptId: undefined,
-  // createTime: []
+  id: undefined,
+  number:undefined,
+  sampleName: undefined,
+  applyTime: undefined
 })
-const queryFormRef = ref() // 搜索的表单
-
-/** 查询列表 */
+const queryFormRef = ref()
+const loading = ref(false)
+const list = ref([])
+const total = ref()
 const getList = async () => {
   loading.value = true
   try {
-    const data = []
+    const data = await OutBoundApi.getPage(queryParams)
+    console.log(data,'1')
     list.value = data.list
-    // total.value = data.total
+    total.value = data.total
   } finally {
     loading.value = false
   }
 }
-
-/** 搜索按钮操作 */
+// 搜索处理
 const handleQuery = () => {
   queryParams.pageNo = 1
+  console.log(queryParams,'搜索时')
   getList()
 }
 
-/** 重置按钮操作 */
+// 重置查询
 const resetQuery = () => {
   queryFormRef.value?.resetFields()
   handleQuery()
 }
-
-/** 处理部门被点击 */
-const handleDeptNodeClick = async (row) => {
-  queryParams.deptId = row.id
-  await getList()
-}
-
-/** 添加/修改操作 */
+// 新建申请
 const formRef = ref()
-const openForm = (type: string, id?: number) => {
-  formRef.value.open(type, id)
-}
-
-/** 用户导入 */
-const importFormRef = ref()
-const handleImport = () => {
-  importFormRef.value.open()
-}
-
-/** 修改用户状态 */
-const handleStatusChange = async (row: UserApi.UserVO) => {
-  try {
-    // 修改状态的二次确认
-    const text = row.status === CommonStatusEnum.ENABLE ? '启用' : '停用'
-    await message.confirm('确认要"' + text + '""' + row.username + '"用户吗?')
-    // 发起修改状态
-    await UserApi.updateUserStatus(row.id, row.status)
-    // 刷新列表
-    await getList()
-  } catch {
-    // 取消后,进行恢复按钮
-    row.status =
-      row.status === CommonStatusEnum.ENABLE ? CommonStatusEnum.DISABLE : CommonStatusEnum.ENABLE
-  }
-}
-
-/** 导出按钮操作 */
-const exportLoading = ref(false)
-const handleExport = async () => {
-  try {
-    // 导出的二次确认
-    await message.exportConfirm()
-    // 发起导出
-    exportLoading.value = true
-    const data = await UserApi.exportUser(queryParams)
-    download.excel(data, '用户数据.xls')
-  } catch {
-  } finally {
-    exportLoading.value = false
-  }
-}
+const openForm = (type:string, id?:number ) =>{
+  formRef.value.open(type,id)
 
-/** 操作分发 */
-const handleCommand = (command: string, row: UserApi.UserVO) => {
-  switch (command) {
-    case 'handleDelete':
-      handleDelete(row.id)
-      break
-    case 'handleResetPwd':
-      handleResetPwd(row)
-      break
-    case 'handleRole':
-      handleRole(row)
-      break
-    default:
-      break
-  }
 }
-
-/** 删除按钮操作 */
-const handleDelete = async (id: number) => {
-  try {
-    // 删除的二次确认
-    await message.delConfirm()
-    // 发起删除
-    await UserApi.deleteUser(id)
-    message.success(t('common.delSuccess'))
-    // 刷新列表
-    await getList()
-  } catch {}
-}
-
-/** 重置密码 */
-const handleResetPwd = async (row: UserApi.UserVO) => {
-  try {
-    // 重置的二次确认
-    const result = await message.prompt(
-      '请输入"' + row.username + '"的新密码',
-      t('common.reminder')
-    )
-    const password = result.value
-    // 发起重置
-    await UserApi.resetUserPwd(row.id, password)
-    message.success('修改成功,新密码是:' + password)
-  } catch {}
-}
-
-/** 分配角色 */
-const assignRoleFormRef = ref()
-const handleRole = (row: UserApi.UserVO) => {
-  assignRoleFormRef.value.open(row)
-}
-
-/** 初始化 */
-// onMounted(() => {
-//   getList()
-// })
+onMounted( ()=>{
+  getList();
+})
 </script>

+ 0 - 265
src/views/system/Inner/index.vue

@@ -1,265 +0,0 @@
-<template>
-  <ContentWrap>
-    <!-- 搜索工具栏 -->
-    <el-form
-      ref="queryFormRef"
-      :inline="true"
-      :model="queryParams"
-      class="-mb-15px"
-      label-width="68px"
-    >
-      <el-form-item label="标本编号" prop="code">
-        <el-input
-          v-model="queryParams.code"
-          class="!w-240px"
-          clearable
-          placeholder="请输入标本编号"
-          @keyup.enter="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="标本状态" prop="status">
-        <el-select
-          v-model="queryParams.status"
-          class="!w-240px"
-          clearable
-          placeholder="请选择标本状态"
-        >
-<!--          <el-option-->
-<!--            v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"-->
-<!--            :key="dict.value"-->
-<!--            :label="dict.label"-->
-<!--            :value="dict.value"-->
-<!--          />-->
-        </el-select>
-      </el-form-item>
-      <el-form-item label="创建时间" prop="createTime">
-        <el-date-picker
-          v-model="queryParams.createTime"
-          :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
-          class="!w-240px"
-          end-placeholder="结束日期"
-          start-placeholder="开始日期"
-          type="daterange"
-          value-format="YYYY-MM-DD HH:mm:ss"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button @click="handleQuery">
-          <Icon class="mr-5px" icon="ep:search" />
-          搜索
-        </el-button>
-        <el-button @click="resetQuery">
-          <Icon class="mr-5px" icon="ep:refresh" />
-          重置
-        </el-button>
-
-        <el-button type="primary" plain @click="openForm('create')">
-          <Icon icon="ep:plus" class="mr-5px" />
-          新建申请
-        </el-button>
-        <el-button
-          v-hasPermi="['system:inner:export']"
-          :loading="exportLoading"
-          plain
-          type="success"
-          @click="handleExport"
-        >
-          <Icon class="mr-5px" icon="ep:download" />
-          导出
-        </el-button>
-      </el-form-item>
-    </el-form>
-  </ContentWrap>
-
-  <!-- 列表 -->
-  <ContentWrap>
-    <el-table v-loading="loading" :data="list">
-      <el-table-column align="center" label="标本名称" prop="name" />
-      <el-table-column align="center" label="开始日期" prop="startDate">
-        <template #default="{ row }">
-          {{ row.startDate ? dateFormatter(row.startDate) : 'N/A' }}
-        </template>
-      </el-table-column>
-      <el-table-column align="center" label="结束日期" prop="endDate">
-        <template #default="{ row }">
-          {{ row.endDate ? dateFormatter(row.endDate) : 'N/A' }}
-        </template>
-      </el-table-column>
-      <el-table-column align="center" label="退还人" prop="returnUser" />
-      <el-table-column align="center" label="点收人" prop="receiver" />
-      <el-table-column align="center" label="标本编号" prop="code" />
-      <el-table-column align="center" label="排序" prop="sort" />
-      <el-table-column align="center" label="备注" prop="remark" />
-      <el-table-column align="center" label="状态" prop="status">
-        <template #default="scope">
-          <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
-        </template>
-      </el-table-column>
-      <el-table-column
-        :formatter="dateFormatter"
-        align="center"
-        label="创建时间"
-        prop="createTime"
-        width="180"
-      />
-      <el-table-column :width="220" align="center" label="操作">
-        <template #default="scope">
-          <el-button
-            v-hasPermi="['system:inner:update']"
-            link
-            type="primary"
-            @click="openForm('update', scope.row.id)"
-          >
-            编辑
-          </el-button>
-          <el-button
-            v-hasPermi="['system:inner:delete']"
-            link
-            type="danger"
-            @click="handleDelete(scope.row.id)"
-          >
-            删除
-          </el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-  </ContentWrap>
-
-  <!-- 新增/编辑弹窗组件 -->
-  <InnerForm ref="formRef" @success="getList" />
-
-  <!-- 分页组件 -->
-  <el-pagination
-    v-model:current-page="currentPage"
-    v-model:page-size="pageSize"
-    :total="total"
-    :page-sizes="[10, 20, 50, 100]"
-    @size-change="handleSizeChange"
-    @current-change="handlePageChange"
-  />
-</template>
-
-
-
-<script setup lang="ts">
-
-import { dateFormatter } from '@/utils/formatTime'
-
-import InnerForm from './InnerForm.vue'
-import RoleApi from '@/api/system/role'
-// 本地模拟数据
-const mockData = [
-  {
-    id: 1,
-    name: '',
-    code: '',
-    startDate: '',
-    endDate: '',
-    returnUser: '',
-    receiver: '',
-    sort: 1,
-    status: 0,
-    remark: '',
-    createTime: ''
-  },
-
-]
-
-// const loading = ref(false)
-// const total = ref(0)
-// const list = ref<any[]>([])
-
-// 分页相关
-const currentPage = ref(1)
-const pageSize = ref(10)
-
-// 查询列表(本地处理)
-// const getList = async () => {
-//   loading.value = true
-//   try {
-//     // 模拟过滤和分页
-//     const filteredData = mockData.filter(item => {
-//       const codeMatch = !queryParams.code || item.code.includes(queryParams.code)
-//       const statusMatch = queryParams.status === undefined || item.status === queryParams.status
-//       let dateMatch = true
-//       if (queryParams.createTime && queryParams.createTime.length === 2) {
-//         const itemDate = new Date(item.createTime).getTime()
-//         const startDate = new Date(queryParams.createTime[0]).getTime()
-//         const endDate = new Date(queryParams.createTime[1]).getTime()
-//         dateMatch = itemDate >= startDate && itemDate <= endDate
-//       }
-//       return codeMatch && statusMatch && dateMatch
-//     })
-//
-//     total.value = filteredData.length
-//     const start = (currentPage.value - 1) * pageSize.value
-//     const end = start + pageSize.value
-//     list.value = filteredData.slice(start, end)
-//   } finally {
-//     loading.value = false
-//   }
-// }
-
-// 删除处理
-const handleDelete = async (id: number) => {
-  try {
-    await message.delConfirm()
-    const index = mockData.findIndex(item => item.id === id)
-    if (index !== -1) {
-      mockData.splice(index, 1)
-      message.success(t('common.delSuccess'))
-      await getList()
-    }
-  } catch {}
-}
-
-// 导出处理(本地数据)
-const handleExport = async () => {
-  try {
-    await message.exportConfirm()
-    exportLoading.value = true
-    // 构造导出数据
-    // const data = list.value.map(item => ({
-    //   标本名称: item.name,
-    //   标本编号: item.code,
-    //   开始日期: item.startDate,
-    //   结束日期: item.endDate,
-    //   状态: item.status === 0 ? '启用' : '停用',
-    //   创建时间: item.createTime
-    // }))
-    // download.excel(data, '标本列表.xls')
-  } finally {
-    exportLoading.value = false
-  }
-}
-// 新建
-const formRef = ref()
-const openForm = (type:string, id?:number ) =>{
-  formRef.value.open(type,id)
-
-}
-// 处理页码变化
-const handlePageChange = (page: number) => {
-  currentPage.value = page
-  getList()
-}
-
-// 处理每页条数变化
-const handleSizeChange = (size: number) => {
-  pageSize.value = size
-  currentPage.value = 1
-  getList()
-}
-
-
-
-
-/** 表单成功回调 */
-// const handleFormSuccess = () => {
-//   getList()
-// }
-
-onMounted(() => {
-  getList()
-})
-</script>

+ 86 - 61
src/views/system/Out/iker(出库管理).vue

@@ -6,9 +6,9 @@
       :inline="true"
       :model="queryParams"
       class="-mb-15px"
-      label-width="68px"
+      label-width="100px"
     >
-      <el-form-item label="名称" prop="name">
+      <el-form-item label="标本编号" prop="">
         <el-input
           v-model="queryParams.name"
           class="!w-240px"
@@ -37,6 +37,22 @@
           value-format="YYYY-MM-DD HH:mm:ss"
         />
       </el-form-item>
+      <el-form-item label="申请状态" prop="status">
+        <el-select v-model="queryParams.status" class="!w-240px" clearable>
+          <el-option
+            v-for="item in statusOptions"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+      </el-form-item>
+
+
+
+
+
+
       <el-form-item>
         <el-button @click="handleQuery">
           <Icon class="mr-5px" icon="ep:search" />
@@ -57,7 +73,7 @@
         </el-button>
       </el-form-item>
     </el-form>
-
+  </ContentWrap>
     <!-- 表格 -->
     <el-table v-loading="loading" :data="list">
       <el-table-column align="center" label="编号" prop="number" />
@@ -88,49 +104,49 @@
       </el-table-column>
     </el-table>
     <!-- 新增对话框 -->
-    <el-dialog
-      v-model="formVisible"
-      :title="formType === 'create' ? '新增' : '修改'"
-      width="500px"
-    >
-      <el-form
-        ref="formRef"
-        :model="formData"
-        :rules="formRules"
-        label-width="80px"
-      >
-        <el-form-item label="名称" prop="name">
-          <el-input v-model="formData.name" placeholder="请输入名称" />
-        </el-form-item>
-        <el-form-item label="用途" prop="use">
-          <el-input v-model="formData.use" placeholder="请输入用途" />
-        </el-form-item>
-        <el-form-item label="显示顺序" prop="sort">
-          <el-input-number v-model="formData.sort" :min="0" />
-        </el-form-item>
-        <el-form-item label="时间范围">
-          <el-date-picker
-            v-model="formData.timeRange"
-            type="daterange"
-            range-separator="-"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            value-format="YYYY-MM-DD HH:mm:ss"
-          />
-        </el-form-item>
-        <el-form-item label="备注" prop="remark">
-          <el-input v-model="formData.remark" type="textarea" />
-        </el-form-item>
-      </el-form>
+<!--    <el-dialog-->
+<!--      v-model="formVisible"-->
+<!--      :title="formType === 'create' ? '新增' : '修改'"-->
+<!--      width="500px"-->
+<!--    >-->
+<!--      <el-form-->
+<!--        ref="formRef"-->
+<!--        :model="formData"-->
+<!--        :rules="formRules"-->
+<!--        label-width="80px"-->
+<!--      >-->
+<!--        <el-form-item label="名称" prop="name">-->
+<!--          <el-input v-model="formData.name" placeholder="请输入名称" />-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="用途" prop="use">-->
+<!--          <el-input v-model="formData.use" placeholder="请输入用途" />-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="显示顺序" prop="sort">-->
+<!--          <el-input-number v-model="formData.sort" :min="0" />-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="时间范围">-->
+<!--          <el-date-picker-->
+<!--            v-model="formData.timeRange"-->
+<!--            type="daterange"-->
+<!--            range-separator="-"-->
+<!--            start-placeholder="开始日期"-->
+<!--            end-placeholder="结束日期"-->
+<!--            value-format="YYYY-MM-DD HH:mm:ss"-->
+<!--          />-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="备注" prop="remark">-->
+<!--          <el-input v-model="formData.remark" type="textarea" />-->
+<!--        </el-form-item>-->
+<!--      </el-form>-->
 
-      <template #footer>
-        <el-button @click="formVisible = false">取消</el-button>
-        <el-button type="primary" @click="submitForm">提交</el-button>
-      </template>
-    </el-dialog>
-  </contentWrap>
+<!--      <template #footer>-->
+<!--        <el-button @click="formVisible = false">取消</el-button>-->
+<!--        <el-button type="primary" @click="submitForm">提交</el-button>-->
+<!--      </template>-->
+<!--    </el-dialog>-->
+<!--  </contentWrap>-->
   <!-- 表单弹窗:添加/修改 -->
-  <RoleForm ref="formRef" @success="getList" />
+<!--  <IkerForm ref="formRef" @success="getList" />-->
 </template>
 
 <script lang="ts" setup>
@@ -138,10 +154,10 @@ import { ref, reactive, onMounted } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import { useI18n } from 'vue-i18n'
 import { dateFormatter } from '@/utils/formatTime'
-import RoleForm from "@/views/system/role/RoleForm.vue";
-import * as UserApi from '@/api/system/user'
+// import IkerForm from "@/views/system/Out/IkerForm.vue";
+// import * as UserApi from '@/api/system/user'
 
-import * as OutBoundApi from '@/api/system/Out'
+// import * as OutBoundApi from '@/api/system/ex/index'
 
 const { t } = useI18n()
 
@@ -157,22 +173,22 @@ const queryParams = reactive({
 const queryFormRef = ref()
 
 /** 查询列表 */
-const getList = async () => {
-  loading.value = true
-  try {
-    // const data = await UserApi.getUserPage(queryParams)
-    const data = [];
-    list.value = data.list
-  } finally {
-    loading.value = false
-  }
-}
+// const getList = async () => {
+//   loading.value = true
+//   try {
+//     // const data = await UserApi.getUserPage(queryParams)
+//     const data = [];
+//     list.value = data.list
+//   } finally {
+//     loading.value = false
+//   }
+// }
 
 /** 搜索按钮操作 */
-const handleQuery = () => {
-  queryParams.pageNo = 1
-  getList()
-}
+// const handleQuery = () => {
+//   queryParams.pageNo = 1
+//   getList()
+// }
 
 /** 删除按钮操作 */
 const handleDelete = async (id: number) => {
@@ -193,6 +209,15 @@ const openForm = (type: string, id?: number) => {
   // 这里需要实现表单组件逻辑
   console.log('打开表单', type, id)
 }
+
+
+
+// 状态选项
+// const statusOptions = [
+//   { value: 1, label: '待审批' },
+//   { value: 2, label: '已通过' },
+//   { value: 3, label: '已拒绝' }
+// ]
 // // 新增以下类型定义
 // interface FormData {
 //   id?: number

+ 65 - 26
src/views/system/Out/index(出库申请).vue

@@ -8,9 +8,9 @@
       class="-mb-15px"
       label-width="100px"
     >
-      <el-form-item label="标本编号" prop="id">
+      <el-form-item label="标本编号" prop="number">
         <el-input
-          v-model="queryParams.id"
+          v-model="queryParams.number"
           class="!w-240px"
           placeholder="请输入标本编号"
         />
@@ -61,11 +61,17 @@
 <!--  列表-->
   <ContentWrap>
       <el-table v-loading="loading" :data="list">
-<!--        <el-table-column align="center" label="标本编号" prop="id" width="100" />-->
+        <el-table-column align="center" label="申请单号" prop="id" width="100" />
         <el-table-column label="标本编号" align="center" prop="number" width="120" />
 
         <el-table-column label="申请单位" align="center" prop="applyUnit" width="120" />
-        <el-table-column label="退还时间" align="center" prop="returnExpect" width="120" />
+        <el-table-column
+          :formatter="dateFormatter2"
+          align="center"
+          label="退还时间"
+          prop="returnExpect"
+          width="180"
+        />
 
         <el-table-column label="目的" align="center" prop="purpose" width="120" />
 
@@ -81,7 +87,7 @@
 
         <el-table-column label="标本名称" align="center" prop="sampleName" width="120" />
         <el-table-column label="申请人" align="center" prop="applicant" width="120" />
-        <el-table-column label="申请数量" align="center" prop="quantity" width="100" />
+<!--        <el-table-column label="申请数量" align="center" prop="quantity" width="100" />-->
 <!--        <el-table-column label="申请时间" align="center" prop="applyTime" width="180">-->
 <!--          <template #default="scope">-->
 <!--            {{ dateFormatter(scope.row.applyTime) }}-->
@@ -93,6 +99,7 @@
 <!--          </template>-->
 <!--        </el-table-column>-->
         <el-table-column label="备注" align="center" prop="remark" />
+        <el-table-column label="状态" align="center" prop="state" />
         <el-table-column label="操作" align="center" width="220">
           <template #default="scope">
             <el-button
@@ -110,6 +117,14 @@
             >
               删除
             </el-button>
+            <el-button
+              v-hasPermi="['system:role:delete']"
+              link
+              type="danger"
+              @click="handleDelete(scope.row.id)"
+            >
+              审批
+            </el-button>
           </template>
         </el-table-column>
 
@@ -124,6 +139,8 @@
   </ContentWrap>
   <!-- 表单弹窗:添加/修改 -->
   <OutForm ref="formRef" @success="getList" />
+<!--  审批弹窗-->
+<!--  <SpForm ref="formRef" @success="getList" />-->
 </template>
 
 <script lang="ts" setup>
@@ -131,6 +148,8 @@ import OutForm from './OutForm.vue'
 
 // import ApproveForm from './approveForm.vue'
 import * as OutBoundApi from '@/api/system/Out/index'
+import {dateFormatter, dateFormatter2} from "@/utils/formatTime";
+import * as UserApi from "@/api/system/user";
 // import * as UserApi from "@/api/system/user";
 // 模拟数据
 // const mockData = [
@@ -155,29 +174,36 @@ import * as OutBoundApi from '@/api/system/Out/index'
 
 // 状态选项
 const statusOptions = [
-  { value: 1, label: '待审批' },
-  { value: 2, label: '已通过' },
-  { value: 3, label: '已拒绝' }
+  { value: 0, label: '在库(0)' },
+
+  { value: 1, label: '已出库(1)' },
+  { value: 2, label: '审批中(2)' },
+  { value: 3, label: '审批通过(3)' },
+  { value: 4, label: '审批驳回(4)' }
 ]
 
 // 状态标签类型映射
-const statusTagMap = {
-  1: 'warning',
-  2: 'success',
-  3: 'danger'
-}
-const queryFormRef = ref()
+// const statusTagMap = {
+//   1: 'warning',
+//   2: 'success',
+//   3: 'danger'
+// }
+
+
+// 0在库,1已出库,2审批中,3审批通过,4审批驳回
+
 
 // 查询参数
 const queryParams = reactive({
   pageNo: 1,
   pageSize: 10,
   id: undefined,
+  number:undefined,
   sampleName: undefined,
   status: undefined,
   applyTime: undefined
 })
-
+const queryFormRef = ref()
 const loading = ref(false)
 // const total = ref(mockData.length)
 
@@ -196,6 +222,7 @@ const getList = async () => {
 }
 
 
+
 // 搜索处理
 const handleQuery = () => {
   queryParams.pageNo = 1
@@ -231,19 +258,31 @@ const openForm = (type:string, id?:number ) =>{
 //     ElMessage.success('审批操作成功')
 //   })
 // }
+// const handleCommand = (command: string, row: UserApi.UserVO) => {
+//   switch (command) {
+//     case 'handleDelete':
+//       handleDelete(row.id)
+//       break
+
+
+
+
+
+
+
 
 // 删除操作
-// const handleDelete = (row: any) => {
-//   ElMessageBox.confirm(`确认删除申请 ${row.applyNo}?`, '警告', {
-//     confirmButtonText: '确认',
-//     cancelButtonText: '取消',
-//     type: 'error'
-//   }).then(() => {
-//     ElMessage.success('删除成功')
-//   })
-// }
-// const showApproveForm = ref(false)
-// const showOutForm = ref(false)
+const handleDelete = async (id: number) => {
+  try {
+    // 删除的二次确认
+    await message.delConfirm()
+    // 发起删除
+    await DeleteApi.deleteOut(id)
+    message.success(t('common.delSuccess'))
+    // 刷新列表
+    await getList()
+  } catch {}
+}
 
 onMounted( ()=>{
   getList();