zhanbo.xu

feat: 开发运抵单查询 功能

1 +import request from "@/utils/request";
2 +// /exportArrivalIn/getExportArrivalInList
3 +export function getExportArrivalInList(data) {
4 + return request({
5 + url: "/bus-customer/exportArrivalIn/getExportArrivalInList",
6 + method: "post",
7 + data: data,
8 + });
9 +}
10 +
11 +// GET ​/exportArrivalIn​/receipt​/{copNo} 运抵单回执
12 +export function getExportArrivalInReceipt({ copNo }) {
13 + return request({
14 + url: `/bus-customer/exportArrivalIn/receipt/${copNo}`,
15 + method: "get",
16 + });
17 +}
18 +// GET ​/exportArrivalIn​/details​/{id} 查询运抵单详情
19 +export function getExportArrivalInDetails({ id }) {
20 + return request({
21 + url: `/bus-customer/exportArrivalIn/details/${id}`,
22 + method: "get",
23 + });
24 +}
...@@ -190,6 +190,14 @@ export const constantRoutes = [ ...@@ -190,6 +190,14 @@ export const constantRoutes = [
190 // name: 'ExportRevokeBillQuery', 190 // name: 'ExportRevokeBillQuery',
191 // meta: { title: '出口撤销单查询', icon: '' } 191 // meta: { title: '出口撤销单查询', icon: '' }
192 // } 192 // }
193 + {
194 + path: "/arrival-list-detail",
195 + component: (resolve) =>
196 + require(["@/views/arrival-list-detail/index"], resolve),
197 + name: "ArrivalListDetail",
198 + hidden: true,
199 + meta: { title: "运抵详情", icon: "" },
200 + },
193 ], 201 ],
194 }, 202 },
195 { 203 {
......
1 +<template>
2 + <div class="entry" v-loading="loadings.entryLoading">
3 + <div class="entryTitle">
4 + <div>运抵详情</div>
5 + <div>
6 + <el-button class="entrySaveButton" @click="back">返 回</el-button>
7 + </div>
8 + </div>
9 + <el-form
10 + class="fedexFormStyle"
11 + ref="sreachForm"
12 + :model="formData"
13 + label-position="top"
14 + disabled
15 + size="small"
16 + >
17 + <el-row :gutter="5">
18 + <!-- 提运单号 -->
19 + <el-col :span="3">
20 + <Formitem label="提运单号" prop="billNo">
21 + <el-input
22 + type="text"
23 + class="inputShadow"
24 + id="inputInner--billNo"
25 + resize="none"
26 + v-model="formData.billNo"
27 + clearable
28 + placeholder=""
29 + ></el-input>
30 + </Formitem>
31 + </el-col>
32 + <!-- 物流运单编号 -->
33 + <el-col :span="3">
34 + <Formitem label="物流运单编号" prop="logisticsNo">
35 + <el-input
36 + type="text"
37 + class="inputShadow"
38 + id="inputInner--logisticsNo"
39 + resize="none"
40 + v-model="formData.logisticsNo"
41 + clearable
42 + placeholder=""
43 + ></el-input>
44 + </Formitem>
45 + </el-col>
46 + <!-- 物流运单编号 -->
47 + <el-col :span="3">
48 + <Formitem label="申报地海关代码" prop="customsCode">
49 + <el-input
50 + type="text"
51 + class="inputShadow"
52 + id="inputInner--customsCode"
53 + resize="none"
54 + v-model="formData.customsCode"
55 + clearable
56 + placeholder=""
57 + ></el-input>
58 + </Formitem>
59 + </el-col>
60 + <!-- 电子口岸编号 -->
61 + <el-col :span="3">
62 + <Formitem label="电子口岸编号" prop="preNo">
63 + <el-input
64 + type="text"
65 + class="inputShadow"
66 + id="inputInner--preNo"
67 + resize="none"
68 + v-model="formData.preNo"
69 + clearable
70 + placeholder=""
71 + ></el-input>
72 + </Formitem>
73 + </el-col>
74 + <!-- 监管场所经营人代码 -->
75 + <el-col :span="3">
76 + <Formitem label="监管场所经营人代码" prop="operatorCode">
77 + <el-input
78 + type="text"
79 + class="inputShadow"
80 + id="inputInner--operatorCode"
81 + resize="none"
82 + v-model="formData.operatorCode"
83 + clearable
84 + placeholder=""
85 + ></el-input>
86 + </Formitem>
87 + </el-col>
88 + <!-- 监管场所经营人名称 -->
89 + <el-col :span="6">
90 + <Formitem label="监管场所经营人名称" prop="operatorName">
91 + <el-input
92 + type="text"
93 + class="inputShadow"
94 + id="inputInner--operatorName"
95 + resize="none"
96 + v-model="formData.operatorName"
97 + clearable
98 + placeholder=""
99 + ></el-input>
100 + </Formitem>
101 + </el-col>
102 + <!-- 监管场所代码 -->
103 + <el-col :span="3">
104 + <Formitem label="监管场所代码" prop="loctNo">
105 + <el-input
106 + type="text"
107 + class="inputShadow"
108 + id="inputInner--loctNo"
109 + resize="none"
110 + v-model="formData.loctNo"
111 + clearable
112 + placeholder=""
113 + ></el-input>
114 + </Formitem>
115 + </el-col>
116 + <!-- 进出口标记 -->
117 + <el-col :span="3">
118 + <Formitem label="进出口标记" prop="ieFlag">
119 + <el-input
120 + type="text"
121 + class="inputShadow"
122 + id="inputInner--ieFlag"
123 + resize="none"
124 + v-model="formData.ieFlag"
125 + clearable
126 + placeholder=""
127 + ></el-input>
128 + </Formitem>
129 + </el-col>
130 + <!-- 运输方式 -->
131 + <el-col :span="3">
132 + <Formitem label="运输方式" prop="trafMode">
133 + <el-select
134 + type="text"
135 + id="inputInner--trafMode"
136 + v-model="formData.trafMode"
137 + clearable
138 + placeholder=""
139 + >
140 + <el-option
141 + v-for="(item, index) in $store.getters.dict.DECLARE_TRAFMODE"
142 + :key="index"
143 + :label="item.itemChineseName"
144 + :value="item.itemValue"
145 + ></el-option>
146 + </el-select>
147 + </Formitem>
148 + </el-col>
149 + <!-- 境内运输工具编号 -->
150 + <el-col :span="3">
151 + <Formitem label="境内运输工具编号" prop="domesticTrafNo">
152 + <el-input
153 + type="text"
154 + class="inputShadow"
155 + id="inputInner--domesticTrafNo"
156 + resize="none"
157 + v-model="formData.domesticTrafNo"
158 + clearable
159 + placeholder=""
160 + ></el-input>
161 + </Formitem>
162 + </el-col>
163 + <!-- 物流企业代码 -->
164 + <el-col :span="3">
165 + <Formitem label="物流企业代码" prop="logisticsCode">
166 + <el-input
167 + type="text"
168 + class="inputShadow"
169 + id="inputInner--logisticsCode"
170 + resize="none"
171 + v-model="formData.logisticsCode"
172 + clearable
173 + placeholder=""
174 + ></el-input>
175 + </Formitem>
176 + </el-col>
177 + <!-- 物流企业名称 -->
178 + <el-col :span="6">
179 + <Formitem label="物流企业名称" prop="logisticsName">
180 + <el-input
181 + type="text"
182 + class="inputShadow"
183 + id="inputInner--logisticsName"
184 + resize="none"
185 + v-model="formData.logisticsName"
186 + clearable
187 + placeholder=""
188 + ></el-input>
189 + </Formitem>
190 + </el-col>
191 + <!-- 报文序号 -->
192 + <el-col :span="3">
193 + <Formitem label="报文序号" prop="msgSeqNo">
194 + <el-input
195 + type="text"
196 + class="inputShadow"
197 + id="inputInner--msgSeqNo"
198 + resize="none"
199 + v-model="formData.msgSeqNo"
200 + clearable
201 + placeholder=""
202 + ></el-input>
203 + </Formitem>
204 + </el-col>
205 + <!-- 报文总数 -->
206 + <el-col :span="3">
207 + <Formitem label="报文总数" prop="msgCount">
208 + <el-input
209 + type="text"
210 + class="inputShadow"
211 + id="inputInner--msgCount"
212 + resize="none"
213 + v-model="formData.msgCount"
214 + clearable
215 + placeholder=""
216 + ></el-input>
217 + </Formitem>
218 + </el-col>
219 + <!-- 申报类型 -->
220 + <el-col :span="3">
221 + <Formitem label="报送类型" prop="appType">
222 + <el-select
223 + type="text"
224 + id="inputInner--appType"
225 + v-model="formData.appType"
226 + clearable
227 + placeholder=""
228 + >
229 + <el-option
230 + v-for="(item, index) in $store.getters.dict.DECLARE_APPTYPE"
231 + :key="index"
232 + :label="item.itemChineseName"
233 + :value="item.itemValue"
234 + ></el-option>
235 + </el-select>
236 + </Formitem>
237 + </el-col>
238 + <!-- 申报日期 -->
239 + <el-col :span="3">
240 + <Formitem label="报送日期" prop="appTime">
241 + <el-input
242 + type="text"
243 + class="inputShadow"
244 + id="inputInner--appTime"
245 + resize="none"
246 + v-model="formData.appTime"
247 + clearable
248 + placeholder=""
249 + ></el-input>
250 + </Formitem>
251 + </el-col>
252 +
253 + <!-- 业务状态 -->
254 + <el-col :span="3">
255 + <Formitem label="报送状态" prop="appStatus">
256 + <el-select
257 + type="text"
258 + id="inputInner--appStatus"
259 + v-model="formData.appStatus"
260 + clearable
261 + placeholder=""
262 + >
263 + <el-option
264 + v-for="(item, index) in $store.getters.dict.APP_STATUS"
265 + :key="index"
266 + :label="item.itemChineseName"
267 + :value="item.itemValue"
268 + ></el-option>
269 + </el-select>
270 + </Formitem>
271 + </el-col>
272 +
273 + <!-- 备注 -->
274 + <el-col :span="9">
275 + <Formitem label="备注" prop="note">
276 + <el-input
277 + type="text"
278 + class="inputShadow"
279 + id="inputInner--note"
280 + resize="none"
281 + v-model="formData.note"
282 + clearable
283 + placeholder=""
284 + ></el-input>
285 + </Formitem>
286 + </el-col>
287 + </el-row>
288 + </el-form>
289 + <div
290 + :class="{ entryTitle: true, titleBorder: logtableType ? false : true }"
291 + style="margin-top: 10px"
292 + >
293 + <div>
294 + 回执信息
295 + <el-button type="text" @click="hiddenLogTable">
296 + <svg-icon v-if="logtableType" icon-class="downIcon"></svg-icon>
297 + <svg-icon v-else icon-class="upIcon"></svg-icon>
298 + </el-button>
299 + </div>
300 + </div>
301 + <ReceiptInfoTable
302 + v-if="logtableType"
303 + :tableData="logData"
304 + :headerData="logHeaderData"
305 + />
306 + <div class="entryTitle" style="margin-top: 10px">运抵单表体</div>
307 + <ProductDetailTable
308 + :tableData="detailData"
309 + :bodyHeader="detialHeaderData"
310 + />
311 + <div style="margin-bottom: 20px; text-align: center"></div>
312 + </div>
313 +</template>
314 +
315 +<script>
316 +import ReceiptInfoTable from "../components/ReceiptInfoTable/index.vue";
317 +import ProductDetailTable from "../components/ProductDetailTable/index.vue";
318 +import { getExportArrivalInDetails } from "@/api/arrivalList-api";
319 +export default {
320 + name: "",
321 + components: { ProductDetailTable, ReceiptInfoTable },
322 + data() {
323 + return {
324 + id: null,
325 + formData: {},
326 + logData: [],
327 + logHeaderData: [
328 + {
329 + name: "回执状态",
330 + value: "returnStatus",
331 + width: "200",
332 + align: "left",
333 + },
334 + {
335 + name: "状态时间",
336 + value: "returnTime",
337 + width: "400",
338 + align: "left",
339 + },
340 + {
341 + name: "回执描述",
342 + value: "returnInfo",
343 + width: "",
344 + align: "left",
345 + },
346 + ],
347 + detailData: [],
348 + detialHeaderData: [
349 + {
350 + name: "序号",
351 + value: "gnum",
352 + width: "",
353 + align: "left",
354 + },
355 + {
356 + name: "物流运单编号",
357 + value: "logisticsNo",
358 + width: "",
359 + align: "left",
360 + },
361 + {
362 + name: "总包号",
363 + value: "totalPackageNo",
364 + width: "",
365 + align: "left",
366 + },
367 + {
368 + name: "备注",
369 + value: "note",
370 + width: "",
371 + align: "left",
372 + },
373 + ],
374 + loadings: {
375 + entryLoading: false,
376 + },
377 + logtableType: true,
378 + };
379 + },
380 + created() {
381 + if (this.$route.params.data) {
382 + this.id = this.$route.params.data.id;
383 + this.searchData();
384 + } else {
385 + this.back();
386 + }
387 + },
388 + methods: {
389 + searchData() {
390 + this.loadings.entryLoading = true;
391 + getExportArrivalInDetails({ id: this.id })
392 + .then((res) => {
393 + if (res.code === "200") {
394 + const {
395 + exportArrivalInDetails = {}, // 运抵详情
396 + exportArrivalInItemList = [], // 运抵表体
397 + exportArrivalInReceiptList = [], // 回执信息
398 + } = res.data;
399 + this.formData = exportArrivalInDetails;
400 + this.detailData = exportArrivalInItemList.map((item, idx) => {
401 + item.gnum = idx + 1;
402 + return item;
403 + });
404 +
405 + this.logData = exportArrivalInReceiptList;
406 + } else {
407 + this.alertWarningMsg(res.message);
408 + }
409 + this.loadings.entryLoading = false;
410 + })
411 + .catch((err) => {
412 + console.log(err);
413 + this.loadings.entryLoading = false;
414 + });
415 + },
416 + searchLogData() {},
417 + hiddenLogTable() {
418 + this.logtableType = !this.logtableType;
419 + },
420 + back() {
421 + this.$router.go(-1);
422 + },
423 + },
424 +};
425 +</script>
426 +
427 +<style scoped lang="scss">
428 +.entry {
429 + width: 100%;
430 + height: 100%;
431 + padding: 10px;
432 + background-color: #fff;
433 + overflow: auto;
434 +
435 + .entryInformation {
436 + width: 100%;
437 + height: 100%;
438 + }
439 +
440 + .entryTitle {
441 + display: flex;
442 + justify-content: space-between;
443 + font-weight: 600;
444 + font-weight: 16px;
445 + color: #000;
446 + margin-bottom: 10px;
447 + }
448 +
449 + .titleBorder {
450 + border-bottom: 1px solid #333;
451 + }
452 +}
453 +</style>
1 -<template>
2 - <el-dialog
3 - class="entryDialog classCUploadDialog"
4 - :title="title"
5 - :visible.sync="outerVisible"
6 - :show-close="false"
7 - width="25%"
8 - :close-on-click-modal="false"
9 - :destroy-on-close="true"
10 - v-loading="loadings.dialogLoading"
11 - @close="close"
12 - >
13 - <div class="modelItem">
14 - <el-form
15 - v-if="type != 'menuChange'"
16 - class="fedexFormStyle"
17 - ref="formData"
18 - :model="formData"
19 - :rules="rules"
20 - label-position="top"
21 - size="small"
22 - >
23 - <Formitem label="角色名称" prop="roleName" type="edit">
24 - <el-input
25 - type="text"
26 - class="inputShadow"
27 - id="inputInner-edit-roleName"
28 - resize="none"
29 - v-model="formData.roleName"
30 - clearable
31 - placeholder=""
32 - ></el-input>
33 - </Formitem>
34 - </el-form>
35 - <el-tree
36 - ref="tree"
37 - class="menuTree"
38 - v-else
39 - :data="treeData"
40 - show-checkbox
41 - default-expand-all
42 - node-key="id"
43 - :default-expanded-keys="expandedKeys"
44 - :default-checked-keys="checkedKeys"
45 - :props="defaultProps"
46 - @check="treeCheckChange"
47 - >
48 - </el-tree>
49 - </div>
50 - <div class="dialogOption entrySave">
51 - <el-button
52 - class="entrySaveButton"
53 - :disabled="loadings.submitLoading"
54 - @click="submit"
55 - >确 定</el-button
56 - >
57 - <el-button
58 - class="entrySaveButton"
59 - :disabled="loadings.uploadLoading"
60 - @click="close"
61 - >关 闭</el-button
62 - >
63 - </div>
64 - </el-dialog>
65 -</template>
66 -
67 -<script>
68 -import {
69 - addRoleData,
70 - updateRoleData,
71 - updateRoleMenuData,
72 - getMenuByRoleId,
73 -} from "@/api/system/user.js";
74 -import { getRouters } from "@/api/menu";
75 -export default {
76 - props: {
77 - outerVisible: {
78 - type: Boolean,
79 - default: false,
80 - },
81 - title: {
82 - type: String,
83 - default: "新增角色",
84 - },
85 - type: {
86 - type: String,
87 - default: "",
88 - },
89 - active: {
90 - type: Object,
91 - default: null,
92 - },
93 - },
94 - watch: {
95 - outerVisible(val) {
96 - if (val) {
97 - this.loadings.dialogLoading = false;
98 - if (this.type == "update") {
99 - this.formData = this.active;
100 - } else if (this.type == "menuChange") {
101 - this.formData = this.active;
102 - this.searchTreeData();
103 - this.loadCheckedKeys();//加载已绑定的菜单
104 - }
105 - }
106 - },
107 - },
108 - data() {
109 - return {
110 - formData: {
111 - roleName: "",
112 - },
113 - treeData: [],
114 - treeCheckData: [],
115 - expandedKeys: [],
116 - checkedKeys: [],
117 - rules: {
118 - roleName: [
119 - {
120 - required: true,
121 - trigger: "blur",
122 - message: "角色名称不能为空!",
123 - },
124 - ],
125 - },
126 - defaultProps: {
127 - children: "children",
128 - label: "label",
129 - },
130 - searchForm: {},
131 - loadings: {
132 - dialogLoading: false,
133 - uploadLoading: false,
134 - submitLoading: false,
135 - },
136 - loadingText: "",
137 - };
138 - },
139 - methods: {
140 - //查询菜单数据
141 - searchTreeData() {
142 - this.loadings.dialogLoading = true;
143 - getRouters()
144 - .then((res) => {
145 - if (res.code === "200") {
146 - let arr = [];
147 - res.data.forEach((item) => {
148 - let status = true;
149 - if (item.parentMenuId == 0) {
150 - let obj = {
151 - id: item.menuId,
152 - label: item.menuName,
153 - children: [],
154 - };
155 - arr.forEach((menuItem) => {
156 - if (menuItem.id == item.menuId) {
157 - status = false;
158 - menuItem.label = item.menuName;
159 - }
160 - });
161 - if (status) {
162 - arr.push(obj);
163 - }
164 - } else {
165 - let obj = {
166 - id: item.menuId,
167 - label: item.menuName,
168 - };
169 - arr.forEach((menuItem) => {
170 - if (menuItem.id == item.parentMenuId) {
171 - status = false;
172 - menuItem.children.push(obj);
173 - }
174 - });
175 - if (status) {
176 - arr.push({
177 - id: item.parentMenuId,
178 - label: "",
179 - children: [obj],
180 - });
181 - }
182 - }
183 - });
184 - this.treeData = arr;
185 - } else {
186 - this.alertWarningMsg(res.message);
187 - }
188 - this.loadings.dialogLoading = false;
189 - })
190 - .catch((err) => {
191 - console.log(err);
192 - this.loadings.dialogLoading = false;
193 - });
194 - },
195 - //数据保存
196 - submit() {
197 - this.loadings.dialogLoading = true;
198 - let obj = {};
199 - if (this.type == "add") {
200 - this.$refs.formData.validate((valid) => {
201 - if (valid) {
202 - obj.roleName = this.formData.roleName;
203 - this.addapi(obj);
204 - } else {
205 - this.loadings.dialogLoading = false;
206 - }
207 - });
208 - } else if (this.type == "update") {
209 - this.$refs.formData.validate((valid) => {
210 - if (valid) {
211 - obj.roleId = this.formData.roleId;
212 - obj.roleName = this.formData.roleName;
213 - this.updateapi(obj);
214 - } else {
215 - this.loadings.dialogLoading = false;
216 - }
217 - });
218 - } else if (this.type == "menuChange") {
219 - obj.menuId = this.treeCheckData; // 使用合并后的选中节点
220 - obj.roleId = this.formData.roleId;
221 - this.menuChangeapi(obj);
222 - }
223 - },
224 - //新增
225 - addapi(val) {
226 - addRoleData(val)
227 - .then((res) => {
228 - if (res.code === "200") {
229 - this.msgSuccess(res.message);
230 - this.close();
231 - } else {
232 - this.alertWarningMsg(res.message);
233 - this.loadings.dialogLoading = false;
234 - }
235 - })
236 - .catch((err) => {
237 - console.log(err);
238 - this.loadings.dialogLoading = false;
239 - });
240 - },
241 - //修改
242 - updateapi(val) {
243 - updateRoleData(val)
244 - .then((res) => {
245 - if (res.code === "200") {
246 - this.msgSuccess(res.message);
247 - this.close();
248 - } else {
249 - this.alertWarningMsg(res.message);
250 - this.loadings.dialogLoading = false;
251 - }
252 - })
253 - .catch((err) => {
254 - console.log(err);
255 - this.loadings.dialogLoading = false;
256 - });
257 - },
258 - //菜单权限修改
259 - menuChangeapi(val) {
260 - updateRoleMenuData(val)
261 - .then((res) => {
262 - if (res.code === "200") {
263 - this.msgSuccess(res.message);
264 - this.close();
265 - this.$store.dispatch('GenerateRoutes')
266 - } else {
267 - this.alertWarningMsg(res.message);
268 - this.loadings.dialogLoading = false;
269 - }
270 - })
271 - .catch((err) => {
272 - console.log(err);
273 - this.loadings.dialogLoading = false;
274 - });
275 - },
276 - treeCheckChange(data, checked) {
277 - console.log(data, checked);
278 - let arr = [];
279 - arr = checked.checkedKeys.concat(checked.halfCheckedKeys);
280 - this.treeCheckData = arr;
281 - },
282 - close() {
283 - this.formData = {
284 - roleName: "",
285 - };
286 - this.checkedKeys = []
287 - this.$emit("close");
288 - },
289 - // 加载已绑定的菜单
290 - loadCheckedKeys() {
291 - if (this.formData.roleId) {
292 - getMenuByRoleId(this.formData.roleId)
293 - .then((res) => {
294 - if (res.code === "200") {
295 - this.checkedKeys = res.data.filter(item => item.isBinding && (item.parentMenuId!=0 ) ).map(item => item.menuId);
296 - //console.log('初始 checkedKeys:', this.checkedKeys);
297 - this.$nextTick(() => {
298 - this.$refs.tree.setCheckedKeys(this.checkedKeys);
299 - this.updateTreeCheckData();
300 - });
301 - } else {
302 - this.alertWarningMsg(res.message);
303 - }
304 - })
305 - .catch((err) => {
306 - console.log(err);
307 - });
308 - }
309 - },
310 - //加载选中的节点及半选中的父节点
311 - updateTreeCheckData() {
312 - const checkedKeys = this.$refs.tree.getCheckedKeys();
313 - const halfCheckedKeys = this.$refs.tree.getHalfCheckedKeys();
314 - this.treeCheckData = checkedKeys.concat(halfCheckedKeys);
315 - //console.log('合并后的 treeCheckData:', this.treeCheckData);
316 - },
317 -
318 - },
319 -};
320 -</script>
321 -
322 -<style lang="scss" scoped>
323 -@import "@/assets/styles/variables.scss";
324 -
325 -.menuTree {
326 - max-width: 350px;
327 - max-height: 300px;
328 - overflow: auto;
329 - margin: 0 auto;
330 - border: 1px solid #999;
331 - padding: 10px;
332 -}
333 -</style>
...@@ -11,51 +11,52 @@ ...@@ -11,51 +11,52 @@
11 <!-- 角色名称 --> 11 <!-- 角色名称 -->
12 <el-col :span="5"> 12 <el-col :span="5">
13 <Formitem label="物流运单编号" prop="logisticsNo"> 13 <Formitem label="物流运单编号" prop="logisticsNo">
14 - <el-input 14 + <FormTextareaInput
15 - type="text" 15 + :formData="sreachFormData"
16 - class="inputShadow" 16 + dataKey="logisticsNo"
17 - id="inputInner--logisticsNo" 17 + @formChange="formChange"
18 - resize="none" 18 + />
19 - v-model="sreachFormData.logisticsNo"
20 - clearable
21 - placeholder=""
22 - ></el-input>
23 </Formitem> 19 </Formitem>
24 </el-col> 20 </el-col>
25 <el-col :span="5"> 21 <el-col :span="5">
26 - <Formitem label="物流运单编号" prop="roleName"> 22 + <Formitem label="提运单号" prop="billNo">
27 <el-input 23 <el-input
28 type="text" 24 type="text"
29 class="inputShadow" 25 class="inputShadow"
30 - id="inputInner--roleName" 26 + id="inputInner--billNo"
31 resize="none" 27 resize="none"
32 - v-model="sreachFormData.roleName" 28 + v-model="sreachFormData.billNo"
33 clearable 29 clearable
34 placeholder="" 30 placeholder=""
35 ></el-input> 31 ></el-input>
36 </Formitem> 32 </Formitem>
37 </el-col> 33 </el-col>
38 <el-col :span="5"> 34 <el-col :span="5">
39 - <Formitem label="物流运单编号" prop="roleName"> 35 + <Formitem label="回执状态" prop="returnStatus">
40 - <el-input 36 + <el-select
41 type="text" 37 type="text"
42 - class="inputShadow" 38 + id="inputInner--returnStatus"
43 - id="inputInner--roleName" 39 + v-model="sreachFormData.returnStatus"
44 - resize="none"
45 - v-model="sreachFormData.roleName"
46 clearable 40 clearable
47 placeholder="" 41 placeholder=""
48 - ></el-input> 42 + >
43 + <el-option
44 + v-for="(item, index) in $store.getters.dict.RECEIPT_STATUS"
45 + :key="index"
46 + :label="item.itemChineseName"
47 + :value="item.itemValue"
48 + ></el-option>
49 + </el-select>
49 </Formitem> 50 </Formitem>
50 </el-col> 51 </el-col>
51 <el-col :span="5"> 52 <el-col :span="5">
52 - <Formitem label="物流运单编号" prop="roleName"> 53 + <Formitem label="电子口岸编号" prop="preNo">
53 <el-input 54 <el-input
54 type="text" 55 type="text"
55 class="inputShadow" 56 class="inputShadow"
56 - id="inputInner--roleName" 57 + id="inputInner--preNo"
57 resize="none" 58 resize="none"
58 - v-model="sreachFormData.roleName" 59 + v-model="sreachFormData.preNo"
59 clearable 60 clearable
60 placeholder="" 61 placeholder=""
61 ></el-input> 62 ></el-input>
...@@ -86,16 +87,7 @@ ...@@ -86,16 +87,7 @@
86 </el-col> 87 </el-col>
87 </el-row> 88 </el-row>
88 </el-form> 89 </el-form>
89 - <div class="optionButton"> 90 +
90 - <el-button
91 - class="entrySaveButton"
92 - icon="el-icon-plus"
93 - size="small"
94 - @click="addRole"
95 - >
96 - 新增角色
97 - </el-button>
98 - </div>
99 <Table 91 <Table
100 class="fedexDetialTable fedexSreachTable" 92 class="fedexDetialTable fedexSreachTable"
101 ref="entryTable" 93 ref="entryTable"
...@@ -115,54 +107,132 @@ ...@@ -115,54 +107,132 @@
115 :selectFixed="false" 107 :selectFixed="false"
116 :rowSelectDataType="false" 108 :rowSelectDataType="false"
117 > 109 >
118 - <template slot="optionColumn"> 110 + <template v-slot:returnStatus="scope">
119 - <el-table-column align="left" label="操作"> 111 + <TablePopover
120 - <template slot-scope="scope"> 112 + ref="returnStatusPopover"
121 - <el-button type="text" @click="update(scope.row)"> 113 + dataKey="returnStatus"
122 - 角色修改 114 + :parentDom="$refs.entryTable"
123 - </el-button> 115 + :receiptDataHead="receiptDataHead"
124 - <el-button type="text" @click="muenChange(scope.row)"> 116 + :rowData="scope.row"
125 - 权限绑定 117 + :tableData="tableData"
126 - </el-button> 118 + @popoverChange="popoverChange"
119 + @popoverClose="popoverClose"
120 + >
121 + <div slot="title">
122 + <span style="font-weight: 700; color: #515a6e">运单编号:</span
123 + >{{ scope.row.logisticsNo }}
124 + </div>
125 + <div slot="buttonLabel">
126 + {{ scope.row.returnStatus }}
127 + </div>
128 + </TablePopover>
127 </template> 129 </template>
128 - </el-table-column> 130 + <template v-slot:logisticsNo="scope">
131 + <el-button type="text" @click="view(scope.row)">{{
132 + scope.row.logisticsNo
133 + }}</el-button>
129 </template> 134 </template>
130 </Table> 135 </Table>
131 - <DialogVue
132 - :outerVisible="outerVisible"
133 - :title="dialogTitle"
134 - :type="editType"
135 - :active="activeData"
136 - @close="dialogClose"
137 - />
138 </div> 136 </div>
139 </template> 137 </template>
140 138
141 <script> 139 <script>
142 -import { getRoleList } from "@/api/system/user.js";
143 -import DialogVue from "./dialog.vue";
144 import { addMenu } from "@/api/menu"; 140 import { addMenu } from "@/api/menu";
141 +import {
142 + getExportArrivalInList,
143 + getExportArrivalInReceipt,
144 +} from "@/api/arrivalList-api";
145 export default { 145 export default {
146 name: "ArrivalList", 146 name: "ArrivalList",
147 - components: { 147 + components: {},
148 - DialogVue,
149 - },
150 data() { 148 data() {
151 return { 149 return {
152 sreachFormData: { 150 sreachFormData: {
153 - logisticsNo: "", 151 + logisticsNo: [],
152 + billNo: "",
153 + returnStatus: "",
154 + preNo: "",
154 }, 155 },
155 page: { 156 page: {
156 pageIndex: 1, 157 pageIndex: 1,
157 pageSize: 20, 158 pageSize: 20,
158 total: 0, 159 total: 0,
159 }, 160 },
160 - activeData: null,
161 tableData: [], 161 tableData: [],
162 + receiptDataHead: [
163 + {
164 + name: "回执状态",
165 + value: "returnStatus",
166 + width: "120",
167 + align: "left",
168 + },
169 + {
170 + name: "状态时间",
171 + value: "returnTime",
172 + width: "",
173 + align: "left",
174 + },
175 + {
176 + name: "回执描述",
177 + value: "returnInfo",
178 + width: "",
179 + align: "left",
180 + },
181 + ],
162 headerData: [ 182 headerData: [
163 { 183 {
164 - name: "角色名", 184 + name: "回执状态",
165 - value: "roleName", 185 + value: "returnStatus",
186 + width: "",
187 + align: "left",
188 + slot: true,
189 + },
190 + {
191 + name: "物流运单编号",
192 + value: "logisticsNo",
193 + width: "",
194 + align: "left",
195 + slot: true,
196 + },
197 + {
198 + name: "提运单号",
199 + value: "billNo",
200 + width: "",
201 + align: "left",
202 + },
203 + {
204 + name: "电商企业代码",
205 + value: "copNo",
206 + width: "",
207 + align: "left",
208 + },
209 + {
210 + name: "电子口岸编号",
211 + value: "preNo",
212 + width: "",
213 + align: "left",
214 + },
215 + {
216 + name: "监管场所经营人代码",
217 + value: "operatorCode",
218 + width: "",
219 + align: "left",
220 + },
221 + {
222 + name: "监管场所经营人名称",
223 + value: "operatorName",
224 + width: "",
225 + align: "left",
226 + },
227 + {
228 + name: "监管场所代码",
229 + value: "loctNo",
230 + width: "",
231 + align: "left",
232 + },
233 + {
234 + name: "创建时间",
235 + value: "createTime",
166 width: "", 236 width: "",
167 align: "left", 237 align: "left",
168 }, 238 },
...@@ -171,9 +241,7 @@ export default { ...@@ -171,9 +241,7 @@ export default {
171 searchLoading: false, 241 searchLoading: false,
172 }, 242 },
173 tableMaxheight: null, 243 tableMaxheight: null,
174 - outerVisible: false, 244 + originalLogisticsNo: "", // 用于保存原始的 logisticsNo 字符串
175 - dialogTitle: "",
176 - editType: "",
177 }; 245 };
178 }, 246 },
179 created() { 247 created() {
...@@ -183,12 +251,72 @@ export default { ...@@ -183,12 +251,72 @@ export default {
183 this.tableMaxheight = window.innerHeight - 300; 251 this.tableMaxheight = window.innerHeight - 300;
184 }, 252 },
185 methods: { 253 methods: {
254 + popoverClose(val) {
255 + this.tableData.forEach((item) => {
256 + item.returnStatusPopoverType = false;
257 + item.popoverData = [];
258 + });
259 + this.$refs.entryTable.$refs.tables.$refs.bodyWrapper.style.overflowY =
260 + "auto";
261 + },
262 + popoverChange(val) {
263 + console.log(val);
264 + this.tableData = val.tableData;
265 + this.receiptApi(val.data.copNo, val.status)
266 + .then((res) => {
267 + val.tableData.forEach((item) => {
268 + if (item.declareId == val.data.declareId) {
269 + item.popoverData = res;
270 + }
271 + });
272 + this.tableData = val.tableData;
273 + })
274 + .finally(() => {
275 + this.$nextTick(() => {
276 + this.$store.dispatch("setLoadingState", false);
277 + this.$refs.returnStatusPopover.tableLoading = false;
278 + });
279 + });
280 + },
281 + //查询回执
282 + receiptApi(id) {
283 + return new Promise((resolve, reject) => {
284 + let obj = { copNo: id };
285 + getExportArrivalInReceipt(obj)
286 + .then((res) => {
287 + if (res.code === "200") {
288 + resolve(res.data);
289 + } else {
290 + reject();
291 + }
292 + })
293 + .catch((err) => {
294 + console.log(err);
295 + reject();
296 + });
297 + });
298 + },
299 + //查询详情
300 + view(val) {
301 + this.$router.push({
302 + name: "ArrivalListDetail",
303 + params: { data: val },
304 + });
305 + },
306 + formChange(val) {
307 + this.sreachFormData = val;
308 + this.originalLogisticsNo = val.logisticsNo; // 保存原始的 logisticsNo 字符串
309 + },
186 // 清空 310 // 清空
187 clear() { 311 clear() {
188 this.sreachFormData = { 312 this.sreachFormData = {
189 - roleName: "", 313 + ogisticsNo: [],
314 + billNo: "",
315 + returnStatus: "",
316 + preNo: "",
190 }; 317 };
191 - this.search(1); 318 + this.originalLogisticsNo = "";
319 + this.search(0);
192 }, 320 },
193 //查询 321 //查询
194 search(val) { 322 search(val) {
...@@ -196,10 +324,17 @@ export default { ...@@ -196,10 +324,17 @@ export default {
196 if (val == 0) { 324 if (val == 0) {
197 this.page.pageIndex = 1; 325 this.page.pageIndex = 1;
198 } 326 }
199 - let obj = this.sreachFormData; 327 + let obj = { ...this.sreachFormData }; // 使用对象展开运算符复制 sreachFormData
200 obj.pageIndex = this.page.pageIndex; 328 obj.pageIndex = this.page.pageIndex;
201 obj.pageSize = this.page.pageSize; 329 obj.pageSize = this.page.pageSize;
202 - getRoleList(obj) 330 + obj.logisticsNo = this.originalLogisticsNo;
331 + if (obj.logisticsNo != null && obj.logisticsNo != "") {
332 + obj.logisticsNo = obj.logisticsNo.split("\n");
333 + } else {
334 + obj.logisticsNo = [];
335 + }
336 +
337 + getExportArrivalInList(obj)
203 .then((res) => { 338 .then((res) => {
204 if (res.code === "200") { 339 if (res.code === "200") {
205 this.tableData = res.data.value; 340 this.tableData = res.data.value;
...@@ -217,42 +352,21 @@ export default { ...@@ -217,42 +352,21 @@ export default {
217 this.loadings.searchLoading = false; 352 this.loadings.searchLoading = false;
218 }); 353 });
219 }, 354 },
220 - addRole() {
221 - this.dialogTitle = "新增角色";
222 - this.editType = "add";
223 - this.outerVisible = true;
224 - },
225 // 新增菜单用,可以不麻烦后端--------- 355 // 新增菜单用,可以不麻烦后端---------
226 - addMenuFn() { 356 + // addMenuFn() {
227 - let params = { 357 + // let params = {
228 - icon: "", 358 + // icon: "",
229 - menuName: "运抵单查询", 359 + // menuName: "运抵单查询",
230 - order: 4.4, 360 + // order: 4.4,
231 - parentMenuId: 90, 361 + // parentMenuId: 90,
232 - physicalUrl: "/arrival-list", 362 + // physicalUrl: "/arrival-list",
233 - url: "", 363 + // url: "",
234 - }; 364 + // };
235 - addMenu(params).then((res) => { 365 + // addMenu(params).then((res) => {
236 - console.log(res); 366 + // console.log(res);
237 - }); 367 + // });
238 - }, 368 + // },
239 - update(val) { 369 +
240 - this.dialogTitle = "修改角色";
241 - this.editType = "update";
242 - this.outerVisible = true;
243 - this.activeData = val;
244 - },
245 - muenChange(val) {
246 - this.dialogTitle = "绑定权限";
247 - this.editType = "menuChange";
248 - this.outerVisible = true;
249 - this.activeData = val;
250 - },
251 - dialogClose() {
252 - this.outerVisible = false;
253 - this.activeData = null;
254 - this.search(1);
255 - },
256 //分页 370 //分页
257 currentChange(val) { 371 currentChange(val) {
258 this.page.pageIndex = val.page; 372 this.page.pageIndex = val.page;
......