zhanbo.xu

feat: 开发新功能

......@@ -5,7 +5,7 @@ VUE_APP_BASE_ENV = "dev"
VUE_APP_Version = '1.0.0'
VUE_APP_BASE_URL = 'http://101.132.100.41:7001/EcomExp'
VUE_APP_BASE_URL = 'http://101.132.100.41:7008/EcomExp'
# FedEx 在线申报工具/开发环境
# http://101.132.100.41:7001/EcomExp
VUE_APP_BASE_API = /EcomExp
......
import request from "@/utils/request";
/**
* @description 获取配置
* @param {Object} data
* @method GET
*/
export function getConfigList(data) {
return request({
url: "/bus-customer/sysConfigCenter/getConfigList",
method: "post",
data,
});
}
/**
* @description 刷新配置
* */
export function refreshConfig(data) {
return request({
url: `/bus-customer/sysConfigCenter/refreshConfig/${data.id}`,
method: "get",
});
}
/**
* @description 添加配置
* @param {Object} data
* @method POST
*/
export function addConfig(data) {
return request({
url: "/bus-customer/sysConfigCenter/addConfig",
method: "post",
data,
});
}
/**
* @description 修改配置
* @param {Object} data
* @method POST
*/
export function updateConfig(data) {
return request({
url: "/bus-customer/sysConfigCenter/updateConfig",
method: "post",
data,
});
}
......@@ -47,6 +47,21 @@ export function declareDataUpload(data) {
data: {
cancellationReason: data.cancellationReason,
declareIds: data.declareIds,
changeFlag: data?.changeFlag || false,
},
});
}
// 删单deleteFlag:true,note:删单原因
// 变更changeFlag:true
export function declareDataUploadNew(data) {
return request({
url: "/bus-customer/declareData/" + data.type,
method: "post",
data: {
declareIds: data.declareIds, //申报id
deleteFlag: data?.deleteFlag || false, // 是否删单
changeFlag: data?.changeFlag || false,
note: data.note || null, // 删单原因
},
});
}
......
......@@ -51,3 +51,11 @@ export function getListInfo(logisticsNo) {
method: "get",
});
}
// name 收发货人名称 搜索模拟回执汇总申报下拉信息
export function searchMockReceiptSummary(data) {
return request({
url: `/bus-customer/mockReceipt/searchMockReceiptSummary?name=${data.name}`,
method: "get",
});
}
......
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1763694170210" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3134" id="mx_n_1763694170211" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><path d="M682.666667 0a42.666667 42.666667 0 0 1 25.941333 8.789333l4.266667 3.712 207.061333 207.061334a64 64 0 0 1 18.432 38.954666l0.298667 6.314667V469.333333a42.666667 42.666667 0 0 1-85.034667 4.992L853.333333 469.333333v-128h-192a64 64 0 0 1-63.701333-57.856l-0.298667-6.144v-192h-426.666666v853.333334h256a42.666667 42.666667 0 0 1 42.325333 37.674666l0.298667 4.992a42.666667 42.666667 0 0 1-37.674667 42.368l-4.992 0.298667H149.333333a64 64 0 0 1-63.701333-57.856l-0.298667-6.144v-896a64 64 0 0 1 57.856-63.701333l6.144-0.298667H682.666667z m153.045333 256l-153.045333-152.96V256h153.045333z" fill="#191919" p-id="3135"></path><path d="M298.666667 341.333333m42.666666 0l128 0q42.666667 0 42.666667 42.666667l0 0q0 42.666667-42.666667 42.666667l-128 0q-42.666667 0-42.666666-42.666667l0 0q0-42.666667 42.666666-42.666667Z" fill="#191919" p-id="3136"></path><path d="M298.666667 512m42.666666 0l128 0q42.666667 0 42.666667 42.666667l0 0q0 42.666667-42.666667 42.666666l-128 0q-42.666667 0-42.666666-42.666666l0 0q0-42.666667 42.666666-42.666667Z" fill="#191919" p-id="3137"></path><path d="M298.666667 682.666667m42.666666 0l128 0q42.666667 0 42.666667 42.666666l0 0q0 42.666667-42.666667 42.666667l-128 0q-42.666667 0-42.666666-42.666667l0 0q0-42.666667 42.666666-42.666666Z" fill="#191919" p-id="3138"></path><path d="M828.970667 517.376a21.333333 21.333333 0 0 1 3.029333 10.965333v70.058667A213.333333 213.333333 0 1 1 597.333333 810.666667a38.826667 38.826667 0 1 1 77.568 0 135.765333 135.765333 0 1 0 157.141334-134.101334l-0.042667 32.426667a21.333333 21.333333 0 0 1-32.298667 18.304l-150.528-90.325333a21.333333 21.333333 0 0 1 0-36.608l150.528-90.325334a21.333333 21.333333 0 0 1 29.269334 7.338667z" fill="#191919" p-id="3139"></path></svg>
\ No newline at end of file
......@@ -81,7 +81,7 @@ export default {
let inputInner = document.querySelector(
"#inputInner--" + this.dataKey
);
inputInner.classList.remove("inputFocus");
inputInner?.classList.remove("inputFocus");
}
},
deep: true,
......
<template>
<el-dialog
class="entryDialog classCUploadDialog"
title="清单总分单撤销"
:visible.sync="cancelVisible"
:show-close="false"
width="60%"
:close-on-click-modal="false"
>
<div>
<el-form
class="fedexFormStyle fedexFormStyle-textarea"
ref="cancelForm"
:model="cancelFormData"
:rules="cancelFormRules"
label-position="left"
size="small"
>
<Formitem label="撤销原因" prop="note" type="edit">
<el-input
type="textarea"
class="inputShadow"
resize="none"
v-model="cancelFormData.note"
clearable
:autosize="{ minRows: 7, maxRows: 7 }"
placeholder="请输入撤销原因"
id="inputInner-edit-note"
></el-input>
</Formitem>
</el-form>
</div>
<div class="dialogOption entrySave revokeOperation">
<el-button
class="entrySaveButton entrySaveButton-background revokeSubmitBtn"
type="primary"
@click="submitRevoke"
>
提 交
</el-button>
<el-button class="entrySaveButton" @click="cancelRevoke(false)">
取 消
</el-button>
</div>
</el-dialog>
</template>
<script>
import { declareDataUploadNew } from "@/api/declareData-api.js";
export default {
name: "DeleteDialog",
props: {
showDialog: {
type: Boolean,
default: false,
},
selectedDatas: {
type: Array,
default: () => [],
},
},
data() {
return {
cancelVisible: false,
cancelFormData: {
note: "",
},
cancelFormRules: {
note: [{ required: true, message: "请输入撤销原因", trigger: "blur" }],
},
};
},
watch: {
showDialog(val) {
if (val) {
this.cancelVisible = val;
}
},
},
created() {},
methods: {
submitRevoke() {
this.$refs.cancelForm.validate((valid) => {
if (valid) {
let obj = {
note: this.cancelFormData.note,
declareIds: [],
type: "totalScore",
deleteFlag: true,
};
obj.declareIds = this.selectedDatas.map((item) => item.declareId);
console.log("datas==", obj);
declareDataUploadNew(obj)
.then((res) => {
if (res.code === "200") {
// this.alertSuccessMsg(res.message);
this.alertSuccessMsg("数据已成功提交撤销,请等待海关回执。");
this.cancelRevoke(true);
} else {
this.alertWarningMsg(res.message);
this.cancelRevoke();
}
})
.catch((err) => {
console.log(err);
this.cancelRevoke();
});
} else {
return false;
}
});
},
cancelRevoke(flag = false) {
this.cancelVisible = false;
this.cancelFormData.note = "";
this.$emit("cancelDelete", flag);
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/styles/variables.scss";
.modelItem {
width: 100%;
.modelItem-title {
display: flex;
justify-content: space-between;
margin-bottom: 5px;
font-size: 14px;
font-weight: 600;
color: #333;
}
}
.revokeOperation {
margin-bottom: 25px;
.revokeSubmitBtn {
margin-right: 30px;
}
}
.fedexFormStyle-textarea {
.el-form-item {
height: 200px;
}
}
</style>
......@@ -35,15 +35,6 @@
<!-- 提运单号 -->
<el-col :span="5">
<Formitem label="提运单号" prop="billNo">
<!-- <el-input
type="text"
class="inputShadow"
id="inputInner--billNo"
resize="none"
v-model="sreachFormData.billNo"
clearable
placeholder=""
></el-input> -->
<FormTextareaInput
:formData="sreachFormData"
dataKey="billNo"
......@@ -152,6 +143,37 @@
></svg-icon>
离境单申报
</el-button>
<!-- new -->
<el-dropdown
style="margin-left: 10px"
size="small"
split-button
type="primary"
class="dropdown-other-button"
v-loading="loadings.dropDownChangeLoading"
@command="dropdownChange"
@click="
declareDataChange('dropDownChangeLoading', dropdownName, dropdownCode)
"
>
<i class="el-icon-document"></i>
{{ dropdownName }}
<!-- 清单总分单撤销、清单总分单变更 -->
<el-dropdown-menu slot="dropdown">
<el-dropdown-item
:command="{ code: 'totalScore', name: '清单总分单撤销' }"
class="dropdown-other-menu-button"
>
清单总分单撤销
</el-dropdown-item>
<el-dropdown-item
:command="{ code: 'totalScore', name: '清单总分单变更' }"
class="dropdown-other-menu-button"
>
清单总分单变更
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<Table
......@@ -324,6 +346,12 @@
:selected="selected"
@close="timeClose"
/>
<!-- 清单总分单撤销 -->
<DeleteDialog
:showDialog="deleteDialogVisible"
:selectedDatas="selected"
@cancelDelete="deleteDialogClose"
/>
<!-- 日志 -->
<section style="position: fixed; top: 35%; right: 10%">
<PopoverComponent
......@@ -348,12 +376,14 @@ import {
getTotalReceipt,
getTotalDocumentsLevelLog,
getOperationLogByBillNo,
declareDataUploadNew,
} from "@/api/declareData-api.js";
import DialogVue from "./dialog.vue";
import DataPreview from "../reportingData/data-preview.vue";
import TimeDialog from "../reportingData/time-dialog.vue";
import { getCurrUserPortInfo } from "@/api/system/user.js";
import PopoverComponent from "./popover-component.vue";
import DeleteDialog from "./deleteDialog.vue";
export default {
name: "ArrivalDeclare",
......@@ -362,6 +392,7 @@ export default {
DataPreview,
TimeDialog,
PopoverComponent,
DeleteDialog,
},
data() {
return {
......@@ -525,6 +556,7 @@ export default {
loadings: {
sreachLoading: false,
declaration: false,
dropDownChangeLoading: false,
},
tableMaxheight: null,
outerVisible: false,
......@@ -535,6 +567,9 @@ export default {
timeVisible: false,
// 获取操作日志
optionsVisible: false,
dropdownName: "清单总分单撤销",
dropdownCode: "totalScore",
deleteDialogVisible: false,
};
},
created() {
......@@ -557,6 +592,61 @@ export default {
getTotalDocumentsLevelLog: getTotalDocumentsLevelLog,
getOperationLogByBillNo: getOperationLogByBillNo,
//切换申报模式
dropdownChange(val) {
this.dropdownName = val.name;
this.dropdownCode = val.code;
},
declareDataChange(loadingKey, dropdownName, dropdownCode) {
if (this.selected.length === 0) {
this.alertWarningMsg("请选择数据!");
return;
}
// declareDataUploadNew
this.loadings.dropDownChangeLoading = true;
if (dropdownName === "清单总分单撤销") {
this.deleteDialogVisible = true;
return;
}
this.$confirm("是否确认操作清单总分单变更?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
let obj = {
declareIds: this.selected.map((item) => item.declareId),
type: "totalScore",
changeFlag: true,
};
declareDataUploadNew(obj)
.then((res) => {
if (res.code === "200") {
this.alertSuccessMsg("操作成功");
this.search(0);
} else {
this.alertWarningMsg(res.message || "操作失败");
}
})
.catch((err) => {
console.log(err);
})
.finally(() => {
this.loadings.dropDownChangeLoading = false;
});
})
.catch(() => {
this.loadings.dropDownChangeLoading = false;
});
},
deleteDialogClose(flag) {
debugger;
this.loadings.dropDownChangeLoading = false;
this.deleteDialogVisible = false;
if (flag) {
this.search(0);
}
},
formChange(val) {
this.sreachFormData = val;
},
......
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
......@@ -30,6 +30,7 @@
filterable
placeholder=""
@change="receiptXml"
disabled
>
<el-option
v-for="item in receiptTypeList"
......@@ -161,8 +162,9 @@
class="entrySaveButton"
:disabled="loadings.submitLoading"
@click="submit"
>确 定</el-button
>
确 定
</el-button>
<el-button class="entrySaveButton" @click="close(false)">关 闭</el-button>
</div>
</el-dialog>
......@@ -293,7 +295,7 @@ export default {
}
generateReceiptXml({
...this.formData,
logisticsNo: this.formData.logisticsNo,
logisticsNos: [this.formData.logisticsNo],
}).then((res) => {
console.log(res);
if (res.code === "200") {
......@@ -303,34 +305,13 @@ export default {
}
});
},
// remoteMethod(query) {
// console.log(query);
// this.getOrderList(query, true);
// },
// getOrderList(val, flag) {
// if (!this.formData.receiptType) {
// return;
// }
// searchOrderNo({
// receiptType: this.formData.receiptType,
// logisticsNo: flag ? val : "",
// }).then((res) => {
// if (res.code === "200") {
// this.orderNoList = res.data;
// } else {
// this.alertWarningMsg(res.message);
// }
// });
// this.receiptXml();
// },
getOtherInfo(e) {
getListInfo(e).then((res) => {
console.log(res);
if (res.code === "200") {
this.formData.preNo = res.data.preNo;
this.formData.invtNo = res.data.invtNo;
// this.$set(this.formData, "preNo", res.data.preNo);
// this.$set(this.formData, "invtNo", res.data.invtNo);
this.$forceUpdate();
} else {
this.alertWarningMsg(res.message);
......
......@@ -11,7 +11,6 @@
class="fedexFormStyle fedexFormEditStyle"
ref="editForm"
:model="formData"
:rules="formRules"
label-position="top"
size="small"
:disabled="true"
......
This diff is collapsed. Click to expand it.
......@@ -163,12 +163,30 @@ export default {
align: "left",
},
{
name: "提运单号",
value: "billNo",
width: "",
align: "left",
},
{
name: "订单编号",
value: "orderNo",
width: "",
align: "left",
},
{
name: "物流运单编号",
value: "logisticsNo",
width: "",
align: "left",
},
{
name: "收件人名称",
value: "ebcName",
width: "",
align: "left",
},
{
name: "回执类型",
value: "receiptType",
width: "",
......
......@@ -298,35 +298,7 @@
></svg-icon>
清单申报
</el-button>
<!-- <el-dropdown
style="margin-right: 10px"
size="small"
split-button
type="primary"
v-loading="loadings.dropDownLoading"
@command="dropdownChange"
@click="declareData('dropDownLoading', dropdownName, dropdownCode)"
>
<svg-icon
class="el-icon-user-solid"
icon-class="fedexDeclareIcon"
></svg-icon
>{{ dropdownName }}
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="{ code: 'full', name: '一键申报' }"
>一键申报</el-dropdown-item
>
<el-dropdown-item :command="{ code: 'order', name: '订单申报' }"
>订单申报</el-dropdown-item
>
<el-dropdown-item :command="{ code: 'waybill', name: '运单申报' }"
>运单申报</el-dropdown-item
>
<el-dropdown-item :command="{ code: 'list', name: '清单申报' }"
>清单申报</el-dropdown-item
>
</el-dropdown-menu>
</el-dropdown> -->
<!-- 运抵单申报按钮 -->
<!-- <el-button
size="small"
......@@ -375,6 +347,47 @@
></svg-icon>
撤销单申报
</el-button>
<!-- new -->
<el-dropdown
style="margin-left: 10px"
size="small"
split-button
type="primary"
class="dropdown-other-button"
v-loading="loadings.dropDownChangeLoading"
@command="dropdownChange"
@click="
declareDataChange(
'dropDownChangeLoading',
dropdownName,
dropdownCode
)
"
>
<i class="el-icon-document"></i>
{{ dropdownName }}
<!-- 订单变更、运单变更、清单变更 -->
<el-dropdown-menu slot="dropdown">
<el-dropdown-item
:command="{ code: 'order', name: '订单变更' }"
class="dropdown-other-menu-button"
>
订单变更
</el-dropdown-item>
<el-dropdown-item
:command="{ code: 'waybill', name: '运单变更' }"
class="dropdown-other-menu-button"
>
运单变更
</el-dropdown-item>
<el-dropdown-item
:command="{ code: 'list', name: '清单变更' }"
class="dropdown-other-menu-button"
>
清单变更
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</div>
<section style="position: fixed; top: 35%; right: 10%">
......@@ -998,6 +1011,7 @@ export default {
sreachLoading: false,
dwonloadModelLoading: false,
dropDownLoading: false,
dropDownChangeLoading: false,
logTableLoading: false,
exportDeclareLoading: false,
revokeLoading: false, // 撤销单申报加载状态
......@@ -1010,8 +1024,8 @@ export default {
textareaVisible: {},
tableMaxheight: null,
outerVisible: false,
dropdownName: "一键申报",
dropdownCode: "full",
dropdownName: "订单变更",
dropdownCode: "order",
revokeVisible: false,
templateDownloadVisible: false,
datasExportVisible: false,
......@@ -1364,14 +1378,20 @@ export default {
declareDataUpload(obj)
.then((res) => {
if (res.code === "200") {
this.alertSuccessMsg("数据已成功提交申报,请等待海关回执。");
this.alertSuccessMsg(
`数据已成功提交${
!obj?.changeFlag ? "申报" : "变更"
},请等待海关回执。`
);
} else {
this.alertWarningMsg(res.message);
}
})
.catch((err) => {
console.error(err);
this.alertWarningMsg("申报失败,请稍后重试。");
this.alertWarningMsg(
`${!obj?.changeFlag ? "申报" : "变更"}失败,请稍后重试。`
);
})
.finally(() => {
// 无论成功或失败,都重置加载状态并刷新数据
......@@ -1391,13 +1411,18 @@ export default {
// }
},
declareDataChange(loadingKey, dropdownName, dropdownCode) {
// changeFlag
this.declareData(loadingKey, dropdownName, dropdownCode, true);
},
/**
* 通用申报方法
* @param {string} loadingKey - 加载状态的 key(如 'dropDownLoading', 'departureLoading', 'revokeLoading')
* @param {string} dropdownName - 当前操作名称(如 '撤销单申报')
* @param {string} dropdownCode - 当前操作代码(如 'full')
*/
declareData(loadingKey, dropdownName, dropdownCode) {
declareData(loadingKey, dropdownName, dropdownCode, changeFlag = false) {
if (this.selected.length === 0) {
this.alertWarningMsg("请选择数据!");
return;
......@@ -1409,6 +1434,7 @@ export default {
const obj = {
declareIds: this.selected.map((item) => item.declareId),
type: dropdownCode,
changeFlag: changeFlag,
};
// if (dropdownName === "清单总分单申报") {
// this.dataPreviewVisible = true;
......@@ -1735,6 +1761,49 @@ export default {
}
}
}
.dropdown-other-button {
border-color: #ff0000 !important;
::v-deep {
.el-button-group {
.el-button:last-child {
border-right-color: #409eff !important;
border-left: 1px solid #409eff !important;
border-top-color: #409eff !important;
border-bottom-color: #409eff !important;
.el-dropdown__icon {
color: #409eff;
}
}
.el-button:first-child {
height: 100%;
border-left-color: #409eff !important;
border-top-color: #409eff !important;
border-bottom-color: #409eff !important;
span {
color: #409eff;
}
}
}
}
}
.el-dropdown-menu {
border: 1px solid #409eff !important;
.dropdown-other-menu-button:not(.is-disabled):hover,
.dropdown-other-menu-button:focus {
background-color: #409eff !important;
}
}
.dropdown-other-button:hover {
::v-deep {
.el-button-group .el-button:first-child span {
color: #409eff !important;
}
.el-button-group .el-button:last-child .el-dropdown__icon {
color: #409eff !important;
}
}
}
.texttareaTip {
position: absolute;
......