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: 新增功能
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
635 additions
and
168 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
import
{
constantRoutes
}
from
'@/router'
import
{
get
Routers
,
getUserRouters
}
from
'@/api/menu'
import
Layout
from
'@/layout/index'
import
ParentView
from
'@/components/ParentView'
;
import
{
titleCase
}
from
'@/utils/index.js'
import
{
getToken
}
from
'@/utils/auth'
import
{
constantRoutes
}
from
"@/router"
;
import
{
get
UserRouters
}
from
"@/api/menu"
;
import
Layout
from
"@/layout/index"
;
import
ParentView
from
"@/components/ParentView"
;
import
{
titleCase
}
from
"@/utils/index.js"
;
import
{
auth_code
}
from
"../../utils/auth"
;
const
permission
=
{
state
:
{
...
...
@@ -11,15 +11,15 @@ const permission = {
addRoutes
:
[],
defaultRoutes
:
[],
topbarRouters
:
[],
sidebarRouters
:
[]
sidebarRouters
:
[]
,
},
mutations
:
{
SET_ROUTES
:
(
state
,
routes
)
=>
{
state
.
addRoutes
=
routes
state
.
routes
=
constantRoutes
.
concat
(
routes
)
state
.
addRoutes
=
routes
;
state
.
routes
=
constantRoutes
.
concat
(
routes
)
;
},
SET_DEFAULT_ROUTES
:
(
state
,
routes
)
=>
{
state
.
defaultRoutes
=
constantRoutes
.
concat
(
routes
)
state
.
defaultRoutes
=
constantRoutes
.
concat
(
routes
)
;
},
SET_TOPBAR_ROUTES
:
(
state
,
routes
)
=>
{
// 顶部导航菜单默认添加统计报表栏指向首页
...
...
@@ -30,181 +30,209 @@ const permission = {
// state.topbarRouters = routes.concat(index);
},
SET_SIDEBAR_ROUTERS
:
(
state
,
routes
)
=>
{
state
.
sidebarRouters
=
routes
state
.
sidebarRouters
=
routes
;
},
},
actions
:
{
// 生成路由
async
GenerateRoutes
({
commit
})
{
return
new
Promise
(
resolve
=>
{
return
new
Promise
(
(
resolve
)
=>
{
// 向后端请求路由数据
getUserRouters
().
then
(
res
=>
{
const
sdata
=
JSON
.
parse
(
JSON
.
stringify
(
routeItemInfo
(
res
.
data
)))
const
rdata
=
JSON
.
parse
(
JSON
.
stringify
(
routeItemInfo
(
res
.
data
)))
const
sidebarRoutes
=
filterAsyncRouter
(
sdata
)
const
rewriteRoutes
=
filterAsyncRouter
(
rdata
,
false
,
true
)
rewriteRoutes
.
push
({
path
:
'*'
,
redirect
:
'/reportingData'
,
hidden
:
true
})
commit
(
'SET_ROUTES'
,
rewriteRoutes
)
commit
(
'SET_SIDEBAR_ROUTERS'
,
sidebarRoutes
)
commit
(
'SET_DEFAULT_ROUTES'
,
sidebarRoutes
)
commit
(
'SET_TOPBAR_ROUTES'
,
sidebarRoutes
)
resolve
(
rewriteRoutes
)
})
})
getUserRouters
().
then
((
res
)
=>
{
const
authCode
=
findNodeTypeTwo
(
res
.
data
);
localStorage
.
setItem
(
auth_code
,
JSON
.
stringify
(
authCode
));
const
sdata
=
JSON
.
parse
(
JSON
.
stringify
(
routeItemInfo
(
res
.
data
)));
const
rdata
=
JSON
.
parse
(
JSON
.
stringify
(
routeItemInfo
(
res
.
data
)));
const
sidebarRoutes
=
filterAsyncRouter
(
sdata
);
const
rewriteRoutes
=
filterAsyncRouter
(
rdata
,
false
,
true
);
rewriteRoutes
.
push
({
path
:
"*"
,
redirect
:
"/reportingData"
,
hidden
:
true
,
});
commit
(
"SET_ROUTES"
,
rewriteRoutes
);
commit
(
"SET_SIDEBAR_ROUTERS"
,
sidebarRoutes
);
commit
(
"SET_DEFAULT_ROUTES"
,
sidebarRoutes
);
commit
(
"SET_TOPBAR_ROUTES"
,
sidebarRoutes
);
resolve
(
rewriteRoutes
);
});
});
},
changeRoutes
({
commit
},
routes
)
{
commit
(
'SET_ROUTES'
,
routes
)
commit
(
'SET_SIDEBAR_ROUTERS'
,
routes
)
commit
(
'SET_DEFAULT_ROUTES'
,
routes
)
commit
(
'SET_TOPBAR_ROUTES'
,
routes
)
}
}
commit
(
"SET_ROUTES"
,
routes
);
commit
(
"SET_SIDEBAR_ROUTERS"
,
routes
);
commit
(
"SET_DEFAULT_ROUTES"
,
routes
);
commit
(
"SET_TOPBAR_ROUTES"
,
routes
);
},
},
};
function
findNodeTypeTwo
(
data
)
{
const
permissions
=
[];
const
traverse
=
(
nodes
)
=>
{
nodes
.
forEach
((
node
)
=>
{
if
(
node
.
nodeType
===
"2"
&&
node
.
permission
)
{
permissions
.
push
(
node
.
permission
);
}
if
(
node
.
children
&&
node
.
children
.
length
>
0
)
{
traverse
(
node
.
children
);
}
});
};
traverse
(
data
);
return
permissions
;
}
// 遍历后台传来的路由字符串,转换为组件对象
function
filterAsyncRouter
(
asyncRouterMap
,
lastRouter
=
false
,
type
=
false
)
{
return
asyncRouterMap
.
filter
(
route
=>
{
return
asyncRouterMap
.
filter
(
(
route
)
=>
{
// // 屏蔽包含 summary 的路由,master分支不屏蔽
// if (route.path.includes('summary')) {
// return false;
// }
if
(
type
&&
route
.
children
)
{
route
.
children
=
filterChildren
(
route
.
children
)
route
.
children
=
filterChildren
(
route
.
children
)
;
}
if
(
route
.
component
)
{
// Layout ParentView 组件特殊处理
if
(
route
.
component
===
'Layout'
)
{
route
.
component
=
Layout
}
else
if
(
route
.
component
===
'ParentView'
)
{
route
.
component
=
ParentView
if
(
route
.
component
===
"Layout"
)
{
route
.
component
=
Layout
;
}
else
if
(
route
.
component
===
"ParentView"
)
{
route
.
component
=
ParentView
;
}
else
{
route
.
component
=
loadView
(
route
.
component
)
route
.
component
=
loadView
(
route
.
component
)
;
}
}
if
(
route
.
children
!=
null
&&
route
.
children
&&
route
.
children
.
length
)
{
route
.
children
=
filterAsyncRouter
(
route
.
children
,
route
,
type
)
route
.
children
=
filterAsyncRouter
(
route
.
children
,
route
,
type
)
;
}
else
{
delete
route
[
'children'
]
delete
route
[
'redirect'
]
delete
route
[
"children"
];
delete
route
[
"redirect"
];
}
return
true
})
return
true
;
})
;
}
function
filterChildren
(
childrenMap
,
lastRouter
=
false
)
{
var
children
=
[]
console
.
log
(
childrenMap
);
var
children
=
[];
childrenMap
.
forEach
((
el
,
index
)
=>
{
if
(
el
.
children
&&
el
.
children
.
length
)
{
if
(
el
.
component
===
'ParentView'
)
{
el
.
children
.
forEach
(
c
=>
{
c
.
path
=
el
.
path
+
'/'
+
c
.
path
if
(
el
.
component
===
"ParentView"
)
{
el
.
children
.
forEach
(
(
c
)
=>
{
c
.
path
=
el
.
path
+
"/"
+
c
.
path
;
if
(
c
.
children
&&
c
.
children
.
length
)
{
children
=
children
.
concat
(
filterChildren
(
c
.
children
,
c
))
return
children
=
children
.
concat
(
filterChildren
(
c
.
children
,
c
))
;
return
;
}
children
.
push
(
c
)
})
return
children
.
push
(
c
)
;
})
;
return
;
}
}
if
(
lastRouter
)
{
el
.
path
=
lastRouter
.
path
+
'/'
+
el
.
path
el
.
path
=
lastRouter
.
path
+
"/"
+
el
.
path
;
}
children
=
children
.
concat
(
el
)
})
return
children
children
=
children
.
concat
(
el
)
;
})
;
return
children
;
}
//针对出口数据结构特殊处理
//对ext框架route数据结构进行初始化
function
setRoute
(
route
,
childrens
)
{
let
rootRoute
=
{}
let
arr
=
[]
childrens
.
forEach
(
item
=>
{
route
.
forEach
(
val
=>
{
val
.
id
==
999999
?
rootRoute
=
val
:
''
let
rootRoute
=
{}
;
let
arr
=
[]
;
childrens
.
forEach
(
(
item
)
=>
{
route
.
forEach
(
(
val
)
=>
{
val
.
id
==
999999
?
(
rootRoute
=
val
)
:
""
;
if
(
item
.
parentId
==
val
.
id
)
{
item
.
component
=
`
${
titleCase
(
val
.
name
,
'low'
)
!=
''
?
'/'
+
titleCase
(
val
.
name
,
'low'
)
:
''
}${
item
.
component
}
`
val
.
children
.
push
(
item
)
val
.
component
=
'Layout'
item
.
component
=
`
${
titleCase
(
val
.
name
,
"low"
)
!=
""
?
"/"
+
titleCase
(
val
.
name
,
"low"
)
:
""
}
$
{
item
.
component
}
`
;
val
.
children
.
push
(
item
);
val
.
component
=
"Layout"
;
// val.meta = item.meta
val
.
alwaysShow
=
false
val
.
alwaysShow
=
false
;
if
(
val
.
path
==
'/newui_entryIO_parent'
)
{
val
.
hidden
=
true
item
.
name
=
'ol'
+
item
.
name
if
(
val
.
path
==
"/newui_entryIO_parent"
)
{
val
.
hidden
=
true
;
item
.
name
=
"ol"
+
item
.
name
;
}
}
})
})
return
route
})
;
})
;
return
route
;
}
function
routeItemInfo
(
data
)
{
const
routes
=
[
{
path
:
'/redirect'
,
path
:
"/redirect"
,
component
:
Layout
,
hidden
:
true
,
children
:
[
{
path
:
'/redirect/:path(.*)'
,
component
:
(
resolve
)
=>
require
([
'@/views/redirect'
],
resolve
)
}
]
path
:
"/redirect/:path(.*)"
,
component
:
(
resolve
)
=>
require
([
"@/views/redirect"
],
resolve
),
}
,
]
,
},
{
path
:
'/404'
,
component
:
(
resolve
)
=>
require
([
'@/views/error/404'
],
resolve
),
hidden
:
true
path
:
"/404"
,
component
:
(
resolve
)
=>
require
([
"@/views/error/404"
],
resolve
),
hidden
:
true
,
},
{
path
:
'/401'
,
component
:
(
resolve
)
=>
require
([
'@/views/error/401'
],
resolve
),
hidden
:
true
path
:
"/401"
,
component
:
(
resolve
)
=>
require
([
"@/views/error/401"
],
resolve
),
hidden
:
true
,
},
{
path
:
'/login'
,
component
:
(
resolve
)
=>
require
([
'@/views/login'
],
resolve
),
path
:
"/login"
,
component
:
(
resolve
)
=>
require
([
"@/views/login"
],
resolve
),
hidden
:
true
,
meta
:
{
noCache
:
true
}
meta
:
{
noCache
:
true
}
,
},
{
path
:
'/relogin'
,
component
:
(
resolve
)
=>
require
([
'@/views/redjrectLogin'
],
resolve
),
path
:
"/relogin"
,
component
:
(
resolve
)
=>
require
([
"@/views/redjrectLogin"
],
resolve
),
hidden
:
true
,
meta
:
{
noCache
:
true
,
breadcrumb
:
false
}
}
meta
:
{
noCache
:
true
,
breadcrumb
:
false
}
,
}
,
];
data
.
forEach
(
item
=>
{
const
isParent
=
item
.
parentId
==
0
&&
item
.
children
.
length
==
0
;
data
.
forEach
(
(
item
)
=>
{
const
isParent
=
item
.
parentId
==
0
&&
item
.
children
.
length
==
0
;
const
route
=
{
path
:
item
.
path
,
component
:
"Layout"
,
alwaysShow
:
true
,
hidden
:
false
,
meta
:
{
title
:
item
.
name
,
icon
:
item
.
icon
},
children
:
!
isParent
?
item
.
children
.
map
(
child
=>
({
path
:
child
.
path
,
component
:
`
${
child
.
path
}
`
,
hidden
:
false
,
name
:
child
.
name
,
meta
:
{
title
:
child
.
name
,
icon
:
child
.
icon
||
''
}
}))
:
[
{
path
:
item
.
path
,
component
:
`
${
item
.
path
}
`
,
hidden
:
false
,
name
:
item
.
name
,
meta
:
{
title
:
item
.
name
,
icon
:
item
.
icon
||
''
}
}
]
children
:
!
isParent
?
item
.
children
.
map
((
child
)
=>
({
path
:
child
.
path
,
component
:
`
${
child
.
path
}
`
,
hidden
:
false
,
name
:
child
.
name
,
meta
:
{
title
:
child
.
name
,
icon
:
child
.
icon
||
""
},
}))
:
[
{
path
:
item
.
path
,
component
:
`
${
item
.
path
}
`
,
hidden
:
false
,
name
:
item
.
name
,
meta
:
{
title
:
item
.
name
,
icon
:
item
.
icon
||
""
},
},
],
};
routes
.
push
(
route
);
});
...
...
@@ -213,8 +241,9 @@ function routeItemInfo(data) {
return
routes
;
}
export
const
loadView
=
(
view
)
=>
{
// 路由懒加载
return
(
resolve
)
=>
require
([
`@/views
${
view
}
/index.vue`
],
resolve
)
}
export
const
loadView
=
(
view
)
=>
{
// 路由懒加载
return
(
resolve
)
=>
require
([
`@/views
${
view
}
/index.vue`
],
resolve
);
};
export
default
permission
export
default
permission
;
...
...
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'
)
}
\ No newline at end of file
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,11 +305,10 @@
></el-input>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5">
<!-- 贸易方式 -->
<el-col :span="3">
<!-- 贸易方式 -->
<el-col :span="3">
<Formitem label="贸易方式" prop="tradeMode">
<el-select
type="text"
...
...
@@ -440,11 +439,10 @@
</el-select>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5">
<!-- 运费 -->
<el-col :span="3">
<!-- 运费 -->
<el-col :span="3">
<Formitem label="运费" prop="freight">
<el-input
type="text"
...
...
@@ -575,11 +573,10 @@
></el-input>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5">
<!-- 净重(公斤) -->
<el-col :span="3">
<!-- 净重(公斤) -->
<el-col :span="3">
<Formitem label="净重(公斤)" prop="netWeight">
<el-input
type="text"
...
...
@@ -696,12 +693,26 @@
:class="{ entryTitle: true, titleBorder: logtableType ? false : true }"
style="margin-top: 10px"
>
<div>
回执信息
<el-button type="text" @click="hiddenLogTable">
<svg-icon v-if="logtableType" icon-class="downIcon"></svg-icon>
<svg-icon v-else icon-class="upIcon"></svg-icon>
</el-button>
<div style="display: flex; justify-content: space-between; width: 100%">
<div>
回执信息
<el-button type="text" @click="hiddenLogTable">
<svg-icon v-if="logtableType" icon-class="downIcon"></svg-icon>
<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
...
...
@@ -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