Commit 63026784 by qinjianhui

feat: 备货完成功能开发

parent e212c47d
......@@ -81,3 +81,35 @@ export function submitStockingOrderAuditApi(ids: string) {
},
)
}
export function rejectedStockingOrderApi(params: {
id: number | string
turnDownReason: string
}) {
return axios.get<never, BaseRespData<void>>(
'factory/supply/stockingUpManage/rejected',
{
params,
},
)
}
export function supplierDispatchApi(data: {
manageId: number | string
manageNo: string
warehouseId: number | string
warehouseName: string
expectDeliveryTime: string
detailsList: StockingOrderProduct[]
}) {
return axios.post<never, BaseRespData<void>>(
'factory/supply/stockingUpWarehouseApply/add',
data,
)
}
export function stockingCompleteApi(id: number) {
return axios.get<never, BaseRespData<void>>(
`factory/supply/stockingUpManage/delivery?id=${id}`,
)
}
......@@ -83,7 +83,10 @@ export interface AddStockingOrderForm {
currencyName?: string
remark?: string
status?: number
submission?: boolean
detailsList?: StockingOrderProduct[]
examineStatus?: number // 审核状态:1通过,0驳回
rejectReason?: string // 驳回原因
}
// 备货单商品
......@@ -99,6 +102,10 @@ export interface StockingOrderProduct {
currencyName?: string
totalPrice?: number | string
shipmentQuantity?: number | string
buyStored?: number
// 供应商发货相关字段
remainingQuantity?: number // 剩余待发货数量
currentShipQuantity?: number | string // 本次发货数量
}
export interface RelatedDocumentList {}
......
......@@ -228,7 +228,7 @@
v-if="editOrderType === 'add' || editOrderType === 'edit'"
size="large"
type="primary"
@click="handleSave"
@click="handleSave(false)"
>保存</ElButton
>
<ElButton
......@@ -243,10 +243,14 @@
v-if="editOrderType === 'audit'"
size="large"
type="success"
@click="handleSave"
@click="handleSave(false)"
>审核通过</ElButton
>
<ElButton v-if="editOrderType === 'audit'" size="large" type="danger"
<ElButton
v-if="editOrderType === 'audit'"
size="large"
type="danger"
@click="handleReject"
>审核驳回</ElButton
>
</div>
......@@ -268,6 +272,7 @@ import {
addStockingOrderApi,
getProductBySkuApi,
getStockingOrderDetailByIdApi,
rejectedStockingOrderApi,
} from '@/api/stockingOrder'
import ImageView from '@/components/ImageView.vue'
import { BigNumber } from 'bignumber.js'
......@@ -528,7 +533,7 @@ const handleCancel = () => {
visible.value = false
}
const handleSave = async () => {
const handleSave = async (isSubmit: boolean = false) => {
if (!formRef.value) return
try {
......@@ -573,6 +578,7 @@ const handleSave = async () => {
warehouseName,
stockingUpUserName,
totalPrice: totalAmount.value,
submission: props.editOrderType === 'audit' ? undefined : isSubmit,
})
if (res.code !== 200) {
ElMessage.warning(res.message)
......@@ -588,7 +594,52 @@ const handleSave = async () => {
}
}
const handleSaveAndSubmit = async () => {}
const handleSaveAndSubmit = async () => {
await handleSave(true)
}
const handleReject = async () => {
if (!props.editId) return
try {
const { value: rejectReason } = await ElMessageBox.prompt(
'请输入驳回原因',
'审核驳回',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
inputType: 'textarea',
inputPlaceholder: '请输入驳回原因',
inputValidator: (val) => {
if (!val || !val.trim()) {
return '驳回原因不能为空'
}
return true
},
},
)
const loading = ElLoading.service({
lock: true,
text: '加载中...',
background: 'rgba(0, 0, 0, 0.7)',
})
try {
const res = await rejectedStockingOrderApi({
id: props.editId,
turnDownReason: rejectReason.trim(),
})
if (res.code !== 200) return
ElMessage.success('驳回成功')
emit('refresh')
visible.value = false
} finally {
loading.close()
}
} catch {
// 用户取消操作,不做处理
}
}
const resetForm = () => {
formRef.value?.resetFields()
......
<template>
<ElDialog
v-model="visible"
title="供应商发货"
width="1400px"
top="15vh"
:close-on-click-modal="false"
destroy-on-close
>
<div
class="supplier-dispatch-order-page card h-100 flex overflow-hidden"
></div>
</ElDialog>
</template>
<script setup lang="tsx">
const props = defineProps<{
visible: boolean
}>()
const emit = defineEmits<{
(e: 'update:visible', value: boolean): void
(e: 'refresh'): void
}>()
const visible = computed({
get: () => props.visible,
set: (val) => emit('update:visible', val),
})
</script>
......@@ -161,9 +161,7 @@
>提交审核</ElButton
>
</span>
<span v-if="status === 'STOCKING_UP'" class="item">
<ElButton type="warning">备货完成</ElButton>
</span>
<span class="item">
<ElButton type="success">添加内部便签</ElButton>
</span>
......@@ -221,9 +219,10 @@
:edit-id="selectedRow?.id"
@refresh="onRefresh"
/>
<SupplierDispatchOrder
<SupplierDispatchOrderDialog
v-model:visible="supplierDispatchOrderVisible"
:selected-row="selectedRow"
:warehouse-list="warehouseList"
@refresh="onRefresh"
/>
</div>
......@@ -232,12 +231,13 @@
import { computed, ref } from 'vue'
import {
getStockingOrderListApi,
stockingCompleteApi,
submitStockingOrderAuditApi,
} from '@/api/stockingOrder'
import TableView from '@/components/TableView.vue'
import StockingOrderDetailTabs from './StockingOrderDetailTabs.vue'
import AddStockingOrderDialog from './AddStockingOrderDialog.vue'
import SupplierDispatchOrder from './SupplierDispatchOrder.vue'
import SupplierDispatchOrderDialog from './SupplierDispatchOrderDialog.vue'
import {
TreeData,
SearchForm,
......@@ -394,7 +394,7 @@ const tableColumns = computed(() => {
{
label: '操作',
prop: 'operation',
width: 140,
width: 180,
align: 'center',
fixed: 'right',
render: (row: TableData) => {
......@@ -427,6 +427,15 @@ const tableColumns = computed(() => {
供应商发货
</ElButton>
)}
{row.status === 'STOCKING_UP' && (
<ElButton
link
type="warning"
onClick={() => stockingComplete(row)}
>
备货完成
</ElButton>
)}
</span>
)
},
......@@ -562,6 +571,30 @@ const handleSupplierDispatchOrder = (row: TableData) => {
selectedRow.value = row
supplierDispatchOrderVisible.value = true
}
const stockingComplete = async (row: TableData) => {
try {
await ElMessageBox.confirm(
'备货完成将把未完成入库申请单自动取消,是否继续对选中的订单操作备货完成?',
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
},
)
} catch {
return
}
try {
const res = await stockingCompleteApi(row.id)
if (res.code !== 200) return
ElMessage.success('备货完成成功')
search()
loadTreeData()
} catch (e) {
console.error(e)
}
}
// 新增备货单弹窗
const addDialogVisible = ref(false)
const handleAddOrder = () => {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment