审核入库基础功能
This commit is contained in:
parent
199c547199
commit
42047c2013
3
.gitignore
vendored
3
.gitignore
vendored
@ -22,4 +22,5 @@ selenium-debug.log
|
|||||||
package-lock.json
|
package-lock.json
|
||||||
yarn.lock
|
yarn.lock
|
||||||
|
|
||||||
.trae/
|
.trae/
|
||||||
|
.qoder/
|
||||||
49
src/api/blood/auditInStorage.ts
Normal file
49
src/api/blood/auditInStorage.ts
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
import request from "@/utils/request";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取已存在送血单列表(下拉框选择)
|
||||||
|
* 后端路径: /bus/bloodbank/auditInStorage/getExistSQDList
|
||||||
|
*/
|
||||||
|
export function getExistSQDList(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: "/bus/bloodbank/auditInStorage/getExistSQDList",
|
||||||
|
method: "get",
|
||||||
|
params: query,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取送血单明细数据
|
||||||
|
* 后端路径: /bus/bloodbank/auditInStorage/getExistSQDInfo
|
||||||
|
*/
|
||||||
|
export function getExistSQDInfo(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: "/bus/bloodbank/auditInStorage/getExistSQDInfo",
|
||||||
|
method: "get",
|
||||||
|
params: query,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存审核入库数据
|
||||||
|
* 后端路径: /bus/bloodbank/auditInStorage/saveData
|
||||||
|
*/
|
||||||
|
export function saveAuditData(data?: Object) {
|
||||||
|
return request({
|
||||||
|
url: "/bus/bloodbank/auditInStorage/saveData",
|
||||||
|
method: "post",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打印入库单
|
||||||
|
* 后端路径: /bus/bloodbank/auditInStorage/print
|
||||||
|
*/
|
||||||
|
export function printInStorage(query?: Object) {
|
||||||
|
return request({
|
||||||
|
url: "/bus/bloodbank/auditInStorage/print",
|
||||||
|
method: "get",
|
||||||
|
params: query,
|
||||||
|
});
|
||||||
|
}
|
||||||
583
src/views/blood/auditInStorage/index.vue
Normal file
583
src/views/blood/auditInStorage/index.vue
Normal file
@ -0,0 +1,583 @@
|
|||||||
|
<!--
|
||||||
|
* 审核入库页面
|
||||||
|
* @author: AI
|
||||||
|
* @since: 2026-09-23
|
||||||
|
* 功能:审核入库管理,选择送血单后扫描血液确认入库
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="audit-in-storage">
|
||||||
|
<!-- 工具栏 -->
|
||||||
|
<div class="toolbar">
|
||||||
|
<div class="toolbar-left">
|
||||||
|
<el-button type="primary" plain @click="loadBillList">刷新出库单</el-button>
|
||||||
|
<el-button type="warning" plain @click="handleSave" :loading="saveLoading">保存入库</el-button>
|
||||||
|
<el-button type="info" plain :icon="Printer" @click="handlePrint">打印入库单</el-button>
|
||||||
|
<el-button type="danger" plain :icon="Close" @click="handleClose">关闭</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 入库信息表单 -->
|
||||||
|
<div class="form-section">
|
||||||
|
<div class="section-title">入库信息</div>
|
||||||
|
<el-form :model="mainForm" label-width="100px" label-position="left">
|
||||||
|
<el-row :gutter="15">
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="入库单号">
|
||||||
|
<el-input v-model="mainForm.bill_no" disabled placeholder="自动生成" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="入库时间">
|
||||||
|
<el-date-picker v-model="mainForm.occur_date" type="datetime"
|
||||||
|
value-format="YYYY-MM-DD HH:mm:ss" placeholder="入库时间" style="width: 100%" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="经手人">
|
||||||
|
<SelectTable v-model:data="mainForm.handle_person" :tableData="userList"
|
||||||
|
placeholder="请选择经手人" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6"></el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="15">
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="入库方式">
|
||||||
|
<el-input v-model="mainForm.storage_type" disabled placeholder="审核入库" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="血站出库单号">
|
||||||
|
<SelectTable v-model:data="selectedBillId" :tableData="billList" :fields="billFields"
|
||||||
|
placeholder="请选择送血单" @update:data="handleBillSelect" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="备注">
|
||||||
|
<el-input v-model="mainForm.remark" placeholder="备注" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 复选框行 -->
|
||||||
|
<div class="checkbox-row">
|
||||||
|
<el-checkbox v-model="cancelBlood">取消血液</el-checkbox>
|
||||||
|
<el-input v-model="cancelBloodNo" placeholder="输入血液流水号后回车取消" style="width: 260px"
|
||||||
|
@keyup.enter="handleCancelBlood" :disabled="!cancelBlood" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 三栏布局:血液信息 + 待入库血液 + 已扫描血液 -->
|
||||||
|
<div class="main-content">
|
||||||
|
<!-- 左侧:血液信息表单 -->
|
||||||
|
<div class="left-panel">
|
||||||
|
<div class="section-title">血液信息</div>
|
||||||
|
<el-form :model="bloodForm" label-width="70px" label-position="left">
|
||||||
|
<el-form-item label="血液流水号">
|
||||||
|
<el-input v-model="bloodForm.blood_no" placeholder="请输入血液流水号" @keyup.enter="handleScanBlood" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="产品码">
|
||||||
|
<el-input v-model="bloodForm.product_no" placeholder="产品码" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="血液品种">
|
||||||
|
<el-select v-model="bloodForm.blood_breed" placeholder="请选择血液品种" filterable style="width: 100%">
|
||||||
|
<el-option v-for="item in bloodBreedList" :key="item.value" :label="item.label"
|
||||||
|
:value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="血型">
|
||||||
|
<el-select v-model="bloodForm.blood_type" placeholder="请选择血型" style="width: 100%">
|
||||||
|
<el-option v-for="item in bloodTypeOptions" :key="item.value" :label="item.label"
|
||||||
|
:value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="Rh(D)">
|
||||||
|
<el-select v-model="bloodForm.rh_blood_type" placeholder="Rh(D)" style="width: 100%">
|
||||||
|
<el-option label="+" value="+" />
|
||||||
|
<el-option label="-" value="-" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="容量">
|
||||||
|
<div class="capacity-box">
|
||||||
|
<el-input v-model="bloodForm.capacity" placeholder="容量" style="flex: 1" />
|
||||||
|
<el-input v-model="bloodForm.unit" placeholder="单位" style="width: 60px" />
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="采血日期">
|
||||||
|
<el-date-picker v-model="bloodForm.pick_date" type="datetime" value-format="YYYY-MM-DD HH:mm:ss"
|
||||||
|
placeholder="采血日期" style="width: 100%" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="制备日期">
|
||||||
|
<el-date-picker v-model="bloodForm.produce_date" type="datetime"
|
||||||
|
value-format="YYYY-MM-DD HH:mm:ss" placeholder="制备日期" style="width: 100%" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="有效日期">
|
||||||
|
<el-date-picker v-model="bloodForm.valid_date" type="datetime"
|
||||||
|
value-format="YYYY-MM-DD HH:mm:ss" placeholder="有效日期" style="width: 100%" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="特别处理">
|
||||||
|
<el-input v-model="bloodForm.special_deal" placeholder="特别处理" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 中间:待入库血液列表 -->
|
||||||
|
<div class="mid-panel">
|
||||||
|
<div class="section-title">待入库血液 ({{ pendingList.length }})</div>
|
||||||
|
<el-table :data="pendingList" border highlight-current-row height="38vh">
|
||||||
|
<el-table-column type="index" label="序号" width="50" align="center" />
|
||||||
|
<el-table-column prop="blood_no" label="血液流水号" min-width="120" align="center" />
|
||||||
|
<el-table-column prop="blood_breed" label="血液品种" min-width="90" align="center">
|
||||||
|
<template #default="{ row }">
|
||||||
|
{{ formatBloodBreed(row.blood_breed) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="blood_type" label="血型" width="55" align="center" />
|
||||||
|
<el-table-column prop="rh_blood_type" label="Rh(D)" width="55" align="center" />
|
||||||
|
<el-table-column prop="capacity" label="容量" width="65" align="center" />
|
||||||
|
<el-table-column prop="unit" label="单位" width="55" align="center" />
|
||||||
|
</el-table>
|
||||||
|
<div class="panel-stat">
|
||||||
|
<BloodTypeStatTable :data="pendingList" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 操作按钮 -->
|
||||||
|
<div class="transfer-buttons">
|
||||||
|
<el-button type="primary" size="small" @click="handleMoveAllToScanned">>></el-button>
|
||||||
|
<el-button type="primary" size="small" @click="handleMoveAllToPending"><<</el-button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 右侧:已扫描血液列表 -->
|
||||||
|
<div class="right-panel">
|
||||||
|
<div class="section-title">已扫描血液 ({{ scannedList.length }})</div>
|
||||||
|
<el-table :data="scannedList" border highlight-current-row height="38vh">
|
||||||
|
<el-table-column type="index" label="序号" width="50" align="center" />
|
||||||
|
<el-table-column prop="blood_no" label="血液流水号" min-width="110" align="center" />
|
||||||
|
<el-table-column prop="product_no" label="产品码" min-width="100" align="center" />
|
||||||
|
<el-table-column prop="blood_breed" label="血液品种" min-width="90" align="center">
|
||||||
|
<template #default="{ row }">
|
||||||
|
{{ formatBloodBreed(row.blood_breed) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="blood_type" label="血型" width="55" align="center" />
|
||||||
|
<el-table-column prop="rh_blood_type" label="Rh(D)" width="55" align="center" />
|
||||||
|
<el-table-column prop="capacity" label="容量" width="65" align="center" />
|
||||||
|
<el-table-column prop="unit" label="单位" width="55" align="center" />
|
||||||
|
<el-table-column prop="remark" label="备注" min-width="80" align="center" />
|
||||||
|
</el-table>
|
||||||
|
<div class="panel-stat">
|
||||||
|
<BloodTypeStatTable :data="scannedList" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { Printer, Close } from '@element-plus/icons-vue'
|
||||||
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||||
|
import useUserStore from '@/store/modules/user'
|
||||||
|
import { useCommonDict } from '@/hooks'
|
||||||
|
import { getExistSQDList, getExistSQDInfo, saveAuditData, printInStorage } from '@/api/blood/auditInStorage'
|
||||||
|
import BloodTypeStatTable from '@/components/BloodTypeStatTable/index.vue'
|
||||||
|
|
||||||
|
const userInfo = useUserStore()
|
||||||
|
const { getServerTime, bloodBreed: bloodBreedList, getBloodList, userList, getUserData } = useCommonDict()
|
||||||
|
|
||||||
|
// 保存按钮 loading 状态
|
||||||
|
const saveLoading = ref(false)
|
||||||
|
// 选中的单据ID
|
||||||
|
const selectedBillId = ref<string>('')
|
||||||
|
// 送血单列表数据
|
||||||
|
const billList = ref<any[]>([])
|
||||||
|
// 送血单下拉框表格列配置
|
||||||
|
const billFields = [
|
||||||
|
{ prop: 'label', label: '单据编号', width: 160, enablePinyinSearch: true },
|
||||||
|
{ prop: 'value', label: '代号', width: 100, enablePinyinSearch: true },
|
||||||
|
]
|
||||||
|
// 血型选项
|
||||||
|
const bloodTypeOptions = [
|
||||||
|
{ label: 'A', value: 'A' },
|
||||||
|
{ label: 'B', value: 'B' },
|
||||||
|
{ label: 'O', value: 'O' },
|
||||||
|
{ label: 'AB', value: 'AB' }
|
||||||
|
]
|
||||||
|
// 取消血液复选框
|
||||||
|
const cancelBlood = ref(false)
|
||||||
|
// 取消血液输入的流水号
|
||||||
|
const cancelBloodNo = ref('')
|
||||||
|
// 待入库血液列表
|
||||||
|
const pendingList = ref<any[]>([])
|
||||||
|
// 已扫描血液列表
|
||||||
|
const scannedList = ref<any[]>([])
|
||||||
|
|
||||||
|
// 主表单数据
|
||||||
|
const mainForm = ref<any>({
|
||||||
|
bill_no: '',
|
||||||
|
occur_date: '',
|
||||||
|
storage_type: '审核入库',
|
||||||
|
handle_person: '',
|
||||||
|
out_bill_no: '',
|
||||||
|
remark: '',
|
||||||
|
})
|
||||||
|
|
||||||
|
// 血液信息表单
|
||||||
|
const bloodForm = ref<any>({
|
||||||
|
blood_no: '',
|
||||||
|
product_no: '',
|
||||||
|
blood_breed: '',
|
||||||
|
blood_type: '',
|
||||||
|
rh_blood_type: '+',
|
||||||
|
capacity: '',
|
||||||
|
unit: '',
|
||||||
|
pick_date: '',
|
||||||
|
produce_date: '',
|
||||||
|
valid_date: '',
|
||||||
|
special_deal: '',
|
||||||
|
})
|
||||||
|
|
||||||
|
/** 格式化血液品种代码为名称 */
|
||||||
|
const formatBloodBreed = (code: string) => {
|
||||||
|
const item = bloodBreedList.value.find((b: any) => b.value === code)
|
||||||
|
return item ? item.label : code
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 加载送血单列表 */
|
||||||
|
const loadBillList = async () => {
|
||||||
|
const res = await getExistSQDList()
|
||||||
|
billList.value = (res.data || []).map((item: any) => ({
|
||||||
|
label: item.sqd_no || item.bill_no || item.label,
|
||||||
|
value: item.sqd_id || item.id || item.value,
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 选择送血单后加载明细数据 */
|
||||||
|
const handleBillSelect = async (val: any) => {
|
||||||
|
if (!val) return
|
||||||
|
const res = await getExistSQDInfo({ sqdId: val })
|
||||||
|
if (res.data) {
|
||||||
|
const main = res.data.main || {}
|
||||||
|
mainForm.value = {
|
||||||
|
bill_no: main.bill_no || '',
|
||||||
|
occur_date: main.occur_date || '',
|
||||||
|
storage_type: '审核入库',
|
||||||
|
handle_person: main.handle_person || userInfo.name,
|
||||||
|
out_bill_no: main.out_bill_no || '',
|
||||||
|
remark: main.remark || '',
|
||||||
|
}
|
||||||
|
pendingList.value = res.data.bloodList || []
|
||||||
|
scannedList.value = []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 扫描血液流水号:在待入库列表中查找,找到则移到已扫描列表 */
|
||||||
|
const handleScanBlood = () => {
|
||||||
|
const bloodNo = bloodForm.value.blood_no?.trim()
|
||||||
|
if (!bloodNo) return
|
||||||
|
|
||||||
|
const index = pendingList.value.findIndex(item => item.blood_no === bloodNo)
|
||||||
|
if (index === -1) {
|
||||||
|
ElMessage.warning('当前血液列表中无此血液!')
|
||||||
|
bloodForm.value.blood_no = ''
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 从待入库移除,放入已扫描
|
||||||
|
const removed = pendingList.value.splice(index, 1)
|
||||||
|
scannedList.value.push(removed[0])
|
||||||
|
bloodForm.value.blood_no = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 取消血液:通过血液流水号从已扫描列表中移除 */
|
||||||
|
const handleCancelBlood = () => {
|
||||||
|
const bloodNo = cancelBloodNo.value.trim()
|
||||||
|
if (!bloodNo) return
|
||||||
|
|
||||||
|
const index = scannedList.value.findIndex(item => item.blood_no === bloodNo)
|
||||||
|
if (index === -1) {
|
||||||
|
ElMessage.warning('已扫描列表中不存在该血液流水号')
|
||||||
|
} else {
|
||||||
|
const removed = scannedList.value.splice(index, 1)
|
||||||
|
pendingList.value.push(removed[0])
|
||||||
|
ElMessage.success('已取消血液: ' + bloodNo)
|
||||||
|
}
|
||||||
|
cancelBloodNo.value = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 全部移入已扫描:把待入库血液全部放入已扫描列表 */
|
||||||
|
const handleMoveAllToScanned = () => {
|
||||||
|
if (pendingList.value.length === 0) {
|
||||||
|
ElMessage.warning('待入库列表为空')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
scannedList.value.push(...pendingList.value)
|
||||||
|
pendingList.value = []
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 全部退回待入库:把已扫描血液全部放回待入库列表 */
|
||||||
|
const handleMoveAllToPending = () => {
|
||||||
|
if (scannedList.value.length === 0) {
|
||||||
|
ElMessage.warning('已扫描列表为空')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ElMessageBox.confirm('确定要将所有已扫描血液退回到待入库列表吗?', '批量操作确认', {
|
||||||
|
type: 'warning',
|
||||||
|
}).then(() => {
|
||||||
|
pendingList.value.push(...scannedList.value)
|
||||||
|
scannedList.value = []
|
||||||
|
}).catch(() => { })
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 保存入库 */
|
||||||
|
const handleSave = async () => {
|
||||||
|
if (!mainForm.value.handle_person) {
|
||||||
|
return ElMessage.warning('请选择经手人')
|
||||||
|
}
|
||||||
|
|
||||||
|
// 待入库列表有数据时提醒用户
|
||||||
|
if (pendingList.value.length > 0) {
|
||||||
|
try {
|
||||||
|
await ElMessageBox.confirm(
|
||||||
|
'有待入库的血液没有操作,是否继续?如果继续,将会把待入库血液列入到异常血液当中',
|
||||||
|
'提示',
|
||||||
|
{ type: 'warning' }
|
||||||
|
)
|
||||||
|
} catch {
|
||||||
|
return // 用户取消
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = {
|
||||||
|
main: mainForm.value,
|
||||||
|
scannedList: scannedList.value,
|
||||||
|
pendingList: pendingList.value,
|
||||||
|
}
|
||||||
|
|
||||||
|
saveLoading.value = true
|
||||||
|
try {
|
||||||
|
const res = await saveAuditData(data)
|
||||||
|
if (res.code === 0 || res.code === 200) {
|
||||||
|
ElMessage.success(res.msg || '保存入库成功')
|
||||||
|
resetPage()
|
||||||
|
} else {
|
||||||
|
ElMessage.error(res.msg || '保存失败')
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
saveLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 打印入库单 */
|
||||||
|
const handlePrint = () => {
|
||||||
|
if (!mainForm.value.bill_no) {
|
||||||
|
return ElMessage.warning('请先选择单据')
|
||||||
|
}
|
||||||
|
printInStorage({ billNo: mainForm.value.bill_no })
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 关闭页面 */
|
||||||
|
const handleClose = () => {
|
||||||
|
ElMessageBox.confirm('确定关闭当前页面吗?未保存的数据将丢失', '提示', {
|
||||||
|
type: 'warning',
|
||||||
|
}).then(() => {
|
||||||
|
resetPage()
|
||||||
|
}).catch(() => { })
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置页面:清空所有列表和表单 */
|
||||||
|
const resetPage = () => {
|
||||||
|
mainForm.value = {
|
||||||
|
bill_no: '',
|
||||||
|
occur_date: '',
|
||||||
|
storage_type: '审核入库',
|
||||||
|
handle_person: userInfo.name,
|
||||||
|
out_bill_no: '',
|
||||||
|
remark: '',
|
||||||
|
}
|
||||||
|
bloodForm.value = {
|
||||||
|
blood_no: '',
|
||||||
|
product_no: '',
|
||||||
|
blood_breed: '',
|
||||||
|
blood_type: '',
|
||||||
|
rh_blood_type: '+',
|
||||||
|
capacity: '',
|
||||||
|
unit: '',
|
||||||
|
pick_date: '',
|
||||||
|
produce_date: '',
|
||||||
|
valid_date: '',
|
||||||
|
special_deal: '',
|
||||||
|
}
|
||||||
|
selectedBillId.value = ''
|
||||||
|
pendingList.value = []
|
||||||
|
scannedList.value = []
|
||||||
|
cancelBlood.value = false
|
||||||
|
cancelBloodNo.value = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getBloodList()
|
||||||
|
getUserData()
|
||||||
|
loadBillList()
|
||||||
|
// 设置默认经手人
|
||||||
|
mainForm.value.handle_person = userInfo.name
|
||||||
|
// 获取服务器时间
|
||||||
|
getServerTime().then((time: string) => {
|
||||||
|
mainForm.value.occur_date = time
|
||||||
|
})
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.audit-in-storage {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
padding: 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toolbar {
|
||||||
|
flex: none;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 8px 12px;
|
||||||
|
background: #f5f7fa;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
|
||||||
|
.toolbar-left {
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-section {
|
||||||
|
flex: none;
|
||||||
|
padding: 10px 15px;
|
||||||
|
background: #fafbfc;
|
||||||
|
border: 1px solid #ebeef5;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #303133;
|
||||||
|
padding: 0 0 6px 10px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
border-bottom: 1px solid #ebeef5;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
bottom: 7px;
|
||||||
|
width: 4px;
|
||||||
|
height: 14px;
|
||||||
|
background-color: #409eff;
|
||||||
|
border-radius: 0 4px 4px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkbox-row {
|
||||||
|
flex: none;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 20px;
|
||||||
|
padding: 8px 15px;
|
||||||
|
background: #fafbfc;
|
||||||
|
border: 1px solid #ebeef5;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-content {
|
||||||
|
flex: 1;
|
||||||
|
min-height: 0;
|
||||||
|
display: flex;
|
||||||
|
gap: 10px;
|
||||||
|
align-items: stretch;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.left-panel {
|
||||||
|
width: 260px;
|
||||||
|
flex: 0 0 260px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
background: #fafbfc;
|
||||||
|
border: 1px solid #ebeef5;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 10px;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mid-panel {
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
background: #fafbfc;
|
||||||
|
border: 1px solid #ebeef5;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right-panel {
|
||||||
|
flex: 1.2;
|
||||||
|
min-width: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
background: #fafbfc;
|
||||||
|
border: 1px solid #ebeef5;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel-stat {
|
||||||
|
flex: none;
|
||||||
|
margin-top: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.transfer-buttons {
|
||||||
|
flex: 0 0 44px;
|
||||||
|
width: 44px;
|
||||||
|
margin-top: 45px;
|
||||||
|
margin-bottom: 80px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
gap: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.transfer-buttons .el-button {
|
||||||
|
width: 36px !important;
|
||||||
|
min-width: 36px !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.capacity-box {
|
||||||
|
display: flex;
|
||||||
|
gap: 6px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-form-item) {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.left-panel .el-form-item__label) {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.form-section .el-form-item__label) {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Loading…
x
Reference in New Issue
Block a user