feat: upgrade adjustment workflow to require explicit inbound SKU or outbound tracking number and fix UTC timezone issue
This commit is contained in:
@ -95,6 +95,7 @@
|
||||
<el-option label="销售出库" value="SALES" />
|
||||
<el-option label="内部领用" value="USE" />
|
||||
<el-option label="调拨出库" value="TRANSFER" />
|
||||
<el-option label="盘亏出库" value="LOSS" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
@ -43,6 +43,18 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="reason" label="调整原因" min-width="150" show-overflow-tooltip />
|
||||
<el-table-column prop="linked_sku" label="关联SKU" width="120" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.adjust_type === 'profit'">{{ row.linked_sku || '-' }}</span>
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="linked_outbound_no" label="关联出库单" width="140" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.adjust_type === 'loss'">{{ row.linked_outbound_no || '-' }}</span>
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="operator" label="操作人" width="100" />
|
||||
<el-table-column prop="status" label="状态" width="90" align="center">
|
||||
<template #default="{ row }">
|
||||
@ -52,6 +64,14 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="create_time" label="创建时间" width="160" />
|
||||
<el-table-column label="操作" width="100" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-if="row.status === 'pending' && userStore.hasPermission('stock_adjustment:operation')" type="primary" link @click="openProcessDialog(row)">
|
||||
处理
|
||||
</el-button>
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!-- 分页 -->
|
||||
@ -173,6 +193,30 @@
|
||||
</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 处理调整单弹窗 -->
|
||||
<el-dialog v-model="showProcessDialog" title="处理调整单" width="500px" :close-on-click-modal="false">
|
||||
<el-form label-width="120px">
|
||||
<el-form-item label="调整单号">
|
||||
<el-input v-model="processForm.order_no" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="调整类型">
|
||||
<el-tag :type="processForm.adjust_type === 'profit' ? 'success' : 'danger'">
|
||||
{{ processForm.adjust_type === 'profit' ? '盘盈' : '盘亏' }}
|
||||
</el-tag>
|
||||
</el-form-item>
|
||||
<el-form-item :label="processForm.adjust_type === 'profit' ? '关联入库SKU' : '关联出库单号'">
|
||||
<el-input
|
||||
v-model="processForm.linked_value"
|
||||
:placeholder="processForm.adjust_type === 'profit' ? '请输入已入库的SKU' : '请输入对应的出库单号'"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="showProcessDialog = false">取消</el-button>
|
||||
<el-button type="primary" @click="handleProcessSubmit" :loading="processLoading">确认处理</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -233,6 +277,68 @@ const selectedReviewRows = ref<any[]>([])
|
||||
const reviewTableRef = ref()
|
||||
const importLoading = ref(false)
|
||||
|
||||
// 处理调整单
|
||||
const showProcessDialog = ref(false)
|
||||
const processLoading = ref(false)
|
||||
const processForm = ref({
|
||||
id: null as number | null,
|
||||
order_no: '',
|
||||
adjust_type: '',
|
||||
linked_value: ''
|
||||
})
|
||||
|
||||
// 打开处理弹窗
|
||||
function openProcessDialog(row: any) {
|
||||
processForm.value = {
|
||||
id: row.id,
|
||||
order_no: row.order_no,
|
||||
adjust_type: row.adjust_type,
|
||||
linked_value: ''
|
||||
}
|
||||
showProcessDialog.value = true
|
||||
}
|
||||
|
||||
// 提交处理
|
||||
async function handleProcessSubmit() {
|
||||
if (!processForm.value.id) return
|
||||
|
||||
if (processForm.value.adjust_type === 'profit' && !processForm.value.linked_value) {
|
||||
ElMessage.warning('请输入已入库的SKU')
|
||||
return
|
||||
}
|
||||
if (processForm.value.adjust_type === 'loss' && !processForm.value.linked_value) {
|
||||
ElMessage.warning('请输入对应的出库单号')
|
||||
return
|
||||
}
|
||||
|
||||
processLoading.value = true
|
||||
try {
|
||||
const data: any = {}
|
||||
if (processForm.value.adjust_type === 'profit') {
|
||||
data.linked_sku = processForm.value.linked_value
|
||||
} else {
|
||||
data.linked_outbound_no = processForm.value.linked_value
|
||||
}
|
||||
|
||||
const res = await request({
|
||||
url: `/v1/stock/adjustment/${processForm.value.id}/process`,
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
if (res.code === 200) {
|
||||
ElMessage.success('处理成功')
|
||||
showProcessDialog.value = false
|
||||
fetchData()
|
||||
} else {
|
||||
ElMessage.error(res.msg || '处理失败')
|
||||
}
|
||||
} catch (e) {
|
||||
ElMessage.error('处理失败')
|
||||
} finally {
|
||||
processLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// 获取盘点差异列表
|
||||
async function fetchReviewList() {
|
||||
reviewLoading.value = true
|
||||
|
||||
Reference in New Issue
Block a user