From 2124f180870958abfdba12658c4ebcc514953f11 Mon Sep 17 00:00:00 2001
From: dminyi <1301963064@qq.com>
Date: Fri, 30 Aug 2024 17:49:47 +0800
Subject: [PATCH] 流转办理

---
 gz-customerSystem/src/views/register/visit/component/FileUpLoad.jsx  |  134 ++++++++++++++++
 gz-customerSystem/src/assets/images/down.png                         |    0 
 gz-customerSystem/src/assets/images/fold.png                         |    0 
 gz-customerSystem/src/components/WantUserTag/Handling.jsx            |   10 
 gz-customerSystem/src/views/register/index.less                      |   62 +++++++
 gz-customerSystem/src/assets/images/index.js                         |    6 
 gz-customerSystem/src/views/register/visit/component/MattersInfo.jsx |    4 
 gz-customerSystem/src/components/WantUserTag/index.less              |    8 +
 gz-customerSystem/src/views/register/visit/component/handle.jsx      |  223 ++++++++++++++++++++++++---
 9 files changed, 405 insertions(+), 42 deletions(-)

diff --git a/gz-customerSystem/src/assets/images/down.png b/gz-customerSystem/src/assets/images/down.png
new file mode 100644
index 0000000..e8c9143
--- /dev/null
+++ b/gz-customerSystem/src/assets/images/down.png
Binary files differ
diff --git a/gz-customerSystem/src/assets/images/fold.png b/gz-customerSystem/src/assets/images/fold.png
new file mode 100644
index 0000000..3ec8012
--- /dev/null
+++ b/gz-customerSystem/src/assets/images/fold.png
Binary files differ
diff --git a/gz-customerSystem/src/assets/images/index.js b/gz-customerSystem/src/assets/images/index.js
index f0249c0..af2d092 100644
--- a/gz-customerSystem/src/assets/images/index.js
+++ b/gz-customerSystem/src/assets/images/index.js
@@ -2,7 +2,7 @@
  * @Company: hugeInfo
  * @Author: lwh
  * @Date: 2023-04-24 16:12:00
- * @LastEditTime: 2024-08-28 10:47:07
+ * @LastEditTime: 2024-08-30 10:47:30
  * @LastEditors: dminyi 1301963064@qq.com
  * @Version: 1.0.0
  * @Description:
@@ -49,6 +49,8 @@
 import transfer from "./transfer.png";
 import empty from "./empty.png";
 import feedback from "./feedback.png";
+import fold from "./fold.png";
+import down from "./down.png"
 
 export {
   ledger_1,
@@ -93,4 +95,6 @@
   transfer,
   empty,
   feedback,
+  fold,
+  down
 };
diff --git a/gz-customerSystem/src/components/WantUserTag/Handling.jsx b/gz-customerSystem/src/components/WantUserTag/Handling.jsx
index 6aeb09b..49352d3 100644
--- a/gz-customerSystem/src/components/WantUserTag/Handling.jsx
+++ b/gz-customerSystem/src/components/WantUserTag/Handling.jsx
@@ -2,7 +2,7 @@
  * @Author: dminyi 1301963064@qq.com
  * @Date: 2024-08-29 20:43:25
  * @LastEditors: dminyi 1301963064@qq.com
- * @LastEditTime: 2024-08-29 20:55:24
+ * @LastEditTime: 2024-08-30 10:27:25
  * @FilePath: \gzDyh\gz-customerSystem\src\components\WantUserTag\Handling.jsx
  * @Description: 经办人
  */
@@ -16,10 +16,10 @@
   return (
     <div className="wantUserTag">
       <div className="wantUserTag-wantHandleUser">
-        <div className="wantUserTag-wantUser-right">{name}</div>
-        <Typography.Link className="wantUserTag-wantHandleUser-close" onClick={() => onClose(value)}>
-          <CloseOutlined style={{width:'11px',height:'13px'}}/>
-        </Typography.Link>
+        <div className="wantUserTag-wantHandleUser-right">{name}</div>
+        <div onClick={() => onClose(value)} className="wantUserTag-wantHandleUser-icon">
+          <CloseOutlined />
+        </div>
       </div>
     </div>
   );
diff --git a/gz-customerSystem/src/components/WantUserTag/index.less b/gz-customerSystem/src/components/WantUserTag/index.less
index b394f4c..a53f77e 100644
--- a/gz-customerSystem/src/components/WantUserTag/index.less
+++ b/gz-customerSystem/src/components/WantUserTag/index.less
@@ -34,8 +34,16 @@
 		display:flex;
 		padding: 5px 8px;
 		border: 1px solid rgba(229,230,235,1);
+		align-items: center;
+		border-radius: 2px;
 
+		&-right {
+			margin-left: 8px;
+		}
 
+		&-icon{
+			color: #1D2129;
+		}
 	}
 
 	&-green {
diff --git a/gz-customerSystem/src/views/register/index.less b/gz-customerSystem/src/views/register/index.less
index 633e838..3dfa84b 100644
--- a/gz-customerSystem/src/views/register/index.less
+++ b/gz-customerSystem/src/views/register/index.less
@@ -282,15 +282,64 @@
 		display: flex;
 		flex-direction: row;
 		column-gap: 8px;
-		/* margin: 8px 16px 22px; */
 		margin: 0px 8px 22px 16px;
-		// height: 100vh;
 
 
 		&-left {
 			flex: 3 1 0%;
 			background-color: rgb(255, 255, 255);
 			padding: 12px 0px 12px 16px;
+			margin-bottom: -25px;
+
+			&-record {
+				border: 1px solid #D9D9D9;
+				border-radius: 8px;
+				margin-right: 16px;
+				margin-top: 8px;
+
+				&-top {
+					padding: 12px;
+					display: flex;
+					align-items: center;
+					background-color: #FAFAFA;
+					border-radius: 8px;
+
+
+					&-icon {
+						width: 12px;
+						height: 12px;
+						margin-right: 12px;
+					}
+
+					&-remark {
+						border: 1px solid #FFD591;
+						padding: 0px 8px;
+						color: #FA8C16;
+						background-color: #FFF7E6;
+						border-radius: 4px;
+						margin-left: 8px;
+					}
+
+					&-hostOrg{
+						border: 1px solid #89C2E3;
+						padding: 0px 8px;
+						color: #1A6FB8;
+						background-color: #E8F8FF;
+						border-radius: 4px;
+						margin-left: 8px;
+
+					}
+				}
+
+				&-bottom {
+					margin: 16px 12px;
+
+					&-table {
+						border: 1px solid #d9d9d9;
+						width: 100%;
+					}
+				}
+			}
 		}
 
 		&-right {
@@ -298,6 +347,13 @@
 			background-color: rgb(255, 255, 255);
 		}
 	}
+}
+
+.Form{
+	padding: 12px 16px 16px 16px;
+	border: 1px dashed #1a6fb8;
+	border-radius: 10px;
+	margin-top: 16px;
 }
 
 .tabs-container .arco-tabs-header {
@@ -317,6 +373,6 @@
 	width: 82px;
 }
 
-.progress{
+.progress {
 	margin: 16px 0px 0px 16px;
 }
\ No newline at end of file
diff --git a/gz-customerSystem/src/views/register/visit/component/FileUpLoad.jsx b/gz-customerSystem/src/views/register/visit/component/FileUpLoad.jsx
new file mode 100644
index 0000000..f136c12
--- /dev/null
+++ b/gz-customerSystem/src/views/register/visit/component/FileUpLoad.jsx
@@ -0,0 +1,134 @@
+import React, { useState, useEffect } from 'react';
+import { Typography, Button } from 'antd';
+import { CheckOutlined, } from '@ant-design/icons';
+import { Form, Input, Modal,Upload } from '@arco-design/web-react';
+import { IconLink } from '@arco-design/web-react/icon';
+
+
+const { TextArea } = Input;
+const { Text } = Typography;
+
+const DocumentScanner = ({
+  visible,
+  onCancel,
+  onConfirm,
+  formRef,
+}) => {
+  const [scanImage, setScanImage] = useState(false);
+  const [scaned, setScaned] = useState(false);
+  const [fileView, setFileView] = useState(null);
+
+  useEffect(() => {
+    if (!visible) {
+      setScanImage(false);
+      setScaned(false);
+      setFileView(null);
+    }
+  }, [visible]);
+
+  const handleUploadChange = (info) => {
+    if (info.fileList.length > 0) {
+      setScanImage(true);
+    }
+    setFileView({
+      ...info.fileList[0],
+      url: URL.createObjectURL(info.fileList[0].originFile),
+    });
+  };
+
+  const handleStartRecognition = () => {
+    setScaned(true);
+    setScanImage(false);
+  };
+
+  const handleUseText = (text) => {
+    onConfirm(text);
+    onCancel(); // 关闭弹窗
+  };
+
+  return (
+    <>
+      <Modal
+        style={{ width: '1200px' }}
+        visible={visible && !scanImage && !scaned}
+        onCancel={onCancel}
+        title='识别上传材料'
+        centered
+        footer={null}
+      >
+        <Form
+          ref={formRef}
+          layout='vertical'
+          requiredSymbol={false}
+          style={{ marginTop: '4px' }}
+        >
+          <Form.Item label='选择图片' name='file'>
+            <Upload
+              drag
+              limit={1}
+              accept='image/*'
+              onDrop={() => {}}
+              tip='支持png、jpg、pdf等格式文件上传,每次上传大小不超过10M'
+              showUploadList={{
+                fileIcon: <IconLink style={{ color: '#1D2129' }} />,
+              }}
+              onChange={handleUploadChange}
+            >
+              <Text>点击或者拖拽文件到这里</Text>
+            </Upload>
+          </Form.Item>
+        </Form>
+      </Modal>
+      <Modal
+        style={{ width: '944px' }}
+        visible={visible && scanImage}
+        onCancel={() => setScanImage(false)}
+        footer={null}
+        title='选择识别范围'
+        centered
+      >
+        <img
+          src={fileView?.url}
+          alt=""
+          style={{
+            display: 'block',
+            margin: 'auto',
+            maxWidth: '100%',
+            maxHeight: '100%',
+            objectFit: 'contain',
+          }}
+        />
+        <div style={{ marginTop: '20px' }}>
+          <Button type="primary" onClick={handleStartRecognition}>
+            开始识别
+          </Button>
+        </div>
+      </Modal>
+      <Modal
+        style={{ width: '1200px' }}
+        visible={visible && scaned}
+        onCancel={() => setScaned(false)}
+        footer={null}
+        title='识别上传材料'
+        centered
+      >
+        <div style={{ marginTop: '20px', marginBottom: '8px' }}>识别内容</div>
+        <TextArea
+          showWordLimit
+          rows={5}
+          placeholder=''
+          wrapperStyle={{ width: '100%' }}
+          defaultValue='识别内容'
+          onChange={(e) => handleUseText(e.target.value)}
+        />
+        <div style={{ marginTop: '24px' }}>
+          <Button type="primary" onClick={() => handleUseText('识别内容')}>
+            使用文字
+          </Button>
+        </div>
+      </Modal>
+    </>
+  );
+};
+
+export default DocumentScanner;
\ No newline at end of file
diff --git a/gz-customerSystem/src/views/register/visit/component/MattersInfo.jsx b/gz-customerSystem/src/views/register/visit/component/MattersInfo.jsx
index 4e346eb..552af2f 100644
--- a/gz-customerSystem/src/views/register/visit/component/MattersInfo.jsx
+++ b/gz-customerSystem/src/views/register/visit/component/MattersInfo.jsx
@@ -13,11 +13,9 @@
 import TableView from '@/components/TableView'
 import { question, register, Matter, transfer } from '../../../../assets/images'
 import * as $$ from '@/utils/utility';
-import { Tabs, Typography, Steps } from '@arco-design/web-react';
+import { Typography, Steps } from '@arco-design/web-react';
 import "@arco-themes/react-gzzz/css/arco.css";
-import { IconCalendar, IconClockCircle, IconUser } from '@arco-design/web-react/icon';
 import Handle from './handle'
-const TabPane = Tabs.TabPane;
 
 const style = {
   // textAlign: 'center',
diff --git a/gz-customerSystem/src/views/register/visit/component/handle.jsx b/gz-customerSystem/src/views/register/visit/component/handle.jsx
index 620a5fc..bcced75 100644
--- a/gz-customerSystem/src/views/register/visit/component/handle.jsx
+++ b/gz-customerSystem/src/views/register/visit/component/handle.jsx
@@ -1,12 +1,14 @@
-import React, { useState } from 'react';
-import { Steps } from '@arco-design/web-react';
+import React, { useState, useRef } from 'react';
 import { Col, Space, Row, Tooltip, Button } from 'antd';
-import { register, empty } from '../../../../assets/images'
-import { Form, Input, Empty, Tabs, Typography, Modal } from '@arco-design/web-react';
+import { register, fold, down, empty, link } from '../../../../assets/images';
+import { Form, Input, Tabs, Typography, Empty } from '@arco-design/web-react';
 import { question1, } from '@/assets/images';
-import ProgressStep from '../../../../components/ProgressStep/VisitStep'
-import SelectObjModal from '../../../../components/SelectObjModal/selectPerson'
-import WantUserTag from '../../../../components/WantUserTag/Handling'
+import ProgressStep from '../../../../components/ProgressStep/VisitStep';
+import SelectObjModal from '../../../../components/SelectObjModal/selectPerson';
+import WantUserTag from '../../../../components/WantUserTag/Handling';
+import { scan } from '@/assets/images/icon'
+import DocumentScanner from './FileUpLoad'
+
 
 const InputSearch = Input.Search;
 const FormItem = Form.Item;
@@ -22,24 +24,120 @@
 const Handle = () => {
   const [selectedTab, setSelectedTab] = useState('1'); // 默认选中第一个 tab
   const [wantUser, setWantUser] = useState({});
+  // const [scanFile, setScanFile] = useState(false);
+
   const tabs = [
     { index: '1', label: '承办部门' },
     { index: '2', label: '配合部门' },
   ];
 
   const [isModalVisible, setIsModalVisible] = useState(false);
-
-  const showModal = () => {
-    setIsModalVisible(true);
-  };
-
-  const hideModal = () => {
-    setIsModalVisible(false);
-  };
+  const formRef = useRef(null);
 
   const handleTabChange = (newTabIndex) => {
     setSelectedTab(newTabIndex);
   };
+
+  const [records, setRecords] = useState([
+    {
+      id: 1,
+      date: '2024 - 7 - 1 10:00',
+      location: '天河区棠下街综治中心',
+      remark: '配合部门',
+      showView: false,
+      details: [
+        {
+          title: '操作人',
+          content: (
+            <div style={{ display: 'flex' }}>
+              <div>李晓明</div>
+              <img src={register} alt='' style={{ width: '14px', height: '14px', marginLeft: '8px', marginTop: '4px' }} />
+            </div>
+          ),
+        },
+        {
+          title: '办理意见',
+          content: (
+            <div>
+              调解开始,我首先安抚双方情绪,确保对话在一个平和的氛围中展开。随后,我引导王先生详细说明了他的财务困境及还款意愿,同时让银行代表理解其处境,强调长期合作的重要性。经过反复沟通,银行同意调整还款计划,降低利率,并给予王先生一定的宽限期。王先生则承诺按新计划履行还款义务,双方最终达成一致,签署了调解协议。
+            </div>
+          ),
+        },
+        {
+          title: '办理附件',
+          content: (
+            <a href="your-link-here.html" target="_blank">
+              <img src={link} alt="" className="title-file" />江照月法人身份证明.pdf
+            </a>
+          ),
+        },
+      ],
+    },
+    {
+      id: 2,
+      date: '2024 - 7 - 2 14:00',
+      location: '天河区天河南街道办事处',
+      remark: '承办部门',
+      showView: false,
+      details: [
+        {
+          title: '操作人',
+          content: (
+            <div style={{ display: 'flex' }}>
+              <div>张伟</div>
+              <img src={register} alt='' style={{ width: '14px', height: '14px', marginLeft: '8px', marginTop: '4px' }} />
+            </div>
+          ),
+        },
+        {
+          title: '办理意见',
+          content: (
+            <div>
+              在本次协调会议中,我们成功解决了双方之间的纠纷,确保了所有参与方的利益得到了妥善处理。通过深入交流,各方达成了共识,同意采取一系列措施来解决现存的问题。
+            </div>
+          ),
+        },
+        {
+          title: '办理附件',
+          content: '广州市天河区天河南路200号',
+        },
+      ],
+    },
+  ]);
+
+
+
+  const toggleView = (id) => {
+    setRecords(records.map(record => {
+      if (record.id === id) {
+        return {
+          ...record,
+          showView: !record.showView,
+        };
+      }
+      return record;
+    }));
+  };
+
+
+  const [scannerVisible, setScannerVisible] = useState(false);
+
+  const handleConfirm = (text) => {
+    console.log('识别完成:', text);
+    setScannerVisible(false);
+  };
+
+  const openScanner = () => {
+    setScannerVisible(true);
+    formRef.current?.resetFields();
+    formRef.current?.setFieldsValue({});
+  };
+
+  const onCancel = () => {
+    setScannerVisible(false);
+  };
+
+
 
   return (
     <>
@@ -110,23 +208,81 @@
               </Col>
               <Col span={24}>
                 <div style={{ color: 'rgb(134, 144, 156)' }}>办理记录</div>
-                <Empty
-                  icon={
-                    <div
-                      style={{
-                        display: 'flex',
-                        // width: 160,
-                        justifyContent: 'center',
-                      }}
+                {records.length > 0 ?
+                  <div>
+                    {records.map(record => (
+                      <div key={record.id} className='container-bottom-left-record'>
+                        <div className='container-bottom-left-record-top'>
+                          {
+                            record.showView ? (
+                              <img src={down} alt='' style={{ width: '18px', marginRight: '6px' }} onClick={() => toggleView(record.id)} />
+                            ) : (
+                              <img src={fold} alt='' className='container-bottom-left-record-top-icon' onClick={() => toggleView(record.id)} />
+                            )
+                          }
+                          <div>{`${record.date} ${record.location}`}</div>
+                          <div className={`container-bottom-left-record-top-${record.remark === '配合部门' ? 'remark' : 'hostOrg'}`}>{record.remark}</div>
+                        </div>
+                        <div className='container-bottom-left-record-bottom' style={{ display: record.showView ? 'block' : 'none' }}>
+                          <table border="1" cellpadding="8" className='container-bottom-left-record-bottom-table'>
+                            {record.details.map(detail => (
+                              <tr key={detail.title}>
+                                <th bgcolor="#F7F8FA" className="table-title" width="120">{detail.title}</th>
+                                <td>{detail.content}</td>
+                              </tr>
+                            ))}
+                          </table>
+                        </div>
+                      </div>
+                    ))}
+                  </div>
+                  :
+                  <Empty
+                    icon={
+                      <div
+                        style={{
+                          display: 'flex',
+                          justifyContent: 'center',
+                          marginBottom: '100px'
+                        }}
+                      >
+                        <img src={empty} alt='' style={{ width: '160px', height: '160px' }} />
+                      </div>
+                    }
+                    description='暂无数据'
+                  />
+                }
+                <div className='Form'>
+                  <Col span={24} style={{ marginBottom: '8px' }}>
+                    <Space size='small'>
+                      <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h5>添加办理记录</h5>
+                    </Space>
+                  </Col>
+                  <Col span={24}>
+                    <FormItem
+                      label={<div style={{ display: 'flex' }}>
+                        办理意见
+                        <img src={scan} alt="" style={{ marginRight: '-2px', marginLeft: '8px' }} />
+                        <div style={{ marginLeft: '8px', color: '#1A6FB8', fontSize: '14px', cursor: 'pointer' }} onClick={openScanner}>识别材料</div>
+                      </div>
+                      }
+                      field='caseDes'
+                      rules={[{ message: '请填写事项概况', required: true }]}
                     >
-                      <img src={empty} alt='' style={{ width: '160px', height: '160px' }} />
-                    </div>
-                  }
-                  description='暂无数据'
-                />
+                      <Input.TextArea
+                        maxLength={2000}
+                        showWordLimit
+                        rows={5}
+                        placeholder='请完整描述事项概况,应具备5要素:发生时间+发生地点+人物情况+事项起因+事项经过'
+                        wrapperStyle={{ width: '100%' }}
+                      />
+                    </FormItem>
+                  </Col>
+
+                </div>
               </Col>
             </Form>
-            <Space>
+            <Space style={{ marginTop: '38px', position: 'absolute', bottom: '4px' }}>
               <Button type="primary" style={{ backgroundColor: '#1A6FB8' }}>添加办理记录</Button>
               <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} >结案申请</Button>
               <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }}>联合处置申请</Button>
@@ -193,7 +349,14 @@
           }}
           onClose={() => setIsModalVisible(false)}
         />
-      </div>
+
+        <DocumentScanner
+          visible={scannerVisible}
+          onCancel={onCancel}
+          onConfirm={handleConfirm}
+          formRef={formRef}
+        />
+      </div >
     </>
   )
 

--
Gitblit v1.8.0