forked from gzzfw/frontEnd/gzDyh

zhangyongtian
2024-09-13 899e81654c9389785d58f9dbdf2ea7d2b2bc9082
feat: 对接流程
13 files modified
767 ■■■■ changed files
gz-customerSystem/src/api/appUrl.js 4 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/utils/utility.js 4 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/closingReview/index.jsx 22 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/eventFlow/component/AssignedModel.jsx 6 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx 2 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/eventFlow/component/Examine.jsx 41 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/eventFlow/index.jsx 17 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/handleFeedback/component/AuditView.jsx 259 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx 107 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/handleFeedback/index.jsx 91 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/index.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/index.less 1 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/matterDetail/UniteHandle.jsx 211 ●●●●● 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://933ymn.natappfree.cc",
  // baseUrl: 'http://mdqgnh.natappfree.cc',
  // 附件服务
  fileUrl: "http://192.168.3.108:9002",
  fileUrl: "http://933ymn.natappfree.cc",
  // fileUrl: 'http://gz.hugeinfo.com.cn',
  // 文件查看url 后面接附件编号
gz-customerSystem/src/utils/utility.js
@@ -180,8 +180,8 @@
}
// 时间格式化
export function timeFormat(value, isValue, timeFormat) {
    return !!value ? moment(value).format(timeFormat ? timeFormat : 'YYYY-MM-DD HH:mm:ss') : isValue ? '' : '-';
export function timeFormat(value, isValue) {
    return !!value ? moment(value).format('YYYY-MM-DD HH:mm:ss') : isValue ? '' : '-';
}
export function minuteFormat(value, isValue) {
gz-customerSystem/src/views/register/closingReview/index.jsx
@@ -4,20 +4,15 @@
import "@arco-themes/react-gzzz/css/arco.css";
import '../index.less';
import { Tabs } from '@arco-design/web-react';
import { examine, Matter, transfer, applyRecord } from '@/assets/images'
import { examine, Matter, 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 TabPane = Tabs.TabPane;
function getTabButton(caseTaskId) {
    return $$.ax.request({ url: `caseTask/getTabButton?caseTaskId=${caseTaskId}`, type: 'get', service: 'mediate' });
}
function getCaseInfoApi(id) {
  return $$.ax.request({ url: '/caseInfo/getCaseInfo?id=' + id, type: 'get', service: 'mediate' });
}
const myTab = [
@@ -40,18 +35,13 @@
const ClosingReview = () => {
    const caseId = $$.getQueryString('caseId')
    const caseTaskId = $$.getQueryString('caseTaskId')
    const windupId = $$.getQueryString('windupId')
    const routeData = useParams();
    const [authorData, setAuthorData] = useState({});
    const [tabsList, setTabsList] = useState([]);
    const [tabsActive, setTabsActive] = useState();
    const [newId, setNewId] = useState(caseId)
    useEffect(() => {
        getAuthor();
        getCaseInfo()
        console.log(caseId,caseTaskId,'caseId','caseTaskId')
    }, [])
    //获取权限tab和按钮权限
@@ -76,14 +66,6 @@
        }
    }
    const getCaseInfo = async (id) => {
    const res = await getCaseInfoApi(caseId)
        if(res.type){
            console.log(res.data?.id,'res.data?.idres.data?.id')
            setNewId(res.data?.id)
        }
        }
    //根据id定义组件
    const getTypeDom = (key) => {
        if (key === 'dslxq' || key === 'sxxq') {
@@ -93,7 +75,7 @@
            return <ApplyInfo />
        }
        if (key === 'jash') {
            return <ReviewExamine caseTaskId={caseTaskId} caseId={caseId} id={windupId} />
            return <ReviewExamine caseTaskId={caseTaskId} caseId={caseId} />
        }
    }
gz-customerSystem/src/views/register/eventFlow/component/AssignedModel.jsx
@@ -4,7 +4,6 @@
import ArcoUpload from '@/components/ArcoUpload';
import { Scrollbars } from "react-custom-scrollbars";
import SelectObjModal from '@/components/SelectObjModal/selectPerson';
import { useParams } from 'react-router-dom';
import * as $$ from '@/utils/utility';
import { useNavigate } from 'react-router-dom';
@@ -22,7 +21,6 @@
}
export default function BackModel(props) {
  const routeData = useParams();
  const navigate = useNavigate();
  const formRef = useRef();
  const [isModalVisible, setIsModalVisible] = useState(false);
@@ -38,7 +36,7 @@
    formRef.current.validate(undefined, (errors, values) => {
      if (!errors) {
        handleAssign({
          caseTaskId: routeData.caseTaskId,
          caseTaskId: props.caseTaskId,
          assignContent: values.assignContent,
          handleUnitId: wantUser['handleUnit'][0].value,
          handleUnitName: wantUser['handleUnit'][0].name,
@@ -63,7 +61,7 @@
  //交办请求
  const handleAssign = async (data) => {
    const res = await assign({ ...data, caseTaskId: props.caseTaskId })
    const res = await assign(data)
    if (res.type) {
      $$.infoSuccess({ content: '交办成功!' });
      props.onCancel();
gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx
@@ -112,10 +112,8 @@
  }, [])
  const onWindowResize = () => {
    let offsetLeft = 0;
    let offsetTop = 0;
    if (scrollRef.current.container) {
      offsetLeft = getOffset(scrollRef.current.container).left;
      offsetTop = getOffset(scrollRef.current.container).top;
    }
    setHeight(getSize().windowH - offsetTop - 16)
gz-customerSystem/src/views/register/eventFlow/component/Examine.jsx
@@ -5,6 +5,7 @@
import ArcoUpload from '@/components/ArcoUpload';
import { Scrollbars } from "react-custom-scrollbars";
import * as $$ from '@/utils/utility';
import { getOffset, getSize } from '@/utils/utility';
const RadioGroup = Radio.Group;
const FormItem = Form.Item;
@@ -21,18 +22,16 @@
  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: 'get', service: 'sys', data: { id } });
}
export default function Examine(props) {
  const formRef = useRef();
  const scrollRef = useRef(null);
  const [infoData, setInfoData] = useState({});
  const [id, setId] = useState();
  const [height, setHeight] = useState(500);
  const mainFlag = props.type == 'htsh' ? 'return' : 'appear'
  const options = [
    {
@@ -51,16 +50,25 @@
  useEffect(() => {
    getInfoData()
    getAppId()
  }, [props.type])
  //获取id
  const getAppId = async () => {
    const res = await getId()
    if (res.type) {
      setId(res.data)
  useEffect(() => {
    onWindowResize()
    window.addEventListener("resize", onWindowResize);
    // 返回一个函数,该函数会在组件卸载前执行
    return () => {
      // 组件销毁时执行
      window.removeEventListener("resize", onWindowResize);
    };
  }, [])
  const onWindowResize = () => {
    let offsetTop = 0;
    if (scrollRef.current.container) {
      offsetTop = getOffset(scrollRef.current.container).top;
    }
  }
    setHeight(getSize().windowH - offsetTop - 74)
  };
  //回显数据
  const getInfoData = async () => {
@@ -69,6 +77,7 @@
    })
    if (res.type) {
      setInfoData(res.data || {})
      setId(res.data.id)
    }
  }
@@ -125,12 +134,12 @@
                      {resIndex !== res.fileList.length - 1 && <>,</>}
                    </a>
                  })
                })}
                }) || '-'}
              </div>
            </Col>
            <Col span={24}>
              <div><div className="title-text">申请时间</div></div>
              <div>{infoData[mainFlag + 'Time'] || '-'}</div>
              <div>{$$.myTimeFormat(infoData[mainFlag + 'Time'], 'YYYY-MM-DD HH:mm') || '-'}</div>
            </Col>
            <Col span={24}>
              <div><div className="title-text">申请人</div></div>
@@ -143,7 +152,7 @@
          </Row>
        </div>
        <div className='whiteBox' style={{ marginTop: '8px' }}>
          <Scrollbars style={{ height: 'calc(100vh - 577px)' }} autoHide>
          <Scrollbars style={{ height: height + 'px' }} autoHide ref={scrollRef}>
            <Space size='small'>
              <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>审核</h5>
            </Space>
@@ -186,7 +195,7 @@
                      options={options}
                      onChange={(value) => {
                        const obj = options.find(item => item.value === value)
                        formRef.current.setFieldValue('audit_content', obj.label)
                        formRef.current.setFieldValue('auditContent', obj.label)
                      }}
                    >
                    </RadioGroup>
@@ -195,7 +204,7 @@
                <Col span={24}>
                  <FormItem
                    label=' '
                    field='audit_content'
                    field='auditContent'
                    rules={[{ required: true, message: '理由不能为空' }]}
                  >
                    <TextArea
gz-customerSystem/src/views/register/eventFlow/index.jsx
@@ -8,7 +8,6 @@
import EventFlow from './component/EventFlow';
import Examine from "./component/Examine";
import ApplyInfo from "../matterDetail/ApplyInfo";
import { useParams } from 'react-router-dom';
const Step = Steps.Step;
const TabPane = Tabs.TabPane;
@@ -28,11 +27,11 @@
        label: '事项详情',
        key: 'sxxq',
    },
    // {
    //     img: applyRecord,
    //     label: '申请记录',
    //     key: 'sqjl',
    // },
    {
        img: applyRecord,
        label: '申请记录',
        key: 'sqjl',
    },
    {
        img: examine,
        label: '回退审核',
@@ -45,7 +44,6 @@
    },
]
const Organization = () => {
    const routeData = useParams();
    const caseTaskId = $$.getQueryString('caseTaskId')
    const caseId = $$.getQueryString('caseId')
    const [authorData, setAuthorData] = useState({});
@@ -59,7 +57,6 @@
    //获取权限tab和按钮权限
    const getAuthor = async () => {
        console.log(caseTaskId, caseId)
        const res = await getTabButton({
            caseTaskId: caseTaskId
        })
@@ -92,11 +89,9 @@
            return <ApplyInfo />
        }
        if (key === 'htsh' || key === 'sbsh' || key === 'lhczsh') {
            return <Examine type={key} caseTaskId={routeData.caseTaskId} caseId={routeData.caseId} />
            return <Examine type={key} caseTaskId={caseTaskId} caseId={caseId} />
        }
    }
    console.log(caseId, 'caseId')
    return (
        <div style={{ position: 'relative' }}>
gz-customerSystem/src/views/register/handleFeedback/component/AuditView.jsx
@@ -1,31 +1,66 @@
import React, { useRef, useState } from 'react';
import { Row, Col, Space, Tooltip } from 'antd';
import { Form, Input, Radio, Button } from '@arco-design/web-react';
import React, { useRef, useState, useEffect } from 'react';
import { Row, Col, Space } from 'antd';
import { Form, Input, Radio, Button, Tooltip } from '@arco-design/web-react';
import { register } from '@/assets/images'
import { question1, } from '@/assets/images';
import ArcoUpload from '@/components/ArcoUpload';
import * as $$ from '@/utils/utility';
import { Scrollbars } from "react-custom-scrollbars";
import { getOffset, getSize } from '@/utils/utility';
const FormItem = Form.Item;
const appUrl = $$.appUrl;
const RadioGroup = Radio.Group;
const TextArea = Input.TextArea;
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
}
function getData(data) {
  return $$.ax.request({ url: `caseAssistApply/getByCaseId`, type: 'get', service: 'mediate', data });
}
function submit(data) {
  return $$.ax.request({ url: `caseAssistApply/reviewCaseAssistApply`, type: 'post', service: 'mediate', data });
}
const AuditView = () => {
const AuditView = (props) => {
  const formRef = useRef();
  const [value, setValue] = useState(1);
  const id = 1;
  const scrollRef = useRef(null);
  const [id, setId] = useState();
  const [infoData, setInfoData] = useState({});
  const [height, setHeight] = useState(500);
  const onChange = (e) => {
    console.log('radio checked', e.target.value);
    setValue(e.target.value);
  useEffect(() => {
    getInfoData()
    onWindowResize()
    window.addEventListener("resize", onWindowResize);
    // 返回一个函数,该函数会在组件卸载前执行
    return () => {
      // 组件销毁时执行
      window.removeEventListener("resize", onWindowResize);
    };
  }, [])
  const onWindowResize = () => {
    let offsetTop = 0;
    if (scrollRef.current.container) {
      offsetTop = getOffset(scrollRef.current.container).top;
    }
    setHeight(getSize().windowH - offsetTop - 74)
  };
  //回显数据
  const getInfoData = async () => {
    const res = await getData({
      caseId: props.caseId
    })
    if (res.type) {
      setInfoData(res.data || {})
      setId(res.data.id)
    }
  }
  //删除文件
  const handleDelFile = async (id) => {
@@ -35,104 +70,130 @@
    }
  }
  return (
    <>
      <div className="auditView">
        <Col span={24} className='title'>
          <Space size='small'>
            <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h5>联合处置申请</h5>
          </Space>
        </Col>
        <Row gutter={[16, 16]}>
          <Col span={24}>
            <div><div className="title-text">添加配合部门</div></div>
            <div>白云区新市街司法所、白云区新市街劳监大队</div>
          </Col>
          <Col span={24}>
            <div><div className="title-text">添加理由</div></div>
            <div>在调解过程中,我们发现需要白云区新市街司法所的专业司法能力支持事项办理,以促进调解工作的顺利进行。</div>
          </Col>
          {/*事项等级分为三级,颜色需要做判断*/}
          <Col span={24}>
            <div className="title"><div className="title-text">申请时间</div></div>
            <div >2024-7-21 12:00</div>
          </Col>
          <Col span={24}>
            <div><div className="title-text">申请人</div></div>
            <div>广州市白云区新市街汇桥北社区委员会 张三丰<img src={register} alt='' style={{ width: '14px', height: '14px', marginLeft: '8px', marginTop: '-1px' }}/></div>
          </Col>
        </Row>
  const handleSubmit = () => {
    if (formRef.current) {
      formRef.current.validate(undefined, (errors, values) => {
        if (!errors) {
          const { file, ...rest } = formRef.current.getFields()
          requestSubmit({
            ...rest,
            id: id
          })
        }
      })
    }
  }
      </div>
      <div className="auditView">
        <Col span={24} className='title'>
          <Space size='small'>
            <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h5>审核</h5>
          </Space>
        </Col>
        <Form
          ref={formRef}
          layout='vertical'
          requiredSymbol={false}
          scrollToFirstError={true}
        >
          <Row style={{ marginBottom: '-16px' }}>
  const requestSubmit = async (data) => {
    const res = await submit(data)
    if (res.type) {
      $$.infoSuccess({ content: '提交成功!' });
    }
  }
  return (
    <div className='dataSync'>
      <div className='dataSync-noBackTabPage'>
        <div className="whiteBox">
          <Col span={24} className='title'>
            <Space size='small'>
              <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h5>联合处置申请</h5>
            </Space>
          </Col>
          <Row gutter={[16, 16]}>
            <Col span={24}>
              <FormItem
                label='审核结果'
                field='majorStatus'
              >
                <RadioGroup options={[{ value: 0, label: '否' }, { value: 1, label: '是' }]} direction='vertical' />
              </FormItem>
              <div><div className="title-text">添加配合部门</div></div>
              <div>{infoData.applyAssistUnitName || '-'}</div>
            </Col>
            <Col span={24}>
              <FormItem
                label={(<div style={{ display: 'flex' }}>理由说明<div className="must">必填</div></div>)}
                field='handleContent'
                rules={[{ message: '请填写不同意联合处置申请的理由', required: true }]}
              >
                <Input.TextArea
                  maxLength={200}
                  showWordLimit
                  rows={5}
                  placeholder='请完整描述事项概况,应具备5要素:发生时间+发生地点+人物情况+事项起因+事项经过'
                  wrapperStyle={{ width: '100%' }}
                />
              </FormItem>
              <div><div className="title-text">添加理由</div></div>
              <div>{infoData.applyContent || '-'}</div>
            </Col>
            <Col span={24}>
              <FormItem
                label={<div style={{ display: 'flex' }}>
                  <span style={{ color: '#86909C' }}>附件材料</span>
                  <Tooltip>
                    <img src={question1} alt="" style={{ width: '13px', height: '13px', margin: '4px 4px 0px 4px' }} />
                  </Tooltip>
                </div>
                }
                field='caseDes'
                rules={[{ message: '请填写事项概况', required: true }]}
              >
                <ArcoUpload
                  params={{
                    action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId='24083010062110001'&&ownerId=${id}&ownerType=22_00018-102`,
                  }}
                  field='file1'
                  // handleChangeFile={handleChangeFile}
                  label=''
                  // editData={props.editData}
                  handleDelFile={handleDelFile}
                />
              </FormItem>
              <div className="title"><div className="title-text">申请时间</div></div>
              <div>{$$.myTimeFormat(infoData.applyTime, 'YYYY-MM-DD HH:mm') || '-'}</div>
            </Col>
            <Col span={24}>
              <div><div className="title-text">申请人</div></div>
              <div>
                {infoData.applyUnitName}&nbsp;&nbsp;
                {infoData.applyUserName || '-'}
                <img src={register} alt="" className="title-register" />
              </div>
            </Col>
          </Row>
        </Form>
        <Space style={{}}>
          <Button type='primary' >提交</Button>
          <Button type='secondary'>返回上级页面</Button>
        </Space>
      </div>
    </>
        </div>
        <div className='whiteBox' style={{ marginTop: '8px' }}>
          <Scrollbars style={{ height: height + 'px' }} autoHide ref={scrollRef}>
            <Space size='small'>
              <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>审核</h5>
            </Space>
            <Form
              ref={formRef}
              layout='vertical'
              requiredSymbol={false}
              initialValues={{
              }}//默认值
              scrollToFirstError
            >
              <Row>
                <Col span={24}>
                  <FormItem
                    label={(<div style={{ display: 'flex' }}>审核结果</div>)}
                    field='auditResult'
                  >
                    <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='auditContent'
                    rules={[{ required: true, message: '请选择理由说明' }]}
                  >
                    <TextArea
                      autoSize={{ minRows: 4, maxRows: 8 }}
                      placeholder='请填写不同意联合处置申请的理由'
                    />
                  </FormItem>
                </Col>
                <Col span={24} className="doubleFile">
                  <ArcoUpload
                    params={{
                      action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.caseId}&ownerId=${id}&ownerType=22_00018-509`,
                    }}
                    field='file'
                    label='附件材料'
                    handleDelFile={handleDelFile}
                  />
                </Col>
              </Row>
            </Form>
          </Scrollbars>
          <div className='dialogFooter'>
            <Button
              type="primary"
              className="dialogPrimary"
              onClick={handleSubmit}
            >
              提交
            </Button>
          </div>
        </div>
      </div>
    </div>
  )
}
gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx
@@ -16,19 +16,11 @@
import SupervisingView from '../../matterDetail/Supervising'
import UniteHandle from '../../matterDetail/UniteHandle';
import { useNavigate } from 'react-router-dom';
import MyUpload from '@/components/MyUpload';
const Option = Select.Option;
const FormItem = Form.Item;
const TabPane = Tabs.TabPane;
const appUrl = $$.appUrl;
function choosePrincipalApi(caseId, userId) {
  return $$.ax.request({ url: `caseInfoUnfold/choosePrincipal?caseId=${caseId}&userId=` + userId, type: 'get', service: 'mediate' });
@@ -92,9 +84,34 @@
  const [caseResultId, setCaseResultId] = useState('');
  const [managerName, setManagerName] = useState('')
  const [progressData, setProgressData] = useState({});
  const [staticButtonList, setStaticButtonList] = useState([])
  const myButton = [
    {
      label: '添加办理记录',
      type: 'primary',
      click: () => addMark(),
      key: 'tjbljl',
    },
    {
      label: '联合处置申请',
      type: 'outline',
      click: () => uniteHandle(),
      key: 'lhczsq',
    },
    {
      label: '结案申请',
      type: 'outline',
      click: () => uniteHandle(),
      key: 'jasq',
    },
    {
      label: '督办',
      type: 'outline',
      click: () => Supervising(),
      key: 'db',
    },
  ]
  const tabs1 = [
    { index: '1', label: '公共模板:提醒尽快启动调解程序督办模板' },
@@ -104,12 +121,6 @@
  const options = [
    { value: '1', label: '一' }, { value: '2', label: '二' }, { value: '3', label: '三' }
  ];
  const handleCheckedKeys = (userId) => {
    choosePrincipal(userId)
@@ -217,8 +228,9 @@
      if (type === 'uniteHandle') {
        setUniteHandleId(res.data)
      }
      if (type === 'addMark')
      if (type === 'addMark') {
        setId(res.data)
      }
      if (type === 'caseResult') {
        setCaseResultId(res.data)
      }
@@ -313,19 +325,20 @@
    getFeedbackInfo();
  }, [])
  // useEffect(() => {
  //   if (authorData) {
  //     const { buttonList } = authorData;
  //     setStaticButtonList(myButton.filter(item => {
  //       const flag = buttonList.some(result => {
  //         if (result.id === item.key) {
  //           return true
  //         }
  //       })
  //       return flag
  //     }))
  //   }
  // }, [authorData])
  useEffect(() => {
    if (authorData) {
      const { buttonList } = authorData;
      setStaticButtonList(myButton.filter(item => {
        const flag = buttonList.some(result => {
          if (result.id === item.key) {
            return true
          }
        })
        return flag
      }))
      console.log(buttonList, myButton);
    }
  }, [authorData])
@@ -451,14 +464,13 @@
            {!formView &&
              <div className="dataSync-excel">
                <Space size="middle" style={{ margin: '4px 14px' }}>
                  <Button type="primary" style={{ backgroundColor: '#1A6FB8' }} onClick={() => addMark()}>添加办理记录</Button>
                  <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} onClick={() => uniteHandle()}>联合处置申请</Button>
                  <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} onClick={() => handleCaseResultApply()} >结案申请</Button>
                  <Button type='outline' style={{ color: '#EF6C24', border: '1px solid #EF6C24' }} onClick={() => Supervising()}>督办</Button>
                  {staticButtonList?.map(item => {
                    const { label, key, click, ...rest } = item;
                    return <Button key={key} onClick={click} {...rest} >{label}</Button>
                  })}
                  <Button type='secondary' onClick={() => navigate(-1)}>返回上级页面</Button>
                </Space>
              </div>
            }
          </div>
          <div className='container-bottom-right'>
@@ -475,29 +487,6 @@
                  <div className='progress' style={{ paddingBottom: '16px', marginTop: '0px' }} >
                    <ProgressStep progressData={progressData} hasTab={true} />
                  </div>
                  {/* <div style={{ display: 'flex', marginLeft: '16px', gap: '16px' }}>
                    {tabs.map((tab) => (
                      <div
                        key={tab.index}
                        style={{
                          color: selectedTab === tab.index ? 'rgba(26,111,184,1)' : 'rgba(0,0,0,0.45)',
                          padding: '6px 12px',
                          border: `1px solid ${selectedTab === tab.index ? 'rgba(26,111,184,1)' : 'rgba(229,230,235,1)'}`,
                          borderRadius: '4px',
                          cursor: 'pointer',
                        }}
                        onClick={() => handleTabChange(tab.index)}
                      >
                        {tab.label}
                      </div>
                    ))}
                  </div>
                  {selectedTab === '1' &&
                    <div className='progress'>
                      <ProgressStep progressData={fakeData} />
                    </div>
                  } */}
                </Typography.Paragraph>
              </TabPane>
              <TabPane
@@ -642,7 +631,7 @@
            </Row>
          </Form>
        </Modal>
        <UniteHandle id={uniteHandleId} visible={uniteHandleView} handleOnCancel={() => setUniteHandleView(false)} />
        <UniteHandle id={uniteHandleId} visible={uniteHandleView} handleOnCancel={() => setUniteHandleView(false)} caseId={caseId} caseTaskId={caseTaskId} />
        <CaseResult visible={caseResult} handleOnCancel={() => SetCaseResult(false)} caseResultId={caseResultId} caseId={caseId} caseTaskId={caseTaskId} />
      </div>
gz-customerSystem/src/views/register/handleFeedback/index.jsx
@@ -14,13 +14,13 @@
import "@arco-themes/react-gzzz/css/arco.css";
import '../index.less';
import { Typography, Steps, Tabs } from '@arco-design/web-react';
import { Audit, Matter, applyRecord, transfer, Aimge } from '@/assets/images'
import { Audit, Matter, applyRecord, transfer, Aimge, examine } from '@/assets/images'
import MatterDetail from '../matterDetail';
import Handle from './component/handle';
import AuditView from './component/AuditView';
import { AiQuestion } from '../visit/component/levelDetail';
import * as $$ from '@/utils/utility';
import { useParams } from 'react-router-dom';
import ApplyInfo from "../matterDetail/ApplyInfo";
const Step = Steps.Step;
@@ -38,8 +38,6 @@
    return $$.ax.request({ urlAi: `case-law/get-law`, typeAi: 'post', service: 'mediate', data });
}
function getTabButton(caseTaskId) {
    return $$.ax.request({ url: `caseTask/getTabButton?caseTaskId=` + caseTaskId, type: 'get', service: 'mediate' });
}
@@ -48,10 +46,7 @@
    return $$.ax.request({ url: '/caseInfo/getCaseInfo?id=' + id, type: 'get', service: 'mediate' });
}
const Organization = () => {
    const routeData = useParams();
    const caseTaskId = $$.getQueryString('caseTaskId')
    const caseId = $$.getQueryString('caseId')
    const [current, setCurrent] = useState(3);
@@ -60,9 +55,7 @@
    const [aiData, setAiData] = useState([])
    const [aiLawData, setAiLawData] = useState([]);
    const [caseDetailAi, setCaseDetailAi] = useState({});
    const [caseDetailView, setCaseDetail] = useState({})
    const [authorData, setAuthorData] = useState({});
    const [disTab, setDisTab] = useState(true);
    const [tabsList, setTabsList] = useState([]);
    const myTab = [
        {
@@ -71,35 +64,44 @@
            key: "sxxq"
        },
        {
            img: transfer,
            img: transfer,
            label: '事项办理',
            key: "sxbl",
            isNeedStep: true,
        },
        // {
        //     img: applyRecord,
        //     label: '申请记录',
        //     key: "sqjl",
        // },
        {
            img: applyRecord,
            label: '申请记录',
            key: "sqjl",
        },
        {
            img: examine,
            label: '联合处置审核',
            key: 'lhczsh',
        },
    ]
    useEffect(() => {
        getCaseInfo(caseId)
        getAuthor();
    }, [])
    const handleAi = () => {
        setAiQuestionView(true)
    }
    const getCase = async (caseDes,caseClaim) => {
    const getCase = async (caseDes, caseClaim) => {
        const res = await getCaseApi({
            caseDes: caseDes,
            caseClaim: caseClaim,
            caseId: caseId
        })
        console.log(res.data, 'res')
        if (res.type) {
            setAiData(res.data)
        }
    }
    const getLaw = async (caseDes,caseClaim) => {
    const getLaw = async (caseDes, caseClaim) => {
        const res = await getLawApi({
            caseDes: caseDes,
            caseClaim: caseClaim,
@@ -110,17 +112,13 @@
        }
    }
    const getAuthor = async () => {
        const res = await getTabButton(caseTaskId)
        if (res.type) {
            const { tabList } = res.data
            console.log(tabList, 'tabList1')
            setAuthorData(res.data)
            if (tabList.length === 0) {
                //没有tab就不展示
                setDisTab(false)
            } else {
                setTabsList(myTab.filter(item => {
                    const flag = tabList.some(result => {
@@ -130,7 +128,6 @@
                    })
                    return flag
                }))
                console.log(tabsList, 'tabsList2')
                setTabsActive(tabList[0].id)
            }
        }
@@ -143,24 +140,26 @@
            let caseDes = res.data.caseDes;
            let caseClaim = res.data.caseClaim;
            setCaseDetailAi(caseDes)
            getCase(caseDes,caseClaim);
            getLaw(caseDes,caseClaim);
            getCase(caseDes, caseClaim);
            getLaw(caseDes, caseClaim);
        }
    }
    useEffect(() => {
        getCaseInfo(caseId)
        getAuthor();
        // getCase();
        // getLaw();
        console.log(caseDetailAi, 'caseDetailAi')
    }, [])
    //根据id定义组件
    const getTypeDom = (key) => {
        if (key === 'sxxq') {
            return <MatterDetail hasApplet={true} hasEditBtn={true} authorData={authorData} caseId={caseId} />
        }
        if (key === 'sxbl') {
            return <Handle authorData={authorData} caseId={caseId} caseTaskId={caseTaskId} />
        }
        if (key === 'sqjl') {
            return <ApplyInfo />
        }
        if (key === 'lhczsh') {
            return <AuditView authorData={authorData} caseId={caseId} caseTaskId={caseTaskId} />
        }
    }
    return (
        <div style={{ position: 'relative', height: '100vh' }}>
@@ -170,9 +169,9 @@
                }
            >
                <Tabs
                    defaultActiveTab='sxxq'
                    onChange={(v) => setTabsActive(v)}
                    className='myTabContent'
                    activeTab={tabsActive}
                >
                    {tabsList?.map(item => {
                        return <TabPane
@@ -196,19 +195,7 @@
                                    </Steps>
                                </div>
                            }
                            {tabsActive === 'sxxq' &&
                                <MatterDetail hasApplet={true} hasEditBtn={true} authorData={authorData} caseId={caseId} />
                            }
                            {
                                tabsActive === 'sxbl' && <Typography.Paragraph style={style}>
                                    <Handle authorData={authorData} caseId={caseId} caseTaskId={caseTaskId} />
                                </Typography.Paragraph>
                            }
                            {
                                tabsActive === 'sqjl' && <Typography.Paragraph style={style}>
                                    <AuditView authorData={authorData} />
                                </Typography.Paragraph>
                            }
                            {getTypeDom(item.key)}
                        </TabPane>
                    })}
                </Tabs>
gz-customerSystem/src/views/register/index.jsx
@@ -848,7 +848,7 @@
              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>
              ),
            }]),
gz-customerSystem/src/views/register/index.less
@@ -716,6 +716,7 @@
    position: absolute;
    right: 0;
    top: 60%;
    cursor: pointer;
}
.aiBox {
gz-customerSystem/src/views/register/matterDetail/UniteHandle.jsx
@@ -1,30 +1,28 @@
import React, { useState, useRef } from 'react';
import { Form, Input, Tabs, Typography, Button, Modal, Select } from '@arco-design/web-react';
import { Col, Space, Row, Tooltip } from 'antd';
import { Form, Input, Button, Modal, Select, Tooltip } from '@arco-design/web-react';
import { Col, Row } from 'antd';
import ArcoUpload from '@/components/ArcoUpload';
import * as $$ from '@/utils/utility';
import { question1, } from '@/assets/images';
import SelectObjModal from '@/components/SelectObjModal/selectPerson';
const FormItem = Form.Item;
const Option = Select.Option;
const appUrl = $$.appUrl;
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
}
function postAssistApply(data) {
  return $$.ax.request({ url: `caseAssistApply/addCaseAssistApply`, type: 'post', service: 'mediate', data });
}
const UniteHandle = ({ id, visible, handleOnCancel }) => {
const UniteHandle = ({ id, visible, handleOnCancel, caseId, caseTaskId }) => {
  const formRef = useRef();
  const [supervising, setSupervising] = useState(false);
  const [fileVisible, setFileVisible] = useState(false);
  const options = [
    { value: '1', label: '一' }, { value: '2', label: '二' }, { value: '3', label: '三' }
  ];
  const [isModalVisible, setIsModalVisible] = useState(false);
  const [wantUser, setWantUser] = useState([]);
  const [selectOptions, setSelectOptions] = useState([]);//部门选择的options
  //删除文件
  const handleDelFile = async (id) => {
@@ -35,84 +33,125 @@
  }
  const handleSupervising = () => {
    setSupervising(!supervising)
    formRef.current.validate(undefined, (errors, values) => {
      if (!errors) {
        handleJoint({
          id,
          caseId,
          applyContent: values.applyContent,
          applyAssistUnitId: wantUser?.map(item => item.value).join(',') || '',
          applyAssistUnitName: wantUser?.map(item => item.name).join(',') || '',
        })
      }
    })
  }
  //form数据同步要提交的数据
  const handleSync = (value) => {
    let newList = wantUser.filter(item => value.indexOf(item.value) != -1)
    setWantUser(newList);
  }
  //联合处置请求
  const handleJoint = async (data) => {
    const res = await postAssistApply(data)
    if (res.type) {
      $$.infoSuccess({ content: '提交申请成功!' });
      handleOnCancel();
    }
  }
  return (
    <>
      <Modal visible={visible} onCancel={handleOnCancel} title='联合处置申请' centered footer={null}>
        <Form
          ref={formRef}
          layout='vertical'
          requiredSymbol={false}
          scrollToFirstError={true}
          initialValues={{
            suggestion: ''
          }}//默认值
        >
          <Row>
            <Col span={24}>
              <FormItem
                label={<div style={{ display: 'flex' }}><div>添加配合部门</div><div style={{ color: '#86909C' }}>(可多选)</div></div>}
                field=''
    <Modal
      visible={visible}
      onCancel={handleOnCancel}
      title='联合处置申请'
      centered
      footer={null}
      unmountOnExit={true}
      maskClosable={false}
      autoFocus={false}
      focusLock={false}
    >
      <Form
        ref={formRef}
        layout='vertical'
        requiredSymbol={false}
        scrollToFirstError={true}
        initialValues={{
          applyContent: '在事项办理过程中:\n因[......业务]涉及白云区新市街司法所\n因[......业务]涉及白云区新市街劳监大队\n特申请将上述部门列为配合部门,请审批'
        }}//默认值
      >
        <Row>
          <Col span={24}>
            <FormItem
              label={<div style={{ display: 'flex' }}><div>添加配合部门</div><div style={{ color: '#86909C' }}>(可多选)</div></div>}
              field='unit'
            >
              <Select
                mode='multiple'
                placeholder='请选择配合部门'
                allowClear
                onFocus={(e) => {
                  e.stopPropagation()
                  setIsModalVisible(true)
                }}
                options={selectOptions}
                onChange={handleSync}
              >
                <Select
                  mode='multiple'
                  placeholder='请选择督办部门'
                  style={{}}
                  allowClear
                >
                  {options.map((option) => (
                    <Option key={option.value} value={option.value} onChange={(v) => console.log(v, 'vvvvvv')}>
                      {option.label}
                    </Option>
                  ))}
                </Select>
              </FormItem>
            </Col>
            <Col span={24}>
              <FormItem
                field='suggestion'
                label={(<div style={{ display: 'flex' }}>添加理由<div className="must">必填</div></div>)}
              >
                <Input.TextArea
                  rows={5}
                  wrapperStyle={{ width: '700px' }}
                  value='在事项办理过程中:因[......业务]涉及白云区新市街司法所因[......业务]涉及白云区新市街劳监大队特申请将上述部门列为配合部门,请审批'
                />
              </FormItem>
            </Col>
            <Col span={24}>
              <FormItem
                label={
                  <div>
                    附件材料
                    <Tooltip onClick={() => setFileVisible(true)}>
                      <img src={question1} alt="" style={{ width: '13px', height: '13px', margin: '-3px 4px 0px 4px' }} />
                    </Tooltip>
                  </div>
                }
                field='caseDes'
                rules={[{ message: '请填写事项概况', required: true }]}
              >
                <ArcoUpload
                  params={{
                    action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId='24083010062110001'&&ownerId=${id}&ownerType=22_00018-508`,
                  }}
                  field='file1'
                  // handleChangeFile={handleChangeFile}
                  label=''
                  // editData={props.editData}
                  handleDelFile={handleDelFile}
                />
              </FormItem>
            </Col>
            <Button type='primary' style={{ marginTop: '-16px' }} onClick={() => handleSupervising()}>提交申请</Button>
          </Row>
        </Form>
      </Modal>
    </>
              </Select>
            </FormItem>
          </Col>
          <Col span={24}>
            <FormItem
              field='applyContent'
              label={(<div style={{ display: 'flex' }}>添加理由<div className="must">必填</div></div>)}
              rules={[{ required: true, message: '请输入添加理由' }]}
            >
              <Input.TextArea
                rows={5}
              />
            </FormItem>
          </Col>
          <Col span={24}>
            <ArcoUpload
              params={{
                action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${caseId}&&ownerId=${id}&ownerType=22_00018-508`,
              }}
              field='file'
              label={
                <div>
                  附件材料
                  <Tooltip>
                    <img src={question1} alt="" style={{ width: '13px', height: '13px', margin: '-3px 4px 0px 4px' }} />
                  </Tooltip>
                </div>
              }
              handleDelFile={handleDelFile}
            />
          </Col>
          <div className='dialogFooter'>
            <Button type='primary' style={{ marginTop: '-16px' }} onClick={handleSupervising}>提交申请</Button>
          </div>
        </Row>
      </Form>
      <SelectObjModal
        visible={isModalVisible}
        checkKeys={wantUser}
        onOk={(value) => {
          console.log(value);
          setWantUser(value.items)
          setSelectOptions(value.items.map(item => ({
            label: item.name,
            value: item.value
          })))
          formRef.current.setFieldValue('unit', value.items.map(item => item.value))
        }}
        onClose={() => setIsModalVisible(false)}
        type='dept'
        isCheckbox={true}
      />
    </Modal>
  )
}