From 5aa4a814ab8d4aa194a9683ebefaefdfc6d92c3a Mon Sep 17 00:00:00 2001
From: liuwh <964324856@qq.com>
Date: Tue, 17 Sep 2024 17:18:05 +0800
Subject: [PATCH] Merge branch 'master' of http://120.79.193.119:9090/r/gzzfw/frontEnd/gzDyh into master

---
 gz-customerSystem/src/views/register/matterDetail/RateModule.jsx             |    4 
 gz-customerSystem/src/views/register/visit/component/SelfVisitorRegister.jsx |  451 ++++++++++++++++++
 gz-customerSystem/src/components/personCard/DetailDialog.jsx                 |    5 
 gz-customerSystem/src/views/comprehensive/index.jsx                          |    2 
 gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx       |    2 
 gz-customerSystem/src/api/appUrl.js                                          |    6 
 gz-customerSystem/src/views/register/index.jsx                               |   12 
 gz-customerSystem/src/components/ProgressStep/index.less                     |   26 
 gz-customerSystem/src/views/register/visit/SelfPreview.jsx                   |  240 ++++++++++
 gz-customerSystem/src/views/register/handleFeedback/component/AuditView.jsx  |    3 
 gz-customerSystem/src/router/router.js                                       |    3 
 gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx |  124 ++--
 gz-customerSystem/src/components/ProgressStep/VisitStep.jsx                  |   95 +++
 gz-customerSystem/src/views/register/matterDetail/index.jsx                  |    2 
 gz-customerSystem/src/components/Layout/index.jsx                            |   21 
 gz-customerSystem/src/components/ArcoUpload/index.jsx                        |    2 
 gz-customerSystem/src/views/register/index.less                              |   15 
 gz-customerSystem/src/views/register/matterDetail/UniteHandle.jsx            |    2 
 gz-customerSystem/src/views/register/visit/preview.jsx                       |   35 
 gz-customerSystem/src/views/register/visit/SelfInspection.jsx                |  264 +++++++++++
 gz-customerSystem/public/locationSelect.js                                   |   10 
 gz-customerSystem/src/views/register/visit/index.jsx                         |   45 +
 gz-customerSystem/src/components/Layout/Header.jsx                           |   16 
 gz-customerSystem/src/views/register/eventFlow/component/EscalationModel.jsx |   30 
 24 files changed, 1,240 insertions(+), 175 deletions(-)

diff --git a/gz-customerSystem/public/locationSelect.js b/gz-customerSystem/public/locationSelect.js
index f95c58f..de6b9be 100644
--- a/gz-customerSystem/public/locationSelect.js
+++ b/gz-customerSystem/public/locationSelect.js
@@ -7,6 +7,11 @@
 						'parentId': '1601',
 						'children': [
 								{
+										'label': '新市街道',
+										'value': '62857',
+										'parentId': '50258',
+								},
+								{
 										'label': '云城街道',
 										'value': '129164',
 										'parentId': '50258',
@@ -104,11 +109,6 @@
 								{
 										'label': '同德街道',
 										'value': '62856',
-										'parentId': '50258',
-								},
-								{
-										'label': '新市街道',
-										'value': '62857',
 										'parentId': '50258',
 								},
 								{
diff --git a/gz-customerSystem/src/api/appUrl.js b/gz-customerSystem/src/api/appUrl.js
index 9a37c3e..ff9a0c3 100644
--- a/gz-customerSystem/src/api/appUrl.js
+++ b/gz-customerSystem/src/api/appUrl.js
@@ -9,12 +9,12 @@
  */
 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 后面接附件编号
diff --git a/gz-customerSystem/src/components/ArcoUpload/index.jsx b/gz-customerSystem/src/components/ArcoUpload/index.jsx
index 7f87aa1..034b40c 100644
--- a/gz-customerSystem/src/components/ArcoUpload/index.jsx
+++ b/gz-customerSystem/src/components/ArcoUpload/index.jsx
@@ -24,6 +24,7 @@
  * editData *, // 编辑回显数据
  * handleDelFile *,//删除文件接口
  * ownerType,//用于回显文件
+ * formItemParams, formItem的参数
  */
 
 export default function ArcoUpload(props) {
@@ -62,6 +63,7 @@
         label={props.label}
         field={props.field}
         triggerPropName='fileList'
+        {...props.formItemParams}
       >
         <Upload
           drag
diff --git a/gz-customerSystem/src/components/Layout/Header.jsx b/gz-customerSystem/src/components/Layout/Header.jsx
index a91e32c..bb24e9b 100644
--- a/gz-customerSystem/src/components/Layout/Header.jsx
+++ b/gz-customerSystem/src/components/Layout/Header.jsx
@@ -37,10 +37,9 @@
  * 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);
@@ -73,7 +72,7 @@
 
   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' }} />
@@ -110,9 +109,6 @@
     }
   }
 
-  useEffect(() => {
-    setData($$.getLocal('customerSystemUser') || {});
-  }, [headerUserChange]);
 
   return (
     <header className="header">
@@ -155,9 +151,9 @@
             <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>
@@ -173,7 +169,7 @@
             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>
diff --git a/gz-customerSystem/src/components/Layout/index.jsx b/gz-customerSystem/src/components/Layout/index.jsx
index 36eca5f..1b04597 100644
--- a/gz-customerSystem/src/components/Layout/index.jsx
+++ b/gz-customerSystem/src/components/Layout/index.jsx
@@ -7,8 +7,8 @@
  * @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';
@@ -54,6 +54,9 @@
 
 	//网格跳转请求状态
 	const [gridStatus, setGridStatus] = useState(false)
+	const [searchParams] = useSearchParams();
+	const [userData, setUserData] = useState({});
+
 
 	// 切换头部menu
 	function handleClickHeaderMenu(values) {
@@ -120,6 +123,8 @@
 			$$.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
@@ -134,11 +139,15 @@
 			}
 		}
 	}
+	
 
 	// 初始化 格式化数据适应菜单栏
 	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 {
@@ -149,6 +158,7 @@
 				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: {} });
@@ -207,6 +217,10 @@
 			getRolePower(roleActive.id, roleActive.roleName);
 		}
 	}, [roleActive.id]);
+	useEffect(() => {
+		let customerSystemUser = $$.getLocal('customerSystemUser');
+		setUserData(customerSystemUser || {});
+	  }, [headerUserChange]);
 console.log(gridStatus);
 	return (
 		<>
@@ -217,6 +231,7 @@
 				handleClickMenu={handleClickHeaderMenu}
 				headerUserChange={headerUserChange}
 				handleChangeRole={handleChangeRole}
+				userData={userData}
 			/>
 			{gridStatus && isNotNav ? (
 				<main className="layout-main" id="layoutMain">
diff --git a/gz-customerSystem/src/components/ProgressStep/VisitStep.jsx b/gz-customerSystem/src/components/ProgressStep/VisitStep.jsx
index 0dfa948..be73cf0 100644
--- a/gz-customerSystem/src/components/ProgressStep/VisitStep.jsx
+++ b/gz-customerSystem/src/components/ProgressStep/VisitStep.jsx
@@ -22,6 +22,8 @@
  */
 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,//回退
@@ -40,38 +42,87 @@
 
   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>
@@ -96,7 +147,11 @@
                         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>
                       }
diff --git a/gz-customerSystem/src/components/ProgressStep/index.less b/gz-customerSystem/src/components/ProgressStep/index.less
index e574fab..93245ce 100644
--- a/gz-customerSystem/src/components/ProgressStep/index.less
+++ b/gz-customerSystem/src/components/ProgressStep/index.less
@@ -3,7 +3,7 @@
 .myStep {
 	&-item {
 		position: relative;
-		padding-bottom: 32px;
+		padding-bottom: 34px;
 
 		&-success {
 			background-color: @main-color;
@@ -74,16 +74,15 @@
 
 		&-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;
 			}
@@ -213,7 +212,7 @@
 		border: 1px solid #e5e6eb;
 		border-radius: 4px;
 		color: #e5e6eb;
-		padding: 4px 8px;
+		padding: 3px 8px 4px 8px;
 		cursor: pointer;
 	}
 
@@ -221,4 +220,17 @@
 		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;
+	}
 }
\ No newline at end of file
diff --git a/gz-customerSystem/src/components/personCard/DetailDialog.jsx b/gz-customerSystem/src/components/personCard/DetailDialog.jsx
index 9038fef..2a94e1c 100644
--- a/gz-customerSystem/src/components/personCard/DetailDialog.jsx
+++ b/gz-customerSystem/src/components/personCard/DetailDialog.jsx
@@ -357,6 +357,11 @@
               ...res,
               value: filterValue
             }
+          } else if (res.field === 'extreme') {
+            return {
+              ...res,
+              value: data[res.field] === 0 ? '否' : '是'
+            }
           } else {
             return {
               ...res,
diff --git a/gz-customerSystem/src/router/router.js b/gz-customerSystem/src/router/router.js
index a482be0..0195b1a 100644
--- a/gz-customerSystem/src/router/router.js
+++ b/gz-customerSystem/src/router/router.js
@@ -147,6 +147,8 @@
 import ClosingReview from '../views/register/closingReview';
 //工作台
 import VisitWorkBench from '../views/register';
+//自行排查
+import SelfInspection from '../views/register/visit/SelfInspection';
 
 import Test from '../views/test';
 
@@ -225,6 +227,7 @@
 						<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 />} />
diff --git a/gz-customerSystem/src/views/comprehensive/index.jsx b/gz-customerSystem/src/views/comprehensive/index.jsx
index f1bd214..dd193a3 100644
--- a/gz-customerSystem/src/views/comprehensive/index.jsx
+++ b/gz-customerSystem/src/views/comprehensive/index.jsx
@@ -46,7 +46,7 @@
       { 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> },
diff --git a/gz-customerSystem/src/views/register/eventFlow/component/EscalationModel.jsx b/gz-customerSystem/src/views/register/eventFlow/component/EscalationModel.jsx
index b76c6a2..1bb57d2 100644
--- a/gz-customerSystem/src/views/register/eventFlow/component/EscalationModel.jsx
+++ b/gz-customerSystem/src/views/register/eventFlow/component/EscalationModel.jsx
@@ -58,21 +58,19 @@
   }
 
   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) => {
@@ -130,7 +128,7 @@
               </div>
               <FormItem
                 label={(<div style={{ display: 'flex' }}>上报意见<div className="must">必填</div></div>)}
-                field='returnContent'
+                field='appearContent'
                 rules={[{ required: true, message: '请选择回退理由' }]}
               >
                 <TextArea
diff --git a/gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx b/gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx
index 47faac2..c87f76f 100644
--- a/gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx
+++ b/gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx
@@ -38,7 +38,7 @@
             })
             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}`)
             }
           },
         });
diff --git a/gz-customerSystem/src/views/register/handleFeedback/component/AuditView.jsx b/gz-customerSystem/src/views/register/handleFeedback/component/AuditView.jsx
index 32121ac..d409482 100644
--- a/gz-customerSystem/src/views/register/handleFeedback/component/AuditView.jsx
+++ b/gz-customerSystem/src/views/register/handleFeedback/component/AuditView.jsx
@@ -7,6 +7,7 @@
 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;
@@ -26,6 +27,7 @@
 }
 
 const AuditView = (props) => {
+  const navigate = useNavigate();
   const formRef = useRef();
   const scrollRef = useRef(null);
   const [id, setId] = useState();
@@ -89,6 +91,7 @@
     const res = await submit(data)
     if (res.type) {
       $$.infoSuccess({ content: '提交成功!' });
+      navigate('/mediate/visit/visitWorkBench')
     }
   }
 
diff --git a/gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx b/gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx
index a2a9fd8..66eba3e 100644
--- a/gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx
+++ b/gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx
@@ -40,22 +40,14 @@
   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: '口头协议' },
@@ -65,10 +57,6 @@
 
   const handleTabChange = (newTabIndex) => {
     setSelectedTab(newTabIndex);
-  };
-
-  const handleTabChange1 = (newTabIndex) => {
-    setSelectedTab1(newTabIndex);
   };
 
   const handleConfirm = (scanContent) => {
@@ -116,53 +104,57 @@
     }
   }
 
+  //化解成功的提交处理
   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,
@@ -213,7 +205,7 @@
             scrollToFirstError={true}
             requiredSymbol={false}
             initialValues={{
-              agreeType: 2,
+              agreeType: value,
             }} //默认值
           >
             <Col span={8}>
@@ -224,7 +216,7 @@
                 }
                 field='agreeType'
               >
-                <Select options={agreement} onChange={(v) => { setValue(v); console.log(typeof v, 'vvv') }}>
+                <Select options={agreement} onChange={(v) => { setValue(v); }}>
                 </Select>
               </FormItem>
             </Col>
@@ -247,7 +239,7 @@
                               <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 }}>
@@ -262,6 +254,7 @@
                           </>
                         )}
                         field='agreeContent'
+                        rules={[{ message: '请填写协议要点', required: true }]}
                       >
                         <TextArea
                           autoSize={{ minRows: 4, maxRows: 8 }}
@@ -289,6 +282,7 @@
                       <FormItem
                         label={(<div style={{ display: 'flex' }}>结案意见<div className="must">必填</div></div>)}
                         field='windupContent'
+                        rules={[{ message: '请填写结案意见', required: true }]}
                       >
                         <TextArea
                           autoSize={{ minRows: 4, maxRows: 8 }}
@@ -312,7 +306,14 @@
                 >
                   <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' }}>
@@ -325,19 +326,8 @@
                             </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 }}>
@@ -359,6 +349,7 @@
                       <FormItem
                         label={(<div style={{ display: 'flex' }}>结案意见<div className="must">必填</div></div>)}
                         field='windupContent'
+                        rules={[{ message: '请填写结案意见', required: true }]}
                       >
                         <TextArea
                           autoSize={{ minRows: 4, maxRows: 8 }}
@@ -370,7 +361,6 @@
                   </Row>
                 </Form>
               </>
-
             }
             <Space style={{ marginBottom: '16px' }}>
               <Button type='primary' onClick={handleSubmit}>提交</Button>
@@ -409,6 +399,7 @@
                     <FormItem
                       label=''
                       field='failReason1'
+                      rules={[{ message: '请填写调解过程中提供的解决方案', required: true }]}
                     >
                       <Input.TextArea
                         showWordLimit
@@ -425,6 +416,7 @@
                     <FormItem
                       label=''
                       field='failReason2'
+                      rules={[{ message: '请填写调解过程中的主要分歧点', required: true }]}
                     >
                       <Input.TextArea
                         showWordLimit
@@ -441,6 +433,7 @@
                     <FormItem
                       label=''
                       field='failReason3'
+                      rules={[{ message: '请填写最终难以调和的原因', required: true }]}
                     >
                       <Input.TextArea
                         showWordLimit
@@ -460,6 +453,7 @@
               <FormItem
                 label={(<div style={{ display: 'flex' }}>结案意见<div className="must">必填</div></div>)}
                 field='windupContent'
+                rules={[{ message: '请填写结案意见', required: true }]}
               >
                 <TextArea
                   autoSize={{ minRows: 4, maxRows: 8 }}
@@ -470,7 +464,7 @@
             </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>
         }
diff --git a/gz-customerSystem/src/views/register/index.jsx b/gz-customerSystem/src/views/register/index.jsx
index 8f5a353..31fb16e 100644
--- a/gz-customerSystem/src/views/register/index.jsx
+++ b/gz-customerSystem/src/views/register/index.jsx
@@ -1188,6 +1188,10 @@
 
   //改变tab
   const handleColumnType = (type) => {
+    setPageData({
+      page: 1,
+      size: 10,
+    })
     setSearchData({
       ...searchData,
       status: type
@@ -1196,6 +1200,10 @@
 
   //改变工作总览
   const tabActive = (key, data) => {
+    setPageData({
+      page: 1,
+      size: 10,
+    })
     //默认第一个tab
     if (key == '5') {
       setSearchData({
@@ -1402,7 +1410,7 @@
                       setPageData({
                         ...pageData,
                         page,
-                        pageSize
+                        size: pageSize
                       })
                     },
                   }}
@@ -1464,7 +1472,7 @@
             <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>
diff --git a/gz-customerSystem/src/views/register/index.less b/gz-customerSystem/src/views/register/index.less
index 35027f2..d016546 100644
--- a/gz-customerSystem/src/views/register/index.less
+++ b/gz-customerSystem/src/views/register/index.less
@@ -523,12 +523,13 @@
 	}
 
 	.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: '';
@@ -934,7 +935,7 @@
 	padding: 12px 16px 16px 16px;
 	flex: 1;
 	justify-content: center;
-
+	cursor: pointer;
 }
 
 .timeTip {
diff --git a/gz-customerSystem/src/views/register/matterDetail/RateModule.jsx b/gz-customerSystem/src/views/register/matterDetail/RateModule.jsx
index 5233d61..e0639e9 100644
--- a/gz-customerSystem/src/views/register/matterDetail/RateModule.jsx
+++ b/gz-customerSystem/src/views/register/matterDetail/RateModule.jsx
@@ -1,7 +1,7 @@
 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>
@@ -21,7 +21,7 @@
           <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">
diff --git a/gz-customerSystem/src/views/register/matterDetail/UniteHandle.jsx b/gz-customerSystem/src/views/register/matterDetail/UniteHandle.jsx
index 3bac15e..2dac1a5 100644
--- a/gz-customerSystem/src/views/register/matterDetail/UniteHandle.jsx
+++ b/gz-customerSystem/src/views/register/matterDetail/UniteHandle.jsx
@@ -139,13 +139,13 @@
         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'
diff --git a/gz-customerSystem/src/views/register/matterDetail/index.jsx b/gz-customerSystem/src/views/register/matterDetail/index.jsx
index 84efe13..08c5efb 100644
--- a/gz-customerSystem/src/views/register/matterDetail/index.jsx
+++ b/gz-customerSystem/src/views/register/matterDetail/index.jsx
@@ -29,7 +29,7 @@
       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 => {
diff --git a/gz-customerSystem/src/views/register/visit/SelfInspection.jsx b/gz-customerSystem/src/views/register/visit/SelfInspection.jsx
new file mode 100644
index 0000000..5d3bf4e
--- /dev/null
+++ b/gz-customerSystem/src/views/register/visit/SelfInspection.jsx
@@ -0,0 +1,264 @@
+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;
\ No newline at end of file
diff --git a/gz-customerSystem/src/views/register/visit/SelfPreview.jsx b/gz-customerSystem/src/views/register/visit/SelfPreview.jsx
new file mode 100644
index 0000000..ec84936
--- /dev/null
+++ b/gz-customerSystem/src/views/register/visit/SelfPreview.jsx
@@ -0,0 +1,240 @@
+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
\ No newline at end of file
diff --git a/gz-customerSystem/src/views/register/visit/component/SelfVisitorRegister.jsx b/gz-customerSystem/src/views/register/visit/component/SelfVisitorRegister.jsx
new file mode 100644
index 0000000..4bc0b21
--- /dev/null
+++ b/gz-customerSystem/src/views/register/visit/component/SelfVisitorRegister.jsx
@@ -0,0 +1,451 @@
+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;
\ No newline at end of file
diff --git a/gz-customerSystem/src/views/register/visit/index.jsx b/gz-customerSystem/src/views/register/visit/index.jsx
index 0002a87..6783643 100644
--- a/gz-customerSystem/src/views/register/visit/index.jsx
+++ b/gz-customerSystem/src/views/register/visit/index.jsx
@@ -180,16 +180,28 @@
 	}
 
 	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)
+						},
+					});
+				}
+			});
+		}
 	}
 
 	//保存请求
@@ -201,12 +213,17 @@
 	}
 
 	//提交请求
-	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)
+			}
 		}
 	}
 
diff --git a/gz-customerSystem/src/views/register/visit/preview.jsx b/gz-customerSystem/src/views/register/visit/preview.jsx
index d908672..ff662fa 100644
--- a/gz-customerSystem/src/views/register/visit/preview.jsx
+++ b/gz-customerSystem/src/views/register/visit/preview.jsx
@@ -15,7 +15,12 @@
 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);
@@ -116,15 +121,21 @@
           <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>
@@ -146,9 +157,7 @@
         <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>
@@ -159,14 +168,6 @@
         <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>

--
Gitblit v1.8.0