Commit 9a50b196 by zhuzhequan

podcn 流程修改

parent 786c61ea
...@@ -287,6 +287,14 @@ export function getSuperPodBoxListApi(factoryNo: number | string) { ...@@ -287,6 +287,14 @@ export function getSuperPodBoxListApi(factoryNo: number | string) {
) )
} }
// 超级播种墙配货 获取pod订单拣货箱子详情
export function printNormalPdf(ids: string) {
return axios.get<never, BaseRespData<string>>(
'factory/podJomallOrderCn/printPickPdf',
{ params: { ids } },
)
}
// 播种墙配货 打单完成 // 播种墙配货 打单完成
export function submitInspectionApi( export function submitInspectionApi(
data: { id: number; version?: number }[], data: { id: number; version?: number }[],
......
<template> <template>
<template v-if="col.subs?.length"> <template v-if="col.subs?.length">
<ElTableColumn <ElTableColumn
show-overflow-tooltip
header-align="center" header-align="center"
:label="col.label" :label="col.label"
:align="col.align" :align="col.align"
...@@ -31,7 +32,7 @@ ...@@ -31,7 +32,7 @@
</template> </template>
</ElTableColumn> </ElTableColumn>
</template> </template>
<ElTableColumn v-else header-align="center" v-bind="col"> <ElTableColumn show-overflow-tooltip v-else header-align="center" v-bind="col">
<template #header="{ column, $index }"> <template #header="{ column, $index }">
<component <component
:is="() => col.headerRender(column, $index)" :is="() => col.headerRender(column, $index)"
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
></ElTableColumn> ></ElTableColumn>
<template v-for="column in columns" :key="column.key"> <template v-for="column in columns" :key="column.key">
<ElTableColumn <ElTableColumn
show-overflow-tooltip
v-if="column.type === 'expand'" v-if="column.type === 'expand'"
v-bind="column" v-bind="column"
header-align="center" header-align="center"
......
...@@ -15,6 +15,7 @@ export interface ExportParams extends SearchForm { ...@@ -15,6 +15,7 @@ export interface ExportParams extends SearchForm {
export interface SearchForm { export interface SearchForm {
timeType?: number | null timeType?: number | null
shopNumber?: string shopNumber?: string
productMark?: string
shipmentType?: string | number shipmentType?: string | number
replaceShipment?: string | number replaceShipment?: string | number
userMark?: string userMark?: string
...@@ -97,6 +98,7 @@ export interface PodCnOrderListData { ...@@ -97,6 +98,7 @@ export interface PodCnOrderListData {
export interface ProductList { export interface ProductList {
id: number id: number
podJomallOrderCnId: number podJomallOrderCnId: number
productMark?: string
thirdSubOrderNumber?: string thirdSubOrderNumber?: string
thirdStockSku?: string thirdStockSku?: string
factorySubOrderNumber?: string factorySubOrderNumber?: string
......
...@@ -50,7 +50,7 @@ export interface ProductList { ...@@ -50,7 +50,7 @@ export interface ProductList {
variantImage?: string variantImage?: string
podJomallUsNo?: string podJomallUsNo?: string
podJomallCnNo?: string podJomallCnNo?: string
previewImgs?: { sort: string | number; title: string; url: string }[] previewImgs?: { sort?: string | number; title?: string; url: string }[]
} }
export interface LogisticBill { export interface LogisticBill {
......
...@@ -114,24 +114,26 @@ ...@@ -114,24 +114,26 @@
<template #image="{ row }"> <template #image="{ row }">
<div <div
style="display: flex; flex-wrap: nowrap" style="display: flex; flex-wrap: nowrap"
v-if="row.previewImgs?.length"
> >
<div <div
v-for="img in row.previewImgs" v-for="img in row.productMark!=='normal'?row.previewImgs:[{url:row.variantImage}]"
:key="img" :key="img"
@click.stop="handleCurrentChange(img.url)"
style="cursor: pointer; margin-right: 5px; flex: 1" style="cursor: pointer; margin-right: 5px; flex: 1"
@click.stop="handleCurrentChange(img.url)"
> >
<img v-if="img.url" :src="img.url" alt="" /> <img v-if="img.url" :src="img.url" alt="" />
</div> </div>
</div> </div>
</template> </template>
<template #verifyResult="{ row }"> <template #verifyResult="{ row }">
<el-icon <el-icon
v-if="row.power" v-if="row.power"
style="color: #00cc00; font-size: 24px; font-weight: 900" style="color: #00cc00; font-size: 24px; font-weight: 900"
><Check >
/></el-icon> <Check
/>
</el-icon>
</template> </template>
</TableView> </TableView>
</div> </div>
...@@ -185,10 +187,18 @@ ...@@ -185,10 +187,18 @@
<ElButton <ElButton
type="primary" type="primary"
@click="podOrderDetailsData && print(podOrderDetailsData, true)" @click="podOrderDetailsData && print(podOrderDetailsData, true)"
>手动打印</ElButton >手动打印
</ElButton
>
<ElButton
type="primary"
@click="printNormal"
>普货拣货
</ElButton
> >
<ElButton type="success" @click="handlePrintFinish" <ElButton type="success" @click="handlePrintFinish"
>打单完成</ElButton >打单完成
</ElButton
> >
<ElButton type="danger" @click="handleClearBox">清空箱子</ElButton> <ElButton type="danger" @click="handleClearBox">清空箱子</ElButton>
</div> </div>
...@@ -249,12 +259,14 @@ import { ...@@ -249,12 +259,14 @@ import {
getPackingCnDataApi, getPackingCnDataApi,
clearBoxApi, clearBoxApi,
getPodBoxListApi, getPodBoxListApi,
submitInspectionApi, submitInspectionApi, printNormalPdf,
} from '@/api/podCnOrder' } from '@/api/podCnOrder'
import useUserStore from '@/store/user' import useUserStore from '@/store/user'
import { Check } from '@element-plus/icons-vue' import { Check } from '@element-plus/icons-vue'
import socket from '@/utils/cnWebsocket' import socket from '@/utils/cnWebsocket'
import { WarehouseListData } from '@/types/api/podUsOrder' import { WarehouseListData } from '@/types/api/podUsOrder'
import { ElMessage } from 'element-plus'
import { filePath } from '@/api/axios.ts'
const { getCLodop } = useLodop() const { getCLodop } = useLodop()
...@@ -299,13 +311,20 @@ const podOrderDetailsColumns = computed(() => [ ...@@ -299,13 +311,20 @@ const podOrderDetailsColumns = computed(() => [
// align: 'center', // align: 'center',
// }, // },
{ {
label: '库存SKU',
prop: 'thirdSkuCode',
width: 180,
align: 'center',
},
{
label: 'variant SKU', label: 'variant SKU',
prop: 'variantSku', prop: 'variantSku',
width: 140, width: 150,
align: 'center', align: 'center',
}, },
{ {
label: '商品名称', label: '商品名称',
width: 200,
prop: 'productName', prop: 'productName',
}, },
...@@ -313,18 +332,21 @@ const podOrderDetailsColumns = computed(() => [ ...@@ -313,18 +332,21 @@ const podOrderDetailsColumns = computed(() => [
label: '购买数量', label: '购买数量',
prop: 'purchaseNumber', prop: 'purchaseNumber',
width: 90, width: 90,
fixed: 'right',
align: 'center', align: 'center',
}, },
{ {
label: '拣货数量', label: '拣货数量',
prop: 'count', prop: 'count',
width: 90, width: 90,
fixed: 'right',
align: 'center', align: 'center',
}, },
{ {
label: '验证结果', label: '验证结果',
slot: 'verifyResult', slot: 'verifyResult',
width: 90, width: 90,
fixed: 'right',
align: 'center', align: 'center',
}, },
]) ])
...@@ -418,7 +440,7 @@ watch( ...@@ -418,7 +440,7 @@ watch(
(val) => { (val) => {
if (val && val.productList?.length) if (val && val.productList?.length)
val.productList.forEach((el) => { val.productList.forEach((el) => {
if (!el.previewImgs) el.previewImgs = JSON.parse(el.imageAry) if (!el.previewImgs) el.previewImgs = JSON.parse(el.imageAry || '[]')
}) })
}, },
{ deep: true }, { deep: true },
...@@ -447,7 +469,7 @@ const renderItemBox = (bool: boolean) => { ...@@ -447,7 +469,7 @@ const renderItemBox = (bool: boolean) => {
if (!boxItem) boxItem = { data: { productList: [] } } if (!boxItem) boxItem = { data: { productList: [] } }
const { data } = boxItem const { data } = boxItem
data?.productList?.forEach((el) => { data?.productList?.forEach((el) => {
if (!el.previewImgs) el.previewImgs = JSON.parse(el.imageAry) if (!el.previewImgs) el.previewImgs = JSON.parse(el.imageAry || '[]')
}) })
if (!data) { if (!data) {
renderLock = false renderLock = false
...@@ -477,8 +499,6 @@ const renderItemBox = (bool: boolean) => { ...@@ -477,8 +499,6 @@ const renderItemBox = (bool: boolean) => {
: parts[0] : parts[0]
for (const product of productList) { for (const product of productList) {
if (product.podJomallCnNo === currentCode) { if (product.podJomallCnNo === currentCode) {
coverImage.value = product.previewImgs?.[0]?.url || ''
nextTick(() => { nextTick(() => {
tableRef.value?.setCurrentRow(product) tableRef.value?.setCurrentRow(product)
}) })
...@@ -523,6 +543,29 @@ const setPodBoxList = (data: WebSocketMessage) => { ...@@ -523,6 +543,29 @@ const setPodBoxList = (data: WebSocketMessage) => {
orderStore.setPodBoxList(parsedData) orderStore.setPodBoxList(parsedData)
} }
} }
const printNormal = async () => {
const arr: (number | undefined)[] = [];
(podBoxList.value || []).forEach((item: PodMakeOrderData) => {
if (item.data) {
if (item.data.productList && item.data.productList.length > 0) {
const flag = item.data.productList.some((item1) => {
return item1.productMark == 'normal'
})
if (flag) {
arr?.push(item.data?.id)
}
}
}
})
if (!arr.length) {
ElMessage.warning('暂无可打印的普货拣货单')
return
}
const res = await printNormalPdf(arr.join())
ElMessage.success('操作成功')
window.open(filePath + res.message)
}
const initPrintDevice = () => { const initPrintDevice = () => {
const lodop = getCLodop(null, null) const lodop = getCLodop(null, null)
if (!lodop) return if (!lodop) return
...@@ -682,6 +725,17 @@ const initOrderDetailBox = async () => { ...@@ -682,6 +725,17 @@ const initOrderDetailBox = async () => {
ElMessage.warning(res.message) ElMessage.warning(res.message)
return return
} }
console.log(res.data)
res.data.forEach(r=>{
r.data?.productList?.forEach(d=>{
if (d.productMark === 'normal') {
d.previewImgs = [{ url: d.variantImage || '' }]
} else {
if (!d.previewImgs) d.previewImgs = JSON.parse(d.imageAry || '[]')
}
})
})
console.log(res.data)
orderStore.setPodBoxList({ orderStore.setPodBoxList({
boxList: res.data, boxList: res.data,
factoryNo, factoryNo,
...@@ -712,10 +766,6 @@ const initOrderDetailBox = async () => { ...@@ -712,10 +766,6 @@ const initOrderDetailBox = async () => {
podOrderDetailsData.value = podOrderDetailsData.value =
boxList.find((item) => item.data)?.data || undefined boxList.find((item) => item.data)?.data || undefined
boxIndex.value = boxList.find((item) => item.data)?.box || null boxIndex.value = boxList.find((item) => item.data)?.box || null
podOrderDetailsData.value?.productList?.forEach((el) => {
if (!el.previewImgs) el.previewImgs = JSON.parse(el.imageAry)
})
coverImage.value = coverImage.value =
podOrderDetailsData.value?.productList?.[0]?.previewImgs?.[0].url || '' podOrderDetailsData.value?.productList?.[0]?.previewImgs?.[0].url || ''
...@@ -941,7 +991,8 @@ const print = (data: OrderData, forcePrint = false, callback?: () => void) => { ...@@ -941,7 +991,8 @@ const print = (data: OrderData, forcePrint = false, callback?: () => void) => {
// } // }
const handleRowClick = (row: ProductList) => { const handleRowClick = (row: ProductList) => {
console.log(907, row) console.log(907, row)
coverImage.value = row.previewImgs?.[0]?.url || '' const previewImages = row.productMark!=='normal'?row.previewImgs:[{url:row.variantImage}]
coverImage.value =previewImages?.[0]?.url || ''
productionOrderRef.value.focus() productionOrderRef.value.focus()
} }
const handleCurrentChange = (url: string) => { const handleCurrentChange = (url: string) => {
...@@ -977,52 +1028,62 @@ const handleWarehouseChange = (value: string | number) => { ...@@ -977,52 +1028,62 @@ const handleWarehouseChange = (value: string | number) => {
align-items: center; align-items: center;
gap: 10px; gap: 10px;
} }
.online { .online {
color: green; color: green;
font-size: 14px; font-size: 14px;
font-weight: 600; font-weight: 600;
} }
.offline { .offline {
color: red; color: red;
font-size: 14px; font-size: 14px;
font-weight: 600; font-weight: 600;
} }
.pod-make-order-content { .pod-make-order-content {
display: flex; display: flex;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
gap: 10px; gap: 10px;
} }
.left-content { .left-content {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 10px; gap: 10px;
width: calc(100% - 900px - 20px); width: calc(100% - 900px - 20px);
} }
.head-form { .head-form {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 10px; gap: 10px;
} }
.table-content { .table-content {
flex: 1; flex: 1;
overflow: hidden; overflow: hidden;
} }
.middle-content { .middle-content {
width: 500px; width: 500px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 5px; gap: 5px;
} }
.right-content { .right-content {
width: 400px; width: 400px;
overflow-y: auto; overflow-y: auto;
overflow-x: hidden; overflow-x: hidden;
} }
.basic-info { .basic-info {
display: grid; display: grid;
grid-template-columns: repeat(2, 1fr); grid-template-columns: repeat(2, 1fr);
gap: 10px; gap: 10px;
.basic-info-item { .basic-info-item {
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -1035,6 +1096,7 @@ const handleWarehouseChange = (value: string | number) => { ...@@ -1035,6 +1096,7 @@ const handleWarehouseChange = (value: string | number) => {
} }
} }
} }
.box-top { .box-top {
position: relative; position: relative;
border: 1px solid #ddd; border: 1px solid #ddd;
...@@ -1046,10 +1108,12 @@ const handleWarehouseChange = (value: string | number) => { ...@@ -1046,10 +1108,12 @@ const handleWarehouseChange = (value: string | number) => {
color: #fff; color: #fff;
overflow: hidden; overflow: hidden;
} }
.multiple-title { .multiple-title {
position: absolute; position: absolute;
top: 0; top: 0;
right: 0; right: 0;
&::after { &::after {
position: absolute; position: absolute;
top: -31px; top: -31px;
...@@ -1060,6 +1124,7 @@ const handleWarehouseChange = (value: string | number) => { ...@@ -1060,6 +1124,7 @@ const handleWarehouseChange = (value: string | number) => {
border-color: transparent transparent red transparent; border-color: transparent transparent red transparent;
transform: rotate(45deg); transform: rotate(45deg);
} }
.multiple-title-text { .multiple-title-text {
position: absolute; position: absolute;
z-index: 2; z-index: 2;
...@@ -1067,12 +1132,14 @@ const handleWarehouseChange = (value: string | number) => { ...@@ -1067,12 +1132,14 @@ const handleWarehouseChange = (value: string | number) => {
left: -20px; left: -20px;
} }
} }
.box-top-item { .box-top-item {
display: flex; display: flex;
height: 80px; height: 80px;
align-items: center; align-items: center;
margin-bottom: 10px; margin-bottom: 10px;
} }
.box-top-item-box-index { .box-top-item-box-index {
font-size: 60px; font-size: 60px;
color: red; color: red;
...@@ -1080,10 +1147,12 @@ const handleWarehouseChange = (value: string | number) => { ...@@ -1080,10 +1147,12 @@ const handleWarehouseChange = (value: string | number) => {
width: 120px; width: 120px;
font-weight: 600; font-weight: 600;
} }
.box-top-item-box-index-text { .box-top-item-box-index-text {
margin-right: 15px; margin-right: 15px;
font-size: 30px; font-size: 30px;
} }
.box-top-item-box-index-number { .box-top-item-box-index-number {
font-size: 60px; font-size: 60px;
color: red; color: red;
...@@ -1092,21 +1161,25 @@ const handleWarehouseChange = (value: string | number) => { ...@@ -1092,21 +1161,25 @@ const handleWarehouseChange = (value: string | number) => {
width: 90px; width: 90px;
font-weight: 600; font-weight: 600;
} }
.box-top-item-status { .box-top-item-status {
margin-bottom: 15px; margin-bottom: 15px;
} }
.order-image { .order-image {
flex: 1; flex: 1;
overflow: hidden; overflow: hidden;
border: 1px solid #ddd; border: 1px solid #ddd;
background: #eee; background: #eee;
} }
.box-list { .box-list {
display: grid; display: grid;
grid-template-columns: repeat(7, 50px); grid-template-columns: repeat(7, 50px);
gap: 8px; gap: 8px;
position: relative; position: relative;
} }
.box-list-item { .box-list-item {
position: relative; position: relative;
border: 1px solid #ddd; border: 1px solid #ddd;
...@@ -1117,10 +1190,12 @@ const handleWarehouseChange = (value: string | number) => { ...@@ -1117,10 +1190,12 @@ const handleWarehouseChange = (value: string | number) => {
text-align: center; text-align: center;
box-sizing: border-box; box-sizing: border-box;
border-radius: 5px; border-radius: 5px;
&:not(.isNull) { &:not(.isNull) {
background: #819aff; background: #819aff;
color: #fff; color: #fff;
} }
&.active { &.active {
background: #ff9900; background: #ff9900;
color: #fff; color: #fff;
...@@ -1136,6 +1211,7 @@ const handleWarehouseChange = (value: string | number) => { ...@@ -1136,6 +1211,7 @@ const handleWarehouseChange = (value: string | number) => {
border-radius: 50%; border-radius: 50%;
background-color: red; background-color: red;
} }
.number { .number {
position: absolute; position: absolute;
bottom: 3px; bottom: 3px;
...@@ -1155,6 +1231,7 @@ const handleWarehouseChange = (value: string | number) => { ...@@ -1155,6 +1231,7 @@ const handleWarehouseChange = (value: string | number) => {
flex-direction: column; flex-direction: column;
height: calc(100% - 60px); height: calc(100% - 60px);
} }
.el-dialog__body { .el-dialog__body {
flex: 1; flex: 1;
overflow: hidden; overflow: hidden;
......
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