董国庆
2025-03-17 3fdfaf5caad7eb780afc0fd7c80beac6cf69e88a
Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/H5/threeSide
7个文件已修改
1个文件已添加
363 ■■■■■ 已修改文件
management/config/env.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/components/RightContent/AvatarDropdown.tsx 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/pages/appeal-management/detail.jsx 243 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/pages/appeal-management/index.jsx 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/pages/appeal-management/index.less 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/pages/appeal-management/service.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/pages/setting/career/index.jsx 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/utils/utils.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/config/env.ts
@@ -1,7 +1,7 @@
export default {
  dev: {
    // SERVER_URL: 'http://192.168.110.188:6194',
    SERVER_URL: 'https://huacheng.psciio.com',
    SERVER_URL: 'http://192.168.110.188:6194',
    // SERVER_URL: 'https://huacheng.psciio.com',
  },
  test: {
    SERVER_URL: '',
management/src/components/RightContent/AvatarDropdown.tsx
@@ -27,13 +27,13 @@
  const [unreadCount, setUnreadCount] = useState(0);
  const { currentUser } = initialState || {};
  useEffect(() => {
    const timer = setInterval(() => {
      getUnreadCount().then((res: any) => {
        setUnreadCount(res.data || 0);
      });
    }, 1000 * 5)
    // const timer = setInterval(() => {
    //   getUnreadCount().then((res: any) => {
    //     setUnreadCount(res.data || 0);
    //   });
    // }, 1000 * 5)
    return () => clearInterval(timer);
    // return () => clearInterval(timer);
  }, []);
management/src/pages/appeal-management/detail.jsx
@@ -1,189 +1,217 @@
import { buildProTableDataSource, sendRequest, showDelConfirm } from '@/utils/antdUtils';
import { PageContainer, ProTable } from '@ant-design/pro-components';
import { Button, Card, Select, Space, Descriptions, Divider, Steps, message } from 'antd';
import { useRef, useState } from 'react';
import { Access, useAccess, history } from 'umi';
// import { add, edit, del, getList } from './service';
import { useRef, useState, useEffect } from 'react';
import { Access, useAccess } from 'umi'
import { history, useLocation } from "@umijs/max"
import { getDetail } from './service';
import moment from 'moment';
import './index.less';
import {downLoad } from '@/utils/utils';
const Account = () => {
    const actionRef = useRef();
    const addViewRef = useRef();
    const [current, setCurrent] = useState(0);
    const [detail, setDetail] = useState({});
    const searchParams = new URLSearchParams(useLocation().search);
    const id = searchParams.get('id');
    useEffect(() => {
        getDetail({ id: id }).then((res) => {
            setDetail(res.data);
        });
    }, []);
    const items = [
        {
            key: '1',
            label: '述求状态',
            children: 'Zhou Maomao',
            children: ['正在办理', '延期办理', '超时办理', '已办结', '已办结', '上报待审核', '上报待审核'][detail.status],
        },
        {
            key: '2',
            label: '述求号',
            children: '1810000000',
            children: detail.serialNumber,
        },
        {
            key: '3',
            label: '处理状态',
            children: 'Pending',
            label: '',
            children: '',
        },
        {
            key: '4',
            label: '处理进度',
            children: 'In Progress',
            label: '',
            children: '',
        },
        {
            key: '5',
            label: '发生时间',
            children: 'Hangzhou, Zhejiang',
            children: moment(detail.time).format('YYYY-MM-DD HH:mm:ss'),
        },
        {
            key: '6',
            label: '问题类型',
            children: 'empty',
            children: detail.problemType,
        },
        {
            key: '7',
            label: '群众姓名',
            children: '张三',
            children: detail.name,
        },
        {
            key: '8',
            label: '联系电话',
            children: '13800138000',
            children: detail.contactNumber,
        },
        {
            key: '9',
            label: '发生地点',
            children: 'Hangzhou, Zhejiang',
            children: detail.location,
        },
        {
            key: '10',
            label: '详细地址',
            children: 'empty',
            children: detail.detailedAddress,
        },
        {
            key: '11',
            label: '录入人',
            children: '张三',
            children: detail.reportUserName,
        },
        {
            key: '12',
            label: '联系电话',
            children: '13800138000',
            children: detail.reportUserPhone,
        },
        {
            key: '13',
            label: '问题描述',
            children: '这是一段问题描述文字',
            children: detail.descriptionContent,
            span: 4,
        },
        {
            key: '14',
            label: '上传图片',
            children: <>
                <img width={80} height={80} src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" alt="example" />
                {detail.images && (detail.images || '').split(',').map((item, index) => (
                    <image width={80} height={80} src={item} key={index} alt="example" />
                ))}
            </>,
            span: 4,
        },
        {
            key: '15',
            label: '上传视频',
            children: <><video width={280} src="https://www.w3schools.com/html/mov_bbb.mp4" controls></video></>,
            children: <>
                {detail.videos && (detail.videos || '').split(',').map((item, index) => (
                    <video width={280} src={item} key={index} controls></video>
                ))}
            </>,
            span: 4,
        },
    ];
    const items1 = [
        {
            key: 'First',
            title: 'First-content',
        },
        {
            key: 'Second',
            title: 'Second-content',
        },
        {
            key: 'Last',
            title: 'Last-content',
        },
    ];
    return (
        <div>
            <PageContainer header={{ breadcrumb: {} }} title="述求详情" >
            <PageContainer className={'appeal-management-detail'} header={{ breadcrumb: {} }} title="述求详情" >
                <Card>
                    <Descriptions column={4} title="基础信息" items={items} />
                    <Divider />
                    <Descriptions title="办理进度" column={1} >
                        <Descriptions.Item>
                            <Card style={{ width: '800px' }} title={'张三'} extra={'2021-01-01 15:00:00'}>
                                <Descriptions column={1} >
                                    <Descriptions.Item>
                                        这是办理进度说明这是办理进度说明这是办理进度说明这是办理进度说明这是办理进度说明
                                    </Descriptions.Item>
                                    <Descriptions.Item label={'上传图片'}>
                                        <img width={80} height={80} src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" alt="example" />
                                    </Descriptions.Item>
                                    <Descriptions.Item label={'上传视频'}>
                                        <video width={280} src="https://www.w3schools.com/html/mov_bbb.mp4" controls></video>
                                    </Descriptions.Item>
                                </Descriptions>
                            </Card>
                        </Descriptions.Item>
                    </Descriptions>
                    <div>
                        <Descriptions title="办理进度" column={1}>
                            {detail.complaintProgresses?.length > 0 ? detail.complaintProgresses.map((item, index) => (
                                <Descriptions.Item key={index}>
                                    <Card style={{ width: '800px' }} title={item.createByName} extra={moment(item.createTime).format('YYYY-MM-DD HH:mm:ss')}>
                                        <Descriptions column={1} >
                                            <Descriptions.Item>
                                                {item.describe}
                                            </Descriptions.Item>
                                            <Descriptions.Item label={'上传图片'}>
                                                {item.imgUrl && (item.imgUrl || '').split(',').map((item, index) => (
                                                    <img width={80} style={{ marginRight: '10px' }} height={80} src={item} key={index} alt="example" />
                                                ))}
                                            </Descriptions.Item>
                                            <Descriptions.Item label={'上传视频'}>
                                                {item.videoUrl && (item.videoUrl || '').split(',').map((item, index) => (
                                                    <video width={280} style={{ marginRight: '10px' }} src={item} key={index} controls></video>
                                                ))}
                                            </Descriptions.Item>
                                        </Descriptions>
                                    </Card>
                                </Descriptions.Item>
                            )) : <Descriptions.Item span={4} >暂无办理进度</Descriptions.Item>}
                        </Descriptions>
                    </div>
                    <Divider />
                    <Descriptions title="述求流转" >
                    {detail.complaintFlows?.length > 0 && <><Descriptions title="述求流转" >
                        <Descriptions.Item span={4}>
                            <div style={{ width: '100%', overflowX: 'auto' }}   >
                                <Steps current={current} items={items1} />
                                <Steps size="small"  >
                                    {detail.complaintFlows && detail.complaintFlows.map((item, index) => (
                                        <Steps.Item status={'process'} key={index} title={item.name} description={<span>{item.type == 1 ? '下派' : '上报'} <span>{moment(item.createTime).format('YYYY-MM-DD HH:mm:ss')}</span> </span>} />
                                    ))}
                                </Steps>
                            </div>
                        </Descriptions.Item>
                    </Descriptions>
                    <Divider />
                    <Descriptions title="办结情况" >
                        <Descriptions.Item span={4}>
                            <Card style={{ width: '800px' }} extra={<div style={{ width: '750px', display: 'flex', justifyContent: 'space-between' }}>
                                <span>办结时间:2021-01-01 15:00:00</span>
                                <span>办结人员:张三</span>
                                <span>联系电话:13588888888</span>
                            </div>}>
                                <Descriptions column={1} >
                                    <Descriptions.Item>
                                        这是办理进度说明这是办理进度说明这是办理进度说明这是办理进度说明这是办理进度说明
                                    </Descriptions.Item>
                                    <Descriptions.Item label={'上传图片'}>
                                        <img width={80} height={80} src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" alt="example" />
                                    </Descriptions.Item>
                                    <Descriptions.Item label={'上传视频'}>
                                        <video width={280} src="https://www.w3schools.com/html/mov_bbb.mp4" controls></video>
                                    </Descriptions.Item>
                                </Descriptions>
                            </Card>
                        </Descriptions.Item>
                    </Descriptions>
                    <Descriptions title="办结评价" style={{ marginTop: '20px' }} >
                        <Descriptions.Item span={4}>
                            <Card style={{ width: '800px' }} extra={<div style={{ width: '750px', display: 'flex', justifyContent: 'flex-start' }}>
                                <span>评价打分:满意</span>
                            </div>}>
                                <Descriptions column={1} >
                                    <Descriptions.Item>
                                        这是评价内容这是评价内容这是评价内容这是评价内容这是评价内容
                                    </Descriptions.Item>
                                    <Descriptions.Item label={'上传图片'}>
                                        <img width={80} height={80} src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" alt="example" />
                                    </Descriptions.Item>
                                    <Descriptions.Item label={'上传视频'}>
                                        <video width={280} src="https://www.w3schools.com/html/mov_bbb.mp4" controls></video>
                                    </Descriptions.Item>
                                </Descriptions>
                            </Card>
                        </Descriptions.Item>
                    </Descriptions>
                        <Divider /></>}
                    {[3, 4].includes(detail.status) &&
                        <Descriptions title="办结情况" >
                            <Descriptions.Item span={4}>
                                <Card style={{ width: '800px' }} extra={<div style={{ width: '750px', display: 'flex', justifyContent: 'space-between' }}>
                                    <span>办结时间:{moment(detail.completionTime).format('YYYY-MM-DD HH:mm:ss')}</span>
                                    <span>办结人员:{detail.completionUsername}</span>
                                    <span>联系电话:{detail.completionUserPhone}</span>
                                </div>}>
                                    <Descriptions column={1} >
                                        <Descriptions.Item>
                                            {detail.completionDescription}
                                        </Descriptions.Item>
                                        <Descriptions.Item label={'上传图片'}>
                                            {detail.completionImages && detail.completionImages.split(',').map((item, index) => (
                                                <img width={80} height={80} style={{ marginRight: '10px' }} src={item} key={index} alt="example" />
                                            ))}
                                        </Descriptions.Item>
                                        <Descriptions.Item label={'上传视频'}>
                                            {detail.completionVideos && detail.completionVideos.split(',').map((item, index) => (
                                                <video width={280} style={{ marginRight: '10px' }} src={item} key={index} controls></video>
                                            ))}
                                        </Descriptions.Item>
                                    </Descriptions>
                                </Card>
                            </Descriptions.Item>
                        </Descriptions>}
                    {detail.complaintComment &&
                        <Descriptions title="办结评价" style={{ marginTop: '20px' }} >
                            <Descriptions.Item span={4}>
                                <Card style={{ width: '800px' }} extra={<div style={{ width: '750px', display: 'flex', justifyContent: 'flex-start' }}>
                                    <span>评价打分:{['不满意', '一般', '满意', '非常满意'][detail.complaintComment?.rate]}</span>
                                </div>}>
                                    <Descriptions column={1} >
                                        <Descriptions.Item>
                                            {detail.complaintComment?.content}
                                        </Descriptions.Item>
                                        <Descriptions.Item label={'上传图片'}>
                                            {detail.complaintComment?.imgUrl && detail.complaintComment?.imgUrl.split(',').map((item, index) => (
                                                <img width={80} height={80} style={{ marginRight: '10px' }} src={item} key={index} alt="example" />
                                            ))}
                                        </Descriptions.Item>
                                        <Descriptions.Item label={'上传视频'}>
                                            {detail.complaintComment?.videoUrl && detail.complaintComment?.videoUrl.split(',').map((item, index) => (
                                                <video width={280} style={{ marginRight: '10px' }} src={item} key={index} controls></video>
                                            ))}
                                        </Descriptions.Item>
                                    </Descriptions>
                                </Card>
                            </Descriptions.Item>
                        </Descriptions>
                    }
                    <div style={{ marginTop: '20px', display: 'flex', justifyContent: 'center' }}>
                        <Button onClick={() => {
                        <Button onClick={() => {
                            try {
                                history.go(-1);
                            } catch (error) {
@@ -191,26 +219,29 @@
                                console.error('Navigation error:', error);
                            }
                        }} style={{ marginRight: '20px' }}  >关闭</Button>
                        <Button type="primary" onClick={() => {
                        <Button type="primary" onClick={() => {
                            try {
                                downLoad(`/api/huacheng-sangeshenbian/complaint/download-file/${id}/1`, '社区问题单导出.docx');
                                // TODO: Implement export functionality
                                message.success('导出成功');
                            } catch (error) {
                                message.error('导出失败,请重试');
                                console.error('Export error:', error);
                            }
                        }}  style={{ marginRight: '20px' }}>社区问题单导出</Button>
                        <Button type="primary" onClick={() => {
                            try {
                        }} style={{ marginRight: '20px' }}>社区问题单导出</Button>
                        <Button type="primary" onClick={() => {
                                try {
                                downLoad(`/api/huacheng-sangeshenbian/complaint/download-file/${id}/2`, '问题处理单导出.docx');
                                // TODO: Implement export functionality
                                message.success('导出成功');
                            } catch (error) {
                                message.error('导出失败,请重试');
                                console.error('Export error:', error);
                            }
                        }}  style={{ marginRight: '20px' }}>问题处理单导出</Button>
                        <Button type="primary" onClick={() => {
                        }} style={{ marginRight: '20px' }}>问题处理单导出</Button>
                        <Button type="primary" onClick={() => {
                            try {
                                downLoad(`/api/huacheng-sangeshenbian/complaint/download-file/${id}/3`, '协调通知单导出.docx');
                                // TODO: Implement export functionality
                                message.success('导出成功');
                            } catch (error) {
@@ -220,7 +251,7 @@
                        }} >协调通知到导出</Button>
                    </div>
                </Card>
            </PageContainer>
        </div>
management/src/pages/appeal-management/index.jsx
@@ -2,23 +2,26 @@
import { PageContainer, ProTable } from '@ant-design/pro-components';
import { Button, InputNumber, Select, Space } from 'antd';
import { useRef, useState } from 'react';
import { Access, useAccess } from 'umi';
import { Access, useAccess,history } from 'umi';
import moment from 'moment';
import { getList } from './service';
import { exportExcell,downLoad } from '@/utils/utils';
// import { add, edit, del, getList } from './service';
const Account = () => {
    const actionRef = useRef();
    const addViewRef = useRef();
    const [modalVisible, handleModalVisible] = useState(false);
    const access = useAccess();
    const formRef = useRef();
    const columns = [
        {
            title: '录入人',
            dataIndex: 'name',
            dataIndex: 'reportUserName',
        },
        {
            title: '录入联系方式',
            dataIndex: 'name',
            dataIndex: 'reportUserPhone',
        },
        {
            title: '群众姓名',
@@ -26,29 +29,29 @@
        },
        {
            title: '群众联系方式',
            dataIndex: 'name',
            dataIndex: 'contactNumber',
        },
        {
            title: '发生时间',
            dataIndex: 'name',
            dataIndex: 'time',
            valueType:'dateRange',
            render: (text, record) => {
                return record.time ? moment(record.time).format('YYYY-MM-DD HH:mm:ss') : '';
            }
        },
        {
            title: '问题类型',
            dataIndex: 'name',
            valueEnum: {
                1: '正常',
                2: '冻结',
            },
            dataIndex: 'problemType',
        },
        {
            title: '状态',
            dataIndex: 'name',
            dataIndex: 'status',
            valueEnum: {
                1: '上报待审核',
                2: '正在办理',
                0: '正在办理',
                1: '延期办理',
                2: '超时办理',
                3: '已办结',
                4:'延期办理',
                5:'超时办理'
                4: '上报待审核',
            },
        },
        {
@@ -63,49 +66,46 @@
                                <Button
                                    type="link"
                                    onClick={() => {
                                        history.push('/appeal-management/detail')
                                        history.push('/appeal-management/detail?id=' + record.id)
                                    }}
                                >
                                    查看详情
                                </Button>
                            </Access>
                        }
                       {
                        {
                            !record.admin &&
                            <Access accessible={access['/system_setting/position_management/edit']}>
                                <Button
                                    type="link"
                                    onClick={() => {
                                        addViewRef.current.refreshData(record);
                                        handleModalVisible(true);
                                        downLoad(`/api/huacheng-sangeshenbian/complaint/download-file/${record.id}/1`, '社区问题单导出.docx');
                                    }}
                                >
                                    社区问题单导出
                                </Button>
                            </Access>
                        }
                         {
                        {
                            !record.admin &&
                            <Access accessible={access['/system_setting/position_management/edit']}>
                                <Button
                                    type="link"
                                    onClick={() => {
                                        addViewRef.current.refreshData(record);
                                        handleModalVisible(true);
                                        downLoad(`/api/huacheng-sangeshenbian/complaint/download-file/${record.id}/2`, '问题处理单导出.docx');
                                    }}
                                >
                                    问题处理单导出
                                </Button>
                            </Access>
                        }
                         {
                        {
                            !record.admin &&
                            <Access accessible={access['/system_setting/position_management/edit']}>
                                <Button
                                    type="link"
                                    onClick={() => {
                                        addViewRef.current.refreshData(record);
                                        handleModalVisible(true);
                                        downLoad(`/api/huacheng-sangeshenbian/complaint/download-file/${record.id}/3`, '协调通知单导出.docx');
                                    }}
                                >
                                    协调通知单导出
@@ -121,13 +121,26 @@
        <div>
            <PageContainer header={{
                breadcrumb: {},
            }}>
            }}
            title={'诉求管理'}
            >
                <ProTable
                    rowKey="id"
                    actionRef={actionRef}
                    columns={columns}
                    pagination={false}
                    formRef={formRef}
                    request={async (params) => {
                        if(params.time && params.time.length > 0) {
                            params.startTime =moment(params.time[0]).format('YYYY-MM-DD HH:mm:ss');
                            params.endTime = moment(params.time[1]).format('YYYY-MM-DD HH:mm:ss');
                            delete params.time
                        }else{
                            delete params.startTime
                            delete params.endTime
                        }
                        return buildProTableDataSource(getList, params);
                    }}
                    search={{ labelWidth: 'auto' }}
@@ -137,7 +150,10 @@
                                <Button
                                    type="primary"
                                    onClick={() => {
                                        const params = {
                                          ...formRef.current.getFieldsValue(),
                                        };
                                        exportExcell('述求管理.xlsx', params, '/api/huacheng-sangeshenbian/complaint/export');
                                    }}
                                >
                                    导出
management/src/pages/appeal-management/index.less
New file
@@ -0,0 +1,5 @@
.appeal-management-detail{
    .ant-steps-item-description{
        max-width: 200px !important;
    }
}
management/src/pages/appeal-management/service.js
@@ -0,0 +1,17 @@
import { request } from '@umijs/max';
// 获取诉求列表
export const getList = async (data) => {
    return request(`/api/huacheng-sangeshenbian/complaint/page`, {
        method: 'POST',
        data
    });
}
// 获取述求详情
export const getDetail = async (data) => {
    return request(`/api/huacheng-sangeshenbian/complaint/detail/${data.id}`, {
        method: 'GET',
        data
    });
}
management/src/pages/setting/career/index.jsx
@@ -63,7 +63,9 @@
    <div>
      <PageContainer header={{
        breadcrumb: {},
      }}>
      }}
      title={'职位管理'}
      >
        <ProTable
          rowKey="id"
          actionRef={actionRef}
management/src/utils/utils.js
@@ -57,7 +57,7 @@
      ...params,
    }),
    headers: {
      Authorization:'Bearer '+ localStorage.getItem('token'),
      Authorization:'Bearer ' +  localStorage.getItem('token'),
      'ConTent-Type': 'application/json;charset=UTF-8',
      timestamp: new Date().getTime(),
      client: localStorage.getItem('client')
@@ -85,7 +85,7 @@
    method: 'get',
    responseType: 'blob',
    headers: {
      Authorization:'Bearer '+ localStorage.getItem('token'),
      Authorization:'Bearer ' + localStorage.getItem('token'),
      'ConTent-Type': 'application/json;charset=UTF-8',
      timestamp: new Date().getTime(),
      client: localStorage.getItem('client')