Commit 9dee038a by qinjianhui

fix: 查询SPU时,添加仓库筛选

parent 9ffc5cd7
......@@ -4,8 +4,8 @@ import {
EditForm,
SearchForm,
WarehouseRuleSettingData,
WarehouseRuleSpuItem,
} from '@/types/api/warehouse/warehouseRuleSetting'
import { IgoodsType } from '@/views/supply/supplierManagement/types'
export function getWarehouseRuleSettingListApi(
data: SearchForm,
......@@ -18,27 +18,32 @@ export function getWarehouseRuleSettingListApi(
)
}
export function getQuerySpuApi(warehouseSpu: string) {
return axios.post<never, BaseRespData<IgoodsType>>(
export function getQuerySpuApi(warehouseSpu: string, warehouseId: number | undefined) {
return axios.post<never, BaseRespData<WarehouseRuleSpuItem>>(
'/factory/sharedInventorySku/query-spu',
{ warehouseSpu },
{ warehouseSpu, warehouseId },
)
}
export function addSharedInventoryGroupApi(
data: EditForm,
) {
export function addSharedInventoryGroupApi(data: EditForm) {
return axios.post<never, BaseRespData<void>>(
'/factory/sharedInventoryGroup/add',
data,
)
}
export function updateSharedInventoryGroupApi(
data: EditForm,
) {
export function updateSharedInventoryGroupApi(data: EditForm) {
return axios.post<never, BaseRespData<void>>(
'/factory/sharedInventoryGroup/update',
data,
)
}
export function getWarehouseRuleSettingDetailApi(id: number | undefined) {
return axios.get<never, BaseRespData<EditForm>>(
`/factory/sharedInventoryGroup/get`,
{
params: { id },
},
)
}
......@@ -20,14 +20,16 @@ export interface WarehouseRuleSpuItem {
sortOrder?: number
warehouseSku?: string
warehouseSpu?: string
productName?: string
imgUrl?: string
skuImage?: string
skuName?: string
warehouseId?: number
}
export interface EditForm {
id?: number
groupName?: string
status?: boolean
warehouseId?: number
spuList?: WarehouseRuleSpuItem[]
skuList?: WarehouseRuleSpuItem[]
}
......@@ -37,6 +37,19 @@
<div class="section-title">组内SPU清单</div>
<div class="spu-search-bar">
<ElSelect
v-model="editForm.warehouseId"
placeholder="请选择仓库"
style="width: 160px"
clearable
>
<ElOption
v-for="item in warehouseList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</ElSelect>
<ElInput
v-model="spuSearchKeyword"
clearable
......@@ -61,7 +74,7 @@
size="small"
>
<template #spuImage="{ row }">
<ImageView :src="row.imgUrl" width="40px" height="40px" />
<ImageView :src="row.skuImage" width="40px" height="40px" />
</template>
<template #operation="{ row }">
<ElButton
......@@ -100,7 +113,7 @@
</span>
</template>
<template #spuImage="{ row }">
<ImageView :src="row.imgUrl" width="40px" height="40px" />
<ImageView :src="row.skuImage" width="40px" height="40px" />
</template>
<template #operation="{ index }">
<ElButton link type="danger" @click="handleRemoveSpu(index)">
......@@ -132,14 +145,21 @@ import {
} from '@/types/api/warehouse/warehouseRuleSetting'
import { Plus, Warning } from '@element-plus/icons-vue'
import { useWarehouseRuleSettingTableColumns } from '../hooks/useWarehouseRuleSettingTableColumns'
import { WarehouseListData } from '@/types'
const emit = defineEmits<{
(e: 'update:visible', value: boolean): void
(e: 'saveSuccess'): void
}>()
const props = defineProps<{
visible: boolean
}>()
const props = withDefaults(
defineProps<{
visible: boolean
warehouseList: WarehouseListData[]
}>(),
{
warehouseList: () => [],
},
)
const dialogVisible = computed({
get() {
return props.visible
......@@ -148,12 +168,12 @@ const dialogVisible = computed({
emit('update:visible', value)
},
})
const createDefaultForm = (): EditForm => ({
id: undefined,
groupName: '',
status: true,
spuList: [],
warehouseId: props.warehouseList[0]?.id,
})
const editForm = ref<EditForm>(createDefaultForm())
......@@ -163,10 +183,43 @@ const spuSearchResultList = ref<WarehouseRuleSpuItem[]>([])
const popoverVisible = ref(false)
const dragIndex = ref<number | null>(null)
watch(
() => props.visible,
(visible) => {
if (visible && props.warehouseList.length) {
editForm.value.warehouseId = props.warehouseList[0].id
}
},
)
const { spuTableColumns, spuSearchTableColumns } =
useWarehouseRuleSettingTableColumns()
const resetFields = () => {
editForm.value = createDefaultForm()
const updateSortNo = (list: WarehouseRuleSpuItem[]) => {
return list.map((item, index) => ({
...item,
sortOrder: index + 1,
}))
}
const resetFields = (data?: EditForm) => {
if (data) {
const spuList = data.spuList ?? data.skuList ?? []
editForm.value = {
id: data.id,
groupName: data.groupName ?? '',
status:
typeof data.status === 'boolean' ? data.status : data.status === 1,
spuList: updateSortNo(
spuList.map((item) => ({
...item,
warehouseSpu: item.warehouseSpu ?? item.warehouseSku,
})),
),
}
} else {
editForm.value = createDefaultForm()
}
spuSearchKeyword.value = ''
spuSearchResultList.value = []
popoverVisible.value = false
......@@ -176,13 +229,6 @@ const resetFields = () => {
})
}
const updateSortNo = (list: WarehouseRuleSpuItem[]) => {
return list.map((item, index) => ({
...item,
sortOrder: index + 1,
}))
}
const handleDragStart = (index: number) => {
dragIndex.value = index
}
......@@ -211,20 +257,13 @@ const handleSearchSpu = async () => {
background: 'rgba(0, 0, 0, 0.7)',
})
try {
const res = await getQuerySpuApi(keyword)
const res = await getQuerySpuApi(keyword, editForm.value.warehouseId)
if (res.code !== 200) {
popoverVisible.value = false
spuSearchKeyword.value = ''
return
}
spuSearchResultList.value = [
{
warehouseSpu: res.data.sku,
imgUrl: res.data.imgUrl,
productName: res.data.name,
id: Number(res.data.id) ?? undefined,
},
]
spuSearchResultList.value = [res.data]
if (spuSearchResultList.value.length === 0) {
ElMessageBox.alert('未查询到SPU数据', '提示', {
type: 'warning',
......@@ -255,8 +294,9 @@ const handleAddSpu = (row: WarehouseRuleSpuItem) => {
...(editForm.value.spuList ?? []),
{
warehouseSpu: row.warehouseSpu,
productName: row.productName,
imgUrl: row.imgUrl,
skuName: row.skuName,
skuImage: row.skuImage,
warehouseId: row.warehouseId,
},
])
spuSearchResultList.value = spuSearchResultList.value.filter(
......@@ -304,6 +344,7 @@ const handleSave = async () => {
skuList: editForm.value.spuList.map((item) => ({
warehouseSpu: item.warehouseSpu!,
sortOrder: item.sortOrder!,
warehouseId: item.warehouseId!,
})),
})
if (res.code !== 200) {
......@@ -371,7 +412,6 @@ defineExpose({
.dialog-footer {
display: flex;
justify-content: center;
gap: 10px;
}
.popover-table {
......
......@@ -94,7 +94,7 @@ export function useWarehouseRuleSettingTableColumns(
},
{
label: '商品名称',
prop: 'productName',
prop: 'skuName',
minWidth: 160,
align: 'left',
},
......@@ -120,7 +120,7 @@ export function useWarehouseRuleSettingTableColumns(
},
{
label: '商品名称',
prop: 'productName',
prop: 'skuName',
minWidth: 160,
align: 'left',
},
......
......@@ -101,11 +101,15 @@
<EditFormDialog
ref="editFormRef"
v-model:visible="editDialogVisible"
:warehouse-list="warehouseList"
@save-success="search"
/>
</template>
<script lang="ts" setup>
import { getWarehouseRuleSettingListApi } from '@/api/warehouse/warehouseRuleSetting'
import {
getWarehouseRuleSettingListApi,
getWarehouseRuleSettingDetailApi,
} from '@/api/warehouse/warehouseRuleSetting'
import {
SearchForm,
WarehouseRuleSettingData,
......@@ -115,6 +119,8 @@ import { useValue } from '@/utils/hooks/useValue'
import { ElDatePicker, ElFormItem } from 'element-plus'
import { useWarehouseRuleSettingTableColumns } from './hooks/useWarehouseRuleSettingTableColumns'
import EditFormDialog from './components/EditDialog.vue'
import { WarehouseListData } from '@/types'
import { loadWarehouseListApi } from '@/api/common.ts'
const [searchForm, resetSearchForm] = useValue<SearchForm>({
createStartTime: '',
createEndTime: '',
......@@ -126,6 +132,7 @@ const dateRange = ref([])
const currentStatus = ref('sharedInventory')
const editDialogVisible = ref(false)
const editFormRef = ref()
const warehouseList = ref<WarehouseListData[]>([])
const handleStatusClick = (status: string) => {
currentStatus.value = status
}
......@@ -152,6 +159,20 @@ const handleSelectionChange = (selection: WarehouseRuleSettingData[]) => {
const handleEdit = async (row?: WarehouseRuleSettingData) => {
if (row) {
// 调用接口,获取数据
const loading = ElLoading.service({
fullscreen: true,
text: '加载中...',
background: 'rgba(0, 0, 0, 0.3)',
})
try {
const res = await getWarehouseRuleSettingDetailApi(row.id)
if (res.code !== 200) return
editFormRef.value.resetFields(res.data)
} catch (error) {
console.error(error)
} finally {
loading.close()
}
} else {
await editFormRef.value.resetFields()
}
......@@ -161,6 +182,14 @@ const handleEdit = async (row?: WarehouseRuleSettingData) => {
const { columns: tableColumns } = useWarehouseRuleSettingTableColumns({
onEdit: handleEdit,
})
const loadWarehouseList = async () => {
const res = await loadWarehouseListApi()
if (res.code !== 200) return
warehouseList.value = res.data || []
}
onMounted(async () => {
loadWarehouseList()
})
</script>
<style scoped lang="scss">
.status-container {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment