Merge branch 'master' of http://120.79.193.119:9090/r/gzzfw/frontEnd/gzDyh into master
3 files added
21 files modified
| | |
| | | 'parentId': '1601', |
| | | 'children': [ |
| | | { |
| | | 'label': '新市街道', |
| | | 'value': '62857', |
| | | 'parentId': '50258', |
| | | }, |
| | | { |
| | | 'label': '云城街道', |
| | | 'value': '129164', |
| | | 'parentId': '50258', |
| | |
| | | { |
| | | 'label': '同德街道', |
| | | 'value': '62856', |
| | | 'parentId': '50258', |
| | | }, |
| | | { |
| | | 'label': '新市街道', |
| | | 'value': '62857', |
| | | 'parentId': '50258', |
| | | }, |
| | | { |
| | |
| | | */ |
| | | export const debug = { |
| | | // web服务 |
| | | baseUrl: 'http://gz.hugeinfo.com.cn', |
| | | // baseUrl: "http://4gg4nv.natappfree.cc", |
| | | // baseUrl: 'http://gz.hugeinfo.com.cn', |
| | | baseUrl: "http://fv633e.natappfree.cc", |
| | | // baseUrl: 'http://mdqgnh.natappfree.cc', |
| | | |
| | | // 附件服务 |
| | | fileUrl: "http://4gg4nv.natappfree.cc", |
| | | fileUrl: "http://fv633e.natappfree.cc", |
| | | // fileUrl: 'http://gz.hugeinfo.com.cn', |
| | | |
| | | // 文件查看url 后面接附件编号 |
| | |
| | | * editData *, // 编辑回显数据 |
| | | * handleDelFile *,//删除文件接口 |
| | | * ownerType,//用于回显文件 |
| | | * formItemParams, formItem的参数 |
| | | */ |
| | | |
| | | export default function ArcoUpload(props) { |
| | |
| | | label={props.label} |
| | | field={props.field} |
| | | triggerPropName='fileList' |
| | | {...props.formItemParams} |
| | | > |
| | | <Upload |
| | | drag |
| | |
| | | * handleClickMenu: function 头部导航点击 |
| | | * handleChangeRole: function 切换角色 |
| | | */ |
| | | const Header = ({ roleActive, headerMenu, headerMenuActive, headerUserChange, handleClickMenu, handleChangeRole }) => { |
| | | let navigate = useNavigate(); |
| | | const Header = ({ roleActive, headerMenu, headerMenuActive, headerUserChange, handleClickMenu, handleChangeRole,userData }) => { |
| | | |
| | | const [data, setData] = useState([]); |
| | | let navigate = useNavigate(); |
| | | |
| | | // 修改密码窗口显示隐藏 |
| | | const [visible, setVisible] = useState(false); |
| | |
| | | |
| | | const userMenu = ( |
| | | <Menu> |
| | | {data?.ctUseroleList?.length > 1 && ( |
| | | {userData?.ctUseroleList?.length > 1 && ( |
| | | <> |
| | | <Menu.Item key="changeRole" onClick={() => setRoleModal({ visible: true, value: roleActive.id })}> |
| | | <UserSwitchOutlined style={{ marginRight: '8px' }} /> |
| | |
| | | } |
| | | } |
| | | |
| | | useEffect(() => { |
| | | setData($$.getLocal('customerSystemUser') || {}); |
| | | }, [headerUserChange]); |
| | | |
| | | return ( |
| | | <header className="header"> |
| | |
| | | <div className="header-user-avatar"> |
| | | <Avatar icon={<UserOutlined />} /> |
| | | <div> |
| | | <div className="header-user-name">{data?.trueName || '-'}</div> |
| | | <div className="header-user-name">{userData?.trueName || '-'}</div> |
| | | <div className="header-user-unit"> |
| | | <span>{data?.unit || '-'}</span> |
| | | <span>{userData?.unit || '-'}</span> |
| | | <span className="public-rightBorder">{roleActive.roleName || '-'}</span> |
| | | <DownCircleFilled style={{ fontSize: '10px', marginLeft: '8px', color: '#ffffff' }} /> |
| | | </div> |
| | |
| | | value={roleModal.value} |
| | | onChange={(e) => setRoleModal({ visible: true, value: e.target.value, name: e.target.label, roleCode: e.target.roleCode })} |
| | | > |
| | | {data?.ctUseroleList?.map((x) => ( |
| | | {userData?.ctUseroleList?.map((x) => ( |
| | | <Radio key={x.roleId} value={x.roleId} label={x.roleName} roleCode={x.roleCode}> |
| | | {x.roleName} |
| | | </Radio> |
| | |
| | | * @Version: 1.0.0 |
| | | * @Description: 外层layout |
| | | */ |
| | | import React, { useState, useRef, useEffect } from 'react'; |
| | | import { useLocation, Outlet, useNavigate } from 'react-router-dom'; |
| | | import React, { useState, useRef, useEffect } from 'react'; |
| | | import { useLocation, Outlet, useNavigate,useSearchParams } from 'react-router-dom'; |
| | | import './index.less'; |
| | | import Header from './Header'; |
| | | import Navigation from './Navigation'; |
| | |
| | | |
| | | //网格跳转请求状态 |
| | | const [gridStatus, setGridStatus] = useState(false) |
| | | const [searchParams] = useSearchParams(); |
| | | const [userData, setUserData] = useState({}); |
| | | |
| | | |
| | | // 切换头部menu |
| | | function handleClickHeaderMenu(values) { |
| | |
| | | $$.clearSessionStorage(); |
| | | $$.setSessionStorage('customerSystemToken', res.data?.token); |
| | | $$.setLocal('customerSystemUser', res.data || {}); |
| | | console.log('getGridToken', res.data); |
| | | setUserData(res.data || {}) |
| | | let ctUseroleList = res.data?.ctUseroleList || []; |
| | | console.log(ctUseroleList); |
| | | const roleId = ctUseroleList[0]?.roleId |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | // 初始化 格式化数据适应菜单栏 |
| | | useEffect(() => { |
| | | //单点登录,网格传一个token在session,如果有就请求接口 |
| | | const gridToken = $$.getSessionStorage('gridToken'); |
| | | // const gridToken = $$.getSessionStorage('gridToken'); |
| | | |
| | | const gridToken = searchParams.get('gridToken'); // 获取名为 'gridToken' 的参数 |
| | | console.log(gridToken,'gridToken') |
| | | if (gridToken) { |
| | | getGridToken(gridToken) |
| | | } else { |
| | |
| | | return; |
| | | } |
| | | let customerSystemUser = $$.getLocal('customerSystemUser'); |
| | | setUserData(customerSystemUser || {}) |
| | | let ctUseroleList = customerSystemUser?.ctUseroleList || []; |
| | | if (ctUseroleList[0]?.roleId) { |
| | | setRoleActive({ id: ctUseroleList[0]?.roleId, roleName: ctUseroleList[0]?.roleName, powerMap: {} }); |
| | |
| | | getRolePower(roleActive.id, roleActive.roleName); |
| | | } |
| | | }, [roleActive.id]); |
| | | useEffect(() => { |
| | | let customerSystemUser = $$.getLocal('customerSystemUser'); |
| | | setUserData(customerSystemUser || {}); |
| | | }, [headerUserChange]); |
| | | console.log(gridStatus); |
| | | return ( |
| | | <> |
| | |
| | | handleClickMenu={handleClickHeaderMenu} |
| | | headerUserChange={headerUserChange} |
| | | handleChangeRole={handleChangeRole} |
| | | userData={userData} |
| | | /> |
| | | {gridStatus && isNotNav ? ( |
| | | <main className="layout-main" id="layoutMain"> |
| | |
| | | */ |
| | | const ProgressStep = ({ progressData, hasTab }) => { |
| | | const [proType, setProType] = useState('handleCaseFlowList') |
| | | const [assistType, setAssistType] = useState(progressData.assistCaseFlowList && progressData.assistCaseFlowList[0]?.unitId || '') |
| | | const [progressList, setProgressList] = useState([]); |
| | | const iconMap = { |
| | | 1: ledger_7,//完成 |
| | | 2: ledger_12,//回退 |
| | |
| | | |
| | | useEffect(() => { |
| | | setProType('handleCaseFlowList') |
| | | setProgressList(progressData.handleCaseFlowList) |
| | | }, [progressData]) |
| | | |
| | | //详细结果的处理 |
| | | const typeDom = (data) => { |
| | | //审核结果同意 |
| | | if (data.auditResult && data.auditResult == '24_00004-1') { |
| | | return <span>审核结果:<span style={{ color: '#00B42A' }}>{data.auditResultName}</span></span> |
| | | } |
| | | //审核结果不同意 |
| | | if (data.auditResult && data.auditResult == '24_00004-2') { |
| | | return <span>审核结果:<span style={{ color: '#FF4D4F' }}>{data.auditResultName}</span></span> |
| | | } |
| | | //化解结果成功 |
| | | if (data.mediResult && data.mediResult == '22_00025-1') { |
| | | return <span>审核结果:<span style={{ color: '#00B42A' }}>{data.mediResultName}</span></span> |
| | | } |
| | | //化解结果不成功 |
| | | if (data.mediResult && data.mediResult == '22_00025-2') { |
| | | return <span>审核结果:<span style={{ color: '#FF4D4F' }}>{data.mediResultName}</span></span> |
| | | } |
| | | return <span>{data.handleNotes || '-'}</span> |
| | | } |
| | | |
| | | return ( |
| | | <Fragment> |
| | | {hasTab && |
| | | <div className='tabBtn'> |
| | | {btnList.map((item, index) => { |
| | | return <div |
| | | className={`tabBtn-btn ${proType === item.value ? 'tabBtn-active' : ''}`} |
| | | key={item.value} |
| | | onClick={() => { setProType(item.value) }} |
| | | style={{ marginRight: (index + 1) !== btnList.length ? '20px' : '0' }} |
| | | >{item.label}</div> |
| | | })} |
| | | |
| | | </div> |
| | | <> |
| | | <div className='tabBtn'> |
| | | {btnList.map((item, index) => { |
| | | return <div |
| | | className={`tabBtn-btn ${proType === item.value ? 'tabBtn-active' : ''}`} |
| | | key={item.value} |
| | | onClick={() => { |
| | | setProType(item.value) |
| | | if(item.value == 'handleCaseFlowList') { |
| | | setProgressList(progressData.handleCaseFlowList) |
| | | } else { |
| | | const findData = progressData.assistCaseFlowList?.find(res => res.unitId == assistType) || {} |
| | | setProgressList(findData.caseFlowList || []) |
| | | } |
| | | }} |
| | | style={{ marginRight: (index + 1) !== btnList.length ? '20px' : '0' }} |
| | | >{item.label}</div> |
| | | })} |
| | | </div> |
| | | { |
| | | proType == 'assistCaseFlowList' && <div className='tabBtn'> |
| | | {progressData.assistCaseFlowList?.map(item => { |
| | | return <div |
| | | key={item.unitId} |
| | | className={`tabBtn-unit ${assistType === item.unitId ? 'tabBtn-unitActive' : ''}`} |
| | | onClick={() => { |
| | | setAssistType(item.unitId) |
| | | setProgressList(item.caseFlowList) |
| | | }} |
| | | > |
| | | {item.unitName} |
| | | </div> |
| | | })} |
| | | </div> |
| | | } |
| | | </> |
| | | } |
| | | {progressData[proType] && progressData[proType].length !== 0 |
| | | ? progressData[proType].map((x, t) => { |
| | | {progressList && progressList.length !== 0 |
| | | ? progressList.map((x, t) => { |
| | | return ( |
| | | <div key={t + 1}> |
| | | <div className="myStep-item"> |
| | | {t === progressData[proType].length - 1 ? null : <div className={`${!x.handleContent ? 'myStep-item-divider' : x.fileInfoList?.length > 0 ? 'myStep-item-divider2' : "myStep-item-divider1"} ${x.status === '2' && 'myStep-item-divider-success'}`} />} |
| | | <div className={`myStep-item-icon1 myStep-item-${x.status === 1 ? 'noStarted1' : 'success1'}`}> |
| | | <div className="myStep-item-title">{x.nodeShowName || '事件流转'}</div> |
| | | <img className='myStep-item-img' src={x.status === 1 ? ledger_8 : iconMap[x.taskType]} alt="" /> |
| | | <div> |
| | | <div className={`myStep-item-icon1 myStep-item-${x.status === 1 ? 'noStarted1' : 'success1'}`}> |
| | | <div className="myStep-item-title">{x.nodeShowName || '事件流转'}</div> |
| | | <img className='myStep-item-img' src={x.status === 1 ? ledger_8 : iconMap[x.taskType]} alt="" /> |
| | | </div> |
| | | {t === progressList.length - 1 ? null : <div className='myStep-item-divider' />} |
| | | </div> |
| | | <div className="myStep-item-right"> |
| | | {t === progressData[proType].length - 1 ? |
| | | {x.status === 1 ? |
| | | <div> |
| | | <div className="myStep-item-p" style={{ color: 'rgba(0,0,0,0.50)' }}> |
| | | {x.processName} |
| | | {x.processName || '-'} |
| | | </div> |
| | | <div className="myStep-item-p"> |
| | | <span>{x.handleUnitName || '-'}</span> |
| | |
| | | x.handleNotes && |
| | | <div className='myStep-item-p-yy' style={{ width: '200px' }}> |
| | | <span className='myStep-item-p-yy-l'> |
| | | <span><Tooltip placement="top" title={x.handleNotes || ''}><span>{x.handleNotes || '-'}</span></Tooltip></span> |
| | | <span> |
| | | <Tooltip placement="top" title={x.handleNotes || ''}> |
| | | {typeDom(x)} |
| | | </Tooltip> |
| | | </span> |
| | | </span> |
| | | </div> |
| | | } |
| | |
| | | .myStep { |
| | | &-item { |
| | | position: relative; |
| | | padding-bottom: 32px; |
| | | padding-bottom: 34px; |
| | | |
| | | &-success { |
| | | background-color: @main-color; |
| | |
| | | |
| | | &-divider { |
| | | position: absolute; |
| | | top: 0; |
| | | top: 56px;//52+4 |
| | | left: 24px; |
| | | width: 3px; |
| | | height: 32px+52px; |
| | | padding-top: 22px; |
| | | width: 2px; |
| | | bottom: 4px; |
| | | |
| | | &::after { |
| | | content: ''; |
| | | display: inline-block; |
| | | height: 32px+52px; |
| | | height: 100%; |
| | | border-left: 2px solid; |
| | | border-color: @divider-color; |
| | | } |
| | |
| | | border: 1px solid #e5e6eb; |
| | | border-radius: 4px; |
| | | color: #e5e6eb; |
| | | padding: 4px 8px; |
| | | padding: 3px 8px 4px 8px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | |
| | | color: #1a6fb8; |
| | | border-color: #1a6fb8; |
| | | } |
| | | |
| | | &-unit { |
| | | height: 32px; |
| | | border-radius: 21px; |
| | | color: #1D2129; |
| | | padding: 3px 12px 4px 12px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | &-unitActive { |
| | | background: #f3f2f7; |
| | | color: #1a6fb8; |
| | | } |
| | | } |
| | |
| | | ...res, |
| | | value: filterValue |
| | | } |
| | | } else if (res.field === 'extreme') { |
| | | return { |
| | | ...res, |
| | | value: data[res.field] === 0 ? '否' : '是' |
| | | } |
| | | } else { |
| | | return { |
| | | ...res, |
| | |
| | | import ClosingReview from '../views/register/closingReview'; |
| | | //工作台 |
| | | import VisitWorkBench from '../views/register'; |
| | | //自行排查 |
| | | import SelfInspection from '../views/register/visit/SelfInspection'; |
| | | |
| | | import Test from '../views/test'; |
| | | |
| | |
| | | <Route path="visit/fileMessage" element={<FileMessage />} /> |
| | | <Route path="visit/closingReview" element={<ClosingReview />} /> |
| | | <Route path="visit/visitWorkBench" element={<VisitWorkBench />} /> |
| | | <Route path="selfInspection/:id?" element={<SelfInspection />} /> |
| | | |
| | | {/* 工作流模块 */} |
| | | <Route path="workflowTemplate" element={<WorkflowTemplate />} /> |
| | |
| | | { title: '事项来源', width: 100, dataIndex: 'canalName' }, |
| | | { title: '事项等级', width: 100, dataIndex: 'caseLevel' }, |
| | | { title: '纠纷类型', width: 150, dataIndex: 'caseTypeName' }, |
| | | { title: '承办部门', width: 150, dataIndex: 'mediateDeptName' }, |
| | | { title: '承办部门', width: 150, dataIndex: 'mediateUnitName' }, |
| | | { title: '配合部门', width: 150, dataIndex: 'assistUnitName' }, |
| | | // 22_00025-1 成功 22_00025-2 化解不成功 |
| | | { title: '化解结果', width: 100, dataIndex: 'mediResult', render: (text) => <div className={text === '22_00025-1' ? 'comprehensive-green' : text === '22_00025-2' ? 'comprehensive-red' : '-'} >{text === '22_00025-1' ? '化解成功' : text === '22_00025-2' ? '化解不成功' : '-'}</div> }, |
| | |
| | | } |
| | | |
| | | const handleSubmit = () => { |
| | | formRef.current.validate(undefined, (errors, values) => { |
| | | if (formRef.current) { |
| | | formRef.current.validate(undefined, (errors, values) => { |
| | | if (!errors) { |
| | | handleEscala({ |
| | | id, |
| | | caseId: props.caseId, |
| | | caseTaskId: props.caseTaskId, |
| | | returnContent: values.returnContent, |
| | | ...unitData |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | if (formRef.current) { |
| | | formRef.current.validate(undefined, (errors, values) => { |
| | | if (!errors) { |
| | | handleEscala({ |
| | | id, |
| | | caseId: props.caseId, |
| | | caseTaskId: props.caseTaskId, |
| | | appearContent: values.appearContent, |
| | | ...unitData |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | |
| | | const handleTemplate = (type) => { |
| | |
| | | </div> |
| | | <FormItem |
| | | label={(<div style={{ display: 'flex' }}>上报意见<div className="must">必填</div></div>)} |
| | | field='returnContent' |
| | | field='appearContent' |
| | | rules={[{ required: true, message: '请选择回退理由' }]} |
| | | > |
| | | <TextArea |
| | |
| | | }) |
| | | if (res.type) { |
| | | $$.infoSuccess({ content: '受理成功!' }); |
| | | navigate(`/mediate/visit/handleFeedback?caseTaskId=${props.caseTaskId}&caseId=${props.caseId}`) |
| | | navigate(`/mediate/visit/handleFeedback?caseTaskId=${res.data}&caseId=${props.caseId}`) |
| | | } |
| | | }, |
| | | }); |
| | |
| | | import * as $$ from '@/utils/utility'; |
| | | import { Scrollbars } from "react-custom-scrollbars"; |
| | | import { getOffset, getSize } from '@/utils/utility'; |
| | | import { useNavigate } from 'react-router-dom'; |
| | | |
| | | const FormItem = Form.Item; |
| | | const appUrl = $$.appUrl; |
| | |
| | | } |
| | | |
| | | const AuditView = (props) => { |
| | | const navigate = useNavigate(); |
| | | const formRef = useRef(); |
| | | const scrollRef = useRef(null); |
| | | const [id, setId] = useState(); |
| | |
| | | const res = await submit(data) |
| | | if (res.type) { |
| | | $$.infoSuccess({ content: '提交成功!' }); |
| | | navigate('/mediate/visit/visitWorkBench') |
| | | } |
| | | } |
| | | |
| | |
| | | const failRef = useRef(); |
| | | const [selectedTab, setSelectedTab] = useState('1'); // 默认选中第一个 tab |
| | | const [scanFile, setScanFile] = useState(false); |
| | | const [selectedTab1, setSelectedTab1] = useState('1'); // 默认选中第一个 tab |
| | | const [fileTip, setFileTip] = useState('0'); |
| | | const [value, setValue] = useState(1) |
| | | const [value, setValue] = useState(2) |
| | | const [noHandleReason, setNoHandleReason] = useState(false); |
| | | const [radioValue, setRadioValue] = useState(1); |
| | | const [mode, setMode] = useState(false) |
| | | |
| | | const tabs = [ |
| | | { index: '1', label: '化解成功' }, |
| | | { index: '2', label: '化解不成功' }, |
| | | ]; |
| | | |
| | | const tabs1 = [ |
| | | { index: '1', label: '公共模板1:化解成功结案意见范本' }, |
| | | { index: '2', label: '个人模板1:化解成功结案意见范本(完整版)' } |
| | | ] |
| | | |
| | | const agreement = [ |
| | | { value: 1, label: '口头协议' }, |
| | |
| | | |
| | | const handleTabChange = (newTabIndex) => { |
| | | setSelectedTab(newTabIndex); |
| | | }; |
| | | |
| | | const handleTabChange1 = (newTabIndex) => { |
| | | setSelectedTab1(newTabIndex); |
| | | }; |
| | | |
| | | const handleConfirm = (scanContent) => { |
| | |
| | | } |
| | | } |
| | | |
| | | //化解成功的提交处理 |
| | | const handleSubmit = () => { |
| | | //口头协议 |
| | | if (value === 1) { |
| | | const data = formRef?.current.getFields() |
| | | console.log(data, 'handleSubmit') |
| | | windupApply(data) |
| | | formRef?.current.validate(undefined, (errors, values) => { |
| | | if (!errors) { |
| | | const data = formRef?.current.getFields() |
| | | windupApply({ |
| | | agreeType: '24_00003-1', |
| | | agreeTypeName: '口头协议', |
| | | ...data |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | //书面协议 |
| | | if (value === 2) { |
| | | const data = formRefWrite?.current.getFields() |
| | | console.log(data, 'handleSubmit') |
| | | windupApply(data) |
| | | formRefWrite?.current.validate(undefined, (errors, values) => { |
| | | if (!errors) { |
| | | const { file, ...rest } = formRefWrite?.current.getFields() |
| | | windupApply({ |
| | | agreeType: '24_00003-2', |
| | | agreeTypeName: '书面协议', |
| | | ...rest |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | if (selectedTab === '2') { |
| | | const data = failRef?.current.getFields() |
| | | console.log(data, 'handleSubmit') |
| | | // windupApply(data) |
| | | |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | //化解不成功的提交处理 |
| | | const handleSubmit1 = () => { |
| | | if (selectedTab === '2') { |
| | | const data = failRef?.current.getFields() |
| | | console.log(data, 'handleSubmit') |
| | | windupApply(data) |
| | | } |
| | | failRef?.current.validate(undefined, (errors, values) => { |
| | | if (!errors) { |
| | | const { failReason1, failReason2, failReason3, ...rest } = failRef?.current.getFields() |
| | | const failReason = `1、${failReason1};2、${failReason2};3、${failReason3}。` |
| | | windupApply({ |
| | | failReason: failReason, |
| | | ...rest |
| | | }) |
| | | } |
| | | }) |
| | | |
| | | } |
| | | |
| | | //结案申请请求 |
| | | const windupApply = async (submitData) => { |
| | | console.log( |
| | | { |
| | | mediResultName: selectedTab === '1' ? '化解成功' : '化解不成功', |
| | | mediResult: selectedTab === '1' ? '22_00025-1' : '22_00025-2', |
| | | agreeType: selectedTab === '1' ? '24_00003-1' : '24_00003-2', |
| | | agreeTypeName: value === 1 ? '口头协议' : '书面协议', |
| | | caseTaskId: caseTaskId, |
| | | caseId: caseId, |
| | | caseResultId: caseResultId, |
| | | ...submitData |
| | | }, 'windupApplyData' |
| | | ) |
| | | console.log(submitData); |
| | | const res = await windupApplyApi({ |
| | | mediResultName: selectedTab === '1' ? '化解成功' : '化解不成功', |
| | | mediResult: selectedTab === '1' ? '22_00025-1' : '22_00025-2', |
| | | agreeType: selectedTab === '1' ? '24_00003-1' : '24_00003-2', |
| | | agreeTypeName: value === 1 ? '口头协议' : '书面协议', |
| | | caseTaskId: caseTaskId, |
| | | caseId: caseId, |
| | | caseResultId: caseResultId, |
| | |
| | | scrollToFirstError={true} |
| | | requiredSymbol={false} |
| | | initialValues={{ |
| | | agreeType: 2, |
| | | agreeType: value, |
| | | }} //默认值 |
| | | > |
| | | <Col span={8}> |
| | |
| | | } |
| | | field='agreeType' |
| | | > |
| | | <Select options={agreement} onChange={(v) => { setValue(v); console.log(typeof v, 'vvv') }}> |
| | | <Select options={agreement} onChange={(v) => { setValue(v); }}> |
| | | </Select> |
| | | </FormItem> |
| | | </Col> |
| | |
| | | <div className="must">必填</div> |
| | | </div> |
| | | <div className='caseResult-tips'> |
| | | <img src={tip} alt='' style={{ width: '16px', marginRight: '8px',marginTop: '-5px' }} /> |
| | | <img src={tip} alt='' style={{ width: '16px', marginRight: '8px', marginTop: '-5px' }} /> |
| | | <span>协议要点应尽量简洁,当事人大厅来访或小程序线上反映问题时,可在小程序中查看到填写的协议要点内容</span> |
| | | </div> |
| | | <div style={{ position: 'absolute', display: 'flex ', top: '79px', zIndex: 1 }}> |
| | |
| | | </> |
| | | )} |
| | | field='agreeContent' |
| | | rules={[{ message: '请填写协议要点', required: true }]} |
| | | > |
| | | <TextArea |
| | | autoSize={{ minRows: 4, maxRows: 8 }} |
| | |
| | | <FormItem |
| | | label={(<div style={{ display: 'flex' }}>结案意见<div className="must">必填</div></div>)} |
| | | field='windupContent' |
| | | rules={[{ message: '请填写结案意见', required: true }]} |
| | | > |
| | | <TextArea |
| | | autoSize={{ minRows: 4, maxRows: 8 }} |
| | |
| | | > |
| | | <Row> |
| | | <Col span={24}> |
| | | <FormItem |
| | | <ArcoUpload |
| | | params={{ |
| | | action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${caseId}&ownerId=${caseResultId}&ownerType=22_00018-302`, |
| | | }} |
| | | formItemParams={{ |
| | | rules: [{ message: '请上传协议文书', required: true }] |
| | | }} |
| | | field='file' |
| | | label={ |
| | | <> |
| | | <div style={{ display: 'flex' }}> |
| | |
| | | </div> |
| | | </> |
| | | } |
| | | field='caseDes' |
| | | rules={[{ message: '请填写事项概况', required: true }]} |
| | | > |
| | | <ArcoUpload |
| | | params={{ |
| | | action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${caseId}&ownerId=${caseResultId}&ownerType=22_00018-302`, |
| | | }} |
| | | field='file' |
| | | label='' |
| | | // editData={props.editData} |
| | | ownerType='22_00018-302' |
| | | /> |
| | | </FormItem> |
| | | ownerType='22_00018-302' |
| | | /> |
| | | </Col> |
| | | <Col span={24} style={{ position: 'relative' }}> |
| | | <div style={{ position: 'absolute', display: 'flex', top: '28px', zIndex: 1 }}> |
| | |
| | | <FormItem |
| | | label={(<div style={{ display: 'flex' }}>结案意见<div className="must">必填</div></div>)} |
| | | field='windupContent' |
| | | rules={[{ message: '请填写结案意见', required: true }]} |
| | | > |
| | | <TextArea |
| | | autoSize={{ minRows: 4, maxRows: 8 }} |
| | |
| | | </Row> |
| | | </Form> |
| | | </> |
| | | |
| | | } |
| | | <Space style={{ marginBottom: '16px' }}> |
| | | <Button type='primary' onClick={handleSubmit}>提交</Button> |
| | |
| | | <FormItem |
| | | label='' |
| | | field='failReason1' |
| | | rules={[{ message: '请填写调解过程中提供的解决方案', required: true }]} |
| | | > |
| | | <Input.TextArea |
| | | showWordLimit |
| | |
| | | <FormItem |
| | | label='' |
| | | field='failReason2' |
| | | rules={[{ message: '请填写调解过程中的主要分歧点', required: true }]} |
| | | > |
| | | <Input.TextArea |
| | | showWordLimit |
| | |
| | | <FormItem |
| | | label='' |
| | | field='failReason3' |
| | | rules={[{ message: '请填写最终难以调和的原因', required: true }]} |
| | | > |
| | | <Input.TextArea |
| | | showWordLimit |
| | |
| | | <FormItem |
| | | label={(<div style={{ display: 'flex' }}>结案意见<div className="must">必填</div></div>)} |
| | | field='windupContent' |
| | | rules={[{ message: '请填写结案意见', required: true }]} |
| | | > |
| | | <TextArea |
| | | autoSize={{ minRows: 4, maxRows: 8 }} |
| | |
| | | </Col> |
| | | <Space style={{ marginBottom: '16px' }}> |
| | | <Button type='primary' onClick={handleSubmit1}>提交</Button> |
| | | <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }}>保存</Button> |
| | | {/* <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }}>保存</Button> */} |
| | | </Space> |
| | | </Form> |
| | | } |
| | |
| | | |
| | | //改变tab |
| | | const handleColumnType = (type) => { |
| | | setPageData({ |
| | | page: 1, |
| | | size: 10, |
| | | }) |
| | | setSearchData({ |
| | | ...searchData, |
| | | status: type |
| | |
| | | |
| | | //改变工作总览 |
| | | const tabActive = (key, data) => { |
| | | setPageData({ |
| | | page: 1, |
| | | size: 10, |
| | | }) |
| | | //默认第一个tab |
| | | if (key == '5') { |
| | | setSearchData({ |
| | |
| | | setPageData({ |
| | | ...pageData, |
| | | page, |
| | | pageSize |
| | | size: pageSize |
| | | }) |
| | | }, |
| | | }} |
| | |
| | | <div className='VisitWorkBench-bottom-title' style={{ color: '#206BCD' }}>大厅来访</div> |
| | | {/* <img src={visitInto} alt='' className='VisitWorkBench-bottom-img' /> */} |
| | | </div> |
| | | <div className='bottomTab2'> |
| | | <div className='bottomTab2' onClick={() => navigate(`/mediate/selfInspection`)}> |
| | | <div className='VisitWorkBench-bottom-title' style={{ color: '#D46B08' }}>自行排查</div> |
| | | {/* <img src={checkInto} alt='' className='VisitWorkBench-bottom-img' /> */} |
| | | </div> |
| | |
| | | } |
| | | |
| | | .reviewLine { |
| | | height: calc(100% - 19px); |
| | | width: 14px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | position: relative; |
| | | height: calc(100% - 23px); |
| | | width: 14px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | position: relative; |
| | | margin-top: 4px; |
| | | |
| | | &::before { |
| | | content: ''; |
| | |
| | | padding: 12px 16px 16px 16px; |
| | | flex: 1; |
| | | justify-content: center; |
| | | |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .timeTip { |
| | |
| | | import React, { Fragment } from 'react' |
| | | import { Row, Col, Space } from 'antd'; |
| | | import { Rate } from '@arco-design/web-react'; |
| | | |
| | | import * as $$ from '../../../utils/utility'; |
| | | export default function RateModule(props) { |
| | | return ( |
| | | <Fragment> |
| | |
| | | <div className="title"> |
| | | <div className="title-text">评价时间</div> |
| | | </div> |
| | | <div>{props.grade?.createTime || '-'}</div> |
| | | <div>{$$.minuteFormat(props.grade?.createTime) || '-'}</div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div className="title"> |
| | |
| | | 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)) |
| | | setIsModalVisible(false) |
| | | }} |
| | | onClose={() => setIsModalVisible(false)} |
| | | type='dept' |
| | |
| | | const partyList = data.personList.concat(data.agentList) |
| | | setInfoData({ |
| | | ...data, |
| | | questionName: data.queProvName === null ? '-' : data.queCityName + '/' + data.queAreaName + '/' + data.queRoadName, |
| | | questionName: data.queAreaName === null ? '-' : data.queAreaName + '/' + data.queRoadName, |
| | | caseType: data.caseTypeFirstName === null ? '-' : data.caseTypeFirstName + '/' + data.caseTypeName |
| | | }) |
| | | setFakeData(partyList.map(item => { |
New file |
| | |
| | | import React, { useState, useRef, Fragment, useEffect } from "react"; |
| | | import { useParams, useNavigate } from 'react-router-dom'; |
| | | import NewPage from '@/components/NewPage'; |
| | | import * as $$ from '@/utils/utility'; |
| | | import "@arco-themes/react-gzzz/css/arco.css"; |
| | | import '../index.less'; |
| | | import { Space } from 'antd'; |
| | | import { Button, Steps, Message } from '@arco-design/web-react'; |
| | | import VisitorRegister from './component/SelfVisitorRegister'; |
| | | import Preview from './preview'; |
| | | |
| | | const Step = Steps.Step; |
| | | |
| | | function saveDispute(data) { |
| | | return $$.ax.request({ url: `casedraftInfo/caseDraftRegister`, type: 'post', service: 'mediate', data }); |
| | | } |
| | | |
| | | function getId() { |
| | | return $$.ax.request({ url: `caseUtils/getNewTimeCaseId`, type: 'get', service: 'utils' }); |
| | | } |
| | | |
| | | function submitDispute(data) { |
| | | return $$.ax.request({ url: `caseInfo/caseRegister`, type: 'post', service: 'mediate', data }); |
| | | } |
| | | |
| | | function getDetailData(id) { |
| | | return $$.ax.request({ url: `casedraftInfo/getCasedraftInfo?id=${id}`, type: 'get', service: 'mediate' }); |
| | | } |
| | | |
| | | |
| | | const Organization = (props) => { |
| | | const formRef = useRef(); |
| | | const routeData = useParams(); |
| | | const navigate = useNavigate(); |
| | | const [isReview, setIsReview] = useState(false);//预览页面控制 |
| | | const [current, setCurrent] = useState(1); |
| | | const [id, setId] = useState(); |
| | | const [editData, setEditData] = useState({});//回显数据 |
| | | |
| | | useEffect(() => { |
| | | if (routeData.id) { |
| | | getDeatil(routeData.id) |
| | | setId(routeData.id) |
| | | } else { |
| | | getAppId() |
| | | } |
| | | |
| | | }, []) |
| | | |
| | | //编辑 |
| | | const getDeatil = async (id) => { |
| | | const res = await getDetailData(id) |
| | | if (res.type) { |
| | | const { agentList, personList, ...rest } = res.data |
| | | const parList = agentList.concat(personList) |
| | | const newParList = parList?.map(item => { |
| | | const fileInfoList = item.fileInfoList |
| | | let file = [];//身份证明材料、企业登记材料 |
| | | let file1 = [];//法人、机构身份证明材料、代理人授权委托书 |
| | | if (fileInfoList && fileInfoList.length != 0) { |
| | | fileInfoList.forEach(item => { |
| | | if (item.ownerType == '22_00018-202' || item.ownerType == '22_00018-203') { |
| | | item.fileList.forEach(res => { |
| | | file.push({ |
| | | ...res, |
| | | uid: res.id, |
| | | }) |
| | | }) |
| | | } |
| | | if (item.ownerType == '22_00018-204' || item.ownerType == '22_00018-207') { |
| | | item.fileList.forEach(res => { |
| | | file1.push({ |
| | | ...res, |
| | | uid: res.id, |
| | | }) |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | return { |
| | | ...item, |
| | | file, |
| | | file1 |
| | | } |
| | | }) || [] |
| | | const obj = { |
| | | ...rest, |
| | | fakeData: newParList, |
| | | myCaseType: [rest.caseTypeFirst, rest.caseType], |
| | | myQuesAddress: rest.queRoad ? [rest.queProv, rest.queCity, rest.queArea, rest.queRoad] : undefined |
| | | } |
| | | formRef.current.setFieldsValue(obj) |
| | | setEditData(obj) |
| | | } |
| | | } |
| | | |
| | | //获取id |
| | | const getAppId = async () => { |
| | | const res = await getId() |
| | | if (res.type) { |
| | | setId(res.data) |
| | | } |
| | | } |
| | | |
| | | //提交信息,需要校验规则 |
| | | const handleSubmit = async () => { |
| | | if (formRef.current) { |
| | | formRef.current.validate(undefined, (errors, values) => { |
| | | if (!errors) { |
| | | const { myCaseType, myQuesAddress, ...rest } = formRef.current.getFields() |
| | | const params = handleData(rest) |
| | | $$.modalInfo({ |
| | | title: '提醒', |
| | | content: '确定提交吗?', |
| | | cancelText: '我再想想', |
| | | onOk: () => { |
| | | reauestSubmit({ |
| | | ...params, |
| | | isSelfAccept: 0, |
| | | isDraft: 0, |
| | | operateType: 0, |
| | | }) |
| | | }, |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | |
| | | //保存草稿信息,不需要校验规则 |
| | | const handleSave = () => { |
| | | if (formRef.current) { |
| | | const { myCaseType, myQuesAddress, ...rest } = formRef.current.getFields() |
| | | const params = handleData(rest) |
| | | requestSave(params) |
| | | } |
| | | } |
| | | |
| | | //数据处理 |
| | | const handleData = (data) => { |
| | | const { fakeData, ...newObj } = data |
| | | if (data.id) { |
| | | return { |
| | | ...newObj, |
| | | personList: fakeData?.filter(item => item.perType === "15_020008-1" || item.perType === "15_020008-2"), |
| | | agentList: fakeData?.filter(item => item.perType === "24_00006-1" || item.perType === "24_00006-2").map(item => { |
| | | return { |
| | | ...item, |
| | | personId: item.personId.join(',') |
| | | } |
| | | }), |
| | | } |
| | | } else { |
| | | return { |
| | | ...newObj, |
| | | personList: fakeData?.filter(item => item.perType === "15_020008-1" || item.perType === "15_020008-2"), |
| | | agentList: fakeData?.filter(item => item.perType === "24_00006-1" || item.perType === "24_00006-2").map(item => { |
| | | return { |
| | | ...item, |
| | | personId: item.personId.join(',') |
| | | } |
| | | }), |
| | | id: id |
| | | } |
| | | } |
| | | } |
| | | |
| | | //预览信息 |
| | | const handleReview = () => { |
| | | setIsReview(!isReview) |
| | | } |
| | | |
| | | function selfAcceptance() { |
| | | if (formRef.current) { |
| | | formRef.current.validate(undefined, (errors, values) => { |
| | | if (!errors) { |
| | | const { myCaseType, myQuesAddress, ...rest } = formRef.current.getFields() |
| | | const params = handleData(rest) |
| | | $$.modalInfo({ |
| | | title: '自行受理确认', |
| | | content: '确定自行受理吗?', |
| | | okText: '确定受理', |
| | | cancelText: '我再想想', |
| | | onOk: async () => { |
| | | reauestSubmit({ |
| | | ...params, |
| | | isSelfAccept: 1, |
| | | isDraft: 0, |
| | | operateType: 0, |
| | | }, true) |
| | | }, |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | |
| | | //保存请求 |
| | | const requestSave = async (data) => { |
| | | const response = await saveDispute(data) |
| | | if (response.type) { |
| | | Message.success('保存草稿成功!') |
| | | } |
| | | } |
| | | |
| | | //提交请求 |
| | | const reauestSubmit = async (data, isSelfAccept) => { |
| | | const response = await submitDispute(data) |
| | | if (response.type) { |
| | | if(isSelfAccept) { |
| | | //自行受理 |
| | | navigate(`/mediate/visit/handleFeedback?caseTaskId=${response.data}&caseId=${id}`) |
| | | } else { |
| | | Message.success('提交成功!') |
| | | navigate(`/mediate/visit/visitWorkBench`, { replace: true }) |
| | | setCurrent(2) |
| | | } |
| | | } |
| | | } |
| | | |
| | | return ( |
| | | <div style={{ position: 'relative' }}> |
| | | <NewPage |
| | | pageHead={ |
| | | { breadcrumbData: [{ title: '工作台' }, { title: '来访登记' }], title: '自行排查' } |
| | | } |
| | | > |
| | | <Fragment> |
| | | <div style={{ backgroundColor: '#fff', margin: '12px 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> |
| | | <div style={{ backgroundColor: '#ffff', margin: '8px 8px 0px 16px', padding: '12px 18px 82px 16px', height: 'calc(100vh - 231px)', overflowY: 'scroll', display: isReview ? '' : 'none' }}> |
| | | <Preview style={{ display: isReview ? '' : 'none' }} data={formRef?.current?.getFields()} mainId={id} /> |
| | | </div> |
| | | <VisitorRegister |
| | | formRef={formRef} |
| | | style={{ display: isReview ? 'none' : '' }} |
| | | mainId={id} |
| | | partyList={editData.fakeData} |
| | | fileInfoList={editData.fileInfoList} |
| | | /> |
| | | <div className="dataSync-excel"> |
| | | <Space size="middle" style={{ margin: '4px 14px' }}> |
| | | <Button type="primary" style={{ backgroundColor: '#1A6FB8' }} onClick={handleSave} >保存</Button> |
| | | <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} onClick={handleReview}>{isReview ? '修改' : '预览'}</Button> |
| | | <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} onClick={handleSubmit}>提交</Button> |
| | | <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} onClick={() => selfAcceptance()}>自行受理</Button> |
| | | <Button type='secondary' onClick={() => { navigate(-1) }}>返回上级页面</Button> |
| | | </Space> |
| | | </div> |
| | | </Fragment> |
| | | </NewPage> |
| | | </div> |
| | | ) |
| | | } |
| | | |
| | | export default Organization; |
New file |
| | |
| | | import React, { useState, useEffect } from "react"; |
| | | import { Row, Col, Space } from 'antd'; |
| | | import * as $$ from '../../../utils/utility'; |
| | | import { ApplyDialog, AgentDialog, Respondent, Company } from './component/previewTable' |
| | | import FileTable from "../matterDetail/FileTable"; |
| | | import { link } from '@/assets/images'; |
| | | import PreviewImage from '@/components/PreviewImage'; |
| | | |
| | | const Preview = (props) => { |
| | | const [data, setData] = useState({}); |
| | | const levelColorMap = { |
| | | 1: '#F53F3F', |
| | | 2: '#EF6C24', |
| | | 3: '#00B42A', |
| | | } |
| | | |
| | | useEffect(() => { |
| | | console.log(props.data); |
| | | const applyData = props.data?.fakeData?.filter(item => item.perTypeName === "申请方当事人" && item.perClassName === "自然人"); |
| | | const agentData = props.data?.fakeData?.filter(item => item.perTypeName === "申请方代理人"); |
| | | const company = props.data?.fakeData?.filter(item => item.perTypeName === "申请方当事人" && item.perClassName === "非法人组织"); |
| | | const respondentData = props.data?.fakeData?.filter(item => item.perTypeName === "申请方当事人" && item.perClassName === "法人"); |
| | | |
| | | const applyData1 = props.data?.fakeData?.filter(item => item.perTypeName === "被申请方当事人" && item.perClassName === "自然人"); |
| | | const agentData1 = props.data?.fakeData?.filter(item => item.perTypeName === "被申请方代理人"); |
| | | const company1 = props.data?.fakeData?.filter(item => item.perTypeName === "被申请方当事人" && item.perClassName === "非法人组织"); |
| | | const respondentData1 = props.data?.fakeData?.filter(item => item.perTypeName === "被申请方当事人" && item.perClassName === "法人"); |
| | | |
| | | setData({ |
| | | applyData, |
| | | agentData, |
| | | company, |
| | | respondentData, |
| | | applyData1, |
| | | agentData1, |
| | | company1, |
| | | respondentData1 |
| | | }) |
| | | }, [props.data]) |
| | | |
| | | return ( |
| | | <div style={{ ...props.style }}> |
| | | <Col span={24} style={{ display: 'flex', alignItems: 'center', marginBottom: '8px' }}> |
| | | <Space size='small'> |
| | | <div className='MediationInfo-subTitle' style={{ marginTop: '-7px' }}></div><h4>当事人信息</h4> |
| | | </Space> |
| | | </Col> |
| | | <div style={{ marginBottom: '8px' }}>申请方</div> |
| | | <div className="line-container" style={{ marginBottom: '20px' }}> |
| | | <div className="line left-line"></div> |
| | | <div className="line middle-line"></div> |
| | | <div className="line right-line"></div> |
| | | </div> |
| | | {/* ApplyDialog 只有在 applyData 存在且不为空时才渲染 */} |
| | | {data.applyData && data.applyData.length > 0 ? ( |
| | | <ApplyDialog applyDialog={data.applyData} /> |
| | | ) : null} |
| | | |
| | | {/* AgentDialog 只有在 agentData 存在且不为空时才渲染 */} |
| | | {data.agentData && data.agentData.length > 0 ? ( |
| | | <AgentDialog agentDialog={data.agentData} /> |
| | | ) : null} |
| | | |
| | | {/* Respondent 只有在 respondentData 存在且不为空时才渲染 */} |
| | | {data.respondentData && data.respondentData.length > 0 ? ( |
| | | <Respondent respondent={data.respondentData} /> |
| | | ) : null} |
| | | |
| | | {data.company && data.company.length > 0 ? ( |
| | | <Company company={data.company} /> |
| | | ) : null} |
| | | |
| | | <div style={{ marginBottom: '8px' }}>被申请方</div> |
| | | <div className="line-container" style={{ marginBottom: '20px' }}> |
| | | <div className="line left-line"></div> |
| | | <div className="line middle-line"></div> |
| | | <div className="line right-line"></div> |
| | | </div> |
| | | {data.applyData1 && data.applyData1.length > 0 ? ( |
| | | <ApplyDialog applyDialog={data.applyData1} /> |
| | | ) : null} |
| | | |
| | | {data.agentData1 && data.agentData1.length > 0 ? ( |
| | | <AgentDialog agentDialog={data.agentData1} /> |
| | | ) : null} |
| | | |
| | | {data.respondentData1 && data.respondentData1.length > 0 ? ( |
| | | <Respondent respondent={data.respondentData1} /> |
| | | ) : null} |
| | | |
| | | {data.company1 && data.company1.length > 0 ? ( |
| | | <Company company={data.company1} /> |
| | | ) : null} |
| | | <Col span={24} style={{ display: 'flex', alignItems: 'center', marginBottom: '8px' }}> |
| | | <Space size='small'> |
| | | <div className='MediationInfo-subTitle' style={{ marginTop: '-7px' }}></div><h4>纠纷基本情况</h4> |
| | | </Space> |
| | | </Col> |
| | | <Row gutter={[16, 16]}> |
| | | {props.isDoc && |
| | | <> |
| | | <Col span={8}> |
| | | <div><div className="title-text">事项状态</div></div> |
| | | <div style={{ color: '#1A6FB8' }}>{props.data?.statusName || '-'}</div> |
| | | </Col> |
| | | <Col span={16}> |
| | | <div><div className="title-text">事项编号</div></div> |
| | | <div>{props.data?.caseRef || '-'}</div> |
| | | </Col> |
| | | </> |
| | | } |
| | | <Col span={8}> |
| | | <div className="title"> |
| | | <div className="title-text">事项等级</div> |
| | | </div> |
| | | <div style={{ display: 'flex' }}><div style={{ backgroundColor: levelColorMap[props.data?.caseLevel], marginRight: '4px', borderRadius: '4px' }}><div style={{ color: '#FFFFFF', padding: '0px 6px' }}>{props.data?.caseLevel || '-'}</div></div>级</div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div><div className="title-text">来访时间</div></div> |
| | | <div>{props.data?.visitTime || '-'}</div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div ><div className="title-text">来访人数(人)</div></div> |
| | | <div>{props.data?.visitPeopleNum || '-'}</div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div ><div className="title-text">纠纷类型</div></div> |
| | | <div> |
| | | {props.data?.caseTypeFirstName ? |
| | | `${props.data.caseTypeFirstName}/${props.data.caseTypeName}` |
| | | : '-' |
| | | } |
| | | </div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div ><div className="title-text">纠纷发生时间</div></div> |
| | | <div>{props.data?.occurTime || '-'}</div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div ><div className="title-text">纠纷发生地点</div></div> |
| | | <div>{props.data?.addr || '-'}</div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div ><div className="title-text">问题属地</div></div> |
| | | <div> |
| | | {props.data?.queAreaName ? `${props.data.queAreaName}/${props.data.queRoadName}` : '-' |
| | | } |
| | | </div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div ><div className="title-text">涉及人数(人)</div></div> |
| | | <div>{props.data?.peopleNum || '-'}</div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div ><div className="title-text">涉及金额(元)</div></div> |
| | | <div>{$$.thousands(props.data?.amount) || '-'}</div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div ><div className="title-text">事项来源</div></div> |
| | | <div>{props.data?.canalName}</div> |
| | | </Col> |
| | | <Col span={16}> |
| | | <div ><div className="title-text">来访形式</div></div> |
| | | <div>来访</div> |
| | | </Col> |
| | | <Col span={24}> |
| | | <div className="title"><div className="title-text">事项概况</div></div> |
| | | <div>{props.data?.caseDes || '-'} </div> |
| | | </Col> |
| | | <Col span={24}> |
| | | <div className="title"><div className="title-text">事项申请</div></div> |
| | | <div>{props.data?.caseClaim || '-'}</div> |
| | | </Col> |
| | | <Col span={16}> |
| | | <div className="title"><div className="title-text">是否重大矛盾纠纷</div></div> |
| | | <div>{props.data?.majorStatus === 1 ? '是' : '否'}</div> |
| | | </Col> |
| | | </Row> |
| | | {props.transactResult && <> |
| | | <Col span={24} style={{ display: 'flex', alignItems: 'center', marginBottom: '16px', marginTop: '20px' }}> |
| | | <Space size='small'> |
| | | <div className='MediationInfo-subTitle' style={{ marginTop: '-7px' }}></div><h4>办理结果</h4> |
| | | </Space> |
| | | </Col> |
| | | <table border="1" align="center" cellpadding="8" className="table" > |
| | | <tr> |
| | | <th bgcolor="#F7F8FA" className="table-title" width="120">化解结果</th> |
| | | <td width='380'>{props.transactResult.mediResultName || '-'}</td> |
| | | <th bgcolor="#F7F8FA" className="table-title" width="120">经办人</th> |
| | | <td width='380'>{props.transactResult.mediator || '-'}</td> |
| | | </tr> |
| | | <tr> |
| | | <th bgcolor="#F7F8FA" className="table-title">承办部门</th> |
| | | <td>{props.transactResult.mediateUnitName || '-'}</td> |
| | | <th bgcolor="#F7F8FA" className="table-title">配合部门</th> |
| | | <td>{props.transactResult.applyAssistUnitName || '-'}</td> |
| | | </tr> |
| | | <tr> |
| | | <th bgcolor="#F7F8FA" className="table-title" width="120">受理时间</th> |
| | | <td width='380'>{$$.minuteFormat(props.transactResult?.acceptTime) || '-'}</td> |
| | | <th bgcolor="#F7F8FA" className="table-title" width="120">办结时间</th> |
| | | <td width='380'>{$$.minuteFormat(props.transactResult?.closeTime) || '-'}</td> |
| | | </tr> |
| | | <tr> |
| | | <th bgcolor="#F7F8FA" className="table-title" width="120">办理意见</th> |
| | | <td width='380' colspan='3'>{props.transactResult?.windupContent || '-'}</td> |
| | | </tr> |
| | | <tr> |
| | | <th bgcolor="#F7F8FA" className="table-title" width="120">协议要点</th> |
| | | <td width='380' colspan='3'>{props.transactResult?.agreeContent || '-'}</td> |
| | | </tr> |
| | | <tr> |
| | | <th bgcolor="#F7F8FA" className="table-title" width="120">结案意见</th> |
| | | <td width='380' colspan='3'>{props.transactResult?.windupContent || '-'}</td> |
| | | </tr> |
| | | <tr> |
| | | <th bgcolor="#F7F8FA" className="table-title" width="120">协议文书</th> |
| | | <td colspan='3'> |
| | | {props.transactResult?.fileInfoBaseDTOList?.map((item, index) => { |
| | | console.log(item); |
| | | return <div style={{ display: 'inline-block' }}> |
| | | <PreviewImage name={item.name} src={item.showUrl} /> |
| | | {index !== props.transactResult?.fileInfoBaseDTOList.length - 1 && <>,</>} |
| | | </div> |
| | | })} |
| | | </td> |
| | | </tr> |
| | | </table> |
| | | </>} |
| | | <Col span={24} style={{ display: 'flex', alignItems: 'center', marginBottom: '8px', marginTop: '20px' }}> |
| | | <Space size='small'> |
| | | <div className='MediationInfo-subTitle' style={{ marginTop: '-7px' }}></div><h4>事件材料</h4> |
| | | </Space> |
| | | </Col> |
| | | <FileTable mainId={props.mainId} fileInfoList={props.data?.fileInfoList} isReview={true} /> |
| | | </div> |
| | | ) |
| | | } |
| | | |
| | | export default Preview |
New file |
| | |
| | | import React, { useState, useEffect, useRef } from "react"; |
| | | import { Row, Col, Space, Tooltip, Button } from 'antd'; |
| | | import { Form, Input, Radio, Select, DatePicker, Cascader, Modal, Upload, InputNumber } from '@arco-design/web-react'; |
| | | import PersonCard from '@/components/personCard'; |
| | | import * as $$ from '@/utils/utility'; |
| | | import { |
| | | question1, |
| | | } from '@/assets/images'; |
| | | import '../../index.less'; |
| | | import ApplyDialog from "./applyDialog"; |
| | | import AgentDialog from "./agentDialog"; |
| | | import MapView from './map'; |
| | | import { scan } from '@/assets/images/icon'; |
| | | import { EventLevelDrawer, MattersDetail } from './levelDetail'; |
| | | import DocumentScanner from '../../matterDetail/FileUpLoad'; |
| | | import FileTable from "../../matterDetail/FileTable"; |
| | | |
| | | |
| | | const RadioGroup = Radio.Group;// 根据调解案号获取纠纷登记信息 |
| | | const FormItem = Form.Item; |
| | | const InputSearch = Input.Search; |
| | | |
| | | |
| | | const VisitorRegister = (props) => { |
| | | const [dialogType, setDialogType] = useState();//添加当事人的类型 |
| | | const [addVisabled, setAddVisabled] = useState(false);//添加当事人弹窗控制 |
| | | const [fakeData, setFakeData] = useState([]);//当事人信息数据 |
| | | const [scanFile, setScanFile] = useState(false); |
| | | const [ocrText, setOcrText] = useState(''); |
| | | |
| | | const [mapView, setMapView] = useState(false); |
| | | const [visible, setVisible] = useState(false); |
| | | const [apply, setApply] = useState(false); |
| | | const [editData, setEditData] = useState(null); |
| | | const [agentVisible, setAgentVisible] = useState(false); |
| | | |
| | | const peopleMap = { |
| | | '15_020008-1': '申请方', |
| | | '15_020008-2': '被申请方', |
| | | '24_00006-1': '申请方代理人', |
| | | '24_00006-2': '被申请方代理人' |
| | | } |
| | | |
| | | useEffect(() => { |
| | | if (props.formRef.current) { |
| | | //引入当事人数据 |
| | | props.formRef.current.setFieldValue('fakeData', fakeData) |
| | | } |
| | | }, [fakeData]) |
| | | |
| | | useEffect(() => { |
| | | setFakeData(props.partyList || []) |
| | | }, [props.partyList]) |
| | | |
| | | //获取当前时间 |
| | | const getFormattedDateTime = () => { |
| | | let now = new Date(); |
| | | let year = now.getFullYear(); |
| | | let month = (now.getMonth() + 1).toString().padStart(2, '0'); // 月份是从0开始的,所以要+1 |
| | | let day = now.getDate().toString().padStart(2, '0'); |
| | | let hours = now.getHours().toString().padStart(2, '0'); |
| | | let minutes = now.getMinutes().toString().padStart(2, '0'); |
| | | |
| | | return `${year}-${month}-${day} ${hours}:${minutes}`; |
| | | } |
| | | |
| | | //添加当事人 |
| | | const handleAdd = (type) => { |
| | | if (type === '24_00006-1' || type === '24_00006-2') { |
| | | setAgentVisible(true) |
| | | } else { |
| | | setAddVisabled(true) |
| | | } |
| | | setDialogType(type) |
| | | } |
| | | |
| | | const handleConfirm = (scanContent) => { |
| | | // 处理确认逻辑 |
| | | props.formRef.current.setFieldValue(ocrText, scanContent) |
| | | setScanFile(false); |
| | | console.log(scanContent, 'scanContent') |
| | | |
| | | }; |
| | | |
| | | const handleCancel = () => { |
| | | // 处理取消逻辑 |
| | | setScanFile(false); |
| | | }; |
| | | |
| | | //添加当事人 |
| | | const handleAddParty = (value, isEdit) => { |
| | | console.log(value); |
| | | if (isEdit) { |
| | | //编辑 |
| | | const newList = fakeData.map(item => { |
| | | if (item.id === value.id) { |
| | | return value |
| | | } else { |
| | | return item |
| | | } |
| | | }) |
| | | setFakeData(newList) |
| | | setEditData(null) |
| | | } else { |
| | | setFakeData([...fakeData, { |
| | | ...value |
| | | }]) |
| | | } |
| | | } |
| | | |
| | | //删除当事人 |
| | | const handleDeleteParty = (event, value) => { |
| | | event.stopPropagation(); |
| | | const filterData = fakeData.filter(item => item.id !== value.id) |
| | | setFakeData(filterData) |
| | | } |
| | | |
| | | //编辑 |
| | | const handleEdit = (value) => { |
| | | if (value.perType === '15_020008-1' || value.perType === '15_020008-2') { |
| | | //当事人 |
| | | setAddVisabled(true) |
| | | } else { |
| | | //代理人 |
| | | setAgentVisible(true) |
| | | } |
| | | setDialogType(value.perType) |
| | | setEditData(value) |
| | | } |
| | | |
| | | return ( |
| | | <div className='dataSync-page' style={{ ...props.style, marginTop: '8px' }}> |
| | | <Col span={24} style={{ display: 'flex', alignItems: 'center' }}> |
| | | <Space size='small'> |
| | | <div className='MediationInfo-subTitle' style={{ marginTop: '-9px', }}></div><h4>当事人信息</h4> |
| | | </Space> |
| | | </Col> |
| | | <div style={{ margin: '16px 0' }}> |
| | | <PersonCard |
| | | isCheck={true} |
| | | data={fakeData} |
| | | handleAdd={handleAdd} |
| | | handleDeleteParty={handleDeleteParty} |
| | | handleEdit={handleEdit} |
| | | /> |
| | | </div> |
| | | <Col span={24} style={{ display: 'flex', alignItems: 'center', marginBottom: '8px' }}> |
| | | <Space size='small'> |
| | | <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h4>纠纷基本情况</h4> |
| | | </Space> |
| | | </Col> |
| | | <Form |
| | | ref={props.formRef} |
| | | layout='vertical' |
| | | requiredSymbol={false} |
| | | scrollToFirstError={true} |
| | | initialValues={{ |
| | | caseLevel: 3, |
| | | occurTime: getFormattedDateTime(), |
| | | majorStatus: 0, |
| | | }}//默认值 |
| | | > |
| | | <Row gutter={[32, 0]}> |
| | | <Col span={8}> |
| | | <FormItem |
| | | label={<div style={{ display: 'flex' }}> |
| | | 事项等级 |
| | | <Tooltip onClick={() => setApply(true)}> |
| | | <img src={question1} alt="" style={{ width: '13px', height: '13px', margin: '4px 4px 0px 4px' }} /> |
| | | </Tooltip> |
| | | </div> |
| | | } |
| | | field='caseLevel' |
| | | > |
| | | <Select placeholder='请选择事项等级' allowClear options={$$.options.caseLevelList}> |
| | | </Select> |
| | | </FormItem> |
| | | </Col> |
| | | <Col span={8}> |
| | | <FormItem label='涉及人数(人)' field='peopleNum'> |
| | | <InputNumber placeholder='请填写' /> |
| | | </FormItem> |
| | | </Col> |
| | | <Col span={8}> |
| | | <FormItem label='涉及金额(元)' field='amount'> |
| | | <InputNumber placeholder='请填写' /> |
| | | </FormItem> |
| | | </Col> |
| | | <Col span={8}> |
| | | <FormItem |
| | | label={(<div style={{ display: 'flex' }}>纠纷类型<div className="must">必填</div></div>)} |
| | | rules={[{ message: '请选择纠纷类型', required: true }]} |
| | | field='myCaseType' |
| | | > |
| | | <Cascader |
| | | placeholder='请选择' |
| | | options={$$.caseTypeSelect.caseTypeSelect} |
| | | onChange={(value, option) => { |
| | | if (option) { |
| | | props.formRef.current.setFieldsValue({ |
| | | caseTypeFirst: option[0].value, |
| | | caseTypeFirstName: option[0].label, |
| | | caseType: option[1].value, |
| | | caseTypeName: option[1].label, |
| | | }) |
| | | } else { |
| | | //清除数据 |
| | | props.formRef.current.setFieldsValue({ |
| | | caseTypeFirst: undefined, |
| | | caseTypeFirstName: undefined, |
| | | caseType: undefined, |
| | | caseTypeName: undefined, |
| | | }) |
| | | } |
| | | }} |
| | | allowClear |
| | | /> |
| | | </FormItem> |
| | | </Col> |
| | | <Col span={8}> |
| | | <FormItem |
| | | label={(<div style={{ display: 'flex' }}>纠纷发生时间<div className="must">必填</div></div>)} |
| | | rules={[{ message: '请选择纠纷发生时间', required: true }]} |
| | | field='occurTime' |
| | | > |
| | | <DatePicker |
| | | style={{ width: '100%' }} |
| | | placeholder='请选择' |
| | | format='YYYY-MM-DD HH:mm' |
| | | showTime={true} |
| | | /> |
| | | </FormItem> |
| | | </Col> |
| | | <Col span={8}> |
| | | <FormItem |
| | | label={(<div style={{ display: 'flex' }}>纠纷发生地点<div className="must">必填</div></div>)} |
| | | rules={[{ message: '请选择纠纷发生地点', required: true }]} |
| | | field='addr' |
| | | > |
| | | <InputSearch |
| | | placeholder='选择纠纷发生地的详细地址' |
| | | searchButton='选择' |
| | | readOnly={true} // 设置为只读,防止直接编辑 |
| | | onSearch={() => setMapView(true)} |
| | | /> |
| | | </FormItem> |
| | | </Col> |
| | | <Col span={8}> |
| | | <FormItem |
| | | label={(<div style={{ display: 'flex' }}>问题属地<div className="must">必填</div></div>)} |
| | | field='myQuesAddress' |
| | | rules={[{ message: '请选择问题属地', required: true }]} |
| | | > |
| | | <Cascader |
| | | placeholder='请选择' |
| | | options={$$.locationOption()} |
| | | showSearch |
| | | onChange={(value, option) => { |
| | | if (option) { |
| | | console.log(option) |
| | | props.formRef.current.setFieldsValue({ |
| | | // queProv: option[0].value, |
| | | // queProvName: option[0].label, |
| | | // queCity: option[1].value, |
| | | // queCityName: option[1].label, |
| | | queArea: option[0].value, |
| | | queAreaName: option[0].label, |
| | | queRoad: option[1] && option[1].value || '', |
| | | queRoadName: option[1] && option[1].label || '', |
| | | }) |
| | | } else { |
| | | //清除数据 |
| | | props.formRef.current.setFieldsValue({ |
| | | queProv: undefined, |
| | | queProvName: undefined, |
| | | queCity: undefined, |
| | | queCityName: undefined, |
| | | queArea: undefined, |
| | | queAreaName: undefined, |
| | | queRoad: undefined, |
| | | queRoadName: undefined, |
| | | }) |
| | | } |
| | | }} |
| | | allowClear |
| | | /> |
| | | </FormItem> |
| | | </Col> |
| | | <Col span={24}> |
| | | <FormItem |
| | | label={<div style={{ display: 'flex' }}> |
| | | 事项概况 |
| | | <Tooltip onClick={() => setVisible(true)}> |
| | | <img src={question1} alt="" style={{ width: '13px', height: '13px', margin: '4px 4px 0px 4px' }} /> |
| | | </Tooltip> |
| | | <div className="must" style={{ marginLeft: '4px' }}>必填</div> |
| | | <img src={scan} alt="" style={{ marginRight: '-2px', marginLeft: '8px' }} /> |
| | | <div style={{ marginLeft: '8px', color: '#1A6FB8', fontSize: '14px', cursor: 'pointer' }} onClick={() => { setScanFile(true); setOcrText('caseDes') }}>识别材料</div> |
| | | </div> |
| | | } |
| | | field='caseDes' |
| | | rules={[{ message: '请填写事项概况', required: true }]} |
| | | > |
| | | <Input.TextArea |
| | | maxLength={2000} |
| | | showWordLimit |
| | | rows={5} |
| | | placeholder='请完整描述事项概况,应具备5要素:发生时间+发生地点+人物情况+事项起因+事项经过' |
| | | wrapperStyle={{ width: '100%' }} |
| | | /> |
| | | </FormItem> |
| | | </Col> |
| | | <Col span={24}> |
| | | <FormItem |
| | | label={<div style={{ display: 'flex' }}> |
| | | 申请请求 |
| | | {/* <Tooltip onClick={() => setApply(true)}> |
| | | <img src={question1} alt="" style={{ width: '13px', height: '13px', margin:'4px 4px 0px 4px' }} /> |
| | | </Tooltip> */} |
| | | <div className="must">必填</div> |
| | | <img src={scan} alt="" style={{ marginRight: '-2px', marginLeft: '8px' }} /> |
| | | <div style={{ marginLeft: '8px', color: '#1A6FB8', fontSize: '14px', cursor: 'pointer' }} onClick={() => { setScanFile(true); setOcrText('caseClaim') }}>识别材料</div> |
| | | </div> |
| | | } |
| | | field='caseClaim' |
| | | rules={[{ message: '请填写申请请求', required: true }]} |
| | | |
| | | > |
| | | <Input.TextArea |
| | | maxLength={2000} |
| | | showWordLimit |
| | | rows={5} |
| | | placeholder='希望相关部门如何处理,建议分条描述,如请求1,请求2...' |
| | | wrapperStyle={{ width: '100%' }} |
| | | /> |
| | | </FormItem> |
| | | </Col> |
| | | <div style={{ marginLeft: '16px', padding: '12px 16px', backgroundColor: '#F2F3F5', borderRadius: '2px', marginTop: '4px', display: 'flex', alignItems: 'center' }}> |
| | | <FormItem |
| | | label='是否重大矛盾纠纷' |
| | | style={{ width: '300px', marginBottom: 0 }} |
| | | field='majorStatus' |
| | | layout='horizontal' |
| | | labelCol={{ span: 11 }} |
| | | wrapperCol={{ span: 13 }} |
| | | > |
| | | <RadioGroup options={[{ value: 0, label: '否' }, { value: 1, label: '是' }]} /> |
| | | </FormItem> |
| | | </div> |
| | | </Row> |
| | | |
| | | </Form > |
| | | <Col span={24} style={{ display: 'flex', alignItems: 'center', marginBottom: '8px', marginTop: '20px' }}> |
| | | <Space size='small'> |
| | | <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h4>事件材料</h4> |
| | | </Space> |
| | | </Col> |
| | | <div style={{ marginBottom: '65px' }}> |
| | | <FileTable |
| | | mainId={props.mainId} |
| | | fileInfoList={props.fileInfoList} |
| | | isReview={false} |
| | | handleSaveList={(list) => { |
| | | props.formRef.current.setFieldValue('fileInfoList', list) |
| | | }} |
| | | /> |
| | | </div> |
| | | <DocumentScanner |
| | | visible={scanFile} |
| | | onConfirm={handleConfirm} |
| | | onCancel={handleCancel} |
| | | /> |
| | | <Modal |
| | | title={(editData ? '修改' : '添加') + peopleMap[dialogType]} |
| | | visible={addVisabled} |
| | | onOk={() => setAddVisabled(false)} |
| | | onCancel={() => { |
| | | setAddVisabled(false) |
| | | setEditData(null) |
| | | }} |
| | | autoFocus={false} |
| | | focusLock={true} |
| | | footer={null} |
| | | unmountOnExit={true} |
| | | maskClosable={false} |
| | | > |
| | | <ApplyDialog |
| | | dialogType={dialogType} |
| | | onClose={() => setAddVisabled(false)} |
| | | handleAddParty={handleAddParty} |
| | | editData={editData} |
| | | mainId={props.mainId} |
| | | /> |
| | | </Modal> |
| | | <Modal |
| | | title={(editData ? '修改' : '添加') + peopleMap[dialogType]} |
| | | visible={agentVisible} |
| | | onOk={() => setAgentVisible(false)} |
| | | onCancel={() => { |
| | | setAgentVisible(false) |
| | | setEditData(null) |
| | | }} |
| | | autoFocus={false} |
| | | focusLock={true} |
| | | footer={null} |
| | | unmountOnExit={true} |
| | | maskClosable={false} |
| | | > |
| | | <AgentDialog |
| | | handleAddParty={handleAddParty} |
| | | onClose={() => setAgentVisible(false)} |
| | | fakeData={fakeData} |
| | | dialogType={dialogType} |
| | | editData={editData} |
| | | mainId={props.mainId} |
| | | /> |
| | | </Modal> |
| | | <Modal |
| | | style={{ width: '1200px' }} |
| | | visible={mapView} |
| | | onCancel={() => setMapView(false)} |
| | | footer={null} |
| | | title='选择纠纷发生地' |
| | | centered |
| | | unmountOnExit={true} |
| | | maskClosable={false} |
| | | > |
| | | <MapView |
| | | selectAdd={(data) => { |
| | | props.formRef.current.setFieldsValue({ |
| | | addr: data.addName, |
| | | lng: data.pt.lng, |
| | | lat: data.pt.lat, |
| | | }) |
| | | setMapView(false) |
| | | }} |
| | | /> |
| | | </Modal> |
| | | <MattersDetail |
| | | visible={visible} |
| | | onClose={() => setVisible(false)} |
| | | /> |
| | | <EventLevelDrawer |
| | | visible={apply} |
| | | onClose={() => setApply(false)} |
| | | /> |
| | | </div > |
| | | ) |
| | | } |
| | | |
| | | export default VisitorRegister; |
| | |
| | | } |
| | | |
| | | function selfAcceptance() { |
| | | $$.modalInfo({ |
| | | title: '自行受理确认', |
| | | content: '确定自行受理吗?', |
| | | okText: '确定受理', |
| | | cancelText: '我再想想', |
| | | onOk: async () => { |
| | | setCurrent(3); |
| | | navigate(`mediate/visit/handleFeedback`, { replace: true }) |
| | | }, |
| | | }); |
| | | if (formRef.current) { |
| | | formRef.current.validate(undefined, (errors, values) => { |
| | | if (!errors) { |
| | | const { myCaseType, myQuesAddress, ...rest } = formRef.current.getFields() |
| | | const params = handleData(rest) |
| | | $$.modalInfo({ |
| | | title: '自行受理确认', |
| | | content: '确定自行受理吗?', |
| | | okText: '确定受理', |
| | | cancelText: '我再想想', |
| | | onOk: async () => { |
| | | reauestSubmit({ |
| | | ...params, |
| | | isSelfAccept: 1, |
| | | isDraft: 0, |
| | | operateType: 0, |
| | | }, true) |
| | | }, |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | |
| | | //保存请求 |
| | |
| | | } |
| | | |
| | | //提交请求 |
| | | const reauestSubmit = async (data) => { |
| | | const reauestSubmit = async (data, isSelfAccept) => { |
| | | const response = await submitDispute(data) |
| | | if (response.type) { |
| | | Message.success('提交成功!') |
| | | navigate(`/mediate/visit/visitWorkBench`, { replace: true }) |
| | | setCurrent(2) |
| | | if(isSelfAccept) { |
| | | //自行受理 |
| | | navigate(`/mediate/visit/handleFeedback?caseTaskId=${response.data}&caseId=${id}`) |
| | | } else { |
| | | Message.success('提交成功!') |
| | | navigate(`/mediate/visit/visitWorkBench`, { replace: true }) |
| | | setCurrent(2) |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | import PreviewImage from '@/components/PreviewImage'; |
| | | |
| | | const Preview = (props) => { |
| | | const [data, setData] = useState({}) |
| | | const [data, setData] = useState({}); |
| | | const levelColorMap = { |
| | | 1: '#F53F3F', |
| | | 2: '#EF6C24', |
| | | 3: '#00B42A', |
| | | } |
| | | |
| | | useEffect(() => { |
| | | console.log(props.data); |
| | |
| | | <div className="title"> |
| | | <div className="title-text">事项等级</div> |
| | | </div> |
| | | <div style={{ display: 'flex' }}><div style={{ backgroundColor: '#00B42A', marginRight: '4px', borderRadius: '4px' }}><div style={{ color: '#FFFFFF', padding: '0px 6px' }}>{props.data?.caseLevel || '-'}</div></div>级</div> |
| | | <div style={{ display: 'flex' }}> |
| | | <div style={{ backgroundColor: levelColorMap[props.data?.caseLevel], marginRight: '4px', borderRadius: '4px' }}> |
| | | <div style={{ color: '#FFFFFF', padding: '0px 6px' }}> |
| | | {props.data?.caseLevel || '-'} |
| | | </div> |
| | | </div>级 |
| | | </div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div><div className="title-text">来访时间</div></div> |
| | | <div>{props.data?.visitTime || '-'}</div> |
| | | <div><div className="title-text">事项来源</div></div> |
| | | <div>自行排查</div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div ><div className="title-text">来访人数(人)</div></div> |
| | | <div>{props.data?.visitPeopleNum || '-'}</div> |
| | | <div ><div className="title-text">来访形式</div></div> |
| | | <div>排查</div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div ><div className="title-text">纠纷类型</div></div> |
| | |
| | | <Col span={8}> |
| | | <div ><div className="title-text">问题属地</div></div> |
| | | <div> |
| | | {props.data?.queProvName ? |
| | | `${props.data.queCityName}/${props.data.queAreaName}/${props.data.queRoadName}` |
| | | : '-' |
| | | {props.data?.queAreaName ? `${props.data.queAreaName}/${props.data.queRoadName}` : '-' |
| | | } |
| | | </div> |
| | | </Col> |
| | |
| | | <Col span={8}> |
| | | <div ><div className="title-text">涉及金额(元)</div></div> |
| | | <div>{$$.thousands(props.data?.amount) || '-'}</div> |
| | | </Col> |
| | | <Col span={8}> |
| | | <div ><div className="title-text">事项来源</div></div> |
| | | <div>{props.data?.canalName}</div> |
| | | </Col> |
| | | <Col span={16}> |
| | | <div ><div className="title-text">来访形式</div></div> |
| | | <div>来访</div> |
| | | </Col> |
| | | <Col span={24}> |
| | | <div className="title"><div className="title-text">事项概况</div></div> |