forked from gzzfw/frontEnd/gzDyh

zhangyongtian
2024-09-08 2127fb90182bf9f8b767369678f5b7e2c46b2228
feat:事件流转对接
4 files deleted
1 files renamed
14 files modified
826 ■■■■ changed files
gz-customerSystem/src/api/appUrl.js 4 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/router/router.js 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/closingReview/component/AssignedModel.jsx 130 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/closingReview/component/BackModel.jsx 95 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/closingReview/component/EscalationModel.jsx 91 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/closingReview/component/EventFlow.jsx 184 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/closingReview/component/ReviewExamine.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/closingReview/index.jsx 111 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/eventFlow/component/AssignedModel.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/eventFlow/component/BackModel.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/eventFlow/component/EscalationModel.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/eventFlow/component/Examine.jsx 166 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/eventFlow/index.jsx 23 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/handleFeedback/component/AuditView.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/matterDetail/Supervising.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/matterDetail/UniteHandle.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/visit/component/agentDialog.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/visit/component/applyDialog.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/api/appUrl.js
@@ -10,11 +10,11 @@
export const debug = {
  // web服务
  // baseUrl: 'http://gz.hugeinfo.com.cn',
  baseUrl: "http://192.168.3.108:9002",
  baseUrl: "http://fydddb.natappfree.cc",
  // baseUrl: 'http://mdqgnh.natappfree.cc',
  // 附件服务
  fileUrl: "http://192.168.3.108:9002",
  fileUrl: "http://fydddb.natappfree.cc",
  // fileUrl: 'http://gz.hugeinfo.com.cn',
  // 文件查看url 后面接附件编号
gz-customerSystem/src/router/router.js
@@ -220,7 +220,7 @@
                        <Route path="visit/eventFlow/:caseTaskId?/:caseId?" element={<EventFlow />} />
                        <Route path="visit/handleFeedback" element={<HandleFeedback />} />
                        <Route path="visit/fileMessage" element={<FileMessage />} />
                        <Route path="visit/closingReview" element={<ClosingReview />}/>
                        <Route path="visit/closingReview/:caseTaskId?/:caseId?" element={<ClosingReview />}/>
                        
                        
gz-customerSystem/src/views/register/closingReview/component/AssignedModel.jsx
File was deleted
gz-customerSystem/src/views/register/closingReview/component/BackModel.jsx
File was deleted
gz-customerSystem/src/views/register/closingReview/component/EscalationModel.jsx
File was deleted
gz-customerSystem/src/views/register/closingReview/component/EventFlow.jsx
File was deleted
gz-customerSystem/src/views/register/closingReview/component/ReviewExamine.jsx
File was renamed from gz-customerSystem/src/views/register/closingReview/component/Examine.jsx
@@ -10,7 +10,7 @@
const FormItem = Form.Item;
const TextArea = Input.TextArea;
export default function Examine(props) {
export default function ReviewExamine(props) {
  const formRef = useRef();
  const [result, setResult] = useState()
  const infoData = {
gz-customerSystem/src/views/register/closingReview/index.jsx
@@ -1,49 +1,84 @@
/*
 * @Author: dminyi 1301963064@qq.com
 * @Date: 2024-08-09 09:59:43
 * @LastEditors: dminyi 1301963064@qq.com
 * @LastEditTime: 2024-08-31 17:13:53
 * @FilePath: \gzDyh\gz-customerSystem\src\views\basicInformation\organization\index.jsx
 * @Description: 来访登记
 */
import React, { useState, useRef, Fragment } from "react";
import React, { useState, useRef, Fragment, useEffect } from "react";
import NewPage from '@/components/NewPage';
import * as $$ from '@/utils/utility';
import "@arco-themes/react-gzzz/css/arco.css";
import '../index.less';
import { Steps, Tabs } from '@arco-design/web-react';
import { examine, Matter, transfer } from '@/assets/images'
import EventFlow from './component/EventFlow';
import MatterDetail from '../matterDetail';
import Examine from "./component/Examine";
import { Tabs } from '@arco-design/web-react';
import { examine, Matter, transfer, applyRecord } from '@/assets/images'
import EventFlow from '../eventFlow/component/EventFlow';
import ApplyInfo from "../matterDetail/ApplyInfo";
import { useParams } from 'react-router-dom';
import ReviewExamine from './component/ReviewExamine';
const Step = Steps.Step;
const TabPane = Tabs.TabPane;
function getTabButton(data) {
    return $$.ax.request({ url: `caseTask/getTabButton`, type: 'get', service: 'mediate', data });
}
const Organization = () => {
    const [current, setCurrent] = useState(2);
    const [tabsActive, setTabsActive] = useState('3');
    const [tabsList, setTabList] = useState([
const myTab = [
        {
            img: Matter,
            label: '事项详情',
            key: '1'
        key: 'sxxq',
        },
        {
            img: transfer,
            label: '流转办理',
            key: '2',
            isNeedStep: true,//加上这个就有进度条
        img: applyRecord,
        label: '申请记录',
        key: 'sqjl',
        },
        {
            img: examine,
            label: '审核',
            key: '3',
        label: '结案审核',
        key: 'jash',
        },
    ])
]
const ClosingReview = () => {
    const routeData = useParams();
    const [authorData, setAuthorData] = useState({});
    const [tabsList, setTabsList] = useState([]);
    const [tabsActive, setTabsActive] = useState();
    useEffect(() => {
        getAuthor()
    }, [])
    //获取权限tab和按钮权限
    const getAuthor = async () => {
        const res = await getTabButton({
            caseTaskId: routeData.caseTaskId
        })
        if (res.type) {
            const { tabList } = res.data
            setAuthorData(res.data)
            if (tabList.length === 0) {
                //没有tab就不展示
            } else {
                setTabsList(myTab.filter(item => {
                    const flag = tabList.some(result => {
                        if (result.id === item.key) {
                            return true
                        }
                    })
                    return flag
                }))
                setTabsActive(tabList[0].id)
            }
        }
    }
    //根据id定义组件
    const getTypeDom = (key) => {
        if (key === 'dslxq' || key === 'sxxq') {
            return <EventFlow authorData={authorData} caseId={routeData.caseId} />
        }
        if (key === 'sqjl') {
            return <ApplyInfo />
        }
        if (key === 'jash') {
            return <ReviewExamine type={key} />
        }
    }
    return (
        <div style={{ position: 'relative' }}>
@@ -53,9 +88,9 @@
                }
            >
                <Tabs
                    activeTab={tabsActive}
                    onChange={(v) => setTabsActive(v)}
                    className='myTabContent'
                    activeTab={tabsActive}
                >
                    {tabsList?.map(item => {
                        return <TabPane
@@ -67,21 +102,7 @@
                                </span>
                            }
                        >
                            {
                                item.isNeedStep && <div style={{ backgroundColor: '#fff', margin: '0 16px 0px 16px', paddingTop: '16px', paddingLeft: '91px' }}>
                                    <Steps type='navigation' current={current}>
                                        <Step title='来访登记' disabled />
                                        <Step title='事件流转' disabled />
                                        <Step title='办理反馈' disabled />
                                        <Step title='结案审核' disabled />
                                        <Step title='当事人评价' disabled />
                                        <Step title='结案归档' disabled />
                                    </Steps>
                                </div>
                            }
                            {tabsActive === '1' && <MatterDetail />}
                            {tabsActive === '2' && <EventFlow />}
                            {tabsActive === '3' && <Examine />}
                            {getTypeDom(item.key)}
                        </TabPane>
                    })}
                </Tabs>
@@ -90,4 +111,4 @@
    )
}
export default Organization;
export default ClosingReview;
gz-customerSystem/src/views/register/eventFlow/component/AssignedModel.jsx
@@ -16,7 +16,7 @@
}
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
export default function BackModel(props) {
gz-customerSystem/src/views/register/eventFlow/component/BackModel.jsx
@@ -15,7 +15,7 @@
}
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
function returnApply(data) {
gz-customerSystem/src/views/register/eventFlow/component/EscalationModel.jsx
@@ -15,7 +15,7 @@
}
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
function appearApply(data) {
gz-customerSystem/src/views/register/eventFlow/component/Examine.jsx
@@ -1,26 +1,106 @@
import React, { useRef } from 'react'
import React, { useRef, useEffect, useState } 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 * as $$ from '@/utils/utility';
const RadioGroup = Radio.Group;
const FormItem = Form.Item;
const TextArea = Input.TextArea;
const appUrl = $$.appUrl;
function getData(type, data) {
  let url = type === 'htsh' ? `caseTask/getReturnApplyInfo` : `caseTask/getAppearApplyInfo`
  return $$.ax.request({ url: url, type: 'get', service: 'mediate', data });
}
function submit(type, data) {
  let url = type === 'htsh' ? `caseTask/returnAudit` : `caseTask/appearAudit`
  return $$.ax.request({ url: url, type: 'post', 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 } });
}
export default function Examine(props) {
  const formRef = useRef();
  const infoData = {
    reason: '已经与双方当事人沟通,其中被申请方反应所谓的“个性化学习计划”费用是得到了白云区教育局的批准,而该费用收取是否合理,本部门无法判断',
    file: '广东明智教育培训机构资质合理性调查记录.pdf',
    time: '2024-7-21 12:00',
    people: '白云区新市街市场监管所',
    person: '张晓霞',
  const [infoData, setInfoData] = useState({});
  const [id, setId] = useState();
  const mainFlag = props.type == 'htsh' ? 'return' : 'appear'
  const options = [
    {
      label: '回退理由不充分',
      value: '0'
    },
    {
      label: '回退延迟',
      value: '1'
    },
    {
      label: '其他',
      value: '2'
    },
  ]
  useEffect(() => {
    getInfoData()
    getAppId()
  }, [props.type])
  //获取id
  const getAppId = async () => {
    const res = await getId()
    if (res.type) {
      setId(res.data)
    }
  }
  //回显数据
  const getInfoData = async () => {
    const res = await getData(props.type, {
      caseTaskId: props.caseTaskId
    })
    if (res.type) {
      setInfoData(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(props.type, data)
    if (res.type) {
      $$.infoSuccess({ content: '提交成功!' });
    }
  }
  //删除文件
  const handleDelFile = async (id) => {
    const res = await delFile(id)
    if (res.type) {
      $$.infoSuccess({ content: '删除成功!' });
    }
  }
  return (
@@ -28,24 +108,30 @@
      <div className='dataSync-noBackTabPage'>
        <div className='whiteBox'>
          <Space size='small'>
            <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>回退申请</h5>
            <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>{props.type === 'htsh' ? '回退申请' : '上报申请'}</h5>
          </Space>
          <Row gutter={[16, 16]}>
            <Col span={24}>
              <div><div className="title-text">回退理由</div></div>
              <div>{infoData?.reason || '-'}</div>
              <div><div className="title-text">{props.type === 'htsh' ? '回退理由' : '上报理由'}</div></div>
              <div>{infoData[mainFlag + 'Content'] || '-'}</div>
            </Col>
            <Col span={24}>
              <div><div className="title-text">附件材料</div></div>
              <div style={{ color: '#1A6FB8' }}><img src={link} alt="" className="title-file" />{infoData?.file || '-'}</div>
              <div style={{ color: '#1A6FB8' }}>
                <img src={link} alt="" className="title-file" />{infoData?.file || '-'}
              </div>
            </Col>
            <Col span={24}>
              <div><div className="title-text">申请时间</div></div>
              <div>{infoData?.time || '-'}</div>
              <div>{infoData[mainFlag + 'Time'] || '-'}</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[mainFlag + 'UnitName']}&nbsp;&nbsp;
                {infoData[mainFlag + 'UserName'] || '-'}
                <img src={register} alt="" className="title-register" />
              </div>
            </Col>
          </Row>
        </div>
@@ -66,48 +152,43 @@
                <Col span={24}>
                  <FormItem
                    label={(<div style={{ display: 'flex' }}>审核结果</div>)}
                    field='result'
                    field='auditResult'
                  >
                    <RadioGroup direction='vertical' options={[
                      {
                        label: '同意',
                        value: 1
                      },
                      {
                        label: '不同意',
                        value: 0
                      },
                    ]}>
                    </RadioGroup>
                    <RadioGroup
                      direction='vertical'
                      options={$$.options.auditResult}
                      onChange={(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>
                <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'
                      },
                    ]}>
                    <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
@@ -119,10 +200,11 @@
                <Col span={24} className="doubleFile">
                  <ArcoUpload
                    params={{
                      action: ``,
                      action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.caseId}&ownerId=${id}&ownerType=${props.type == 'htsh' ? '22_00018-511' : '22_00018-513'}`,
                    }}
                    field='file'
                    label='附件材料'
                    handleDelFile={handleDelFile}
                  />
                </Col>
              </Row>
gz-customerSystem/src/views/register/eventFlow/index.jsx
@@ -1,12 +1,3 @@
/*
 * @Author: dminyi 1301963064@qq.com
 * @Date: 2024-08-09 09:59:43
 * @LastEditors: dminyi 1301963064@qq.com
 * @LastEditTime: 2024-08-31 17:13:53
 * @FilePath: \gzDyh\gz-customerSystem\src\views\basicInformation\organization\index.jsx
 * @Description: 来访登记
 */
import React, { useState, useRef, Fragment, useEffect } from "react";
import NewPage from '@/components/NewPage';
import * as $$ from '@/utils/utility';
@@ -51,16 +42,6 @@
        img: examine,
        label: '上报审核',
        key: 'sbsh',
    },
    {
        img: examine,
        label: '结案审核',
        key: 'jash',
    },
    {
        img: examine,
        label: '联合处置申请审核',
        key: 'lhczsh',
    },
]
const Organization = () => {
@@ -107,8 +88,8 @@
        if (key === 'sqjl') {
            return <ApplyInfo />
        }
        if (key === 'htsh' || key === 'sbsh' || key === 'jash' || key === 'lhczsh') {
            return <Examine type={key} />
        if (key === 'htsh' || key === 'sbsh' || key === 'lhczsh') {
            return <Examine type={key} caseTaskId={routeData.caseTaskId} caseId={routeData.caseId} />
        }
    }
gz-customerSystem/src/views/register/handleFeedback/component/AuditView.jsx
@@ -12,7 +12,7 @@
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx
@@ -81,7 +81,7 @@
}
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
function getNewTimeIdApi(id) {
gz-customerSystem/src/views/register/matterDetail/Supervising.jsx
@@ -22,7 +22,7 @@
const appUrl = $$.appUrl;
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
gz-customerSystem/src/views/register/matterDetail/UniteHandle.jsx
@@ -10,7 +10,7 @@
const appUrl = $$.appUrl;
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
gz-customerSystem/src/views/register/visit/component/agentDialog.jsx
@@ -18,7 +18,7 @@
}
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
export default function AgentDialog(props) {
gz-customerSystem/src/views/register/visit/component/applyDialog.jsx
@@ -30,7 +30,7 @@
}
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
export default function ApplyDialog(props) {