feat(wms):减法,去掉 area 表
parent
c5948d405e
commit
fdbb98fe65
|
|
@ -12,8 +12,6 @@ export interface InventoryHistoryVO {
|
||||||
skuName?: string
|
skuName?: string
|
||||||
warehouseId?: number
|
warehouseId?: number
|
||||||
warehouseName?: string
|
warehouseName?: string
|
||||||
areaId?: number
|
|
||||||
areaName?: string
|
|
||||||
quantity?: number
|
quantity?: number
|
||||||
beforeQuantity?: number
|
beforeQuantity?: number
|
||||||
afterQuantity?: number
|
afterQuantity?: number
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,6 @@ export interface InventoryVO {
|
||||||
skuName?: string
|
skuName?: string
|
||||||
warehouseId?: number
|
warehouseId?: number
|
||||||
warehouseName?: string
|
warehouseName?: string
|
||||||
areaId?: number
|
|
||||||
areaName?: string
|
|
||||||
quantity?: number
|
quantity?: number
|
||||||
remark?: string
|
remark?: string
|
||||||
createTime?: Date
|
createTime?: Date
|
||||||
|
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
||||||
import request from '@/config/axios'
|
|
||||||
|
|
||||||
// WMS 库区 VO
|
|
||||||
export interface WarehouseAreaVO {
|
|
||||||
id?: number
|
|
||||||
code?: string
|
|
||||||
name?: string
|
|
||||||
warehouseId?: number
|
|
||||||
warehouseName?: string
|
|
||||||
remark?: string
|
|
||||||
createTime?: Date
|
|
||||||
}
|
|
||||||
|
|
||||||
// WMS 库区 API
|
|
||||||
export const WarehouseAreaApi = {
|
|
||||||
// 查询库区分页
|
|
||||||
getWarehouseAreaPage: async (params: any) => {
|
|
||||||
return await request.get({ url: '/wms/warehouse-area/page', params })
|
|
||||||
},
|
|
||||||
|
|
||||||
// 查询库区精简列表
|
|
||||||
getWarehouseAreaSimpleList: async (warehouseId?: number) => {
|
|
||||||
return await request.get({ url: '/wms/warehouse-area/simple-list', params: { warehouseId } })
|
|
||||||
},
|
|
||||||
|
|
||||||
// 查询库区详情
|
|
||||||
getWarehouseArea: async (id: number) => {
|
|
||||||
return await request.get({ url: '/wms/warehouse-area/get?id=' + id })
|
|
||||||
},
|
|
||||||
|
|
||||||
// 新增库区
|
|
||||||
createWarehouseArea: async (data: WarehouseAreaVO) => {
|
|
||||||
return await request.post({ url: '/wms/warehouse-area/create', data })
|
|
||||||
},
|
|
||||||
|
|
||||||
// 修改库区
|
|
||||||
updateWarehouseArea: async (data: WarehouseAreaVO) => {
|
|
||||||
return await request.put({ url: '/wms/warehouse-area/update', data })
|
|
||||||
},
|
|
||||||
|
|
||||||
// 删除库区
|
|
||||||
deleteWarehouseArea: async (id: number) => {
|
|
||||||
return await request.delete({ url: '/wms/warehouse-area/delete?id=' + id })
|
|
||||||
},
|
|
||||||
|
|
||||||
// 导出库区
|
|
||||||
exportWarehouseArea: async (params) => {
|
|
||||||
return await request.download({ url: '/wms/warehouse-area/export-excel', params })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -12,8 +12,6 @@ export interface CheckOrderDetailVO {
|
||||||
inventoryId?: number
|
inventoryId?: number
|
||||||
warehouseId?: number
|
warehouseId?: number
|
||||||
warehouseName?: string
|
warehouseName?: string
|
||||||
areaId?: number
|
|
||||||
areaName?: string
|
|
||||||
batchNo?: string
|
batchNo?: string
|
||||||
productionDate?: Date
|
productionDate?: Date
|
||||||
expirationDate?: Date
|
expirationDate?: Date
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,6 @@ export interface CheckOrderVO {
|
||||||
remark?: string
|
remark?: string
|
||||||
warehouseId?: number
|
warehouseId?: number
|
||||||
warehouseName?: string
|
warehouseName?: string
|
||||||
areaId?: number
|
|
||||||
areaName?: string
|
|
||||||
totalQuantity?: number
|
totalQuantity?: number
|
||||||
totalAmount?: number
|
totalAmount?: number
|
||||||
details?: CheckOrderDetailVO[]
|
details?: CheckOrderDetailVO[]
|
||||||
|
|
|
||||||
|
|
@ -11,12 +11,8 @@ export interface MovementOrderDetailVO {
|
||||||
skuName?: string
|
skuName?: string
|
||||||
sourceWarehouseId?: number
|
sourceWarehouseId?: number
|
||||||
sourceWarehouseName?: string
|
sourceWarehouseName?: string
|
||||||
sourceAreaId?: number
|
|
||||||
sourceAreaName?: string
|
|
||||||
targetWarehouseId?: number
|
targetWarehouseId?: number
|
||||||
targetWarehouseName?: string
|
targetWarehouseName?: string
|
||||||
targetAreaId?: number
|
|
||||||
targetAreaName?: string
|
|
||||||
batchNo?: string
|
batchNo?: string
|
||||||
productionDate?: Date
|
productionDate?: Date
|
||||||
expirationDate?: Date
|
expirationDate?: Date
|
||||||
|
|
|
||||||
|
|
@ -9,12 +9,8 @@ export interface MovementOrderVO {
|
||||||
remark?: string
|
remark?: string
|
||||||
sourceWarehouseId?: number
|
sourceWarehouseId?: number
|
||||||
sourceWarehouseName?: string
|
sourceWarehouseName?: string
|
||||||
sourceAreaId?: number
|
|
||||||
sourceAreaName?: string
|
|
||||||
targetWarehouseId?: number
|
targetWarehouseId?: number
|
||||||
targetWarehouseName?: string
|
targetWarehouseName?: string
|
||||||
targetAreaId?: number
|
|
||||||
targetAreaName?: string
|
|
||||||
totalQuantity?: number
|
totalQuantity?: number
|
||||||
totalAmount?: number
|
totalAmount?: number
|
||||||
details?: MovementOrderDetailVO[]
|
details?: MovementOrderDetailVO[]
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,6 @@ export interface ReceiptOrderDetailVO {
|
||||||
skuName?: string
|
skuName?: string
|
||||||
warehouseId?: number
|
warehouseId?: number
|
||||||
warehouseName?: string
|
warehouseName?: string
|
||||||
areaId?: number
|
|
||||||
areaName?: string
|
|
||||||
batchNo?: string
|
batchNo?: string
|
||||||
productionDate?: Date
|
productionDate?: Date
|
||||||
expirationDate?: Date
|
expirationDate?: Date
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,6 @@ export interface ReceiptOrderVO {
|
||||||
remark?: string
|
remark?: string
|
||||||
warehouseId?: number
|
warehouseId?: number
|
||||||
warehouseName?: string
|
warehouseName?: string
|
||||||
areaId?: number
|
|
||||||
areaName?: string
|
|
||||||
totalQuantity?: number
|
totalQuantity?: number
|
||||||
totalAmount?: number
|
totalAmount?: number
|
||||||
details?: ReceiptOrderDetailVO[]
|
details?: ReceiptOrderDetailVO[]
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,6 @@ export interface ShipmentOrderDetailVO {
|
||||||
skuName?: string
|
skuName?: string
|
||||||
warehouseId?: number
|
warehouseId?: number
|
||||||
warehouseName?: string
|
warehouseName?: string
|
||||||
areaId?: number
|
|
||||||
areaName?: string
|
|
||||||
batchNo?: string
|
batchNo?: string
|
||||||
productionDate?: Date
|
productionDate?: Date
|
||||||
expirationDate?: Date
|
expirationDate?: Date
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,6 @@ export interface ShipmentOrderVO {
|
||||||
remark?: string
|
remark?: string
|
||||||
warehouseId?: number
|
warehouseId?: number
|
||||||
warehouseName?: string
|
warehouseName?: string
|
||||||
areaId?: number
|
|
||||||
areaName?: string
|
|
||||||
totalQuantity?: number
|
totalQuantity?: number
|
||||||
totalAmount?: number
|
totalAmount?: number
|
||||||
details?: ShipmentOrderDetailVO[]
|
details?: ShipmentOrderDetailVO[]
|
||||||
|
|
|
||||||
|
|
@ -127,29 +127,6 @@ const remainingRouter: AppRouteRecordRaw[] = [
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: '/wms',
|
|
||||||
component: Layout,
|
|
||||||
name: 'Wms',
|
|
||||||
meta: {
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: 'md/warehouse/area/:warehouseId',
|
|
||||||
component: () => import('@/views/wms/md/warehouse/area/index.vue'),
|
|
||||||
name: 'WmsWarehouseArea',
|
|
||||||
meta: {
|
|
||||||
title: '库区管理',
|
|
||||||
noCache: true,
|
|
||||||
hidden: true,
|
|
||||||
canTo: true,
|
|
||||||
icon: '',
|
|
||||||
activeMenu: '/wms/md/warehouse'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: '/codegen',
|
path: '/codegen',
|
||||||
component: Layout,
|
component: Layout,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,260 @@
|
||||||
|
<!-- WMS 库存选择器 -->
|
||||||
|
<template>
|
||||||
|
<Dialog
|
||||||
|
v-model="dialogVisible"
|
||||||
|
:append-to-body="true"
|
||||||
|
:scroll="true"
|
||||||
|
max-height="calc(100vh - 220px)"
|
||||||
|
title="库存选择"
|
||||||
|
width="80%"
|
||||||
|
>
|
||||||
|
<ContentWrap>
|
||||||
|
<el-form
|
||||||
|
ref="queryFormRef"
|
||||||
|
:inline="true"
|
||||||
|
:model="queryParams"
|
||||||
|
class="-mb-15px"
|
||||||
|
label-width="80px"
|
||||||
|
>
|
||||||
|
<el-form-item label="商品名称" prop="itemName">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.itemName"
|
||||||
|
class="!w-240px"
|
||||||
|
clearable
|
||||||
|
placeholder="请输入商品名称"
|
||||||
|
@keyup.enter="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="商品编号" prop="itemCode">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.itemCode"
|
||||||
|
class="!w-240px"
|
||||||
|
clearable
|
||||||
|
placeholder="请输入商品编号"
|
||||||
|
@keyup.enter="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="规格名称" prop="skuName">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.skuName"
|
||||||
|
class="!w-240px"
|
||||||
|
clearable
|
||||||
|
placeholder="请输入规格名称"
|
||||||
|
@keyup.enter="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="规格编号" prop="skuCode">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.skuCode"
|
||||||
|
class="!w-240px"
|
||||||
|
clearable
|
||||||
|
placeholder="请输入规格编号"
|
||||||
|
@keyup.enter="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button @click="handleQuery">
|
||||||
|
<Icon class="mr-5px" icon="ep:search" />
|
||||||
|
搜索
|
||||||
|
</el-button>
|
||||||
|
<el-button @click="resetQuery">
|
||||||
|
<Icon class="mr-5px" icon="ep:refresh" />
|
||||||
|
重置
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</ContentWrap>
|
||||||
|
|
||||||
|
<ContentWrap class="!mb-0">
|
||||||
|
<el-table
|
||||||
|
ref="tableRef"
|
||||||
|
v-loading="loading"
|
||||||
|
:data="list"
|
||||||
|
:row-key="getRowKey"
|
||||||
|
:show-overflow-tooltip="true"
|
||||||
|
:stripe="true"
|
||||||
|
border
|
||||||
|
max-height="calc(100vh - 430px)"
|
||||||
|
@row-dblclick="handleRowDblClick"
|
||||||
|
@selection-change="handleSelectionChange"
|
||||||
|
>
|
||||||
|
<el-table-column :reserve-selection="true" align="center" type="selection" width="50" />
|
||||||
|
<el-table-column label="商品信息" min-width="220">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<div>{{ row.itemName || '-' }}</div>
|
||||||
|
<div v-if="row.itemCode" class="text-12px text-gray-500">
|
||||||
|
商品编号:{{ row.itemCode }}
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="规格信息" min-width="220">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<div>{{ row.skuName || '-' }}</div>
|
||||||
|
<div v-if="row.skuCode" class="text-12px text-gray-500">
|
||||||
|
规格编号:{{ row.skuCode }}
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="仓库" min-width="180">
|
||||||
|
<template #default="{ row }">
|
||||||
|
{{ row.warehouseName || '-' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="right" label="可用库存" width="130">
|
||||||
|
<template #default="{ row }">
|
||||||
|
{{ formatQuantity(row.availableQuantity) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<div class="overflow-hidden">
|
||||||
|
<Pagination
|
||||||
|
v-model:limit="queryParams.pageSize"
|
||||||
|
v-model:page="queryParams.pageNo"
|
||||||
|
:total="total"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</ContentWrap>
|
||||||
|
|
||||||
|
<template #footer>
|
||||||
|
<el-button type="primary" @click="handleConfirm">确 定</el-button>
|
||||||
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||||
|
</template>
|
||||||
|
</Dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ElTable } from 'element-plus'
|
||||||
|
import { InventoryApi, InventoryVO } from '@/api/wms/inventory'
|
||||||
|
import { formatQuantity } from '@/views/wms/utils/format'
|
||||||
|
|
||||||
|
export interface InventorySelectRow extends InventoryVO {
|
||||||
|
batchNo?: string
|
||||||
|
productionDate?: Date
|
||||||
|
expirationDate?: Date
|
||||||
|
amount?: number
|
||||||
|
availableQuantity?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
/** WMS 库存选择器 */
|
||||||
|
defineOptions({ name: 'WmsInventorySelect' })
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
warehouseId?: number
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const message = useMessage() // 消息弹窗
|
||||||
|
const loading = ref(false) // 列表的加载中
|
||||||
|
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||||
|
const list = ref<InventorySelectRow[]>([]) // 库存列表
|
||||||
|
const total = ref(0) // 列表的总条数
|
||||||
|
const selectedMap = ref<Map<string, InventorySelectRow>>(new Map()) // 跨页已选择库存
|
||||||
|
const tableRef = ref<InstanceType<typeof ElTable>>() // 表格 Ref
|
||||||
|
const queryFormRef = ref() // 搜索的表单
|
||||||
|
const getDefaultQueryParams = () => ({
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
itemName: undefined as string | undefined,
|
||||||
|
itemCode: undefined as string | undefined,
|
||||||
|
skuName: undefined as string | undefined,
|
||||||
|
skuCode: undefined as string | undefined
|
||||||
|
})
|
||||||
|
const queryParams = reactive(getDefaultQueryParams())
|
||||||
|
|
||||||
|
const emit = defineEmits<{
|
||||||
|
change: [list: InventorySelectRow[]]
|
||||||
|
}>()
|
||||||
|
|
||||||
|
/** 打开弹窗 */
|
||||||
|
const open = async () => {
|
||||||
|
if (!props.warehouseId) {
|
||||||
|
message.warning('请先选择仓库')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
dialogVisible.value = true
|
||||||
|
Object.assign(queryParams, getDefaultQueryParams())
|
||||||
|
selectedMap.value = new Map()
|
||||||
|
await nextTick()
|
||||||
|
tableRef.value?.clearSelection()
|
||||||
|
await getList()
|
||||||
|
}
|
||||||
|
defineExpose({ open })
|
||||||
|
|
||||||
|
/** 查询库存列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
loading.value = true
|
||||||
|
try {
|
||||||
|
const params = {
|
||||||
|
...queryParams,
|
||||||
|
type: 'warehouse',
|
||||||
|
warehouseId: props.warehouseId,
|
||||||
|
minQuantity: 0.01
|
||||||
|
}
|
||||||
|
const data = await InventoryApi.getInventoryPage(params)
|
||||||
|
list.value = data.list.map((inventory: InventoryVO) => ({
|
||||||
|
...inventory,
|
||||||
|
availableQuantity: inventory.quantity
|
||||||
|
}))
|
||||||
|
total.value = data.total
|
||||||
|
await nextTick()
|
||||||
|
applySelection()
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
const handleQuery = () => {
|
||||||
|
queryParams.pageNo = 1
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
const resetQuery = () => {
|
||||||
|
Object.assign(queryParams, getDefaultQueryParams())
|
||||||
|
queryFormRef.value?.resetFields()
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 获得行唯一标识 */
|
||||||
|
const getRowKey = (row: InventorySelectRow) => {
|
||||||
|
return `inventory-${row.id || `${row.skuId}-${row.warehouseId}`}`
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 恢复当前页选择状态 */
|
||||||
|
const applySelection = () => {
|
||||||
|
const table = tableRef.value
|
||||||
|
if (!table || selectedMap.value.size === 0) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
list.value.forEach((row) => {
|
||||||
|
if (selectedMap.value.has(getRowKey(row))) {
|
||||||
|
table.toggleRowSelection(row, true)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 选择行变化 */
|
||||||
|
const handleSelectionChange = (rows: InventorySelectRow[]) => {
|
||||||
|
const currentKeys = new Set(list.value.map((row) => getRowKey(row)))
|
||||||
|
currentKeys.forEach((key) => selectedMap.value.delete(key))
|
||||||
|
rows.forEach((row) => selectedMap.value.set(getRowKey(row), row))
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 双击行直接选择 */
|
||||||
|
const handleRowDblClick = (row: InventorySelectRow) => {
|
||||||
|
selectedMap.value.set(getRowKey(row), row)
|
||||||
|
handleConfirm()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 确认选择 */
|
||||||
|
const handleConfirm = () => {
|
||||||
|
const selectedList = Array.from(selectedMap.value.values())
|
||||||
|
if (selectedList.length === 0) {
|
||||||
|
message.warning('请选择库存')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
emit('change', selectedList)
|
||||||
|
dialogVisible.value = false
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -35,18 +35,7 @@
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="仓库" prop="warehouseId">
|
<el-form-item label="仓库" prop="warehouseId">
|
||||||
<WarehouseSelect
|
<WarehouseSelect v-model="queryParams.warehouseId" class="!w-240px" />
|
||||||
v-model="queryParams.warehouseId"
|
|
||||||
class="!w-240px"
|
|
||||||
@change="handleWarehouseChange"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item v-if="AREA_ENABLE" label="库区" prop="areaId">
|
|
||||||
<WarehouseAreaSelect
|
|
||||||
v-model="queryParams.areaId"
|
|
||||||
:warehouse-id="queryParams.warehouseId"
|
|
||||||
class="!w-240px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="商品编号" prop="itemCode">
|
<el-form-item label="商品编号" prop="itemCode">
|
||||||
<el-input
|
<el-input
|
||||||
|
|
@ -140,15 +129,9 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column :label="AREA_ENABLE ? '仓库/库区' : '仓库'" min-width="160">
|
<el-table-column label="仓库" min-width="160">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<template v-if="AREA_ENABLE">
|
{{ scope.row.warehouseName || '-' }}
|
||||||
<div>仓库:{{ scope.row.warehouseName || '-' }}</div>
|
|
||||||
<div>库区:{{ scope.row.areaName || '-' }}</div>
|
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
{{ scope.row.warehouseName || '-' }}
|
|
||||||
</template>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column align="right" label="操作前" min-width="110">
|
<el-table-column align="right" label="操作前" min-width="110">
|
||||||
|
|
@ -207,9 +190,7 @@
|
||||||
import { dateFormatter, defaultShortcuts, formatDate } from '@/utils/formatTime'
|
import { dateFormatter, defaultShortcuts, formatDate } from '@/utils/formatTime'
|
||||||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||||
import { InventoryHistoryApi, InventoryHistoryVO } from '@/api/wms/inventory/history'
|
import { InventoryHistoryApi, InventoryHistoryVO } from '@/api/wms/inventory/history'
|
||||||
import WarehouseAreaSelect from '@/views/wms/md/warehouse/components/WarehouseAreaSelect.vue'
|
|
||||||
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
||||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
|
||||||
import { formatPrice, formatQuantity } from '@/views/wms/utils/format'
|
import { formatPrice, formatQuantity } from '@/views/wms/utils/format'
|
||||||
|
|
||||||
/** WMS 库存流水 */
|
/** WMS 库存流水 */
|
||||||
|
|
@ -228,7 +209,6 @@ const queryParams = reactive({
|
||||||
skuCode: undefined as string | undefined,
|
skuCode: undefined as string | undefined,
|
||||||
skuName: undefined as string | undefined,
|
skuName: undefined as string | undefined,
|
||||||
warehouseId: undefined as number | undefined,
|
warehouseId: undefined as number | undefined,
|
||||||
areaId: undefined as number | undefined,
|
|
||||||
createTime: undefined as string[] | undefined
|
createTime: undefined as string[] | undefined
|
||||||
})
|
})
|
||||||
const queryFormRef = ref() // 搜索的表单
|
const queryFormRef = ref() // 搜索的表单
|
||||||
|
|
@ -257,11 +237,6 @@ const resetQuery = () => {
|
||||||
handleQuery()
|
handleQuery()
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 仓库变化 */
|
|
||||||
const handleWarehouseChange = () => {
|
|
||||||
queryParams.areaId = undefined
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 初始化 */
|
/** 初始化 */
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
await getList()
|
await getList()
|
||||||
|
|
|
||||||
|
|
@ -21,18 +21,7 @@
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="仓库" prop="warehouseId">
|
<el-form-item label="仓库" prop="warehouseId">
|
||||||
<WarehouseSelect
|
<WarehouseSelect v-model="queryParams.warehouseId" class="!w-240px" />
|
||||||
v-model="queryParams.warehouseId"
|
|
||||||
class="!w-240px"
|
|
||||||
@change="handleWarehouseChange"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item v-if="isAreaQueryVisible" label="库区" prop="areaId">
|
|
||||||
<WarehouseAreaSelect
|
|
||||||
v-model="queryParams.areaId"
|
|
||||||
:warehouse-id="queryParams.warehouseId"
|
|
||||||
class="!w-240px"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="商品名称" prop="itemName">
|
<el-form-item label="商品名称" prop="itemName">
|
||||||
<el-input
|
<el-input
|
||||||
|
|
@ -105,23 +94,7 @@
|
||||||
{{ scope.row.warehouseName || '-' }}
|
{{ scope.row.warehouseName || '-' }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column label="商品信息" min-width="240" prop="warehouseItemId">
|
||||||
v-if="queryParams.type === INVENTORY_DIMENSION.AREA"
|
|
||||||
label="库区"
|
|
||||||
min-width="160"
|
|
||||||
prop="areaId"
|
|
||||||
>
|
|
||||||
<template #default="scope">
|
|
||||||
{{ scope.row.areaName || '-' }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column
|
|
||||||
label="商品信息"
|
|
||||||
min-width="240"
|
|
||||||
:prop="
|
|
||||||
queryParams.type === INVENTORY_DIMENSION.WAREHOUSE ? 'warehouseItemId' : 'areaItemId'
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<div>{{ scope.row.itemName || '-' }}</div>
|
<div>{{ scope.row.itemName || '-' }}</div>
|
||||||
<div v-if="scope.row.itemCode" class="text-12px text-gray-500">
|
<div v-if="scope.row.itemCode" class="text-12px text-gray-500">
|
||||||
|
|
@ -160,11 +133,6 @@
|
||||||
{{ scope.row.warehouseName || '-' }}
|
{{ scope.row.warehouseName || '-' }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column v-if="AREA_ENABLE" label="所属库区" min-width="160" prop="areaId">
|
|
||||||
<template #default="scope">
|
|
||||||
{{ scope.row.areaName || '-' }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</template>
|
</template>
|
||||||
<el-table-column align="right" label="库存" min-width="130" prop="quantity">
|
<el-table-column align="right" label="库存" min-width="130" prop="quantity">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
|
|
@ -184,9 +152,7 @@
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { InventoryApi, InventoryVO } from '@/api/wms/inventory'
|
import { InventoryApi, InventoryVO } from '@/api/wms/inventory'
|
||||||
import WarehouseAreaSelect from '@/views/wms/md/warehouse/components/WarehouseAreaSelect.vue'
|
|
||||||
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
||||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
|
||||||
import { formatQuantity } from '@/views/wms/utils/format'
|
import { formatQuantity } from '@/views/wms/utils/format'
|
||||||
|
|
||||||
/** WMS 库存统计 */
|
/** WMS 库存统计 */
|
||||||
|
|
@ -194,24 +160,18 @@ defineOptions({ name: 'WmsInventory' })
|
||||||
|
|
||||||
const INVENTORY_DIMENSION = {
|
const INVENTORY_DIMENSION = {
|
||||||
WAREHOUSE: 'warehouse',
|
WAREHOUSE: 'warehouse',
|
||||||
AREA: 'area',
|
|
||||||
ITEM: 'item'
|
ITEM: 'item'
|
||||||
} as const
|
} as const
|
||||||
type InventoryDimension = (typeof INVENTORY_DIMENSION)[keyof typeof INVENTORY_DIMENSION]
|
type InventoryDimension = (typeof INVENTORY_DIMENSION)[keyof typeof INVENTORY_DIMENSION]
|
||||||
|
|
||||||
const dimensionOptions = computed(() => [
|
const dimensionOptions = computed(() => [
|
||||||
{ label: '仓库', value: INVENTORY_DIMENSION.WAREHOUSE },
|
{ label: '仓库', value: INVENTORY_DIMENSION.WAREHOUSE },
|
||||||
...(AREA_ENABLE ? [{ label: '库区', value: INVENTORY_DIMENSION.AREA }] : []),
|
|
||||||
{ label: '商品', value: INVENTORY_DIMENSION.ITEM }
|
{ label: '商品', value: INVENTORY_DIMENSION.ITEM }
|
||||||
])
|
])
|
||||||
const warehouseDimensionList: InventoryDimension[] = [
|
const warehouseDimensionList: InventoryDimension[] = [INVENTORY_DIMENSION.WAREHOUSE]
|
||||||
INVENTORY_DIMENSION.WAREHOUSE,
|
|
||||||
INVENTORY_DIMENSION.AREA
|
|
||||||
]
|
|
||||||
|
|
||||||
interface InventoryRow extends InventoryVO {
|
interface InventoryRow extends InventoryVO {
|
||||||
warehouseItemId?: string
|
warehouseItemId?: string
|
||||||
areaItemId?: string
|
|
||||||
skuWarehouseId?: string
|
skuWarehouseId?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -234,8 +194,7 @@ const queryParams = reactive({
|
||||||
itemName: undefined as string | undefined,
|
itemName: undefined as string | undefined,
|
||||||
skuCode: undefined as string | undefined,
|
skuCode: undefined as string | undefined,
|
||||||
skuName: undefined as string | undefined,
|
skuName: undefined as string | undefined,
|
||||||
warehouseId: undefined as number | undefined,
|
warehouseId: undefined as number | undefined
|
||||||
areaId: undefined as number | undefined
|
|
||||||
})
|
})
|
||||||
const queryFormRef = ref() // 搜索的表单
|
const queryFormRef = ref() // 搜索的表单
|
||||||
|
|
||||||
|
|
@ -245,14 +204,12 @@ const getList = async () => {
|
||||||
try {
|
try {
|
||||||
const data = await InventoryApi.getInventoryPage({
|
const data = await InventoryApi.getInventoryPage({
|
||||||
...queryParams,
|
...queryParams,
|
||||||
areaId: isAreaQueryVisible.value ? queryParams.areaId : undefined,
|
|
||||||
minQuantity: filterZero.value ? 1 : undefined
|
minQuantity: filterZero.value ? 1 : undefined
|
||||||
})
|
})
|
||||||
list.value = data.list.map((item: InventoryVO) => ({
|
list.value = data.list.map((item: InventoryVO) => ({
|
||||||
...item,
|
...item,
|
||||||
// 展示字段
|
// 展示字段
|
||||||
warehouseItemId: `${item.warehouseId || 0}-${item.itemId || 0}`,
|
warehouseItemId: `${item.warehouseId || 0}-${item.itemId || 0}`,
|
||||||
areaItemId: `${item.areaId || 0}-${item.itemId || 0}`,
|
|
||||||
skuWarehouseId: `${item.skuId || 0}-${item.warehouseId || 0}`
|
skuWarehouseId: `${item.skuId || 0}-${item.warehouseId || 0}`
|
||||||
}))
|
}))
|
||||||
total.value = data.total
|
total.value = data.total
|
||||||
|
|
@ -278,9 +235,6 @@ const resetQuery = () => {
|
||||||
/** 统计维度变化 */
|
/** 统计维度变化 */
|
||||||
const handleTypeChange = () => {
|
const handleTypeChange = () => {
|
||||||
queryParams.pageNo = 1
|
queryParams.pageNo = 1
|
||||||
if (queryParams.type === INVENTORY_DIMENSION.WAREHOUSE) {
|
|
||||||
queryParams.areaId = undefined
|
|
||||||
}
|
|
||||||
getList()
|
getList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -290,16 +244,6 @@ const handleFilterZeroChange = () => {
|
||||||
getList()
|
getList()
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 仓库变化 */
|
|
||||||
const handleWarehouseChange = () => {
|
|
||||||
queryParams.areaId = undefined
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 是否展示库区搜索项 */
|
|
||||||
const isAreaQueryVisible = computed(() => {
|
|
||||||
return AREA_ENABLE && queryParams.type !== INVENTORY_DIMENSION.WAREHOUSE
|
|
||||||
})
|
|
||||||
|
|
||||||
/** 合并库存统计的维度单元格 */
|
/** 合并库存统计的维度单元格 */
|
||||||
const spanMethod = ({ column, rowIndex }: SpanMethodProps) => {
|
const spanMethod = ({ column, rowIndex }: SpanMethodProps) => {
|
||||||
const property = column.property
|
const property = column.property
|
||||||
|
|
@ -331,9 +275,6 @@ const getRowSpanProperties = () => {
|
||||||
if (queryParams.type === INVENTORY_DIMENSION.ITEM) {
|
if (queryParams.type === INVENTORY_DIMENSION.ITEM) {
|
||||||
return ['itemId', 'skuId', 'skuWarehouseId']
|
return ['itemId', 'skuId', 'skuWarehouseId']
|
||||||
}
|
}
|
||||||
if (queryParams.type === INVENTORY_DIMENSION.AREA) {
|
|
||||||
return ['warehouseId', 'areaId', 'areaItemId']
|
|
||||||
}
|
|
||||||
return ['warehouseId', 'warehouseItemId']
|
return ['warehouseId', 'warehouseItemId']
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,120 +0,0 @@
|
||||||
<!-- WMS 库区表单 -->
|
|
||||||
<template>
|
|
||||||
<Dialog v-model="dialogVisible" :title="dialogTitle">
|
|
||||||
<el-form
|
|
||||||
ref="formRef"
|
|
||||||
v-loading="formLoading"
|
|
||||||
:model="formData"
|
|
||||||
:rules="formRules"
|
|
||||||
label-width="100px"
|
|
||||||
>
|
|
||||||
<el-form-item label="所属仓库" prop="warehouseId">
|
|
||||||
<WarehouseSelect v-model="formData.warehouseId" placeholder="请选择所属仓库" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="库区名称" prop="name">
|
|
||||||
<el-input v-model="formData.name" maxlength="60" placeholder="请输入库区名称" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="库区编号" prop="code">
|
|
||||||
<el-input v-model="formData.code" maxlength="20" placeholder="请输入库区编号" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="备注" prop="remark">
|
|
||||||
<el-input
|
|
||||||
v-model="formData.remark"
|
|
||||||
maxlength="255"
|
|
||||||
placeholder="请输入备注"
|
|
||||||
type="textarea"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<template #footer>
|
|
||||||
<el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
|
||||||
</template>
|
|
||||||
</Dialog>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts" setup>
|
|
||||||
import { WarehouseAreaApi, WarehouseAreaVO } from '@/api/wms/md/warehouse/area'
|
|
||||||
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
|
||||||
|
|
||||||
/** WMS 库区表单 */
|
|
||||||
defineOptions({ name: 'WmsWarehouseAreaForm' })
|
|
||||||
|
|
||||||
const { t } = useI18n() // 国际化
|
|
||||||
const message = useMessage() // 消息弹窗
|
|
||||||
|
|
||||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
|
||||||
const dialogTitle = ref('') // 弹窗的标题
|
|
||||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
|
||||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
|
||||||
const formData = ref<WarehouseAreaVO>({
|
|
||||||
id: undefined,
|
|
||||||
code: undefined,
|
|
||||||
name: undefined,
|
|
||||||
warehouseId: undefined,
|
|
||||||
remark: undefined
|
|
||||||
})
|
|
||||||
const formRules = reactive({
|
|
||||||
warehouseId: [{ required: true, message: '所属仓库不能为空', trigger: 'change' }],
|
|
||||||
code: [{ required: true, message: '库区编号不能为空', trigger: 'blur' }],
|
|
||||||
name: [{ required: true, message: '库区名称不能为空', trigger: 'blur' }]
|
|
||||||
})
|
|
||||||
const formRef = ref() // 表单 Ref
|
|
||||||
|
|
||||||
/** 打开弹窗 */
|
|
||||||
const open = async (type: string, id?: number, warehouseId?: number) => {
|
|
||||||
dialogVisible.value = true
|
|
||||||
dialogTitle.value = t('action.' + type)
|
|
||||||
formType.value = type
|
|
||||||
resetForm()
|
|
||||||
if (warehouseId) {
|
|
||||||
formData.value.warehouseId = warehouseId
|
|
||||||
}
|
|
||||||
// 修改时,设置数据
|
|
||||||
if (id) {
|
|
||||||
formLoading.value = true
|
|
||||||
try {
|
|
||||||
formData.value = await WarehouseAreaApi.getWarehouseArea(id)
|
|
||||||
} finally {
|
|
||||||
formLoading.value = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
|
||||||
|
|
||||||
/** 提交表单 */
|
|
||||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
|
||||||
const submitForm = async () => {
|
|
||||||
// 校验表单
|
|
||||||
await formRef.value.validate()
|
|
||||||
// 提交请求
|
|
||||||
formLoading.value = true
|
|
||||||
try {
|
|
||||||
const data = formData.value as WarehouseAreaVO
|
|
||||||
if (formType.value === 'create') {
|
|
||||||
await WarehouseAreaApi.createWarehouseArea(data)
|
|
||||||
message.success(t('common.createSuccess'))
|
|
||||||
} else {
|
|
||||||
await WarehouseAreaApi.updateWarehouseArea(data)
|
|
||||||
message.success(t('common.updateSuccess'))
|
|
||||||
}
|
|
||||||
dialogVisible.value = false
|
|
||||||
// 发送操作成功的事件
|
|
||||||
emit('success')
|
|
||||||
} finally {
|
|
||||||
formLoading.value = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 重置表单 */
|
|
||||||
const resetForm = () => {
|
|
||||||
formData.value = {
|
|
||||||
id: undefined,
|
|
||||||
code: undefined,
|
|
||||||
name: undefined,
|
|
||||||
warehouseId: undefined,
|
|
||||||
remark: undefined
|
|
||||||
}
|
|
||||||
formRef.value?.resetFields()
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,229 +0,0 @@
|
||||||
<!-- WMS 库区管理 -->
|
|
||||||
<template>
|
|
||||||
<ContentWrap>
|
|
||||||
<!-- 搜索工作栏 -->
|
|
||||||
<el-form
|
|
||||||
ref="queryFormRef"
|
|
||||||
:inline="true"
|
|
||||||
:model="queryParams"
|
|
||||||
class="-mb-15px"
|
|
||||||
label-width="68px"
|
|
||||||
>
|
|
||||||
<el-form-item label="所属仓库" prop="warehouseId">
|
|
||||||
<WarehouseSelect
|
|
||||||
v-model="queryParams.warehouseId"
|
|
||||||
class="!w-240px"
|
|
||||||
placeholder="请选择所属仓库"
|
|
||||||
@change="warehouseChange"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="库区名称" prop="name">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.name"
|
|
||||||
class="!w-240px"
|
|
||||||
clearable
|
|
||||||
placeholder="请输入库区名称"
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="库区编号" prop="code">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.code"
|
|
||||||
class="!w-240px"
|
|
||||||
clearable
|
|
||||||
placeholder="请输入库区编号"
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
|
||||||
<el-button @click="handleQuery">
|
|
||||||
<Icon class="mr-5px" icon="ep:search" />
|
|
||||||
搜索
|
|
||||||
</el-button>
|
|
||||||
<el-button @click="resetQuery">
|
|
||||||
<Icon class="mr-5px" icon="ep:refresh" />
|
|
||||||
重置
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['wms:warehouse-area:create']"
|
|
||||||
plain
|
|
||||||
type="primary"
|
|
||||||
@click="openForm('create')"
|
|
||||||
>
|
|
||||||
<Icon class="mr-5px" icon="ep:plus" />
|
|
||||||
新增
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['wms:warehouse-area:export']"
|
|
||||||
:loading="exportLoading"
|
|
||||||
plain
|
|
||||||
type="success"
|
|
||||||
@click="handleExport"
|
|
||||||
>
|
|
||||||
<Icon class="mr-5px" icon="ep:download" />
|
|
||||||
导出
|
|
||||||
</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
</ContentWrap>
|
|
||||||
|
|
||||||
<!-- 列表 -->
|
|
||||||
<ContentWrap>
|
|
||||||
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" :stripe="true">
|
|
||||||
<el-table-column align="center" label="库区名称" prop="name" />
|
|
||||||
<el-table-column align="center" label="库区编号" prop="code" />
|
|
||||||
<el-table-column align="center" label="所属仓库" prop="warehouseName">
|
|
||||||
<template #default="scope">
|
|
||||||
{{ scope.row.warehouseName || getWarehouseName(scope.row.warehouseId) }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column align="center" label="备注" prop="remark" />
|
|
||||||
<el-table-column
|
|
||||||
:formatter="dateFormatter"
|
|
||||||
align="center"
|
|
||||||
label="创建时间"
|
|
||||||
prop="createTime"
|
|
||||||
width="180"
|
|
||||||
/>
|
|
||||||
<el-table-column align="center" label="操作" width="150">
|
|
||||||
<template #default="scope">
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['wms:warehouse-area:update']"
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
@click="openForm('update', scope.row.id)"
|
|
||||||
>
|
|
||||||
修改
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
v-hasPermi="['wms:warehouse-area:delete']"
|
|
||||||
link
|
|
||||||
type="danger"
|
|
||||||
@click="handleDelete(scope.row.id)"
|
|
||||||
>
|
|
||||||
删除
|
|
||||||
</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<!-- 分页 -->
|
|
||||||
<Pagination
|
|
||||||
v-model:limit="queryParams.pageSize"
|
|
||||||
v-model:page="queryParams.pageNo"
|
|
||||||
:total="total"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
</ContentWrap>
|
|
||||||
|
|
||||||
<!-- 表单弹窗:添加/修改 -->
|
|
||||||
<WarehouseAreaForm ref="formRef" @success="getList" />
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts" setup>
|
|
||||||
import { dateFormatter } from '@/utils/formatTime'
|
|
||||||
import { WarehouseApi, WarehouseVO } from '@/api/wms/md/warehouse'
|
|
||||||
import { WarehouseAreaApi, WarehouseAreaVO } from '@/api/wms/md/warehouse/area'
|
|
||||||
import WarehouseAreaForm from './WarehouseAreaForm.vue'
|
|
||||||
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
|
||||||
import download from '@/utils/download'
|
|
||||||
|
|
||||||
/** WMS 库区管理 */
|
|
||||||
defineOptions({ name: 'WmsWarehouseArea' })
|
|
||||||
|
|
||||||
const message = useMessage() // 消息弹窗
|
|
||||||
const { t } = useI18n() // 国际化
|
|
||||||
const route = useRoute() // 路由
|
|
||||||
|
|
||||||
const loading = ref(true) // 列表的加载中
|
|
||||||
const list = ref<WarehouseAreaVO[]>([]) // 列表的数据
|
|
||||||
const total = ref(0) // 列表的总页数
|
|
||||||
const queryParams = reactive({
|
|
||||||
pageNo: 1,
|
|
||||||
pageSize: 10,
|
|
||||||
warehouseId: Number(route.params.warehouseId) || undefined,
|
|
||||||
code: undefined,
|
|
||||||
name: undefined
|
|
||||||
})
|
|
||||||
const queryFormRef = ref() // 搜索的表单
|
|
||||||
const exportLoading = ref(false) // 导出的加载中
|
|
||||||
const warehouseList = ref<WarehouseVO[]>([]) // 仓库精简列表
|
|
||||||
|
|
||||||
/** 查询库区列表 */
|
|
||||||
const getList = async () => {
|
|
||||||
loading.value = true
|
|
||||||
try {
|
|
||||||
const data = await WarehouseAreaApi.getWarehouseAreaPage(queryParams)
|
|
||||||
list.value = data.list
|
|
||||||
total.value = data.total
|
|
||||||
} finally {
|
|
||||||
loading.value = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 查询仓库精简列表 */
|
|
||||||
const getWarehouseList = async () => {
|
|
||||||
warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 获得仓库名称 */
|
|
||||||
const getWarehouseName = (warehouseId?: number) => {
|
|
||||||
return warehouseList.value.find((warehouse) => warehouse.id === warehouseId)?.name
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 搜索按钮操作 */
|
|
||||||
const handleQuery = () => {
|
|
||||||
queryParams.pageNo = 1
|
|
||||||
getList()
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 所属仓库更改同时更新列表数据 */
|
|
||||||
const warehouseChange = () => {
|
|
||||||
handleQuery()
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 重置按钮操作 */
|
|
||||||
const resetQuery = () => {
|
|
||||||
queryFormRef.value.resetFields()
|
|
||||||
handleQuery()
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 添加/修改操作 */
|
|
||||||
const formRef = ref()
|
|
||||||
const openForm = (type: string, id?: number) => {
|
|
||||||
formRef.value.open(type, id, queryParams.warehouseId)
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 删除按钮操作 */
|
|
||||||
const handleDelete = async (id: number) => {
|
|
||||||
try {
|
|
||||||
// 删除的二次确认
|
|
||||||
await message.delConfirm()
|
|
||||||
// 发起删除
|
|
||||||
await WarehouseAreaApi.deleteWarehouseArea(id)
|
|
||||||
message.success(t('common.delSuccess'))
|
|
||||||
// 刷新列表
|
|
||||||
await getList()
|
|
||||||
} catch {}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 导出按钮操作 */
|
|
||||||
const handleExport = async () => {
|
|
||||||
try {
|
|
||||||
// 导出的二次确认
|
|
||||||
await message.exportConfirm()
|
|
||||||
// 发起导出
|
|
||||||
exportLoading.value = true
|
|
||||||
const data = await WarehouseAreaApi.exportWarehouseArea(queryParams)
|
|
||||||
download.excel(data, '库区.xls')
|
|
||||||
} catch {
|
|
||||||
} finally {
|
|
||||||
exportLoading.value = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 初始化 */
|
|
||||||
onMounted(async () => {
|
|
||||||
await getWarehouseList()
|
|
||||||
await getList()
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,83 +0,0 @@
|
||||||
<!-- WMS 库区选择器 -->
|
|
||||||
<template>
|
|
||||||
<el-select
|
|
||||||
v-bind="$attrs"
|
|
||||||
v-model="selectValue"
|
|
||||||
:clearable="clearable"
|
|
||||||
:disabled="disabled"
|
|
||||||
:filter-method="handleFilter"
|
|
||||||
:placeholder="placeholder"
|
|
||||||
class="w-1/1"
|
|
||||||
filterable
|
|
||||||
@change="handleChange"
|
|
||||||
>
|
|
||||||
<el-option v-for="area in filteredList" :key="area.id!" :label="area.name" :value="area.id!" />
|
|
||||||
</el-select>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts" setup>
|
|
||||||
import { WarehouseAreaApi, WarehouseAreaVO } from '@/api/wms/md/warehouse/area'
|
|
||||||
|
|
||||||
/** WMS 库区选择器 */
|
|
||||||
defineOptions({ name: 'WmsWarehouseAreaSelect', inheritAttrs: false })
|
|
||||||
|
|
||||||
const props = withDefaults(
|
|
||||||
defineProps<{
|
|
||||||
modelValue?: number
|
|
||||||
warehouseId?: number
|
|
||||||
disabled?: boolean
|
|
||||||
clearable?: boolean
|
|
||||||
placeholder?: string
|
|
||||||
}>(),
|
|
||||||
{
|
|
||||||
disabled: false,
|
|
||||||
clearable: true,
|
|
||||||
placeholder: '请选择库区'
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
const emit = defineEmits<{
|
|
||||||
'update:modelValue': [value: number | undefined]
|
|
||||||
change: [area: WarehouseAreaVO | undefined]
|
|
||||||
}>()
|
|
||||||
|
|
||||||
const areaList = ref<WarehouseAreaVO[]>([]) // 库区列表
|
|
||||||
const filteredList = ref<WarehouseAreaVO[]>([]) // 过滤后的库区列表
|
|
||||||
|
|
||||||
const selectValue = computed({
|
|
||||||
get: () => props.modelValue,
|
|
||||||
set: (value) => emit('update:modelValue', value)
|
|
||||||
})
|
|
||||||
|
|
||||||
/** 前端过滤 */
|
|
||||||
const handleFilter = (query: string) => {
|
|
||||||
if (!query) {
|
|
||||||
filteredList.value = areaList.value
|
|
||||||
return
|
|
||||||
}
|
|
||||||
const keyword = query.toLowerCase()
|
|
||||||
filteredList.value = areaList.value.filter((area) => area.name?.toLowerCase().includes(keyword))
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 选中变化 */
|
|
||||||
const handleChange = (value: number | undefined) => {
|
|
||||||
emit(
|
|
||||||
'change',
|
|
||||||
areaList.value.find((area) => area.id === value)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 获得库区列表 */
|
|
||||||
const getAreaList = async () => {
|
|
||||||
try {
|
|
||||||
areaList.value = await WarehouseAreaApi.getWarehouseAreaSimpleList(props.warehouseId)
|
|
||||||
filteredList.value = areaList.value
|
|
||||||
} catch {
|
|
||||||
areaList.value = []
|
|
||||||
filteredList.value = []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 监听仓库变化 */
|
|
||||||
watch(() => props.warehouseId, getAreaList, { immediate: true })
|
|
||||||
</script>
|
|
||||||
|
|
@ -75,14 +75,6 @@
|
||||||
/>
|
/>
|
||||||
<el-table-column align="center" label="操作" width="210">
|
<el-table-column align="center" label="操作" width="210">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<router-link
|
|
||||||
v-if="AREA_ENABLE"
|
|
||||||
:to="{ name: 'WmsWarehouseArea', params: { warehouseId: scope.row.id } }"
|
|
||||||
>
|
|
||||||
<el-button v-hasPermi="['wms:warehouse-area:query']" link type="primary">
|
|
||||||
库区
|
|
||||||
</el-button>
|
|
||||||
</router-link>
|
|
||||||
<el-button
|
<el-button
|
||||||
v-hasPermi="['wms:warehouse:update']"
|
v-hasPermi="['wms:warehouse:update']"
|
||||||
link
|
link
|
||||||
|
|
@ -118,7 +110,6 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { dateFormatter } from '@/utils/formatTime'
|
import { dateFormatter } from '@/utils/formatTime'
|
||||||
import { WarehouseApi, WarehouseVO } from '@/api/wms/md/warehouse'
|
import { WarehouseApi, WarehouseVO } from '@/api/wms/md/warehouse'
|
||||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
|
||||||
import WarehouseForm from './WarehouseForm.vue'
|
import WarehouseForm from './WarehouseForm.vue'
|
||||||
import download from '@/utils/download'
|
import download from '@/utils/download'
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@
|
||||||
<span v-else>-</span>
|
<span v-else>-</span>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="仓库">{{ detailData.warehouseName || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="仓库">{{ detailData.warehouseName || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item v-if="AREA_ENABLE" label="库区">{{ detailData.areaName || '-' }}</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="盈亏数量">
|
<el-descriptions-item label="盈亏数量">
|
||||||
{{ formatQuantity(detailData.totalQuantity) || '-' }}
|
{{ formatQuantity(detailData.totalQuantity) || '-' }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
|
|
@ -73,7 +72,6 @@ import { formatNullableDate } from '@/utils/formatTime'
|
||||||
import { DICT_TYPE } from '@/utils/dict'
|
import { DICT_TYPE } from '@/utils/dict'
|
||||||
import { CheckOrderApi, CheckOrderVO } from '@/api/wms/order/check'
|
import { CheckOrderApi, CheckOrderVO } from '@/api/wms/order/check'
|
||||||
import { CheckOrderDetailVO } from '@/api/wms/order/check/detail'
|
import { CheckOrderDetailVO } from '@/api/wms/order/check/detail'
|
||||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
|
||||||
import { formatPrice, formatQuantity, formatSumPrice, formatSumQuantity } from '@/views/wms/utils/format'
|
import { formatPrice, formatQuantity, formatSumPrice, formatSumQuantity } from '@/views/wms/utils/format'
|
||||||
|
|
||||||
/** WMS 盘库单详情 */
|
/** WMS 盘库单详情 */
|
||||||
|
|
|
||||||
|
|
@ -13,11 +13,6 @@
|
||||||
<WarehouseSelect v-model="formData.warehouseId" @change="handleWarehouseChange" />
|
<WarehouseSelect v-model="formData.warehouseId" @change="handleWarehouseChange" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col v-if="AREA_ENABLE" :span="8">
|
|
||||||
<el-form-item label="库区" prop="areaId">
|
|
||||||
<WarehouseAreaSelect v-model="formData.areaId" :warehouse-id="formData.warehouseId" @change="handleAreaChange" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="盈亏数量">
|
<el-form-item label="盈亏数量">
|
||||||
<el-input :model-value="formatQuantity(totalQuantity)" disabled />
|
<el-input :model-value="formatQuantity(totalQuantity)" disabled />
|
||||||
|
|
@ -111,7 +106,6 @@
|
||||||
</el-table>
|
</el-table>
|
||||||
<InventorySelect
|
<InventorySelect
|
||||||
ref="inventorySelectRef"
|
ref="inventorySelectRef"
|
||||||
:area-id="formData.areaId"
|
|
||||||
:warehouse-id="formData.warehouseId"
|
:warehouse-id="formData.warehouseId"
|
||||||
@change="handleSelectInventory"
|
@change="handleSelectInventory"
|
||||||
/>
|
/>
|
||||||
|
|
@ -152,9 +146,7 @@ import { FormRules } from 'element-plus'
|
||||||
import { CheckOrderApi, CheckOrderVO } from '@/api/wms/order/check'
|
import { CheckOrderApi, CheckOrderVO } from '@/api/wms/order/check'
|
||||||
import { CheckOrderDetailVO } from '@/api/wms/order/check/detail'
|
import { CheckOrderDetailVO } from '@/api/wms/order/check/detail'
|
||||||
import InventorySelect, { InventorySelectRow } from '@/views/wms/inventory/components/InventorySelect.vue'
|
import InventorySelect, { InventorySelectRow } from '@/views/wms/inventory/components/InventorySelect.vue'
|
||||||
import WarehouseAreaSelect from '@/views/wms/md/warehouse/components/WarehouseAreaSelect.vue'
|
|
||||||
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
||||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
|
||||||
import { OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants'
|
import { OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants'
|
||||||
import { formatQuantity, PRICE_PRECISION, QUANTITY_PRECISION, sumPrice } from '@/views/wms/utils/format'
|
import { formatQuantity, PRICE_PRECISION, QUANTITY_PRECISION, sumPrice } from '@/views/wms/utils/format'
|
||||||
import { generateOrderNo } from '@/views/wms/utils/order'
|
import { generateOrderNo } from '@/views/wms/utils/order'
|
||||||
|
|
@ -175,7 +167,6 @@ const formData = ref<CheckOrderVO>({
|
||||||
no: undefined,
|
no: undefined,
|
||||||
status: OrderStatusEnum.PREPARE,
|
status: OrderStatusEnum.PREPARE,
|
||||||
warehouseId: undefined,
|
warehouseId: undefined,
|
||||||
areaId: undefined,
|
|
||||||
totalQuantity: 0,
|
totalQuantity: 0,
|
||||||
totalAmount: 0,
|
totalAmount: 0,
|
||||||
remark: undefined,
|
remark: undefined,
|
||||||
|
|
@ -237,8 +228,6 @@ const buildDetail = (inventory: InventorySelectRow): CheckOrderDetailVO => ({
|
||||||
inventoryId: inventory.id,
|
inventoryId: inventory.id,
|
||||||
warehouseId: inventory.warehouseId,
|
warehouseId: inventory.warehouseId,
|
||||||
warehouseName: inventory.warehouseName,
|
warehouseName: inventory.warehouseName,
|
||||||
areaId: inventory.areaId,
|
|
||||||
areaName: inventory.areaName,
|
|
||||||
batchNo: inventory.batchNo,
|
batchNo: inventory.batchNo,
|
||||||
productionDate: inventory.productionDate,
|
productionDate: inventory.productionDate,
|
||||||
expirationDate: inventory.expirationDate,
|
expirationDate: inventory.expirationDate,
|
||||||
|
|
@ -268,11 +257,6 @@ const handleDeleteDetail = (index: number) => {
|
||||||
refreshTotalAmount()
|
refreshTotalAmount()
|
||||||
}
|
}
|
||||||
const handleWarehouseChange = () => {
|
const handleWarehouseChange = () => {
|
||||||
formData.value.areaId = undefined
|
|
||||||
formData.value.details = []
|
|
||||||
refreshTotalAmount()
|
|
||||||
}
|
|
||||||
const handleAreaChange = () => {
|
|
||||||
formData.value.details = []
|
formData.value.details = []
|
||||||
refreshTotalAmount()
|
refreshTotalAmount()
|
||||||
}
|
}
|
||||||
|
|
@ -291,10 +275,6 @@ const validateDetails = (required: boolean) => {
|
||||||
}
|
}
|
||||||
for (let i = 0; i < formData.value.details.length; i++) {
|
for (let i = 0; i < formData.value.details.length; i++) {
|
||||||
const detail = formData.value.details[i]
|
const detail = formData.value.details[i]
|
||||||
if (AREA_ENABLE && !detail.areaId) {
|
|
||||||
message.error(`第 ${i + 1} 行明细请选择库区`)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if (detail.checkQuantity === undefined || detail.checkQuantity < 0) {
|
if (detail.checkQuantity === undefined || detail.checkQuantity < 0) {
|
||||||
message.error(`第 ${i + 1} 行明细实盘数量不能小于 0`)
|
message.error(`第 ${i + 1} 行明细实盘数量不能小于 0`)
|
||||||
return false
|
return false
|
||||||
|
|
@ -374,7 +354,6 @@ const resetForm = () => {
|
||||||
no: generateOrderNo('PK'),
|
no: generateOrderNo('PK'),
|
||||||
status: OrderStatusEnum.PREPARE,
|
status: OrderStatusEnum.PREPARE,
|
||||||
warehouseId: undefined,
|
warehouseId: undefined,
|
||||||
areaId: undefined,
|
|
||||||
totalQuantity: 0,
|
totalQuantity: 0,
|
||||||
totalAmount: 0,
|
totalAmount: 0,
|
||||||
remark: undefined,
|
remark: undefined,
|
||||||
|
|
|
||||||
|
|
@ -16,10 +16,7 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="仓库" prop="warehouseId">
|
<el-form-item label="仓库" prop="warehouseId">
|
||||||
<WarehouseSelect v-model="queryParams.warehouseId" class="!w-240px" @change="handleWarehouseChange" />
|
<WarehouseSelect v-model="queryParams.warehouseId" class="!w-240px" />
|
||||||
</el-form-item>
|
|
||||||
<el-form-item v-if="AREA_ENABLE" label="库区" prop="areaId">
|
|
||||||
<WarehouseAreaSelect v-model="queryParams.areaId" :warehouse-id="queryParams.warehouseId" class="!w-240px" />
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="单据日期" prop="orderDate">
|
<el-form-item label="单据日期" prop="orderDate">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
|
|
@ -199,15 +196,11 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
v-if="isTableColumnVisible('warehouse')"
|
v-if="isTableColumnVisible('warehouse')"
|
||||||
:label="AREA_ENABLE ? '仓库/库区' : '仓库'"
|
label="仓库"
|
||||||
min-width="180"
|
min-width="180"
|
||||||
>
|
>
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<template v-if="AREA_ENABLE">
|
{{ row.warehouseName || '-' }}
|
||||||
<div>仓库:{{ row.warehouseName || '-' }}</div>
|
|
||||||
<div>库区:{{ row.areaName || '-' }}</div>
|
|
||||||
</template>
|
|
||||||
<template v-else>{{ row.warehouseName || '-' }}</template>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column v-if="isTableColumnVisible('quantityAmount')" label="盈亏数量/总金额(元)" min-width="180">
|
<el-table-column v-if="isTableColumnVisible('quantityAmount')" label="盈亏数量/总金额(元)" min-width="180">
|
||||||
|
|
@ -272,9 +265,7 @@ import { defaultShortcuts, formatNullableDate } from '@/utils/formatTime'
|
||||||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||||
import { CheckOrderApi, CheckOrderVO } from '@/api/wms/order/check'
|
import { CheckOrderApi, CheckOrderVO } from '@/api/wms/order/check'
|
||||||
import { CheckOrderDetailVO } from '@/api/wms/order/check/detail'
|
import { CheckOrderDetailVO } from '@/api/wms/order/check/detail'
|
||||||
import WarehouseAreaSelect from '@/views/wms/md/warehouse/components/WarehouseAreaSelect.vue'
|
|
||||||
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
||||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
|
||||||
import { OrderDeleteStatusList, OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants'
|
import { OrderDeleteStatusList, OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants'
|
||||||
import { formatPrice, formatQuantity, PRICE_PRECISION, QUANTITY_PRECISION } from '@/views/wms/utils/format'
|
import { formatPrice, formatQuantity, PRICE_PRECISION, QUANTITY_PRECISION } from '@/views/wms/utils/format'
|
||||||
import UserSelectV2 from '@/views/system/user/components/UserSelectV2.vue'
|
import UserSelectV2 from '@/views/system/user/components/UserSelectV2.vue'
|
||||||
|
|
@ -317,7 +308,6 @@ const getDefaultQueryParams = () => ({
|
||||||
no: undefined as string | undefined,
|
no: undefined as string | undefined,
|
||||||
status: undefined as number | undefined,
|
status: undefined as number | undefined,
|
||||||
warehouseId: undefined as number | undefined,
|
warehouseId: undefined as number | undefined,
|
||||||
areaId: undefined as number | undefined,
|
|
||||||
orderDate: undefined as string[] | undefined,
|
orderDate: undefined as string[] | undefined,
|
||||||
totalQuantityMin: undefined as number | undefined,
|
totalQuantityMin: undefined as number | undefined,
|
||||||
totalQuantityMax: undefined as number | undefined,
|
totalQuantityMax: undefined as number | undefined,
|
||||||
|
|
@ -363,9 +353,6 @@ const resetQuery = () => {
|
||||||
Object.assign(queryParams, getDefaultQueryParams())
|
Object.assign(queryParams, getDefaultQueryParams())
|
||||||
handleQuery()
|
handleQuery()
|
||||||
}
|
}
|
||||||
const handleWarehouseChange = () => {
|
|
||||||
queryParams.areaId = undefined
|
|
||||||
}
|
|
||||||
const handleExpandChange = async (row: CheckOrderVO) => {
|
const handleExpandChange = async (row: CheckOrderVO) => {
|
||||||
if (!row.id || detailMap[row.id]) return
|
if (!row.id || detailMap[row.id]) return
|
||||||
detailMap[row.id] = await CheckOrderApi.getCheckOrderDetailListByOrderId(row.id)
|
detailMap[row.id] = await CheckOrderApi.getCheckOrderDetailListByOrderId(row.id)
|
||||||
|
|
|
||||||
|
|
@ -13,17 +13,11 @@
|
||||||
/>
|
/>
|
||||||
<span v-else>-</span>
|
<span v-else>-</span>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item :label="AREA_ENABLE ? '来源仓库/库区' : '来源仓库'">
|
<el-descriptions-item label="来源仓库">
|
||||||
<template v-if="AREA_ENABLE">
|
{{ detailData.sourceWarehouseName || '-' }}
|
||||||
{{ detailData.sourceWarehouseName || '-' }} / {{ detailData.sourceAreaName || '-' }}
|
|
||||||
</template>
|
|
||||||
<template v-else>{{ detailData.sourceWarehouseName || '-' }}</template>
|
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item :label="AREA_ENABLE ? '目标仓库/库区' : '目标仓库'">
|
<el-descriptions-item label="目标仓库">
|
||||||
<template v-if="AREA_ENABLE">
|
{{ detailData.targetWarehouseName || '-' }}
|
||||||
{{ detailData.targetWarehouseName || '-' }} / {{ detailData.targetAreaName || '-' }}
|
|
||||||
</template>
|
|
||||||
<template v-else>{{ detailData.targetWarehouseName || '-' }}</template>
|
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="总数量">
|
<el-descriptions-item label="总数量">
|
||||||
{{ formatQuantity(detailData.totalQuantity) || '-' }}
|
{{ formatQuantity(detailData.totalQuantity) || '-' }}
|
||||||
|
|
@ -80,7 +74,6 @@ import { formatNullableDate } from '@/utils/formatTime'
|
||||||
import { DICT_TYPE } from '@/utils/dict'
|
import { DICT_TYPE } from '@/utils/dict'
|
||||||
import { MovementOrderApi, MovementOrderVO } from '@/api/wms/order/movement'
|
import { MovementOrderApi, MovementOrderVO } from '@/api/wms/order/movement'
|
||||||
import { MovementOrderDetailVO } from '@/api/wms/order/movement/detail'
|
import { MovementOrderDetailVO } from '@/api/wms/order/movement/detail'
|
||||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
|
||||||
import { formatPrice, formatQuantity, formatSumPrice, formatSumQuantity } from '@/views/wms/utils/format'
|
import { formatPrice, formatQuantity, formatSumPrice, formatSumQuantity } from '@/views/wms/utils/format'
|
||||||
|
|
||||||
/** WMS 移库单详情 */
|
/** WMS 移库单详情 */
|
||||||
|
|
|
||||||
|
|
@ -13,29 +13,11 @@
|
||||||
<WarehouseSelect v-model="formData.sourceWarehouseId" @change="handleSourceWarehouseChange" />
|
<WarehouseSelect v-model="formData.sourceWarehouseId" @change="handleSourceWarehouseChange" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col v-if="AREA_ENABLE" :span="8">
|
|
||||||
<el-form-item label="来源库区" prop="sourceAreaId">
|
|
||||||
<WarehouseAreaSelect
|
|
||||||
v-model="formData.sourceAreaId"
|
|
||||||
:warehouse-id="formData.sourceWarehouseId"
|
|
||||||
@change="handleSourceAreaChange"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="目标仓库" prop="targetWarehouseId">
|
<el-form-item label="目标仓库" prop="targetWarehouseId">
|
||||||
<WarehouseSelect v-model="formData.targetWarehouseId" @change="handleTargetWarehouseChange" />
|
<WarehouseSelect v-model="formData.targetWarehouseId" @change="handleTargetWarehouseChange" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col v-if="AREA_ENABLE" :span="8">
|
|
||||||
<el-form-item label="目标库区" prop="targetAreaId">
|
|
||||||
<WarehouseAreaSelect
|
|
||||||
v-model="formData.targetAreaId"
|
|
||||||
:warehouse-id="formData.targetWarehouseId"
|
|
||||||
@change="handleTargetAreaChange"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="总数量">
|
<el-form-item label="总数量">
|
||||||
<el-input :model-value="formatQuantity(totalQuantity)" disabled />
|
<el-input :model-value="formatQuantity(totalQuantity)" disabled />
|
||||||
|
|
@ -84,7 +66,6 @@
|
||||||
<div v-if="row.skuCode" class="text-12px text-gray-500">规格编号:{{ row.skuCode }}</div>
|
<div v-if="row.skuCode" class="text-12px text-gray-500">规格编号:{{ row.skuCode }}</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column v-if="AREA_ENABLE" label="来源库区" min-width="140" prop="sourceAreaName" />
|
|
||||||
<el-table-column label="批号" min-width="140" prop="batchNo" />
|
<el-table-column label="批号" min-width="140" prop="batchNo" />
|
||||||
<el-table-column align="right" label="可用库存" width="120">
|
<el-table-column align="right" label="可用库存" width="120">
|
||||||
<template #default="{ row }">{{ formatQuantity(row.availableQuantity) || '-' }}</template>
|
<template #default="{ row }">{{ formatQuantity(row.availableQuantity) || '-' }}</template>
|
||||||
|
|
@ -127,7 +108,6 @@
|
||||||
</el-table>
|
</el-table>
|
||||||
<InventorySelect
|
<InventorySelect
|
||||||
ref="inventorySelectRef"
|
ref="inventorySelectRef"
|
||||||
:area-id="formData.sourceAreaId"
|
|
||||||
:warehouse-id="formData.sourceWarehouseId"
|
:warehouse-id="formData.sourceWarehouseId"
|
||||||
@change="handleSelectInventory"
|
@change="handleSelectInventory"
|
||||||
/>
|
/>
|
||||||
|
|
@ -168,9 +148,7 @@ import { FormRules } from 'element-plus'
|
||||||
import { MovementOrderApi, MovementOrderVO } from '@/api/wms/order/movement'
|
import { MovementOrderApi, MovementOrderVO } from '@/api/wms/order/movement'
|
||||||
import { MovementOrderDetailVO } from '@/api/wms/order/movement/detail'
|
import { MovementOrderDetailVO } from '@/api/wms/order/movement/detail'
|
||||||
import InventorySelect, { InventorySelectRow } from '@/views/wms/inventory/components/InventorySelect.vue'
|
import InventorySelect, { InventorySelectRow } from '@/views/wms/inventory/components/InventorySelect.vue'
|
||||||
import WarehouseAreaSelect from '@/views/wms/md/warehouse/components/WarehouseAreaSelect.vue'
|
|
||||||
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
||||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
|
||||||
import { OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants'
|
import { OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants'
|
||||||
import { formatQuantity, PRICE_PRECISION, QUANTITY_PRECISION, sumPrice, sumQuantity } from '@/views/wms/utils/format'
|
import { formatQuantity, PRICE_PRECISION, QUANTITY_PRECISION, sumPrice, sumQuantity } from '@/views/wms/utils/format'
|
||||||
import { generateOrderNo } from '@/views/wms/utils/order'
|
import { generateOrderNo } from '@/views/wms/utils/order'
|
||||||
|
|
@ -191,9 +169,7 @@ const formData = ref<MovementOrderVO>({
|
||||||
no: undefined,
|
no: undefined,
|
||||||
status: OrderStatusEnum.PREPARE,
|
status: OrderStatusEnum.PREPARE,
|
||||||
sourceWarehouseId: undefined,
|
sourceWarehouseId: undefined,
|
||||||
sourceAreaId: undefined,
|
|
||||||
targetWarehouseId: undefined,
|
targetWarehouseId: undefined,
|
||||||
targetAreaId: undefined,
|
|
||||||
totalQuantity: 0,
|
totalQuantity: 0,
|
||||||
totalAmount: 0,
|
totalAmount: 0,
|
||||||
remark: undefined,
|
remark: undefined,
|
||||||
|
|
@ -252,10 +228,7 @@ const buildDetail = (inventory: InventorySelectRow): MovementOrderDetailVO => ({
|
||||||
skuName: inventory.skuName,
|
skuName: inventory.skuName,
|
||||||
sourceWarehouseId: inventory.warehouseId,
|
sourceWarehouseId: inventory.warehouseId,
|
||||||
sourceWarehouseName: inventory.warehouseName,
|
sourceWarehouseName: inventory.warehouseName,
|
||||||
sourceAreaId: inventory.areaId,
|
|
||||||
sourceAreaName: inventory.areaName,
|
|
||||||
targetWarehouseId: formData.value.targetWarehouseId,
|
targetWarehouseId: formData.value.targetWarehouseId,
|
||||||
targetAreaId: formData.value.targetAreaId,
|
|
||||||
batchNo: inventory.batchNo,
|
batchNo: inventory.batchNo,
|
||||||
productionDate: inventory.productionDate,
|
productionDate: inventory.productionDate,
|
||||||
expirationDate: inventory.expirationDate,
|
expirationDate: inventory.expirationDate,
|
||||||
|
|
@ -283,8 +256,7 @@ const isInventorySelected = (inventory: InventorySelectRow) =>
|
||||||
(formData.value.details || []).some((detail) => {
|
(formData.value.details || []).some((detail) => {
|
||||||
return (
|
return (
|
||||||
detail.skuId === inventory.skuId &&
|
detail.skuId === inventory.skuId &&
|
||||||
detail.sourceWarehouseId === inventory.warehouseId &&
|
detail.sourceWarehouseId === inventory.warehouseId
|
||||||
detail.sourceAreaId === inventory.areaId
|
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -294,24 +266,16 @@ const handleDeleteDetail = (index: number) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleSourceWarehouseChange = () => {
|
const handleSourceWarehouseChange = () => {
|
||||||
formData.value.sourceAreaId = undefined
|
|
||||||
formData.value.details = []
|
|
||||||
refreshTotalAmount()
|
|
||||||
}
|
|
||||||
const handleSourceAreaChange = () => {
|
|
||||||
formData.value.details = []
|
formData.value.details = []
|
||||||
refreshTotalAmount()
|
refreshTotalAmount()
|
||||||
}
|
}
|
||||||
const handleTargetWarehouseChange = () => {
|
const handleTargetWarehouseChange = () => {
|
||||||
formData.value.targetAreaId = undefined
|
|
||||||
refreshTargetToDetails()
|
refreshTargetToDetails()
|
||||||
}
|
}
|
||||||
const handleTargetAreaChange = () => refreshTargetToDetails()
|
|
||||||
const refreshTargetToDetails = () => {
|
const refreshTargetToDetails = () => {
|
||||||
const details = formData.value.details || []
|
const details = formData.value.details || []
|
||||||
details.forEach((detail) => {
|
details.forEach((detail) => {
|
||||||
detail.targetWarehouseId = formData.value.targetWarehouseId
|
detail.targetWarehouseId = formData.value.targetWarehouseId
|
||||||
detail.targetAreaId = formData.value.targetAreaId
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const refreshTotalAmount = () => {
|
const refreshTotalAmount = () => {
|
||||||
|
|
@ -320,6 +284,10 @@ const refreshTotalAmount = () => {
|
||||||
|
|
||||||
/** 校验明细 */
|
/** 校验明细 */
|
||||||
const validateDetails = (required: boolean) => {
|
const validateDetails = (required: boolean) => {
|
||||||
|
if (formData.value.sourceWarehouseId === formData.value.targetWarehouseId) {
|
||||||
|
message.error('来源仓库和目标仓库不能相同')
|
||||||
|
return false
|
||||||
|
}
|
||||||
if (!formData.value.details?.length) {
|
if (!formData.value.details?.length) {
|
||||||
if (required) {
|
if (required) {
|
||||||
message.error('至少包含一条移库明细')
|
message.error('至少包含一条移库明细')
|
||||||
|
|
@ -327,19 +295,8 @@ const validateDetails = (required: boolean) => {
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if (
|
|
||||||
formData.value.sourceWarehouseId === formData.value.targetWarehouseId &&
|
|
||||||
formData.value.sourceAreaId === formData.value.targetAreaId
|
|
||||||
) {
|
|
||||||
message.error('来源仓库库区和目标仓库库区不能相同')
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
for (let i = 0; i < formData.value.details.length; i++) {
|
for (let i = 0; i < formData.value.details.length; i++) {
|
||||||
const detail = formData.value.details[i]
|
const detail = formData.value.details[i]
|
||||||
if (AREA_ENABLE && (!detail.sourceAreaId || !detail.targetAreaId)) {
|
|
||||||
message.error(`第 ${i + 1} 行明细请选择来源和目标库区`)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if (!detail.quantity || detail.quantity <= 0) {
|
if (!detail.quantity || detail.quantity <= 0) {
|
||||||
message.error(`第 ${i + 1} 行明细移库数量必须大于 0`)
|
message.error(`第 ${i + 1} 行明细移库数量必须大于 0`)
|
||||||
return false
|
return false
|
||||||
|
|
@ -423,9 +380,7 @@ const resetForm = () => {
|
||||||
no: generateOrderNo('YK'),
|
no: generateOrderNo('YK'),
|
||||||
status: OrderStatusEnum.PREPARE,
|
status: OrderStatusEnum.PREPARE,
|
||||||
sourceWarehouseId: undefined,
|
sourceWarehouseId: undefined,
|
||||||
sourceAreaId: undefined,
|
|
||||||
targetWarehouseId: undefined,
|
targetWarehouseId: undefined,
|
||||||
targetAreaId: undefined,
|
|
||||||
totalQuantity: 0,
|
totalQuantity: 0,
|
||||||
totalAmount: 0,
|
totalAmount: 0,
|
||||||
remark: undefined,
|
remark: undefined,
|
||||||
|
|
|
||||||
|
|
@ -199,28 +199,20 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
v-if="isTableColumnVisible('sourceWarehouse')"
|
v-if="isTableColumnVisible('sourceWarehouse')"
|
||||||
:label="AREA_ENABLE ? '来源仓库/库区' : '来源仓库'"
|
label="来源仓库"
|
||||||
min-width="180"
|
min-width="180"
|
||||||
>
|
>
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<template v-if="AREA_ENABLE">
|
{{ row.sourceWarehouseName || '-' }}
|
||||||
<div>仓库:{{ row.sourceWarehouseName || '-' }}</div>
|
|
||||||
<div>库区:{{ row.sourceAreaName || '-' }}</div>
|
|
||||||
</template>
|
|
||||||
<template v-else>{{ row.sourceWarehouseName || '-' }}</template>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
v-if="isTableColumnVisible('targetWarehouse')"
|
v-if="isTableColumnVisible('targetWarehouse')"
|
||||||
:label="AREA_ENABLE ? '目标仓库/库区' : '目标仓库'"
|
label="目标仓库"
|
||||||
min-width="180"
|
min-width="180"
|
||||||
>
|
>
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<template v-if="AREA_ENABLE">
|
{{ row.targetWarehouseName || '-' }}
|
||||||
<div>仓库:{{ row.targetWarehouseName || '-' }}</div>
|
|
||||||
<div>库区:{{ row.targetAreaName || '-' }}</div>
|
|
||||||
</template>
|
|
||||||
<template v-else>{{ row.targetWarehouseName || '-' }}</template>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column v-if="isTableColumnVisible('quantityAmount')" label="总数量/总金额(元)" min-width="180">
|
<el-table-column v-if="isTableColumnVisible('quantityAmount')" label="总数量/总金额(元)" min-width="180">
|
||||||
|
|
@ -286,7 +278,6 @@ import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||||
import { MovementOrderApi, MovementOrderVO } from '@/api/wms/order/movement'
|
import { MovementOrderApi, MovementOrderVO } from '@/api/wms/order/movement'
|
||||||
import { MovementOrderDetailVO } from '@/api/wms/order/movement/detail'
|
import { MovementOrderDetailVO } from '@/api/wms/order/movement/detail'
|
||||||
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
||||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
|
||||||
import { OrderDeleteStatusList, OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants'
|
import { OrderDeleteStatusList, OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants'
|
||||||
import { formatPrice, formatQuantity, PRICE_PRECISION, QUANTITY_PRECISION } from '@/views/wms/utils/format'
|
import { formatPrice, formatQuantity, PRICE_PRECISION, QUANTITY_PRECISION } from '@/views/wms/utils/format'
|
||||||
import UserSelectV2 from '@/views/system/user/components/UserSelectV2.vue'
|
import UserSelectV2 from '@/views/system/user/components/UserSelectV2.vue'
|
||||||
|
|
|
||||||
|
|
@ -30,9 +30,6 @@
|
||||||
<el-descriptions-item label="业务单号">
|
<el-descriptions-item label="业务单号">
|
||||||
{{ detailData.bizOrderNo || '-' }}
|
{{ detailData.bizOrderNo || '-' }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item v-if="AREA_ENABLE" label="库区">
|
|
||||||
{{ detailData.areaName || '-' }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="总数量">
|
<el-descriptions-item label="总数量">
|
||||||
{{ formatQuantity(detailData.totalQuantity) || '-' }}
|
{{ formatQuantity(detailData.totalQuantity) || '-' }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
|
|
@ -74,7 +71,6 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column v-if="AREA_ENABLE" label="库区" min-width="140" prop="areaName" />
|
|
||||||
<el-table-column label="批号" min-width="140" prop="batchNo" />
|
<el-table-column label="批号" min-width="140" prop="batchNo" />
|
||||||
<el-table-column label="生产日期" width="140">
|
<el-table-column label="生产日期" width="140">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
|
|
@ -112,7 +108,6 @@ import { formatNullableDate } from '@/utils/formatTime'
|
||||||
import { DICT_TYPE } from '@/utils/dict'
|
import { DICT_TYPE } from '@/utils/dict'
|
||||||
import { ReceiptOrderApi, ReceiptOrderVO } from '@/api/wms/order/receipt'
|
import { ReceiptOrderApi, ReceiptOrderVO } from '@/api/wms/order/receipt'
|
||||||
import { ReceiptOrderDetailVO } from '@/api/wms/order/receipt/detail'
|
import { ReceiptOrderDetailVO } from '@/api/wms/order/receipt/detail'
|
||||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
|
||||||
import {
|
import {
|
||||||
formatPrice,
|
formatPrice,
|
||||||
formatQuantity,
|
formatQuantity,
|
||||||
|
|
|
||||||
|
|
@ -42,16 +42,7 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="仓库" prop="warehouseId">
|
<el-form-item label="仓库" prop="warehouseId">
|
||||||
<WarehouseSelect v-model="formData.warehouseId" @change="handleWarehouseChange" />
|
<WarehouseSelect v-model="formData.warehouseId" />
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col v-if="AREA_ENABLE" :span="8">
|
|
||||||
<el-form-item label="库区" prop="areaId">
|
|
||||||
<WarehouseAreaSelect
|
|
||||||
v-model="formData.areaId"
|
|
||||||
:warehouse-id="formData.warehouseId"
|
|
||||||
@change="handleAreaChange"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
|
|
@ -71,7 +62,7 @@
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="AREA_ENABLE ? 8 : 16">
|
<el-col :span="16">
|
||||||
<el-form-item label="备注" prop="remark">
|
<el-form-item label="备注" prop="remark">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="formData.remark"
|
v-model="formData.remark"
|
||||||
|
|
@ -116,16 +107,6 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column v-if="AREA_ENABLE" label="库区" min-width="180">
|
|
||||||
<template #default="scope">
|
|
||||||
<WarehouseAreaSelect
|
|
||||||
v-model="scope.row.areaId"
|
|
||||||
:disabled="!formData.warehouseId || !!formData.areaId"
|
|
||||||
:warehouse-id="formData.warehouseId"
|
|
||||||
placeholder="请选择库区"
|
|
||||||
/>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="批号" min-width="160">
|
<el-table-column label="批号" min-width="160">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-input v-model="scope.row.batchNo" maxlength="64" placeholder="请输入批号" />
|
<el-input v-model="scope.row.batchNo" maxlength="64" placeholder="请输入批号" />
|
||||||
|
|
@ -232,9 +213,7 @@ import { ReceiptOrderDetailVO } from '@/api/wms/order/receipt/detail'
|
||||||
import { ItemSkuVO } from '@/api/wms/md/item/sku'
|
import { ItemSkuVO } from '@/api/wms/md/item/sku'
|
||||||
import ItemSkuSelect from '@/views/wms/md/item/sku/components/ItemSkuSelect.vue'
|
import ItemSkuSelect from '@/views/wms/md/item/sku/components/ItemSkuSelect.vue'
|
||||||
import MerchantSelect from '@/views/wms/md/merchant/components/MerchantSelect.vue'
|
import MerchantSelect from '@/views/wms/md/merchant/components/MerchantSelect.vue'
|
||||||
import WarehouseAreaSelect from '@/views/wms/md/warehouse/components/WarehouseAreaSelect.vue'
|
|
||||||
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
||||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
|
||||||
import { OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants'
|
import { OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants'
|
||||||
import {
|
import {
|
||||||
formatQuantity,
|
formatQuantity,
|
||||||
|
|
@ -264,7 +243,6 @@ const formData = ref<ReceiptOrderVO>({
|
||||||
bizOrderNo: undefined,
|
bizOrderNo: undefined,
|
||||||
merchantId: undefined,
|
merchantId: undefined,
|
||||||
warehouseId: undefined,
|
warehouseId: undefined,
|
||||||
areaId: undefined,
|
|
||||||
totalQuantity: 0,
|
totalQuantity: 0,
|
||||||
totalAmount: 0,
|
totalAmount: 0,
|
||||||
remark: undefined,
|
remark: undefined,
|
||||||
|
|
@ -325,7 +303,6 @@ const buildDetail = (sku: ItemSkuVO): ReceiptOrderDetailVO => ({
|
||||||
skuId: sku.id,
|
skuId: sku.id,
|
||||||
skuCode: sku.code,
|
skuCode: sku.code,
|
||||||
skuName: sku.name,
|
skuName: sku.name,
|
||||||
areaId: formData.value.areaId,
|
|
||||||
batchNo: undefined,
|
batchNo: undefined,
|
||||||
productionDate: undefined,
|
productionDate: undefined,
|
||||||
expirationDate: undefined,
|
expirationDate: undefined,
|
||||||
|
|
@ -355,17 +332,6 @@ const handleDeleteDetail = (index: number) => {
|
||||||
refreshTotalAmount()
|
refreshTotalAmount()
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 仓库变化 */
|
|
||||||
const handleWarehouseChange = () => {
|
|
||||||
formData.value.areaId = undefined
|
|
||||||
formData.value.details?.forEach((detail) => (detail.areaId = undefined))
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 库区变化 */
|
|
||||||
const handleAreaChange = () => {
|
|
||||||
formData.value.details?.forEach((detail) => (detail.areaId = formData.value.areaId))
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 明细金额变化 */
|
/** 明细金额变化 */
|
||||||
const handleDetailAmountChange = () => {
|
const handleDetailAmountChange = () => {
|
||||||
refreshTotalAmount()
|
refreshTotalAmount()
|
||||||
|
|
@ -391,10 +357,6 @@ const validateDetails = (required: boolean) => {
|
||||||
message.error(`第 ${i + 1} 行明细请选择商品规格`)
|
message.error(`第 ${i + 1} 行明细请选择商品规格`)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if (AREA_ENABLE && !detail.areaId) {
|
|
||||||
message.error(`第 ${i + 1} 行明细请选择库区`)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if (!detail.quantity || detail.quantity <= 0) {
|
if (!detail.quantity || detail.quantity <= 0) {
|
||||||
message.error(`第 ${i + 1} 行明细入库数量必须大于 0`)
|
message.error(`第 ${i + 1} 行明细入库数量必须大于 0`)
|
||||||
return false
|
return false
|
||||||
|
|
@ -487,7 +449,6 @@ const resetForm = () => {
|
||||||
bizOrderNo: undefined,
|
bizOrderNo: undefined,
|
||||||
merchantId: undefined,
|
merchantId: undefined,
|
||||||
warehouseId: undefined,
|
warehouseId: undefined,
|
||||||
areaId: undefined,
|
|
||||||
totalQuantity: 0,
|
totalQuantity: 0,
|
||||||
totalAmount: 0,
|
totalAmount: 0,
|
||||||
remark: undefined,
|
remark: undefined,
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@
|
||||||
<div>供应商:{{ printData.merchantName || '-' }}</div>
|
<div>供应商:{{ printData.merchantName || '-' }}</div>
|
||||||
<div>业务单号:{{ printData.bizOrderNo || '-' }}</div>
|
<div>业务单号:{{ printData.bizOrderNo || '-' }}</div>
|
||||||
<div>仓库:{{ printData.warehouseName || '-' }}</div>
|
<div>仓库:{{ printData.warehouseName || '-' }}</div>
|
||||||
<div v-if="AREA_ENABLE">库区:{{ printData.areaName || '-' }}</div>
|
|
||||||
<div>总数量:{{ formatQuantity(printData.totalQuantity) || '-' }}</div>
|
<div>总数量:{{ formatQuantity(printData.totalQuantity) || '-' }}</div>
|
||||||
<div>总金额:{{ formatPrice(printData.totalAmount) || '-' }}</div>
|
<div>总金额:{{ formatPrice(printData.totalAmount) || '-' }}</div>
|
||||||
<div>创建时间:{{ formatNullableDate(printData.createTime) }}</div>
|
<div>创建时间:{{ formatNullableDate(printData.createTime) }}</div>
|
||||||
|
|
@ -24,12 +23,6 @@
|
||||||
<tr>
|
<tr>
|
||||||
<th class="border border-solid border-#dcdfe6 bg-#f5f7fa p-8px text-left">商品信息</th>
|
<th class="border border-solid border-#dcdfe6 bg-#f5f7fa p-8px text-left">商品信息</th>
|
||||||
<th class="border border-solid border-#dcdfe6 bg-#f5f7fa p-8px text-left">规格信息</th>
|
<th class="border border-solid border-#dcdfe6 bg-#f5f7fa p-8px text-left">规格信息</th>
|
||||||
<th
|
|
||||||
v-if="AREA_ENABLE"
|
|
||||||
class="border border-solid border-#dcdfe6 bg-#f5f7fa p-8px text-left"
|
|
||||||
>
|
|
||||||
库区
|
|
||||||
</th>
|
|
||||||
<th
|
<th
|
||||||
class="border border-solid border-#dcdfe6 bg-#f5f7fa p-8px text-left"
|
class="border border-solid border-#dcdfe6 bg-#f5f7fa p-8px text-left"
|
||||||
>
|
>
|
||||||
|
|
@ -60,9 +53,6 @@
|
||||||
<div>{{ detail.skuName || '-' }}</div>
|
<div>{{ detail.skuName || '-' }}</div>
|
||||||
<div v-if="detail.skuCode" class="text-12px">编号:{{ detail.skuCode }}</div>
|
<div v-if="detail.skuCode" class="text-12px">编号:{{ detail.skuCode }}</div>
|
||||||
</td>
|
</td>
|
||||||
<td v-if="AREA_ENABLE" class="border border-solid border-#dcdfe6 p-8px">
|
|
||||||
{{ detail.areaName || '-' }}
|
|
||||||
</td>
|
|
||||||
<td class="border border-solid border-#dcdfe6 p-8px">
|
<td class="border border-solid border-#dcdfe6 p-8px">
|
||||||
{{ detail.batchNo || '-' }}
|
{{ detail.batchNo || '-' }}
|
||||||
</td>
|
</td>
|
||||||
|
|
@ -98,7 +88,6 @@
|
||||||
import { formatNullableDate } from '@/utils/formatTime'
|
import { formatNullableDate } from '@/utils/formatTime'
|
||||||
import { DICT_TYPE, getDictLabel } from '@/utils/dict'
|
import { DICT_TYPE, getDictLabel } from '@/utils/dict'
|
||||||
import { ReceiptOrderApi, ReceiptOrderVO } from '@/api/wms/order/receipt'
|
import { ReceiptOrderApi, ReceiptOrderVO } from '@/api/wms/order/receipt'
|
||||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
|
||||||
import { formatPrice, formatQuantity } from '@/views/wms/utils/format'
|
import { formatPrice, formatQuantity } from '@/views/wms/utils/format'
|
||||||
|
|
||||||
/** WMS 入库单打印 */
|
/** WMS 入库单打印 */
|
||||||
|
|
@ -106,7 +95,7 @@ defineOptions({ name: 'WmsReceiptOrderPrint' })
|
||||||
|
|
||||||
const printData = ref<ReceiptOrderVO>({}) // 打印数据
|
const printData = ref<ReceiptOrderVO>({}) // 打印数据
|
||||||
const printButtonRef = ref<HTMLButtonElement>() // 打印按钮
|
const printButtonRef = ref<HTMLButtonElement>() // 打印按钮
|
||||||
const tableColumnCount = computed(() => 8 + (AREA_ENABLE ? 1 : 0))
|
const tableColumnCount = 8
|
||||||
const printObj = ref({
|
const printObj = ref({
|
||||||
id: 'wmsReceiptOrderPrint',
|
id: 'wmsReceiptOrderPrint',
|
||||||
popTitle: ' ',
|
popTitle: ' ',
|
||||||
|
|
|
||||||
|
|
@ -237,13 +237,6 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
|
||||||
v-if="AREA_ENABLE"
|
|
||||||
align="center"
|
|
||||||
label="库区"
|
|
||||||
min-width="140"
|
|
||||||
prop="areaName"
|
|
||||||
/>
|
|
||||||
<el-table-column align="center" label="批号" min-width="140" prop="batchNo" />
|
<el-table-column align="center" label="批号" min-width="140" prop="batchNo" />
|
||||||
<el-table-column label="生产日期/过期日期" min-width="180">
|
<el-table-column label="生产日期/过期日期" min-width="180">
|
||||||
<template #default="detailScope">
|
<template #default="detailScope">
|
||||||
|
|
@ -305,17 +298,11 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
v-if="isTableColumnVisible('warehouse')"
|
v-if="isTableColumnVisible('warehouse')"
|
||||||
:label="AREA_ENABLE ? '仓库/库区' : '仓库'"
|
label="仓库"
|
||||||
min-width="160"
|
min-width="160"
|
||||||
>
|
>
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<template v-if="AREA_ENABLE">
|
{{ scope.row.warehouseName || '-' }}
|
||||||
<div>仓库:{{ scope.row.warehouseName || '-' }}</div>
|
|
||||||
<div>库区:{{ scope.row.areaName || '-' }}</div>
|
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
{{ scope.row.warehouseName || '-' }}
|
|
||||||
</template>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
|
|
@ -422,7 +409,6 @@ import { ReceiptOrderApi, ReceiptOrderVO } from '@/api/wms/order/receipt'
|
||||||
import { ReceiptOrderDetailVO } from '@/api/wms/order/receipt/detail'
|
import { ReceiptOrderDetailVO } from '@/api/wms/order/receipt/detail'
|
||||||
import MerchantSelect from '@/views/wms/md/merchant/components/MerchantSelect.vue'
|
import MerchantSelect from '@/views/wms/md/merchant/components/MerchantSelect.vue'
|
||||||
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
||||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
|
||||||
import {
|
import {
|
||||||
OrderDeleteStatusList,
|
OrderDeleteStatusList,
|
||||||
OrderStatusEnum,
|
OrderStatusEnum,
|
||||||
|
|
|
||||||
|
|
@ -30,9 +30,6 @@
|
||||||
<el-descriptions-item label="业务单号">
|
<el-descriptions-item label="业务单号">
|
||||||
{{ detailData.bizOrderNo || '-' }}
|
{{ detailData.bizOrderNo || '-' }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item v-if="AREA_ENABLE" label="库区">
|
|
||||||
{{ detailData.areaName || '-' }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="总数量">
|
<el-descriptions-item label="总数量">
|
||||||
{{ formatQuantity(detailData.totalQuantity) || '-' }}
|
{{ formatQuantity(detailData.totalQuantity) || '-' }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
|
|
@ -74,7 +71,6 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column v-if="AREA_ENABLE" label="库区" min-width="140" prop="areaName" />
|
|
||||||
<el-table-column label="批号" min-width="140" prop="batchNo" />
|
<el-table-column label="批号" min-width="140" prop="batchNo" />
|
||||||
<el-table-column label="生产日期" width="140">
|
<el-table-column label="生产日期" width="140">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
|
|
@ -112,7 +108,6 @@ import { formatNullableDate } from '@/utils/formatTime'
|
||||||
import { DICT_TYPE } from '@/utils/dict'
|
import { DICT_TYPE } from '@/utils/dict'
|
||||||
import { ShipmentOrderApi, ShipmentOrderVO } from '@/api/wms/order/shipment'
|
import { ShipmentOrderApi, ShipmentOrderVO } from '@/api/wms/order/shipment'
|
||||||
import { ShipmentOrderDetailVO } from '@/api/wms/order/shipment/detail'
|
import { ShipmentOrderDetailVO } from '@/api/wms/order/shipment/detail'
|
||||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
|
||||||
import {
|
import {
|
||||||
formatPrice,
|
formatPrice,
|
||||||
formatQuantity,
|
formatQuantity,
|
||||||
|
|
|
||||||
|
|
@ -45,15 +45,6 @@
|
||||||
<WarehouseSelect v-model="formData.warehouseId" @change="handleWarehouseChange" />
|
<WarehouseSelect v-model="formData.warehouseId" @change="handleWarehouseChange" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col v-if="AREA_ENABLE" :span="8">
|
|
||||||
<el-form-item label="库区" prop="areaId">
|
|
||||||
<WarehouseAreaSelect
|
|
||||||
v-model="formData.areaId"
|
|
||||||
:warehouse-id="formData.warehouseId"
|
|
||||||
@change="handleAreaChange"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="总数量">
|
<el-form-item label="总数量">
|
||||||
<el-input :model-value="formatQuantity(totalQuantity)" disabled />
|
<el-input :model-value="formatQuantity(totalQuantity)" disabled />
|
||||||
|
|
@ -71,7 +62,7 @@
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="AREA_ENABLE ? 8 : 16">
|
<el-col :span="16">
|
||||||
<el-form-item label="备注" prop="remark">
|
<el-form-item label="备注" prop="remark">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="formData.remark"
|
v-model="formData.remark"
|
||||||
|
|
@ -116,11 +107,6 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column v-if="AREA_ENABLE" label="库区" min-width="140">
|
|
||||||
<template #default="scope">
|
|
||||||
{{ scope.row.areaName || '-' }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="批号" min-width="160">
|
<el-table-column label="批号" min-width="160">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{ scope.row.batchNo || '-' }}
|
{{ scope.row.batchNo || '-' }}
|
||||||
|
|
@ -179,7 +165,6 @@
|
||||||
</el-table>
|
</el-table>
|
||||||
<InventorySelect
|
<InventorySelect
|
||||||
ref="inventorySelectRef"
|
ref="inventorySelectRef"
|
||||||
:area-id="formData.areaId"
|
|
||||||
:warehouse-id="formData.warehouseId"
|
:warehouse-id="formData.warehouseId"
|
||||||
@change="handleSelectInventory"
|
@change="handleSelectInventory"
|
||||||
/>
|
/>
|
||||||
|
|
@ -226,10 +211,8 @@ import InventorySelect, {
|
||||||
InventorySelectRow
|
InventorySelectRow
|
||||||
} from '@/views/wms/inventory/components/InventorySelect.vue'
|
} from '@/views/wms/inventory/components/InventorySelect.vue'
|
||||||
import MerchantSelect from '@/views/wms/md/merchant/components/MerchantSelect.vue'
|
import MerchantSelect from '@/views/wms/md/merchant/components/MerchantSelect.vue'
|
||||||
import WarehouseAreaSelect from '@/views/wms/md/warehouse/components/WarehouseAreaSelect.vue'
|
|
||||||
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
||||||
import { formatNullableDate } from '@/utils/formatTime'
|
import { formatNullableDate } from '@/utils/formatTime'
|
||||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
|
||||||
import { OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants'
|
import { OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants'
|
||||||
import {
|
import {
|
||||||
formatQuantity,
|
formatQuantity,
|
||||||
|
|
@ -259,7 +242,6 @@ const formData = ref<ShipmentOrderVO>({
|
||||||
bizOrderNo: undefined,
|
bizOrderNo: undefined,
|
||||||
merchantId: undefined,
|
merchantId: undefined,
|
||||||
warehouseId: undefined,
|
warehouseId: undefined,
|
||||||
areaId: undefined,
|
|
||||||
totalQuantity: 0,
|
totalQuantity: 0,
|
||||||
totalAmount: 0,
|
totalAmount: 0,
|
||||||
remark: undefined,
|
remark: undefined,
|
||||||
|
|
@ -322,8 +304,6 @@ const buildDetail = (inventory: InventorySelectRow): ShipmentOrderDetailVO => ({
|
||||||
skuName: inventory.skuName,
|
skuName: inventory.skuName,
|
||||||
warehouseId: inventory.warehouseId,
|
warehouseId: inventory.warehouseId,
|
||||||
warehouseName: inventory.warehouseName,
|
warehouseName: inventory.warehouseName,
|
||||||
areaId: inventory.areaId,
|
|
||||||
areaName: inventory.areaName,
|
|
||||||
batchNo: inventory.batchNo,
|
batchNo: inventory.batchNo,
|
||||||
productionDate: inventory.productionDate,
|
productionDate: inventory.productionDate,
|
||||||
expirationDate: inventory.expirationDate,
|
expirationDate: inventory.expirationDate,
|
||||||
|
|
@ -358,8 +338,7 @@ const isInventorySelected = (inventory: InventorySelectRow) => {
|
||||||
return (formData.value.details || []).some((detail) => {
|
return (formData.value.details || []).some((detail) => {
|
||||||
return (
|
return (
|
||||||
detail.skuId === inventory.skuId &&
|
detail.skuId === inventory.skuId &&
|
||||||
detail.warehouseId === inventory.warehouseId &&
|
detail.warehouseId === inventory.warehouseId
|
||||||
detail.areaId === inventory.areaId
|
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -372,13 +351,6 @@ const handleDeleteDetail = (index: number) => {
|
||||||
|
|
||||||
/** 仓库变化 */
|
/** 仓库变化 */
|
||||||
const handleWarehouseChange = () => {
|
const handleWarehouseChange = () => {
|
||||||
formData.value.areaId = undefined
|
|
||||||
formData.value.details = []
|
|
||||||
refreshTotalAmount()
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 库区变化 */
|
|
||||||
const handleAreaChange = () => {
|
|
||||||
formData.value.details = []
|
formData.value.details = []
|
||||||
refreshTotalAmount()
|
refreshTotalAmount()
|
||||||
}
|
}
|
||||||
|
|
@ -408,10 +380,6 @@ const validateDetails = (required: boolean) => {
|
||||||
message.error(`第 ${i + 1} 行明细请选择商品规格`)
|
message.error(`第 ${i + 1} 行明细请选择商品规格`)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if (AREA_ENABLE && !detail.areaId) {
|
|
||||||
message.error(`第 ${i + 1} 行明细请选择库区`)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if (!detail.quantity || detail.quantity <= 0) {
|
if (!detail.quantity || detail.quantity <= 0) {
|
||||||
message.error(`第 ${i + 1} 行明细出库数量必须大于 0`)
|
message.error(`第 ${i + 1} 行明细出库数量必须大于 0`)
|
||||||
return false
|
return false
|
||||||
|
|
@ -508,7 +476,6 @@ const resetForm = () => {
|
||||||
bizOrderNo: undefined,
|
bizOrderNo: undefined,
|
||||||
merchantId: undefined,
|
merchantId: undefined,
|
||||||
warehouseId: undefined,
|
warehouseId: undefined,
|
||||||
areaId: undefined,
|
|
||||||
totalQuantity: 0,
|
totalQuantity: 0,
|
||||||
totalAmount: 0,
|
totalAmount: 0,
|
||||||
remark: undefined,
|
remark: undefined,
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@
|
||||||
<div>客户:{{ printData.merchantName || '-' }}</div>
|
<div>客户:{{ printData.merchantName || '-' }}</div>
|
||||||
<div>业务单号:{{ printData.bizOrderNo || '-' }}</div>
|
<div>业务单号:{{ printData.bizOrderNo || '-' }}</div>
|
||||||
<div>仓库:{{ printData.warehouseName || '-' }}</div>
|
<div>仓库:{{ printData.warehouseName || '-' }}</div>
|
||||||
<div v-if="AREA_ENABLE">库区:{{ printData.areaName || '-' }}</div>
|
|
||||||
<div>总数量:{{ formatQuantity(printData.totalQuantity) || '-' }}</div>
|
<div>总数量:{{ formatQuantity(printData.totalQuantity) || '-' }}</div>
|
||||||
<div>总金额:{{ formatPrice(printData.totalAmount) || '-' }}</div>
|
<div>总金额:{{ formatPrice(printData.totalAmount) || '-' }}</div>
|
||||||
<div>创建时间:{{ formatNullableDate(printData.createTime) }}</div>
|
<div>创建时间:{{ formatNullableDate(printData.createTime) }}</div>
|
||||||
|
|
@ -24,12 +23,6 @@
|
||||||
<tr>
|
<tr>
|
||||||
<th class="border border-solid border-#dcdfe6 bg-#f5f7fa p-8px text-left">商品信息</th>
|
<th class="border border-solid border-#dcdfe6 bg-#f5f7fa p-8px text-left">商品信息</th>
|
||||||
<th class="border border-solid border-#dcdfe6 bg-#f5f7fa p-8px text-left">规格信息</th>
|
<th class="border border-solid border-#dcdfe6 bg-#f5f7fa p-8px text-left">规格信息</th>
|
||||||
<th
|
|
||||||
v-if="AREA_ENABLE"
|
|
||||||
class="border border-solid border-#dcdfe6 bg-#f5f7fa p-8px text-left"
|
|
||||||
>
|
|
||||||
库区
|
|
||||||
</th>
|
|
||||||
<th
|
<th
|
||||||
class="border border-solid border-#dcdfe6 bg-#f5f7fa p-8px text-left"
|
class="border border-solid border-#dcdfe6 bg-#f5f7fa p-8px text-left"
|
||||||
>
|
>
|
||||||
|
|
@ -60,9 +53,6 @@
|
||||||
<div>{{ detail.skuName || '-' }}</div>
|
<div>{{ detail.skuName || '-' }}</div>
|
||||||
<div v-if="detail.skuCode" class="text-12px">编号:{{ detail.skuCode }}</div>
|
<div v-if="detail.skuCode" class="text-12px">编号:{{ detail.skuCode }}</div>
|
||||||
</td>
|
</td>
|
||||||
<td v-if="AREA_ENABLE" class="border border-solid border-#dcdfe6 p-8px">
|
|
||||||
{{ detail.areaName || '-' }}
|
|
||||||
</td>
|
|
||||||
<td class="border border-solid border-#dcdfe6 p-8px">
|
<td class="border border-solid border-#dcdfe6 p-8px">
|
||||||
{{ detail.batchNo || '-' }}
|
{{ detail.batchNo || '-' }}
|
||||||
</td>
|
</td>
|
||||||
|
|
@ -98,7 +88,6 @@
|
||||||
import { formatNullableDate } from '@/utils/formatTime'
|
import { formatNullableDate } from '@/utils/formatTime'
|
||||||
import { DICT_TYPE, getDictLabel } from '@/utils/dict'
|
import { DICT_TYPE, getDictLabel } from '@/utils/dict'
|
||||||
import { ShipmentOrderApi, ShipmentOrderVO } from '@/api/wms/order/shipment'
|
import { ShipmentOrderApi, ShipmentOrderVO } from '@/api/wms/order/shipment'
|
||||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
|
||||||
import { formatPrice, formatQuantity } from '@/views/wms/utils/format'
|
import { formatPrice, formatQuantity } from '@/views/wms/utils/format'
|
||||||
|
|
||||||
/** WMS 出库单打印 */
|
/** WMS 出库单打印 */
|
||||||
|
|
@ -106,7 +95,7 @@ defineOptions({ name: 'WmsShipmentOrderPrint' })
|
||||||
|
|
||||||
const printData = ref<ShipmentOrderVO>({}) // 打印数据
|
const printData = ref<ShipmentOrderVO>({}) // 打印数据
|
||||||
const printButtonRef = ref<HTMLButtonElement>() // 打印按钮
|
const printButtonRef = ref<HTMLButtonElement>() // 打印按钮
|
||||||
const tableColumnCount = computed(() => 8 + (AREA_ENABLE ? 1 : 0))
|
const tableColumnCount = 8
|
||||||
const printObj = ref({
|
const printObj = ref({
|
||||||
id: 'wmsShipmentOrderPrint',
|
id: 'wmsShipmentOrderPrint',
|
||||||
popTitle: ' ',
|
popTitle: ' ',
|
||||||
|
|
|
||||||
|
|
@ -237,13 +237,6 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
|
||||||
v-if="AREA_ENABLE"
|
|
||||||
align="center"
|
|
||||||
label="库区"
|
|
||||||
min-width="140"
|
|
||||||
prop="areaName"
|
|
||||||
/>
|
|
||||||
<el-table-column align="center" label="批号" min-width="140" prop="batchNo" />
|
<el-table-column align="center" label="批号" min-width="140" prop="batchNo" />
|
||||||
<el-table-column label="生产日期/过期日期" min-width="180">
|
<el-table-column label="生产日期/过期日期" min-width="180">
|
||||||
<template #default="detailScope">
|
<template #default="detailScope">
|
||||||
|
|
@ -305,17 +298,11 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
v-if="isTableColumnVisible('warehouse')"
|
v-if="isTableColumnVisible('warehouse')"
|
||||||
:label="AREA_ENABLE ? '仓库/库区' : '仓库'"
|
label="仓库"
|
||||||
min-width="160"
|
min-width="160"
|
||||||
>
|
>
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<template v-if="AREA_ENABLE">
|
{{ scope.row.warehouseName || '-' }}
|
||||||
<div>仓库:{{ scope.row.warehouseName || '-' }}</div>
|
|
||||||
<div>库区:{{ scope.row.areaName || '-' }}</div>
|
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
{{ scope.row.warehouseName || '-' }}
|
|
||||||
</template>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
|
|
@ -422,7 +409,6 @@ import { ShipmentOrderApi, ShipmentOrderVO } from '@/api/wms/order/shipment'
|
||||||
import { ShipmentOrderDetailVO } from '@/api/wms/order/shipment/detail'
|
import { ShipmentOrderDetailVO } from '@/api/wms/order/shipment/detail'
|
||||||
import MerchantSelect from '@/views/wms/md/merchant/components/MerchantSelect.vue'
|
import MerchantSelect from '@/views/wms/md/merchant/components/MerchantSelect.vue'
|
||||||
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
||||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
|
||||||
import {
|
import {
|
||||||
OrderDeleteStatusList,
|
OrderDeleteStatusList,
|
||||||
OrderStatusEnum,
|
OrderStatusEnum,
|
||||||
|
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
/**
|
|
||||||
* WMS 前端运行参数
|
|
||||||
*
|
|
||||||
* 标注「后端镜像」的常量与 yudao.wms.* 配置默认值一致;调整后端配置时需同步修改这里
|
|
||||||
*/
|
|
||||||
|
|
||||||
// ==================== 后端镜像(与 WmsProperties 默认值对齐) ====================
|
|
||||||
|
|
||||||
/** 是否启用库区模式(对齐 yudao.wms.area-enable) */
|
|
||||||
export const AREA_ENABLE = true
|
|
||||||
Loading…
Reference in New Issue