forked from gzzfw/frontEnd/gzDyh

dminyi
2024-09-08 a638a7918a2d05e343253dff9158ce0379a47bd4
ai接口对接
8 files modified
617 ■■■■■ changed files
gz-customerSystem/src/api/apiHandler.js 180 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/router/router.js 4 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/handleFeedback/index.jsx 136 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/index.less 3 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/matterDetail/fileMessage.jsx 69 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/matterDetail/index.jsx 115 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/visit/component/levelDetail.jsx 102 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/visit/index.jsx 8 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/api/apiHandler.js
@@ -2,94 +2,132 @@
 * @Company: hugeInfo
 * @Author: ldh
 * @Date: 2022-02-16 11:28:12
 * @LastEditTime: 2024-09-07 16:45:38
 * @LastEditTime: 2024-09-08 10:31:44
 * @LastEditors: dminyi 1301963064@qq.com
 * @Version: 1.0.0
 * @Description: axios处理方法
 */
import axios from 'axios';
import { catchApiError, appUrl, getSessionStorage, info } from '../utils/utility';
import axios from "axios";
import {
  catchApiError,
  appUrl,
  getSessionStorage,
  info,
} from "../utils/utility";
// 网络异常
function networkException(err) {
    if (err.code >= 400) {
        catchApiError({ content: '抱歉! 网络异常请刷新' });
    } else {
        catchApiError({ content: '抱歉! 网络错误' });
    }
  if (err.code >= 400) {
    catchApiError({ content: "抱歉! 网络异常请刷新" });
  } else {
    catchApiError({ content: "抱歉! 网络错误" });
  }
}
// api返回结果处理
function resHandle(resData) {
    const { code, data, msg } = resData;
    if (code === 0 || code === '0') {
        // let res_data = data ? aes_decrypt(data) : true;
        return { type: true, data };
    } else if (code === 401 || code === '401') {
        catchApiError({ content: '抱歉! 登录状态已失效请重新登录', loginStatus: 'lose' });
        return { type: false };
    } else if (code === 105 || code === '105') {
        return { type: false, code, data, msg };
    } else if (code === 106 || code === '106') {
        return { type: false, code, data, msg };
    } else if (code === -1 || code == '-1') {
        catchApiError({ content: msg });
        return { type: false };
    } else {
        info({ type: 'warning', content: msg });
        return { type: false };
    }
  const { code, data, msg } = resData;
  if (code === 0 || code === "0") {
    // let res_data = data ? aes_decrypt(data) : true;
    return { type: true, data };
  } else if (code === 401 || code === "401") {
    catchApiError({
      content: "抱歉! 登录状态已失效请重新登录",
      loginStatus: "lose",
    });
    return { type: false };
  } else if (code === 105 || code === "105") {
    return { type: false, code, data, msg };
  } else if (code === 106 || code === "106") {
    return { type: false, code, data, msg };
  } else if (code === -1 || code == "-1") {
    catchApiError({ content: msg });
    return { type: false };
  } else {
    info({ type: "warning", content: msg });
    return { type: false };
  }
}
export const ax = axios;
export function request(value = {}) {
    let token = getSessionStorage('customerSystemToken');
  let token = getSessionStorage("customerSystemToken");
    // 无token时
    if (!token && value.url !== 'ctAccount/login') {
        catchApiError({ content: '抱歉!登录状态已失效请重新登录', loginStatus: 'lose' });
        return { type: false };
    }
  // 无token时
  if (!token && value.url !== "ctAccount/login") {
    catchApiError({
      content: "抱歉!登录状态已失效请重新登录",
      loginStatus: "lose",
    });
    return { type: false };
  }
    // let data = aes_encrypt(JSON.stringify(value.data));
    let data = value.data;
    const url =
        value.service === 'sys'
            ? `${appUrl.fileUrl}/${appUrl[value.service] || ''}/api/web/${value.url}`
            : `${appUrl.baseUrl}/${appUrl[value.service] || ''}/api/web/${value.url}`;
  // let data = aes_encrypt(JSON.stringify(value.data));
  let data = value.data;
    if (value.type === 'get') {
        return ax
            .get(url, { params: data, headers: { 'Authorization': token } })
            .then((response) => {
                return resHandle(response.data);
            })
            .catch((err) => {
                networkException(err);
                return { type: false };
            });
    } else if (value.type === 'delete') {
        return ax
            .delete(url, { params: data, headers: { 'Authorization': token } })
            .then((response) => {
                return resHandle(response.data);
            })
            .catch((err) => {
                networkException(err);
                return { type: false };
            });
    }
    else {
        return ax
            .post(url, data, { headers: { 'Authorization': token } })
            .then((response) => {
                return resHandle(response.data);
            })
            .catch((err) => {
                networkException(err);
                return { type: false };
            });
    }
  const url =
    value.service === "sys"
      ? `${appUrl.fileUrl}/${appUrl[value.service] || ""}/api/web/${value.url}`
      : `${appUrl.baseUrl}/${appUrl[value.service] || ""}/api/web/${value.url}`;
  const urlAi = `${appUrl.fileUrl}/${appUrl[value.service] || ""}/api/ai/${
    value.urlAi
  }`;
  if (value.typeAi === "get") {
    return ax
      .get(urlAi, { params: data, headers: { Authorization: token } })
      .then((response) => {
        return resHandle(response.data);
      })
      .catch((err) => {
        networkException(err);
        return { type: false };
      });
  }
  if (value.typeAi === "post") {
    return ax
      .post(urlAi, data, { headers: { Authorization: token } })
      .then((response) => {
        return resHandle(response.data);
      })
      .catch((err) => {
        networkException(err);
        return { type: false };
      });
  }
  if (value.type === "get") {
    return ax
      .get(url, { params: data, headers: { Authorization: token } })
      .then((response) => {
        return resHandle(response.data);
      })
      .catch((err) => {
        networkException(err);
        return { type: false };
      });
  } else if (value.type === "delete") {
    return ax
      .delete(url, { params: data, headers: { Authorization: token } })
      .then((response) => {
        return resHandle(response.data);
      })
      .catch((err) => {
        networkException(err);
        return { type: false };
      });
  } else {
    return ax
      .post(url, data, { headers: { Authorization: token } })
      .then((response) => {
        return resHandle(response.data);
      })
      .catch((err) => {
        networkException(err);
        return { type: false };
      });
  }
}
gz-customerSystem/src/router/router.js
@@ -2,7 +2,7 @@
 * @Company: hugeInfo
 * @Author: ldh
 * @Date: 2022-03-28 11:22:41
 * @LastEditTime: 2024-09-03 14:58:33
 * @LastEditTime: 2024-09-07 18:23:05
 * @LastEditors: dminyi 1301963064@qq.com
 * @Version: 1.0.0
 * @Description: 路由
@@ -218,7 +218,7 @@
                        {/* 来访登记*/}
                        <Route path="visit/:id?" element={<Visit />} />
                        <Route path="visit/eventFlow/:caseTaskId?/:caseId?" element={<EventFlow />} />
                        <Route path="visit/handleFeedback" element={<HandleFeedback />} />
                        <Route path="visit/handleFeedback/:caseTaskId?/:caseId?" element={<HandleFeedback />} />
                        <Route path="visit/fileMessage" element={<FileMessage />} />
                        <Route path="visit/closingReview" element={<ClosingReview />}/>
gz-customerSystem/src/views/register/handleFeedback/index.jsx
@@ -3,22 +3,25 @@
 * @Author: dminyi 1301963064@qq.com
 * @Date: 2024-08-09 09:59:43
 * @LastEditors: dminyi 1301963064@qq.com
 * @LastEditTime: 2024-09-06 17:43:15
 * @LastEditTime: 2024-09-08 11:17:47
 * @FilePath: \gzDyh\gz-customerSystem\src\views\basicInformation\organization\index.jsx
 * @Description: 来访登记
 * 
 */
import React, { useState } from "react";
import React, { useEffect, useState } from "react";
import NewPage from '@/components/NewPage';
import "@arco-themes/react-gzzz/css/arco.css";
import '../index.less';
import { Typography, Steps, Tabs } from '@arco-design/web-react';
import { Audit, Matter, transfer, aiPerson } from '@/assets/images'
import { Audit, Matter, applyRecord, transfer, aiPerson } from '@/assets/images'
import MatterDetail from '../matterDetail';
import Handle from './component/handle';
import AuditView from './component/AuditView';
import {AiQuestion} from '../visit/component/levelDetail'
import { AiQuestion } from '../visit/component/levelDetail';
import * as $$ from '@/utils/utility';
import { useParams } from 'react-router-dom';
const Step = Steps.Step;
const TabPane = Tabs.TabPane;
@@ -27,12 +30,36 @@
    // marginTop: 20,
};
function getCaseApi(data) {
    return $$.ax.request({ urlAi: `case-law/get-case`, typeAi: 'post', service: 'mediate', data });
}
function getLawApi(data) {
    return $$.ax.request({ urlAi: `case-law/get-law`, typeAi: 'post', service: 'mediate', data });
}
function getCaseDetailApi(data) {
    return $$.ax.request({ urlAi: `case-law/get-case-detail`, typeAi: 'get', service: 'mediate', data });
}
function getTabButton(data) {
    return $$.ax.request({ url: `caseTask/getTabButton`, type: 'get', service: 'mediate', data });
}
const Organization = () => {
    const routeData = useParams();
    const [current, setCurrent] = useState(3);
    const [tabsActive, setTabsActive] = useState('1');
    const [AiQuestionView, setAiQuestionView] = useState(false)
    const [tabsList, setTabList] = useState([
    const [aiData, setAiData] = useState([])
    const [aiLawData, setAiLawData] = useState([])
    const [caseDetailView, setCaseDetail] = useState({})
    const [authorData, setAuthorData] = useState({});
    const [disTab, setDisTab] = useState(true);
    const [tabsList, setTabsList] = useState([]);
    const myTab = [
        {
            img: Matter,
            label: '事项详情',
@@ -42,18 +69,96 @@
            img: transfer,
            label: '流转办理',
            key: '2',
            isNeedStep: true,//加上这个就有进度条
            isNeedStep: true,
        },
        {
            img: applyRecord,
            label: '申请记录',
            key: '3',
        },
        {
            img: Audit,
            label: '审核',
            key: '3',
            key: '4',
        },
    ])
    ]
    const handleAi = () => {
        setAiQuestionView(true)
    }
    const getCase = async () => {
        const res = await getCaseApi({
            caseDes: '牛某某诉称:其在上海某物流有限公司(以下简称物流公司)担任叉车工。某日上班与领导的车辆碰擦,对方全责,领导要求私了,因其未同意而被物流公司开除。物流公司解除劳动合同违法,应当支付赔偿金。物流公司辩称:物流公司要求劳动者“健康”,牛某某持有残疾证,影响其从事叉车工作。牛某某入职前故意隐瞒身体残疾的情况,有违诚信,入职后以此为由索要优待未果,辱骂领导。物流公司并非因牛某某身体残疾而解除,而是因其隐瞒持有残疾证及威胁领导,解除劳动合同合法。法院经审理查明,牛某某左手大拇指部分缺失,其于2019年10月10日到物流公司工作,担任叉车工。牛某某入职时提交了在有效期内的叉车证,并参加了入职体检,体检合格。物流公司要求填写员工登记表,登记表上列明有无大病病史、家族病史、工伤史、传染病史,并列了“其他”栏。牛某某均勾选了“无”。牛某某正常完成了工作。2020年7月4日,物流公司以牛某某隐瞒持有残疾证,且威胁领导恐吓上级,属于严重违纪为由解除劳动合同。2020年7月10日,牛某某向上海市浦东新区劳动人事争议仲裁委员会申请仲裁,要求物流公司支付违法解除劳动合同赔偿金30,000元。审理中牛某某表示,其可以正常工作,并不要求物流公司额外支付残疾人的福利待遇,所以没有告知物流公司其身有残疾。2020年10月13日,该仲裁委员会按牛某某工资2,930元为标准裁决物流公司支付牛某某违法解除劳动合同赔偿金5,860元。',
            caseClaim: '牛某某向一审法院起诉请求物流公司支付其违法解除劳动合同赔偿金30,000元。',
            caseId: '10086'
        })
        console.log(res.data, 'res')
        if (res.type) {
            setAiData(res.data)
        }
    }
    const getLaw = async () => {
        const res = await getLawApi({
            caseDes: '牛某某诉称:其在上海某物流有限公司(以下简称物流公司)担任叉车工。某日上班与领导的车辆碰擦,对方全责,领导要求私了,因其未同意而被物流公司开除。物流公司解除劳动合同违法,应当支付赔偿金。物流公司辩称:物流公司要求劳动者“健康”,牛某某持有残疾证,影响其从事叉车工作。牛某某入职前故意隐瞒身体残疾的情况,有违诚信,入职后以此为由索要优待未果,辱骂领导。物流公司并非因牛某某身体残疾而解除,而是因其隐瞒持有残疾证及威胁领导,解除劳动合同合法。法院经审理查明,牛某某左手大拇指部分缺失,其于2019年10月10日到物流公司工作,担任叉车工。牛某某入职时提交了在有效期内的叉车证,并参加了入职体检,体检合格。物流公司要求填写员工登记表,登记表上列明有无大病病史、家族病史、工伤史、传染病史,并列了“其他”栏。牛某某均勾选了“无”。牛某某正常完成了工作。2020年7月4日,物流公司以牛某某隐瞒持有残疾证,且威胁领导恐吓上级,属于严重违纪为由解除劳动合同。2020年7月10日,牛某某向上海市浦东新区劳动人事争议仲裁委员会申请仲裁,要求物流公司支付违法解除劳动合同赔偿金30,000元。审理中牛某某表示,其可以正常工作,并不要求物流公司额外支付残疾人的福利待遇,所以没有告知物流公司其身有残疾。2020年10月13日,该仲裁委员会按牛某某工资2,930元为标准裁决物流公司支付牛某某违法解除劳动合同赔偿金5,860元。',
            caseClaim: '牛某某向一审法院起诉请求物流公司支付其违法解除劳动合同赔偿金30,000元。',
            caseId: '10086'
        })
        if (res.type) {
            setAiLawData(res.data)
        }
    }
    const getCaseDetail = async () => {
        const res = await getCaseDetailApi({
            caseId: '10086',
            type: '1'
        })
        if (res.type) {
            setCaseDetail(res.data)
        }
    }
    const getAuthor = async () => {
        const res = await getTabButton({
            caseTaskId: routeData.caseTaskId
        })
        if (res.type) {
            const { tabList } = res.data
            setAuthorData(res.data)
            if (tabList.length === 0) {
                //没有tab就不展示
                setDisTab(false)
            } else {
                setTabsList(myTab.filter(item => {
                    const flag = tabList.some(result => {
                        if (result.id === item.key) {
                            return true
                        }
                    })
                    return flag
                }))
                setTabsActive(tabList[0].id)
            }
        }
    }
    useEffect(() => {
        // getAuthor();
        // getCase();
        // getLaw();
        // getCaseDetail();
    }, [])
    return (
        <div style={{ position: 'relative' }}>
        <div style={{ position: 'relative' ,height:'100vh'}}>
            <NewPage
                pageHead={
                    { breadcrumbData: [{ title: '工作台' }, { title: '事件中心' }], title: '办理反馈' }
@@ -64,7 +169,7 @@
                    onChange={(v) => setTabsActive(v)}
                    className='myTabContent'
                >
                    {tabsList?.map(item => {
                    {myTab?.map(item => {
                        return <TabPane
                            key={item.key}
                            title={
@@ -103,14 +208,17 @@
                    })}
                </Tabs>
            </NewPage>
            <div className="gradient-box" onClick={() => setAiQuestionView(true)}>
            <div className="gradient-box" onClick={() => handleAi()}>
                <div><img src={aiPerson} alt='' style={{ width: '24px', height: '24px', marginRight: '6px' }} /></div>
                <div style={{ color: '#FFFFFF' }}>智能调解助理</div>
            </div>
            <AiQuestion
        visible={AiQuestionView}
        onClose={() => setAiQuestionView(false)}
      />
                visible={AiQuestionView}
                onClose={() => setAiQuestionView(false)}
                aiData={aiData}
                aiLawData={aiLawData}
                caseDetail={caseDetailView}
            />
        </div>
    )
}
gz-customerSystem/src/views/register/index.less
@@ -704,7 +704,7 @@
}
.gradient-box {
    position: absolute;
    position: fixed;
    right: 0;
    top: 50%;
    transform: translateY(-50%);
@@ -786,6 +786,7 @@
    &-name{
        font-size: 16px;
        margin-bottom: 16px;
        max-width: 400px;
    }
    &-littleTitle{
gz-customerSystem/src/views/register/matterDetail/fileMessage.jsx
@@ -1,7 +1,7 @@
import React, { useState } from 'react';
import React, { useEffect, useState } from 'react';
import NewPage from '@/components/NewPage';
import { Row, Col, Space } from 'antd';
import { Steps, Tabs, Typography, Rate,Button } from '@arco-design/web-react';
import { Steps, Tabs, Typography, Rate, Button } from '@arco-design/web-react';
import { apply } from '@/assets/images';
import { result } from '@/assets/images/icon';
import * as $$ from '@/utils/utility';
@@ -10,17 +10,24 @@
import { register, fold, down, empty, link } from '@/assets/images';
import ProgressStep from '@/components/ProgressStep/VisitStep';
const Step = Steps.Step;
const TabPane = Tabs.TabPane;
function getTransactResultApi(caseId) {
  return $$.ax.request({ url: `caseInfoUnfold/getTransactResult?caseId=${caseId}`, type: 'get', service: 'mediate' });
}
function getByCaseIdApi(caseId) {
  return $$.ax.request({ url: `caseEvaluate/getByCaseId?caseId=${caseId}`, type: 'get', service: 'mediate' });
}
const FileMessage = (props) => {
  const [tabsActive, setTabsActive] = useState('1');
  const [current, setCurrent] = useState(7);
  const [grade, setGrade] = useState(0);
  const [TransactResult, setTransactResult] = useState({})
  const [filesCheck, setFilesCheck] = useState(false);
  const [infoData, setInfoData] = useState({});
  const [tabsList, setTabList] = useState([
@@ -99,6 +106,19 @@
  const handleTabChange = (newTabIndex) => {
    setSelectedTab(newTabIndex);
  };
  const getTransactResult = async () => {
    const res = await getTransactResultApi('24083010062110001')
    if (res.type) {
      setTransactResult({ ...res.data, fileName: res.data.fileInfoBaseDTOList.map(item => item.trueName) })
    }
  }
  const getByCaseId = async () => {
    const res = await getByCaseIdApi('24083010062110001')
    setGrade(res.data)
    console.log(res, 'resrs')
  }
  const applyDialog = [
    {
@@ -327,6 +347,11 @@
  };
  useEffect(() => {
    getByCaseId();
    getTransactResult();
  }, [])
@@ -470,33 +495,33 @@
                    <table border="1" align="center" cellpadding="8" className="table" >
                      <tr>
                        <th bgcolor="#F7F8FA" className="table-title" width="120">化解结果</th>
                        <td width='380'>化解成功</td>
                        <td width='380'>{TransactResult.mediResultName || '-'}</td>
                        <th bgcolor="#F7F8FA" className="table-title" width="120">经办人</th>
                        <td width='380'>李晓明</td>
                        <td width='380'>{TransactResult.mediator || '-'}</td>
                      </tr>
                      <tr>
                        <th bgcolor="#F7F8FA" className="table-title">承办部门</th>
                        <td>天河区棠下街综治中心</td>
                        <td>{TransactResult.mediateUnitName || '-'}</td>
                        <th bgcolor="#F7F8FA" className="table-title">配合部门</th>
                        <td>-</td>
                        <td>{TransactResult.applyAssistUnitName || '-'}</td>
                      </tr>
                      <tr>
                        <th bgcolor="#F7F8FA" className="table-title" width="120">受理时间</th>
                        <td width='380'>2024-7-1 10:00</td>
                        <th bgcolor="#F7F8FA" className="table-title" width="120">办结时间</th>
                        <td width='380'>2024-7-15 11:45</td>
                        <td width='380'>{TransactResult?.fileTime || '-'}</td>
                      </tr>
                      <tr>
                        <th bgcolor="#F7F8FA" className="table-title" width="120">办理意见</th>
                        <td width='380' colspan='3'>调解开始,我首先安抚双方情绪,确保对话在一个平和的氛围中展开。随后,我引导被申请人详细说明了他的财务困境及还款意愿,同时让银行代表理解其处境,强调长期合作的重要性。经过反复沟通,被申请人理解了自身行为给申请人带来的不便,在相关证据的出示下,被申请人同意了申请方的申请请求,双方最终达成一致,签署了调解协议。</td>
                        <td width='380' colspan='3'>{TransactResult?.windupContent || '-'}</td>
                      </tr>
                      <tr>
                        <th bgcolor="#F7F8FA" className="table-title" width="120">协议要点</th>
                        <td width='380' colspan='3'>经过协商,李女士同意承担主要维修费用,但考虑到水管老化属自然磨损,张先生也表示愿意承担一小部分费用以示友好特申请结案。</td>
                        <td width='380' colspan='3'>{TransactResult?.agreeContent || '-'}</td>
                      </tr>
                      <tr>
                        <th bgcolor="#F7F8FA" className="table-title" width="120">结案意见</th>
                        <td width='380' colspan='3'>考虑到事项已经得到平息,过程材料也都比较完善,现申请结案</td>
                        <td width='380' colspan='3'>{TransactResult?.windupContent || '-'}</td>
                      </tr>
                      <tr>
                        <th bgcolor="#F7F8FA" className="table-title" width="120">协议文书</th>
@@ -518,10 +543,10 @@
                      size="small"
                      rowKey="id"
                      bordered={true}
                      style={{marginBottom:'16px'}}
                      style={{ marginBottom: '16px' }}
                    />
                    <div className='gap'></div>
                    <Col span={24} style={{marginTop:'12px'}}>
                    <Col span={24} style={{ marginTop: '12px' }}>
                      <div style={{ color: 'rgb(134, 144, 156)' }}>办理记录</div>
                      <div>
                        {records.map(record => (
@@ -601,7 +626,7 @@
                    </div>
                    <div className='gap'></div>
                    <Col span={24} style={{ display: 'flex', alignItems: 'center', margin:'12px 0px 4px 0px'}}>
                    <Col span={24} style={{ display: 'flex', alignItems: 'center', margin: '12px 0px 4px 0px' }}>
                      <Space size='small'>
                        <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h4>当事人评价</h4>
                      </Space>
@@ -611,34 +636,34 @@
                        <div className="title">
                          <div className="title-text">评价等级</div>
                        </div>
                        <div style={{ display: 'flex' }}><Rate defaultValue={3} disabled /></div>
                        <div style={{ display: 'flex' }}><Rate value={grade?.evaluateGrade} disabled /></div>
                      </Col>
                      <Col span={8}>
                        <div className="title">
                          <div className="title-text">评价时间</div>
                        </div>
                        <div>2024-8-1 12:00</div>
                        <div>{grade?.createTime || '-'}</div>
                      </Col>
                      <Col span={8}>
                        <div className="title">
                          <div className="title-text">评价人</div>
                        </div>
                        <div>张梦雨</div>
                        <div>{grade?.evaluateUserName || '-'}</div>
                      </Col>
                      <Col span={12}>
                        <div className="title">
                          <div className="title-text">评语</div>
                        </div>
                        <div>实名表扬天河区棠下街综治中心,真的很有耐心处置我提出的问题,得到满意的答复。</div>
                        <div>{grade?.evaluateContent}</div>
                      </Col>
                    </Row>
                    <div className='gap'></div>
                    <Col span={24} style={{ display: 'flex', alignItems: 'center', margin:'12px 0px 4px 0px' }}>
                    <Col span={24} style={{ display: 'flex', alignItems: 'center', margin: '12px 0px 4px 0px' }}>
                      <Space size='small'>
                        <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h4>登记信息</h4>
                      </Space>
                    </Col>
                    <Row gutter={[16, 16]} style={{marginBottom:'90px'}}>
                    <Row gutter={[16, 16]} style={{ marginBottom: '90px' }}>
                      <Col span={8}>
                        <div className="title">
                          <div className="title-text">登记机构</div>
gz-customerSystem/src/views/register/matterDetail/index.jsx
@@ -10,6 +10,10 @@
  return $$.ax.request({ url: 'caseInfo/getCaseInfo?id=' + id, type: 'get', service: 'mediate' });
}
function listIdTypeInfoApi(data) {
  return $$.ax.request({ url: `fileInfo/listIdTypeInfo`, type: 'post', service: 'sys', data });
}
export default function MatterDetail(props) {
  const [fakeData, setFakeData] = useState([{
@@ -49,35 +53,30 @@
    },
    {
      title: '材料类型',
      dataIndex: 'judicNo',
      key: 'judicNo',
      dataIndex: 'ownerTypeName',
      key: 'ownerTypeName',
      width: 60,
    },
    {
      title: '材料数量',
      dataIndex: 'inputUserName',
      key: 'perClassName',
      dataIndex: 'size',
      key: 'size',
      width: 180,
      render: (text) => (
        <>
          {text}份
        </>
      )
      render: (text) => <span>{text}份</span>,
    },
    {
      title: '材料名称',
      dataIndex: 'perClassName',
      key: 'perClassName',
      dataIndex: 'fileNames',
      key: 'fileNames',
      width: 180,
    },
    {
      title: '最新上传时间',
      dataIndex: 'mediateUserName',
      key: 'mediateUserName',
      dataIndex: 'fileNames',
      key: 'fileNames',
      width: 180,
    },
@@ -97,61 +96,57 @@
    },
    // 更多列配置...
  ];
  const fakeData1 = [
  const [fakeData1, setFakeData1] = useState([
    {
      id: 1,
      caseNo: 'A20230101',
      judicNo: '申请材料',
      perClassName: '李晓明的纠纷化解申请表、身份证...',
      inputUserName: '0',
      mediateUserName: '2024-7-12 12:00',
      judgeName: '王五',
      mediator: '赵六',
      handlerUserName: '钱七',
      returnUserName: '孙八',
      expireTime: '2023-08-10T08:00:00.000Z',
      processName: '进行中',
      otherMediator: '周九',
      canalName: '网络',
      judicResult: '通过',
      assistName: '吴十',
      mediTypeName: '民事调解',
      serieStatus: '1', // 1 表示非系列案,2 表示系列案
      // 更多字段...
      ownerTyp: "22_00018-101",
      ownerTypeName: "申请材料",
      size: '0',
      ownerId: null,
      ownerName: null,
      perType: null,
      agentStatus: null,
      fileNames: "-",
      fileList: []
    },
    {
      id: 2,
      caseNo: 'A20230101',
      judicNo: '证据材料',
      perClassName: '李晓明的纠纷化解申请表、身份证...',
      inputUserName: '0',
      mediateUserName: '2024-7-12 12:00',
      judgeName: '王五',
      mediator: '赵六',
      handlerUserName: '钱七',
      returnUserName: '孙八',
      expireTime: '2023-08-10T08:00:00.000Z',
      processName: '进行中',
      otherMediator: '周九',
      canalName: '网络',
      judicResult: '通过',
      assistName: '吴十',
      mediTypeName: '民事调解',
      serieStatus: '1', // 1 表示非系列案,2 表示系列案
      // 更多字段...
      ownerType: "22_00018-102",
      ownerTypeName: "证据材料",
      size: '0',
      ownerId: null,
      ownerName: null,
      perType: null,
      agentStatus: null,
      fileNames: "-",
      fileList: []
    },
    // 更多数据...
  ];
  ]);
  const listIdTypeInfo = async () => {
    const res = await listIdTypeInfoApi({
      mainId: props.id, //事项ID
      ownerIdList: [props.id], //具体所属编号
      typeList: []
    })
    if (res.type) {
      let data = res.data?.[0]?.fileList
      if (res.data.length > 0) {
        setFakeData1(data)
      }
    }
  }
  useEffect(() => {
    console.log(props);
    getCaseInfo(props.caseId)
  }, [props.caseId])
    getCaseInfo(props.id)
    listIdTypeInfo()
  }, [props.id])
  //获取id
  const getCaseInfo = async (id) => {
    const res = await getCaseInfoApi(id)
    const res = await getCaseInfoApi('24083010062110001')
    if (res.type) {
      let data = res.data
@@ -254,7 +249,7 @@
            </Col>
            <Col span={16}>
              <div className="title"><div className="title-text">是否重大矛盾纠纷</div></div>
              <div>{infoData.majorStatus === '0' ? '否' : '是'}</div>
              <div>{infoData.majorStatus === '0' ? '否' : infoData.majorStatus === '1' ? '是' : '-'}</div>
            </Col>
          </Row>
          <Col span={24} style={{ display: 'flex', alignItems: 'center', marginBottom: '8px', marginTop: '20px' }}>
gz-customerSystem/src/views/register/visit/component/levelDetail.jsx
@@ -2,11 +2,11 @@
 * @Author: dminyi 1301963064@qq.com
 * @Date: 2024-08-27 16:47:12
 * @LastEditors: dminyi 1301963064@qq.com
 * @LastEditTime: 2024-09-07 15:35:53
 * @LastEditTime: 2024-09-08 10:36:03
 * @FilePath: \gzDyh\gz-customerSystem\src\views\register\visit\component\levelDetail.jsx
 * @Description: 右抽屉提示
 */
import React, { useState } from 'react';
import React, { useEffect, useState } from 'react';
import MyDrawer from '@/components/MyDrawer';
import { caselogo } from '@/assets/images';
@@ -104,23 +104,23 @@
}
const AiQuestion = ({ visible, onClose }) => {
const AiQuestion = ({ visible, onClose, aiData,aiLawData,caseDetailView }) => {
    const [list, setList] = useState([
        {
            id: '1',
            type: '典型案例',
            name: '唐某某诉重庆某工业有限公司劳动合同纠纷案'
        },
        {
            id: '2',
            type: '相似案例',
            name: '曾某某诉某网络科技公司劳动争议案'
        },
        {
            id: '3',
            type: '相似案例',
            name: '曾某某诉某网络科技公司劳动争议案'
        },
        // {
        //     id: '1',
        //     type: '典型案例',
        //     name: '唐某某诉重庆某工业有限公司劳动合同纠纷案'
        // },
        // {
        //     id: '2',
        //     type: '相似案例',
        //     name: '曾某某诉某网络科技公司劳动争议案'
        // },
        // {
        //     id: '3',
        //     type: '相似案例',
        //     name: '曾某某诉某网络科技公司劳动争议案'
        // },
    ])
    const [layerList, setLayerList] = useState([
@@ -138,22 +138,26 @@
        },
    ])
    const [caseDetail,setCaseDetail] = useState(false)
    const toggleView = (id) => {
    const [caseDetail, setCaseDetail] = useState(false)
    const toggleView = (type,id) => {
        console.log(id, 'iddddddd')
        setCaseDetail(true)
        aiCaseDetail(id)
        if(type==='case'){
            setCaseDetail(true)
        }
    };
    const caseDetailOnClose = () => {
        setCaseDetail(false)
    }
    const aiCaseDetail = () => {
    }
    useEffect(() => {
        setList(aiData)
        setLayerList(aiLawData)
    }, [aiData,aiLawData])
    return (
        <>
@@ -161,7 +165,7 @@
                visible={visible}
                onClose={onClose}
                title="智能调解助理"
                width={1000}
                width={1200}
                style={{ position: 'absolute' }}
                bodyStyle={{ marginTop: '-8px' }}
                titleBefore={true}
@@ -180,14 +184,12 @@
                            <div className='aiBox-list'>
                                {list?.map((item, index) => (
                                    <div className='aiBox-list-item'>
                                        <div className='aiBox-list-item-type'>{item.type}</div>
                                        <div className='aiBox-list-item-name'>{item.name}</div>
                                        <div className='aiBox-list-item-btn' onClick={() => toggleView(item.id)}>查看</div>
                                        <div className='aiBox-list-item-type'>{item.caseType === 1 ? '典型案例' : '相似案例'}</div>
                                        <div className='aiBox-list-item-name'>{item.caseName}</div>
                                        <div className='aiBox-list-item-btn' onClick={() => toggleView('case',item.id)}>查看</div>
                                    </div>
                                ))}
                            </div>
                        </div>
                        <div className='marginLeft'>
                            <div className='marginLeft-title'>相关法条:</div>
@@ -195,8 +197,8 @@
                                {layerList?.map((item, index) => (
                                    <div className='aiBox-list-item'>
                                        <div className='aiBox-list-item-type'>相关法条</div>
                                        <div className='aiBox-list-item-name'>{item.name}</div>
                                        <div className='aiBox-list-item-btn' onClick={() => toggleView(item.id)}>查看</div>
                                        <div className='aiBox-list-item-name'>{item.lawTitle}{item.lawIndex}</div>
                                        <div className='aiBox-list-item-btn' onClick={() => toggleView('law',item.lawInfoId)}>查看</div>
                                    </div>
                                ))}
                            </div>
@@ -206,24 +208,24 @@
                </div>
            </MyDrawer>
            <div className='MyDrawer'>
            <MyDrawer
                visible={caseDetail}
                onClose={caseDetailOnClose}
                title="查看相关案例"
                width={400}
                style={{ position: 'absolute' }}
                bodyStyle={{ marginTop: '-8px' }}
                titleBefore={true}
            >
                <div className='layerDetail'>
                    <div className='layerDetail-title'>参考案例</div>
                    <div className='layerDetail-name'>唐某某诉重庆某工业有限公司劳动合同纠纷案</div>
                    <div className='layerDetail-littleTitle'>智能摘要</div>
                    <div className='layerDetail-content'>法院生效裁判认为,本案是肖某某要求某工业公司支付经济补偿金,原审法院已经确认某工业公司存在未足额支付肖某某工资、未休年休假工资情形,故依照《中华人民共和国劳动合同法》(以下简称劳动合同法)第三十八条第一款的规定,某工业公司应当支付解除合同的经济补偿金。</div>
                </div>
            </MyDrawer>
                <MyDrawer
                    visible={caseDetail}
                    onClose={caseDetailOnClose}
                    title="查看相关案例"
                    width={400}
                    style={{ position: 'absolute' }}
                    bodyStyle={{ marginTop: '-8px' }}
                    titleBefore={true}
                >
                    <div className='layerDetail'>
                        <div className='layerDetail-title'>参考案例</div>
                        <div className='layerDetail-name'>唐某某诉重庆某工业有限公司劳动合同纠纷案</div>
                        <div className='layerDetail-littleTitle'>智能摘要</div>
                        <div className='layerDetail-content'>法院生效裁判认为,本案是肖某某要求某工业公司支付经济补偿金,原审法院已经确认某工业公司存在未足额支付肖某某工资、未休年休假工资情形,故依照《中华人民共和国劳动合同法》(以下简称劳动合同法)第三十八条第一款的规定,某工业公司应当支付解除合同的经济补偿金。</div>
                    </div>
                </MyDrawer>
        </div>
            </div>
        </>
gz-customerSystem/src/views/register/visit/index.jsx
@@ -2,12 +2,13 @@
 * @Author: dminyi 1301963064@qq.com
 * @Date: 2024-08-09 09:59:43
 * @LastEditors: dminyi 1301963064@qq.com
 * @LastEditTime: 2024-09-04 10:20:40
 * @LastEditTime: 2024-09-07 17:27:08
 * @FilePath: \gzDyh\gz-customerSystem\src\views\basicInformation\organization\index.jsx
 * @Description: 来访登记
 */
import React, { useState, useRef, Fragment, useEffect } from "react";
import { useSearchParams, useNavigate } from 'react-router-dom';
import NewPage from '@/components/NewPage';
import * as $$ from '@/utils/utility';
import "@arco-themes/react-gzzz/css/arco.css";
@@ -40,7 +41,7 @@
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();
@@ -146,7 +147,8 @@
            okText: '确定受理',
            cancelText: '我再想想',
            onOk: async () => {
                setCurrent(3)
                setCurrent(3);
                navigate(`mediate/visit/handleFeedback`, { replace: true })
            },
        });
    }