From 3ae864f005e8a874de01c15e14b83196a3f6f11b Mon Sep 17 00:00:00 2001 From: xusd <hugeinfo123> Date: Wed, 18 Sep 2024 10:21:30 +0800 Subject: [PATCH] 新增一个测试环境 --- gz-customerSystem/src/views/disputeLedger/index.jsx | 451 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 442 insertions(+), 9 deletions(-) diff --git a/gz-customerSystem/src/views/disputeLedger/index.jsx b/gz-customerSystem/src/views/disputeLedger/index.jsx index 402ed27..bbb53eb 100644 --- a/gz-customerSystem/src/views/disputeLedger/index.jsx +++ b/gz-customerSystem/src/views/disputeLedger/index.jsx @@ -2,16 +2,20 @@ * @Company: hugeInfo * @Author: lwh * @Date: 2024-09-14 15:59:17 - * @LastEditTime: 2024-09-14 16:03:34 + * @LastEditTime: 2024-09-17 17:12:37 * @LastEditors: lwh * @Version: 1.0.0 * @Description: */ -import React, { useState, useEffect, useMemo } from 'react'; +import React, { useState, useEffect, useRef, useMemo } from 'react'; import * as $$ from '../../utils/utility'; -import { Form, Typography, Button, Space } from 'antd'; +import { Form, Typography, Row, Col, Space } from 'antd'; import { useLocation, useNavigate, useSearchParams } from 'react-router-dom'; +import { disputeLedger_1, disputeLedger_2, disputeLedger_3, disputeLedger_4, disputeLedger_5, disputeLedger_6, disputeLedger_7 } from '../../assets/images'; import NewPage from '../../components/NewPage/index'; +import * as echarts from 'echarts'; +import NewTableSearch from '../../components/NewTableSearch'; +import './index.less' const { Link } = Typography; @@ -26,14 +30,443 @@ } const DisputeLedger = () => { + const [form] = Form.useForm(); + // 数据汇总选择 + const [activeKey, setActiveKey] = useState(0) + const [tabsData, setTabsData] = useState([ + { icon: disputeLedger_1, title: '全部', value: '5032', active: true }, + { icon: disputeLedger_2, title: '综治中心', value: '1022', per: '20.3%' }, + { icon: disputeLedger_3, title: '12345', value: '1006', per: '19.8%' }, + { icon: disputeLedger_4, title: '人民调解', value: '2201', per: '40.3%' }, + { icon: disputeLedger_5, title: '信访', value: '221', per: '4.2%' }, + { icon: disputeLedger_6, title: '劳动仲裁', value: '98', per: '1.8%' }, + { icon: disputeLedger_7, title: '非警务纠纷', value: '432', per: '8.3%' }, + ]); + + // 搜索 or 重置 + function handleSearch(type, session) { + + } return ( - <NewPage - pageHead={ - { breadcrumbData: [{ title: '工作台' }, { title: '纠纷台账' }], title: '纠纷台账' } - } - ></NewPage> + <NewPage pageHead={{ breadcrumbData: [{ title: '工作台' }, { title: '纠纷台账' }], title: '纠纷台账' }}> + <div className='comprehensive'> + <div className="pageSearch"> + <div className='comprehensive-title'>查询条件</div> + <NewTableSearch + exportButtonShow={false} + labelLength={6} + rowNum={4.5} + form={form} + itemData={[ + { type: 'TreeSelect', name: 'mediateUnitId', label: '区域', placeholder: '请选择', treedata: [] }, + { type: 'RangePicker', name: 'createTime', label: '登记时间', span: 8 }, + { type: 'RangePicker', name: 'endTime', label: '办结时间', span: 8 }, + { + type: 'Select', + name: 'name1', + label: '纠纷类型', + span: 8, + selectdata: [ + { label: '全部', value: '1' }, + { label: '市场监管', value: '2' }, + { label: '劳动社保', value: '3' }, + { label: '城市管理', value: '4' }, + { label: '交通运输', value: '5' }, + { label: '教育医疗', value: '6' }, + { label: '公共服务', value: '7' }, + ], + }, + { + type: 'Select', + name: 'name2', + label: '化解状况', + span: 8, + selectdata: [ + { label: '全部', value: '1' }, + { label: '化解中', value: '2' }, + { label: '化解成功', value: '3' }, + { label: '化解不成功', value: '4' }, + ], + }, + { + type: 'Select', + name: 'name3', + label: '重大矛盾纠纷', + span: 8, + selectdata: [ + { label: '不限', value: '1' }, + ], + }, + { + type: 'Select', + name: 'name4', + label: '重点人员', + span: 8, + selectdata: [ + { label: '不限', value: '1' }, + ], + }, + ]} + handleReset={() => handleSearch('reset')} + handleSearch={() => handleSearch('search')} + /> + </div> + <div className='disputeLedger-row'> + <div className='comprehensive-title'>数据汇总</div> + <div className='disputeLedger-d'> + { + tabsData.map((item, index) => ( + <div onClick={() => setActiveKey(index)} className={`disputeLedger-card ${activeKey === index ? 'disputeLedger-card-active' : ''}`} span={3.4} key={index}> + <div > + <div className='disputeLedger-card-content'> + <div className={`disputeLedger-card-content-t ${activeKey === index ? 'disputeLedger-card-content-t-active' : ''}`}>{item.title}</div> + <div><span className='disputeLedger-card-title'>{item.value}</span> <span className='disputeLedger-unit'>件</span> {item.per && < span className='disputeLedger-unit'>| {item.per}</span>}</div> + </div> + {activeKey === index && <img src={item.icon} alt="" />} + </div> + </div> + )) + } + </div> + </div> + + {/* 图表 */} + <div className='disputeLedger-green'> + <div style={{ display: 'flex', flexDirection: 'column', gap: 12, marginBottom: '12px' }}> + <Space className='big-green-main-space' direction='vertical'> + <div style={{ margin: '0 12px' }}> + <div className='disputeLedger-green-title'>纠纷类型(全部)</div> + <div style={{ paddingBottom: '12px' }}> + <MyLTopChartPie data={ + [ + { value: 22, name: '市场监管' }, + { value: 28, name: '劳动社保' }, + { value: 15, name: '城市管理' }, + { value: 10, name: '交通运输' }, + { value: 5, name: '教育医疗' }, + { value: 20, name: '公共服务' }, + ] + } /> + </div> + </div> + </Space> + <Space style={{ position: 'relative' }} className='big-green-main-space' direction='vertical'> + <div style={{ margin: '0 12px' }}> + <div className='disputeLedger-green-title'>化解状况(全部)</div> + <div style={{ paddingBottom: '12px' }}> + <MyLTopChartPie1 data={ + [ + { value: 90, name: '小学' }, + { value: 200, name: '初中' }, + { value: 100, name: '高中' }, + { value: 300, name: '大学本科' }, + { value: 200, name: '硕士' }, + { value: 100, name: '其他' }, + ] + } /> + </div> + </div> + </Space> + </div> + <Space style={{ flex: '1', marginBottom: '12px' }} className='big-green-main-space' direction='vertical'> + <div className='big-green-main-title-display'> + <div className='disputeLedger-green-title'>数据统计(全部)</div> + </div> + <div style={{ width: '100%', height: '200px', marginTop: '12px' }}> + <MyChartBar data={[220, 5211, 2500, 3152, 8362, 26220, 8442, 2600, 1850, 1302, 850, 1048]} dataAxis={['本级', '越秀区', '海珠区', '荔湾区', '天河区', '白云区', '黄埔区', '花都区', '番禺区', '南沙区', '从化区', '增城区']} /> + + </div> + </Space> + </div> + </div > + </NewPage > ) } -export default DisputeLedger; \ No newline at end of file +export default DisputeLedger; + +// 柱状图 +const MyChartBar = ({ data, dataAxis }) => { + const myChartRef = useRef(); + // 图表 + const [myChart, setMyChart] = useState(); + + + // 加载图表数据 + useEffect(() => { + var myChart = echarts.init(document.getElementById('chartBar'), 'dark'); + // let data = [123, 98, 245, 234, 356, 148]; + // let dataAxis = ['低收入家庭', '单亲家庭', '流动家庭', '犯罪家庭', '无家庭', '其他'] + + // 绘制图表 + myChart.setOption({ + backgroundColor: '#fff', + grid: { + x: 10, + y: 20, + x2: 20, + y2: 0, + containLabel: true, + }, + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'none' + }, + formatter: function (params) { + return params[0].name + ': ' + params[0].value + '人'; + } + }, + xAxis: [{ + type: 'category', + // boundaryGap: false, + data: dataAxis, + + axisLabel: { + interval: dataAxis?.length > 15 ? 1 : 0, + formatter: function (value) { + // 如果标签长度超过4,将剩余的文字替换为省略号 + if (value.length > 4) { + return value.slice(0, 4) + '...'; + } else { + return value; + } + } + }, + }], + yAxis: { + splitLine: { + lineStyle: { + type: 'dashed', + color: '#ccc' + } + }, + + }, + dataZoom: [ + { + type: 'inside' + } + ], + series: [ + { + type: 'bar', + name: 'bar1', + stack: 'one', + showBackground: false, + barWidth: 28, // 柱子宽度 + itemStyle: { + color: '#3788C5' + }, + label: { + show: true, + position: 'top', + valueAnimation: false + }, + emphasis: { + itemStyle: { + opacity: 0.7 + } + }, + data: data + }, + ] + }); + }, [data]); + + useEffect(() => { + // if (myChart && myChartRef.current.clientHeight !== 0) { + // myChart.forceFit(); + // } + }); + + return <div id="chartBar" ref={myChartRef} style={{ height: '494px', width: '100%' }} />; +}; + +const MyLTopChartPie = ({ data }) => { + const myChartRef = useRef(); + // 图表 + const [myChart, setMyChart] = useState(); + + // 加载图表数据 + useEffect(() => { + var myChart = echarts.init(document.getElementById('chartLTopPie'), 'dark'); + + // 绘制图表 + myChart.setOption({ + backgroundColor: '#fff', + grid: { + x: 5, + y: 12, + x2: 20, + y2: 0, + }, + legend: { + orient: 'vertical', // 垂直排列 + top: 'center', + right: 10, + data: [ + { + name: '市场监管', + icon: 'circle', // 图例标记的形状 + }, + { + name: '劳动社保', + icon: 'circle', + }, + { + name: '城市管理', + icon: 'circle', + }, + { + name: '交通运输', + icon: 'circle', + }, + { + name: '教育医疗', + icon: 'circle', + }, + { + name: '公共服务', + icon: 'circle', + } + // ... 其他数据 + ] + }, + series: [ + { + name: '纠纷类型', + type: 'pie', + radius: '90%', + center: ['30%', '50%'], + color: ['#FCE996', '#FFCF8B', '#86E8DD', '#FDCDC5', '#C396ED', '#9FD4FD'], + labelLine: { // 关闭引导线 + show: false + }, + label: { + show: true, + position: 'inside', // 设置文字在扇形区域内 + formatter: '{d}%', // 标签文本格式器 + rich: { + a: { + lineHeight: 25, + align: 'center' + }, + b: { + lineHeight: 25, + align: 'center' + }, + c: { + lineHeight: 25, + align: 'center' + }, + d: { + lineHeight: 25, + align: 'center' + }, + e: { + lineHeight: 25, + align: 'center' + }, + f: { + lineHeight: 25, + align: 'center' + } + }, + // normal: { + // show: false, + // }, + }, + data: data + }, + ] + }); + }, [data]); + + + return <div id="chartLTopPie" ref={myChartRef} style={{ height: '230px', width: '100%' }} />; +}; + +const MyLTopChartPie1 = ({ data }) => { + const myChartRef = useRef(); + // 图表 + const [myChart, setMyChart] = useState(); + + + // 加载图表数据 + useEffect(() => { + var myChart = echarts.init(document.getElementById('chartLTopPie1'), 'dark'); + // let data = [123, 98, 245, 234, 356, 148]; + // let dataAxis = ['低收入家庭', '单亲家庭', '流动家庭', '犯罪家庭', '无家庭', '其他'] + + // 绘制图表 + myChart.setOption({ + backgroundColor: '#fff', + grid: { + x: 5, + y: 12, + x2: 20, + y2: 0, + containLabel: true, + }, + legend: { + orient: 'vertical', // 垂直排列 + top: 'center', + right: 10, + data: [ + { + name: '化解中', + icon: 'circle', // 图例标记的形状 + }, + { + name: '化解成功', + icon: 'circle', + }, + { + name: '化解不成功', + icon: 'circle', + }, + + ] + }, + series: [ + { + name: '化解状况', + type: 'pie', + radius: ['60%', '90%'], // 设置饼图的内半径和外半径,实现扇形区域 + center: ['30%', '50%'], + color: ['#B6DDF1', '#3A8AC6', '#094282'], + data: [ + { value: 24, name: '化解中' }, + { value: 30, name: '化解成功' }, + { value: 46, name: '化解不成功' }, + ], + label: { + show: true, + position: 'inside', // 设置文字在扇形区域内 + formatter: '{d}%', // 标签文本格式器 + rich: { + a: { + lineHeight: 25, + align: 'center' + }, + b: { + lineHeight: 25, + align: 'center' + }, + } + } + } + ] + }); + }, [data]); + + useEffect(() => { + // if (myChart && myChartRef.current.clientHeight !== 0) { + // myChart.forceFit(); + // } + }); + + return <div id="chartLTopPie1" ref={myChartRef} style={{ height: '230px', width: '100%' }} />; +}; -- Gitblit v1.8.0