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()
...@@ -298,14 +310,21 @@ const podOrderDetailsColumns = computed(() => [ ...@@ -298,14 +310,21 @@ const podOrderDetailsColumns = computed(() => [
// width: 140, // width: 140,
// 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
...@@ -473,12 +495,10 @@ const renderItemBox = (bool: boolean) => { ...@@ -473,12 +495,10 @@ const renderItemBox = (bool: boolean) => {
parts.length > 3 && parts[3].startsWith('CNPSC') parts.length > 3 && parts[3].startsWith('CNPSC')
? parts[3] ? parts[3]
: parts.length > 1 : parts.length > 1
? parts[1] ? parts[1]
: 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,17 +766,13 @@ const initOrderDetailBox = async () => { ...@@ -712,17 +766,13 @@ 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 || ''
if ( if (
podOrderDetailsData.value && podOrderDetailsData.value &&
podOrderDetailsData.value.pickingNumber === podOrderDetailsData.value.pickingNumber ===
podOrderDetailsData.value.purchaseNumber podOrderDetailsData.value.purchaseNumber
) { ) {
podOrderDetailsData.value.printResult = 'notPrintSuccess' podOrderDetailsData.value.printResult = 'notPrintSuccess'
} }
...@@ -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;
......
...@@ -129,14 +129,14 @@ ...@@ -129,14 +129,14 @@
</ElFormItem> </ElFormItem>
<ElFormItem label="类型"> <ElFormItem label="类型">
<el-radio-group v-model="searchForm.customizedQuantity" @click.stop="(e: Event) => handleRadioGroupClick(e)"> <el-radio-group v-model="searchForm.customizedQuantity" @click.stop="(e: Event) => handleRadioGroupClick(e)">
<el-radio-button label="single">单面</el-radio-button> <el-radio-button value="single">单面</el-radio-button>
<el-radio-button label="multiple">多面</el-radio-button> <el-radio-button value="multiple">多面</el-radio-button>
</el-radio-group> </el-radio-group>
</ElFormItem> </ElFormItem>
<ElFormItem label="数量"> <ElFormItem label="数量">
<el-radio-group v-model="searchForm.multi" @click.stop="(e: Event) => handleMultiRadioGroupClick(e)"> <el-radio-group v-model="searchForm.multi" @click.stop="(e: Event) => handleMultiRadioGroupClick(e)">
<el-radio-button :label="false">单件</el-radio-button> <el-radio-button :value="false">单件</el-radio-button>
<el-radio-button :label="true">多件</el-radio-button> <el-radio-button :value="true">多件</el-radio-button>
</el-radio-group> </el-radio-group>
</ElFormItem> </ElFormItem>
<ElFormItem> <ElFormItem>
...@@ -321,6 +321,25 @@ ...@@ -321,6 +321,25 @@
></ElOption> ></ElOption>
</ElSelect> </ElSelect>
</ElFormItem> </ElFormItem>
<ElFormItem label="商品类型">
<ElSelect
v-model="searchForm.productMark"
placeholder="请选择商品类型"
clearable
filterable
collapse-tags
collapse-tags-tooltip
:teleported="false"
style="width: 150px"
>
<ElOption
v-for="(item, index) in productMarkList"
:key="index"
:value="item.value"
:label="item.label"
></ElOption>
</ElSelect>
</ElFormItem>
</ElForm> </ElForm>
<template #reference> <template #reference>
<el-button type="warning" @click="searchVisible = !searchVisible"> <el-button type="warning" @click="searchVisible = !searchVisible">
...@@ -336,8 +355,8 @@ ...@@ -336,8 +355,8 @@
</ElFormItem> </ElFormItem>
<ElFormItem> <ElFormItem>
<span> <span>
<ElButton link @click="resetSearchForm" style="font-size: 12px" <ElButton link style="font-size: 12px" @click="resetSearchForm"
><span title="重置查询条件">重置</span></ElButton ><span title="重置查询条件">重置</span></ElButton
> >
</span> </span>
</ElFormItem> </ElFormItem>
...@@ -355,32 +374,41 @@ ...@@ -355,32 +374,41 @@
> >
<ElDropdown> <ElDropdown>
<el-button type="primary"> <el-button type="primary">
DTF排版<el-icon class="el-icon--right"><ArrowDown /></el-icon> DTF排版
<el-icon class="el-icon--right">
<ArrowDown />
</el-icon>
</el-button> </el-button>
<template #dropdown> <template #dropdown>
<ElDropdownMenu> <ElDropdownMenu>
<ElDropdownItem <ElDropdownItem
:loading="tifDownloadLoading" :loading="tifDownloadLoading"
@click="downloadTif('tiff', 42)" @click="downloadTif('tiff', 42)"
>TIF(40+2cm)</ElDropdownItem >TIF(40+2cm)
</ElDropdownItem
> >
<ElDropdownItem <ElDropdownItem
:loading="tifDownloadLoading" :loading="tifDownloadLoading"
@click="downloadTif('tiff', 60)" @click="downloadTif('tiff', 60)"
>TIF(60cm)</ElDropdownItem >TIF(60cm)
</ElDropdownItem
> >
<ElDropdownItem <ElDropdownItem
:loading="pngDownloadLoading" :loading="pngDownloadLoading"
@click="downloadTif('png', 42)" @click="downloadTif('png', 42)"
>PNG(40+2cm)</ElDropdownItem >PNG(40+2cm)
</ElDropdownItem
> >
<ElDropdownItem <ElDropdownItem
:loading="pngDownloadLoading" :loading="pngDownloadLoading"
@click="downloadTif('png', 60)" @click="downloadTif('png', 60)"
>PNG(60cm)</ElDropdownItem >PNG(60cm)
</ElDropdownItem
> >
</ElDropdownMenu></template </ElDropdownMenu>
></ElDropdown </template
>
</ElDropdown
> >
</ElFormItem> </ElFormItem>
<ElFormItem> <ElFormItem>
...@@ -516,7 +544,7 @@ ...@@ -516,7 +544,7 @@
</span> </span>
<span v-if="status === 'WAIT_SHIPMENT'" class="item"> <span v-if="status === 'WAIT_SHIPMENT'" class="item">
<ElButton type="primary" @click="completeDelivery()" <ElButton type="primary" @click="completeDelivery()"
>完成发货</ElButton >完成发货</ElButton
> >
</span> </span>
<span <span
...@@ -554,7 +582,7 @@ ...@@ -554,7 +582,7 @@
selection.some((item) => item.shipmentType !== 1) selection.some((item) => item.shipmentType !== 1)
" "
@click="getOrderByIdApi('createLogisticsOrder')" @click="getOrderByIdApi('createLogisticsOrder')"
>创建物流订单</ElDropdownItem >创建物流订单</ElDropdownItem
> >
<ElDropdownItem <ElDropdownItem
:disabled=" :disabled="
...@@ -562,7 +590,7 @@ ...@@ -562,7 +590,7 @@
selection.some((item) => item.shipmentType !== 1) selection.some((item) => item.shipmentType !== 1)
" "
@click="getOrderByIdApi('getTrackingNumber')" @click="getOrderByIdApi('getTrackingNumber')"
>获取跟踪号</ElDropdownItem >获取跟踪号</ElDropdownItem
> >
<ElDropdownItem <ElDropdownItem
:disabled=" :disabled="
...@@ -570,7 +598,7 @@ ...@@ -570,7 +598,7 @@
selection.some((item) => item.shipmentType !== 1) selection.some((item) => item.shipmentType !== 1)
" "
@click="getOrderByIdApi('getPrintOrder')" @click="getOrderByIdApi('getPrintOrder')"
>获取打印面单</ElDropdownItem >获取打印面单</ElDropdownItem
> >
<ElDropdownItem <ElDropdownItem
:disabled=" :disabled="
...@@ -578,7 +606,7 @@ ...@@ -578,7 +606,7 @@
selection.some((item) => item.shipmentType !== 1) selection.some((item) => item.shipmentType !== 1)
" "
@click="getOrderByIdApi('cancelLogisticsOrder')" @click="getOrderByIdApi('cancelLogisticsOrder')"
>取消物流订单</ElDropdownItem >取消物流订单</ElDropdownItem
> >
</ElDropdownMenu> </ElDropdownMenu>
</template> </template>
...@@ -600,7 +628,7 @@ ...@@ -600,7 +628,7 @@
class="item" class="item"
> >
<ElButton type="primary" @click="downloadMaterial" <ElButton type="primary" @click="downloadMaterial"
>下载素材</ElButton >下载素材</ElButton
> >
</span> </span>
<span <span
...@@ -660,6 +688,18 @@ ...@@ -660,6 +688,18 @@
</span> </span>
<span <span
v-if=" v-if="
[
'WAIT_SHIPMENT',
].includes(status)
"
class="item"
>
<ElButton type="primary" @click="printNormal">
普货拣货
</ElButton>
</span>
<span
v-if="
status === 'STOCK_OUT' || status === 'STOCK_OUT' ||
status === 'CREATE_LOGISTICS' || status === 'CREATE_LOGISTICS' ||
status === 'TO_BE_ARRANGE' || status === 'TO_BE_ARRANGE' ||
...@@ -679,7 +719,7 @@ ...@@ -679,7 +719,7 @@
selection.length === 0 && cardSelection.length === 0 selection.length === 0 && cardSelection.length === 0
" "
@click="rejectOrder('TO_BE_CONFIRMED')" @click="rejectOrder('TO_BE_CONFIRMED')"
>待确认</ElDropdownItem >待确认</ElDropdownItem
> >
<ElDropdownItem <ElDropdownItem
v-if=" v-if="
...@@ -691,7 +731,7 @@ ...@@ -691,7 +731,7 @@
selection.length === 0 && cardSelection.length === 0 selection.length === 0 && cardSelection.length === 0
" "
@click="rejectOrder('CREATE_LOGISTICS')" @click="rejectOrder('CREATE_LOGISTICS')"
>待创建物流</ElDropdownItem >待创建物流</ElDropdownItem
> >
<ElDropdownItem <ElDropdownItem
v-if="status === 'PICKING' || status === 'IN_PRODUCTION'" v-if="status === 'PICKING' || status === 'IN_PRODUCTION'"
...@@ -699,7 +739,7 @@ ...@@ -699,7 +739,7 @@
selection.length === 0 && cardSelection.length === 0 selection.length === 0 && cardSelection.length === 0
" "
@click="rejectOrder('TO_BE_ARRANGE')" @click="rejectOrder('TO_BE_ARRANGE')"
>待排单</ElDropdownItem >待排单</ElDropdownItem
> >
<ElDropdownItem <ElDropdownItem
v-if="status === 'IN_PRODUCTION'" v-if="status === 'IN_PRODUCTION'"
...@@ -707,7 +747,7 @@ ...@@ -707,7 +747,7 @@
selection.length === 0 && cardSelection.length === 0 selection.length === 0 && cardSelection.length === 0
" "
@click="rejectOrder('PICKING')" @click="rejectOrder('PICKING')"
>待拣胚</ElDropdownItem >待拣胚</ElDropdownItem
> >
</ElDropdownMenu> </ElDropdownMenu>
</template> </template>
...@@ -724,12 +764,12 @@ ...@@ -724,12 +764,12 @@
:loading="exportLoading" :loading="exportLoading"
type="success" type="success"
@click="exportData" @click="exportData"
>导出</ElButton >导出</ElButton
> >
</span> </span>
<span v-if="status === 'BATCH_DOWNLOAD'" class="item"> <span v-if="status === 'BATCH_DOWNLOAD'" class="item">
<ElButton type="danger" @click="handleBatchDelete('batch')" <ElButton type="danger" @click="handleBatchDelete('batch')"
>批量删除</ElButton >批量删除</ElButton
> >
</span> </span>
</ElFormItem> </ElFormItem>
...@@ -750,7 +790,7 @@ ...@@ -750,7 +790,7 @@
:class="{ :class="{
blue: true, blue: true,
}" }"
>{{ item.quantity && item.quantity > 0 ? item.quantity : 0 }}</span >{{ item.quantity && item.quantity > 0 ? item.quantity : 0 }}</span
> >
</div> </div>
</div> </div>
...@@ -805,7 +845,7 @@ ...@@ -805,7 +845,7 @@
<span <span
v-if="interceptionStatus.production['0']" v-if="interceptionStatus.production['0']"
class="tabs-node_count blue" class="tabs-node_count blue"
>{{ interceptionStatus.production['0'] }}</span >{{ interceptionStatus.production['0'] }}</span
> >
</div> </div>
<div <div
...@@ -817,7 +857,7 @@ ...@@ -817,7 +857,7 @@
<span <span
v-if="interceptionStatus.production['1']" v-if="interceptionStatus.production['1']"
class="tabs-node_count blue" class="tabs-node_count blue"
>{{ interceptionStatus.production['1'] }}</span >{{ interceptionStatus.production['1'] }}</span
> >
</div> </div>
<div <div
...@@ -829,7 +869,7 @@ ...@@ -829,7 +869,7 @@
<span <span
v-if="interceptionStatus.production['2']" v-if="interceptionStatus.production['2']"
class="tabs-node_count red" class="tabs-node_count red"
>{{ interceptionStatus.production['2'] }}</span >{{ interceptionStatus.production['2'] }}</span
> >
</div> </div>
<div <div
...@@ -841,7 +881,7 @@ ...@@ -841,7 +881,7 @@
<span <span
v-if="interceptionStatus.shipment['0']" v-if="interceptionStatus.shipment['0']"
class="tabs-node_count blue" class="tabs-node_count blue"
>{{ interceptionStatus.shipment['0'] }}</span >{{ interceptionStatus.shipment['0'] }}</span
> >
</div> </div>
<div <div
...@@ -853,7 +893,7 @@ ...@@ -853,7 +893,7 @@
<span <span
v-if="interceptionStatus.shipment['1']" v-if="interceptionStatus.shipment['1']"
class="tabs-node_count blue" class="tabs-node_count blue"
>{{ interceptionStatus.shipment['1'] }}</span >{{ interceptionStatus.shipment['1'] }}</span
> >
</div> </div>
<div <div
...@@ -865,7 +905,7 @@ ...@@ -865,7 +905,7 @@
<span <span
v-if="interceptionStatus.shipment['2']" v-if="interceptionStatus.shipment['2']"
class="tabs-node_count red" class="tabs-node_count red"
>{{ interceptionStatus.shipment['2'] }}</span >{{ interceptionStatus.shipment['2'] }}</span
> >
</div> </div>
</div> </div>
...@@ -905,7 +945,9 @@ ...@@ -905,7 +945,9 @@
" "
placement="bottom" placement="bottom"
> >
<el-icon color="#E6A23C"><InfoFilled /></el-icon> <el-icon color="#E6A23C">
<InfoFilled />
</el-icon>
</el-tooltip> </el-tooltip>
<span class="serial-number">{{ index + 1 }}</span> <span class="serial-number">{{ index + 1 }}</span>
</div> </div>
...@@ -923,7 +965,7 @@ ...@@ -923,7 +965,7 @@
style="display: flex; flex-direction: column" style="display: flex; flex-direction: column"
> >
<div <div
v-for="img in item.previewImgs" v-for="img in item.productMark!=='normal' ?item.previewImgs:[{url:item.variantImage}]"
:key="img" :key="img"
style="text-align: center" style="text-align: center"
> >
...@@ -1040,7 +1082,7 @@ ...@@ -1040,7 +1082,7 @@
</div> </div>
<div class="goods-item-info-item"> <div class="goods-item-info-item">
<span class="goods-item-info-item-label" <span class="goods-item-info-item-label"
>第三方生产单号:</span >第三方生产单号:</span
> >
<span <span
class="goods-item-info-item-value" class="goods-item-info-item-value"
...@@ -1082,7 +1124,7 @@ ...@@ -1082,7 +1124,7 @@
> >
<!-- <span class="goods-item-info-item-label">补胚状态:</span> --> <!-- <span class="goods-item-info-item-label">补胚状态:</span> -->
<el-tag size="small" effect="dark" type="danger" <el-tag size="small" effect="dark" type="danger"
>补胚中 >补胚中
</el-tag> </el-tag>
</div> </div>
</div> </div>
...@@ -1095,7 +1137,7 @@ ...@@ -1095,7 +1137,7 @@
</div> --> </div> -->
<div class="goods-item-info-item"> <div class="goods-item-info-item">
<span class="goods-item-info-item-label" <span class="goods-item-info-item-label"
>模板单价¥:</span >模板单价¥:</span
> >
<span class="goods-item-info-item-value"> <span class="goods-item-info-item-value">
{{ item.templatePrice }} {{ item.templatePrice }}
...@@ -1103,7 +1145,7 @@ ...@@ -1103,7 +1145,7 @@
</div> </div>
<div class="goods-item-info-item"> <div class="goods-item-info-item">
<span class="goods-item-info-item-label" <span class="goods-item-info-item-label"
>工艺单价¥:</span >工艺单价¥:</span
> >
<span class="goods-item-info-item-value"> <span class="goods-item-info-item-value">
{{ item.craftPrice }} {{ item.craftPrice }}
...@@ -1111,7 +1153,7 @@ ...@@ -1111,7 +1153,7 @@
</div> </div>
<div class="goods-item-info-item"> <div class="goods-item-info-item">
<span class="goods-item-info-item-label" <span class="goods-item-info-item-label"
>单件价格¥:</span >单件价格¥:</span
> >
<span class="goods-item-info-item-value"> <span class="goods-item-info-item-value">
{{ calculatedPrice(item) }} {{ calculatedPrice(item) }}
...@@ -1120,13 +1162,13 @@ ...@@ -1120,13 +1162,13 @@
<div class="goods-item-info-item"> <div class="goods-item-info-item">
<span class="goods-item-info-item-label">{{ <span class="goods-item-info-item-label">{{
status === 'PICKING' || status === 'PICKING' ||
status === 'TO_BE_CONFIRMED' || status === 'TO_BE_CONFIRMED' ||
status === 'STOCK_OUT' || status === 'STOCK_OUT' ||
status === 'CREATE_LOGISTICS' status === 'CREATE_LOGISTICS'
? '数量:' ? '数量:'
: '已生产数量:' : '已生产数量:'
}}</span> }}</span>
<span class="goods-item-info-item-value"> <span class="goods-item-info-item-value">
{{ {{
status === 'PICKING' || status === 'PICKING' ||
...@@ -1150,12 +1192,12 @@ ...@@ -1150,12 +1192,12 @@
{{ item.replenishmentSumNum || 0 }} {{ item.replenishmentSumNum || 0 }}
</span> </span>
<el-button <el-button
v-if="status === 'WAIT_SHIPMENT'" v-if="status === 'WAIT_SHIPMENT' && item.productMark!=='normal'"
link link
size="small" size="small"
type="success" type="success"
@click="applyForReplenishment(item)" @click="applyForReplenishment(item)"
>申请补胚 >申请补胚
</el-button> </el-button>
<!-- f --> <!-- f -->
</div> </div>
...@@ -1168,13 +1210,13 @@ ...@@ -1168,13 +1210,13 @@
{{ item.weight }}g {{ item.weight }}g
</span> </span>
<el-button <el-button
v-if="status === 'WAIT_SHIPMENT'" v-if="status === 'WAIT_SHIPMENT' && item.productMark!=='normal'"
link link
size="small" size="small"
type="warning" type="warning"
style="height: 23px; margin: 0" style="height: 23px; margin: 0"
@click="showArrange(3, item)" @click="showArrange(3, item)"
>排版 >排版
</el-button> </el-button>
</div> </div>
</div> </div>
...@@ -1396,17 +1438,17 @@ ...@@ -1396,17 +1438,17 @@
<el-timeline-item <el-timeline-item
:color="row.createTime ? '#409EFF' : ''" :color="row.createTime ? '#409EFF' : ''"
:timestamp="row.createTime" :timestamp="row.createTime"
>创建时间 >创建时间
</el-timeline-item> </el-timeline-item>
<el-timeline-item <el-timeline-item
:color="row.startStockingTime ? '#E6A23C' : ''" :color="row.startStockingTime ? '#E6A23C' : ''"
:timestamp="row.startStockingTime" :timestamp="row.startStockingTime"
>确认时间 >确认时间
</el-timeline-item> </el-timeline-item>
<el-timeline-item <el-timeline-item
:color="row.finishTime ? '#67C23A' : ''" :color="row.finishTime ? '#67C23A' : ''"
:timestamp="row.finishTime" :timestamp="row.finishTime"
>完成时间 >完成时间
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>
<!-- <div class="order-time-box"> <!-- <div class="order-time-box">
...@@ -1478,7 +1520,7 @@ ...@@ -1478,7 +1520,7 @@
</div> </div>
</template> </template>
<template #failReason="{ row }"> <template #failReason="{ row }">
<span v-html="row.failReason" style="white-space: pre-line"></span> <span style="white-space: pre-line" v-html="row.failReason"></span>
</template> </template>
<template #operate="{ row }"> <template #operate="{ row }">
<div <div
...@@ -1645,7 +1687,9 @@ ...@@ -1645,7 +1687,9 @@
" "
placement="bottom" placement="bottom"
> >
<el-icon color="#E6A23C"><InfoFilled /></el-icon> <el-icon color="#E6A23C">
<InfoFilled />
</el-icon>
</el-tooltip> </el-tooltip>
<el-tooltip <el-tooltip
v-if="cardItem.customTagList" v-if="cardItem.customTagList"
...@@ -1664,26 +1708,27 @@ ...@@ -1664,26 +1708,27 @@
type="primary" type="primary"
:title="item.name || ''" :title="item.name || ''"
style="margin-bottom: 2px" style="margin-bottom: 2px"
>{{ item.name || '' }}</el-tag >{{ item.name || '' }}
</el-tag
> >
</div> </div>
</template> </template>
<div <div
class="flex" v-if="cardItem.customTagList?.length"
ref="tagRefs" ref="tagRefs"
class="flex"
style="gap: 5px; overflow: hidden" style="gap: 5px; overflow: hidden"
v-if="cardItem.customTagList?.length"
> >
<el-tag <el-tag
size="small"
type="primary"
v-for="(item, index) in cardItem.customTagList.slice( v-for="(item, index) in cardItem.customTagList.slice(
0, 0,
3, 3,
)" )"
:key="index" :key="index"
><span size="small"
style=" type="primary"
><span
style="
width: 50px; width: 50px;
text-align: center; text-align: center;
overflow: hidden; overflow: hidden;
...@@ -1691,22 +1736,23 @@ ...@@ -1691,22 +1736,23 @@
text-overflow: ellipsis; text-overflow: ellipsis;
display: inline-block; display: inline-block;
" "
:title="item.name || ''" :title="item.name || ''"
>{{ item.name || '' }}</span >{{ item.name || '' }}</span
></el-tag ></el-tag
> >
<el-tag <el-tag
v-if="cardItem.customTagList?.slice(3)?.length"
size="small" size="small"
type="primary" type="primary"
v-if="cardItem.customTagList?.slice(3)?.length" >+{{ cardItem.customTagList.slice(3).length }}
>+{{ cardItem.customTagList.slice(3).length }}</el-tag </el-tag
> >
</div> </div>
</el-tooltip> </el-tooltip>
</template> </template>
<template <template
#top_right
v-if="['ZPZY', 'CXZY', 'THZY'].includes(cardItem.craftCode as string)" v-if="['ZPZY', 'CXZY', 'THZY'].includes(cardItem.craftCode as string)"
#top_right
> >
<img <img
:src="`/images/pic/${cardItem.craftCode}.png`" :src="`/images/pic/${cardItem.craftCode}.png`"
...@@ -1739,8 +1785,8 @@ ...@@ -1739,8 +1785,8 @@
</div> </div>
<Icon <Icon
name="caozuorizhi" name="caozuorizhi"
@click="(e: MouseEvent) => operationLog(cardItem.podJomallOrderCnId, e)"
style="width: 28px; height: 28px" style="width: 28px; height: 28px"
@click="(e: MouseEvent) => operationLog(cardItem.podJomallOrderCnId, e)"
> >
<template #title> <template #title>
<title>操作日志</title> <title>操作日志</title>
...@@ -1754,7 +1800,7 @@ ...@@ -1754,7 +1800,7 @@
</template> </template>
<template #images> <template #images>
<div class="flex-between"> <div class="flex-between">
<div v-if="cardItem.imageAry" class="images-position"> <div v-if="cardItem.imageAry " class="images-position">
<div <div
v-for="(item, index) in JSON.parse( v-for="(item, index) in JSON.parse(
cardItem.imageAry || '', cardItem.imageAry || '',
...@@ -1806,7 +1852,7 @@ ...@@ -1806,7 +1852,7 @@
:title="`商品名称:${cardItem?.productName || ''}`" :title="`商品名称:${cardItem?.productName || ''}`"
> >
<span class="grid-item-value" <span class="grid-item-value"
>{{ cardItem?.productName }} >{{ cardItem?.productName }}
</span> </span>
</div> </div>
<div <div
...@@ -1940,7 +1986,7 @@ ...@@ -1940,7 +1986,7 @@
</div> </div>
<div v-if="cardItem.isReplenishment" class="grid-item"> <div v-if="cardItem.isReplenishment" class="grid-item">
<el-tag size="small" type="danger" effect="dark" <el-tag size="small" type="danger" effect="dark"
>补胚中 >补胚中
</el-tag> </el-tag>
</div> </div>
</div> </div>
...@@ -1953,10 +1999,10 @@ ...@@ -1953,10 +1999,10 @@
<div class="pagination"> <div class="pagination">
<div class="total"> <div class="total">
<span <span
>已选择 >已选择
<span style="color: red">{{ <span style="color: red">{{
selection.length || cardSelection.length selection.length || cardSelection.length
}}</span> }}</span>
条数据</span 条数据</span
> >
</div> </div>
...@@ -1973,15 +2019,15 @@ ...@@ -1973,15 +2019,15 @@
></ElPagination> ></ElPagination>
<div class="pageSize"> <div class="pageSize">
<span <span
>自定义条数 >自定义条数
<span <span
><el-input ><el-input
v-model="pageSize" v-model="pageSize"
type="number" type="number"
style="width: 100px" style="width: 100px"
clearable clearable
@blur="inputBlur" @blur="inputBlur"
></el-input ></el-input
></span> ></span>
/</span /</span
> >
...@@ -2376,7 +2422,8 @@ ...@@ -2376,7 +2422,8 @@
typesettingVisible = false typesettingVisible = false
} }
" "
>取消</el-button >取消
</el-button
> >
<el-button type="primary" @click="submitTypesetting">确认</el-button> <el-button type="primary" @click="submitTypesetting">确认</el-button>
</template> </template>
...@@ -2387,6 +2434,7 @@ import { getUserMarkList } from '@/api/common' ...@@ -2387,6 +2434,7 @@ import { getUserMarkList } from '@/api/common'
// import { AnyObject } from '@/types/api/warehouse' // import { AnyObject } from '@/types/api/warehouse'
import { import {
InfoFilled, InfoFilled,
Close,
CaretBottom, CaretBottom,
CaretTop, CaretTop,
ArrowDown, ArrowDown,
...@@ -2442,7 +2490,7 @@ import { ...@@ -2442,7 +2490,7 @@ import {
printPickPdfByBatchNumberApi, printPickPdfByBatchNumberApi,
printProductionPdfByBatchNumberApi, printProductionPdfByBatchNumberApi,
batchDownloadRecomposingApi, batchDownloadRecomposingApi,
getCustomTagListCnApi, getCustomTagListCnApi, printNormalPdf,
} from '@/api/podCnOrder' } from '@/api/podCnOrder'
import { BaseRespData } from '@/types/api' import { BaseRespData } from '@/types/api'
...@@ -2471,7 +2519,7 @@ import usePageList from '@/utils/hooks/usePageList' ...@@ -2471,7 +2519,7 @@ import usePageList from '@/utils/hooks/usePageList'
import { useValue } from '@/utils/hooks/useValue' import { useValue } from '@/utils/hooks/useValue'
import { showConfirm } from '@/utils/ui' import { showConfirm } from '@/utils/ui'
import { DocumentCopy, EditPen } from '@element-plus/icons-vue' import { DocumentCopy, EditPen } from '@element-plus/icons-vue'
import { Column, ElFormItem } from 'element-plus' import { Column, ElFormItem, ElMessage } from 'element-plus'
import { computed, onMounted, ref, nextTick, reactive } from 'vue' import { computed, onMounted, ref, nextTick, reactive } from 'vue'
import FastProduction from './FastProduction.vue' import FastProduction from './FastProduction.vue'
import { filePath } from '@/api/axios' import { filePath } from '@/api/axios'
...@@ -2491,10 +2539,11 @@ import { ...@@ -2491,10 +2539,11 @@ import {
type NavigationGuardNext, type NavigationGuardNext,
type RouteLocationNormalized, type RouteLocationNormalized,
} from 'vue-router' } from 'vue-router'
declare global { declare global {
interface Window { interface Window {
ActiveXObject: { ActiveXObject: {
new (type: string): XMLHttpRequest new(type: string): XMLHttpRequest
} }
VBS_BinaryToArray: { VBS_BinaryToArray: {
(data: unknown): { toArray(): number[] } (data: unknown): { toArray(): number[] }
...@@ -2612,6 +2661,21 @@ const confirmDialogShow = ref(false) ...@@ -2612,6 +2661,21 @@ const confirmDialogShow = ref(false)
const tifDownloadLoading = ref(false) const tifDownloadLoading = ref(false)
const pngDownloadLoading = ref(false) const pngDownloadLoading = ref(false)
const confirmData = ref([]) const confirmData = ref([])
const productMarkList = [
{
label: '普通商品',
value: 'normal',
}, {
label: 'pod商品',
value: 'pod',
}, {
label: '一件定制局部印',
value: 'custom_part',
}, {
label: '一件定制满印',
value: 'custom_full',
},
]
const searchVisible = ref(false) const searchVisible = ref(false)
const confirmSelectionData = ref<LogisticsData[]>([]) const confirmSelectionData = ref<LogisticsData[]>([])
const confirmRowData = ref<ProductList | null>(null) const confirmRowData = ref<ProductList | null>(null)
...@@ -2622,6 +2686,7 @@ const [searchForm, resetSearchForm] = useValue<SearchForm>({ ...@@ -2622,6 +2686,7 @@ const [searchForm, resetSearchForm] = useValue<SearchForm>({
timeType: 1, timeType: 1,
shopNumber: '', shopNumber: '',
replaceShipment: '', replaceShipment: '',
productMark: '',
shipmentType: '', shipmentType: '',
userMark: '', userMark: '',
processNumber: '', processNumber: '',
...@@ -2797,6 +2862,29 @@ const handleExceptionConfirm = async () => { ...@@ -2797,6 +2862,29 @@ const handleExceptionConfirm = async () => {
loading.close() loading.close()
} }
} }
const printNormal = async () => {
await showConfirm('确定普货拣货吗?', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
const arr: (number | undefined)[] = []
if (!selection.value.length) {
return ElMessage.warning('请选择订单')
}
selection.value.forEach(s => {
const f = s.productList && s.productList.find(p => p.productMark === 'normal')
if (f) arr.push(s.id)
})
if (!arr.length) {
ElMessage.warning('暂无可打印的普货拣货单')
return
}
const res = await printNormalPdf(arr.join())
ElMessage.success('操作成功')
window.open(filePath + res.message)
}
const completeDelivery = async () => { const completeDelivery = async () => {
if (selection.value.length === 0) { if (selection.value.length === 0) {
return ElMessage.warning('请选择订单') return ElMessage.warning('请选择订单')
...@@ -2962,8 +3050,8 @@ const interceptChange = async (status: boolean) => { ...@@ -2962,8 +3050,8 @@ const interceptChange = async (status: boolean) => {
? 1 ? 1
: 3 : 3
: interceptCurrent.value === 1 : interceptCurrent.value === 1
? 2 ? 2
: 4 : 4
try { try {
const res = await interceptUpdateApi({ const res = await interceptUpdateApi({
orderIds: selection.value.map((item) => item.id), orderIds: selection.value.map((item) => item.id),
...@@ -3004,8 +3092,8 @@ const rejectOrder = async (type: string) => { ...@@ -3004,8 +3092,8 @@ const rejectOrder = async (type: string) => {
orderStatus: type, orderStatus: type,
productList: selection.value.length productList: selection.value.length
? selection.value.flatMap( ? selection.value.flatMap(
(item: PodCnOrderListData) => item.productList || [], (item: PodCnOrderListData) => item.productList || [],
) )
: cardSelection.value, : cardSelection.value,
reasonStr: value, reasonStr: value,
}) })
...@@ -3557,6 +3645,7 @@ const confirmRules = reactive({ ...@@ -3557,6 +3645,7 @@ const confirmRules = reactive({
}, },
], ],
}) })
//确认生产 //确认生产
function confirmProduct() { function confirmProduct() {
if (selection.value.length === 0) { if (selection.value.length === 0) {
...@@ -3565,6 +3654,7 @@ function confirmProduct() { ...@@ -3565,6 +3654,7 @@ function confirmProduct() {
confirmManuShow.value = true confirmManuShow.value = true
confirmFormRef.value.resetFields() confirmFormRef.value.resetFields()
} }
async function confirmSubmit() { async function confirmSubmit() {
try { try {
await confirmFormRef.value.validate() await confirmFormRef.value.validate()
...@@ -3603,6 +3693,7 @@ async function confirmSubmit() { ...@@ -3603,6 +3693,7 @@ async function confirmSubmit() {
ElMessage.success('操作成功') ElMessage.success('操作成功')
confirmManuShow.value = false confirmManuShow.value = false
} }
const handleConfirm = async () => { const handleConfirm = async () => {
if (!productionClientValue.value) { if (!productionClientValue.value) {
return ElMessage.warning('请选择生产端') return ElMessage.warning('请选择生产端')
...@@ -3713,8 +3804,8 @@ const downloadTif = async (type: string, templateWidth: number) => { ...@@ -3713,8 +3804,8 @@ const downloadTif = async (type: string, templateWidth: number) => {
a.href = window.URL.createObjectURL(blob) a.href = window.URL.createObjectURL(blob)
a.target = '_blank' a.target = '_blank'
a.download = (res.message as string).split('/')[ a.download = (res.message as string).split('/')[
(res.message as string).split('/').length - 1 (res.message as string).split('/').length - 1
] ]
a.click() a.click()
pngDownloadLoading.value = false pngDownloadLoading.value = false
}) })
...@@ -3796,7 +3887,7 @@ const downloadSingleType = async ( ...@@ -3796,7 +3887,7 @@ const downloadSingleType = async (
const handleRadioGroupClick = (event: Event) => { const handleRadioGroupClick = (event: Event) => {
const target = event.target as HTMLElement const target = event.target as HTMLElement
const radioButton = target.closest('.el-radio-button') const radioButton = target.closest('.el-radio-button')
if (radioButton) { if (radioButton) {
const input = radioButton.querySelector('input[type="radio"]') as HTMLInputElement const input = radioButton.querySelector('input[type="radio"]') as HTMLInputElement
if (input) { if (input) {
...@@ -3813,7 +3904,7 @@ const handleRadioGroupClick = (event: Event) => { ...@@ -3813,7 +3904,7 @@ const handleRadioGroupClick = (event: Event) => {
const handleMultiRadioGroupClick = (event: Event) => { const handleMultiRadioGroupClick = (event: Event) => {
const target = event.target as HTMLElement const target = event.target as HTMLElement
const radioButton = target.closest('.el-radio-button') const radioButton = target.closest('.el-radio-button')
if (radioButton) { if (radioButton) {
const input = radioButton.querySelector('input[type="radio"]') as HTMLInputElement const input = radioButton.querySelector('input[type="radio"]') as HTMLInputElement
if (input) { if (input) {
...@@ -4837,6 +4928,7 @@ const getCustomTagList = async () => { ...@@ -4837,6 +4928,7 @@ const getCustomTagList = async () => {
function tooltipContent(arr: { name: string }[]) { function tooltipContent(arr: { name: string }[]) {
return arr.map((tag) => tag.name).join('、') return arr.map((tag) => tag.name).join('、')
} }
const expressSheetUpload = async (file: File) => { const expressSheetUpload = async (file: File) => {
const fm = new FormData() const fm = new FormData()
fm.append('file', file) fm.append('file', file)
...@@ -5154,6 +5246,7 @@ useRouter().beforeEach((to, from, next) => { ...@@ -5154,6 +5246,7 @@ useRouter().beforeEach((to, from, next) => {
// width: 100px; // width: 100px;
// height: 100px; // height: 100px;
position: relative; position: relative;
img { img {
width: 65%; width: 65%;
} }
...@@ -5200,6 +5293,7 @@ useRouter().beforeEach((to, from, next) => { ...@@ -5200,6 +5293,7 @@ useRouter().beforeEach((to, from, next) => {
height: 100%; height: 100%;
overflow-y: auto; overflow-y: auto;
} }
.tabs-node_count { .tabs-node_count {
display: inline-block; display: inline-block;
min-width: 20px; min-width: 20px;
...@@ -5234,19 +5328,23 @@ useRouter().beforeEach((to, from, next) => { ...@@ -5234,19 +5328,23 @@ useRouter().beforeEach((to, from, next) => {
.card-list-item { .card-list-item {
cursor: pointer; cursor: pointer;
.flex-between { .flex-between {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
.images-position { .images-position {
display: flex; display: flex;
height: 30px; height: 30px;
gap: 10px; gap: 10px;
.item-image { .item-image {
width: 30px; width: 30px;
height: 30px; height: 30px;
border: 1px solid #909399; border: 1px solid #909399;
cursor: pointer; cursor: pointer;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -5254,11 +5352,13 @@ useRouter().beforeEach((to, from, next) => { ...@@ -5254,11 +5352,13 @@ useRouter().beforeEach((to, from, next) => {
} }
} }
} }
b { b {
margin-right: 5px; margin-right: 5px;
font-size: 15px; font-size: 15px;
} }
} }
.flex-row { .flex-row {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
...@@ -5415,11 +5515,13 @@ useRouter().beforeEach((to, from, next) => { ...@@ -5415,11 +5515,13 @@ useRouter().beforeEach((to, from, next) => {
font-size: 15px; font-size: 15px;
} }
} }
.orderNumber { .orderNumber {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: flex-start; justify-content: flex-start;
} }
.customizedQuantity { .customizedQuantity {
height: 28px; height: 28px;
width: 28px; width: 28px;
...@@ -5433,6 +5535,7 @@ useRouter().beforeEach((to, from, next) => { ...@@ -5433,6 +5535,7 @@ useRouter().beforeEach((to, from, next) => {
font-weight: 700; font-weight: 700;
box-sizing: border-box; box-sizing: border-box;
} }
.triangle-box { .triangle-box {
position: absolute; position: absolute;
top: 0; top: 0;
......
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