运营段修改
Some checks failed
自动部署测试 / build-and-deploy (push) Has been cancelled

This commit is contained in:
dev 2025-07-15 08:47:29 +08:00
parent 0dfc0caf6b
commit eed20a11b2
12 changed files with 292 additions and 115 deletions

View File

@ -62,6 +62,9 @@ export interface InquiryRequestVO {
* *
*/ */
effectiveEndTime: string; effectiveEndTime: string;
type: string;
shipmentId: string | number;
} }
export interface InquiryRequestItemVO { export interface InquiryRequestItemVO {

View File

@ -33,9 +33,9 @@ export const queryLogisticsQuote = (destination: string | number, channelId: str
}); });
}; };
export const queryLogisticsQuoteWithDes = (destination: string | number, date: string): AxiosPromise<LogisticsQuoteVO[]> => { export const queryLogisticsQuoteWithDes = (destination: string | number, date: string,shipmentId: string | number): AxiosPromise<LogisticsQuoteVO[]> => {
return request({ return request({
url: '/amz/logisticsQuote/queryWithDes/' + destination + '/' + date, url: '/amz/logisticsQuote/queryWithDes/' + destination + '/' + date + '/' + shipmentId,
method: 'get' method: 'get'
}); });
}; };

View File

@ -153,6 +153,11 @@ export interface LogisticsQuoteForm extends BaseEntity {
* *
*/ */
unit?: string; unit?: string;
type: string;
shipmentId: string | number;
totalPrice: number;
} }
export interface LogisticsMostQuoteForm extends BaseEntity { export interface LogisticsMostQuoteForm extends BaseEntity {

View File

@ -1,3 +1,5 @@
import { ShipmentPlanVO } from '@/api/amz/shipmentPlan/types';
export interface SendOrderVO { export interface SendOrderVO {
/** /**
* ID * ID
@ -58,6 +60,12 @@ export interface SendOrderVO {
* pending=confirm=, processing=completed= * pending=confirm=, processing=completed=
*/ */
sendStatus: string; sendStatus: string;
createTime: string;
sendName: string;
bizShipmentPlans: ShipmentPlanVO[];
} }
export interface SendOrderForm extends BaseEntity { export interface SendOrderForm extends BaseEntity {

View File

@ -495,7 +495,7 @@ export interface ShipmentPlanQuery extends PageQuery {
/** /**
* *
*/ */
shipmentId?: string | number; shipmentId?: string;
/** /**
* *

View File

@ -112,8 +112,74 @@
</template> </template>
<el-table v-loading="loading" :data="inquiryRequestList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="inquiryRequestList" @selection-change="handleSelectionChange">
<el-table-column type="expand">
<template #default="props">
<el-card shadow="never">
<el-table :data="props.row.sendOrders">
<!-- <el-table-column type="selection" width="55" align="center" />-->
<!-- <el-table-column label="采购单号" align="center" prop="orderSn" />-->
<!-- <el-table-column label="发货单号" align="center" prop="id" />-->
<!-- <el-table-column label="创建日期" align="center" prop="createTime" width="180">-->
<!-- <template #default="scope">-->
<!-- <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="发货日期" align="center" prop="sendDate" width="180">-->
<!-- <template #default="scope">-->
<!-- <span>{{ parseTime(scope.row.sendDate, '{y}-{m}-{d}') }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="采购店铺" align="center" prop="storeName" />-->
<!-- <el-table-column label="供应商名称" align="center" prop="sendName" />-->
<!-- <el-table-column label="物流商名称" align="center" prop="logisticsProviderName">-->
<!-- <template #default="{ row }">-->
<!-- <el-popover placement="top" title="物流商地址" :width="200" trigger="click">-->
<!-- <template #reference>-->
<!-- <el-button v-if="row.logisticsProviderName !== null" text size="small" type="primary">-->
<!-- {{ row.logisticsProviderName }}-->
<!-- </el-button>-->
<!-- </template>-->
<!-- <div>{{ row.address || '暂无地址' }}</div>-->
<!-- </el-popover>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="产品名称" align="center" prop="productName" />
<el-table-column label="发货数量" align="center" prop="quantitySend" />
<!-- <el-table-column label="单箱产品数量" align="center" prop="quantityPerBox" />-->
<el-table-column label="箱数" align="center" prop="boxCount">
<template #default="{ row }">
<el-popover placement="top" title="装箱明细" :width="500" trigger="click">
<template #reference>
<el-button text size="small" type="primary"> {{ row.boxCount }}</el-button>
</template>
<div v-if="row.sendDetail !== null" v-html="formatText(row.sendDetail)"></div>
<div v-else>暂无数据</div>
</el-popover>
</template>
</el-table-column>
<!-- <el-table-column label="箱子尺寸" align="center" prop="boxDimensions" />-->
<el-table-column label="总重量" align="center" prop="weightPerBox">
<template #default="scope">
<span>{{ scope.row.weightPerBox }}kg</span>
</template>
</el-table-column>
<!-- <el-table-column label="实际发货店铺" align="center" prop="realStoreName" />-->
<!-- <el-table-column label="发货状态" align="center" prop="sendStatus">-->
<!-- <template #default="scope">-->
<!-- <dict-tag :options="send_status" :value="scope.row.sendStatus" />-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
</el-card>
</template>
</el-table-column>
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="询价单号" align="center" prop="inquiryNo" /> <el-table-column label="询价单号" align="center" prop="inquiryNo" />
<el-table-column label="询价类型" align="center" prop="inquiryNo">
<template #default="scope">
<dict-tag :options="request_type" :value="scope.row.type" />
</template>
</el-table-column>
<!-- <el-table-column label="发起人" align="center" prop="requesterName" />--> <!-- <el-table-column label="发起人" align="center" prop="requesterName" />-->
<!-- <el-table-column label="目标物流商ID列表" align="center" prop="targetProviders" />--> <!-- <el-table-column label="目标物流商ID列表" align="center" prop="targetProviders" />-->
<el-table-column label="目的地" align="center" prop="destination" /> <el-table-column label="目的地" align="center" prop="destination" />
@ -239,15 +305,24 @@
<el-form-item label="是否需要报关" prop="channelName"> <el-form-item label="是否需要报关" prop="channelName">
<el-input v-model="quoteForm.customsFlag" placeholder="请输入是否需要报关" disabled /> <el-input v-model="quoteForm.customsFlag" placeholder="请输入是否需要报关" disabled />
</el-form-item> </el-form-item>
<el-form-item label="基础价格" prop="price"> <el-form-item v-if="quoteForm.type === 'general'" label="基础价格" prop="price" required>
<div class="kgprice"> <div class="kgprice">
<el-input-number v-model="quoteForm.price" :precision="2" :step="0.1" :min="1" :max="100"> <el-input-number v-model="quoteForm.price" :precision="2" :step="0.1" :min="0" :max="100">
<template #suffix> <template #suffix>
<span>/kg</span> <span>/kg</span>
</template> </template>
</el-input-number> </el-input-number>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item v-else label="货件总价" prop="totalPrice" required>
<div class="kgprice">
<el-input-number v-model="quoteForm.totalPrice" :precision="2" :step="0.1" :min="0" :max="100">
<template #suffix>
<span></span>
</template>
</el-input-number>
</div>
</el-form-item>
<el-row> <el-row>
<el-col :span="6"></el-col> <el-col :span="6"></el-col>
<el-col :span="12"> <el-col :span="12">
@ -305,7 +380,7 @@
<div class="dialog-footer"> <div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitQuoteForm"> </el-button> <el-button :loading="buttonLoading" type="primary" @click="submitQuoteForm"> </el-button>
<el-button :loading="buttonLoading" type="primary" @click="saveQuoteForm"> </el-button> <el-button :loading="buttonLoading" type="primary" @click="saveQuoteForm"> </el-button>
<el-button @click="cancel"> </el-button> <el-button @click="quoteDialog.visible = false"> </el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
@ -325,11 +400,15 @@ import { InquiryRequestVO, InquiryRequestQuery, InquiryRequestForm } from '@/api
import { LogisticsMostQuoteForm, LogisticsQuoteForm } from '@/api/amz/logisticsQuote/types'; import { LogisticsMostQuoteForm, LogisticsQuoteForm } from '@/api/amz/logisticsQuote/types';
import { addMostLogisticsQuote, checkPriceQuoteByBo, getTodayQuoteStatus } from '@/api/amz/logisticsQuote'; import { addMostLogisticsQuote, checkPriceQuoteByBo, getTodayQuoteStatus } from '@/api/amz/logisticsQuote';
import { ShipmentPlanVO } from '@/api/amz/shipmentPlan/types'; import { ShipmentPlanVO } from '@/api/amz/shipmentPlan/types';
import { formatText } from '@/utils/asinkj';
import { ElTable } from 'element-plus';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { biz_shipping_method } = toRefs<any>(proxy?.useDict('biz_shipping_method')); const { biz_shipping_method } = toRefs<any>(proxy?.useDict('biz_shipping_method'));
const { request_type } = toRefs<any>(proxy?.useDict('request_type'));
const { back_logistics_type } = toRefs<any>(proxy?.useDict('back_logistics_type')); const { back_logistics_type } = toRefs<any>(proxy?.useDict('back_logistics_type'));
const { sys_yes_no } = toRefs<any>(proxy?.useDict('sys_yes_no')); const { sys_yes_no } = toRefs<any>(proxy?.useDict('sys_yes_no'));
@ -347,6 +426,7 @@ const minDay = ref(0);
const queryFormRef = ref<ElFormInstance>(); const queryFormRef = ref<ElFormInstance>();
const inquiryRequestFormRef = ref<ElFormInstance>(); const inquiryRequestFormRef = ref<ElFormInstance>();
const logisticsQuoteFormRef = ref<ElFormInstance>({});
const dialog = reactive<DialogOption>({ const dialog = reactive<DialogOption>({
visible: false, visible: false,
@ -358,6 +438,14 @@ const quoteDialog = reactive<DialogOption>({
title: '' title: ''
}); });
const validatePrice = (rule, value, callback) => {
if (quoteForm.value.price > 0 || quoteForm.value.totalPrice > 0) {
callback();
} else {
callback(new Error('请填写价格'));
}
};
const initFormData: InquiryRequestForm = { const initFormData: InquiryRequestForm = {
id: undefined, id: undefined,
inquiryNo: undefined, inquiryNo: undefined,
@ -402,7 +490,8 @@ const data = reactive<PageData<InquiryRequestForm, InquiryRequestQuery>>({
channelName: [{ required: true, message: '渠道名称不能为空', trigger: 'blur' }], channelName: [{ required: true, message: '渠道名称不能为空', trigger: 'blur' }],
effectiveStartTime: [{ required: true, message: '报价有效的开始日期不能为空', trigger: 'blur' }], effectiveStartTime: [{ required: true, message: '报价有效的开始日期不能为空', trigger: 'blur' }],
effectiveEndTime: [{ required: true, message: '报价有效的结束日期不能为空', trigger: 'blur' }], effectiveEndTime: [{ required: true, message: '报价有效的结束日期不能为空', trigger: 'blur' }],
price: [{ required: true, message: '基础价格不能为空', trigger: 'blur' }], price: [{ validator: validatePrice, trigger: 'blur' }],
totalPrice: [{ validator: validatePrice, trigger: 'blur' }],
leadTime: [{ required: true, message: '时效不能为空', trigger: 'blur' }], leadTime: [{ required: true, message: '时效不能为空', trigger: 'blur' }],
surcharge: [{ required: true, message: '附加费不能为空', trigger: 'blur' }], surcharge: [{ required: true, message: '附加费不能为空', trigger: 'blur' }],
quoteDate: [{ required: true, message: '报价生效日期不能为空', trigger: 'blur' }], quoteDate: [{ required: true, message: '报价生效日期不能为空', trigger: 'blur' }],
@ -432,7 +521,7 @@ const quoteForm = ref<LogisticsQuoteForm>({
userId: undefined, userId: undefined,
destination: undefined, destination: undefined,
transportChannel: undefined, transportChannel: undefined,
price: 10, price: 0,
minLeadTime: 10, minLeadTime: 10,
leadTime: 10, leadTime: 10,
surcharge: 0, surcharge: 0,
@ -446,7 +535,10 @@ const quoteForm = ref<LogisticsQuoteForm>({
channelId: undefined, channelId: undefined,
isDdp: 'Y', isDdp: 'Y',
unit: 'kg', unit: 'kg',
backLogisticsType: '快递' backLogisticsType: '快递',
type: 'general',
shipmentId: undefined,
totalPrice: 0
}); });
const handleChannelChange = ({ value, node }) => { const handleChannelChange = ({ value, node }) => {
@ -557,34 +649,40 @@ const submitQuoteForm = async () => {
quoteForm.value.quoteEndDate = quoteForm.value.quoteDate[1]; quoteForm.value.quoteEndDate = quoteForm.value.quoteDate[1];
quoteForm.value.isSubmitted = 'Y'; quoteForm.value.isSubmitted = 'Y';
console.log('submitQuoteForm', quoteForm.value); console.log('submitQuoteForm', quoteForm.value);
const res = await checkPriceQuoteByBo(quoteForm.value); logisticsQuoteFormRef.value?.validate(async (valid: boolean) => {
console.log('submitQuoteForm', res); if (valid) {
if (res.code === 200) { console.log('quoteForm', quoteForm.value);
// ElMessage.success(''); return;
// quoteDialog.visible = false; const res = await checkPriceQuoteByBo(quoteForm.value);
console.log('submitQuoteForm', res);
if (res.data === true) {
const res = await addMostLogisticsQuote(quoteForm.value);
if (res.code === 200) { if (res.code === 200) {
ElMessage.success('提交成功'); // ElMessage.success('');
quoteDialog.visible = false; // quoteDialog.visible = false;
}
} else { if (res.data === true) {
ElMessageBox.confirm('价格没有竞争力,是否需要修改价格?', '提示', {
confirmButtonText: '确认提交',
cancelButtonText: '修改价格',
type: 'warning'
})
.then(async () => {
const res = await addMostLogisticsQuote(quoteForm.value); const res = await addMostLogisticsQuote(quoteForm.value);
if (res.code === 200) { if (res.code === 200) {
ElMessage.success('提交成功'); ElMessage.success('提交成功');
quoteDialog.visible = false; quoteDialog.visible = false;
} }
}) } else {
.catch(() => {}); ElMessageBox.confirm('价格没有竞争力,是否需要修改价格?', '提示', {
confirmButtonText: '确认提交',
cancelButtonText: '修改价格',
type: 'warning'
})
.then(async () => {
const res = await addMostLogisticsQuote(quoteForm.value);
if (res.code === 200) {
ElMessage.success('提交成功');
quoteDialog.visible = false;
}
})
.catch(() => {});
}
}
} }
} });
}; };
const saveQuoteForm = () => { const saveQuoteForm = () => {
@ -616,7 +714,7 @@ const handleSubmit = async (row?: InquiryRequestVO) => {
userId: undefined, userId: undefined,
destination: undefined, destination: undefined,
transportChannel: undefined, transportChannel: undefined,
price: 10, price: 0,
minLeadTime: 10, minLeadTime: 10,
leadTime: 10, leadTime: 10,
surcharge: 0, surcharge: 0,
@ -630,7 +728,10 @@ const handleSubmit = async (row?: InquiryRequestVO) => {
channelId: undefined, channelId: undefined,
isDdp: 'Y', isDdp: 'Y',
unit: 'kg', unit: 'kg',
backLogisticsType: '快递' backLogisticsType: '快递',
type: 'general',
shipmentId: undefined,
totalPrice: 0
}; };
quoteForm.value.id = row.id; quoteForm.value.id = row.id;
quoteForm.value.destination = row.destination; quoteForm.value.destination = row.destination;
@ -638,6 +739,8 @@ const handleSubmit = async (row?: InquiryRequestVO) => {
quoteForm.value.channelId = row.channelId; quoteForm.value.channelId = row.channelId;
quoteForm.value.channelName = row.channelName; quoteForm.value.channelName = row.channelName;
quoteForm.value.customsFlag = row.customsFlag; quoteForm.value.customsFlag = row.customsFlag;
quoteForm.value.type = row.type;
quoteForm.value.shipmentId = row.shipmentId;
quoteDialog.visible = true; quoteDialog.visible = true;
console.log(row.effectiveStartTime); console.log(row.effectiveStartTime);

View File

@ -257,9 +257,7 @@
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" v-hasRoles="['superadmin', 'gengdan', 'gongying']"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" v-hasRoles="['superadmin', 'gengdan', 'gongying']">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" size=" small" @click="handleUpdate(scope.row)" v-hasPermi="['amz:purchaseOrder:edit']" <el-button link type="primary" size="small" @click="handleUpdate(scope.row)" v-hasPermi="['amz:purchaseOrder:edit']">设置延期 </el-button>
>设置延期
</el-button>
<!-- <el-button size="small" link type="primary" @click="handleConfirm(scope.row)" v-hasPermi="['amz:purchaseOrder:remove']"> 确认 </el-button>--> <!-- <el-button size="small" link type="primary" @click="handleConfirm(scope.row)" v-hasPermi="['amz:purchaseOrder:remove']"> 确认 </el-button>-->
</template> </template>

View File

@ -231,6 +231,7 @@ import { listSendOrder, getSendOrder, delSendOrder, addSendOrder, updateSendOrde
import { SendOrderVO, SendOrderQuery, SendOrderForm } from '@/api/amz/sendOrder/types'; import { SendOrderVO, SendOrderQuery, SendOrderForm } from '@/api/amz/sendOrder/types';
import { getPurchaseOrder } from '@/api/amz/purchaseOrder'; import { getPurchaseOrder } from '@/api/amz/purchaseOrder';
import { Close, Plus } from '@element-plus/icons-vue'; import { Close, Plus } from '@element-plus/icons-vue';
import { formatText } from '@/utils/asinkj';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { send_status } = toRefs<any>(proxy?.useDict('send_status')); const { send_status } = toRefs<any>(proxy?.useDict('send_status'));

View File

@ -59,6 +59,79 @@
<el-table v-loading="loading" :data="sendOrderList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="sendOrderList" @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" />--> <!-- <el-table-column type="selection" width="55" align="center" />-->
<!-- <el-table-column label="主键ID" align="center" prop="id" />--> <!-- <el-table-column label="主键ID" align="center" prop="id" />-->
<el-table-column type="expand">
<template #default="props">
<el-card shadow="never">
<el-table :data="props.row.bizShipmentPlans">
<!-- <el-table-column type="selection" width="55" align="center" />-->
<!-- <el-table-column label="创建日期" align="center" prop="gmtCreate" width="180">-->
<!-- <template #default="scope">-->
<!-- <span>{{ parseTime(scope.row.gmtCreate, '{y}-{m}-{d}') }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="店铺名称" align="center" prop="sellerName" />-->
<el-table-column label="货件编号" align="center" prop="shipmentId" />
<!-- <el-table-column label="商品详情" align="center">-->
<!-- <template #default="scope">-->
<!-- <el-popover placement="top" :width="750" trigger="hover">-->
<!-- <template #reference>-->
<!-- <el-button size="small" plain style="margin-right: 16px">查看</el-button>-->
<!-- </template>-->
<!-- <el-table :data="scope.row.itemVoList">-->
<!-- <el-table-column width="200" property="productName" label="品名" />-->
<!-- <el-table-column width="150" property="asin" label="asin" />-->
<!-- <el-table-column width="150" property="fnsku" label="fnsku" />-->
<!-- <el-table-column width="200" property="msku" label="msku" />-->
<!-- </el-table>-->
<!-- </el-popover>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="国家" align="center" prop="shipToAddress.countryCode" />
<el-table-column label="物流中心编码" align="center" prop="destination" />
<el-table-column label="物流商地址" align="center" prop="address" />
<el-table-column label="物流商名称" align="center" prop="logisticsProviderName" />
<!-- <el-table-column label="关联的采购单" align="center">-->
<!-- <template #default="scope">-->
<!-- <el-tag v-if="scope.row.sendOrders != null" type="success">已关联</el-tag>-->
<!-- <el-tag v-else type="info">未关联</el-tag>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column width="150" label="仓库配送地址" align="center" prop="shipToAddress">-->
<!-- <template #default="{ row }">-->
<!-- &lt;!&ndash; <el-button @click="openAddressDialog(row.shipToAddress)"> 查看详情</el-button>&ndash;&gt;-->
<!-- <el-popover placement="left" :width="800" trigger="click">-->
<!-- <template #reference>-->
<!-- &lt;!&ndash; <el-button style="margin-right: 16px">Click to activate</el-button>&ndash;&gt;-->
<!-- <el-button plain size="small" type="success"> 点击查看详情</el-button>-->
<!-- </template>-->
<!-- <el-descriptions title="收货地址信息" :column="3" border>-->
<!-- <el-descriptions-item v-for="item in descriptItems" :key="item.prop" :label="item.label">-->
<!-- {{ row.shipToAddress[item.prop] || 'N/A' }}-->
<!-- </el-descriptions-item>-->
<!-- </el-descriptions>-->
<!-- </el-popover>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="亚马逊货件状态" align="center" width="180">
<template #default="scope">
<el-tag>{{ scope.row.shipmentStatus }}</el-tag>
</template>
</el-table-column>
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
<!-- <template #default="scope">-->
<!-- &lt;!&ndash; <el-tooltip content="修改" placement="top" v-if="scope.row.sendStatus === 'pending'">&ndash;&gt;-->
<!-- &lt;!&ndash; <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['amz:sendOrder:edit']"></el-button>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-tooltip>&ndash;&gt;-->
<!-- <el-tooltip content="删除" placement="top">-->
<!-- <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['amz:sendOrder:remove']"></el-button>-->
<!-- </el-tooltip>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
</el-card>
</template>
</el-table-column>
<el-table-column label="采购单号" align="center" prop="orderSn" /> <el-table-column label="采购单号" align="center" prop="orderSn" />
<el-table-column label="发货单号" align="center" prop="id" /> <el-table-column label="发货单号" align="center" prop="id" />
@ -74,18 +147,18 @@
</el-table-column> </el-table-column>
<el-table-column label="采购店铺" align="center" prop="storeName" /> <el-table-column label="采购店铺" align="center" prop="storeName" />
<el-table-column label="供应商名称" align="center" prop="sendName" /> <el-table-column label="供应商名称" align="center" prop="sendName" />
<el-table-column label="物流商名称" align="center" prop="logisticsProviderName"> <!-- <el-table-column label="物流商名称" align="center" prop="logisticsProviderName">-->
<template #default="{ row }"> <!-- <template #default="{ row }">-->
<el-popover placement="top" title="物流商地址" :width="200" trigger="click"> <!-- <el-popover placement="top" title="物流商地址" :width="200" trigger="click">-->
<template #reference> <!-- <template #reference>-->
<el-button v-if="row.logisticsProviderName" text size="small" type="primary"> <!-- <el-button v-if="row.logisticsProviderName" text size="small" type="primary">-->
{{ row.logisticsProviderName }} <!-- {{ row.logisticsProviderName }}-->
</el-button> <!-- </el-button>-->
</template> <!-- </template>-->
<div>{{ row.address || '暂无地址' }}</div> <!-- <div>{{ row.address || '暂无地址' }}</div>-->
</el-popover> <!-- </el-popover>-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column label="产品名称" align="center" prop="productName" /> <el-table-column label="产品名称" align="center" prop="productName" />
<el-table-column label="发货数量" align="center" prop="quantitySend" /> <el-table-column label="发货数量" align="center" prop="quantitySend" />
<el-table-column label="箱数" align="center" prop="boxCount"> <el-table-column label="箱数" align="center" prop="boxCount">
@ -180,7 +253,8 @@
<script setup name="SendOrder" lang="ts"> <script setup name="SendOrder" lang="ts">
import { listSendOrder, getSendOrder, delSendOrder, addSendOrder, updateSendOrder } from '@/api/amz/sendOrder'; import { listSendOrder, getSendOrder, delSendOrder, addSendOrder, updateSendOrder } from '@/api/amz/sendOrder';
import { SendOrderVO, SendOrderQuery, SendOrderForm } from '@/api/amz/sendOrder/types'; import { SendOrderVO, SendOrderQuery, SendOrderForm } from '@/api/amz/sendOrder/types';
import { formatText } from '@/utils/asinkj'; import { formatText, parseTime } from '@/utils/asinkj';
import { ElTable } from 'element-plus';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { send_status } = toRefs<any>(proxy?.useDict('send_status')); const { send_status } = toRefs<any>(proxy?.useDict('send_status'));

View File

@ -57,8 +57,6 @@
</template> </template>
<el-table v-loading="loading" :data="sendOrderList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="sendOrderList" @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" />-->
<!-- <el-table-column label="主键ID" align="center" prop="id" />-->
<el-table-column type="expand"> <el-table-column type="expand">
<template #default="props"> <template #default="props">
<el-card shadow="never"> <el-card shadow="never">
@ -89,6 +87,8 @@
<!-- </el-table-column>--> <!-- </el-table-column>-->
<el-table-column label="国家" align="center" prop="shipToAddress.countryCode" /> <el-table-column label="国家" align="center" prop="shipToAddress.countryCode" />
<el-table-column label="物流中心编码" align="center" prop="destination" /> <el-table-column label="物流中心编码" align="center" prop="destination" />
<el-table-column label="物流商地址" align="center" prop="address" />
<el-table-column label="物流商名称" align="center" prop="logisticsProviderName" />
<!-- <el-table-column label="关联的采购单" align="center">--> <!-- <el-table-column label="关联的采购单" align="center">-->
<!-- <template #default="scope">--> <!-- <template #default="scope">-->
<!-- <el-tag v-if="scope.row.sendOrders != null" type="success">已关联</el-tag>--> <!-- <el-tag v-if="scope.row.sendOrders != null" type="success">已关联</el-tag>-->
@ -111,11 +111,11 @@
<!-- </el-popover>--> <!-- </el-popover>-->
<!-- </template>--> <!-- </template>-->
<!-- </el-table-column>--> <!-- </el-table-column>-->
<el-table-column label="亚马逊货件状态" align="center" width="180"> <!-- <el-table-column label="亚马逊货件状态" align="center" width="180">-->
<template #default="scope"> <!-- <template #default="scope">-->
<el-tag>{{ scope.row.shipmentStatus }}</el-tag> <!-- <el-tag>{{ scope.row.shipmentStatus }}</el-tag>-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">--> <!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
<!-- <template #default="scope">--> <!-- <template #default="scope">-->
<!-- &lt;!&ndash; <el-tooltip content="修改" placement="top" v-if="scope.row.sendStatus === 'pending'">&ndash;&gt;--> <!-- &lt;!&ndash; <el-tooltip content="修改" placement="top" v-if="scope.row.sendStatus === 'pending'">&ndash;&gt;-->
@ -130,7 +130,6 @@
</el-card> </el-card>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="采购单号" align="center" prop="orderSn" /> <el-table-column label="采购单号" align="center" prop="orderSn" />
<el-table-column label="发货单号" align="center" prop="id" /> <el-table-column label="发货单号" align="center" prop="id" />
<el-table-column label="创建日期" align="center" prop="createTime" width="180"> <el-table-column label="创建日期" align="center" prop="createTime" width="180">
@ -145,18 +144,18 @@
</el-table-column> </el-table-column>
<el-table-column label="采购店铺" align="center" prop="storeName" /> <el-table-column label="采购店铺" align="center" prop="storeName" />
<el-table-column label="供应商名称" align="center" prop="sendName" /> <el-table-column label="供应商名称" align="center" prop="sendName" />
<el-table-column label="物流商名称" align="center" prop="logisticsProviderName"> <!-- <el-table-column label="物流商名称" align="center" prop="logisticsProviderName">-->
<template #default="{ row }"> <!-- <template #default="{ row }">-->
<el-popover placement="top" title="物流商地址" :width="200" trigger="click"> <!-- <el-popover placement="top" title="物流商地址" :width="200" trigger="click">-->
<template #reference> <!-- <template #reference>-->
<el-button v-if="row.logisticsProviderName !== null" text size="small" type="primary"> <!-- <el-button v-if="row.logisticsProviderName !== null" text size="small" type="primary">-->
{{ row.logisticsProviderName }} <!-- {{ row.logisticsProviderName }}-->
</el-button> <!-- </el-button>-->
</template> <!-- </template>-->
<div>{{ row.address || '暂无地址' }}</div> <!-- <div>{{ row.address || '暂无地址' }}</div>-->
</el-popover> <!-- </el-popover>-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column label="产品名称" align="center" prop="productName" /> <el-table-column label="产品名称" align="center" prop="productName" />
<el-table-column label="发货数量" align="center" prop="quantitySend" /> <el-table-column label="发货数量" align="center" prop="quantitySend" />
<el-table-column label="箱数" align="center" prop="boxCount"> <el-table-column label="箱数" align="center" prop="boxCount">
@ -262,7 +261,7 @@
<script setup name="SendOrder" lang="ts"> <script setup name="SendOrder" lang="ts">
import { listSendOrder, getSendOrder, delSendOrder, addSendOrder, updateSendOrder } from '@/api/amz/sendOrder'; import { listSendOrder, getSendOrder, delSendOrder, addSendOrder, updateSendOrder } from '@/api/amz/sendOrder';
import { SendOrderVO, SendOrderQuery, SendOrderForm } from '@/api/amz/sendOrder/types'; import { SendOrderVO, SendOrderQuery, SendOrderForm } from '@/api/amz/sendOrder/types';
import { formatText } from '@/utils/asinkj'; import { formatText, parseTime } from '@/utils/asinkj';
import { ElTable } from 'element-plus'; import { ElTable } from 'element-plus';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;

View File

@ -271,8 +271,11 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-tooltip content="向物流商询价" placement="top"> <el-tooltip content="向物流商询价" placement="top">
<el-button link type="primary" size="small" @click="handleUpdate(scope.row)" v-hasPermi="['amz:shipmentPlan:edit']"> </el-button> <el-button link type="primary" size="small" @click="handleUpdate(scope.row)" v-hasPermi="['amz:shipmentPlan:edit']"></el-button>
</el-tooltip> </el-tooltip>
<!-- <el-tooltip content="向物流商询价" placement="top">-->
<!-- <el-button link type="primary" size="small" @click="handleAskWeight(scope.row)" v-hasPermi="['amz:shipmentPlan:edit']">重量询价</el-button>-->
<!-- </el-tooltip>-->
<!-- <el-tooltip content="关联采购单" placement="top">--> <!-- <el-tooltip content="关联采购单" placement="top">-->
<!-- <el-button--> <!-- <el-button-->
<!-- link--> <!-- link-->
@ -325,6 +328,14 @@
filterable filterable
/> />
</el-form-item> </el-form-item>
<el-space fill>
<el-tag>通用询价只根据渠道进行报价 重量询价是包含重量信息</el-tag>
<el-form-item label="询价类型" prop="destination">
<el-select v-model="requestType" clearable placeholder="询价类型">
<el-option v-for="dict in request_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-space>
<!-- <el-form-item label="总箱子数量" prop="boxQuantity">--> <!-- <el-form-item label="总箱子数量" prop="boxQuantity">-->
<!-- <el-input v-model="form.boxQuantity" placeholder="请输入总箱子数量" />--> <!-- <el-input v-model="form.boxQuantity" placeholder="请输入总箱子数量" />-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
@ -380,7 +391,13 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="是否报关" prop="destination"> <el-form-item label="是否报关" prop="destination">
<el-switch v-model="customsFlag" active-value="1" inactive-value="0" /> <el-switch v-model="customsFlag" active-value="Y" inactive-value="N" />
</el-form-item>
<el-form-item label="询价类型" prop="destination">
<el-select v-model="requestType" clearable placeholder="询价类型">
<el-option v-for="dict in request_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item> </el-form-item>
<el-button :loading="buttonLoading" type="primary" @click="batchSendRest()">批量提交询价</el-button> <el-button :loading="buttonLoading" type="primary" @click="batchSendRest()">批量提交询价</el-button>
@ -551,6 +568,7 @@ import { formatText } from '@/utils/asinkj';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { biz_transport_channel } = toRefs<any>(proxy?.useDict('biz_transport_channel')); const { biz_transport_channel } = toRefs<any>(proxy?.useDict('biz_transport_channel'));
const { request_type } = toRefs<any>(proxy?.useDict('request_type'));
const { send_status } = toRefs<any>(proxy?.useDict('send_status')); const { send_status } = toRefs<any>(proxy?.useDict('send_status'));
@ -768,7 +786,7 @@ const pwidth = ref<string | number>();
const logisticsQuoteList = ref<LogisticsQuoteVO[]>([]); const logisticsQuoteList = ref<LogisticsQuoteVO[]>([]);
const inquiryRequestItemVOList = ref<InquiryRequestItemVO[]>([]); const inquiryRequestItemVOList = ref<any[]>([]);
const tableData = ref([ const tableData = ref([
{ {
@ -801,9 +819,10 @@ const batchSendRest = async () => {
quoteDate: shipDate.value, quoteDate: shipDate.value,
shipToAddress: item.shipToAddress, shipToAddress: item.shipToAddress,
shipmentId: item.shipmentId, shipmentId: item.shipmentId,
customsFlag: customsFlag.value customsFlag: customsFlag.value,
type: requestType.value
}; };
if (item.sendOrderId) { if (item.sendOrders.length > 0) {
inquiryRequestItemVOList.value.push(inquiryRequestItemVO); inquiryRequestItemVOList.value.push(inquiryRequestItemVO);
} }
}); });
@ -901,7 +920,7 @@ const channelDialogVisibleAction = () => {
ElMessage.error('请选择已关联采购单的数据'); ElMessage.error('请选择已关联采购单的数据');
return; return;
} }
requestType.value = 'general';
channelDialogVisible.value = true; channelDialogVisible.value = true;
console.log('channelDialogVisibleAction', selectionDatas.value.length); console.log('channelDialogVisibleAction', selectionDatas.value.length);
selectionDatas.value.forEach((item) => { selectionDatas.value.forEach((item) => {
@ -1049,6 +1068,7 @@ function transformChannels(channels) {
const currentDes = ref<string | number>(''); const currentDes = ref<string | number>('');
const currentFBAData = ref<ShipmentPlanVO>(); const currentFBAData = ref<ShipmentPlanVO>();
const requestType = ref<string | number>('general');
// //
const groupedChannels = computed(() => { const groupedChannels = computed(() => {
@ -1105,7 +1125,7 @@ const reset = () => {
/** 搜索按钮操作 */ /** 搜索按钮操作 */
const handleQuery = () => { const handleQuery = () => {
console.log('queryParams.value.gmtCreate', queryParams.value.gmtCreate); console.log('queryParams.value.gmtCreate', queryParams.value.gmtCreate);
queryParams.value.shipmentId = queryParams.value.shipmentId.trim(); queryParams.value.shipmentId = queryParams.value.shipmentId?.trim();
queryParams.value.pageNum = 1; queryParams.value.pageNum = 1;
getList(); getList();
}; };
@ -1173,7 +1193,8 @@ const checkPrice = async () => {
channelId: channel, channelId: channel,
quoteDate: shipDate.value, quoteDate: shipDate.value,
shipToAddress: currentFBAData.value.shipToAddress, shipToAddress: currentFBAData.value.shipToAddress,
shipmentId: currentFBAData.value.shipmentId shipmentId: currentFBAData.value.shipmentId,
type: requestType.value
}; };
inquiryRequestItemVOList.value.push(inquiryRequestItemVO); inquiryRequestItemVOList.value.push(inquiryRequestItemVO);
}); });
@ -1260,10 +1281,11 @@ const handleUpdate = async (row?: ShipmentPlanVO) => {
selectedChannel.value = res.data.channelId; selectedChannel.value = res.data.channelId;
console.log('selectedChannel', selectedChannel); console.log('selectedChannel', selectedChannel);
dialog.visible = true; dialog.visible = true;
dialog.title = '编辑货件计划开始询价'; dialog.title = '询价';
console.log(row); console.log(row);
currentFBAData.value = row; currentFBAData.value = row;
currentDes.value = row.destination; currentDes.value = row.destination;
requestType.value = 'general';
}; };
const linkShipmentPlanVO = ref<ShipmentPlanVO>(); const linkShipmentPlanVO = ref<ShipmentPlanVO>();

View File

@ -806,46 +806,10 @@ const checkPrice = async () => {
// return; // return;
// } // }
const res = await queryLogisticsQuoteWithDes(currentDes.value, shipDate.value); const res = await queryLogisticsQuoteWithDes(currentDes.value, shipDate.value,currentFBAData.value.shipmentId);
console.log('查询报价单', res); console.log('查询报价单', res);
if (res.total == 0) { if (res.total == 0) {
// //
// const requestQuote = await queryWithDesAndChannel(currentDes.value, currentFBAData.value.channelId, shipDate.value);
// console.log('', requestQuote);
// if (requestQuote.total == 0) {
// console.log('');
// channelDialogVisible.value = false;
// ElMessageBox.confirm(',', '', {
// confirmButtonText: '',
// cancelButtonText: '',
// type: 'warning'
// type: 'success',
// message: ''
// });
// }
// })
// .catch(() => {
// // ElMessage({
// // type: 'info',
// // message: 'Delete canceled'
// // });
// });
// } else {
// //
// // channelDialogVisible.value = false;
// // dialogTableVisible.value = true;
// // tableData.value = requestQuote.rows;
// // console.log('requestQuote.rows', requestQuote.rows);
// // console.log('tableData', tableData.value);
// ElMessage.success('');
// } // })
// .then(async () => {
// const res2 = await createWithDesAndChannel(currentDes.value, currentFBAData.value.channelId, shipDate.value);
// console.log('checkPriceEnd2', res2);
// if (res2.code == 200) {
// ElMessage({
// ElMessage.warning('');
ElNotification({ ElNotification({
title: '警告', title: '警告',
message: '暂时没有物流商报价', message: '暂时没有物流商报价',