|
|
@@ -295,7 +295,7 @@ const Dashboard = ({ dispatch, departments = [] }) => {
|
|
|
return (
|
|
|
<PageContainer title={false} breadcrumb={false} waterMarkProps={{ offsetTop: 111 }}>
|
|
|
<div className={styles.dashboard}>
|
|
|
- <div>
|
|
|
+ <div className="enter-y">
|
|
|
<Row gutter={[8, 8]}>
|
|
|
<Col xs={24} sm={24} md={24} lg={18} xl={18}>
|
|
|
<div className="shadow-card">
|
|
|
@@ -338,7 +338,7 @@ const Dashboard = ({ dispatch, departments = [] }) => {
|
|
|
</Row>
|
|
|
</div>
|
|
|
|
|
|
- <div className="flex flex-wrap">
|
|
|
+ <div className="flex flex-wrap enter-y">
|
|
|
<div className="mr-4 my-4 flex">
|
|
|
<Select
|
|
|
disabled={state.disabled}
|
|
|
@@ -402,75 +402,76 @@ const Dashboard = ({ dispatch, departments = [] }) => {
|
|
|
))}
|
|
|
</div>
|
|
|
</div>
|
|
|
- <Row gutter={[8, 8]}>
|
|
|
- <Col xs={24} sm={24} md={24} lg={8} xl={8}>
|
|
|
- <div className="p-4 bg-white border rounded-2px border-hex-f0f0f0 shadow-card">
|
|
|
- {state.loading ? (
|
|
|
- <Skeleton active avatar />
|
|
|
- ) : (
|
|
|
- <Row className="cursor-pointer" onClick={() => handleRatioCard(cardTypeMap.CLIENT)}>
|
|
|
- <Col span={6}>
|
|
|
- <div className="w-full max-w-48px h-48px border rounded-48px bg-[#0c7cd5] flex items-center justify-center">
|
|
|
- <AddressBook size="26" fill="#fff" />
|
|
|
- </div>
|
|
|
- </Col>
|
|
|
- <Col span={18} flex="wrap">
|
|
|
- <div className="flex items-center justify-between ">
|
|
|
- <div className="text-2xl">{state.clientChainRatio.count}</div>
|
|
|
- <span
|
|
|
- className={[
|
|
|
- 'text-xl',
|
|
|
- state.clientChainRatio.percentage.startsWith('-')
|
|
|
- ? 'text-green-500'
|
|
|
- : 'text-red-500'
|
|
|
- ].join(' ')}>
|
|
|
- {state.clientChainRatio.percentage}
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- <div className="flex justify-between items-center">
|
|
|
- <div>新增客户</div>
|
|
|
- <span>{cyclicalOp.find(item => item.value === state.params.cyclical)?.title}</span>
|
|
|
- </div>
|
|
|
- </Col>
|
|
|
- </Row>
|
|
|
- )}
|
|
|
- </div>
|
|
|
- </Col>
|
|
|
- <Col xs={24} sm={24} md={24} lg={8} xl={8}>
|
|
|
- <div className="p-4 bg-white border rounded-2px border-hex-f0f0f0 shadow-card">
|
|
|
- {state.loading ? (
|
|
|
- <Skeleton active avatar />
|
|
|
- ) : (
|
|
|
- <Row className="cursor-pointer" onClick={() => handleRatioCard(cardTypeMap.COMPANY)}>
|
|
|
- <Col span={6}>
|
|
|
- <div className="w-full max-w-48px h-48px border rounded-48px bg-[#0c7cd5] flex items-center justify-center">
|
|
|
- <City size="26" fill="#fff" />
|
|
|
- </div>
|
|
|
- </Col>
|
|
|
- <Col span={18} flex="wrap">
|
|
|
- <div className="flex items-center justify-between ">
|
|
|
- <div className="text-2xl">{state.customerChainRatio.count}</div>
|
|
|
- <span
|
|
|
- className={[
|
|
|
- 'text-xl',
|
|
|
- state.customerChainRatio.percentage.startsWith('-')
|
|
|
- ? 'text-green-500'
|
|
|
- : 'text-red-500'
|
|
|
- ].join(' ')}>
|
|
|
- {state.customerChainRatio.percentage}
|
|
|
- </span>
|
|
|
- </div>
|
|
|
+ <div className="enter-y">
|
|
|
+ <Row gutter={[8, 8]}>
|
|
|
+ <Col xs={24} sm={24} md={24} lg={8} xl={8}>
|
|
|
+ <div className="p-4 bg-white border rounded-2px border-hex-f0f0f0 shadow-card">
|
|
|
+ {state.loading ? (
|
|
|
+ <Skeleton active avatar />
|
|
|
+ ) : (
|
|
|
+ <Row className="cursor-pointer" onClick={() => handleRatioCard(cardTypeMap.CLIENT)}>
|
|
|
+ <Col span={6}>
|
|
|
+ <div className="w-full max-w-48px h-48px border rounded-48px bg-[#0c7cd5] flex items-center justify-center">
|
|
|
+ <AddressBook size="26" fill="#fff" />
|
|
|
+ </div>
|
|
|
+ </Col>
|
|
|
+ <Col span={18} flex="wrap">
|
|
|
+ <div className="flex items-center justify-between ">
|
|
|
+ <div className="text-2xl">{state.clientChainRatio.count}</div>
|
|
|
+ <span
|
|
|
+ className={[
|
|
|
+ 'text-xl',
|
|
|
+ state.clientChainRatio.percentage.startsWith('-')
|
|
|
+ ? 'text-green-500'
|
|
|
+ : 'text-red-500'
|
|
|
+ ].join(' ')}>
|
|
|
+ {state.clientChainRatio.percentage}
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ <div className="flex justify-between items-center">
|
|
|
+ <div>新增客户</div>
|
|
|
+ <span>{cyclicalOp.find(item => item.value === state.params.cyclical)?.title}</span>
|
|
|
+ </div>
|
|
|
+ </Col>
|
|
|
+ </Row>
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ </Col>
|
|
|
+ <Col xs={24} sm={24} md={24} lg={8} xl={8}>
|
|
|
+ <div className="p-4 bg-white border rounded-2px border-hex-f0f0f0 shadow-card">
|
|
|
+ {state.loading ? (
|
|
|
+ <Skeleton active avatar />
|
|
|
+ ) : (
|
|
|
+ <Row className="cursor-pointer" onClick={() => handleRatioCard(cardTypeMap.COMPANY)}>
|
|
|
+ <Col span={6}>
|
|
|
+ <div className="w-full max-w-48px h-48px border rounded-48px bg-[#0c7cd5] flex items-center justify-center">
|
|
|
+ <City size="26" fill="#fff" />
|
|
|
+ </div>
|
|
|
+ </Col>
|
|
|
+ <Col span={18} flex="wrap">
|
|
|
+ <div className="flex items-center justify-between ">
|
|
|
+ <div className="text-2xl">{state.customerChainRatio.count}</div>
|
|
|
+ <span
|
|
|
+ className={[
|
|
|
+ 'text-xl',
|
|
|
+ state.customerChainRatio.percentage.startsWith('-')
|
|
|
+ ? 'text-green-500'
|
|
|
+ : 'text-red-500'
|
|
|
+ ].join(' ')}>
|
|
|
+ {state.customerChainRatio.percentage}
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
|
|
|
- <div className="flex justify-between items-center">
|
|
|
- <div>新增单位</div>
|
|
|
- <span>{cyclicalOp.find(item => item.value === state.params.cyclical)?.title}</span>
|
|
|
- </div>
|
|
|
- </Col>
|
|
|
- </Row>
|
|
|
- )}
|
|
|
- </div>
|
|
|
- </Col>
|
|
|
- {/* <Col xs={24} sm={24} md={24} lg={6} xl={6}>
|
|
|
+ <div className="flex justify-between items-center">
|
|
|
+ <div>新增单位</div>
|
|
|
+ <span>{cyclicalOp.find(item => item.value === state.params.cyclical)?.title}</span>
|
|
|
+ </div>
|
|
|
+ </Col>
|
|
|
+ </Row>
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ </Col>
|
|
|
+ {/* <Col xs={24} sm={24} md={24} lg={6} xl={6}>
|
|
|
<div className="p-4 bg-white border rounded-2px border-hex-f0f0f0 shadow-card">
|
|
|
{state.loading ? (
|
|
|
<Skeleton active avatar />
|
|
|
@@ -508,42 +509,43 @@ const Dashboard = ({ dispatch, departments = [] }) => {
|
|
|
)}
|
|
|
</div>
|
|
|
</Col> */}
|
|
|
- <Col xs={24} sm={24} md={24} lg={8} xl={8}>
|
|
|
- <div className="p-4 bg-white border rounded-2px border-hex-f0f0f0 shadow-card">
|
|
|
- {state.loading ? (
|
|
|
- <Skeleton active avatar />
|
|
|
- ) : (
|
|
|
- <Row onClick={() => handleRatioCard(cardTypeMap.SERVICE)} className="cursor-pointer">
|
|
|
- <Col span={6}>
|
|
|
- <div className="w-full max-w-48px h-48px border rounded-48px bg-[#0c7cd5] flex items-center justify-center">
|
|
|
- <Comment size="26" fill="#fff" />
|
|
|
- </div>
|
|
|
- </Col>
|
|
|
- <Col span={18} flex="wrap">
|
|
|
- <div className="flex items-center justify-between ">
|
|
|
- <div className="text-2xl">{state.serviceLogChainRatio.count}</div>
|
|
|
- <span
|
|
|
- className={[
|
|
|
- 'text-xl',
|
|
|
- state.serviceLogChainRatio.percentage.startsWith('-')
|
|
|
- ? 'text-green-500'
|
|
|
- : 'text-red-500'
|
|
|
- ].join(' ')}>
|
|
|
- {state.serviceLogChainRatio.percentage}
|
|
|
- </span>
|
|
|
- </div>
|
|
|
+ <Col xs={24} sm={24} md={24} lg={8} xl={8}>
|
|
|
+ <div className="p-4 bg-white border rounded-2px border-hex-f0f0f0 shadow-card">
|
|
|
+ {state.loading ? (
|
|
|
+ <Skeleton active avatar />
|
|
|
+ ) : (
|
|
|
+ <Row onClick={() => handleRatioCard(cardTypeMap.SERVICE)} className="cursor-pointer">
|
|
|
+ <Col span={6}>
|
|
|
+ <div className="w-full max-w-48px h-48px border rounded-48px bg-[#0c7cd5] flex items-center justify-center">
|
|
|
+ <Comment size="26" fill="#fff" />
|
|
|
+ </div>
|
|
|
+ </Col>
|
|
|
+ <Col span={18} flex="wrap">
|
|
|
+ <div className="flex items-center justify-between ">
|
|
|
+ <div className="text-2xl">{state.serviceLogChainRatio.count}</div>
|
|
|
+ <span
|
|
|
+ className={[
|
|
|
+ 'text-xl',
|
|
|
+ state.serviceLogChainRatio.percentage.startsWith('-')
|
|
|
+ ? 'text-green-500'
|
|
|
+ : 'text-red-500'
|
|
|
+ ].join(' ')}>
|
|
|
+ {state.serviceLogChainRatio.percentage}
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
|
|
|
- <div className="flex justify-between items-center">
|
|
|
- <div>服务记录</div>
|
|
|
- <span>{cyclicalOp.find(item => item.value === state.params.cyclical)?.title}</span>
|
|
|
- </div>
|
|
|
- </Col>
|
|
|
- </Row>
|
|
|
- )}
|
|
|
- </div>
|
|
|
- </Col>
|
|
|
- </Row>
|
|
|
- <div className="mt-4">
|
|
|
+ <div className="flex justify-between items-center">
|
|
|
+ <div>服务记录</div>
|
|
|
+ <span>{cyclicalOp.find(item => item.value === state.params.cyclical)?.title}</span>
|
|
|
+ </div>
|
|
|
+ </Col>
|
|
|
+ </Row>
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ </Col>
|
|
|
+ </Row>
|
|
|
+ </div>
|
|
|
+ <div className="mt-4 enter-y">
|
|
|
<Row gutter={[8, 8]}>
|
|
|
{/* <Col xs={24} sm={24} md={24} lg={12} xl={12}>
|
|
|
<BusinessChar
|
|
|
@@ -580,7 +582,7 @@ const Dashboard = ({ dispatch, departments = [] }) => {
|
|
|
</Col>
|
|
|
</Row>
|
|
|
</div>
|
|
|
- <div className="mt-4">
|
|
|
+ <div className="mt-4 enter-y">
|
|
|
<Row gutter={[8, 8]}>
|
|
|
<Col xs={24} sm={24} md={24} lg={12} xl={12}>
|
|
|
<LeaderBoard dataList={state.leaderboard} loading={state.loading} />
|