| | |
| | | /* |
| | | * @Author: dminyi 1301963064@qq.com |
| | | * @Date: 2024-09-08 15:14:12 |
| | | * @LastEditors: dminyi 1301963064@qq.com |
| | | * @LastEditTime: 2024-09-10 23:36:06 |
| | | * @LastEditors: lwh |
| | | * @LastEditTime: 2024-09-13 10:35:03 |
| | | * @FilePath: \gzDyh\gz-customerSystem\src\views\register\index.jsx |
| | | * @Description: 工作台 |
| | | */ |
| | | import React, { useEffect, useState, useRef } from 'react'; |
| | | import { useNavigate } from 'react-router-dom'; |
| | | import { tab1, tab2, tab3, tab4, tab5, tab6, visitInto, checkInto } from '@/assets/images' |
| | | import { tab1, tab2, tab3, tab4, tab5, tab6 } from '@/assets/images' |
| | | import TableView from '../../components/TableView'; |
| | | import { Space } from 'antd'; |
| | | import { Tabs, Typography, Radio } from '@arco-design/web-react'; |
| | | import { Tabs, Typography, Radio, Form, Input, DatePicker, Button, Grid, Modal } from '@arco-design/web-react'; |
| | | import * as $$ from '@/utils/utility'; |
| | | import './index.less'; |
| | | |
| | | |
| | | const FormItem = Form.Item; |
| | | const TabPane = Tabs.TabPane; |
| | | const { RangePicker } = DatePicker; |
| | | const Row = Grid.Row; |
| | | const Col = Grid.Col; |
| | | |
| | | //工作总览数据 |
| | | function getCountListApi(data) { |
| | |
| | | return $$.ax.request({ url: `caseTask/pageMyTaskDb`, type: 'get', service: 'mediate', data }); |
| | | } |
| | | |
| | | |
| | | //签收 |
| | | //签收接口 |
| | | function signApi(data) { |
| | | return $$.ax.request({ url: `caseTask/sign`, type: 'post', service: 'mediate', data }); |
| | | } |
| | | |
| | | const VisitWorkBench = () => { |
| | | const navigate = useNavigate(); |
| | | const formRef = useRef(); |
| | | |
| | | // 静态数据 |
| | | //分派表头 |
| | |
| | | title: '流转时间', |
| | | dataIndex: 'turnaroundTime', |
| | | key: 'turnaroundTime', |
| | | width: 100, |
| | | width: 150, |
| | | }, |
| | | { |
| | | title: '分派时限', |
| | |
| | | title: '流转时间', |
| | | dataIndex: 'turnaroundTime', |
| | | key: 'turnaroundTime', |
| | | width: 100, |
| | | width: 150, |
| | | }, |
| | | { |
| | | title: '签收时限', |
| | |
| | | title: '事项等级', |
| | | dataIndex: 'caseGrade', |
| | | key: 'caseGrade', |
| | | width: 80, |
| | | width: 100, |
| | | }, |
| | | { |
| | | title: '事项来源', |
| | |
| | | title: '流转时间', |
| | | dataIndex: 'turnaroundTime', |
| | | key: 'turnaroundTime', |
| | | width: 100, |
| | | width: 150, |
| | | }, |
| | | { |
| | | title: '受理时限', |
| | |
| | | title: '事项等级', |
| | | dataIndex: 'caseGrade', |
| | | key: 'caseGrade', |
| | | width: 80, |
| | | width: 100, |
| | | }, |
| | | { |
| | | title: '事项来源', |
| | |
| | | }, |
| | | { |
| | | title: '回退部门', |
| | | dataIndex: 'backUnit', |
| | | key: 'backUnit', |
| | | dataIndex: 'organizingUnit', |
| | | key: 'organizingUnit', |
| | | width: 150, |
| | | }, |
| | | { |
| | |
| | | title: '化解结果', |
| | | dataIndex: 'mediResult', |
| | | key: 'mediResult', |
| | | width: 80, |
| | | width: 100, |
| | | }, |
| | | { |
| | | title: '无法化解理由', |
| | |
| | | }, |
| | | tabList: [ |
| | | { |
| | | value: '0', |
| | | value: '2', |
| | | label: '办理中', |
| | | columns: [ |
| | | { |
| | | title: '流转时间', |
| | | dataIndex: 'turnaroundTime', |
| | | key: 'turnaroundTime', |
| | | width: 100, |
| | | width: 150, |
| | | }, |
| | | { |
| | | title: '已办天数', |
| | |
| | | ] |
| | | }, |
| | | { |
| | | value: '1', |
| | | value: '0', |
| | | label: '结案申请', |
| | | columns: [ |
| | | { |
| | | title: '结案申请时间', |
| | | dataIndex: 'turnaroundTime', |
| | | key: 'turnaroundTime', |
| | | width: 180, |
| | | width: 150, |
| | | }, |
| | | { |
| | | title: '事项等级', |
| | |
| | | title: '化解结果', |
| | | dataIndex: 'mediResult', |
| | | key: 'mediResult', |
| | | width: 180, |
| | | width: 100, |
| | | }, |
| | | { |
| | | title: '申请方', |
| | |
| | | ] |
| | | }, |
| | | { |
| | | value: '2', |
| | | value: '1', |
| | | label: '已结案', |
| | | columns: [ |
| | | { |
| | |
| | | render: (text, record) => ( |
| | | <Space style={{ color: '#1A6FB8' }}> |
| | | <div onClick={() => navigate(`/mediate/visit/fileMessage?caseTaskId=${record.ownerId}&caseId=${record.caseId}`)} style={{ cursor: 'pointer' }}>详情</div> |
| | | <div onClick={() => navigate(`/mediate/visit/handleFeedback?caseTaskId=${record.ownerId}&caseId=${record.caseId}`)} style={{ cursor: 'pointer' }}>审核</div> |
| | | <div onClick={() => navigate(`/mediate/visit/closingReview?caseTaskId=${record.ownerId}&caseId=${record.caseId}`)} style={{ cursor: 'pointer' }}>审核</div> |
| | | </Space> |
| | | ), |
| | | }]), |
| | |
| | | title: '督办时间', |
| | | dataIndex: 'turnaroundTime', |
| | | key: 'turnaroundTime', |
| | | width: 100, |
| | | width: 150, |
| | | }, |
| | | { |
| | | title: '回复时限', |
| | |
| | | title: '督办部门', |
| | | dataIndex: 'caseGrade', |
| | | key: 'caseGrade', |
| | | width: 80, |
| | | width: 110, |
| | | }, |
| | | { |
| | | title: '督办意见', |
| | |
| | | title: '督办部门', |
| | | dataIndex: 'caseGrade', |
| | | key: 'caseGrade', |
| | | width: 80, |
| | | width: 110, |
| | | }, |
| | | { |
| | | title: '督办意见', |
| | |
| | | sortColmn: 1, |
| | | }) |
| | | const [total, setTotal] = useState(0);//表格数据总数量 |
| | | const [loading, setLoading] = useState(false);//表格loading |
| | | const [selectedRowKeys, setSelectedRowKeys] = useState([]);//批量签收的id |
| | | const [selectedRows, setSelectedRows] = useState([]);//批量签收的数据 |
| | | |
| | | useEffect(() => { |
| | | getCountData(); |
| | |
| | | getTableData(tabActivekey) |
| | | }, [searchData, pageData]) |
| | | |
| | | const sign = async (caseId, ownerId) => { |
| | | const res = await signApi({ caseId: caseId, caseTaskId: ownerId }) |
| | | //批量选择 |
| | | const onSelectChange = (newSelectedRowKeys, selectedRows) => { |
| | | setSelectedRowKeys(newSelectedRowKeys); |
| | | setSelectedRows(selectedRows) |
| | | } |
| | | |
| | | //签收 |
| | | const handleSign = async (caseId, ownerId) => { |
| | | const res = await signApi([{ caseId: caseId, caseTaskId: ownerId }]) |
| | | if (res.type) { |
| | | $$.infoSuccess({ content: '签收成功' }); |
| | | getCountData(); |
| | | getTableData(tabActivekey) |
| | | navigate(`/mediate/visit/eventFlow?caseTaskId=${ownerId}&caseId=${caseId}`) |
| | | } |
| | | } |
| | | |
| | | const handleSign = (caseId, ownerId) => { |
| | | sign(caseId, ownerId) |
| | | } |
| | | |
| | | //获取表格数据汇总 |
| | | const getTableData = async (type) => { |
| | | setLoading(true) |
| | | let res |
| | | switch (type) { |
| | | case '1'://待分派 |
| | |
| | | break; |
| | | case '4'://办理中 |
| | | const { status, ...most } = searchData |
| | | if (status && status === '0') { |
| | | if (status && status === '2') { |
| | | res = await pageMyTaskBlzApi({ |
| | | ...pageData, |
| | | ...most |
| | |
| | | break; |
| | | } |
| | | if (res.type) { |
| | | setLoading(false) |
| | | const { data } = res |
| | | setTableData(data?.content) |
| | | setTotal(data.totalElements) |
| | |
| | | status: '0', |
| | | type: 1 |
| | | }) |
| | | } else if (key == '4' || key == '6') { |
| | | } else if (key == '4') { |
| | | setSearchData({ |
| | | sortType: 1, |
| | | sortColmn: 1, |
| | | status: '2', |
| | | }) |
| | | } else if (key == '6') { |
| | | setSearchData({ |
| | | sortType: 1, |
| | | sortColmn: 1, |
| | |
| | | } |
| | | setTabActivekey(key); |
| | | setTableTab(data.tabList) |
| | | getCountData(); |
| | | } |
| | | |
| | | //获取工作总览数据 |
| | | const getCountData = async () => { |
| | | const res = await getCountListApi() |
| | | if (res.type) { |
| | | const data = res.data |
| | | const data = res.data || {}; |
| | | setCountData(data) |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | //查询 |
| | | const handleSubmit = () => { |
| | | const data = formRef.current.getFieldsValue(); |
| | | const { time, ...rest } = data |
| | | setSearchData({ |
| | | ...searchData, |
| | | timeStart: time ? time[0] : '', |
| | | timeEnd: time ? time[1] : '', |
| | | ...rest |
| | | }) |
| | | } |
| | | |
| | | //批量签收 |
| | | const handleBatchQs = () => { |
| | | console.log(selectedRows); |
| | | const paramsList = selectedRows.map(item => { |
| | | return { |
| | | caseId: item.caseId, |
| | | caseTaskId: item.ownerId |
| | | } |
| | | }) |
| | | Modal.confirm({ |
| | | title: '签收确认', |
| | | content: '确认批量签收?', |
| | | onOk: async () => { |
| | | const res = await signApi(paramsList) |
| | | if (res.type) { |
| | | $$.infoSuccess({ content: '批量签收成功成功!' }); |
| | | getCountData(); |
| | | getTableData(tabActivekey) |
| | | } |
| | | }, |
| | | }); |
| | | } |
| | | |
| | | const rowSelection = { |
| | | selectedRowKeys: selectedRowKeys, |
| | | onChange: onSelectChange, |
| | | } |
| | | |
| | | return ( |
| | | <div className='VisitWorkBench'> |
| | | <div className='VisitWorkBench' > |
| | | <div className='VisitWorkBench-top'> |
| | | <span style={{ fontWeight: 600 }}>工作总览</span> |
| | | <div className='VisitWorkBench-top-list'> |
| | |
| | | } |
| | | </div> |
| | | </div> |
| | | <div className='VisitWorkBench-middle'> |
| | | <div |
| | | className='VisitWorkBench-middle' |
| | | onKeyUp={(e) => { |
| | | if (e.key === 'Enter') { |
| | | handleSubmit() |
| | | } |
| | | }} |
| | | > |
| | | <Tabs |
| | | activeTab={searchData.status} |
| | | onChange={handleColumnType} |
| | |
| | | </span> |
| | | } |
| | | > |
| | | <Typography.Paragraph key={item.value}> |
| | | {tabActivekey == 5 && |
| | | <Typography.Paragraph key={tabActivekey + item.value}> |
| | | {tabActivekey == '5' && |
| | | <Radio.Group |
| | | type='button' |
| | | value={searchData.type} |
| | |
| | | /> |
| | | } |
| | | <TableView |
| | | columns={tabActivekey == 5 ? item.columnsMap[searchData.type] : item.columns} |
| | | rowSelection={tabActivekey == '2' && item.value === '1' ? rowSelection : null} |
| | | columns={tabActivekey == '5' ? item.columnsMap[searchData.type] : item.columns} |
| | | dataSource={tableData} |
| | | size="small" |
| | | rowKey="caseId" |
| | | bordered={true} |
| | | isScroll={true}//兼容以前的,当需要表格竖向滚动,请设置这个 |
| | | scroll={{ |
| | | x: 1300 |
| | | }} |
| | | offsetHeight={153} |
| | | offsetHeight={161} |
| | | loading={loading} |
| | | pagination={{ |
| | | current: pageData.page, |
| | | pageSize: pageData.size, |
| | |
| | | }} |
| | | /> |
| | | </Typography.Paragraph> |
| | | { |
| | | (tabActivekey == '2' && item.value === '1') && <div className='VisitWorkBench-middle-select'> |
| | | <span>已选{selectedRowKeys.length}项</span> |
| | | <span className='linkBtnColor' onClick={() => { |
| | | setSelectedRowKeys([]) |
| | | setSelectedRows([]) |
| | | }}>取消</span> |
| | | <span className='linkBtnColor' onClick={handleBatchQs}>批量签收</span> |
| | | </div> |
| | | } |
| | | </TabPane> |
| | | })} |
| | | </Tabs> |
| | | <div className='VisitWorkBench-middle-search'> |
| | | <Form |
| | | ref={formRef} |
| | | layout="vertical" |
| | | > |
| | | <div style={{ display: 'flex' }}> |
| | | <FormItem |
| | | label=' ' |
| | | field='time' |
| | | > |
| | | <RangePicker |
| | | style={{ width: '100%' }} |
| | | format='YYYY-MM-DD HH:mm' |
| | | showTime={true} |
| | | /> |
| | | </FormItem> |
| | | <FormItem |
| | | label=' ' |
| | | field='partyName' |
| | | > |
| | | <Input |
| | | allowClear |
| | | placeholder='查询申请方/被申请方关键词' |
| | | /> |
| | | </FormItem> |
| | | <Button |
| | | type="primary" |
| | | className="dialogPrimary" |
| | | onClick={handleSubmit} |
| | | > |
| | | 查询 |
| | | </Button> |
| | | </div> |
| | | </Form> |
| | | </div> |
| | | </div> |
| | | <div className='VisitWorkBench-bottom'> |
| | | 群众来访接待 |
| | | <div style={{ display: 'flex', justifyContent: 'space-evenly', gap: '24px', marginTop: '16px' }}> |
| | | <div className='bottomTab1' style={{ cursor: 'pointer' }}> |
| | | <div className='VisitWorkBench-bottom-title' onClick={() => { navigate(`/mediate/visit`) }} style={{ color: '#206BCD' }}>大厅来访</div> |
| | | <div className='bottomTab1' onClick={() => navigate(`/mediate/visit`)}> |
| | | <div className='VisitWorkBench-bottom-title' style={{ color: '#206BCD' }}>大厅来访</div> |
| | | {/* <img src={visitInto} alt='' className='VisitWorkBench-bottom-img' /> */} |
| | | </div> |
| | | <div className='bottomTab2' style={{ cursor: 'pointer' }}> |
| | | <div className='bottomTab2' onClick={() => navigate(`/mediate/selfInspection`)}> |
| | | <div className='VisitWorkBench-bottom-title' style={{ color: '#D46B08' }}>自行排查</div> |
| | | {/* <img src={checkInto} alt='' className='VisitWorkBench-bottom-img' /> */} |
| | | </div> |