feat:样品库管理

This commit is contained in:
houjunxiang
2025-11-27 18:04:49 +08:00
parent 6c86dc0760
commit 1bcfde72ee
6 changed files with 75 additions and 21 deletions

View File

@@ -77,5 +77,11 @@ export default {
url: 'qms/business-sub-sample/execTakeOff',
method: 'POST',
data
}),
// 根据权限查询样品库
querySampleLocation: () =>
request({
url: '/qms/config-warehouse-location/selectListWithPermission',
method: 'GET'
})
}

View File

@@ -24,21 +24,21 @@
<template #right> <up-text type="error" size="18" bold :text="sampleList.length"></up-text></template>
<scroll-view style="height: 49vh" scroll-y scroll-with-animation>
<uni-card margin="5px" v-for="item in sampleList" class="sample-item">
<view class="x-bc">
<view
>样品名称<text class="black">{{ item.sampleName }}</text></view
>
<view
>调拨人<text class="black">{{ item.borrowUser }}</text></view
>
</view>
<view class="x-bc">
<view
>样品编号<text class="black">{{ item.sampleReturnCode }}</text></view
>
<view
>调拨时间<text class="black">{{ nx.$dayjs(item.borrowTime).format('YYYY-MM-DD HH:mm:ss') }}</text></view
>
<view class="mt8">
<view
>样品名称<text class="black">{{ item.sampleName }}</text></view
>
</view>
<view class="mt4">
<view
>样品编号<text class="black">{{ item.sampleReturnCode }}</text></view
>
</view>
<view class="mt4"
>归库编码<text class="black">{{ item.sampleReturnCode }}</text></view

View File

@@ -96,7 +96,7 @@ watch(changeCode, newVal => {
})
async function getSampleList() {
if (changeCode.value === '') return
let params = { pageSize: 999, pageNo: 1, returnStatus: 'completed' }
let params = { pageSize: 999, pageNo: 1, returnStatus: 'completed', sampleFlowNodeKey: 'flw_sample_storage' }
if (changeType.value === 'sample') {
params.sampleReturnCode = changeCode.value
} else {

View File

@@ -3,7 +3,21 @@
<view class="pl8 pr8 pt8">
<view class="x-f">
<text class="pl6">领取人</text>
<uni-data-select v-model="receiverId" :localdata="range" placeholder="请选择样品领取人"></uni-data-select>
<uni-data-select
v-model="receiverId"
:localdata="assignUserRange"
placeholder="请选择样品领取人"
:clear="false"
></uni-data-select>
</view>
<view class="x-f mt10 mb10" v-if="warehouseRange.length > 1">
<text class="pl20">仓库</text>
<uni-data-select
v-model="warehouseCode"
:clear="false"
:localdata="warehouseRange"
placeholder="请选择仓库"
></uni-data-select>
</view>
<view class="border-b p6 x-f"
><view class="pr16">库管员</view><text>{{ userInfo.nickname }}</text></view
@@ -22,7 +36,7 @@
<uni-section v-if="sampleList.length > 0" type="line" title="调拨样品明细" titleFontSize="15px">
<template #right> <up-text type="error" size="18" bold :text="sampleList.length"></up-text></template>
<scroll-view style="height: 49vh" scroll-y scroll-with-animation>
<scroll-view style="height: 44vh" scroll-y scroll-with-animation>
<uni-card margin="5px" v-for="item in sampleList" class="sample-item">
<view
>样品名称<text class="black">{{ item.sampleName }}</text></view
@@ -52,7 +66,7 @@ import { debounce } from 'lodash'
const btnLoading = ref(false)
let sampleCode = ref('')
let sampleList = ref([])
const range = ref([])
const assignUserRange = ref([])
const userInfo = computed(() => nx.$store('user').userInfo)
const receiverId = ref('')
const { scanQRInfo } = toRefs(nx.$store('biz'))
@@ -85,7 +99,11 @@ async function createDispatchTempData() {
}
async function getScanSample() {
if (sampleCode.value === '') return
await nx.$api.sampleWarehouse.addDispatchSample({ id: dispatchTempId.value, sampleReturnCode: sampleCode.value })
await nx.$api.sampleWarehouse.addDispatchSample({
id: dispatchTempId.value,
sampleReturnCode: sampleCode.value,
warehouseCode: warehouseCode.value
})
getSampleList()
}
async function getSampleList() {
@@ -104,7 +122,7 @@ async function handleSubmit() {
})
}
btnLoading.value = true
const receiver = range.value.find(item => item.value === receiverId.value)?.text
const receiver = assignUserRange.value.find(item => item.value === receiverId.value)?.text
await nx.$api.sampleWarehouse
.execSampleDispatch({
id: dispatchTempId.value,
@@ -130,9 +148,22 @@ function handleReset() {
sampleList.value = []
createDispatchTempData()
}
onMounted(async () => {
const data = await nx.$api.user.getAssignUserList()
range.value = data.map(item => ({ text: item.nickname, value: item.id }))
const warehouseRange = ref([])
const warehouseCode = ref('')
function getWarehouseRange() {
nx.$api.sampleWarehouse.querySampleLocation({ warehouseType: '样品库' }).then(res => {
warehouseRange.value = res.map(item => ({ text: item.name, value: item.code }))
warehouseCode.value = res[0].code
})
}
function getAssignUserRange() {
nx.$api.user.getAssignUserList().then(res => {
assignUserRange.value = res.map(item => ({ text: item.nickname, value: item.id }))
})
}
onMounted(() => {
getAssignUserRange()
getWarehouseRange()
handleReset()
})
</script>

View File

@@ -23,6 +23,15 @@
>样品名称<text>{{ sampleData.sampleName }}</text></view
>
<up-tag
v-if="sampleData.dispatchStatus == 1"
plain
plainFill
size="mini"
type="info"
text="已调拨"
></up-tag>
<up-tag
v-else
plain
plainFill
size="mini"
@@ -30,9 +39,9 @@
:text="sampleData.returnStatus_dictText"
></up-tag>
</view>
<view
>样品编号<text>{{ sampleData.sampleCode }}</text></view
>
<view class="mt4">
样品编号<text>{{ sampleData.sampleCode }}</text>
</view>
<view class="mt4"
>归库编码<text>{{ sampleData.sampleReturnCode }}</text></view
>
@@ -94,6 +103,7 @@ async function getSampleDetail() {
sampleData.value = {}
const { list } = await nx.$api.sampleWarehouse.queryReturnToStockSample({
sampleReturnCode: sampleCode.value,
sampleFlowNodeKey: 'flw_sample_storage',
pageSize: 10,
pageNo: 1
})

View File

@@ -118,12 +118,19 @@ onShow(() => {
async function getSampleList() {
if (targetCode.value === '') return
let params = { pageSize: 999, pageNo: 1, returnStatus: 'completed', dispatchStatus: '0' }
let params = {
pageSize: 999,
pageNo: 1,
returnStatus: 'completed',
dispatchStatus: '0',
sampleFlowNodeKey: 'flw_sample_storage'
}
if (takeOffType.value === 'sample') {
params.sampleReturnCode = targetCode.value
} else {
params.warehouseLocationCode = targetCode.value
}
sampleList.value = []
const { list } = await nx.$api.sampleWarehouse.queryReturnToStockSample(params)
if (list.length === 0) {
return uni.showToast({ title: '未查询到该样品信息', icon: 'none' })