Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
J
jinfa-platform
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
黄庭坚
jinfa-platform
Commits
dda7b95b
Commit
dda7b95b
authored
Jul 30, 2021
by
XieZhiXiong
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'v2' of
http://10.0.0.22:3000/lingxi/lingxi-business-paltform
into v2
parents
6bf82f45
d0046413
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
181 additions
and
424 deletions
+181
-424
setPrice.tsx
src/pages/commodity/products/addChannelItem/setPrice.tsx
+1
-22
priceAttributeForm.tsx
...commodity/products/addProductsItem/priceAttributeForm.tsx
+2
-50
index.tsx
src/pages/commodity/products/constant/index.tsx
+129
-0
fastModifyPrice.tsx
src/pages/commodity/products/fastModifyPrice.tsx
+2
-49
index.tsx
src/pages/commodity/products/index.tsx
+7
-73
modifyDirectChannel.tsx
src/pages/commodity/products/modifyDirectChannel.tsx
+4
-36
viewDirectChannel.tsx
src/pages/commodity/products/viewDirectChannel.tsx
+6
-30
viewProducts.tsx
src/pages/commodity/products/viewProducts.tsx
+30
-163
index.tsx
...Order/orderCollect/components/productModalTable/index.tsx
+0
-1
No files found.
src/pages/commodity/products/addChannelItem/setPrice.tsx
View file @
dda7b95b
...
...
@@ -13,6 +13,7 @@ import { PublicApi } from '@/services/api';
import
{
store
}
from
'@/store'
import
{
inject
,
observer
}
from
'mobx-react'
import
{
validatorNumberRange
}
from
'../constant'
;
const
{
Item
}:
any
=
Form
...
...
@@ -307,28 +308,6 @@ const SetPrice:React.FC<IProps> = (props) => {
setLadderPrice
(
false
)
}
// 校验阶梯范围
const
validatorNumberRange
=
(
rule
,
value
,
callback
)
=>
{
try
{
if
(
Array
.
isArray
(
value
)){
let
range
=
value
.
map
(
item
=>
{
if
(
item
)
return
Object
.
values
(
item
.
numberRange
)
}).
reduce
(
function
(
a
,
b
)
{
return
a
.
concat
(
b
);
},
[]
)
let
result
=
range
.
map
(
Number
).
reduce
((
a
,
b
)
=>
{
if
(
a
<
b
)
return
b
})
if
(
!
result
)
throw
new
Error
(
'请正确输入阶梯数量范围'
);
callback
()
}
}
catch
(
err
)
{
callback
(
err
)
}
}
const
onChangeTax
=
(
e
)
=>
{
setIsTax
(
e
.
target
.
checked
)
}
...
...
src/pages/commodity/products/addProductsItem/priceAttributeForm.tsx
View file @
dda7b95b
...
...
@@ -9,6 +9,7 @@ import { QuestionCircleOutlined, SettingOutlined, PlusOutlined, MinusOutlined, }
import
{
inject
,
observer
}
from
'mobx-react'
import
{
store
}
from
'@/store'
import
{
IProductSelectAttribute
}
from
'@/module/productModule'
import
{
validatorNumberRange
}
from
'../constant'
const
_
=
require
(
"lodash"
);
...
...
@@ -588,56 +589,7 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
priceForm
.
setFieldsValue
({
unitName
:
option
.
children
})
}
// 校验阶梯范围
const
validatorNumberRange
=
(
rule
,
value
,
callback
)
=>
{
// let minOrder = Number(minOrderNumber)
// let precision;
// if(Number.isInteger(minOrder)) { // 整数取1
// precision = 1
// } else { // 小数取最小精度(最多三位)
// switch(minOrderNumber.toString().split(".")[1].length) {
// case 1:
// precision = 0.1
// break;
// case 2:
// precision = 0.01
// break;
// case 3:
// precision = 0.001
// break;
// default:
// precision = 1
// }
// }
try
{
if
(
Array
.
isArray
(
value
)){
let
range
=
value
.
map
(
item
=>
{
if
(
item
)
return
Object
.
values
(
item
.
numberRange
)
}).
reduce
(
function
(
a
,
b
)
{
// // 判断首位数是否满足精度
// if(a.length && b.length) {
// if((Number(b[0])*1000 - Number(a[a.length-1])*1000)/1000 !== precision) {
// throw new Error('请正确输入阶梯数量范围');
// }
// }
return
a
.
concat
(
b
);
},
[]
)
let
result
=
range
.
map
(
Number
).
reduce
((
a
,
b
)
=>
{
if
(
a
<
b
)
return
b
})
if
(
!
result
)
throw
new
Error
(
'请正确输入阶梯数量范围'
);
if
(
Number
(
range
[
0
])
!==
Number
(
minOrderNumber
))
throw
new
Error
(
'阶段的起始值必须为最小起订数'
);
callback
()
}
}
catch
(
err
)
{
callback
(
err
)
}
}
const
clickBatchSetPrice
=
()
=>
{
// console.log('批量设置价格')
setPriceForm
.
resetFields
()
// 先清空
setIsBatchSetting
(
true
)
// 点击置为true
setSetPriceModal
(
true
)
...
...
@@ -861,7 +813,7 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
message
:
'阶梯范围为必填项'
},
{
validator
:
validatorNumberRange
validator
:
(
r
,
v
,
c
)
=>
validatorNumberRange
(
r
,
v
,
c
,
minOrderNumber
)
}
]
}
>
...
...
src/pages/commodity/products/constant/index.tsx
0 → 100644
View file @
dda7b95b
import
{
ColumnType
}
from
'antd/lib/table'
;
import
moment
from
'moment'
;
import
React
,
{
ReactNode
}
from
'react'
/** 商品 渠道商品 快捷修改单价 共用常量 */
/** 商品(渠道商品)状态 */
export
const
productStatusLabel
=
[
''
,
'待提交审核'
,
'待审核'
,
'审核通过'
,
'审核不通过'
,
'已上架'
,
'已下架'
,
'未上架'
]
/** 品类类型&商品类型 */
export
const
customerCategoryTypeLabel
=
[
''
,
'实物商品'
,
'虚拟商品'
,
'服务商品'
,
]
/** 商品定价类型 */
export
const
priceTypeLabel
=
[
''
,
'现货价格'
,
'价格需要询价'
,
'积分兑换商品'
,
]
/** 商品物流类型 */
export
const
deliveryTypeLabel
=
[
''
,
'物流(默认)'
,
'自提'
,
'无需配送'
,
]
/** 商品运费类型 */
export
const
carriageTypeLabel
=
[
''
,
'卖家承担运费(默认)'
,
'买家承担运费'
,
]
/** 查看商品 审核历史列 */
export
const
columns
:
ColumnType
<
any
>
[]
=
[
{
title
:
'序号'
,
dataIndex
:
'memberRoleId'
,
key
:
'memberRoleId'
,
render
:
(
t
,
c
,
i
)
=>
i
+
1
},
{
title
:
'角色'
,
dataIndex
:
'memberRoleName'
,
key
:
'memberRoleName'
,
},
{
title
:
'状态'
,
dataIndex
:
'status'
,
key
:
'status'
,
render
:
(
text
:
any
,
record
:
any
)
=>
{
let
component
:
ReactNode
=
null
if
(
record
.
status
===
4
)
component
=
(<><
span
className=
"commonStatusValid"
></
span
>
审核通过
</>)
else
if
(
record
.
status
===
1
)
component
=
(<><
span
className=
"commonStatusInvalid"
></
span
>
待提交审核
</>)
else
if
(
record
.
status
===
2
)
component
=
(<><
span
className=
"commonStatusModify"
></
span
>
待审核
</>)
else
if
(
record
.
status
===
3
)
component
=
(<><
span
className=
"commonStatusStop"
></
span
>
审核不通过
</>)
return
component
}
},
{
title
:
'操作'
,
dataIndex
:
'operation'
,
key
:
'operation'
,
render
:
(
text
:
any
,
record
:
any
)
=>
{
if
(
record
.
operation
===
1
)
return
'提交审核'
else
if
(
record
.
operation
===
2
)
return
'修改商品'
else
if
(
record
.
operation
===
3
)
return
'审核商品'
}
},
{
title
:
'操作时间'
,
dataIndex
:
'createTime'
,
key
:
'createTime'
,
render
:
(
text
:
any
)
=>
moment
(
text
).
format
(
"YYYY-MM-DD HH:mm:ss"
)
},
{
title
:
'意见'
,
dataIndex
:
'checkRemark'
,
key
:
'checkRemark'
,
},
];
/** 校验阶梯价格函数 min参数判断是否校验最小起订 */
export
const
validatorNumberRange
=
(
rule
:
any
,
value
:
any
,
callback
:
any
,
min
?:
any
)
=>
{
try
{
if
(
Array
.
isArray
(
value
)){
let
range
=
value
.
map
(
item
=>
{
if
(
item
)
return
Object
.
values
(
item
.
numberRange
)
}).
reduce
(
function
(
a
,
b
)
{
return
a
.
concat
(
b
);
},
[]
)
let
result
=
range
.
map
(
Number
).
reduce
((
a
,
b
)
=>
{
if
(
a
<
b
)
return
b
})
if
(
!
result
)
throw
new
Error
(
'请正确输入阶梯数量范围'
);
if
(
min
&&
(
Number
(
range
[
0
])
!==
Number
(
min
)))
throw
new
Error
(
'阶段的起始值必须为最小起订数'
);
callback
()
}
}
catch
(
err
)
{
callback
(
err
)
}
}
src/pages/commodity/products/fastModifyPrice.tsx
View file @
dda7b95b
...
...
@@ -16,6 +16,7 @@ import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilte
import
{
searchCustomerCategoryOptionEffect
,
searchBrandOptionEffect
}
from
'./effect'
import
{
fastSchema
}
from
'./schema/productSchema'
import
{
FORM_FILTER_PATH
}
from
'@/formSchema/const'
import
{
validatorNumberRange
}
from
'./constant'
const
formActions
=
createFormActions
();
...
...
@@ -235,54 +236,6 @@ const FastModifyPrice: React.FC<{}> = () => {
}
}
// 校验阶梯范围
const
validatorNumberRange
=
(
rule
,
value
,
callback
)
=>
{
// let minOrder = Number(currentRow.minOrder)
// let precision;
// if(Number.isInteger(minOrder)) { // 整数取1
// precision = 1
// } else { // 小数取最小精度(最多三位)
// switch(minOrder.toString().split(".")[1].length) {
// case 1:
// precision = 0.1
// break;
// case 2:
// precision = 0.01
// break;
// case 3:
// precision = 0.001
// break;
// default:
// precision = 1
// }
// }
try
{
if
(
Array
.
isArray
(
value
)){
let
range
=
value
.
map
(
item
=>
{
if
(
item
)
return
Object
.
values
(
item
.
numberRange
)
}).
reduce
(
function
(
a
,
b
)
{
// // 判断首位数是否满足精度
// if(a.length && b.length) {
// if((Number(b[0])*1000 - Number(a[1])*1000)/1000 !== precision) {
// throw new Error('请正确输入阶梯数量范围');
// }
// }
return
a
.
concat
(
b
);
},
[]
)
let
result
=
range
.
map
(
Number
).
reduce
((
a
,
b
)
=>
{
if
(
a
<
b
)
return
b
})
if
(
!
result
)
throw
new
Error
(
'请正确输入阶梯数量范围'
);
if
(
Number
(
range
[
0
])
!==
Number
(
currentRow
.
minOrder
))
throw
new
Error
(
'阶段的起始值必须为最小起订数'
);
callback
()
}
}
catch
(
err
)
{
callback
(
err
)
}
}
return
(
<
PageHeaderWrapper
>
<
Card
>
...
...
@@ -347,7 +300,7 @@ const FastModifyPrice: React.FC<{}> = () => {
message
:
'阶梯范围为必填项'
},
{
validator
:
validatorNumberRange
validator
:
(
r
,
v
,
c
)
=>
validatorNumberRange
(
r
,
v
,
c
,
currentRow
.
minOrder
)
}
]
}
>
...
...
src/pages/commodity/products/index.tsx
View file @
dda7b95b
...
...
@@ -26,6 +26,8 @@ import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilte
import
{
searchBrandOptionEffect
,
searchCustomerCategoryOptionEffect
}
from
'./effect'
import
{
getAuth
}
from
'@/utils/auth'
import
useSetSearchValueInTable
from
'@/hooks/useSetSearchValueInTable'
import
{
priceTypeLabel
,
productStatusLabel
}
from
'./constant'
import
EyePreview
from
'@/components/EyePreview'
const
{
Option
}
=
Select
;
const
{
confirm
}
=
Modal
;
...
...
@@ -94,7 +96,9 @@ const Products: React.FC<{}> = () => {
className
:
'commonPickColor'
,
width
:
240
,
ellipsis
:
true
,
render
:
(
text
:
any
,
record
:
any
)
=>
<
a
title=
{
text
}
onClick=
{
()
=>
handleSee
(
record
)
}
>
{
text
}
<
EyeOutlined
/></
a
>
render
:
(
text
:
any
,
record
:
any
)
=>
<
EyePreview
url=
{
`/memberCenter/commodityAbility/commodity/products/detail?id=${record.id}`
}
>
{
text
}
</
EyePreview
>
},
{
title
:
'商品品类'
,
...
...
@@ -115,29 +119,7 @@ const Products: React.FC<{}> = () => {
title
:
'产品定价'
,
dataIndex
:
'priceType'
,
key
:
'priceType'
,
render
:
(
text
:
any
,
reocrd
:
any
)
=>
{
if
(
text
===
1
)
return
'现货价格'
else
if
(
text
===
2
)
return
'价格需要询价'
else
if
(
text
===
3
)
return
'积分兑换商品'
},
filters
:
[
{
text
:
'现货价格'
,
value
:
1
,
},
{
text
:
'价格需要询价'
,
value
:
2
,
},
{
text
:
'积分兑换商品'
,
value
:
3
,
},
],
onFilter
:
(
value
,
record
)
=>
record
.
priceType
===
value
,
render
:
(
text
:
any
,
reocrd
:
any
)
=>
priceTypeLabel
[
text
]
},
{
title
:
'价格'
,
...
...
@@ -170,49 +152,7 @@ const Products: React.FC<{}> = () => {
title
:
'商品状态'
,
dataIndex
:
'status'
,
key
:
'status'
,
render
:
(
text
:
any
,
record
:
any
)
=>
{
let
component
:
ReactNode
=
null
if
(
record
.
status
===
1
)
component
=
(<><
span
className=
"commonStatusStop"
></
span
>
待提交审核
</>)
else
if
(
record
.
status
===
2
)
component
=
(<><
span
className=
"commonStatusModify"
></
span
>
待审核
</>)
else
if
(
record
.
status
===
3
)
component
=
(<><
span
className=
"commonStatusInvalid"
></
span
>
审核不通过
</>)
else
if
(
record
.
status
===
4
)
component
=
(<><
span
className=
"commonStatusValid"
></
span
>
审核通过
</>)
else
if
(
record
.
status
===
5
)
component
=
(<
span
style=
{
{
color
:
'#00B37A'
,
padding
:
'2px 5px'
,
background
:
'rgba(235,247,242,1)'
,
borderRadius
:
'4px'
}
}
>
已上架
</
span
>)
else
if
(
record
.
status
===
6
)
component
=
(<
span
style=
{
{
padding
:
'2px 5px'
,
background
:
'rgba(244,245,247,1)'
,
borderRadius
:
'4px'
}
}
>
已下架
</
span
>)
return
component
},
filters
:
[
{
text
:
'待提交审核'
,
value
:
1
,
},
{
text
:
'待审核'
,
value
:
2
,
},
{
text
:
'审核不通过'
,
value
:
3
,
},
{
text
:
'审核通过'
,
value
:
4
,
},
{
text
:
'已上架'
,
value
:
5
,
},
{
text
:
'已下架'
,
value
:
6
,
}
],
onFilter
:
(
value
,
record
)
=>
record
.
status
===
value
,
render
:
(
text
:
any
,
record
:
any
)
=>
<><
span
className=
"commonStatusModify"
></
span
>
{
productStatusLabel
[
text
]
}
</>
},
{
title
:
'操作'
,
...
...
@@ -270,16 +210,11 @@ const Products: React.FC<{}> = () => {
})
}
const
handleSee
=
(
record
:
any
)
=>
{
history
.
push
(
`/memberCenter/commodityAbility/commodity/products/detail?id=
${
record
.
id
}
`
)
}
const
clickModify
=
(
id
:
number
)
=>
{
history
.
push
(
`/memberCenter/commodityAbility/commodity/products/edit?id=
${
id
}
`
)
}
const
handleCancel
=
()
=>
{
console
.
log
(
'cancel'
)
setImportModal
(
false
)
}
...
...
@@ -288,7 +223,6 @@ const Products: React.FC<{}> = () => {
onChange
:
(
selectedRowKeys
:
any
,
selectedRows
:
any
)
=>
{
setSelectRow
(
selectedRows
);
setSelectedRowKeys
(
selectedRowKeys
);
console
.
log
(
`selectedRowKeys:
${
selectedRowKeys
}
`
,
'selectedRows: '
,
selectedRows
);
}
}
...
...
src/pages/commodity/products/modifyDirectChannel.tsx
View file @
dda7b95b
...
...
@@ -10,9 +10,9 @@ import {
}
from
'@ant-design/icons'
import
ReutrnEle
from
'@/components/ReturnEle'
;
import
styles
from
'./index.less'
import
{
PublicApi
}
from
'@/services/api'
;
import
{
GetLogisticsSelectListCompanyResponse
,
GetLogisticsSelectListFreightTemplateResponse
,
GetLogisticsSelectListShipperAddressResponse
}
from
'@/services/LogisticsApi'
;
import
{
validatorNumberRange
}
from
'./constant'
;
const
layout
=
{
labelCol
:
{
...
...
@@ -96,11 +96,9 @@ const ModifyDirectChannel:React.FC<{}> = () => {
PublicApi
.
getLogisticsSelectListShipperAddress
().
then
(
res
=>
{
setLogisticsAddressList
(
res
.
data
)
})
PublicApi
.
getLogisticsSelectListCompany
({
cooperateType
:
'2'
}).
then
(
res
=>
{
setLogisticsCompanyLists
(
res
.
data
)
})
PublicApi
.
getLogisticsSelectListFreightTemplate
().
then
(
res
=>
{
setLogisticsTemplateList
(
res
.
data
)
})
...
...
@@ -128,9 +126,6 @@ const ModifyDirectChannel:React.FC<{}> = () => {
idList
:
priceTableData
.
map
(
item
=>
item
.
id
)
},
{
ctlType
:
"none"
}).
then
(
res
=>
{
const
{
data
}
=
res
// let hasIds = priceTableData.map(item => item.id)
// setOriginHasIds(hasIds)
// let _data = data.filter(item => !originHasIds.includes(item.id))
setOriginTableData
(
data
)
if
(
data
.
length
>
0
)
{
structureTable
(
data
)
...
...
@@ -261,10 +256,9 @@ const ModifyDirectChannel:React.FC<{}> = () => {
const
clickSetPrice
=
(
record
:
any
)
=>
{
setIsBatchSetting
(
false
)
// 点击行操作批量置为false
console
.
log
(
record
,
'record'
)
setCurrentSetPriceRow
(
record
)
setModifyModal
(
true
)
setPriceForm
.
resetFields
()
// 先清空
setPriceForm
.
resetFields
()
if
(
Object
.
keys
(
record
[
'单价'
])[
0
]
===
'0-0'
)
{
// 状态为非阶梯价格
setLadderPrice
(
false
)
setPriceForm
.
setFieldsValue
({
ladderPrice
:
false
,
uniquePrice
:
Object
.
values
(
record
[
'单价'
])[
0
]})
...
...
@@ -308,9 +302,7 @@ const ModifyDirectChannel:React.FC<{}> = () => {
return
_row
}
else
return
item
})
// newTabeData[curretSetPriceRow['索引']] = _row
}
console
.
log
(
curretSetPriceRow
,
_row
,
_newTabeData
,
newTabeData
,
'option'
)
setPriceTableData
(
_newTabeData
)
constructedPrarams
()
})
...
...
@@ -350,12 +342,10 @@ const ModifyDirectChannel:React.FC<{}> = () => {
})
setSubmitParams
(
_data
)
// console.log(priceTableData, _priceTableData, _data, 'params')
}
const
clickDelete
=
(
record
:
any
)
=>
{
setPriceTableData
(
priceTableData
=>
[...
priceTableData
].
filter
(
item
=>
item
.
id
!=
record
.
id
))
// setSelectedSpecRowKeys(selectedSpecRowKeys => [...selectedSpecRowKeys].filter(item => item != record.id))
if
(
!
flagRef
.
current
){
PublicApi
.
postProductChannelCommodityDeleteChannelCommodityPrice
({
id
:
record
.
id
},{
ctlType
:
'none'
})
}
...
...
@@ -367,34 +357,12 @@ const ModifyDirectChannel:React.FC<{}> = () => {
}
const
clickBatchSetPrice
=
()
=>
{
setPriceForm
.
resetFields
()
// 先清空
setIsBatchSetting
(
true
)
// 点击置为true
setPriceForm
.
resetFields
()
setIsBatchSetting
(
true
)
setModifyModal
(
true
)
setLadderPrice
(
false
)
}
// 校验阶梯范围
const
validatorNumberRange
=
(
rule
,
value
,
callback
)
=>
{
try
{
if
(
Array
.
isArray
(
value
)){
let
range
=
value
.
map
(
item
=>
{
if
(
item
)
return
Object
.
values
(
item
.
numberRange
)
}).
reduce
(
function
(
a
,
b
)
{
return
a
.
concat
(
b
);
},
[]
)
let
result
=
range
.
reduce
((
a
,
b
)
=>
{
if
(
a
<
b
)
return
b
})
if
(
!
result
)
throw
new
Error
(
'请正确输入阶梯数量范围'
);
callback
()
}
}
catch
(
err
)
{
callback
(
err
)
}
}
const
onSave
=
async
()
=>
{
setIsDisabledSave
(
true
)
let
logistics
=
await
logisticsForm
.
validateFields
()
...
...
src/pages/commodity/products/viewDirectChannel.tsx
View file @
dda7b95b
...
...
@@ -3,9 +3,9 @@ import { history } from 'umi'
import
{
Card
,
Space
,
Row
,
Col
,
Descriptions
,
Table
,
Avatar
}
from
'antd'
import
{
PageHeaderWrapper
}
from
'@ant-design/pro-layout'
import
ReutrnEle
from
'@/components/ReturnEle'
import
styles
from
"./index.less"
import
{
GlobalConfig
}
from
'@/global/config'
import
{
PublicApi
}
from
'@/services/api'
import
{
carriageTypeLabel
,
deliveryTypeLabel
,
productStatusLabel
}
from
'./constant'
const
ViewDriectChannel
:
React
.
FC
<
{}
>
=
()
=>
{
const
[
channelDetails
,
setChannelDetails
]
=
useState
<
any
>
()
...
...
@@ -111,26 +111,14 @@ const ViewDriectChannel: React.FC<{}> = () => {
"单价"
:
item
.
unitPrice
})
})
console
.
log
(
col
,
'col'
,
_tableData
)
setPriceTableData
(
_tableData
)
}
}
const
renderStatus
=
(
status
:
any
)
=>
{
if
(
status
===
5
)
return
<
span
className=
{
styles
.
pruductStatus
}
>
已上架
</
span
>
if
(
status
===
6
)
return
<
span
style=
{
{
padding
:
'2px 5px'
,
background
:
'rgba(244,245,247,1)'
,
borderRadius
:
'4px'
}
}
>
已下架
</
span
>
if
(
status
===
7
)
return
<
span
style=
{
{
color
:
'#E63F3B'
,
padding
:
'2px 5px'
,
background
:
'rgba(255,235,230,1)'
,
borderRadius
:
'4px'
}
}
>
未上架
</
span
>
else
return
null
}
const
content
=
<>
<
Descriptions
colon=
{
true
}
style=
{
{
marginTop
:
50
}
}
>
{
renderStatus
(
channelDetails
?.
status
)
&&
<
Descriptions
.
Item
label=
"商品状态"
>
{
renderStatus
(
channelDetails
?.
status
)
}
</
Descriptions
.
Item
>
channelDetails
?.
status
&&
<
Descriptions
.
Item
label=
"商品状态"
>
{
productStatusLabel
[
channelDetails
?.
status
]
}
</
Descriptions
.
Item
>
}
{
channelDetails
?.
channelCommodity
?.
source
===
1
&&
<
Descriptions
.
Item
label=
"上级渠道"
>
{
channelDetails
?.
channelCommodity
?.
parentMemberName
}
</
Descriptions
.
Item
>
...
...
@@ -156,18 +144,6 @@ const ViewDriectChannel: React.FC<{}> = () => {
</
Descriptions
>
</>
const
renderDeliveryType
=
(
type
:
number
)
=>
{
if
(
type
===
1
)
return
'物流(默认)'
else
if
(
type
===
2
)
return
'自提'
else
if
(
type
===
3
)
return
'无需配送'
else
return
null
}
const
renderCarriageType
=
(
type
:
number
)
=>
{
if
(
type
===
1
)
return
'卖家承担运费(默认)'
if
(
type
===
2
)
return
'买家承担运费'
}
return
(
<
PageHeaderWrapper
onBack=
{
()
=>
history
.
goBack
()
}
...
...
@@ -229,24 +205,24 @@ const ViewDriectChannel: React.FC<{}> = () => {
<
Row
>
<
Col
span=
{
24
}
>
{
renderDeliveryType
(
channelDetails
?.
logistics
?.
deliveryType
)
&&
channelDetails
?.
logistics
?.
deliveryType
&&
<
Row
>
<
Col
span=
{
4
}
>
<
p
>
配送方式:
</
p
>
</
Col
>
<
Col
span=
{
20
}
>
<
p
>
{
renderDeliveryType
(
channelDetails
?.
logistics
?.
deliveryType
)
}
</
p
>
<
p
>
{
deliveryTypeLabel
[
channelDetails
?.
logistics
?.
deliveryType
]
}
</
p
>
</
Col
>
</
Row
>
}
{
renderCarriageType
(
channelDetails
?.
logistics
?.
carriageType
)
&&
channelDetails
?.
logistics
?.
carriageType
&&
<
Row
>
<
Col
span=
{
4
}
>
<
p
>
运送方式:
</
p
>
</
Col
>
<
Col
span=
{
20
}
>
<
p
>
{
renderCarriageType
(
channelDetails
?.
logistics
?.
carriageType
)
}
</
p
>
<
p
>
{
carriageTypeLabel
[
channelDetails
?.
logistics
?.
carriageType
]
}
</
p
>
</
Col
>
</
Row
>
}
...
...
src/pages/commodity/products/viewProducts.tsx
View file @
dda7b95b
import
React
,
{
useState
,
useRef
,
ReactNode
,
useEffect
}
from
'react'
import
React
,
{
useState
,
ReactNode
,
useEffect
}
from
'react'
import
{
history
}
from
'umi'
import
{
Button
,
Steps
,
Card
,
Space
,
Tooltip
,
Row
,
Col
,
Descriptions
,
Table
,
Tabs
,
Tag
,
Divider
}
from
'antd'
import
{
Steps
,
Card
,
Space
,
Tooltip
,
Row
,
Col
,
Descriptions
,
Table
,
Tabs
,
Tag
,
Divider
}
from
'antd'
import
{
PageHeaderWrapper
}
from
'@ant-design/pro-layout'
import
{
QuestionCircleOutlined
,
FormOutlined
,
UserOutlined
,
CaretDownOutlined
,
CaretUpOutlined
}
from
'@ant-design/icons'
import
{
ColumnType
}
from
'antd/lib/table/interface'
import
cx
from
'classnames'
import
ReutrnEle
from
'@/components/ReturnEle'
import
styles
from
"./index.less"
...
...
@@ -17,18 +14,15 @@ import { PublicApi } from '@/services/api'
import
{
GetProductCommodityGetCommodityResponse
,
GetProductCommodityGetCommodityCheckRecordResponse
,
GetProductCommodityGetShopResponse
}
from
'@/services/ProductApi'
import
moment
from
'moment'
import
{
isGetAccessor
}
from
'typescript'
import
{
carriageTypeLabel
,
columns
,
customerCategoryTypeLabel
,
deliveryTypeLabel
,
priceTypeLabel
,
productStatusLabel
}
from
'./constant'
interface
IAttributeByValue
{
groupName
:
string
;
id
?:
number
;
name
:
string
;
customerAttributeValue
?:
{
id
:
number
;
value
:
string
;
id
:
number
;
value
:
string
;
}
}
...
...
@@ -36,7 +30,7 @@ const { Step } = Steps;
const
{
TabPane
}
=
Tabs
;
const
viewProducts
:
React
.
FC
<
{}
>
=
()
=>
{
const
[
productDetail
,
setPorductDetail
]
=
useState
<
GetProductCommodityGetCommodityResponse
>
()
const
[
productDetail
,
setPorductDetail
]
=
useState
<
any
>
()
const
[
checkRecord
,
setCheckRecord
]
=
useState
<
GetProductCommodityGetCommodityCheckRecordResponse
>
()
const
[
fixStep
,
setFixStep
]
=
useState
(
0
)
const
[
dataByTab
,
setDataByTab
]
=
useState
<
any
[]
>
([])
...
...
@@ -56,16 +50,10 @@ const viewProducts: React.FC<{}> = () => {
PublicApi
.
getProductCommodityGetCommodity
({
id
:
id
}).
then
(
res
=>
{
const
{
code
,
data
}
=
res
if
(
code
===
1000
){
// console.log(data, 'data')
setPorductDetail
(
data
)
renderDataByTab
(
data
)
constructTableData
(
data
,
data
.
unitPriceAndPicList
)
if
(
data
.
status
===
1
)
setFixStep
(
0
)
else
if
(
data
.
status
===
2
)
setFixStep
(
1
)
else
if
(
data
.
status
===
3
)
setFixStep
(
2
)
else
if
(
data
.
status
===
4
)
setFixStep
(
2
)
else
if
(
data
.
status
===
5
)
setFixStep
(
3
)
else
if
(
data
.
status
===
6
)
setFixStep
(
3
)
setFixStep
(
data
.
status
-
1
)
}
})
PublicApi
.
getProductCommodityGetCommodityCheckRecord
({
commodityId
:
id
}).
then
(
res
=>
{
...
...
@@ -93,64 +81,10 @@ const viewProducts: React.FC<{}> = () => {
})
},
[
productDetail
])
const
columns
:
ColumnType
<
any
>
[]
=
[
{
title
:
'序号'
,
dataIndex
:
'memberRoleId'
,
key
:
'memberRoleId'
,
render
:
(
t
,
c
,
i
)
=>
i
+
1
},
{
title
:
'角色'
,
dataIndex
:
'memberRoleName'
,
key
:
'memberRoleName'
,
},
{
title
:
'状态'
,
dataIndex
:
'status'
,
key
:
'status'
,
render
:
(
text
:
any
,
record
:
any
)
=>
{
let
component
:
ReactNode
=
null
if
(
record
.
status
===
4
)
component
=
(<><
span
className=
"commonStatusValid"
></
span
>
审核通过
</>)
else
if
(
record
.
status
===
1
)
component
=
(<><
span
className=
"commonStatusInvalid"
></
span
>
待提交审核
</>)
else
if
(
record
.
status
===
2
)
component
=
(<><
span
className=
"commonStatusModify"
></
span
>
待审核
</>)
else
if
(
record
.
status
===
3
)
component
=
(<><
span
className=
"commonStatusStop"
></
span
>
审核不通过
</>)
return
component
}
},
{
title
:
'操作'
,
dataIndex
:
'operation'
,
key
:
'operation'
,
render
:
(
text
:
any
,
record
:
any
)
=>
{
if
(
record
.
operation
===
1
)
return
'提交审核'
else
if
(
record
.
operation
===
2
)
return
'修改商品'
else
if
(
record
.
operation
===
3
)
return
'审核商品'
}
},
{
title
:
'操作时间'
,
dataIndex
:
'createTime'
,
key
:
'createTime'
,
render
:
(
text
:
any
)
=>
moment
(
text
).
format
(
"YYYY-MM-DD HH:mm:ss"
)
},
{
title
:
'意见'
,
dataIndex
:
'checkRemark'
,
key
:
'checkRemark'
,
},
];
/* 商品属性显示 */
/*
*
商品属性显示 */
//以属性组和属性名称归档的数据
const
renderDataByTab
=
(
data
:
GetProductCommodityGetCommodityResponse
)
=>
{
const
renderDataByTab
=
(
data
:
any
)
=>
{
let
archiveByAttributeGroup
=
data
.
commodityAttributeList
.
map
(
_
=>
{
let
obj
:
any
=
{...
_
.
customerAttribute
};
obj
.
customerAttributeValueList
=
_
.
customerAttributeValueList
;
...
...
@@ -159,10 +93,9 @@ const viewProducts: React.FC<{}> = () => {
let
dataByTab
=
groupBy
(
archiveByAttributeGroup
,
'groupName'
)
setDataByTab
(
Object
.
values
(
dataByTab
))
setDataByTabTitle
(
Object
.
keys
(
dataByTab
))
// console.log(dataByTab,'dataByData')
}
/* 按属性归类 */
/*
*
按属性归类 */
const
groupBy
=
(
objectArray
:
any
[],
property
:
string
)
=>
{
return
objectArray
.
reduce
(
function
(
acc
:
{
[
x
:
string
]:
any
[]
},
obj
:
{
[
x
:
string
]:
any
})
{
var
key
=
obj
[
property
];
...
...
@@ -174,89 +107,34 @@ const viewProducts: React.FC<{}> = () => {
},
{});
}
// 1 审核状态 2 商品状态
const
renderStatus
=
(
status
:
number
,
type
:
number
)
=>
{
let
component
:
ReactNode
=
null
if
(
type
===
1
){
if
(
status
===
1
)
component
=
(<><
span
className=
"commonStatusStop"
></
span
>
待提交审核
</>)
else
if
(
status
===
2
)
component
=
(<><
span
className=
"commonStatusModify"
></
span
>
待审核
</>)
else
if
(
status
===
4
)
component
=
(<><
span
className=
"commonStatusValid"
></
span
>
审核通过
</>)
else
if
(
status
===
3
)
component
=
(<><
span
className=
"commonStatusInvalid"
></
span
>
审核不通过
</>)
else
component
=
null
}
else
if
(
status
===
5
)
component
=
(<
span
style=
{
{
color
:
'#00B37A'
,
padding
:
'2px 5px'
,
background
:
'rgba(235,247,242,1)'
,
borderRadius
:
'4px'
}
}
>
已上架
</
span
>)
else
if
(
status
===
6
)
component
=
(<
span
style=
{
{
padding
:
'2px 5px'
,
background
:
'rgba(244,245,247,1)'
,
borderRadius
:
'4px'
}
}
>
已下架
</
span
>)
else
component
=
null
return
component
}
/* 品类类型&商品类型 */
//1-实物商品、2-虚拟商品、3-服务商品
const
renderCustomerCategoryType
=
(
type
:
number
)
=>
{
if
(
type
===
1
)
return
'实物商品'
if
(
type
===
2
)
return
'虚拟商品'
if
(
type
===
3
)
return
'服务商品'
}
/* Description */
const
content
=
<>
<
Descriptions
colon=
{
true
}
style=
{
{
paddingLeft
:
128
}
}
>
<
Descriptions
.
Item
label=
"商品品牌"
>
{
productDetail
?.
brand
?.
name
}
</
Descriptions
.
Item
>
<
Descriptions
.
Item
label=
"商品品类"
>
{
productDetail
?.
customerCategory
?.
fullName
}
</
Descriptions
.
Item
>
{
/* {
productDetail?.commodityShopList?.length>0 &&
<Descriptions.Item label="上架商城">
{
productDetail.commodityShopList.map((item, index)=><span key={index}><img width="24" height="24" style={{borderRadius: '50%', marginRight: 4}} src={item.logoUrl} title={item.name} alt={item.name}/></span>)
}
</Descriptions.Item>
} */
}
{
renderStatus
(
productDetail
?.
status
,
1
)
&&
<
Descriptions
.
Item
label=
"审核状态"
>
{
renderStatus
(
productDetail
?.
status
,
1
)
}
</
Descriptions
.
Item
>
}
{
renderStatus
(
productDetail
?.
status
,
2
)
&&
<
Descriptions
.
Item
label=
"商品状态"
>
{
renderStatus
(
productDetail
?.
status
,
2
)
}
</
Descriptions
.
Item
>
}
<
Descriptions
.
Item
label=
"商品类型"
><
span
className=
"commonStatusValid"
></
span
>
{
renderCustomerCategoryType
(
productDetail
?.
customerCategory
?.
type
)
}
</
Descriptions
.
Item
>
<
Descriptions
.
Item
label=
"商品状态"
><
span
className=
"commonStatusModify"
></
span
>
{
productStatusLabel
[
productDetail
?.
status
]
}
</
Descriptions
.
Item
>
<
Descriptions
.
Item
label=
"商品类型"
><
span
className=
"commonStatusValid"
></
span
>
{
customerCategoryTypeLabel
[
productDetail
?.
customerCategory
?.
type
]
}
</
Descriptions
.
Item
>
</
Descriptions
>
</>
const
renderPriceType
=
(
type
:
number
)
=>
{
if
(
type
===
1
)
return
'现货价格'
if
(
type
===
2
)
return
'价格需要询价'
if
(
type
===
3
)
return
'积分兑换商品'
}
const
renderDeliveryType
=
(
type
:
number
)
=>
{
if
(
type
===
1
)
return
'物流(默认)'
else
if
(
type
===
2
)
return
'自提'
else
if
(
type
===
3
)
return
'无需配送'
else
return
null
}
const
renderCarriageType
=
(
type
:
number
)
=>
{
if
(
type
===
1
)
return
'卖家承担运费(默认)'
if
(
type
===
2
)
return
'买家承担运费'
}
/* 构建表格数据 */
/** 构建"单价设置"table数据 */
const
constructTableData
=
(
product
:
any
,
unitPriceAndPicList
:
GetProductCommodityGetCommodityResponse
[
"unitPriceAndPicList"
])
=>
{
// 构建列
// console.log(product, unitPriceAndPicList, '构建列')
// 初始化columns
let
_col
=
[];
let
col_productName
=
{
title
:
'商品名称'
,
dataIndex
:
'商品名称'
,
key
:
'索引'
}
let
col_productName
=
{
title
:
'商品名称'
,
dataIndex
:
'商品名称'
,
key
:
'索引'
}
_col
.
push
(
col_productName
)
// 提取一项 确定货品列和属性列
// 提取商品单价和图片中一项 生成货品列和属性列
let
attributeByValue
:
IAttributeByValue
[]
=
[]
if
(
unitPriceAndPicList
.
length
>
0
){
if
(
unitPriceAndPicList
.
length
>
0
)
{
let
item
=
unitPriceAndPicList
[
0
]
if
(
item
.
attributeAndValueList
.
length
>
0
)
{
// 存在多个属性
if
(
item
.
attributeAndValueList
.
length
>
0
)
{
// 存在多个属性
attributeByValue
=
item
.
attributeAndValueList
.
map
(
_item
=>
{
let
_obj
=
{
...
_item
.
customerAttribute
}
let
_obj
=
{
...
_item
.
customerAttribute
}
_obj
[
'customerAttributeValue'
]
=
_item
.
customerAttributeValue
return
_obj
})
...
...
@@ -277,7 +155,7 @@ const viewProducts: React.FC<{}> = () => {
}
}
_col
.
push
({
title
:
product
?.
priceType
===
3
?
'所需积分'
:
'单价(元)'
,
title
:
product
?.
priceType
===
3
?
'所需积分'
:
'单价(元)'
,
dataIndex
:
'单价'
,
key
:
'单价'
,
render
:
(
text
,
record
)
=>
{
...
...
@@ -290,7 +168,7 @@ const viewProducts: React.FC<{}> = () => {
setTableColumns
(
_col
)
// 生成
表格
数据
// 生成
dataSource
数据
let
_tableData
:
any
[]
=
[]
let
_attributeArrByImageRender
:
any
[]
=
[]
let
_imageArrByImageRender
:
any
[]
=
[]
...
...
@@ -315,16 +193,11 @@ const viewProducts: React.FC<{}> = () => {
}
return
temp
})
// console.log(_tableData, _attributeArrByImageRender, '_tableData')
setTableRenderDatas
(
_tableData
)
setAttributeArrByImageRender
(
_attributeArrByImageRender
)
setImageArrByImageRender
(
_imageArrByImageRender
)
}
const
clickModify
=
()
=>
{
history
.
push
(
`/memberCenter/commodityAbility/commodity/products/edit?id=
${
productDetail
.
id
}
`
)
}
const
toogleMore
=
(
str
:
string
)
=>
{
if
(
str
===
'area'
){
setShowMore
({
...
...
@@ -366,11 +239,6 @@ const viewProducts: React.FC<{}> = () => {
onBack=
{
()
=>
history
.
goBack
()
}
backIcon=
{
<
ReutrnEle
logoSrc=
{
productDetail
?.
unitPriceAndPicList
[
0
]?.
commodityPic
[
0
]
}
/>
}
content=
{
content
}
// extra={[
// <Button icon={<FormOutlined />} key="1" type="primary" disabled={productDetail?.status !== 3 && productDetail?.status !== 1 } onClick={clickModify}>
// 修改
// </Button>,
// ]}
>
<
Space
direction=
"vertical"
style=
{
{
width
:
'100%'
}
}
>
<
Card
headStyle=
{
{
borderBottom
:
'none'
}
}
title=
"流程进度"
>
...
...
@@ -438,24 +306,24 @@ const viewProducts: React.FC<{}> = () => {
<
Col
span=
{
8
}
>
<
Card
headStyle=
{
{
borderBottom
:
'none'
}
}
title=
"物流信息"
style=
{
{
height
:
'100%'
}
}
>
{
renderDeliveryType
(
productDetail
?.
logistics
?.
deliveryType
)
&&
productDetail
?.
logistics
?.
deliveryType
&&
<
Row
>
<
Col
span=
{
4
}
>
<
p
>
配送方式:
</
p
>
</
Col
>
<
Col
span=
{
20
}
>
<
p
>
{
renderDeliveryType
(
productDetail
?.
logistics
?.
deliveryType
)
}
</
p
>
<
p
>
{
deliveryTypeLabel
[
productDetail
?.
logistics
?.
deliveryType
]
}
</
p
>
</
Col
>
</
Row
>
}
{
renderCarriageType
(
productDetail
?.
logistics
?.
carriageType
)
&&
productDetail
?.
logistics
?.
carriageType
&&
<
Row
>
<
Col
span=
{
4
}
>
<
p
>
运送方式:
</
p
>
</
Col
>
<
Col
span=
{
20
}
>
<
p
>
{
renderCarriageType
(
productDetail
?.
logistics
?.
carriageType
)
}
</
p
>
<
p
>
{
carriageTypeLabel
[
productDetail
?.
logistics
?.
carriageType
]
}
</
p
>
</
Col
>
</
Row
>
}
...
...
@@ -611,7 +479,7 @@ const viewProducts: React.FC<{}> = () => {
<
Col
span=
{
6
}
>
<
p
>
{
renderPriceType
(
productDetail
?.
priceType
)
priceTypeLabel
[
productDetail
?.
priceType
]
}
</
p
>
</
Col
>
...
...
@@ -632,7 +500,6 @@ const viewProducts: React.FC<{}> = () => {
<
Space
direction=
"vertical"
style=
{
{
width
:
'100%'
}
}
>
<
Card
headStyle=
{
{
borderBottom
:
'none'
}
}
title=
"商品图片"
>
{
// productDetail?.unitPriceAndPicList[0].attributeAndValueList.length === 0 ? <>
productDetail
?.
isAllAttributePic
?
<>
<
Row
>
<
Col
span=
{
3
}
>
...
...
src/pages/transaction/purchaseOrder/orderCollect/components/productModalTable/index.tsx
View file @
dda7b95b
...
...
@@ -74,7 +74,6 @@ const orderProductShopTypeMaps = {
export
const
AddressPop
=
(
props
)
=>
{
const
{
pickInfo
=
null
,
children
}
=
props
console
.
log
(
pickInfo
)
return
pickInfo
&&
pickInfo
.
deliverType
===
2
?
<
Space
>
<
EnvironmentOutlined
style=
{
{
marginRight
:
8
}
}
/>
<
Popover
content=
{
...
...
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