UNPKG

@linkdesign/screen

Version:

屏组件库,但使用场景又不局限于屏。主要用于BI、大盘和屏

601 lines (550 loc) 16.4 kB
--- title: 组件示例 order: 2 --- ## 基础用法 ```jsx import React, { useState, useEffect } from 'react'; import ReactDOM from 'react-dom'; import { reduce } from 'lodash-es'; import { Switch, Grid, Divider } from '@alifd/next'; import { Title, Indicator, CarouselTable, EChart, BarStackChart, RingStackChart, GaugeChart, MiniLineChart, BarChart, LineChart, DemoWrapper, config, Scene, Utils, } from '@linkdesign/screen'; const { Row, Col } = Grid; const { CarPlate } = Scene.Park; const { _cssPrefix } = config; const { NWC } = Utils; const R1C3 = [ { actionTime: 1587696039000, actionType: 1, carNo: '鲁CH873D', carType: 1, inTime: 1587696039000, parkDuration: -31, parkId: 382, parkName: '六和金座停车场', recordId: '12020042410400426385400382', money: 5000, }, { actionTime: 1587695976000, actionType: 1, carNo: '浙AEJ092', carType: 1, inTime: 1587695976000, parkDuration: 31, parkId: 260, parkName: '中大银座停车场', recordId: '12020042410393663629050260', money: 4000, }, { actionTime: 1587695975000, actionType: 2, carNo: '浙AGF033', carType: 1, inTime: 1587694344000, outTime: 1587695975000, parkDuration: 1631, parkId: 260, parkName: '中大银座停车场', recordId: '12020042410122501693870260', money: 3000, }, { actionTime: 1587695973000, actionType: 1, carNo: '浙A2PT66', carType: 1, inTime: 1587695973000, parkDuration: 34, parkId: 261, parkName: '鹏辉产业园停车场', recordId: '12020042410393402013680261', money: 2000, }, { actionTime: 1587695971000, actionType: 2, carNo: '浙AJ885N', carType: 1, inTime: 1587693297000, outTime: 1587695971000, parkDuration: 2674, parkId: 362, parkName: '澹海金座停车场', recordId: '12020042409545781394750362', money: 1000, }, { actionTime: 1587695961000, actionType: 1, carNo: '浙FS1G12', carType: 1, inTime: 1587695961000, parkDuration: 46, parkId: 358, parkName: '龙轩停车场', recordId: '12020042410392148052130358', money: 1000, }, { actionTime: 1587695958000, actionType: 2, carNo: '浙ADC9223', carType: 5, inTime: 1587694482000, outTime: 1587695958000, parkDuration: 1476, parkId: 367, parkName: '之江发展大厦停车场', recordId: '12020042410144185394290367', money: 1000, }, { actionTime: 1587695933000, actionType: 1, carNo: '浙ABV586', carType: 1, inTime: 1587695933000, parkDuration: 74, parkId: 260, parkName: '中大银座停车场', recordId: '12020042410385380139350260', money: 1000, }, { actionTime: 1587695914000, actionType: 1, carNo: '浙A92008', carType: 1, inTime: 1587695914000, parkDuration: 93, parkId: 367, parkName: '之江发展大厦停车场', recordId: '12020042410383472221730367', money: 1000, }, { actionTime: 1587695910000, actionType: 1, carNo: '浙A8011E', carType: 1, inTime: 1587695910000, parkDuration: 97, parkId: 261, parkName: '鹏辉产业园停车场', recordId: '12020042410383014770170261', money: 1000, }, ]; const App = () => { const [r0c1, setR0c1] = useState(); const [r1c3, setR1c3] = useState(); useEffect(() => { fetchR0c1(); fetchR1c3(); }, []); const fetchR0c1 = () => { setTimeout(() => { const res = [ { value: 335, name: '消防事件' }, { value: 310, name: '城市内涝' }, { value: 234, name: '环境污染' }, { value: 135, name: '城管事件' }, { value: 1548, name: '安防事件' }, ]; const total = reduce(res, (sum, el) => sum + el.value, 0); setR0c1(res.map(({ value, name }) => ({ value, name: `${name} ${(value / total * 100).toFixed(2)}%` }))); }, 1000); }; const fetchR1c3 = () => { setTimeout(() => { const total = reduce(R1C3, (sum, el) => sum + el.money, 0); setR1c3(R1C3.map(({ money, parkName }, i) => ({ label: `${i + 1}. ${parkName}`, value: money, rate: money / total * 100, }))); }, 1000); }; return ( <DemoWrapper id="demo-Scene-Park"> <section style={{ marginBottom: 20 }}> <Title className={`${_cssPrefix}main-title`} textStyle={{ marginBottom: 12 }}>清家底</Title> <div> <Title className={`${_cssPrefix}sub-title`} textStyle={{ marginBottom: 12 }}>接入停车场数</Title> <Row justify="space-between"> <Col span="10" align="center"> <BarStackChart title="接入停车场" dataSource={[{ label: '类型一', value: 40, }, { label: '类型二', value: 60, }]} /> </Col> <Col span="10"> <RingStackChart title="接入停车场" dataSource={r0c1} /> </Col> </Row> </div> <Divider /> <div> <Title className={`${_cssPrefix}sub-title`} textStyle={{ marginBottom: 12 }}>接入调度停车场数</Title> <Row justify="space-between"> <Col span="10" align="center"> <BarStackChart title="接入调度停车场数" total={140} dataSource={[{ label: '类型一', value: '40%', }, { label: '类型二', value: '100%', }]} /> </Col> <Col span="10"> <RingStackChart title="接入调度停车场数" dataSource={r0c1} /> </Col> </Row> </div> <Divider /> <div> <Title className={`${_cssPrefix}sub-title`} textStyle={{ marginBottom: 12 }}>接入普查停车场数</Title> <Row justify="space-between"> <Col span="10" align="center"> <BarStackChart title="接入普查停车场数" total={140} dataSource={[{ label: '类型一', value: '40%', }, { label: '类型二', value: '100%', }]} /> </Col> <Col span="10"> <RingStackChart title="接入普查停车场数" dataSource={r0c1} /> </Col> </Row> </div> </section> <section style={{ marginBottom: 20 }}> <Title className={`${_cssPrefix}main-title`} textStyle={{ marginBottom: 12 }}>实时停车资源情况数据指标</Title> <div> <Title className={`${_cssPrefix}sub-title`} textStyle={{ marginBottom: 12 }}>实时停车数</Title> <Row> <Col span="5" align="center"> <Indicator type="main" label="在停车位总数" value={123456} /> </Col> <Col span="5" offset="2" align="center"> <Indicator type="main" label="空闲车位数" value={11456} /> </Col> <Col span="10" offset="2"> <BarStackChart title="在停车位总数" dataSource={[{ label: '类型一', value: 400, }, { label: '类型二', value: 600, }]} /> </Col> </Row> </div> <Divider /> <div> <Title className={`${_cssPrefix}sub-title`} textStyle={{ marginBottom: 12 }}>负荷指数</Title> <Row justify="space-between"> <Col span="10" align="center"> <GaugeChart universalStyle={{ height: 240 }} config={{ value: 5.4, limit: 6, max: 8, label: '良好', content: (val) => val.toFixed(1), }} /> </Col> <Col span="10"> <GaugeChart universalStyle={{ height: 240 }} config={{ value: 7, limit: 6, max: 8, label: '超负荷', content: (val) => val.toFixed(1), }} /> </Col> </Row> </div> <Divider /> <div> <Title className={`${_cssPrefix}sub-title`} textStyle={{ marginBottom: 12 }}>余位识别准确率</Title> <Row> <Col span="2" align="center"> <Indicator type="main" label="余位准确率" value="85%" unit={<span className={`with-triangle ${_cssPrefix}data`}>12%</span>} /> </Col> <Col span="3" offset="1" align="center"> <MiniLineChart universalStyle={{ height: 56 }} dataSource={[820, 932, 901, 934, 1290, 1330, 1320]} /> </Col> </Row> </div> <Divider /> <div> <Title className={`${_cssPrefix}sub-title`} textStyle={{ marginBottom: 12 }}>驶入驶出情况</Title> <Row> <Col span="12"> <CarouselTable title="停车场车辆实时进出情况" global={{ textStyle: { color: '#fff' } }} universalStyle={{ height: 280 }} sliderOptions={{ slidesToShow: 5 }} headerOptions={{ textStyle: { borderTop: '1px solid #D3E2FF', borderBottom: '1px solid #D3E2FF', }, }} rowOptions={{ oddBackgroundColor: '#112854', }} column={[{ key: 'actionTime', alias: '时间', widthRate: 20, type: 'time', textStyle: { paddingLeft: 10, }, }, { key: 'parkName', alias: '车场', widthRate: 40, }, { key: 'carNo', alias: '车牌', widthRate: 20, cell: (val, i, record) => (val ? <CarPlate plateNo={val} plateColor={1} /> : '-'), }, { key: 'money', alias: '金额', widthRate: 20, type: 'data', }]} dataSource={R1C3} /> </Col> </Row> </div> <Divider /> <div> <Title className={`${_cssPrefix}sub-title`} textStyle={{ marginBottom: 12 }}>停车热点排行</Title> <Row> <Col span="12"> <CarouselTable title="停车热点排行" universalStyle={{ height: 280 }} sliderOptions={{ slidesToShow: 5 }} column={[{ key: '$index', widthRate: 10, }, { key: 'parkName', alias: '停车场/路侧停车名称', widthRate: 70, }, { key: 'money', alias: '负荷指数', widthRate: 20, type: 'data', }]} dataSource={R1C3} /> </Col> </Row> </div> <Divider /> <div> <Title className={`${_cssPrefix}sub-title`} textStyle={{ marginBottom: 12 }}>停车场饱和度排名</Title> <Row> <Col span="12"> <BarChart title="停车场饱和度排名" universalStyle={{ height: 280 }} dataSource={r1c3} /> </Col> </Row> </div> <Divider /> <div> <Title className={`${_cssPrefix}sub-title`} textStyle={{ marginBottom: 12 }}>停车场泊车活跃排名</Title> <Row> <Col span="12"> <BarChart title="停车场泊车活跃度排名" universalStyle={{ height: 280 }} dataSource={r1c3} /> </Col> </Row> </div> <Divider /> <div> <Title className={`${_cssPrefix}sub-title`} textStyle={{ marginBottom: 12 }}>全域车位利用率</Title> <Row> <Col span="12"> <LineChart title="全域车位利用率" universalStyle={{ height: 220, }} options={{ tooltip: { formatter: '时间: {b}<br />利用率: {c}%', }, xAxis: { data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], }, yAxis: { name: '单位:%', min: 0, max: 100, }, series: [{ data: [20, 32, 10, 34, 90, 30, 20], lineStyle: { color: '#3B81FF', }, areaStyle: { color: { type: 'linear', x: 0, y: 0, x2: 0, y2: 1, colorStops: [{ offset: 0, color: 'rgba(0, 112, 204, 0.5)' }, { offset: 1, color: 'rgba(0, 112, 204, 0)' }], } }, }], }} /> </Col> </Row> </div> <Divider /> <div> <Title className={`${_cssPrefix}sub-title`} textStyle={{ marginBottom: 12 }}>停车难度预测(时间维度)</Title> <Row> <Col span="12"> <LineChart title="停车难度预测(时间维度)" universalStyle={{ height: 220, }} options={{ tooltip: { // formatter: '时间: {b}<br />利用率: {c}%', }, xAxis: { data: ['12:00', '15:00', '18:00', '21:00', '24:00'], }, yAxis: { name: '单位:%', scale: true, }, series: [{ type: 'line', symbol: 'circle', symbolSize: 6, data: [20, 32, 10, null, null], markLine: { data: [{ xAxis: '18:00', label: { formatter: '现在', position: 'start' }, lineStyle: { type: 'solid', color: 'rgba(211, 226, 255, 0.5)', } }], }, }, { type: 'line', symbol: 'circle', symbolSize: 6, data: [null, null, 20, 44, 80], lineStyle: { type: 'dashed', } }], }} /> </Col> </Row> </div> </section> </DemoWrapper> ); } ReactDOM.render(( <App /> ), mountNode); ```