From 9365876679475117b2ac24fda870e835a3f99309 Mon Sep 17 00:00:00 2001
From: dminyi <1301963064@qq.com>
Date: Mon, 02 Sep 2024 19:55:54 +0800
Subject: [PATCH] 申请结案

---
 gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx     |   53 ++++++
 gz-customerSystem/src/views/register/index.less                              |   41 ++++
 gz-customerSystem/src/assets/images/index.js                                 |    6 
 gz-customerSystem/src/assets/images/tip.png                                  |    0 
 gz-customerSystem/src/views/register/handleFeedback/index.jsx                |    6 
 gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx |  317 +++++++++++++++++++++++++++++++++++++++
 6 files changed, 411 insertions(+), 12 deletions(-)

diff --git a/gz-customerSystem/src/assets/images/index.js b/gz-customerSystem/src/assets/images/index.js
index af2d092..8dee383 100644
--- a/gz-customerSystem/src/assets/images/index.js
+++ b/gz-customerSystem/src/assets/images/index.js
@@ -50,7 +50,8 @@
 import empty from "./empty.png";
 import feedback from "./feedback.png";
 import fold from "./fold.png";
-import down from "./down.png"
+import down from "./down.png";
+import tip from "./tip.png"
 
 export {
   ledger_1,
@@ -96,5 +97,6 @@
   empty,
   feedback,
   fold,
-  down
+  down,
+  tip
 };
diff --git a/gz-customerSystem/src/assets/images/tip.png b/gz-customerSystem/src/assets/images/tip.png
new file mode 100644
index 0000000..70772b7
--- /dev/null
+++ b/gz-customerSystem/src/assets/images/tip.png
Binary files differ
diff --git a/gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx b/gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx
new file mode 100644
index 0000000..54ca216
--- /dev/null
+++ b/gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx
@@ -0,0 +1,317 @@
+/*
+ * @Author: dminyi 1301963064@qq.com
+ * @Date: 2024-09-02 14:49:13
+ * @LastEditors: dminyi 1301963064@qq.com
+ * @LastEditTime: 2024-09-02 19:44:37
+ * @FilePath: \gzDyh\gz-customerSystem\src\views\register\handleFeedback\component\CaseResult.jsx
+ * @Description: 结案申请
+ */
+import React, { useState } from 'react';
+import { Modal, Form, Select, Upload, Input } from '@arco-design/web-react';
+import { Col, Space, Button } from 'antd';
+import DocumentScanner from './FileUpLoad'
+import { scan } from '@/assets/images/icon'
+import { tip } from '@/assets/images'
+
+const FormItem = Form.Item;
+
+
+const CaseResult = ({ visible = false, handleOnCancel }) => {
+
+
+
+  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 tabs = [
+    { index: '1', label: '化解成功' },
+    { index: '2', label: '化解不成功' },
+  ];
+
+  const tabs1 = [
+    { index: '1', label: '公共模板1:化解成功结案意见范本' },
+    { index: '2', label: '个人模板1:化解成功结案意见范本(完整版)' }
+  ]
+
+  const agreement = [
+    { value: 1, label: '口头协议' },
+    { value: 2, label: '书面协议' }
+  ]
+
+
+  const handleTabChange = (newTabIndex) => {
+    setSelectedTab(newTabIndex);
+  };
+
+  const handleTabChange1 = (newTabIndex) => {
+    setSelectedTab1(newTabIndex);
+  };
+
+  const handleConfirm = () => {
+    // 处理确认逻辑
+    setScanFile(false);
+  };
+
+  const handleCancel = () => {
+    // 处理取消逻辑
+    setScanFile(false);
+  };
+
+
+  return (
+    <>
+      <Modal visible={visible} onCancel={handleOnCancel} title='申请结案' centered footer={null} style={{ overflow: 'auto' }}>
+        <div className='caseResult-title'>化解结果</div>
+        <div className='caseResult-tabs'>
+          {tabs.map((tab) => (
+            <div
+              key={tab.index}
+              style={{
+                color: selectedTab === tab.index ? 'rgba(26,111,184,1)' : 'rgba(0,0,0,0.45)',
+                padding: '5px 16px',
+                border: `1px solid ${selectedTab === tab.index ? 'rgba(26,111,184,1)' : 'rgba(229,230,235,1)'}`,
+                borderRadius: '2px',
+                cursor: 'pointer',
+              }}
+              onClick={() => handleTabChange(tab.index)}
+            >
+              {tab.label}
+            </div>
+          ))}
+        </div>
+        <Form
+          layout='vertical'
+          scrollToFirstError={true}
+          requiredSymbol={false}
+          initialValues={{
+            caseLevel: 1,
+          }} //默认值
+        >
+          <Col span={8}>
+            <FormItem
+              label={<div style={{ display: 'flex' }}>
+                达成的协议类型
+              </div>
+              }
+              field='caseLevel'
+
+            >
+              <Select options={agreement} onChange={(v) => { setValue(v); console.log(typeof v, 'vvv') }}>
+              </Select>
+            </FormItem>
+          </Col>
+          {value === 1 &&
+            <>
+              <Col span={24}>
+                <FormItem
+                  label={
+                    <>
+                      <div style={{ display: 'flex' }}>
+                        协议要点
+                        <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)}>识别材料</div>
+                      </div>
+                      <div className='caseResult-tips'>
+                        <img src={tip} alt='' style={{ width: '16px', marginRight: '8px' }} />
+                        <span>协议要点应尽量简洁,当事人大厅来访或小程序线上反映问题时,可在小程序中查看到填写的协议要点内容</span>
+                      </div>
+                    </>
+                  }
+                  field='caseDes'
+                  rules={[{ message: '请填写事项概况', required: true }]}
+                >
+                  <div className='caseResult-textarea'>公共模板1:调解成功口头协议</div>
+                  <Input.TextArea
+                    rows={5}
+                    maxLength={{ length: 200, errorOnly: true }}
+                    showWordLimit
+                    wrapperStyle={{ width: '100%' }}
+                    value='根据纠纷化解人员的协调,当事人双方同意如下调解协议:
+                            [简要说明协议第一条]
+                            [简要说明协议第二条]
+                            [……]
+                            本口头调解协议由纠纷化解人员记录,并已告知双方当事人。双方当事人确认无误。'
+                  />
+                </FormItem>
+              </Col>
+              <Col span={24}>
+                <FormItem
+                  label={
+                    <>
+                      <div style={{ display: 'flex' }}>
+                        结案意见
+                        <div className="must" style={{ marginLeft: '4px' }}>必填</div>
+                      </div>
+                    </>
+                  }
+                  field='caseDes'
+                  rules={[{ message: '请填写事项概况', required: true }]}
+                >
+                  <div className='tabs1' >
+                    {tabs1.map((tab) => (
+                      <div
+                        key={tab.index}
+                        style={{
+                          color: selectedTab1 === tab.index ? 'rgba(26,111,184,1)' : 'rgba(0,0,0,0.45)',
+                          border: `1px solid ${selectedTab1 === tab.index ? 'rgba(26,111,184,1)' : 'rgba(229,230,235,1)'}`,
+                          borderRadius: '2px',
+                          cursor: 'pointer',
+                          padding: '0px 8px',
+                        }}
+                        onClick={() => handleTabChange1(tab.index)}
+                      >
+                        {tab.label}
+                      </div>
+                    ))}
+                  </div>
+
+                  <Input.TextArea
+                    rows={5}
+                    wrapperStyle={{ width: '100%' }}
+                    value='鉴于以上协议内容已经双方确认,并认为该协议内容公平合理,能够妥善解决双方的纠纷。建议双方当事人按照协议内容执行,以实现纠纷的最终解决。'
+                  />
+                </FormItem>
+              </Col>
+
+            </>
+
+          }
+          {value === 2 &&
+            <>
+              <Col span={24}>
+                <FormItem
+                  label={
+                    <>
+                      <div style={{ display: 'flex' }}>
+                        协议附件
+                        <div className="must" style={{ marginLeft: '4px' }}>必填</div>
+                      </div>
+                      <div className='caseResult-tips'>
+                        <img src={tip} alt='' style={{ width: '16px', marginRight: '8px' }} />
+                        <span>如通过人民调解工作成功化解纠纷事项,建议上传签字盖章后的人民调解协议书</span>
+                      </div>
+                    </>
+                  }
+                  field='caseDes'
+                  rules={[{ message: '请填写事项概况', required: true }]}
+                >
+                  <Upload
+                    drag
+                    multiple
+                    accept='image/*'
+                    action='/'
+                    height={158}
+                    onDrop={(e) => {
+                    }}
+                    onChange={(v) => {
+                      setFileTip((prevLength) => {
+                        if (v.length > 0) {
+                          console.log(v, 'vvvvvvv');
+                          return v.length;
+                        }
+                        return v.length;
+                      });
+                    }}
+                    tip='支持png、 jpg、excel、word、pdf等格式的文件上传,每次上传大小不超过10M'
+                  />
+
+
+                </FormItem>
+              </Col>
+              <Col span={24}>
+                <FormItem
+                  label={
+                    <>
+                      <div style={{ display: 'flex' }}>
+                        协议要点
+                        <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)}>识别材料</div>
+                      </div>
+                      <div className='caseResult-tips'>
+                        <img src={tip} alt='' style={{ width: '16px', marginRight: '8px' }} />
+                        <span>协议要点应尽量简洁,当事人大厅来访或小程序线上反映问题时,可在小程序中查看到填写的协议要点内容</span>
+                      </div>
+                    </>
+                  }
+                  field='caseDes'
+                  rules={[{ message: '请填写事项概况', required: true }]}
+                >
+                  <div className='caseResult-textarea'>公共模板1:调解成功口头协议</div>
+                  <Input.TextArea
+                    rows={5}
+                    maxLength={{ length: 200, errorOnly: true }}
+                    showWordLimit
+                    wrapperStyle={{ width: '100%' }}
+                    value='根据纠纷化解人员的协调,当事人双方同意如下调解协议:
+                            [简要说明协议第一条]
+                            [简要说明协议第二条]
+                            [……]
+                            本口头调解协议由纠纷化解人员记录,并已告知双方当事人。双方当事人确认无误。'
+                  />
+                </FormItem>
+              </Col>
+              <Col span={24}>
+                <FormItem
+                  label={
+                    <>
+                      <div style={{ display: 'flex' }}>
+                        结案意见
+                        <div className="must" style={{ marginLeft: '4px' }}>必填</div>
+                      </div>
+                    </>
+                  }
+                  field='caseDes'
+                  rules={[{ message: '请填写事项概况', required: true }]}
+                >
+                  <div className='tabs1' >
+                    {tabs1.map((tab) => (
+                      <div
+                        key={tab.index}
+                        style={{
+                          color: selectedTab1 === tab.index ? 'rgba(26,111,184,1)' : 'rgba(0,0,0,0.45)',
+                          border: `1px solid ${selectedTab1 === tab.index ? 'rgba(26,111,184,1)' : 'rgba(229,230,235,1)'}`,
+                          borderRadius: '2px',
+                          cursor: 'pointer',
+                          padding: '0px 8px',
+                        }}
+                        onClick={() => handleTabChange1(tab.index)}
+                      >
+                        {tab.label}
+                      </div>
+                    ))}
+                  </div>
+
+                  <Input.TextArea
+                    rows={5}
+                    wrapperStyle={{ width: '100%' }}
+                    value='鉴于以上协议内容已经双方确认,并认为该协议内容公平合理,能够妥善解决双方的纠纷。建议双方当事人按照协议内容执行,以实现纠纷的最终解决。'
+                  />
+                </FormItem>
+              </Col>
+
+            </>
+
+          }
+          <Space style={{ marginBottom: '16px' }}>
+            <Button type='primary'>提交</Button>
+            <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }}>保存</Button>
+          </Space>
+        </Form>
+      </Modal>
+      <DocumentScanner
+        visible={scanFile}
+        onConfirm={handleConfirm}
+        onCancel={handleCancel}
+      />
+    </>
+  )
+}
+
+export default CaseResult;
+
diff --git a/gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx b/gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx
index 59e43c9..6a97640 100644
--- a/gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx
+++ b/gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx
@@ -12,6 +12,7 @@
 import {
   IconLink,
 } from '@arco-design/web-react/icon';
+import CaseResult from './CaseResult'
 
 
 const InputSearch = Input.Search;
@@ -75,6 +76,11 @@
   },
 ];
 
+function getByIdRoleApi(id) {
+  return $$.ax.request({ url: 'ctUser/getByIdRole?id=' + id, type: 'get', service: 'cust' });
+}
+
+
 
 
 const Handle = () => {
@@ -82,6 +88,8 @@
   const [wantUser, setWantUser] = useState({});
   const [formView, setFormView] = useState(false);
   const [personView, setPersonView] = useState(false);
+  const [data, setData] = useState({})
+  const [caseResult, SetCaseResult] = useState(false);
 
   const tabs = [
     { index: '1', label: '承办部门' },
@@ -89,7 +97,6 @@
   ];
 
   const [isModalVisible, setIsModalVisible] = useState(false);
-  const formRef = useRef(null);
 
 
 
@@ -195,6 +202,22 @@
     setScannerVisible(true);
   };
 
+  const getByIdRole = async () => {
+    const res = await getByIdRoleApi('2105180249501982')
+    if (res.type) {
+      let data = res.data
+      setData(data)
+    }
+
+  }
+
+
+
+  useEffect(() => {
+    getByIdRole()
+  }, [])
+
+
 
 
 
@@ -218,7 +241,7 @@
               <div><div className="title-text">经办人:</div></div>
               <div style={{ display: 'flex' }}>
                 <div>王一顺</div>
-                <img src={register} alt='' style={{ width: '14px', height: '14px', marginLeft: '8px', marginTop: '4px' }} />
+                <img onClick={() => setPersonView(!personView)} src={register} alt='' style={{ width: '14px', height: '14px', marginLeft: '8px', marginTop: '4px' }} />
               </div>
             </Col>
             <Col span={8} style={{ display: 'flex' }}>
@@ -249,7 +272,7 @@
                 <FormItem label={<div style={{ display: 'flex' }}>
                   <span style={{ color: '#86909C' }}>经办人</span>
                   <Tooltip>
-                    <img onClick={() => setPersonView(!personView)} src={question1} alt="" style={{ width: '13px', height: '13px', margin: '4px 4px 0px 4px' }} />
+                    <img src={question1} alt="" style={{ width: '13px', height: '13px', margin: '4px 4px 0px 4px' }} />
                   </Tooltip>
                 </div>
                 }
@@ -374,7 +397,7 @@
             </Form>
             <Space style={{ marginTop: '38px', bottom: '4px' }}>
               <Button type="primary" style={{ backgroundColor: '#1A6FB8' }} onClick={() => setFormView(!formView)}>添加办理记录</Button>
-              <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} >结案申请</Button>
+              <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} onClick={() => SetCaseResult(!caseResult)}>结案申请</Button>
               <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }}>联合处置申请</Button>
               <Button type='secondary'>返回上级页面</Button>
             </Space>
@@ -447,8 +470,28 @@
         />
 
         <Modal visible={personView} onCancel={() => setPersonView(false)} title='工作人员信息' centered footer={null}>
-          
+          <table border="1" align="center" cellpadding="5" className="table">
+            <tr>
+              <th bgcolor="#F7F8FA" className="table-title" width="120">姓名</th>
+              <td width='380'><div style={{ display: 'flex' }}><div>{data.trueName}</div></div></td>
+              <th bgcolor="#F7F8FA" className="table-title" width="120">登录账号</th>
+              <td width='380'>{data.acc}</td>
+            </tr>
+            <tr>
+              <th bgcolor="#F7F8FA" className="table-title">手机号码</th>
+              <td>{data.mobile}</td>
+              <th bgcolor="#F7F8FA" className="table-title">工作电话</th>
+              <td>020-83002020</td>
+            </tr>
+            <tr>
+              <th bgcolor="#F7F8FA" className="table-title">所属部门</th>
+              <td>{data.deptName}</td>
+              <th bgcolor="#F7F8FA" className="table-title">职务</th>
+              <td>主任</td>
+            </tr>
+          </table>
         </Modal>
+        <CaseResult visible={caseResult} handleOnCancel={() => SetCaseResult(false)} />
 
       </div>
     </>
diff --git a/gz-customerSystem/src/views/register/handleFeedback/index.jsx b/gz-customerSystem/src/views/register/handleFeedback/index.jsx
index f07cc7f..4958df4 100644
--- a/gz-customerSystem/src/views/register/handleFeedback/index.jsx
+++ b/gz-customerSystem/src/views/register/handleFeedback/index.jsx
@@ -2,7 +2,7 @@
  * @Author: dminyi 1301963064@qq.com
  * @Date: 2024-08-09 09:59:43
  * @LastEditors: dminyi 1301963064@qq.com
- * @LastEditTime: 2024-08-28 14:38:20
+ * @LastEditTime: 2024-09-02 14:31:31
  * @FilePath: \gzDyh\gz-customerSystem\src\views\basicInformation\organization\index.jsx
  * @Description: 来访登记
  */
@@ -14,7 +14,7 @@
 import '../index.less';
 import { Typography, Steps, Tabs, Message } from '@arco-design/web-react';
 import { question, register, Matter, transfer } from '@/assets/images'
-import MatterDetali from '../matterDetail';
+import MatterDetail from '../matterDetail';
 import Handle from './component/handle';
 
 const Step = Steps.Step;
@@ -78,7 +78,7 @@
 								</div>
 							}
 							{tabsActive === '1' &&
-								<MatterDetali />
+								<MatterDetail />
 							}
 							{
 								tabsActive === '2' && <Typography.Paragraph style={style}>
diff --git a/gz-customerSystem/src/views/register/index.less b/gz-customerSystem/src/views/register/index.less
index 65c7ca0..0bdef29 100644
--- a/gz-customerSystem/src/views/register/index.less
+++ b/gz-customerSystem/src/views/register/index.less
@@ -92,6 +92,7 @@
 
 .dataSync {
 	position: relative;
+
 	&-page {
 		background-color: #fff;
 		margin: 8px 8px 0px 16px;
@@ -329,7 +330,7 @@
 						margin-left: 8px;
 					}
 
-					&-hostOrg{
+					&-hostOrg {
 						border: 1px solid #89C2E3;
 						padding: 0px 8px;
 						color: #1A6FB8;
@@ -358,7 +359,7 @@
 	}
 }
 
-.Form{
+.Form {
 	padding: 12px 16px 16px 16px;
 	border: 1px dashed #1a6fb8;
 	border-radius: 10px;
@@ -391,10 +392,46 @@
 	.arco-tabs-header-nav {
 		margin-left: 16px
 	}
+
 	.arco-tabs-header-nav-line.arco-tabs-header-nav-horizontal>.arco-tabs-header-scroll .arco-tabs-header-title:first-of-type {
 		margin-left: 0;
 	}
+
 	.arco-tabs-header-nav-line .arco-tabs-header-title {
 		margin: 0 16px 0 0;
 	}
+}
+
+.caseResult {
+	&-title {
+		padding-top: 4px;
+		margin-bottom: 8px;
+	}
+
+	&-tabs {
+		display: flex;
+		margin-bottom: 18px;
+	}
+
+	&-tips {
+		padding: 9px 16px;
+		background-color: #E8F3FF;
+		border-radius: 2px;
+		margin-top: 8px;
+	}
+
+	&-textarea {
+		border: 1px solid #1a6fb8;
+		border-radius: 2px;
+		padding: 0px 8px;
+		color: #1A6FB8;
+		width: fit-content;
+		margin: 4px 0px 8px 0px;
+	}
+}
+
+.tabs1 {
+	display: flex;
+	gap: 8px;
+	margin-bottom: 8px;
 }
\ No newline at end of file

--
Gitblit v1.8.0