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;
},
......
<template>
<el-dialog
class="entryDialog classCUploadDialog"
title="新增配置项"
:visible.sync="outerVisible"
:show-close="false"
width="960px"
:close-on-click-modal="false"
:destroy-on-close="true"
v-loading="loadings.dialogLoading"
@close="close(false)"
>
<div class="modelItem">
<el-form
class="fedexFormStyle"
ref="formData"
:model="formData"
label-position="top"
size="small"
:rules="rules"
>
<el-row :gutter="5">
<el-col :span="8">
<Formitem label="配置项名称" prop="configName" type="edit">
<el-input
type="text"
class="inputShadow"
id="inputInner-edit-configName"
resize="none"
v-model="formData.configName"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="8">
<Formitem label="配置项类型" prop="configType" type="edit">
<el-select
type="text"
id="inputInner-edit-configType"
v-model="formData.configType"
clearable
filterable
placeholder=""
@change="handleChange"
>
<el-option
v-for="item in configTypeList"
:key="item.value"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
<!-- String | File | Boolean | Integer | Long -->
<el-col :span="8">
<Formitem
label="配置项值"
prop="configValue"
type="edit"
v-if="
formData.configType === 'String' || formData.configType === ''
"
>
<el-input
type="text"
class="inputShadow"
id="inputInner-edit-configValue"
resize="none"
v-model="formData.configValue"
clearable
placeholder=""
></el-input>
</Formitem>
<Formitem
label="配置项值"
prop="configValue"
type="edit"
v-if="formData.configType === 'Number' && formData.configType"
>
<el-input
type="number"
class="inputShadow"
id="inputInner-edit-configValue"
resize="none"
v-model="formData.configValue"
clearable
placeholder=""
></el-input>
</Formitem>
<Formitem
label="配置项值"
prop="configValue"
type="edit"
v-if="formData.configType === 'Boolean' && formData.configType"
>
<el-select
type="text"
id="inputInner-edit-configValue"
v-model="formData.configValue"
clearable
filterable
placeholder=""
>
<el-option label="true" value="true"></el-option>
<el-option label="false" value="false"></el-option>
</el-select>
</Formitem>
<div
class="uploadItem"
v-if="formData.configType === 'File' && formData.configType"
>
<div
class="uploadbox"
:style="{
height: formData.file && formData.file.name ? '1px' : '50px',
}"
>
<el-button
size="mini"
type="text"
@click="uploadFile"
style="width: 100%; text-align: left"
>
上传文件
</el-button>
<el-upload
class="upload-demo"
ref="uploadFile"
action="/manager-server/attachment/picImg"
:http-request="fileUpload"
:auto-upload="true"
:show-file-list="false"
:data="{}"
:file-list="fileList"
>
</el-upload>
</div>
<div class="fileList" v-if="formData.file && formData.file.name">
<div class="fileList-item">
<div class="uploadbox-fileName">
<svg-icon
class="el-icon-user-solid"
icon-class="exl"
style="font-size: 18px; color: #de002e"
/>
<Tooltip
:content="formData.file.name"
:refName="formData.file.name"
/>
</div>
<div class="uploadbox-option">
<el-popconfirm
:title="$t('entry.upload.delTip')"
@confirm="delTypeDFile"
>
<el-button slot="reference" type="text"
>{{ $t("entry.upload.del") }}
</el-button>
</el-popconfirm>
</div>
</div>
</div>
</div>
</el-col>
<el-col :span="24"></el-col>
<el-col :span="8">
<Formitem label="配置所属应用" prop="configApp" type="edit">
<el-select
type="text"
id="inputInner-edit-configApp"
v-model="formData.configApp"
clearable
filterable
placeholder=""
>
<el-option
v-for="item in configAppList"
:key="item.itemValue"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="8">
<Formitem label="应用IP列表" prop="configIp" type="edit">
<el-input
type="text"
class="inputShadow"
id="inputInner-edit-configIp"
resize="none"
v-model="formData.configIp"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5">
<el-col :span="24">
<div class="textarea-text">
<div style="color: #777777; margin-bottom: 10px">配置描述</div>
<el-input
type="textarea"
:rows="10"
class="inputShadow"
resize="none"
v-model="formData.description"
></el-input>
</div>
</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 { addConfig, updateConfig } from "@/api/config-management.js";
export default {
props: {
outerVisible: {
type: Boolean,
default: false,
},
configAppList: {
type: Array,
default: () => {
return [];
},
},
configTypeList: {
type: Array,
default: () => {
return [];
},
},
activeOjb: {
type: Object,
default: () => {
return {};
},
},
},
watch: {
outerVisible(val) {
if (val) {
//
this.formData = {
configType: "String",
...this.activeOjb,
file: {
name: this.activeOjb?.configFileName || "",
file: this.activeOjb?.configValue || "",
},
};
}
},
},
data() {
return {
formData: {
configName: "",
configType: "String",
configValue: "",
configApp: "",
configIp: "",
description: "",
file: null,
},
rules: {
configName: [
{
required: true,
trigger: "blur",
message: "请输入配置项名称!",
},
],
configType: [
{
required: true,
trigger: "blur",
message: "请选择配置项类型!",
},
],
configValue: [
{
required: true,
trigger: "blur",
message: "请输入配置项值!",
},
],
configApp: [
{
required: true,
trigger: "blur",
message: "请选择配置所属应用!",
},
],
configIp: [
{
required: true,
trigger: "blur",
message: "请输入应用IP列表!",
},
],
},
orderNoList: [],
loadings: {
dialogLoading: false,
submitLoading: false,
},
loadingText: "",
// 上传文件列表
fileList: [],
};
},
methods: {
// 配置项类型改变时,根据类型设置配置项值的输入类型
handleChange() {
console.log("=======================");
this.formData.configValue = "";
this.formData.file = null;
},
// 上传文件
uploadFile() {
this.$refs.uploadFile.$refs["upload-inner"].handleClick();
},
extractBase64(dataUrl) {
const base64Match = dataUrl.match(/;base64,(.+)$/);
return base64Match ? base64Match[1] : dataUrl;
},
fileUpload({ file }) {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = (e) => {
console.log(e);
let obj = {
// file: e.target.result,
file: this.extractBase64(e.target.result),
name: file.name,
};
this.formData.file = obj;
};
},
//删除文件
delTypeDFile() {
this.formData.file = null;
},
//数据保存
submit() {
let obj = {
...this.formData,
};
this.$refs.formData.validate((valid) => {
if (valid) {
this.addapi({
...obj,
});
}
});
},
//新增
addapi(val) {
let fn = addConfig;
const formData = new FormData();
formData.append("configName", val.configName);
formData.append("configType", val.configType);
formData.append("configApp", val.configApp);
formData.append("configIp", val.configIp);
formData.append("description", val.description);
if (val.configType === "File") {
if (!val.file) {
this.alertWarningMsg("请上传文件!");
return;
}
formData.append("configValue", val.file.file);
formData.append("configFileName", val.file.name);
}
this.loadings.dialogLoading = true;
if (this.activeOjb && this.activeOjb?.id) {
fn = updateConfig;
formData.append("id", this.activeOjb?.id);
}
fn(formData)
.then((res) => {
if (res.code === "200") {
this.msgSuccess(res.message);
this.close(true);
} else {
this.alertWarningMsg(res.message);
this.close(false);
}
})
.catch((err) => {
console.log(err);
this.loadings.dialogLoading = false;
});
},
close(flag) {
this.formData = {
configName: "",
configType: "",
configValue: "",
configApp: "",
configIp: "",
description: "",
file: null,
};
this.loadings.dialogLoading = false;
this.$emit("close", flag);
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/styles/variables.scss";
.fedexFormStyle {
.order-select-warp-ol {
::v-deep {
.el-select__input {
width: 35px !important;
padding-top: 0 !important;
}
}
}
}
/* 附件 */
.uploadItem {
margin-bottom: 5px;
.uploadbox {
width: 100%;
background-color: $formItemBackgroundColor;
height: 1px;
line-height: 10px;
padding: 0px 8px;
display: flex;
justify-content: space-between;
.el-button {
font-weight: 400 !important;
}
}
}
.fileList {
width: 100%;
.fileList-item {
display: flex;
justify-content: space-between;
padding: 15px 15px 0px 5px;
background-color: $formItemBackgroundColor;
font-size: 14px;
.uploadbox-fileName {
display: flex;
align-items: center;
}
.uploadbox-option {
.fileSize {
display: inline-block;
color: #8e8e8e;
font-size: 12px;
}
}
.svg-icon {
display: inline-block;
color: $fedexError;
}
.text-tooltip {
max-width: 500px;
display: inline-block;
margin-left: 10px;
}
.fileList-item-empty {
display: inline-block;
margin: 5px;
height: max-content;
color: #8e8e8e;
}
}
}
</style>
<template>
<div class="entrySreach">
<el-form
class="fedexFormStyle fedexformSreach fedexformSreachBottomBorder"
ref="sreachForm"
:model="sreachFormData"
label-position="top"
size="small"
>
<el-row class="row-border">
<!-- 配置项名称 -->
<el-col :span="5">
<Formitem label="配置项名称" prop="configName">
<el-input
type="text"
class="inputShadow"
id="inputInner--configName"
resize="none"
v-model="sreachFormData.configName"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="5">
<Formitem label="配置项值" prop="configValue">
<el-input
type="text"
class="inputShadow"
id="inputInner--configValue"
resize="none"
v-model="sreachFormData.configValue"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="5">
<Formitem label="配置项类型" prop="configType">
<el-select
type="text"
id="inputInner--configType"
v-model="sreachFormData.configType"
clearable
filterable
placeholder=""
>
<el-option
v-for="item in configTypeList"
:key="item.value"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
<!-- 创建时间 -->
<el-col :span="5">
<Formitem label="创建时间" prop="createTime" :activeType="true">
<el-date-picker
class="inputInner--createTime"
id="inputInner--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-col :span="2">
<el-form-item class="textCenter">
<el-button
class="entrySreachButton"
type="text"
icon="el-icon-search"
:loading="loadings.searchLoading"
@click="search(0)"
></el-button>
</el-form-item>
</el-col>
<el-col :span="2">
<!-- 清空查询条件-->
<el-form-item class="textLeft textCenter">
<el-button
type="text"
size="small"
icon="el-icon-refresh"
@click="clear"
>
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="optionButton">
<el-button
class="entrySaveButton"
icon="el-icon-plus"
size="small"
@click="addConfig"
>
新增
</el-button>
</div>
<Table
class="fedexDetialTable fedexSreachTable"
ref="entryTable"
:data="tableData"
:headerData="headerData"
:maxHeight="tableMaxheight"
:border="true"
:pagination="true"
:order="false"
:loading="loadings.searchLoading"
:page="page.pageIndex"
:totalCount="page.total"
@sizeChange="sizeChange"
@currentChange="currentChange"
:selection="false"
:selectFixed="false"
:rowSelectDataType="false"
>
<template v-slot:receiptInfo="scope">
<el-popover trigger="hover" placement="top">
<div class="name-wrapper-content">{{ scope.row.receiptInfo }}</div>
<span slot="reference" class="name-wrapper">
{{ scope.row.receiptInfo }}
</span>
</el-popover>
</template>
<template slot="optionColumn">
<el-table-column label="操作" width="150">
<template slot-scope="scope">
<el-button type="text" @click="handleEdit(scope.row)">
修改
</el-button>
<el-button type="text" @click="handleRefresh(scope.row)">
刷新配置
</el-button>
</template>
</el-table-column>
</template>
</Table>
<DialogVue
:outerVisible="outerVisible"
@close="dialogClose"
:configTypeList="configTypeList"
:configAppList="configAppList"
:activeOjb="activeOjb"
/>
</div>
</template>
<script>
import { getConfigList, refreshConfig } from "@/api/config-management.js";
import { getDictData } from "@/api/system/dict-api.js";
import DialogVue from "./dialog.vue";
export default {
name: "ReceiptManagement",
components: {
DialogVue,
},
data() {
return {
sreachFormData: {
configName: "",
configType: "",
configValue: "",
},
page: {
pageIndex: 1,
pageSize: 20,
total: 0,
},
tableData: [],
headerData: [
{
name: "序号",
value: "numIndex",
width: "",
align: "left",
},
{
name: "配置项名称",
value: "configName",
width: "",
align: "left",
},
{
name: "配置项值",
value: "configValue",
width: "",
align: "left",
},
{
name: "配置项类型",
value: "configType",
width: "",
align: "left",
// slot: true,
// showOverflowTooltip: false,
},
{
name: "描述",
value: "description",
width: "",
align: "left",
},
{
name: "创建时间",
value: "createTime",
width: "",
align: "left",
},
{
name: "创建人",
value: "createUserName",
width: "",
align: "left",
},
{
name: "修改时间",
value: "modifyTime",
width: "",
align: "left",
},
{
name: "修改人",
value: "modifyUserName",
width: "",
align: "left",
},
],
loadings: {
searchLoading: false,
},
tableMaxheight: null,
outerVisible: false,
configAppList: [],
configTypeList: [],
activeOjb: {},
};
},
created() {
this.search(0);
this.fetchReceiptStatus();
},
mounted() {
this.tableMaxheight = window.innerHeight - 255;
},
methods: {
handleEdit(row) {
this.activeOjb = JSON.parse(JSON.stringify(row));
this.outerVisible = true;
},
handleRefresh(row) {
this.$confirm("是否确认操作刷新配置?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
refreshConfig(row)
.then((res) => {
if (res.code === "200") {
this.alertSuccessMsg("刷新配置成功");
this.search(0);
} else {
this.alertWarningMsg(res.message || "操作失败");
}
})
.catch((err) => {
console.log(err);
});
})
.catch(() => {});
},
dateChange(val) {
if (val == "" || val == null) {
this.$nextTick(() => {
this.sreachFormData.createTime = [];
});
}
},
fetchReceiptStatus() {
getDictData({ doctCode: "CONFIG_APP" })
.then((res) => {
if (res.code == "200") {
this.configAppList = res.data;
}
})
.catch((err) => {
console.error(err);
});
getDictData({ doctCode: "CONFIG_TYPE" })
.then((res) => {
if (res.code == "200") {
this.configTypeList = res.data;
}
})
.catch((err) => {
console.error(err);
});
},
clear() {
this.$refs.sreachForm.resetFields();
},
//查询
search(val) {
this.loadings.searchLoading = true;
if (val == 0) {
this.page.pageIndex = 1;
}
let obj = this.sreachFormData;
obj.pageIndex = this.page.pageIndex;
obj.pageSize = this.page.pageSize;
getConfigList(obj)
.then((res) => {
if (res.code === "200") {
this.tableData = (res?.data?.value || []).map((item, index) => {
return {
...item,
numIndex:
(this.page.pageIndex - 1) * this.page.pageSize + index + 1,
};
});
this.page.total = res.data.totalItems;
} else {
this.alertWarningMsg(res.message);
}
this.loadings.searchLoading = false;
})
.catch((err) => {
console.log(err);
this.loadings.searchLoading = false;
});
},
addConfig() {
this.activeOjb = {};
this.outerVisible = true;
},
dialogClose(flag = false) {
this.outerVisible = false;
if (flag) {
this.search(0);
}
},
//分页
currentChange(val) {
this.page.pageIndex = val.page;
this.search(1);
},
sizeChange(val) {
this.page.pageSize = val;
this.search(1);
},
input() {
this.$forceUpdate();
},
},
};
</script>
<style scoped lang="scss">
@import "@/assets/styles/variables.scss";
.entrySreach {
height: 100%;
background-color: $menuLightBg;
.entrySreachButton {
display: inline-block;
font-size: 20px;
color: $fedexButton !important;
}
.optionButton {
padding: 10px;
text-align: left;
.el-button {
color: $fedexButton;
border-color: $fedexButton !important;
svg {
display: inline-block;
margin-right: 5px;
fill: $fedexButton;
}
}
.entrySaveButton:hover,
.entrySaveButton:focus {
color: $menuLightBg !important;
background-color: $fedexButton !important;
}
}
}
.name-wrapper {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
max-width: 200px;
display: inline-block;
}
.name-wrapper-content {
max-width: 400px;
}
.texttareaTip {
position: absolute;
top: 52%;
right: 20px;
transform: translate(0, -50%);
z-index: 10;
}
</style>
......@@ -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"
......
......@@ -13,11 +13,11 @@
<div class="modelItem">
<el-form
class="fedexFormStyle"
ref="formData"
ref="formDataRef"
:model="formData"
:rules="rules"
label-position="top"
size="small"
:rules="rules"
>
<el-row :gutter="5">
<el-col :span="8">
......@@ -29,7 +29,7 @@
clearable
filterable
placeholder=""
@change="receiptXml"
@change="receiptChange"
>
<el-option
v-for="item in receiptTypeList"
......@@ -40,40 +40,137 @@
</el-select>
</Formitem>
</el-col>
<!-- 订单回执=》 order === 提运单号 billNo/订单编号 orderNos/回执状态 receiptStatus -->
<!-- 运单回执=》 waybill === 提运单号/物流运单编号 logisticsNos/回执状态 -->
<!-- 清单总分单回执=》 totalScore === 提运单号/回执状态 -->
<!-- 汇总回执=》 summaryApplication === 收发货人名称 summaryApplicationId/回执状态/电子口岸编号/汇总申请编号 sumNo -->
<!-- 清单回执=》 list === 提运单号/物流运单编号/回执状态/电子口岸编号 preNo/清单编号 invtNo -->
<template
v-if="
['order', 'waybill', 'totalScore', 'list'].includes(
formData.receiptType
)
"
>
<el-col :span="8">
<Formitem label="物流运单编号" prop="logisticsNo" type="edit">
<Formitem label="提运单号" prop="billNo" type="edit">
<el-input
type="text"
class="inputShadow"
id="inputInner-edit-logisticsNo"
id="inputInner-edit-billNo"
resize="none"
v-model="formData.logisticsNo"
v-model="formData.billNo"
clearable
placeholder=""
@blur="handleOtherInfo"
:disabled="!!formData.orderNos || !!formData.logisticsNos"
@blur="receiptXml"
></el-input>
<!-- <el-select
</Formitem>
</el-col>
</template>
<template v-if="['waybill', 'list'].includes(formData.receiptType)">
<el-col :span="8" v-if="!formData.billNo">
<Formitem label="物流运单编号" prop="logisticsNos">
<FormTextareaInput
:formData="formData"
dataKey="logisticsNos"
:curKey="Date.now()"
@formChange="formChange"
/>
</Formitem>
</el-col>
<el-col :span="8" v-else>
<Formitem label="物流运单编号" prop="logisticsNos">
<el-input
type="text"
id="inputInner-edit-logisticsNo"
v-model="formData.logisticsNo"
:remote="true"
class="inputShadow"
id="inputInner-edit-logisticsNos"
resize="none"
v-model="formData.logisticsNos"
clearable
placeholder=""
:disabled="true"
></el-input>
</Formitem>
</el-col>
</template>
<template v-if="['order'].includes(formData.receiptType)">
<el-col :span="8" v-if="!formData.billNo">
<Formitem label="订单编号" prop="orderNos">
<FormTextareaInput
:formData="formData"
dataKey="orderNos"
:curKey="Date.now()"
@formChange="formChange"
/>
</Formitem>
</el-col>
<el-col :span="8" v-else>
<Formitem label="订单编号" prop="orderNos">
<el-input
type="text"
class="inputShadow"
id="inputInner-edit-orderNos"
resize="none"
v-model="formData.orderNos"
clearable
placeholder=""
:disabled="true"
></el-input>
</Formitem>
</el-col>
</template>
<el-col
:span="24"
v-if="['order', 'waybill', 'list'].includes(formData.receiptType)"
>
</el-col>
<!-- 收发货人名称 -->
<template
v-if="['summaryApplication'].includes(formData.receiptType)"
>
<el-col :span="8">
<Formitem
label="收发货人名称"
prop="summaryApplicationId"
type="edit"
>
<el-select
type="text"
id="inputInner-edit-summaryApplicationId"
v-model="formData.summaryApplicationId"
clearable
filterable
collapse-tags
:remote-method="remoteMethod"
placeholder=""
@change="handleOtherInfo"
class="order-select-warp-ol"
@change="receiptXml"
>
<el-option
v-for="item in orderNoList"
:key="item"
:label="item"
:value="item"
v-for="item in summaryApplicationList"
:key="item.id"
:label="`${item.ebcName}(${item.startTime}-${item.endTime})`"
:value="item.id"
></el-option>
</el-select> -->
</el-select>
</Formitem>
</el-col>
</template>
<!-- <el-col :span="8">
<Formitem label="物流运单编号" prop="logisticsNo" type="edit">
<el-input
type="text"
class="inputShadow"
id="inputInner-edit-logisticsNo"
resize="none"
v-model="formData.logisticsNo"
clearable
placeholder=""
@blur="handleOtherInfo"
></el-input>
</Formitem>
</el-col> -->
<el-col :span="8">
<Formitem label="回执状态" prop="receiptStatus" type="edit">
<el-select
......@@ -94,8 +191,14 @@
</el-select>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5" v-if="formData.receiptType == 'list'">
<template
v-if="
['list', 'summaryApplication'].includes(formData.receiptType) &&
logisticsNoArray.length < 2 &&
!formData.billNo
"
>
<el-col :span="8">
<Formitem label="电子口岸编号" prop="preNo" type="edit">
<el-input
......@@ -110,35 +213,68 @@
></el-input>
</Formitem>
</el-col>
</template>
<!-- 汇总申请编号 sumNo -->
<template
v-if="['summaryApplication'].includes(formData.receiptType)"
>
<el-col :span="8">
<Formitem label="清单编号" prop="invtNo" type="edit">
<Formitem label="汇总申请编号" prop="sumNo" type="edit">
<el-input
type="text"
class="inputShadow"
id="inputInner-edit-invtNo"
id="inputInner-edit-sumNo"
resize="none"
v-model="formData.invtNo"
v-model="formData.sumNo"
clearable
placeholder=""
@blur="receiptXml"
></el-input>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5">
<el-col :span="24">
<!-- <Formitem label="回执文本" prop="receiptInfo" type="edit">
</template>
<template
v-if="
['list'].includes(formData.receiptType) &&
logisticsNoArray.length < 2 &&
!formData.billNo
"
>
<el-col :span="8">
<Formitem label="清单编号" prop="invtNo" type="edit">
<el-input
type="textarea"
:rows="4"
type="text"
class="inputShadow"
id="inputInner-edit-receiptInfo"
id="inputInner-edit-invtNo"
resize="none"
v-model="formData.receiptInfo"
v-model="formData.invtNo"
clearable
placeholder=""
@blur="receiptXml"
></el-input>
</Formitem> -->
</Formitem>
</el-col>
</template>
</el-row>
<div
style="color: #e6a23c; margin-bottom: 10px; font-size: 12px"
v-if="formData.receiptType === 'order'"
>
<i class="el-icon-info"></i>
提运单号和订单编号只能填写一个,如果填写提运单号,提运单下所有的订单编号回执状态都将新增模拟回执,如果填写订单编号,将只对填写的订单修改回执状态
</div>
<div
v-if="formData.receiptType === 'waybill'"
style="color: #e6a23c; margin-bottom: 10px; font-size: 12px"
>
<i class="el-icon-info"></i>
提运单号和物流运单编号只能填写一个,如果填写提运单号,提运单下所有的物流运单编号回执状态都将改变,如果填写物流运单编号,将只对填写的物流运单编号修改回执状态
</div>
<el-row :gutter="5">
<el-col :span="24">
<div class="textarea-text">
<div style="color: #777777; margin-bottom: 10px">回执文本</div>
<el-input
......@@ -154,6 +290,7 @@
</el-row>
</el-form>
</div>
<div class="dialogOption entrySave">
<el-button
class="entrySaveButton"
......@@ -171,6 +308,7 @@ import {
generateReceiptXml,
addInfo,
getListInfo,
searchMockReceiptSummary,
} from "@/api/receiptManagement-api.js";
export default {
props: {
......@@ -203,10 +341,14 @@ export default {
return {
formData: {
receiptType: "",
logisticsNo: "",
logisticsNos: "",
receiptStatus: "",
preNo: "",
invtNo: "",
sumNo: "",
billNo: "",
orderNos: "",
summaryApplicationId: "",
},
receiptInfo: "",
rules: {
......@@ -217,11 +359,10 @@ export default {
message: "请选择回执类型!",
},
],
logisticsNo: [
billNo: [
{
required: true,
trigger: "blur",
message: "物流运单编号不能为空!",
},
],
receiptStatus: [
......@@ -231,6 +372,13 @@ export default {
message: "请选择回执状态!",
},
],
summaryApplicationId: [
{
required: true,
trigger: "blur",
message: "请选择收发货人名称!",
},
],
preNo: [
{
required: true,
......@@ -252,12 +400,71 @@ export default {
submitLoading: false,
},
loadingText: "",
summaryApplicationList: [],
logisticsNoArray: [],
};
},
methods: {
getpreNoInfo(e) {
console.log(e);
receiptChange(value) {
console.log(value);
this.formData = {
receiptType: value,
logisticsNos: "",
receiptStatus: "",
preNo: "",
invtNo: "",
sumNo: "",
billNo: "",
orderNos: "",
summaryApplicationId: "",
};
this.$refs.formDataRef?.resetFields();
if (value === "totalScore") {
this.$set(this.rules, "billNo", [
{
required: true,
trigger: "blur",
message: "请输入提运单号!",
},
]);
this.$forceUpdate();
} else {
this.$set(this.rules, "billNo", [
{
required: false,
trigger: "blur",
message: "请输入提运单号!",
},
]);
this.$forceUpdate();
}
if (value === "summaryApplication") {
this.queryApplicationList();
}
},
formChange(val) {
this.formData = val;
this.receiptXml();
if (val.logisticsNos != null && val.logisticsNos != "") {
this.logisticsNoArray = val.logisticsNos.split("\n");
} else {
this.logisticsNoArray = [];
}
},
queryApplicationList(name = "") {
searchMockReceiptSummary({
name,
}).then((res) => {
console.log(res);
if (res.code === "200") {
this.summaryApplicationList = res.data;
} else {
this.alertWarningMsg(res.message);
}
});
},
handleOtherInfo() {
if (this.formData.logisticsNo) {
......@@ -267,26 +474,64 @@ export default {
// 生成xml
receiptXml() {
console.log("==============");
const copyFormData = { ...this.formData };
if (!this.formData.receiptType) {
if (!copyFormData.receiptType) {
return;
}
if (!this.formData.logisticsNo) {
if (copyFormData.receiptType === "order") {
if (!copyFormData.billNo && !copyFormData.orderNos) {
return;
}
if (!this.formData.receiptStatus) {
} else if (copyFormData.receiptType === "waybill") {
if (!copyFormData.billNo && !copyFormData.logisticsNos) {
return;
}
} else if (copyFormData.receiptType === "totalScore") {
if (!copyFormData.billNo) {
// this.alertWarningMsg("请输入提运单号!");
return;
}
} else if (copyFormData.receiptType === "list") {
if (!copyFormData.billNo && !copyFormData.logisticsNos) {
return;
}
if (!this.formData.preNo) {
if (copyFormData.logisticsNos && this.logisticsNoArray.length < 2) {
if (!copyFormData.preNo) {
return;
}
if (!this.formData.invtNo) {
if (!copyFormData.invtNo) {
return;
}
}
} else if (copyFormData.receiptType === "summaryApplication") {
if (!copyFormData.summaryApplicationId) {
return;
}
}
if (copyFormData.orderNos != null && copyFormData.orderNos != "") {
copyFormData.orderNos = copyFormData.orderNos.split("\n");
} else {
copyFormData.orderNos = [];
}
if (
copyFormData.logisticsNos != null &&
copyFormData.logisticsNos != ""
) {
copyFormData.logisticsNos = copyFormData.logisticsNos.split("\n");
} else {
copyFormData.logisticsNos = [];
}
if (!this.formData.receiptStatus) {
return;
}
generateReceiptXml({
...this.formData,
logisticsNo: this.formData.logisticsNo,
...copyFormData,
}).then((res) => {
console.log(res);
if (res.code === "200") {
......@@ -296,26 +541,7 @@ 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);
......@@ -330,14 +556,26 @@ export default {
},
//数据保存
submit() {
let obj = {
let copyFormData = {
...this.formData,
};
this.$refs.formData.validate((valid) => {
if (copyFormData.orderNos != null && copyFormData.orderNos != "") {
copyFormData.orderNos = copyFormData.orderNos.split("\n");
} else {
copyFormData.orderNos = [];
}
if (
copyFormData.logisticsNos != null &&
copyFormData.logisticsNos != ""
) {
copyFormData.logisticsNos = copyFormData.logisticsNos.split("\n");
} else {
copyFormData.logisticsNos = [];
}
this.$refs.formDataRef.validate((valid) => {
if (valid) {
this.addapi({
...obj,
logisticsNos: [this.formData.logisticsNo],
...copyFormData,
});
}
});
......@@ -348,7 +586,7 @@ export default {
addInfo(val)
.then((res) => {
if (res.code === "200") {
this.msgSuccess(res.message);
this.msgSuccess(res.data || res.message);
this.close(true);
} else {
this.alertWarningMsg(res.message);
......
......@@ -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;
......