| | |
| | | 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 后面接附件编号 |
| | |
| | | } |
| | | |
| | | // 时间格式化 |
| | | 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) { |
| | |
| | | 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 = [ |
| | |
| | | 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和按钮权限 |
| | |
| | | } |
| | | } |
| | | |
| | | 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') { |
| | |
| | | return <ApplyInfo /> |
| | | } |
| | | if (key === 'jash') { |
| | | return <ReviewExamine caseTaskId={caseTaskId} caseId={caseId} id={windupId} /> |
| | | return <ReviewExamine caseTaskId={caseTaskId} caseId={caseId} /> |
| | | } |
| | | } |
| | | |
| | |
| | | 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'; |
| | | |
| | |
| | | } |
| | | |
| | | export default function BackModel(props) { |
| | | const routeData = useParams(); |
| | | const navigate = useNavigate(); |
| | | const formRef = useRef(); |
| | | const [isModalVisible, setIsModalVisible] = useState(false); |
| | |
| | | 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, |
| | |
| | | |
| | | //交办请求 |
| | | const handleAssign = async (data) => { |
| | | const res = await assign({ ...data, caseTaskId: props.caseTaskId }) |
| | | const res = await assign(data) |
| | | if (res.type) { |
| | | $$.infoSuccess({ content: '交办成功!' }); |
| | | props.onCancel(); |
| | |
| | | }, []) |
| | | |
| | | 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) |
| | |
| | | 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; |
| | |
| | | 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 = [ |
| | | { |
| | |
| | | |
| | | 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 () => { |
| | |
| | | }) |
| | | if (res.type) { |
| | | setInfoData(res.data || {}) |
| | | setId(res.data.id) |
| | | } |
| | | } |
| | | |
| | |
| | | {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> |
| | |
| | | </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> |
| | |
| | | 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> |
| | |
| | | <Col span={24}> |
| | | <FormItem |
| | | label=' ' |
| | | field='audit_content' |
| | | field='auditContent' |
| | | rules={[{ required: true, message: '理由不能为空' }]} |
| | | > |
| | | <TextArea |
| | |
| | | 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; |
| | |
| | | label: '事项详情', |
| | | key: 'sxxq', |
| | | }, |
| | | // { |
| | | // img: applyRecord, |
| | | // label: '申请记录', |
| | | // key: 'sqjl', |
| | | // }, |
| | | { |
| | | img: applyRecord, |
| | | label: '申请记录', |
| | | key: 'sqjl', |
| | | }, |
| | | { |
| | | img: examine, |
| | | label: '回退审核', |
| | |
| | | }, |
| | | ] |
| | | const Organization = () => { |
| | | const routeData = useParams(); |
| | | const caseTaskId = $$.getQueryString('caseTaskId') |
| | | const caseId = $$.getQueryString('caseId') |
| | | const [authorData, setAuthorData] = useState({}); |
| | |
| | | |
| | | //获取权限tab和按钮权限 |
| | | const getAuthor = async () => { |
| | | console.log(caseTaskId, caseId) |
| | | const res = await getTabButton({ |
| | | caseTaskId: caseTaskId |
| | | }) |
| | |
| | | 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' }}> |
| | |
| | | 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) => { |
| | |
| | | } |
| | | } |
| | | |
| | | 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} |
| | | {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> |
| | | ) |
| | | } |
| | | |
| | |
| | | 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' }); |
| | |
| | | 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: '公共模板:提醒尽快启动调解程序督办模板' }, |
| | |
| | | const options = [ |
| | | { value: '1', label: '一' }, { value: '2', label: '二' }, { value: '3', label: '三' } |
| | | ]; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | const handleCheckedKeys = (userId) => { |
| | | choosePrincipal(userId) |
| | |
| | | if (type === 'uniteHandle') { |
| | | setUniteHandleId(res.data) |
| | | } |
| | | if (type === 'addMark') |
| | | if (type === 'addMark') { |
| | | setId(res.data) |
| | | } |
| | | if (type === 'caseResult') { |
| | | setCaseResultId(res.data) |
| | | } |
| | |
| | | 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]) |
| | | |
| | | |
| | | |
| | |
| | | {!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'> |
| | |
| | | <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 |
| | |
| | | </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> |
| | |
| | | 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; |
| | |
| | | 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' }); |
| | | } |
| | |
| | | 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); |
| | |
| | | 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 = [ |
| | | { |
| | |
| | | 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, |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | 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 => { |
| | |
| | | }) |
| | | return flag |
| | | })) |
| | | console.log(tabsList, 'tabsList2') |
| | | setTabsActive(tabList[0].id) |
| | | } |
| | | } |
| | |
| | | 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' }}> |
| | |
| | | } |
| | | > |
| | | <Tabs |
| | | defaultActiveTab='sxxq' |
| | | onChange={(v) => setTabsActive(v)} |
| | | className='myTabContent' |
| | | activeTab={tabsActive} |
| | | > |
| | | {tabsList?.map(item => { |
| | | return <TabPane |
| | |
| | | </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> |
| | |
| | | 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> |
| | | ), |
| | | }]), |
| | |
| | | position: absolute; |
| | | right: 0; |
| | | top: 60%; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .aiBox { |
| | |
| | | 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) => { |
| | |
| | | } |
| | | |
| | | 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> |
| | | ) |
| | | } |
| | | |