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-05-27 17:17:46 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
e133d490d8bb0b1f7c53312128010dbbb4368037
e133d490
1 parent
37684659
feat: 根据需求优化
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
457 additions
and
102 deletions
src/api/arrivalList-api.js
src/api/declareData-api.js
src/components/Table/index.vue
src/utils/index.js
src/views/arrival-declare/index.vue
src/views/customerConfig/dialog.vue
src/views/exportListQuery/index.vue
src/views/hs-code/index.vue
src/views/hs-code/time-dialog.vue
src/views/reportingData/index.vue
src/api/arrivalList-api.js
View file @
e133d49
...
...
@@ -35,9 +35,9 @@ export function getHsCodeList(data) {
// GET
// /hsCodeMgr/hsCodeIncr
// 增量数据同步
export
function
getHsCodeIncr
()
{
export
function
getHsCodeIncr
(
{
beginDate
}
)
{
return
request
({
url
:
"/bus-customer/hsCodeMgr/hsCodeIncr"
,
url
:
`/bus-customer/hsCodeMgr/hsCodeIncr/
${
beginDate
}
`
,
method
:
"get"
,
});
}
...
...
src/api/declareData-api.js
View file @
e133d49
...
...
@@ -283,3 +283,12 @@ export function modifyWeight(data) {
data
:
data
,
});
}
// GET /declareData/getTotalDocumentsLevelLog/{billNo}
export
function
getTotalDocumentsLevelLog
(
data
)
{
return
request
({
url
:
"/bus-customer/declareData/getTotalDocumentsLevelLog/"
+
data
.
billNo
,
method
:
"get"
,
data
:
data
,
});
}
...
...
src/components/Table/index.vue
View file @
e133d49
...
...
@@ -37,6 +37,7 @@
@header-dragend="headerDragend"
@cell-mouse-leave="cellMouseLeave"
@cell-mouse-enter="cellMouseEnter"
@filter-change="filterChange"
>
<!-- 多选框 -->
<el-table-column
...
...
@@ -78,6 +79,9 @@
:header-align="item.align"
:sort-orders="['descending', 'ascending', null]"
:key="index"
:filters="item.filters"
:filter-method="item.filterMethod"
:column-key="item.columnKey || index.toString()"
>
<template slot="header" slot-scope="scope">
<Tooltip
...
...
@@ -101,7 +105,7 @@
:align="item.align ? item.align : 'center'"
:fixed="item.fixed ? item.fixed : false"
:sortable="item.sorTable ? true : false"
:column-key="index.toString()"
:column-key="i
tem.columnKey || i
ndex.toString()"
:show-overflow-tooltip="
item.showOverflowTooltip != undefined
? item.showOverflowTooltip
...
...
@@ -110,6 +114,8 @@
:header-align="item.align"
:sort-orders="['descending', 'ascending', null]"
:formatter="formatter"
:filters="item.filters"
:filter-method="item.filterMethod"
:key="index"
>
<template slot="header" slot-scope="scope">
...
...
@@ -133,7 +139,7 @@
:align="item.align ? item.align : 'center'"
:fixed="item.fixed ? item.fixed : false"
:sortable="item.sorTable ? true : false"
:column-key="index.toString()"
:column-key="i
tem.columnKey || i
ndex.toString()"
:show-overflow-tooltip="
item.showOverflowTooltip != undefined
? item.showOverflowTooltip
...
...
@@ -142,6 +148,8 @@
:header-align="item.align"
:sort-orders="['descending', 'ascending', null]"
:formatter="formatter"
:filters="item.filters"
:filter-method="item.filterMethod"
:key="index"
>
<template slot="header" slot-scope="scope">
...
...
@@ -541,6 +549,11 @@ export default {
this.selectTable = [];
this.$emit("sortChange", { prop: prop, order: order });
},
//
filterChange(filters) {
console.log(filters);
this.$emit("filterChange", filters);
},
//双击行
dblclick(val) {
this.$emit("dblclick", val);
...
...
src/utils/index.js
View file @
e133d49
This diff is collapsed. Click to expand it.
src/views/arrival-declare/index.vue
View file @
e133d49
...
...
@@ -147,6 +147,24 @@
离境单申报
</el-button>
</div>
<section style="position: fixed; top: 35%; right: 10%">
<TablePopover
ref="allLogDataStatusPopover"
dataKey="allLogDataStatus"
idKey="declareId"
:parentDom="$refs.entryTable"
:receiptDataHead="logDataHead"
:rowData="selectedLogRow"
:tableData="tableData"
@popoverChange="popoverChange"
@popoverClose="popoverClose"
>
<div slot="title">
<span style="font-weight: 700; color: #515a6e">提运单号:</span>
{{ selectedLogRow.billNo }}
</div>
</TablePopover>
</section>
<Table
class="fedexDetialTable fedexSreachTable"
ref="entryTable"
...
...
@@ -263,6 +281,15 @@
</div>
</TablePopover>
</template>
<template slot="optionColumn">
<el-table-column label="操作" width="80">
<template slot-scope="scope">
<el-button type="text" @click="showTotalLog(scope.row)">
日志
</el-button>
</template>
</el-table-column>
</template>
</Table>
<DialogVue
:outerVisible="outerVisible"
...
...
@@ -290,6 +317,7 @@ import {
declareDataUpload,
getLogisticsReceipt,
getTotalReceipt,
getTotalDocumentsLevelLog,
} from "@/api/declareData-api.js";
import DialogVue from "./dialog.vue";
import DataPreview from "../reportingData/data-preview.vue";
...
...
@@ -308,7 +336,7 @@ export default {
portList: [],
activePortType: false,
// 控制日志弹窗的显示和隐藏
allLogData
Receipt
StatusPopoverType: false,
allLogDataStatusPopoverType: false,
// 存储选中的日志数据
selectedLogRow: {},
selected: [],
...
...
@@ -325,6 +353,32 @@ export default {
total: 0,
},
tableData: [],
logDataHead: [
{
name: "回执类型",
value: "receiptType",
width: "",
align: "left",
},
{
name: "回执状态",
value: "receiptStatus",
width: "",
align: "left",
},
{
name: "状态时间",
value: "statusTime",
width: "",
align: "left",
},
{
name: "回执描述",
value: "receiptDescription",
width: "",
align: "left",
},
],
headerData: [
{
name: "提运单号",
...
...
@@ -422,6 +476,28 @@ export default {
this.searchPortDictData();
},
methods: {
//申报日志
showTotalLog(row) {
this.$store.state.viewOption.loadingDatas = true;
this.selectedLogRow = row;
this.$set(row, "logLoading", true);
this.receiptApi(row.declareId, "allLogDataStatus").then((logData) => {
this.$set(row, "popoverData", logData);
if (!this.selectedLogRow.popoverData.length) {
this.$store.state.viewOption.loadingDatas = false;
}
// 手动触发状态更新
this.$nextTick(() => {
// 强制设置弹窗状态为true
row.allLogDataStatusPopoverType = true;
// 强制更新表格
this.tableData = [...this.tableData];
});
});
},
//获取口岸子字典
searchPortDictData() {
getPortInfo()
...
...
@@ -530,7 +606,7 @@ export default {
item.totalReceiptStatusPopoverType = false;
item.popoverData = [];
});
this.selectedLogRow.allLogData
Receipt
StatusPopoverType = false;
this.selectedLogRow.allLogDataStatusPopoverType = false;
this.$refs.entryTable.$refs.tables.$refs.bodyWrapper.style.overflowY =
"auto";
},
...
...
@@ -594,6 +670,20 @@ export default {
console.log(err);
reject();
});
} else if (type == "allLogDataStatus") {
let objVal = { billNo: billNo };
getTotalDocumentsLevelLog(objVal)
.then((res) => {
if (res.code === "200") {
resolve(res.data);
} else {
reject();
}
})
.catch((err) => {
console.log(err);
reject();
});
}
});
},
...
...
@@ -618,6 +708,7 @@ export default {
this.$refs.arrivalInReceiptStatusPopover.tableLoading = false; //运抵单回执
this.$refs.logisticsDepartureReceiptStatusPopover.tableLoading = false; // 离境单回执
this.$refs.totalReceiptStatusPopover.tableLoading = false;
this.$refs.allLogDataStatusPopoverType = false;
});
});
},
...
...
@@ -697,7 +788,7 @@ export default {
// item.logLoading = false;
item.popoverData = [];
});
this.selectedLogRow.allLogData
Receipt
StatusPopoverType = false;
this.selectedLogRow.allLogDataStatusPopoverType = false;
} else {
this.alertWarningMsg(res.message);
}
...
...
@@ -752,8 +843,9 @@ export default {
.optionButton {
padding: 10px;
text-align: left;
text-align: right;
display: flex;
justify-content: flex-end;
.el-button.dropdown-style-button {
background-color: #ffffff !important;
border: 2px solid $fedexBottonColor !important; /* 设置边框颜色 */
...
...
src/views/customerConfig/dialog.vue
View file @
e133d49
...
...
@@ -216,8 +216,10 @@
</el-select>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5" v-if="formData.orderRequester == '2'">
<!-- 口岸选择-->
<el-col :span="8"
v-if="formData.orderRequester == '2'"
>
<el-col :span="8">
<Formitem label="申报地区" prop="choosePortCode" type="edit">
<el-select
type="text"
...
...
@@ -245,6 +247,54 @@
>
<div class="dlTitle">青岛</div>
<el-row :gutter="5">
<!-- 订单申报通道 orderDeclareChannel -->
<el-col :span="8" :key="dateKey">
<Formitem
label="订单申报通道"
prop="orderDeclareChannel"
type="edit"
>
<el-select
type="text"
id="inputInner-edit-orderDeclareChannel"
v-model="portConfig.TAO.orderDeclareChannel"
clearable
maxlength="4"
placeholder=""
@change="changeOrderDeclareChannel"
>
<el-option
v-for="(item, index) in $store.getters.dict
.ORDER_DECLARE_CHANNEL"
:key="index"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
<!-- 加签方式 -->
<el-col :span="8" :key="dateKey">
<Formitem label="加签方式" prop="methodOfSignature" type="edit">
<el-select
type="text"
id="inputInner-edit-methodOfSignature"
v-model="portConfig.TAO.methodOfSignature"
clearable
maxlength="4"
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict
.METHOD_OF_SIGNATURE"
:key="index"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
<!-- 公服DXPID -->
<el-col
:span="8"
...
...
@@ -359,53 +409,6 @@
></el-input>
</Formitem>
</el-col>
<!-- 加签方式 -->
<el-col :span="8" :key="dateKey">
<Formitem label="加签方式" prop="methodOfSignature" type="edit">
<el-select
type="text"
id="inputInner-edit-methodOfSignature"
v-model="portConfig.TAO.methodOfSignature"
clearable
maxlength="4"
placeholder=""
>
<el-option
v-for="(item, index) in $store.getters.dict
.METHOD_OF_SIGNATURE"
:key="index"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
<!-- 订单申报通道 orderDeclareChannel -->
<el-col :span="8" :key="dateKey">
<Formitem
label="订单申报通道"
prop="orderDeclareChannel"
type="edit"
>
<el-select
type="text"
id="inputInner-edit-orderDeclareChannel"
v-model="portConfig.TAO.orderDeclareChannel"
clearable
maxlength="4"
placeholder=""
@change="changeOrderDeclareChannel"
>
<el-option
v-for="(item, index) in $store.getters.dict
.ORDER_DECLARE_CHANNEL"
:key="index"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col
:span="16"
...
...
@@ -983,6 +986,13 @@ export default {
message: "订单申报方不能为空!",
},
],
declareBusinessType: [
{
required: true,
trigger: "change",
message: "申报业务类型不能为空!",
},
],
// methodOfSignature: [
// {
...
...
src/views/exportListQuery/index.vue
View file @
e133d49
...
...
@@ -88,7 +88,7 @@
</el-col>
</el-row>
<el-row>
<!-- 电商企业
代码
-->
<!-- 电商企业
名称
-->
<el-col :span="5">
<Formitem label="电商企业名称" prop="ebcName">
<el-input
...
...
@@ -173,7 +173,7 @@
@click="customDialogShow = true"
>
<svg-icon class="el-icon-user-solid" icon-class="zidingyi"></svg-icon>
自定义内容
导出字段
</el-button>
<el-button
...
...
@@ -241,6 +241,7 @@
<script>
import { getAllexportList, getListReceiptData } from "@/api/exportList-api.js";
import CustomDialog from "./custom-dialog.vue";
import { formatDateNew } from "../../utils";
export default {
name: "ExportBillQuery",
...
...
@@ -453,8 +454,9 @@ export default {
// // 2. 清单查询
// console.log(res);
// });
const fileName = `${formatDateNew(new Date())}.xlsx`;
this.fileDownload
.downLoadZip("api", "listExport",
"清单查询.xlsx"
, "xlsx", "post", {
.downLoadZip("api", "listExport",
fileName
, "xlsx", "post", {
...obj,
})
.finally(() => {
...
...
src/views/hs-code/index.vue
View file @
e133d49
...
...
@@ -36,7 +36,7 @@
</el-col>
<!-- 创建时间 -->
<el-col :span="5">
<Formitem label="
操作
时间" prop="createTime" :activeType="true">
<Formitem label="
更新
时间" prop="createTime" :activeType="true">
<el-date-picker
class="inputInner--createTime"
id="inputInner-edit-createTime"
...
...
@@ -139,24 +139,25 @@
:selected="selected"
@close="dialogClose"
/>
<!-- -->
<TimeDialog :timeVisible="timeVisible" @close="timeClose" />
</div>
</template>
<script>
import {
getHsCodeList,
getHsCodeIncr,
getHsCodeSingleSync,
} from "@/api/arrivalList-api.js";
import { getHsCodeList, getHsCodeSingleSync } from "@/api/arrivalList-api.js";
import DialogVue from "./dialog.vue";
import TimeDialog from "./time-dialog.vue";
export default {
name: "SupervisePlaceManage",
components: {
DialogVue,
TimeDialog,
},
data() {
return {
selected: {},
timeVisible: false,
sreachFormData: {
skuCode: "",
skuname: "",
...
...
@@ -289,32 +290,39 @@ export default {
console.log("finally");
});
},
timeClose() {
console.log("===");
this.loadings.postLoading = false;
this.timeVisible = false;
},
addDeclare() {
this.loadings.postLoading = true;
this.$confirm("是否确认操作增量数据同步?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
getHsCodeIncr()
.then((res) => {
if (res.code === "200") {
this.alertSuccessMsg(res.message);
} else {
this.alertWarningMsg(res.message);
}
this.loadings.postLoading = false;
})
.catch((err) => {
console.log(err);
this.loadings.postLoading = false;
})
.finally(() => {
// console.log("finally");
});
})
.catch(() => {});
this.timeVisible = true;
// loadings.postLoading
// this.$confirm("是否确认操作增量数据同步?", "提示", {
// confirmButtonText: "确定",
// cancelButtonText: "取消",
// type: "warning",
// })
// .then(() => {
// getHsCodeIncr()
// .then((res) => {
// if (res.code === "200") {
// this.alertSuccessMsg(res.message);
// } else {
// this.alertWarningMsg(res.message);
// }
// this.loadings.postLoading = false;
// })
// .catch((err) => {
// console.log(err);
// this.loadings.postLoading = false;
// })
// .finally(() => {
// // console.log("finally");
// });
// })
// .catch(() => {});
},
detail(record) {
this.selected = JSON.parse(JSON.stringify(record));
...
...
src/views/hs-code/time-dialog.vue
0 → 100644
View file @
e133d49
<template>
<el-dialog
class="entryDialog classCUploadDialog"
title="增量数据同步"
:visible.sync="timeVisibleConfig"
:show-close="false"
width="450px"
:close-on-click-modal="false"
:destroy-on-close="true"
v-loading="loadings.dialogLoading"
@close="close(false)"
>
<div class="modelItem" style="margin-bottom: 10px">
<el-form
class="fedexFormStyle"
ref="formData"
:model="formData"
label-position="top"
size="small"
:rules="rules"
>
<el-row :gutter="5">
<el-col :span="24">
<Formitem label="同步日期" prop="beginDate" type="edit">
<el-date-picker
class="inputInner--beginDate"
id="inputInner-edit-beginDate"
v-model="formData.beginDate"
format="yyyy-MM-dd"
prefix-icon="none"
value-format="yyyy-MM-dd"
/>
</Formitem>
</el-col>
</el-row>
</el-form>
</div>
<div class="dialogOption entrySave">
<el-button
class="entrySaveButton"
:disabled="loadings.submitLoading"
@click="submit"
>确 定</el-button
>
<el-button class="entrySaveButton" @click="close(false)">关 闭</el-button>
</div>
</el-dialog>
</template>
<script>
import { getHsCodeIncr } from "@/api/arrivalList-api.js";
import { getYesterday } from "@/utils/index.js";
export default {
props: {
timeVisible: {
type: Boolean,
default: false,
},
},
data() {
return {
formData: {
beginDate: "",
},
timeVisibleConfig: false,
loadings: {
dialogLoading: false,
submitLoading: false,
},
loadingText: "",
logisticsTotal: 0,
rules: {
beginDate: [
{
required: true,
trigger: "change",
message: "同步日期不能为空!",
},
],
},
};
},
watch: {
timeVisible(val) {
if (val) {
console.log(getYesterday().substring(0, 10));
const time = getYesterday().substring(0, 10);
this.timeVisibleConfig = val;
this.formData = {
beginDate: time,
};
}
},
},
methods: {
//数据保存
submit() {
let obj = {
...this.formData,
};
this.$refs.formData.validate((valid) => {
if (valid) {
this.addapi(obj);
}
});
},
//新增 getHsCodeIncr
addapi(val) {
this.loadings.dialogLoading = true;
getHsCodeIncr(val)
.then((res) => {
if (res.code === "200") {
this.msgSuccess(res.message);
this.close(true);
} else {
this.alertWarningMsg(res.message);
this.loadings.dialogLoading = false;
}
})
.catch((err) => {
console.log(err);
this.loadings.dialogLoading = false;
});
},
close(flag) {
this.formData = {
beginDate: "",
};
this.loadings.dialogLoading = false;
this.timeVisibleConfig = false;
this.$emit("close", flag);
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/styles/variables.scss";
</style>
src/views/reportingData/index.vue
View file @
e133d49
...
...
@@ -100,6 +100,20 @@
</el-col>
</el-row>
<el-row class="backgroundRow">
<!-- 电商企业名称 -->
<el-col :span="5">
<Formitem label="电商企业名称" prop="ebcName">
<el-input
type="text"
class="inputShadow"
id="inputInner--ebcName"
resize="none"
v-model="sreachFormData.ebcName"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<!-- 创建时间 -->
<el-col :span="5">
<Formitem label="创建时间" prop="createTime" :activeType="true">
...
...
@@ -273,7 +287,7 @@
</el-button>
</div>
</div>
<section style="position: fixed; top: 35
0px; left: 500px
">
<section style="position: fixed; top: 35
%; right: 10%
">
<TablePopover
ref="allLogDataReceiptStatusPopover"
dataKey="allLogDataReceiptStatus"
...
...
@@ -292,7 +306,7 @@
</TablePopover>
</section>
<Table
class="fedexDetialTable fedexSreachTable"
class="fedexDetialTable fedexSreachTable
fedexTable_new
"
ref="entryTable"
:data="tableData"
:headerData="headerData"
...
...
@@ -312,6 +326,8 @@
:rowSelectDataType="false"
@cellClick="cellClick"
:selected="selected"
@filterChange="filterChange"
rowKey="declareId"
>
<template v-slot:orderReceiptStatus="scope">
<TablePopover
...
...
@@ -326,8 +342,8 @@
@popoverClose="popoverClose"
>
<div slot="title">
<span style="font-weight: 700; color: #515a6e">订单编号:</span
>
{{ scope.row.orderno }}
<span style="font-weight: 700; color: #515a6e">订单编号:</span
>
{{ scope.row.orderno }}
</div>
<div slot="buttonLabel">
{{ scope.row.orderReceiptStatus }}
...
...
@@ -440,7 +456,7 @@
</TablePopover>
</template>
<template slot="optionColumn">
<el-table-column
align="center" label="操作" width="15
0">
<el-table-column
label="操作" width="12
0">
<template slot-scope="scope">
<el-button type="text" @click="update(scope.row)"> 修改 </el-button>
<el-button type="text" @click="showTotalLog(scope.row)">
...
...
@@ -548,6 +564,7 @@ export default {
receiptType: null,
createTime: [],
dataSource: [],
ebcName: "",
},
page: {
pageIndex: 1,
...
...
@@ -555,6 +572,7 @@ export default {
total: 0,
},
tableData: [],
orderStatus: [],
headerData: [
{
name: "提运单号",
...
...
@@ -598,6 +616,46 @@ export default {
width: "",
align: "left",
slot: true,
columnKey: "orderReceiptStatus",
filters: [
{
text: "已提交",
value: "0",
},
{
text: "xml报文加签失败",
value: "-2",
},
{
text: "xml报文上传失败",
value: "-3",
},
{
text: "电子口岸申报中",
value: "2",
},
{
text: "发送海关成功",
value: "3",
},
{
text: "发送海关失败",
value: "4",
},
{
text: "海关退单",
value: "100",
},
{
text: "海关入库",
value: "120",
},
{
text: "回执异常",
value: "-1",
},
],
// filterMethod: this.filterMethodFn,
},
// {
// name: "收款单回执",
...
...
@@ -636,13 +694,13 @@ export default {
// align: "left",
// slot: true,
// },
{
name: "离境单回执",
value: "logisticsReceiptStatus",
width: "",
align: "left",
slot: true,
},
//
{
//
name: "离境单回执",
//
value: "logisticsReceiptStatus",
//
width: "",
//
align: "left",
//
slot: true,
//
},
],
receiptDataHead: [
{
...
...
@@ -759,6 +817,11 @@ export default {
});
},
methods: {
filterChange(value) {
this.orderStatus = value.orderReceiptStatus;
console.log(value, this.orderStatus);
this.search(0);
},
//获取口岸子字典
searchPortDictData() {
getPortInfo()
...
...
@@ -855,6 +918,7 @@ export default {
obj.startCreateTime = obj.createTime[0];
obj.endCreateTime = obj.createTime[1];
}
obj.orderStatus = this.orderStatus;
searchDeclareData(obj)
.then((res) => {
if (res.code === "200") {
...
...
@@ -892,6 +956,7 @@ export default {
receiptType: null,
createTime: [],
dataSource: [],
ebcName: "",
};
this.clearPort();
this.clearStatus();
...
...
@@ -1381,4 +1446,17 @@ export default {
margin-right: 30px;
}
}
::v-deep {
.fedexTable_new {
.el-table th.el-table__cell > .cell {
display: flex;
align-items: center;
gap: 30px;
justify-content: space-between;
&.highlight {
color: #007ab7;
}
}
}
}
</style>
...
...
Please
register
or
login
to post a comment