✨ feat(mes): 更新销售出库单状态枚举及相关逻辑
新增待填写运单状态,优化销售出库单状态描述,调整相关方法注释以提高可读性。同时,更新前端表单以支持填写运单功能,确保用户体验一致性。pull/871/MERGE
parent
1a1209088c
commit
5375487d57
|
|
@ -16,11 +16,9 @@ export interface WmProductSalesLineVO {
|
||||||
|
|
||||||
// MES 销售出库单行 API
|
// MES 销售出库单行 API
|
||||||
export const WmProductSalesLineApi = {
|
export const WmProductSalesLineApi = {
|
||||||
// 查询销售出库单行列表(按出库单编号)
|
// 查询销售出库单行分页
|
||||||
getProductSalesLineListBySalesId: async (salesId: number) => {
|
getProductSalesLinePage: async (params: any) => {
|
||||||
return await request.get({
|
return await request.get({ url: '/mes/wm/product-sales-line/page', params })
|
||||||
url: '/mes/wm/product-sales-line/list-by-sales-id?salesId=' + salesId
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// 查询销售出库单行详情
|
// 查询销售出库单行详情
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
<WmWarehouseAreaSelect v-model="formData.areaId" :location-id="formData.locationId" />
|
<WmWarehouseAreaSelect v-model="formData.areaId" :location-id="formData.locationId" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="批次号" prop="batchId">
|
<el-form-item label="批次号" prop="batchId">
|
||||||
<WmBatchSelect v-model="formData.batchId" :item-id="formData.itemId" />
|
<el-input v-model="formData.batchId" placeholder="请输入批次号" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="数量" prop="quantity">
|
<el-form-item label="数量" prop="quantity">
|
||||||
<el-input-number
|
<el-input-number
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,6 @@
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<!-- DONE @AI:【发货通知单】 salesnotice 选择器;-->
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="发货通知单" prop="noticeId">
|
<el-form-item label="发货通知单" prop="noticeId">
|
||||||
<WmSalesNoticeSelect v-model="formData.noticeId" :disabled="isHeaderReadonly" />
|
<WmSalesNoticeSelect v-model="formData.noticeId" :disabled="isHeaderReadonly" />
|
||||||
|
|
@ -41,7 +40,7 @@
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<!-- DONE @芋艿:【暂时先忽略我这个想法】销售订单编号、出库日期,是不是不用记录 -->
|
<!-- DONE @芋艿:【暂时先忽略我这个想法】销售订单编号、出库日期,是不是不用记录 -->
|
||||||
<!-- TODO @芋艿:【暂时先忽略我这个想法】目前发货通知单选择后,可设置销售订单比那好、出库日期、客户;(和上面这个 DONE 有关联) -->
|
<!-- DONE @芋艿:【暂时先忽略我这个想法】目前发货通知单选择后,可设置销售订单比那好、出库日期、客户;(和上面这个 DONE 有关联)(暂时保持手动填写,未来可考虑自动填充) -->
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="销售订单编号" prop="salesOrderCode">
|
<el-form-item label="销售订单编号" prop="salesOrderCode">
|
||||||
<el-input
|
<el-input
|
||||||
|
|
@ -89,27 +88,6 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<!-- TODO @AI:“填写运单”的时候,在展示这 2 个字段:单独有个类似“物料信息”的风格;放在它前面; -->
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="8">
|
|
||||||
<el-form-item label="承运商" prop="carrier">
|
|
||||||
<el-input
|
|
||||||
v-model="formData.carrier"
|
|
||||||
placeholder="请输入承运商"
|
|
||||||
:disabled="isHeaderReadonly"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">
|
|
||||||
<el-form-item label="运输单号" prop="shippingNumber">
|
|
||||||
<el-input
|
|
||||||
v-model="formData.shippingNumber"
|
|
||||||
placeholder="请输入运输单号"
|
|
||||||
:disabled="isHeaderReadonly"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="备注" prop="remark">
|
<el-form-item label="备注" prop="remark">
|
||||||
|
|
@ -122,6 +100,27 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
<el-divider content-position="left">运输信息</el-divider>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="承运商" prop="carrier">
|
||||||
|
<el-input
|
||||||
|
v-model="formData.carrier"
|
||||||
|
placeholder="请输入承运商"
|
||||||
|
:disabled="!isShipping && isHeaderReadonly"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="运输单号" prop="shippingNumber">
|
||||||
|
<el-input
|
||||||
|
v-model="formData.shippingNumber"
|
||||||
|
placeholder="请输入运输单号"
|
||||||
|
:disabled="!isShipping && isHeaderReadonly"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
<!-- 非新建模式展示行项目信息(出库物料) -->
|
<!-- 非新建模式展示行项目信息(出库物料) -->
|
||||||
<template v-if="formData.id">
|
<template v-if="formData.id">
|
||||||
|
|
@ -135,6 +134,9 @@
|
||||||
<el-button v-if="isPick" @click="handlePick" type="primary" :disabled="formLoading">
|
<el-button v-if="isPick" @click="handlePick" type="primary" :disabled="formLoading">
|
||||||
执行拣货
|
执行拣货
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button v-if="isShipping" @click="handleShipping" type="primary" :disabled="formLoading">
|
||||||
|
确认填写
|
||||||
|
</el-button>
|
||||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||||
</template>
|
</template>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
|
|
@ -153,7 +155,7 @@ const message = useMessage() // 消息弹窗
|
||||||
|
|
||||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||||
const formLoading = ref(false) // 表单的加载中
|
const formLoading = ref(false) // 表单的加载中
|
||||||
const formType = ref<string>('create') // 表单的类型:create / update / pick / detail
|
const formType = ref<string>('create') // 表单的类型:create / update / pick / shipping / detail
|
||||||
const formData = ref({
|
const formData = ref({
|
||||||
id: undefined as number | undefined,
|
id: undefined as number | undefined,
|
||||||
code: undefined,
|
code: undefined,
|
||||||
|
|
@ -178,12 +180,14 @@ const formRef = ref() // 表单 Ref
|
||||||
|
|
||||||
const isUpdate = computed(() => ['create', 'update'].includes(formType.value)) // 是否为编辑模式
|
const isUpdate = computed(() => ['create', 'update'].includes(formType.value)) // 是否为编辑模式
|
||||||
const isPick = computed(() => formType.value === 'pick') // 是否为拣货模式
|
const isPick = computed(() => formType.value === 'pick') // 是否为拣货模式
|
||||||
const isHeaderReadonly = computed(() => ['pick', 'detail'].includes(formType.value)) // 是否只读
|
const isShipping = computed(() => formType.value === 'shipping') // 是否为填写运单模式
|
||||||
|
const isHeaderReadonly = computed(() => ['pick', 'shipping', 'detail'].includes(formType.value)) // 是否只读
|
||||||
const dialogTitle = computed(() => {
|
const dialogTitle = computed(() => {
|
||||||
const titles = {
|
const titles = {
|
||||||
create: '新增销售出库单',
|
create: '新增销售出库单',
|
||||||
update: '编辑销售出库单',
|
update: '编辑销售出库单',
|
||||||
pick: '执行拣货',
|
pick: '执行拣货',
|
||||||
|
shipping: '填写运单',
|
||||||
detail: '销售出库单详情'
|
detail: '销售出库单详情'
|
||||||
}
|
}
|
||||||
return titles[formType.value] || formType.value
|
return titles[formType.value] || formType.value
|
||||||
|
|
@ -251,6 +255,29 @@ const handlePick = async () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 填写运单 */
|
||||||
|
// TODO @AI:方法改成 handleShipping
|
||||||
|
const handleShipping = async () => {
|
||||||
|
try {
|
||||||
|
await message.confirm('确认提交运单信息?')
|
||||||
|
formLoading.value = true
|
||||||
|
// 只提交运输信息字段
|
||||||
|
const data = {
|
||||||
|
id: formData.value.id,
|
||||||
|
carrier: formData.value.carrier,
|
||||||
|
shippingNumber: formData.value.shippingNumber
|
||||||
|
} as unknown as WmProductSalesVO
|
||||||
|
// TODO @AI:不是更新方法,需要增加一个 controller 接口;
|
||||||
|
await WmProductSalesApi.updateProductSales(data)
|
||||||
|
message.success('运单信息填写成功')
|
||||||
|
dialogVisible.value = false
|
||||||
|
emit('success')
|
||||||
|
} catch {
|
||||||
|
} finally {
|
||||||
|
formLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** 重置表单 */
|
/** 重置表单 */
|
||||||
const resetForm = () => {
|
const resetForm = () => {
|
||||||
formData.value = {
|
formData.value = {
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,12 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
<Pagination
|
||||||
|
:total="total"
|
||||||
|
v-model:page="queryParams.pageNo"
|
||||||
|
v-model:limit="queryParams.pageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 添加/编辑行弹窗 -->
|
<!-- 添加/编辑行弹窗 -->
|
||||||
|
|
@ -84,8 +90,7 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="批次号" prop="batchId">
|
<el-form-item label="批次号" prop="batchId">
|
||||||
<!-- TODO @AI: WmBatchSelect 不存在,相关的都改成 input 先;在 productsales 模块里的; -->
|
<el-input v-model="formData.batchId" placeholder="请输入批次号" />
|
||||||
<WmBatchSelect v-model="formData.batchId" :item-id="formData.itemId" />
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
|
|
@ -156,12 +161,21 @@ const isPick = computed(() => props.formType === 'pick') // 是否为拣货模
|
||||||
// ==================== 列表 ====================
|
// ==================== 列表 ====================
|
||||||
const loading = ref(false) // 列表的加载中
|
const loading = ref(false) // 列表的加载中
|
||||||
const list = ref<WmProductSalesLineVO[]>([]) // 行列表
|
const list = ref<WmProductSalesLineVO[]>([]) // 行列表
|
||||||
|
const total = ref(0) // 列表的总页数
|
||||||
|
const queryParams = reactive({
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
salesId: undefined as number | undefined
|
||||||
|
})
|
||||||
|
|
||||||
/** 查询行列表 */
|
/** 查询行列表 */
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
try {
|
try {
|
||||||
list.value = await WmProductSalesLineApi.getProductSalesLineListBySalesId(props.salesId)
|
queryParams.salesId = props.salesId
|
||||||
|
const data = await WmProductSalesLineApi.getProductSalesLinePage(queryParams)
|
||||||
|
list.value = data.list
|
||||||
|
total.value = data.total
|
||||||
} finally {
|
} finally {
|
||||||
loading.value = false
|
loading.value = false
|
||||||
}
|
}
|
||||||
|
|
@ -204,7 +218,6 @@ const openForm = async (type: string, id?: number) => {
|
||||||
lineFormType.value = type
|
lineFormType.value = type
|
||||||
resetForm()
|
resetForm()
|
||||||
if (id) {
|
if (id) {
|
||||||
// TODO @AI:这个是分页接口;
|
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
try {
|
try {
|
||||||
formData.value = await WmProductSalesLineApi.getProductSalesLine(id)
|
formData.value = await WmProductSalesLineApi.getProductSalesLine(id)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue