Commit 51723d81 by wusiyi

feat: 待跟踪页面添加tab页

parent 4a7ddea5
......@@ -548,20 +548,21 @@ export function statusPushApi(params: (string | number)[]) {
export function changeToFinished(ids: string) {
return axios.get<never, BaseRespData<never>>(
`factory/podJomallOrderUs/updateToComplete`,
{ params:{ids} },
{ params: { ids } },
)
}
// 转至已完成
export function updateTrackingNumberAndRegister(id: number,trackingNumber:string) {
export function updateTrackingNumberAndRegister(
id: number,
trackingNumber: string,
) {
return axios.post<never, BaseRespData<never>>(
`factory/podJomallOrderUs/updateTrackingNumberAndRegister`,
{id,trackingNumber },
{ id, trackingNumber },
)
}
// 完成发货
export function completeDeliveryApi(params: {
orderIdList: (string | number)[]
......@@ -603,3 +604,10 @@ export function printProductionPdfByBatchNumberApi(params: {
},
)
}
// 待跟踪 注册列表统计接口
export function countTrackRegisterApi() {
return axios.get<never, BaseRespData<never>>(
`factory/podJomallOrderUs/countTrackRegister`,
)
}
......@@ -35,6 +35,7 @@ export interface SearchForm {
craftCode?: string
thirdStockSku?: string
interceptStatus?: number | string
trackRegisterSelect?: string | number
}
export interface PodUsOrderListData {
id: number
......
......@@ -253,7 +253,7 @@
<ElFormItem>
<span>
<ElButton link style="font-size: 12px" @click="resetSearchForm"
><span title="重置查询条件">重置</span></ElButton
><span title="重置查询条件">重置</span></ElButton
>
</span>
</ElFormItem>
......@@ -471,7 +471,7 @@
<ElFormItem v-if="status === 'WAIT_SHIPMENT'">
<span class="item">
<ElButton type="primary" @click="completeDelivery()"
>完成发货</ElButton
>完成发货</ElButton
>
</span>
</ElFormItem>
......@@ -491,7 +491,7 @@
selection.some((item) => item.shipmentType !== 1)
"
@click="getOrderByIdApi('createLogisticsOrder')"
>创建物流订单</ElDropdownItem
>创建物流订单</ElDropdownItem
>
<ElDropdownItem
:disabled="
......@@ -499,7 +499,7 @@
selection.some((item) => item.shipmentType !== 1)
"
@click="getOrderByIdApi('getTrackingNumber')"
>获取跟踪号</ElDropdownItem
>获取跟踪号</ElDropdownItem
>
<ElDropdownItem
:disabled="
......@@ -507,7 +507,7 @@
selection.some((item) => item.shipmentType !== 1)
"
@click="getOrderByIdApi('getPrintOrder')"
>获取打印面单</ElDropdownItem
>获取打印面单</ElDropdownItem
>
<ElDropdownItem
:disabled="
......@@ -515,7 +515,7 @@
selection.some((item) => item.shipmentType !== 1)
"
@click="getOrderByIdApi('cancelLogisticsOrder')"
>取消物流订单</ElDropdownItem
>取消物流订单</ElDropdownItem
>
<!-- <ElDropdownItem
:disabled="
......@@ -553,7 +553,7 @@
>
<span class="item">
<ElButton type="primary" @click="downloadMaterial"
>下载素材</ElButton
>下载素材</ElButton
>
</span>
</ElFormItem>
......@@ -624,7 +624,7 @@
selection.length === 0 && cardSelection.length === 0
"
@click="rejectOrder('TO_BE_CONFIRMED')"
>待确认</ElDropdownItem
>待确认</ElDropdownItem
>
<ElDropdownItem
v-if="
......@@ -636,7 +636,7 @@
selection.length === 0 && cardSelection.length === 0
"
@click="rejectOrder('CREATE_LOGISTICS')"
>待创建物流</ElDropdownItem
>待创建物流</ElDropdownItem
>
<ElDropdownItem
v-if="status === 'PICKING' || status === 'IN_PRODUCTION'"
......@@ -644,7 +644,7 @@
selection.length === 0 && cardSelection.length === 0
"
@click="rejectOrder('TO_BE_ARRANGE')"
>待排单</ElDropdownItem
>待排单</ElDropdownItem
>
<ElDropdownItem
v-if="status === 'IN_PRODUCTION'"
......@@ -652,7 +652,7 @@
selection.length === 0 && cardSelection.length === 0
"
@click="rejectOrder('PICKING')"
>待拣胚</ElDropdownItem
>待拣胚</ElDropdownItem
>
</ElDropdownMenu>
</template>
......@@ -666,9 +666,7 @@
<ElButton type="warning" @click="statusPush">状态推送</ElButton>
</span>
</ElFormItem>
<ElFormItem
v-if="['WAIT_TRACK'].includes(status)"
>
<ElFormItem v-if="['WAIT_TRACK'].includes(status)">
<span class="item">
<ElButton type="success" @click="setFinish">转至已完成</ElButton>
</span>
......@@ -682,7 +680,7 @@
<ElFormItem v-if="status === 'BATCH_DOWNLOAD'">
<span class="item">
<ElButton type="danger" @click="handleBatchDelete('batch')"
>批量删除</ElButton
>批量删除</ElButton
>
</span>
</ElFormItem>
......@@ -705,7 +703,7 @@
blue: item.quantity && item.quantity > 0,
red: item.status === 'EXCEPTION_ORDER',
}"
>{{ item.quantity }}</span
>{{ item.quantity }}</span
>
</div>
<!-- <div
......@@ -767,6 +765,58 @@
<span class="sub-status-item-label">待同步</span>
</div>
</div>
<div v-if="status === 'WAIT_TRACK'" class="sub-status mb-10">
<div
class="sub-status-item"
:class="waitTrackStatus === 1 ? 'sub-active' : ''"
@click="handleWaitTrackCommand(1)"
>
<span class="sub-status-item-label">注册失败</span>
<span class="tabs-node_count">{{
trackRegisterCount[0]?.count || 0
}}</span>
</div>
<div
class="sub-status-item"
:class="waitTrackStatus === 2 ? 'sub-active' : ''"
@click="handleWaitTrackCommand(2)"
>
<span class="sub-status-item-label">未注册</span>
<span class="tabs-node_count blue">{{
trackRegisterCount[1]?.count || 0
}}</span>
</div>
<div
class="sub-status-item"
:class="waitTrackStatus === 3 ? 'sub-active' : ''"
@click="handleWaitTrackCommand(3)"
>
<span class="sub-status-item-label">常规(&lt;3天)</span>
<span class="tabs-node_count green">{{
trackRegisterCount[2]?.count || 0
}}</span>
</div>
<div
class="sub-status-item"
:class="waitTrackStatus === 4 ? 'sub-active' : ''"
@click="handleWaitTrackCommand(4)"
>
<span class="sub-status-item-label">观察(2~3天)</span>
<span class="tabs-node_count yellow">{{
trackRegisterCount[3]?.count || 0
}}</span>
</div>
<div
class="sub-status-item"
:class="waitTrackStatus === 5 ? 'sub-active' : ''"
@click="handleWaitTrackCommand(5)"
>
<span class="sub-status-item-label">重扫&补发(>3天)</span>
<span class="tabs-node_count red">{{
trackRegisterCount[4]?.count || 0
}}</span>
</div>
</div>
<div v-if="status === 'INTERCEPTED'" class="sub-status mb-10">
<div
class="sub-status-item"
......@@ -777,7 +827,7 @@
<span
v-if="interceptionStatus.production['0']"
class="tabs-node_count blue"
>{{ interceptionStatus.production['0'] }}</span
>{{ interceptionStatus.production['0'] }}</span
>
</div>
<div
......@@ -789,7 +839,7 @@
<span
v-if="interceptionStatus.production['1']"
class="tabs-node_count blue"
>{{ interceptionStatus.production['1'] }}</span
>{{ interceptionStatus.production['1'] }}</span
>
</div>
<div
......@@ -801,7 +851,7 @@
<span
v-if="interceptionStatus.production['2']"
class="tabs-node_count red"
>{{ interceptionStatus.production['2'] }}</span
>{{ interceptionStatus.production['2'] }}</span
>
</div>
<div
......@@ -813,7 +863,7 @@
<span
v-if="interceptionStatus.shipment['0']"
class="tabs-node_count blue"
>{{ interceptionStatus.shipment['0'] }}</span
>{{ interceptionStatus.shipment['0'] }}</span
>
</div>
<div
......@@ -825,7 +875,7 @@
<span
v-if="interceptionStatus.shipment['1']"
class="tabs-node_count blue"
>{{ interceptionStatus.shipment['1'] }}</span
>{{ interceptionStatus.shipment['1'] }}</span
>
</div>
<div
......@@ -837,7 +887,7 @@
<span
v-if="interceptionStatus.shipment['2']"
class="tabs-node_count red"
>{{ interceptionStatus.shipment['2'] }}</span
>{{ interceptionStatus.shipment['2'] }}</span
>
</div>
</div>
......@@ -1015,7 +1065,7 @@
</div>
<div class="goods-item-info-item">
<span class="goods-item-info-item-label"
>第三方生产单号:</span
>第三方生产单号:</span
>
<span
class="goods-item-info-item-value"
......@@ -1057,14 +1107,14 @@
>
<!-- <span class="goods-item-info-item-label">补胚状态:</span> -->
<el-tag size="small" effect="dark" type="danger"
>补胚中
>补胚中
</el-tag>
</div>
</div>
<div class="goods-item-info">
<div class="goods-item-info-item">
<span class="goods-item-info-item-label"
>商品单价($):</span
>商品单价($):</span
>
<span class="goods-item-info-item-value">
{{ item.productPrice }}
......@@ -1091,14 +1141,14 @@
<div class="goods-item-info-item">
<span class="goods-item-info-item-label">{{
status === 'EXCEPTION_ORDER' ||
status === 'PICKING' ||
status === 'TO_BE_CONFIRMED' ||
status === 'STOCK_OUT' ||
status === 'CREATE_LOGISTICS'
? '数量:'
: '已生产数量:'
}}</span>
status === 'EXCEPTION_ORDER' ||
status === 'PICKING' ||
status === 'TO_BE_CONFIRMED' ||
status === 'STOCK_OUT' ||
status === 'CREATE_LOGISTICS'
? '数量:'
: '已生产数量:'
}}</span>
<span class="goods-item-info-item-value">
{{
status === 'EXCEPTION_ORDER' ||
......@@ -1166,7 +1216,7 @@
type="success"
style="height: 23px"
@click="applyForReplenishment(item)"
>申请补胚
>申请补胚
</el-button>
</div>
......@@ -1182,7 +1232,7 @@
type="primary"
style="height: 23px; padding: 0"
@click="downloadMaterialItem(item)"
>下载素材
>下载素材
</el-button>
<el-button
link
......@@ -1190,7 +1240,7 @@
type="warning"
style="height: 23px; margin: 0"
@click="downloadTifItem('tiff', item.id)"
>TIF排版
>TIF排版
</el-button>
<el-button
link
......@@ -1198,7 +1248,7 @@
type="warning"
style="height: 23px; margin: 0"
@click="downloadTifItem('png', item.id)"
>PNG排版
>PNG排版
</el-button>
</div>
</div>
......@@ -1381,17 +1431,17 @@
<el-timeline-item
:color="row.createTime ? '#409EFF' : ''"
:timestamp="row.createTime"
>创建时间
>创建时间
</el-timeline-item>
<el-timeline-item
:color="row.startStockingTime ? '#E6A23C' : ''"
:timestamp="row.startStockingTime"
>确认时间
>确认时间
</el-timeline-item>
<el-timeline-item
:color="row.finishTime ? '#67C23A' : ''"
:timestamp="row.finishTime"
>完成时间
>完成时间
</el-timeline-item>
</el-timeline>
<!-- <div class="order-time-box">
......@@ -1458,7 +1508,7 @@
<template #failReason="{ row }">
<span style="white-space: pre-line" v-html="row.failReason"></span>
</template>
<template #operate="{ row }">
<template #operate="{ row }">
<div
v-if="status === 'BATCH_DOWNLOAD'"
class="operate-box-vertical"
......@@ -1532,9 +1582,11 @@
</ElButton>
</span>
<span v-if="['WAIT_TRACK'].includes(status)" class="operate-item">
<ElButton link type="warning" @click="updateTrackingNumber">修改跟踪号</ElButton>
</span>
<span v-if="['WAIT_TRACK'].includes(status)" class="operate-item">
<ElButton link type="warning" @click="updateTrackingNumber(row)"
>修改跟踪号</ElButton
>
</span>
<!-- <span
v-if="!row.expressSheet && row.status === 'TO_BE_CONFIRMED'"
class="operate-item"
......@@ -1600,11 +1652,16 @@
class="operate-item"
>
<ElButton link type="primary" @click="logTrajectory(row)"
>物流轨迹</ElButton
>物流轨迹</ElButton
>
</span>
</div>
</template>
<template #trackRegisterFailContent="{ row }">
<div style="white-space: pre-line">
{{ JSON.parse(row.trackRegisterFailContent)?.error || '' }}
</div>
</template>
</TableView>
</div>
<div
......@@ -1728,7 +1785,7 @@
:title="`商品名称:${cardItem?.productName || ''}`"
>
<span class="grid-item-value"
>{{ cardItem?.productName }}
>{{ cardItem?.productName }}
</span>
</div>
<div
......@@ -1855,7 +1912,7 @@
</div>
<div v-if="cardItem.isReplenishment" class="grid-item">
<el-tag size="small" type="danger" effect="dark"
>补胚中
>补胚中
</el-tag>
</div>
</div>
......@@ -1868,10 +1925,10 @@
<div class="pagination">
<div class="total">
<span
>已选择
>已选择
<span style="color: red">{{
selection.length || cardSelection.length
}}</span>
selection.length || cardSelection.length
}}</span>
条数据</span
>
</div>
......@@ -1888,15 +1945,15 @@
></ElPagination>
<div class="pageSize">
<span
>自定义条数
>自定义条数
<span
><el-input
v-model="pageSize"
type="number"
style="width: 100px"
clearable
@blur="inputBlur"
></el-input
><el-input
v-model="pageSize"
type="number"
style="width: 100px"
clearable
@blur="inputBlur"
></el-input
></span>
/</span
>
......@@ -2008,27 +2065,24 @@
link
style="margin-left: 10px"
@click="changeChinaTime('Asia/Shanghai')"
>北京时间
</el-button
>
>北京时间
</el-button>
<el-button
:type="timeType === 'America/New_York' ? 'primary' : ''"
size="small"
link
style="margin-left: 10px"
@click="changeChinaTime('America/New_York')"
>新泽西时间
</el-button
>
>新泽西时间
</el-button>
<el-button
:type="timeType === 'America/Los_Angeles' ? 'primary' : ''"
size="small"
link
style="margin-left: 10px"
@click="changeChinaTime('America/Los_Angeles')"
>洛杉矶时间
</el-button
>
>洛杉矶时间
</el-button>
</div>
</div>
</template>
......@@ -2304,7 +2358,7 @@
:loading="exportLoading"
type="primary"
@click="submitExportForm"
>确认</el-button
>确认</el-button
>
</span>
</template>
......@@ -2397,7 +2451,10 @@ import {
get17TrackInfoApi,
getAccountCodeByFactoryIdApi,
printPickPdfByBatchNumberApi,
printProductionPdfByBatchNumberApi, changeToFinished, updateTrackingNumberAndRegister,
printProductionPdfByBatchNumberApi,
changeToFinished,
updateTrackingNumberAndRegister,
countTrackRegisterApi,
} from '@/api/podUsOrder'
import { BaseRespData } from '@/types/api'
......@@ -2452,7 +2509,7 @@ import {
declare global {
interface Window {
ActiveXObject: {
new(type: string): XMLHttpRequest
new (type: string): XMLHttpRequest
}
VBS_BinaryToArray: {
(data: unknown): { toArray(): number[] }
......@@ -2483,18 +2540,15 @@ const exportForm = ref({
resource: '',
})
//updateTrackingNumber
const updateTrackingNumber = async () => {
if (selection.value.length !== 1) {
return ElMessage.warning('请选择一条数据')
}
// 修改物流跟踪号
const updateTrackingNumber = async (row: PodUsOrderListData) => {
const { value } = await ElMessageBox.prompt('请输入物流跟踪号', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
inputPattern: /.+/,
inputErrorMessage: '请输入物流跟踪号',
inputPlaceholder: '物流跟踪号',
inputValue: row.trackingNumber,
})
const loading = ElLoading.service({
fullscreen: true,
......@@ -2502,7 +2556,7 @@ const updateTrackingNumber = async () => {
background: 'rgba(0, 0, 0, 0.3)',
})
try {
const res = await updateTrackingNumberAndRegister(selection.value[0].id, value)
const res = await updateTrackingNumberAndRegister(row.id, value)
if (res.code !== 200) return
ElMessage.success('操作成功')
search()
......@@ -2617,6 +2671,14 @@ const [searchForm, resetSearchForm] = useValue<SearchForm>({
const exceptionStatus = ref(1)
const interceptCurrent = ref(1)
const interceptStatus = ref(0)
const waitTrackStatus = ref(1)
const trackRegisterCount = ref<
{
count: number
trackRegisterSelect: number
name: string
}[]
>([])
const userMarkList = ref<string[]>([])
const selection = ref<PodUsOrderListData[]>([])
const currentItem = ref<PodUsOrderListData | null>(null)
......@@ -2970,10 +3032,18 @@ const tableColumns = computed(() => {
prop: 'exceptionReason',
slot: 'exceptionReason',
align: 'left',
},{
},
{
label: '物流跟踪状态',
width: 220,
prop: 'track17_Status',
prop: 'track17Status',
align: 'left',
},
{
label: '注册失败信息',
width: 220,
prop: 'trackRegisterFailContent',
slot: 'trackRegisterFailContent',
align: 'left',
},
{
......@@ -2985,13 +3055,37 @@ const tableColumns = computed(() => {
prop: 'operate',
},
]
if(!['WAIT_TRACK','IN_TRANSIT'].includes(status.value)){
const index = arr.findIndex(item => item.prop === 'track17_Status')
if(index>=0){
arr.splice(index,1)
// 根据状态动态调整列显示
if (!['WAIT_TRACK'].includes(status.value)) {
const trackRegisterIndex = arr.findIndex(
(item) => item.prop === 'trackRegisterFailContent',
)
if (trackRegisterIndex >= 0) {
arr.splice(trackRegisterIndex, 1)
}
const track17Index = arr.findIndex((item) => item.prop === 'track17Status')
if (track17Index >= 0) {
arr.splice(track17Index, 1)
}
} else {
if (waitTrackStatus.value !== 1) {
const trackRegisterIndex = arr.findIndex(
(item) => item.prop === 'trackRegisterFailContent',
)
if (trackRegisterIndex >= 0) {
arr.splice(trackRegisterIndex, 1)
}
}
}
return arr
if (!['WAIT_TRACK', 'IN_TRANSIT'].includes(status.value)) {
const index = arr.findIndex((item) => item.prop === 'track17Status')
if (index >= 0) {
arr.splice(index, 1)
}
}
return arr
})
const rightMenuRef = ref()
const rightClick = (e: MouseEvent) => {
......@@ -3083,6 +3177,10 @@ const loadTabData = async () => {
try {
const res = await getOrderTabData()
tabsNav.value = res.data
if (status.value === 'WAIT_TRACK') {
const res = await countTrackRegisterApi()
trackRegisterCount.value = res.data
}
// 获取拦截数量
const statusRes = await getgetInterceptStateGroupList()
......@@ -3100,16 +3198,16 @@ const loadTabData = async () => {
// 发货拦截数量
const shipmentCount = (statusRes.data as InterceptStateGroupData)?.shipment
? Object.values(
(statusRes.data as InterceptStateGroupData).shipment,
).reduce((sum: number, value: unknown) => sum + (Number(value) || 0), 0)
(statusRes.data as InterceptStateGroupData).shipment,
).reduce((sum: number, value: unknown) => sum + (Number(value) || 0), 0)
: 0
// 生产拦截数量
const productionCount = (statusRes.data as InterceptStateGroupData)
?.production
? Object.values(
(statusRes.data as InterceptStateGroupData).production,
).reduce((sum: number, value: unknown) => sum + (Number(value) || 0), 0)
(statusRes.data as InterceptStateGroupData).production,
).reduce((sum: number, value: unknown) => sum + (Number(value) || 0), 0)
: 0
tabsNav.value.splice(completeIndex + 1, 0, {
......@@ -3171,6 +3269,8 @@ const {
: undefined,
interceptStatus:
status.value === 'INTERCEPTED' ? interceptStatus.value : '',
trackRegisterSelect:
status.value === 'WAIT_TRACK' ? waitTrackStatus.value : '',
},
page,
pageSize,
......@@ -3435,8 +3535,8 @@ const downloadTif = async (type: string) => {
a.href = window.URL.createObjectURL(blob)
a.target = '_blank'
a.download = (res.message as string).split('/')[
(res.message as string).split('/').length - 1
]
(res.message as string).split('/').length - 1
]
a.click()
pngDownloadLoading.value = false
})
......@@ -3483,8 +3583,8 @@ const downloadTifItem = async (type: string, id: number) => {
a.href = window.URL.createObjectURL(blob)
a.target = '_blank'
a.download = (res.message as string).split('/')[
(res.message as string).split('/').length - 1
]
(res.message as string).split('/').length - 1
]
a.click()
pngDownloadLoading.value = false
})
......@@ -4154,8 +4254,8 @@ const rejectOrder = async (type: string) => {
orderStatus: type,
productList: selection.value.length
? selection.value.flatMap(
(item: PodUsOrderListData) => item.productList || [],
)
(item: PodUsOrderListData) => item.productList || [],
)
: cardSelection.value,
reasonStr: value,
})
......@@ -4790,6 +4890,7 @@ const logisticsSubmit = () => {
})
}
// 异常单分页
const handleExceptionCommand = (command: number) => {
exceptionStatus.value = command
search()
......@@ -4802,6 +4903,13 @@ const handleInterceptionCommand = (current: number, command: number) => {
loadTabData()
}
// 待跟踪分页
const handleWaitTrackCommand = (command: number) => {
waitTrackStatus.value = command
search()
loadTabData()
}
const applyForReplenishment = async (row: ProductList | undefined) => {
if (!row) {
if (cardSelection.value.length === 0) {
......@@ -5013,8 +5121,8 @@ const interceptChange = async (status: boolean) => {
? 1
: 3
: interceptCurrent.value === 1
? 2
: 4
? 2
: 4
try {
const res = await interceptUpdateApi({
orderIds: selection.value.map((item) => item.id),
......@@ -5081,7 +5189,9 @@ const setFinish = async () => {
background: 'rgba(0, 0, 0, 0.3)',
})
try {
const res = await changeToFinished(selection.value.map((item) => item.id).join(','))
const res = await changeToFinished(
selection.value.map((item) => item.id).join(','),
)
if (res.code !== 200) return
ElMessage.success('操作成功')
search()
......@@ -5304,6 +5414,15 @@ useRouter().beforeEach((to, from, next) => {
color: rgb(153 27 27);
}
.tabs-node_count.green {
background: rgb(223 240 216);
color: rgb(39 174 96);
}
.tabs-node_count.yellow {
background: rgb(255 243 205);
color: rgb(91, 99, 18);
}
.empty {
height: 100%;
display: flex;
......@@ -5531,8 +5650,8 @@ useRouter().beforeEach((to, from, next) => {
}
.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;
}
......
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