Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
J
jinfa-admin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
project
jinfa-admin
Commits
92c6e919
Commit
92c6e919
authored
Jul 27, 2021
by
前端-黄佳鑫
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
🐞
fix(询价单、询价报价单): 详情去掉内部状态
parent
73b74488
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
181 additions
and
40 deletions
+181
-40
index.tsx
...mponents/DetailLayout/components/progressLayout/index.tsx
+26
-14
index.tsx
src/components/DetailLayout/components/recordLyout/index.tsx
+26
-13
index.ts
src/constants/index.ts
+59
-0
index.ts
src/global/config/index.ts
+14
-3
index.tsx
src/pages/rfq/details/index.tsx
+6
-5
index.tsx
src/pages/rfqOffer/details/index.tsx
+6
-5
index.ts
src/utils/index.ts
+44
-0
No files found.
src/components/DetailLayout/components/progressLayout/index.tsx
View file @
92c6e919
/** 详情通用 - 流转进度 */
import
React
,
{
useContext
,
useState
}
from
'react'
;
import
React
,
{
useContext
,
use
Effect
,
use
State
}
from
'react'
;
import
{
Radio
,
Steps
}
from
'antd'
;
import
{
Context
}
from
'../context'
;
import
Card
from
'../../../card'
;
import
style
from
'./index.less
'
;
import
{
isEmpty
}
from
'lodash
'
;
const
LOGSTATESTYPE
=
{
/** 外部流转 */
...
...
@@ -22,28 +22,40 @@ export interface ProgressProps {
const
ProgressLayout
:
React
.
FC
<
ProgressProps
>
=
(
props
:
any
)
=>
{
const
{
logstate
}
=
props
;
const
context
=
useContext
(
Context
);
const
[
logStatesStatus
,
setLogStatesStatus
]
=
useState
<
number
>
(
logstate
||
LOGSTATESTYPE
.
EXTERNALSTATES
);
const
[
logStatesStatus
,
setLogStatesStatus
]
=
useState
<
number
>
(
1
);
const
[
data
,
setData
]
=
useState
<
any
>
({})
useEffect
(()
=>
{
if
(
!
isEmpty
(
context
))
{
setLogStatesStatus
(
context
.
externalLogStates
?
LOGSTATESTYPE
.
EXTERNALSTATES
:
LOGSTATESTYPE
.
INTERIORSTATES
)
setData
(
context
)
}
},
[
context
])
return
(
<
Card
id=
'progressLayout'
title=
'流转进度'
extra=
{
<
Radio
.
Group
onChange=
{
(
e
)
=>
setLogStatesStatus
(
e
.
target
.
value
)
}
defaultValue=
{
logStatesStatus
}
>
{
context
.
externalLogStates
&&
<
Radio
.
Button
value=
{
LOGSTATESTYPE
.
EXTERNALSTATES
}
>
外部流转
</
Radio
.
Button
>
}
{
context
.
interiorLogStates
&&
<
Radio
.
Button
value=
{
LOGSTATESTYPE
.
INTERIORSTATES
}
>
内部流转
</
Radio
.
Button
>
}
{
context
.
examineInteriorLogStates
&&
<
Radio
.
Button
value=
{
LOGSTATESTYPE
.
EXMAINEINERIORSTATES
}
>
竞价结果内部流转
</
Radio
.
Button
>
}
</
Radio
.
Group
>
<>
{
!
isEmpty
(
data
)
&&
(
<
Radio
.
Group
onChange=
{
(
e
)
=>
setLogStatesStatus
(
e
.
target
.
value
)
}
defaultValue=
{
data
.
externalLogStates
?
LOGSTATESTYPE
.
EXTERNALSTATES
:
LOGSTATESTYPE
.
INTERIORSTATES
}
>
{
data
.
externalLogStates
&&
<
Radio
.
Button
value=
{
LOGSTATESTYPE
.
EXTERNALSTATES
}
>
外部流转
</
Radio
.
Button
>
}
{
data
.
interiorLogStates
&&
<
Radio
.
Button
value=
{
LOGSTATESTYPE
.
INTERIORSTATES
}
>
内部流转
</
Radio
.
Button
>
}
{
data
.
examineInteriorLogStates
&&
<
Radio
.
Button
value=
{
LOGSTATESTYPE
.
EXMAINEINERIORSTATES
}
>
竞价结果内部流转
</
Radio
.
Button
>
}
</
Radio
.
Group
>
)
}
</>
}
>
<
Steps
progressDot
>
{
logStatesStatus
===
LOGSTATESTYPE
.
EXTERNALSTATES
?
context
.
externalLogStates
&&
context
.
externalLogStates
.
map
(
item
=>
(
data
.
externalLogStates
&&
data
.
externalLogStates
.
map
(
item
=>
(
<
Steps
.
Step
key=
{
item
.
state
}
title=
{
item
.
operationalProcess
}
...
...
@@ -51,7 +63,7 @@ const ProgressLayout: React.FC<ProgressProps> = (props: any) => {
status=
{
item
.
isExecute
?
'finish'
:
'wait'
}
/>
))
:
(
logStatesStatus
===
LOGSTATESTYPE
.
INTERIORSTATES
?
context
.
interiorLogStates
&&
context
.
interiorLogStates
.
map
(
item
=>
(
data
.
interiorLogStates
&&
data
.
interiorLogStates
.
map
(
item
=>
(
<
Steps
.
Step
key=
{
item
.
state
}
title=
{
item
.
operationalProcess
}
...
...
@@ -59,7 +71,7 @@ const ProgressLayout: React.FC<ProgressProps> = (props: any) => {
status=
{
item
.
isExecute
?
'finish'
:
'wait'
}
/>
))
:
context
.
examineInteriorLogStates
&&
context
.
examineInteriorLogStates
.
map
(
item
=>
(
data
.
examineInteriorLogStates
&&
data
.
examineInteriorLogStates
.
map
(
item
=>
(
<
Steps
.
Step
key=
{
item
.
state
}
title=
{
item
.
operationalProcess
}
...
...
src/components/DetailLayout/components/recordLyout/index.tsx
View file @
92c6e919
/** 详情通用 - 流转进度 */
import
React
,
{
useContext
,
useState
}
from
'react'
;
import
React
,
{
useContext
,
use
Effect
,
use
State
}
from
'react'
;
import
{
Radio
,
Table
}
from
'antd'
;
import
{
Context
}
from
'../context'
;
import
Card
from
'../../../card'
;
...
...
@@ -7,6 +7,7 @@ import {
EXTERNALLOGS
,
INTERNALLOGS
,
}
from
'./columns'
;
import
{
isEmpty
}
from
'lodash'
;
const
LOGSTATESTYPE
=
{
/** 外部流转 */
...
...
@@ -23,30 +24,42 @@ export interface ProgressProps {
const
RecordLayout
:
React
.
FC
<
ProgressProps
>
=
(
props
:
any
)
=>
{
const
{
logstate
}
=
props
;
const
context
=
useContext
(
Context
);
const
[
logStatus
,
setLogStatus
]
=
useState
<
number
>
(
context
.
externalLogs
?
LOGSTATESTYPE
.
EXTERNALSTATES
:
LOGSTATESTYPE
.
INTERIORSTATES
);
const
[
logStatus
,
setLogStatus
]
=
useState
<
number
>
(
context
.
externalLogs
?
LOGSTATESTYPE
.
EXTERNALSTATES
:
LOGSTATESTYPE
.
INTERIORSTATES
);
const
[
data
,
setData
]
=
useState
<
any
>
({})
useEffect
(()
=>
{
if
(
!
isEmpty
(
context
))
{
setLogStatus
(
context
.
externalLogs
?
LOGSTATESTYPE
.
EXTERNALSTATES
:
LOGSTATESTYPE
.
INTERIORSTATES
)
setData
(
context
)
}
},
[
context
])
return
(
<
Card
id=
'recordLyout'
title=
'流转记录'
extra=
{
<
Radio
.
Group
onChange=
{
(
e
)
=>
setLogStatus
(
e
.
target
.
value
)
}
defaultValue=
{
context
.
externalLogs
?
LOGSTATESTYPE
.
EXTERNALSTATES
:
LOGSTATESTYPE
.
INTERIORSTATES
}
>
{
/* {context.externalLogs && <Radio.Button value={LOGSTATESTYPE.EXTERNALSTATES}>外部流转</Radio.Button>}
{context.interiorLogs && <Radio.Button value={LOGSTATESTYPE.INTERIORSTATES}>内部流转</Radio.Button>} */
}
<
Radio
.
Button
value=
{
LOGSTATESTYPE
.
EXTERNALSTATES
}
>
外部流转
</
Radio
.
Button
>
<
Radio
.
Button
value=
{
LOGSTATESTYPE
.
INTERIORSTATES
}
>
内部流转
</
Radio
.
Button
>
</
Radio
.
Group
>
<>
{
!
isEmpty
(
data
)
&&
(
<
Radio
.
Group
onChange=
{
(
e
)
=>
setLogStatus
(
e
.
target
.
value
)
}
defaultValue=
{
data
.
externalLogs
?
LOGSTATESTYPE
.
EXTERNALSTATES
:
LOGSTATESTYPE
.
INTERIORSTATES
}
>
{
data
.
externalLogs
&&
<
Radio
.
Button
value=
{
LOGSTATESTYPE
.
EXTERNALSTATES
}
>
外部流转
</
Radio
.
Button
>
}
{
data
.
interiorLogs
&&
<
Radio
.
Button
value=
{
LOGSTATESTYPE
.
INTERIORSTATES
}
>
内部流转
</
Radio
.
Button
>
}
{
/* <Radio.Button value={LOGSTATESTYPE.EXTERNALSTATES}>外部流转</Radio.Button>
<Radio.Button value={LOGSTATESTYPE.INTERIORSTATES}>内部流转</Radio.Button> */
}
</
Radio
.
Group
>
)
}
</>
}
>
<
Table
columns=
{
logStatus
===
LOGSTATESTYPE
.
EXTERNALSTATES
?
EXTERNALLOGS
:
INTERNALLOGS
}
dataSource=
{
logStatus
===
LOGSTATESTYPE
.
EXTERNALSTATES
?
context
.
externalLogs
:
context
.
interiorLogs
data
.
externalLogs
:
data
.
interiorLogs
}
rowKey=
{
(
record
)
=>
record
.
id
}
pagination=
{
{
...
...
src/constants/index.ts
View file @
92c6e919
import
{
GlobalConfig
}
from
'@/global/config'
import
{
getTopDomainByHost
,
getDefaultEnterprise
,
getChannelInfo
,
getIChannelInfo
}
from
'@/utils'
export
const
NOT_CHANGE_VALUE
=
'hello, world'
// socket的链接地址, 默认会使用后端接口网关地址
export
const
SOCKET_URL
=
process
.
env
.
SOCKET_URL
?.
replace
(
'http|https'
,
'ws'
)
||
process
.
env
.
BACK_GATEWAY
?.
replace
(
'http|https'
,
'ws'
)
console
.
log
(
SOCKET_URL
);
/**
* 请求头
*/
export
const
REQUEST_HEADER
=
'http://'
/**
* 顶域
*/
export
const
TOP_DOMAIN
=
process
.
env
.
NODE_ENV
!==
'development'
?
getTopDomainByHost
(
GlobalConfig
.
site
.
siteInfo
.
siteUrl
,
true
)
:
'lingxidev.com'
// export const TOP_DOMAIN = getTopDomainByHost(GlobalConfig.global.siteInfo.siteUrl)
/**
* 平台首页域名
*/
export
const
PLATFORM_DOMAIN
=
`
${
REQUEST_HEADER
}
www.
${
TOP_DOMAIN
}
`
/**
* 企业商城域名
*/
const
enterpriseInfo
=
getDefaultEnterprise
()
export
const
ENTERPRISE_CENTER_URL
=
`
${
REQUEST_HEADER
}${
enterpriseInfo
?
enterpriseInfo
.
url
:
'b2b'
}
.
${
TOP_DOMAIN
}
`
/**
* 渠道商城域名
*/
const
channelInfo
=
getChannelInfo
()
export
const
CHANNEL_CENTER_URL
=
`
${
REQUEST_HEADER
}${
channelInfo
?
channelInfo
.
url
:
'channel'
}
.
${
TOP_DOMAIN
}
`
/**
* 渠道自有商城域名
*/
const
iChannelInfo
=
getIChannelInfo
()
export
const
ICHANNEL_CENTER_URL
=
`
${
REQUEST_HEADER
}${
iChannelInfo
?
iChannelInfo
.
url
:
'ichannel'
}
.
${
TOP_DOMAIN
}
`
/**
* 行情资讯域名
*/
export
const
INFO_CENTER_URL
=
`
${
REQUEST_HEADER
}
info.
${
TOP_DOMAIN
}
`
/**
* 企业采购域名
*/
export
const
SRM_CENTER_URL
=
`
${
REQUEST_HEADER
}
srm.
${
TOP_DOMAIN
}
`
/**
* 物流服务域名
*/
export
const
LOGISTICS_CENTER_URL
=
`
${
REQUEST_HEADER
}
logistics.
${
TOP_DOMAIN
}
`
/**
* 加工服务域名
*/
export
const
MANUFACTURE_CENTER_URL
=
`
${
REQUEST_HEADER
}
manufacture.
${
TOP_DOMAIN
}
`
// 会员角色类型
export
const
MEMBER_ROLE_LISTS
=
[
...
...
src/global/config/index.ts
View file @
92c6e919
...
...
@@ -6,7 +6,18 @@
* **********
*/
import
SELF_CONFIG
from
'../../../config/base.config.json'
import
{
RootObject
}
from
'./global'
import
SELF_CONFIG
from
'../../../config/base.config.json'
import
{
RootObject
}
from
'./global'
export
const
GlobalConfig
:
RootObject
=
SELF_CONFIG
interface
NewRootObject
extends
RootObject
{
channelRootRoute
:
string
;
ichannelRootRoute
:
string
;
}
const
channelRootRoute
=
'channel'
const
ichannelRootRoute
=
'ichannel'
SELF_CONFIG
.
channelRootRoute
=
channelRootRoute
// 渠道商城路由根路径
SELF_CONFIG
.
ichannelRootRoute
=
ichannelRootRoute
// 渠道自有商城路由根路径
export
const
GlobalConfig
:
NewRootObject
=
SELF_CONFIG
src/pages/rfq/details/index.tsx
View file @
92c6e919
...
...
@@ -13,6 +13,7 @@ import ListLayout from '@/components/DetailLayout/components/listLayout';
import
GeneralLayout
from
'@/components/DetailLayout/components/generalLayout'
;
import
RecordLyout
from
'@/components/DetailLayout/components/recordLyout'
;
import
EyePreview
from
'@/components/EyePreview'
;
import
{
ENTERPRISE_CENTER_URL
}
from
'@/constants'
;
const
TABLINK
=
[
{
id
:
'progressLayout'
,
title
:
'流转进度'
},
...
...
@@ -121,10 +122,10 @@ const ProductInquiryDetail = () => {
return
;
}
const
{
data
}
=
res
;
data
.
externalLogStates
=
data
.
externalInquiryListStateResponses
?
[...
data
.
externalInquiryListStateResponses
]
:
null
;
data
.
interiorLogStates
=
data
.
interiorRequisitionFormStateResponses
?
[...
data
.
interiorRequisitionFormStateResponses
]
:
null
;
data
.
externalLogs
=
data
.
externalInquiryListLogResponses
?
[...
data
.
externalInquiryListLogResponses
]
:
null
;
data
.
interiorLogs
=
data
.
interiorInquiryListLogResponses
?
[...
data
.
interiorInquiryListLogResponses
]
:
null
;
data
.
externalLogStates
=
data
.
externalInquiryListStateResponses
?
[...
data
.
externalInquiryListStateResponses
]
:
[]
;
//
data.interiorLogStates = data.interiorRequisitionFormStateResponses ? [...data.interiorRequisitionFormStateResponses] : null;
data
.
externalLogs
=
data
.
externalInquiryListLogResponses
?
[...
data
.
externalInquiryListLogResponses
]
:
[]
;
//
data.interiorLogs = data.interiorInquiryListLogResponses ? [...data.interiorInquiryListLogResponses] : null;
setDataSource
(
data
);
handleBasicEffect
(
data
);
handleConditionEffect
(
data
);
...
...
@@ -138,7 +139,7 @@ const ProductInquiryDetail = () => {
const
handleJump
=
(
data
:
any
)
=>
{
console
.
log
(
data
)
window
.
open
(
`/shop/
${
data
.
memberId
}
_
${
data
.
memberRoleId
}
/inquiry/detail/
${
data
.
commodityId
}
`
)
window
.
open
(
`
${
ENTERPRISE_CENTER_URL
}
/shop/
${
data
.
memberId
}
_
${
data
.
memberRoleId
}
/inquiry/detail/
${
data
.
commodityId
}
`
)
}
const
columns
:
ColumnType
<
any
>
[]
=
[
...
...
src/pages/rfqOffer/details/index.tsx
View file @
92c6e919
...
...
@@ -12,6 +12,7 @@ import BasicLayout from '@/components/DetailLayout/components/basicLayout';
import
ListLayout
from
'@/components/DetailLayout/components/listLayout'
;
import
GeneralLayout
from
'@/components/DetailLayout/components/generalLayout'
;
import
RecordLyout
from
'@/components/DetailLayout/components/recordLyout'
;
import
{
ENTERPRISE_CENTER_URL
}
from
'@/constants'
;
const
TABLINK
=
[
{
id
:
'progressLayout'
,
title
:
'流转进度'
},
...
...
@@ -121,10 +122,10 @@ const ConfirmOfferDetail = () => {
return
;
}
const
{
data
}
=
res
;
data
.
externalLogStates
=
data
.
externalQuotationStateResponses
?
[...
data
.
externalQuotationStateResponses
]
:
null
;
data
.
interiorLogStates
=
data
.
interiorQuotationStateResponses
?
[...
data
.
interiorQuotationStateResponses
]
:
null
;
data
.
externalLogs
=
data
.
externalRequisitionFormResponses
?
[...
data
.
externalRequisitionFormResponses
]
:
null
;
data
.
interiorLogs
=
data
.
interiorQuotationLogResponses
?
[...
data
.
interiorQuotationLogResponses
]
:
null
;
data
.
externalLogStates
=
data
.
externalQuotationStateResponses
?
[...
data
.
externalQuotationStateResponses
]
:
[]
;
//
data.interiorLogStates = data.interiorQuotationStateResponses ? [...data.interiorQuotationStateResponses] : null;
data
.
externalLogs
=
data
.
externalRequisitionFormResponses
?
[...
data
.
externalRequisitionFormResponses
]
:
[]
;
//
data.interiorLogs = data.interiorQuotationLogResponses ? [...data.interiorQuotationLogResponses] : null;
setDataSource
(
data
);
handleBasicEffect
(
data
);
handleOtherEffect
(
data
);
...
...
@@ -143,7 +144,7 @@ const ConfirmOfferDetail = () => {
dataIndex
:
'productId'
,
render
:
(
productId
,
data
)
=>
(
<
Space
direction=
'vertical'
>
<
Typography
.
Link
target=
"_blank"
href=
{
`/shop/${data.memberId}_${data.memberRoleId}/commodity/detail/${data.commodityId}`
}
>
{
productId
}
</
Typography
.
Link
>
<
Typography
.
Link
target=
"_blank"
href=
{
`
${ENTERPRISE_CENTER_URL}
/shop/${data.memberId}_${data.memberRoleId}/commodity/detail/${data.commodityId}`
}
>
{
productId
}
</
Typography
.
Link
>
<
Typography
.
Text
>
{
data
.
productName
}
</
Typography
.
Text
>
</
Space
>
)
...
...
src/utils/index.ts
View file @
92c6e919
import
deepClone
from
'clone'
import
moment
from
'moment'
;
import
{
ISchema
}
from
'@formily/antd'
;
import
{
GlobalConfig
}
from
'@/global/config'
;
function
isArray
(
arr
:
any
)
{
return
Array
.
isArray
(
arr
)
...
...
@@ -364,6 +365,49 @@ export const coverColFiltersItem = (
}
};
export
const
getDefaultEnterprise
=
()
=>
{
const
shopInfo
=
GlobalConfig
.
web
.
shopInfo
const
webMallList
=
shopInfo
.
filter
((
item
:
{
environment
:
number
;
type
:
number
})
=>
item
.
environment
===
1
&&
item
.
type
===
1
)
const
defaultMall
=
webMallList
.
filter
((
item
)
=>
item
.
isDefault
===
1
)[
0
]
let
result
:
any
=
undefined
if
(
defaultMall
)
{
result
=
defaultMall
}
else
{
if
(
webMallList
&&
webMallList
.
length
>
0
)
{
result
=
webMallList
[
0
]
}
}
return
result
}
export
const
getChannelInfo
=
()
=>
{
const
shopInfo
=
GlobalConfig
.
web
.
shopInfo
const
webMallList
=
shopInfo
.
filter
((
item
:
{
environment
:
number
;
type
:
number
})
=>
item
.
environment
===
1
&&
item
.
type
===
3
)
return
webMallList
[
0
]
}
export
const
getIChannelInfo
=
()
=>
{
const
shopInfo
=
GlobalConfig
.
web
.
shopInfo
const
webMallList
=
shopInfo
.
filter
((
item
:
{
environment
:
number
;
type
:
number
})
=>
item
.
environment
===
1
&&
item
.
type
===
4
)
return
webMallList
[
0
]
}
/**
* 根据host获取当前一级域名
* @param url 链接
* @returns
*/
export
const
getTopDomainByHost
=
(
url
:
string
,
isPort
=
false
):
string
=>
{
if
(
!
url
)
return
''
// 如果后缀带有端口号, 可通过第二个参数把端口去掉
const
splitUrl
=
url
.
replace
(
/
(
http|https
)\:\/\/
/
,
''
).
split
(
':'
)
if
(
splitUrl
.
length
>
1
&&
isPort
)
{
return
`
${
splitUrl
[
0
].
split
(
'.'
).
slice
(
-
2
).
join
(
'.'
)}
`
}
return
url
.
split
(
'.'
).
slice
(
-
2
).
join
(
'.'
)
}
export
default
{
isArray
,
isObject
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment