18 files added
10 files modified
| | |
| | | * @Company: hugeInfo |
| | | * @Author: ldh |
| | | * @Date: 2022-02-16 11:25:57 |
| | | * @LastEditTime: 2024-09-14 15:43:38 |
| | | * @LastEditTime: 2024-09-15 10:34:45 |
| | | * @LastEditors: lwh |
| | | * @Version: 1.0.0 |
| | | * @Description: api地址 |
| | | */ |
| | | export const debug = { |
| | | // web服务 |
| | | // baseUrl: 'http://gz.hugeinfo.com.cn', |
| | | baseUrl: "http://4gg4nv.natappfree.cc", |
| | | baseUrl: 'http://gz.hugeinfo.com.cn', |
| | | // baseUrl: "http://4gg4nv.natappfree.cc", |
| | | // baseUrl: 'http://mdqgnh.natappfree.cc', |
| | | |
| | | // 附件服务 |
| | |
| | | * @Company: hugeInfo |
| | | * @Author: lwh |
| | | * @Date: 2023-04-24 16:12:00 |
| | | * @LastEditTime: 2024-09-11 09:44:38 |
| | | * @LastEditors: dminyi 1301963064@qq.com |
| | | * @LastEditTime: 2024-09-17 12:30:42 |
| | | * @LastEditors: lwh |
| | | * @Version: 1.0.0 |
| | | * @Description: |
| | | */ |
| | | import ledger_1 from "./ledger_1.png"; |
| | | import ledger_2 from "./ledger_2.png"; |
| | | import ledger_3 from "./ledger_3.png"; |
| | | import ledger_4 from "./ledger_4.png"; |
| | | import ledger_5 from "./ledger_5.png"; |
| | | import ledger_6 from "./ledger_6.png"; |
| | | import ledger_7 from "./ledger_7.png"; |
| | | import ledger_8 from "./ledger_8.png"; |
| | | import ledger_9 from "./ledger_9.svg"; |
| | | import ledger_10 from "./ledger_10.png"; |
| | | import ledger_11 from "./ledger_11.png"; |
| | | import ledger_12 from "./ledger_12.png"; |
| | | import ledger_13 from "./ledger_13.png"; |
| | | import mediateBigData_1 from "./mediateBigData_1.png"; |
| | | import mediateBigData_2 from "./mediateBigData_2.png"; |
| | | import mediateBigData_3 from "./mediateBigData_3.png"; |
| | | import mediateBigData_4 from "./mediateBigData_4.png"; |
| | | import mediateBigData_5 from "./mediateBigData_5.png"; |
| | | import mediateBigData_6 from "./mediateBigData_6.png"; |
| | | import mediateBigData_7 from "./mediateBigData_7.png"; |
| | | import mediateBigData_8 from "./mediateBigData_8.png"; |
| | | import caseDetail from "./caseDetail.png"; |
| | | import caseDetailResult from "./caseDetailResult.png"; |
| | | import process from "./process.png"; |
| | | import add from "./add.png"; |
| | | import del from "./del.png"; |
| | | import question from "./question.png"; |
| | | import question1 from "./question1.png"; |
| | | import person from "./person.png"; |
| | | import link from "./link.png"; |
| | | import check from "./check.png"; |
| | | import image from "./image.png"; |
| | | import applyMaterials from "./applyMaterials.png"; |
| | | import applyMaterials_active from "./applyMaterials_active.png"; |
| | | import evidenceMaterials from "./evidenceMaterials.png"; |
| | | import evidenceMaterials_active from "./evidenceMaterials_active.png"; |
| | | import closeIcon from "./closeIcon.png"; |
| | | import backgroundImage from "./backgroundImage.jpg"; |
| | | import logo1 from "./logo1.png"; |
| | | import register from "./register.png"; |
| | | import Matter from "./matter.png"; |
| | | import transfer from "./transfer.png"; |
| | | import empty from "./empty.png"; |
| | | import feedback from "./feedback.png"; |
| | | import fold from "./fold.png"; |
| | | import down from "./down.png"; |
| | | import tip from "./tip.png"; |
| | | import apply from "./apply.png"; |
| | | import examine from "./examine.png"; |
| | | import knock from "./knock.png"; |
| | | import edit from "./edit.png"; |
| | | import applyRecord from "./applyRecord.png"; |
| | | import downO from "./downO.png"; |
| | | import up from "./up.png"; |
| | | import Audit from "./Audit.png"; |
| | | import aiPerson from "./aiPerson.png"; |
| | | import caselogo from "./caselogo.png"; |
| | | import tab1 from "./tab1.png"; |
| | | import tab2 from "./tab2.png"; |
| | | import tab3 from "./tab3.png"; |
| | | import tab4 from "./tab4.png"; |
| | | import tab5 from "./tab5.png"; |
| | | import tab6 from "./tab6.png"; |
| | | import visitInto from "./visitInto.png"; |
| | | import checkInto from "./checkInto.png"; |
| | | import floating from "./floating.png"; |
| | | import Aimge from "./Aimge.png"; |
| | | import yewu from "./yewu.png"; |
| | | import ledger_1 from './ledger_1.png'; |
| | | import ledger_2 from './ledger_2.png'; |
| | | import ledger_3 from './ledger_3.png'; |
| | | import ledger_4 from './ledger_4.png'; |
| | | import ledger_5 from './ledger_5.png'; |
| | | import ledger_6 from './ledger_6.png'; |
| | | import ledger_7 from './ledger_7.png'; |
| | | import ledger_8 from './ledger_8.png'; |
| | | import ledger_9 from './ledger_9.svg'; |
| | | import ledger_10 from './ledger_10.png'; |
| | | import ledger_11 from './ledger_11.png'; |
| | | import ledger_12 from './ledger_12.png'; |
| | | import ledger_13 from './ledger_13.png'; |
| | | import mediateBigData_1 from './mediateBigData_1.png'; |
| | | import mediateBigData_2 from './mediateBigData_2.png'; |
| | | import mediateBigData_3 from './mediateBigData_3.png'; |
| | | import mediateBigData_4 from './mediateBigData_4.png'; |
| | | import mediateBigData_5 from './mediateBigData_5.png'; |
| | | import mediateBigData_6 from './mediateBigData_6.png'; |
| | | import mediateBigData_7 from './mediateBigData_7.png'; |
| | | import mediateBigData_8 from './mediateBigData_8.png'; |
| | | import caseDetail from './caseDetail.png'; |
| | | import caseDetailResult from './caseDetailResult.png'; |
| | | import process from './process.png'; |
| | | import add from './add.png'; |
| | | import del from './del.png'; |
| | | import question from './question.png'; |
| | | import question1 from './question1.png'; |
| | | import person from './person.png'; |
| | | import link from './link.png'; |
| | | import check from './check.png'; |
| | | import image from './image.png'; |
| | | import applyMaterials from './applyMaterials.png'; |
| | | import applyMaterials_active from './applyMaterials_active.png'; |
| | | import evidenceMaterials from './evidenceMaterials.png'; |
| | | import evidenceMaterials_active from './evidenceMaterials_active.png'; |
| | | import closeIcon from './closeIcon.png'; |
| | | import backgroundImage from './backgroundImage.jpg'; |
| | | import logo1 from './logo1.png'; |
| | | import register from './register.png'; |
| | | import Matter from './matter.png'; |
| | | import transfer from './transfer.png'; |
| | | import empty from './empty.png'; |
| | | import feedback from './feedback.png'; |
| | | import fold from './fold.png'; |
| | | import down from './down.png'; |
| | | import tip from './tip.png'; |
| | | import apply from './apply.png'; |
| | | import examine from './examine.png'; |
| | | import knock from './knock.png'; |
| | | import edit from './edit.png'; |
| | | import applyRecord from './applyRecord.png'; |
| | | import downO from './downO.png'; |
| | | import up from './up.png'; |
| | | import Audit from './Audit.png'; |
| | | import aiPerson from './aiPerson.png'; |
| | | import caselogo from './caselogo.png'; |
| | | import tab1 from './tab1.png'; |
| | | import tab2 from './tab2.png'; |
| | | import tab3 from './tab3.png'; |
| | | import tab4 from './tab4.png'; |
| | | import tab5 from './tab5.png'; |
| | | import tab6 from './tab6.png'; |
| | | import visitInto from './visitInto.png'; |
| | | import checkInto from './checkInto.png'; |
| | | import floating from './floating.png'; |
| | | import Aimge from './Aimge.png'; |
| | | import yewu from './yewu.png'; |
| | | import disputeLedger_1 from './disputeLedger_1.png'; |
| | | import disputeLedger_2 from './disputeLedger_2.png'; |
| | | import disputeLedger_3 from './disputeLedger_3.png'; |
| | | import disputeLedger_4 from './disputeLedger_4.png'; |
| | | import disputeLedger_5 from './disputeLedger_5.png'; |
| | | import disputeLedger_6 from './disputeLedger_6.png'; |
| | | import disputeLedger_7 from './disputeLedger_7.png'; |
| | | import workDash_1 from './workDash_1.png'; |
| | | import workDash_2 from './workDash_2.png'; |
| | | import workDash_3 from './workDash_3.png'; |
| | | import workDash_4 from './workDash_4.png'; |
| | | import workDash_5 from './workDash_5.png'; |
| | | import workDash_6 from './workDash_6.png'; |
| | | import workDash_7 from './workDash_7.png'; |
| | | import workDash_8 from './workDash_8.png'; |
| | | import workDash_9 from './workDash_9.png'; |
| | | |
| | | export { |
| | | ledger_1, |
| | | ledger_2, |
| | | ledger_3, |
| | | ledger_4, |
| | | ledger_5, |
| | | ledger_6, |
| | | ledger_7, |
| | | ledger_8, |
| | | ledger_9, |
| | | ledger_10, |
| | | ledger_11, |
| | | ledger_12, |
| | | ledger_13, |
| | | mediateBigData_1, |
| | | mediateBigData_2, |
| | | mediateBigData_3, |
| | | mediateBigData_4, |
| | | mediateBigData_5, |
| | | mediateBigData_6, |
| | | mediateBigData_7, |
| | | mediateBigData_8, |
| | | caseDetail, |
| | | caseDetailResult, |
| | | process, |
| | | add, |
| | | del, |
| | | question, |
| | | question1, |
| | | person, |
| | | link, |
| | | check, |
| | | image, |
| | | applyMaterials, |
| | | applyMaterials_active, |
| | | evidenceMaterials, |
| | | evidenceMaterials_active, |
| | | closeIcon, |
| | | backgroundImage, |
| | | logo1, |
| | | register, |
| | | Matter, |
| | | transfer, |
| | | empty, |
| | | feedback, |
| | | fold, |
| | | down, |
| | | tip, |
| | | apply, |
| | | examine, |
| | | knock, |
| | | edit, |
| | | applyRecord, |
| | | downO, |
| | | up, |
| | | Audit, |
| | | aiPerson, |
| | | caselogo, |
| | | tab1, |
| | | tab2, |
| | | tab3, |
| | | tab4, |
| | | tab5, |
| | | tab6, |
| | | visitInto, |
| | | checkInto, |
| | | floating, |
| | | Aimge, |
| | | yewu |
| | | }; |
| | | ledger_1, |
| | | ledger_2, |
| | | ledger_3, |
| | | ledger_4, |
| | | ledger_5, |
| | | ledger_6, |
| | | ledger_7, |
| | | ledger_8, |
| | | ledger_9, |
| | | ledger_10, |
| | | ledger_11, |
| | | ledger_12, |
| | | ledger_13, |
| | | mediateBigData_1, |
| | | mediateBigData_2, |
| | | mediateBigData_3, |
| | | mediateBigData_4, |
| | | mediateBigData_5, |
| | | mediateBigData_6, |
| | | mediateBigData_7, |
| | | mediateBigData_8, |
| | | caseDetail, |
| | | caseDetailResult, |
| | | process, |
| | | add, |
| | | del, |
| | | question, |
| | | question1, |
| | | person, |
| | | link, |
| | | check, |
| | | image, |
| | | applyMaterials, |
| | | applyMaterials_active, |
| | | evidenceMaterials, |
| | | evidenceMaterials_active, |
| | | closeIcon, |
| | | backgroundImage, |
| | | logo1, |
| | | register, |
| | | Matter, |
| | | transfer, |
| | | empty, |
| | | feedback, |
| | | fold, |
| | | down, |
| | | tip, |
| | | apply, |
| | | examine, |
| | | knock, |
| | | edit, |
| | | applyRecord, |
| | | downO, |
| | | up, |
| | | Audit, |
| | | aiPerson, |
| | | caselogo, |
| | | tab1, |
| | | tab2, |
| | | tab3, |
| | | tab4, |
| | | tab5, |
| | | tab6, |
| | | visitInto, |
| | | checkInto, |
| | | floating, |
| | | Aimge, |
| | | yewu, |
| | | disputeLedger_1, |
| | | disputeLedger_2, |
| | | disputeLedger_3, |
| | | disputeLedger_4, |
| | | disputeLedger_5, |
| | | disputeLedger_6, |
| | | disputeLedger_7, |
| | | workDash_1, |
| | | workDash_2, |
| | | workDash_3, |
| | | workDash_4, |
| | | workDash_5, |
| | | workDash_6, |
| | | workDash_7, |
| | | workDash_8, |
| | | workDash_9, |
| | | }; |
| | |
| | | * handleSearch, // 搜索 |
| | | * exportButton //导出按钮 |
| | | */ |
| | | const NewTableSearch = ({ form, itemData, labelLength = 5, rowNum = 3, handleReset, handleSearch, exportButton }) => { |
| | | const NewTableSearch = ({ form, itemData, labelLength = 5, rowNum = 3, handleReset, handleSearch, exportButtonShow = true, exportButton }) => { |
| | | const [searchMore, setSearchMore] = useState(false); |
| | | |
| | | const span = 24 / rowNum; |
| | |
| | | |
| | | return ( |
| | | <Form form={form} labelAlign="right" className="tableSearch"> |
| | | |
| | | {itemData.map((x, t) => { |
| | | let placeholder = x.placeholder || setPlaceholder(x.name, x.type); |
| | | let allowClear = x.allowClear || true; |
| | | let dom = null; |
| | | let rules = {}; |
| | | if (x.type === 'Input') { |
| | | dom = <Input placeholder={placeholder} allowClear {...x} />; |
| | | rules = { max: x.max || 32, message: '搜索内容过长' }; |
| | | } |
| | | if (x.type === 'Select') { |
| | | dom = ( |
| | | <Select allowClear placeholder={placeholder} {...x}> |
| | | {x.selectdata?.map((y) => ( |
| | | <Option key={y.value}>{y.label}</Option> |
| | | ))} |
| | | </Select> |
| | | ); |
| | | } |
| | | if (x.type === 'RangePicker') { |
| | | rules = { type: 'array' }; |
| | | dom = ( |
| | | <RangePicker |
| | | style={{ width: '100%' }} |
| | | ranges={{ |
| | | '今日': [$$.myMoment(), $$.myMoment()], |
| | | '本月': [$$.myMoment().startOf('month'), $$.myMoment().endOf('month')], |
| | | }} |
| | | allowClear |
| | | {...x} |
| | | /> |
| | | ); |
| | | } |
| | | if (x.type === 'TreeSelect') { |
| | | dom = ( |
| | | <TreeSelect |
| | | showSearch |
| | | placeholder={placeholder} |
| | | dropdownStyle={{ maxHeight: 500, overflow: 'auto' }} |
| | | treeData={x.treedata} |
| | | treeDefaultExpandAll |
| | | allowClear |
| | | filterTreeNode={(inputValue, treeNode) => (treeNode.label.indexOf(inputValue) !== -1 ? true : false)} |
| | | {...x} |
| | | /> |
| | | ); |
| | | } |
| | | return ( |
| | | <Row className='tableSearch-searchMore-row' gutter={[24, 16]} style={display && { display: searchMore ? 'block' : t < lineNum ? 'block' : 'none' }}> |
| | | <Col span={x.span || 8} key={t + 1}> |
| | | <Form.Item name={x.name} rules={[rules]} label={<div style={{ width: `${fontSize * labelLength}px` }}>{x.label}</div>}> |
| | | {dom} |
| | | </Form.Item> |
| | | <Row className='tableSearch-searchMore-row' gutter={[24, 16]} > |
| | | {itemData.map((x, t) => { |
| | | let placeholder = x.placeholder || setPlaceholder(x.name, x.type); |
| | | let allowClear = x.allowClear || true; |
| | | let dom = null; |
| | | let rules = {}; |
| | | if (x.type === 'Input') { |
| | | dom = <Input placeholder={placeholder} allowClear {...x} />; |
| | | rules = { max: x.max || 32, message: '搜索内容过长' }; |
| | | } |
| | | if (x.type === 'Select') { |
| | | dom = ( |
| | | <Select allowClear placeholder={placeholder} {...x}> |
| | | {x.selectdata?.map((y) => ( |
| | | <Option key={y.value}>{y.label}</Option> |
| | | ))} |
| | | </Select> |
| | | ); |
| | | } |
| | | if (x.type === 'RangePicker') { |
| | | rules = { type: 'array' }; |
| | | dom = ( |
| | | <RangePicker |
| | | style={{ width: '100%' }} |
| | | ranges={{ |
| | | '今日': [$$.myMoment(), $$.myMoment()], |
| | | '本月': [$$.myMoment().startOf('month'), $$.myMoment().endOf('month')], |
| | | }} |
| | | allowClear |
| | | {...x} |
| | | /> |
| | | ); |
| | | } |
| | | if (x.type === 'TreeSelect') { |
| | | dom = ( |
| | | <TreeSelect |
| | | showSearch |
| | | placeholder={placeholder} |
| | | dropdownStyle={{ maxHeight: 500, overflow: 'auto' }} |
| | | treeData={x.treedata} |
| | | treeDefaultExpandAll |
| | | allowClear |
| | | filterTreeNode={(inputValue, treeNode) => (treeNode.label.indexOf(inputValue) !== -1 ? true : false)} |
| | | {...x} |
| | | /> |
| | | ); |
| | | } |
| | | if (x.type === 'null') { |
| | | dom = ( |
| | | <Col span={x.span || 8}></Col> |
| | | ); |
| | | } |
| | | return ( |
| | | <Col span={x.span || 8} style={display && { display: searchMore ? 'block' : t < lineNum ? 'block' : 'none' }} key={t + 1}> |
| | | { |
| | | x.type === 'null' ? <>{ dom }</> : |
| | | <Form.Item name={x.name} rules={[rules]} label={<div style={{ width: `${fontSize * labelLength}px` }}>{x.label}</div>}> |
| | | {dom} |
| | | </Form.Item> |
| | | } |
| | | </Col> |
| | | </Row> |
| | | // <div> |
| | | // <Col span={8} style={display && { display: searchMore ? 'block' : t < lineNum ? 'block' : 'none' }} key={t + 1}> |
| | | // <Form.Item name={x.name} rules={[rules]} label={<div style={{ width: `${fontSize * labelLength}px` }}>{x.label}</div>}> |
| | | // {dom} |
| | | // </Form.Item> |
| | | // </Col> |
| | | // <Col span={8}></Col> |
| | | // <Col span={8}></Col> |
| | | // </div> |
| | | ); |
| | | })} |
| | | // <div> |
| | | // <Col span={8} style={display && { display: searchMore ? 'block' : t < lineNum ? 'block' : 'none' }} key={t + 1}> |
| | | // <Form.Item name={x.name} rules={[rules]} label={<div style={{ width: `${fontSize * labelLength}px` }}>{x.label}</div>}> |
| | | // {dom} |
| | | // </Form.Item> |
| | | // </Col> |
| | | // <Col span={8}></Col> |
| | | // <Col span={8}></Col> |
| | | // </div> |
| | | ); |
| | | })} |
| | | </Row> |
| | | <div className='NewTableSearch-border'></div> |
| | | <Row style={{ marginTop: '16px' }}> |
| | | <Col span={24} style={{ textAlign: 'left' }}> |
| | | <Button className="public-buttonMargin" type="primary" htmlType="submit" icon={<SearchOutlined />} onClick={handleSearch}> |
| | | 查询 |
| | | </Button> |
| | | <Button className="public-buttonMargin" type="primary" ghost htmlType="submit" onClick={exportButton}> |
| | | 导出查询结果 |
| | | </Button> |
| | | { |
| | | exportButtonShow && |
| | | <Button className="public-buttonMargin" type="primary" ghost htmlType="submit" onClick={exportButton}> |
| | | 导出查询结果 |
| | | </Button> |
| | | } |
| | | <Button onClick={handleReset}> |
| | | 重置条件 |
| | | </Button> |
| | |
| | | margin-bottom: 16px; |
| | | } |
| | | } |
| | | |
| | | .NewTableSearch-border { |
| | | margin: 12px 0; |
| | | border-bottom: 1px solid #E5E6EB; |
| | | } |
| | |
| | | * @Company: hugeInfo |
| | | * @Author: ldh |
| | | * @Date: 2022-03-28 11:22:41 |
| | | * @LastEditTime: 2024-09-14 16:09:40 |
| | | * @LastEditTime: 2024-09-17 10:42:26 |
| | | * @LastEditors: lwh |
| | | * @Version: 1.0.0 |
| | | * @Description: 路由 |
| | |
| | | import Comprehensive from '../views/comprehensive'; |
| | | // 纠纷台账 |
| | | import DisputeLedger from '../views/disputeLedger'; |
| | | import WorkDash from '../views/workDash'; |
| | | |
| | | // 数据分析 |
| | | import DataSearch from '../views/statistic/dataSearch'; |
| | |
| | | <Route path="comprehensive" element={<Comprehensive />} /> |
| | | {/* 纠纷台账 */} |
| | | <Route path="account" element={<DisputeLedger />} /> |
| | | {/* 解纷态势 */} |
| | | <Route path="workDash" element={<WorkDash />} /> |
| | | {/* 数据分析 */} |
| | | <Route path="dataSearch" element={<DataSearch />} /> |
| | | {/* 调解视窗成功页 */} |
| | |
| | | * @Company: hugeInfo |
| | | * @Author: ldh |
| | | * @Date: 2022-02-16 11:57:54 |
| | | * @LastEditTime: 2024-09-12 10:55:38 |
| | | * @LastEditors: dminyi 1301963064@qq.com |
| | | * @LastEditTime: 2024-09-15 10:36:03 |
| | | * @LastEditors: lwh |
| | | * @Version: 1.0.0 |
| | | * @Description: 公共模块方法 |
| | | */ |
| | |
| | | import moment from 'moment'; |
| | | import { pdf, jpg, file, word, excel } from '../assets/images/icon'; |
| | | |
| | | export const isDebug = true; // 是否测试环境 |
| | | export const isDebug = false; // 是否测试环境 |
| | | |
| | | export const appUrl = isDebug ? debug : web; // api |
| | | |
| | |
| | | import { FolderFilled } from '@ant-design/icons'; |
| | | import * as $$ from '../../utils/utility'; |
| | | import { useLocation, useNavigate } from 'react-router-dom'; |
| | | import TableView from '../../components/TableView'; |
| | | import TableView from '../../components/TableViewCanSort'; |
| | | import NewTableSearch from '../../components/NewTableSearch'; |
| | | import MyTabs from '../../components/MyTabs'; |
| | | import './index.less' |
| | |
| | | // 表头 |
| | | const columns = () => { |
| | | const columnsData = [ |
| | | { title: '事项状态', width: 80, dataIndex: 'statusName' }, |
| | | { title: '事项来源', width: 80, dataIndex: 'canalName' }, |
| | | { title: '事项等级', width: 80, dataIndex: 'caseLevel' }, |
| | | { title: '事项状态', width: 100, dataIndex: 'statusName' }, |
| | | { title: '事项来源', width: 100, dataIndex: 'canalName' }, |
| | | { title: '事项等级', width: 100, dataIndex: 'caseLevel' }, |
| | | { title: '纠纷类型', width: 150, dataIndex: 'caseTypeName' }, |
| | | { title: '承办部门', width: 150, dataIndex: 'mediateDeptName' }, |
| | | { title: '配合部门', width: 150, dataIndex: 'assistUnitName' }, |
| | |
| | | if (res.type) { |
| | | setSearch(submitData); |
| | | setData({ |
| | | total: res.data?.totalElements, |
| | | tableData: res.data?.content || [], |
| | | total: 0, |
| | | tableData: [], |
| | | }); |
| | | } |
| | | } |
| | |
| | | form={form} |
| | | itemData={[ |
| | | { type: 'RangePicker', name: 'acceptTime', label: '办结时间', span: 8 }, |
| | | { type: 'null'}, |
| | | { type: 'null'}, |
| | | { type: 'RangePicker', name: 'acceptTime', label: '归档时间', span: 8 }, |
| | | { type: 'null'}, |
| | | { type: 'null'}, |
| | | { |
| | | type: 'Select', |
| | | name: 'joinRole', |
| | |
| | | { label: '我协助的', value: '2' }, |
| | | ], |
| | | }, |
| | | { |
| | | type: 'Select', |
| | | name: 'joinRole', |
| | | label: '承办部门', |
| | | selectdata: [ |
| | | { label: '我负责的', value: '1' }, |
| | | { label: '我协助的', value: '2' }, |
| | | ], |
| | | }, |
| | | { |
| | | type: 'Select', |
| | | name: 'joinRole', |
| | | label: '登记机构', |
| | | selectdata: [ |
| | | { label: '我负责的', value: '1' }, |
| | | { label: '我协助的', value: '2' }, |
| | | ], |
| | | }, |
| | | { type: 'Input', name: 'defendants', label: '被申请人' }, |
| | | { type: 'Input', name: 'caseNo', label: '调解案号' }, |
| | | // { |
| | | // type: 'Select', |
| | | // name: 'joinRole', |
| | | // label: '承办部门', |
| | | // selectdata: [ |
| | | // { label: '我负责的', value: '1' }, |
| | | // { label: '我协助的', value: '2' }, |
| | | // ], |
| | | // }, |
| | | // { |
| | | // type: 'Select', |
| | | // name: 'joinRole', |
| | | // label: '登记机构', |
| | | // selectdata: [ |
| | | // { label: '我负责的', value: '1' }, |
| | | // { label: '我协助的', value: '2' }, |
| | | // ], |
| | | // }, |
| | | // { type: 'Input', name: 'defendants', label: '被申请人' }, |
| | | // { type: 'Input', name: 'caseNo', label: '调解案号' }, |
| | | ]} |
| | | handleReset={() => handleSearch('reset')} |
| | | handleSearch={() => handleSearch('search')} |
| | | /> |
| | | </div> |
| | | |
| | | <div style={{ marginTop: '8px' }} className="pageTable"> |
| | | <TableView |
| | | showHeader |
| | | title="查询结果" |
| | | columns={columns()} |
| | | dataSource={data.tableData} |
| | | pagination={{ |
| | | current: search.page, |
| | | pageSize: search.size, |
| | | total: data.total, |
| | | onChange: (page, pageSize) => handleChangePage(page, pageSize), |
| | | }} |
| | | rowClassName={(record) => (record.id === data.tableActive ? 'tableRowActive' : '')} |
| | | /> |
| | | <div style={{ marginTop: '8px' }} className="comprehensive-table"> |
| | | { |
| | | data.tableData?.length > 0 ? |
| | | <TableView |
| | | showHeader |
| | | title="查询结果" |
| | | columns={columns()} |
| | | dataSource={data.tableData} |
| | | pagination={{ |
| | | current: search.page, |
| | | pageSize: search.size, |
| | | total: data.total, |
| | | onChange: (page, pageSize) => handleChangePage(page, pageSize), |
| | | }} |
| | | rowClassName={(record) => (record.id === data.tableActive ? 'tableRowActive' : '')} |
| | | /> : |
| | | <TableView |
| | | showHeader |
| | | title="查询结果" |
| | | columns={columns()} |
| | | dataSource={data.tableData} |
| | | pagination={{ |
| | | current: search.page, |
| | | pageSize: search.size, |
| | | total: data.total, |
| | | onChange: (page, pageSize) => handleChangePage(page, pageSize), |
| | | }} |
| | | rowClassName={(record) => (record.id === data.tableActive ? 'tableRowActive' : '')} |
| | | /> |
| | | } |
| | | </div> |
| | | </div> |
| | | </NewPage> |
| | |
| | | .comprehensive { |
| | | position: relative; |
| | | display: flex; |
| | | flex-direction: column; |
| | | height: calc(100% - 68px); |
| | | margin: 0 16px; |
| | | &-title { |
| | | // margin: 0 16px; |
| | |
| | | &-red { |
| | | color: #f53f3f; |
| | | } |
| | | &-table { |
| | | background-color: #ffffff; |
| | | padding: 16px; |
| | | flex: 1; |
| | | margin-bottom: 16px; |
| | | } |
| | | } |
| | |
| | | * @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; |
| | | |
| | |
| | | } |
| | | |
| | | 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; |
| | | 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%' }} />; |
| | | }; |
| | |
| | | .disputeLedger { |
| | | &-row { |
| | | margin-top: 12px; |
| | | background-color: #fff; |
| | | padding: 12px 16px 16px 16px; |
| | | } |
| | | &-d { |
| | | display: flex; |
| | | gap: 24px; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | } |
| | | &-card { |
| | | position: relative; |
| | | flex: 1; |
| | | // width: 167px; |
| | | height: 75px; |
| | | background: #f2f3f5; |
| | | border: 0.5px solid #e5e6eb; |
| | | border-radius: 4px; |
| | | & img { |
| | | width: 40px; |
| | | position: absolute; |
| | | right: 0; |
| | | top: 14px; |
| | | } |
| | | &-active { |
| | | background: #e8f8ff; |
| | | border: 1px solid #b6ddf1; |
| | | } |
| | | &-content { |
| | | padding: 12px 16px; |
| | | &-t { |
| | | margin-bottom: 4px; |
| | | &-active { |
| | | color: #1a6fb8; |
| | | } |
| | | } |
| | | } |
| | | &-title { |
| | | font-size: 18px; |
| | | line-height: 26px; |
| | | } |
| | | } |
| | | &-title { |
| | | font-size: 14px; |
| | | color: #1d2129; |
| | | } |
| | | &-unit { |
| | | color: #86909c; |
| | | font-size: 12px; |
| | | line-height: 20px; |
| | | } |
| | | &-green { |
| | | margin: 12px 0; |
| | | display: flex; |
| | | gap: 12px; |
| | | &-title { |
| | | font-size: 16px; |
| | | padding: 12px 16px; |
| | | color: rgba(0, 0, 0, 0.85); |
| | | } |
| | | } |
| | | } |
| | | |
| | | .big-green { |
| | | &-main { |
| | | &-space { |
| | | width: 389px; |
| | | background-color: #fff; |
| | | } |
| | | &-title { |
| | | background: #105489; |
| | | height: 36px; |
| | | padding: 0 12px 0 8px; |
| | | color: #fff; |
| | | display: flex; |
| | | align-items: center; |
| | | &-t { |
| | | line-height: 30px; |
| | | height: 24px; |
| | | margin-left: 8px; |
| | | } |
| | | &-display { |
| | | display: flex; |
| | | align-items: end; |
| | | } |
| | | &-bias { |
| | | transform: rotate(-45deg); |
| | | height: 1px; |
| | | width: 5px; |
| | | background-color: rgba(255, 255, 255, 0.4); |
| | | position: relative; |
| | | top: -2px; |
| | | left: -1px; |
| | | } |
| | | &-line { |
| | | flex: 1; |
| | | height: 1px; |
| | | // transform: skewX(-45deg); |
| | | background-color: rgba(255, 255, 255, 0.4); |
| | | } |
| | | |
| | | &-graph { |
| | | background: #ffc97a; |
| | | width: 20px; |
| | | height: 3px; |
| | | transform: skewX(-45deg); |
| | | } |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | /* |
| | | * @Company: hugeInfo |
| | | * @Author: lwh |
| | | * @Date: 2024-09-14 15:59:17 |
| | | * @LastEditTime: 2024-09-17 17:12:08 |
| | | * @LastEditors: lwh |
| | | * @Version: 1.0.0 |
| | | * @Description: |
| | | */ |
| | | import React, { useState, useEffect, useRef, useMemo } from 'react'; |
| | | import * as $$ from '../../utils/utility'; |
| | | import { Form, Typography, Row, Col, Space, Divider, Badge } from 'antd'; |
| | | import { useLocation, useNavigate, useSearchParams } from 'react-router-dom'; |
| | | import { workDash_1, workDash_2, workDash_3, workDash_4, workDash_5, workDash_6, workDash_7, workDash_8, workDash_9, 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 TableView from '../../components/TableViewCanSort'; |
| | | import NewTableSearch from '../../components/NewTableSearch'; |
| | | import publicDataStatus from '../../status/publicData'; |
| | | import './index.less' |
| | | |
| | | const { Link } = Typography; |
| | | |
| | | // 调度中心列表 |
| | | function getMyMediationDataApi(submitData) { |
| | | return $$.ax.request({ url: 'caseDisp/pageQuery', type: 'get', data: submitData, service: 'disp' }); |
| | | } |
| | | |
| | | // 获取列表分类tab |
| | | function getTabsDataApi() { |
| | | return $$.ax.request({ url: 'caseDisp/getApplyCanal', type: 'get', service: 'disp' }); |
| | | } |
| | | |
| | | const WorkDash = () => { |
| | | const [form] = Form.useForm(); |
| | | |
| | | // 搜索 |
| | | const [search, setSearch] = useState({ page: 1, size: 10, }); |
| | | |
| | | // 数据 |
| | | const [data, setData] = useState({ |
| | | tableData: [ |
| | | { createTime: '2024-09-14 15:59:17', statusName: '已关闭', caseLevel: '一般', caseTypeName: '城市管理', canalName: '综合执法', inputUnitName: '综合执法', assistUnitName: '综合执法', closeTime: '2024-09-14 15:59:17', mediResult: '22_00025-1', plaintiffList: [{ trueName: '张三' }, { trueName: '李四' }], defendantList: [{ trueName: '王五' }] }, |
| | | { createTime: '2024-09-14 15:59:17', statusName: '已关闭', caseLevel: '一般', caseTypeName: '城市管理', canalName: '综合执法', inputUnitName: '综合执法', assistUnitName: '综合执法', closeTime: '2024-09-14 15:59:17', mediResult: '22_00025-1', plaintiffList: [{ trueName: '张三' }, { trueName: '李四' }], defendantList: [{ trueName: '王五' }] }, |
| | | { createTime: '2024-09-14 15:59:17', statusName: '已关闭', caseLevel: '一般', caseTypeName: '城市管理', canalName: '综合执法', inputUnitName: '综合执法', assistUnitName: '综合执法', closeTime: '2024-09-14 15:59:17', mediResult: '22_00025-1', plaintiffList: [{ trueName: '张三' }, { trueName: '李四' }], defendantList: [{ trueName: '王五' }] }, |
| | | { createTime: '2024-09-14 15:59:17', statusName: '已关闭', caseLevel: '一般', caseTypeName: '城市管理', canalName: '综合执法', inputUnitName: '综合执法', assistUnitName: '综合执法', closeTime: '2024-09-14 15:59:17', mediResult: '22_00025-1', plaintiffList: [{ trueName: '张三' }, { trueName: '李四' }], defendantList: [{ trueName: '王五' }] }, |
| | | { createTime: '2024-09-14 15:59:17', statusName: '已关闭', caseLevel: '一般', caseTypeName: '城市管理', canalName: '综合执法', inputUnitName: '综合执法', assistUnitName: '综合执法', closeTime: '2024-09-14 15:59:17', mediResult: '22_00025-1', plaintiffList: [{ trueName: '张三' }, { trueName: '李四' }], defendantList: [{ trueName: '王五' }] }, |
| | | ] |
| | | }); |
| | | |
| | | // 调解组织select框数据 |
| | | const [adjustOrgData, setAdjustOrgData] = useState([]); |
| | | |
| | | |
| | | |
| | | |
| | | // 搜索 or 重置 |
| | | function handleSearch(type, session) { |
| | | |
| | | } |
| | | |
| | | // 表头 |
| | | const columns = () => { |
| | | const columnsData = [ |
| | | { title: '登记时间', width: 150, dataIndex: 'createTime', render: (text) => <span>{$$.dateFormat(text)}</span> }, |
| | | { title: '事项状态', width: 100, dataIndex: 'statusName' }, |
| | | { title: '事项等级', width: 100, dataIndex: 'caseLevel' }, |
| | | { title: '事项类型', width: 150, dataIndex: 'caseTypeName' }, |
| | | { title: '问题属地', width: 100, dataIndex: 'canalName' }, |
| | | { title: '登记机构', width: 150, dataIndex: 'inputUnitName' }, |
| | | { title: '承办部门', width: 100, dataIndex: 'assistUnitName' }, |
| | | { title: '办结时间', width: 100, dataIndex: 'closeTime', render: (text) => <span>{$$.dateFormat(text)}</span> }, |
| | | // 22_00025-1 成功 22_00025-2 化解不成功 |
| | | { title: '化解结果', width: 100, dataIndex: 'mediResult', render: (text) => <div className={text === '22_00025-1' ? 'comprehensive-green' : text === '22_00025-2' ? 'comprehensive-red' : '-'} >{text === '22_00025-1' ? '化解成功' : text === '22_00025-2' ? '化解不成功' : '-'}</div> }, |
| | | { title: '申请方', width: 100, dataIndex: 'action', render: (text, record) => <div>{record.plaintiffList?.length > 0 ? record.plaintiffList?.map(i => i.trueName)?.join(',') : '-'}</div> }, |
| | | { title: '被申请方', width: 100, dataIndex: 'action', render: (text, record) => <div>{record.defendantList?.length > 0 ? record.defendantList?.map(i => i.trueName)?.join(',') : '-'}</div> }, |
| | | { |
| | | title: '操作', |
| | | dataIndex: 'action', |
| | | width: 50, |
| | | render: (_, record) => { |
| | | return <Link onClick={() => handleJump(record)}>详情</Link>; |
| | | }, |
| | | }, |
| | | ]; |
| | | return columnsData; |
| | | }; |
| | | |
| | | // 跳转详情页 |
| | | function handleJump(type, info) { |
| | | |
| | | } |
| | | |
| | | // 初始化 |
| | | useEffect(() => { |
| | | // publicDataStatus.getUnitData((data) => setAdjustOrgData(data)); |
| | | |
| | | }, []); |
| | | |
| | | return ( |
| | | <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: adjustOrgData }, |
| | | { 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' }, |
| | | ], |
| | | }, |
| | | ]} |
| | | handleReset={() => handleSearch('reset')} |
| | | handleSearch={() => handleSearch('search')} |
| | | /> |
| | | </div> |
| | | <div className='disputeLedger-row'> |
| | | <div className='comprehensive-title'>数据总览</div> |
| | | <div> |
| | | <Space className='workDash-d' align='center' split={<Divider type="vertical" style={{ height: '48px' }} />}> |
| | | <div className='workDash-item'> |
| | | <div className='workDash-item-img'> |
| | | <img src={workDash_1} alt="" srcset="" /> |
| | | </div> |
| | | <div className='workDash-item-div'> |
| | | <div className='workDash-item-title'>总登记</div> |
| | | <div className='workDash-item-value'>3301</div> |
| | | </div> |
| | | </div> |
| | | <div className='workDash-item'> |
| | | <div className='workDash-item-img'> |
| | | <img src={workDash_2} alt="" srcset="" /> |
| | | </div> |
| | | <div className='workDash-item-div'> |
| | | <div className='workDash-item-title'>办理中</div> |
| | | <div className='workDash-item-value'>103</div> |
| | | </div> |
| | | </div> |
| | | <div className='workDash-item1'> |
| | | <div className='workDash-item-img'> |
| | | <img src={workDash_3} alt="" srcset="" /> |
| | | </div> |
| | | <div className='workDash-item-div'> |
| | | <div className='workDash-item-title'><div style={{ width: '50px' }}>已结案</div><div style={{ width: '36px' }}></div> <Badge dot size='30' status="success" text={<Space split={<Divider type="vertical" />}><span style={{ color: '#4E5969', fontSize: '14px' }}>化解成功:3066件 | 成功率:<span style={{ color: '#00B42A' }}>90.3%</span></span></Space>} /></div> |
| | | <div className='workDash-item-value'><div style={{ width: '50px' }}>3166</div><div style={{ width: '36px' }}></div><Badge status="error" text={<Space split={<Divider type="vertical" />}><span style={{ color: '#4E5969', fontSize: '14px' }}>化解不成功:100件</span></Space>} /></div> |
| | | </div> |
| | | </div> |
| | | <div className='workDash-item'> |
| | | <div className='workDash-item-img'> |
| | | <img src={workDash_4} alt="" srcset="" /> |
| | | </div> |
| | | <div className='workDash-item-div'> |
| | | <div className='workDash-item-title'>不予受理</div> |
| | | <div className='workDash-item-value'>32</div> |
| | | </div> |
| | | </div> |
| | | </Space> |
| | | </div> |
| | | </div> |
| | | |
| | | {/* 图表 */} |
| | | <div className='disputeLedger-green'> |
| | | <Space style={{ flex: '1' }} 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: '300px', marginTop: '12px' }}> |
| | | <MyChartBar data={[220, 5211, 2500, 3152, 8362, 26220, 8442, 2600, 1850, 1302, 850, 1048]} dataAxis={['本级', '越秀区', '海珠区', '荔湾区', '天河区', '白云区', '黄埔区', '花都区', '番禺区', '南沙区', '从化区', '增城区']} /> |
| | | </div> |
| | | </Space> |
| | | </div> |
| | | <div style={{ marginBottom: '12px', width: '100%', display: 'flex', gap: '12px', justifyContent: 'space-between' }} > |
| | | <Row gutter={16}> |
| | | <Col span={16}> |
| | | <div className='workDash-main'> |
| | | <div style={{ width: '100%' }}> |
| | | <div className='big-green-main-title-display'> |
| | | <div className='disputeLedger-green-title'>事项来源</div> |
| | | </div> |
| | | <div className='workDash-main-card-one'> |
| | | <div className='workDash-main-card'> |
| | | <div className='workDash-main-card-head'> |
| | | <div className='workDash-main-card-head-l'><div className='workDash-main-card-head-l-img'><img src={workDash_6} alt="" srcset="" /></div></div> |
| | | <div className='workDash-main-card-head-r'><div className='workDash-main-card-head-r-title'>大厅来访</div><div className='workDash-main-card-head-r-value'>2233<span className='workDash-main-card-head-r-subValue'> | 40%</span></div></div> |
| | | </div> |
| | | <div className='workDash-main-card-body'> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>化解中</div> |
| | | <div className='workDash-main-card-body-flex-value'>100</div> |
| | | </div> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>化解成功</div> |
| | | <div className='workDash-main-card-body-flex-value'>2132</div> |
| | | </div> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>化解不成功</div> |
| | | <div className='workDash-main-card-body-flex-value'>50</div> |
| | | </div> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>化解成功率</div> |
| | | <div className='workDash-main-card-body-flex-value'>84.3%</div> |
| | | </div> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>不予受理</div> |
| | | <div className='workDash-main-card-body-flex-value'>3</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div className='workDash-main-card'> |
| | | <div className='workDash-main-card-head'> |
| | | <div className='workDash-main-card-head-l workDash-bg_2'><div className='workDash-main-card-head-l-img workDash-bg_2_img'><img src={workDash_7} alt="" srcset="" /></div></div> |
| | | <div className='workDash-main-card-head-r workDash-bg_2_r'><div className='workDash-main-card-head-r-title'>线上来访</div><div className='workDash-main-card-head-r-value'>430<span className='workDash-main-card-head-r-subValue'> | 17%</span></div></div> |
| | | </div> |
| | | <div className='workDash-main-card-body'> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>化解中</div> |
| | | <div className='workDash-main-card-body-flex-value'>30</div> |
| | | </div> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>化解成功</div> |
| | | <div className='workDash-main-card-body-flex-value'>400</div> |
| | | </div> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>化解不成功</div> |
| | | <div className='workDash-main-card-body-flex-value'>7</div> |
| | | </div> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>化解成功率</div> |
| | | <div className='workDash-main-card-body-flex-value'>95.3%</div> |
| | | </div> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>不予受理</div> |
| | | <div className='workDash-main-card-body-flex-value'>3</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div className='workDash-main-card'> |
| | | <div className='workDash-main-card-head'> |
| | | <div className='workDash-main-card-head-l workDash-bg_3'><div className='workDash-main-card-head-l-img workDash-bg_3_img'><img src={workDash_8} alt="" srcset="" /></div></div> |
| | | <div className='workDash-main-card-head-r workDash-bg_3_r'><div className='workDash-main-card-head-r-title'>自行排查</div><div className='workDash-main-card-head-r-value'>672<span className='workDash-main-card-head-r-subValue'> | 20%</span></div></div> |
| | | </div> |
| | | <div className='workDash-main-card-body'> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>化解中</div> |
| | | <div className='workDash-main-card-body-flex-value'>80</div> |
| | | </div> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>化解成功</div> |
| | | <div className='workDash-main-card-body-flex-value'>520</div> |
| | | </div> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>化解不成功</div> |
| | | <div className='workDash-main-card-body-flex-value'>70</div> |
| | | </div> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>化解成功率</div> |
| | | <div className='workDash-main-card-body-flex-value'>92.3%</div> |
| | | </div> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>不予受理</div> |
| | | <div className='workDash-main-card-body-flex-value'>2</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div className='workDash-main-card'> |
| | | <div className='workDash-main-card-head'> |
| | | <div className='workDash-main-card-head-l workDash-bg_4'><div className='workDash-main-card-head-l-img workDash-bg_4_img'><img src={workDash_9} alt="" srcset="" /></div></div> |
| | | <div className='workDash-main-card-head-r workDash-bg_4_r'><div className='workDash-main-card-head-r-title'>协同推送</div><div className='workDash-main-card-head-r-value'>1094<span className='workDash-main-card-head-r-subValue'> | 33%</span></div></div> |
| | | </div> |
| | | <div className='workDash-main-card-body'> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>化解中</div> |
| | | <div className='workDash-main-card-body-flex-value'>165</div> |
| | | </div> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>化解成功</div> |
| | | <div className='workDash-main-card-body-flex-value'>776</div> |
| | | </div> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>化解不成功</div> |
| | | <div className='workDash-main-card-body-flex-value'>150</div> |
| | | </div> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>化解成功率</div> |
| | | <div className='workDash-main-card-body-flex-value'>94.3%</div> |
| | | </div> |
| | | <div className='workDash-main-card-body-flex'> |
| | | <div className='workDash-main-card-body-flex-title'>不予受理</div> |
| | | <div className='workDash-main-card-body-flex-value'>31</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div className='workDash-main1'> |
| | | <div className='big-green-main-title-display'> |
| | | <div className='disputeLedger-green-title'>工作效能</div> |
| | | </div> |
| | | <div className='workDash-main1-chart'> |
| | | <div className='workDash-main1-flex'> |
| | | <div className='workDash-main1-flex-l'> |
| | | <div className='workDash-main1-flex-l-title'>事项分派</div> |
| | | <div className='workDash-main1-flex-l-value'>320<span className='workDash-main1-flex-l-subValue'>件</span></div> |
| | | </div> |
| | | <div className='workDash-main1-flex-r workDash-main1-flex-r-green'>平均耗时<br />1.5小时</div> |
| | | </div> |
| | | |
| | | <div className='workDash-main1-flex'> |
| | | <div className='workDash-main1-flex-l'> |
| | | <div className='workDash-main1-flex-l-title'>事项办理</div> |
| | | <div className='workDash-main1-flex-l-value'>299<span className='workDash-main1-flex-l-subValue'>件</span></div> |
| | | </div> |
| | | <div className='workDash-main1-flex-r workDash-main1-flex-r-orange'>平均耗时<br />80.3小时</div> |
| | | </div> |
| | | |
| | | <div className='workDash-main1-flex'> |
| | | <div className='workDash-main1-flex-l'> |
| | | <div className='workDash-main1-flex-l-title'>事项签收</div> |
| | | <div className='workDash-main1-flex-l-value'>320<span className='workDash-main1-flex-l-subValue'>件</span></div> |
| | | </div> |
| | | <div className='workDash-main1-flex-r workDash-main1-flex-r-blue'>平均耗时<br />5.5小时</div> |
| | | </div> |
| | | <div className='workDash-main1-flex'> |
| | | <div className='workDash-main1-flex-l'> |
| | | <div className='workDash-main1-flex-l-title'>申请审批</div> |
| | | <div className='workDash-main1-flex-l-value'>108<span className='workDash-main1-flex-l-subValue'>件</span></div> |
| | | </div> |
| | | <div className='workDash-main1-flex-r workDash-main1-flex-r-blue'>平均耗时<br />4小时</div> |
| | | </div> |
| | | <div className='workDash-main1-flex'> |
| | | <div className='workDash-main1-flex-l'> |
| | | <div className='workDash-main1-flex-l-title'>事项受理</div> |
| | | <div className='workDash-main1-flex-l-value'>318<span className='workDash-main1-flex-l-subValue'>件</span></div> |
| | | </div> |
| | | <div className='workDash-main1-flex-r workDash-main1-flex-r-blue'>平均耗时<br />15.5小时</div> |
| | | </div> |
| | | <div className='workDash-main1-flex'> |
| | | <div className='workDash-main1-flex-l'> |
| | | <div className='workDash-main1-flex-l-title'>督办回复</div> |
| | | <div className='workDash-main1-flex-l-value'>52<span className='workDash-main1-flex-l-subValue'>件</span></div> |
| | | </div> |
| | | <div className='workDash-main1-flex-r workDash-main1-flex-r-blue'>平均耗时<br />12.3小时</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </Col> |
| | | |
| | | </Row> |
| | | </div> |
| | | |
| | | <div style={{ marginBottom: '12px', width: '100%' }} > |
| | | <Row gutter={16}> |
| | | <Col span={8}> |
| | | <div className='workDash-main-flex_1'> |
| | | <div className='big-green-main-title-display'> |
| | | <div className='disputeLedger-green-title'>纠纷类型</div> |
| | | </div> |
| | | <div style={{ width: '100%', height: '242px', marginTop: '12px' }}> |
| | | <MyLTopChartPie data={ |
| | | [ |
| | | { value: 22, name: '市场监管' }, |
| | | { value: 28, name: '劳动社保' }, |
| | | { value: 15, name: '城市管理' }, |
| | | { value: 10, name: '交通运输' }, |
| | | { value: 5, name: '教育医疗' }, |
| | | { value: 20, name: '公共服务' }, |
| | | ] |
| | | } /> |
| | | </div> |
| | | </div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div className='workDash-main-flex_1'> |
| | | <div className='big-green-main-title-display'> |
| | | <div className='disputeLedger-green-title'>化解状况</div> |
| | | </div> |
| | | <div style={{ width: '100%', height: '242px', marginTop: '12px' }}> |
| | | <MyLTopChartPie1 data={ |
| | | [ |
| | | { value: 90, name: '小学' }, |
| | | { value: 200, name: '初中' }, |
| | | { value: 100, name: '高中' }, |
| | | { value: 300, name: '大学本科' }, |
| | | { value: 200, name: '硕士' }, |
| | | { value: 100, name: '其他' }, |
| | | ] |
| | | } /> |
| | | </div> |
| | | </div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div className='workDash-main-flex_1'> |
| | | <div className='big-green-main-title-display'> |
| | | <div className='disputeLedger-green-title'>事项等级</div> |
| | | </div> |
| | | <div className='workDash-grade'> |
| | | <div className='workDash-grade-item workDash-grade-item-orange'> |
| | | <div className='workDash-grade-item-t'><div className='workDash-grade-item-t-orange'>3级事件</div><div className='workDash-grade-item-t-value'>3201<span className='workDash-grade-item-t-unit'>件</span></div></div> |
| | | <div className='workDash-grade-item-b'> |
| | | <div className='workDash-grade-item-b-bg'> |
| | | <div className='workDash-grade-item-b-bg-orange'></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div className='workDash-grade-item workDash-grade-item-blue'> |
| | | <div className='workDash-grade-item-t'><div className='workDash-grade-item-t-blue'>2级事件</div><div className='workDash-grade-item-t-value'>104<span className='workDash-grade-item-t-unit'>件</span></div></div> |
| | | <div className='workDash-grade-item-b'> |
| | | <div className='workDash-grade-item-b-bg'> |
| | | <div className='workDash-grade-item-b-bg-blue'></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div className='workDash-grade-item workDash-grade-item-red'> |
| | | <div className='workDash-grade-item-t'><div className='workDash-grade-item-t-red'>1级事件</div><div className='workDash-grade-item-t-value'>52<span className='workDash-grade-item-t-unit'>件</span></div></div> |
| | | <div className='workDash-grade-item-b'> |
| | | <div className='workDash-grade-item-b-bg'> |
| | | <div className='workDash-grade-item-b-bg-red'></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </Col> |
| | | </Row> |
| | | |
| | | |
| | | |
| | | </div> |
| | | <div style={{ width: '100%', display: 'flex', gap: '12px', justifyContent: 'space-between' }} > |
| | | <div className='workDash-main-flex_1' style={{ marginBottom: '12px', }}> |
| | | <div className='big-green-main-title-display-table'> |
| | | <div className='disputeLedger-green-title'>实时动态</div> |
| | | <div style={{ padding: '4px 16px 16px' }}> |
| | | <TableView |
| | | columns={columns()} |
| | | dataSource={data.tableData} |
| | | /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </NewPage > |
| | | ) |
| | | } |
| | | |
| | | export default WorkDash; |
| | | |
| | | // 柱状图 |
| | | 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: '化解中', |
| | | data: [1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320], |
| | | barWidth: 24, // 设置柱子宽度 |
| | | label: { |
| | | show: true, |
| | | position: 'top', |
| | | valueAnimation: false |
| | | }, |
| | | emphasis: { |
| | | itemStyle: { |
| | | opacity: 0.7 |
| | | } |
| | | }, |
| | | itemStyle: { |
| | | color: '#57a9fb', |
| | | borderWidth: 2 // 设置边框宽度 |
| | | } |
| | | }, |
| | | { |
| | | type: 'bar', |
| | | name: '化解成功', |
| | | data: [920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920], |
| | | barWidth: 24, // 设置柱子宽度 |
| | | label: { |
| | | show: true, |
| | | position: 'top', |
| | | valueAnimation: false |
| | | }, |
| | | emphasis: { |
| | | itemStyle: { |
| | | opacity: 0.7 |
| | | } |
| | | }, |
| | | itemStyle: { |
| | | color: '#23c343', |
| | | borderWidth: 2, // 设置边框宽度 |
| | | left: 0 // 设置左边距,以实现重叠效果 |
| | | } |
| | | }, |
| | | { |
| | | type: 'bar', |
| | | name: '化解不成功', |
| | | data: [400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400], |
| | | barWidth: 24, // 设置柱子宽度 |
| | | label: { |
| | | show: true, |
| | | position: 'top', |
| | | valueAnimation: false |
| | | }, |
| | | emphasis: { |
| | | itemStyle: { |
| | | opacity: 0.7 |
| | | } |
| | | }, |
| | | itemStyle: { |
| | | color: '#F76560', |
| | | borderWidth: 2, // 设置边框宽度 |
| | | left: 0 // 设置左边距,以实现重叠效果 |
| | | } |
| | | } |
| | | ] |
| | | }); |
| | | }, [data]); |
| | | |
| | | useEffect(() => { |
| | | // if (myChart && myChartRef.current.clientHeight !== 0) { |
| | | // myChart.forceFit(); |
| | | // } |
| | | }); |
| | | |
| | | return <div id="chartBar" ref={myChartRef} style={{ height: '230px', 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(() => { |
| | | }); |
| | | |
| | | return <div id="chartLTopPie1" ref={myChartRef} style={{ height: '230px', width: '100%' }} />; |
| | | }; |
New file |
| | |
| | | .workDash { |
| | | &-d { |
| | | display: flex; |
| | | width: 100%; |
| | | justify-content: space-around; |
| | | // & .ant-space-item { |
| | | // flex: 1; |
| | | // } |
| | | } |
| | | &-item { |
| | | flex: 1; |
| | | display: flex; |
| | | gap: 16px; |
| | | &-img { |
| | | width: 48px; |
| | | height: 48px; |
| | | background-color: rgba(242, 243, 245, 0.95); |
| | | border-radius: 50%; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | & img { |
| | | width: 24px; |
| | | height: 24px; |
| | | } |
| | | } |
| | | &-div { |
| | | } |
| | | &-title { |
| | | font-size: 14px; |
| | | line-height: 22px; |
| | | color: #4e5969; |
| | | display: flex; |
| | | } |
| | | &-value { |
| | | color: #1d2129; |
| | | font-size: 18px; |
| | | line-height: 26px; |
| | | display: flex; |
| | | } |
| | | } |
| | | &-item1 { |
| | | flex: 2; |
| | | display: flex; |
| | | gap: 16px; |
| | | } |
| | | &-main { |
| | | display: flex; |
| | | flex: 2; |
| | | background-color: #fff; |
| | | &-flex_1 { |
| | | flex: 1; |
| | | background-color: #fff; |
| | | } |
| | | &-card { |
| | | // width: 197px; |
| | | &-one { |
| | | padding: 0 16px 16px; |
| | | display: flex; |
| | | gap: 24px; |
| | | justify-content: space-between; |
| | | } |
| | | &-head { |
| | | display: flex; |
| | | &-l { |
| | | width: 80px; |
| | | height: 80px; |
| | | background-color: #08979c; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | border-radius: 5px 0px 0px 5px; |
| | | &-img { |
| | | width: 48px; |
| | | height: 48px; |
| | | border-radius: 50%; |
| | | background-color: #96e0d7; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | & img { |
| | | width: 24px; |
| | | height: 24px; |
| | | } |
| | | } |
| | | } |
| | | &-r { |
| | | background: linear-gradient(271deg, #13c2c2 0%, rgba(5, 174, 174, 0.8) 14%); |
| | | color: #fff; |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: flex-start; |
| | | justify-content: center; |
| | | border-radius: 0px 5px 5px 0px; |
| | | padding-left: 16px; |
| | | flex: 1; |
| | | &-title { |
| | | font-size: 14px; |
| | | } |
| | | &-value { |
| | | font-size: 20px; |
| | | line-height: 28px; |
| | | font-weight: 500; |
| | | display: flex; |
| | | align-items: center; |
| | | height: 28px; |
| | | } |
| | | &-subValue { |
| | | font-size: 12px; |
| | | line-height: 28px; |
| | | font-weight: 400; |
| | | position: relative; |
| | | top: 2px; |
| | | } |
| | | } |
| | | } |
| | | &-body { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 10px; |
| | | gap: 16px; |
| | | margin-top: 12px; |
| | | &-flex { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 4px; |
| | | |
| | | &-title { |
| | | font-size: 12px; |
| | | line-height: 20px; |
| | | color: #4e5969; |
| | | } |
| | | &-value { |
| | | color: #1d2129; |
| | | font-size: 14px; |
| | | line-height: 22px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | &-main1 { |
| | | // display: flex; |
| | | flex: 1; |
| | | background-color: #fff; |
| | | &-chart { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | padding: 0 16px 12px; |
| | | } |
| | | &-flex { |
| | | width: 50%; |
| | | display: flex; |
| | | gap: 16px; |
| | | justify-content: center; |
| | | padding: 11px 0; |
| | | &-l { |
| | | font-size: 14px; |
| | | line-height: 22px; |
| | | color: #4e5969; |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 4px; |
| | | &-value { |
| | | color: #1d2129; |
| | | font-size: 18px; |
| | | line-height: 26px; |
| | | } |
| | | &-subValue { |
| | | font-size: 14px; |
| | | line-height: 22px; |
| | | color: #4e5969; |
| | | } |
| | | } |
| | | &-r { |
| | | width: 72px; |
| | | height: 48px; |
| | | padding: 4px 12px; |
| | | text-align: center; |
| | | font-size: 12px; |
| | | line-height: 20px; |
| | | &-green { |
| | | background: #e8ffea; |
| | | color: #00b42a; |
| | | } |
| | | &-orange { |
| | | background: #fff7e6; |
| | | color: #ef6c24; |
| | | } |
| | | &-blue { |
| | | background: #e6f7ff; |
| | | color: #1890ff; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | &-grade { |
| | | padding: 16px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 8px; |
| | | &-item { |
| | | padding: 12px 8px; |
| | | &-t { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | &-orange { |
| | | padding: 2px 12px; |
| | | color: #ef6c24; |
| | | border-radius: 2px; |
| | | background: #fff7e6; |
| | | border: 1px solid #fa8c16; |
| | | } |
| | | &-blue { |
| | | padding: 2px 12px; |
| | | color: #3491fa; |
| | | border-radius: 2px; |
| | | background: #e8f7ff; |
| | | border: 1px solid #3491fa; |
| | | } |
| | | &-red { |
| | | padding: 2px 12px; |
| | | color: #f76560; |
| | | border-radius: 2px; |
| | | background: #ffece8; |
| | | border: 1px solid #f53f3f; |
| | | } |
| | | &-value { |
| | | font-size: 18px; |
| | | line-height: 28px; |
| | | margin-right: 4px; |
| | | } |
| | | &-unit { |
| | | font-size: 12px; |
| | | line-height: 20px; |
| | | color: #86909c; |
| | | } |
| | | } |
| | | &-b { |
| | | margin-top: 8px; |
| | | &-bg { |
| | | height: 3px; |
| | | width: 100%; |
| | | background: #e9eaeb; |
| | | position: relative; |
| | | &-orange { |
| | | width: 80%; |
| | | height: 3px; |
| | | position: absolute; |
| | | top: 0; |
| | | left: 0; |
| | | background: linear-gradient(270deg, #ffc069 0%, #fa8c16); |
| | | } |
| | | &-blue { |
| | | width: 20%; |
| | | height: 3px; |
| | | position: absolute; |
| | | top: 0; |
| | | left: 0; |
| | | background: linear-gradient(270deg,#57a9fb 0%, #3491fa); |
| | | } |
| | | &-red { |
| | | width: 10%; |
| | | height: 3px; |
| | | position: absolute; |
| | | top: 0; |
| | | left: 0; |
| | | background: linear-gradient(270deg,#f76560 0%, #f53f3f); |
| | | } |
| | | } |
| | | } |
| | | &-orange { |
| | | border: 1px solid #fa8c16; |
| | | } |
| | | &-blue { |
| | | border: 1px solid #3491fa; |
| | | } |
| | | &-red { |
| | | border: 1px solid #f76560; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .workDash-bg_2 { |
| | | background: #1890ff; |
| | | &_img { |
| | | background-color: #91d5ff; |
| | | } |
| | | &_r { |
| | | background: linear-gradient(271deg, #1890ff 0%, rgba(24, 144, 255, 0.8) 14%); |
| | | } |
| | | } |
| | | |
| | | .workDash-bg_3 { |
| | | background: #ef6c24; |
| | | &_img { |
| | | background-color: #ffcba1; |
| | | } |
| | | &_r { |
| | | background: linear-gradient(271deg, #ef6c24 0%, rgba(239, 108, 36, 0.8) 14%); |
| | | } |
| | | } |
| | | |
| | | .workDash-bg_4 { |
| | | background: #d10269; |
| | | &_img { |
| | | background-color: #ffa6c6; |
| | | } |
| | | &_r { |
| | | background: linear-gradient(271deg, #d10269 0%, rgba(209, 2, 105, 0.8) 14%); |
| | | } |
| | | } |