5 files added
9 files modified
| | |
| | | * @Company: hugeInfo |
| | | * @Author: ldh |
| | | * @Date: 2022-02-16 11:25:57 |
| | | * @LastEditTime: 2025-06-10 17:33:34 |
| | | * @LastEditTime: 2025-06-20 10:59:40 |
| | | * @LastEditors: lwh |
| | | * @Version: 1.0.0 |
| | | * @Description: api地址 |
| | |
| | | // baseUrl: 'http://gz.hugeinfo.com.cn', |
| | | // baseUrl: "http://192.168.3.131:9002", |
| | | // baseUrl: 'http://192.168.1.101:9002', |
| | | baseUrl: 'http://10.202.1.71:80', |
| | | baseUrl: 'http://10.200.1.89:9002', |
| | | // baseUrl: 'http://192.168.1.158:9002', |
| | | |
| | | // 附件服务 |
| | | // fileUrl: 'http://192.168.1.101:9002', |
| | | fileUrl: 'http://localhost:9002', |
| | | fileUrl: 'http://10.200.1.89:9002', |
| | | // fileUrl: 'http://192.168.1.158:9002', |
| | | // fileUrl: 'http://gz.hugeinfo.com.cn', |
| | | |
| | |
| | | import workDash_24 from './workDash_24.png'; |
| | | import workDash_25 from './workDash_25.png'; |
| | | import workDash_26 from './workDash_26.png'; |
| | | import workDash_27 from './workDash_27.png'; |
| | | import workDash_28 from './workDash_28.png'; |
| | | import workDash_29 from './workDash_29.png'; |
| | | import workDash_30 from './workDash_30.png'; |
| | | |
| | | import visitWorkBench_1 from './visitWorkBench_1.png'; |
| | | import visitWorkBench_2 from './visitWorkBench_2.png'; |
| | |
| | | workDash_24, |
| | | workDash_25, |
| | | workDash_26, |
| | | workDash_27, |
| | | workDash_28, |
| | | workDash_29, |
| | | workDash_30, |
| | | visitWorkBench_1, |
| | | visitWorkBench_2, |
| | | visitWorkBench_3, |
| | |
| | | * @Author: dminyi 1301963064@qq.com |
| | | * @Date: 2024-08-29 17:41:09 |
| | | * @LastEditors: lwh |
| | | * @LastEditTime: 2025-06-06 09:48:10 |
| | | * @LastEditTime: 2025-06-21 11:56:05 |
| | | * @FilePath: \gzDyh\gz-customerSystem\src\components\SelectObjModal\selectPerson.jsx |
| | | * @Description: 选择经办人 |
| | | */ |
| | |
| | | |
| | | /** |
| | | * visible, // 传入参数控制modal显示 |
| | | * checkKeys, // 选中,数据格式 [{value:'',label:''}] |
| | | * checkKeys, // 选中,数据格式 [{value:'',label':''}] |
| | | * type, // 'person': 选择人员 'unit': 选择组织 'dept': 选择部门 'supUnit': 督办组织 |
| | | * isCheckbox, // 是否多选 |
| | | * searchData, // 搜索条件 |
| | |
| | | const [autoExpandParent, setAutoExpandParent] = useState(true); |
| | | const [dataList, setDataList] = useState([]); |
| | | const [loading, setLoading] = useState(false); |
| | | // 新增状态:用于区分是否为搜索状态 |
| | | const [isSearchMode, setIsSearchMode] = useState(false); |
| | | |
| | | |
| | | // 获取第一层级的key |
| | | const getFirstLevelKeys = (treeData) => { |
| | | return treeData.map(item => item.value); |
| | | }; |
| | | |
| | | // tree复选框选择 |
| | | function handleCheck(checkedKeys, e) { |
| | |
| | | return parents; |
| | | }; |
| | | |
| | | // 检查节点或其子节点是否包含搜索值 |
| | | const hasMatchingChild = (node, searchValue) => { |
| | | if (node.label.indexOf(searchValue) > -1) { |
| | | return true; |
| | | } |
| | | if (node.children) { |
| | | return node.children.some(child => hasMatchingChild(child, searchValue)); |
| | | } |
| | | return false; |
| | | }; |
| | | |
| | | // 获取搜索时需要展开的所有节点key |
| | | const getExpandedKeysForSearch = (searchValue, treeData) => { |
| | | const expandedKeys = []; |
| | | |
| | | const traverse = (nodes, parentKeys = []) => { |
| | | nodes.forEach(node => { |
| | | const currentPath = [...parentKeys, node.value]; |
| | | |
| | | // 如果当前节点匹配搜索值 |
| | | if (node.label.indexOf(searchValue) > -1) { |
| | | // 添加所有父节点到展开列表 |
| | | expandedKeys.push(...parentKeys); |
| | | // 添加当前节点到展开列表 |
| | | expandedKeys.push(node.value); |
| | | } |
| | | |
| | | // 如果当前节点有子节点,继续遍历 |
| | | if (node.children && node.children.length > 0) { |
| | | traverse(node.children, currentPath); |
| | | } |
| | | }); |
| | | }; |
| | | |
| | | traverse(treeData); |
| | | return Array.from(new Set(expandedKeys)); |
| | | }; |
| | | |
| | | function handleSearch(value, dataList) { |
| | | let newExpandedKeys = []; |
| | | // 找到所有包含关键字的节点 |
| | | const matchedKeys = dataList |
| | | .filter((item) => item.label.indexOf(value) > -1) |
| | | .map((item) => item.value); |
| | | if (!value.trim()) { |
| | | // 如果搜索值为空,恢复到初始状态 |
| | | const firstLevelKeys = getFirstLevelKeys(data); |
| | | setExpandedKeys(firstLevelKeys); |
| | | setSearchValue(''); |
| | | setAutoExpandParent(false); |
| | | setIsSearchMode(false); |
| | | return; |
| | | } |
| | | |
| | | // 获取所有相关父节点 |
| | | matchedKeys.forEach((key) => { |
| | | const parents = getAllParentKeys(key, data); |
| | | newExpandedKeys = newExpandedKeys.concat(parents); |
| | | }); |
| | | |
| | | // 去重 |
| | | newExpandedKeys = Array.from(new Set(newExpandedKeys)); |
| | | // 使用新的函数来精确计算需要展开的节点 |
| | | const newExpandedKeys = getExpandedKeysForSearch(value, data); |
| | | |
| | | setExpandedKeys(newExpandedKeys); |
| | | setSearchValue(value); |
| | | setAutoExpandParent(true); |
| | | // 设置为搜索模式 |
| | | setIsSearchMode(true); |
| | | } |
| | | |
| | | function handleSearch1(value, dataList) { |
| | | let newExpandedKeys = []; |
| | | // 找到所有包含关键字的节点 |
| | | const matchedKeys = dataList |
| | | .filter((item) => item.label.indexOf(value) > -1) |
| | | .map((item) => item.value); |
| | | if (!value.trim()) { |
| | | // 如果搜索值为空,恢复到初始状态 |
| | | const firstLevelKeys = getFirstLevelKeys(data); |
| | | setExpandedKeys(firstLevelKeys); |
| | | setSearchValue(''); |
| | | setAutoExpandParent(false); |
| | | setIsSearchMode(false); |
| | | return; |
| | | } |
| | | |
| | | // 获取所有相关父节点 |
| | | matchedKeys.forEach((key) => { |
| | | const parents = getAllParentKeys(key, data); |
| | | newExpandedKeys = newExpandedKeys.concat(parents); |
| | | }); |
| | | // 使用新的函数来精确计算需要展开的节点 |
| | | const newExpandedKeys = getExpandedKeysForSearch(value, data); |
| | | |
| | | // 去重 |
| | | newExpandedKeys = Array.from(new Set(newExpandedKeys)); |
| | | setExpandedKeys(newExpandedKeys); |
| | | setSearchValue(value); |
| | | setAutoExpandParent(true); |
| | | // 设置为搜索模式 |
| | | setIsSearchMode(true); |
| | | } |
| | | |
| | | useEffect(() => { |
| | |
| | | } else { |
| | | setCheckedKeys({ keys: [], items: [] }); |
| | | } |
| | | // 重置搜索模式 |
| | | setIsSearchMode(false); |
| | | getData(); |
| | | }, [type, visible]); |
| | | |
| | | console.log('checkedKeys', checkedKeys); |
| | | |
| | | |
| | | // 搜索 |
| | | useEffect(() => { |
| | |
| | | }; |
| | | generateList(data); |
| | | setDataList(arr); |
| | | handleSearch('', arr); |
| | | |
| | | // 初始化时只展开第一层级,不调用handleSearch |
| | | if (data.length > 0 && !isSearchMode) { |
| | | const firstLevelKeys = getFirstLevelKeys(data); |
| | | setExpandedKeys(firstLevelKeys); |
| | | setAutoExpandParent(false); |
| | | } |
| | | }, [data]); |
| | | |
| | | const treeData = useMemo(() => { |
| | |
| | | const strTitle = item.label; |
| | | const index = strTitle.indexOf(searchValue); |
| | | |
| | | // 只保留包含 searchValue 的项 |
| | | if (index <= -1 && !item.children) { |
| | | // 如果有搜索值,只保留包含 searchValue 的项或有匹配子节点的项 |
| | | if (searchValue && index <= -1 && !hasMatchingChild(item, searchValue)) { |
| | | return null; // 返回 null 表示不包含在最终结果中 |
| | | } |
| | | |
| | |
| | | <div className="selectObjModal-main"> |
| | | <div style={{ width: "100%" }}> |
| | | <div className="selectObjModal-left-search" style={{ paddingRight: '0px' }}> |
| | | <Search placeholder={`查询${nameStr}名称`} onSearch={(e) => handleSearch1(e, dataList)} /> |
| | | <Search |
| | | placeholder={`查询${nameStr}名称`} |
| | | value={searchValue} |
| | | onChange={(e) => { |
| | | const value = e.target.value; |
| | | if (!value.trim()) { |
| | | // 清空搜索时恢复到初始状态 |
| | | const firstLevelKeys = getFirstLevelKeys(data); |
| | | setExpandedKeys(firstLevelKeys); |
| | | setSearchValue(''); |
| | | setAutoExpandParent(false); |
| | | setIsSearchMode(false); |
| | | } else { |
| | | // 实时搜索,使用相同的展开逻辑 |
| | | const newExpandedKeys = getExpandedKeysForSearch(value, data); |
| | | setExpandedKeys(newExpandedKeys); |
| | | setSearchValue(value); |
| | | setAutoExpandParent(true); |
| | | setIsSearchMode(true); |
| | | } |
| | | }} |
| | | onSearch={(e) => handleSearch1(e, dataList)} |
| | | /> |
| | | </div> |
| | | <div className="selectObjModal-left-main"> |
| | | <Spin loading={loading} style={{ width: '100%', height: '100%' }}> |
| | | {data.length > 0 ? ( |
| | | <Tree |
| | | checkStrictly |
| | | defaultExpandAll |
| | | // defaultExpandAll |
| | | onExpand={(newExpandedKeys) => { |
| | | setExpandedKeys(newExpandedKeys); |
| | | setAutoExpandParent(false); |
| | | }} |
| | | expandedKeys={expandedKeys} |
| | | autoExpandParent={autoExpandParent} |
| | | // autoExpandParent={autoExpandParent} |
| | | onSelect={(checkedKeys, e) => { |
| | | handleCheck(checkedKeys, e); |
| | | onOk && onOk(e.node) |
| | |
| | | * @Company: hugeInfo |
| | | * @Author: ldh |
| | | * @Date: 2022-03-07 15:26:41 |
| | | * @LastEditTime: 2024-11-13 18:10:52 |
| | | * @LastEditTime: 2025-06-20 11:01:50 |
| | | * @LastEditors: lwh |
| | | * @Version: 1.0.0 |
| | | * @Description: 公共下拉框数据 |
| | |
| | | { |
| | | value: '22_00001-3', |
| | | label: '自行排查', |
| | | children: [ |
| | | { |
| | | value: '22_00003-8', |
| | | label: '部门排查', |
| | | }, |
| | | { |
| | | value: '22_00003-2', |
| | | label: '网格上报', |
| | | }, |
| | | { |
| | | value: '22_00003-7', |
| | | label: '专项治理', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | value: '22_00001-4', |
| | | label: '协同推送', |
| | | children: [ |
| | | { |
| | | value: '22_00003-1', |
| | | label: '非警务纠纷', |
| | | }, |
| | | ], |
| | | }, |
| | | ]; |
| | | // 来访形式 |
| | |
| | | ]; |
| | | //上传材料类型 |
| | | const fileOwnerType = [ |
| | | { |
| | | value: '22_00018-101', |
| | | label: '申请材料', |
| | | }, |
| | | { |
| | | value: '22_00018-102', |
| | | label: '证据材料', |
| | | }, |
| | | { |
| | | value: '22_00018-202', |
| | | label: '身份证明材料', |
| | | }, |
| | | { |
| | | value: '22_00018-207', |
| | | label: '代理人授权委托书', |
| | | }, |
| | | { |
| | | value: '22_00018-203', |
| | | label: '企业(机构)登记材料', |
| | | }, |
| | | { |
| | | value: '22_00018-204', |
| | | label: '法定(机构)代表人身份证明材料', |
| | | }, |
| | | { |
| | | value: '22_00018-501', |
| | | label: '办理附件', |
| | | }, |
| | | { |
| | | value: '22_00018-506', |
| | | label: '督办附件', |
| | | }, |
| | | { |
| | | value: '22_00018-507', |
| | | label: '督办回复附件', |
| | | }, |
| | | { |
| | | value: '22_00018-508', |
| | | label: '联合处置申请附件', |
| | | }, |
| | | { |
| | | value: '22_00018-509', |
| | | label: '联合处置申请审核附件', |
| | | }, |
| | | { |
| | | value: '22_00018-520', |
| | | label: '回退申请附件', |
| | | }, |
| | | { |
| | | value: '22_00018-511', |
| | | label: '回退审核附件', |
| | | }, |
| | | { |
| | | value: '22_00018-512', |
| | | label: '上报申请附件', |
| | | }, |
| | | { |
| | | value: '22_00018-513', |
| | | label: '上报审核附件', |
| | | }, |
| | | { |
| | | value: '22_00018-302', |
| | | label: '协议文书', |
| | | }, |
| | | { |
| | | value: '22_00018-514', |
| | | label: '结案审核附件', |
| | | }, |
| | | { |
| | | value: '22_00018-515', |
| | | label: '不予受理附件', |
| | | }, |
| | | { |
| | | value: '22_00018-101', |
| | | label: '申请材料', |
| | | }, |
| | | { |
| | | value: '22_00018-102', |
| | | label: '证据材料', |
| | | }, |
| | | { |
| | | value: '22_00018-202', |
| | | label: '身份证明材料', |
| | | }, |
| | | { |
| | | value: '22_00018-207', |
| | | label: '代理人授权委托书', |
| | | }, |
| | | { |
| | | value: '22_00018-203', |
| | | label: '企业(机构)登记材料', |
| | | }, |
| | | { |
| | | value: '22_00018-204', |
| | | label: '法定(机构)代表人身份证明材料', |
| | | }, |
| | | { |
| | | value: '22_00018-501', |
| | | label: '办理附件', |
| | | }, |
| | | { |
| | | value: '22_00018-506', |
| | | label: '督办附件', |
| | | }, |
| | | { |
| | | value: '22_00018-507', |
| | | label: '督办回复附件', |
| | | }, |
| | | { |
| | | value: '22_00018-508', |
| | | label: '联合处置申请附件', |
| | | }, |
| | | { |
| | | value: '22_00018-509', |
| | | label: '联合处置申请审核附件', |
| | | }, |
| | | { |
| | | value: '22_00018-520', |
| | | label: '回退申请附件', |
| | | }, |
| | | { |
| | | value: '22_00018-511', |
| | | label: '回退审核附件', |
| | | }, |
| | | { |
| | | value: '22_00018-512', |
| | | label: '上报申请附件', |
| | | }, |
| | | { |
| | | value: '22_00018-513', |
| | | label: '上报审核附件', |
| | | }, |
| | | { |
| | | value: '22_00018-302', |
| | | label: '协议文书', |
| | | }, |
| | | { |
| | | value: '22_00018-514', |
| | | label: '结案审核附件', |
| | | }, |
| | | { |
| | | value: '22_00018-515', |
| | | label: '不予受理附件', |
| | | }, |
| | | ]; |
| | | // 附件上传人类型 |
| | | const uploaderType = [ |
| | |
| | | value: '1', |
| | | label: '合并', |
| | | }, |
| | | { |
| | | { |
| | | value: '2', |
| | | label: '未合并', |
| | | }, |
| | |
| | | value: '2', |
| | | label: '未通过', |
| | | }, |
| | | ] |
| | | ]; |
| | | |
| | | const rmtjList = [ |
| | | { |
| | |
| | | value: '4', |
| | | label: '转入失败', |
| | | }, |
| | | ] |
| | | ]; |
| | | |
| | | const inputWay = [ |
| | | { |
| | |
| | | value: '2', |
| | | label: '案件导入', |
| | | }, |
| | | ] |
| | | |
| | | ]; |
| | | |
| | | const systemSource = [ |
| | | { |
| | |
| | | value: '1', |
| | | label: '白云区平台', |
| | | }, |
| | | ] |
| | | ]; |
| | | |
| | | const obj = { |
| | | systemSource, |
| | |
| | | import { pdf, jpg, file, word, excel } from '../assets/images/icon'; |
| | | import { empty } from '@/assets/images'; |
| | | |
| | | export const isDebug = false; // 是否开发环境 |
| | | export const isDebug = true; // 是否开发环境 |
| | | export const isTest = true; // 是否测试环境 |
| | | |
| | | export const appUrl = isDebug ? debug : isTest ? test : web; // api |
| | |
| | | |
| | | import React, { useRef, useEffect, useState } from 'react'; |
| | | import NewPage from '../../components/NewPage/index'; |
| | | import { Form, Typography, Space, Tooltip } from 'antd'; |
| | |
| | | import TableView from '../../components/TableViewCanSort'; |
| | | import NewTableSearch from '../../components/NewTableSearch'; |
| | | import SelectObjModal from '@/components/SelectObjModal/newSelectPerson'; |
| | | import './index.less' |
| | | import './index.less'; |
| | | const { Link } = Typography; |
| | | |
| | | // 获取数据 |
| | | function getCaseInfoDataApi(submitData) { |
| | | return $$.ax.request({ url: 'caseInfo/pageQueryAll', type: 'get', data: submitData, service: 'mediate' }); |
| | | return $$.ax.request({ url: 'caseInfo/pageQueryAll', type: 'get', data: submitData, service: 'mediate' }); |
| | | } |
| | | |
| | | // 区域字典值 |
| | | function treeByUserIdApi(submitData) { |
| | | return $$.ax.request({ url: 'syRegion/treeByUserId', type: 'get', data: submitData, service: 'sys' }); |
| | | return $$.ax.request({ url: 'syRegion/treeByUserId', type: 'get', data: submitData, service: 'sys' }); |
| | | } |
| | | |
| | | |
| | | const Comprehensive = () => { |
| | | const [form] = Form.useForm(); |
| | | const formRef = useRef(); |
| | | let location = useLocation(); |
| | | const [form] = Form.useForm(); |
| | | const formRef = useRef(); |
| | | let location = useLocation(); |
| | | |
| | | let navigate = useNavigate(); |
| | | let navigate = useNavigate(); |
| | | |
| | | // 区域字典值 |
| | | const [treeList, setTreeList] = useState([]); |
| | | // 筛选区域的中文 |
| | | const [labels, setLabels] = useState([]); |
| | | // 默认查询询条件 |
| | | const [normalSearch, setNormalSearch] = useState({}); |
| | | // 搜索 |
| | | const [search, setSearch] = useState({ page: 1, size: 10, sortColmn: 1, sortType: 2 }); |
| | | // 区域字典值 |
| | | const [treeList, setTreeList] = useState([]); |
| | | // 筛选区域的中文 |
| | | const [labels, setLabels] = useState([]); |
| | | // 默认查询询条件 |
| | | const [normalSearch, setNormalSearch] = useState({}); |
| | | // 搜索 |
| | | const [search, setSearch] = useState({ page: 1, size: 10, sortColmn: 1, sortType: 2 }); |
| | | |
| | | // 数据 |
| | | const [data, setData] = useState({ tableData: [] }); |
| | | // 数据 |
| | | const [data, setData] = useState({ tableData: [] }); |
| | | |
| | | // 承办配合部门select框数据 |
| | | const [isModalVisible, setIsModalVisible] = useState(false); |
| | | const [selectObjModalData, setSelectObjModalData] = useState({}) |
| | | // 承办配合部门select框数据 |
| | | const [isModalVisible, setIsModalVisible] = useState(false); |
| | | const [selectObjModalData, setSelectObjModalData] = useState({}); |
| | | |
| | | // 选择部门弹窗 |
| | | function onChange(key) { |
| | | if (key === 'mediateUnitId') { |
| | | setSelectObjModalData({ ...selectObjModalData, key, title: '承办部门' }) |
| | | } else if (key === 'assistUnitId') { |
| | | setSelectObjModalData({ ...selectObjModalData, key, title: '配合部门' }) |
| | | } else { |
| | | setSelectObjModalData({ ...selectObjModalData, key, type: 'person', title: '经办人' }) |
| | | } |
| | | setIsModalVisible(true) |
| | | } |
| | | // 选择部门弹窗 |
| | | function onChange(key) { |
| | | if (key === 'mediateUnitId') { |
| | | setSelectObjModalData({ ...selectObjModalData, key, title: '承办部门' }); |
| | | } else if (key === 'assistUnitId') { |
| | | setSelectObjModalData({ ...selectObjModalData, key, title: '配合部门' }); |
| | | } else { |
| | | setSelectObjModalData({ ...selectObjModalData, key, type: 'person', title: '经办人' }); |
| | | } |
| | | setIsModalVisible(true); |
| | | } |
| | | |
| | | // 表头 |
| | | const columns = () => { |
| | | const columnsData = [ |
| | | { |
| | | title: '登记时间', width: 140, dataIndex: 'createTime', defaultSortOrder: 'descend', order: 'ascend', |
| | | sorter: { compare: (a, b) => { } }, |
| | | render: (text, record, index) => { |
| | | return ( |
| | | <div style={{ display: 'flex', gap: '8px' }}> |
| | | <div>{$$.dateFormat(text)}</div> |
| | | {record?.isRisk === '1' && <div className="public-tag public-tag-tagRed">扬言</div>} |
| | | </div> |
| | | ); |
| | | }, |
| | | }, |
| | | { title: '登记机构', width: 150, dataIndex: 'inputUnitName' }, |
| | | { title: '问题属地', width: 100, dataIndex: 'areaName' }, |
| | | { title: '事项来源', width: 100, dataIndex: 'canalName' }, |
| | | { title: '事项等级', width: 100, dataIndex: 'caseLevel' }, |
| | | { title: '纠纷类型', width: 100, dataIndex: 'caseTypeName' }, |
| | | { title: '承办部门', width: 120, dataIndex: 'mediateUnitName' }, |
| | | { title: '配合部门', width: 120, dataIndex: 'assistUnitName' }, |
| | | { title: '事项状态', width: 100, dataIndex: 'statusName' }, |
| | | { |
| | | title: '办结时间', width: 100, dataIndex: 'closeTime', order: 'ascend', |
| | | sorter: { compare: (a, b) => { } }, render: (text) => <span>{$$.dateFormat(text)}</span> |
| | | }, |
| | | { |
| | | 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> }, |
| | | // 表头 |
| | | const columns = () => { |
| | | const columnsData = [ |
| | | { |
| | | title: '登记时间', |
| | | width: 140, |
| | | dataIndex: 'createTime', |
| | | defaultSortOrder: 'descend', |
| | | order: 'ascend', |
| | | sorter: { compare: (a, b) => {} }, |
| | | render: (text, record, index) => { |
| | | return ( |
| | | <div style={{ display: 'flex', gap: '8px' }}> |
| | | <div>{$$.dateFormat(text)}</div> |
| | | {record?.isRisk === '1' && <div className="public-tag public-tag-tagRed">扬言</div>} |
| | | </div> |
| | | ); |
| | | }, |
| | | }, |
| | | { title: '登记机构', width: 150, dataIndex: 'inputUnitName' }, |
| | | { title: '问题属地', width: 100, dataIndex: 'areaName' }, |
| | | { title: '事项来源', width: 100, dataIndex: 'canalName' }, |
| | | { title: '事项等级', width: 100, dataIndex: 'caseLevel' }, |
| | | { title: '纠纷类型', width: 100, dataIndex: 'caseTypeName' }, |
| | | { title: '承办部门', width: 120, dataIndex: 'mediateUnitName' }, |
| | | { title: '配合部门', width: 120, dataIndex: 'assistUnitName' }, |
| | | { title: '事项状态', width: 100, dataIndex: 'statusName' }, |
| | | { |
| | | title: '办结时间', |
| | | width: 100, |
| | | dataIndex: 'closeTime', |
| | | order: 'ascend', |
| | | sorter: { compare: (a, b) => {} }, |
| | | render: (text) => <span>{$$.dateFormat(text)}</span>, |
| | | }, |
| | | { |
| | | 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 <Space> |
| | | <span onClick={() => window.open(`${$$.windowUrl}/windowDetail?caseTaskId=${record.caseTaskId}&caseId=${record.id}`)} className='public-color public-a'>详情</span> |
| | | </Space>; |
| | | }, |
| | | // render: (_, record) => { |
| | | // return <Link onClick={() => { |
| | | // $$.setSessionStorage(location.pathname, { search: search, treeList: treeList, normalSearch: normalSearch }); |
| | | // navigate(`/mediate/visit/fileMessage?caseTaskId=${record.caseTaskId}&caseId=${record.id}`) |
| | | // }}>详情</Link>; |
| | | // }, |
| | | }, |
| | | ]; |
| | | return columnsData; |
| | | }; |
| | | { |
| | | title: '操作', |
| | | dataIndex: 'action', |
| | | width: 50, |
| | | render: (_, record) => { |
| | | return ( |
| | | <Space> |
| | | <span |
| | | onClick={() => window.open(`${$$.windowUrl}/windowDetail?caseTaskId=${record.caseTaskId}&caseId=${record.id}`)} |
| | | className="public-color public-a" |
| | | > |
| | | 详情 |
| | | </span> |
| | | </Space> |
| | | ); |
| | | }, |
| | | // render: (_, record) => { |
| | | // return <Link onClick={() => { |
| | | // $$.setSessionStorage(location.pathname, { search: search, treeList: treeList, normalSearch: normalSearch }); |
| | | // navigate(`/mediate/visit/fileMessage?caseTaskId=${record.caseTaskId}&caseId=${record.id}`) |
| | | // }}>详情</Link>; |
| | | // }, |
| | | }, |
| | | ]; |
| | | return columnsData; |
| | | }; |
| | | |
| | | // 页码修改 |
| | | function handleChangePage(page, pageSize, field, order) { |
| | | let paramsObj = Object.assign(search, { page, size: pageSize }); |
| | | let sortColmn = ''; |
| | | let sortType = ''; |
| | | sortColmn = field === 'createTime' ? 1 : field === 'closeTime' ? 2 : ''; |
| | | sortType = order === 'ascend' ? 1 : order === 'descend' ? 2 : '' |
| | | setSearch({ ...paramsObj, sortColmn, sortType }); |
| | | getCaseInfoData({ ...paramsObj, sortColmn, sortType }); |
| | | } |
| | | // 页码修改 |
| | | function handleChangePage(page, pageSize, field, order) { |
| | | let paramsObj = Object.assign(search, { page, size: pageSize }); |
| | | let sortColmn = ''; |
| | | let sortType = ''; |
| | | sortColmn = field === 'createTime' ? 1 : field === 'closeTime' ? 2 : ''; |
| | | sortType = order === 'ascend' ? 1 : order === 'descend' ? 2 : ''; |
| | | setSearch({ ...paramsObj, sortColmn, sortType }); |
| | | getCaseInfoData({ ...paramsObj, sortColmn, sortType }); |
| | | } |
| | | |
| | | // 导出数据 |
| | | function downloadXls() { |
| | | const keysToFilter = ['page', 'size']; |
| | | const filteredObj = Object.fromEntries(Object.entries(search).filter(([key, value]) => value !== undefined && !keysToFilter.includes(key))); |
| | | |
| | | // 导出数据 |
| | | function downloadXls() { |
| | | const keysToFilter = ['page', 'size']; |
| | | const filteredObj = Object.fromEntries( |
| | | Object.entries(search) |
| | | .filter(([key, value]) => value !== undefined && !keysToFilter.includes(key)) |
| | | ); |
| | | window.open(`${$$.appUrl.baseUrl}/${$$.appUrl.mediate}/api/web/caseInfo/exportQueryAll?${$$.useQueryParams(filteredObj)}`); |
| | | } |
| | | |
| | | window.open(`${$$.appUrl.baseUrl}/${$$.appUrl.mediate}/api/web/caseInfo/exportQueryAll?${$$.useQueryParams(filteredObj)}`); |
| | | }; |
| | | // 搜索 or 重置 |
| | | function handleSearch(type, session) { |
| | | if (type === 'search') { |
| | | let values = form.getFieldsValue(); |
| | | $$.changeTimNeweFormat(values, 'createTime', 'createStart', 'createEnd'); |
| | | $$.changeTimNeweFormat(values, 'closeTime', 'closeStart', 'closeEnd'); |
| | | $$.changeTimNeweFormat(values, 'fileTime', 'fileStart', 'fileEnd'); |
| | | $$.searchCascader(values, 'queCode', normalSearch.level, ['queCity', 'queArea', 'queRoad', 'queVillage']); |
| | | $$.searchCascader(values, 'caseType', 1, ['caseType', 'caseType']); |
| | | $$.searchCascader(search, 'caseType', 1, ['caseType', 'caseType']); |
| | | $$.searchCascader(values, 'canal', 1, ['canal', 'canalSecond']); |
| | | $$.searchCascader(search, 'canal', 1, ['canal', 'canalSecond']); |
| | | |
| | | // 搜索 or 重置 |
| | | function handleSearch(type, session) { |
| | | if (type === 'search') { |
| | | let values = form.getFieldsValue(); |
| | | $$.changeTimNeweFormat(values, 'createTime', 'createStart', 'createEnd'); |
| | | $$.changeTimNeweFormat(values, 'closeTime', 'closeStart', 'closeEnd'); |
| | | $$.changeTimNeweFormat(values, 'fileTime', 'fileStart', 'fileEnd'); |
| | | $$.searchCascader(values, 'queCode', normalSearch.level, ['queCity', 'queArea', 'queRoad', 'queVillage']) |
| | | $$.searchCascader(values, 'caseType', 1, ['caseType', 'caseType']) |
| | | $$.searchCascader(search, 'caseType', 1, ['caseType', 'caseType']) |
| | | if (form.getFieldsValue()?.caseType) { |
| | | values.caseType1 = form.getFieldsValue()?.caseType[0] |
| | | } |
| | | if (values.mediateUnitId) { |
| | | values.mediateUnitId = selectObjModalData?.mediateUnitId?.key |
| | | } else { |
| | | delete values.mediateUnitId; |
| | | delete search.mediateUnitId; |
| | | } |
| | | if (values.assistUnitId) { |
| | | values.assistUnitId = selectObjModalData?.assistUnitId?.key |
| | | } else { |
| | | delete values.assistUnitId; |
| | | delete search.assistUnitId; |
| | | } |
| | | if (values.mediatorId) { |
| | | values.mediatorId = selectObjModalData?.mediatorId?.key |
| | | } else { |
| | | delete values.mediatorId; |
| | | delete search.mediatorId; |
| | | } |
| | | getCaseInfoData({ page: search.page, size: search.size, sortColmn: search.sortColmn, sortType: search.sortType, ...values }); |
| | | } |
| | | if (type === 'reset') { |
| | | let paramsObj = { page: 1, size: 10, sortColmn: 1, sortType: 2 }; |
| | | getCaseInfoData({ ...paramsObj, [session.key]: session.value[0], createStart: $$.dateFormat(session.createStart), createEnd: $$.dateFormat(session.createEnd) }); |
| | | return; |
| | | } |
| | | if (type === 'recurrent') { |
| | | let paramsObj = { ...search, ...session.search }; |
| | | let copyObj = { ...paramsObj }; |
| | | if (copyObj.createStart) { |
| | | copyObj.createTime = [$$.dateFormat($$.myMoment(copyObj.createStart)), $$.dateFormat($$.myMoment(copyObj.createEnd))]; |
| | | } |
| | | if (copyObj.closeTime) { |
| | | copyObj.closeTime = [$$.dateFormat($$.myMoment(copyObj.closeStart)), $$.dateFormat($$.myMoment(copyObj.closeEnd))]; |
| | | } |
| | | if (copyObj.fileTime) { |
| | | copyObj.fileTime = [$$.dateFormat($$.myMoment(copyObj.fileStart)), $$.dateFormat($$.myMoment(copyObj.fileEnd))]; |
| | | } |
| | | if (copyObj.queCity) { |
| | | copyObj.queCode = [copyObj.queCity]; |
| | | } |
| | | if (copyObj.queArea) { |
| | | let arrayList = $$.convertStringToArray(copyObj.queArea) |
| | | console.log('arrayList', arrayList); |
| | | if (form.getFieldsValue()?.caseType) { |
| | | values.caseType1 = form.getFieldsValue()?.caseType[0]; |
| | | } |
| | | if (form.getFieldsValue()?.canal) { |
| | | values.caseType1 = form.getFieldsValue()?.canal[0]; |
| | | } |
| | | if (values.mediateUnitId) { |
| | | values.mediateUnitId = selectObjModalData?.mediateUnitId?.key; |
| | | } else { |
| | | delete values.mediateUnitId; |
| | | delete search.mediateUnitId; |
| | | } |
| | | if (values.assistUnitId) { |
| | | values.assistUnitId = selectObjModalData?.assistUnitId?.key; |
| | | } else { |
| | | delete values.assistUnitId; |
| | | delete search.assistUnitId; |
| | | } |
| | | if (values.mediatorId) { |
| | | values.mediatorId = selectObjModalData?.mediatorId?.key; |
| | | } else { |
| | | delete values.mediatorId; |
| | | delete search.mediatorId; |
| | | } |
| | | getCaseInfoData({ page: search.page, size: search.size, sortColmn: search.sortColmn, sortType: search.sortType, ...values }); |
| | | } |
| | | if (type === 'reset') { |
| | | let paramsObj = { page: 1, size: 10, sortColmn: 1, sortType: 2 }; |
| | | getCaseInfoData({ |
| | | ...paramsObj, |
| | | [session.key]: session.value[0], |
| | | createStart: $$.dateFormat(session.createStart), |
| | | createEnd: $$.dateFormat(session.createEnd), |
| | | }); |
| | | return; |
| | | } |
| | | if (type === 'recurrent') { |
| | | let paramsObj = { ...search, ...session.search }; |
| | | let copyObj = { ...paramsObj }; |
| | | if (copyObj.createStart) { |
| | | copyObj.createTime = [$$.dateFormat($$.myMoment(copyObj.createStart)), $$.dateFormat($$.myMoment(copyObj.createEnd))]; |
| | | } |
| | | if (copyObj.closeTime) { |
| | | copyObj.closeTime = [$$.dateFormat($$.myMoment(copyObj.closeStart)), $$.dateFormat($$.myMoment(copyObj.closeEnd))]; |
| | | } |
| | | if (copyObj.fileTime) { |
| | | copyObj.fileTime = [$$.dateFormat($$.myMoment(copyObj.fileStart)), $$.dateFormat($$.myMoment(copyObj.fileEnd))]; |
| | | } |
| | | if (copyObj.queCity) { |
| | | copyObj.queCode = [copyObj.queCity]; |
| | | } |
| | | if (copyObj.queArea) { |
| | | let arrayList = $$.convertStringToArray(copyObj.queArea); |
| | | console.log('arrayList', arrayList); |
| | | |
| | | copyObj.queCode = arrayList |
| | | } |
| | | if (copyObj.queRoad) { |
| | | let arrayList = $$.convertStringToArray(copyObj.queRoad) |
| | | console.log('arrayList', arrayList); |
| | | copyObj.queCode = arrayList |
| | | } |
| | | if (copyObj.queVillage) { |
| | | let arrayList = $$.convertStringToArray(copyObj.queVillage) |
| | | copyObj.queCode = arrayList |
| | | } |
| | | if (copyObj.caseType) { |
| | | copyObj.caseType = [copyObj.caseType1, copyObj.caseType] |
| | | } |
| | | form.setFieldsValue(copyObj); |
| | | getCaseInfoData(paramsObj); |
| | | return; |
| | | } |
| | | copyObj.queCode = arrayList; |
| | | } |
| | | if (copyObj.queRoad) { |
| | | let arrayList = $$.convertStringToArray(copyObj.queRoad); |
| | | console.log('arrayList', arrayList); |
| | | copyObj.queCode = arrayList; |
| | | } |
| | | if (copyObj.queVillage) { |
| | | let arrayList = $$.convertStringToArray(copyObj.queVillage); |
| | | copyObj.queCode = arrayList; |
| | | } |
| | | if (copyObj.caseType) { |
| | | copyObj.caseType = [copyObj.caseType1, copyObj.caseType]; |
| | | } |
| | | if (copyObj.canal) { |
| | | copyObj.canal = [copyObj.canalSecond, copyObj.canal]; |
| | | } |
| | | form.setFieldsValue(copyObj); |
| | | getCaseInfoData(paramsObj); |
| | | return; |
| | | } |
| | | } |
| | | |
| | | } |
| | | // 获取数据 |
| | | async function getCaseInfoData(submitData) { |
| | | global.setSpinning(true); |
| | | const res = await getCaseInfoDataApi(submitData); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | setSearch(submitData); |
| | | setData({ |
| | | total: res?.data?.totalElements || 0, |
| | | tableData: res?.data?.content || [], |
| | | }); |
| | | } |
| | | } |
| | | |
| | | // 获取数据 |
| | | async function getCaseInfoData(submitData) { |
| | | global.setSpinning(true); |
| | | const res = await getCaseInfoDataApi(submitData); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | setSearch(submitData); |
| | | setData({ |
| | | total: res?.data?.totalElements || 0, |
| | | tableData: res?.data?.content || [], |
| | | }); |
| | | } |
| | | } |
| | | // 获取区域字典值 |
| | | async function treeByUserId() { |
| | | global.setSpinning(true); |
| | | const res = await treeByUserIdApi(); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | let list = res.data || []; |
| | | setTreeList(list); |
| | | let values = form.getFieldsValue(); |
| | | let key = levelKey(list[0].level || '1'); |
| | | values.queCode = [list[0].value]; |
| | | values.createTime = [ |
| | | $$.myMoment().subtract(0, 'months').startOf('month').format('YYYY-MM-DD'), |
| | | $$.myMoment().subtract(0, 'months').endOf('month').format('YYYY-MM-DD'), |
| | | ]; |
| | | form.setFieldsValue(values); |
| | | setLabels([list[0].label]); |
| | | setNormalSearch({ |
| | | key, |
| | | value: [list[0].value], |
| | | level: list[0].level, |
| | | createStart: $$.myMoment().subtract(0, 'months').startOf('month').format('YYYY-MM-DD'), |
| | | createEnd: $$.myMoment().subtract(0, 'months').endOf('month').format('YYYY-MM-DD'), |
| | | }); |
| | | handleSearch('reset', { |
| | | key, |
| | | value: [list[0].value], |
| | | createStart: $$.myMoment().subtract(0, 'months').startOf('month').format('YYYY-MM-DD'), |
| | | createEnd: $$.myMoment().subtract(0, 'months').endOf('month').format('YYYY-MM-DD'), |
| | | }); |
| | | } |
| | | } |
| | | |
| | | function levelKey(KeyIndex) { |
| | | return { |
| | | 1: 'queCity', |
| | | 2: 'queArea', |
| | | 3: 'queRoad', |
| | | 4: 'queVillage', |
| | | }[KeyIndex]; |
| | | } |
| | | |
| | | // 获取区域字典值 |
| | | async function treeByUserId() { |
| | | global.setSpinning(true); |
| | | const res = await treeByUserIdApi(); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | let list = res.data || [] |
| | | setTreeList(list); |
| | | let values = form.getFieldsValue(); |
| | | let key = levelKey(list[0].level || '1'); |
| | | values.queCode = [list[0].value] |
| | | values.createTime = [$$.myMoment().subtract(0, 'months').startOf('month').format('YYYY-MM-DD'), $$.myMoment().subtract(0, 'months').endOf('month').format('YYYY-MM-DD')] |
| | | form.setFieldsValue(values); |
| | | setLabels([list[0].label]); |
| | | setNormalSearch({ key, value: [list[0].value], level: list[0].level, createStart: $$.myMoment().subtract(0, 'months').startOf('month').format('YYYY-MM-DD'), createEnd: $$.myMoment().subtract(0, 'months').endOf('month').format('YYYY-MM-DD') }) |
| | | handleSearch('reset', { key, value: [list[0].value], createStart: $$.myMoment().subtract(0, 'months').startOf('month').format('YYYY-MM-DD'), createEnd: $$.myMoment().subtract(0, 'months').endOf('month').format('YYYY-MM-DD') }); |
| | | } |
| | | } |
| | | // 初始化 |
| | | useEffect(() => { |
| | | let values = $$.getSessionStorage(location.pathname); |
| | | console.log('values', values); |
| | | |
| | | function levelKey(KeyIndex) { |
| | | return { |
| | | 1: 'queCity', |
| | | 2: 'queArea', |
| | | 3: 'queRoad', |
| | | 4: 'queVillage' |
| | | }[KeyIndex] |
| | | } |
| | | if (!!values) { |
| | | setTreeList(values?.treeList || []); |
| | | setNormalSearch(values?.normalSearch || {}); |
| | | handleSearch('recurrent', values); |
| | | $$.clearSessionStorage(location.pathname); |
| | | } else { |
| | | treeByUserId(); |
| | | } |
| | | }, []); |
| | | |
| | | // 初始化 |
| | | useEffect(() => { |
| | | let values = $$.getSessionStorage(location.pathname); |
| | | console.log('values', values); |
| | | return ( |
| | | <NewPage pageHead={{ breadcrumbData: [{ title: '工作台' }, { title: '综合查询' }], title: '综合查询' }}> |
| | | <div className="comprehensive"> |
| | | <div className="pageSearch"> |
| | | <div className="comprehensive-title">查询条件</div> |
| | | <NewTableSearch |
| | | exportButton={downloadXls} |
| | | labelLength={6} |
| | | form={form} |
| | | itemData={[ |
| | | { |
| | | type: 'Cascader', |
| | | name: 'queCode', |
| | | label: '问题属地', |
| | | placeholder: '请选择', |
| | | changeSelect: true, |
| | | allowClear: false, |
| | | treedata: treeList || [], |
| | | }, |
| | | { |
| | | type: 'RangePicker', |
| | | name: 'createTime', |
| | | label: '登记时间', |
| | | shortcutsPlacementLeft: true, |
| | | allowClear: false, |
| | | shortcuts: $$.shortcutsList(), |
| | | span: 8, |
| | | }, |
| | | { type: 'RangePicker', name: 'closeTime', label: '办结时间', shortcutsPlacementLeft: true, shortcuts: $$.shortcutsList(), span: 8 }, |
| | | { type: 'RangePicker', name: 'fileTime', label: '归档时间', shortcutsPlacementLeft: true, shortcuts: $$.shortcutsList(), span: 8 }, |
| | | { |
| | | type: 'Cascader', |
| | | name: 'caseType', |
| | | label: '纠纷类型', |
| | | placeholder: '请选择', |
| | | span: 8, |
| | | changeSelect: true, |
| | | treedata: $$.caseTypeSelect.caseTypeSelect, |
| | | }, |
| | | { type: 'Select', name: 'mediResult', label: '化解结果', placeholder: '请选择', span: 8, selectdata: $$.options.mediResult }, |
| | | { type: 'Input', name: 'caseRef', label: '事项编号' }, |
| | | { |
| | | type: 'Cascader', |
| | | name: 'canal', |
| | | label: '事项来源', |
| | | placeholder: '请选择', |
| | | span: 8, |
| | | changeSelect: true, |
| | | treedata: $$.options.caseCanal, |
| | | }, |
| | | { type: 'Select', name: 'status', label: '事项状态', placeholder: '请选择', span: 8, selectdata: $$.options.caseStatus }, |
| | | { type: 'Select', name: 'caseLevel', label: '事项等级', placeholder: '请选择', span: 8, selectdata: $$.options.caseLevelList }, |
| | | { type: 'Select', name: 'systemSource', label: '系统来源', placeholder: '请选择', span: 8, selectdata: $$.options.systemSource }, |
| | | { type: 'Input', name: 'inputUnitName', label: '登记机构' }, |
| | | { |
| | | type: 'searchButton', |
| | | name: 'mediateUnitId', |
| | | maxLength: 0, |
| | | onClear: () => { |
| | | console.log('clear'); |
| | | setSelectObjModalData({ ...selectObjModalData, mediateUnitId: {} }); |
| | | form.setFieldValue('mediateUnitId', ''); |
| | | }, |
| | | onSearch: () => { |
| | | onChange('mediateUnitId'); |
| | | }, |
| | | searchButton: '选择', |
| | | placeholder: '请选择', |
| | | label: '承办部门', |
| | | }, |
| | | { |
| | | type: 'searchButton', |
| | | name: 'assistUnitId', |
| | | maxLength: 0, |
| | | onClear: () => { |
| | | setSelectObjModalData({ ...selectObjModalData, assistUnitId: {} }); |
| | | form.setFieldValue('assistUnitId', ''); |
| | | }, |
| | | onSearch: () => { |
| | | onChange('assistUnitId'); |
| | | }, |
| | | searchButton: '选择', |
| | | placeholder: '请选择', |
| | | label: '配合部门', |
| | | }, |
| | | { type: 'Input', name: 'plaintiffs', label: '申请方', labelStyle: { width: '56px' } }, |
| | | { type: 'Input', name: 'defendants', label: '被申请方' }, |
| | | { type: 'Select', name: 'peopleNum', placeholder: '请选择', label: '涉及人数', selectdata: $$.options.peopleNum }, |
| | | { type: 'Select', name: 'amount', placeholder: '请选择', label: '涉及金额', selectdata: $$.options.amount }, |
| | | { type: 'Select', name: 'evaluateGrade', placeholder: '请选择', label: '评价等级', selectdata: $$.options.evaluateGrade }, |
| | | { |
| | | type: 'Select', |
| | | name: 'majorStatus', |
| | | placeholder: '请选择', |
| | | label: '是否重大矛盾', |
| | | selectdata: [ |
| | | { label: '是', value: '1' }, |
| | | { label: '否', value: '0' }, |
| | | ], |
| | | }, |
| | | { |
| | | type: 'searchButton', |
| | | name: 'mediatorId', |
| | | maxLength: 0, |
| | | onClear: () => { |
| | | setSelectObjModalData({ ...selectObjModalData, mediatorId: {} }); |
| | | form.setFieldValue('mediatorId', ''); |
| | | }, |
| | | onSearch: () => { |
| | | onChange('mediatorId'); |
| | | }, |
| | | searchButton: '选择', |
| | | placeholder: '请选择', |
| | | label: '经办人', |
| | | }, |
| | | { |
| | | type: 'Select', |
| | | name: 'isRisk', |
| | | placeholder: '请选择', |
| | | label: '是否扬言极端', |
| | | selectdata: [ |
| | | { label: '是', value: '1' }, |
| | | { label: '否', value: '0' }, |
| | | ], |
| | | }, |
| | | { type: 'Select', name: 'agreeType', placeholder: '请选择', label: '结案协议类型', selectdata: $$.options.caseAgreeType }, |
| | | { type: 'Select', name: 'repeatCase', placeholder: '请选择', label: '合并事项', selectdata: $$.options.repeatCase }, |
| | | { type: 'Input', name: 'caseCityCode', label: '市民编号' }, |
| | | ]} |
| | | handleReset={() => { |
| | | form.resetFields(); |
| | | form.setFieldsValue({ |
| | | queCode: [normalSearch.value[0]], |
| | | createTime: [$$.dateFormat(normalSearch.createStart), $$.dateFormat(normalSearch.createEnd)], |
| | | }); |
| | | setLabels([treeList[0].label]); |
| | | handleSearch('reset', normalSearch); |
| | | }} |
| | | handleSearch={() => handleSearch('search')} |
| | | /> |
| | | </div> |
| | | |
| | | if (!!values) { |
| | | setTreeList(values?.treeList || []) |
| | | setNormalSearch(values?.normalSearch || {}) |
| | | handleSearch('recurrent', values) |
| | | $$.clearSessionStorage(location.pathname); |
| | | } else { |
| | | treeByUserId(); |
| | | } |
| | | }, []); |
| | | |
| | | |
| | | return ( |
| | | <NewPage |
| | | pageHead={ |
| | | { breadcrumbData: [{ title: '工作台' }, { title: '综合查询' }], title: '综合查询' } |
| | | } |
| | | > |
| | | <div className="comprehensive"> |
| | | <div className="pageSearch"> |
| | | <div className='comprehensive-title'>查询条件</div> |
| | | <NewTableSearch |
| | | exportButton={downloadXls} |
| | | labelLength={6} |
| | | form={form} |
| | | itemData={[ |
| | | { type: 'Cascader', name: 'queCode', label: '问题属地', placeholder: '请选择', changeSelect: true, allowClear: false, treedata: treeList || [] }, |
| | | { type: 'RangePicker', name: 'createTime', label: '登记时间', shortcutsPlacementLeft: true, allowClear: false, shortcuts: $$.shortcutsList(), span: 8 }, |
| | | { type: 'RangePicker', name: 'closeTime', label: '办结时间', shortcutsPlacementLeft: true, shortcuts: $$.shortcutsList(), span: 8 }, |
| | | { type: 'RangePicker', name: 'fileTime', label: '归档时间', shortcutsPlacementLeft: true, shortcuts: $$.shortcutsList(), span: 8 }, |
| | | { type: 'Cascader', name: 'caseType', label: '纠纷类型', placeholder: '请选择', span: 8, changeSelect: true, treedata: $$.caseTypeSelect.caseTypeSelect }, |
| | | { type: 'Select', name: 'mediResult', label: '化解结果', placeholder: '请选择', span: 8, selectdata: $$.options.mediResult }, |
| | | { type: 'Input', name: 'caseRef', label: '事项编号' }, |
| | | { type: 'Select', name: 'canal', label: '事项来源', placeholder: '请选择', span: 8, selectdata: $$.options.caseCanal }, |
| | | { type: 'Select', name: 'status', label: '事项状态', placeholder: '请选择', span: 8, selectdata: $$.options.caseStatus }, |
| | | { type: 'Select', name: 'caseLevel', label: '事项等级', placeholder: '请选择', span: 8, selectdata: $$.options.caseLevelList }, |
| | | { type: 'Select', name: 'systemSource', label: '系统来源', placeholder: '请选择', span: 8, selectdata: $$.options.systemSource }, |
| | | { type: 'Input', name: 'inputUnitName', label: '登记机构' }, |
| | | { type: 'searchButton', name: 'mediateUnitId', maxLength: 0, onClear: () => { console.log('clear'); setSelectObjModalData({ ...selectObjModalData, mediateUnitId: {} }); form.setFieldValue('mediateUnitId', '') }, onSearch: () => { onChange('mediateUnitId') }, searchButton: '选择', placeholder: '请选择', label: '承办部门' }, |
| | | { type: 'searchButton', name: 'assistUnitId', maxLength: 0, onClear: () => { setSelectObjModalData({ ...selectObjModalData, assistUnitId: {} }); form.setFieldValue('assistUnitId', '') }, onSearch: () => { onChange('assistUnitId') }, searchButton: '选择', placeholder: '请选择', label: '配合部门' }, |
| | | { type: 'Input', name: 'plaintiffs', label: '申请方', labelStyle: { width: '56px' } }, |
| | | { type: 'Input', name: 'defendants', label: '被申请方' }, |
| | | { type: 'Select', name: 'peopleNum', placeholder: '请选择', label: '涉及人数', selectdata: $$.options.peopleNum }, |
| | | { type: 'Select', name: 'amount', placeholder: '请选择', label: '涉及金额', selectdata: $$.options.amount }, |
| | | { type: 'Select', name: 'evaluateGrade', placeholder: '请选择', label: '评价等级', selectdata: $$.options.evaluateGrade }, |
| | | { type: 'Select', name: 'majorStatus', placeholder: '请选择', label: '是否重大矛盾', selectdata: [{ label: '是', value: '1' }, { label: '否', value: '0' }] }, |
| | | { type: 'searchButton', name: 'mediatorId', maxLength: 0, onClear: () => { setSelectObjModalData({ ...selectObjModalData, mediatorId: {} }); form.setFieldValue('mediatorId', '') }, onSearch: () => { onChange('mediatorId') }, searchButton: '选择', placeholder: '请选择', label: '经办人' }, |
| | | { type: 'Select', name: 'isRisk', placeholder: '请选择', label: '是否扬言极端', selectdata: [{ label: '是', value: '1' }, { label: '否', value: '0' }] }, |
| | | { type: 'Select', name: 'agreeType', placeholder: '请选择', label: '结案协议类型', selectdata: $$.options.caseAgreeType }, |
| | | { type: 'Select', name: 'repeatCase', placeholder: '请选择', label: '合并事项', selectdata: $$.options.repeatCase }, |
| | | { type: 'Input', name: 'caseCityCode', label: '市民编号' }, |
| | | ]} |
| | | handleReset={() => { |
| | | form.resetFields(); |
| | | form.setFieldsValue({ queCode: [normalSearch.value[0]], createTime: [$$.dateFormat(normalSearch.createStart), $$.dateFormat(normalSearch.createEnd)] }); |
| | | setLabels([treeList[0].label]); |
| | | handleSearch('reset', normalSearch) |
| | | }} |
| | | handleSearch={() => handleSearch('search')} |
| | | /> |
| | | </div> |
| | | |
| | | <div style={{ marginTop: '8px' }} className="comprehensive-table"> |
| | | <TableView |
| | | showHeader |
| | | title="查询结果" |
| | | columns={columns()} |
| | | dataSource={data.tableData} |
| | | onChange={(pagination, filters, sorter) => { |
| | | handleChangePage(pagination.current, pagination.pageSize, sorter.field, sorter.order) |
| | | }} |
| | | pagination={{ |
| | | current: search.page, |
| | | pageSize: search.size, |
| | | total: data.total, |
| | | }} |
| | | /> |
| | | </div> |
| | | <SelectObjModal |
| | | visible={isModalVisible} |
| | | nameStr={selectObjModalData.title} |
| | | checkKeys={[selectObjModalData[selectObjModalData.key]?.key || '']} |
| | | onOk={(item) => { |
| | | setIsModalVisible(false); |
| | | setSelectObjModalData({ ...selectObjModalData, [selectObjModalData.key]: item }) |
| | | form.setFieldValue(selectObjModalData?.key, item.name) |
| | | }} |
| | | type={selectObjModalData.type || 'dept'} |
| | | onClose={() => setIsModalVisible(false)} |
| | | isCheckbox={false} |
| | | /> |
| | | </div> |
| | | </NewPage> |
| | | ); |
| | | <div style={{ marginTop: '8px' }} className="comprehensive-table"> |
| | | <TableView |
| | | showHeader |
| | | title="查询结果" |
| | | columns={columns()} |
| | | dataSource={data.tableData} |
| | | onChange={(pagination, filters, sorter) => { |
| | | handleChangePage(pagination.current, pagination.pageSize, sorter.field, sorter.order); |
| | | }} |
| | | pagination={{ |
| | | current: search.page, |
| | | pageSize: search.size, |
| | | total: data.total, |
| | | }} |
| | | /> |
| | | </div> |
| | | <SelectObjModal |
| | | visible={isModalVisible} |
| | | nameStr={selectObjModalData.title} |
| | | checkKeys={[selectObjModalData[selectObjModalData.key]?.key || '']} |
| | | onOk={(item) => { |
| | | setIsModalVisible(false); |
| | | setSelectObjModalData({ ...selectObjModalData, [selectObjModalData.key]: item }); |
| | | form.setFieldValue(selectObjModalData?.key, item.name); |
| | | }} |
| | | type={selectObjModalData.type || 'dept'} |
| | | onClose={() => setIsModalVisible(false)} |
| | | isCheckbox={false} |
| | | /> |
| | | </div> |
| | | </NewPage> |
| | | ); |
| | | }; |
| | | |
| | | export default Comprehensive; |
| | |
| | | * @Company: hugeInfo |
| | | * @Author: lwh |
| | | * @Date: 2024-09-14 15:59:17 |
| | | * @LastEditTime: 2025-06-14 11:35:43 |
| | | * @LastEditTime: 2025-06-20 18:48:05 |
| | | * @LastEditors: lwh |
| | | * @Version: 1.0.0 |
| | | * @Description: |
| | |
| | | // 调度中心列表 |
| | | function getListDataApi(submitData) { |
| | | return $$.ax.request({ url: 'caseInfo/ledger', type: 'get', data: submitData, service: 'mediate' }); |
| | | } |
| | | |
| | | // |
| | | function ledgerCountApi(submitData) { |
| | | return $$.ax.request({ url: 'caseInfo/ledgerCount', type: 'get', data: submitData, service: 'mediate' }); |
| | | } |
| | | |
| | | // 区域字典值 |
| | |
| | | data4: { value1: 24, value2: 30, value3: 46 }, |
| | | }); |
| | | |
| | | const [allNum, setAllNum] = useState(0); |
| | | const [allData, setAllData] = useState({}); |
| | | |
| | | // 搜索 or 重置 |
| | | function handleSearch(type, session) { |
| | |
| | | }, |
| | | activeKey |
| | | ); |
| | | ledgerCount( |
| | | { |
| | | [session.key]: session.value[0], |
| | | createStart: $$.dateFormat(session.createStart), |
| | | createEnd: $$.dateFormat(session.createEnd), |
| | | }, |
| | | activeKey |
| | | ); |
| | | } else { |
| | | getListData( |
| | | { |
| | | [normalSearch.key]: normalSearch.value[0], |
| | | createStart: $$.dateFormat(normalSearch.createStart), |
| | | createEnd: $$.dateFormat(normalSearch.createEnd), |
| | | }, |
| | | activeKey |
| | | ); |
| | | ledgerCount( |
| | | { |
| | | [normalSearch.key]: normalSearch.value[0], |
| | | createStart: $$.dateFormat(normalSearch.createStart), |
| | |
| | | $$.searchCascader(values, 'queCode', normalSearch.level, ['queCity', 'queArea', 'queRoad', 'queVillage']); |
| | | $$.searchCascader(values, 'caseType', 1, ['caseType', 'caseType']); |
| | | getListData({ ...values }, session); |
| | | ledgerCount({ ...values }, session); |
| | | return; |
| | | } |
| | | } |
| | |
| | | if (res.type) { |
| | | let nowData = res.data || {}; |
| | | setData({ ...data, ...nowData }); |
| | | // !allData.hasOwnProperty('sysNum') && ledgerCount(submitData, ledgerType); |
| | | // setSearch(submitData); |
| | | } |
| | | } |
| | |
| | | 3: 'queRoad', |
| | | 4: 'queVillage', |
| | | }[KeyIndex]; |
| | | } |
| | | |
| | | async function ledgerCount(submitData, ledgerType) { |
| | | global.setSpinning(true); |
| | | const res = await ledgerCountApi({ ...submitData, ledgerType }); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | setAllData({ ...res.data }); |
| | | } |
| | | } |
| | | |
| | | useEffect(() => { |
| | |
| | | { |
| | | icon: disputeLedger_8, |
| | | title: '全部', |
| | | value: data?.totalNum || 0, |
| | | value: allData?.allNum || 0, |
| | | backgroundColor: '#e8f7ff', |
| | | borderColor: '#3491fa', |
| | | color: '#3491FA', |
| | |
| | | { |
| | | icon: disputeLedger_9, |
| | | title: '本系统', |
| | | value: data?.sysNum || 0, |
| | | value: allData?.sysNum || 0, |
| | | backgroundColor: '#fff7e6', |
| | | borderColor: '#FA8C16', |
| | | color: '#FA8C16', |
| | | per: `${data?.sysRate || 0}%`, |
| | | per: `${allData?.sysRate || 0}%`, |
| | | }, |
| | | { |
| | | icon: disputeLedger_10, |
| | | title: '12345', |
| | | value: data?.ottffNum || 0, |
| | | value: allData?.ottffNum || 0, |
| | | backgroundColor: '#F9F0FF', |
| | | borderColor: '#722ED1', |
| | | color: '#722ED1', |
| | | per: `${data?.ottffRate || 0}%`, |
| | | per: `${allData?.ottffRate || 0}%`, |
| | | }, |
| | | { |
| | | icon: disputeLedger_11, |
| | | title: '非警务纠纷', |
| | | value: data?.fjwjfNum || 0, |
| | | value: allData?.tzfjwjfNum || 0, |
| | | backgroundColor: 'rgba(182,221,241,0.24)', |
| | | borderColor: '#1A6FB8', |
| | | color: '#1A6FB8', |
| | | per: `${data?.fjwjfRate || 0}%`, |
| | | per: `${allData?.tzfjwjfRate || 0}%`, |
| | | }, |
| | | { |
| | | icon: disputeLedger_12, |
| | | title: '人民调解', |
| | | value: data?.rmtjNum || 0, |
| | | value: allData?.rmtjNum || 0, |
| | | backgroundColor: 'rgba(253,205,197,0.24)', |
| | | borderColor: '#F53F3F', |
| | | color: '#F53F3F', |
| | | per: `${data?.rmtjRate || 0}%`, |
| | | per: `${allData?.rmtjRate || 0}%`, |
| | | }, |
| | | { |
| | | icon: disputeLedger_13, |
| | | title: '信访', |
| | | value: data?.xfNum || 0, |
| | | value: allData?.xfNum || 0, |
| | | backgroundColor: 'rgba(175,240,181,0.24)', |
| | | borderColor: '#00B42A', |
| | | color: '#00B42A', |
| | | per: `${data?.xfRate || 0}%`, |
| | | per: `${allData?.xfRate || 0}%`, |
| | | }, |
| | | { |
| | | icon: disputeLedger_14, |
| | | title: '劳动争议', |
| | | value: data?.ldzcNum || 0, |
| | | value: allData?.ldzcNum || 0, |
| | | backgroundColor: 'rgba(181,245,236,0.24)', |
| | | borderColor: '#08979c', |
| | | color: '#08979c', |
| | | per: `${data?.ldzcRate || 0}%`, |
| | | per: `${allData?.ldzcRate || 0}%`, |
| | | }, |
| | | ].map((item, index) => ( |
| | | <div |
| | |
| | | setActiveKey(index); |
| | | setActiveName(item.title); |
| | | if (index === 0) { |
| | | setAllNum(data?.allNum || 0); |
| | | handleSearch('search', ''); |
| | | } else if (index === 1) { |
| | | setAllNum(data?.sysNum || 0); |
| | | handleSearch('search', 1); |
| | | } else if (index === 2) { |
| | | setAllNum(data?.ottffNum || 0); |
| | | handleSearch('search', 2); |
| | | } else if (index === 3) { |
| | | setAllNum(data?.rmtjNum || 0); |
| | | handleSearch('search', 3); |
| | | } else if (index === 4) { |
| | | setAllNum(data?.xfNum || 0); |
| | | handleSearch('search', 4); |
| | | } else if (index === 5) { |
| | | setAllNum(data?.ldzcNum || 0); |
| | | handleSearch('search', 5); |
| | | } else if (index === 6) { |
| | | setAllNum(data?.fjwjfNum || 0); |
| | | handleSearch('search', 6); |
| | | } else { |
| | | handleSearch('search', index); |
| | | } |
| | | }} |
| | | className={`disputeLedger-card ${activeKey === index ? 'disputeLedger-card-active' : ''}`} |
| | |
| | | { value: data.finishNum, name: '化解成功' }, |
| | | { value: data.failNum, name: '化解不成功' }, |
| | | ]} |
| | | allNum={allNum} |
| | | allNum={(() => { |
| | | switch (activeKey) { |
| | | case 0: |
| | | return allData?.allNum || 0; |
| | | case 1: |
| | | return allData?.sysNum || 0; |
| | | case 2: |
| | | return allData?.ottffNum || 0; |
| | | case 3: |
| | | return allData?.tzfjwjfNum || 0; |
| | | case 4: |
| | | return allData?.rmtjNum || 0; |
| | | case 5: |
| | | return allData?.xfNum || 0; |
| | | case 6: |
| | | return allData?.ldzcNum || 0; |
| | | default: |
| | | return allData?.sysNum || 0; |
| | | } |
| | | })()} |
| | | /> |
| | | </div> |
| | | </div> |
New file |
| | |
| | | /* |
| | | * @Company: hugeInfo |
| | | * @Author: lwh |
| | | * @Date: 2024-09-14 15:59:17 |
| | | * @LastEditTime: 2025-06-20 16:38:50 |
| | | * @LastEditors: lwh |
| | | * @Version: 1.0.0 |
| | | * @Description: |
| | | */ |
| | | import React, { useState, useEffect, useRef, useMemo, Children } from 'react'; |
| | | import * as $$ from '../../utils/utility'; |
| | | import { Form, Typography, Row, Col, Space, Divider, Table, Empty, Breadcrumb } from 'antd'; |
| | | import { Alert, Select, Tooltip, Modal, Button } from '@arco-design/web-react'; |
| | | import { IconUndo, IconCaretRight } from '@arco-design/web-react/icon'; |
| | | 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, |
| | | huo, |
| | | workDash_9, |
| | | workDash_10, |
| | | workDash_11, |
| | | workDash_12, |
| | | workDash_13, |
| | | workDash_14, |
| | | workDash_16, |
| | | workDash_17, |
| | | workDash_18, |
| | | workDash_19, |
| | | workDash_20, |
| | | workDash_21, |
| | | workDash_22, |
| | | workDash_23, |
| | | workDash_24, |
| | | workDash_25, |
| | | workDash_26, |
| | | } from '../../assets/images'; |
| | | import NewPage from '../../components/NewPage/index'; |
| | | import * as echarts from 'echarts'; |
| | | import MyTabsNew from '../../components/MyTabsNew'; |
| | | import TableView from '../../components/TableViewCanSort'; |
| | | import NewTableSearch from '../../components/NewTableSearch'; |
| | | import SupervisingViews from '../../views/register/matterDetail/SupervisingViews'; |
| | | import Response from '../../views/register/matterDetail/response'; |
| | | import ResponseDetail from '../../views/register/matterDetail/responseDetail'; |
| | | import SelectObjModal from '@/components/SelectObjModal/newSelectPerson'; |
| | | import { empty } from '@/assets/images'; |
| | | import './index.less'; |
| | | |
| | | const { Link } = Typography; |
| | | const Option = Select.Option; |
| | | // 调度中心列表 |
| | | function getListDataApi(submitData) { |
| | | return $$.ax.request({ url: 'caseInfo/statistics', type: 'get', data: submitData, service: 'mediate' }); |
| | | } |
| | | |
| | | function treeByUserIdApi() { |
| | | return $$.ax.request({ url: 'syRegion/treeByUserId', type: 'get', service: 'sys' }); |
| | | } |
| | | |
| | | function caseSuperviseInfoApi(data) { |
| | | return $$.ax.request({ url: `caseSupervise/getById`, type: 'get', service: 'mediate', data }); |
| | | } |
| | | |
| | | // 解纷态势-纠纷类型子集 |
| | | function statisticsCaseTypeApi(submitData) { |
| | | return $$.ax.request({ url: 'caseInfo/statisticsCaseType', type: 'get', data: submitData, service: 'mediate' }); |
| | | } |
| | | |
| | | // 获取实时动态数据 |
| | | function getCaseInfoDataApi(submitData) { |
| | | return $$.ax.request({ url: 'caseInfo/pageQueryAll', type: 'get', data: submitData, service: 'mediate' }); |
| | | } |
| | | |
| | | // 扬言极端分组统计 |
| | | function getAnalysisApi(submitData) { |
| | | return $$.ax.request({ url: 'analysis/statisticsYYJDQuantity', type: 'get', data: submitData, service: 'mediate' }); |
| | | } |
| | | |
| | | //督办次数 |
| | | function pageCaseSuperviseApi(data) { |
| | | return $$.ax.request({ url: 'caseSupervise/pageCaseSupervise', type: 'get', service: 'mediate', data }); |
| | | } |
| | | |
| | | //风险评估 |
| | | function pageExtremeCaseApi(data) { |
| | | return $$.ax.request({ url: `caseTask/pageExtremeCase`, type: 'get', service: 'mediate', data }); |
| | | } |
| | | |
| | | //督办添加id |
| | | function getNewTimeIdApi(id) { |
| | | return $$.ax.request({ url: `caseUtils/getNewTimeId`, type: 'get', service: 'utils' }); |
| | | } |
| | | |
| | | // 在文件顶部添加新的API请求函数 |
| | | function pageQueryAreaApi(data) { |
| | | return $$.ax.request({ url: 'caseInfo/pageQueryArea', type: 'get', data, service: 'mediate' }); |
| | | } |
| | | |
| | | const WorkDash = () => { |
| | | const navigate = useNavigate(); |
| | | const [form] = Form.useForm(); |
| | | const [modalForm] = Form.useForm(); |
| | | // 搜索 |
| | | const [search, setSearch] = useState({}); |
| | | // 默认查询询条件 |
| | | const [normalSearch, setNormalSearch] = useState({}); |
| | | // 筛选区域的中文 |
| | | const [labels, setLabels] = useState([]); |
| | | const [yYjds, setYYjds] = useState([]); |
| | | |
| | | const [region, setRegion] = useState({}); |
| | | const [temporary, setTemporary] = useState([]); |
| | | // 筛选纠纷类型的中文 |
| | | const [caseTypeNames, setCaseTypeNames] = useState([]); |
| | | const [temporaryCaseType, setTemporaryCaseType] = useState([]); |
| | | // 数据 |
| | | const [data, setData] = useState({}); |
| | | |
| | | const [listData, setListData] = useState({ tableData: [] }); //实时动态数据表 |
| | | const [listDataSearch, setListDataSearch] = useState({ page: 1, size: 10, sortColmn: '1', sortType: '2' }); //实时动态数据表 |
| | | |
| | | // 调解组织select框数据 |
| | | const [adjustOrgData, setAdjustOrgData] = useState([]); |
| | | // tab切换 |
| | | const [tabKey, setTabKey] = useState('1'); |
| | | // 区域字典值 |
| | | const [treeList, setTreeList] = useState([]); |
| | | // 纠纷类型、化解状况、事项等级切换 |
| | | const [rightTag, setRightTag] = useState('1'); |
| | | // 纠纷类型饼图所在层级 |
| | | const [caseTypeLevel, setCaseTypeLevel] = useState(1); |
| | | // 纠纷类型饼图2层,3层数据 |
| | | const [caseTypeList, setCaseTypeList] = useState([]); |
| | | |
| | | // 化解统计切换 |
| | | const [province, setProvince] = useState(''); |
| | | |
| | | // 承办配合部门select框数据 |
| | | const [selectModalVisible, setSelectModalVisible] = useState(false); |
| | | const [selectObjModalData, setSelectObjModalData] = useState({}); |
| | | |
| | | // 扬言极端 |
| | | const [extremeData, setExtremeData] = useState([]); |
| | | const [extremeTotal, setExtremeTotal] = useState(0); |
| | | const [yYjdData, setYYjdData] = useState({ visible: false, data: {} }); |
| | | const [SuperviseListData, setSuperviseListData] = useState([]); |
| | | const [supervisingList, setSupervisingList] = useState(false); |
| | | const [tableData, setTableData] = useState({ list: [] }); //表格数据 |
| | | const [yYJDSortType, setYYJDSortType] = useState('2'); //事件数量默认排序 |
| | | const [pageData, setPageData] = useState({ sortType: 2, sortColmn: 1, page: 1, size: 10 }); |
| | | const [searchSupervise, setSearchSupervise] = useState({ page: '1', size: 20, caseId: '', type: 0 }); |
| | | |
| | | const [response, setResponse] = useState(false); |
| | | const [detail, setDetail] = useState(false); |
| | | const [responseId, setResponseId] = useState(''); |
| | | const [superviseInfo, setSuperviseInfo] = useState({}); |
| | | const [responseDetail, setResponseDetail] = useState({}); |
| | | const [supervisingId, setSupervisingId] = useState(''); |
| | | const [supervising, setSupervising] = useState(false); //督办弹窗控制 |
| | | const [supervisingAddId, setSupervisingAddId] = useState(''); |
| | | |
| | | // 添加modalData和modalVisible的state |
| | | const [modalData, setModalData] = useState({}); |
| | | const [modalSearch, setModalSearch] = useState({ page: 1, size: 10, sortColmn: 1, sortType: 2 }); |
| | | const [modalVisible, setModalVisible] = useState(false); |
| | | |
| | | //排序 |
| | | const handleSortModal = (page, pageSize, sort) => { |
| | | console.log('sort', page, pageSize, sort); |
| | | let sortColmn = sort.column ? sort.column.sortNumber : 1; |
| | | let sortType = sort.order === 'descend' ? 2 : 1; //1:正序;2:倒序 |
| | | handleModal({ |
| | | ...modalSearch, |
| | | ...pageData, |
| | | sortType, |
| | | sortColmn, |
| | | page, |
| | | size: pageSize, |
| | | }); |
| | | }; |
| | | |
| | | // 搜索 or 重置 |
| | | function handleModalSearch(type, session) { |
| | | if (type === 'search') { |
| | | let values = modalForm.getFieldsValue(); |
| | | handleModal({ ...modalSearch, ...values }); |
| | | } |
| | | if (type === 'reset') { |
| | | let paramsObj = { page: 1, size: 10, sortColmn: 1, sortType: 2 }; |
| | | handleModal({ |
| | | ...search, |
| | | ...paramsObj, |
| | | }); |
| | | return; |
| | | } |
| | | } |
| | | |
| | | async function handleModal(params) { |
| | | global.setSpinning(true); |
| | | const res = await pageQueryAreaApi({ ...params }); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | // 设置弹窗数据 |
| | | setModalData({ |
| | | name: params.areaName, |
| | | tableData: res.data?.content || [], // 接口返回的列表数据 |
| | | total: res.data?.totalElements || 0, |
| | | }); |
| | | setModalSearch({ |
| | | ...params, |
| | | }); |
| | | } |
| | | } |
| | | |
| | | // 选择部门弹窗 |
| | | function onSelectModalChange(key) { |
| | | if (key === 'mediateUnitId') { |
| | | setSelectObjModalData({ ...selectObjModalData, key, title: '承办部门' }); |
| | | } else { |
| | | setSelectObjModalData({ ...selectObjModalData, key, title: '配合部门' }); |
| | | } |
| | | setSelectModalVisible(true); |
| | | } |
| | | |
| | | // 返回区域查询所需要的字段 |
| | | function queCodeSearch(obj, firstLevel, queCode) { |
| | | // 第一层级 queCity 第二层级 queArea 第三层级 queRoad 第四层级 queVillage |
| | | // firstLevel 用户的最高权限属于哪一级 1:市,2:区,3:街道,4:村居 |
| | | // values 搜索区域的值 |
| | | let queCodeLength = queCode.length; |
| | | let keyList = |
| | | firstLevel === '1' |
| | | ? ['queCity', 'queArea', 'queRoad', 'queVillage'] |
| | | : firstLevel === '2' |
| | | ? ['queArea', 'queRoad', 'queVillage'] |
| | | : firstLevel === '3' |
| | | ? ['queRoad', 'queVillage'] |
| | | : ['queVillage']; |
| | | let key = keyList[queCodeLength - 1]; |
| | | obj[key] = queCode[queCodeLength - 1]; |
| | | } |
| | | |
| | | // 搜索 or 重置 |
| | | function handleSearch(type, session) { |
| | | if (type === 'recovery') { |
| | | // 案件详情返回时恢复跳转前查询 |
| | | let obj = Object.assign({}, data.search); |
| | | if (obj.acceptStart) { |
| | | obj.acceptTime = [$$.myMoment(obj.acceptStart), $$.myMoment(obj.acceptEnd)]; |
| | | } |
| | | if (obj.createStart) { |
| | | obj.createTime = [$$.myMoment(obj.createStart), $$.myMoment(obj.createEnd)]; |
| | | } |
| | | form.setFieldsValue(obj); |
| | | getListData(data.search, listDataSearch); |
| | | return; |
| | | } |
| | | if (type === 'reset') { |
| | | setListDataSearch({ ...listDataSearch, page: 1 }); |
| | | getListData( |
| | | { [session.key]: session.value[0], createStart: $$.dateFormat(session.createStart), createEnd: $$.dateFormat(session.createEnd) }, |
| | | { ...listDataSearch, page: 1 } |
| | | ); |
| | | return; |
| | | } |
| | | if (type === 'search') { |
| | | let values = form.getFieldsValue(); |
| | | $$.changeTimNeweFormat(values, 'createTime', 'createStart', 'createEnd'); |
| | | $$.changeTimNeweFormat(values, 'closeTime', 'closeStart', 'closeEnd'); |
| | | |
| | | $$.searchCascader(values, 'queCode', normalSearch.level, ['queCity', 'queArea', 'queRoad', 'queVillage']); |
| | | $$.searchCascader(values, 'caseType', 1, ['caseType', 'caseType']); |
| | | if (values.mediateUnitId) { |
| | | values.mediateUnitId = selectObjModalData?.mediateUnitId?.key; |
| | | } else { |
| | | delete values.mediateUnitId; |
| | | delete search.mediateUnitId; |
| | | } |
| | | if (values.assistUnitId) { |
| | | values.assistUnitId = selectObjModalData?.assistUnitId?.key; |
| | | } else { |
| | | delete values.assistUnitId; |
| | | delete search.assistUnitId; |
| | | } |
| | | if (temporary?.length > 0) { |
| | | setLabels(temporary); |
| | | setTemporary([]); |
| | | } |
| | | if (temporaryCaseType?.length > 0) { |
| | | setCaseTypeNames(temporaryCaseType); |
| | | setTemporaryCaseType([]); |
| | | } |
| | | getListData({ ...values, canal: search.canal || '' }, listDataSearch); |
| | | return; |
| | | } |
| | | if (type === 'changeTabs' || type === 'changePage') { |
| | | getListData({ ...search }, listDataSearch); |
| | | } |
| | | } |
| | | |
| | | // 表头 |
| | | const columns = () => { |
| | | const columnsData = [ |
| | | { |
| | | title: '登记时间', |
| | | width: 120, |
| | | dataIndex: 'createTime', |
| | | render: (text, record, index) => { |
| | | return ( |
| | | <div style={{ display: 'flex', gap: '8px' }}> |
| | | <div>{$$.dateFormat(text)}</div> |
| | | {record?.isRisk === '1' && <div className="public-tag public-tag-tagRed">扬言</div>} |
| | | </div> |
| | | ); |
| | | }, |
| | | }, |
| | | { title: '事项来源', width: 100, dataIndex: 'canalName' }, |
| | | { title: '事项状态', width: 100, dataIndex: 'statusName' }, |
| | | { title: '事项等级', width: 80, dataIndex: 'caseLevel' }, |
| | | { title: '事项类型', width: 150, dataIndex: 'caseTypeName' }, |
| | | { title: '问题属地', width: 170, dataIndex: 'areaName' }, |
| | | { title: '登记机构', width: 130, dataIndex: 'inputUnitName' }, |
| | | { title: '承办部门', width: 100, dataIndex: 'mediateUnitName' }, |
| | | { title: '办结时间', width: 100, dataIndex: 'closeTime', render: (text) => <span>{$$.dateFormat(text)}</span> }, |
| | | { |
| | | title: '化解结果', |
| | | width: 80, |
| | | 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: '操作', |
| | | dataIndex: 'action', |
| | | width: 50, |
| | | render: (_, record) => { |
| | | return <Link onClick={() => handleJump(record)}>详情</Link>; |
| | | }, |
| | | }, |
| | | ]; |
| | | return columnsData; |
| | | }; |
| | | |
| | | // 跳转详情页 |
| | | function handleJump(record) { |
| | | // 仅在gz/index.html路径下生效 |
| | | const newWindow = window.open(`${$$.windowUrl}/windowDetail?caseTaskId=${record.caseTaskId}&caseId=${record.id}`); |
| | | // const newWindow = window.open(`#/mediate/visit/fileMessage?caseTaskId=${record.caseTaskId}&caseId=${record.id}`, "_blank", "noreferrer"); |
| | | // 在新窗口的上下文中注入脚本,用于读取 sessionStorage 数据 |
| | | // navigate(`/mediate/visit/fileMessage?caseTaskId=${record.caseTaskId}&ss=${record.id}`) |
| | | } |
| | | |
| | | // 切换tabs页 |
| | | function tabsOnchange(activeKey) { |
| | | console.log(activeKey); |
| | | setTabKey(activeKey); |
| | | if (activeKey !== tabKey) { |
| | | if (activeKey === '1') { |
| | | delete search.canal; |
| | | getListData({ ...search }, listDataSearch); |
| | | } else if (activeKey === '2') { |
| | | getListData({ ...search, canal: '22_00001-1' }, listDataSearch); |
| | | } else if (activeKey === '3') { |
| | | getListData({ ...search, canal: '22_00001-2' }, listDataSearch); |
| | | } else if (activeKey === '4') { |
| | | getListData({ ...search, canal: '22_00001-3' }, listDataSearch); |
| | | } else if (activeKey === '5') { |
| | | getListData({ ...search, canal: '22_00001-4' }, listDataSearch); |
| | | } else if (activeKey === '6') { |
| | | getListData({ ...search, canal: '22_00001-3', canalSecond: '22_00003-8' }, listDataSearch); |
| | | } else if (activeKey === '7') { |
| | | getListData({ ...search, canal: '22_00001-3', canalSecond: '22_00003-2' }, listDataSearch); |
| | | } else if (activeKey === '8') { |
| | | getListData({ ...search, canal: '22_00001-3', canalSecond: '22_00003-1' }, listDataSearch); |
| | | } else if (activeKey === '9') { |
| | | getListData({ ...search, canal: '22_00001-3', canalSecond: '22_00003-7' }, listDataSearch); |
| | | } |
| | | } |
| | | } |
| | | |
| | | //督办次数 |
| | | const handleSupervising = (caseId) => { |
| | | // setSupervisingId(caseId) |
| | | pageCaseSupervise(caseId); |
| | | setSupervisingList(!supervisingList); |
| | | }; |
| | | |
| | | //督办次数列表 |
| | | const pageCaseSupervise = async (caseId) => { |
| | | const res = await pageCaseSuperviseApi({ ...searchSupervise, caseId: caseId }); |
| | | if (res.type) { |
| | | let data = res.data.content; |
| | | setSuperviseListData(data); |
| | | } |
| | | }; |
| | | |
| | | // 用于扬言极端功能选择下一级后,在查询条件中显示 |
| | | function getParentCodes(treeList, code) { |
| | | let parentCodes = []; |
| | | function findParent(node, targetCode) { |
| | | if (node.value === targetCode) { |
| | | return true; |
| | | } |
| | | if (node.children && node.children.length > 0) { |
| | | for (let child of node.children) { |
| | | if (findParent(child, targetCode)) { |
| | | parentCodes.unshift(node.value); |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | for (let node of treeList) { |
| | | if (findParent(node, code)) { |
| | | break; |
| | | } |
| | | } |
| | | return [...parentCodes, code]; |
| | | } |
| | | |
| | | //督办次数 |
| | | const supervisingColumns = [ |
| | | { |
| | | title: '督办时间', |
| | | dataIndex: 'supTime', |
| | | key: 'supTime', |
| | | width: 50, |
| | | }, |
| | | { |
| | | title: '回复时限', |
| | | dataIndex: 'timeLimit', |
| | | key: 'timeLimit', |
| | | width: 80, |
| | | render: (text, record) => { |
| | | return record.supStatus === 1 ? '-' : $$.getDiffTime(record.timeLimit); |
| | | }, |
| | | }, |
| | | { |
| | | title: '督办意见', |
| | | dataIndex: 'supContent', |
| | | key: 'supContent', |
| | | width: 100, |
| | | }, |
| | | { |
| | | title: '事项等级', |
| | | dataIndex: 'caseGrade', |
| | | key: 'caseGrade', |
| | | width: 50, |
| | | render: (text) => <span>{text === 3 ? '三级' : text === 2 ? '二级' : text === 1 ? '一级' : '-'}</span>, |
| | | }, |
| | | { |
| | | title: '回复状态', |
| | | dataIndex: 'supStatus', |
| | | key: 'supStatus', |
| | | width: 50, |
| | | render: (text, record) => ( |
| | | <div style={{ color: record.supStatus === 0 ? '#F53F3F' : '#00B42A' }}>{record.supStatus === 0 ? '未回复' : '已回复'}</div> |
| | | ), |
| | | }, |
| | | { |
| | | title: '操作', |
| | | dataIndex: 'defendants', |
| | | key: 'defendants', |
| | | width: 50, |
| | | fixed: 'right', |
| | | render: (text, record) => ( |
| | | <Space> |
| | | <div onClick={() => handleResponse(record.id, 'responseDetail')} style={{ cursor: 'pointer', color: '#1A6FB8' }}> |
| | | 详情 |
| | | </div> |
| | | {record.supStatus == 0 && ( |
| | | <div onClick={() => handleResponse(record.id, 'response')} style={{ cursor: 'pointer', color: '#1A6FB8' }}> |
| | | 回复 |
| | | </div> |
| | | )} |
| | | </Space> |
| | | ), |
| | | }, |
| | | ]; |
| | | |
| | | const fxColumns = [ |
| | | { |
| | | title: '', |
| | | dataIndex: 'index', |
| | | key: 'index', |
| | | width: 75, |
| | | render: (text, record, index) => { |
| | | return <div className="public-tag public-tag-tagRed">扬言</div>; |
| | | }, |
| | | }, |
| | | { |
| | | title: '登记时间', |
| | | dataIndex: 'turnaroundTime', |
| | | key: 'turnaroundTime', |
| | | width: 150, |
| | | defaultSortOrder: 'descend', |
| | | sorter: true, |
| | | sortNumber: 1, //设置这个传给后端的 |
| | | render: (text) => { |
| | | return <span>{$$.myTimeFormat(text, 'YYYY-M-D')}</span>; |
| | | }, |
| | | }, |
| | | { |
| | | title: '问题属地', |
| | | dataIndex: 'queAddress', |
| | | key: 'queAddress', |
| | | width: 180, |
| | | }, |
| | | { |
| | | title: '事项来源', |
| | | dataIndex: 'caseSource', |
| | | key: 'caseSource', |
| | | width: 120, |
| | | }, |
| | | { |
| | | title: '事项等级', |
| | | dataIndex: 'caseGrade', |
| | | key: 'caseGrade', |
| | | width: 100, |
| | | render: (text) => <span>{text === 3 ? '三级' : text === 2 ? '二级' : text === 1 ? '一级' : '-'}</span>, |
| | | }, |
| | | { |
| | | title: '涉及人数', |
| | | dataIndex: 'peopleNum', |
| | | key: 'peopleNum', |
| | | width: 100, |
| | | }, |
| | | { |
| | | title: '纠纷类型', |
| | | dataIndex: 'caseType', |
| | | key: 'caseType', |
| | | width: 150, |
| | | render: (text) => ( |
| | | <span> |
| | | {' '} |
| | | <Tooltip content={text}>{$$.ellipsis(text, 7)}</Tooltip> |
| | | </span> |
| | | ), |
| | | }, |
| | | { |
| | | title: '申请方', |
| | | dataIndex: 'plaintiffs', |
| | | key: 'plaintiffs', |
| | | width: 180, |
| | | }, |
| | | { |
| | | title: '被申请方', |
| | | dataIndex: 'defendants', |
| | | key: 'defendants', |
| | | width: 120, |
| | | render: (text) => ( |
| | | <span> |
| | | {' '} |
| | | <Tooltip content={text}>{$$.ellipsis(text, 7)}</Tooltip> |
| | | </span> |
| | | ), |
| | | }, |
| | | { |
| | | title: '事项状态', |
| | | dataIndex: 'statusName', |
| | | key: 'statusName', |
| | | sorter: true, |
| | | sortNumber: 2, //设置这个传给后端的 |
| | | width: 120, |
| | | }, |
| | | { |
| | | title: '承办部门', |
| | | dataIndex: 'organizingUnit', |
| | | key: 'organizingUnit', |
| | | width: 120, |
| | | render: (text) => ( |
| | | <span> |
| | | {' '} |
| | | <Tooltip content={text}>{$$.ellipsis(text, 7)}</Tooltip> |
| | | </span> |
| | | ), |
| | | }, |
| | | { |
| | | title: '经办人', |
| | | dataIndex: 'mediator', |
| | | key: 'mediator', |
| | | width: 180, |
| | | }, |
| | | { |
| | | title: '化解结果', |
| | | dataIndex: 'mediResultName', |
| | | key: 'mediResultName', |
| | | width: 100, |
| | | render: (text, record, index) => <div style={{ color: text == '化解成功' ? '#00b42a' : '#f53f3f' }}>{text}</div>, |
| | | }, |
| | | { |
| | | title: '督办次数', |
| | | dataIndex: 'superviseCount', |
| | | key: 'superviseCount', |
| | | width: 100, |
| | | render: (text, record, index) => ( |
| | | <div |
| | | onClick={() => { |
| | | text !== 0 && handleSupervising(record.caseId); |
| | | }} |
| | | style={{ cursor: 'pointer', color: text !== 0 ? '#1A6FB8' : '#000' }} |
| | | > |
| | | {text} |
| | | {/* {text !== 0 && <span className="timeTip-red-tipsRed" style={{ marginLeft: '8px' }}>督</span>} */} |
| | | </div> |
| | | ), |
| | | sorter: true, |
| | | sortNumber: 3, |
| | | }, |
| | | { |
| | | title: '操作', |
| | | dataIndex: 'action', |
| | | width: 100, |
| | | render: (_, record) => { |
| | | return ( |
| | | <Space> |
| | | <span |
| | | onClick={() => window.open(`${$$.windowUrl}/windowDetail?caseTaskId=${record.caseTaskId}&caseId=${record.caseId}`)} |
| | | className="public-color public-a" |
| | | > |
| | | 详情 |
| | | </span> |
| | | {record.statusName === '待分派' && ( |
| | | <div onClick={() => handleSupervisingAdd(record.caseId, 'response')} style={{ cursor: 'pointer', color: '#1A6FB8' }}> |
| | | 督办 |
| | | </div> |
| | | )} |
| | | {record.statusName === '待签收' && ( |
| | | <div onClick={() => handleSupervisingAdd(record.caseId, 'response')} style={{ cursor: 'pointer', color: '#1A6FB8' }}> |
| | | 督办 |
| | | </div> |
| | | )} |
| | | {record.statusName === '待受理' && ( |
| | | <div onClick={() => handleSupervisingAdd(record.caseId, 'response')} style={{ cursor: 'pointer', color: '#1A6FB8' }}> |
| | | 督办 |
| | | </div> |
| | | )} |
| | | {record.statusName === '化解中' && ( |
| | | <div onClick={() => handleSupervisingAdd(record.caseId, 'response')} style={{ cursor: 'pointer', color: '#1A6FB8' }}> |
| | | 督办 |
| | | </div> |
| | | )} |
| | | {record.statusName === '结案审核' && ( |
| | | <div onClick={() => handleSupervisingAdd(record.caseId, 'response')} style={{ cursor: 'pointer', color: '#1A6FB8' }}> |
| | | 督办 |
| | | </div> |
| | | )} |
| | | </Space> |
| | | ); |
| | | }, |
| | | }, |
| | | ]; |
| | | |
| | | //督办回复 |
| | | const handleResponse = (id, type) => { |
| | | if (type === 'response') { |
| | | setResponse(!response); |
| | | setResponseId(id); |
| | | caseSuperviseInfo(id, 'response'); |
| | | } |
| | | if (type === 'responseDetail') { |
| | | setDetail(!detail); |
| | | caseSuperviseInfo(id, 'responseDetail'); |
| | | } |
| | | }; |
| | | |
| | | //回复 |
| | | const caseSuperviseInfo = async (id, type) => { |
| | | const res = await caseSuperviseInfoApi({ id: id }); |
| | | if (type === 'response') { |
| | | if (res.type) { |
| | | setSuperviseInfo(res.data); |
| | | } |
| | | } |
| | | if (type === 'responseDetail') { |
| | | if (res.type) { |
| | | setResponseDetail(res.data); |
| | | } |
| | | } |
| | | }; |
| | | |
| | | //添加督办 |
| | | const handleSupervisingAdd = (caseId) => { |
| | | setSupervising(!supervising); |
| | | setSupervisingAddId(caseId); |
| | | getNewTimeId(); |
| | | }; |
| | | |
| | | //获取添加督办id |
| | | const getNewTimeId = async () => { |
| | | const res = await getNewTimeIdApi(); |
| | | if (res.type) { |
| | | setSupervisingId(res.data); |
| | | } |
| | | }; |
| | | |
| | | //排序 |
| | | const handleSort = (page, pageSize, sort) => { |
| | | let sortColmn = sort.column ? sort.column.sortNumber : 1; |
| | | let sortType = sort.order == 'descend' ? 2 : 1; //1:正序;2:倒序 |
| | | let newData = region ? { [region.key]: region.value } : {}; |
| | | pageExtremeCase( |
| | | { |
| | | ...search, |
| | | ...pageData, |
| | | ...newData, |
| | | sortType, |
| | | sortColmn, |
| | | page, |
| | | size: pageSize, |
| | | }, |
| | | true |
| | | ); |
| | | }; |
| | | |
| | | // 扬言极端列表 |
| | | async function pageExtremeCase(submitData, visible) { |
| | | global.setSpinning(true); |
| | | const res = await pageExtremeCaseApi({ ...submitData }); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | let data = res.data.content || []; |
| | | let total = res?.data?.totalElements || 0; |
| | | setTableData({ list: data, total }); |
| | | setYYjdData({ visible: visible || false }); |
| | | } |
| | | } |
| | | |
| | | // 获取区域字典值 |
| | | async function treeByUserId() { |
| | | global.setSpinning(true); |
| | | const res = await treeByUserIdApi(); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | let list = res.data || []; |
| | | setTreeList(list); |
| | | let values = form.getFieldsValue(); |
| | | let key = |
| | | list[0].level === '1' |
| | | ? 'queCity' |
| | | : list[0].level === '2' |
| | | ? 'queArea' |
| | | : list[0].level === '3' |
| | | ? 'queRoad' |
| | | : list[0].level === '4' |
| | | ? 'queVillage' |
| | | : 'queRoad'; |
| | | values.queCode = [list[0].value]; |
| | | values.createTime = [ |
| | | $$.myMoment().subtract(0, 'months').startOf('month').format('YYYY-MM-DD'), |
| | | $$.myMoment().subtract(0, 'months').endOf('month').format('YYYY-MM-DD'), |
| | | ]; |
| | | form.setFieldsValue(values); |
| | | setLabels([list[0].label]); |
| | | setYYjds([{ label: list[0].label, value: list[0].value, key }]); |
| | | setNormalSearch({ |
| | | key, |
| | | value: [list[0].value], |
| | | level: list[0].level, |
| | | createStart: $$.myMoment().subtract(0, 'months').startOf('month').format('YYYY-MM-DD'), |
| | | createEnd: $$.myMoment().subtract(0, 'months').endOf('month').format('YYYY-MM-DD'), |
| | | }); |
| | | handleSearch('reset', { |
| | | key, |
| | | value: [list[0].value], |
| | | createStart: $$.myMoment().subtract(0, 'months').startOf('month').format('YYYY-MM-DD'), |
| | | createEnd: $$.myMoment().subtract(0, 'months').endOf('month').format('YYYY-MM-DD'), |
| | | }); |
| | | } |
| | | } |
| | | |
| | | function tabKeyTitles(type) { |
| | | switch (type) { |
| | | case '2': |
| | | return '大厅来访'; |
| | | case '3': |
| | | return '线上来访'; |
| | | case '4': |
| | | return '自行排查'; |
| | | case '5': |
| | | return '协同推送'; |
| | | case '6': |
| | | return '部门排查'; |
| | | case '7': |
| | | return '网格排查'; |
| | | case '8': |
| | | return '非警务纠纷'; |
| | | case '9': |
| | | return '专项纠纷'; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | |
| | | const onChange = (value, selectedOptions) => { |
| | | const labels = selectedOptions.map((option) => option.label); |
| | | setTemporary(labels); |
| | | setYYjds( |
| | | selectedOptions.map((option) => ({ |
| | | label: option.label, |
| | | value: option.value, |
| | | key: |
| | | option.level === '1' |
| | | ? 'queCity' |
| | | : option.level === '2' |
| | | ? 'queArea' |
| | | : option.level === '3' |
| | | ? 'queRoad' |
| | | : option.level === '4' |
| | | ? 'queVillage' |
| | | : 'queRoad', |
| | | })) |
| | | ); |
| | | }; |
| | | |
| | | const onLastChange = (value, selectedOptions) => { |
| | | const Names = selectedOptions.map((option) => option.label); |
| | | setTemporaryCaseType(Names); |
| | | }; |
| | | |
| | | // 饼图点击进入下一层级 |
| | | async function onMyLTopChartPie(params) { |
| | | console.log('params', params); |
| | | let caseTypeFirst = params?.data?.caseType; |
| | | global.setSpinning(true); |
| | | const res = await statisticsCaseTypeApi({ ...search, caseTypeFirst }); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | setCaseTypeList(res.data || []); |
| | | setCaseTypeLevel(caseTypeLevel + 1); |
| | | } |
| | | } |
| | | |
| | | async function onClickProvince(value) { |
| | | if (province !== value) { |
| | | setProvince(value); |
| | | } |
| | | } |
| | | |
| | | // 获取数据 |
| | | async function getListData(submitData, tableSearch) { |
| | | console.log('submitData', submitData); |
| | | global.setSpinning(true); |
| | | const res = await getListDataApi({ ...submitData }); |
| | | const res1 = await getCaseInfoDataApi({ ...submitData, ...tableSearch }); //获取实时动态数据 |
| | | const res2 = await getAnalysisApi({ ...submitData, sortType: yYJDSortType }); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | setData(res.data || {}); |
| | | setSearch(submitData); |
| | | } |
| | | if (res1.type) { |
| | | setListData({ |
| | | total: res1?.data?.totalElements || 0, |
| | | tableData: res1?.data?.content || [], |
| | | }); |
| | | } |
| | | if (res2.type) { |
| | | let data = res2.data || []; |
| | | let total = data?.map((i) => i.total)?.reduce((accumulator, currentValue) => accumulator + currentValue, 0); |
| | | console.log('total', total); |
| | | setExtremeData(data); |
| | | setExtremeTotal(total); |
| | | } |
| | | } |
| | | |
| | | // 页码修改 |
| | | function handleChangePage(page, pageSize) { |
| | | let paramsObj = Object.assign({ ...search, ...listDataSearch }, { page, size: pageSize }); |
| | | getCaseInfoData({ ...paramsObj }); |
| | | } |
| | | |
| | | // 获取数据 |
| | | async function getCaseInfoData(submitData) { |
| | | global.setSpinning(true); |
| | | const res = await getCaseInfoDataApi({ ...submitData }); |
| | | global.setSpinning(false); |
| | | setListDataSearch({ ...listDataSearch, page: submitData.page, size: submitData.size }); |
| | | if (res.type) { |
| | | setListData({ |
| | | total: res?.data?.totalElements || 0, |
| | | tableData: res?.data?.content || [], |
| | | }); |
| | | } |
| | | } |
| | | |
| | | async function onModalChange(key, value) { |
| | | let paramsObj = Object.assign({ ...search, ...listDataSearch, [key]: value }, { page: 1, size: 10 }); |
| | | global.setSpinning(true); |
| | | const res = await getCaseInfoDataApi({ ...paramsObj }); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | setModalVisible(true); |
| | | setModalData({ name: '事项详情', total: res?.data?.totalElements || 0, tableData: res?.data?.content || [] }); |
| | | } |
| | | } |
| | | |
| | | // 添加onModalClick处理函数 |
| | | const onModalClick = async (params) => { |
| | | console.log('params', params); |
| | | let newSearch = { |
| | | ...search, |
| | | ...modalSearch, |
| | | queArea: params.queArea, |
| | | queCity: params.queCity, |
| | | queRoad: params.queRoad, |
| | | queVillage: params.queVillage, |
| | | areaType: params.areaType, |
| | | unitGrades: params.unitGrades, |
| | | // 1-化解中,2-已结案,3-不予受理 |
| | | resolveType: province, |
| | | }; |
| | | try { |
| | | const res = await pageQueryAreaApi({ |
| | | ...newSearch, // 传入当前的查询条件' |
| | | }); |
| | | |
| | | if (res.type) { |
| | | // 设置弹窗数据 |
| | | setModalData({ |
| | | name: params.areaName, |
| | | tableData: res.data?.content || [], // 接口返回的列表数据 |
| | | total: res.data?.totalElements || 0, |
| | | }); |
| | | setModalSearch({ |
| | | ...newSearch, |
| | | }); |
| | | // 显示弹窗 |
| | | setModalVisible(true); |
| | | } |
| | | } catch (err) { |
| | | console.error('获取区域详情失败:', err); |
| | | } |
| | | }; |
| | | |
| | | // 导出数据 |
| | | function downloadXls() { |
| | | const keysToFilter = ['page', 'size']; |
| | | const filteredObj = Object.fromEntries(Object.entries(search).filter(([key, value]) => value !== undefined && !keysToFilter.includes(key))); |
| | | |
| | | window.open(`${$$.appUrl.baseUrl}/${$$.appUrl.mediate}/api/web/caseInfo/exportQueryAll?${$$.useQueryParams(filteredObj)}`); |
| | | } |
| | | |
| | | // 导出镇街统计 |
| | | function downloadAreaXls() { |
| | | const keysToFilter = ['page', 'size']; |
| | | const filteredObj = Object.fromEntries(Object.entries(search).filter(([key, value]) => value !== undefined && !keysToFilter.includes(key))); |
| | | |
| | | window.open(`${$$.appUrl.baseUrl}/${$$.appUrl.mediate}/api/web/caseInfo/exportStatisticsArea?${$$.useQueryParams(filteredObj)}`); |
| | | } |
| | | async function getAnalysis(submitData) { |
| | | global.setSpinning(true); |
| | | const res = await getAnalysisApi({ ...submitData }); |
| | | global.setSpinning(false); |
| | | if (res.type) { |
| | | let data = res.data || []; |
| | | let total = data?.map((i) => i.total)?.reduce((accumulator, currentValue) => accumulator + currentValue, 0); |
| | | setExtremeData(data); |
| | | setExtremeTotal(total); |
| | | } |
| | | } |
| | | |
| | | // 初始化 |
| | | useEffect(() => { |
| | | treeByUserId(); |
| | | }, []); |
| | | |
| | | 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: 'Cascader', |
| | | name: 'queCode', |
| | | label: '区域', |
| | | placeholder: '请选择', |
| | | onChange, |
| | | changeSelect: true, |
| | | allowClear: false, |
| | | treedata: treeList || [], |
| | | }, |
| | | { type: 'RangePicker', name: 'createTime', label: '登记时间', shortcutsPlacementLeft: true, shortcuts: $$.shortcutsList(), span: 8 }, |
| | | { type: 'RangePicker', name: 'closeTime', label: '办结时间', shortcutsPlacementLeft: true, shortcuts: $$.shortcutsList(), span: 8 }, |
| | | { |
| | | type: 'Cascader', |
| | | name: 'caseType', |
| | | label: '纠纷类型', |
| | | changeSelect: true, |
| | | placeholder: '请选择', |
| | | onChange: onLastChange, |
| | | span: 8, |
| | | treedata: $$.caseTypeSelect.caseTypeSelect, |
| | | }, |
| | | { |
| | | type: 'searchButton', |
| | | name: 'mediateUnitId', |
| | | maxLength: 0, |
| | | onClear: () => { |
| | | setSelectObjModalData({ ...selectObjModalData, mediateUnitId: {} }); |
| | | form.setFieldValue('mediateUnitId', ''); |
| | | }, |
| | | onSearch: () => { |
| | | onSelectModalChange('mediateUnitId'); |
| | | }, |
| | | searchButton: '选择', |
| | | placeholder: '请选择', |
| | | label: '承办部门', |
| | | }, |
| | | { |
| | | type: 'searchButton', |
| | | name: 'assistUnitId', |
| | | maxLength: 0, |
| | | onClear: () => { |
| | | setSelectObjModalData({ ...selectObjModalData, assistUnitId: {} }); |
| | | form.setFieldValue('assistUnitId', ''); |
| | | }, |
| | | onSearch: () => { |
| | | onSelectModalChange('assistUnitId'); |
| | | }, |
| | | searchButton: '选择', |
| | | placeholder: '请选择', |
| | | label: '配合部门', |
| | | }, |
| | | { type: 'Select', name: 'systemSource', label: '系统来源', placeholder: '请选择', span: 8, selectdata: $$.options.systemSource }, |
| | | ]} |
| | | handleReset={() => { |
| | | form.resetFields(); |
| | | form.setFieldsValue({ |
| | | queCode: [normalSearch.value[0]], |
| | | createTime: [$$.dateFormat(normalSearch.createStart), $$.dateFormat(normalSearch.createEnd)], |
| | | }); |
| | | setLabels([treeList[0].label]); |
| | | setYYjds([{ label: treeList[0].label, value: treeList[0].value }]); |
| | | handleSearch('reset', normalSearch); |
| | | }} |
| | | handleSearch={() => handleSearch('search')} |
| | | /> |
| | | </div> |
| | | {/* <div style={{ marginTop: '12px' }}> |
| | | <Alert |
| | | type='success' |
| | | content={<span>已为您生成<span className='public-color'>{labels?.filter(i => i !== '本级').join('/')}</span><span>{search.createStart && '在'}</span> |
| | | {search.createStart && <span className='public-color'>登记时间({$$.myTimeFormat(search.createStart, 'YYYY.M.D')}-{$$.myTimeFormat(search.createEnd, 'YYYY.M.D')})</span>} |
| | | {search.closeStart && <span className='public-color'>{search.createStart && '、'}办结时间({$$.myTimeFormat(search.createStart, 'YYYY.M.D')}-{$$.myTimeFormat(search.createEnd, 'YYYY.M.D')})</span>} |
| | | {search.caseType && <span className='public-color'>{(search.createStart || search.closeStart) && '、'}纠纷类型({caseTypeNames.join('/')})</span>} |
| | | 的解纷态势数据</span>} |
| | | /> |
| | | </div> */} |
| | | {tabKey !== '1' && ( |
| | | <div style={{ marginTop: '16px', display: 'flex', gap: '8px', alignItems: 'center' }}> |
| | | <Button |
| | | className="source-button" |
| | | onClick={() => { |
| | | tabsOnchange('1'); |
| | | }} |
| | | icon={<img className="source-icon" src={workDash_19} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 全部来源 |
| | | </Button> |
| | | <IconCaretRight /> |
| | | {tabKey === '2' && ( |
| | | <Button |
| | | className="source-button source-button-color" |
| | | icon={<img className="source-icon" src={workDash_20} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 大厅来访 |
| | | </Button> |
| | | )} |
| | | {tabKey === '3' && ( |
| | | <Button |
| | | className="source-button source-button-color" |
| | | icon={<img className="source-icon" src={workDash_21} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 线上来访 |
| | | </Button> |
| | | )} |
| | | {tabKey === '4' && ( |
| | | <Button |
| | | className="source-button source-button-color" |
| | | icon={<img className="source-icon" src={workDash_22} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 自行排查 |
| | | </Button> |
| | | )} |
| | | {tabKey === '5' && ( |
| | | <Button |
| | | className="source-button source-button-color" |
| | | icon={<img className="source-icon" src={workDash_23} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 协同推送 |
| | | </Button> |
| | | )} |
| | | {tabKey === '6' && ( |
| | | <Space> |
| | | <Button |
| | | onClick={() => { |
| | | tabsOnchange('4'); |
| | | }} |
| | | className="source-button" |
| | | icon={<img className="source-icon" src={workDash_22} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 自行排查 |
| | | </Button> |
| | | <IconCaretRight /> |
| | | <Button |
| | | className="source-button source-button-color" |
| | | icon={<img className="source-icon" src={workDash_23} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 部门排查 |
| | | </Button> |
| | | </Space> |
| | | )} |
| | | {tabKey === '7' && ( |
| | | <Space> |
| | | <Button |
| | | onClick={() => { |
| | | tabsOnchange('4'); |
| | | }} |
| | | className="source-button" |
| | | icon={<img className="source-icon" src={workDash_22} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 自行排查 |
| | | </Button> |
| | | <IconCaretRight /> |
| | | <Button |
| | | className="source-button source-button-color" |
| | | icon={<img className="source-icon" src={workDash_23} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 网格排查 |
| | | </Button> |
| | | </Space> |
| | | )} |
| | | {tabKey === '8' && ( |
| | | <Space> |
| | | <Button |
| | | onClick={() => { |
| | | tabsOnchange('5'); |
| | | }} |
| | | className="source-button" |
| | | icon={<img className="source-icon" src={workDash_23} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 协同推送 |
| | | </Button> |
| | | <IconCaretRight /> |
| | | <Button |
| | | className="source-button source-button-color" |
| | | icon={<img className="source-icon" src={workDash_23} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 非警务纠纷 |
| | | </Button> |
| | | </Space> |
| | | )} |
| | | {tabKey === '9' && ( |
| | | <Space> |
| | | <Button |
| | | onClick={() => { |
| | | tabsOnchange('5'); |
| | | }} |
| | | className="source-button" |
| | | icon={<img className="source-icon" src={workDash_23} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 协同推送 |
| | | </Button> |
| | | <IconCaretRight /> |
| | | <Button |
| | | className="source-button source-button-color" |
| | | icon={<img className="source-icon" src={workDash_23} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 专项纠纷 |
| | | </Button> |
| | | </Space> |
| | | )} |
| | | </div> |
| | | )} |
| | | |
| | | {/* <MyTabsNew |
| | | tabs={[ |
| | | { |
| | | key: '1', |
| | | icon: <img className="workDash-tabs" src={workDash_13}></img>, |
| | | label: ( |
| | | <> |
| | | <div style={{ height: '24px' }}>全部</div> |
| | | </> |
| | | ), |
| | | }, |
| | | { label: <div style={{ height: '24px' }}>大厅来访</div>, icon: <img className="workDash-tabs" src={workDash_14}></img>, key: '2' }, |
| | | { label: <div style={{ height: '24px' }}>线上来访</div>, icon: <img className="workDash-tabs" src={workDash_16}></img>, key: '3' }, |
| | | { label: <div style={{ height: '24px' }}>自行排查</div>, icon: <img className="workDash-tabs" src={workDash_17}></img>, key: '4' }, |
| | | { label: <div style={{ height: '24px' }}>协同推送</div>, icon: <img className="workDash-tabs" src={workDash_18}></img>, key: '5' }, |
| | | ]} |
| | | activeKey={tabKey} |
| | | onChange={(activeKey) => tabsOnchange(activeKey)} |
| | | /> |
| | | <div style={{ borderBottom: '1px solid #E5E6EB', position: 'absolute', width: '100%' }}></div> */} |
| | | <div style={{ marginTop: '16px' }} className="disputeLedger-row"> |
| | | <div className="comprehensive-title">数据总览</div> |
| | | <div> |
| | | <Space className="workDash-d" align="center" split={<Divider type="vertical" style={{ height: '48px' }} />}> |
| | | <div |
| | | onClick={() => { |
| | | province !== '' && onClickProvince(''); |
| | | }} |
| | | className="workDash-item public-a" |
| | | > |
| | | <div className="workDash-item-img"> |
| | | <img src={workDash_1} alt="" srcset="" /> |
| | | </div> |
| | | {['1', '2', '3', '6', '7', '8', '9'].includes(tabKey) && ( |
| | | <div className="workDash-item-div"> |
| | | <div className="workDash-item-title">总登记</div> |
| | | <div className="workDash-item-value">{data?.totalNum || 0}</div> |
| | | </div> |
| | | )} |
| | | {tabKey === '4' && ( |
| | | <div className="workDash-item-div"> |
| | | <div className="workDash-item-title"> |
| | | <div style={{ width: '50px' }}>总登记</div> |
| | | <div style={{ width: '36px' }}></div>{' '} |
| | | <Space split={<Divider type="vertical" />}> |
| | | <div style={{ display: 'flex', alignItems: 'center' }}> |
| | | <span className="workDash-item-title-blue"></span> |
| | | <span |
| | | style={{ |
| | | color: '#4E5969', |
| | | fontSize: '14px', |
| | | display: 'flex', |
| | | alignItems: 'center', |
| | | display: 'inline-block', |
| | | width: '150px', |
| | | }} |
| | | > |
| | | 部门排查:{data?.bmpcNum || 0}件 |
| | | </span> |
| | | <span |
| | | onClick={() => { |
| | | tabsOnchange('6'); |
| | | }} |
| | | style={{ |
| | | color: '#1A6FB8', |
| | | border: '1px solid #1A6FB8', |
| | | fontSize: '12px', |
| | | borderRadius: '2px', |
| | | padding: '0px 4px', |
| | | display: 'flex', |
| | | alignItems: 'center', |
| | | marginLeft: '12px', |
| | | }} |
| | | > |
| | | 查看 |
| | | </span> |
| | | </div> |
| | | </Space> |
| | | </div> |
| | | <div className="workDash-item-value" style={{ marginTop: '4px' }}> |
| | | <div style={{ width: '50px' }}>{data?.totalNum || 0}</div> |
| | | <div style={{ width: '36px' }}></div> |
| | | <Space split={<Divider type="vertical" />}> |
| | | <div style={{ display: 'flex', alignItems: 'center' }}> |
| | | <span className="workDash-item-title-blue"></span> |
| | | <span style={{ color: '#4E5969', fontSize: '14px', display: 'inline-block', width: '150px' }}> |
| | | 网格排查:{data?.wgpcNum || 0}件 |
| | | </span> |
| | | <span |
| | | onClick={() => { |
| | | tabsOnchange('6'); |
| | | }} |
| | | style={{ |
| | | color: '#1A6FB8', |
| | | border: '1px solid #1A6FB8', |
| | | fontSize: '12px', |
| | | borderRadius: '2px', |
| | | padding: '0px 4px', |
| | | display: 'flex', |
| | | alignItems: 'center', |
| | | marginLeft: '12px', |
| | | }} |
| | | > |
| | | 查看 |
| | | </span> |
| | | </div> |
| | | </Space> |
| | | </div> |
| | | </div> |
| | | )} |
| | | {tabKey === '5' && ( |
| | | <div className="workDash-item-div"> |
| | | <div className="workDash-item-title"> |
| | | <div style={{ width: '50px' }}>总登记</div> |
| | | <div style={{ width: '36px' }}></div>{' '} |
| | | <Space split={<Divider type="vertical" />}> |
| | | <div style={{ display: 'flex', alignItems: 'center' }}> |
| | | <span className="workDash-item-title-blue"></span> |
| | | <span |
| | | style={{ |
| | | color: '#4E5969', |
| | | fontSize: '14px', |
| | | display: 'flex', |
| | | alignItems: 'center', |
| | | display: 'inline-block', |
| | | width: '150px', |
| | | }} |
| | | > |
| | | 非警务纠纷:{data?.fjwjfNum || 0}件 |
| | | </span> |
| | | <span |
| | | onClick={() => { |
| | | tabsOnchange('8'); |
| | | }} |
| | | style={{ |
| | | color: '#1A6FB8', |
| | | border: '1px solid #1A6FB8', |
| | | fontSize: '12px', |
| | | borderRadius: '2px', |
| | | padding: '0px 4px', |
| | | display: 'flex', |
| | | alignItems: 'center', |
| | | marginLeft: '12px', |
| | | }} |
| | | > |
| | | 查看 |
| | | </span> |
| | | </div> |
| | | </Space> |
| | | </div> |
| | | <div className="workDash-item-value" style={{ marginTop: '4px' }}> |
| | | <div style={{ width: '50px' }}>{data?.totalNum || 0}</div> |
| | | <div style={{ width: '36px' }}></div> |
| | | <Space split={<Divider type="vertical" />}> |
| | | <div style={{ display: 'flex', alignItems: 'center' }}> |
| | | <span className="workDash-item-title-blue"></span> |
| | | <span style={{ color: '#4E5969', fontSize: '14px', display: 'inline-block', width: '150px' }}> |
| | | 专项纠纷:{data?.zxjfNum || 0}件 |
| | | </span> |
| | | <span |
| | | onClick={() => { |
| | | tabsOnchange('9'); |
| | | }} |
| | | style={{ |
| | | color: '#1A6FB8', |
| | | border: '1px solid #1A6FB8', |
| | | fontSize: '12px', |
| | | borderRadius: '2px', |
| | | padding: '0px 4px', |
| | | display: 'flex', |
| | | alignItems: 'center', |
| | | marginLeft: '12px', |
| | | }} |
| | | > |
| | | 查看 |
| | | </span> |
| | | </div> |
| | | </Space> |
| | | </div> |
| | | </div> |
| | | )} |
| | | </div> |
| | | <div |
| | | onClick={() => { |
| | | province !== '1' && onClickProvince('1'); |
| | | }} |
| | | className="workDash-item public-a" |
| | | > |
| | | <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">{data?.processNum || 0}</div> |
| | | </div> |
| | | </div> |
| | | <div |
| | | onClick={() => { |
| | | province !== '2' && onClickProvince('2'); |
| | | }} |
| | | className="workDash-item1 public-a" |
| | | > |
| | | <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>{' '} |
| | | <Space split={<Divider type="vertical" />}> |
| | | <div style={{ display: 'flex', alignItems: 'center' }}> |
| | | <span className="workDash-item-title-green"></span> |
| | | <span style={{ color: '#4E5969', fontSize: '14px', display: 'flex', alignItems: 'center' }}> |
| | | 化解成功:{data?.finishNum || 0}件 | 成功率: |
| | | <span style={{ color: '#00B42A' }}>{((data?.finishNum * 100) / (data?.finishNum + data?.failNum) || 0).toFixed(2)}%</span> |
| | | <img style={{ width: '14px', height: '14px', marginLeft: '8px' }} src={workDash_5} alt="" srcset="" /> |
| | | </span> |
| | | </div> |
| | | </Space> |
| | | </div> |
| | | <div className="workDash-item-value"> |
| | | <div style={{ width: '50px' }}>{data?.finishNum + data?.failNum || 0}</div> |
| | | <div style={{ width: '36px' }}></div> |
| | | <Space split={<Divider type="vertical" />}> |
| | | <div> |
| | | <span className="workDash-item-title-red"></span> |
| | | <span style={{ color: '#4E5969', fontSize: '14px' }}>化解不成功:{data?.failNum || 0}件</span> |
| | | </div> |
| | | </Space> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div |
| | | onClick={() => { |
| | | province !== '3' && onClickProvince('3'); |
| | | }} |
| | | className="workDash-item public-a" |
| | | > |
| | | <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">{data?.rejectNum || 0}</div> |
| | | </div> |
| | | </div> |
| | | </Space> |
| | | </div> |
| | | </div> |
| | | |
| | | {/* 事项来源 */} |
| | | {tabKey === '1' && ( |
| | | <div style={{ marginTop: '12px' }}> |
| | | <Row gutter={24}> |
| | | <Col span={16}> |
| | | <div className="workDash-main"> |
| | | <div style={{ width: '100%', height: '295px' }}> |
| | | <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" |
| | | onClick={() => { |
| | | tabsOnchange('2'); |
| | | }} |
| | | > |
| | | <div className="workDash-main-card-head-l-img"> |
| | | <img src={workDash_6} alt="" srcset="" /> |
| | | </div> |
| | | <div className="workDash-main-card-head-l-img-title">详情</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"> |
| | | {data?.oneSource?.caseNum || 0} |
| | | <span className="workDash-main-card-head-r-subValue"> | {data?.oneSource?.caseRate || 0}%</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div style={{ margin: '0 6px' }}> |
| | | <div style={{ display: 'flex', justifyContent: 'space-between', marginTop: '16px' }}> |
| | | <div className="workDash-main-card-body-flex"> |
| | | <div className="workDash-main-card-body-flex-title">化解中</div> |
| | | <div className="workDash-main-card-body-flex-value">{data?.oneSource?.resolveingNum || 0}</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">{data?.oneSource?.resolveNum || 0}</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">{data?.oneSource?.unResolveNum || 0}</div> |
| | | </div> |
| | | </div> |
| | | <div style={{ display: 'flex', justifyContent: 'space-between', marginTop: '16px' }}> |
| | | <div className="workDash-main-card-body-flex"> |
| | | <div className="workDash-main-card-body-flex-title">化解成功率</div> |
| | | <div className="workDash-main-card-body-flex-value">{data?.oneSource?.resolveRate || 0}%</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">{data?.oneSource?.rejectNum || 0}</div> |
| | | </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" |
| | | onClick={() => { |
| | | tabsOnchange('3'); |
| | | }} |
| | | > |
| | | <div className="workDash-main-card-head-l-img workDash-bg_2_img"> |
| | | <img src={workDash_7} alt="" srcset="" /> |
| | | </div> |
| | | <div className="workDash-main-card-head-l-img-title">详情</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"> |
| | | {data?.twoSource?.caseNum || 0} |
| | | <span className="workDash-main-card-head-r-subValue"> | {data?.twoSource?.caseRate || 0}%</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div style={{ margin: '0 6px' }}> |
| | | <div style={{ display: 'flex', justifyContent: 'space-between', marginTop: '16px' }}> |
| | | <div className="workDash-main-card-body-flex"> |
| | | <div className="workDash-main-card-body-flex-title">化解中</div> |
| | | <div className="workDash-main-card-body-flex-value">{data?.twoSource?.resolveingNum || 0}</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">{data?.twoSource?.resolveNum || 0}</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">{data?.twoSource?.unResolveNum || 0}</div> |
| | | </div> |
| | | </div> |
| | | <div style={{ display: 'flex', justifyContent: 'space-between', marginTop: '16px' }}> |
| | | <div className="workDash-main-card-body-flex"> |
| | | <div className="workDash-main-card-body-flex-title">化解成功率</div> |
| | | <div className="workDash-main-card-body-flex-value">{data?.twoSource?.resolveRate || 0}%</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">{data?.twoSource?.rejectNum || 0}</div> |
| | | </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 |
| | | className="workDash-main-card-head-l-img-title" |
| | | onClick={() => { |
| | | tabsOnchange('4'); |
| | | }} |
| | | > |
| | | 详情 |
| | | </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"> |
| | | {data?.threeSource?.caseNum || 0} |
| | | <span className="workDash-main-card-head-r-subValue"> | {data?.threeSource?.caseRate || 0}%</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div style={{ margin: '0 6px' }}> |
| | | <div style={{ display: 'flex', justifyContent: 'space-between', marginTop: '16px' }}> |
| | | <div className="workDash-main-card-body-flex"> |
| | | <div className="workDash-main-card-body-flex-title">化解中</div> |
| | | <div className="workDash-main-card-body-flex-value">{data?.threeSource?.resolveingNum || 0}</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">{data?.threeSource?.resolveNum || 0}</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">{data?.threeSource?.unResolveNum || 0}</div> |
| | | </div> |
| | | </div> |
| | | <div style={{ display: 'flex', justifyContent: 'space-between', marginTop: '16px' }}> |
| | | <div className="workDash-main-card-body-flex"> |
| | | <div className="workDash-main-card-body-flex-title">化解成功率</div> |
| | | <div className="workDash-main-card-body-flex-value">{data?.threeSource?.resolveRate || 0}%</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">{data?.threeSource?.rejectNum || 0}</div> |
| | | </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" |
| | | onClick={() => { |
| | | tabsOnchange('5'); |
| | | }} |
| | | > |
| | | <div className="workDash-main-card-head-l-img workDash-bg_4_img"> |
| | | <img src={workDash_9} alt="" srcset="" /> |
| | | </div> |
| | | <div className="workDash-main-card-head-l-img-title">详情</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"> |
| | | {data?.fourSource?.caseNum || 0} |
| | | <span className="workDash-main-card-head-r-subValue"> | {data?.fourSource?.caseRate || 0}%</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div style={{ margin: '0 6px' }}> |
| | | <div style={{ display: 'flex', justifyContent: 'space-between', marginTop: '16px' }}> |
| | | <div className="workDash-main-card-body-flex"> |
| | | <div className="workDash-main-card-body-flex-title">化解中</div> |
| | | <div className="workDash-main-card-body-flex-value">{data?.fourSource?.resolveingNum || 0}</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">{data?.fourSource?.resolveNum || 0}</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">{data?.fourSource?.unResolveNum || 0}</div> |
| | | </div> |
| | | </div> |
| | | <div style={{ display: 'flex', justifyContent: 'space-between', marginTop: '16px' }}> |
| | | <div className="workDash-main-card-body-flex"> |
| | | <div className="workDash-main-card-body-flex-title">化解成功率</div> |
| | | <div className="workDash-main-card-body-flex-value">{data?.fourSource?.resolveRate || 0}%</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">{data?.fourSource?.rejectNum || 0}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div className="workDash-main-flex_1"> |
| | | <div style={{ alignItems: 'center', justifyContent: 'space-between' }} className="big-green-main-title-display"> |
| | | <div style={{ color: '#86909C' }} className="disputeLedger-green-title public-a public-color"> |
| | | <span onClick={() => setRightTag('1')} className={`public-a ${rightTag === '1' && 'public-color'}`}> |
| | | 纠纷类型 |
| | | </span> |
| | | <span> |
| | | {' '} |
| | | /{' '} |
| | | <span onClick={() => setRightTag('2')} className={`public-a ${rightTag === '2' && 'public-color'}`}> |
| | | 化解状况 |
| | | </span>{' '} |
| | | /{' '} |
| | | <span onClick={() => setRightTag('3')} className={`public-a ${rightTag === '3' && 'public-color'}`}> |
| | | 事项等级 |
| | | </span> |
| | | </span> |
| | | </div> |
| | | {rightTag === '1' && caseTypeLevel > 1 && ( |
| | | <div |
| | | onClick={() => { |
| | | setCaseTypeLevel(caseTypeLevel - 1); |
| | | }} |
| | | className="public-a" |
| | | style={{ padding: '12px 16px' }} |
| | | > |
| | | <IconUndo style={{ color: '#1A6FB8' }} /> <span className=" public-color">返回上一级</span> |
| | | </div> |
| | | )} |
| | | </div> |
| | | <div style={{ width: '100%', height: '247px' }}> |
| | | {rightTag === '1' && ( |
| | | <MyLTopChartPie |
| | | data={ |
| | | caseTypeLevel > 1 |
| | | ? caseTypeList?.map((i) => ({ value: i.caseRate, caseNum: i.caseNum, name: i.caseTypeName, caseType: i.caseType })) || [] |
| | | : data?.typeList?.map((i) => ({ value: i.caseRate, caseNum: i.caseNum, name: i.caseTypeName, caseType: i.caseType })) || |
| | | [] |
| | | } |
| | | onMyLTopChartPie={onMyLTopChartPie} |
| | | /> |
| | | )} |
| | | {rightTag === '2' && ( |
| | | <MyLTopChartPie1 |
| | | data={[ |
| | | { value: data?.resolveingRate || 0, name: '化解中' }, |
| | | { value: data?.resolveRate || 0, name: '化解成功' }, |
| | | { value: data?.unResolveRate || 0, name: '化解不成功' }, |
| | | ]} |
| | | allNum={data.totalNum || 0} |
| | | /> |
| | | )} |
| | | {rightTag === '3' && ( |
| | | <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"> |
| | | {data?.threeLevelNum || 0} |
| | | <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" style={{ width: `${data?.threeLevelRate || 0}%` }}></div> |
| | | <img style={{ left: `${Number(data?.threeLevelRate || 0) - 1}%` }} src={workDash_10} alt="" srcset="" /> |
| | | </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"> |
| | | {data?.twoLevelNum || 0} |
| | | <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" style={{ width: `${data?.twoLevelRate || 0}%` }}></div> |
| | | <img style={{ left: `${Number(data?.twoLevelRate || 0) - 1}%` }} src={workDash_11} alt="" srcset="" /> |
| | | </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"> |
| | | {data?.oneLevelNum || 0} |
| | | <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" style={{ width: `${data?.oneLevelRate || 0}%` }}></div> |
| | | <img style={{ left: `${Number(data?.oneLevelRate || 0) - 1}%` }} src={workDash_12} alt="" srcset="" /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | )} |
| | | </div> |
| | | </div> |
| | | </Col> |
| | | </Row> |
| | | </div> |
| | | )} |
| | | |
| | | {/* 公安非警务,12345,网格化 */} |
| | | {tabKey === '5' && ( |
| | | <div style={{ marginTop: '12px' }}> |
| | | <Row gutter={16}> |
| | | {/* 公安非警务 */} |
| | | <Col span={8}> |
| | | <div className="workDash-public"> |
| | | <div className="workDash-public-head"> |
| | | <div className="workDash-public-head-l"> |
| | | <div className="workDash-public-head-l-img"> |
| | | <img src={workDash_24} alt="" srcset="" /> |
| | | </div> |
| | | </div> |
| | | <div className="workDash-public-head-r"> |
| | | <div className="workDash-public-head-r-title">公安非警务</div> |
| | | <div className="workDash-public-head-r-value"> |
| | | <div className="workDash-public-head-r-value-num"> |
| | | {data?.oneSecondSource?.caseNum || 0}条 <span className="workDash-public-head-r-value-unit">(工单总数)</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div className="workDash-public-body"> |
| | | <Row gutter={[12, 8]}> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解中</div> |
| | | <div className="workDash-public-body-item-value">{data?.oneSecondSource?.resolveingNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">回退</div> |
| | | <div className="workDash-public-body-item-value">{data?.oneSecondSource?.rejectNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解成功</div> |
| | | <div className="workDash-public-body-item-value">{data?.oneSecondSource?.resolveNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解不成功</div> |
| | | <div className="workDash-public-body-item-value">{data?.oneSecondSource?.unResolveNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解成功率</div> |
| | | <div className="workDash-public-body-item-value">{data?.oneSecondSource?.resolveRate || 0}%</div> |
| | | </div> |
| | | </Col> |
| | | </Row> |
| | | </div> |
| | | </div> |
| | | </Col> |
| | | |
| | | {/* 12345 */} |
| | | <Col span={8}> |
| | | <div className="workDash-public"> |
| | | <div className="workDash-public-head"> |
| | | <div className="workDash-public-head-l"> |
| | | <div className="workDash-public-head-l-img workDash-public-head-l-img-green"> |
| | | <img src={workDash_25} alt="" srcset="" /> |
| | | </div> |
| | | </div> |
| | | <div className="workDash-public-head-r"> |
| | | <div className="workDash-public-head-r-title">12345</div> |
| | | <div className="workDash-public-head-r-value"> |
| | | <div className="workDash-public-head-r-value-num"> |
| | | {data?.twoSecondSource?.caseNum || 0}条 <span className="workDash-public-head-r-value-unit">(工单总数)</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div className="workDash-public-body"> |
| | | <Row gutter={[12, 8]}> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解中</div> |
| | | <div className="workDash-public-body-item-value">{data?.twoSecondSource?.resolveingNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">不予受理</div> |
| | | <div className="workDash-public-body-item-value">{data?.twoSecondSource?.rejectNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解成功</div> |
| | | <div className="workDash-public-body-item-value">{data?.twoSecondSource?.resolveNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解不成功</div> |
| | | <div className="workDash-public-body-item-value">{data?.twoSecondSource?.unResolveNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解成功率</div> |
| | | <div className="workDash-public-body-item-value">{data?.twoSecondSource?.resolveRate || 0}%</div> |
| | | </div> |
| | | </Col> |
| | | </Row> |
| | | </div> |
| | | </div> |
| | | </Col> |
| | | |
| | | {/* 网格化 */} |
| | | <Col span={8}> |
| | | <div className="workDash-public"> |
| | | <div className="workDash-public-head"> |
| | | <div className="workDash-public-head-l"> |
| | | <div className="workDash-public-head-l-img workDash-public-head-l-img-blue"> |
| | | <img src={workDash_26} alt="" srcset="" /> |
| | | </div> |
| | | </div> |
| | | <div className="workDash-public-head-r"> |
| | | <div className="workDash-public-head-r-title">网格化</div> |
| | | <div className="workDash-public-head-r-value"> |
| | | <div className="workDash-public-head-r-value-num"> |
| | | {data?.threeSecondSource?.caseNum || 0}条 <span className="workDash-public-head-r-value-unit">(工单总数)</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div className="workDash-public-body"> |
| | | <Row gutter={[12, 8]}> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解中</div> |
| | | <div className="workDash-public-body-item-value">{data?.threeSecondSource?.resolveingNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">不予受理</div> |
| | | <div className="workDash-public-body-item-value">{data?.threeSecondSource?.rejectNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解成功</div> |
| | | <div className="workDash-public-body-item-value">{data?.threeSecondSource?.resolveNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解不成功</div> |
| | | <div className="workDash-public-body-item-value">{data?.threeSecondSource?.unResolveNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解成功率</div> |
| | | <div className="workDash-public-body-item-value">{data?.threeSecondSource?.resolveRate || 0}%</div> |
| | | </div> |
| | | </Col> |
| | | </Row> |
| | | </div> |
| | | </div> |
| | | </Col> |
| | | </Row> |
| | | </div> |
| | | )} |
| | | |
| | | {/* 纠纷类型 化解状况 事项等级 */} |
| | | {tabKey !== '1' && ( |
| | | <div style={{ marginTop: '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">化解状况({tabKeyTitles(tabKey)})</div> |
| | | </div> |
| | | <div style={{ width: '100%', height: '247px' }}> |
| | | <MyLTopChartPie1 |
| | | data={[ |
| | | { value: data?.resolveingRate || 0, name: '化解中' }, |
| | | { value: data?.resolveRate || 0, name: '化解成功' }, |
| | | { value: data?.unResolveRate || 0, name: '化解不成功' }, |
| | | ]} |
| | | allNum={data.totalNum || 0} |
| | | /> |
| | | </div> |
| | | </div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div className="workDash-main-flex_1"> |
| | | <div className="big-green-main-title-display"> |
| | | <div className="disputeLedger-green-title">事项等级({tabKeyTitles(tabKey)})</div> |
| | | </div> |
| | | <div style={{ height: '247px' }} 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"> |
| | | {data?.threeLevelNum || 0} |
| | | <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" style={{ width: `${data?.threeLevelRate || 0}%` }}></div> |
| | | <img style={{ left: `${Number(data?.threeLevelRate || 0) - 1}%` }} src={workDash_10} alt="" srcset="" /> |
| | | </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"> |
| | | {data?.twoLevelNum || 0} |
| | | <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" style={{ width: `${data?.twoLevelRate || 0}%` }}></div> |
| | | <img style={{ left: `${Number(data?.twoLevelRate || 0) - 1}%` }} src={workDash_11} alt="" srcset="" /> |
| | | </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"> |
| | | {data?.oneLevelNum || 0} |
| | | <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" style={{ width: `${data?.oneLevelRate || 0}%` }}></div> |
| | | <img style={{ left: `${Number(data?.oneLevelRate || 0) - 1}%` }} src={workDash_12} alt="" srcset="" /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div className="workDash-main-flex_1"> |
| | | <div style={{ alignItems: 'center', justifyContent: 'space-between' }} className="big-green-main-title-display"> |
| | | <div className="disputeLedger-green-title">纠纷类型({tabKeyTitles(tabKey)})</div> |
| | | {caseTypeLevel > 1 && ( |
| | | <div |
| | | onClick={() => { |
| | | setCaseTypeLevel(caseTypeLevel - 1); |
| | | }} |
| | | className="public-a" |
| | | style={{ padding: '12px 16px' }} |
| | | > |
| | | <IconUndo style={{ color: '#1A6FB8' }} /> <span className=" public-color">返回上一级</span> |
| | | </div> |
| | | )} |
| | | </div> |
| | | <div style={{ width: '100%', height: '247px' }}> |
| | | <MyLTopChartPie |
| | | data={ |
| | | caseTypeLevel > 1 |
| | | ? caseTypeList?.map((i) => ({ value: i.caseRate, caseNum: i.caseNum, name: i.caseTypeName, caseType: i.caseType })) || [] |
| | | : data?.typeList?.map((i) => ({ value: i.caseRate, caseNum: i.caseNum, name: i.caseTypeName, caseType: i.caseType })) || [] |
| | | } |
| | | onMyLTopChartPie={onMyLTopChartPie} |
| | | /> |
| | | </div> |
| | | </div> |
| | | </Col> |
| | | </Row> |
| | | </div> |
| | | )} |
| | | |
| | | {/* 图表-化解统计 */} |
| | | <div className="disputeLedger-green"> |
| | | <div style={{ position: 'relative', width: '100%', backgroundColor: '#fff' }}> |
| | | <div |
| | | style={{ position: 'absolute', zIndex: '1000', alignItems: 'center', justifyContent: 'space-between', width: '100%' }} |
| | | className="big-green-main-title-display" |
| | | > |
| | | <div className="disputeLedger-green-title">化解统计</div> |
| | | <div style={{ paddingRight: '24px' }}> |
| | | <Select |
| | | style={{ width: '180px' }} |
| | | value={province} |
| | | onChange={(value) => { |
| | | onClickProvince(value); |
| | | }} |
| | | > |
| | | {[ |
| | | { label: '总登记', value: '' }, |
| | | { label: '化解中', value: '1' }, |
| | | { label: '已结案', value: '2' }, |
| | | { label: '不予受理', value: '3' }, |
| | | ].map((option, index) => ( |
| | | <Option key={index} value={option.value}> |
| | | {'统计条件:' + option.label} |
| | | </Option> |
| | | ))} |
| | | </Select> |
| | | <Button type="outline" onClick={downloadAreaXls}> |
| | | 导出 |
| | | </Button> |
| | | </div> |
| | | </div> |
| | | <div style={{ width: '100%', height: '300px' }}> |
| | | {province === '' && ( |
| | | <MyChartBar |
| | | data={data?.areaList || []} |
| | | status={province} |
| | | dataAxis={data?.areaList?.map((i) => i.areaName) || []} |
| | | onMyLTopChartPie={onModalClick} |
| | | /> |
| | | )} |
| | | {province === '1' && ( |
| | | <MyChartBar1 |
| | | data={data?.areaList || []} |
| | | status={province} |
| | | dataAxis={data?.areaList?.map((i) => i.areaName) || []} |
| | | onMyLTopChartPie={onModalClick} |
| | | /> |
| | | )} |
| | | {province === '2' && ( |
| | | <MyChartBar2 |
| | | data={data?.areaList || []} |
| | | data1={data?.areaList || []} |
| | | dataAxis={data?.areaList?.map((i) => i.areaName) || []} |
| | | onMyLTopChartPie={onModalClick} |
| | | /> |
| | | )} |
| | | {province === '3' && ( |
| | | <MyChartBar3 data={data?.areaList || []} dataAxis={data?.areaList?.map((i) => i.areaName) || []} onMyLTopChartPie={onModalClick} /> |
| | | )} |
| | | </div> |
| | | </div> |
| | | </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 style={{ display: 'flex', alignItems: 'center', gap: '8px' }} className='disputeLedger-green-title'><img src={huo} alt="" srcset="" />扬言极端</div> |
| | | <div style={{ fontSize: '14px', padding: '0 16px', display: 'flex' }} className='disputeLedger-green-subTitle'>区域查询: |
| | | <Breadcrumb>{yYjds?.map((i, idx) => <Breadcrumb.Item><span onClick={() => { |
| | | if (yYjds?.length > 1) { |
| | | setYYjdData({ visible: false }) |
| | | console.log('yYjds111111', yYjds); |
| | | setYYjds(yYjds.filter((j, idx2) => idx2 <= idx)) |
| | | delete search.queArea; |
| | | delete search.queRoad; |
| | | delete search.queVillage; |
| | | delete search.queRoad; |
| | | getAnalysis({ ...search, [i.key]: i.value }) |
| | | } |
| | | }} className={idx < (yYjds?.length - 1) && 'public-a'}>{i.label}</span></Breadcrumb.Item>)}</Breadcrumb></div> |
| | | <div style={{ margin: '12px 16px' }}> |
| | | <Alert |
| | | type='info' |
| | | content={<span>点击区域查询文字内容可返回上一级</span>} |
| | | /> |
| | | </div> |
| | | <div style={{ padding: '4px 16px 16px 16px' }}> |
| | | { |
| | | yYjdData.visible ? |
| | | <TableView |
| | | columns={fxColumns} |
| | | dataSource={tableData.list} |
| | | // tableHeight={'100%'} |
| | | size="small" |
| | | rowKey='ownerId' |
| | | bordered={true} |
| | | isScroll={true}//兼容以前的,当需要表格竖向滚动,请设置这个 |
| | | scroll={{ |
| | | x: 1300 |
| | | }} |
| | | offsetHeight={165} |
| | | onChange={(pagination, filters, sorter) => { |
| | | handleSort(pagination.current, pagination.pageSize, sorter) |
| | | }} |
| | | pagination={{ |
| | | current: tableData.page, |
| | | pageSize: tableData.size, |
| | | total: tableData.total, |
| | | }} |
| | | /> : |
| | | <Table |
| | | columns={[ |
| | | { title: '区域', width: 120, dataIndex: 'name' }, |
| | | { |
| | | title: '事件数量', width: 700, dataIndex: 'total', defaultSortOrder: 'descend', |
| | | sorter: true, render: (text, record) => ( |
| | | <div className='workDash-extreme-rate'><div className='workDash-extreme-rate-show' style={{ width: `${((Number(text) / Number(extremeTotal)) || 0).toFixed(2) * 100}%` }}>{`${text || 0}件`}</div><div style={{ zIndex: '2' }}></div></div> |
| | | ) |
| | | }, |
| | | { title: '极端事件高发纠纷类型', width: 280, dataIndex: 'commonType' }, |
| | | { |
| | | title: '操作', width: 120, dataIndex: 'actions', render: (text, record) => ( |
| | | <Space> |
| | | {(record?.region !== 'unitId' && record?.region !== 'queVillage') && <div onClick={() => { |
| | | // 将code传给查询组件中,并在查询组件中的区域中进行展示 |
| | | // let codes = getParentCodes(treeList, record.code); |
| | | // form.setFieldValue('queCode', codes) |
| | | setYYjds([...yYjds, { label: record.name, value: record.code, key: record.region }]) |
| | | setRegion({ key: record.region, value: record.code }) |
| | | delete search.queArea; |
| | | delete search.queRoad; |
| | | delete search.queVillage; |
| | | delete search.queRoad; |
| | | getAnalysis({ ...search, [record.region]: record.code }) |
| | | }} className='public-a public-color'>查看下级</div>} |
| | | {<div onClick={() => { |
| | | setYYjds([...yYjds, { label: record.name, value: record.code, key: record.region }]) |
| | | setRegion({ key: record.region, value: record.code }) |
| | | pageExtremeCase({ ...search, ...pageData, [record.region]: record.code }, true) |
| | | }} className='public-a public-color'>详情</div>} |
| | | </Space> |
| | | ) |
| | | }, |
| | | ]} |
| | | locale={{ |
| | | emptyText: <div className='public-noData'> |
| | | <Empty imageStyle={{ height: '160px' }} description={<span style={{ color: "#86909C" }}>暂无数据</span>} image={empty}> |
| | | <div className='ledger-main-display' style={{ marginTop: '8px' }}> |
| | | </div> |
| | | </Empty> |
| | | </div>, // 使用自定义组件作为空状态的展示 |
| | | }} |
| | | bordered |
| | | onChange={(pagination, filters, sorter) => { |
| | | let sortType = sorter?.order === 'descend' ? '2' : sorter?.order === 'ascend' ? '1' : ''; |
| | | setYYJDSortType(sorter?.order || '') |
| | | let item = yYjds[yYjds.length - 1]; |
| | | delete search.queArea; |
| | | delete search.queRoad; |
| | | delete search.queVillage; |
| | | delete search.queRoad; |
| | | getAnalysis({ ...search, [item.key]: item.value, sortType }) |
| | | }} |
| | | dataSource={extremeData} |
| | | scroll={null} |
| | | summary={() => ( |
| | | <Table.Summary fixed> |
| | | <Table.Summary.Row style={{ background: '#EFF8FF' }}> |
| | | <Table.Summary.Cell index={0}>合计</Table.Summary.Cell> |
| | | <Table.Summary.Cell index={1}>{extremeTotal}</Table.Summary.Cell> |
| | | <Table.Summary.Cell index={2}></Table.Summary.Cell> |
| | | <Table.Summary.Cell index={3}></Table.Summary.Cell> |
| | | </Table.Summary.Row> |
| | | </Table.Summary> |
| | | )} |
| | | direction="暂无历史记录" |
| | | pagination={false} |
| | | size="small" |
| | | rowKey="applyId" |
| | | /> |
| | | } |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </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" style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}> |
| | | <div>实时动态</div> |
| | | {/* 导出 */} |
| | | <Button type="outline" onClick={downloadXls}> |
| | | 导出 |
| | | </Button> |
| | | </div> |
| | | <div style={{ padding: '4px 16px 16px' }}> |
| | | {/* <ScrollTable dataSource={data.caseList || []} columns={columns()} /> */} |
| | | <div className="workDash-table"> |
| | | <TableView |
| | | title="" |
| | | columns={columns()} |
| | | dataSource={listData.tableData} |
| | | pagination={{ |
| | | current: listDataSearch.page, |
| | | pageSize: listDataSearch.size, |
| | | total: listData.total, |
| | | onChange: (page, pageSize) => handleChangePage(page, pageSize), |
| | | }} |
| | | rowClassName={(record) => (record.id === data.tableActive ? 'tableRowActive' : '')} |
| | | /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <SupervisingViews |
| | | visible={supervising} |
| | | handleOnCancel={() => setSupervising(false)} |
| | | caseId={supervisingAddId} |
| | | supervisingId={supervisingId} |
| | | getTableData={() => { |
| | | let newData = region ? { [region.key]: region.value } : {}; |
| | | pageExtremeCase({ |
| | | ...search, |
| | | ...pageData, |
| | | ...newData, |
| | | }); |
| | | }} |
| | | /> |
| | | <Modal title="督办信息" style={{ width: '938px' }} onCancel={() => setSupervisingList(false)} visible={supervisingList} footer={null}> |
| | | <TableView |
| | | showHeader |
| | | title="" |
| | | columns={supervisingColumns} |
| | | dataSource={SuperviseListData || []} |
| | | rowKey="id" |
| | | tableHeight={500} |
| | | style={{ marginTop: '-40px' }} |
| | | /> |
| | | </Modal> |
| | | {/* 点击柱状图弹窗 */} |
| | | <Modal |
| | | title={`${modalData.name || ''}`} |
| | | visible={modalVisible} |
| | | onCancel={() => setModalVisible(false)} |
| | | footer={null} |
| | | style={{ width: '80%' }} |
| | | > |
| | | <div> |
| | | {/* <div style={{ marginBottom: '8px' }}> |
| | | <div className="comprehensive-title">查询条件</div> |
| | | <NewTableSearch |
| | | exportButtonShow={false} |
| | | labelLength={6} |
| | | form={modalForm} |
| | | itemData={[ |
| | | // { type: 'Cascader', name: 'queCode', label: '问题属地', placeholder: '请选择', changeSelect: true, allowClear: false, treedata: treeList || [] }, |
| | | { type: 'Input', name: 'inputUnitName', label: '登记机构' }, |
| | | { type: 'Select', name: 'mediResult', label: '化解结果', placeholder: '请选择', span: 8, selectdata: $$.options.mediResult }, |
| | | { type: 'Input', name: 'plaintiffs', label: '申请方', labelStyle: { width: '56px' } }, |
| | | // { type: 'Input', name: 'defendants', label: '被申请方' }, |
| | | ]} |
| | | handleReset={() => { |
| | | modalForm.resetFields(); |
| | | modalForm.setFieldsValue({}); |
| | | }} |
| | | handleSearch={() => { |
| | | handleModalSearch('search'); |
| | | }} |
| | | /> |
| | | </div> */} |
| | | <TableView |
| | | columns={[ |
| | | { |
| | | title: '登记时间', |
| | | width: 100, |
| | | dataIndex: 'createTime', |
| | | defaultSortOrder: 'descend', |
| | | order: 'ascend', |
| | | sorter: { compare: (a, b) => {} }, |
| | | render: (text) => <div>{$$.dateFormat(text)}</div>, |
| | | }, |
| | | { title: '事项来源', width: 100, dataIndex: 'canalName' }, |
| | | { title: '事项状态', width: 100, dataIndex: 'statusName' }, |
| | | { title: '事项等级', width: 100, dataIndex: 'caseLevel' }, |
| | | { title: '纠纷类型', width: 100, dataIndex: 'caseTypeName' }, |
| | | { title: '问题属地', width: 100, dataIndex: 'areaName' }, |
| | | { title: '登记机构', width: 150, dataIndex: 'inputUnitName' }, |
| | | { title: '承办部门', width: 100, dataIndex: 'mediateUnitName' }, |
| | | { |
| | | title: '办结时间', |
| | | width: 100, |
| | | dataIndex: 'closeTime', |
| | | order: 'ascend', |
| | | sorter: { compare: (a, b) => {} }, |
| | | render: (text) => <span>{$$.dateFormat(text)}</span>, |
| | | }, |
| | | { |
| | | 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: '操作', |
| | | dataIndex: 'action', |
| | | width: 50, |
| | | render: (_, record) => { |
| | | return <Link onClick={() => handleJump(record)}>详情</Link>; |
| | | }, |
| | | }, |
| | | ]} |
| | | dataSource={modalData.tableData} |
| | | onChange={(pagination, filters, sorter) => { |
| | | handleSortModal(pagination.current, pagination.pageSize, sorter); |
| | | }} |
| | | pagination={{ |
| | | current: modalSearch.page, |
| | | pageSize: modalSearch.size, |
| | | total: modalData.total, |
| | | // onChange: (page, pageSize) => handleModalChangePage(page, pageSize), |
| | | }} |
| | | /> |
| | | </div> |
| | | </Modal> |
| | | <Response visible={response} handleOnCancel={() => setResponse(false)} responseId={responseId} data={superviseInfo} /> |
| | | <ResponseDetail visible={detail} handleOnCancel={() => setDetail(false)} data={responseDetail} /> |
| | | <SelectObjModal |
| | | visible={selectModalVisible} |
| | | nameStr={selectObjModalData.title} |
| | | checkKeys={[selectObjModalData[selectObjModalData.key]?.key || '']} |
| | | onOk={(item) => { |
| | | setSelectModalVisible(false); |
| | | setSelectObjModalData({ ...selectObjModalData, [selectObjModalData.key]: item }); |
| | | form.setFieldValue(selectObjModalData?.key, item.name); |
| | | }} |
| | | onClose={() => setSelectModalVisible(false)} |
| | | type="dept" |
| | | isCheckbox={false} |
| | | /> |
| | | </div> |
| | | </NewPage> |
| | | ); |
| | | }; |
| | | |
| | | export default WorkDash; |
| | | |
| | | // 柱状图 |
| | | const MyChartBar = ({ data, dataAxis, onMyLTopChartPie }) => { |
| | | const myChartRef = useRef(); |
| | | // 保存echarts实例的引用 |
| | | const [myChart, setMyChart] = useState(null); |
| | | |
| | | // 初始化图表 |
| | | useEffect(() => { |
| | | const chart = echarts.init(document.getElementById('chartBar'), 'dark'); |
| | | setMyChart(chart); |
| | | |
| | | return () => { |
| | | // 组件卸载时销毁图表 |
| | | chart.dispose(); |
| | | }; |
| | | }, []); |
| | | |
| | | // 更新图表数据和事件 |
| | | useEffect(() => { |
| | | if (!myChart) return; |
| | | |
| | | // 移除旧的点击事件监听器 |
| | | myChart.off('click'); |
| | | |
| | | // 添加新的点击事件监听器 |
| | | myChart.on('click', (params) => { |
| | | // 将原始数据对象传递给回调函数 |
| | | onMyLTopChartPie(data[params.dataIndex]); |
| | | }); |
| | | |
| | | // 设置图表配置 |
| | | myChart.setOption({ |
| | | backgroundColor: '#fff', |
| | | grid: { |
| | | x: 10, |
| | | y: 60, |
| | | x2: 20, |
| | | y2: 0, |
| | | containLabel: true, |
| | | }, |
| | | tooltip: { |
| | | trigger: 'item', |
| | | formatter: '{a} <br/>{b}: {c}件', |
| | | }, |
| | | xAxis: [ |
| | | { |
| | | type: 'category', |
| | | data: dataAxis, |
| | | axisLabel: { |
| | | interval: 'auto', |
| | | rotate: 45, |
| | | color: '#4e5969', |
| | | }, |
| | | scrollbar: { |
| | | show: true, |
| | | }, |
| | | }, |
| | | ], |
| | | yAxis: { |
| | | splitLine: { |
| | | lineStyle: { |
| | | type: 'dashed', |
| | | color: '#000', |
| | | }, |
| | | }, |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'bar', |
| | | name: '总登记', |
| | | data: data.map((item) => item.caseNum), |
| | | barWidth: 24, |
| | | label: { |
| | | show: true, |
| | | color: 'rgba(0, 0, 0, 0.85)', |
| | | fontSize: '14px', |
| | | position: 'top', |
| | | valueAnimation: false, |
| | | }, |
| | | emphasis: { |
| | | itemStyle: { |
| | | opacity: 0.7, |
| | | }, |
| | | }, |
| | | itemStyle: { |
| | | color: '#57a9fb', |
| | | borderWidth: 2, |
| | | }, |
| | | }, |
| | | ], |
| | | }); |
| | | }, [data, dataAxis, myChart, onMyLTopChartPie]); |
| | | |
| | | return <div id="chartBar" ref={myChartRef} style={{ height: '290px', width: '100%' }} />; |
| | | }; |
| | | // 柱状图化解中 |
| | | const MyChartBar1 = ({ data, dataAxis, onMyLTopChartPie }) => { |
| | | const myChartRef = useRef(); |
| | | const [myChart, setMyChart] = useState(null); |
| | | |
| | | useEffect(() => { |
| | | const chart = echarts.init(document.getElementById('chartBar1'), 'dark'); |
| | | setMyChart(chart); |
| | | return () => { |
| | | chart.dispose(); |
| | | }; |
| | | }, []); |
| | | |
| | | useEffect(() => { |
| | | if (!myChart) return; |
| | | |
| | | myChart.off('click'); |
| | | myChart.on('click', (params) => { |
| | | onMyLTopChartPie(data[params.dataIndex]); |
| | | }); |
| | | |
| | | myChart.setOption({ |
| | | backgroundColor: '#fff', |
| | | grid: { |
| | | x: 10, |
| | | y: 60, |
| | | x2: 20, |
| | | y2: 0, |
| | | containLabel: true, |
| | | }, |
| | | tooltip: { |
| | | trigger: 'item', |
| | | formatter: '{a} <br/>{b}: {c}件', |
| | | }, |
| | | xAxis: [ |
| | | { |
| | | type: 'category', |
| | | data: dataAxis, |
| | | axisLabel: { |
| | | interval: 'auto', |
| | | rotate: 45, |
| | | color: '#4e5969', |
| | | }, |
| | | scrollbar: { |
| | | show: true, |
| | | }, |
| | | }, |
| | | ], |
| | | yAxis: { |
| | | splitLine: { |
| | | lineStyle: { |
| | | type: 'dashed', |
| | | color: '#000', |
| | | }, |
| | | }, |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'bar', |
| | | name: '化解中', |
| | | data: data.map((item) => item.resolveingNum), |
| | | barWidth: 24, |
| | | label: { |
| | | show: true, |
| | | color: 'rgba(0, 0, 0, 0.85)', |
| | | fontSize: '14px', |
| | | position: 'top', |
| | | valueAnimation: false, |
| | | }, |
| | | emphasis: { |
| | | itemStyle: { |
| | | opacity: 0.7, |
| | | }, |
| | | }, |
| | | itemStyle: { |
| | | color: '#57a9fb', |
| | | borderWidth: 2, |
| | | }, |
| | | }, |
| | | ], |
| | | }); |
| | | }, [data, dataAxis, myChart, onMyLTopChartPie]); |
| | | |
| | | return <div id="chartBar1" ref={myChartRef} style={{ height: '290px', width: '100%' }} />; |
| | | }; |
| | | |
| | | // 柱状图化解成功,化解不成功 |
| | | const MyChartBar2 = ({ data, data1, dataAxis, onMyLTopChartPie }) => { |
| | | const myChartRef = useRef(); |
| | | const [myChart, setMyChart] = useState(null); |
| | | |
| | | useEffect(() => { |
| | | const chart = echarts.init(document.getElementById('chartBar2'), 'dark'); |
| | | setMyChart(chart); |
| | | return () => { |
| | | chart.dispose(); |
| | | }; |
| | | }, []); |
| | | |
| | | useEffect(() => { |
| | | if (!myChart) return; |
| | | |
| | | myChart.off('click'); |
| | | myChart.on('click', (params) => { |
| | | const isSuccess = params.seriesName === '化解成功'; |
| | | onMyLTopChartPie({ |
| | | ...data[params.dataIndex], |
| | | type: isSuccess ? 'success' : 'fail', |
| | | }); |
| | | }); |
| | | |
| | | myChart.setOption({ |
| | | backgroundColor: '#fff', |
| | | grid: { |
| | | x: 10, |
| | | y: 60, |
| | | x2: 20, |
| | | y2: 0, |
| | | containLabel: true, |
| | | }, |
| | | tooltip: { |
| | | trigger: 'item', |
| | | formatter: '{a} <br/>{b}: {c}件', |
| | | }, |
| | | legend: { |
| | | orient: 'horizontal', |
| | | top: 12, |
| | | right: 224, |
| | | data: [ |
| | | { name: '化解成功', icon: 'circle' }, |
| | | { name: '化解不成功', icon: 'circle' }, |
| | | ], |
| | | }, |
| | | xAxis: [ |
| | | { |
| | | type: 'category', |
| | | data: dataAxis, |
| | | axisLabel: { |
| | | interval: 'auto', |
| | | rotate: 45, |
| | | color: '#4e5969', |
| | | }, |
| | | scrollbar: { |
| | | show: true, |
| | | }, |
| | | }, |
| | | ], |
| | | yAxis: { |
| | | splitLine: { |
| | | lineStyle: { |
| | | type: 'dashed', |
| | | color: '#000', |
| | | }, |
| | | }, |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'bar', |
| | | name: '化解成功', |
| | | data: data.map((item) => item.resolveNum), |
| | | barWidth: 24, |
| | | label: { |
| | | show: true, |
| | | position: 'top', |
| | | color: 'rgba(0, 0, 0, 0.85)', |
| | | fontSize: '14px', |
| | | valueAnimation: false, |
| | | }, |
| | | emphasis: { |
| | | itemStyle: { |
| | | opacity: 0.7, |
| | | }, |
| | | }, |
| | | itemStyle: { |
| | | color: '#23c343', |
| | | borderWidth: 2, |
| | | }, |
| | | }, |
| | | { |
| | | type: 'bar', |
| | | name: '化解不成功', |
| | | data: data1.map((item) => item.unResolveNum), |
| | | barWidth: 24, |
| | | label: { |
| | | show: true, |
| | | position: 'top', |
| | | color: 'rgba(0, 0, 0, 0.85)', |
| | | fontSize: '14px', |
| | | valueAnimation: false, |
| | | }, |
| | | emphasis: { |
| | | itemStyle: { |
| | | opacity: 0.7, |
| | | }, |
| | | }, |
| | | itemStyle: { |
| | | color: '#F76560', |
| | | borderWidth: 2, |
| | | }, |
| | | }, |
| | | ], |
| | | }); |
| | | }, [data, data1, dataAxis, myChart, onMyLTopChartPie]); |
| | | |
| | | return <div id="chartBar2" ref={myChartRef} style={{ height: '290px', width: '100%' }} />; |
| | | }; |
| | | |
| | | // 柱状图不予受理 |
| | | const MyChartBar3 = ({ data, dataAxis, onMyLTopChartPie }) => { |
| | | const myChartRef = useRef(); |
| | | const [myChart, setMyChart] = useState(null); |
| | | |
| | | useEffect(() => { |
| | | const chart = echarts.init(document.getElementById('chartBar3'), 'dark'); |
| | | setMyChart(chart); |
| | | return () => { |
| | | chart.dispose(); |
| | | }; |
| | | }, []); |
| | | |
| | | useEffect(() => { |
| | | if (!myChart) return; |
| | | |
| | | myChart.off('click'); |
| | | myChart.on('click', (params) => { |
| | | onMyLTopChartPie(data[params.dataIndex]); |
| | | }); |
| | | |
| | | myChart.setOption({ |
| | | backgroundColor: '#fff', |
| | | grid: { |
| | | x: 10, |
| | | y: 60, |
| | | x2: 20, |
| | | y2: 0, |
| | | containLabel: true, |
| | | }, |
| | | tooltip: { |
| | | trigger: 'item', |
| | | formatter: '{a} <br/>{b}: {c}件', |
| | | }, |
| | | xAxis: [ |
| | | { |
| | | type: 'category', |
| | | data: dataAxis, |
| | | axisLabel: { |
| | | interval: 'auto', |
| | | rotate: 45, |
| | | color: '#4e5969', |
| | | }, |
| | | scrollbar: { |
| | | show: true, |
| | | }, |
| | | }, |
| | | ], |
| | | yAxis: { |
| | | splitLine: { |
| | | lineStyle: { |
| | | type: 'dashed', |
| | | color: '#000', |
| | | }, |
| | | }, |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'bar', |
| | | name: '不予受理', |
| | | data: data.map((item) => item.rejectNum), |
| | | barWidth: 24, |
| | | label: { |
| | | show: true, |
| | | position: 'top', |
| | | color: 'rgba(0, 0, 0, 0.85)', |
| | | fontSize: '14px', |
| | | valueAnimation: false, |
| | | }, |
| | | emphasis: { |
| | | itemStyle: { |
| | | opacity: 0.7, |
| | | }, |
| | | }, |
| | | itemStyle: { |
| | | color: '#FFA940', |
| | | borderWidth: 2, |
| | | }, |
| | | }, |
| | | ], |
| | | }); |
| | | }, [data, dataAxis, myChart, onMyLTopChartPie]); |
| | | |
| | | return <div id="chartBar3" ref={myChartRef} style={{ height: '290px', width: '100%' }} />; |
| | | }; |
| | | |
| | | const MyLTopChartPie = ({ data, onMyLTopChartPie }) => { |
| | | 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', |
| | | textStyle: { |
| | | color: 'rgba(0, 0, 0, 0.85)', // 设置图例文字颜色为红色 |
| | | }, |
| | | right: 20, |
| | | data: data?.map((i) => ({ name: i.name, icon: 'circle' })), |
| | | formatter: function (name) { |
| | | return name.length > 7 ? name.slice(0, 7) + '...' : name; |
| | | }, |
| | | }, |
| | | tooltip: { |
| | | trigger: 'item', |
| | | formatter: function (params) { |
| | | return `纠纷类型<br/>${params.name}: ${params?.data?.caseNum}件(${params.value}%)`; |
| | | }, |
| | | }, |
| | | // tooltip: { |
| | | // trigger: 'item', |
| | | // formatter: "{a} <br/>{b}: ({d}%)" |
| | | // }, |
| | | series: [ |
| | | { |
| | | name: '纠纷类型', |
| | | type: 'pie', |
| | | radius: '90%', |
| | | center: ['40%', '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, |
| | | }, |
| | | ], |
| | | }); |
| | | |
| | | // 移除旧的事件监听器 |
| | | myChart.off('click'); |
| | | |
| | | // 为饼图添加点击事件 |
| | | myChart.on('click', onPieClick); |
| | | |
| | | // 事件处理函数 |
| | | function onPieClick(params) { |
| | | onMyLTopChartPie(params); |
| | | } |
| | | }, [data]); |
| | | |
| | | return <div id="chartLTopPie" ref={myChartRef} style={{ height: '232px', width: '100%' }} />; |
| | | }; |
| | | |
| | | const MyLTopChartPie1 = ({ data, allNum }) => { |
| | | 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: 20, |
| | | data: [ |
| | | { |
| | | name: '化解中', |
| | | icon: 'circle', // 图例标记的形状 |
| | | }, |
| | | { |
| | | name: '化解成功', |
| | | icon: 'circle', |
| | | }, |
| | | { |
| | | name: '化解不成功', |
| | | icon: 'circle', |
| | | }, |
| | | ], |
| | | }, |
| | | series: [ |
| | | { |
| | | name: '化解状况', |
| | | type: 'pie', |
| | | radius: ['60%', '90%'], // 设置饼图的内半径和外半径,实现扇形区域 |
| | | center: ['center', 'center'], |
| | | color: ['#B6DDF1', '#3A8AC6', '#094282'], |
| | | data: data, |
| | | label: { |
| | | show: true, |
| | | position: 'inside', // 设置文字在扇形区域内 |
| | | formatter: '{d}%', // 标签文本格式器 |
| | | rich: { |
| | | a: { |
| | | lineHeight: 25, |
| | | align: 'center', |
| | | }, |
| | | b: { |
| | | lineHeight: 25, |
| | | align: 'center', |
| | | }, |
| | | }, |
| | | }, |
| | | }, |
| | | ], |
| | | graphic: { |
| | | type: 'group', |
| | | left: 'center', |
| | | top: '45%', |
| | | children: [ |
| | | { |
| | | type: 'text', |
| | | left: 'center', |
| | | style: { |
| | | text: '事件总数', |
| | | fill: '#4E5969', // 第一部分文字颜色 |
| | | fontSize: 14, |
| | | fontWeight: '400', |
| | | }, |
| | | }, |
| | | { |
| | | type: 'text', |
| | | top: '24px', |
| | | left: 'center', |
| | | style: { |
| | | text: allNum + '\r件', |
| | | textAlign: 'center', |
| | | fill: '#1D2129', // 第二部分文字颜色 |
| | | fontSize: 18, |
| | | fontWeight: '400', |
| | | }, |
| | | }, |
| | | // { |
| | | // type: 'text', |
| | | // top: '28px', |
| | | // left: '65px', |
| | | // style: { |
| | | // text: '件', |
| | | // fill: '#86909C', // 第二部分文字颜色 |
| | | // fontSize: 12, |
| | | // fontWeight: '400' |
| | | // } |
| | | // }, |
| | | ], |
| | | }, |
| | | }); |
| | | }, [data]); |
| | | |
| | | useEffect(() => {}); |
| | | |
| | | return <div id="chartLTopPie1" ref={myChartRef} style={{ height: '232px', width: '100%' }} />; |
| | | }; |
| | |
| | | * @Company: hugeInfo |
| | | * @Author: lwh |
| | | * @Date: 2024-09-14 15:59:17 |
| | | * @LastEditTime: 2025-05-09 14:20:13 |
| | | * @LastEditTime: 2025-06-21 11:32:31 |
| | | * @LastEditors: lwh |
| | | * @Version: 1.0.0 |
| | | * @Description: |
| | |
| | | workDash_24, |
| | | workDash_25, |
| | | workDash_26, |
| | | workDash_27, |
| | | workDash_28, |
| | | workDash_29, |
| | | workDash_30, |
| | | } from '../../assets/images'; |
| | | import NewPage from '../../components/NewPage/index'; |
| | | import * as echarts from 'echarts'; |
| | |
| | | getListData({ ...search, canal: '22_00001-3' }, listDataSearch); |
| | | } else if (activeKey === '5') { |
| | | getListData({ ...search, canal: '22_00001-4' }, listDataSearch); |
| | | } else if (activeKey === '6') { |
| | | getListData({ ...search, canal: '22_00001-3', canalSecond: '22_00003-8' }, listDataSearch); |
| | | } else if (activeKey === '7') { |
| | | getListData({ ...search, canal: '22_00001-3', canalSecond: '22_00003-2' }, listDataSearch); |
| | | } else if (activeKey === '8') { |
| | | getListData({ ...search, canal: '22_00001-4', canalSecond: '22_00003-1' }, listDataSearch); |
| | | } else if (activeKey === '9') { |
| | | getListData({ ...search, canal: '22_00001-4', canalSecond: '22_00003-7' }, listDataSearch); |
| | | } |
| | | } |
| | | } |
| | |
| | | return '自行排查'; |
| | | case '5': |
| | | return '协同推送'; |
| | | case '6': |
| | | return '部门排查'; |
| | | case '7': |
| | | return '网格排查'; |
| | | case '8': |
| | | return '非警务纠纷'; |
| | | case '9': |
| | | return '专项纠纷'; |
| | | default: |
| | | break; |
| | | } |
| | |
| | | {tabKey === '4' && ( |
| | | <Button |
| | | className="source-button source-button-color" |
| | | icon={<img className="source-icon" src={workDash_22} alt="" srcset="" />} |
| | | icon={<img className="source-icon" src={workDash_29} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 自行排查 |
| | |
| | | > |
| | | 协同推送 |
| | | </Button> |
| | | )} |
| | | {tabKey === '6' && ( |
| | | <Space> |
| | | <Button |
| | | onClick={() => { |
| | | tabsOnchange('4'); |
| | | }} |
| | | className="source-button" |
| | | icon={<img className="source-icon" src={workDash_28} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 自行排查 |
| | | </Button> |
| | | <IconCaretRight /> |
| | | <Button |
| | | className="source-button source-button-color" |
| | | icon={<img className="source-icon" src={workDash_23} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 部门排查 |
| | | </Button> |
| | | </Space> |
| | | )} |
| | | {tabKey === '7' && ( |
| | | <Space> |
| | | <Button |
| | | onClick={() => { |
| | | tabsOnchange('4'); |
| | | }} |
| | | className="source-button" |
| | | icon={<img className="source-icon" src={workDash_28} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 自行排查 |
| | | </Button> |
| | | <IconCaretRight /> |
| | | <Button |
| | | className="source-button source-button-color" |
| | | icon={<img className="source-icon" src={workDash_23} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 网格排查 |
| | | </Button> |
| | | </Space> |
| | | )} |
| | | {tabKey === '8' && ( |
| | | <Space> |
| | | <Button |
| | | onClick={() => { |
| | | tabsOnchange('5'); |
| | | }} |
| | | className="source-button" |
| | | icon={<img className="source-icon" src={workDash_27} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 协同推送 |
| | | </Button> |
| | | <IconCaretRight /> |
| | | <Button |
| | | className="source-button1 source-button-color" |
| | | icon={<img className="source-icon" src={workDash_30} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 非警务纠纷 |
| | | </Button> |
| | | </Space> |
| | | )} |
| | | {tabKey === '9' && ( |
| | | <Space> |
| | | <Button |
| | | onClick={() => { |
| | | tabsOnchange('5'); |
| | | }} |
| | | className="source-button" |
| | | icon={<img className="source-icon" src={workDash_27} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 协同推送 |
| | | </Button> |
| | | <IconCaretRight /> |
| | | <Button |
| | | className="source-button source-button-color" |
| | | icon={<img className="source-icon" src={workDash_23} alt="" srcset="" />} |
| | | type="secondary" |
| | | > |
| | | 专项纠纷 |
| | | </Button> |
| | | </Space> |
| | | )} |
| | | </div> |
| | | )} |
| | |
| | | /> |
| | | <div style={{ borderBottom: '1px solid #E5E6EB', position: 'absolute', width: '100%' }}></div> */} |
| | | <div style={{ marginTop: '16px' }} className="disputeLedger-row"> |
| | | <div className="comprehensive-title">数据总览</div> |
| | | <div className="comprehensive-title">数据总览{tabKey !== '1' && `(${tabKeyTitles(tabKey)})`}</div> |
| | | <div> |
| | | <Space className="workDash-d" align="center" split={<Divider type="vertical" style={{ height: '48px' }} />}> |
| | | <div |
| | |
| | | <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">{data?.totalNum || 0}</div> |
| | | </div> |
| | | {['1', '2', '3', '6', '7', '8', '9'].includes(tabKey) && ( |
| | | <div className="workDash-item-div"> |
| | | <div className="workDash-item-title">总登记</div> |
| | | <div className="workDash-item-value">{data?.totalNum || 0}</div> |
| | | </div> |
| | | )} |
| | | {tabKey === '4' && ( |
| | | <div className="workDash-item-div"> |
| | | <div className="workDash-item-title"> |
| | | <div style={{ width: '50px' }}>总登记</div> |
| | | <div style={{ width: '36px' }}></div>{' '} |
| | | <Space split={<Divider type="vertical" />}> |
| | | <div style={{ display: 'flex', alignItems: 'center' }}> |
| | | <span className="workDash-item-title-blue"></span> |
| | | <span |
| | | style={{ |
| | | color: '#4E5969', |
| | | fontSize: '14px', |
| | | display: 'flex', |
| | | alignItems: 'center', |
| | | display: 'inline-block', |
| | | width: '150px', |
| | | }} |
| | | > |
| | | 部门排查:{data?.bmpcNum || 0}件 |
| | | </span> |
| | | <span |
| | | onClick={() => { |
| | | tabsOnchange('6'); |
| | | }} |
| | | style={{ |
| | | color: '#1A6FB8', |
| | | border: '1px solid #1A6FB8', |
| | | fontSize: '12px', |
| | | borderRadius: '2px', |
| | | padding: '0px 4px', |
| | | display: 'flex', |
| | | alignItems: 'center', |
| | | marginLeft: '12px', |
| | | }} |
| | | > |
| | | 查看 |
| | | </span> |
| | | </div> |
| | | </Space> |
| | | </div> |
| | | <div className="workDash-item-value" style={{ marginTop: '4px' }}> |
| | | <div style={{ width: '50px' }}>{data?.totalNum || 0}</div> |
| | | <div style={{ width: '36px' }}></div> |
| | | <Space split={<Divider type="vertical" />}> |
| | | <div style={{ display: 'flex', alignItems: 'center' }}> |
| | | <span className="workDash-item-title-blue"></span> |
| | | <span style={{ color: '#4E5969', fontSize: '14px', display: 'inline-block', width: '150px' }}> |
| | | 网格排查:{data?.wgpcNum || 0}件 |
| | | </span> |
| | | <span |
| | | onClick={() => { |
| | | tabsOnchange('7'); |
| | | }} |
| | | style={{ |
| | | color: '#1A6FB8', |
| | | border: '1px solid #1A6FB8', |
| | | fontSize: '12px', |
| | | borderRadius: '2px', |
| | | padding: '0px 4px', |
| | | display: 'flex', |
| | | alignItems: 'center', |
| | | marginLeft: '12px', |
| | | }} |
| | | > |
| | | 查看 |
| | | </span> |
| | | </div> |
| | | </Space> |
| | | </div> |
| | | </div> |
| | | )} |
| | | {tabKey === '5' && ( |
| | | <div className="workDash-item-div"> |
| | | <div className="workDash-item-title"> |
| | | <div style={{ width: '50px' }}>总登记</div> |
| | | <div style={{ width: '36px' }}></div>{' '} |
| | | <Space split={<Divider type="vertical" />}> |
| | | <div style={{ display: 'flex', alignItems: 'center' }}> |
| | | <span className="workDash-item-title-blue"></span> |
| | | <span |
| | | style={{ |
| | | color: '#4E5969', |
| | | fontSize: '14px', |
| | | display: 'flex', |
| | | alignItems: 'center', |
| | | display: 'inline-block', |
| | | width: '150px', |
| | | }} |
| | | > |
| | | 非警务纠纷:{data?.fjwjfNum || 0}件 |
| | | </span> |
| | | <span |
| | | onClick={() => { |
| | | tabsOnchange('8'); |
| | | }} |
| | | style={{ |
| | | color: '#1A6FB8', |
| | | border: '1px solid #1A6FB8', |
| | | fontSize: '12px', |
| | | borderRadius: '2px', |
| | | padding: '0px 4px', |
| | | display: 'flex', |
| | | alignItems: 'center', |
| | | marginLeft: '12px', |
| | | }} |
| | | > |
| | | 查看 |
| | | </span> |
| | | </div> |
| | | </Space> |
| | | </div> |
| | | <div className="workDash-item-value" style={{ marginTop: '4px' }}> |
| | | <div style={{ width: '50px' }}>{data?.totalNum || 0}</div> |
| | | <div style={{ width: '36px' }}></div> |
| | | <Space split={<Divider type="vertical" />}> |
| | | <div style={{ display: 'flex', alignItems: 'center' }}> |
| | | <span className="workDash-item-title-blue"></span> |
| | | <span style={{ color: '#4E5969', fontSize: '14px', display: 'inline-block', width: '150px' }}> |
| | | 专项纠纷:{data?.zxjfNum || 0}件 |
| | | </span> |
| | | <span |
| | | onClick={() => { |
| | | tabsOnchange('9'); |
| | | }} |
| | | style={{ |
| | | color: '#1A6FB8', |
| | | border: '1px solid #1A6FB8', |
| | | fontSize: '12px', |
| | | borderRadius: '2px', |
| | | padding: '0px 4px', |
| | | display: 'flex', |
| | | alignItems: 'center', |
| | | marginLeft: '12px', |
| | | }} |
| | | > |
| | | 查看 |
| | | </span> |
| | | </div> |
| | | </Space> |
| | | </div> |
| | | </div> |
| | | )} |
| | | </div> |
| | | <div |
| | | onClick={() => { |
| | |
| | | <div style={{ display: 'flex', alignItems: 'center' }}> |
| | | <span className="workDash-item-title-green"></span> |
| | | <span style={{ color: '#4E5969', fontSize: '14px', display: 'flex', alignItems: 'center' }}> |
| | | 化解成功:{data?.finishNum || 0}件 | 成功率:<span style={{ color: '#00B42A' }}>{((data?.finishNum*100)/(data?.finishNum+data?.failNum) || 0).toFixed(2)}%</span> |
| | | 化解成功:{data?.finishNum || 0}件 | 成功率: |
| | | <span style={{ color: '#00B42A' }}>{((data?.finishNum * 100) / (data?.finishNum + data?.failNum) || 0).toFixed(2)}%</span> |
| | | <img style={{ width: '14px', height: '14px', marginLeft: '8px' }} src={workDash_5} alt="" srcset="" /> |
| | | </span> |
| | | </div> |
| | | </Space> |
| | | </div> |
| | | <div className="workDash-item-value"> |
| | | <div style={{ width: '50px' }}>{data?.finishNum+data?.failNum || 0}</div> |
| | | <div style={{ width: '50px' }}>{data?.finishNum + data?.failNum || 0}</div> |
| | | <div style={{ width: '36px' }}></div> |
| | | <Space split={<Divider type="vertical" />}> |
| | | <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" |
| | | onClick={() => { |
| | | tabsOnchange('2'); |
| | | }} |
| | | > |
| | | <div |
| | | className="workDash-main-card-head" |
| | | onClick={() => { |
| | | tabsOnchange('2'); |
| | | }} |
| | | > |
| | | <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"> |
| | | <div className="workDash-main-card-head"> |
| | | <div |
| | | className="workDash-main-card-head-l workDash-bg_2" |
| | | onClick={() => { |
| | | tabsOnchange('3'); |
| | | }} |
| | | > |
| | | <div |
| | | className="workDash-main-card-head" |
| | | onClick={() => { |
| | | tabsOnchange('3'); |
| | | }} |
| | | > |
| | | <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"> |
| | | <div className="workDash-main-card-head"> |
| | | <div className="workDash-main-card-head" onClick={() => { |
| | | tabsOnchange('4'); |
| | | }}> |
| | | <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 |
| | | className="workDash-main-card-head-l-img-title" |
| | | onClick={() => { |
| | | tabsOnchange('4'); |
| | | }} |
| | | > |
| | | <div className="workDash-main-card-head-l-img-title"> |
| | | 详情 |
| | | </div> |
| | | </div> |
| | |
| | | </div> |
| | | |
| | | <div className="workDash-main-card"> |
| | | <div className="workDash-main-card-head"> |
| | | <div |
| | | className="workDash-main-card-head-l workDash-bg_4" |
| | | onClick={() => { |
| | | <div className="workDash-main-card-head" onClick={() => { |
| | | tabsOnchange('5'); |
| | | }} |
| | | > |
| | | }}> |
| | | <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> |
| | | )} |
| | | |
| | | {/* 公安非警务,12345,网格化 */} |
| | | {tabKey === '5' && ( |
| | | <div style={{ marginTop: '12px' }}> |
| | | <Row gutter={16}> |
| | | {/* 公安非警务 */} |
| | | <Col span={8}> |
| | | <div className="workDash-public"> |
| | | <div className="workDash-public-head"> |
| | | <div className="workDash-public-head-l"> |
| | | <div className="workDash-public-head-l-img"> |
| | | <img src={workDash_24} alt="" srcset="" /> |
| | | </div> |
| | | </div> |
| | | <div className="workDash-public-head-r"> |
| | | <div className="workDash-public-head-r-title">公安非警务</div> |
| | | <div className="workDash-public-head-r-value"> |
| | | <div className="workDash-public-head-r-value-num"> |
| | | {data?.oneSecondSource?.caseNum || 0}条 <span className="workDash-public-head-r-value-unit">(工单总数)</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div className="workDash-public-body"> |
| | | <Row gutter={[12, 8]}> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解中</div> |
| | | <div className="workDash-public-body-item-value">{data?.oneSecondSource?.resolveingNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">回退</div> |
| | | <div className="workDash-public-body-item-value">{data?.oneSecondSource?.rejectNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解成功</div> |
| | | <div className="workDash-public-body-item-value">{data?.oneSecondSource?.resolveNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解不成功</div> |
| | | <div className="workDash-public-body-item-value">{data?.oneSecondSource?.unResolveNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解成功率</div> |
| | | <div className="workDash-public-body-item-value">{data?.oneSecondSource?.resolveRate || 0}%</div> |
| | | </div> |
| | | </Col> |
| | | </Row> |
| | | </div> |
| | | </div> |
| | | </Col> |
| | | |
| | | {/* 12345 */} |
| | | <Col span={8}> |
| | | <div className="workDash-public"> |
| | | <div className="workDash-public-head"> |
| | | <div className="workDash-public-head-l"> |
| | | <div className="workDash-public-head-l-img workDash-public-head-l-img-green"> |
| | | <img src={workDash_25} alt="" srcset="" /> |
| | | </div> |
| | | </div> |
| | | <div className="workDash-public-head-r"> |
| | | <div className="workDash-public-head-r-title">12345</div> |
| | | <div className="workDash-public-head-r-value"> |
| | | <div className="workDash-public-head-r-value-num"> |
| | | {data?.twoSecondSource?.caseNum || 0}条 <span className="workDash-public-head-r-value-unit">(工单总数)</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div className="workDash-public-body"> |
| | | <Row gutter={[12, 8]}> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解中</div> |
| | | <div className="workDash-public-body-item-value">{data?.twoSecondSource?.resolveingNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">不予受理</div> |
| | | <div className="workDash-public-body-item-value">{data?.twoSecondSource?.rejectNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解成功</div> |
| | | <div className="workDash-public-body-item-value">{data?.twoSecondSource?.resolveNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解不成功</div> |
| | | <div className="workDash-public-body-item-value">{data?.twoSecondSource?.unResolveNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解成功率</div> |
| | | <div className="workDash-public-body-item-value">{data?.twoSecondSource?.resolveRate || 0}%</div> |
| | | </div> |
| | | </Col> |
| | | </Row> |
| | | </div> |
| | | </div> |
| | | </Col> |
| | | |
| | | {/* 网格化 */} |
| | | <Col span={8}> |
| | | <div className="workDash-public"> |
| | | <div className="workDash-public-head"> |
| | | <div className="workDash-public-head-l"> |
| | | <div className="workDash-public-head-l-img workDash-public-head-l-img-blue"> |
| | | <img src={workDash_26} alt="" srcset="" /> |
| | | </div> |
| | | </div> |
| | | <div className="workDash-public-head-r"> |
| | | <div className="workDash-public-head-r-title">网格化</div> |
| | | <div className="workDash-public-head-r-value"> |
| | | <div className="workDash-public-head-r-value-num"> |
| | | {data?.threeSecondSource?.caseNum || 0}条 <span className="workDash-public-head-r-value-unit">(工单总数)</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div className="workDash-public-body"> |
| | | <Row gutter={[12, 8]}> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解中</div> |
| | | <div className="workDash-public-body-item-value">{data?.threeSecondSource?.resolveingNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">不予受理</div> |
| | | <div className="workDash-public-body-item-value">{data?.threeSecondSource?.rejectNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解成功</div> |
| | | <div className="workDash-public-body-item-value">{data?.threeSecondSource?.resolveNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解不成功</div> |
| | | <div className="workDash-public-body-item-value">{data?.threeSecondSource?.unResolveNum || 0}条</div> |
| | | </div> |
| | | </Col> |
| | | <Col span={12}> |
| | | <div className="workDash-public-body-item"> |
| | | <div className="workDash-public-body-item-title">化解成功率</div> |
| | | <div className="workDash-public-body-item-value">{data?.threeSecondSource?.resolveRate || 0}%</div> |
| | | </div> |
| | | </Col> |
| | | </Row> |
| | | </div> |
| | | </div> |
| | | </Col> |
| | | </Row> |
| | | </div> |
| | | )} |
| | | |
| | | {/* 纠纷类型 化解状况 事项等级 */} |
| | | {tabKey !== '1' && ( |
| | | <div style={{ marginTop: '12px', width: '100%' }}> |
| | |
| | | style={{ position: 'absolute', zIndex: '1000', alignItems: 'center', justifyContent: 'space-between', width: '100%' }} |
| | | className="big-green-main-title-display" |
| | | > |
| | | <div className="disputeLedger-green-title">化解统计</div> |
| | | <div className="disputeLedger-green-title">化解统计{tabKey !== '1' && `(${tabKeyTitles(tabKey)})`}</div> |
| | | <div style={{ paddingRight: '24px' }}> |
| | | <Select |
| | | style={{ width: '180px' }} |
| | |
| | | </Option> |
| | | ))} |
| | | </Select> |
| | | <Button type="outline" onClick={downloadAreaXls}> |
| | | <Button style={{ marginLeft: '12px' }} type="outline" onClick={downloadAreaXls}> |
| | | 导出 |
| | | </Button> |
| | | </div> |
| | |
| | | <div className="workDash-main-flex_1" style={{ marginBottom: '12px' }}> |
| | | <div className="big-green-main-title-display-table"> |
| | | <div className="disputeLedger-green-title" style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}> |
| | | <div>实时动态</div> |
| | | <div>实时动态{tabKey !== '1' && `(${tabKeyTitles(tabKey)})`}</div> |
| | | {/* 导出 */} |
| | | <Button type="outline" onClick={downloadXls}> |
| | | 导出 |
| | |
| | | background-color: #f53f3f; |
| | | margin-right: 8px; |
| | | } |
| | | &-blue { |
| | | display: inline-block; |
| | | width: 8px; |
| | | height: 8px; |
| | | border-radius: 50%; |
| | | background-color: #1A6FB8; |
| | | margin-right: 8px; |
| | | } |
| | | } |
| | | &-value { |
| | | color: #1d2129; |
| | |
| | | } |
| | | } |
| | | &-r { |
| | | cursor: pointer; |
| | | background: linear-gradient(271deg, #13c2c2 0%, rgba(5, 174, 174, 0.8) 14%); |
| | | color: #fff; |
| | | display: flex; |
| | |
| | | color: #1a6fb8 !important; |
| | | } |
| | | } |
| | | .source-button1 { |
| | | cursor: pointer; |
| | | border: 1px solid #c9cdd4 !important; |
| | | border-radius: 4px !important; |
| | | padding: 8px 16px !important; |
| | | display: flex !important; |
| | | align-items: center !important; |
| | | height: 38px !important; |
| | | width: 126px !important; |
| | | color: #1d2129 !important; |
| | | gap: 8px !important; |
| | | &-color { |
| | | background-color: rgba(182, 221, 241, 0.48) !important; |
| | | color: #1a6fb8 !important; |
| | | } |
| | | } |
| | | |
| | | .source-icon { |
| | | cursor: pointer; |