Files
zgty-mas-m/pages/sampleWarehouse/sampleDispatchInternal/index.vue
2025-11-21 17:56:33 +08:00

147 lines
4.3 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<navbar-back title="样品调拨"></navbar-back>
<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>
</view>
<view class="border-b p6 x-f"
><view class="pr16">库管员</view><text>{{ userInfo.nickname }}</text></view
>
<up-input
style="padding-top: 20px"
border="bottom"
v-model="sampleCode"
placeholder="请扫描需要调拨的样品编号"
prefixIcon="scan"
fontSize="16"
prefixIconStyle="font-size: 30px;"
@confirm="getScanSample"
>
</up-input>
<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>
<uni-card margin="5px" v-for="item in sampleList" class="sample-item">
<view
>样品名称<text class="black">{{ item.sampleName }}</text></view
>
<view class="mt4"
>归库编码<text class="black">{{ item.sampleReturnCode }}</text></view
>
<view class="mt4"
>样品库名称<text class="black">{{ item.warehouseName }}</text></view
>
<view class="mt4"
>库位码<text class="black">{{ item.warehouseLocationCode }}</text></view
>
</uni-card>
</scroll-view>
<up-button type="primary" :loading="btnLoading" style="width: 50%" text="提交" @click="handleSubmit"></up-button>
</uni-section>
</view>
</template>
<script setup>
import { computed, ref, toRefs, watch, onMounted } from 'vue'
import nx from '@/nx'
import { onLoad, onShow } from '@dcloudio/uni-app'
const btnLoading = ref(false)
let sampleCode = ref('')
let sampleList = ref([])
const range = ref([])
const userInfo = computed(() => nx.$store('user').userInfo)
const receiverId = ref('')
const { scanQRInfo } = toRefs(nx.$store('biz'))
watch(scanQRInfo, newVal => {
debouncedHandleScan(newVal)
})
const debouncedHandleScan = debounce(val => {
if (!val) return
scanQRInfo.value = ''
if (nx.$router.getCurrentPage().route !== 'pages/sampleWarehouse/sampleDispatchInternal/index') return
try {
sampleCode.value = val
getScanSample()
} catch (error) {
uni.showToast({
title: '请扫描正确的样品编码',
icon: 'none'
})
}
}, 300)
onShow(() => {
scanQRInfo.value = ''
})
let dispatchTempId = ref('')
// 创建临时数据
async function createDispatchTempData() {
const data = await nx.$api.sampleWarehouse.createDispatchTempData()
dispatchTempId.value = data.id
}
async function getScanSample() {
if (sampleCode.value === '') return
await nx.$api.sampleWarehouse.addDispatchSample({ id: dispatchTempId.value, sampleReturnCode: sampleCode.value })
getSampleList()
}
async function getSampleList() {
const { list } = await nx.$api.sampleWarehouse.querySampleDispatchApplyDetail({
pageSize: 999,
pageNo: 1,
parentId: dispatchTempId.value
})
sampleList.value = list
}
async function handleSubmit() {
if (receiverId.value === '') {
return uni.showToast({
title: '请选择样品领取人',
icon: 'none'
})
}
btnLoading.value = true
const receiver = range.value.find(item => item.value === receiverId.value)?.nickname
await nx.$api.sampleWarehouse
.execSampleDispatch({
id: dispatchTempId.value,
applyUserId: receiverId.value,
applyUser: receiver
})
.finally(() => {
btnLoading.value = false
})
uni.showToast({
title: '调拨成功',
icon: 'none'
})
}
function handleReset() {
sampleCode.value = ''
sampleList.value = []
createDispatchTempData()
}
onMounted(async () => {
const data = await nx.$api.user.getAssignUserList()
range.value = data.map(item => ({ text: item.nickname, value: item.id }))
handleReset()
})
</script>
<style lang="scss" scoped>
.sample-item {
position: relative;
pointer-events: none;
.item-checkbox {
position: absolute;
right: 5px;
top: 5px;
}
}
:deep(.uni-select__input-placeholder) {
font-size: 16px;
}
</style>