Commit 9deae37e by zhuzhequan

feat:pod订单(us) 添加prn文件上传下载

parent 8f57c541
......@@ -85,6 +85,23 @@ export function getCardOrderList(
},
)
}
export function uploadPRNFile(
id: number,
data: FormData,
) {
return axios.post<never, BaseRespData<string>>(
`/factory/podBatchDownload/uploadPRNFile?id=${id}`,
data
)
}
export function updatePRNDownloadStatus(
id: number
) {
return axios.get<never, BaseRespData<string>>(
`/factory/podBatchDownload/updatePRNDownloadStatus?id=${id}`
)
}
export function confirmOrderApi(
data: number[],
productionClient: string,
......
......@@ -48,8 +48,11 @@ export interface SearchForm {
export interface PodUsOrderListData {
id: number
thirdOrderNumber?: string
prnUrl?: string
factoryOrderNumber?: string
prnDownloadStatus?: boolean
shopNumber?: string
isUpload?: boolean
factoryOnlineId?: number | null
factoryNo?: number | null
factoryCode?: string | null
......
......@@ -399,33 +399,43 @@
>
<ElDropdown>
<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>
<template #dropdown>
<ElDropdownMenu>
<ElDropdownItem
:loading="tifDownloadLoading"
@click="downloadTif('tiff', 42)"
>TIF(40+2cm)</ElDropdownItem
>TIF(40+2cm)
</ElDropdownItem
>
<ElDropdownItem
:loading="tifDownloadLoading"
@click="downloadTif('tiff', 60)"
>TIF(60cm)</ElDropdownItem
>TIF(60cm)
</ElDropdownItem
>
<ElDropdownItem
:loading="pngDownloadLoading"
@click="downloadTif('png', 42)"
>PNG(40+2cm)</ElDropdownItem
>PNG(40+2cm)
</ElDropdownItem
>
<ElDropdownItem
:loading="pngDownloadLoading"
@click="downloadTif('png', 60)"
>PNG(60cm)</ElDropdownItem
>PNG(60cm)
</ElDropdownItem
>
</ElDropdownMenu>
</template
>
</ElDropdown
>
</ElDropdownMenu></template
></ElDropdown
></ElFormItem
</ElFormItem
>
<!-- <ElFormItem
v-if="
......@@ -1781,6 +1791,26 @@
{{ row.automaticComposing ? '是' : '否' }}
</div>
</template>
<template #prn="{ row }">
<div style="display: flex">
<span :title="fileName(row)" class="flex-1">{{ fileName(row) }}</span>
<el-link :disabled="row.isUpload" underline="never" type="success" @click="uploadFile(row)">上传</el-link>
<el-icon v-if="row.isUpload" style="right: 0;top:5px;" class="is-loading"
>
<Loading
/>
</el-icon>
<el-link
:disabled="!row.prnUrl" style="margin-left: 8px" underline="never" type="primary"
@click="downloadRowProFile(row)">下载
</el-link>
<el-icon v-if="row.prnDownloadStatus" style="right: -2px" class="check-icon"
>
<CircleCheckFilled
/>
</el-icon>
</div>
</template>
<template #composingParam="{ row }">
<div style="white-space: pre-line">
{{ row.composingParam?.split(';').join('\n') }}
......@@ -1825,10 +1855,11 @@
<span class="operate-item">
<ElButton
link
title="打印拣货单"
type="primary"
@click="printPickingOrderItem(row, 1)"
>
打印拣货单
拣货单
</ElButton>
<el-icon v-if="row.printPickOrder" class="check-icon"
><CircleCheckFilled
......@@ -1837,10 +1868,11 @@
<span class="operate-item">
<ElButton
link
title="打印生产单"
type="primary"
@click="printPickingOrderItem(row, 2)"
>
打印生产单
生产单
</ElButton>
<el-icon v-if="row.printProductOrder" class="check-icon"
><CircleCheckFilled
......@@ -1850,11 +1882,12 @@
<ElButton
:disabled="row.productNum > 50"
link
title="重新排版"
type="warning"
:loading="reComposingLoadingMap[row.id]"
@click="showArrange(1, row)"
>
新排版
</ElButton>
</span>
<span class="operate-item">
......@@ -1994,8 +2027,8 @@
<div
v-for="(cardItem) in tableData as ProductList[]"
:key="cardItem.id"
class="card-list-item"
ref="cardRefs"
class="card-list-item"
@click="cardClick(cardItem)"
@mouseleave="handleChangeImages(null, cardItem)"
>
......@@ -2043,24 +2076,25 @@
type="primary"
:title="item.name || ''"
style="margin-bottom: 2px"
>{{ item.name || '' }}</el-tag
>{{ item.name || '' }}
</el-tag
>
</div>
</template>
<div
class="flex"
v-if="cardItem.customTagList?.length"
ref="tagRefs"
class="flex"
style="gap: 5px; overflow: hidden"
v-if="cardItem.customTagList?.length"
>
<el-tag
size="small"
type="primary"
v-for="(item, index) in cardItem.customTagList.slice(
0,
3,
)"
:key="index"
size="small"
type="primary"
><span
style="
width: 50px;
......@@ -2075,10 +2109,11 @@
></el-tag
>
<el-tag
v-if="cardItem.customTagList?.slice(3)?.length"
size="small"
type="primary"
v-if="cardItem.customTagList?.slice(3)?.length"
>+{{ cardItem.customTagList.slice(3).length }}</el-tag
>+{{ cardItem.customTagList.slice(3).length }}
</el-tag
>
</div>
</el-tooltip>
......@@ -2639,8 +2674,8 @@
v-model:form="currentRow"
v-model:visible="updateAddVisible"
:country-list="countryList"
@success="search"
:type="updateAddressType"
@success="search"
></UpdateAddress>
<ElDialog
v-model="exceptionDialogVisible"
......@@ -2842,7 +2877,8 @@
typesettingVisible = false
}
"
>取消</el-button
>取消
</el-button
>
<el-button type="primary" @click="submitTypesetting">确认</el-button>
</template>
......@@ -2903,6 +2939,7 @@ import {
} from '@element-plus/icons-vue'
import {
getCardOrderList,
uploadPRNFile,
getOrderList,
getOrderTabData,
confirmOrderApi,
......@@ -2964,7 +3001,7 @@ import {
getCustomTagListApi,
getLogisticsWayApi,
printNormalPickPdfApi,
reissueOrderApi
reissueOrderApi, updatePRNDownloadStatus,
} from '@/api/podUsOrder'
import { BaseRespData } from '@/types/api'
......@@ -2997,6 +3034,7 @@ import { showConfirm } from '@/utils/ui'
import {
DocumentCopy,
EditPen,
Loading,
CircleCheckFilled,
} from '@element-plus/icons-vue'
import { Column, ElFormItem } from 'element-plus'
......@@ -3025,7 +3063,7 @@ import {
declare global {
interface Window {
ActiveXObject: {
new (type: string): XMLHttpRequest
new(type: string): XMLHttpRequest
}
VBS_BinaryToArray: {
(data: unknown): { toArray(): number[] }
......@@ -3552,6 +3590,12 @@ const tableColumns = computed(() => {
prop: 'automaticComposing',
slot: 'automaticComposing',
align: 'center',
}, {
label: 'PRN文件',
width: 300,
prop: 'automaticComposing',
slot: 'prn',
align: 'right',
},
{
label: '排版参数',
......@@ -3563,7 +3607,7 @@ const tableColumns = computed(() => {
{
label: '操作',
slot: 'operate',
width: 350,
width: 300,
align: 'center',
fixed: 'right',
prop: 'operate',
......@@ -3967,7 +4011,10 @@ watch(
},
{ deep: true, immediate: true }, // 添加immediate确保初始化时执行
)
const fileName = (row: PodUsOrderListData) => {
if (!row.prnUrl) return ''
return row.prnUrl.split('/')[row.prnUrl.split('/').length - 1]
}
const search = () => {
selection.value = []
cardSelection.value = []
......@@ -4145,6 +4192,37 @@ const productionClientVisible = ref(false)
// productionClientVisible.value = true
// }
const downloadRowProFile = async (row: PodUsOrderListData) => {
const url =
`https://factory.jomalls.com/upload/factory` + row.prnUrl
window.open(url, '_blank')
await updatePRNDownloadStatus(
row.id,
)
search()
}
const uploadFile = (row: PodUsOrderListData) => {
const input = document.createElement('input')
input.style.display = 'none'
input.type = 'file'
input.multiple = false
input?.click()
row.isUpload = true
input.onchange = async function() {
try {
if (input.files && input.files.length) {
const fm = new FormData()
fm.append('file', input.files?.[0])
const res = await uploadPRNFile(row.id, fm)
row.prnUrl = res.message
}
} finally {
row.isUpload = false
}
}
}
const downloadTif = async (type: string, templateWidth: number) => {
if (!cardSelection.value.length) {
return ElMessage.warning('请选择数据')
......@@ -6562,6 +6640,7 @@ const printNormal = async () => {
background: rgb(255 243 205);
color: rgb(91, 99, 18);
}
.empty {
height: 100%;
display: flex;
......@@ -6765,13 +6844,16 @@ const printNormal = async () => {
color: white;
font-weight: bold;
}
.triangle-container-wrap {
position: absolute;
top: 0;
right: 0;
}
.triangle-container {
position: relative;
.triangle-marker {
width: 0;
height: 0;
......@@ -6779,6 +6861,7 @@ const printNormal = async () => {
border-right: 18px solid #e74c3c;
border-top: 18px solid #e74c3c;
}
.content {
position: absolute;
top: 0;
......@@ -6790,13 +6873,16 @@ const printNormal = async () => {
font-size: 12px;
}
}
.triangle-container-wrap {
position: absolute;
top: 0;
right: 0;
}
.triangle-container {
position: relative;
.triangle-marker {
width: 0;
height: 0;
......@@ -6804,6 +6890,7 @@ const printNormal = async () => {
border-right: 18px solid #e74c3c;
border-top: 18px solid #e74c3c;
}
.content {
position: absolute;
top: 0;
......@@ -6839,8 +6926,8 @@ const printNormal = async () => {
}
.el-timeline
> .el-timeline-item:first-child
.el-timeline-item__timestamp.is-top {
> .el-timeline-item:first-child
.el-timeline-item__timestamp.is-top {
color: #409eff;
}
......@@ -6849,6 +6936,7 @@ const printNormal = async () => {
justify-content: space-between;
align-items: center;
}
.tabs-node-quantity {
position: relative;
color: red;
......@@ -6856,6 +6944,7 @@ const printNormal = async () => {
top: -10px;
right: 0px;
}
.operate-item {
position: relative;
}
......@@ -6867,4 +6956,12 @@ const printNormal = async () => {
top: 30%;
transform: translateY(-50%);
}
.flex-1 {
flex: 1;
flex-shrink: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
</style>
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