feat: 移库新模板

This commit is contained in:
zouzhiwen 2026-03-31 15:47:52 +08:00
parent 1b6de57cc4
commit 6838d454b0
3 changed files with 64 additions and 2 deletions

View File

@ -79,6 +79,10 @@ export function generateMoveBatch(data: MoveReq[]) {
return request.post<never, { code: number; data: Record<string, string> }>(`${BASE}/moveBatch`, data) return request.post<never, { code: number; data: Record<string, string> }>(`${BASE}/moveBatch`, data)
} }
export function generateMoveBatchNew(data: MoveReq[]) {
return request.post<never, { code: number; data: Record<string, string> }>(`${BASE}/moveBatchNew`, data)
}
export function generateRelease(data: ReleaseReq) { export function generateRelease(data: ReleaseReq) {
return request.post<never, { code: number; data: boolean }>(`${BASE}/release`, data) return request.post<never, { code: number; data: boolean }>(`${BASE}/release`, data)
} }

View File

@ -195,6 +195,28 @@
</el-form> </el-form>
</div> </div>
<!-- 批量移库(新模版) -->
<div v-show="isPanel('moveNew')" class="gen-form-wrap">
<el-form :model="moveNewForm" :label-width="formLabelWidth" :label-position="labelPos" class="gen-form">
<el-row :gutter="gutter">
<el-col :span="colSpan"><el-form-item label="仓库编码" required><el-input v-model="moveNewForm.warehouse" /></el-form-item></el-col>
<el-col :span="colSpan"><el-form-item label="目标类型"><el-select v-model="moveNewForm.targetType" clearable placeholder="请选择" style="width: 100%"><el-option v-for="t in targetTypes" :key="t.value" :label="t.label" :value="t.value" /></el-select></el-form-item></el-col>
<el-col :span="colSpan"><el-form-item label="目标编码"><el-input v-model="moveNewForm.targetCode" /></el-form-item></el-col>
<el-col :span="colSpan"><el-form-item label="指定楼层"><el-input-number v-model="moveNewForm.targetLevel" :min="1" :max="6" :controls="false" clearable placeholder="选填" style="width: 100%" /></el-form-item></el-col>
<el-col :span="colSpan"><el-form-item label="业务追踪号"><el-input v-model="moveNewForm.businessNo" /></el-form-item></el-col>
<el-col :span="colSpan"><el-form-item label="优先级"><el-input-number v-model="moveNewForm.priority" :min="0" :controls="false" style="width: 100%" /></el-form-item></el-col>
<el-col :span="24">
<el-form-item label="容器编码" required>
<el-input v-model="moveNewForm.containerBatch" type="textarea" :rows="6" placeholder="支持批量输入,每行一个或使用逗号、空格分隔" />
</el-form-item>
</el-col>
</el-row>
<el-form-item>
<el-button type="primary" :loading="loading" @click="handleMoveBatchNew" :style="isMobile ? 'width:100%' : ''">提交批量移库(新模版)</el-button>
</el-form-item>
</el-form>
</div>
<!-- 释放信号 --> <!-- 释放信号 -->
<div v-show="isPanel('release')" class="gen-form-wrap"> <div v-show="isPanel('release')" class="gen-form-wrap">
<el-form :model="releaseForm" :label-width="formLabelWidth" :label-position="labelPos" class="gen-form"> <el-form :model="releaseForm" :label-width="formLabelWidth" :label-position="labelPos" class="gen-form">
@ -294,6 +316,7 @@ import {
generateCancel, generateCancel,
generateInbound, generateInbound,
generateMoveBatch, generateMoveBatch,
generateMoveBatchNew,
generateOutboundNoWait, generateOutboundNoWait,
generateOutboundNoWaitNew, generateOutboundNoWaitNew,
generateOutboundWait, generateOutboundWait,
@ -327,6 +350,7 @@ const taskTypeNavItems: { key: string; label: string }[] = [
{ key: 'outboundNoWait', label: '出库(不等待)' }, { key: 'outboundNoWait', label: '出库(不等待)' },
{ key: 'outboundNoWaitNew', label: '直出模式(新模版)' }, { key: 'outboundNoWaitNew', label: '直出模式(新模版)' },
{ key: 'move', label: '移库' }, { key: 'move', label: '移库' },
{ key: 'moveNew', label: '批量移库(新模版)' },
{ key: 'release', label: '释放信号' }, { key: 'release', label: '释放信号' },
{ key: 'bindStation', label: '绑定站点' }, { key: 'bindStation', label: '绑定站点' },
{ key: 'releaseStation', label: '解绑站点' }, { key: 'releaseStation', label: '解绑站点' },
@ -382,6 +406,10 @@ const moveForm = reactive({
warehouse: '', containerBatch: '', warehouse: '', containerBatch: '',
targetType: undefined as string | undefined, targetCode: '', targetLevel: undefined as number | undefined, businessNo: '', priority: undefined as number | undefined, targetType: undefined as string | undefined, targetCode: '', targetLevel: undefined as number | undefined, businessNo: '', priority: undefined as number | undefined,
}) })
const moveNewForm = reactive({
warehouse: '', containerBatch: '',
targetType: undefined as string | undefined, targetCode: '', targetLevel: undefined as number | undefined, businessNo: '', priority: undefined as number | undefined,
})
const releaseForm = reactive<ReleaseReq>({ warehouse: '', container: '', taskChainCode: '' }) const releaseForm = reactive<ReleaseReq>({ warehouse: '', container: '', taskChainCode: '' })
const bindForm = reactive<BindStationReq>({ warehouse: '', container: '', station: '' }) const bindForm = reactive<BindStationReq>({ warehouse: '', container: '', station: '' })
@ -485,6 +513,35 @@ async function handleMoveBatch() {
} }
} }
async function handleMoveBatchNew() {
if (!moveNewForm.warehouse) {
return ElMessage.warning('请填写仓库编码')
}
const containers = parseContainerBatch(moveNewForm.containerBatch)
if (containers.length === 0) {
return ElMessage.warning('请填写至少一个容器编码')
}
const list: MoveReq[] = containers.map(container => ({
warehouse: moveNewForm.warehouse,
container,
targetType: moveNewForm.targetType,
targetCode: moveNewForm.targetCode,
targetLevel: moveNewForm.targetLevel,
businessNo: moveNewForm.businessNo,
priority: moveNewForm.priority,
}))
loading.value = true
try {
const res = await generateMoveBatchNew(list)
showResult('批量移库(新模版)任务链已创建', 'success', res.data)
ElMessage.success(`已创建 ${containers.length} 条批量移库(新模版)任务链`)
} catch (e) {
showResult('批量移库(新模版)失败', 'error', e)
} finally {
loading.value = false
}
}
async function handleRelease() { async function handleRelease() {
if (!releaseForm.taskChainCode || !releaseForm.warehouse) { if (!releaseForm.taskChainCode || !releaseForm.warehouse) {
return ElMessage.warning('请填写任务链编号和仓库编码') return ElMessage.warning('请填写任务链编号和仓库编码')
@ -849,7 +906,8 @@ async function handleBusinessCancel() {
} }
.gen-type-nav { .gen-type-nav {
max-height: 240px; /* 条目较多时需留出可视高度,避免「移库」以下选项被裁切误以为未上线 */
max-height: min(58vh, 440px);
flex-direction: row; flex-direction: row;
flex-wrap: wrap; flex-wrap: wrap;
gap: 8px; gap: 8px;

View File

@ -620,7 +620,7 @@ async function handleForceStatus(task: TaskVO, targetStatus: string) {
const typeMap: Record<string, string> = { const typeMap: Record<string, string> = {
INBOUND: '入库', QUICK_PALLET_INBOUND: '托盘快速入库', INBOUND: '入库', QUICK_PALLET_INBOUND: '托盘快速入库',
OUTBOUND: '出库', OUTBOUND_NEW: '拣货出库(新模版)', OUTBOUND: '出库', OUTBOUND_NEW: '拣货出库(新模版)',
OUTBOUND_NO_WAIT: '出库(不等待)', OUTBOUND_NO_WAIT_NEW: '直出模式(新模版)', MOVE: '移库', OUTBOUND_NO_WAIT: '出库(不等待)', OUTBOUND_NO_WAIT_NEW: '直出模式(新模版)', MOVE: '移库', MOVE_NEW: '移库(新模版)',
} }
function timelineType(status: string) { function timelineType(status: string) {
const map: Record<string, string> = { const map: Record<string, string> = {