|  | import { | 
|  | DingdingOutlined, | 
|  | DownOutlined, | 
|  | EllipsisOutlined, | 
|  | InfoCircleOutlined, | 
|  | } from '@ant-design/icons'; | 
|  | import { | 
|  | Badge, | 
|  | Button, | 
|  | Card, | 
|  | Statistic, | 
|  | Descriptions, | 
|  | Divider, | 
|  | Dropdown, | 
|  | Menu, | 
|  | Popover, | 
|  | Steps, | 
|  | Table, | 
|  | Tooltip, | 
|  | Empty, | 
|  | } from 'antd'; | 
|  | import { GridContent, PageContainer, RouteContext } from '@ant-design/pro-layout'; | 
|  | import React, { Fragment, useState } from 'react'; | 
|  | import classNames from 'classnames'; | 
|  | import { useRequest } from 'umi'; | 
|  | import { queryAdvancedProfile } from './service'; | 
|  | import styles from './style.less'; | 
|  | const { Step } = Steps; | 
|  | const ButtonGroup = Button.Group; | 
|  | const menu = ( | 
|  | <Menu> | 
|  | <Menu.Item key="1">选项一</Menu.Item> | 
|  | <Menu.Item key="2">选项二</Menu.Item> | 
|  | <Menu.Item key="3">选项三</Menu.Item> | 
|  | </Menu> | 
|  | ); | 
|  | const mobileMenu = ( | 
|  | <Menu> | 
|  | <Menu.Item key="1">操作一</Menu.Item> | 
|  | <Menu.Item key="2">操作二</Menu.Item> | 
|  | <Menu.Item key="3">选项一</Menu.Item> | 
|  | <Menu.Item key="4">选项二</Menu.Item> | 
|  | <Menu.Item key="">选项三</Menu.Item> | 
|  | </Menu> | 
|  | ); | 
|  | const action = ( | 
|  | <RouteContext.Consumer> | 
|  | {({ isMobile }) => { | 
|  | if (isMobile) { | 
|  | return ( | 
|  | <Dropdown.Button | 
|  | type="primary" | 
|  | icon={<DownOutlined />} | 
|  | overlay={mobileMenu} | 
|  | placement="bottomRight" | 
|  | > | 
|  | 主操作 | 
|  | </Dropdown.Button> | 
|  | ); | 
|  | } | 
|  |  | 
|  | return ( | 
|  | <Fragment> | 
|  | <ButtonGroup> | 
|  | <Button>操作一</Button> | 
|  | <Button>操作二</Button> | 
|  | <Dropdown overlay={menu} placement="bottomRight"> | 
|  | <Button> | 
|  | <EllipsisOutlined /> | 
|  | </Button> | 
|  | </Dropdown> | 
|  | </ButtonGroup> | 
|  | <Button type="primary">主操作</Button> | 
|  | </Fragment> | 
|  | ); | 
|  | }} | 
|  | </RouteContext.Consumer> | 
|  | ); | 
|  | const extra = ( | 
|  | <div className={styles.moreInfo}> | 
|  | <Statistic title="状态" value="待审批" /> | 
|  | <Statistic title="订单金额" value={568.08} prefix="¥" /> | 
|  | </div> | 
|  | ); | 
|  | const description = ( | 
|  | <RouteContext.Consumer> | 
|  | {({ isMobile }) => ( | 
|  | <Descriptions className={styles.headerList} size="small" column={isMobile ? 1 : 2}> | 
|  | <Descriptions.Item label="创建人">曲丽丽</Descriptions.Item> | 
|  | <Descriptions.Item label="订购产品">XX 服务</Descriptions.Item> | 
|  | <Descriptions.Item label="创建时间">2017-07-07</Descriptions.Item> | 
|  | <Descriptions.Item label="关联单据"> | 
|  | <a href="">12421</a> | 
|  | </Descriptions.Item> | 
|  | <Descriptions.Item label="生效日期">2017-07-07 ~ 2017-08-08</Descriptions.Item> | 
|  | <Descriptions.Item label="备注">请于两个工作日内确认</Descriptions.Item> | 
|  | </Descriptions> | 
|  | )} | 
|  | </RouteContext.Consumer> | 
|  | ); | 
|  | const desc1 = ( | 
|  | <div className={classNames(styles.textSecondary, styles.stepDescription)}> | 
|  | <Fragment> | 
|  | 曲丽丽 | 
|  | <DingdingOutlined | 
|  | style={{ | 
|  | marginLeft: 8, | 
|  | }} | 
|  | /> | 
|  | </Fragment> | 
|  | <div>2016-12-12 12:32</div> | 
|  | </div> | 
|  | ); | 
|  | const desc2 = ( | 
|  | <div className={styles.stepDescription}> | 
|  | <Fragment> | 
|  | 周毛毛 | 
|  | <DingdingOutlined | 
|  | style={{ | 
|  | color: '#00A0E9', | 
|  | marginLeft: 8, | 
|  | }} | 
|  | /> | 
|  | </Fragment> | 
|  | <div> | 
|  | <a href="">催一下</a> | 
|  | </div> | 
|  | </div> | 
|  | ); | 
|  | const popoverContent = ( | 
|  | <div | 
|  | style={{ | 
|  | width: 160, | 
|  | }} | 
|  | > | 
|  | 吴加号 | 
|  | <span | 
|  | className={styles.textSecondary} | 
|  | style={{ | 
|  | float: 'right', | 
|  | }} | 
|  | > | 
|  | <Badge | 
|  | status="default" | 
|  | text={ | 
|  | <span | 
|  | style={{ | 
|  | color: 'rgba(0, 0, 0, 0.45)', | 
|  | }} | 
|  | > | 
|  | 未响应 | 
|  | </span> | 
|  | } | 
|  | /> | 
|  | </span> | 
|  | <div | 
|  | className={styles.textSecondary} | 
|  | style={{ | 
|  | marginTop: 4, | 
|  | }} | 
|  | > | 
|  | 耗时:2小时25分钟 | 
|  | </div> | 
|  | </div> | 
|  | ); | 
|  |  | 
|  | const customDot = (dot, { status }) => { | 
|  | if (status === 'process') { | 
|  | return ( | 
|  | <Popover placement="topLeft" arrowPointAtCenter content={popoverContent}> | 
|  | <span>{dot}</span> | 
|  | </Popover> | 
|  | ); | 
|  | } | 
|  |  | 
|  | return dot; | 
|  | }; | 
|  |  | 
|  | const operationTabList = [ | 
|  | { | 
|  | key: 'tab1', | 
|  | tab: '操作日志一', | 
|  | }, | 
|  | { | 
|  | key: 'tab2', | 
|  | tab: '操作日志二', | 
|  | }, | 
|  | { | 
|  | key: 'tab3', | 
|  | tab: '操作日志三', | 
|  | }, | 
|  | ]; | 
|  | const columns = [ | 
|  | { | 
|  | title: '操作类型', | 
|  | dataIndex: 'type', | 
|  | key: 'type', | 
|  | }, | 
|  | { | 
|  | title: '操作人', | 
|  | dataIndex: 'name', | 
|  | key: 'name', | 
|  | }, | 
|  | { | 
|  | title: '执行结果', | 
|  | dataIndex: 'status', | 
|  | key: 'status', | 
|  | render: (text) => { | 
|  | if (text === 'agree') { | 
|  | return <Badge status="success" text="成功" />; | 
|  | } | 
|  |  | 
|  | return <Badge status="error" text="驳回" />; | 
|  | }, | 
|  | }, | 
|  | { | 
|  | title: '操作时间', | 
|  | dataIndex: 'updatedAt', | 
|  | key: 'updatedAt', | 
|  | }, | 
|  | { | 
|  | title: '备注', | 
|  | dataIndex: 'memo', | 
|  | key: 'memo', | 
|  | }, | 
|  | ]; | 
|  |  | 
|  | const Advanced = () => { | 
|  | const [tabStatus, seTabStatus] = useState({ | 
|  | operationKey: 'tab1', | 
|  | tabActiveKey: 'detail', | 
|  | }); | 
|  | const { data = {}, loading } = useRequest(queryAdvancedProfile); | 
|  | const { advancedOperation1, advancedOperation2, advancedOperation3 } = data; | 
|  | const contentList = { | 
|  | tab1: ( | 
|  | <Table | 
|  | pagination={false} | 
|  | loading={loading} | 
|  | dataSource={advancedOperation1} | 
|  | columns={columns} | 
|  | /> | 
|  | ), | 
|  | tab2: ( | 
|  | <Table | 
|  | pagination={false} | 
|  | loading={loading} | 
|  | dataSource={advancedOperation2} | 
|  | columns={columns} | 
|  | /> | 
|  | ), | 
|  | tab3: ( | 
|  | <Table | 
|  | pagination={false} | 
|  | loading={loading} | 
|  | dataSource={advancedOperation3} | 
|  | columns={columns} | 
|  | /> | 
|  | ), | 
|  | }; | 
|  |  | 
|  | const onTabChange = (tabActiveKey) => { | 
|  | seTabStatus({ ...tabStatus, tabActiveKey }); | 
|  | }; | 
|  |  | 
|  | const onOperationTabChange = (key) => { | 
|  | seTabStatus({ ...tabStatus, operationKey: key }); | 
|  | }; | 
|  |  | 
|  | return ( | 
|  | <PageContainer | 
|  | title="单号:234231029431" | 
|  | extra={action} | 
|  | className={styles.pageHeader} | 
|  | content={description} | 
|  | extraContent={extra} | 
|  | tabActiveKey={tabStatus.tabActiveKey} | 
|  | onTabChange={onTabChange} | 
|  | tabList={[ | 
|  | { | 
|  | key: 'detail', | 
|  | tab: '详情', | 
|  | }, | 
|  | { | 
|  | key: 'rule', | 
|  | tab: '规则', | 
|  | }, | 
|  | ]} | 
|  | > | 
|  | <div className={styles.main}> | 
|  | <GridContent> | 
|  | <Card | 
|  | title="流程进度" | 
|  | style={{ | 
|  | marginBottom: 24, | 
|  | }} | 
|  | > | 
|  | <RouteContext.Consumer> | 
|  | {({ isMobile }) => ( | 
|  | <Steps | 
|  | direction={isMobile ? 'vertical' : 'horizontal'} | 
|  | progressDot={customDot} | 
|  | current={1} | 
|  | > | 
|  | <Step title="创建项目" description={desc1} /> | 
|  | <Step title="部门初审" description={desc2} /> | 
|  | <Step title="财务复核" /> | 
|  | <Step title="完成" /> | 
|  | </Steps> | 
|  | )} | 
|  | </RouteContext.Consumer> | 
|  | </Card> | 
|  | <Card | 
|  | title="用户信息" | 
|  | style={{ | 
|  | marginBottom: 24, | 
|  | }} | 
|  | bordered={false} | 
|  | > | 
|  | <Descriptions | 
|  | style={{ | 
|  | marginBottom: 24, | 
|  | }} | 
|  | > | 
|  | <Descriptions.Item label="用户姓名">付小小</Descriptions.Item> | 
|  | <Descriptions.Item label="会员卡号">32943898021309809423</Descriptions.Item> | 
|  | <Descriptions.Item label="身份证">3321944288191034921</Descriptions.Item> | 
|  | <Descriptions.Item label="联系方式">18112345678</Descriptions.Item> | 
|  | <Descriptions.Item label="联系地址"> | 
|  | 曲丽丽 18100000000 浙江省杭州市西湖区黄姑山路工专路交叉路口 | 
|  | </Descriptions.Item> | 
|  | </Descriptions> | 
|  | <Descriptions | 
|  | style={{ | 
|  | marginBottom: 24, | 
|  | }} | 
|  | title="信息组" | 
|  | > | 
|  | <Descriptions.Item label="某某数据">725</Descriptions.Item> | 
|  | <Descriptions.Item label="该数据更新时间">2017-08-08</Descriptions.Item> | 
|  | <Descriptions.Item | 
|  | label={ | 
|  | <span> | 
|  | 某某数据 | 
|  | <Tooltip title="数据说明"> | 
|  | <InfoCircleOutlined | 
|  | style={{ | 
|  | color: 'rgba(0, 0, 0, 0.43)', | 
|  | marginLeft: 4, | 
|  | }} | 
|  | /> | 
|  | </Tooltip> | 
|  | </span> | 
|  | } | 
|  | > | 
|  | 725 | 
|  | </Descriptions.Item> | 
|  | <Descriptions.Item label="该数据更新时间">2017-08-08</Descriptions.Item> | 
|  | </Descriptions> | 
|  | <h4 | 
|  | style={{ | 
|  | marginBottom: 16, | 
|  | }} | 
|  | > | 
|  | 信息组 | 
|  | </h4> | 
|  | <Card type="inner" title="多层级信息组"> | 
|  | <Descriptions | 
|  | style={{ | 
|  | marginBottom: 16, | 
|  | }} | 
|  | title="组名称" | 
|  | > | 
|  | <Descriptions.Item label="负责人">林东东</Descriptions.Item> | 
|  | <Descriptions.Item label="角色码">1234567</Descriptions.Item> | 
|  | <Descriptions.Item label="所属部门">XX公司 - YY部</Descriptions.Item> | 
|  | <Descriptions.Item label="过期时间">2017-08-08</Descriptions.Item> | 
|  | <Descriptions.Item label="描述"> | 
|  | 这段描述很长很长很长很长很长很长很长很长很长很长很长很长很长很长... | 
|  | </Descriptions.Item> | 
|  | </Descriptions> | 
|  | <Divider | 
|  | style={{ | 
|  | margin: '16px 0', | 
|  | }} | 
|  | /> | 
|  | <Descriptions | 
|  | style={{ | 
|  | marginBottom: 16, | 
|  | }} | 
|  | title="组名称" | 
|  | column={1} | 
|  | > | 
|  | <Descriptions.Item label="学名"> | 
|  | Citrullus lanatus (Thunb.) Matsum. et | 
|  | Nakai一年生蔓生藤本;茎、枝粗壮,具明显的棱。卷须较粗.. | 
|  | </Descriptions.Item> | 
|  | </Descriptions> | 
|  | <Divider | 
|  | style={{ | 
|  | margin: '16px 0', | 
|  | }} | 
|  | /> | 
|  | <Descriptions title="组名称"> | 
|  | <Descriptions.Item label="负责人">付小小</Descriptions.Item> | 
|  | <Descriptions.Item label="角色码">1234568</Descriptions.Item> | 
|  | </Descriptions> | 
|  | </Card> | 
|  | </Card> | 
|  | <Card | 
|  | title="用户近半年来电记录" | 
|  | style={{ | 
|  | marginBottom: 24, | 
|  | }} | 
|  | bordered={false} | 
|  | > | 
|  | <Empty /> | 
|  | </Card> | 
|  | <Card | 
|  | className={styles.tabsCard} | 
|  | bordered={false} | 
|  | tabList={operationTabList} | 
|  | onTabChange={onOperationTabChange} | 
|  | > | 
|  | {contentList[tabStatus.operationKey]} | 
|  | </Card> | 
|  | </GridContent> | 
|  | </div> | 
|  | </PageContainer> | 
|  | ); | 
|  | }; | 
|  |  | 
|  | export default Advanced; |