forked from gzzfw/frontEnd/gzDyh

zhangyongtian
2024-09-08 96fdc064bad8b81bde39595de342e6e3d23f46de
feat: 结案审核对接
4 files modified
498 ■■■■ changed files
gz-customerSystem/src/utils/selectOption.js 204 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/closingReview/component/ReviewExamine.jsx 211 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/closingReview/component/ReviewProgress.jsx 81 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/closingReview/index.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/utils/selectOption.js
@@ -9,8 +9,7 @@
 */
// 事项来源
const caseCanal = [
  {
const caseCanal = [{
    value: '22_00001-1',
    label: '大厅来访',
  },
@@ -20,8 +19,7 @@
  }
];
// 来访形式
const visitWay = [
  {
const visitWay = [{
    value: '24_00002-1',
    label: '来访',
  },
@@ -31,8 +29,7 @@
  }
];
// 当事人地位
const personType = [
  {
const personType = [{
    value: '15_020008-1',
    label: '申请方当事人',
  },
@@ -50,8 +47,7 @@
  },
];
// 当事人类型
const personClass = [
  {
const personClass = [{
    value: '09_01001-1',
    label: '自然人',
  },
@@ -65,8 +61,7 @@
  },
];
//上传材料大类
const fileOwnerCat = [
  {
const fileOwnerCat = [{
    value: '22_00014-1',
    label: '申请材料',
  },
@@ -84,8 +79,7 @@
  },
];
//上传材料类型
const fileOwnerType = [
  {
const fileOwnerType = [{
    value: '22_00018-101',
    label: '申请材料',
  },
@@ -145,20 +139,27 @@
    value: '22_00018-513',
    label: '上报审核附件',
  },
  {
    value: '22_00018-302',
    label: '协议文书',
  },
  {
    value: '22_00018-514',
    label: '结案审核附件',
  },
];
// 附件上传人类型
const uploaderType = [
  {
const uploaderType = [{
    value: 1,
    label: '工作人员',
  },
  { value: 2,
  {
    value: 2,
    label: '当事人',
  },
];
// 性别
const sex = [
  {
const sex = [{
    value: '09_00003-1',
    label: '男',
  },
@@ -168,8 +169,7 @@
  },
];
// 证件类型
const cardType = [
  {
const cardType = [{
    value: '09_00015-1',
    label: '身份证',
  },
@@ -203,8 +203,7 @@
  },
];
// 民族
const nation = [
  {
const nation = [{
    value: '09_00005-1',
    label: '汉族',
  },
@@ -450,8 +449,7 @@
  },
];
// 委托类型
const agentType = [
  {
const agentType = [{
    value: '22_00004-1',
    label: '一般授权代理',
  },
@@ -469,8 +467,7 @@
  },
];
// 事项状态
const caseStatus = [
  {
const caseStatus = [{
    value: 1,
    label: '待签收',
  },
@@ -496,8 +493,7 @@
  },
];
// 事项进度
const process = [
  {
const process = [{
    value: 1,
    label: '来访登记',
  },
@@ -523,8 +519,7 @@
  },
];
// 调解结果
const mediResult = [
  {
const mediResult = [{
    value: '22_00025-1',
    label: '化解成功',
  },
@@ -534,8 +529,7 @@
  },
];
// 会议类型
const meetType = [
  {
const meetType = [{
    value: '22_00020-1',
    label: '纠纷调解会议',
  },
@@ -545,8 +539,7 @@
  },
];
// 会议方式
const meetWay = [
  {
const meetWay = [{
    value: '22_00021-3',
    label: '线上 + 线下',
  },
@@ -560,8 +553,7 @@
  },
];
// 调度类型
const dispType = [
  {
const dispType = [{
    value: '22_00012-1',
    label: '归口分流',
  },
@@ -571,19 +563,17 @@
  },
];
// 通用审核结果
const auditResult = [
  {
    value: '24_00004-1',
    label: '同意'
const auditResult = [{
    value: '24_00004-1',
    label: '同意'
  },
  {
    value: '24_00004-2',
    label: '不同意'
  {
    value: '24_00004-2',
    label: '不同意'
  },
];
// 委托关系
const agentRelate = [
  {
const agentRelate = [{
    value: '24_00007-1',
    label: '亲属',
  },
@@ -593,22 +583,17 @@
  },
];
// 企业类型
const enterpriseType = [
  {
    value: '24_00008-1',
    label: '餐饮服务',
  },
];
const enterpriseType = [{
  value: '24_00008-1',
  label: '餐饮服务',
}, ];
// 机构类型
const orgaType = [
  {
    value: '24_00009-1',
    label: '志愿者服务',
  },
];
const orgaType = [{
  value: '24_00009-1',
  label: '志愿者服务',
}, ];
//事项等级
const caseLevelList = [
  {
const caseLevelList = [{
    value: 1,
    label: '一级'
  },
@@ -625,8 +610,7 @@
// VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV 暂时用不到,防止以后会用的,先保留 VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
// 调解类型
const mediateType = [
  {
const mediateType = [{
    value: '22_00002-1',
    label: '人民调解',
  },
@@ -644,8 +628,7 @@
  },
];
// 代理人类型
const agentClass = [
  {
const agentClass = [{
    value: '09_01010-1',
    label: '律师',
  },
@@ -675,8 +658,7 @@
  },
];
// 职业
const job = [
  {
const job = [{
    value: '22_00003-1',
    label: '专业人士(教师/医生/律师等)',
  },
@@ -730,8 +712,7 @@
  },
];
// 通知方式
const noticeWay = [
  {
const noticeWay = [{
    value: '22_00023-1',
    label: '微信通知',
  },
@@ -741,8 +722,7 @@
  },
];
// 归档状态
const fileStatus = [
  {
const fileStatus = [{
    value: 0,
    label: '未归档',
  },
@@ -752,8 +732,7 @@
  },
];
// 任务节点执行者类型
const taskCandeType = [
  {
const taskCandeType = [{
    value: 1,
    label: '所有人',
  },
@@ -771,8 +750,7 @@
  },
];
// 实名认证状态
const realStatus = [
  {
const realStatus = [{
    value: 0,
    label: '未认证',
  },
@@ -782,8 +760,7 @@
  },
];
// 会议视频录制状态:1:录制转码中,2:已上传
const recordStatus = [
  {
const recordStatus = [{
    value: '1',
    label: '录制转码中',
  },
@@ -793,8 +770,7 @@
  },
];
// 涉及人群
const crowd = [
  {
const crowd = [{
    value: '22_00035-1',
    label: '未成年人',
  },
@@ -832,8 +808,7 @@
  },
];
// 纠纷来源
const caseSource = [
  {
const caseSource = [{
    value: '22_00036-2',
    label: '依申请调解',
  },
@@ -880,8 +855,7 @@
// 调解不予受理原因
const mediateError = [
  {
const mediateError = [{
    value: '22_00005-1',
    label: '人民法院已经受理或正在受理的',
  },
@@ -903,8 +877,7 @@
  },
];
// 拒绝签收原因
const refuseSign = [
  {
const refuseSign = [{
    value: '22_00009-1',
    label: '人民法院已经受理或正在受理的',
  },
@@ -934,8 +907,7 @@
  },
];
// 签收意见
const signResult = [
  {
const signResult = [{
    value: '22_00010-1',
    label: '同意签收',
  },
@@ -945,8 +917,7 @@
  },
];
// 调度来源
const dispSource = [
  {
const dispSource = [{
    value: '22_00011-1',
    label: '纠纷调度',
  },
@@ -968,8 +939,7 @@
  },
];
// 调度处理
const dispHandle = [
  {
const dispHandle = [{
    value: '22_00013-1',
    label: '正常调度',
  },
@@ -987,8 +957,7 @@
  },
];
// 调解参与人类型
const joinUserType = [
  {
const joinUserType = [{
    value: '22_00022-1',
    label: '调解员',
  },
@@ -1022,8 +991,7 @@
  },
];
// 人脸认证状态
const faceStatus = [
  {
const faceStatus = [{
    value: '1',
    label: '已认证',
  },
@@ -1033,8 +1001,7 @@
  },
];
// 司法确认进度
const judicProcess = [
  {
const judicProcess = [{
    value: '22_00029-1',
    label: '待审查',
  },
@@ -1060,8 +1027,7 @@
  },
];
// 司法确认状态
const judicStatus = [
  {
const judicStatus = [{
    value: '22_00029-1',
    label: '受理确认',
  },
@@ -1087,8 +1053,7 @@
  },
];
// 司法确认结果
const judicResult = [
  {
const judicResult = [{
    value: '22_00028-1',
    label: '已达成',
  },
@@ -1098,8 +1063,7 @@
  },
];
// 司法确认不予受理原因
const judicError = [
  {
const judicError = [{
    value: '22_00031-1',
    label: '不属于人民法院受理民事案件的范围',
  },
@@ -1121,26 +1085,36 @@
  },
];
// 司法确认退回原因
const judicReturn = [
const judicReturn = [{
  value: '22_00032-1',
  label: '其他',
}, ];
// 系列案区别
const selectdata = [{
    value: '1',
    label: '非系列案'
  },
  {
    value: '22_00032-1',
    label: '其他',
    value: '2',
    label: '系列案'
  },
];
// 系列案区别
const selectdata = [
  { value: '1', label: '非系列案' },
  { value: '2', label: '系列案' },
];
// 履行情况
const fulfilSitu = [
  { value: '22_00008-1', label: '未履行' },
  { value: '22_00008-2', label: '当场履行' },
  { value: '22_00008-3', label: '分期履行' },
const fulfilSitu = [{
    value: '22_00008-1',
    label: '未履行'
  },
  {
    value: '22_00008-2',
    label: '当场履行'
  },
  {
    value: '22_00008-3',
    label: '分期履行'
  },
];
//调解不成功原因
const mediFalseCause = [
  {
const mediFalseCause = [{
    value: '22_00019-1',
    label: '当事人未能就调解协议达成一致',
  },
@@ -1220,4 +1194,4 @@
  mediFalseCause,
};
export default obj;
export default obj;
gz-customerSystem/src/views/register/closingReview/component/ReviewExamine.jsx
@@ -1,35 +1,123 @@
import React, { useRef, useState } from 'react'
import React, { useRef, useState, useEffect } from 'react'
import { Row, Col, Space } from 'antd';
import { link, register } from '@/assets/images';
import { Form, Input, Button, Radio } from '@arco-design/web-react';
import ArcoUpload from '@/components/ArcoUpload';
import { Scrollbars } from "react-custom-scrollbars";
import ReviewProgress from './ReviewProgress';
import * as $$ from '@/utils/utility';
const RadioGroup = Radio.Group;
const FormItem = Form.Item;
const TextArea = Input.TextArea;
const appUrl = $$.appUrl;
function getData(data) {
  return $$.ax.request({ url: `caseTask/getWindupApplyInfo`, type: 'get', service: 'mediate', data });
}
function getId() {
  return $$.ax.request({ url: `caseUtils/getNewTimeId`, type: 'get', service: 'utils' });
}
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
function submit(data) {
  return $$.ax.request({ url: `caseTask/windupAudit`, type: 'post', service: 'mediate', data });
}
function getListCaseFlow(data) {
  return $$.ax.request({ url: `caseTask/listCaseFlow`, type: 'get', service: 'mediate', data });
}
export default function ReviewExamine(props) {
  const formRef = useRef();
  const [result, setResult] = useState()
  const infoData = {
    result: '化解不成功',
    time: '2024-7-21 12:00',
    people: '白云区新市街市场监管所',
    person: '张晓霞',
    reason: '当事人拒绝参加调解,对调解工作极为抗拒',
    opinion: `针对该事项,我部门高度重视并立即启动了调解程序。然而,在调解过程中遇到的主要困难是当事人李晓明未能积极配合我们的工作,具体表现为:
    1、拒绝提供必要的证据材料;
    2、不接听我们拨打的相关电话;
    3、拒绝到场参加任何调解行为
    由于上述原因,我们目前无法进一步查清事实真相,也无法制定出切实可行的解决方案。为了保障当事人的合法权益得到维护,已引导当事人走司法途径,目前已在法院立案,特申请结案。`,
    isProceeding: '是',
    proceeding: '(粤)云调20240811号'
  const [infoData, setInfoData] = useState({});
  const [id, setId] = useState();
  const [progressData, setProgressData] = useState({})
  const options = [
    {
      label: '材料不完整',
      value: '1'
    },
    {
      label: '办理流程有问题',
      value: '2'
    },
    {
      label: '当事人不满意调解结果',
      value: '3'
    },
    {
      label: '其他',
      value: '4'
    },
  ]
  useEffect(() => {
    getInfoData()
    getAppId()
    getProData()
  }, [])
  //获取id
  const getAppId = async () => {
    const res = await getId()
    if (res.type) {
      setId(res.data)
    }
  }
  //回显数据
  const getInfoData = async () => {
    const res = await getData({ caseTaskId: props.caseTaskId })
    if (res.type) {
      setInfoData(res.data || {})
    }
  }
  //获取流程信息
  const getProData = async () => {
    const res = await getListCaseFlow({
      caseId: props.caseId
    })
    if (res.type) {
      setProgressData(res.data)
    }
  }
  const handleSubmit = () => {
    if (formRef.current) {
      formRef.current.validate(undefined, (errors, values) => {
        if (!errors) {
          const { file, myNoUp, ...rest } = formRef.current.getFields()
          requestSubmit({
            id,
            caseId: props.caseId,
            caseTaskId: props.caseTaskId,
            ...rest
          })
        }
      })
    }
  }
  const requestSubmit = async (data) => {
    const res = await submit(data)
    if (res.type) {
      $$.infoSuccess({ content: '提交成功!' });
    }
  }
  //删除文件
  const handleDelFile = async (id) => {
    const res = await delFile(id)
    if (res.type) {
      $$.infoSuccess({ content: '删除成功!' });
    }
  }
  return (
@@ -43,31 +131,35 @@
            <Row gutter={[16, 16]}>
              <Col span={24}>
                <div><div className="title-text">化解结果</div></div>
                <div>{infoData?.result || '-'}</div>
                <div style={{ color: infoData.mediResult == '22_00025-1' ? '#00B42A' : '#F53F3F' }}>{infoData?.mediResultName || '-'}</div>
              </Col>
              <Col span={24}>
                <div><div className="title-text">无法化解理由</div></div>
                <div>{infoData?.reason || '-'}</div>
                <div>{infoData?.failReason || '-'}</div>
              </Col>
              <Col span={24}>
                <div><div className="title-text">结案意见</div></div>
                <div>{infoData?.opinion || '-'}</div>
                <div>{infoData?.windupContent || '-'}</div>
              </Col>
              <Col span={24}>
              {/* <Col span={24}>
                <div><div className="title-text">是否转诉讼案件</div></div>
                <div>{infoData?.isProceeding || '-'}</div>
              </Col>
              <Col span={24}>
                <div><div className="title-text">诉讼案号</div></div>
                <div>{infoData?.proceeding || '-'}</div>
              </Col>
              </Col> */}
              <Col span={24}>
                <div><div className="title-text">申请时间</div></div>
                <div>{infoData?.time || '-'}</div>
                <div>{infoData?.applyTime || '-'}</div>
              </Col>
              <Col span={24}>
                <div><div className="title-text">申请人</div></div>
                <div>{infoData?.people}&nbsp;&nbsp;{infoData?.person}<img src={register} alt="" className="title-register" /></div>
                <div>
                  {infoData?.applyUnitName}&nbsp;&nbsp;
                  {infoData?.applyUserName}
                  <img src={register} alt="" className="title-register" />
                </div>
              </Col>
            </Row>
          </div>
@@ -88,58 +180,46 @@
                  <Col span={24}>
                    <FormItem
                      label={(<div style={{ display: 'flex' }}>审核结果</div>)}
                      field='result'
                      field='auditResult'
                    >
                      <RadioGroup
                        direction='vertical'
                        options={[
                          {
                            label: '同意',
                            value: 1
                          },
                          {
                            label: '不同意',
                            value: 0
                          },
                        ]}
                        onChange={(v) => { setResult(v) }}
                      >
                      </RadioGroup>
                        options={$$.options.auditResult}
                        onChange={(value) => {
                          setResult(value)
                          if (value) {
                            const data = $$.options.auditResult.find(item => item.value === value)
                            formRef.current.setFieldValue('auditResultName', data.label)
                          } else {
                            formRef.current.setFieldValue('auditResultName', '')
                          }
                        }}
                      />
                    </FormItem>
                  </Col>
                  {result === 0 &&
                  {result === '24_00004-2' &&
                    <>
                      <Col span={24}>
                        <FormItem
                          label={(<div style={{ display: 'flex' }}>理由说明<div className="must">必填</div></div>)}
                          field='trueName'
                          field='myNoUp'
                          rules={[{ required: true, message: '请选择理由说明' }]}
                        >
                          <RadioGroup direction='vertical' options={[
                            {
                              label: '材料不完整',
                              value: '0'
                            },
                            {
                              label: '办理流程有问题',
                              value: '1'
                            },
                            {
                              label: '当事人不满意调解结果',
                              value: '2'
                            },
                            {
                              label: '其他',
                              value: '3'
                            },
                          ]}>
                          <RadioGroup
                            direction='vertical'
                            options={options}
                            onChange={(value) => {
                              const obj = options.find(item => item.value === value)
                              formRef.current.setFieldValue('audit_content', obj.label)
                            }}
                          >
                          </RadioGroup>
                        </FormItem>
                      </Col>
                      <Col span={24}>
                        <FormItem
                          label=' '
                          field='luyou'
                          field='audit_content'
                          rules={[{ required: true, message: '理由不能为空' }]}
                        >
                          <TextArea
@@ -151,10 +231,11 @@
                      <Col span={24} className="doubleFile">
                        <ArcoUpload
                          params={{
                            action: ``,
                            action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.caseId}&ownerId=${id}&ownerType=22_00018-514`,
                          }}
                          field='file'
                          label='附件材料'
                          handleDelFile={handleDelFile}
                        />
                      </Col>
                    </>
@@ -171,14 +252,16 @@
                </Button>
              </div>
            </div>
            <div className='whiteBox' style={{ width: '400px' }}>
              <Space size='small'>
                <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>审核进度</h5>
              </Space>
              <ReviewProgress />
            </div>
            {
              (infoData.caseLevel === 1 || infoData.caseLevel === 2) &&
              <div className='whiteBox' style={{ width: '400px' }}>
                <Space size='small'>
                  <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>审核进度</h5>
                </Space>
                <ReviewProgress progressData={progressData} />
              </div>
            }
          </div>
        </Scrollbars>
      </div>
    </div>
gz-customerSystem/src/views/register/closingReview/component/ReviewProgress.jsx
@@ -1,86 +1,30 @@
import React from 'react';
import { register } from '@/assets/images';
import * as $$ from '@/utils/utility';
export default function ReviewProgress(props) {
  const fakeData = [
    {
      handlerUserName: '天河区棠下街综治中心',
      finishTime: new Date().getTime() - 24 * 60 * 60 * 1000, // 一天前的时间
      handleResult: '1',
      status: '2',
      taskNodeName: '来访登记',
      mediResult: '22_00025-1',
      handleContent: '调解成功,双方达成一致意见。',
      operationName: '李晓明'
    },
    {
      handlerUserName: '系统派单',
      finishTime: new Date().getTime() - 12 * 60 * 60 * 1000, // 半天前的时间
      handleResult: '1',
      status: '2',
      taskNodeName: '事件流转',
      mediResult: '22_00025-1',
      handleContent: '派单至:白云区新市街市场监管所',
    },
    {
      handlerUserName: '白云区新市街市场监管所',
      finishTime: new Date().getTime() - 11 * 60 * 60 * 1000, // 半天前的时间
      handleResult: '1',
      status: '2',
      taskNodeName: '事件流转',
      mediResult: '22_00025-1',
      handleContent: '已签收',
      operationName: '赵菲菲'
    },
    {
      handlerUserName: '白云区新市街市场监管所',
      finishTime: new Date().getTime() - 10 * 60 * 60 * 1000, // 半天前的时间
      handleResult: '1',
      status: '3',
      taskNodeName: '事件回退',
      mediResult: '22_00025-1',
      // handleContent: '已签收',
      operationName: '赵菲菲'
    },
    {
      handlerUserName: '白云区新市街综治中心',
      finishTime: new Date().getTime() - 9 * 60 * 60 * 1000, // 半天前的时间
      handleResult: '1',
      status: '2',
      taskNodeName: '回退审核',
      mediResult: '22_00025-1',
      handleContent: '通过',
      operationName: '赵菲菲'
    },
    {
      handlerUserName: '白云区综治中心',
      finishTime: new Date().getTime() - 6 * 60 * 60 * 1000, // 6小时前的时间
      handleResult: '2',
      status: '1',
      taskNodeName: '审核中',
      mediResult: '22_00025-1',
      handleContent: '案件已被签收,准备开始调解。',
      operationName: '李晓明'
    },
  ];
  return (
    <div className='reviewProgress'>
      {fakeData.map((item, index) => {
        const flag = index + 1 === fakeData.length
      {props.progressData['handleCaseFlowList']?.map((item, index) => {
        const flag = index + 1 === props.progressData['handleCaseFlowList'].length
        return <div style={{ display: 'flex' }}>
          <div style={{ marginRight: '10px' }}>
            <div className='reviewCircle' style={flag ? { borderColor: '#EF6C24' } : {}}></div>
            {!flag && <div className='reviewLine'></div>}
          </div>
          <div>
            <div className='deepTitle'>{item.handlerUserName}({item.taskNodeName})</div>
            <div className='deepTitle'>{item.handleUnitName}({item.nodeShowName})</div>
            {!flag &&
              <>
                {
                  item.handleUserName && <div className='shallowTitle'>
                    操作人:<span>{item.handleUserName}<img src={register} alt="" className="title-register" /></span>
                  </div>
                }
                <div className='shallowTitle'>
                  操作人:<span>{item.operationName}<img src={register} alt="" className="title-register" /></span>
                </div>
                <div className='shallowTitle'>
                  操作时间:<span>{item.mediResult}</span>
                  操作时间:<span>{$$.timeFormat(item.handleTime)}</span>
                </div>
                <div style={{ height: '34px' }}></div>
              </>
@@ -89,7 +33,6 @@
        </div>
      })}
    </div>
  )
}
gz-customerSystem/src/views/register/closingReview/index.jsx
@@ -76,7 +76,7 @@
            return <ApplyInfo />
        }
        if (key === 'jash') {
            return <ReviewExamine type={key} />
            return <ReviewExamine caseTaskId={routeData.caseTaskId} caseId={routeData.caseId} />
        }
    }