jinhui.wang

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

1 +import request from '@/utils/request'
2 +
3 +//获取自定义设置数据
4 +/**
5 + * @param billNo 提运单号
6 + * @param orderNo 订单编号
7 + * @param logisticsNo 运单编号
8 + * @param startCreateTime 创建开始时间
9 + * @param endCreateTime 创建结束时间
10 + * @param receiptType 回执类型
11 + * @param receiptStatus 回执状态
12 + * @param pageNum *
13 + * @param pageSize *
14 + */
15 +export function searchDeclareData(data) {
16 + return request({
17 + url: '/bus-customer/declareData/getDeclareDataList',
18 + method: 'post',
19 + data: data,
20 + })
21 +}
22 +
23 +//申报数据导入
24 +/**
25 + * @param multipartFile * 提运单号
26 + */
27 +export function uploadDeclareData(data) {
28 + let formData = new FormData
29 + formData.append("multipartFile", data.multipartFile);
30 + return request({
31 + url: '/bus-customer/declareData/import',
32 + method: 'post',
33 + data: formData,
34 + })
35 +}
36 +
37 +//数据申报
38 +/**
39 + * @param declareIds * id list
40 + * @param type *
41 + */
42 +export function declareDataUpload(data) {
43 + return request({
44 + url: '/bus-customer/declareData/' + data.type,
45 + method: 'post',
46 + data: data.declareIds,
47 + })
48 +}
49 +
1 +import request from '@/utils/request'
2 +
3 +//获取自定义设置数据
4 +/**
5 + * @param ebccode 电商企业代码
6 + * @param orderNo 电商订单/海外仓订仓单编号
7 + * @param returnStatus 回执状态
8 + * @param createTimeStart 创建开始时间
9 + * @param createTimeEnd 创建结束时间
10 + * @param pageNum *
11 + * @param pageSize *
12 + */
13 +export function getAllExportingBills(data) {
14 + return request({
15 + url: '/bus-customer/exportOrder/search',
16 + method: 'post',
17 + data: data,
18 + })
19 +}
20 +
21 +//获取自定义设置数据
22 +/**
23 + * @param logisticsNo 物流运单编号
24 + * @param logisticsCode 物流企业代码
25 + * @param returnStatus 回执状态
26 + * @param createTimeStart 创建开始时间
27 + * @param createTimeEnd 创建结束时间
28 + * @param pageNum *
29 + * @param pageSize *
30 + */
31 +export function getAllExportingTransportBills(data) {
32 + return request({
33 + url: '/bus-customer/exportWaybill/search',
34 + method: 'post',
35 + data: data,
36 + })
37 +}
...\ No newline at end of file ...\ No newline at end of file
1 -import request from '@/utils/request'
2 -
3 -/**
4 - */
5 -export function queryBills(data) {
6 - return request({
7 - url: '/bus-employees/rde/op/approve/check',
8 - method: 'post',
9 - data: data
10 - })
11 -}
12 -
13 -
14 -/**
15 - * 查询菜单
16 - */
17 -export function getAllMenus() {
18 - return request({
19 - url: '/menu/selectAllMenu',
20 - method: 'get'
21 - })
22 -}
23 -
24 -export function getAllExportingBills(data) {
25 - return request({
26 - url: '/bus-customer/exportOrder/search',
27 - method: 'post',
28 - data
29 - })
30 -}
31 -
32 -export function getAllTransportBills(data) {
33 - return request({
34 - url: '/bus-customer/exportWaybill/search',
35 - method: 'post',
36 - data
37 - })
38 -}
39 -
40 -export function getAllListBills(data) {
41 - return request({
42 - url: '/bus-customer/exportList/search',
43 - method: 'post',
44 - data
45 - })
46 -}
47 -
...@@ -10,16 +10,16 @@ ...@@ -10,16 +10,16 @@
10 10
11 <script> 11 <script>
12 export default { 12 export default {
13 - name: 'AppMain', 13 + name: "AppMain",
14 computed: { 14 computed: {
15 cachedViews() { 15 cachedViews() {
16 - return this.$store.state.tagsView.cachedViews 16 + return this.$store.state.tagsView.cachedViews;
17 }, 17 },
18 key() { 18 key() {
19 - return this.$route.fullPath 19 + return this.$route.fullPath;
20 - } 20 + },
21 - } 21 + },
22 -} 22 +};
23 </script> 23 </script>
24 24
25 <style lang="scss" scoped> 25 <style lang="scss" scoped>
...@@ -31,11 +31,11 @@ export default { ...@@ -31,11 +31,11 @@ export default {
31 min-width: 1080px; 31 min-width: 1080px;
32 position: relative; 32 position: relative;
33 //overflow: hidden; 33 //overflow: hidden;
34 - overflow: auto; 34 + overflow: hidden;
35 background-color: #f2f2f2; 35 background-color: #f2f2f2;
36 } 36 }
37 37
38 -.fixed-header+.app-main { 38 +.fixed-header + .app-main {
39 padding-top: 50px; 39 padding-top: 50px;
40 } 40 }
41 41
...@@ -45,7 +45,7 @@ export default { ...@@ -45,7 +45,7 @@ export default {
45 min-height: calc(100vh - 84px); 45 min-height: calc(100vh - 84px);
46 } 46 }
47 47
48 - .fixed-header+.app-main { 48 + .fixed-header + .app-main {
49 padding-top: 84px; 49 padding-top: 84px;
50 } 50 }
51 } 51 }
......
...@@ -99,12 +99,15 @@ export default { ...@@ -99,12 +99,15 @@ export default {
99 watch: { 99 watch: {
100 $route(val) { 100 $route(val) {
101 this.activeRoute = val; 101 this.activeRoute = val;
102 + this.setMainHeight();
102 }, 103 },
103 }, 104 },
104 - mounted() { 105 + mounted() {},
105 -
106 - },
107 methods: { 106 methods: {
107 + setMainHeight(val) {
108 + document.querySelector(".main-container").style.height =
109 + "calc(100% - 64px)";
110 + },
108 handleClickOutside() { 111 handleClickOutside() {
109 this.$store.dispatch("app/closeSideBar", { withoutAnimation: false }); 112 this.$store.dispatch("app/closeSideBar", { withoutAnimation: false });
110 }, 113 },
......
...@@ -79,13 +79,13 @@ export const constantRoutes = [ ...@@ -79,13 +79,13 @@ export const constantRoutes = [
79 component: Layout, 79 component: Layout,
80 hidden: false, 80 hidden: false,
81 redirect: 'index', 81 redirect: 'index',
82 - meta: { title: '系统管理', icon: 'fedexSystem' }, 82 + meta: { title: '申报数据管理', icon: 'upload' },
83 children: [ 83 children: [
84 { 84 {
85 path: '/reportingData', 85 path: '/reportingData',
86 - component: (resolve) => require(['@/views/AuditionEntrySearch/index'], resolve), 86 + component: (resolve) => require(['@/views/reportingData/index'], resolve),
87 hidden: false, 87 hidden: false,
88 - meta: { title: '申报数据管理', icon: 'api' } 88 + meta: { title: '申报数据管理', icon: 'upload' }
89 } 89 }
90 ] 90 ]
91 }, 91 },
...@@ -94,76 +94,97 @@ export const constantRoutes = [ ...@@ -94,76 +94,97 @@ export const constantRoutes = [
94 component: Layout, 94 component: Layout,
95 hidden: false, 95 hidden: false,
96 redirect: 'index', 96 redirect: 'index',
97 - meta: { title: '查询管理', icon: 'fedexSystem' }, 97 + meta: { title: '查询管理', icon: 'fedexExportIcon' },
98 children: [ 98 children: [
99 { 99 {
100 path: '/exportBillQuery', 100 path: '/exportBillQuery',
101 component: (resolve) => require(['@/views/exportBillQuery/index'], resolve), 101 component: (resolve) => require(['@/views/exportBillQuery/index'], resolve),
102 hidden: false, 102 hidden: false,
103 - meta: { title: '出口订单查询', icon: 'api' }, 103 + meta: { title: '出口订单查询', icon: '' },
104 }, 104 },
105 { 105 {
106 path: '/exportBillDetail', 106 path: '/exportBillDetail',
107 component: (resolve) => require(['@/views/exportBillDetail/index'], resolve), 107 component: (resolve) => require(['@/views/exportBillDetail/index'], resolve),
108 hidden: true, 108 hidden: true,
109 - meta: { title: '出口订单详情', icon: 'api' }, 109 + meta: { title: '出口订单详情', icon: '' },
110 }, 110 },
111 { 111 {
112 path: '/exportTransportDetail', 112 path: '/exportTransportDetail',
113 component: (resolve) => require(['@/views/exportTransportDetail/index'], resolve), 113 component: (resolve) => require(['@/views/exportTransportDetail/index'], resolve),
114 hidden: true, 114 hidden: true,
115 - meta: { title: '出口运单详情', icon: 'api' }, 115 + meta: { title: '出口运单详情', icon: '' },
116 }, 116 },
117 { 117 {
118 path: '/exportListDetail', 118 path: '/exportListDetail',
119 component: (resolve) => require(['@/views/exportListDetail/index'], resolve), 119 component: (resolve) => require(['@/views/exportListDetail/index'], resolve),
120 hidden: true, 120 hidden: true,
121 - meta: { title: '出口清单详情', icon: 'api' }, 121 + meta: { title: '出口清单详情', icon: '' },
122 }, 122 },
123 { 123 {
124 path: '/exportTransportBillQuery', 124 path: '/exportTransportBillQuery',
125 component: (resolve) => require(['@/views/exportTransportBillQuery/index'], resolve), 125 component: (resolve) => require(['@/views/exportTransportBillQuery/index'], resolve),
126 hidden: false, 126 hidden: false,
127 - meta: { title: '出口运单查询', icon: 'api' }, 127 + meta: { title: '出口运单查询', icon: '' },
128 }, 128 },
129 { 129 {
130 path: '/exportListQuery', 130 path: '/exportListQuery',
131 component: (resolve) => require(['@/views/exportListQuery/index'], resolve), 131 component: (resolve) => require(['@/views/exportListQuery/index'], resolve),
132 name: '首页', 132 name: '首页',
133 - meta: { title: '出口清单查询', icon: 'dashboard' } 133 + meta: { title: '出口清单查询', icon: '' }
134 }, 134 },
135 { 135 {
136 path: '/listBranchQuery', 136 path: '/listBranchQuery',
137 component: (resolve) => require(['@/views/listBranchQuery/index'], resolve), 137 component: (resolve) => require(['@/views/listBranchQuery/index'], resolve),
138 name: '首页', 138 name: '首页',
139 hidden: false, 139 hidden: false,
140 - meta: { title: '清单总分单查询', icon: 'dashboard' } 140 + meta: { title: '清单总分单查询', icon: '' }
141 }, 141 },
142 { 142 {
143 path: '/listBranchDetail', 143 path: '/listBranchDetail',
144 component: (resolve) => require(['@/views/listBranchDetail/index'], resolve), 144 component: (resolve) => require(['@/views/listBranchDetail/index'], resolve),
145 name: '首页', 145 name: '首页',
146 hidden: true, 146 hidden: true,
147 - meta: { title: '清单总分单详情', icon: 'dashboard' } 147 + meta: { title: '清单总分单详情', icon: '' }
148 }, 148 },
149 { 149 {
150 path: '/logisticsExitDetail', 150 path: '/logisticsExitDetail',
151 component: (resolve) => require(['@/views/logisticsExitDetail/index'], resolve), 151 component: (resolve) => require(['@/views/logisticsExitDetail/index'], resolve),
152 name: '首页', 152 name: '首页',
153 hidden: true, 153 hidden: true,
154 - meta: { title: '物流离境单详情', icon: 'dashboard' } 154 + meta: { title: '物流离境单详情', icon: '' }
155 }, 155 },
156 { 156 {
157 path: '/logisticsExitQuery', 157 path: '/logisticsExitQuery',
158 component: (resolve) => require(['@/views/logisticsExitQuery/index'], resolve), 158 component: (resolve) => require(['@/views/logisticsExitQuery/index'], resolve),
159 name: '首页', 159 name: '首页',
160 - meta: { title: '物流离境单查询', icon: 'dashboard' } 160 + meta: { title: '物流离境单查询', icon: '' }
161 }, 161 },
162 { 162 {
163 path: 'index', 163 path: 'index',
164 component: (resolve) => require(['@/views/index'], resolve), 164 component: (resolve) => require(['@/views/index'], resolve),
165 name: '首页', 165 name: '首页',
166 - meta: { title: '出口撤销单查询', icon: 'dashboard' } 166 + meta: { title: '出口撤销单查询', icon: '' }
167 + }
168 + ]
169 + },
170 + {
171 + path: '/',
172 + component: Layout,
173 + hidden: false,
174 + redirect: 'index',
175 + meta: { title: '汇总申报', icon: 'fedexSummary' },
176 + children: [
177 + {
178 + path: '/summary',
179 + component: (resolve) => require(['@/views/reportingData/index'], resolve),
180 + hidden: false,
181 + meta: { title: '汇总申报', icon: '' }
182 + },
183 + {
184 + path: '/summaryDataSearch',
185 + component: (resolve) => require(['@/views/reportingData/index'], resolve),
186 + hidden: false,
187 + meta: { title: '汇总申请单查询', icon: '' }
167 } 188 }
168 ] 189 ]
169 }, 190 },
......
...@@ -84,8 +84,8 @@ const user = { ...@@ -84,8 +84,8 @@ const user = {
84 reject(res) 84 reject(res)
85 } else { 85 } else {
86 if (!getToken()) { 86 if (!getToken()) {
87 - setToken(res.data.token) 87 + setToken(res.data)
88 - commit('SET_TOKEN', res.data.token) 88 + commit('SET_TOKEN', res.data)
89 resolve(res) 89 resolve(res)
90 } else { 90 } else {
91 resolve(res) 91 resolve(res)
......
...@@ -37,23 +37,23 @@ export function removeUserId() { ...@@ -37,23 +37,23 @@ export function removeUserId() {
37 } 37 }
38 38
39 export function setCookie(cookie) { 39 export function setCookie(cookie) {
40 - return localStorage.setItem('iClearLoginTIp', cookie) 40 + return localStorage.setItem('EcomLoginTIp', cookie)
41 } 41 }
42 42
43 export function getCookie() { 43 export function getCookie() {
44 - return localStorage.getItem('iClearLoginTIp') 44 + return localStorage.getItem('EcomLoginTIp')
45 } 45 }
46 46
47 export function setTime(date) { 47 export function setTime(date) {
48 - return localStorage.setItem('iClearLoginTime', date) 48 + return localStorage.setItem('EcomLoginTime', date)
49 } 49 }
50 50
51 export function getTime() { 51 export function getTime() {
52 - return localStorage.getItem('iClearLoginTime') 52 + return localStorage.getItem('EcomLoginTime')
53 } 53 }
54 54
55 export function removeTime() { 55 export function removeTime() {
56 - return localStorage.removeItem('iClearLoginTime') 56 + return localStorage.removeItem('EcomLoginTime')
57 } 57 }
58 58
59 export function setLoginType(type) { 59 export function setLoginType(type) {
......
...@@ -18,21 +18,11 @@ const mimeMap = { ...@@ -18,21 +18,11 @@ const mimeMap = {
18 18
19 const apiUrl = { 19 const apiUrl = {
20 //exl 20 //exl
21 - customDownloadXls: '/bus-employees/export/custom/setting',//自定义导出 21 + declareDataModel: '/bus-customer/declareData/downloadTemplate',
22 - epoaDownload: '/bus-employees/port/op/download',//epoa文件下载
23 - pbiListDownload: '/bus-employees/data/report/export/daily',//报表列表导出
24 - pbiLogDownload: '/bus-employees/data/report/export/efficiency',//预审人员效绩统计
25 - osprDownload: '/bus-employees/ospr/download',//opsr文件下载
26 - portCDownload: '/bus-employees/port/op/decC/export',//C类申报导出
27 - //other
28 - portDownloadZip: '/bus-employees/port/op/downLoadZip',//口岸异步下载
29 - staffEntryDownloadZip: '/bus-employees/chm/qry/downLoadZip',//运单查询异步下载
30 - entryUploadData: '/bus-customer/consignment/upload/export',//批量导入数据导出
31 - entryUploadModel: '/bus-customer/upload/excel/template/downLoad',//批量上传模版导出
32 - opsrDownloadZip: '/bus-employees/ospr/export',//opsr批量导出
33 } 22 }
34 23
35 const baseUrl = process.env.VUE_APP_BASE_API 24 const baseUrl = process.env.VUE_APP_BASE_API
25 +
36 export function downLoadZip(urlStatus, str, filename, type, method, data) { 26 export function downLoadZip(urlStatus, str, filename, type, method, data) {
37 return new Promise((resolve, reject) => { 27 return new Promise((resolve, reject) => {
38 var url = '' 28 var url = ''
...@@ -41,6 +31,7 @@ export function downLoadZip(urlStatus, str, filename, type, method, data) { ...@@ -41,6 +31,7 @@ export function downLoadZip(urlStatus, str, filename, type, method, data) {
41 } else if (urlStatus == 'res') { 31 } else if (urlStatus == 'res') {
42 url = str 32 url = str
43 } 33 }
34 + console.log(url);
44 35
45 if (method == 'get' && data) { 36 if (method == 'get' && data) {
46 url = url + '?'; 37 url = url + '?';
......
1 <template> 1 <template>
2 - <div> 2 + <div class="entrySreach">
3 - <div class="entrySreach" ref="classCPortEntry"> 3 + <el-form
4 - <el-form 4 + class="fedexFormStyle fedexformSreach fedexformSreachBottomBorder"
5 - class="fedexFormStyle fedexformSreach fedexformSreachBottomBorder" 5 + ref="sreachForm"
6 - ref="sreachForm" 6 + :model="sreachFormData"
7 - :model="searchForm" 7 + label-position="top"
8 - label-position="top" 8 + size="small"
9 - size="small" 9 + >
10 - > 10 + <el-row class="row-border">
11 - <el-row class="row-border"> 11 + <!-- 订单编号 -->
12 - <el-col :span="5"> 12 + <el-col :span="5">
13 - <Formitem label="运单编号" prop="consignmentCode"> 13 + <Formitem label="订单编号" prop="orderNo">
14 - <el-popover 14 + <el-popover
15 - placement="bottom" 15 + placement="bottom"
16 - width="320" 16 + width="320"
17 - trigger="manual" 17 + trigger="manual"
18 - popper-class="popoverconsignmentCode" 18 + popper-class="popoverorderNo"
19 - v-model="textareaVisible.formItemconsignmentCode" 19 + v-model="textareaVisible.formItemorderNo"
20 - > 20 + >
21 - <el-input 21 + <el-input
22 - name="consignmentCode-textarea" 22 + name="orderNo-textarea"
23 - type="textarea" 23 + type="textarea"
24 - :rows="5" 24 + :rows="5"
25 - id="popoverInputconsignmentCode" 25 + id="popoverInputorderNo"
26 - class="inputShadow textareaPopover" 26 + class="inputShadow textareaPopover"
27 - v-model="searchForm.consignmentCode" 27 + v-model="sreachFormData.orderNo"
28 - resize="none" 28 + resize="none"
29 - maxlength="13000" 29 + maxlength="13000"
30 - placeholder=""
31 - @blur="textareaBlur"
32 - @input="input"
33 - ></el-input>
34 - <el-input
35 - slot="reference"
36 - name="consignmentCode"
37 - type="textarea"
38 - :rows="1"
39 - class="inputShadow"
40 - id="inputInner--consignmentCode"
41 - v-model="searchForm.consignmentCode"
42 - resize="none"
43 - placeholder=""
44 - @focus="textareaFocus"
45 - @input="input"
46 - ></el-input>
47 - </el-popover>
48 - </Formitem>
49 - </el-col>
50 - <el-col :span="4">
51 - <Formitem label="物流企业代码" prop="factoryCode">
52 - <el-select
53 - type="text"
54 - id="inputInner--declaredPort"
55 - v-model="searchForm.declaredPort"
56 - clearable
57 placeholder="" 30 placeholder=""
58 - @change="portChange" 31 + @blur="textareaBlur"
59 - > 32 + @input="input"
60 - <el-option 33 + ></el-input>
61 - v-for="(item, index) in dictData.userport" 34 + <el-input
62 - :key="index" 35 + slot="reference"
63 - :label="item.name" 36 + name="orderNo"
64 - :value="item.name" 37 + type="textarea"
65 - ></el-option> 38 + :rows="1"
66 - </el-select> 39 + class="inputShadow"
67 - </Formitem> 40 + id="inputInner--orderNo"
68 - </el-col> 41 + v-model="sreachFormData.orderNo"
69 - 42 + resize="none"
70 - <el-col :span="4">
71 - <Formitem label="回执状态" prop="receiptStatus">
72 - <el-select
73 - type="text"
74 - id="inputInner--declaredPort"
75 - v-model="searchForm.declaredPort"
76 - clearable
77 placeholder="" 43 placeholder=""
78 - @change="portChange" 44 + @focus="textareaFocus"
79 - > 45 + @input="input"
80 - <el-option 46 + ></el-input>
81 - v-for="(item, index) in dictData.userport" 47 + </el-popover>
82 - :key="index" 48 + <el-badge
83 - :label="item.name" 49 + v-if="
84 - :value="item.name" 50 + !textareaVisible.formItemorderNo &&
85 - ></el-option> 51 + textareaLength({
86 - </el-select> 52 + key: 'orderNo',
87 - </Formitem> 53 + value: sreachFormData.orderNo,
88 - </el-col> 54 + }) > 1
89 - 55 + "
90 - <el-col :span="5"> 56 + type="info"
91 - <Formitem 57 + :value="`+${textareaLength({
92 - label="创建时间" 58 + key: 'orderNo',
93 - prop="createTime" 59 + value: sreachFormData.orderNo,
94 - :activeType="true" 60 + })}`"
61 + class="item texttareaTip"
62 + />
63 + </Formitem>
64 + </el-col>
65 + <!-- 电商企业代码 -->
66 + <el-col :span="5">
67 + <Formitem label="电商企业代码" prop="ebccode">
68 + <el-select
69 + type="text"
70 + id="inputInner--ebccode"
71 + v-model="sreachFormData.ebccode"
72 + clearable
73 + placeholder=""
95 > 74 >
96 - <el-date-picker 75 + <el-option
97 - class="inputInner--accsDataImportTime" 76 + v-for="(item, index) in dictData.ebccode"
98 - id="inputInner--accsDataImportTime" 77 + :key="index"
99 - v-model="searchForm.accsDataImportTime" 78 + :label="item.name"
100 - type="daterange" 79 + :value="item.code"
101 - format="yyyy-MM-dd" 80 + ></el-option>
102 - prefix-icon="none" 81 + </el-select>
103 - value-format="yyyyMMdd" 82 + </Formitem>
104 - range-separator="至" 83 + </el-col>
105 - start-placeholder="" 84 + <!-- 回执状态 -->
106 - clearable 85 + <el-col :span="5">
107 - end-placeholder="" 86 + <Formitem label="回执状态" prop="returnStatus">
108 - :picker-options="importTimePickerOptions" 87 + <el-select
109 - @blur="datePickerBlur" 88 + type="text"
110 - @change="accsDataImportTimeChange" 89 + id="inputInner--returnStatus"
111 - > 90 + v-model="sreachFormData.returnStatus"
112 - </el-date-picker> 91 + clearable
113 - </Formitem> 92 + placeholder=""
114 - </el-col> 93 + >
115 - 94 + <el-option
116 - <el-col :span="2"> 95 + v-for="(item, index) in dictData.returnStatus"
117 - <el-form-item class="textCenter"> 96 + :key="index"
118 - <el-button 97 + :label="item.name"
119 - class="entrySreachButton" 98 + :value="item.code"
120 - type="text" 99 + ></el-option>
121 - icon="el-icon-search" 100 + </el-select>
122 - :loading="loadings.searchLoading" 101 + </Formitem>
123 - @click="search(0)" 102 + </el-col>
124 - ></el-button> 103 + <!-- 创建时间 -->
125 - </el-form-item> 104 + <el-col :span="5">
126 - </el-col> 105 + <Formitem label="创建时间" prop="createTime" :activeType="true">
127 - 106 + <el-date-picker
128 - <el-col :span="4"> 107 + class="inputInner--createTime"
129 - <el-form-item class="textCenter"> 108 + id="inputInner--createTime"
130 - <el-button 109 + v-model="sreachFormData.createTime"
131 - icon="el-icon-refresh" 110 + type="daterange"
132 - size="small" 111 + format="yyyy-MM-dd"
133 - :loading="loadings.searchLoading" 112 + prefix-icon="none"
134 - @click="search(0)" 113 + value-format="yyyy-MM-dd"
135 - >重置 114 + range-separator="至"
136 - </el-button> 115 + @chagne="dateChange"
137 - </el-form-item> 116 + />
138 - </el-col> 117 + </Formitem>
139 - </el-row> 118 + </el-col>
140 - </el-form> 119 + <el-col :span="2">
141 - </div> 120 + <el-form-item class="textCenter">
142 - 121 + <el-button
143 - <div style="text-align: right; margin: 10px"> 122 + class="entrySreachButton"
123 + type="text"
124 + icon="el-icon-search"
125 + :loading="loadings.searchLoading"
126 + @click="search(0)"
127 + ></el-button>
128 + </el-form-item>
129 + </el-col>
130 + <el-col :span="2">
131 + <el-form-item class="textCenter">
132 + <el-button
133 + type="text"
134 + size="small"
135 + icon="el-icon-refresh"
136 + @click="clear"
137 + >
138 + 重置
139 + </el-button>
140 + </el-form-item>
141 + </el-col>
142 + </el-row>
143 + </el-form>
144 + <div class="optionButton">
144 <el-button 145 <el-button
146 + class="entrySaveButton"
145 size="small" 147 size="small"
146 - :loading="loadings.downloadLoading2" 148 + icon="el-icon-download"
147 - @click="downloadBpiData('log')" 149 + @click="downloadData"
148 > 150 >
149 - <svg-icon class="el-icon-user-solid" icon-class="fedexUpBlue"></svg-icon>
150 导出 151 导出
151 </el-button> 152 </el-button>
152 </div> 153 </div>
153 -
154 <Table 154 <Table
155 class="fedexDetialTable fedexSreachTable" 155 class="fedexDetialTable fedexSreachTable"
156 ref="entryTable" 156 ref="entryTable"
...@@ -160,175 +160,182 @@ ...@@ -160,175 +160,182 @@
160 :border="true" 160 :border="true"
161 :pagination="true" 161 :pagination="true"
162 :order="false" 162 :order="false"
163 - :loading="loadings.sreachLoading" 163 + :loading="loadings.searchLoading"
164 :page="page.pageIndex" 164 :page="page.pageIndex"
165 :pageSizes="[20, 30, 50, 100]" 165 :pageSizes="[20, 30, 50, 100]"
166 - :totalCount="total" 166 + :totalCount="page.total"
167 @sizeChange="sizeChange" 167 @sizeChange="sizeChange"
168 @currentChange="currentChange" 168 @currentChange="currentChange"
169 - @rowClick="handleRowClick" 169 + :selection="false"
170 - :selection="true"
171 :selectFixed="false" 170 :selectFixed="false"
172 - @tableSelect="tableSelect"
173 - @tableSelectAll="tableSelectAll"
174 :rowSelectDataType="false" 171 :rowSelectDataType="false"
175 - :selected="selected"
176 > 172 >
177 - <template v-slot:waveName="scope"> 173 + <template v-slot:returnStatus="scope">
178 - <span>{{ `${scope.row.waveName}(${scope.row.waveExt2})` }}</span> 174 + <span>{{ scope.row.returnStatus }}</span>
175 + </template>
176 + <template v-slot:orderNo="scope">
177 + <el-button type="text">{{ scope.row.orderNo }}</el-button>
179 </template> 178 </template>
180 </Table> 179 </Table>
181 </div> 180 </div>
182 </template> 181 </template>
183 182
184 <script> 183 <script>
185 -import {getAllExportingBills} from "@/api/query/query"; 184 +import { getAllExportingBills } from "@/api/exportQuery.js";
186 185
187 export default { 186 export default {
188 name: "index", 187 name: "index",
189 data() { 188 data() {
190 return { 189 return {
191 - searchForm: { 190 + sreachFormData: {
192 - declaredPort: "", 191 + orderNo: "",
193 - consStatus: "", 192 + ebccode: "",
194 - consignmentCode: "", 193 + returnStatus: "",
195 - accsDataImportTime: [], 194 + createTime: [],
196 - ownerName: "",
197 - consignmentHeadCode: "",
198 - isPushCustomsSys: "",
199 - waitOperStatus: "",
200 - declTime: [],
201 - },
202 - selected: [],
203 - sizeChange(val) {
204 - this.page.pageSize = val;
205 - this.sreach(1);
206 - },
207 - //分页
208 - currentChange(val) {
209 - this.page.pageIndex = val.page;
210 - this.search(1);
211 - },
212 - tableSelect(val) {
213 - this.selected = val.selection;
214 - },
215 - tableSelectAll(val) {
216 - this.selected = val;
217 }, 195 },
218 page: { 196 page: {
219 pageIndex: 1, 197 pageIndex: 1,
220 pageSize: 20, 198 pageSize: 20,
199 + total: 0,
221 }, 200 },
222 tableData: [], 201 tableData: [],
223 - tableMaxheight: null,
224 - total: 0,
225 - dictData: {
226 - userport: [
227 - {name: "Shanghai Port", code: "SH"},
228 - {name: "Beijing Port", code: "BJ"},
229 - {name: "Guangzhou Port", code: "GZ"},
230 - {name: "Shenzhen Port", code: "SZ"},
231 - {name: "Tianjin Port", code: "TJ"},
232 - ],
233 - },
234 - loadings: {
235 - searchLoading: false,
236 - },
237 - textareaVisible: {
238 - formItemconsignmentCode: false,
239 - formItemconsignmentHeadCode: false,
240 - },
241 headerData: [ 202 headerData: [
242 { 203 {
243 name: "回执状态", 204 name: "回执状态",
244 value: "returnStatus", 205 value: "returnStatus",
245 - width: "150", 206 + width: "",
246 align: "left", 207 align: "left",
208 + slot: true,
247 }, 209 },
248 { 210 {
249 name: "订单编号", 211 name: "订单编号",
250 value: "orderNo", 212 value: "orderNo",
251 - width: '150', 213 + width: "",
252 - align: 'left' 214 + align: "left",
215 + slot: true,
253 }, 216 },
254 { 217 {
255 - name: '订单类型', 218 + name: "订单类型",
256 - value: 'orderType', 219 + value: "orderType",
257 - width: '150', 220 + width: "",
258 - align: 'left' 221 + align: "left",
259 }, 222 },
260 { 223 {
261 - name: '电商企业代码', 224 + name: "电商企业代码",
262 - value: 'ebccode', 225 + value: "ebccode",
263 - width: '200', 226 + width: "",
264 - align: 'left' 227 + align: "left",
265 }, 228 },
266 { 229 {
267 - name: '电商企业', 230 + name: "电商企业",
268 - value: 'ebcname', 231 + value: "ebcname",
269 - width: '200', 232 + width: "",
270 - align: 'left' 233 + align: "left",
271 }, 234 },
272 { 235 {
273 - name: '电商平台名称', 236 + name: "电商平台名称",
274 - value: 'ebpname', 237 + value: "ebpname",
275 - width: '250', 238 + width: "",
276 - align: 'left' 239 + align: "left",
277 }, 240 },
278 { 241 {
279 - name: '创建时间', 242 + name: "创建时间",
280 - value: 'createTime', 243 + value: "createTime",
281 - width: '150', 244 + width: "",
282 - align: 'left' 245 + align: "left",
283 }, 246 },
284 { 247 {
285 - name: '申报企业', 248 + name: "申报企业",
286 - value: 'declaringEnterprise', 249 + value: "declaringEnterprise",
287 - width: '200', 250 + width: "",
288 - align: 'left' 251 + align: "left",
289 }, 252 },
290 { 253 {
291 - name: '申报类型', 254 + name: "申报类型",
292 - value: 'declaringType', 255 + value: "declaringType",
293 - width: '100', 256 + width: "",
294 - align: 'left' 257 + align: "left",
295 - } 258 + },
296 - ] 259 + ],
297 - } 260 + dictData: {
261 + ebccode: [],
262 + returnStatus: [],
263 + },
264 + loadings: {
265 + searchLoading: false,
266 + },
267 + textareaVisible: {
268 + formItemconsignmentCode: false,
269 + formItemconsignmentHeadCode: false,
270 + },
271 + tableMaxheight: null,
272 + };
298 }, 273 },
299 created() { 274 created() {
300 - getAllExportingBills({ 275 + this.search(0);
301 - pageIndex: 1, 276 + },
302 - pageSize: 20 277 + mounted() {
303 - }).then((res) => { 278 + this.tableMaxheight = window.innerHeight - 300;
304 - console.log('res', res)
305 - this.tableData = res.data.value;
306 - this.total = res.data.totalItems;
307 - debugger;
308 - })
309 }, 279 },
310 methods: { 280 methods: {
311 - input() { 281 + //查询
312 - this.$forceUpdate(); 282 + search(val) {
283 + this.loadings.searchLoading = true;
284 + if (val == 0) {
285 + this.page.pageIndex = 1;
286 + }
287 + let obj = this.sreachFormData;
288 + obj.pageIndex = this.page.pageIndex;
289 + obj.pageSize = this.page.pageSize;
290 + obj.createTimeStart = "";
291 + obj.createTimeEnd = "";
292 + if (obj.createTime.length > 0) {
293 + obj.createTimeStart = obj.createTime[0];
294 + obj.createTimeEnd = obj.createTime[1];
295 + }
296 + getAllExportingBills(obj)
297 + .then((res) => {
298 + if (res.code === "200") {
299 + this.tableData = res.data.value;
300 + this.page.total = res.data.totalItems;
301 + this.tableData.forEach((item, idx) => {
302 + item.index = idx;
303 + item.popoverLoading = false;
304 + item.returnStatusPopoverType = false;
305 + item.returnStatusPopoverData = false;
306 + });
307 + } else {
308 + this.alertWarningMsg(res.message);
309 + }
310 + this.loadings.searchLoading = false;
311 + })
312 + .catch((err) => {
313 + console.log(err);
314 + this.loadings.searchLoading = false;
315 + });
313 }, 316 },
314 - handleRowClick(row) { 317 + //重置
315 - const declareId = row.declareId; 318 + clear() {
316 - this.$router.push({ 319 + this.sreachFormData = {
317 - path: '/exportBillDetail', 320 + orderNo: "",
318 - query: { 321 + ebccode: "",
319 - declareId 322 + returnStatus: "",
320 - } 323 + createTime: [],
321 - }); 324 + };
322 }, 325 },
323 - async search(val) { 326 + //导出
324 - try { 327 + downloadData() {},
325 - 328 + //文本域展示状态切换
326 - } catch (error) { 329 + textareaFocus(val) {
327 - console.error("搜索出错:", error); 330 + this.textareaVisible["formItem" + val.target.name.split("-")[0]] = true;
328 - } finally { 331 + this.$nextTick(() => {
329 - // 无论成功还是失败,关闭加载状态 332 + document
330 - this.loadings.sreachLoading = false; 333 + .querySelector("#popoverInput" + val.target.name.split("-")[0])
331 - } 334 + .focus();
335 + document.querySelector(
336 + "#inputInner--" + val.target.name.split("-")[0]
337 + ).style.display = "none";
338 + });
332 }, 339 },
333 textareaBlur(val) { 340 textareaBlur(val) {
334 let inputInner = document.querySelector( 341 let inputInner = document.querySelector(
...@@ -349,7 +356,7 @@ export default { ...@@ -349,7 +356,7 @@ export default {
349 } 356 }
350 }); 357 });
351 let arr = []; 358 let arr = [];
352 - this.searchForm[val.target.name.split("-")[0]] 359 + this.sreachFormData[val.target.name.split("-")[0]]
353 .replace(/[\n\,\;\;]/g, ",") 360 .replace(/[\n\,\;\;]/g, ",")
354 .replace(/[\t]/g, "") 361 .replace(/[\t]/g, "")
355 .split(",") 362 .split(",")
...@@ -358,31 +365,84 @@ export default { ...@@ -358,31 +365,84 @@ export default {
358 arr.push(str.trim()); 365 arr.push(str.trim());
359 } 366 }
360 }); 367 });
361 - this.searchForm[val.target.name.split("-")[0]] = arr.join("\n"); 368 + this.sreachFormData[val.target.name.split("-")[0]] = arr.join("\n");
362 this.$forceUpdate(); 369 this.$forceUpdate();
363 }, 370 },
364 - //文本域展示状态切换 371 + //文本域输入内容数量处理
365 - textareaFocus(val) { 372 + textareaLength(val) {
366 - this.textareaVisible["formItem" + val.target.name.split("-")[0]] = true; 373 + if (val.value != "" && val.value != null) {
367 - this.$nextTick(() => { 374 + let arr = [];
368 - document 375 + val.value
369 - .querySelector("#popoverInput" + val.target.name.split("-")[0]) 376 + .trim()
370 - .focus(); 377 + .replace(/[\n\,\;\;]/g, ",")
371 - document.querySelector( 378 + .split(",")
372 - "#inputInner--" + val.target.name.split("-")[0] 379 + .forEach((item) => {
373 - ).style.display = "none"; 380 + if (item != "" && item != null) {
374 - }); 381 + arr.push(item);
382 + }
383 + });
384 + return arr.length;
385 + } else {
386 + return 0;
387 + }
375 }, 388 },
376 - } 389 + //分页
377 -} 390 + currentChange(val) {
391 + this.page.pageNum = val.page;
392 + this.search(1);
393 + },
394 + sizeChange(val) {
395 + this.page.pageSize = val;
396 + this.search(1);
397 + },
398 + dateChange(val) {},
399 + input() {
400 + this.$forceUpdate();
401 + },
402 + },
403 +};
378 </script> 404 </script>
379 405
380 <style scoped lang="scss"> 406 <style scoped lang="scss">
381 @import "@/assets/styles/variables.scss"; 407 @import "@/assets/styles/variables.scss";
408 +.entrySreach {
409 + height: 100%;
410 + background-color: $menuLightBg;
411 +
412 + .entrySreachButton {
413 + display: inline-block;
414 + font-size: 20px;
415 + color: $fedexButton !important;
416 + }
417 +
418 + .optionButton {
419 + padding: 10px;
420 + text-align: right;
421 +
422 + .el-button {
423 + color: $fedexButton;
424 + border-color: $fedexButton !important;
425 +
426 + svg {
427 + display: inline-block;
428 + margin-right: 5px;
429 + fill: $fedexButton;
430 + }
431 + }
432 +
433 + .entrySaveButton:hover,
434 + .entrySaveButton:focus {
435 + color: $menuLightBg !important;
436 + background-color: $fedexButton !important;
437 + }
438 + }
439 +}
382 440
383 -.entrySreachButton { 441 +.texttareaTip {
384 - display: inline-block; 442 + position: absolute;
385 - font-size: 20px; 443 + top: 52%;
386 - color: $fedexButton !important; 444 + right: 20px;
445 + transform: translate(0, -50%);
446 + z-index: 10;
387 } 447 }
388 </style> 448 </style>
......
1 <template> 1 <template>
2 - <div> 2 + <div class="entrySreach">
3 <el-form 3 <el-form
4 class="fedexFormStyle fedexformSreach fedexformSreachBottomBorder" 4 class="fedexFormStyle fedexformSreach fedexformSreachBottomBorder"
5 ref="sreachForm" 5 ref="sreachForm"
6 - :model="searchForm" 6 + :model="sreachFormData"
7 label-position="top" 7 label-position="top"
8 size="small" 8 size="small"
9 > 9 >
10 <el-row class="row-border"> 10 <el-row class="row-border">
11 + <!-- 运单编号 -->
11 <el-col :span="5"> 12 <el-col :span="5">
12 - <Formitem label="运单编号" prop="consignmentCode"> 13 + <Formitem label="运单编号" prop="logisticsNo">
13 <el-popover 14 <el-popover
14 placement="bottom" 15 placement="bottom"
15 width="320" 16 width="320"
16 trigger="manual" 17 trigger="manual"
17 - popper-class="popoverconsignmentCode" 18 + popper-class="popoverlogisticsNo"
18 - v-model="textareaVisible.formItemconsignmentCode" 19 + v-model="textareaVisible.formItemlogisticsNo"
19 > 20 >
20 <el-input 21 <el-input
21 - name="consignmentCode-textarea" 22 + name="logisticsNo-textarea"
22 type="textarea" 23 type="textarea"
23 :rows="5" 24 :rows="5"
24 - id="popoverInputconsignmentCode" 25 + id="popoverInputlogisticsNo"
25 class="inputShadow textareaPopover" 26 class="inputShadow textareaPopover"
26 - v-model="searchForm.consignmentCode" 27 + v-model="sreachFormData.logisticsNo"
27 resize="none" 28 resize="none"
28 maxlength="13000" 29 maxlength="13000"
29 placeholder="" 30 placeholder=""
...@@ -32,79 +33,89 @@ ...@@ -32,79 +33,89 @@
32 ></el-input> 33 ></el-input>
33 <el-input 34 <el-input
34 slot="reference" 35 slot="reference"
35 - name="consignmentCode" 36 + name="logisticsNo"
36 type="textarea" 37 type="textarea"
37 :rows="1" 38 :rows="1"
38 class="inputShadow" 39 class="inputShadow"
39 - id="inputInner--consignmentCode" 40 + id="inputInner--logisticsNo"
40 - v-model="searchForm.consignmentCode" 41 + v-model="sreachFormData.logisticsNo"
41 resize="none" 42 resize="none"
42 placeholder="" 43 placeholder=""
43 @focus="textareaFocus" 44 @focus="textareaFocus"
44 @input="input" 45 @input="input"
45 ></el-input> 46 ></el-input>
46 </el-popover> 47 </el-popover>
48 + <el-badge
49 + v-if="
50 + !textareaVisible.formItemlogisticsNo &&
51 + textareaLength({
52 + key: 'logisticsNo',
53 + value: sreachFormData.logisticsNo,
54 + }) > 1
55 + "
56 + type="info"
57 + :value="`+${textareaLength({
58 + key: 'logisticsNo',
59 + value: sreachFormData.logisticsNo,
60 + })}`"
61 + class="item texttareaTip"
62 + />
47 </Formitem> 63 </Formitem>
48 </el-col> 64 </el-col>
49 - <el-col :span="4"> 65 + <!-- 物流企业代码 -->
50 - <Formitem label="物流企业代码" prop="factoryCode"> 66 + <el-col :span="5">
67 + <Formitem label="物流企业代码" prop="logisticsCode">
51 <el-select 68 <el-select
52 type="text" 69 type="text"
53 - id="inputInner--declaredPort" 70 + id="inputInner--logisticsCode"
54 - v-model="searchForm.declaredPort" 71 + v-model="sreachFormData.logisticsCode"
55 clearable 72 clearable
56 placeholder="" 73 placeholder=""
57 - @change="portChange"
58 > 74 >
59 <el-option 75 <el-option
60 - v-for="(item, index) in dictData.userport" 76 + v-for="(item, index) in dictData.logisticsCode"
61 :key="index" 77 :key="index"
62 :label="item.name" 78 :label="item.name"
63 - :value="item.name" 79 + :value="item.code"
64 ></el-option> 80 ></el-option>
65 </el-select> 81 </el-select>
66 </Formitem> 82 </Formitem>
67 </el-col> 83 </el-col>
84 + <!-- 回执状态 -->
68 <el-col :span="5"> 85 <el-col :span="5">
69 - <Formitem label="回执状态" prop="declaredPort"> 86 + <Formitem label="回执状态" prop="returnStatus">
70 <el-select 87 <el-select
71 type="text" 88 type="text"
72 - id="inputInner--receiptStatus" 89 + id="inputInner--returnStatus"
73 - v-model="searchForm.receiptStatus" 90 + v-model="sreachFormData.returnStatus"
74 clearable 91 clearable
75 placeholder="" 92 placeholder=""
76 > 93 >
77 <el-option 94 <el-option
78 - v-for="(item, index) in dictData.userport" 95 + v-for="(item, index) in dictData.returnStatus"
79 :key="index" 96 :key="index"
80 :label="item.name" 97 :label="item.name"
81 - :value="item.name" 98 + :value="item.code"
82 ></el-option> 99 ></el-option>
83 </el-select> 100 </el-select>
84 </Formitem> 101 </Formitem>
85 </el-col> 102 </el-col>
86 - <el-col :span="4"> 103 + <!-- 创建时间 -->
87 - <Formitem label="创建时间" prop="receiptTime"> 104 + <el-col :span="5">
105 + <Formitem label="创建时间" prop="createTime" :activeType="true">
88 <el-date-picker 106 <el-date-picker
89 - class="inputInner--accsDataImportTime" 107 + class="inputInner--createTime"
90 - id="inputInner--accsDataImportTime" 108 + id="inputInner--createTime"
91 - v-model="searchForm.accsDataImportTime" 109 + v-model="sreachFormData.createTime"
92 type="daterange" 110 type="daterange"
93 format="yyyy-MM-dd" 111 format="yyyy-MM-dd"
94 prefix-icon="none" 112 prefix-icon="none"
95 - value-format="yyyyMMdd" 113 + value-format="yyyy-MM-dd"
96 range-separator="至" 114 range-separator="至"
97 - start-placeholder="" 115 + @chagne="dateChange"
98 - clearable 116 + />
99 - end-placeholder=""
100 - :picker-options="importTimePickerOptions"
101 - @blur="datePickerBlur"
102 - @change="accsDataImportTimeChange"
103 - >
104 - </el-date-picker>
105 </Formitem> 117 </Formitem>
106 </el-col> 118 </el-col>
107 -
108 <el-col :span="2"> 119 <el-col :span="2">
109 <el-form-item class="textCenter"> 120 <el-form-item class="textCenter">
110 <el-button 121 <el-button
...@@ -116,32 +127,30 @@ ...@@ -116,32 +127,30 @@
116 ></el-button> 127 ></el-button>
117 </el-form-item> 128 </el-form-item>
118 </el-col> 129 </el-col>
119 - 130 + <el-col :span="2">
120 - <el-col :span="4">
121 <el-form-item class="textCenter"> 131 <el-form-item class="textCenter">
122 <el-button 132 <el-button
123 - icon="el-icon-refresh" 133 + type="text"
124 size="small" 134 size="small"
125 - :loading="loadings.searchLoading" 135 + icon="el-icon-refresh"
126 - @click="search(0)" 136 + @click="clear"
127 - >重置 137 + >
138 + 重置
128 </el-button> 139 </el-button>
129 </el-form-item> 140 </el-form-item>
130 </el-col> 141 </el-col>
131 </el-row> 142 </el-row>
132 </el-form> 143 </el-form>
133 - 144 + <div class="optionButton">
134 - <div style="text-align: right; margin: 10px">
135 <el-button 145 <el-button
146 + class="entrySaveButton"
136 size="small" 147 size="small"
137 - :loading="loadings.downloadLoading2" 148 + icon="el-icon-download"
138 - @click="downloadBpiData('log')" 149 + @click="downloadData"
139 > 150 >
140 - <svg-icon class="el-icon-user-solid" icon-class="fedexUpBlue"></svg-icon>
141 导出 151 导出
142 </el-button> 152 </el-button>
143 </div> 153 </div>
144 -
145 <Table 154 <Table
146 class="fedexDetialTable fedexSreachTable" 155 class="fedexDetialTable fedexSreachTable"
147 ref="entryTable" 156 ref="entryTable"
...@@ -151,176 +160,288 @@ ...@@ -151,176 +160,288 @@
151 :border="true" 160 :border="true"
152 :pagination="true" 161 :pagination="true"
153 :order="false" 162 :order="false"
154 - :loading="loadings.sreachLoading" 163 + :loading="loadings.searchLoading"
155 :page="page.pageIndex" 164 :page="page.pageIndex"
156 :pageSizes="[20, 30, 50, 100]" 165 :pageSizes="[20, 30, 50, 100]"
157 - :totalCount="total" 166 + :totalCount="page.total"
158 @sizeChange="sizeChange" 167 @sizeChange="sizeChange"
159 @currentChange="currentChange" 168 @currentChange="currentChange"
160 - :selection="true" 169 + :selection="false"
161 :selectFixed="false" 170 :selectFixed="false"
162 - @rowClick="handleRowClick"
163 - @tableSelect="tableSelect"
164 - @tableSelectAll="tableSelectAll"
165 :rowSelectDataType="false" 171 :rowSelectDataType="false"
166 - :selected="selected"
167 > 172 >
168 - <template v-slot:waveName="scope"> 173 + <template v-slot:returnStatus="scope">
169 - <span>{{ `${scope.row.waveName}(${scope.row.waveExt2})` }}</span> 174 + <span>{{ scope.row.returnStatus }}</span>
175 + </template>
176 + <template v-slot:logisticsNo="scope">
177 + <el-button type="text">{{ scope.row.logisticsNo }}</el-button>
170 </template> 178 </template>
171 </Table> 179 </Table>
172 </div> 180 </div>
173 </template> 181 </template>
174 182
175 <script> 183 <script>
176 -import {getAllExportingBills, getAllTransportBills} from "@/api/query/query"; 184 +import { getAllExportingTransportBills } from "@/api/exportQuery.js";
177 185
178 export default { 186 export default {
179 name: "index", 187 name: "index",
180 data() { 188 data() {
181 return { 189 return {
182 - searchForm: { 190 + sreachFormData: {
183 - declaredPort: "", 191 + logisticsNo: "",
184 - consStatus: "", 192 + logisticsCode: "",
185 - consignmentCode: "", 193 + returnStatus: "",
186 - accsDataImportTime: [], 194 + createTime: [],
187 - ownerName: "",
188 - consignmentHeadCode: "",
189 - isPushCustomsSys: "",
190 - waitOperStatus: "",
191 - declTime: [],
192 - },
193 - loadings: {
194 - searchLoading: false,
195 }, 195 },
196 page: { 196 page: {
197 pageIndex: 1, 197 pageIndex: 1,
198 pageSize: 20, 198 pageSize: 20,
199 - }, 199 + total: 0,
200 - textareaVisible: {
201 - formItemconsignmentCode: false,
202 - formItemconsignmentHeadCode: false,
203 - },
204 - sizeChange(val) {
205 - this.page.pageSize = val;
206 - this.sreach(1);
207 - },
208 - //分页
209 - currentChange(val) {
210 - this.page.pageIndex = val.page;
211 - this.search(1);
212 }, 200 },
213 tableData: [], 201 tableData: [],
214 - total: 0,
215 - tableMaxheight: null,
216 headerData: [ 202 headerData: [
217 { 203 {
218 name: "回执状态", 204 name: "回执状态",
219 value: "returnStatus", 205 value: "returnStatus",
220 - width: "150", 206 + width: "",
221 align: "left", 207 align: "left",
208 + slot: true,
222 }, 209 },
223 { 210 {
224 name: "运单编号", 211 name: "运单编号",
225 - value: "orderNo", 212 + value: "logisticsNo",
226 - width: '150', 213 + width: "",
227 - align: 'left' 214 + align: "left",
215 + slot: true,
228 }, 216 },
229 { 217 {
230 - name: '物流企业代码', 218 + name: "物流企业代码",
231 - value: 'orderType', 219 + value: "logisticsCode",
232 - width: '150', 220 + width: "",
233 - align: 'left' 221 + align: "left",
234 }, 222 },
235 { 223 {
236 - name: '物流企业名称', 224 + name: "物流企业名称",
237 - value: 'ebccode', 225 + value: "logisticsName",
238 - width: '200', 226 + width: "",
239 - align: 'left' 227 + align: "left",
240 }, 228 },
241 { 229 {
242 - name: '主要货物信息', 230 + name: "主要货物信息",
243 - value: 'ebcname', 231 + value: "goodsInfo",
244 - width: '200', 232 + width: "",
245 - align: 'left' 233 + align: "left",
246 }, 234 },
247 { 235 {
248 - name: '创建时间', 236 + name: "创建时间",
249 - value: 'createTime', 237 + value: "",
250 - width: '150', 238 + width: "",
251 - align: 'left' 239 + align: "left",
252 }, 240 },
253 { 241 {
254 - name: '申报企业', 242 + name: "申报企业",
255 - value: 'declaringEnterprise', 243 + value: "",
256 - width: '200', 244 + width: "",
257 - align: 'left' 245 + align: "left",
258 }, 246 },
259 { 247 {
260 - name: '申报类型', 248 + name: "申报类型",
261 - value: 'declaringType', 249 + value: "",
262 - width: '100', 250 + width: "",
263 - align: 'left' 251 + align: "left",
264 - } 252 + },
265 ], 253 ],
266 dictData: { 254 dictData: {
267 - userport: [ 255 + ebccode: [],
268 - {name: "Shanghai Port", code: "SH"}, 256 + returnStatus: [],
269 - {name: "Beijing Port", code: "BJ"},
270 - {name: "Guangzhou Port", code: "GZ"},
271 - {name: "Shenzhen Port", code: "SZ"},
272 - {name: "Tianjin Port", code: "TJ"},
273 - ],
274 }, 257 },
275 - } 258 + loadings: {
259 + searchLoading: false,
260 + },
261 + textareaVisible: {
262 + formItemconsignmentCode: false,
263 + formItemconsignmentHeadCode: false,
264 + },
265 + tableMaxheight: null,
266 + };
276 }, 267 },
277 created() { 268 created() {
278 - getAllTransportBills({ 269 + this.search(0);
279 - pageIndex: 1, 270 + },
280 - pageSize: 20 271 + mounted() {
281 - }).then((res) => { 272 + this.tableMaxheight = window.innerHeight - 300;
282 - console.log('res', res)
283 - this.tableData = res.data.value;
284 - this.total = res.data.totalItems;
285 - debugger;
286 - })
287 }, 273 },
288 methods: { 274 methods: {
289 - tableSelect(val) { 275 + //查询
290 - this.selected = val.selection; 276 + search(val) {
277 + this.loadings.searchLoading = true;
278 + if (val == 0) {
279 + this.page.pageIndex = 1;
280 + }
281 + let obj = this.sreachFormData;
282 + obj.pageIndex = this.page.pageIndex;
283 + obj.pageSize = this.page.pageSize;
284 + obj.createTimeStart = "";
285 + obj.createTimeEnd = "";
286 + if (obj.createTime.length > 0) {
287 + obj.createTimeStart = obj.createTime[0];
288 + obj.createTimeEnd = obj.createTime[1];
289 + }
290 + if (obj.logisticsNo != null && obj.logisticsNo != "") {
291 + obj.logisticsNo = obj.logisticsNo.split("\n");
292 + } else {
293 + obj.logisticsNo = [];
294 + }
295 + getAllExportingTransportBills(obj)
296 + .then((res) => {
297 + if (res.code === "200") {
298 + this.tableData = res.data.value;
299 + this.page.total = res.data.totalItems;
300 + this.tableData.forEach((item, idx) => {
301 + item.index = idx;
302 + item.popoverLoading = false;
303 + item.returnStatusPopoverType = false;
304 + item.returnStatusPopoverData = false;
305 + });
306 + } else {
307 + this.alertWarningMsg(res.message);
308 + }
309 + this.loadings.searchLoading = false;
310 + })
311 + .catch((err) => {
312 + console.log(err);
313 + this.loadings.searchLoading = false;
314 + });
315 + },
316 + //重置
317 + clear() {
318 + this.sreachFormData = {
319 + orderNo: "",
320 + ebccode: "",
321 + returnStatus: "",
322 + createTime: [],
323 + };
291 }, 324 },
292 - tableSelectAll(val) { 325 + //导出
293 - this.selected = val; 326 + downloadData() {},
327 + //文本域展示状态切换
328 + textareaFocus(val) {
329 + this.textareaVisible["formItem" + val.target.name.split("-")[0]] = true;
330 + this.$nextTick(() => {
331 + document
332 + .querySelector("#popoverInput" + val.target.name.split("-")[0])
333 + .focus();
334 + document.querySelector(
335 + "#inputInner--" + val.target.name.split("-")[0]
336 + ).style.display = "none";
337 + });
294 }, 338 },
295 - handleRowClick(row) { 339 + textareaBlur(val) {
296 - const declareId = row.declareId; 340 + let inputInner = document.querySelector(
297 - this.$router.push({ 341 + "#inputInner--" + val.target.name.split("-")[0]
298 - path: '/exportTransportDetail', 342 + );
299 - query: { 343 + this.textareaVisible["formItem" + val.target.name.split("-")[0]] = false;
300 - declareId 344 + inputInner.style.display = "block";
345 + this.$nextTick(() => {
346 + inputInner.blur();
347 + if (
348 + inputInner.value != undefined &&
349 + inputInner.value != "" &&
350 + inputInner.value != null
351 + ) {
352 + inputInner.classList.add("inputFocus");
353 + } else {
354 + inputInner.classList.remove("inputFocus");
301 } 355 }
302 }); 356 });
357 + let arr = [];
358 + this.sreachFormData[val.target.name.split("-")[0]]
359 + .replace(/[\n\,\;\;]/g, ",")
360 + .replace(/[\t]/g, "")
361 + .split(",")
362 + .forEach((str, index) => {
363 + if (str != null && str != "" && index <= 1000) {
364 + arr.push(str.trim());
365 + }
366 + });
367 + this.sreachFormData[val.target.name.split("-")[0]] = arr.join("\n");
368 + this.$forceUpdate();
303 }, 369 },
304 - async search(val) { 370 + //文本域输入内容数量处理
305 - try { 371 + textareaLength(val) {
306 - 372 + if (val.value != "" && val.value != null) {
307 - } catch (error) { 373 + let arr = [];
308 - console.error("搜索出错:", error); 374 + val.value
309 - } finally { 375 + .trim()
310 - // 无论成功还是失败,关闭加载状态 376 + .replace(/[\n\,\;\;]/g, ",")
311 - this.loadings.sreachLoading = false; 377 + .split(",")
378 + .forEach((item) => {
379 + if (item != "" && item != null) {
380 + arr.push(item);
381 + }
382 + });
383 + return arr.length;
384 + } else {
385 + return 0;
312 } 386 }
313 }, 387 },
314 - } 388 + //分页
315 -} 389 + currentChange(val) {
390 + this.page.pageNum = val.page;
391 + this.search(1);
392 + },
393 + sizeChange(val) {
394 + this.page.pageSize = val;
395 + this.search(1);
396 + },
397 + dateChange(val) {},
398 + input() {
399 + this.$forceUpdate();
400 + },
401 + },
402 +};
316 </script> 403 </script>
317 404
318 <style scoped lang="scss"> 405 <style scoped lang="scss">
319 @import "@/assets/styles/variables.scss"; 406 @import "@/assets/styles/variables.scss";
407 +.entrySreach {
408 + height: 100%;
409 + background-color: $menuLightBg;
410 +
411 + .entrySreachButton {
412 + display: inline-block;
413 + font-size: 20px;
414 + color: $fedexButton !important;
415 + }
416 +
417 + .optionButton {
418 + padding: 10px;
419 + text-align: right;
420 +
421 + .el-button {
422 + color: $fedexButton;
423 + border-color: $fedexButton !important;
424 +
425 + svg {
426 + display: inline-block;
427 + margin-right: 5px;
428 + fill: $fedexButton;
429 + }
430 + }
431 +
432 + .entrySaveButton:hover,
433 + .entrySaveButton:focus {
434 + color: $menuLightBg !important;
435 + background-color: $fedexButton !important;
436 + }
437 + }
438 +}
320 439
321 -.entrySreachButton { 440 +.texttareaTip {
322 - display: inline-block; 441 + position: absolute;
323 - font-size: 20px; 442 + top: 52%;
324 - color: $fedexButton !important; 443 + right: 20px;
444 + transform: translate(0, -50%);
445 + z-index: 10;
325 } 446 }
326 </style> 447 </style>
......
1 <template> 1 <template>
2 <div style="width: 100%; height: 100%; position: relative" v-if="imgShow"> 2 <div style="width: 100%; height: 100%; position: relative" v-if="imgShow">
3 - <el-image
4 - :src="url"
5 - fit="fill"
6 - style="display: block; width: 100%; height: 100%; opacity: 0.9"
7 - lazy
8 - ></el-image>
9 <div class="model"></div> 3 <div class="model"></div>
10 </div> 4 </div>
11 </template> 5 </template>
12 <script> 6 <script>
13 -import indexBackground from "@/assets/images/indexBackground.jpg";
14 -import { getLoginType } from "@/utils/auth";
15 export default { 7 export default {
16 props: {}, 8 props: {},
17 data() { 9 data() {
...@@ -22,36 +14,10 @@ export default { ...@@ -22,36 +14,10 @@ export default {
22 }; 14 };
23 }, 15 },
24 created() { 16 created() {
25 - getLoginType() ? (this.fcl = true) : (this.fcl = false); 17 +
26 - this.checkImgType();
27 }, 18 },
28 methods: { 19 methods: {
29 - checkImgType() { 20 +
30 - let interval = setInterval(() => {
31 - if (
32 - this.$store.getters.userData.organization &&
33 - this.$store.getters.userData.organization.code == "customer"
34 - // ||getToken().split(".")[0] == "2"
35 - ) {
36 - clearInterval(interval);
37 - if (this.fcl) {
38 - } else {
39 - this.imgShow = false;
40 - this.url = "";
41 - this.$router.push({
42 - path: "/newui_noentrySreach_parent/newui_noentrySreach_leaf",
43 - });
44 - }
45 - } else if (
46 - this.$store.getters.userData.organization &&
47 - this.$store.getters.userData.organization.code != "customer"
48 - ) {
49 - clearInterval(interval);
50 - this.url = indexBackground;
51 - this.imgShow = true;
52 - }
53 - }, 500);
54 - },
55 }, 21 },
56 }; 22 };
57 </script> 23 </script>
......
...@@ -143,7 +143,7 @@ ...@@ -143,7 +143,7 @@
143 size="small" 143 size="small"
144 :loading="loadings.searchLoading" 144 :loading="loadings.searchLoading"
145 @click="search(0)" 145 @click="search(0)"
146 - >重置 146 + >重置
147 </el-button> 147 </el-button>
148 </el-form-item> 148 </el-form-item>
149 </el-col> 149 </el-col>
...@@ -156,7 +156,10 @@ ...@@ -156,7 +156,10 @@
156 :loading="loadings.downloadLoading2" 156 :loading="loadings.downloadLoading2"
157 @click="downloadBpiData('log')" 157 @click="downloadBpiData('log')"
158 > 158 >
159 - <svg-icon class="el-icon-user-solid" icon-class="fedexUpBlue"></svg-icon> 159 + <svg-icon
160 + class="el-icon-user-solid"
161 + icon-class="fedexUpBlue"
162 + ></svg-icon>
160 导出 163 导出
161 </el-button> 164 </el-button>
162 </div> 165 </div>
...@@ -192,8 +195,6 @@ ...@@ -192,8 +195,6 @@
192 </template> 195 </template>
193 196
194 <script> 197 <script>
195 -import {getAllExportingBills, getAllTransportBills} from "@/api/query/query";
196 -
197 export default { 198 export default {
198 name: "index", 199 name: "index",
199 data() { 200 data() {
...@@ -242,86 +243,76 @@ export default { ...@@ -242,86 +243,76 @@ export default {
242 { 243 {
243 name: "提运单号", 244 name: "提运单号",
244 value: "orderNo", 245 value: "orderNo",
245 - width: '150', 246 + width: "150",
246 - align: 'left' 247 + align: "left",
247 }, 248 },
248 { 249 {
249 - name: '运单编号', 250 + name: "运单编号",
250 - value: 'orderType', 251 + value: "orderType",
251 - width: '150', 252 + width: "150",
252 - align: 'left' 253 + align: "left",
253 }, 254 },
254 { 255 {
255 - name: '物流企业名称', 256 + name: "物流企业名称",
256 - value: 'ebccode', 257 + value: "ebccode",
257 - width: '200', 258 + width: "200",
258 - align: 'left' 259 + align: "left",
259 }, 260 },
260 { 261 {
261 - name: '运输方式', 262 + name: "运输方式",
262 - value: 'ebcname', 263 + value: "ebcname",
263 - width: '200', 264 + width: "200",
264 - align: 'left' 265 + align: "left",
265 }, 266 },
266 { 267 {
267 - name: '运输工具名称', 268 + name: "运输工具名称",
268 - value: 'createTime', 269 + value: "createTime",
269 - width: '150', 270 + width: "150",
270 - align: 'left' 271 + align: "left",
271 }, 272 },
272 { 273 {
273 - name: '航班航次号', 274 + name: "航班航次号",
274 - value: 'declaringEnterprise', 275 + value: "declaringEnterprise",
275 - width: '200', 276 + width: "200",
276 - align: 'left' 277 + align: "left",
277 }, 278 },
278 { 279 {
279 - name: '离境时间', 280 + name: "离境时间",
280 - value: 'declaringEnterprise', 281 + value: "declaringEnterprise",
281 - width: '200', 282 + width: "200",
282 - align: 'left' 283 + align: "left",
283 }, 284 },
284 { 285 {
285 - name: '报送类型', 286 + name: "报送类型",
286 - value: 'declaringEnterprise', 287 + value: "declaringEnterprise",
287 - width: '200', 288 + width: "200",
288 - align: 'left' 289 + align: "left",
289 }, 290 },
290 { 291 {
291 - name: '业务状态', 292 + name: "业务状态",
292 - value: 'declaringType', 293 + value: "declaringType",
293 - width: '100', 294 + width: "100",
294 - align: 'left' 295 + align: "left",
295 }, 296 },
296 { 297 {
297 - name: '申报日期', 298 + name: "申报日期",
298 - value: 'declaringType', 299 + value: "declaringType",
299 - width: '100', 300 + width: "100",
300 - align: 'left' 301 + align: "left",
301 - } 302 + },
302 ], 303 ],
303 dictData: { 304 dictData: {
304 userport: [ 305 userport: [
305 - {name: "Shanghai Port", code: "SH"}, 306 + { name: "Shanghai Port", code: "SH" },
306 - {name: "Beijing Port", code: "BJ"}, 307 + { name: "Beijing Port", code: "BJ" },
307 - {name: "Guangzhou Port", code: "GZ"}, 308 + { name: "Guangzhou Port", code: "GZ" },
308 - {name: "Shenzhen Port", code: "SZ"}, 309 + { name: "Shenzhen Port", code: "SZ" },
309 - {name: "Tianjin Port", code: "TJ"}, 310 + { name: "Tianjin Port", code: "TJ" },
310 ], 311 ],
311 }, 312 },
312 - } 313 + };
313 - },
314 - created() {
315 - getAllTransportBills({
316 - pageIndex: 1,
317 - pageSize: 20
318 - }).then((res) => {
319 - console.log('res', res)
320 - this.tableData = res.data.value;
321 - this.total = res.data.totalItems;
322 - debugger;
323 - })
324 }, 314 },
315 + created() {},
325 methods: { 316 methods: {
326 tableSelect(val) { 317 tableSelect(val) {
327 this.selected = val.selection; 318 this.selected = val.selection;
...@@ -332,15 +323,14 @@ export default { ...@@ -332,15 +323,14 @@ export default {
332 handleRowClick(row) { 323 handleRowClick(row) {
333 const declareId = row.declareId; 324 const declareId = row.declareId;
334 this.$router.push({ 325 this.$router.push({
335 - path: '/logisticsExitDetail', 326 + path: "/logisticsExitDetail",
336 query: { 327 query: {
337 - declareId 328 + declareId,
338 - } 329 + },
339 }); 330 });
340 }, 331 },
341 async search(val) { 332 async search(val) {
342 try { 333 try {
343 -
344 } catch (error) { 334 } catch (error) {
345 console.error("搜索出错:", error); 335 console.error("搜索出错:", error);
346 } finally { 336 } finally {
...@@ -348,8 +338,8 @@ export default { ...@@ -348,8 +338,8 @@ export default {
348 this.loadings.sreachLoading = false; 338 this.loadings.sreachLoading = false;
349 } 339 }
350 }, 340 },
351 - } 341 + },
352 -} 342 +};
353 </script> 343 </script>
354 344
355 <style scoped lang="scss"> 345 <style scoped lang="scss">
......
1 +<template>
2 + <el-dialog
3 + class="entryDialog classCUploadDialog"
4 + title="申报数据导入"
5 + :visible.sync="outerVisible"
6 + :show-close="false"
7 + width="35%"
8 + :close-on-click-modal="false"
9 + v-loading="loadings.dialogLoading"
10 + :element-loading-text="loadingText"
11 + @close="close"
12 + >
13 + <div class="modelItem">
14 + <div class="modelItem-title">
15 + <div>数据导入</div>
16 + <div>
17 + <el-button
18 + type="text"
19 + icon="el-icon-download"
20 + :loadings="$parent.loadings.dwonloadModelLoading"
21 + @click="dwonloadModelFile"
22 + >导入模板下载</el-button
23 + >
24 + </div>
25 + </div>
26 + <div class="uploadItem">
27 + <div class="uploadbox">
28 + <el-button
29 + size="mini"
30 + type="text"
31 + v-loading="loadings.uploadLoading"
32 + @click="uploadFile"
33 + >上传文件
34 + </el-button>
35 + <el-upload
36 + class="upload-demo"
37 + ref="uploadFile"
38 + action="/manager-server/attachment/picImg"
39 + :http-request="fileUpload"
40 + :auto-upload="true"
41 + :show-file-list="false"
42 + :data="{}"
43 + accept=".xlsx"
44 + :before-upload="beforeUpload"
45 + :on-remove="handleRemove"
46 + :on-success="handleSuccess"
47 + :on-change="fileChange"
48 + :file-list="fileList"
49 + @clearFiles="clearFile"
50 + >
51 + </el-upload>
52 + </div>
53 + <div class="fileList" v-if="formData.file != null">
54 + <div class="fileList-item">
55 + <div class="uploadbox-fileName">
56 + <svg-icon
57 + class="el-icon-user-solid"
58 + icon-class="exl"
59 + style="font-size: 18px; color: #de002e"
60 + />
61 + <Tooltip
62 + :content="formData.file.name"
63 + :refName="formData.file.name"
64 + />
65 + </div>
66 + <div class="uploadbox-option">
67 + <el-popconfirm
68 + :title="$t('entry.upload.delTip')"
69 + @confirm="delTypeDFile"
70 + >
71 + <el-button slot="reference" type="text">{{
72 + $t("entry.upload.del")
73 + }}</el-button>
74 + </el-popconfirm>
75 + </div>
76 + </div>
77 + </div>
78 + </div>
79 + </div>
80 + <div class="dialogOption entrySave">
81 + <el-button
82 + class="entrySaveButton"
83 + :disabled="loadings.uploadLoading"
84 + @click="close"
85 + >关闭</el-button
86 + >
87 + </div>
88 + </el-dialog>
89 +</template>
90 +
91 +<script>
92 +import { uploadDeclareData } from "@/api/declareData-api.js";
93 +export default {
94 + props: {
95 + outerVisible: {
96 + type: Boolean,
97 + default: false,
98 + },
99 + },
100 + data() {
101 + return {
102 + formData: {
103 + file: null,
104 + },
105 + searchForm: {},
106 + loadings: {
107 + dialogLoading: false,
108 + uploadLoading: false,
109 + sreachLoading: false,
110 + },
111 + uploadType: false,
112 + fileList: [],
113 + loadingText: "数据导入中,请稍后!",
114 + };
115 + },
116 + watch: {
117 + outerVisible(val) {
118 + if (val) {
119 + this.uploadType = false;
120 + }
121 + },
122 + },
123 + methods: {
124 + dwonloadModelFile() {
125 + this.$emit("dwonloadModelFile");
126 + },
127 + //文件上传
128 + uploadFile() {
129 + this.$refs.uploadFile.$refs["upload-inner"].handleClick();
130 + },
131 + //文件校验
132 + beforeUpload(val) {
133 + if (
134 + val.type !=
135 + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
136 + ) {
137 + this.alertWarningMsg("请上传Excel文件!");
138 + return false;
139 + } else {
140 + return true;
141 + }
142 + },
143 + fileUpload(val) {
144 + const reader = new FileReader();
145 + reader.readAsDataURL(val.file);
146 + reader.onload = (e) => {
147 + this.loadings.dialogLoading = true;
148 + let obj = {
149 + multipartFile: this.base64ConvertFile(e.target.result, val.file.name),
150 + };
151 +
152 + uploadDeclareData(obj)
153 + .then((res) => {
154 + if (res.code === "200") {
155 + this.msgSuccess("上传成功!");
156 + this.handleRemove();
157 + this.close();
158 + this.uploadType = true;
159 + } else {
160 + this.alertWarningMsg(res.message);
161 + this.loadings.dialogLoading = false;
162 + }
163 + })
164 + .catch((err) => {
165 + console.log(err);
166 + this.loadings.dialogLoading = false;
167 + });
168 + };
169 + },
170 + fileChange(val) {},
171 + handleSuccess() {},
172 + handleRemove() {
173 + this.fileList = [];
174 + },
175 + clearFile() {},
176 + close() {
177 + this.handleRemove();
178 + this.$emit("close", this.uploadType);
179 + },
180 + },
181 +};
182 +</script>
183 +
184 +<style lang="scss" scoped>
185 +@import "@/assets/styles/variables.scss";
186 +.modelItem {
187 + width: 100%;
188 + .modelItem-title {
189 + display: flex;
190 + justify-content: space-between;
191 + margin-bottom: 5px;
192 + font-size: 14px;
193 + font-weight: 600;
194 + color: #333;
195 + }
196 +}
197 +
198 +.uploadItem {
199 + margin-bottom: 5px;
200 +
201 + .uploadbox {
202 + width: 100%;
203 + height: 40px;
204 + line-height: 20px;
205 + background-color: $formItemBackgroundColor;
206 + padding: 4px 8px;
207 + margin-top: 5px;
208 + display: flex;
209 + justify-content: space-between;
210 +
211 + .el-button {
212 + font-weight: 400 !important;
213 + }
214 + }
215 +}
216 +
217 +.fileList {
218 + width: 100%;
219 +
220 + .fileList-item {
221 + display: flex;
222 + justify-content: space-between;
223 + padding: 5px 15px 5px 5px;
224 + background-color: $formItemBackgroundColor;
225 + font-size: 14px;
226 +
227 + .uploadbox-fileName {
228 + display: flex;
229 + align-items: center;
230 + }
231 +
232 + .uploadbox-option {
233 + .fileSize {
234 + display: inline-block;
235 + color: #8e8e8e;
236 + font-size: 12px;
237 + }
238 + }
239 +
240 + .svg-icon {
241 + display: inline-block;
242 + color: $fedexError;
243 + }
244 +
245 + .text-tooltip {
246 + max-width: 500px;
247 + display: inline-block;
248 + margin-left: 10px;
249 + }
250 +
251 + .fileList-item-empty {
252 + display: inline-block;
253 + margin: 5px;
254 + height: max-content;
255 + color: #8e8e8e;
256 + }
257 + }
258 +}
259 +
260 +.fedexformSreachBottomBorder {
261 + border-top: 1px solid $fedexBorder;
262 + border-left: 1px solid $fedexBorder;
263 + border-right: 1px solid $fedexBorder;
264 +}
265 +
266 +.textCenter {
267 + .el-button {
268 + font-size: 20px;
269 + }
270 +}
271 +</style>
1 +<template>
2 + <div class="entrySreach" v-loading="loadings.templateLoading">
3 + <div>
4 + <el-form
5 + class="fedexFormStyle fedexformSreach fedexformSreachBottomBorder"
6 + ref="sreachForm"
7 + :model="sreachFormData"
8 + label-position="top"
9 + size="small"
10 + >
11 + <el-row class="row-border">
12 + <el-col :span="5">
13 + <!-- 提运单号 -->
14 + <Formitem label="提运单号" prop="billNo">
15 + <el-input
16 + type="text"
17 + class="inputShadow"
18 + id="inputInner--billNo"
19 + resize="none"
20 + v-model="sreachFormData.billNo"
21 + clearable
22 + placeholder=""
23 + ></el-input>
24 + </Formitem>
25 + </el-col>
26 + <el-col :span="5">
27 + <!-- 订单编号 -->
28 + <Formitem label="订单编号" prop="orderNo">
29 + <el-select
30 + type="text"
31 + id="inputInner--orderNo"
32 + v-model="sreachFormData.orderNo"
33 + clearable
34 + placeholder=""
35 + >
36 + <el-option
37 + v-for="(item, index) in dictData.logisticsNo"
38 + :key="index"
39 + :label="item.name"
40 + :value="item.code"
41 + ></el-option>
42 + </el-select>
43 + </Formitem>
44 + </el-col>
45 + <el-col :span="5">
46 + <!-- 运单编号 -->
47 + <Formitem label="运单编号" prop="logisticsNo">
48 + <el-popover
49 + placement="bottom"
50 + width="320"
51 + trigger="manual"
52 + popper-class="popoverlogisticsNo"
53 + v-model="textareaVisible.formItemlogisticsNo"
54 + >
55 + <el-input
56 + name="logisticsNo-textarea"
57 + type="textarea"
58 + :rows="5"
59 + id="popoverInputlogisticsNo"
60 + class="inputShadow textareaPopover"
61 + v-model="sreachFormData.logisticsNo"
62 + resize="none"
63 + maxlength="13000"
64 + placeholder=""
65 + @blur="textareaBlur"
66 + @input="input"
67 + ></el-input>
68 + <el-input
69 + slot="reference"
70 + name="logisticsNo"
71 + type="textarea"
72 + :rows="1"
73 + class="inputShadow"
74 + id="inputInner--logisticsNo"
75 + v-model="sreachFormData.logisticsNo"
76 + resize="none"
77 + placeholder=""
78 + @focus="textareaFocus"
79 + @input="input"
80 + ></el-input>
81 + </el-popover>
82 + <el-badge
83 + v-if="
84 + !textareaVisible.formItemlogisticsNo &&
85 + textareaLength({
86 + key: 'logisticsNo',
87 + value: sreachFormData.logisticsNo,
88 + }) > 1
89 + "
90 + type="info"
91 + :value="`+${textareaLength({
92 + key: 'logisticsNo',
93 + value: sreachFormData.logisticsNo,
94 + })}`"
95 + class="item texttareaTip"
96 + />
97 + </Formitem>
98 + </el-col>
99 + <el-col :span="5">
100 + <!-- 创建时间 -->
101 + <Formitem label="创建时间" prop="createTime" :activeType="true">
102 + <el-date-picker
103 + class="inputInner--createTime"
104 + id="inputInner--createTime"
105 + v-model="sreachFormData.createTime"
106 + type="daterange"
107 + format="yyyy-MM-dd"
108 + prefix-icon="none"
109 + value-format="yyyy-MM-dd"
110 + range-separator="至"
111 + @chagne="dateChange"
112 + />
113 + </Formitem>
114 + </el-col>
115 + <el-col :span="2">
116 + <el-form-item class="textCenter">
117 + <el-button
118 + class="entrySreachButton"
119 + type="text"
120 + icon="el-icon-search"
121 + :loading="loadings.sreachLoading"
122 + @click="search(0)"
123 + ></el-button>
124 + </el-form-item>
125 + </el-col>
126 + <el-col :span="2">
127 + <!-- 清空查询条件-->
128 + <el-form-item class="textLeft textCenter">
129 + <el-button
130 + type="text"
131 + size="small"
132 + icon="el-icon-refresh"
133 + @click="clear"
134 + >
135 + 重置
136 + </el-button>
137 + </el-form-item>
138 + </el-col>
139 + </el-row>
140 + <el-row class="backgroundRow">
141 + <el-col :span="5">
142 + <!-- 回执类型 -->
143 + <Formitem label="回执类型" prop="receiptType">
144 + <el-select
145 + type="text"
146 + id="inputInner--receiptType"
147 + v-model="sreachFormData.receiptType"
148 + clearable
149 + placeholder=""
150 + >
151 + <el-option
152 + v-for="(item, index) in dictData.receiptType"
153 + :key="index"
154 + :label="item.name"
155 + :value="item.code"
156 + ></el-option>
157 + </el-select>
158 + </Formitem>
159 + </el-col>
160 + <el-col :span="5">
161 + <!-- 回执状态 -->
162 + <Formitem label="回执状态" prop="receiptStatus">
163 + <el-select
164 + type="text"
165 + id="inputInner--receiptStatus"
166 + v-model="sreachFormData.receiptStatus"
167 + clearable
168 + placeholder=""
169 + >
170 + <el-option
171 + v-for="(item, index) in dictData.receiptStatus"
172 + :key="index"
173 + :label="item.name"
174 + :value="item.code"
175 + ></el-option>
176 + </el-select>
177 + </Formitem>
178 + </el-col>
179 + </el-row>
180 + </el-form>
181 + </div>
182 + <div class="optionButton">
183 + <div class="optionButton-left">
184 + <el-button class="entrySaveButton" size="small" @click="uploadData"
185 + ><svg-icon
186 + class="el-icon-user-solid"
187 + icon-class="uploadCloud"
188 + ></svg-icon
189 + >一键导入
190 + </el-button>
191 + <el-button
192 + class="entrySaveButton"
193 + size="small"
194 + icon="el-icon-download"
195 + :loading="loadings.dwonloadModelLoading"
196 + @click="dwonloadModelFile"
197 + >
198 + 导入模版下载
199 + </el-button>
200 + </div>
201 + <div class="optionButton-right">
202 + <el-dropdown
203 + style="margin-right: 10px"
204 + size="small"
205 + split-button
206 + type="primary"
207 + v-loading="loadings.dropDownLoading"
208 + :disabled="selected.length == 0"
209 + @command="dropdownChange"
210 + @click="declareData"
211 + >
212 + <svg-icon
213 + class="el-icon-user-solid"
214 + icon-class="fedexDeclareIcon"
215 + ></svg-icon
216 + >{{ dropdownName }}
217 + <el-dropdown-menu slot="dropdown">
218 + <el-dropdown-item :command="{ code: 'full', name: '一键申报' }"
219 + >一键申报</el-dropdown-item
220 + >
221 + <el-dropdown-item
222 + :command="{ code: 'order', name: '订单申报' }"
223 + ></el-dropdown-item>
224 + <el-dropdown-item :command="{ code: 'waybill', name: '物流单申报' }"
225 + >物流单申报</el-dropdown-item
226 + >
227 + <el-dropdown-item :command="{ code: 'list', name: '清单申报' }"
228 + >清单申报</el-dropdown-item
229 + >
230 + <el-dropdown-item
231 + :command="{ code: 'totalScore', name: '清单总分单申报' }"
232 + >清单总分单申报</el-dropdown-item
233 + >
234 + <el-dropdown-item
235 + :command="{ code: 'cancellation', name: '撤销单申报' }"
236 + >撤销单申报</el-dropdown-item
237 + >
238 + <el-dropdown-item
239 + :command="{ code: 'logisticsDeparture', name: '离境单申报' }"
240 + >离境单申报</el-dropdown-item
241 + >
242 + </el-dropdown-menu>
243 + </el-dropdown>
244 + <el-button
245 + class="entrySaveButton"
246 + size="small"
247 + icon="el-icon-download"
248 + @click="downloadData"
249 + >
250 + 导出
251 + </el-button>
252 + </div>
253 + </div>
254 + <Table
255 + class="fedexDetialTable fedexSreachTable"
256 + ref="entryTable"
257 + :data="tableData"
258 + :headerData="headerData"
259 + :maxHeight="tableMaxheight"
260 + :border="true"
261 + :pagination="true"
262 + :order="false"
263 + :loading="loadings.sreachLoading"
264 + :page="page.pageNum"
265 + :pageSizes="[20, 30, 50, 100]"
266 + :totalCount="page.total"
267 + @sizeChange="sizeChange"
268 + @currentChange="currentChange"
269 + :selection="true"
270 + :selectFixed="false"
271 + @tableSelect="tableSelect"
272 + @tableSelectAll="tableSelectAll"
273 + :rowSelectDataType="false"
274 + @cellClick="cellClick"
275 + :selected="selected"
276 + >
277 + <template v-slot:orderReceiptStatus="scope">
278 + <el-popover
279 + :popper-class="`poppercustoms${scope.row.consignmentId} portLogPopper`"
280 + placement="left"
281 + :visible-arrow="false"
282 + title=""
283 + width="750"
284 + trigger="manual"
285 + v-model="scope.row.orderReceiptStatusPopoverType"
286 + >
287 + <div style="text-align: right">
288 + <i
289 + class="el-icon-close"
290 + style="cursor: pointer; font-size: 20px; font-weight: 700"
291 + @click.stop="popoverClose"
292 + ></i>
293 + </div>
294 + <div v-loading="scope.row.popoverLoading">
295 + <div>
296 + <span style="font-weight: 700; color: #515a6e">订单编号:</span
297 + >{{ scope.row.orderno }}
298 + </div>
299 + <Table
300 + ref="customsClearanceReceiptStatusTable"
301 + class="fedexDetialTable mt20"
302 + :data="scope.row.orderReceiptStatusPopoverData"
303 + :headerData="receiptDataHead"
304 + :selection="false"
305 + :selectFixed="false"
306 + :order="false"
307 + :border="true"
308 + :rowSelectDataType="false"
309 + :loading="loadings.logTableLoading"
310 + :pagination="false"
311 + :page="1"
312 + :pageSizes="[20, 30, 50, 100]"
313 + :totalCount="0"
314 + :emptyText="$t('portEntry.emptyText')"
315 + height="350px"
316 + maxHeight="500px"
317 + rowKey="id"
318 + >
319 + <template v-slot:createTime="scoped">
320 + <span>{{ formatDate(scoped.row.createTime) }}</span>
321 + </template>
322 + </Table>
323 + </div>
324 + <el-button
325 + slot="reference"
326 + type="text"
327 + @click.stop="popoverChange(scope.row, 'orderReceiptStatus')"
328 + >{{
329 + scope.row.orderReceiptStatus == null ||
330 + scope.row.orderReceiptStatus == ""
331 + ? "-"
332 + : scope.row.orderReceiptStatus
333 + }}</el-button
334 + >
335 + </el-popover>
336 + </template>
337 + <template v-slot:logisticsReceiptStatus="scope">
338 + <span>{{
339 + scope.row.orderReceiptStatus == null ||
340 + scope.row.orderReceiptStatus == ""
341 + ? "-"
342 + : scope.row.orderReceiptStatus
343 + }}</span>
344 + </template>
345 + <template v-slot:listReceiptStatus="scope">
346 + <span>{{
347 + scope.row.orderReceiptStatus == null ||
348 + scope.row.orderReceiptStatus == ""
349 + ? "-"
350 + : scope.row.orderReceiptStatus
351 + }}</span>
352 + </template>
353 + </Table>
354 + <DialogVue
355 + :outerVisible="outerVisible"
356 + @dwonloadModelFile="dwonloadModelFile"
357 + @close="close"
358 + />
359 + </div>
360 +</template>
361 +
362 +<script>
363 +import { searchDeclareData, declareDataUpload } from "@/api/declareData-api.js";
364 +import DialogVue from "./dialog.vue";
365 +export default {
366 + name: "",
367 + components: {
368 + DialogVue,
369 + },
370 + data() {
371 + return {
372 + sreachFormData: {
373 + billNo: "",
374 + logisticsNo: "",
375 + orderNo: "",
376 + receiptStatus: null,
377 + receiptType: null,
378 + createTime: [],
379 + },
380 + page: {
381 + pageNum: 1,
382 + pageSize: 20,
383 + total: 0,
384 + },
385 + tableData: [],
386 + headerData: [
387 + {
388 + name: "提运单号",
389 + value: "billNo",
390 + width: "",
391 + align: "left",
392 + },
393 + {
394 + name: "物流运单号",
395 + value: "logisticsWaybillNumber",
396 + width: "",
397 + align: "left",
398 + },
399 + {
400 + name: "订单编号",
401 + value: "orderno",
402 + width: "",
403 + align: "left",
404 + },
405 + {
406 + name: "电商企业",
407 + value: "ebccode",
408 + width: "",
409 + align: "left",
410 + },
411 + {
412 + name: "订单回执",
413 + value: "orderReceiptStatus",
414 + width: "",
415 + align: "left",
416 + slot: true,
417 + },
418 + {
419 + name: "收款单回执",
420 + value: "",
421 + width: "",
422 + align: "left",
423 + slot: true,
424 + },
425 + {
426 + name: "物流单回执",
427 + value: "logisticsReceiptStatus",
428 + width: "",
429 + align: "left",
430 + slot: true,
431 + },
432 + {
433 + name: "清单回执",
434 + value: "listReceiptStatus",
435 + width: "",
436 + align: "left",
437 + slot: true,
438 + },
439 + {
440 + name: "清单总分单回执",
441 + value: "",
442 + width: "",
443 + align: "left",
444 + slot: true,
445 + },
446 + ],
447 + receiptDataHead: [
448 + {
449 + name: "回执状态",
450 + value: "",
451 + width: "",
452 + align: "left",
453 + },
454 + {
455 + name: "状态时间",
456 + value: "",
457 + width: "",
458 + align: "left",
459 + },
460 + {
461 + name: "回执描述",
462 + value: "",
463 + width: "",
464 + align: "left",
465 + },
466 + ],
467 + selected: [],
468 + dictData: {
469 + logisticsNo: [],
470 + receiptStatus: [],
471 + receiptType: [],
472 + },
473 + loadings: {
474 + templateLoading: false,
475 + sreachLoading: false,
476 + dwonloadModelLoading: false,
477 + dropDownLoading: false,
478 + },
479 + textareaVisible: {},
480 + tableMaxheight: null,
481 + outerVisible: false,
482 + dropdownName: "一键申报",
483 + dropdownCode: "full",
484 + };
485 + },
486 + created() {
487 + this.search(0);
488 + },
489 + mounted() {
490 + this.tableMaxheight = window.innerHeight - 300;
491 + },
492 + methods: {
493 + //查询申报数据
494 + search(val) {
495 + this.loadings.sreachLoading = true;
496 + this.selected = [];
497 + if (val == 0) {
498 + this.page.pageNum = 1;
499 + }
500 + let obj = this.sreachFormData;
501 + obj.pageNum = this.page.pageNum;
502 + obj.pageSize = this.page.pageSize;
503 + obj.startCreateTime = "";
504 + obj.endCreateTime = "";
505 + if (this.sreachFormData.createTime.length > 0) {
506 + obj.startCreateTime = obj.createTime[0];
507 + obj.endCreateTime = obj.createTime[1];
508 + }
509 + searchDeclareData(obj)
510 + .then((res) => {
511 + if (res.code === "200") {
512 + this.tableData = res.data.value;
513 + this.page.total = res.data.totalItems;
514 + this.tableData.forEach((item, idx) => {
515 + item.index = idx;
516 + item.popoverLoading = false;
517 + item.orderReceiptStatusPopoverType = false;
518 + item.listReceiptStatusPopoverType = false;
519 + item.logisticsReceiptStatusPopoverType = false;
520 + item.orderReceiptStatusPopoverData = [];
521 + item.listReceiptStatusPopoverData = [];
522 + item.logisticsReceiptStatusPopoverData = [];
523 + });
524 + } else {
525 + this.alertWarningMsg(res.message);
526 + }
527 + this.loadings.sreachLoading = false;
528 + })
529 + .catch((err) => {
530 + console.log(err);
531 + this.loadings.sreachLoading = false;
532 + });
533 + },
534 + //重置数据
535 + clear() {
536 + this.sreachFormData = {
537 + billNo: "",
538 + logisticsNo: "",
539 + orderNo: "",
540 + receiptStatus: null,
541 + receiptType: null,
542 + createTime: [],
543 + };
544 + },
545 + //上传申报数据
546 + uploadData() {
547 + this.outerVisible = true;
548 + },
549 + //下载模板
550 + dwonloadModelFile() {
551 + this.loadings.dwonloadModelLoading = true;
552 + this.fileDownload
553 + .downLoadZip(
554 + "api",
555 + "declareDataModel",
556 + "申报数据模板.xlsx",
557 + "xlsx",
558 + "get"
559 + )
560 + .finally(() => {
561 + this.loadings.dwonloadModelLoading = false;
562 + });
563 + },
564 + //导出
565 + downloadData() {},
566 + //申报
567 + declareData() {
568 + this.loadings.dropDownLoading = true;
569 + let obj = {
570 + declareIds: [],
571 + type: this.dropdownCode,
572 + };
573 + this.selected.forEach((item) => {
574 + obj.declareIds.push(item.declareId);
575 + });
576 + declareDataUpload(obj)
577 + .then((res) => {
578 + if (res.code === "200") {
579 + this.alertSuccessMsg(res.message);
580 + } else {
581 + this.alertWarningMsg(res.message);
582 + }
583 + this.loadings.dropDownLoading = false;
584 + })
585 + .catch((err) => {
586 + console.log(err);
587 + this.loadings.dropDownLoading = false;
588 + });
589 + },
590 + //切换申报模式
591 + dropdownChange(val) {
592 + this.dropdownName = val.name;
593 + this.dropdownCode = val.code;
594 + },
595 + close(val) {
596 + if (val) {
597 + this.search(1);
598 + }
599 + this.outerVisible = false;
600 + },
601 + //弹框关闭
602 + popoverClose(val) {
603 + this.tableData.forEach((item) => {
604 + item.popoverLoading = false;
605 + item.orderReceiptStatusPopoverType = false;
606 + item.listReceiptStatusPopoverType = false;
607 + item.logisticsReceiptStatusPopoverType = false;
608 + item.orderReceiptStatusPopoverData = [];
609 + item.listReceiptStatusPopoverData = [];
610 + item.logisticsReceiptStatusPopoverData = [];
611 + });
612 + this.$refs.entryTable.$refs.tables.$refs.bodyWrapper.style.overflowY =
613 + "auto";
614 + },
615 + //弹框状态改版
616 + popoverChange(data, type) {
617 + this.popoverClose(type);
618 + let arr = JSON.parse(JSON.stringify(this.tableData));
619 + arr.forEach((item) => {
620 + item[`${type}PopoverData`] = [];
621 + if (data.declareId != item.declareId) {
622 + item[`${type}PopoverLoading`] = false;
623 + item[`${type}PopoverType`] = false;
624 + } else {
625 + item[`${type}PopoverLoading`] = true;
626 + item[`${type}PopoverType`] = !JSON.parse(
627 + JSON.stringify(item[`${type}PopoverType`])
628 + );
629 + }
630 + });
631 + if (!data[`${type}PopoverType`]) {
632 + this.$refs.entryTable.$refs.tables.$refs.bodyWrapper.style.overflowY =
633 + "hidden";
634 + } else {
635 + this.$refs.entryTable.$refs.tables.$refs.bodyWrapper.style.overflowY =
636 + "auto";
637 + }
638 + // this.searchLog({
639 + // tableData: arr,
640 + // data: data,
641 + // type: !data[`${type}PopoverType`],
642 + // status: type,
643 + // });
644 + this.$nextTick(() => {
645 + document.getElementsByClassName("el-table__row").forEach((dom1, i) => {
646 + if (i == data.idx) {
647 + dom1.classList.add("activeRow");
648 + } else {
649 + dom1.classList.remove("hover-row");
650 + dom1.classList.remove("activeRow");
651 + }
652 + });
653 + let interval = setInterval(() => {
654 + if (
655 + document.getElementsByClassName(`popper${type}${data.declareId}`)
656 + .length == 1
657 + ) {
658 + clearInterval(interval);
659 + }
660 + document
661 + .getElementsByClassName(`popper${type}${data.declareId}`)
662 + .forEach((dom, index) => {
663 + if (index > 0) {
664 + dom.style.display = "none";
665 + dom.remove();
666 + }
667 + });
668 + }, 100);
669 + });
670 + },
671 + tableSelect(val) {
672 + this.selected = val.selection;
673 + },
674 + tableSelectAll(val) {
675 + this.selected = val;
676 + },
677 + //分页
678 + currentChange(val) {
679 + this.page.pageNum = val.page;
680 + this.search(1);
681 + },
682 + sizeChange(val) {
683 + this.page.pageSize = val;
684 + this.search(1);
685 + },
686 + cellClick() {},
687 + //文本域展示状态切换
688 + textareaFocus(val) {
689 + this.textareaVisible["formItem" + val.target.name.split("-")[0]] = true;
690 + this.$nextTick(() => {
691 + document
692 + .querySelector("#popoverInput" + val.target.name.split("-")[0])
693 + .focus();
694 + document.querySelector(
695 + "#inputInner--" + val.target.name.split("-")[0]
696 + ).style.display = "none";
697 + });
698 + },
699 + textareaBlur(val) {
700 + let inputInner = document.querySelector(
701 + "#inputInner--" + val.target.name.split("-")[0]
702 + );
703 + this.textareaVisible["formItem" + val.target.name.split("-")[0]] = false;
704 + inputInner.style.display = "block";
705 + this.$nextTick(() => {
706 + inputInner.blur();
707 + if (
708 + inputInner.value != undefined &&
709 + inputInner.value != "" &&
710 + inputInner.value != null
711 + ) {
712 + inputInner.classList.add("inputFocus");
713 + } else {
714 + inputInner.classList.remove("inputFocus");
715 + }
716 + });
717 + let arr = [];
718 + this.sreachFormData[val.target.name.split("-")[0]]
719 + .replace(/[\n\,\;\;]/g, ",")
720 + .replace(/[\t]/g, "")
721 + .split(",")
722 + .forEach((str, index) => {
723 + if (str != null && str != "" && index <= 1000) {
724 + arr.push(str.trim());
725 + }
726 + });
727 + this.sreachFormData[val.target.name.split("-")[0]] = arr.join("\n");
728 + this.$forceUpdate();
729 + },
730 + //文本域输入内容数量处理
731 + textareaLength(val) {
732 + if (val.value != "" && val.value != null) {
733 + let arr = [];
734 + val.value
735 + .trim()
736 + .replace(/[\n\,\;\;]/g, ",")
737 + .split(",")
738 + .forEach((item) => {
739 + if (item != "" && item != null) {
740 + arr.push(item);
741 + }
742 + });
743 + return arr.length;
744 + } else {
745 + return 0;
746 + }
747 + },
748 + input() {
749 + this.$forceUpdate();
750 + },
751 + dateChange(val) {},
752 + },
753 +};
754 +</script>
755 +
756 +<style lang="scss" scoped>
757 +@import "@/assets/styles/variables.scss";
758 +.entrySreach {
759 + height: 100%;
760 + background-color: $menuLightBg;
761 +
762 + .entrySreachButton {
763 + display: inline-block;
764 + font-size: 20px;
765 + color: $fedexButton !important;
766 + }
767 +
768 + .optionButton {
769 + padding: 10px;
770 + text-align: right;
771 + display: flex;
772 + justify-content: space-between;
773 +
774 + .el-button {
775 + color: $fedexButton;
776 + border-color: $fedexButton !important;
777 +
778 + svg {
779 + display: inline-block;
780 + margin-right: 5px;
781 + fill: $fedexButton;
782 + }
783 + }
784 +
785 + .entrySaveButton:hover,
786 + .entrySaveButton:focus {
787 + color: $menuLightBg !important;
788 + background-color: $fedexButton !important;
789 + }
790 + }
791 +}
792 +
793 +.texttareaTip {
794 + position: absolute;
795 + top: 52%;
796 + right: 20px;
797 + transform: translate(0, -50%);
798 + z-index: 10;
799 +}
800 +</style>