jinhui.wang

接口增加,订单,运单查询修改,申报页面增加

import request from '@/utils/request'
//获取自定义设置数据
/**
* @param billNo 提运单号
* @param orderNo 订单编号
* @param logisticsNo 运单编号
* @param startCreateTime 创建开始时间
* @param endCreateTime 创建结束时间
* @param receiptType 回执类型
* @param receiptStatus 回执状态
* @param pageNum *
* @param pageSize *
*/
export function searchDeclareData(data) {
return request({
url: '/bus-customer/declareData/getDeclareDataList',
method: 'post',
data: data,
})
}
//申报数据导入
/**
* @param multipartFile * 提运单号
*/
export function uploadDeclareData(data) {
let formData = new FormData
formData.append("multipartFile", data.multipartFile);
return request({
url: '/bus-customer/declareData/import',
method: 'post',
data: formData,
})
}
//数据申报
/**
* @param declareIds * id list
* @param type *
*/
export function declareDataUpload(data) {
return request({
url: '/bus-customer/declareData/' + data.type,
method: 'post',
data: data.declareIds,
})
}
import request from '@/utils/request'
//获取自定义设置数据
/**
* @param ebccode 电商企业代码
* @param orderNo 电商订单/海外仓订仓单编号
* @param returnStatus 回执状态
* @param createTimeStart 创建开始时间
* @param createTimeEnd 创建结束时间
* @param pageNum *
* @param pageSize *
*/
export function getAllExportingBills(data) {
return request({
url: '/bus-customer/exportOrder/search',
method: 'post',
data: data,
})
}
//获取自定义设置数据
/**
* @param logisticsNo 物流运单编号
* @param logisticsCode 物流企业代码
* @param returnStatus 回执状态
* @param createTimeStart 创建开始时间
* @param createTimeEnd 创建结束时间
* @param pageNum *
* @param pageSize *
*/
export function getAllExportingTransportBills(data) {
return request({
url: '/bus-customer/exportWaybill/search',
method: 'post',
data: data,
})
}
\ No newline at end of file
import request from '@/utils/request'
/**
*/
export function queryBills(data) {
return request({
url: '/bus-employees/rde/op/approve/check',
method: 'post',
data: data
})
}
/**
* 查询菜单
*/
export function getAllMenus() {
return request({
url: '/menu/selectAllMenu',
method: 'get'
})
}
export function getAllExportingBills(data) {
return request({
url: '/bus-customer/exportOrder/search',
method: 'post',
data
})
}
export function getAllTransportBills(data) {
return request({
url: '/bus-customer/exportWaybill/search',
method: 'post',
data
})
}
export function getAllListBills(data) {
return request({
url: '/bus-customer/exportList/search',
method: 'post',
data
})
}
......@@ -10,16 +10,16 @@
<script>
export default {
name: 'AppMain',
name: "AppMain",
computed: {
cachedViews() {
return this.$store.state.tagsView.cachedViews
return this.$store.state.tagsView.cachedViews;
},
key() {
return this.$route.fullPath
}
}
}
return this.$route.fullPath;
},
},
};
</script>
<style lang="scss" scoped>
......@@ -31,11 +31,11 @@ export default {
min-width: 1080px;
position: relative;
//overflow: hidden;
overflow: auto;
overflow: hidden;
background-color: #f2f2f2;
}
.fixed-header+.app-main {
.fixed-header + .app-main {
padding-top: 50px;
}
......@@ -45,7 +45,7 @@ export default {
min-height: calc(100vh - 84px);
}
.fixed-header+.app-main {
.fixed-header + .app-main {
padding-top: 84px;
}
}
......
......@@ -99,12 +99,15 @@ export default {
watch: {
$route(val) {
this.activeRoute = val;
this.setMainHeight();
},
},
mounted() {
},
mounted() {},
methods: {
setMainHeight(val) {
document.querySelector(".main-container").style.height =
"calc(100% - 64px)";
},
handleClickOutside() {
this.$store.dispatch("app/closeSideBar", { withoutAnimation: false });
},
......
......@@ -79,13 +79,13 @@ export const constantRoutes = [
component: Layout,
hidden: false,
redirect: 'index',
meta: { title: '系统管理', icon: 'fedexSystem' },
meta: { title: '申报数据管理', icon: 'upload' },
children: [
{
path: '/reportingData',
component: (resolve) => require(['@/views/AuditionEntrySearch/index'], resolve),
component: (resolve) => require(['@/views/reportingData/index'], resolve),
hidden: false,
meta: { title: '申报数据管理', icon: 'api' }
meta: { title: '申报数据管理', icon: 'upload' }
}
]
},
......@@ -94,76 +94,97 @@ export const constantRoutes = [
component: Layout,
hidden: false,
redirect: 'index',
meta: { title: '查询管理', icon: 'fedexSystem' },
meta: { title: '查询管理', icon: 'fedexExportIcon' },
children: [
{
path: '/exportBillQuery',
component: (resolve) => require(['@/views/exportBillQuery/index'], resolve),
hidden: false,
meta: { title: '出口订单查询', icon: 'api' },
meta: { title: '出口订单查询', icon: '' },
},
{
path: '/exportBillDetail',
component: (resolve) => require(['@/views/exportBillDetail/index'], resolve),
hidden: true,
meta: { title: '出口订单详情', icon: 'api' },
meta: { title: '出口订单详情', icon: '' },
},
{
path: '/exportTransportDetail',
component: (resolve) => require(['@/views/exportTransportDetail/index'], resolve),
hidden: true,
meta: { title: '出口运单详情', icon: 'api' },
meta: { title: '出口运单详情', icon: '' },
},
{
path: '/exportListDetail',
component: (resolve) => require(['@/views/exportListDetail/index'], resolve),
hidden: true,
meta: { title: '出口清单详情', icon: 'api' },
meta: { title: '出口清单详情', icon: '' },
},
{
path: '/exportTransportBillQuery',
component: (resolve) => require(['@/views/exportTransportBillQuery/index'], resolve),
hidden: false,
meta: { title: '出口运单查询', icon: 'api' },
meta: { title: '出口运单查询', icon: '' },
},
{
path: '/exportListQuery',
component: (resolve) => require(['@/views/exportListQuery/index'], resolve),
name: '首页',
meta: { title: '出口清单查询', icon: 'dashboard' }
meta: { title: '出口清单查询', icon: '' }
},
{
path: '/listBranchQuery',
component: (resolve) => require(['@/views/listBranchQuery/index'], resolve),
name: '首页',
hidden: false,
meta: { title: '清单总分单查询', icon: 'dashboard' }
meta: { title: '清单总分单查询', icon: '' }
},
{
path: '/listBranchDetail',
component: (resolve) => require(['@/views/listBranchDetail/index'], resolve),
name: '首页',
hidden: true,
meta: { title: '清单总分单详情', icon: 'dashboard' }
meta: { title: '清单总分单详情', icon: '' }
},
{
path: '/logisticsExitDetail',
component: (resolve) => require(['@/views/logisticsExitDetail/index'], resolve),
name: '首页',
hidden: true,
meta: { title: '物流离境单详情', icon: 'dashboard' }
meta: { title: '物流离境单详情', icon: '' }
},
{
path: '/logisticsExitQuery',
component: (resolve) => require(['@/views/logisticsExitQuery/index'], resolve),
name: '首页',
meta: { title: '物流离境单查询', icon: 'dashboard' }
meta: { title: '物流离境单查询', icon: '' }
},
{
path: 'index',
component: (resolve) => require(['@/views/index'], resolve),
name: '首页',
meta: { title: '出口撤销单查询', icon: 'dashboard' }
meta: { title: '出口撤销单查询', icon: '' }
}
]
},
{
path: '/',
component: Layout,
hidden: false,
redirect: 'index',
meta: { title: '汇总申报', icon: 'fedexSummary' },
children: [
{
path: '/summary',
component: (resolve) => require(['@/views/reportingData/index'], resolve),
hidden: false,
meta: { title: '汇总申报', icon: '' }
},
{
path: '/summaryDataSearch',
component: (resolve) => require(['@/views/reportingData/index'], resolve),
hidden: false,
meta: { title: '汇总申请单查询', icon: '' }
}
]
},
......
......@@ -84,8 +84,8 @@ const user = {
reject(res)
} else {
if (!getToken()) {
setToken(res.data.token)
commit('SET_TOKEN', res.data.token)
setToken(res.data)
commit('SET_TOKEN', res.data)
resolve(res)
} else {
resolve(res)
......
......@@ -37,23 +37,23 @@ export function removeUserId() {
}
export function setCookie(cookie) {
return localStorage.setItem('iClearLoginTIp', cookie)
return localStorage.setItem('EcomLoginTIp', cookie)
}
export function getCookie() {
return localStorage.getItem('iClearLoginTIp')
return localStorage.getItem('EcomLoginTIp')
}
export function setTime(date) {
return localStorage.setItem('iClearLoginTime', date)
return localStorage.setItem('EcomLoginTime', date)
}
export function getTime() {
return localStorage.getItem('iClearLoginTime')
return localStorage.getItem('EcomLoginTime')
}
export function removeTime() {
return localStorage.removeItem('iClearLoginTime')
return localStorage.removeItem('EcomLoginTime')
}
export function setLoginType(type) {
......
......@@ -18,21 +18,11 @@ const mimeMap = {
const apiUrl = {
//exl
customDownloadXls: '/bus-employees/export/custom/setting',//自定义导出
epoaDownload: '/bus-employees/port/op/download',//epoa文件下载
pbiListDownload: '/bus-employees/data/report/export/daily',//报表列表导出
pbiLogDownload: '/bus-employees/data/report/export/efficiency',//预审人员效绩统计
osprDownload: '/bus-employees/ospr/download',//opsr文件下载
portCDownload: '/bus-employees/port/op/decC/export',//C类申报导出
//other
portDownloadZip: '/bus-employees/port/op/downLoadZip',//口岸异步下载
staffEntryDownloadZip: '/bus-employees/chm/qry/downLoadZip',//运单查询异步下载
entryUploadData: '/bus-customer/consignment/upload/export',//批量导入数据导出
entryUploadModel: '/bus-customer/upload/excel/template/downLoad',//批量上传模版导出
opsrDownloadZip: '/bus-employees/ospr/export',//opsr批量导出
declareDataModel: '/bus-customer/declareData/downloadTemplate',
}
const baseUrl = process.env.VUE_APP_BASE_API
export function downLoadZip(urlStatus, str, filename, type, method, data) {
return new Promise((resolve, reject) => {
var url = ''
......@@ -41,6 +31,7 @@ export function downLoadZip(urlStatus, str, filename, type, method, data) {
} else if (urlStatus == 'res') {
url = str
}
console.log(url);
if (method == 'get' && data) {
url = url + '?';
......
<template>
<div>
<div class="entrySreach" ref="classCPortEntry">
<el-form
class="fedexFormStyle fedexformSreach fedexformSreachBottomBorder"
ref="sreachForm"
:model="searchForm"
label-position="top"
size="small"
>
<el-row class="row-border">
<el-col :span="5">
<Formitem label="运单编号" prop="consignmentCode">
<el-popover
placement="bottom"
width="320"
trigger="manual"
popper-class="popoverconsignmentCode"
v-model="textareaVisible.formItemconsignmentCode"
>
<el-input
name="consignmentCode-textarea"
type="textarea"
:rows="5"
id="popoverInputconsignmentCode"
class="inputShadow textareaPopover"
v-model="searchForm.consignmentCode"
resize="none"
maxlength="13000"
placeholder=""
@blur="textareaBlur"
@input="input"
></el-input>
<el-input
slot="reference"
name="consignmentCode"
type="textarea"
:rows="1"
class="inputShadow"
id="inputInner--consignmentCode"
v-model="searchForm.consignmentCode"
resize="none"
placeholder=""
@focus="textareaFocus"
@input="input"
></el-input>
</el-popover>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="物流企业代码" prop="factoryCode">
<el-select
type="text"
id="inputInner--declaredPort"
v-model="searchForm.declaredPort"
clearable
<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="orderNo">
<el-popover
placement="bottom"
width="320"
trigger="manual"
popper-class="popoverorderNo"
v-model="textareaVisible.formItemorderNo"
>
<el-input
name="orderNo-textarea"
type="textarea"
:rows="5"
id="popoverInputorderNo"
class="inputShadow textareaPopover"
v-model="sreachFormData.orderNo"
resize="none"
maxlength="13000"
placeholder=""
@change="portChange"
>
<el-option
v-for="(item, index) in dictData.userport"
:key="index"
:label="item.name"
:value="item.name"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="回执状态" prop="receiptStatus">
<el-select
type="text"
id="inputInner--declaredPort"
v-model="searchForm.declaredPort"
clearable
@blur="textareaBlur"
@input="input"
></el-input>
<el-input
slot="reference"
name="orderNo"
type="textarea"
:rows="1"
class="inputShadow"
id="inputInner--orderNo"
v-model="sreachFormData.orderNo"
resize="none"
placeholder=""
@change="portChange"
>
<el-option
v-for="(item, index) in dictData.userport"
:key="index"
:label="item.name"
:value="item.name"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="5">
<Formitem
label="创建时间"
prop="createTime"
:activeType="true"
@focus="textareaFocus"
@input="input"
></el-input>
</el-popover>
<el-badge
v-if="
!textareaVisible.formItemorderNo &&
textareaLength({
key: 'orderNo',
value: sreachFormData.orderNo,
}) > 1
"
type="info"
:value="`+${textareaLength({
key: 'orderNo',
value: sreachFormData.orderNo,
})}`"
class="item texttareaTip"
/>
</Formitem>
</el-col>
<!-- 电商企业代码 -->
<el-col :span="5">
<Formitem label="电商企业代码" prop="ebccode">
<el-select
type="text"
id="inputInner--ebccode"
v-model="sreachFormData.ebccode"
clearable
placeholder=""
>
<el-date-picker
class="inputInner--accsDataImportTime"
id="inputInner--accsDataImportTime"
v-model="searchForm.accsDataImportTime"
type="daterange"
format="yyyy-MM-dd"
prefix-icon="none"
value-format="yyyyMMdd"
range-separator="至"
start-placeholder=""
clearable
end-placeholder=""
:picker-options="importTimePickerOptions"
@blur="datePickerBlur"
@change="accsDataImportTimeChange"
>
</el-date-picker>
</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="4">
<el-form-item class="textCenter">
<el-button
icon="el-icon-refresh"
size="small"
:loading="loadings.searchLoading"
@click="search(0)"
>重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div style="text-align: right; margin: 10px">
<el-option
v-for="(item, index) in dictData.ebccode"
:key="index"
:label="item.name"
:value="item.code"
></el-option>
</el-select>
</Formitem>
</el-col>
<!-- 回执状态 -->
<el-col :span="5">
<Formitem label="回执状态" prop="returnStatus">
<el-select
type="text"
id="inputInner--returnStatus"
v-model="sreachFormData.returnStatus"
clearable
placeholder=""
>
<el-option
v-for="(item, index) in dictData.returnStatus"
:key="index"
:label="item.name"
:value="item.code"
></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="至"
@chagne="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="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"
size="small"
:loading="loadings.downloadLoading2"
@click="downloadBpiData('log')"
icon="el-icon-download"
@click="downloadData"
>
<svg-icon class="el-icon-user-solid" icon-class="fedexUpBlue"></svg-icon>
导出
</el-button>
</div>
<Table
class="fedexDetialTable fedexSreachTable"
ref="entryTable"
......@@ -160,175 +160,182 @@
:border="true"
:pagination="true"
:order="false"
:loading="loadings.sreachLoading"
:loading="loadings.searchLoading"
:page="page.pageIndex"
:pageSizes="[20, 30, 50, 100]"
:totalCount="total"
:totalCount="page.total"
@sizeChange="sizeChange"
@currentChange="currentChange"
@rowClick="handleRowClick"
:selection="true"
:selection="false"
:selectFixed="false"
@tableSelect="tableSelect"
@tableSelectAll="tableSelectAll"
:rowSelectDataType="false"
:selected="selected"
>
<template v-slot:waveName="scope">
<span>{{ `${scope.row.waveName}(${scope.row.waveExt2})` }}</span>
<template v-slot:returnStatus="scope">
<span>{{ scope.row.returnStatus }}</span>
</template>
<template v-slot:orderNo="scope">
<el-button type="text">{{ scope.row.orderNo }}</el-button>
</template>
</Table>
</div>
</template>
<script>
import {getAllExportingBills} from "@/api/query/query";
import { getAllExportingBills } from "@/api/exportQuery.js";
export default {
name: "index",
data() {
return {
searchForm: {
declaredPort: "",
consStatus: "",
consignmentCode: "",
accsDataImportTime: [],
ownerName: "",
consignmentHeadCode: "",
isPushCustomsSys: "",
waitOperStatus: "",
declTime: [],
},
selected: [],
sizeChange(val) {
this.page.pageSize = val;
this.sreach(1);
},
//分页
currentChange(val) {
this.page.pageIndex = val.page;
this.search(1);
},
tableSelect(val) {
this.selected = val.selection;
},
tableSelectAll(val) {
this.selected = val;
sreachFormData: {
orderNo: "",
ebccode: "",
returnStatus: "",
createTime: [],
},
page: {
pageIndex: 1,
pageSize: 20,
total: 0,
},
tableData: [],
tableMaxheight: null,
total: 0,
dictData: {
userport: [
{name: "Shanghai Port", code: "SH"},
{name: "Beijing Port", code: "BJ"},
{name: "Guangzhou Port", code: "GZ"},
{name: "Shenzhen Port", code: "SZ"},
{name: "Tianjin Port", code: "TJ"},
],
},
loadings: {
searchLoading: false,
},
textareaVisible: {
formItemconsignmentCode: false,
formItemconsignmentHeadCode: false,
},
headerData: [
{
name: "回执状态",
value: "returnStatus",
width: "150",
width: "",
align: "left",
slot: true,
},
{
name: "订单编号",
value: "orderNo",
width: '150',
align: 'left'
width: "",
align: "left",
slot: true,
},
{
name: '订单类型',
value: 'orderType',
width: '150',
align: 'left'
name: "订单类型",
value: "orderType",
width: "",
align: "left",
},
{
name: '电商企业代码',
value: 'ebccode',
width: '200',
align: 'left'
name: "电商企业代码",
value: "ebccode",
width: "",
align: "left",
},
{
name: '电商企业',
value: 'ebcname',
width: '200',
align: 'left'
name: "电商企业",
value: "ebcname",
width: "",
align: "left",
},
{
name: '电商平台名称',
value: 'ebpname',
width: '250',
align: 'left'
name: "电商平台名称",
value: "ebpname",
width: "",
align: "left",
},
{
name: '创建时间',
value: 'createTime',
width: '150',
align: 'left'
name: "创建时间",
value: "createTime",
width: "",
align: "left",
},
{
name: '申报企业',
value: 'declaringEnterprise',
width: '200',
align: 'left'
name: "申报企业",
value: "declaringEnterprise",
width: "",
align: "left",
},
{
name: '申报类型',
value: 'declaringType',
width: '100',
align: 'left'
}
]
}
name: "申报类型",
value: "declaringType",
width: "",
align: "left",
},
],
dictData: {
ebccode: [],
returnStatus: [],
},
loadings: {
searchLoading: false,
},
textareaVisible: {
formItemconsignmentCode: false,
formItemconsignmentHeadCode: false,
},
tableMaxheight: null,
};
},
created() {
getAllExportingBills({
pageIndex: 1,
pageSize: 20
}).then((res) => {
console.log('res', res)
this.tableData = res.data.value;
this.total = res.data.totalItems;
debugger;
})
this.search(0);
},
mounted() {
this.tableMaxheight = window.innerHeight - 300;
},
methods: {
input() {
this.$forceUpdate();
//查询
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;
obj.createTimeStart = "";
obj.createTimeEnd = "";
if (obj.createTime.length > 0) {
obj.createTimeStart = obj.createTime[0];
obj.createTimeEnd = obj.createTime[1];
}
getAllExportingBills(obj)
.then((res) => {
if (res.code === "200") {
this.tableData = res.data.value;
this.page.total = res.data.totalItems;
this.tableData.forEach((item, idx) => {
item.index = idx;
item.popoverLoading = false;
item.returnStatusPopoverType = false;
item.returnStatusPopoverData = false;
});
} else {
this.alertWarningMsg(res.message);
}
this.loadings.searchLoading = false;
})
.catch((err) => {
console.log(err);
this.loadings.searchLoading = false;
});
},
handleRowClick(row) {
const declareId = row.declareId;
this.$router.push({
path: '/exportBillDetail',
query: {
declareId
}
});
//重置
clear() {
this.sreachFormData = {
orderNo: "",
ebccode: "",
returnStatus: "",
createTime: [],
};
},
async search(val) {
try {
} catch (error) {
console.error("搜索出错:", error);
} finally {
// 无论成功还是失败,关闭加载状态
this.loadings.sreachLoading = false;
}
//导出
downloadData() {},
//文本域展示状态切换
textareaFocus(val) {
this.textareaVisible["formItem" + val.target.name.split("-")[0]] = true;
this.$nextTick(() => {
document
.querySelector("#popoverInput" + val.target.name.split("-")[0])
.focus();
document.querySelector(
"#inputInner--" + val.target.name.split("-")[0]
).style.display = "none";
});
},
textareaBlur(val) {
let inputInner = document.querySelector(
......@@ -349,7 +356,7 @@ export default {
}
});
let arr = [];
this.searchForm[val.target.name.split("-")[0]]
this.sreachFormData[val.target.name.split("-")[0]]
.replace(/[\n\,\;\;]/g, ",")
.replace(/[\t]/g, "")
.split(",")
......@@ -358,31 +365,84 @@ export default {
arr.push(str.trim());
}
});
this.searchForm[val.target.name.split("-")[0]] = arr.join("\n");
this.sreachFormData[val.target.name.split("-")[0]] = arr.join("\n");
this.$forceUpdate();
},
//文本域展示状态切换
textareaFocus(val) {
this.textareaVisible["formItem" + val.target.name.split("-")[0]] = true;
this.$nextTick(() => {
document
.querySelector("#popoverInput" + val.target.name.split("-")[0])
.focus();
document.querySelector(
"#inputInner--" + val.target.name.split("-")[0]
).style.display = "none";
});
//文本域输入内容数量处理
textareaLength(val) {
if (val.value != "" && val.value != null) {
let arr = [];
val.value
.trim()
.replace(/[\n\,\;\;]/g, ",")
.split(",")
.forEach((item) => {
if (item != "" && item != null) {
arr.push(item);
}
});
return arr.length;
} else {
return 0;
}
},
}
}
//分页
currentChange(val) {
this.page.pageNum = val.page;
this.search(1);
},
sizeChange(val) {
this.page.pageSize = val;
this.search(1);
},
dateChange(val) {},
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: right;
.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;
}
}
}
.entrySreachButton {
display: inline-block;
font-size: 20px;
color: $fedexButton !important;
.texttareaTip {
position: absolute;
top: 52%;
right: 20px;
transform: translate(0, -50%);
z-index: 10;
}
</style>
......
<template>
<div>
<div class="entrySreach">
<el-form
class="fedexFormStyle fedexformSreach fedexformSreachBottomBorder"
ref="sreachForm"
:model="searchForm"
:model="sreachFormData"
label-position="top"
size="small"
>
<el-row class="row-border">
<!-- 运单编号 -->
<el-col :span="5">
<Formitem label="运单编号" prop="consignmentCode">
<Formitem label="运单编号" prop="logisticsNo">
<el-popover
placement="bottom"
width="320"
trigger="manual"
popper-class="popoverconsignmentCode"
v-model="textareaVisible.formItemconsignmentCode"
popper-class="popoverlogisticsNo"
v-model="textareaVisible.formItemlogisticsNo"
>
<el-input
name="consignmentCode-textarea"
name="logisticsNo-textarea"
type="textarea"
:rows="5"
id="popoverInputconsignmentCode"
id="popoverInputlogisticsNo"
class="inputShadow textareaPopover"
v-model="searchForm.consignmentCode"
v-model="sreachFormData.logisticsNo"
resize="none"
maxlength="13000"
placeholder=""
......@@ -32,79 +33,89 @@
></el-input>
<el-input
slot="reference"
name="consignmentCode"
name="logisticsNo"
type="textarea"
:rows="1"
class="inputShadow"
id="inputInner--consignmentCode"
v-model="searchForm.consignmentCode"
id="inputInner--logisticsNo"
v-model="sreachFormData.logisticsNo"
resize="none"
placeholder=""
@focus="textareaFocus"
@input="input"
></el-input>
</el-popover>
<el-badge
v-if="
!textareaVisible.formItemlogisticsNo &&
textareaLength({
key: 'logisticsNo',
value: sreachFormData.logisticsNo,
}) > 1
"
type="info"
:value="`+${textareaLength({
key: 'logisticsNo',
value: sreachFormData.logisticsNo,
})}`"
class="item texttareaTip"
/>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="物流企业代码" prop="factoryCode">
<!-- 物流企业代码 -->
<el-col :span="5">
<Formitem label="物流企业代码" prop="logisticsCode">
<el-select
type="text"
id="inputInner--declaredPort"
v-model="searchForm.declaredPort"
id="inputInner--logisticsCode"
v-model="sreachFormData.logisticsCode"
clearable
placeholder=""
@change="portChange"
>
<el-option
v-for="(item, index) in dictData.userport"
v-for="(item, index) in dictData.logisticsCode"
:key="index"
:label="item.name"
:value="item.name"
:value="item.code"
></el-option>
</el-select>
</Formitem>
</el-col>
<!-- 回执状态 -->
<el-col :span="5">
<Formitem label="回执状态" prop="declaredPort">
<Formitem label="回执状态" prop="returnStatus">
<el-select
type="text"
id="inputInner--receiptStatus"
v-model="searchForm.receiptStatus"
id="inputInner--returnStatus"
v-model="sreachFormData.returnStatus"
clearable
placeholder=""
>
<el-option
v-for="(item, index) in dictData.userport"
v-for="(item, index) in dictData.returnStatus"
:key="index"
:label="item.name"
:value="item.name"
:value="item.code"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="4">
<Formitem label="创建时间" prop="receiptTime">
<!-- 创建时间 -->
<el-col :span="5">
<Formitem label="创建时间" prop="createTime" :activeType="true">
<el-date-picker
class="inputInner--accsDataImportTime"
id="inputInner--accsDataImportTime"
v-model="searchForm.accsDataImportTime"
class="inputInner--createTime"
id="inputInner--createTime"
v-model="sreachFormData.createTime"
type="daterange"
format="yyyy-MM-dd"
prefix-icon="none"
value-format="yyyyMMdd"
value-format="yyyy-MM-dd"
range-separator="至"
start-placeholder=""
clearable
end-placeholder=""
:picker-options="importTimePickerOptions"
@blur="datePickerBlur"
@change="accsDataImportTimeChange"
>
</el-date-picker>
@chagne="dateChange"
/>
</Formitem>
</el-col>
<el-col :span="2">
<el-form-item class="textCenter">
<el-button
......@@ -116,32 +127,30 @@
></el-button>
</el-form-item>
</el-col>
<el-col :span="4">
<el-col :span="2">
<el-form-item class="textCenter">
<el-button
icon="el-icon-refresh"
type="text"
size="small"
:loading="loadings.searchLoading"
@click="search(0)"
>重置
icon="el-icon-refresh"
@click="clear"
>
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div style="text-align: right; margin: 10px">
<div class="optionButton">
<el-button
class="entrySaveButton"
size="small"
:loading="loadings.downloadLoading2"
@click="downloadBpiData('log')"
icon="el-icon-download"
@click="downloadData"
>
<svg-icon class="el-icon-user-solid" icon-class="fedexUpBlue"></svg-icon>
导出
</el-button>
</div>
<Table
class="fedexDetialTable fedexSreachTable"
ref="entryTable"
......@@ -151,176 +160,288 @@
:border="true"
:pagination="true"
:order="false"
:loading="loadings.sreachLoading"
:loading="loadings.searchLoading"
:page="page.pageIndex"
:pageSizes="[20, 30, 50, 100]"
:totalCount="total"
:totalCount="page.total"
@sizeChange="sizeChange"
@currentChange="currentChange"
:selection="true"
:selection="false"
:selectFixed="false"
@rowClick="handleRowClick"
@tableSelect="tableSelect"
@tableSelectAll="tableSelectAll"
:rowSelectDataType="false"
:selected="selected"
>
<template v-slot:waveName="scope">
<span>{{ `${scope.row.waveName}(${scope.row.waveExt2})` }}</span>
<template v-slot:returnStatus="scope">
<span>{{ scope.row.returnStatus }}</span>
</template>
<template v-slot:logisticsNo="scope">
<el-button type="text">{{ scope.row.logisticsNo }}</el-button>
</template>
</Table>
</div>
</template>
<script>
import {getAllExportingBills, getAllTransportBills} from "@/api/query/query";
import { getAllExportingTransportBills } from "@/api/exportQuery.js";
export default {
name: "index",
data() {
return {
searchForm: {
declaredPort: "",
consStatus: "",
consignmentCode: "",
accsDataImportTime: [],
ownerName: "",
consignmentHeadCode: "",
isPushCustomsSys: "",
waitOperStatus: "",
declTime: [],
},
loadings: {
searchLoading: false,
sreachFormData: {
logisticsNo: "",
logisticsCode: "",
returnStatus: "",
createTime: [],
},
page: {
pageIndex: 1,
pageSize: 20,
},
textareaVisible: {
formItemconsignmentCode: false,
formItemconsignmentHeadCode: false,
},
sizeChange(val) {
this.page.pageSize = val;
this.sreach(1);
},
//分页
currentChange(val) {
this.page.pageIndex = val.page;
this.search(1);
total: 0,
},
tableData: [],
total: 0,
tableMaxheight: null,
headerData: [
{
name: "回执状态",
value: "returnStatus",
width: "150",
width: "",
align: "left",
slot: true,
},
{
name: "运单编号",
value: "orderNo",
width: '150',
align: 'left'
value: "logisticsNo",
width: "",
align: "left",
slot: true,
},
{
name: '物流企业代码',
value: 'orderType',
width: '150',
align: 'left'
name: "物流企业代码",
value: "logisticsCode",
width: "",
align: "left",
},
{
name: '物流企业名称',
value: 'ebccode',
width: '200',
align: 'left'
name: "物流企业名称",
value: "logisticsName",
width: "",
align: "left",
},
{
name: '主要货物信息',
value: 'ebcname',
width: '200',
align: 'left'
name: "主要货物信息",
value: "goodsInfo",
width: "",
align: "left",
},
{
name: '创建时间',
value: 'createTime',
width: '150',
align: 'left'
name: "创建时间",
value: "",
width: "",
align: "left",
},
{
name: '申报企业',
value: 'declaringEnterprise',
width: '200',
align: 'left'
name: "申报企业",
value: "",
width: "",
align: "left",
},
{
name: '申报类型',
value: 'declaringType',
width: '100',
align: 'left'
}
name: "申报类型",
value: "",
width: "",
align: "left",
},
],
dictData: {
userport: [
{name: "Shanghai Port", code: "SH"},
{name: "Beijing Port", code: "BJ"},
{name: "Guangzhou Port", code: "GZ"},
{name: "Shenzhen Port", code: "SZ"},
{name: "Tianjin Port", code: "TJ"},
],
ebccode: [],
returnStatus: [],
},
}
loadings: {
searchLoading: false,
},
textareaVisible: {
formItemconsignmentCode: false,
formItemconsignmentHeadCode: false,
},
tableMaxheight: null,
};
},
created() {
getAllTransportBills({
pageIndex: 1,
pageSize: 20
}).then((res) => {
console.log('res', res)
this.tableData = res.data.value;
this.total = res.data.totalItems;
debugger;
})
this.search(0);
},
mounted() {
this.tableMaxheight = window.innerHeight - 300;
},
methods: {
tableSelect(val) {
this.selected = val.selection;
//查询
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;
obj.createTimeStart = "";
obj.createTimeEnd = "";
if (obj.createTime.length > 0) {
obj.createTimeStart = obj.createTime[0];
obj.createTimeEnd = obj.createTime[1];
}
if (obj.logisticsNo != null && obj.logisticsNo != "") {
obj.logisticsNo = obj.logisticsNo.split("\n");
} else {
obj.logisticsNo = [];
}
getAllExportingTransportBills(obj)
.then((res) => {
if (res.code === "200") {
this.tableData = res.data.value;
this.page.total = res.data.totalItems;
this.tableData.forEach((item, idx) => {
item.index = idx;
item.popoverLoading = false;
item.returnStatusPopoverType = false;
item.returnStatusPopoverData = false;
});
} else {
this.alertWarningMsg(res.message);
}
this.loadings.searchLoading = false;
})
.catch((err) => {
console.log(err);
this.loadings.searchLoading = false;
});
},
//重置
clear() {
this.sreachFormData = {
orderNo: "",
ebccode: "",
returnStatus: "",
createTime: [],
};
},
tableSelectAll(val) {
this.selected = val;
//导出
downloadData() {},
//文本域展示状态切换
textareaFocus(val) {
this.textareaVisible["formItem" + val.target.name.split("-")[0]] = true;
this.$nextTick(() => {
document
.querySelector("#popoverInput" + val.target.name.split("-")[0])
.focus();
document.querySelector(
"#inputInner--" + val.target.name.split("-")[0]
).style.display = "none";
});
},
handleRowClick(row) {
const declareId = row.declareId;
this.$router.push({
path: '/exportTransportDetail',
query: {
declareId
textareaBlur(val) {
let inputInner = document.querySelector(
"#inputInner--" + val.target.name.split("-")[0]
);
this.textareaVisible["formItem" + val.target.name.split("-")[0]] = false;
inputInner.style.display = "block";
this.$nextTick(() => {
inputInner.blur();
if (
inputInner.value != undefined &&
inputInner.value != "" &&
inputInner.value != null
) {
inputInner.classList.add("inputFocus");
} else {
inputInner.classList.remove("inputFocus");
}
});
let arr = [];
this.sreachFormData[val.target.name.split("-")[0]]
.replace(/[\n\,\;\;]/g, ",")
.replace(/[\t]/g, "")
.split(",")
.forEach((str, index) => {
if (str != null && str != "" && index <= 1000) {
arr.push(str.trim());
}
});
this.sreachFormData[val.target.name.split("-")[0]] = arr.join("\n");
this.$forceUpdate();
},
async search(val) {
try {
} catch (error) {
console.error("搜索出错:", error);
} finally {
// 无论成功还是失败,关闭加载状态
this.loadings.sreachLoading = false;
//文本域输入内容数量处理
textareaLength(val) {
if (val.value != "" && val.value != null) {
let arr = [];
val.value
.trim()
.replace(/[\n\,\;\;]/g, ",")
.split(",")
.forEach((item) => {
if (item != "" && item != null) {
arr.push(item);
}
});
return arr.length;
} else {
return 0;
}
},
}
}
//分页
currentChange(val) {
this.page.pageNum = val.page;
this.search(1);
},
sizeChange(val) {
this.page.pageSize = val;
this.search(1);
},
dateChange(val) {},
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: right;
.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;
}
}
}
.entrySreachButton {
display: inline-block;
font-size: 20px;
color: $fedexButton !important;
.texttareaTip {
position: absolute;
top: 52%;
right: 20px;
transform: translate(0, -50%);
z-index: 10;
}
</style>
......
<template>
<div style="width: 100%; height: 100%; position: relative" v-if="imgShow">
<el-image
:src="url"
fit="fill"
style="display: block; width: 100%; height: 100%; opacity: 0.9"
lazy
></el-image>
<div class="model"></div>
</div>
</template>
<script>
import indexBackground from "@/assets/images/indexBackground.jpg";
import { getLoginType } from "@/utils/auth";
export default {
props: {},
data() {
......@@ -22,36 +14,10 @@ export default {
};
},
created() {
getLoginType() ? (this.fcl = true) : (this.fcl = false);
this.checkImgType();
},
methods: {
checkImgType() {
let interval = setInterval(() => {
if (
this.$store.getters.userData.organization &&
this.$store.getters.userData.organization.code == "customer"
// ||getToken().split(".")[0] == "2"
) {
clearInterval(interval);
if (this.fcl) {
} else {
this.imgShow = false;
this.url = "";
this.$router.push({
path: "/newui_noentrySreach_parent/newui_noentrySreach_leaf",
});
}
} else if (
this.$store.getters.userData.organization &&
this.$store.getters.userData.organization.code != "customer"
) {
clearInterval(interval);
this.url = indexBackground;
this.imgShow = true;
}
}, 500);
},
},
};
</script>
......
......@@ -143,7 +143,7 @@
size="small"
:loading="loadings.searchLoading"
@click="search(0)"
>重置
>重置
</el-button>
</el-form-item>
</el-col>
......@@ -156,7 +156,10 @@
:loading="loadings.downloadLoading2"
@click="downloadBpiData('log')"
>
<svg-icon class="el-icon-user-solid" icon-class="fedexUpBlue"></svg-icon>
<svg-icon
class="el-icon-user-solid"
icon-class="fedexUpBlue"
></svg-icon>
导出
</el-button>
</div>
......@@ -192,8 +195,6 @@
</template>
<script>
import {getAllExportingBills, getAllTransportBills} from "@/api/query/query";
export default {
name: "index",
data() {
......@@ -242,86 +243,76 @@ export default {
{
name: "提运单号",
value: "orderNo",
width: '150',
align: 'left'
width: "150",
align: "left",
},
{
name: '运单编号',
value: 'orderType',
width: '150',
align: 'left'
name: "运单编号",
value: "orderType",
width: "150",
align: "left",
},
{
name: '物流企业名称',
value: 'ebccode',
width: '200',
align: 'left'
name: "物流企业名称",
value: "ebccode",
width: "200",
align: "left",
},
{
name: '运输方式',
value: 'ebcname',
width: '200',
align: 'left'
name: "运输方式",
value: "ebcname",
width: "200",
align: "left",
},
{
name: '运输工具名称',
value: 'createTime',
width: '150',
align: 'left'
name: "运输工具名称",
value: "createTime",
width: "150",
align: "left",
},
{
name: '航班航次号',
value: 'declaringEnterprise',
width: '200',
align: 'left'
name: "航班航次号",
value: "declaringEnterprise",
width: "200",
align: "left",
},
{
name: '离境时间',
value: 'declaringEnterprise',
width: '200',
align: 'left'
name: "离境时间",
value: "declaringEnterprise",
width: "200",
align: "left",
},
{
name: '报送类型',
value: 'declaringEnterprise',
width: '200',
align: 'left'
name: "报送类型",
value: "declaringEnterprise",
width: "200",
align: "left",
},
{
name: '业务状态',
value: 'declaringType',
width: '100',
align: 'left'
name: "业务状态",
value: "declaringType",
width: "100",
align: "left",
},
{
name: '申报日期',
value: 'declaringType',
width: '100',
align: 'left'
}
name: "申报日期",
value: "declaringType",
width: "100",
align: "left",
},
],
dictData: {
userport: [
{name: "Shanghai Port", code: "SH"},
{name: "Beijing Port", code: "BJ"},
{name: "Guangzhou Port", code: "GZ"},
{name: "Shenzhen Port", code: "SZ"},
{name: "Tianjin Port", code: "TJ"},
{ name: "Shanghai Port", code: "SH" },
{ name: "Beijing Port", code: "BJ" },
{ name: "Guangzhou Port", code: "GZ" },
{ name: "Shenzhen Port", code: "SZ" },
{ name: "Tianjin Port", code: "TJ" },
],
},
}
},
created() {
getAllTransportBills({
pageIndex: 1,
pageSize: 20
}).then((res) => {
console.log('res', res)
this.tableData = res.data.value;
this.total = res.data.totalItems;
debugger;
})
};
},
created() {},
methods: {
tableSelect(val) {
this.selected = val.selection;
......@@ -332,15 +323,14 @@ export default {
handleRowClick(row) {
const declareId = row.declareId;
this.$router.push({
path: '/logisticsExitDetail',
path: "/logisticsExitDetail",
query: {
declareId
}
declareId,
},
});
},
async search(val) {
try {
} catch (error) {
console.error("搜索出错:", error);
} finally {
......@@ -348,8 +338,8 @@ export default {
this.loadings.sreachLoading = false;
}
},
}
}
},
};
</script>
<style scoped lang="scss">
......
<template>
<el-dialog
class="entryDialog classCUploadDialog"
title="申报数据导入"
:visible.sync="outerVisible"
:show-close="false"
width="35%"
:close-on-click-modal="false"
v-loading="loadings.dialogLoading"
:element-loading-text="loadingText"
@close="close"
>
<div class="modelItem">
<div class="modelItem-title">
<div>数据导入</div>
<div>
<el-button
type="text"
icon="el-icon-download"
:loadings="$parent.loadings.dwonloadModelLoading"
@click="dwonloadModelFile"
>导入模板下载</el-button
>
</div>
</div>
<div class="uploadItem">
<div class="uploadbox">
<el-button
size="mini"
type="text"
v-loading="loadings.uploadLoading"
@click="uploadFile"
>上传文件
</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="{}"
accept=".xlsx"
:before-upload="beforeUpload"
:on-remove="handleRemove"
:on-success="handleSuccess"
:on-change="fileChange"
:file-list="fileList"
@clearFiles="clearFile"
>
</el-upload>
</div>
<div class="fileList" v-if="formData.file != null">
<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>
</div>
<div class="dialogOption entrySave">
<el-button
class="entrySaveButton"
:disabled="loadings.uploadLoading"
@click="close"
>关闭</el-button
>
</div>
</el-dialog>
</template>
<script>
import { uploadDeclareData } from "@/api/declareData-api.js";
export default {
props: {
outerVisible: {
type: Boolean,
default: false,
},
},
data() {
return {
formData: {
file: null,
},
searchForm: {},
loadings: {
dialogLoading: false,
uploadLoading: false,
sreachLoading: false,
},
uploadType: false,
fileList: [],
loadingText: "数据导入中,请稍后!",
};
},
watch: {
outerVisible(val) {
if (val) {
this.uploadType = false;
}
},
},
methods: {
dwonloadModelFile() {
this.$emit("dwonloadModelFile");
},
//文件上传
uploadFile() {
this.$refs.uploadFile.$refs["upload-inner"].handleClick();
},
//文件校验
beforeUpload(val) {
if (
val.type !=
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
) {
this.alertWarningMsg("请上传Excel文件!");
return false;
} else {
return true;
}
},
fileUpload(val) {
const reader = new FileReader();
reader.readAsDataURL(val.file);
reader.onload = (e) => {
this.loadings.dialogLoading = true;
let obj = {
multipartFile: this.base64ConvertFile(e.target.result, val.file.name),
};
uploadDeclareData(obj)
.then((res) => {
if (res.code === "200") {
this.msgSuccess("上传成功!");
this.handleRemove();
this.close();
this.uploadType = true;
} else {
this.alertWarningMsg(res.message);
this.loadings.dialogLoading = false;
}
})
.catch((err) => {
console.log(err);
this.loadings.dialogLoading = false;
});
};
},
fileChange(val) {},
handleSuccess() {},
handleRemove() {
this.fileList = [];
},
clearFile() {},
close() {
this.handleRemove();
this.$emit("close", this.uploadType);
},
},
};
</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;
}
}
.uploadItem {
margin-bottom: 5px;
.uploadbox {
width: 100%;
height: 40px;
line-height: 20px;
background-color: $formItemBackgroundColor;
padding: 4px 8px;
margin-top: 5px;
display: flex;
justify-content: space-between;
.el-button {
font-weight: 400 !important;
}
}
}
.fileList {
width: 100%;
.fileList-item {
display: flex;
justify-content: space-between;
padding: 5px 15px 5px 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;
}
}
}
.fedexformSreachBottomBorder {
border-top: 1px solid $fedexBorder;
border-left: 1px solid $fedexBorder;
border-right: 1px solid $fedexBorder;
}
.textCenter {
.el-button {
font-size: 20px;
}
}
</style>
<template>
<div class="entrySreach" v-loading="loadings.templateLoading">
<div>
<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="billNo">
<el-input
type="text"
class="inputShadow"
id="inputInner--billNo"
resize="none"
v-model="sreachFormData.billNo"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="5">
<!-- 订单编号 -->
<Formitem label="订单编号" prop="orderNo">
<el-select
type="text"
id="inputInner--orderNo"
v-model="sreachFormData.orderNo"
clearable
placeholder=""
>
<el-option
v-for="(item, index) in dictData.logisticsNo"
:key="index"
:label="item.name"
:value="item.code"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="5">
<!-- 运单编号 -->
<Formitem label="运单编号" prop="logisticsNo">
<el-popover
placement="bottom"
width="320"
trigger="manual"
popper-class="popoverlogisticsNo"
v-model="textareaVisible.formItemlogisticsNo"
>
<el-input
name="logisticsNo-textarea"
type="textarea"
:rows="5"
id="popoverInputlogisticsNo"
class="inputShadow textareaPopover"
v-model="sreachFormData.logisticsNo"
resize="none"
maxlength="13000"
placeholder=""
@blur="textareaBlur"
@input="input"
></el-input>
<el-input
slot="reference"
name="logisticsNo"
type="textarea"
:rows="1"
class="inputShadow"
id="inputInner--logisticsNo"
v-model="sreachFormData.logisticsNo"
resize="none"
placeholder=""
@focus="textareaFocus"
@input="input"
></el-input>
</el-popover>
<el-badge
v-if="
!textareaVisible.formItemlogisticsNo &&
textareaLength({
key: 'logisticsNo',
value: sreachFormData.logisticsNo,
}) > 1
"
type="info"
:value="`+${textareaLength({
key: 'logisticsNo',
value: sreachFormData.logisticsNo,
})}`"
class="item texttareaTip"
/>
</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="至"
@chagne="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.sreachLoading"
@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-row class="backgroundRow">
<el-col :span="5">
<!-- 回执类型 -->
<Formitem label="回执类型" prop="receiptType">
<el-select
type="text"
id="inputInner--receiptType"
v-model="sreachFormData.receiptType"
clearable
placeholder=""
>
<el-option
v-for="(item, index) in dictData.receiptType"
:key="index"
:label="item.name"
:value="item.code"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="5">
<!-- 回执状态 -->
<Formitem label="回执状态" prop="receiptStatus">
<el-select
type="text"
id="inputInner--receiptStatus"
v-model="sreachFormData.receiptStatus"
clearable
placeholder=""
>
<el-option
v-for="(item, index) in dictData.receiptStatus"
:key="index"
:label="item.name"
:value="item.code"
></el-option>
</el-select>
</Formitem>
</el-col>
</el-row>
</el-form>
</div>
<div class="optionButton">
<div class="optionButton-left">
<el-button class="entrySaveButton" size="small" @click="uploadData"
><svg-icon
class="el-icon-user-solid"
icon-class="uploadCloud"
></svg-icon
>一键导入
</el-button>
<el-button
class="entrySaveButton"
size="small"
icon="el-icon-download"
:loading="loadings.dwonloadModelLoading"
@click="dwonloadModelFile"
>
导入模版下载
</el-button>
</div>
<div class="optionButton-right">
<el-dropdown
style="margin-right: 10px"
size="small"
split-button
type="primary"
v-loading="loadings.dropDownLoading"
:disabled="selected.length == 0"
@command="dropdownChange"
@click="declareData"
>
<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-item
:command="{ code: 'totalScore', name: '清单总分单申报' }"
>清单总分单申报</el-dropdown-item
>
<el-dropdown-item
:command="{ code: 'cancellation', name: '撤销单申报' }"
>撤销单申报</el-dropdown-item
>
<el-dropdown-item
:command="{ code: 'logisticsDeparture', name: '离境单申报' }"
>离境单申报</el-dropdown-item
>
</el-dropdown-menu>
</el-dropdown>
<el-button
class="entrySaveButton"
size="small"
icon="el-icon-download"
@click="downloadData"
>
导出
</el-button>
</div>
</div>
<Table
class="fedexDetialTable fedexSreachTable"
ref="entryTable"
:data="tableData"
:headerData="headerData"
:maxHeight="tableMaxheight"
:border="true"
:pagination="true"
:order="false"
:loading="loadings.sreachLoading"
:page="page.pageNum"
:pageSizes="[20, 30, 50, 100]"
:totalCount="page.total"
@sizeChange="sizeChange"
@currentChange="currentChange"
:selection="true"
:selectFixed="false"
@tableSelect="tableSelect"
@tableSelectAll="tableSelectAll"
:rowSelectDataType="false"
@cellClick="cellClick"
:selected="selected"
>
<template v-slot:orderReceiptStatus="scope">
<el-popover
:popper-class="`poppercustoms${scope.row.consignmentId} portLogPopper`"
placement="left"
:visible-arrow="false"
title=""
width="750"
trigger="manual"
v-model="scope.row.orderReceiptStatusPopoverType"
>
<div style="text-align: right">
<i
class="el-icon-close"
style="cursor: pointer; font-size: 20px; font-weight: 700"
@click.stop="popoverClose"
></i>
</div>
<div v-loading="scope.row.popoverLoading">
<div>
<span style="font-weight: 700; color: #515a6e">订单编号:</span
>{{ scope.row.orderno }}
</div>
<Table
ref="customsClearanceReceiptStatusTable"
class="fedexDetialTable mt20"
:data="scope.row.orderReceiptStatusPopoverData"
:headerData="receiptDataHead"
:selection="false"
:selectFixed="false"
:order="false"
:border="true"
:rowSelectDataType="false"
:loading="loadings.logTableLoading"
:pagination="false"
:page="1"
:pageSizes="[20, 30, 50, 100]"
:totalCount="0"
:emptyText="$t('portEntry.emptyText')"
height="350px"
maxHeight="500px"
rowKey="id"
>
<template v-slot:createTime="scoped">
<span>{{ formatDate(scoped.row.createTime) }}</span>
</template>
</Table>
</div>
<el-button
slot="reference"
type="text"
@click.stop="popoverChange(scope.row, 'orderReceiptStatus')"
>{{
scope.row.orderReceiptStatus == null ||
scope.row.orderReceiptStatus == ""
? "-"
: scope.row.orderReceiptStatus
}}</el-button
>
</el-popover>
</template>
<template v-slot:logisticsReceiptStatus="scope">
<span>{{
scope.row.orderReceiptStatus == null ||
scope.row.orderReceiptStatus == ""
? "-"
: scope.row.orderReceiptStatus
}}</span>
</template>
<template v-slot:listReceiptStatus="scope">
<span>{{
scope.row.orderReceiptStatus == null ||
scope.row.orderReceiptStatus == ""
? "-"
: scope.row.orderReceiptStatus
}}</span>
</template>
</Table>
<DialogVue
:outerVisible="outerVisible"
@dwonloadModelFile="dwonloadModelFile"
@close="close"
/>
</div>
</template>
<script>
import { searchDeclareData, declareDataUpload } from "@/api/declareData-api.js";
import DialogVue from "./dialog.vue";
export default {
name: "",
components: {
DialogVue,
},
data() {
return {
sreachFormData: {
billNo: "",
logisticsNo: "",
orderNo: "",
receiptStatus: null,
receiptType: null,
createTime: [],
},
page: {
pageNum: 1,
pageSize: 20,
total: 0,
},
tableData: [],
headerData: [
{
name: "提运单号",
value: "billNo",
width: "",
align: "left",
},
{
name: "物流运单号",
value: "logisticsWaybillNumber",
width: "",
align: "left",
},
{
name: "订单编号",
value: "orderno",
width: "",
align: "left",
},
{
name: "电商企业",
value: "ebccode",
width: "",
align: "left",
},
{
name: "订单回执",
value: "orderReceiptStatus",
width: "",
align: "left",
slot: true,
},
{
name: "收款单回执",
value: "",
width: "",
align: "left",
slot: true,
},
{
name: "物流单回执",
value: "logisticsReceiptStatus",
width: "",
align: "left",
slot: true,
},
{
name: "清单回执",
value: "listReceiptStatus",
width: "",
align: "left",
slot: true,
},
{
name: "清单总分单回执",
value: "",
width: "",
align: "left",
slot: true,
},
],
receiptDataHead: [
{
name: "回执状态",
value: "",
width: "",
align: "left",
},
{
name: "状态时间",
value: "",
width: "",
align: "left",
},
{
name: "回执描述",
value: "",
width: "",
align: "left",
},
],
selected: [],
dictData: {
logisticsNo: [],
receiptStatus: [],
receiptType: [],
},
loadings: {
templateLoading: false,
sreachLoading: false,
dwonloadModelLoading: false,
dropDownLoading: false,
},
textareaVisible: {},
tableMaxheight: null,
outerVisible: false,
dropdownName: "一键申报",
dropdownCode: "full",
};
},
created() {
this.search(0);
},
mounted() {
this.tableMaxheight = window.innerHeight - 300;
},
methods: {
//查询申报数据
search(val) {
this.loadings.sreachLoading = true;
this.selected = [];
if (val == 0) {
this.page.pageNum = 1;
}
let obj = this.sreachFormData;
obj.pageNum = this.page.pageNum;
obj.pageSize = this.page.pageSize;
obj.startCreateTime = "";
obj.endCreateTime = "";
if (this.sreachFormData.createTime.length > 0) {
obj.startCreateTime = obj.createTime[0];
obj.endCreateTime = obj.createTime[1];
}
searchDeclareData(obj)
.then((res) => {
if (res.code === "200") {
this.tableData = res.data.value;
this.page.total = res.data.totalItems;
this.tableData.forEach((item, idx) => {
item.index = idx;
item.popoverLoading = false;
item.orderReceiptStatusPopoverType = false;
item.listReceiptStatusPopoverType = false;
item.logisticsReceiptStatusPopoverType = false;
item.orderReceiptStatusPopoverData = [];
item.listReceiptStatusPopoverData = [];
item.logisticsReceiptStatusPopoverData = [];
});
} else {
this.alertWarningMsg(res.message);
}
this.loadings.sreachLoading = false;
})
.catch((err) => {
console.log(err);
this.loadings.sreachLoading = false;
});
},
//重置数据
clear() {
this.sreachFormData = {
billNo: "",
logisticsNo: "",
orderNo: "",
receiptStatus: null,
receiptType: null,
createTime: [],
};
},
//上传申报数据
uploadData() {
this.outerVisible = true;
},
//下载模板
dwonloadModelFile() {
this.loadings.dwonloadModelLoading = true;
this.fileDownload
.downLoadZip(
"api",
"declareDataModel",
"申报数据模板.xlsx",
"xlsx",
"get"
)
.finally(() => {
this.loadings.dwonloadModelLoading = false;
});
},
//导出
downloadData() {},
//申报
declareData() {
this.loadings.dropDownLoading = true;
let obj = {
declareIds: [],
type: this.dropdownCode,
};
this.selected.forEach((item) => {
obj.declareIds.push(item.declareId);
});
declareDataUpload(obj)
.then((res) => {
if (res.code === "200") {
this.alertSuccessMsg(res.message);
} else {
this.alertWarningMsg(res.message);
}
this.loadings.dropDownLoading = false;
})
.catch((err) => {
console.log(err);
this.loadings.dropDownLoading = false;
});
},
//切换申报模式
dropdownChange(val) {
this.dropdownName = val.name;
this.dropdownCode = val.code;
},
close(val) {
if (val) {
this.search(1);
}
this.outerVisible = false;
},
//弹框关闭
popoverClose(val) {
this.tableData.forEach((item) => {
item.popoverLoading = false;
item.orderReceiptStatusPopoverType = false;
item.listReceiptStatusPopoverType = false;
item.logisticsReceiptStatusPopoverType = false;
item.orderReceiptStatusPopoverData = [];
item.listReceiptStatusPopoverData = [];
item.logisticsReceiptStatusPopoverData = [];
});
this.$refs.entryTable.$refs.tables.$refs.bodyWrapper.style.overflowY =
"auto";
},
//弹框状态改版
popoverChange(data, type) {
this.popoverClose(type);
let arr = JSON.parse(JSON.stringify(this.tableData));
arr.forEach((item) => {
item[`${type}PopoverData`] = [];
if (data.declareId != item.declareId) {
item[`${type}PopoverLoading`] = false;
item[`${type}PopoverType`] = false;
} else {
item[`${type}PopoverLoading`] = true;
item[`${type}PopoverType`] = !JSON.parse(
JSON.stringify(item[`${type}PopoverType`])
);
}
});
if (!data[`${type}PopoverType`]) {
this.$refs.entryTable.$refs.tables.$refs.bodyWrapper.style.overflowY =
"hidden";
} else {
this.$refs.entryTable.$refs.tables.$refs.bodyWrapper.style.overflowY =
"auto";
}
// this.searchLog({
// tableData: arr,
// data: data,
// type: !data[`${type}PopoverType`],
// status: type,
// });
this.$nextTick(() => {
document.getElementsByClassName("el-table__row").forEach((dom1, i) => {
if (i == data.idx) {
dom1.classList.add("activeRow");
} else {
dom1.classList.remove("hover-row");
dom1.classList.remove("activeRow");
}
});
let interval = setInterval(() => {
if (
document.getElementsByClassName(`popper${type}${data.declareId}`)
.length == 1
) {
clearInterval(interval);
}
document
.getElementsByClassName(`popper${type}${data.declareId}`)
.forEach((dom, index) => {
if (index > 0) {
dom.style.display = "none";
dom.remove();
}
});
}, 100);
});
},
tableSelect(val) {
this.selected = val.selection;
},
tableSelectAll(val) {
this.selected = val;
},
//分页
currentChange(val) {
this.page.pageNum = val.page;
this.search(1);
},
sizeChange(val) {
this.page.pageSize = val;
this.search(1);
},
cellClick() {},
//文本域展示状态切换
textareaFocus(val) {
this.textareaVisible["formItem" + val.target.name.split("-")[0]] = true;
this.$nextTick(() => {
document
.querySelector("#popoverInput" + val.target.name.split("-")[0])
.focus();
document.querySelector(
"#inputInner--" + val.target.name.split("-")[0]
).style.display = "none";
});
},
textareaBlur(val) {
let inputInner = document.querySelector(
"#inputInner--" + val.target.name.split("-")[0]
);
this.textareaVisible["formItem" + val.target.name.split("-")[0]] = false;
inputInner.style.display = "block";
this.$nextTick(() => {
inputInner.blur();
if (
inputInner.value != undefined &&
inputInner.value != "" &&
inputInner.value != null
) {
inputInner.classList.add("inputFocus");
} else {
inputInner.classList.remove("inputFocus");
}
});
let arr = [];
this.sreachFormData[val.target.name.split("-")[0]]
.replace(/[\n\,\;\;]/g, ",")
.replace(/[\t]/g, "")
.split(",")
.forEach((str, index) => {
if (str != null && str != "" && index <= 1000) {
arr.push(str.trim());
}
});
this.sreachFormData[val.target.name.split("-")[0]] = arr.join("\n");
this.$forceUpdate();
},
//文本域输入内容数量处理
textareaLength(val) {
if (val.value != "" && val.value != null) {
let arr = [];
val.value
.trim()
.replace(/[\n\,\;\;]/g, ",")
.split(",")
.forEach((item) => {
if (item != "" && item != null) {
arr.push(item);
}
});
return arr.length;
} else {
return 0;
}
},
input() {
this.$forceUpdate();
},
dateChange(val) {},
},
};
</script>
<style lang="scss" scoped>
@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: right;
display: flex;
justify-content: space-between;
.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;
}
}
}
.texttareaTip {
position: absolute;
top: 52%;
right: 20px;
transform: translate(0, -50%);
z-index: 10;
}
</style>