feat(wms):减法,去掉 area 表
parent
c5948d405e
commit
fdbb98fe65
|
|
@ -12,8 +12,6 @@ export interface InventoryHistoryVO {
|
|||
skuName?: string
|
||||
warehouseId?: number
|
||||
warehouseName?: string
|
||||
areaId?: number
|
||||
areaName?: string
|
||||
quantity?: number
|
||||
beforeQuantity?: number
|
||||
afterQuantity?: number
|
||||
|
|
|
|||
|
|
@ -12,8 +12,6 @@ export interface InventoryVO {
|
|||
skuName?: string
|
||||
warehouseId?: number
|
||||
warehouseName?: string
|
||||
areaId?: number
|
||||
areaName?: string
|
||||
quantity?: number
|
||||
remark?: string
|
||||
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
|
||||
warehouseId?: number
|
||||
warehouseName?: string
|
||||
areaId?: number
|
||||
areaName?: string
|
||||
batchNo?: string
|
||||
productionDate?: Date
|
||||
expirationDate?: Date
|
||||
|
|
|
|||
|
|
@ -9,8 +9,6 @@ export interface CheckOrderVO {
|
|||
remark?: string
|
||||
warehouseId?: number
|
||||
warehouseName?: string
|
||||
areaId?: number
|
||||
areaName?: string
|
||||
totalQuantity?: number
|
||||
totalAmount?: number
|
||||
details?: CheckOrderDetailVO[]
|
||||
|
|
|
|||
|
|
@ -11,12 +11,8 @@ export interface MovementOrderDetailVO {
|
|||
skuName?: string
|
||||
sourceWarehouseId?: number
|
||||
sourceWarehouseName?: string
|
||||
sourceAreaId?: number
|
||||
sourceAreaName?: string
|
||||
targetWarehouseId?: number
|
||||
targetWarehouseName?: string
|
||||
targetAreaId?: number
|
||||
targetAreaName?: string
|
||||
batchNo?: string
|
||||
productionDate?: Date
|
||||
expirationDate?: Date
|
||||
|
|
|
|||
|
|
@ -9,12 +9,8 @@ export interface MovementOrderVO {
|
|||
remark?: string
|
||||
sourceWarehouseId?: number
|
||||
sourceWarehouseName?: string
|
||||
sourceAreaId?: number
|
||||
sourceAreaName?: string
|
||||
targetWarehouseId?: number
|
||||
targetWarehouseName?: string
|
||||
targetAreaId?: number
|
||||
targetAreaName?: string
|
||||
totalQuantity?: number
|
||||
totalAmount?: number
|
||||
details?: MovementOrderDetailVO[]
|
||||
|
|
|
|||
|
|
@ -11,8 +11,6 @@ export interface ReceiptOrderDetailVO {
|
|||
skuName?: string
|
||||
warehouseId?: number
|
||||
warehouseName?: string
|
||||
areaId?: number
|
||||
areaName?: string
|
||||
batchNo?: string
|
||||
productionDate?: Date
|
||||
expirationDate?: Date
|
||||
|
|
|
|||
|
|
@ -13,8 +13,6 @@ export interface ReceiptOrderVO {
|
|||
remark?: string
|
||||
warehouseId?: number
|
||||
warehouseName?: string
|
||||
areaId?: number
|
||||
areaName?: string
|
||||
totalQuantity?: number
|
||||
totalAmount?: number
|
||||
details?: ReceiptOrderDetailVO[]
|
||||
|
|
|
|||
|
|
@ -11,8 +11,6 @@ export interface ShipmentOrderDetailVO {
|
|||
skuName?: string
|
||||
warehouseId?: number
|
||||
warehouseName?: string
|
||||
areaId?: number
|
||||
areaName?: string
|
||||
batchNo?: string
|
||||
productionDate?: Date
|
||||
expirationDate?: Date
|
||||
|
|
|
|||
|
|
@ -13,8 +13,6 @@ export interface ShipmentOrderVO {
|
|||
remark?: string
|
||||
warehouseId?: number
|
||||
warehouseName?: string
|
||||
areaId?: number
|
||||
areaName?: string
|
||||
totalQuantity?: number
|
||||
totalAmount?: number
|
||||
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',
|
||||
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 label="仓库" prop="warehouseId">
|
||||
<WarehouseSelect
|
||||
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"
|
||||
/>
|
||||
<WarehouseSelect v-model="queryParams.warehouseId" class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="商品编号" prop="itemCode">
|
||||
<el-input
|
||||
|
|
@ -140,15 +129,9 @@
|
|||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="AREA_ENABLE ? '仓库/库区' : '仓库'" min-width="160">
|
||||
<el-table-column label="仓库" min-width="160">
|
||||
<template #default="scope">
|
||||
<template v-if="AREA_ENABLE">
|
||||
<div>仓库:{{ scope.row.warehouseName || '-' }}</div>
|
||||
<div>库区:{{ scope.row.areaName || '-' }}</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
{{ scope.row.warehouseName || '-' }}
|
||||
</template>
|
||||
{{ scope.row.warehouseName || '-' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="right" label="操作前" min-width="110">
|
||||
|
|
@ -207,9 +190,7 @@
|
|||
import { dateFormatter, defaultShortcuts, formatDate } from '@/utils/formatTime'
|
||||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||
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 { AREA_ENABLE } from '@/views/wms/utils/config'
|
||||
import { formatPrice, formatQuantity } from '@/views/wms/utils/format'
|
||||
|
||||
/** WMS 库存流水 */
|
||||
|
|
@ -228,7 +209,6 @@ const queryParams = reactive({
|
|||
skuCode: undefined as string | undefined,
|
||||
skuName: undefined as string | undefined,
|
||||
warehouseId: undefined as number | undefined,
|
||||
areaId: undefined as number | undefined,
|
||||
createTime: undefined as string[] | undefined
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
|
|
@ -257,11 +237,6 @@ const resetQuery = () => {
|
|||
handleQuery()
|
||||
}
|
||||
|
||||
/** 仓库变化 */
|
||||
const handleWarehouseChange = () => {
|
||||
queryParams.areaId = undefined
|
||||
}
|
||||
|
||||
/** 初始化 */
|
||||
onMounted(async () => {
|
||||
await getList()
|
||||
|
|
|
|||
|
|
@ -21,18 +21,7 @@
|
|||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="仓库" prop="warehouseId">
|
||||
<WarehouseSelect
|
||||
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"
|
||||
/>
|
||||
<WarehouseSelect v-model="queryParams.warehouseId" class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="商品名称" prop="itemName">
|
||||
<el-input
|
||||
|
|
@ -105,23 +94,7 @@
|
|||
{{ scope.row.warehouseName || '-' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
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'
|
||||
"
|
||||
>
|
||||
<el-table-column label="商品信息" min-width="240" prop="warehouseItemId">
|
||||
<template #default="scope">
|
||||
<div>{{ scope.row.itemName || '-' }}</div>
|
||||
<div v-if="scope.row.itemCode" class="text-12px text-gray-500">
|
||||
|
|
@ -160,11 +133,6 @@
|
|||
{{ scope.row.warehouseName || '-' }}
|
||||
</template>
|
||||
</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>
|
||||
<el-table-column align="right" label="库存" min-width="130" prop="quantity">
|
||||
<template #default="scope">
|
||||
|
|
@ -184,9 +152,7 @@
|
|||
|
||||
<script lang="ts" setup>
|
||||
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 { AREA_ENABLE } from '@/views/wms/utils/config'
|
||||
import { formatQuantity } from '@/views/wms/utils/format'
|
||||
|
||||
/** WMS 库存统计 */
|
||||
|
|
@ -194,24 +160,18 @@ defineOptions({ name: 'WmsInventory' })
|
|||
|
||||
const INVENTORY_DIMENSION = {
|
||||
WAREHOUSE: 'warehouse',
|
||||
AREA: 'area',
|
||||
ITEM: 'item'
|
||||
} as const
|
||||
type InventoryDimension = (typeof INVENTORY_DIMENSION)[keyof typeof INVENTORY_DIMENSION]
|
||||
|
||||
const dimensionOptions = computed(() => [
|
||||
{ label: '仓库', value: INVENTORY_DIMENSION.WAREHOUSE },
|
||||
...(AREA_ENABLE ? [{ label: '库区', value: INVENTORY_DIMENSION.AREA }] : []),
|
||||
{ label: '商品', value: INVENTORY_DIMENSION.ITEM }
|
||||
])
|
||||
const warehouseDimensionList: InventoryDimension[] = [
|
||||
INVENTORY_DIMENSION.WAREHOUSE,
|
||||
INVENTORY_DIMENSION.AREA
|
||||
]
|
||||
const warehouseDimensionList: InventoryDimension[] = [INVENTORY_DIMENSION.WAREHOUSE]
|
||||
|
||||
interface InventoryRow extends InventoryVO {
|
||||
warehouseItemId?: string
|
||||
areaItemId?: string
|
||||
skuWarehouseId?: string
|
||||
}
|
||||
|
||||
|
|
@ -234,8 +194,7 @@ const queryParams = reactive({
|
|||
itemName: undefined as string | undefined,
|
||||
skuCode: undefined as string | undefined,
|
||||
skuName: undefined as string | undefined,
|
||||
warehouseId: undefined as number | undefined,
|
||||
areaId: undefined as number | undefined
|
||||
warehouseId: undefined as number | undefined
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
|
||||
|
|
@ -245,14 +204,12 @@ const getList = async () => {
|
|||
try {
|
||||
const data = await InventoryApi.getInventoryPage({
|
||||
...queryParams,
|
||||
areaId: isAreaQueryVisible.value ? queryParams.areaId : undefined,
|
||||
minQuantity: filterZero.value ? 1 : undefined
|
||||
})
|
||||
list.value = data.list.map((item: InventoryVO) => ({
|
||||
...item,
|
||||
// 展示字段
|
||||
warehouseItemId: `${item.warehouseId || 0}-${item.itemId || 0}`,
|
||||
areaItemId: `${item.areaId || 0}-${item.itemId || 0}`,
|
||||
skuWarehouseId: `${item.skuId || 0}-${item.warehouseId || 0}`
|
||||
}))
|
||||
total.value = data.total
|
||||
|
|
@ -278,9 +235,6 @@ const resetQuery = () => {
|
|||
/** 统计维度变化 */
|
||||
const handleTypeChange = () => {
|
||||
queryParams.pageNo = 1
|
||||
if (queryParams.type === INVENTORY_DIMENSION.WAREHOUSE) {
|
||||
queryParams.areaId = undefined
|
||||
}
|
||||
getList()
|
||||
}
|
||||
|
||||
|
|
@ -290,16 +244,6 @@ const handleFilterZeroChange = () => {
|
|||
getList()
|
||||
}
|
||||
|
||||
/** 仓库变化 */
|
||||
const handleWarehouseChange = () => {
|
||||
queryParams.areaId = undefined
|
||||
}
|
||||
|
||||
/** 是否展示库区搜索项 */
|
||||
const isAreaQueryVisible = computed(() => {
|
||||
return AREA_ENABLE && queryParams.type !== INVENTORY_DIMENSION.WAREHOUSE
|
||||
})
|
||||
|
||||
/** 合并库存统计的维度单元格 */
|
||||
const spanMethod = ({ column, rowIndex }: SpanMethodProps) => {
|
||||
const property = column.property
|
||||
|
|
@ -331,9 +275,6 @@ const getRowSpanProperties = () => {
|
|||
if (queryParams.type === INVENTORY_DIMENSION.ITEM) {
|
||||
return ['itemId', 'skuId', 'skuWarehouseId']
|
||||
}
|
||||
if (queryParams.type === INVENTORY_DIMENSION.AREA) {
|
||||
return ['warehouseId', 'areaId', 'areaItemId']
|
||||
}
|
||||
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">
|
||||
<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
|
||||
v-hasPermi="['wms:warehouse:update']"
|
||||
link
|
||||
|
|
@ -118,7 +110,6 @@
|
|||
<script lang="ts" setup>
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import { WarehouseApi, WarehouseVO } from '@/api/wms/md/warehouse'
|
||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
||||
import WarehouseForm from './WarehouseForm.vue'
|
||||
import download from '@/utils/download'
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@
|
|||
<span v-else>-</span>
|
||||
</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="盈亏数量">
|
||||
{{ formatQuantity(detailData.totalQuantity) || '-' }}
|
||||
</el-descriptions-item>
|
||||
|
|
@ -73,7 +72,6 @@ import { formatNullableDate } from '@/utils/formatTime'
|
|||
import { DICT_TYPE } from '@/utils/dict'
|
||||
import { CheckOrderApi, CheckOrderVO } from '@/api/wms/order/check'
|
||||
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'
|
||||
|
||||
/** WMS 盘库单详情 */
|
||||
|
|
|
|||
|
|
@ -13,11 +13,6 @@
|
|||
<WarehouseSelect v-model="formData.warehouseId" @change="handleWarehouseChange" />
|
||||
</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-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="盈亏数量">
|
||||
<el-input :model-value="formatQuantity(totalQuantity)" disabled />
|
||||
|
|
@ -111,7 +106,6 @@
|
|||
</el-table>
|
||||
<InventorySelect
|
||||
ref="inventorySelectRef"
|
||||
:area-id="formData.areaId"
|
||||
:warehouse-id="formData.warehouseId"
|
||||
@change="handleSelectInventory"
|
||||
/>
|
||||
|
|
@ -152,9 +146,7 @@ import { FormRules } from 'element-plus'
|
|||
import { CheckOrderApi, CheckOrderVO } from '@/api/wms/order/check'
|
||||
import { CheckOrderDetailVO } from '@/api/wms/order/check/detail'
|
||||
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 { AREA_ENABLE } from '@/views/wms/utils/config'
|
||||
import { OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants'
|
||||
import { formatQuantity, PRICE_PRECISION, QUANTITY_PRECISION, sumPrice } from '@/views/wms/utils/format'
|
||||
import { generateOrderNo } from '@/views/wms/utils/order'
|
||||
|
|
@ -175,7 +167,6 @@ const formData = ref<CheckOrderVO>({
|
|||
no: undefined,
|
||||
status: OrderStatusEnum.PREPARE,
|
||||
warehouseId: undefined,
|
||||
areaId: undefined,
|
||||
totalQuantity: 0,
|
||||
totalAmount: 0,
|
||||
remark: undefined,
|
||||
|
|
@ -237,8 +228,6 @@ const buildDetail = (inventory: InventorySelectRow): CheckOrderDetailVO => ({
|
|||
inventoryId: inventory.id,
|
||||
warehouseId: inventory.warehouseId,
|
||||
warehouseName: inventory.warehouseName,
|
||||
areaId: inventory.areaId,
|
||||
areaName: inventory.areaName,
|
||||
batchNo: inventory.batchNo,
|
||||
productionDate: inventory.productionDate,
|
||||
expirationDate: inventory.expirationDate,
|
||||
|
|
@ -268,11 +257,6 @@ const handleDeleteDetail = (index: number) => {
|
|||
refreshTotalAmount()
|
||||
}
|
||||
const handleWarehouseChange = () => {
|
||||
formData.value.areaId = undefined
|
||||
formData.value.details = []
|
||||
refreshTotalAmount()
|
||||
}
|
||||
const handleAreaChange = () => {
|
||||
formData.value.details = []
|
||||
refreshTotalAmount()
|
||||
}
|
||||
|
|
@ -291,10 +275,6 @@ const validateDetails = (required: boolean) => {
|
|||
}
|
||||
for (let i = 0; i < formData.value.details.length; 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) {
|
||||
message.error(`第 ${i + 1} 行明细实盘数量不能小于 0`)
|
||||
return false
|
||||
|
|
@ -374,7 +354,6 @@ const resetForm = () => {
|
|||
no: generateOrderNo('PK'),
|
||||
status: OrderStatusEnum.PREPARE,
|
||||
warehouseId: undefined,
|
||||
areaId: undefined,
|
||||
totalQuantity: 0,
|
||||
totalAmount: 0,
|
||||
remark: undefined,
|
||||
|
|
|
|||
|
|
@ -16,10 +16,7 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="仓库" prop="warehouseId">
|
||||
<WarehouseSelect 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" />
|
||||
<WarehouseSelect v-model="queryParams.warehouseId" class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单据日期" prop="orderDate">
|
||||
<el-date-picker
|
||||
|
|
@ -199,15 +196,11 @@
|
|||
</el-table-column>
|
||||
<el-table-column
|
||||
v-if="isTableColumnVisible('warehouse')"
|
||||
:label="AREA_ENABLE ? '仓库/库区' : '仓库'"
|
||||
label="仓库"
|
||||
min-width="180"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<template v-if="AREA_ENABLE">
|
||||
<div>仓库:{{ row.warehouseName || '-' }}</div>
|
||||
<div>库区:{{ row.areaName || '-' }}</div>
|
||||
</template>
|
||||
<template v-else>{{ row.warehouseName || '-' }}</template>
|
||||
{{ row.warehouseName || '-' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<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 { CheckOrderApi, CheckOrderVO } from '@/api/wms/order/check'
|
||||
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 { AREA_ENABLE } from '@/views/wms/utils/config'
|
||||
import { OrderDeleteStatusList, OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants'
|
||||
import { formatPrice, formatQuantity, PRICE_PRECISION, QUANTITY_PRECISION } from '@/views/wms/utils/format'
|
||||
import UserSelectV2 from '@/views/system/user/components/UserSelectV2.vue'
|
||||
|
|
@ -317,7 +308,6 @@ const getDefaultQueryParams = () => ({
|
|||
no: undefined as string | undefined,
|
||||
status: undefined as number | undefined,
|
||||
warehouseId: undefined as number | undefined,
|
||||
areaId: undefined as number | undefined,
|
||||
orderDate: undefined as string[] | undefined,
|
||||
totalQuantityMin: undefined as number | undefined,
|
||||
totalQuantityMax: undefined as number | undefined,
|
||||
|
|
@ -363,9 +353,6 @@ const resetQuery = () => {
|
|||
Object.assign(queryParams, getDefaultQueryParams())
|
||||
handleQuery()
|
||||
}
|
||||
const handleWarehouseChange = () => {
|
||||
queryParams.areaId = undefined
|
||||
}
|
||||
const handleExpandChange = async (row: CheckOrderVO) => {
|
||||
if (!row.id || detailMap[row.id]) return
|
||||
detailMap[row.id] = await CheckOrderApi.getCheckOrderDetailListByOrderId(row.id)
|
||||
|
|
|
|||
|
|
@ -13,17 +13,11 @@
|
|||
/>
|
||||
<span v-else>-</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :label="AREA_ENABLE ? '来源仓库/库区' : '来源仓库'">
|
||||
<template v-if="AREA_ENABLE">
|
||||
{{ detailData.sourceWarehouseName || '-' }} / {{ detailData.sourceAreaName || '-' }}
|
||||
</template>
|
||||
<template v-else>{{ detailData.sourceWarehouseName || '-' }}</template>
|
||||
<el-descriptions-item label="来源仓库">
|
||||
{{ detailData.sourceWarehouseName || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :label="AREA_ENABLE ? '目标仓库/库区' : '目标仓库'">
|
||||
<template v-if="AREA_ENABLE">
|
||||
{{ detailData.targetWarehouseName || '-' }} / {{ detailData.targetAreaName || '-' }}
|
||||
</template>
|
||||
<template v-else>{{ detailData.targetWarehouseName || '-' }}</template>
|
||||
<el-descriptions-item label="目标仓库">
|
||||
{{ detailData.targetWarehouseName || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="总数量">
|
||||
{{ formatQuantity(detailData.totalQuantity) || '-' }}
|
||||
|
|
@ -80,7 +74,6 @@ import { formatNullableDate } from '@/utils/formatTime'
|
|||
import { DICT_TYPE } from '@/utils/dict'
|
||||
import { MovementOrderApi, MovementOrderVO } from '@/api/wms/order/movement'
|
||||
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'
|
||||
|
||||
/** WMS 移库单详情 */
|
||||
|
|
|
|||
|
|
@ -13,29 +13,11 @@
|
|||
<WarehouseSelect v-model="formData.sourceWarehouseId" @change="handleSourceWarehouseChange" />
|
||||
</el-form-item>
|
||||
</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-form-item label="目标仓库" prop="targetWarehouseId">
|
||||
<WarehouseSelect v-model="formData.targetWarehouseId" @change="handleTargetWarehouseChange" />
|
||||
</el-form-item>
|
||||
</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-form-item label="总数量">
|
||||
<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>
|
||||
</template>
|
||||
</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 align="right" label="可用库存" width="120">
|
||||
<template #default="{ row }">{{ formatQuantity(row.availableQuantity) || '-' }}</template>
|
||||
|
|
@ -127,7 +108,6 @@
|
|||
</el-table>
|
||||
<InventorySelect
|
||||
ref="inventorySelectRef"
|
||||
:area-id="formData.sourceAreaId"
|
||||
:warehouse-id="formData.sourceWarehouseId"
|
||||
@change="handleSelectInventory"
|
||||
/>
|
||||
|
|
@ -168,9 +148,7 @@ import { FormRules } from 'element-plus'
|
|||
import { MovementOrderApi, MovementOrderVO } from '@/api/wms/order/movement'
|
||||
import { MovementOrderDetailVO } from '@/api/wms/order/movement/detail'
|
||||
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 { AREA_ENABLE } from '@/views/wms/utils/config'
|
||||
import { OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants'
|
||||
import { formatQuantity, PRICE_PRECISION, QUANTITY_PRECISION, sumPrice, sumQuantity } from '@/views/wms/utils/format'
|
||||
import { generateOrderNo } from '@/views/wms/utils/order'
|
||||
|
|
@ -191,9 +169,7 @@ const formData = ref<MovementOrderVO>({
|
|||
no: undefined,
|
||||
status: OrderStatusEnum.PREPARE,
|
||||
sourceWarehouseId: undefined,
|
||||
sourceAreaId: undefined,
|
||||
targetWarehouseId: undefined,
|
||||
targetAreaId: undefined,
|
||||
totalQuantity: 0,
|
||||
totalAmount: 0,
|
||||
remark: undefined,
|
||||
|
|
@ -252,10 +228,7 @@ const buildDetail = (inventory: InventorySelectRow): MovementOrderDetailVO => ({
|
|||
skuName: inventory.skuName,
|
||||
sourceWarehouseId: inventory.warehouseId,
|
||||
sourceWarehouseName: inventory.warehouseName,
|
||||
sourceAreaId: inventory.areaId,
|
||||
sourceAreaName: inventory.areaName,
|
||||
targetWarehouseId: formData.value.targetWarehouseId,
|
||||
targetAreaId: formData.value.targetAreaId,
|
||||
batchNo: inventory.batchNo,
|
||||
productionDate: inventory.productionDate,
|
||||
expirationDate: inventory.expirationDate,
|
||||
|
|
@ -283,8 +256,7 @@ const isInventorySelected = (inventory: InventorySelectRow) =>
|
|||
(formData.value.details || []).some((detail) => {
|
||||
return (
|
||||
detail.skuId === inventory.skuId &&
|
||||
detail.sourceWarehouseId === inventory.warehouseId &&
|
||||
detail.sourceAreaId === inventory.areaId
|
||||
detail.sourceWarehouseId === inventory.warehouseId
|
||||
)
|
||||
})
|
||||
|
||||
|
|
@ -294,24 +266,16 @@ const handleDeleteDetail = (index: number) => {
|
|||
}
|
||||
|
||||
const handleSourceWarehouseChange = () => {
|
||||
formData.value.sourceAreaId = undefined
|
||||
formData.value.details = []
|
||||
refreshTotalAmount()
|
||||
}
|
||||
const handleSourceAreaChange = () => {
|
||||
formData.value.details = []
|
||||
refreshTotalAmount()
|
||||
}
|
||||
const handleTargetWarehouseChange = () => {
|
||||
formData.value.targetAreaId = undefined
|
||||
refreshTargetToDetails()
|
||||
}
|
||||
const handleTargetAreaChange = () => refreshTargetToDetails()
|
||||
const refreshTargetToDetails = () => {
|
||||
const details = formData.value.details || []
|
||||
details.forEach((detail) => {
|
||||
detail.targetWarehouseId = formData.value.targetWarehouseId
|
||||
detail.targetAreaId = formData.value.targetAreaId
|
||||
})
|
||||
}
|
||||
const refreshTotalAmount = () => {
|
||||
|
|
@ -320,6 +284,10 @@ const refreshTotalAmount = () => {
|
|||
|
||||
/** 校验明细 */
|
||||
const validateDetails = (required: boolean) => {
|
||||
if (formData.value.sourceWarehouseId === formData.value.targetWarehouseId) {
|
||||
message.error('来源仓库和目标仓库不能相同')
|
||||
return false
|
||||
}
|
||||
if (!formData.value.details?.length) {
|
||||
if (required) {
|
||||
message.error('至少包含一条移库明细')
|
||||
|
|
@ -327,19 +295,8 @@ const validateDetails = (required: boolean) => {
|
|||
}
|
||||
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++) {
|
||||
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) {
|
||||
message.error(`第 ${i + 1} 行明细移库数量必须大于 0`)
|
||||
return false
|
||||
|
|
@ -423,9 +380,7 @@ const resetForm = () => {
|
|||
no: generateOrderNo('YK'),
|
||||
status: OrderStatusEnum.PREPARE,
|
||||
sourceWarehouseId: undefined,
|
||||
sourceAreaId: undefined,
|
||||
targetWarehouseId: undefined,
|
||||
targetAreaId: undefined,
|
||||
totalQuantity: 0,
|
||||
totalAmount: 0,
|
||||
remark: undefined,
|
||||
|
|
|
|||
|
|
@ -199,28 +199,20 @@
|
|||
</el-table-column>
|
||||
<el-table-column
|
||||
v-if="isTableColumnVisible('sourceWarehouse')"
|
||||
:label="AREA_ENABLE ? '来源仓库/库区' : '来源仓库'"
|
||||
label="来源仓库"
|
||||
min-width="180"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<template v-if="AREA_ENABLE">
|
||||
<div>仓库:{{ row.sourceWarehouseName || '-' }}</div>
|
||||
<div>库区:{{ row.sourceAreaName || '-' }}</div>
|
||||
</template>
|
||||
<template v-else>{{ row.sourceWarehouseName || '-' }}</template>
|
||||
{{ row.sourceWarehouseName || '-' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
v-if="isTableColumnVisible('targetWarehouse')"
|
||||
:label="AREA_ENABLE ? '目标仓库/库区' : '目标仓库'"
|
||||
label="目标仓库"
|
||||
min-width="180"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<template v-if="AREA_ENABLE">
|
||||
<div>仓库:{{ row.targetWarehouseName || '-' }}</div>
|
||||
<div>库区:{{ row.targetAreaName || '-' }}</div>
|
||||
</template>
|
||||
<template v-else>{{ row.targetWarehouseName || '-' }}</template>
|
||||
{{ row.targetWarehouseName || '-' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<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 { MovementOrderDetailVO } from '@/api/wms/order/movement/detail'
|
||||
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 { formatPrice, formatQuantity, PRICE_PRECISION, QUANTITY_PRECISION } from '@/views/wms/utils/format'
|
||||
import UserSelectV2 from '@/views/system/user/components/UserSelectV2.vue'
|
||||
|
|
|
|||
|
|
@ -30,9 +30,6 @@
|
|||
<el-descriptions-item label="业务单号">
|
||||
{{ detailData.bizOrderNo || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item v-if="AREA_ENABLE" label="库区">
|
||||
{{ detailData.areaName || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="总数量">
|
||||
{{ formatQuantity(detailData.totalQuantity) || '-' }}
|
||||
</el-descriptions-item>
|
||||
|
|
@ -74,7 +71,6 @@
|
|||
</div>
|
||||
</template>
|
||||
</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="生产日期" width="140">
|
||||
<template #default="scope">
|
||||
|
|
@ -112,7 +108,6 @@ import { formatNullableDate } from '@/utils/formatTime'
|
|||
import { DICT_TYPE } from '@/utils/dict'
|
||||
import { ReceiptOrderApi, ReceiptOrderVO } from '@/api/wms/order/receipt'
|
||||
import { ReceiptOrderDetailVO } from '@/api/wms/order/receipt/detail'
|
||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
||||
import {
|
||||
formatPrice,
|
||||
formatQuantity,
|
||||
|
|
|
|||
|
|
@ -42,16 +42,7 @@
|
|||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="仓库" prop="warehouseId">
|
||||
<WarehouseSelect v-model="formData.warehouseId" @change="handleWarehouseChange" />
|
||||
</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"
|
||||
/>
|
||||
<WarehouseSelect v-model="formData.warehouseId" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
|
|
@ -71,7 +62,7 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="AREA_ENABLE ? 8 : 16">
|
||||
<el-col :span="16">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input
|
||||
v-model="formData.remark"
|
||||
|
|
@ -116,16 +107,6 @@
|
|||
</div>
|
||||
</template>
|
||||
</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">
|
||||
<template #default="scope">
|
||||
<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 ItemSkuSelect from '@/views/wms/md/item/sku/components/ItemSkuSelect.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 { AREA_ENABLE } from '@/views/wms/utils/config'
|
||||
import { OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants'
|
||||
import {
|
||||
formatQuantity,
|
||||
|
|
@ -264,7 +243,6 @@ const formData = ref<ReceiptOrderVO>({
|
|||
bizOrderNo: undefined,
|
||||
merchantId: undefined,
|
||||
warehouseId: undefined,
|
||||
areaId: undefined,
|
||||
totalQuantity: 0,
|
||||
totalAmount: 0,
|
||||
remark: undefined,
|
||||
|
|
@ -325,7 +303,6 @@ const buildDetail = (sku: ItemSkuVO): ReceiptOrderDetailVO => ({
|
|||
skuId: sku.id,
|
||||
skuCode: sku.code,
|
||||
skuName: sku.name,
|
||||
areaId: formData.value.areaId,
|
||||
batchNo: undefined,
|
||||
productionDate: undefined,
|
||||
expirationDate: undefined,
|
||||
|
|
@ -355,17 +332,6 @@ const handleDeleteDetail = (index: number) => {
|
|||
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 = () => {
|
||||
refreshTotalAmount()
|
||||
|
|
@ -391,10 +357,6 @@ const validateDetails = (required: boolean) => {
|
|||
message.error(`第 ${i + 1} 行明细请选择商品规格`)
|
||||
return false
|
||||
}
|
||||
if (AREA_ENABLE && !detail.areaId) {
|
||||
message.error(`第 ${i + 1} 行明细请选择库区`)
|
||||
return false
|
||||
}
|
||||
if (!detail.quantity || detail.quantity <= 0) {
|
||||
message.error(`第 ${i + 1} 行明细入库数量必须大于 0`)
|
||||
return false
|
||||
|
|
@ -487,7 +449,6 @@ const resetForm = () => {
|
|||
bizOrderNo: undefined,
|
||||
merchantId: undefined,
|
||||
warehouseId: undefined,
|
||||
areaId: undefined,
|
||||
totalQuantity: 0,
|
||||
totalAmount: 0,
|
||||
remark: undefined,
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@
|
|||
<div>供应商:{{ printData.merchantName || '-' }}</div>
|
||||
<div>业务单号:{{ printData.bizOrderNo || '-' }}</div>
|
||||
<div>仓库:{{ printData.warehouseName || '-' }}</div>
|
||||
<div v-if="AREA_ENABLE">库区:{{ printData.areaName || '-' }}</div>
|
||||
<div>总数量:{{ formatQuantity(printData.totalQuantity) || '-' }}</div>
|
||||
<div>总金额:{{ formatPrice(printData.totalAmount) || '-' }}</div>
|
||||
<div>创建时间:{{ formatNullableDate(printData.createTime) }}</div>
|
||||
|
|
@ -24,12 +23,6 @@
|
|||
<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
|
||||
v-if="AREA_ENABLE"
|
||||
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"
|
||||
>
|
||||
|
|
@ -60,9 +53,6 @@
|
|||
<div>{{ detail.skuName || '-' }}</div>
|
||||
<div v-if="detail.skuCode" class="text-12px">编号:{{ detail.skuCode }}</div>
|
||||
</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">
|
||||
{{ detail.batchNo || '-' }}
|
||||
</td>
|
||||
|
|
@ -98,7 +88,6 @@
|
|||
import { formatNullableDate } from '@/utils/formatTime'
|
||||
import { DICT_TYPE, getDictLabel } from '@/utils/dict'
|
||||
import { ReceiptOrderApi, ReceiptOrderVO } from '@/api/wms/order/receipt'
|
||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
||||
import { formatPrice, formatQuantity } from '@/views/wms/utils/format'
|
||||
|
||||
/** WMS 入库单打印 */
|
||||
|
|
@ -106,7 +95,7 @@ defineOptions({ name: 'WmsReceiptOrderPrint' })
|
|||
|
||||
const printData = ref<ReceiptOrderVO>({}) // 打印数据
|
||||
const printButtonRef = ref<HTMLButtonElement>() // 打印按钮
|
||||
const tableColumnCount = computed(() => 8 + (AREA_ENABLE ? 1 : 0))
|
||||
const tableColumnCount = 8
|
||||
const printObj = ref({
|
||||
id: 'wmsReceiptOrderPrint',
|
||||
popTitle: ' ',
|
||||
|
|
|
|||
|
|
@ -237,13 +237,6 @@
|
|||
</div>
|
||||
</template>
|
||||
</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 label="生产日期/过期日期" min-width="180">
|
||||
<template #default="detailScope">
|
||||
|
|
@ -305,17 +298,11 @@
|
|||
</el-table-column>
|
||||
<el-table-column
|
||||
v-if="isTableColumnVisible('warehouse')"
|
||||
:label="AREA_ENABLE ? '仓库/库区' : '仓库'"
|
||||
label="仓库"
|
||||
min-width="160"
|
||||
>
|
||||
<template #default="scope">
|
||||
<template v-if="AREA_ENABLE">
|
||||
<div>仓库:{{ scope.row.warehouseName || '-' }}</div>
|
||||
<div>库区:{{ scope.row.areaName || '-' }}</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
{{ scope.row.warehouseName || '-' }}
|
||||
</template>
|
||||
{{ scope.row.warehouseName || '-' }}
|
||||
</template>
|
||||
</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 MerchantSelect from '@/views/wms/md/merchant/components/MerchantSelect.vue'
|
||||
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
||||
import {
|
||||
OrderDeleteStatusList,
|
||||
OrderStatusEnum,
|
||||
|
|
|
|||
|
|
@ -30,9 +30,6 @@
|
|||
<el-descriptions-item label="业务单号">
|
||||
{{ detailData.bizOrderNo || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item v-if="AREA_ENABLE" label="库区">
|
||||
{{ detailData.areaName || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="总数量">
|
||||
{{ formatQuantity(detailData.totalQuantity) || '-' }}
|
||||
</el-descriptions-item>
|
||||
|
|
@ -74,7 +71,6 @@
|
|||
</div>
|
||||
</template>
|
||||
</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="生产日期" width="140">
|
||||
<template #default="scope">
|
||||
|
|
@ -112,7 +108,6 @@ import { formatNullableDate } from '@/utils/formatTime'
|
|||
import { DICT_TYPE } from '@/utils/dict'
|
||||
import { ShipmentOrderApi, ShipmentOrderVO } from '@/api/wms/order/shipment'
|
||||
import { ShipmentOrderDetailVO } from '@/api/wms/order/shipment/detail'
|
||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
||||
import {
|
||||
formatPrice,
|
||||
formatQuantity,
|
||||
|
|
|
|||
|
|
@ -45,15 +45,6 @@
|
|||
<WarehouseSelect v-model="formData.warehouseId" @change="handleWarehouseChange" />
|
||||
</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-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="总数量">
|
||||
<el-input :model-value="formatQuantity(totalQuantity)" disabled />
|
||||
|
|
@ -71,7 +62,7 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="AREA_ENABLE ? 8 : 16">
|
||||
<el-col :span="16">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input
|
||||
v-model="formData.remark"
|
||||
|
|
@ -116,11 +107,6 @@
|
|||
</div>
|
||||
</template>
|
||||
</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">
|
||||
<template #default="scope">
|
||||
{{ scope.row.batchNo || '-' }}
|
||||
|
|
@ -179,7 +165,6 @@
|
|||
</el-table>
|
||||
<InventorySelect
|
||||
ref="inventorySelectRef"
|
||||
:area-id="formData.areaId"
|
||||
:warehouse-id="formData.warehouseId"
|
||||
@change="handleSelectInventory"
|
||||
/>
|
||||
|
|
@ -226,10 +211,8 @@ import InventorySelect, {
|
|||
InventorySelectRow
|
||||
} from '@/views/wms/inventory/components/InventorySelect.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 { formatNullableDate } from '@/utils/formatTime'
|
||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
||||
import { OrderStatusEnum, OrderUpdateStatusList } from '@/views/wms/utils/constants'
|
||||
import {
|
||||
formatQuantity,
|
||||
|
|
@ -259,7 +242,6 @@ const formData = ref<ShipmentOrderVO>({
|
|||
bizOrderNo: undefined,
|
||||
merchantId: undefined,
|
||||
warehouseId: undefined,
|
||||
areaId: undefined,
|
||||
totalQuantity: 0,
|
||||
totalAmount: 0,
|
||||
remark: undefined,
|
||||
|
|
@ -322,8 +304,6 @@ const buildDetail = (inventory: InventorySelectRow): ShipmentOrderDetailVO => ({
|
|||
skuName: inventory.skuName,
|
||||
warehouseId: inventory.warehouseId,
|
||||
warehouseName: inventory.warehouseName,
|
||||
areaId: inventory.areaId,
|
||||
areaName: inventory.areaName,
|
||||
batchNo: inventory.batchNo,
|
||||
productionDate: inventory.productionDate,
|
||||
expirationDate: inventory.expirationDate,
|
||||
|
|
@ -358,8 +338,7 @@ const isInventorySelected = (inventory: InventorySelectRow) => {
|
|||
return (formData.value.details || []).some((detail) => {
|
||||
return (
|
||||
detail.skuId === inventory.skuId &&
|
||||
detail.warehouseId === inventory.warehouseId &&
|
||||
detail.areaId === inventory.areaId
|
||||
detail.warehouseId === inventory.warehouseId
|
||||
)
|
||||
})
|
||||
}
|
||||
|
|
@ -372,13 +351,6 @@ const handleDeleteDetail = (index: number) => {
|
|||
|
||||
/** 仓库变化 */
|
||||
const handleWarehouseChange = () => {
|
||||
formData.value.areaId = undefined
|
||||
formData.value.details = []
|
||||
refreshTotalAmount()
|
||||
}
|
||||
|
||||
/** 库区变化 */
|
||||
const handleAreaChange = () => {
|
||||
formData.value.details = []
|
||||
refreshTotalAmount()
|
||||
}
|
||||
|
|
@ -408,10 +380,6 @@ const validateDetails = (required: boolean) => {
|
|||
message.error(`第 ${i + 1} 行明细请选择商品规格`)
|
||||
return false
|
||||
}
|
||||
if (AREA_ENABLE && !detail.areaId) {
|
||||
message.error(`第 ${i + 1} 行明细请选择库区`)
|
||||
return false
|
||||
}
|
||||
if (!detail.quantity || detail.quantity <= 0) {
|
||||
message.error(`第 ${i + 1} 行明细出库数量必须大于 0`)
|
||||
return false
|
||||
|
|
@ -508,7 +476,6 @@ const resetForm = () => {
|
|||
bizOrderNo: undefined,
|
||||
merchantId: undefined,
|
||||
warehouseId: undefined,
|
||||
areaId: undefined,
|
||||
totalQuantity: 0,
|
||||
totalAmount: 0,
|
||||
remark: undefined,
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@
|
|||
<div>客户:{{ printData.merchantName || '-' }}</div>
|
||||
<div>业务单号:{{ printData.bizOrderNo || '-' }}</div>
|
||||
<div>仓库:{{ printData.warehouseName || '-' }}</div>
|
||||
<div v-if="AREA_ENABLE">库区:{{ printData.areaName || '-' }}</div>
|
||||
<div>总数量:{{ formatQuantity(printData.totalQuantity) || '-' }}</div>
|
||||
<div>总金额:{{ formatPrice(printData.totalAmount) || '-' }}</div>
|
||||
<div>创建时间:{{ formatNullableDate(printData.createTime) }}</div>
|
||||
|
|
@ -24,12 +23,6 @@
|
|||
<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
|
||||
v-if="AREA_ENABLE"
|
||||
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"
|
||||
>
|
||||
|
|
@ -60,9 +53,6 @@
|
|||
<div>{{ detail.skuName || '-' }}</div>
|
||||
<div v-if="detail.skuCode" class="text-12px">编号:{{ detail.skuCode }}</div>
|
||||
</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">
|
||||
{{ detail.batchNo || '-' }}
|
||||
</td>
|
||||
|
|
@ -98,7 +88,6 @@
|
|||
import { formatNullableDate } from '@/utils/formatTime'
|
||||
import { DICT_TYPE, getDictLabel } from '@/utils/dict'
|
||||
import { ShipmentOrderApi, ShipmentOrderVO } from '@/api/wms/order/shipment'
|
||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
||||
import { formatPrice, formatQuantity } from '@/views/wms/utils/format'
|
||||
|
||||
/** WMS 出库单打印 */
|
||||
|
|
@ -106,7 +95,7 @@ defineOptions({ name: 'WmsShipmentOrderPrint' })
|
|||
|
||||
const printData = ref<ShipmentOrderVO>({}) // 打印数据
|
||||
const printButtonRef = ref<HTMLButtonElement>() // 打印按钮
|
||||
const tableColumnCount = computed(() => 8 + (AREA_ENABLE ? 1 : 0))
|
||||
const tableColumnCount = 8
|
||||
const printObj = ref({
|
||||
id: 'wmsShipmentOrderPrint',
|
||||
popTitle: ' ',
|
||||
|
|
|
|||
|
|
@ -237,13 +237,6 @@
|
|||
</div>
|
||||
</template>
|
||||
</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 label="生产日期/过期日期" min-width="180">
|
||||
<template #default="detailScope">
|
||||
|
|
@ -305,17 +298,11 @@
|
|||
</el-table-column>
|
||||
<el-table-column
|
||||
v-if="isTableColumnVisible('warehouse')"
|
||||
:label="AREA_ENABLE ? '仓库/库区' : '仓库'"
|
||||
label="仓库"
|
||||
min-width="160"
|
||||
>
|
||||
<template #default="scope">
|
||||
<template v-if="AREA_ENABLE">
|
||||
<div>仓库:{{ scope.row.warehouseName || '-' }}</div>
|
||||
<div>库区:{{ scope.row.areaName || '-' }}</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
{{ scope.row.warehouseName || '-' }}
|
||||
</template>
|
||||
{{ scope.row.warehouseName || '-' }}
|
||||
</template>
|
||||
</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 MerchantSelect from '@/views/wms/md/merchant/components/MerchantSelect.vue'
|
||||
import WarehouseSelect from '@/views/wms/md/warehouse/components/WarehouseSelect.vue'
|
||||
import { AREA_ENABLE } from '@/views/wms/utils/config'
|
||||
import {
|
||||
OrderDeleteStatusList,
|
||||
OrderStatusEnum,
|
||||
|
|
|
|||
|
|
@ -1,10 +0,0 @@
|
|||
/**
|
||||
* WMS 前端运行参数
|
||||
*
|
||||
* 标注「后端镜像」的常量与 yudao.wms.* 配置默认值一致;调整后端配置时需同步修改这里
|
||||
*/
|
||||
|
||||
// ==================== 后端镜像(与 WmsProperties 默认值对齐) ====================
|
||||
|
||||
/** 是否启用库区模式(对齐 yudao.wms.area-enable) */
|
||||
export const AREA_ENABLE = true
|
||||
Loading…
Reference in New Issue