Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Fedex
/
EcomWeb
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
zhanbo.xu
2025-06-17 15:03:01 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
395f54d43fe5e55ed7eb93ea4b155bb1a95c8cab
395f54d4
1 parent
32d5d4b9
feat: 新增PDD
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
1367 additions
and
149 deletions
src/api/pdd-info.js
src/router/index.js
src/views/pdd-info/detail.vue
src/views/pdd-info/index.vue
src/api/pdd-info.js
0 → 100644
View file @
395f54d
import
request
from
"@/utils/request"
;
// GET
// /customerDeclareData/info/{customerDeclareDataId}
// 查询客户申报数据信息
export
function
getCustomerDeclareDataId
({
customerDeclareDataId
})
{
return
request
({
url
:
`/bus-customer/customerDeclareData/info/
${
customerDeclareDataId
}
`
,
method
:
"get"
,
});
}
// POST
// /customerDeclareData/search
// 查询客户申报数据列表
export
function
getPddInfo
(
data
)
{
return
request
({
url
:
"/bus-customer/customerDeclareData/search"
,
method
:
"post"
,
data
:
data
,
});
}
src/router/index.js
View file @
395f54d
...
...
@@ -5,7 +5,6 @@ Vue.use(Router);
/* Layout */
import
Layout
from
"@/layout"
;
import
ParentView
from
"@/components/ParentView"
;
/**
* Note: 路由配置项
...
...
@@ -198,6 +197,14 @@ export const constantRoutes = [
hidden
:
true
,
meta
:
{
title
:
"运抵详情"
,
icon
:
""
},
},
{
path
:
"/pdd-detail"
,
component
:
(
resolve
)
=>
require
([
"@/views/pdd-info/detail.vue"
],
resolve
),
name
:
"PddListDetail"
,
hidden
:
true
,
meta
:
{
title
:
"PDD数据详情"
,
icon
:
""
},
},
],
},
{
...
...
src/views/pdd-info/detail.vue
View file @
395f54d
<template>
<div class="entry" v-loading="loadings.entryLoading">
<div class="entryTitle">
<div>详情</div>
<div>
<el-button class="entrySaveButton" @click="back">返 回</el-button>
</div>
</div>
<section :class="{ partsHidden: !isFold }">
<el-form
class="fedexFormStyle fedexFormEditStyle"
ref="editForm"
:model="formData"
:rules="formRules"
label-position="top"
size="small"
>
<el-row :gutter="5">
<el-col :span="3">
<Formitem label="电商企业名称" prop="ebccode">
<el-select
type="text"
id="inputInner--ebccode"
v-model="formData.ebccode"
clearable
filterable
placeholder=""
>
<el-option
v-for="(item, index) in ebcDataList"
:key="index"
:label="item.ecomEntName"
:value="item.ecomEntCode"
></el-option>
</el-select>
</Formitem>
</el-col>
<!-- 订单编号 -->
<el-col :span="3">
<Formitem label="订单编号" prop="logisticsCode">
<el-input
type="text"
class="inputShadow"
id="inputInner--logisticsCode"
resize="none"
v-model="formData.logisticsCode"
disabled
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<!-- 电商平台名称 -->
<el-col :span="3">
<Formitem label="物流运单编号" prop="logisticsNo">
<el-input
type="text"
class="inputShadow"
id="inputInner--logisticsNo"
resize="none"
v-model="formData.logisticsNo"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<!-- 电商平台代码、电商平台名称、生产销售企业代码、生产销售企业名称、申报业务类型 -->
<el-col :span="3">
<Formitem label="电商平台代码" prop="ebpCode">
<el-input
type="text"
class="inputShadow"
id="inputInner--ebpCode"
resize="none"
v-model="formData.ebpCode"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="6">
<Formitem label="电商平台名称" prop="ebpName">
<el-input
type="text"
class="inputShadow"
id="inputInner--ebpName"
resize="none"
v-model="formData.ebpName"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5">
<el-col :span="3">
<Formitem
label="生产销售企业代码"
prop="productionSaleEnterpriseCode"
>
<el-input
type="text"
class="inputShadow"
id="inputInner--productionSaleEnterpriseCode"
resize="none"
v-model="formData.productionSaleEnterpriseCode"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="6">
<Formitem label="生产销售企业名称" prop="ebcName">
<el-input
type="text"
class="inputShadow"
id="inputInner--ebcName"
resize="none"
v-model="formData.ebcName"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="3">
<Formitem label="运抵国(地区)" prop="destinationCountryRegion">
<el-select
type="text"
id="inputInner--destinationCountryRegion"
v-model="formData.destinationCountryRegion"
clearable
filterable
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict
.COUNTRY_REGION_CODE"
:key="index"
:label="item.itemChineseName"
:value="item.itemCode"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="3">
<Formitem label="指运港代码" prop="portCode">
<el-select
type="text"
id="inputInner--portCode"
v-model="formData.portCode"
clearable
filterable
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict
.COUNTRY_REGION_CODE"
:key="index"
:label="item.itemChineseName"
:value="item.itemCode"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="3">
<Formitem label="贸易方式" prop="appType">
<el-input
type="text"
class="inputShadow"
id="inputInner--appType"
resize="none"
v-model="formData.appType"
disabled
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="3">
<Formitem label="运费" prop="freight">
<el-input
type="number"
class="inputShadow"
id="inputInner--freight"
resize="none"
v-model="formData.freight"
:min="0"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="3">
<Formitem label="运费币制" prop="freightCurrency">
<el-select
type="text"
id="inputInner--freightCurrency"
v-model="formData.freightCurrency"
clearable
filterable
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict.CURRENCY"
:key="index"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="3">
<Formitem label="运费标志" prop="freightTag">
<el-select
type="text"
id="inputInner--freightTag"
v-model="formData.freightTag"
clearable
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict.DECLARE_F_FLAG"
:key="index"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="3">
<Formitem label="保费" prop="insuredfee">
<el-input
type="number"
class="inputShadow"
id="inputInner--insuredfee"
resize="none"
v-model="formData.insuredfee"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="3">
<Formitem label="保费币制" prop="insuredfeeCurrency">
<el-select
type="text"
id="inputInner--insuredfeeCurrency"
v-model="formData.insuredfeeCurrency"
clearable
filterable
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict.CURRENCY"
:key="index"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="3">
<Formitem label="保费标志" prop="insuredfeeTag">
<el-select
type="text"
id="inputInner--insuredfeeTag"
v-model="formData.insuredfeeTag"
clearable
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict.DECLARE_F_FLAG"
:key="index"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="3">
<Formitem label="商品金额" prop="goodsValue">
<el-input
type="number"
class="inputShadow"
id="inputInner--goodsValue"
resize="none"
v-model="formData.goodsValue"
disabled
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<!-- 运杂费 -->
<el-col :span="3">
<Formitem label="运杂费" prop="miscellaneousFreight">
<el-input
type="number"
class="inputShadow"
id="inputInner--miscellaneousFreight"
resize="none"
v-model="formData.miscellaneousFreight"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<!-- 币制 -->
<el-col :span="3">
<Formitem label="币制" prop="currency">
<el-select
type="text"
id="inputInner--currency"
v-model="formData.currency"
filterable
clearable
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict.CURRENCY"
:key="index"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="6">
<Formitem label="主要货物信息" prop="mainGoodsInfo">
<el-input
type="text"
class="inputShadow"
id="inputInner--mainGoodsInfo"
resize="none"
v-model="formData.mainGoodsInfo"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="3">
<Formitem label="件数" prop="packNo">
<el-input
class="inputShadow"
id="inputInner--packNo"
resize="none"
maxlength="9"
v-model.number="formData.packNo"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="3">
<Formitem label="包装种类代码" prop="packageTypeCode">
<el-select
type="text"
id="inputInner--packageTypeCode"
v-model="formData.packageTypeCode"
clearable
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict.PACKAGE_TYPE_CODE"
:key="index"
:label="item.itemChineseName"
:value="item.itemCode"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="3">
<Formitem label="毛重(公斤)" prop="weight">
<el-input
type="number"
class="inputShadow"
id="inputInner--weight"
resize="none"
v-model="formData.weight"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="3">
<Formitem label="净重(公斤)" prop="netWeight">
<el-input
type="number"
class="inputShadow"
id="inputInner--netWeight"
resize="none"
v-model="formData.netWeight"
disabled
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="6">
<Formitem label="备注" prop="remark">
<el-input
type="text"
class="inputShadow"
id="inputInner--remark"
resize="none"
v-model="formData.remark"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<!-- ===================== -->
<el-col :span="3">
<Formitem label="出口日期" prop="exportDate">
<el-date-picker
class="inputInner--createTime"
id="inputInner--exportDate"
v-model="formData.exportDate"
type="date"
format="yyyy-MM-dd"
prefix-icon="none"
value-format="yyyy-MM-dd"
/>
</Formitem>
</el-col>
<!-- 商品金额 -->
</el-row>
<el-row :gutter="5">
<el-col :span="3">
<Formitem label="航班号" prop="flightNumber">
<el-input
type="text"
class="inputShadow"
id="inputInner--flightNumber"
resize="none"
v-model="formData.flightNumber"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<!-- 备注 -->
<el-col :span="3">
<Formitem label="提运单号" prop="billno">
<el-input
type="text"
class="inputShadow"
id="inputInner--billno"
resize="none"
v-model="formData.billno"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="3">
<Formitem label="总包号" prop="totalPackageNo">
<el-input
type="text"
class="inputShadow"
id="inputInner--totalPackageNo"
resize="none"
v-model="formData.totalPackageNo"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="3">
<Formitem label="监管场所代码" prop="regulatoryVenueCode">
<el-input
type="text"
class="inputShadow"
id="inputInner--regulatoryVenueCode"
resize="none"
v-model="formData.regulatoryVenueCode"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="3">
<Formitem label="许可证号" prop="licenseKey">
<el-input
type="text"
class="inputShadow"
id="inputInner--licenseKey"
resize="none"
v-model="formData.licenseKey"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
</el-row>
</el-form>
</section>
<div class="fold-unfold">
<img
v-if="isFold"
src="@/assets/images/fold.png"
@click="() => (isFold = false)"
alt=""
/>
<img
v-if="!isFold"
src="@/assets/images/unfold.png"
@click="() => (isFold = true)"
alt=""
/>
</div>
<div class="entryTitle" style="margin-top: 10px">商品明细</div>
<section style="position: relative">
<Table
class="fedexDetialTable fedexSreachTable editableTable"
ref="entryTable"
:pagination="false"
:data="detailData"
:headerData="detialHeaderData"
:border="true"
:order="true"
:noWidth="0"
:rowKey="'gnum'"
:expandRowKeys="expandRowKeys"
>
<template slot="rowDataEdit" slot-scope="props">
<RowDataEditForm
ref="rowEditForm"
:rowDatas="props"
@cancelEditRowData="cancelEditRowData"
@rowFormDataSave="rowFormDataSave"
@updateLastItemValid="handleUpdateLastItemValid"
/>
</template>
<template v-slot:destinationCountryRegionCode="scope">
<span>{{
mapDicDatas(
$store.getters.dict.COUNTRY_REGION_CODE,
scope.row.destinationCountryRegionCode
)
}}</span>
</template>
<template v-slot:unit="scope">
<span>{{
mapDicDatas($store.getters.dict.MEASUREMENT_UNIT, scope.row.unit)
}}</span>
</template>
<template v-slot:unitLegalFirstCode="scope">
<span>{{
mapDicDatas(
$store.getters.dict.MEASUREMENT_UNIT,
scope.row.unitLegalFirstCode
)
}}</span>
</template>
<template v-slot:unitLegalSecondCode="scope">
<span>{{
mapDicDatas(
$store.getters.dict.MEASUREMENT_UNIT,
scope.row.unitLegalSecondCode
)
}}</span>
</template>
<template v-slot:currency="scope">
<span>{{
mapCurrencyDatas($store.getters.dict.CURRENCY, scope.row.currency)
}}</span>
</template>
<template slot="optionColumn">
<el-table-column align="left" label="操作" width="100">
<template slot-scope="scope">
<el-button type="text" @click="updateRow(scope.row)">
修改
</el-button>
<el-button type="text" @click="deleteRow(scope.row)">
删除
</el-button>
</template>
</el-table-column>
</template>
</Table>
</section>
<div class="addNewItem">
<i class="el-icon-circle-plus-outline" @click="addNewItem"></i>
<span @click="addNewItem">添加新商品</span>
</div>
<div style="margin-top: 20px; text-align: center">
<el-button
class="entrySaveButton entrySaveButton-background revokeSubmitBtn"
type="primary"
@click="submitEditedReportDatas"
>保存</el-button
>
<el-button class="entrySaveButton" @click="back">返回</el-button>
</div>
</div>
</template>
<script>
import RowDataEditForm from "./RowDataEditForm.vue";
import {
getCustomerList,
getPortList,
getDeclareData,
updateDeclareData,
} from "@/api/declareData-api.js";
export default {
name: "",
components: { RowDataEditForm },
data() {
var checkNegativeNum = (rule, value, callback) => {
if (value < 0) {
callback(new Error("数值不能为负"));
} else {
callback();
}
};
var checkInsuredFee = (rule, value, callback) => {
if (value < 0) {
callback(new Error("数值不能为负"));
}
if (value !== "" && value !== undefined) {
const regex = /^\d{0,14}(\.\d{1,5})?$/;
if (!regex.test(value)) {
callback(new Error("整数最多14位,小数最多5位"));
} else {
callback();
}
} else {
callback();
}
};
var checkPackNo = (rule, value, callback) => {
if (!Number.isInteger(value)) {
callback(new Error("请输入整数值"));
} else {
if (value < 0) {
callback(new Error("数值不能为负"));
} else {
callback();
}
}
};
return {
ebcDataList: [],
declareCustomsDataList: [],
declareId: null,
formData: {
appType: 9610,
},
formRules: {
ebccode: [
{ required: true, message: "请选择电商企业", trigger: "change" },
],
logisticsCode: [
{ required: true, message: "请选择物流企业", trigger: "change" },
],
orderNo: [
{ required: true, message: "请输入订单编号", trigger: "blur" },
{ max: 60, message: "长度不能超过60个字符", trigger: "blur" },
],
logisticsNo: [
{ required: true, message: "请输入物流运单编号", trigger: "blur" },
{ max: 80, message: "长度不能超过80个字符", trigger: "blur" },
],
declareCustomsCode: [
{ required: true, message: "请选择申报地海关", trigger: "change" },
],
exportDate: [{ message: "请选择出口日期", trigger: "change" }],
goodsValue: [
{ required: true, message: "请输入商品金额", trigger: "blur" },
],
miscellaneousFreight: [
{ validator: checkNegativeNum, trigger: "blur" },
],
currency: [
{ required: true, message: "请选择币制", trigger: "change" },
],
mainGoodsInfo: [
{ required: true, message: "请输入主要物品信息", trigger: "blur" },
{ max: 200, message: "长度不能超过200个字符", trigger: "blur" },
],
flightNumber: [
{ required: true, message: "请输入航班号", trigger: "blur" },
{ max: 32, message: "长度不能超过32个字符", trigger: "blur" },
],
billno: [
{ required: true, message: "请输入提运单号", trigger: "blur" },
{ max: 37, message: "长度不能超过37个字符", trigger: "blur" },
],
totalPackageNo: [
{ max: 37, message: "长度不能超过37个字符", trigger: "blur" },
],
regulatoryVenueCode: [
{ max: 10, message: "长度不能超过10个字符", trigger: "blur" },
],
licenseKey: [
{ max: 19, message: "长度不能超过19个字符", trigger: "blur" },
],
destinationCountryRegion: [
{ required: true, message: "请选择运抵国", trigger: "change" },
],
portCode: [
{ required: true, message: "请选择运指运港代码", trigger: "change" },
],
freight: [
{ required: true, message: "请输入运费", trigger: "blur" },
{ validator: checkNegativeNum, trigger: "blur" },
],
freightCurrency: [
{ required: true, message: "请选择运费币制", trigger: "change" },
],
freightTag: [
{ required: true, message: "请选择运费标志", trigger: "change" },
],
insuredfee: [
{ required: true, message: "请输入保费", trigger: "blur" },
{ validator: checkInsuredFee, trigger: "blur" },
],
insuredfeeCurrency: [
{ required: true, message: "请输入保费币制", trigger: "blur" },
],
insuredfeeTag: [
{ required: true, message: "请输选择保费标志", trigger: "change" },
],
packageTypeCode: [
{ required: true, message: "请选择包装种类代码", trigger: "change" },
],
packNo: [
{ required: true, message: "请输入件数", trigger: "blur" },
{ validator: checkPackNo, trigger: "blur" },
],
weight: [
{ required: true, message: "请输入毛重", trigger: "blur" },
{ validator: checkNegativeNum, trigger: "blur" },
],
netWeight: [{ required: true, message: "请输入净重", trigger: "blur" }],
remark: [
{ max: 1000, message: "长度不能超过1000个字符", trigger: "blur" },
],
ebpCode: [
{ required: true, message: "请输入电商平台代码", trigger: "blur" },
],
ebpName: [
{ required: true, message: "请输入电商平台名称", trigger: "blur" },
],
productionSaleEnterpriseCode: [
{
required: true,
message: "请输入生产销售企业代码",
trigger: "blur",
},
],
ebcName: [
{
required: true,
message: "请输入生产销售企业名称",
trigger: "blur",
},
],
declareBusinessType: [
{ required: true, message: "请选择申报业务类型", trigger: "change" },
],
},
detailData: [],
detialHeaderData: [
{
value: "rowDataEdit",
expand: true,
width: 0,
},
{
name: "企业商品货号",
value: "enterpriseProductCode",
width: "",
align: "left",
},
{
name: "企业商品名称",
value: "enterpriseProductName",
width: "",
align: "left",
},
{
name: "企业商品描述",
value: "enterpriseProductDescribe",
width: "",
align: "left",
},
{
name: "商品名称",
value: "productName",
width: "",
align: "left",
},
{
name: "商品编码",
value: "productCode",
width: "",
align: "left",
},
{
name: "规格型号",
value: "model",
width: "",
align: "left",
},
{
name: "账册备案料号",
value: "accountBookMaterialNumber",
width: "",
align: "left",
},
{
name: "条形码",
value: "barCode",
width: "",
align: "left",
},
{
name: "目的国(地区)代码",
value: "destinationCountryRegionCode",
width: "",
align: "left",
slot: true,
},
{
name: "计量单位",
value: "unit",
width: "",
align: "left",
slot: true,
},
{
name: "数量",
value: "qty",
width: "",
align: "left",
},
{
name: "法定数量",
value: "legalQty",
width: "",
align: "left",
},
{
name: "法定计量单位",
value: "unitLegalFirstCode",
width: "",
align: "left",
slot: true,
},
{
name: "第二数量",
value: "secondQty",
width: "",
align: "left",
},
{
name: "第二计量单位",
value: "unitLegalSecondCode",
width: "",
align: "left",
slot: true,
},
{
name: "币制",
value: "currency",
width: "",
align: "left",
slot: true,
},
{
name: "单价",
value: "price",
width: "",
align: "left",
},
{
name: "总价",
value: "totalPrice",
width: "",
align: "left",
},
{
name: "净重",
value: "netWeight",
width: "",
align: "left",
},
{
name: "备注",
value: "remark",
width: "",
align: "left",
},
],
loadings: {
entryLoading: false,
},
logtableType: true,
expandRowKeys: [],
isFold: false,
// 用于保存原始数据
originalDetailData: {},
// 当前编辑行的 gnum
currentRowKey: null,
lastItemValid: true, // 默认值为 true,表示没有新增项或上一次新增项通过了校验
};
},
created() {
if (this.$route.params.data) {
this.declareId = this.$route.params.data.declareId;
this.queryDeclareData(this.declareId);
this.queryCustomerList();
this.queryPortList();
} else {
this.back();
}
},
beforeRouteLeave(to, from, next) {
if (to.name === "ReportingData") {
// 设置一个标志表示需要刷新数据
to.meta.needsRefresh = true;
}
next();
},
methods: {
mapDicDatas(dicArr, code) {
if (code != "" && code) {
return dicArr.filter((item) => item.itemCode == code)[0]
.itemChineseName;
} else {
return "";
}
},
mapCurrencyDatas(dicArr, code) {
if (code != "") {
return dicArr.filter((item) => item.itemValue == code)[0]
.itemChineseName;
} else {
return "";
}
},
//获取客户下拉列表数据
queryCustomerList() {
getCustomerList()
.then((res) => {
if (res.code == 200) {
this.ebcDataList = res.data.value;
} else {
this.ebcDataList = [];
}
})
.catch((err) => {
console.log(err);
});
},
//获取口岸表数据
queryPortList() {
getPortList()
.then((res) => {
if (res.code == 200) {
this.declareCustomsDataList = res.data.value;
} else {
this.declareCustomsDataList = [];
}
})
.catch((err) => {
console.log(err);
});
},
//获取申报数据
queryDeclareData(declareId) {
getDeclareData({ declareId })
.then((res) => {
// console.log(1111, res)
if (res.code == 200) {
res.data.declare.orderNo = res.data.declare.orderno;
this.formData = res.data.declare;
this.formData.appType = 9610;
this.detailData = res.data.product.length
? res.data.product.map((item, index) => {
item.gnum = index + 1;
return item;
})
: [];
} else {
this.detailData = [];
this.formData = {};
}
})
.catch((err) => {
console.log(err);
});
},
hiddenLogTable() {
this.logtableType = !this.logtableType;
},
back() {
this.$router.go(-1);
},
//添加新商品
async addNewItem() {
// 如果上一次新增的 item 没有通过校验,则不允许新增
//console.log("this",this.lastItemValid)
// if (!this.lastItemValid) {
// console.log(11)
// this.$message.warning('请先完善新增的商品信息');
// return;
// }
// 获取最后一个 item 的引用
const lastItem = this.detailData[this.detailData.length - 1];
// 如果存在上一次新增的 item,则进行校验
if (lastItem) {
// 获取 RowDataEditForm 组件的引用
const rowEditForm = this.$refs.rowEditForm;
if (rowEditForm) {
// 调用校验方法
const isValid = await rowEditForm.validate();
// console.log("y:",this.lastItemValid)
// console.log("!",isValid)
if (!isValid) {
// console.log(22)
this.lastItemValid = false; // 标记上一次新增的 item 未通过校验
this.$message.warning("请先完善新增的商品信息");
return;
}
}
}
// 校验通过,允许新增 item
let orderNum =
this.detailData.at(-1) === undefined
? 1
: this.detailData.at(-1).gnum + 1;
this.detailData.push({
gnum: orderNum,
accountBookMaterialNumber: "",
barCode: "",
currency: "",
destinationCountryRegionCode: "",
enterpriseProductCode: "",
enterpriseProductDescribe: "",
enterpriseProductName: "",
legalQty: 0,
secondQty: 0,
model: "",
netWeight: 0,
price: 0,
productCode: "",
productName: "",
qty: 0,
remark: "",
totalPrice: 0,
unit: "",
isNew: true, // 添加 isNew 标志
});
this.$nextTick(() => {
this.expandRowKeys = [orderNum];
this.lastItemValid = true; // 重置标志位
});
},
updateRow(row) {
if (this.expandRowKeys.length > 0) return;
this.expandRowKeys = [row.gnum];
this.currentRowKey = row.gnum; // 设置当前行的 gnum
// 保存原始数据
this.originalDetailData[row.gnum] = { ...row };
let obj = {};
for (let key in row) {
obj[key] = row[key];
}
this.$nextTick(() => {
this.$refs.rowEditForm.tableRowformData = obj;
// const table = this.$refs.entryTable.$el.querySelector('.el-table__body-wrapper');
// table.scrollTop = row.gnum*51+10
});
},
getTotalNumber() {
let totalNetWeight = 0;
let totalGoodsValue = 0;
for (let i = 0; i < this.detailData.length; i++) {
totalNetWeight += Number(this.detailData[i].netWeight);
totalGoodsValue += Number(this.detailData[i].totalPrice);
}
this.formData.netWeight = totalNetWeight.toFixed(5);
this.formData.goodsValue = totalGoodsValue.toFixed(5);
},
deleteRow(row) {
this.detailData = this.detailData
.filter((item) => item.gnum != row.gnum)
.map((item, index) => {
item.gnum = index + 1;
return item;
});
this.$nextTick(() => {
this.getTotalNumber();
this.expandRowKeys = [];
this.detailData.length;
this.lastItemValid = this.detailData.length === row.index;
});
},
rowFormDataSave(props) {
this.detailData.map((item) => {
if (item.gnum == props.gnum) {
item = Object.assign(item, props.tableRowformData);
return item;
}
});
this.expandRowKeys = [];
this.$nextTick(() => {
this.lastItemValid = true;
this.getTotalNumber();
});
},
cancelEditRowData(index) {
this.lastItemValid = true; // 重置标志位
this.expandRowKeys = [];
if (index !== undefined) {
const gnum = this.detailData[index].gnum;
if (this.detailData[index].isNew) {
// 如果是新添加的项,则删除该项
this.detailData.splice(index, 1);
} else {
// 否则,恢复原始数据
if (this.originalDetailData[gnum]) {
this.detailData[index] = { ...this.originalDetailData[gnum] };
delete this.originalDetailData[gnum]; // 删除保存的原始数据
}
}
}
},
// 更新 lastItemValid
handleUpdateLastItemValid(isValid) {
this.lastItemValid = isValid;
},
//提交更新数据
submitEditedReportDatas() {
this.$refs.editForm.validate((valid) => {
if (valid) {
let data = {
declare: this.formData,
product: this.detailData,
};
updateDeclareData(data)
.then((res) => {
if (res.code == 200) {
this.msgSuccess("数据更新成功");
this.queryDeclareData(this.declareId);
this.lastItemValid = true;
} else {
this.alertWarningMsg(res.message);
}
})
.catch((err) => {
console.log(err);
});
} else {
return false;
}
});
},
//取消编辑
cancelEditedReportDatas() {},
},
};
</script>
<style scoped lang="scss">
.entry {
width: 100%;
height: 100%;
padding: 10px;
background-color: #fff;
overflow: auto;
.entryInformation {
width: 100%;
height: 100%;
}
.entryTitle {
display: flex;
justify-content: space-between;
font-weight: 600;
font-weight: 16px;
color: #000;
margin-bottom: 10px;
}
.titleBorder {
border-bottom: 1px solid #333;
}
}
.addNewItem {
display: flex;
justify-content: flex-start;
align-items: center;
color: #007ab7;
line-height: 38px;
i {
margin-right: 3px;
}
span {
font-size: 13px;
font-weight: 500;
cursor: pointer;
}
}
.formRowDataOperate {
text-align: right;
padding: 0 20px;
a {
color: #007ab7;
font-weight: 600;
&:first-child {
margin-right: 5px;
}
}
}
.fedexFormEditStyle .el-form-item:has(.formError) {
margin-bottom: 30px !important;
}
.fedexFormEditStyle .el-form-item .formError {
padding: 0 0.9375rem !important;
}
.partsHidden {
height: 164px;
overflow: hidden;
}
.fold-unfold {
display: flex;
justify-content: center;
padding-top: 8px;
cursor: pointer;
img {
width: 22px;
}
}
</style>
...
...
src/views/pdd-info/index.vue
View file @
395f54d
...
...
@@ -9,13 +9,13 @@
>
<el-row class="row-border">
<el-col :span="5">
<Formitem label="
提运单号" prop="bill
No">
<Formitem label="
订单编号" prop="order
No">
<el-input
type="text"
class="inputShadow"
id="inputInner--
bill
No"
id="inputInner--
order
No"
resize="none"
v-model="sreachFormData.
bill
No"
v-model="sreachFormData.
order
No"
clearable
placeholder=""
></el-input>
...
...
@@ -23,43 +23,49 @@
</el-col>
<el-col :span="5">
<Formitem label="物流运单编号" prop="logisticsNo">
<FormTextareaInput
<
!-- <
FormTextareaInput
:formData="sreachFormData"
dataKey="logisticsNo"
@formChange="formChange"
/>
/> -->
<el-input
type="text"
class="inputShadow"
id="inputInner--logisticsNo"
resize="none"
v-model="sreachFormData.logisticsNo"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<!-- 0未转发、未回传1已转发、已回传 -->
<el-col :span="5">
<Formitem label="
回执状态" prop="return
Status">
<Formitem label="
转发状态" prop="forward
Status">
<el-select
type="text"
id="inputInner--
return
Status"
v-model="sreachFormData.
return
Status"
id="inputInner--
forward
Status"
v-model="sreachFormData.
forward
Status"
clearable
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict.RECEIPT_STATUS"
:key="index"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
<el-option label="未转发" value="0"></el-option>
<el-option label="已转发" value="1"></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="5">
<Formitem label="
电子口岸编号" prop="preNo
">
<el-
inpu
t
<Formitem label="
转发状态" prop="returnStatus
">
<el-
selec
t
type="text"
class="inputShadow"
id="inputInner--preNo"
resize="none"
v-model="sreachFormData.preNo"
id="inputInner--returnStatus"
v-model="sreachFormData.returnStatus"
clearable
placeholder=""
></el-input>
>
<el-option label="未回传" value="0"></el-option>
<el-option label="已回传" value="1"></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="2">
...
...
@@ -86,6 +92,23 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="5">
<Formitem label="创建时间" prop="createTime" :activeType="true">
<el-date-picker
class="inputInner--createTime"
id="inputInner-edit-createTime"
v-model="sreachFormData.createTime"
type="daterange"
format="yyyy-MM-dd"
prefix-icon="none"
value-format="yyyy-MM-dd"
range-separator="至"
@change="dateChange"
/>
</Formitem>
</el-col>
</el-row>
</el-form>
<Table
...
...
@@ -106,29 +129,9 @@
:selectFixed="false"
:rowSelectDataType="false"
>
<template v-slot:returnStatus="scope">
<TablePopover
ref="returnStatusPopover"
dataKey="returnStatus"
:parentDom="$refs.entryTable"
:receiptDataHead="receiptDataHead"
:rowData="scope.row"
:tableData="tableData"
@popoverChange="popoverChange"
@popoverClose="popoverClose"
>
<div slot="title">
<span style="font-weight: 700; color: #515a6e">提运单号:</span
>{{ scope.row.billNo }}
</div>
<div slot="buttonLabel">
{{ scope.row.returnStatus }}
</div>
</TablePopover>
</template>
<template v-slot:billNo="scope">
<template v-slot:logisticsNo="scope">
<el-button type="text" @click="view(scope.row)">{{
scope.row.
bill
No
scope.row.
logistics
No
}}</el-button>
</template>
</Table>
...
...
@@ -136,20 +139,18 @@
</template>
<script>
import {
getExportArrivalInList,
getExportArrivalInReceipt,
} from "@/api/arrivalList-api";
import { getPddInfo } from "@/api/pdd-info";
export default {
name: "ArrivalList",
components: {},
data() {
return {
sreachFormData: {
logisticsNo: []
,
billNo
: "",
orderNo: ""
,
forwardStatus
: "",
returnStatus: "",
preNo: "",
logisticsNo: "",
createTime: [],
},
page: {
pageIndex: 1,
...
...
@@ -157,74 +158,55 @@ export default {
total: 0,
},
tableData: [],
receiptDataHead: [
{
name: "回执状态",
value: "returnStatus",
width: "120",
align: "left",
},
{
name: "状态时间",
value: "returnTime",
width: "",
align: "left",
},
{
name: "回执描述",
value: "returnInfo",
width: "",
align: "left",
},
],
headerData: [
{
name: "
回执状态
",
value: "
returnStatus
",
name: "
物流运单编号
",
value: "
logisticsNo
",
width: "",
align: "left",
slot: true,
},
{
name: "
提运单
号",
value: "
bill
No",
name: "
订单编
号",
value: "
order
No",
width: "",
align: "left",
slot: true,
},
{
name: "
物流运单编号
",
value: "
logisticsNo
",
name: "
运抵国(地区)
",
value: "
country
",
width: "",
align: "left",
},
{
name: "
电商企业代码
",
value: "
ebccode
",
name: "
件数
",
value: "
packNo
",
width: "",
align: "left",
},
{
name: "
电子口岸编号
",
value: "
preNo
",
name: "
毛重(公斤)
",
value: "
grossWeight
",
width: "",
align: "left",
},
{
name: "
监管场所经营人代码
",
value: "
operatorCode
",
name: "
净重(公斤)
",
value: "
netWeight
",
width: "",
align: "left",
},
{
name: "
监管场所经营人名称
",
value: "
operatorName
",
name: "
转发状态
",
value: "
forwardStatus
",
width: "",
align: "left",
},
{
name: "
监管场所代码
",
value: "
loctNo
",
name: "
回传状态
",
value: "
returnStatus
",
width: "",
align: "left",
},
...
...
@@ -239,7 +221,6 @@ export default {
searchLoading: false,
},
tableMaxheight: null,
originalLogisticsNo: "", // 用于保存原始的 logisticsNo 字符串
};
},
created() {
...
...
@@ -249,72 +230,30 @@ export default {
this.tableMaxheight = window.innerHeight - 300;
},
methods: {
popoverClose(val) {
this.tableData.forEach((item) => {
item.returnStatusPopoverType = false;
item.popoverData = [];
});
this.$refs.entryTable.$refs.tables.$refs.bodyWrapper.style.overflowY =
"auto";
},
popoverChange(val) {
console.log(val);
this.tableData = val.tableData;
this.receiptApi(val.data.copNo, val.status)
.then((res) => {
val.tableData.forEach((item) => {
if (item.declareId == val.data.declareId) {
item.popoverData = res;
}
});
this.tableData = val.tableData;
})
.finally(() => {
this.$nextTick(() => {
this.$store.dispatch("setLoadingState", false);
this.$refs.returnStatusPopover.tableLoading = false;
});
dateChange(val) {
if (val == "" || val == null) {
this.$nextTick(() => {
this.sreachFormData.createTime = [];
});
}
},
//查询回执
receiptApi(id) {
return new Promise((resolve, reject) => {
let obj = { copNo: id };
getExportArrivalInReceipt(obj)
.then((res) => {
if (res.code === "200") {
resolve(res.data);
} else {
reject();
}
})
.catch((err) => {
console.log(err);
reject();
});
});
},
//查询详情
view(val) {
this.$router.push({
name: "
Arrival
ListDetail",
name: "
Pdd
ListDetail",
params: { data: val },
});
},
formChange(val) {
this.sreachFormData = val;
this.originalLogisticsNo = val.logisticsNo; // 保存原始的 logisticsNo 字符串
},
// 清空
clear() {
this.sreachFormData = {
o
gisticsNo: []
,
billNo
: "",
o
rderNo: ""
,
forwardStatus
: "",
returnStatus: "",
preNo: "",
logisticsNo: "",
createTime: [],
};
this.originalLogisticsNo = "";
// this.search(0);
},
//查询
search(val) {
...
...
@@ -325,14 +264,15 @@ export default {
let obj = { ...this.sreachFormData }; // 使用对象展开运算符复制 sreachFormData
obj.pageIndex = this.page.pageIndex;
obj.pageSize = this.page.pageSize;
obj.logisticsNo = this.originalLogisticsNo;
if (obj.logisticsNo != null && obj.logisticsNo != "") {
obj.logisticsNo = obj.logisticsNo.split("\n");
} else {
obj.logisticsNo = [];
obj.startTime = "";
obj.endTime = "";
if (this.sreachFormData.createTime.length > 0) {
obj.startTime = obj.createTime[0];
obj.endTime = obj.createTime[1];
}
get
ExportArrivalInList
(obj)
get
PddInfo
(obj)
.then((res) => {
if (res.code === "200") {
this.tableData = res.data.value;
...
...
Please
register
or
login
to post a comment