forked from gzzfw/frontEnd/gzDyh

zhangyongtian
2024-09-05 a06ed3bdc1e152e2e5369f230b6a00bb1b602baf
Merge branch 'master' of http://120.79.193.119:9090/r/gzzfw/frontEnd/gzDyh
4 files added
5 files modified
396 ■■■■■ changed files
gz-customerSystem/src/assets/images/edit.png patch | view | raw | blame | history
gz-customerSystem/src/assets/images/icon/index.js 6 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/assets/images/icon/knock.svg 13 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/assets/images/icon/person.svg 10 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/assets/images/index.js 6 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/assets/images/knock.png patch | view | raw | blame | history
gz-customerSystem/src/components/WantUserTag/Handling.jsx 5 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx 323 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/index.less 33 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/assets/images/edit.png
gz-customerSystem/src/assets/images/icon/index.js
@@ -2,7 +2,7 @@
 * @Company: hugeInfo
 * @Author: ldh
 * @Date: 2022-03-21 11:34:36
 * @LastEditTime: 2024-08-22 19:32:26
 * @LastEditTime: 2024-09-05 14:36:16
 * @LastEditors: dminyi 1301963064@qq.com
 * @Version: 1.0.0
 * @Description: icon
@@ -144,6 +144,8 @@
//大厅来访
import scan from './scan.svg'
import result from './result.svg'
import person from './person.svg'
import knock from './knock.svg'
import escalation from './escalation.svg'
export {
@@ -271,5 +273,7 @@
  qrCodeImg,
  scan,
  result,
  person,
  knock,
  escalation
};
gz-customerSystem/src/assets/images/icon/knock.svg
New file
@@ -0,0 +1,13 @@
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_419_28908)">
<path d="M6.99956 12.9308C9.95277 12.9308 12.3468 10.5367 12.3468 7.58355C12.3468 4.63037 9.95277 2.23633 6.99956 2.23633C4.04637 2.23633 1.65234 4.63037 1.65234 7.58355C1.65234 10.5367 4.04637 12.9308 6.99956 12.9308Z" stroke="#EF6C24" stroke-width="0.875" stroke-linejoin="round"/>
<path d="M6.93004 4.47803L6.92969 7.68893L9.19661 9.95585" stroke="#EF6C24" stroke-width="0.875" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M1.16699 2.62533L3.20866 1.16699" stroke="#EF6C24" stroke-width="0.875" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12.8337 2.62533L10.792 1.16699" stroke="#EF6C24" stroke-width="0.875" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<defs>
<clipPath id="clip0_419_28908">
<rect width="14" height="14" fill="white"/>
</clipPath>
</defs>
</svg>
gz-customerSystem/src/assets/images/icon/person.svg
New file
@@ -0,0 +1,10 @@
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_507_4385)">
<path d="M6.98527 14H4.44571C3.9378 14 3.42989 14 2.79499 13.873C2.28708 13.873 1.77917 13.746 1.39823 13.619C1.14427 13.4921 0.890321 13.3651 0.763337 13.1111C0.636353 12.9841 0.636353 12.8572 0.636353 12.6032C0.636353 11.7144 0.763337 10.8255 1.27125 10.0636C1.90614 9.04782 2.66801 8.41293 3.81082 7.90501C4.44571 7.65106 4.95362 7.65106 5.58851 7.65106H8.38203C9.65181 7.65106 10.7946 8.03199 11.6835 8.79386C12.5723 9.55573 13.0802 10.4446 13.2072 11.4604C13.3342 11.9683 13.3342 12.3492 13.3342 12.7302C13.3342 13.1111 13.0802 13.3651 12.8263 13.4921C12.5723 13.619 12.1914 13.746 11.8105 13.873C11.0486 14 10.1597 14 9.39784 14H6.98527ZM10.6676 3.71473C10.6676 5.23847 9.65182 6.63524 8.0011 7.14315C5.96945 7.77804 3.81082 6.76221 3.17592 4.85753C2.66801 3.33381 3.17592 1.81007 4.44571 0.794234C4.95362 0.413296 5.71549 0.159342 6.47736 0.0323578C8.38204 -0.221597 10.1597 1.04819 10.6676 2.82588V3.71473Z" fill="#1A6FB8"/>
</g>
<defs>
<clipPath id="clip0_507_4385">
<rect width="14" height="14" fill="white"/>
</clipPath>
</defs>
</svg>
gz-customerSystem/src/assets/images/index.js
@@ -56,6 +56,8 @@
import tip from "./tip.png";
import apply from "./apply.png";
import examine from "./examine.png";
import knock from "./knock.png";
import edit from "./edit.png";
export {
  ledger_1,
@@ -106,5 +108,7 @@
  down,
  tip,
  apply,
  examine
  examine,
  knock,
  edit
};
gz-customerSystem/src/assets/images/knock.png
gz-customerSystem/src/components/WantUserTag/Handling.jsx
@@ -2,20 +2,21 @@
 * @Author: dminyi 1301963064@qq.com
 * @Date: 2024-08-29 20:43:25
 * @LastEditors: dminyi 1301963064@qq.com
 * @LastEditTime: 2024-08-30 10:27:25
 * @LastEditTime: 2024-09-05 09:34:19
 * @FilePath: \gzDyh\gz-customerSystem\src\components\WantUserTag\Handling.jsx
 * @Description: 经办人
 */
import React from 'react';
import PropTypes from 'prop-types';
import { Typography } from 'antd';
import { CloseOutlined } from '@ant-design/icons';
import {person} from '@/assets/images/icon'
import './index.less';
const WantUserTag = ({ name, value, onClose }) => {
  return (
    <div className="wantUserTag">
      <div className="wantUserTag-wantHandleUser">
        <div className="wantUserTag-wantHandleUser-left"><img src={person} alt=''/></div>
        <div className="wantUserTag-wantHandleUser-right">{name}</div>
        <div onClick={() => onClose(value)} className="wantUserTag-wantHandleUser-icon">
          <CloseOutlined />
gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx
@@ -1,7 +1,8 @@
import React, { useState, useRef, useEffect } from 'react';
import { Col, Space, Row, Tooltip } from 'antd';
import { register, fold, down, empty, link } from '@/assets/images';
import { Form, Input, Tabs, Typography, Empty, Upload, Button, Modal } from '@arco-design/web-react';
import { register, fold, down, empty, link, edit } from '@/assets/images';
import { knock } from '@/assets/images/icon'
import { Form, Input, Tabs, Typography, Empty, Radio, Button, Modal } from '@arco-design/web-react';
import { question1, } from '@/assets/images';
import ProgressStep from '@/components/ProgressStep/VisitStep';
import SelectObjModal from '@/components/SelectObjModal/selectPerson';
@@ -16,12 +17,13 @@
const InputSearch = Input.Search;
const FormItem = Form.Item;
const TabPane = Tabs.TabPane;
const RadioGroup = Radio.Group;
const appUrl = $$.appUrl;
const style = {
  textAlign: 'center',
  marginTop: 20,
  // textAlign: 'center',
  // marginTop: 20,
};
const fakeData = [
@@ -92,22 +94,45 @@
  return $$.ax.request({ url: `caseUtils/getNewTimeId`, type: 'get', service: 'utils' });
}
function saveFeedbackApi(data) {
  return $$.ax.request({ url: `caseFeedback/saveFeedback`, type: 'post', service: 'mediate', data });
}
function listFeedbackApi(id) {
  return $$.ax.request({ url: `caseFeedback/listFeedback?id=` + id, type: 'get', service: 'mediate' });
}
const Handle = () => {
  const formRef = useRef();
  const [selectedTab, setSelectedTab] = useState('1'); // 默认选中第一个 tab
  const [selectedTab1, setSelectedTab1] = useState('1'); // 默认选中第一个 tab
  const [wantUser, setWantUser] = useState({});
  const [formView, setFormView] = useState(false);
  const [personView, setPersonView] = useState(false);
  const [supervising, setSupervising] = useState(false)
  const [data, setData] = useState({})
  const [caseResult, SetCaseResult] = useState(false);
  const [response, setResponse] = useState('')
  const [list, setList] = useState([])
  const tabs = [
    { index: '1', label: '承办部门' },
    { index: '2', label: '配合部门' },
  ];
  const tabs1 = [
    { index: '1', label: '公共模板1:化解成功结案意见范本' },
    { index: '2', label: '个人模板1:化解成功结案意见范本(完整版)' }
  ]
  const tabs2 = [
    { index: '1', label: '公共模板1:回复督办内容收到通用范本' },
  ]
  const [isModalVisible, setIsModalVisible] = useState(false);
  const [id, setId] = useState('')
@@ -190,7 +215,7 @@
  const toggleView = (id) => {
    setRecords(records.map(record => {
    setList(list.map(record => {
      if (record.id === id) {
        return {
          ...record,
@@ -200,6 +225,16 @@
      return record;
    }));
  };
  const handleEdit = (id) => {
    console.log(id, 'handleEdit')
    let handleContent = list.find(item => item.id = id).handleContent
    setList(list.filter(record => record.id !== id));
    setFormView(!formView);
    formRef.current.setFieldsValue({
      handleContent: handleContent
    })
  }
  const [scannerVisible, setScannerVisible] = useState(false);
@@ -253,6 +288,23 @@
    }
  }
  const saveFeedback = async (submitData) => {
    console.log(submitData, 'submitData1111')
    const res = await saveFeedbackApi(submitData)
    if (res.type) {
      $$.infoSuccess({ content: '保存成功' });
    }
  }
  const listFeedback = async (id) => {
    const res = await listFeedbackApi(id)
    if (res.type) {
      let data = res.data.caseFeedbackList
      setList(data)
    }
    console.log(list, 'listFeedbackApilistFeedbackApi')
  }
  const addMark = () => {
    setFormView(!formView);
    getNewTimeId()
@@ -260,16 +312,35 @@
  const handleFinish = () => {
    console.log(formRef.current.getFields(), formRef, 'formRef.current.getFields()', 'formRef')
    let submitData = formRef.current.getFields()
    saveFeedback(submitData)
    setFormView(!formView);
  }
  const Supervising = () => {
    setSupervising(!supervising)
  }
    
  const handleTabChange1 = (newTabIndex) => {
    setSelectedTab1(newTabIndex);
  };
  const content = selectedTab1 === '1'
    ? `鉴于本事项的重要性及紧迫性,现要求你尽快启动调解程序,并确保案件能够得到及时有效的处理。请您务必于本周内完成以下事项:XX、XX、XX。请确保在事项办理的过程中,遵循公平、公正的原则,并积极促进双方达成共识`
    : '1';
  const handleSupervising = () => {
    setSupervising(!supervising)
  }
  const handleResponse = () => {
    setResponse(!response)
  }
  useEffect(() => {
    getByIdRole()
    listFeedback('24083010062110001');
    // getByIdRole()
  }, [])
@@ -330,21 +401,22 @@
                  {wantUser.wantUserId ?
                    <WantUserTag name={wantUser.wantUserName} onClose={() => setWantUser({ wantUserId: null, wantUserName: null })} />
                    :
                    <InputSearch
                      searchButton='选择'
                      placeholder='请选择'
                      style={{ width: 350 }}
                      onClick={() => setIsModalVisible(true)}
                      onSearch={() => setIsModalVisible(true)}
                    />
                    <Button onClick={() => setIsModalVisible(true)} style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} type='outline'>选择</Button>
                    // <InputSearch
                    //   searchButton='选择'
                    //   placeholder='请选择'
                    //   style={{ width: 350 }}
                    //   onClick={() => setIsModalVisible(true)}
                    //   onSearch={() => setIsModalVisible(true)}
                    // />
                  }
                </FormItem>
              </Col>
              <Col span={24}>
                <div style={{ color: 'rgb(134, 144, 156)' }}>办理记录</div>
                {records.length > 0 ?
                {list?.length > 0 ?
                  <div>
                    {records.map(record => (
                    {list?.map(record => (
                      <div key={record.id} className='container-bottom-left-record'>
                        <div className='container-bottom-left-record-top'>
                          {
@@ -354,17 +426,24 @@
                              <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>{`${record.createTime} ${record.handleUnitName}`}</div>
                          <div className={`container-bottom-left-record-top-${record.handleType === '2' ? 'remark' : 'hostOrg'}`}>{record.handleType === '2' ? '配合部门' : '承办部门'}</div>
                          <div><img src={edit} alt='' className='container-bottom-left-record-top-edit' onClick={() => handleEdit(record.id)} /></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>
                              <th bgcolor="#F7F8FA" className="table-title" width="120">操作人</th>
                              <td>{record.handleUnitName}</td>
                              </tr>
                            ))}
                            <tr>
                              <th bgcolor="#F7F8FA" className="table-title" width="120">办理意见</th>
                              <td>{record.handleContent}</td>
                            </tr>
                            <tr>
                              <th bgcolor="#F7F8FA" className="table-title" width="120">办理附件</th>
                              <td>{record.handleUnitName}</td>
                            </tr>
                          </table>
                        </div>
                      </div>
@@ -409,7 +488,7 @@
                                <div style={{ marginLeft: '8px', color: '#1A6FB8', fontSize: '14px', cursor: 'pointer' }} onClick={openScanner}>识别材料</div>
                              </div>
                              }
                              field='caseDes'
                              field='handleContent'
                              rules={[{ message: '请填写事项概况', required: true }]}
                            >
                              <Input.TextArea
@@ -460,7 +539,7 @@
              <Button type="primary" style={{ backgroundColor: '#1A6FB8' }} onClick={() => addMark()}>添加办理记录</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: '#EF6C24', border: '1px solid #EF6C24' }} onClick={() => Supervising(!caseResult)}>督办</Button>
              <Button type='outline' style={{ color: '#EF6C24', border: '1px solid #EF6C24' }} onClick={() => Supervising()}>督办</Button>
              <Button type='secondary'>返回上级页面</Button>
            </Space>
          </div>
@@ -507,7 +586,41 @@
                  </span>
                }
              >
                <Typography.Paragraph style={style}>Content of Tab Panel 2</Typography.Paragraph>
                <Typography.Paragraph>
                  <RadioGroup
                    type='button'
                    name='lang'
                    defaultValue='1'
                    style={{ display: 'flex', margin: '0 16px 0px 16px', }}
                  >
                    <Radio value='1' style={{ flex: 1, textAlign: 'center' }}>未回复</Radio>
                    <Radio value='2' style={{ flex: 1, textAlign: 'center' }}>已回复</Radio>
                  </RadioGroup>
                  <div className='Supervising'>
                  <div style={{ display: 'flex' }}>
                      <img src={knock} alt='' style={{ marginRight: '4px' }} />
                      <div style={{ color: '#EF6C24' }} >回复期限剩3小时</div>
                    </div>
                    <div className='Supervising-item'>
                      <div className='Supervising-item-title'>督办时间:</div>
                      <div>2024-7-12 10:50</div>
                    </div>
                    <div className='Supervising-item'>
                      <div className='Supervising-item-title'>督办人:</div>
                      <div>张三丰</div>
                    </div>
                    <div className='Supervising-item'>
                      <div className='Supervising-item-title'>督办内容:</div>
                      <div>该纠纷事件目前群众较为关注,现要求相关部门即刻启动纠纷化解工作。请负责同事务必于本周内制定出具体解决方案,并确保与当事人进行有效沟通。请各位积极响应,高效协作,争取在最短时间内妥善处理完毕。</div>
                    </div>
                    <div className='Supervising-item'>
                      <div className='Supervising-item-title'>督办附件:</div>
                      <img src={link} alt='' style={{ width: '16px' }} />
                      <div>2</div>
                    </div>
                    <Button className='Supervising-btn' size='small' type='outline' onClick={() => handleResponse()}>回复</Button>
                  </div>
                </Typography.Paragraph>
              </TabPane>
            </Tabs>
@@ -532,7 +645,6 @@
          onConfirm={handleConfirm}
          onCancel={handleCancel}
        />
        <Modal visible={personView} onCancel={() => setPersonView(false)} title='工作人员信息' centered footer={null}>
          <table border="1" align="center" cellpadding="5" className="table">
            <tr>
@@ -555,6 +667,163 @@
            </tr>
          </table>
        </Modal>
        <Modal visible={supervising} onCancel={() => setSupervising(false)} title='督办' centered footer={null}>
          <div style={{ marginTop: '18px' }}>督办意见</div>
          <Form
            layout='vertical'
            requiredSymbol={false}
            scrollToFirstError={true}
            initialValues={{
              suggestion: ''
            }}//默认值
          >
            <Row>
              <Col span={24}>
                <FormItem
                  field='suggestion'
                >
                  <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: '700px' }}
                    value={content}
                  />
                </FormItem>
              </Col>
              <Col span={24}>
                <FormItem
                  label='附件材料'
                  field='caseDes'
                  rules={[{ message: '请填写事项概况', required: true }]}
                >
                  <ArcoUpload
                    params={{
                      action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId='24083010062110001'&&ownerId=${id}&ownerType=22_00018-102`,
                    }}
                    field='file1'
                    // handleChangeFile={handleChangeFile}
                    label=''
                    // editData={props.editData}
                    handleDelFile={handleDelFile}
                  />
                </FormItem>
              </Col>
              <Button type='primary' style={{ marginTop: '-16px' }} onClick={() => handleSupervising()}>提交</Button>
            </Row>
          </Form>
        </Modal>
        <Modal visible={response} onCancel={() => setResponse(false)} title='回复督办' centered footer={null} style={{overflowY:'auto'}}>
          <div style={{  }}>
            <Col span={24} style={{ marginBottom: '8px' }}>
              <Space size='small'>
                <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h5>督办意见</h5>
              </Space>
            </Col>
            <Row gutter={[16, 16]}>
              <Col span={24} >
                <div className="title-text">督办时间</div>
                <div>2024-7-12 10:50</div>
              </Col>
              <Col span={24}>
                <div className="title-text">督办人</div>
                <div>张三丰</div>
              </Col>
              <Col span={24}>
                <div className="title-text">督办内容</div>
                <div>该纠纷事件目前群众较为关注,现要求相关部门即刻启动纠纷化解工作。请负责同事务必于本周内制定出具体解决方案,并确保与当事人进行有效沟通。请各位积极响应,高效协作,争取在最短时间内妥善处理完毕。</div>
              </Col>
              <Col span={24}>
                <div className="title-text">督办附件</div>
                <img src={link} alt="" className="title-file" />广东好又多贸易有限公司营业执照副本.pdf
              </Col>
            </Row>
            <Col span={24} style={{ marginBottom: '8px' }}>
              <Space size='small'>
                <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h5>督办回复</h5>
              </Space>
            </Col>
            <Form
              layout='vertical'
              requiredSymbol={false}
              scrollToFirstError={true}
              initialValues={{
                suggestion: ''
              }}//默认值
            >
              <Row>
                <Col span={24}>
                  <FormItem
                    field='suggestion'
                  >
                    <div>
                    </div>
                    <div className='tabs1'>
                      {tabs2.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>
                    <div>更多模板</div>
                    <Input.TextArea
                      rows={5}
                      wrapperStyle={{ width: '700px' }}
                      value={content}
                    />
                  </FormItem>
                </Col>
                <Col span={24}>
                  <FormItem
                    label='附件材料'
                    field='caseDes'
                    rules={[{ message: '请填写事项概况', required: true }]}
                  >
                    <ArcoUpload
                      params={{
                        action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId='24083010062110001'&&ownerId=${id}&ownerType=22_00018-102`,
                      }}
                      field='file1'
                      // handleChangeFile={handleChangeFile}
                      label=''
                      // editData={props.editData}
                      handleDelFile={handleDelFile}
                    />
                  </FormItem>
                </Col>
                <Button type='primary' style={{ marginTop: '-16px',marginBottom:'16px' }} onClick={() => handleSupervising()}>提交</Button>
              </Row>
            </Form>
          </div>
        </Modal>
        <CaseResult visible={caseResult} handleOnCancel={() => SetCaseResult(false)} />
      </div>
gz-customerSystem/src/views/register/index.less
@@ -344,6 +344,13 @@
                        margin-right: 12px;
                    }
                    &-edit {
                        position: absolute;
                        right: 25px;
                        top: 45px;
                        width: 18px;
                    }
                    &-remark {
                        border: 1px solid #FFD591;
                        padding: 0px 8px;
@@ -531,3 +538,29 @@
        line-height: 22px;
    }
}
.Supervising {
    background: #ffffff;
    border: 1px solid #e5e6eb;
    border-radius: 8px;
    margin: 12px 16px 0px 16px;
    padding: 12px 16px;
    &-item {
        display: flex;
        margin-bottom: 4px;
        &-title {
            color: #86909C;
        }
    }
    &-btn {
        margin-top: 12px;
        color: rgb(26, 111, 184);
        border: 1px solid rgb(26, 111, 184);
        background-color: rgb(255, 255, 255);
    }
}