Commit c9d64291 by qinjianhui

fix: 工厂端修改

parent 4765943b
......@@ -26,12 +26,12 @@ export function getOrderDetail(id: number) {
},
)
}
export function getSubOrderBySubOrderNumber(factorySubOrderNumber: string) {
export function getSubOrderBySubOrderNumber(thirdSubOrderNumber: string) {
return axios.get<never, BaseRespData<PodProductList>>(
'factory/podJomallOrderProduct/getSubOrderBySubOrderNumber',
'factory/podJomallOrderProduct/getSubOrderByThirdSubOrderNumber',
{
params: {
factorySubOrderNumber,
thirdSubOrderNumber,
},
},
)
......
......@@ -346,10 +346,10 @@ watch(
isAutoSure.value = false
if (props.type === 1) {
placeholderText.value =
'扫描枪输入生产单号,录入下一单本单自动生产完成,最后一单扫两次完成生产'
'扫描枪输入第三方订单号,录入下一单本单自动生产完成,最后一单扫两次完成生产'
} else if (props.type === 2) {
placeholderText.value =
'扫描枪输入生产单号,录入下一单本单自动发货完成,最后一单扫两次完成发货'
'扫描枪输入第三方订单号,录入下一单本单自动发货完成,最后一单扫两次完成发货'
}
sendNum.value = 0
// canlogisticsList('GNKD').then((res) => {
......@@ -625,7 +625,6 @@ const trackcodeInput = async () => {
} catch (e) {
console.error(e)
productInfo.value = {}
playAudio('weight_search_error')
nextTick(() => {
if (trackingNumberRef.value) {
;(trackingNumberRef.value as HTMLInputElement).focus()
......
......@@ -175,227 +175,256 @@
<ElButton type="danger" @click="voidedBtn">作废</ElButton>
</span> -->
</div>
<div
v-if="['IN_PRODUCTION', 'WAIT_SHIPMENT'].includes(status)"
class="card-mode"
>
<div v-loading="loading" class="card-list">
<div
v-for="cardItem in CardOrderList"
:key="cardItem.id"
class="card-list_item"
@click="cardClick(cardItem)"
>
<CardWrapper
@contextmenu.prevent="(v)=>rightClick(v,cardItem)"
:card-item="cardItem"
:class="{ active: isSelectStatused(cardItem) }"
<template v-if="['IN_PRODUCTION', 'WAIT_SHIPMENT'].includes(status)">
<div
v-if="CardOrderList.length"
v-loading="loading"
element-loading-text="加载中..."
class="card-mode"
>
<div class="card-list">
<div
v-for="cardItem in CardOrderList"
:key="cardItem.id"
class="card-list_item"
@click="cardClick(cardItem)"
>
<!-- <template #top_right> 工厂类型 </template> -->
<template #bottom_left>
<span
v-if="cardItem?.factorySubOrderNumber"
title="生产单号"
class="base_sku"
@click.stop="
copy(String(cardItem?.factorySubOrderNumber || ''))
"
>
{{ cardItem?.factorySubOrderNumber }}
</span>
</template>
<template #operations>
<Icon
name="caozuorizhi"
@click.stop="
openLog(Number(cardItem.podOrderId) || undefined)
"
>
<template #title>
<title>操作日志</title>
</template>
</Icon>
<Icon
name="chakanxiangqing"
@click.stop="openDetail(cardItem.id)"
>
<template #title>
<title>查看详情</title>
</template>
</Icon>
</template>
<template #images>
<div class="flex-between">
<div class="images-position">
<div
v-for="(item, index) in getSafeImages(cardItem)"
:key="index"
:title="
item?.ename
? item.ename === 'front'
? '正面图片'
: '反面图片'
: ''
"
:style="
currentImage === item?.image &&
currentId === cardItem.id
? 'border-color: red'
: ''
"
class="item-image"
@click="handleChangeImages(item, cardItem)"
>
<img :src="item?.image" height="28" />
<CardWrapper
:card-item="cardItem"
:class="{ active: isSelectStatused(cardItem) }"
@contextmenu.prevent="(v) => rightClick(v, cardItem)"
>
<!-- <template #top_right> 工厂类型 </template> -->
<template #bottom_left>
<span
v-if="cardItem?.factorySubOrderNumber"
title="生产单号"
class="base_sku"
@click.stop="
copy(String(cardItem?.factorySubOrderNumber || ''))
"
>
{{ cardItem?.factorySubOrderNumber }}
</span>
</template>
<template #operations>
<Icon
name="caozuorizhi"
@click.stop="
openLog(Number(cardItem.podOrderId) || undefined)
"
>
<template #title>
<title>操作日志</title>
</template>
</Icon>
<Icon
name="chakanxiangqing"
@click.stop="openDetail(cardItem.id)"
>
<template #title>
<title>查看详情</title>
</template>
</Icon>
</template>
<template #images>
<div class="flex-between">
<div class="images-position">
<div
v-for="(item, index) in getSafeImages(cardItem)"
:key="index"
:title="
item?.ename
? item.ename === 'front'
? '正面图片'
: '反面图片'
: ''
"
:style="
currentImage === item?.image &&
currentId === cardItem.id
? 'border-color: red'
: ''
"
class="item-image"
@click="handleChangeImages(item, cardItem)"
>
<img :src="item?.image" height="28" />
</div>
</div>
</div>
<b
v-if="cardItem"
:style="{
color:
<b
v-if="cardItem"
:style="{
color:
(Number(cardItem.customizedQuantity) || 0) > 1
? 'red'
: '#67C23A',
}"
>
{{
(Number(cardItem.customizedQuantity) || 0) > 1
? 'red'
: '#67C23A',
}"
? '多'
: '单'
}}
</b>
</div>
</template>
<template #info>
<div
style="height: 100px; font-size: 12px; padding: 14px 5px 0"
>
{{
(Number(cardItem.customizedQuantity) || 0) > 1
? '多'
: '单'
}}
</b>
</div>
</template>
<template #info>
<div
style="height: 100px; font-size: 12px; padding: 14px 5px 0"
>
<el-row class="el_row">
<el-col :span="14" :offset="0">
<el-tooltip
class="item"
effect="dark"
:content="cardItem?.baseSku"
placement="bottom"
<el-row class="el_row">
<el-col :span="14" :offset="0">
<el-tooltip
class="item"
effect="dark"
:content="cardItem?.baseSku"
placement="bottom"
>
<span
title="Base SKU"
style="
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
display: inline-block;
"
>
{{ cardItem?.baseSku }}
</span>
</el-tooltip>
</el-col>
<el-col :span="10" :offset="0" style="text-align: right">
<el-tooltip
class="item"
effect="dark"
:content="
status === 'IN_PRODUCTION'
? '未生产数量'
: '已生产数量'
"
placement="bottom"
>
<span
>数量:{{
status === 'IN_PRODUCTION'
? cardItem?.notPassNum
: cardItem?.passNum
}}</span
>
</el-tooltip>
</el-col>
</el-row>
<el-row style="margin-top: 5px">
<el-col
:span="14"
:offset="0"
style="
white-space: nowrap;
display: flex;
align-items: center;
"
>
<span
title="Base SKU"
title="Variant SKU"
style="
white-space: nowrap;
display: inline-block;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
display: inline-block;
"
>
{{ cardItem?.baseSku }}
{{ cardItem?.variantSku }}
</span>
</el-tooltip>
</el-col>
<el-col :span="10" :offset="0" style="text-align: right">
<el-tooltip
class="item"
effect="dark"
:content="
status === 'IN_PRODUCTION'
? '未生产数量'
: '已生产数量'
"
placement="bottom"
>
<span
>数量:{{
status === 'IN_PRODUCTION'
? cardItem?.notPassNum
: cardItem?.passNum
}}</span
</el-col>
<el-col :span="10" :offset="0" style="text-align: right">
<el-tooltip
class="item"
effect="dark"
:content="'货号'"
placement="bottom"
>
</el-tooltip>
</el-col>
</el-row>
<el-row style="margin-top: 5px">
<el-col
:span="14"
:offset="0"
style="
white-space: nowrap;
display: flex;
align-items: center;
"
>
<span
title="Variant SKU"
<span>货号:{{ cardItem?.supplierItemNo }}</span>
</el-tooltip>
</el-col>
</el-row>
<el-row style="margin-top: 5px">
<el-col
:span="12"
:offset="0"
style="
display: inline-block;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
display: flex;
align-items: center;
"
>
{{ cardItem?.variantSku }}
</span>
</el-col>
<el-col :span="10" :offset="0" style="text-align: right">
<el-tooltip
class="item"
effect="dark"
:content="'货号'"
placement="bottom"
>
<span>货号:{{ cardItem?.supplierItemNo }}</span>
</el-tooltip>
</el-col>
</el-row>
<el-row style="margin-top: 5px">
<el-col
:span="12"
:offset="0"
style="
white-space: nowrap;
display: flex;
align-items: center;
"
>
<span>工艺:</span>
<span
:title="String(cardItem?.process)"
style="
display: inline-block;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
"
<span>工艺:</span>
<span
:title="String(cardItem?.process)"
style="
display: inline-block;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
"
>
{{ cardItem?.process }}
</span>
</el-col>
<el-col :span="12" :offset="0" style="text-align: right">
<span title="期望交货时间">
{{ cardItem?.expectDeliveryTime }}
</span>
</el-col>
</el-row>
<el-row style="margin-top: 5px">
<el-col
:span="14"
:offset="0"
style="white-space: nowrap"
>
{{ cardItem?.process }}
</span>
</el-col>
<el-col :span="12" :offset="0" style="text-align: right">
<span title="期望交货时间">
{{ cardItem?.expectDeliveryTime }}
</span>
</el-col>
</el-row>
<el-row style="margin-top: 5px">
<el-col :span="14" :offset="0" style="white-space: nowrap">
<span
:title="`店铺单号:${cardItem?.shopNumber}`"
style="
display: inline-block;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
"
<span
:title="`店铺单号:${cardItem?.shopNumber}`"
style="
display: inline-block;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
"
>
{{ cardItem?.shopNumber }}
</span>
</el-col>
<el-col
:span="10"
:offset="0"
style="white-space: nowrap"
>
{{ cardItem?.shopNumber }}
</span>
</el-col>
</el-row>
</div>
</template>
</CardWrapper>
<span
:title="`第三方订单号:${cardItem?.thirdSubOrderNumber}`"
style="
display: inline-block;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
"
@click.stop="
copy(String(cardItem?.thirdSubOrderNumber || ''))
"
>
{{ cardItem?.thirdSubOrderNumber }}
</span>
</el-col>
</el-row>
</div>
</template>
</CardWrapper>
</div>
</div>
</div>
</div>
<div v-else class="empty">暂无数据</div>
</template>
<div
v-else
ref="tableWrapperRef"
......@@ -404,13 +433,12 @@
class="order-list flex-1 overflow-hidden"
>
<TableView
ref="tableRef"
:paginated-data="tableData"
:columns="tableColumns"
default-expand-all
:span-method="arraySpanMethod"
@right-click="rightClick"
@selection-change="handleSelectionChange"
@right-click="rightClick"
>
<template #expand="{ row }">
<div v-if="row.productList" class="table-expand">
......@@ -726,15 +754,11 @@
>
<LogList :log-list="logList" />
</el-dialog>
<el-dialog
v-model="countVisible"
title="数据统计"
width="400px"
:close-on-click-modal="false"
>
<p>基版 <b>{{cardItem?.baseSku}}</b> 的统计数量为:<b> {{count}}</b></p>
</el-dialog>
<right-menu :show_copy_shop_number="['IN_PRODUCTION','WAIT_SHIPMENT'].includes(status)" ref="rightMenuRef" @change="rightChange" />
<right-menu
ref="rightMenuRef"
:show_copy_shop_number="['IN_PRODUCTION', 'WAIT_SHIPMENT'].includes(status)"
@change="rightChange"
/>
<fastProduction
v-model:detailVisible="detailVisible"
:title="fastTitle"
......@@ -762,7 +786,7 @@ import {
getCardOrderList,
getOrderDetail,
getInProductionCount,
getWaitShipmentCount
getWaitShipmentCount,
} from '@/api/podOrder'
import TableView from '@/components/TableView.vue'
import {
......@@ -792,57 +816,64 @@ import {
imageAryInter,
CardOrderData,
} from '@/types/api/podOrder'
import {ArrowUp,ArrowDown} from '@element-plus/icons-vue'
import { ArrowUp, ArrowDown } from '@element-plus/icons-vue'
import { getLogisticsCompanyList } from '@/api/common'
import { ElButton, type FormRules } from 'element-plus'
import { showConfirm } from '@/utils/ui'
import { filePath } from '@/api/axios'
import LogList from '@/components/LogList.vue'
const tableRef = ref();
const tableRef = ref()
const countVisible = ref(false)
const keyCode = ref('');
const cardItem = ref<PodProductList | CardOrderData>();
const keyCode = ref('')
const cardItem = ref<PodProductList | CardOrderData>()
const rightMenuRef = ref()
const count = ref<number>(0)
const rightClick = (e:MouseEvent,item:PodProductList | CardOrderData) => {
const rightClick = (e: MouseEvent, item: PodProductList | CardOrderData) => {
cardItem.value = item
rightMenuRef.value.setPosition({
x: e.clientX,
y: e.clientY,
cardItem: e.clientY,
el: e
el: e,
})
}
const rightChange =async (code:string) => {
const flag = ['IN_PRODUCTION','WAIT_SHIPMENT'].includes(status.value)
const rightChange = async (code: string) => {
const flag = ['IN_PRODUCTION', 'WAIT_SHIPMENT'].includes(status.value)
if (code === 'check_all') {
if(flag){
if (flag) {
selection.value = JSON.parse(JSON.stringify(CardOrderList.value))
} else{
if( tableRef.value && tableRef.value?.tableRef){
} else {
if (tableRef.value && tableRef.value?.tableRef) {
tableRef.value?.tableRef.toggleAllSelection()
}
// selection.value = JSON.parse(JSON.stringify(tableData.value))
}
} else if (code === 'clear_check') {
selection.value = []
tableRef.value?.tableRef.toggleAllSelection()
} else if (code === 'copy_code') {
const str = selection.value.map(item=>item.factorySubOrderNumber || item.factoryOrderNumber).join()
const str = selection.value
.map((item) => item.factorySubOrderNumber || item.factoryOrderNumber)
.join()
navigator.clipboard.writeText(str)
ElMessage.success('复制成功')
} else if (code === 'copy_shopNumber') {
const str = selection.value.map(item=>item.shopNumber).join()
} else if (code === 'copy_shopNumber') {
const str = selection.value.map((item) => item.shopNumber).join()
navigator.clipboard.writeText(str)
ElMessage.success('复制成功')
} else if (code === 'count') {
countVisible.value = true
let res
if(status.value==='WAIT_SHIPMENT'){
res = await getWaitShipmentCount(cardItem.value?.productionFileId,cardItem.value?.baseSku)
}else if(status.value==='IN_PRODUCTION'){
res = await getInProductionCount(cardItem.value?.productionFileId,cardItem.value?.baseSku)
if (status.value === 'WAIT_SHIPMENT') {
res = await getWaitShipmentCount(
cardItem.value?.productionFileId,
cardItem.value?.baseSku,
)
} else if (status.value === 'IN_PRODUCTION') {
res = await getInProductionCount(
cardItem.value?.productionFileId,
cardItem.value?.baseSku,
)
}
count.value = (res?.data || 0) as number
}
......@@ -1039,16 +1070,17 @@ const fastToProduction = (title: string, type: number) => {
}
const cardClick = (data: PodProductList | CardOrderData) => {
const status = isSelectStatused(data)
if(keyCode.value==='Shift'){
if(selection.value.length){
const startIndex=CardOrderList.value.findIndex(el=>el.id===selection.value[0].id)
const endIndex = CardOrderList.value.findIndex(el=>el.id===data.id)
selection.value =[]
for(let k =startIndex;k<=endIndex;k++ ){
if (keyCode.value === 'Shift') {
if (selection.value.length) {
const startIndex = CardOrderList.value.findIndex(
(el) => el.id === selection.value[0].id,
)
const endIndex = CardOrderList.value.findIndex((el) => el.id === data.id)
selection.value = []
for (let k = startIndex; k <= endIndex; k++) {
selection.value.push(JSON.parse(JSON.stringify(CardOrderList.value[k])))
}
}
}
if (status) {
selection.value = selection.value.filter(
......@@ -1148,6 +1180,7 @@ const {
onPageSizeChange: handleSizeChange,
} = usePageList<OrderData | CardOrderData>({
query: async (page, pageSize) => {
console.log(111111)
const commonParams = {
...searchForm.value,
status: status.value,
......@@ -1164,8 +1197,9 @@ const {
// 动态选择接口
const fetchData =
status.value === 'IN_PRODUCTION' ? getCardOrderList : getOrderList
const res = await fetchData(commonParams, page, pageSize)
return res.data
return fetchData(commonParams, page, pageSize).then(
(res) => res.data,
) as never
},
})
// 发货
......@@ -1391,7 +1425,11 @@ const addInternalTag = async () => {
}).then(async ({ value }: { value: string }) => {
try {
const res = await addInternalTagApi(
selection.value.map((item: CardOrderData | PodProductList) => item.id),
selection.value.map((item: CardOrderData | PodProductList) =>
status.value === 'IN_PRODUCTION' || status.value === 'WAIT_SHIPMENT'
? (item.podOrderId as number)
: item.id,
),
value,
)
ElMessage.success(res.message)
......@@ -1402,34 +1440,6 @@ const addInternalTag = async () => {
}
})
}
// const voidedBtn = async () => {
// if (selection.value.length === 0) {
// return ElMessage({
// message: '请选择订单',
// type: 'warning',
// offset: window.innerHeight / 2,
// })
// }
// ElMessageBox.prompt('', '作废', {
// confirmButtonText: '确认',
// cancelButtonText: '取消',
// inputPlaceholder: '请输入作废原因',
// inputPattern: /.+/,
// inputErrorMessage: '作废原因不能为空',
// }).then(async ({ value }) => {
// try {
// const res = await reasonInvalidationApi(
// selection.value.map((item) => item.id),
// value,
// )
// ElMessage.success(res.message)
// loadTabData()
// loadDiffList()
// } catch (e) {
// // showError(e)
// }
// })
// }
const printManuscript = async () => {
if (selection.value.length === 0) {
return ElMessage({
......@@ -1550,18 +1560,18 @@ const getSafeImages = (item: PodProductList | CardOrderData): cardImages[] => {
if (!item.images) return []
return item.images as cardImages[]
}
const listenerKeydown= (e:KeyboardEvent) => {
console.log(e)
const listenerKeydown = (e: KeyboardEvent) => {
keyCode.value = e?.key
}
onBeforeUnmount(()=>{
document.removeEventListener('keydown', listenerKeydown)
})
onMounted(() => {
document.addEventListener('keydown', listenerKeydown)
getLogisticsList()
loadTabData()
})
onBeforeUnmount(() => {
document.removeEventListener('keydown', listenerKeydown)
})
</script>
<style lang="scss" scoped>
.header-filter-form {
......@@ -1573,12 +1583,13 @@ onMounted(() => {
.card-mode {
padding-top: 10px;
overflow: auto;
flex: 1;
.card-list {
flex: 1;
display: grid;
grid-template-columns: repeat(6, 1fr);
grid-template-rows: max-content;
gap: 10px;
overflow: hidden;
.card-list_item {
border: 1px solid #eee;
border-top-left-radius: 10px;
......@@ -1626,7 +1637,14 @@ onMounted(() => {
}
}
}
.empty {
flex: 1;
display: flex;
justify-content: center;
align-items: center;
color: #777;
overflow: hidden;
}
.tabs {
display: flex;
align-items: center;
......
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