Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
A
admin
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
iuav
admin
Commits
7cece82e
提交
7cece82e
authored
8月 08, 2023
作者:
龚洪江
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
功能:商城商品sku修改
上级
59067fe9
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
533 行增加
和
118 行删除
+533
-118
goodsType.ts
src/api/interface/goodsType.ts
+10
-1
index.tsx
...Goods/goodsAddOrEditOrDetail/components/skuInfo/index.tsx
+369
-101
old-index.tsx
...s/goodsAddOrEditOrDetail/components/skuInfo/old-index.tsx
+135
-0
index.tsx
...ges/mallManage/mallGoods/goodsAddOrEditOrDetail/index.tsx
+19
-16
没有找到文件。
src/api/interface/goodsType.ts
浏览文件 @
7cece82e
...
...
@@ -86,7 +86,7 @@ export type editGoodsType = InterFunction<
export
type
detailGoodsType
=
InterFunction
<
{
goodsInfoId
:
number
;
type
:
number
;
leaseTerm
?:
number
},
BaseInfoType
&
{
goodsSpec
:
specEntity
[];
goodsSpec
?
:
specEntity
[];
goodsDetail
:
{
goodsDesc
:
string
;
productDesc
:
string
;
content
:
string
};
otherService
:
{
id
:
number
;
saleServiceName
:
string
;
saleServiceId
:
number
}[];
goodsVideoId
:
number
;
...
...
@@ -143,6 +143,15 @@ export type addMallGoodsType = InterFunction<
}[];
shelfStatus
:
number
;
tradeName
:
string
;
priceStock
:
{
channelPrice
:
number
;
id
?:
number
;
productSpec
:
string
;
salePrice
:
number
;
skuImage
:
string
;
skuNo
:
string
;
stock
:
number
;
}[];
},
any
>
;
...
...
src/pages/mallManage/mallGoods/goodsAddOrEditOrDetail/components/skuInfo/index.tsx
浏览文件 @
7cece82e
import
{
Button
,
Popconfirm
,
Table
,
Tag
}
from
'antd'
;
import
{
PlusOutlined
}
from
'@ant-design/icons'
;
import
{
ColumnsType
}
from
'antd/es/table'
;
import
{
FC
,
useState
}
from
'react'
;
import
{
InterDataType
,
InterReqType
,
PaginationProps
}
from
'~/api/interface'
;
import
{
addMallGoodsType
,
skuUnitType
}
from
'~/api/interface/goodsType'
;
import
{
Button
,
Col
,
Form
,
Input
,
Row
,
Select
,
Table
,
Tag
}
from
'antd'
;
import
{
DeleteOutlined
,
PlusOutlined
}
from
'@ant-design/icons'
;
import
{
useState
}
from
'react'
;
import
{
isEmptyBol
,
regPriceNumber
}
from
'~/utils/validateUtils'
;
import
EditableCell
from
'~/components/EditableCell'
;
import
{
InterReqType
}
from
'~/api/interface'
;
import
{
addMallGoodsType
}
from
'~/api/interface/goodsType'
;
//商品sku规格类型
type
goodsSpecType
=
Exclude
<
InterReqType
<
addMallGoodsType
>
,
undefined
>
[
'goodsSpecList'
][
0
];
//单位返回类型
type
unitType
=
InterDataType
<
skuUnitType
>
;
interface
selfProps
{
addOrEditSkuClick
:
()
=>
void
;
skuTableData
:
goodsSpecType
[];
skuUnitList
:
unitType
;
deleteSkuClick
:
(
record
:
goodsSpecType
)
=>
void
;
editSkuClick
:
(
record
:
goodsSpecType
)
=>
void
;
}
type
EditableTableProps
=
Parameters
<
typeof
Table
>
[
0
];
type
ColumnTypes
=
Exclude
<
EditableTableProps
[
'columns'
],
undefined
>
;
const
SkuInfo
:
FC
<
selfProps
>
=
({
addOrEditSkuClick
,
skuTableData
,
skuUnitList
,
deleteSkuClick
,
editSkuClick
,
})
=>
{
const
tableColumns
:
ColumnsType
<
goodsSpecType
>
=
[
//规格表单数据类型
type
specificationFormListType
=
{
optionList
:
{
label
:
string
;
value
:
string
}[];
id
:
number
;
name
:
string
;
addSpecificationValueShow
:
boolean
;
specificationValueList
:
{
name
:
string
;
id
:
number
;
specificationName
:
string
}[];
};
//规格表格类型
type
skuTableType
=
Exclude
<
InterReqType
<
addMallGoodsType
>
,
undefined
>
[
'priceStock'
];
const
SkuInfo
=
()
=>
{
const
[
form
]
=
Form
.
useForm
<
{
[
x
:
string
]:
string
}
>
();
//表格数据
const
[
tableData
,
setTableData
]
=
useState
<
skuTableType
>
([]);
//表格-列
const
salePriceValidator
=
(
_rules
:
any
,
value
:
number
)
=>
{
if
(
!
isEmptyBol
(
value
))
{
if
(
regPriceNumber
(
value
.
toString
()))
{
if
(
value
>
99999999
||
value
<
0
)
{
return
Promise
.
reject
(
new
Error
(
'价格最大为99999999且大于0'
));
}
return
Promise
.
resolve
();
}
else
{
return
Promise
.
reject
(
new
Error
(
'为整数且最多保留两位小数'
));
}
}
else
{
return
Promise
.
reject
(
new
Error
(
'请输入销售价'
));
}
};
//渠道正则价格校验
const
channelPriceValidator
=
(
_rules
:
any
,
value
:
number
)
=>
{
if
(
!
isEmptyBol
(
value
))
{
if
(
regPriceNumber
(
value
.
toString
()))
{
if
(
value
>
99999999
||
value
<
0
)
{
return
Promise
.
reject
(
new
Error
(
'价格最大为99999999且大于0'
));
}
return
Promise
.
resolve
();
}
else
{
return
Promise
.
reject
(
new
Error
(
'为整数且最多保留两位小数'
));
}
}
else
{
return
Promise
.
resolve
();
}
};
//库存正则校验
const
stockPriceValidator
=
(
_rules
:
any
,
value
:
number
)
=>
{
if
(
!
isEmptyBol
(
value
))
{
if
(
/^
[
+
]{0,1}(\d
+
)
$/
.
test
(
value
.
toString
()))
{
if
(
value
>
99999999
||
value
<
0
)
{
return
Promise
.
reject
(
new
Error
(
'库存最大为99999999且大于0'
));
}
return
Promise
.
resolve
();
}
else
{
return
Promise
.
reject
(
new
Error
(
'请输入正整数'
));
}
}
else
{
return
Promise
.
resolve
();
}
};
const
defaultColumns
:
(
ColumnTypes
[
number
]
&
{
editable
?:
boolean
;
dataIndex
?:
string
;
inputType
?:
string
;
radioOption
?:
{
name
:
string
;
id
:
number
}[];
rules
?:
any
;
maxLength
?:
number
;
})[]
=
[
{
title
:
'
序号
'
,
title
:
'
商品规格
'
,
align
:
'center'
,
render
:
(
_text
:
string
,
_record
,
index
:
number
)
=>
index
+
1
,
},
{
title
:
'
规格名称
'
,
title
:
'
图片
'
,
align
:
'center'
,
dataIndex
:
'specName'
,
editable
:
true
,
dataIndex
:
'skuImage'
,
inputType
:
'uploader'
,
},
{
title
:
'
选择方式
'
,
title
:
'
料号
'
,
align
:
'center'
,
dataIndex
:
'chooseType'
,
render
:
(
text
:
number
)
=>
(
text
?
'多选'
:
'单选'
),
editable
:
true
,
dataIndex
:
'skuNo'
,
maxLength
:
30
,
},
{
title
:
'
是否必选
'
,
title
:
'
销售价
'
,
align
:
'center'
,
dataIndex
:
'must'
,
render
:
(
text
:
number
)
=>
(
text
?
'必选'
:
'非必选'
),
editable
:
true
,
dataIndex
:
'salePrice'
,
rules
:
[{
required
:
true
,
validator
:
salePriceValidator
}],
inputType
:
'number'
,
},
{
title
:
'规格单位'
,
title
:
'渠道价'
,
editable
:
true
,
align
:
'center'
,
dataIndex
:
'skuUnitId'
,
render
:
(
text
:
number
)
=>
skuUnitList
.
find
((
v
)
=>
v
.
id
===
text
)?.
unitName
||
''
,
dataIndex
:
'channelPrice'
,
rules
:
[{
required
:
false
,
validator
:
channelPriceValidator
}],
inputType
:
'number'
,
},
{
title
:
'规格值'
,
title
:
'库存'
,
editable
:
true
,
align
:
'center'
,
dataIndex
:
'goodsSpecValuesList'
,
render
:
(
text
:
goodsSpecType
[
'goodsSpecValuesList'
])
=>
text
.
map
((
v
)
=>
(
<
Tag
key=
{
v
.
id
}
>
{
v
.
specValueName
}
{
v
.
partNo
?
`(${v.partNo})`
:
''
}
</
Tag
>
)),
dataIndex
:
'stock'
,
rules
:
[{
required
:
false
,
validator
:
stockPriceValidator
}],
inputType
:
'number'
,
},
{
title
:
'操作'
,
align
:
'center'
,
render
:
(
_text
:
string
,
record
)
=>
(
<>
<
Button
type=
'link'
onClick=
{
()
=>
editSkuClick
(
record
)
}
>
编辑
</
Button
>
<
Popconfirm
placement=
'topLeft'
title=
{
'删除规格'
}
description=
{
'确认删除该规格吗?'
}
onConfirm=
{
()
=>
deleteSkuClick
(
record
)
}
okText=
'确定'
cancelText=
'取消'
>
<
Button
type=
'link'
danger
>
删除
</
Button
>
</
Popconfirm
>
</>
),
width
:
'10%'
,
render
:
(
_text
:
string
,
_record
:
any
,
index
:
number
)
=>
<></>,
},
];
const
[
pagination
,
setPagination
]
=
useState
<
PaginationProps
>
({
pageNo
:
1
,
pageSize
:
10
,
const
columns
=
defaultColumns
.
map
((
col
)
=>
{
if
(
!
col
.
editable
)
{
return
col
;
}
return
{
...
col
,
onCell
:
(
record
:
any
)
=>
({
record
,
dataIndex
:
col
.
dataIndex
,
title
:
col
.
title
,
editing
:
col
.
editable
,
radioOption
:
col
.
radioOption
,
inputType
:
col
.
inputType
,
uploadSuccess
:
col
.
inputType
===
'uploader'
?
uploadSuccess
:
undefined
,
rules
:
col
.
rules
,
}),
};
});
//分页
const
paginationChange
=
(
pageNo
:
number
,
pageSize
:
number
)
=>
{
pagination
.
pageNo
=
pageNo
;
pagination
.
pageSize
=
pageSize
;
setPagination
({
...
pagination
});
//规格表单数组
const
[
specificationFormList
,
setSpecificationFormList
]
=
useState
<
specificationFormListType
[]
>
([
{
id
:
Math
.
random
(),
name
:
`specification1`
,
optionList
:
[],
specificationValueList
:
[],
addSpecificationValueShow
:
false
,
},
]);
//新增规格项目
const
addSpecificationClick
=
()
=>
{
setSpecificationFormList
([
...
specificationFormList
,
{
id
:
Math
.
random
(),
name
:
`specification
${
specificationFormList
.
length
+
1
}
`
,
optionList
:
[],
specificationValueList
:
[],
addSpecificationValueShow
:
false
,
},
]);
};
// 删除规格项目
const
deleteSpecificationClick
=
(
index
:
number
)
=>
{
specificationFormList
.
splice
(
index
,
1
);
combineSpecificationValue
();
setSpecificationFormList
([...
specificationFormList
]);
};
//规格项名称输入完成
const
specificationPressEnter
=
(
e
:
any
,
index
:
number
)
=>
{
specificationFormList
[
index
].
optionList
=
[{
label
:
e
.
target
.
value
,
value
:
e
.
target
.
value
}];
const
obj
=
Object
.
create
(
null
);
obj
[
specificationFormList
[
index
].
name
]
=
e
.
target
.
value
;
form
.
setFieldsValue
(
obj
);
setSpecificationFormList
([...
specificationFormList
]);
};
//规格值添加
const
addSpecificationValueClick
=
(
index
:
number
)
=>
{
specificationFormList
[
index
].
addSpecificationValueShow
=
true
;
setSpecificationFormList
([...
specificationFormList
]);
};
const
specificationValuePressEnter
=
(
e
:
any
,
index
:
number
)
=>
{
specificationFormList
[
index
].
specificationValueList
.
push
({
id
:
Math
.
random
(),
name
:
e
.
target
.
value
,
specificationName
:
specificationFormList
[
index
].
optionList
[
0
].
value
,
});
combineSpecificationValue
();
setSpecificationFormList
(
specificationFormList
);
specificationValueCancel
(
index
);
};
//规格值添加-取消
const
specificationValueCancel
=
(
index
:
number
)
=>
{
specificationFormList
[
index
].
addSpecificationValueShow
=
false
;
setSpecificationFormList
([...
specificationFormList
]);
};
//规格值-删除
const
specificationValueDelete
=
(
i
:
number
,
j
:
number
)
=>
{
specificationFormList
[
i
].
specificationValueList
.
splice
(
j
,
1
);
combineSpecificationValue
();
setSpecificationFormList
([...
specificationFormList
]);
};
//组合数据
const
combineSpecificationValue
=
()
=>
{
let
combineSpecificationList
:
any
=
[];
const
combineList
=
specificationFormList
.
reduce
((
pre
:
any
,
cur
,
currentIndex
)
=>
{
// 首次组合两个数据
if
(
currentIndex
===
0
&&
specificationFormList
.
length
>
1
)
{
combineSpecificationList
=
combineEvent
(
cur
.
specificationValueList
,
specificationFormList
[
currentIndex
+
1
].
specificationValueList
,
);
//二维数组拆分为对象
combineSpecificationList
=
getCombineObj
(
combineSpecificationList
);
// 两个数据以上的组合
}
else
if
(
currentIndex
<
specificationFormList
.
length
-
1
)
{
// 上一次的组合作为下一次组合的参数
combineSpecificationList
=
combineEvent
(
combineSpecificationList
,
specificationFormList
[
currentIndex
+
1
].
specificationValueList
,
);
//二维数组拆分为对象
combineSpecificationList
=
getCombineObj
(
combineSpecificationList
);
}
pre
=
combineSpecificationList
;
return
pre
;
},
[]);
console
.
log
(
'组合数据-->'
,
combineList
);
const
tableDataList
=
combineList
.
reduce
((
pre
:
any
,
cur
:
any
)
=>
{
pre
.
push
(
cur
.
reduce
((
a
:
any
,
b
:
any
,
currentIndex
:
number
)
=>
{
a
[
'name'
+
(
currentIndex
+
1
)]
=
b
.
name
;
a
[
'specificationName'
+
(
currentIndex
+
1
)]
=
b
.
specificationName
;
a
[
'id'
]
=
Math
.
random
();
return
a
;
},
{}),
);
return
pre
;
},
[]);
console
.
log
(
'表格数据-->'
,
tableDataList
);
setTableData
(
tableDataList
);
};
//组合数据拆分为对象
const
getCombineObj
=
(
combineSpecificationList
:
any
)
=>
{
return
combineSpecificationList
.
reduce
((
pre
:
any
,
cur
:
any
)
=>
{
pre
.
push
(
cur
.
reduce
((
a
:
any
,
b
:
any
)
=>
{
if
(
Array
.
isArray
(
b
))
{
a
.
push
(...
b
);
}
else
{
a
.
push
({
...
b
});
}
return
a
;
},
[]),
);
return
pre
;
},
[]);
};
const
combineEvent
=
(
list1
:
any
,
list2
:
any
)
=>
{
return
list1
.
reduce
((
pre
:
any
,
cur
:
any
)
=>
pre
.
concat
(
list2
.
map
((
v
:
any
)
=>
[
cur
,
v
])),
[]);
};
//规格值上传图片返回
const
uploadSuccess
=
()
=>
{};
return
(
<
div
className=
'sku-info'
>
<
div
className=
'sku-info-operate'
style=
{
{
margin
:
' 20px 0 '
}
}
>
<
Button
type=
'primary'
icon=
{
<
PlusOutlined
></
PlusOutlined
>
}
onClick=
{
()
=>
addOrEditSkuClick
()
}
>
添加规格
</
Button
>
</
div
>
<
Table
bordered
columns=
{
tableColumns
}
dataSource=
{
skuTableData
.
slice
(
(
pagination
.
pageNo
-
1
)
*
pagination
.
pageSize
,
pagination
.
pageNo
*
pagination
.
pageSize
,
)
}
rowKey=
'id'
pagination=
{
{
total
:
skuTableData
.
length
,
pageSize
:
pagination
.
pageSize
,
current
:
pagination
.
pageNo
,
showSizeChanger
:
true
,
showQuickJumper
:
true
,
onChange
:
(
page
:
number
,
pageSize
:
number
)
=>
paginationChange
(
page
,
pageSize
),
showTotal
:
(
total
,
range
)
=>
`当前 ${range[0]}-${range[1]} 条记录 / 共 ${total} 条数据`
,
}
}
/>
<
Form
wrapperCol=
{
{
span
:
5
}
}
labelCol=
{
{
span
:
1
}
}
form=
{
form
}
>
{
specificationFormList
.
map
((
v
,
index
)
=>
(
<>
{
/* 规格项*/
}
<
Row
key=
{
v
.
id
}
>
<
Col
span=
{
7
}
>
<
Form
.
Item
label=
{
'规格项'
+
(
index
+
1
)
}
wrapperCol=
{
{
span
:
18
}
}
labelCol=
{
{
span
:
5
}
}
name=
{
v
.
name
}
>
<
Select
placeholder=
'请输入规格项,按回车键完成'
dropdownRender=
{
(
menu
)
=>
(
<>
{
v
.
optionList
.
length
?
menu
:
''
}
<
Input
onPressEnter=
{
(
e
)
=>
specificationPressEnter
(
e
,
index
)
}
/>
</>
)
}
options=
{
v
.
optionList
}
/>
</
Form
.
Item
>
</
Col
>
{
index
?
(
<
Col
span=
{
2
}
>
<
Button
danger
icon=
{
<
DeleteOutlined
/>
}
onClick=
{
()
=>
deleteSpecificationClick
(
index
)
}
>
删除
</
Button
>
</
Col
>
)
:
(
''
)
}
</
Row
>
{
/*规格值显示*/
}
{
v
.
specificationValueList
.
length
?
(
<
Row
style=
{
{
marginBottom
:
'10px'
}
}
>
<
Col
span=
{
2
}
></
Col
>
<
Col
span=
{
4
}
>
<
div
>
{
v
.
specificationValueList
.
map
((
v
,
i
)
=>
(
<
Tag
key=
{
v
.
id
}
closable
onClose=
{
()
=>
specificationValueDelete
(
index
,
i
)
}
>
{
v
.
name
}
</
Tag
>
))
}
</
div
>
</
Col
>
</
Row
>
)
:
(
''
)
}
{
/*规格值操作*/
}
{
v
.
optionList
.
length
?
(
<
Row
>
<
Col
span=
{
2
}
></
Col
>
<
Col
span=
{
4
}
style=
{
{
marginBottom
:
'10px'
}
}
>
{
v
.
addSpecificationValueShow
?
(
<
Input
placeholder=
'请输入规格值,按回车键完成'
onPressEnter=
{
(
e
)
=>
specificationValuePressEnter
(
e
,
index
)
}
/>
)
:
(
<
Button
type=
'link'
danger
icon=
{
<
PlusOutlined
/>
}
onClick=
{
()
=>
addSpecificationValueClick
(
index
)
}
>
添加规格值
</
Button
>
)
}
</
Col
>
{
v
.
addSpecificationValueShow
?
(
<
Col
>
<
Button
type=
'primary'
style=
{
{
marginLeft
:
'10px'
}
}
onClick=
{
()
=>
specificationValueCancel
(
index
)
}
>
取消
</
Button
>
</
Col
>
)
:
(
''
)
}
</
Row
>
)
:
(
''
)
}
</>
))
}
<
Row
>
<
Col
span=
{
2
}
></
Col
>
<
Col
>
<
Button
type=
'primary'
icon=
{
<
PlusOutlined
/>
}
onClick=
{
addSpecificationClick
}
>
添加规格
</
Button
>
</
Col
>
</
Row
>
</
Form
>
<
Form
>
<
Table
style=
{
{
marginTop
:
'10px'
}
}
rowKey=
'id'
columns=
{
columns
as
ColumnTypes
}
components=
{
{
body
:
{
cell
:
EditableCell
,
},
}
}
bordered
dataSource=
{
tableData
}
pagination=
{
false
}
/>
</
Form
>
</
div
>
);
};
...
...
src/pages/mallManage/mallGoods/goodsAddOrEditOrDetail/components/skuInfo/old-index.tsx
0 → 100644
浏览文件 @
7cece82e
import
{
Button
,
Popconfirm
,
Table
,
Tag
}
from
'antd'
;
import
{
PlusOutlined
}
from
'@ant-design/icons'
;
import
{
ColumnsType
}
from
'antd/es/table'
;
import
{
FC
,
useState
}
from
'react'
;
import
{
InterDataType
,
InterReqType
,
PaginationProps
}
from
'~/api/interface'
;
import
{
addMallGoodsType
,
skuUnitType
}
from
'~/api/interface/goodsType'
;
//商品sku规格类型
type
goodsSpecType
=
Exclude
<
InterReqType
<
addMallGoodsType
>
,
undefined
>
[
'goodsSpecList'
][
0
];
//单位返回类型
type
unitType
=
InterDataType
<
skuUnitType
>
;
interface
selfProps
{
addOrEditSkuClick
:
()
=>
void
;
skuTableData
:
goodsSpecType
[];
skuUnitList
:
unitType
;
deleteSkuClick
:
(
record
:
goodsSpecType
)
=>
void
;
editSkuClick
:
(
record
:
goodsSpecType
)
=>
void
;
}
const
SkuInfo
:
FC
<
selfProps
>
=
({
addOrEditSkuClick
,
skuTableData
,
skuUnitList
,
deleteSkuClick
,
editSkuClick
,
})
=>
{
const
tableColumns
:
ColumnsType
<
goodsSpecType
>
=
[
{
title
:
'序号'
,
align
:
'center'
,
render
:
(
_text
:
string
,
_record
,
index
:
number
)
=>
index
+
1
,
},
{
title
:
'规格名称'
,
align
:
'center'
,
dataIndex
:
'specName'
,
},
{
title
:
'选择方式'
,
align
:
'center'
,
dataIndex
:
'chooseType'
,
render
:
(
text
:
number
)
=>
(
text
?
'多选'
:
'单选'
),
},
{
title
:
'是否必选'
,
align
:
'center'
,
dataIndex
:
'must'
,
render
:
(
text
:
number
)
=>
(
text
?
'必选'
:
'非必选'
),
},
{
title
:
'规格单位'
,
align
:
'center'
,
dataIndex
:
'skuUnitId'
,
render
:
(
text
:
number
)
=>
skuUnitList
.
find
((
v
)
=>
v
.
id
===
text
)?.
unitName
||
''
,
},
{
title
:
'规格值'
,
align
:
'center'
,
dataIndex
:
'goodsSpecValuesList'
,
render
:
(
text
:
goodsSpecType
[
'goodsSpecValuesList'
])
=>
text
.
map
((
v
)
=>
(
<
Tag
key=
{
v
.
id
}
>
{
v
.
specValueName
}
{
v
.
partNo
?
`(${v.partNo})`
:
''
}
</
Tag
>
)),
},
{
title
:
'操作'
,
align
:
'center'
,
render
:
(
_text
:
string
,
record
)
=>
(
<>
<
Button
type=
'link'
onClick=
{
()
=>
editSkuClick
(
record
)
}
>
编辑
</
Button
>
<
Popconfirm
placement=
'topLeft'
title=
{
'删除规格'
}
description=
{
'确认删除该规格吗?'
}
onConfirm=
{
()
=>
deleteSkuClick
(
record
)
}
okText=
'确定'
cancelText=
'取消'
>
<
Button
type=
'link'
danger
>
删除
</
Button
>
</
Popconfirm
>
</>
),
},
];
const
[
pagination
,
setPagination
]
=
useState
<
PaginationProps
>
({
pageNo
:
1
,
pageSize
:
10
,
});
//分页
const
paginationChange
=
(
pageNo
:
number
,
pageSize
:
number
)
=>
{
pagination
.
pageNo
=
pageNo
;
pagination
.
pageSize
=
pageSize
;
setPagination
({
...
pagination
});
};
return
(
<
div
className=
'sku-info'
>
<
div
className=
'sku-info-operate'
style=
{
{
margin
:
' 20px 0 '
}
}
>
<
Button
type=
'primary'
icon=
{
<
PlusOutlined
></
PlusOutlined
>
}
onClick=
{
()
=>
addOrEditSkuClick
()
}
>
添加规格
</
Button
>
</
div
>
<
Table
bordered
columns=
{
tableColumns
}
dataSource=
{
skuTableData
.
slice
(
(
pagination
.
pageNo
-
1
)
*
pagination
.
pageSize
,
pagination
.
pageNo
*
pagination
.
pageSize
,
)
}
rowKey=
'id'
pagination=
{
{
total
:
skuTableData
.
length
,
pageSize
:
pagination
.
pageSize
,
current
:
pagination
.
pageNo
,
showSizeChanger
:
true
,
showQuickJumper
:
true
,
onChange
:
(
page
:
number
,
pageSize
:
number
)
=>
paginationChange
(
page
,
pageSize
),
showTotal
:
(
total
,
range
)
=>
`当前 ${range[0]}-${range[1]} 条记录 / 共 ${total} 条数据`
,
}
}
/>
</
div
>
);
};
export
default
SkuInfo
;
src/pages/mallManage/mallGoods/goodsAddOrEditOrDetail/index.tsx
浏览文件 @
7cece82e
...
...
@@ -41,10 +41,10 @@ const GoodsAddOrEditOrDetail = () => {
const
[
goodsDetailsInfo
,
setGoodsDetailsInfo
]
=
useState
<
goodsDetailType
>
();
//新增、编辑sku弹窗显示
const
addOrEditSkuClick
=
(
record
?:
goodsSpecType
)
=>
{
setCurrentSku
(
record
?
{
...
record
}
:
undefined
);
setAddOrEditSkuModalShow
(
true
);
};
//
const addOrEditSkuClick = (record?: goodsSpecType) => {
//
setCurrentSku(record ? { ...record } : undefined);
//
setAddOrEditSkuModalShow(true);
//
};
const
addOrEditSkuModalCancel
=
()
=>
{
setAddOrEditSkuModalShow
(
false
);
};
...
...
@@ -59,11 +59,11 @@ const GoodsAddOrEditOrDetail = () => {
}
};
//sku删除
const
deleteSkuClick
=
(
record
:
goodsSpecType
)
=>
{
const
skuIndex
:
number
=
skuTable
.
findIndex
((
v
)
=>
v
.
id
===
record
.
id
);
skuTable
.
splice
(
skuIndex
,
1
);
setSkuTable
([...
skuTable
]);
};
//
const deleteSkuClick = (record: goodsSpecType) => {
//
const skuIndex: number = skuTable.findIndex((v) => v.id === record.id);
//
skuTable.splice(skuIndex, 1);
//
setSkuTable([...skuTable]);
//
};
//商品详情获取
const
getIntroduceInfo
=
(
richText
:
string
)
=>
{
setGoodsDetails
(
richText
);
...
...
@@ -79,13 +79,16 @@ const GoodsAddOrEditOrDetail = () => {
key
:
'2'
,
label
:
`商品规格`
,
children
:
(
<
SkuInfo
addOrEditSkuClick=
{
addOrEditSkuClick
}
skuTableData=
{
skuTable
}
skuUnitList=
{
skuUnitList
}
deleteSkuClick=
{
deleteSkuClick
}
editSkuClick=
{
addOrEditSkuClick
}
/>
// (旧)
// <SkuInfo
// addOrEditSkuClick={addOrEditSkuClick}
// skuTableData={skuTable}
// skuUnitList={skuUnitList}
// deleteSkuClick={deleteSkuClick}
// editSkuClick={addOrEditSkuClick}
// />
//(新)
<
SkuInfo
/>
),
},
{
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论