ylj20011123 e876df2bde update
2025-09-30 14:42:08 +08:00

974 lines
31 KiB
TypeScript

// 商品信息管理
import { connect } from "umi";
import type { CurrentUser } from "umi";
import type { ConnectState } from "@/models/connect";
import React, { useRef, useState } from "react";
import ProCard from "@ant-design/pro-card";
import { MenuFoldOutlined, PlusOutlined } from "@ant-design/icons";
import type { FormInstance } from "antd";
import { Col, Drawer, Row } from "antd";
import { Avatar, Button, Menu, message, Modal, Popconfirm, Space, Spin, Tree } from "antd";
import useRequest from "@ahooksjs/use-request";
import {
getFieldEnum,
getFieldEnumTree,
getServerpartOption,
getServerpartTree,
handleCallLogs
} from "@/services/options";
import type { ActionType } from "@ant-design/pro-table";
import ProTable from "@ant-design/pro-table";
import ReactHTMLTableToExcel from "react-html-table-to-excel";
import SubMenu from "antd/lib/menu/SubMenu";
import {
handleDeleteCOMMODITY,
handleGetCommodityList,
handleGetNestingCOMMODITYTYPETree, handleGetServerpartShopTrade, handleSynchroCOMMODITY
} from "@/pages/reports/productControl/commodityInfo/service";
import ProForm, { ProFormDateTimePicker, ProFormDigit, ProFormSelect, ProFormText, ProFormTextArea, ProFormTreeSelect } from "@ant-design/pro-form";
import './style.less'
import moment from "moment";
import session from "@/utils/session";
import Detail from "@/pages/reports/productControl/components/detail";
import { handleGetUSERDEFINEDTYPEList } from "@/pages/reports/productControl/userDefinedType/service";
import PageTitleBox from "@/components/PageTitleBox";
const commodityInfo: React.FC<{ currentUser: CurrentUser }> = (props) => {
const { currentUser } = props
const downloadBtnRef = useRef<any>()
const actionRef = useRef<ActionType>();
const formRef = useRef<FormInstance>();
const modalFormRef = useRef<any>();
const [currentRow, setCurrentRow] = useState<any>()
const [reqDetailList, setReqDetailList] = useState<any>(); // 合计项数据源
const [printOut, setPrintOut] = useState<any>(); // 打印数据的内容
const [collapsible, setCollapsible] = useState<boolean>(false)
const [treeView, setTreeView] = useState<any>()
const [allTreeView, setAllTreeView] = useState<any>()
const [allTotal, setAllTotal] = useState<number>(20)
// 加载服务区树
const { loading: treeLoading, data: treeViews } = useRequest(async () => {
const req = {
PROVINCE_CODE: currentUser?.ProvinceCode,
COMMODITYTYPE_VALID: 1,
ShowCode: true
}
const data = await handleGetNestingCOMMODITYTYPETree(req)
let list: any = data
if (currentUser?.ProvinceCode === '734100') {
list.unshift({
label: "全部",
value: 999999,
key: '1-999999',
type: 1
})
console.log('listlistlistlist', list);
}
setTreeView(list)
setAllTreeView(list)
return data
})
// 树相关的属性和方法
const [selectedId, setSelectedId] = useState<string>()
// 导出的加载效果
const [showLoading, setShowLoading] = useState<boolean>(false)
// 是否显示打印的表格
const [showExportTable, setShowExportTable] = useState<boolean>(false)
const [currenMenu, setCurrenMenu] = useState<any>(); // 当前选中左侧菜单的服务区节点
const [showModal, setShowModal] = useState<boolean>(false)
const [showDetail, setShowDetail] = useState<boolean>(false)
const [selectBUSINESSTYPE, setSelectBUSINESSTYPE] = useState<any>()
const [selectSERVERPARTID, setSelectSERVERPARTID] = useState<any>()
// 商品类型
const [shopType, setShopType] = useState<any>()
const ServerpartIdsList: any = session.get('ServerpartIdsList')
console.log('ServerpartIdsListServerpartIdsList', ServerpartIdsList);
const { loading: CommodityLoading, data: CommodityData } = useRequest(async () => {
const data = await getFieldEnumTree({ FieldExplainField: 'CommodityTypeIds' })
setShopType(data)
const obj: any = {}
if (data && data.length > 0) {
data.forEach((item: any) => {
obj[item.value] = item.label
if (item.children && item.children.length > 0) {
item.children.forEach((subItem: any) => {
obj[subItem.value] = subItem.label
if (subItem.children && subItem.children.length > 0) {
subItem.children.forEach((thirdItem: any) => {
obj[thirdItem.value] = thirdItem.label
})
}
})
}
})
}
return obj
})
const [customClassList, setCustomClassList] = useState<any>()
const columns: any = [
{
title: '服务区',
dataIndex: 'ServerpartID',
hideInTable: true,
valueType: 'select',
request: async () => {
// const data = await getServerpartOption(340000)
// return data
const ServerpartIdsTree: any = session.get('ServerpartIdsTree')
// let serverpartId: string = ''
// if (serverpartList && serverpartList.length > 0) {
// serverpartList.forEach((item: any) => {
// if (serverpartId) {
// serverpartId += `,${item.value}`
// } else {
// serverpartId = item.value
// }
// })
// }
// serverpartList.unshift({
// label: "全部",
// value: ''
// })
return ServerpartIdsTree
},
fieldProps: {
showSearch: true,
filterOption: (input, option) => (option?.label ?? '').toLowerCase().includes(input.toLowerCase()),
}
},
{
title: '状态',
dataIndex: 'CommodityState',
hideInTable: true,
valueType: 'select',
valueEnum: {
0: { text: '无效' },
1: { text: '有效' }
},
initialValue: '1'
},
{
dataIndex: 'searchText',
title: '查询内容',
hideInTable: true,
fieldProps: {
placeholder: "请输入商品名称/商品条码/商品类型"
}
},
{
title: <div style={{ textAlign: 'center' }}></div>,
dataIndex: 'index',
width: 80,
hideInSearch: true,
align: 'center',
valueType: 'index'
},
{
title: <div style={{ textAlign: 'center' }}></div>,
dataIndex: 'SERVERPART_NAME',
width: 200,
ellipsis: true,
hideInSearch: true,
align: 'center',
render: (_, record) => {
return record?.SERVERPART_ID ? ServerpartIdsList[record?.SERVERPART_ID] : '-'
}
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 100,
dataIndex: 'BUSINESSTYPE',
hideInSearch: true,
align: 'center',
valueType: 'select',
request: async () => {
return await getFieldEnum({ FieldExplainField: 'BUSINESSTYPE', sessionName: 'SHOPTRADE', notformate: true })
}
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 120,
dataIndex: 'COMMODITY_TYPE',
hideInSearch: true,
align: 'center',
valueEnum: CommodityData
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 300,
ellipsis: true,
dataIndex: 'COMMODITY_NAME',
align: 'center',
hideInSearch: true,
render: (_, record) => {
return <a onClick={() => {
console.log('record', record)
setCurrentRow(record)
setShowDetail(true)
}}>{record?.COMMODITY_NAME || '-'}</a>
}
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 150,
dataIndex: 'COMMODITY_BARCODE',
align: 'center',
hideInSearch: true,
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 80,
dataIndex: 'COMMODITY_RETAILPRICE',
hideInSearch: true,
align: 'right',
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 80,
dataIndex: 'COMMODITY_PURCHASEPRICE',
align: 'right',
hideInSearch: true,
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 80,
dataIndex: 'COMMODITY_UNIT',
align: 'center',
hideInSearch: true,
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 80,
dataIndex: 'COMMODITY_STATE',
align: 'center',
hideInSearch: true,
valueType: 'select',
valueEnum: { 0: { text: '无效', status: 'error' }, 1: { text: '有效', status: 'success' }, 2: { text: '不可选', status: 'default' } },
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 160,
dataIndex: 'OPERATE_DATE',
align: 'center',
hideInSearch: true,
sorter: (a, b) => new Date(a.OPERATE_DATE).getTime() - new Date(b.OPERATE_DATE).getTime(),
defaultSortOrder: 'descend',
},
{
title: <div style={{ textAlign: 'center' }}></div>,
width: 100,
valueType: 'option',
fixed: 'right',
render: (_, record) => [
<a style={{ marginRight: '8px' }} onClick={async () => {
setCurrentRow({
...record,
COMMODITY_GRADE: Number(record?.COMMODITY_GRADE),
BUSINESSTYPE: record?.BUSINESSTYPE.toString(),
ADDTIME: moment(record?.ADDTIME).format('YYYY-MM-DD HH:mm:ss')
})
setShowModal(true)
console.log('record', record)
await handleGetCommodity(record?.SERVERPART_ID)
await handleGetCustomClassList(record?.SERVERPART_ID)
}}></a>,
<Popconfirm
title="确认删除该商品?"
onConfirm={async () => {
const req: any = {
COMMODITYId: record?.COMMODITY_ID
}
const data = await handleDeleteCOMMODITY(req)
if (data.Result_Code === 100) {
message.success(data.Result_Desc)
actionRef.current?.reload()
} else {
message.error(data.Result_Desc)
}
}}
okText="确定"
cancelText="取消"
>
<a></a>
</Popconfirm>
]
}
]
// 查询的条件
const [searchParams, setSearchParams] = useState<any>()
// 商品业态的搜索框内容
const [commodityList, setCommodityList] = useState<any>([])
const getMenuDom = (data: any[], callback: (item: any) => void) => {
return (data.map((element: any) => {
// 绑定嵌套树的子节点
if (element.children && element.children.length > 0) {
return (
<SubMenu title={<span>{element.label}</span>}
icon={element.ico ? <Avatar src={element.ico} size={16} style={{ marginRight: 4 }} shape="square" /> : null}
key={`${element.key || element.value}`}
onTitleClick={(item) => {
// 选中一级菜单
if (!currenMenu || item.key !== `${currenMenu?.key}`) {
callback.call(callback, item)
}
item.domEvent.stopPropagation();
}}
>
{element.children && element.children.length > 0 && getMenuDom(element.children, callback)}
</SubMenu>
)
}
return (<Menu.Item icon={element.ico ? <Avatar src={element.ico} size={16} shape="square" /> : null}
key={`${element.key || element.value}`}>{element.desc && element.desc !== '0/0' ? <><span>{element.label}</span>
<span style={{ position: 'absolute', right: '10', top: '9px', lineHeight: '20px', padding: '2px 3px' }}>
[<span style={{ color: 'red' }}>{element.desc.split('/')[0]}</span>/<span style={{ color: '#1890ff' }}>{element.desc.split('/')[1]}</span>]</span></> : element.label}</Menu.Item>)
}))
}
const loadSelectedId = (item?: any) => {
console.log('item', item)
// 选中的子菜单key
const [type, value] = item.key.split('-')
if (value === '999999') {
const serverpartList: any = session.get('serverpartList')
let serverpartId: string = ''
if (serverpartList && serverpartList.length > 0) {
serverpartList.forEach((item: any) => {
if (serverpartId) {
serverpartId += `,${item.value}`
} else {
serverpartId = item.value
}
})
}
// formRef.current?.setFieldsValue({ ServerpartID: serverpartId })
}
if (type === '1') {
setCurrenMenu(value)
// actionRef?.current?.reload()
} else {
setCurrenMenu('')
}
}
// 拿到对应的商品业态
const handleGetCommodity = async (id: any) => {
const req: any = {
ProvinceCode: currentUser?.ProvinceCode,
ServerpartId: id
}
const data = await handleGetServerpartShopTrade(req)
console.log('data', data)
setCommodityList(data)
}
// 请求自定义类的选择列表
const handleGetCustomClassList = async (id: any) => {
const req: any = {
SearchParameter: {
USERDEFINEDTYPE_STATE: 1,
SERVERPART_ID: id,
BUSINESSTYPE: selectBUSINESSTYPE
},
PageIndex: 1,
PageSize: 999999,
pageSize: 999999,
}
const data = await handleGetUSERDEFINEDTYPEList(req)
if (data && data.length > 0) {
const list: any = []
data.forEach((item: any) => {
list.push({ label: item.USERDEFINEDTYPE_NAME, value: item.USERDEFINEDTYPE_ID })
})
setCustomClassList(list)
}
console.log('data', data)
}
return (
<div ref={(el) => {
// 打印报表
if (!reqDetailList || reqDetailList.length === 0) return;
setPrintOut(el);
}} >
{
showLoading ?
<div
style={{
width: '100%',
height: '100%',
background: 'rgba(0,0,0,0.1)',
position: 'fixed',
zIndex: 5,
display: 'flex',
alignItems: 'center',
justifyContent: 'center'
}}
>
<div style={{
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
padding: '15px 20px 10px',
background: '#fff',
borderRadius: '8px',
width: '200px'
}}>
<Spin />
<span style={{ marginLeft: '5px' }}>...</span>
</div>
</div> : ''
}
<div className={'saleReportHideBox'} style={{ position: 'fixed', zIndex: -1, top: 0, left: 0 }}>
{
showExportTable && reqDetailList && reqDetailList.length > 0 ?
<ProTable
columns={columns}
dataSource={reqDetailList}
pagination={false}
expandable={{
defaultExpandAllRows: true
}}
/> : ''
}
</div>
<div id='hiddenBox' style={{ position: 'fixed', zIndex: -1, top: 0, left: 0 }} />
<div style={{ backgroundColor: '#fff', display: 'flex' }}>
<ProCard
style={{ width: !collapsible ? "300px" : "60px" }}
className="pageTable-leftnav"
bodyStyle={{ padding: 0, paddingTop: 20, paddingLeft: 20, width: !collapsible ? "300px" : "60px" }}
extra={<MenuFoldOutlined onClick={() => {
setCollapsible(!collapsible)
}} />}
colSpan={!collapsible ? "300px" : "60px"}
title={!collapsible ? "请选择商品类别" : ""}
headerBordered
collapsed={collapsible}
>
{!treeLoading && <Menu
mode="inline"
style={{ height: 'calc(100vh - 220px)', overflowY: 'auto', overflowX: 'hidden' }}
selectedKeys={`1-${currenMenu}`}
onSelect={(item) => {
console.log('item', item)
loadSelectedId(item)
}}
>
{getMenuDom(treeViews, loadSelectedId)}
</Menu>}
</ProCard>
<div style={{
width: !collapsible ? 'calc(100% - 300px)' : 'calc(100% - 60px)',
paddingTop: 0,
paddingBottom: 0,
paddingRight: 0
}}>
<ProTable
actionRef={actionRef}
formRef={formRef}
columns={columns}
bordered
headerTitle={<PageTitleBox props={props} />}
scroll={{ y: 'calc(100vh - 430px)' }}
search={{ span: 6 }}
request={async (params) => {
if (!currenMenu) {
return
}
const req: any = {
...params,
SearchType: 3,
ProvinceCode: currentUser?.ProvinceCode,
CommodityTypeId: currenMenu === '999999' ? '' : currenMenu,
// CommodityState: params?.COMMODITY_STATE,
PageIndex: params.current,
PageSize: params?.pageSize,
pageSize: params?.pageSize,
SearchKey: "COMMODITY_NAME,COMMODITY_BARCODE",
SearchValue: params?.searchText || ""
// PageSize: 20
}
console.log('req', req)
handleCallLogs()
setSearchParams(params)
const data = await handleGetCommodityList(req)
if (data.List && data.List.length > 0) {
console.log('data', data)
// setAllTotal(data.TotalCount)
return { data: data.List, success: true, total: data.TotalCount }
}
return { data: [], success: true }
}}
toolbar={{
actions: [
<Button
key="new"
type="primary"
icon={<PlusOutlined />}
onClick={(e) => {
setShowModal(true)
}}
>
</Button>
]
}}
/>
</div>
</div>
<Modal
open={showModal}
width={1200}
wrapClassName={'shopModal'}
destroyOnClose
title={currentRow ? '编辑商品' : '添加商品'}
onOk={() => {
modalFormRef.current?.validateFields().then(async (res: any) => {
console.log('res', res)
if (res) {
// setShowModal(false)
let req: any = {}
if (currentRow) {
req = {
...currentRow,
...res,
OPERATE_DATE: moment().format('YYYY-MM-DD HH:mm:ss'),
}
} else {
req = {
...res,
OPERATE_DATE: moment().format('YYYY-MM-DD HH:mm:ss'),
}
}
console.log('req', req)
const data = await handleSynchroCOMMODITY(req)
console.log('data', data)
if (data.Result_Code === 100) {
message.success(data.Result_Desc)
actionRef.current?.reload()
setShowModal(false)
setCurrentRow(undefined)
} else {
message.error(data.Result_Desc)
}
}
})
}}
onCancel={() => {
setShowModal(false)
setCurrentRow(undefined)
setCommodityList([])
setCustomClassList([])
}}
>
<ProForm
formRef={modalFormRef}
submitter={false}
initialValues={currentRow}
>
<div className={'modalTitle'}></div>
<Row gutter={16}>
<Col span={16}>
<ProFormText
name="COMMODITY_NAME"
label="商品名称"
placeholder="请输入商品名称"
rules={[
{
required: true,
message: '请输入商品名称',
},
]}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_EN"
label="拼音简码"
/>
</Col>
<Col span={8}>
<ProFormSelect
name="SERVERPART_ID"
label="服务区名"
request={async () => {
const ServerpartIdsTree: any = session.get('ServerpartIdsTree')
// const data = await getServerpartTree(currentUser?.ProvinceCode, currentUser?.CityAuthority, true, true, true)
// const list: any = []
// if (data && data.length > 0) {
// data.forEach((item: any) => {
// if (item.children && item.children.length > 0) {
// item.children.forEach((subItem: any) => {
// list.push({ label: subItem.label, value: subItem.value })
// })
// }
// })
// data.forEach((item: any) => {
// list.push({ label: item.label, value: item.value })
// })
// }
return ServerpartIdsTree
}}
rules={[
{
required: true,
message: '请选择服务区',
},
]}
fieldProps={{
onChange: async (e: any) => {
console.log('e', e)
if (e) {
setSelectSERVERPARTID(e)
await handleGetCommodity(e)
if (selectBUSINESSTYPE) {
await handleGetCustomClassList(e)
}
} else {
setSelectSERVERPARTID(undefined)
setCommodityList([])
setCustomClassList([])
}
}
}}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="BUSINESSTYPE"
label="商品业态"
rules={[
{
required: true,
message: '请选择商品业态',
},
]}
options={commodityList}
fieldProps={{
onChange: async (e: any) => {
if (e) {
setSelectBUSINESSTYPE(e)
if (selectSERVERPARTID) {
await handleGetCustomClassList(e)
}
} else {
setSelectBUSINESSTYPE(undefined)
}
}
}}
/>
</Col>
<Col span={8}>
<ProFormTreeSelect
name="COMMODITY_TYPE"
label="商品类别"
rules={[
{
required: true,
message: '请选择商品类别',
},
]}
request={() => {
return treeView
}}
fieldProps={{
treeDefaultExpandAll: true
}}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_BARCODE"
label="商品条码"
disabled={currentRow}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_UNIT"
label="商品单位"
rules={[
{
required: true,
message: '请输入商品单位',
},
]}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_RULE"
label="商品规格"
rules={[
{
required: true,
message: '请输入商品规格',
},
]}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_HOTKEY"
label="快捷键值"
/>
</Col>
<Col span={8}>
<ProFormSelect
name="COMMODITY_GRADE"
label="质量等级"
rules={[
{
required: true,
message: '请选择质量等级',
},
]}
initialValue={1000}
options={[{ label: '一等品', value: 1000 }, { label: '二等品', value: 2000 }, { label: '三等品', value: 5000 }, { label: '优等品', value: 3000 }, { label: '合格品', value: 4000 },]}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_ORI"
label="商品产地"
rules={[
{
required: true,
message: '请输入商品产地',
},
]}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="USERDEFINEDTYPE_ID"
label="自定义类"
options={customClassList}
/>
</Col>
<Col span={8}>
<ProFormText
name="PROVINCE_CODE"
label="省份编码"
disabled
// initialValue={currentUser?.ProvinceCode}
/>
</Col>
<Col span={8}>
<ProFormText
name="COMMODITY_CODE"
label="商品编码"
disabled
/>
</Col>
<Col span={24}>
<ProFormTextArea
name="COMMODITY_DESC"
label="商品说明"
/>
</Col>
</Row>
<div className={'modalTitle'}></div>
<Row gutter={16}>
<Col span={8}>
<ProFormSelect
name="CANSALE"
label="是否销售"
rules={[
{
required: true,
message: '请选择是否销售',
},
]}
initialValue={1}
options={[{ label: '是', value: 1 }, { label: '否', value: 0 }]}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="ISBULK"
label="是否散装"
rules={[
{
required: true,
message: '请选择是否散装',
},
]}
initialValue={0}
options={[{ label: '是', value: 1 }, { label: '否', value: 0 }]}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="METERINGMETHOD"
label="称重方式"
rules={[
{
required: true,
message: '请选择称重方式',
},
]}
initialValue={1}
options={[{ label: '计价', value: 1 }, { label: '散装称重', value: 0 }]}
/>
</Col>
<Col span={8}>
<ProFormSelect
name="COMMODITY_STATE"
label="审核状态"
rules={[
{
required: true,
message: '请选择审核状态',
},
]}
initialValue={1}
options={[{ label: '有效', value: 1 }, { label: '审核中', value: 2 }, { label: '无效', value: 0 }]}
/>
</Col>
<Col span={8}>
<ProFormText
name="ADDTIME"
label="添加时间"
disabled
initialValue={moment().format('YYYY-MM-DD HH:mm:ss')}
/>
</Col>
<Col span={8}>
<ProFormDateTimePicker
name="OPERATE_DATE"
label="生效时间"
initialValue={moment().format('YYYY-MM-DD HH:mm:ss')}
/>
</Col>
</Row>
<div className={'modalTitle'}></div>
<Row gutter={16}>
<Col span={8}>
<ProFormDigit
name="COMMODITY_RETAILPRICE"
label="零售价"
rules={[
{
required: true,
message: '请输入零售价',
},
]}
/>
</Col>
<Col span={8}>
<ProFormDigit
name="COMMODITY_CURRPRICE"
label="当前价格"
rules={[
{
required: true,
message: '请输入当前价格',
},
]}
/>
</Col>
<Col span={8}>
<ProFormDigit
name="COMMODITY_MEMBERPRICE"
label="会员价"
/>
</Col>
<Col span={8}>
<ProFormDigit
name="COMMODITY_PURCHASEPRICE"
label="进货价"
rules={[
{
required: true,
message: '请输入进货价',
},
]}
/>
</Col>
<Col span={8}>
<ProFormDigit
name="COMMODITY_MINPRICE"
label="最低价"
/>
</Col>
<Col span={8}>
<ProFormDigit
name="COMMODITY_MAXPRICE"
label="最高价"
/>
</Col>
</Row>
<div className={'modalTitle'}></div>
<Row gutter={16}>
<Col span={8}>
<ProFormDigit
name="DUTY_PARAGRAPH"
label="进价税率"
/>
</Col>
<Col span={8}>
<ProFormDigit
name="RETAIL_DUTY"
label="零售税率"
/>
</Col>
<Col span={8}>
<ProFormSelect
name="COMMODITY_FROZENCOUNT"
label="采购状态"
options={[{ label: '允许', value: 1000 }, { label: '禁止', value: 2000 }]}
/>
</Col>
</Row>
</ProForm>
</Modal>
<Drawer
width={1000}
open={showDetail}
onClose={() => {
setCurrentRow(undefined)
setShowDetail(false)
}}
closable={false}
destroyOnClose
bodyStyle={{ padding: '12px 24px' }}
>
<Detail currentRow={currentRow} currentUser={currentUser} treeView={treeView} />
</Drawer>
</div>
)
}
export default connect(({ user }: ConnectState) => ({
currentUser: user.currentUser
}))(commodityInfo);