Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Fedex
/
EcomWeb
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
zhanbo.xu
2025-04-07 16:19:49 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
f42198060dffbe06dc2fe9dfbd19a704200deb1d
f4219806
1 parent
e95ef371
feat: 新增功能
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
478 additions
and
40 deletions
src/api/receiptManagement-api.js
src/store/modules/permission.js
src/utils/auth.js
src/views/customerConfig/index.vue
src/views/exportListDetail/dialog.vue
src/views/exportListDetail/index.vue
src/views/receipt-management/dialog.vue
src/api/receiptManagement-api.js
View file @
f421980
...
...
@@ -38,7 +38,7 @@ export function searchList(data) {
// 搜索订单号
export
function
searchOrderNo
(
data
)
{
return
request
({
url
:
"/bus-customer/mockReceipt/search
Order
No"
,
url
:
"/bus-customer/mockReceipt/search
Logistics
No"
,
method
:
"get"
,
params
:
data
,
});
...
...
src/store/modules/permission.js
View file @
f421980
This diff is collapsed. Click to expand it.
src/utils/auth.js
View file @
f421980
const
TokenKey
=
'Ecom-Token'
const
TokenKey
=
"Ecom-Token"
;
export
const
auth_code
=
"PERMISSION_AUTH_CODE"
;
export
function
getToken
()
{
return
localStorage
.
getItem
(
TokenKey
)
return
localStorage
.
getItem
(
TokenKey
)
;
// return sessionStorage.getItem(TokenKey)
}
export
function
setToken
(
token
)
{
setTime
(
new
Date
().
getTime
())
return
localStorage
.
setItem
(
TokenKey
,
token
)
setTime
(
new
Date
().
getTime
())
;
return
localStorage
.
setItem
(
TokenKey
,
token
)
;
// return sessionStorage.setItem(TokenKey, token)
}
export
function
removeToken
()
{
sessionStorage
.
removeItem
(
'magicFcl'
)
return
localStorage
.
removeItem
(
TokenKey
)
sessionStorage
.
removeItem
(
"magicFcl"
);
return
localStorage
.
removeItem
(
TokenKey
)
;
// return sessionStorage.removeItem(TokenKey)
}
export
function
getUserId
()
{
return
localStorage
.
getItem
(
'EcomUser'
)
return
localStorage
.
getItem
(
"EcomUser"
);
// return sessionStorage.getItem(TokenKey)
}
export
function
setUserId
(
id
)
{
return
localStorage
.
setItem
(
'EcomUser'
,
id
)
return
localStorage
.
setItem
(
"EcomUser"
,
id
);
// return sessionStorage.setItem(TokenKey, token)
}
export
function
removeUserId
()
{
return
localStorage
.
removeItem
(
'EcomUser'
)
return
localStorage
.
removeItem
(
"EcomUser"
);
// return sessionStorage.getItem(TokenKey)
}
export
function
setCookie
(
cookie
)
{
return
localStorage
.
setItem
(
'EcomLoginTIp'
,
cookie
)
return
localStorage
.
setItem
(
"EcomLoginTIp"
,
cookie
);
}
export
function
getCookie
()
{
return
localStorage
.
getItem
(
'EcomLoginTIp'
)
return
localStorage
.
getItem
(
"EcomLoginTIp"
);
}
export
function
setTime
(
date
)
{
return
localStorage
.
setItem
(
'EcomLoginTime'
,
date
)
return
localStorage
.
setItem
(
"EcomLoginTime"
,
date
);
}
export
function
getTime
()
{
return
localStorage
.
getItem
(
'EcomLoginTime'
)
return
localStorage
.
getItem
(
"EcomLoginTime"
);
}
export
function
removeTime
()
{
return
localStorage
.
removeItem
(
'EcomLoginTime'
)
return
localStorage
.
removeItem
(
"EcomLoginTime"
);
}
export
function
setLoginType
(
type
)
{
return
sessionStorage
.
setItem
(
'magicFcl'
,
type
)
return
sessionStorage
.
setItem
(
"magicFcl"
,
type
);
}
export
function
getLoginType
()
{
return
sessionStorage
.
getItem
(
'magicFcl'
)
return
sessionStorage
.
getItem
(
"magicFcl"
);
}
export
function
removeLoginType
()
{
return
sessionStorage
.
removeItem
(
'magicFcl'
)
return
sessionStorage
.
removeItem
(
"magicFcl"
);
}
export
function
setEntrySreachType
(
type
)
{
return
sessionStorage
.
setItem
(
'sreachEntryType'
,
type
)
return
sessionStorage
.
setItem
(
"sreachEntryType"
,
type
);
}
export
function
getEntrySreachType
()
{
return
sessionStorage
.
getItem
(
'sreachEntryType'
)
return
sessionStorage
.
getItem
(
"sreachEntryType"
);
}
export
function
removeEntrySreachType
()
{
return
sessionStorage
.
removeItem
(
'sreachEntryType'
)
return
sessionStorage
.
removeItem
(
"sreachEntryType"
);
}
// 用于解放权限
export
function
removeAuthCode
()
{
return
localStorage
.
removeItem
(
auth_code
);
}
// 获取权限 并判断传进来的code 是否有权限
export
function
isHasAuth
(
code
)
{
const
authCode
=
localStorage
.
getItem
(
auth_code
);
const
stored
=
authCode
?
JSON
.
parse
(
authCode
)
:
[];
console
.
log
(
stored
);
if
(
stored
.
includes
(
code
))
{
return
true
;
}
else
{
return
false
;
}
}
...
...
src/views/customerConfig/index.vue
View file @
f421980
...
...
@@ -229,7 +229,7 @@ export default {
},
{
name: "订单申报方",
value: "orderRequester
Name
",
value: "orderRequester",
width: "",
align: "left",
},
...
...
src/views/exportListDetail/dialog.vue
0 → 100644
View file @
f421980
<template>
<el-dialog
class="entryDialog classCUploadDialog"
title="新增模拟回执管理"
:visible.sync="outerVisible"
:show-close="false"
width="960px"
:close-on-click-modal="false"
:destroy-on-close="true"
v-loading="loadings.dialogLoading"
@close="close(false)"
>
<div class="modelItem">
<el-form
class="fedexFormStyle"
ref="formData"
:model="formData"
:rules="rules"
label-position="top"
size="small"
>
<el-row :gutter="5">
<el-col :span="8">
<Formitem label="回执类型" prop="receiptType" type="edit">
<el-select
type="text"
id="inputInner-edit-receiptType"
v-model="formData.receiptType"
clearable
filterable
placeholder=""
@change="getOrderList"
>
<el-option
v-for="item in receiptTypeList"
:key="item.value"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="8">
<Formitem label="物流运单编号" prop="logisticsNo" type="edit">
<el-select
type="text"
id="inputInner-edit-logisticsNo"
v-model="formData.logisticsNo"
:remote="true"
clearable
filterable
collapse-tags
:remote-method="remoteMethod"
placeholder=""
@change="receiptXml"
class="order-select-warp-ol"
>
<el-option
v-for="item in orderNoList"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="8">
<Formitem label="回执状态" prop="receiptStatus" type="edit">
<el-select
type="text"
id="inputInner-edit-receiptStatus"
v-model="formData.receiptStatus"
clearable
filterable
placeholder=""
@change="receiptXml"
>
<el-option
v-for="item in receiptStatusList"
:key="item.itemValue"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5" v-if="formData.receiptType == 'list'">
<el-col :span="8">
<Formitem label="电子口岸编号" prop="preNo" type="edit">
<el-input
type="text"
class="inputShadow"
id="inputInner-edit-preNo"
resize="none"
v-model="formData.preNo"
clearable
placeholder=""
@blur="receiptXml"
></el-input>
</Formitem>
</el-col>
<el-col :span="8">
<Formitem label="清单编号" prop="invtNo" type="edit">
<el-input
type="text"
class="inputShadow"
id="inputInner-edit-invtNo"
resize="none"
v-model="formData.invtNo"
clearable
placeholder=""
@blur="receiptXml"
></el-input>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5">
<el-col :span="24">
<!-- <Formitem label="回执文本" prop="receiptInfo" type="edit">
<el-input
type="textarea"
:rows="4"
class="inputShadow"
id="inputInner-edit-receiptInfo"
resize="none"
v-model="formData.receiptInfo"
clearable
placeholder=""
></el-input>
</Formitem> -->
<div class="textarea-text">
<div style="color: #777777; margin-bottom: 10px">回执文本</div>
<el-input
type="textarea"
:rows="4"
class="inputShadow"
resize="none"
:readonly="true"
v-model="receiptInfo"
></el-input>
</div>
</el-col>
</el-row>
</el-form>
</div>
<div class="dialogOption entrySave">
<el-button
class="entrySaveButton"
:disabled="loadings.submitLoading"
@click="submit"
>确 定</el-button
>
<el-button class="entrySaveButton" @click="close(false)">关 闭</el-button>
</div>
</el-dialog>
</template>
<script>
import {
searchOrderNo,
generateReceiptXml,
addInfo,
} from "@/api/receiptManagement-api.js";
export default {
props: {
outerVisible: {
type: Boolean,
default: false,
},
receiptStatusList: {
type: Array,
default: () => {
return [];
},
},
receiptTypeList: {
type: Array,
default: () => {
return [];
},
},
logisticsNo: {
type: String,
default: "",
},
},
watch: {
outerVisible(val) {
console.log(val);
if (val) {
this.formData.logisticsNo = this.logisticsNo;
this.formData.receiptType = "list";
}
},
},
data() {
return {
formData: {
receiptType: "",
logisticsNo: "",
receiptStatus: "",
preNo: "",
invtNo: "",
},
receiptInfo: "",
rules: {
receiptType: [
{
required: true,
trigger: "blur",
message: "请选择回执类型!",
},
],
logisticsNo: [
{
required: true,
trigger: "blur",
message: "物流运单编号不能为空!",
},
],
receiptStatus: [
{
required: true,
trigger: "blur",
message: "请选择回执状态!",
},
],
preNo: [
{
required: true,
trigger: "blur",
message: "电子口岸编号不能为空!",
},
],
invtNo: [
{
required: true,
trigger: "blur",
message: "清单编号不能为空!",
},
],
},
orderNoList: [],
loadings: {
dialogLoading: false,
submitLoading: false,
},
loadingText: "",
};
},
methods: {
// 生成xml
receiptXml() {
if (!this.formData.receiptType) {
return;
}
if (!this.formData.logisticsNo) {
return;
}
if (!this.formData.receiptStatus) {
return;
}
if (!this.formData.preNo) {
return;
}
if (!this.formData.invtNo) {
return;
}
generateReceiptXml({
...this.formData,
logisticsNo: this.formData.logisticsNo,
}).then((res) => {
console.log(res);
if (res.code === "200") {
this.receiptInfo = res.data;
} else {
this.alertWarningMsg(res.message);
}
});
},
remoteMethod(query) {
console.log(query);
this.getOrderList(query, true);
},
getOrderList(val, flag) {
if (!this.formData.receiptType) {
return;
}
searchOrderNo({
receiptType: this.formData.receiptType,
logisticsNo: flag ? val : "",
}).then((res) => {
if (res.code === "200") {
this.orderNoList = res.data;
} else {
this.alertWarningMsg(res.message);
}
});
this.receiptXml();
},
//数据保存
submit() {
let obj = {
...this.formData,
};
this.$refs.formData.validate((valid) => {
if (valid) {
this.addapi({
...obj,
logisticsNos: [this.formData.logisticsNo],
});
}
});
},
//新增
addapi(val) {
this.loadings.dialogLoading = true;
addInfo(val)
.then((res) => {
if (res.code === "200") {
this.msgSuccess(res.message);
this.close(true);
} else {
this.alertWarningMsg(res.message);
}
})
.catch((err) => {
console.log(err);
this.loadings.dialogLoading = false;
});
},
close(flag) {
this.formData = {
receiptType: "",
logisticsNo: "",
receiptStatus: "",
};
this.loadings.dialogLoading = false;
this.receiptInfo = "";
this.$emit("close", flag);
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/styles/variables.scss";
.fedexFormStyle {
.order-select-warp-ol {
::v-deep {
.el-select__input {
width: 35px !important;
padding-top: 0 !important;
}
}
}
}
</style>
src/views/exportListDetail/index.vue
View file @
f421980
...
...
@@ -305,7 +305,6 @@
></el-input>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5">
<!-- 贸易方式 -->
...
...
@@ -440,7 +439,6 @@
</el-select>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5">
<!-- 运费 -->
...
...
@@ -575,7 +573,6 @@
></el-input>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5">
<!-- 净重(公斤) -->
...
...
@@ -696,6 +693,7 @@
:class="{ entryTitle: true, titleBorder: logtableType ? false : true }"
style="margin-top: 10px"
>
<div style="display: flex; justify-content: space-between; width: 100%">
<div>
回执信息
<el-button type="text" @click="hiddenLogTable">
...
...
@@ -703,6 +701,19 @@
<svg-icon v-else icon-class="upIcon"></svg-icon>
</el-button>
</div>
<div>
<template v-show="isHasAuth('queryMgr:exportList:add')">
<el-button
class="entrySaveButton"
icon="el-icon-plus"
size="small"
@click="outerVisible = true"
>
新增模拟回执
</el-button>
</template>
</div>
</div>
</div>
<ReceiptInfoTable
v-if="logtableType"
...
...
@@ -715,6 +726,14 @@
:bodyHeader="detialHeaderData"
/>
<div style="margin-bottom: 20px; text-align: center"></div>
<!-- 新增模拟回执 -->
<DialogVue
:outerVisible="outerVisible"
@close="dialogClose"
:receiptStatusList="receiptStatusList"
:receiptTypeList="receiptTypeList"
:logisticsNo="formData.logisticsNo"
/>
</div>
</template>
...
...
@@ -722,13 +741,20 @@
import ReceiptInfoTable from "../components/ReceiptInfoTable/index.vue";
import ProductDetailTable from "../components/ProductDetailTable/index.vue";
import { getListDetail } from "@/api/exportDetail-api.js";
import { getDictData } from "@/api/system/dict-api.js";
import DialogVue from "./dialog.vue";
import { isHasAuth } from "../../utils/auth";
export default {
name: "",
components: { ProductDetailTable, ReceiptInfoTable },
components: { ProductDetailTable, ReceiptInfoTable
, DialogVue
},
data() {
return {
id: null,
formData: {},
formData: {
logisticsNo: "",
},
logData: [],
logHeaderData: [
{
...
...
@@ -831,6 +857,9 @@ export default {
entryLoading: false,
},
logtableType: true,
outerVisible: false,
receiptStatusList: [],
receiptTypeList: [],
};
},
created() {
...
...
@@ -840,8 +869,36 @@ export default {
} else {
this.back();
}
this.fetchReceiptStatus();
},
methods: {
fetchReceiptStatus() {
getDictData({ doctCode: "RECEIPT_TYPE" })
.then((res) => {
if (res.code == "200") {
this.receiptTypeList = res.data;
}
})
.catch((err) => {
console.error(err);
});
getDictData({ doctCode: "MOCK_RECEIPT_STATUS" })
.then((res) => {
if (res.code == "200") {
this.receiptStatusList = res.data;
}
})
.catch((err) => {
console.error(err);
});
},
dialogClose(flag = false) {
this.outerVisible = false;
if (flag) {
// this.search(0);
this.searchData();
}
},
searchData() {
this.loadings.entryLoading = true;
getListDetail({ listId: this.id })
...
...
src/views/receipt-management/dialog.vue
View file @
f421980
...
...
@@ -41,11 +41,11 @@
</Formitem>
</el-col>
<el-col :span="8">
<Formitem label="
订单编号" prop="order
No" type="edit">
<Formitem label="
物流运单编号" prop="logistics
No" type="edit">
<el-select
type="text"
id="inputInner-edit-
order
No"
v-model="formData.
order
No"
id="inputInner-edit-
logistics
No"
v-model="formData.
logistics
No"
:remote="true"
clearable
filterable
...
...
@@ -186,7 +186,7 @@ export default {
return {
formData: {
receiptType: "",
order
No: "",
logistics
No: "",
receiptStatus: "",
preNo: "",
invtNo: "",
...
...
@@ -200,11 +200,11 @@ export default {
message: "请选择回执类型!",
},
],
order
No: [
logistics
No: [
{
required: true,
trigger: "blur",
message: "
订
单编号不能为空!",
message: "
物流运
单编号不能为空!",
},
],
receiptStatus: [
...
...
@@ -244,7 +244,7 @@ export default {
if (!this.formData.receiptType) {
return;
}
if (!this.formData.
order
No) {
if (!this.formData.
logistics
No) {
return;
}
if (!this.formData.receiptStatus) {
...
...
@@ -258,7 +258,7 @@ export default {
}
generateReceiptXml({
...this.formData,
orderNo: this.formData.order
No,
logisticsNo: this.formData.logistics
No,
}).then((res) => {
console.log(res);
if (res.code === "200") {
...
...
@@ -278,7 +278,7 @@ export default {
}
searchOrderNo({
receiptType: this.formData.receiptType,
order
No: flag ? val : "",
logistics
No: flag ? val : "",
}).then((res) => {
if (res.code === "200") {
this.orderNoList = res.data;
...
...
@@ -297,7 +297,7 @@ export default {
if (valid) {
this.addapi({
...obj,
orderNo: [this.formData.order
No],
logisticsNos: [this.formData.logistics
No],
});
}
});
...
...
@@ -323,7 +323,7 @@ export default {
close(flag) {
this.formData = {
receiptType: "",
order
No: "",
logistics
No: "",
receiptStatus: "",
};
this.loadings.dialogLoading = false;
...
...
Please
register
or
login
to post a comment