Commit 2b2c4549 by qinjianhui

feat: 添加转至待排单,修改地址,刷新地址功能

parent 619d8046
...@@ -361,6 +361,14 @@ export function cancelLogisticsOrderApi(orderIds: (string | number)[]) { ...@@ -361,6 +361,14 @@ export function cancelLogisticsOrderApi(orderIds: (string | number)[]) {
orderIds, orderIds,
) )
} }
/** 待创建物流 → 待排单 */
export function updateLogisticsToArrangeApi(params: { ids: string }) {
return axios.get<never, BaseRespData<unknown>>(
'factory/podOrder/updateLogisticsToArrange',
{ params },
)
}
export function arrangeFinishApi(params: { export function arrangeFinishApi(params: {
productIdList: number[] productIdList: number[]
templateWidth?: number templateWidth?: number
...@@ -456,6 +464,13 @@ export function syncReceiverAddress(data: number[]) { ...@@ -456,6 +464,13 @@ export function syncReceiverAddress(data: number[]) {
) )
} }
export function updateReceiverAddressApi(data: Record<string, unknown>) {
return axios.post<never, BaseRespData<never>>(
'factory/podOrder/updateReceiverAddress',
data,
)
}
export function updateRemarkApi(id: number | string, remark: string) { export function updateRemarkApi(id: number | string, remark: string) {
return axios.post<never, BaseRespData<void>>( return axios.post<never, BaseRespData<void>>(
'factory/podOrderProduct/addRemark', 'factory/podOrderProduct/addRemark',
......
...@@ -59,6 +59,7 @@ export interface FactoryOrderNewListData { ...@@ -59,6 +59,7 @@ export interface FactoryOrderNewListData {
totalAmount?: number totalAmount?: number
productNum?: number productNum?: number
shipmentType?: number shipmentType?: number
replaceShipment?: number
expressSheet?: string expressSheet?: string
trackingNumber?: string trackingNumber?: string
processNumber?: string processNumber?: string
...@@ -72,6 +73,7 @@ export interface FactoryOrderNewListData { ...@@ -72,6 +73,7 @@ export interface FactoryOrderNewListData {
receiverAddress1?: string receiverAddress1?: string
receiverAddress2?: string receiverAddress2?: string
receiverPostCode?: string receiverPostCode?: string
rfcNumber?: string
trackStatus?: number trackStatus?: number
prepaidAmount?: number prepaidAmount?: number
pause?: boolean pause?: boolean
......
<script setup lang="ts">
import { updateReceiverAddressApi } from '@/api/factoryOrderNew'
const emits = defineEmits(['success'])
defineProps<{
countryList: { countryCode: string; nameCn?: string }[]
}>()
const visible = defineModel<boolean>('visible')
const form = defineModel<Record<string, unknown>>('form', {
default: () => ({
id: undefined,
receiverName: '',
rfcNumber: '',
receiverPhone: '',
receiverCountry: '',
receiverProvince: '',
receiverCity: '',
receiverDistrict: '',
receiverAddress1: '',
receiverAddress2: '',
receiverPostCode: '',
}),
})
const formRef = ref()
const rules = {
receiverName: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
receiverPhone: [{ required: true, message: '请输入电话', trigger: 'blur' }],
receiverCountry: [{ required: true, message: '请输入国家', trigger: 'blur' }],
receiverProvince: [
{ required: true, message: '请输入省/州', trigger: 'blur' },
],
receiverCity: [{ required: true, message: '请输入市', trigger: 'blur' }],
receiverAddress1: [
{ required: true, message: '请输入地址1', trigger: 'blur' },
],
receiverPostCode: [
{ required: true, message: '请输入邮政编码', trigger: 'blur' },
],
}
const submitForm = async () => {
formRef?.value.validate(async (valid: boolean) => {
if (valid) {
await updateReceiverAddressApi(form.value)
visible.value = false
emits('success')
await ElMessageBox.alert(
'请修改/刷新地址后取消物流或者更换物流在重新创建物流订单、获取跟踪号、获取打印面单',
'提示',
{
type: 'warning',
confirmButtonText: '确定',
cancelButtonText: '取消',
showCancelButton: true,
},
)
}
})
}
</script>
<template>
<el-dialog
v-model="visible"
:close-on-click-modal="false"
title="修改揽收信息"
width="50%"
>
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="姓名" prop="receiverName">
<el-input
v-model="form.receiverName"
clearable
placeholder="请输入姓名"
/>
</el-form-item>
<el-form-item label="电话" prop="receiverPhone">
<el-input
v-model="form.receiverPhone"
clearable
placeholder="请输入电话"
/>
</el-form-item>
<el-form-item label="国家" prop="receiverCountry">
<el-select v-model="form.receiverCountry" clearable filterable>
<el-option
v-for="it in countryList"
:key="it.countryCode"
:label="it.nameCn || it.countryCode"
:value="it.countryCode"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="省/州" prop="receiverProvince">
<el-input
v-model="form.receiverProvince"
clearable
placeholder="请输入省/州"
/>
</el-form-item>
<el-form-item label="市" prop="receiverCity">
<el-input
v-model="form.receiverCity"
clearable
placeholder="请输入市"
/>
</el-form-item>
<el-form-item label="区/县" prop="receiverDistrict">
<el-input
v-model="form.receiverDistrict"
clearable
placeholder="请输入区/县"
/>
</el-form-item>
<el-form-item label="地址1" prop="receiverAddress1">
<el-input
v-model="form.receiverAddress1"
clearable
placeholder="请输入地址1"
/>
</el-form-item>
<el-form-item label="地址2" prop="receiverAddress2">
<el-input
v-model="form.receiverAddress2"
clearable
placeholder="请输入地址2"
/>
</el-form-item>
<el-form-item label="邮政编码" prop="receiverPostCode">
<el-input
v-model="form.receiverPostCode"
clearable
placeholder="请输入邮政编码"
/>
</el-form-item>
<el-form-item label="RFC税号" prop="rfcNumber">
<el-input
v-model="form.rfcNumber"
clearable
placeholder="请输入RFC税号"
/>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer-center">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="submitForm">提交</el-button>
</div>
</template>
</el-dialog>
</template>
<style scoped lang="scss">
.dialog-footer-center {
width: 100%;
text-align: center;
}
</style>
...@@ -440,6 +440,11 @@ ...@@ -440,6 +440,11 @@
>更新报关信息</ElButton >更新报关信息</ElButton
> >
</span> </span>
<span v-if="status === 'PENDING_CREATE_LOGISTICS'" class="item">
<ElButton type="primary" @click="handleTransferToArrange">
转至待排单
</ElButton>
</span>
<!-- <span v-if="status === 'PENDING_RECEIVE'" class="item"> <!-- <span v-if="status === 'PENDING_RECEIVE'" class="item">
<ElButton type="warning" @click="handleTransferOldFlow" <ElButton type="warning" @click="handleTransferOldFlow"
>转旧流程</ElButton >转旧流程</ElButton
...@@ -691,6 +696,7 @@ ...@@ -691,6 +696,7 @@
@row-click="handleRowClick" @row-click="handleRowClick"
> >
<template #operation="{ row }"> <template #operation="{ row }">
<div class="main-table-operation">
<ElButton <ElButton
v-if="status === 'PENDING_RECEIVE'" v-if="status === 'PENDING_RECEIVE'"
type="primary" type="primary"
...@@ -704,6 +710,25 @@ ...@@ -704,6 +710,25 @@
: '接单' : '接单'
}} }}
</ElButton> </ElButton>
<ElButton
v-if="showPendingLogisticsUpdateAddress(row)"
type="primary"
link
size="small"
@click.stop="openUpdateReceiverAddress(row)"
>
修改地址
</ElButton>
<ElButton
v-if="showPendingLogisticsRefreshAddress(row)"
type="primary"
link
size="small"
@click.stop="handleRefreshReceiverAddress(row)"
>
刷新地址
</ElButton>
</div>
</template> </template>
</TableView> </TableView>
</div> </div>
...@@ -771,7 +796,7 @@ ...@@ -771,7 +796,7 @@
<CreateLogisticDialog <CreateLogisticDialog
ref="createLogisticDialogRef" ref="createLogisticDialogRef"
:new-order-selection="selectedRows" :new-order-selection="selectedRows"
@refresh-table="() => refreshCurrentView({ isRefreshTree: true })" @show-result="handleFastProductionSuccess"
/> />
<UpdateCustomDeclarationInfoDialog <UpdateCustomDeclarationInfoDialog
v-model="updateCustomsDialogVisible" v-model="updateCustomsDialogVisible"
...@@ -850,6 +875,13 @@ ...@@ -850,6 +875,13 @@
:list="resultInfo" :list="resultInfo"
@confirm="() => refreshCurrentView({ isRefreshTree: true })" @confirm="() => refreshCurrentView({ isRefreshTree: true })"
></ResultInfo> ></ResultInfo>
<UpdateReceiverAddressDialog
v-if="updateReceiverAddressVisible"
v-model:form="receiverAddressForm"
v-model:visible="updateReceiverAddressVisible"
:country-list="receiverCountryList"
@success="() => refreshCurrentView({ isRefreshTree: true })"
/>
</div> </div>
</template> </template>
...@@ -882,6 +914,7 @@ import { ...@@ -882,6 +914,7 @@ import {
getTrackingNumberApi, getTrackingNumberApi,
getfaceSimplexFileApi, getfaceSimplexFileApi,
cancelLogisticsOrderApi, cancelLogisticsOrderApi,
updateLogisticsToArrangeApi,
downloadMaterialApi, downloadMaterialApi,
downloadOperationMaterialApi, downloadOperationMaterialApi,
composingNewPodOrderDesignImages, composingNewPodOrderDesignImages,
...@@ -922,6 +955,7 @@ import FastProduction from '@/views/order/components/FastProduction.vue' ...@@ -922,6 +955,7 @@ import FastProduction from '@/views/order/components/FastProduction.vue'
import PodMakeOrder from '@/views/order/podUs/PodMakeOrder.vue' import PodMakeOrder from '@/views/order/podUs/PodMakeOrder.vue'
import PodDistributionOrder from '@/views/order/podCN/PodDistributionOrder.vue' import PodDistributionOrder from '@/views/order/podCN/PodDistributionOrder.vue'
import PrintWarehouseSkuTag from '@/views/order/components/printWarehouseSkuTag.vue' import PrintWarehouseSkuTag from '@/views/order/components/printWarehouseSkuTag.vue'
import UpdateReceiverAddressDialog from './component/UpdateReceiverAddressDialog.vue'
import { ResultInfoDataItem } from '@/types/api/order/common' import { ResultInfoDataItem } from '@/types/api/order/common'
import { useOrderDictionaries } from './hooks/useOrderDictionaries' import { useOrderDictionaries } from './hooks/useOrderDictionaries'
import { useOrderSearchForm } from './hooks/useOrderSearchForm' import { useOrderSearchForm } from './hooks/useOrderSearchForm'
...@@ -1046,6 +1080,60 @@ const refreshCurrentView = (options?: { isRefreshTree?: boolean }) => { ...@@ -1046,6 +1080,60 @@ const refreshCurrentView = (options?: { isRefreshTree?: boolean }) => {
} }
refreshCurrentViewProxy.value = () => refreshCurrentView() refreshCurrentViewProxy.value = () => refreshCurrentView()
const updateReceiverAddressVisible = ref(false)
const receiverAddressForm = ref<Record<string, unknown>>({})
const showPendingLogisticsUpdateAddress = (row: FactoryOrderNewListData) =>
status.value === 'PENDING_CREATE_LOGISTICS' && row.shipmentType === 1
const showPendingLogisticsRefreshAddress = (row: FactoryOrderNewListData) => {
if (status.value !== 'PENDING_CREATE_LOGISTICS') return false
if (row.replaceShipment === 1) return true
if (row.replaceShipment === 0 && row.shipmentType === 1) return true
return false
}
const openUpdateReceiverAddress = (row: FactoryOrderNewListData) => {
receiverAddressForm.value = {
rfcNumber: '',
receiverName: '',
receiverPhone: '',
receiverCountry: '',
receiverProvince: '',
receiverCity: '',
receiverDistrict: '',
receiverAddress1: '',
receiverAddress2: '',
receiverPostCode: '',
...JSON.parse(JSON.stringify(row)),
}
updateReceiverAddressVisible.value = true
}
const handleRefreshReceiverAddress = async (row: FactoryOrderNewListData) => {
try {
await ElMessageBox.confirm('确定刷新地址吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
} catch {
return
}
await syncReceiverAddress([row.id])
await ElMessageBox.alert(
'请修改/刷新地址后取消物流或者更换物流再重新创建物流订单、获取跟踪号、获取打印面单',
'提示',
{
type: 'warning',
confirmButtonText: '确定',
cancelButtonText: '取消',
showCancelButton: true,
},
)
refreshCurrentView({ isRefreshTree: true })
}
const handleStatusNodeClick = (node: { status: string }) => { const handleStatusNodeClick = (node: { status: string }) => {
status.value = node.status status.value = node.status
if (node.status !== 'PENDING_RECEIVE') { if (node.status !== 'PENDING_RECEIVE') {
...@@ -1178,7 +1266,7 @@ const mainColumns = [ ...@@ -1178,7 +1266,7 @@ const mainColumns = [
{ {
prop: 'operation', prop: 'operation',
label: '操作', label: '操作',
minWidth: 120, minWidth: 200,
align: 'center', align: 'center',
slot: 'operation', slot: 'operation',
fixed: 'right', fixed: 'right',
...@@ -1503,19 +1591,6 @@ const handleRefreshProductInfo = async () => { ...@@ -1503,19 +1591,6 @@ const handleRefreshProductInfo = async () => {
loading.close() loading.close()
} }
} }
// const handleTransferOldFlow = async () => {
// try {
// await executeBatchAction({
// getIds: getSelectedIds,
// api: transferOldFlowApi,
// confirmText: '确定转旧流程吗?',
// successText: '转旧流程成功',
// refreshTree: true,
// })
// } catch (e: unknown) {
// ElMessage.error((e as Error)?.message || '转旧流程失败')
// }
// }
const handleLogisticsCommand = async (command: string) => { const handleLogisticsCommand = async (command: string) => {
if (!ensureSelection()) return if (!ensureSelection()) return
const ids = getSelectedIds() const ids = getSelectedIds()
...@@ -1582,6 +1657,48 @@ const handleUpdateCustomsInfo = () => { ...@@ -1582,6 +1657,48 @@ const handleUpdateCustomsInfo = () => {
if (!ensureSelection()) return if (!ensureSelection()) return
updateCustomsDialogVisible.value = true updateCustomsDialogVisible.value = true
} }
const handleTransferToArrange = async () => {
if (!ensureSelection('请选择订单')) return
try {
await ElMessageBox.confirm('确定转至待排单吗?', '提示', {
type: 'warning',
})
} catch {
return
}
const loading = ElLoading.service({
fullscreen: true,
text: '操作中...',
background: 'rgba(0, 0, 0, 0.3)',
})
try {
const ids = getSelectedIds().join(',')
const res = await updateLogisticsToArrangeApi({ ids })
if (res.code !== 200) return
if (Array.isArray(res.data)) {
const isSuccess = res.data.every(
(item: { status?: boolean }) => item.status,
)
if (!isSuccess) {
resultInfo.value = res.data.filter(
(item: { status?: boolean }) => !item.status,
)
resultRefs.value?.showDialog()
return
}
refreshCurrentView({ isRefreshTree: true })
} else {
refreshCurrentView({ isRefreshTree: true })
}
ElMessage.success('操作成功')
} catch (e: unknown) {
resultInfo.value = []
console.error(e)
} finally {
loading.close()
}
}
const handleArrange = async () => { const handleArrange = async () => {
if (!ensureSelection()) return if (!ensureSelection()) return
const productIdList = getSelectedIds() const productIdList = getSelectedIds()
......
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