forked from gzzfw/frontEnd/gzDyh

liuwh
2024-09-09 e92ddbcdc1cb990de02621bccfa62cc067afd3b9
Merge branch 'master' of http://120.79.193.119:9090/r/gzzfw/frontEnd/gzDyh into master
6 files deleted
12 files added
33 files modified
3721 ■■■■ changed files
.gitignore 2 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/api/apiHandler.js 102 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/api/appUrl.js 5 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/assets/images/checkInto.png patch | view | raw | blame | history
gz-customerSystem/src/assets/images/index.js 20 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/assets/images/tab1.png patch | view | raw | blame | history
gz-customerSystem/src/assets/images/tab2.png patch | view | raw | blame | history
gz-customerSystem/src/assets/images/tab3.png patch | view | raw | blame | history
gz-customerSystem/src/assets/images/tab4.png patch | view | raw | blame | history
gz-customerSystem/src/assets/images/tab5.png patch | view | raw | blame | history
gz-customerSystem/src/assets/images/tab6.png patch | view | raw | blame | history
gz-customerSystem/src/assets/images/visitInto.png patch | view | raw | blame | history
gz-customerSystem/src/components/ArcoUpload/index.jsx 27 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/components/personCard/DetailDialog.jsx 28 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/components/personCard/index.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/router/router.js 11 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/styles/public.less 13 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/utils/selectOption.js 182 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/filesCheck/newFileCheck.jsx 402 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/closingReview/component/AssignedModel.jsx 130 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/closingReview/component/BackModel.jsx 95 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/closingReview/component/EscalationModel.jsx 91 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/closingReview/component/EventFlow.jsx 184 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/closingReview/component/Examine.jsx 186 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/closingReview/component/ReviewExamine.jsx 269 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/closingReview/component/ReviewProgress.jsx 79 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/closingReview/index.jsx 111 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/eventFlow/component/AssignedModel.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/eventFlow/component/BackModel.jsx 4 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/eventFlow/component/EscalationModel.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx 19 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/eventFlow/component/Examine.jsx 166 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/eventFlow/index.jsx 23 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/handleFeedback/component/AuditView.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx 299 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx 18 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/handleFeedback/index.jsx 133 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/index.jsx 511 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/index.less 78 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/matterDetail/FileTable.jsx 18 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/matterDetail/NewFileCheck.jsx 99 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/matterDetail/Supervising.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/matterDetail/UniteHandle.jsx 2 ●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/matterDetail/fileMessage.jsx 57 ●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/matterDetail/index.jsx 141 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/visit/component/agentDialog.jsx 10 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/visit/component/applyDialog.jsx 15 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/visit/component/levelDetail.jsx 117 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx 33 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/visit/index.jsx 29 ●●●●● patch | view | raw | blame | history
gz-customerSystem/src/views/register/visit/preview.jsx 2 ●●● patch | view | raw | blame | history
.gitignore
New file
@@ -0,0 +1,2 @@
gz-customerSystem/build.zip
gz-customerSystem/package-lock.json
gz-customerSystem/src/api/apiHandler.js
@@ -2,41 +2,49 @@
 * @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: '抱歉! 网络异常请刷新' });
    catchApiError({ content: "抱歉! 网络异常请刷新" });
    } else {
        catchApiError({ content: '抱歉! 网络错误' });
    catchApiError({ content: "抱歉! 网络错误" });
    }
}
// api返回结果处理
function resHandle(resData) {
    const { code, data, msg } = resData;
    if (code === 0 || code === '0') {
  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' });
  } else if (code === 401 || code === "401") {
    catchApiError({
      content: "抱歉! 登录状态已失效请重新登录",
      loginStatus: "lose",
    });
        return { type: false };
    } else if (code === 105 || code === '105') {
  } else if (code === 105 || code === "105") {
        return { type: false, code, data, msg };
    } else if (code === 106 || code === '106') {
  } else if (code === 106 || code === "106") {
        return { type: false, code, data, msg };
    } else if (code === -1 || code == '-1') {
  } else if (code === -1 || code == "-1") {
        catchApiError({ content: msg });
        return { type: false };
    } else {
        info({ type: 'warning', content: msg });
    info({ type: "warning", content: msg });
        return { type: false };
    }
}
@@ -44,11 +52,14 @@
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' });
  if (!token && value.url !== "ctAccount/login") {
    catchApiError({
      content: "抱歉!登录状态已失效请重新登录",
      loginStatus: "lose",
    });
        return { type: false };
    }
@@ -56,23 +67,17 @@
    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}`;
    value.service === "sys"
      ? `${appUrl.fileUrl}/${appUrl[value.service] || ""}/api/web/${value.url}`
      : `${appUrl.baseUrl}/${appUrl[value.service] || ""}/api/web/${value.url}`;
    if (value.type === 'get') {
  const urlAi = `${appUrl.fileUrl}/${appUrl[value.service] || ""}/api/ai/${
    value.urlAi
  }`;
  if (value.typeAi === "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 } })
      .get(urlAi, { params: data, headers: { Authorization: token } })
            .then((response) => {
                return resHandle(response.data);
            })
@@ -81,9 +86,42 @@
                return { type: false };
            });
    }
    else {
  if (value.typeAi === "post") {
        return ax
            .post(url, data, { headers: { 'Authorization': token } })
      .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);
            })
gz-customerSystem/src/api/appUrl.js
@@ -2,7 +2,7 @@
 * @Company: hugeInfo
 * @Author: ldh
 * @Date: 2022-02-16 11:25:57
 * @LastEditTime: 2024-09-07 16:35:00
 * @LastEditTime: 2024-09-09 10:07:53
 * @LastEditors: dminyi 1301963064@qq.com
 * @Version: 1.0.0
 * @Description: api地址
@@ -38,7 +38,7 @@
// 正式版
export const web = {
  // web服务
  baseUrl: "https://zfw-dyh.by.gov.cn",
  baseUrl: "/gz-dyh",
  // baseUrl: 'http://146.4.99.61:8088/byzfw',
  // 附件服务
@@ -59,4 +59,5 @@
  oper: "dyh-oper", // dyh-oper
  sys: "dyh-sys", // dyh-sys
  disp: "dyh-disp", //dyh-disp
  utils: "dyh-utils",
};
gz-customerSystem/src/assets/images/checkInto.png
gz-customerSystem/src/assets/images/index.js
@@ -2,7 +2,7 @@
 * @Company: hugeInfo
 * @Author: lwh
 * @Date: 2023-04-24 16:12:00
 * @LastEditTime: 2024-09-07 14:08:18
 * @LastEditTime: 2024-09-09 09:44:30
 * @LastEditors: dminyi 1301963064@qq.com
 * @Version: 1.0.0
 * @Description:
@@ -64,6 +64,14 @@
import Audit from "./Audit.png";
import aiPerson from "./aiPerson.png";
import caselogo from "./caselogo.png";
import tab1 from "./tab1.png";
import tab2 from "./tab2.png";
import tab3 from "./tab3.png";
import tab4 from "./tab4.png";
import tab5 from "./tab5.png";
import tab6 from "./tab6.png";
import visitInto from "./visitInto.png";
import checkInto from "./checkInto.png";
export {
  ledger_1,
@@ -122,5 +130,13 @@
  up,
  Audit,
  aiPerson,
  caselogo
  caselogo,
  tab1,
  tab2,
  tab3,
  tab4,
  tab5,
  tab6,
  visitInto,
  checkInto
};
gz-customerSystem/src/assets/images/tab1.png
gz-customerSystem/src/assets/images/tab2.png
gz-customerSystem/src/assets/images/tab3.png
gz-customerSystem/src/assets/images/tab4.png
gz-customerSystem/src/assets/images/tab5.png
gz-customerSystem/src/assets/images/tab6.png
gz-customerSystem/src/assets/images/visitInto.png
gz-customerSystem/src/components/ArcoUpload/index.jsx
@@ -23,6 +23,7 @@
 * label *, // form的label名
 * editData *, // 编辑回显数据
 * handleDelFile *,//删除文件接口
 * ownerType,//用于回显文件
 */
export default function ArcoUpload(props) {
@@ -36,8 +37,22 @@
  useEffect(() => {
    if (props.editData) {
      console.log(props.editData[props.field]);
      if(props.editData[props.field]) {
        //新增的时候有file数据,可以这样子回显
      setMyFileList(props.editData[props.field])
      } else {
        //编辑的时候,文件统一放在filInfoList了,需要设置ownerType获取到该材料文件回显
        const fileInfoList = props.editData.fileInfoList
        if(fileInfoList && fileInfoList.length != 0) {
          let file = [];
          fileInfoList.forEach(item => {
            if(item.ownerType == props.ownerType)  {
              file.push(item.fileList[0])
            }
          })
          setMyFileList(file)
        }
      }
    }
  }, [props.editData])
@@ -60,7 +75,8 @@
          }}
          headers={{ Authorization: $$.getSessionStorage('customerSystemToken') }}
          onChange={(fileList, file) => {
            const { status, response } = file
            const { status, response, uid } = file
            console.log(fileList, file);
            //因为字节upLoad组件有bug,不能区分添加文件还是删除文件,所以用这种办法来判断是不是删除
            const isDel = myFileList && myFileList.length > fileList.length
            //上传失败
@@ -79,7 +95,14 @@
            }
            //删除文件
            if (isDel && props.handleDelFile) {
              if(response) {
                //删除的是新提交的
              props.handleDelFile(response.data[0].id)
              } else {
                //删除的是回显的文件
                props.handleDelFile(uid)
              }
            }
            handleFileListChange(fileList);
            setMyFileList(fileList)
gz-customerSystem/src/components/personCard/DetailDialog.jsx
@@ -124,17 +124,13 @@
    [
      {
        label: '登记企业材料',
        value: <a href="your-link-here.html" target="_blank">
          <img src={link} alt="" className="title-file" />广东好又多餐饮有限公司营业执照.pdf
        </a>,
        value: '',
        isFile: true,
        field: 'file',
      },
      {
        label: '法定代表人身份证明材料',
        value: <a href="your-link-here.html" target="_blank">
          <img src={link} alt="" className="title-file" />江照月个人身份.pdf
        </a>,
        value: '',
        isFile: true,
        field: 'file1',
      },
@@ -189,17 +185,13 @@
    [
      {
        label: '机构登记材料',
        value: <a href="your-link-here.html" target="_blank">
          <img src={link} alt="" className="title-file" />广东好又多餐饮有限公司营业执照.pdf
        </a>,
        value: '',
        isFile: true,
        field: 'file',
      },
      {
        label: '机构代表人身份证明材料',
        value: <a href="your-link-here.html" target="_blank">
          <img src={link} alt="" className="title-file" />江照月个人身份.pdf
        </a>,
        value: '',
        isFile: true,
        field: 'file1',
      },
@@ -290,17 +282,13 @@
    [
      {
        label: '身份证明材料',
        value: <a href="your-link-here.html" target="_blank">
          <img src={link} alt="" className="title-file" />广东好又多餐饮有限公司营业执照.pdf
        </a>,
        value: '',
        isFile: true,
        field: 'file',
      },
      {
        label: '代理人授权委托书',
        value: <a href="your-link-here.html" target="_blank">
          <img src={link} alt="" className="title-file" />江照月个人身份.pdf
        </a>,
        value: '',
        isFile: true,
        field: 'file1',
      },
@@ -394,9 +382,9 @@
        }
      </table>
      {/* 重复来访重点人员 */}
      <div style={{ width: 'calc(100% - 9px)', background: '#f2f3f5', marginBottom: '20px', padding: '12px' }}>
      {/* <div style={{ width: 'calc(100% - 9px)', background: '#f2f3f5', marginBottom: '20px', padding: '12px' }}>
        <KeyVisits />
      </div>
      </div> */}
    </div>
  )
}
gz-customerSystem/src/components/personCard/index.jsx
@@ -32,7 +32,7 @@
  }
  let isAgent = false
  let isAgentFor = false
  const typeList = data.map(item => {
  const typeList = data?.map(item => {
    return item.perType
  })//获取有多少申请人和被申请人
  if (typeList.indexOf('15_020008-1') != -1) {
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-08 15:15:51
 * @LastEditors: dminyi 1301963064@qq.com
 * @Version: 1.0.0
 * @Description: 路由
@@ -144,6 +144,8 @@
import FileMessage from "../views/register/matterDetail/fileMessage";
//结案审核
import ClosingReview from "../views/register/closingReview";
//工作台
import VisitWorkBench from "../views/register";
import Test from "../views/test";
@@ -218,11 +220,10 @@
                        {/* 来访登记*/}
                        <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 />}/>
                        <Route path="visit/closingReview/:caseTaskId?/:caseId?" element={<ClosingReview />}/>
                        <Route path="visit/visitWorkBench" element={<VisitWorkBench />}/>
                        
                        {/* 工作流模块 */}
                        <Route path="workflowTemplate" element={<WorkflowTemplate />} />
gz-customerSystem/src/styles/public.less
@@ -794,6 +794,19 @@
    }
}
//字节对话框
.arco-modal-simple {
    width: 400px;
    .arco-modal-header {
        padding: 0;
    }
    .arco-modal-header {
        text-align: right;
    }
}
//弹窗底部按钮
.dialogFooter {
    width: 100%;
gz-customerSystem/src/utils/selectOption.js
@@ -9,8 +9,7 @@
 */
// 事项来源
const caseCanal = [
  {
const caseCanal = [{
    value: '22_00001-1',
    label: '大厅来访',
  },
@@ -20,8 +19,7 @@
  }
];
// 来访形式
const visitWay = [
  {
const visitWay = [{
    value: '24_00002-1',
    label: '来访',
  },
@@ -31,8 +29,7 @@
  }
];
// 当事人地位
const personType = [
  {
const personType = [{
    value: '15_020008-1',
    label: '申请方当事人',
  },
@@ -50,8 +47,7 @@
  },
];
// 当事人类型
const personClass = [
  {
const personClass = [{
    value: '09_01001-1',
    label: '自然人',
  },
@@ -65,8 +61,7 @@
  },
];
//上传材料大类
const fileOwnerCat = [
  {
const fileOwnerCat = [{
    value: '22_00014-1',
    label: '申请材料',
  },
@@ -84,8 +79,7 @@
  },
];
//上传材料类型
const fileOwnerType = [
  {
const fileOwnerType = [{
    value: '22_00018-101',
    label: '申请材料',
  },
@@ -145,20 +139,27 @@
    value: '22_00018-513',
    label: '上报审核附件',
  },
  {
    value: '22_00018-302',
    label: '协议文书',
  },
  {
    value: '22_00018-514',
    label: '结案审核附件',
  },
];
// 附件上传人类型
const uploaderType = [
  {
const uploaderType = [{
    value: 1,
    label: '工作人员',
  },
  { value: 2,
  {
    value: 2,
    label: '当事人',
  },
];
// 性别
const sex = [
  {
const sex = [{
    value: '09_00003-1',
    label: '男',
  },
@@ -168,8 +169,7 @@
  },
];
// 证件类型
const cardType = [
  {
const cardType = [{
    value: '09_00015-1',
    label: '身份证',
  },
@@ -203,8 +203,7 @@
  },
];
// 民族
const nation = [
  {
const nation = [{
    value: '09_00005-1',
    label: '汉族',
  },
@@ -450,8 +449,7 @@
  },
];
// 委托类型
const agentType = [
  {
const agentType = [{
    value: '22_00004-1',
    label: '一般授权代理',
  },
@@ -469,8 +467,7 @@
  },
];
// 事项状态
const caseStatus = [
  {
const caseStatus = [{
    value: 1,
    label: '待签收',
  },
@@ -496,8 +493,7 @@
  },
];
// 事项进度
const process = [
  {
const process = [{
    value: 1,
    label: '来访登记',
  },
@@ -523,8 +519,7 @@
  },
];
// 调解结果
const mediResult = [
  {
const mediResult = [{
    value: '22_00025-1',
    label: '化解成功',
  },
@@ -534,8 +529,7 @@
  },
];
// 会议类型
const meetType = [
  {
const meetType = [{
    value: '22_00020-1',
    label: '纠纷调解会议',
  },
@@ -545,8 +539,7 @@
  },
];
// 会议方式
const meetWay = [
  {
const meetWay = [{
    value: '22_00021-3',
    label: '线上 + 线下',
  },
@@ -560,8 +553,7 @@
  },
];
// 调度类型
const dispType = [
  {
const dispType = [{
    value: '22_00012-1',
    label: '归口分流',
  },
@@ -571,8 +563,7 @@
  },
];
// 通用审核结果
const auditResult = [
  {
const auditResult = [{
    value: '24_00004-1', 
    label: '同意' 
  },
@@ -582,8 +573,7 @@
  },
];
// 委托关系
const agentRelate = [
  {
const agentRelate = [{
    value: '24_00007-1',
    label: '亲属',
  },
@@ -593,22 +583,17 @@
  },
];
// 企业类型
const enterpriseType = [
  {
const enterpriseType = [{
    value: '24_00008-1',
    label: '餐饮服务',
  },
];
}, ];
// 机构类型
const orgaType = [
  {
const orgaType = [{
    value: '24_00009-1',
    label: '志愿者服务',
  },
];
}, ];
//事项等级
const caseLevelList = [
  {
const caseLevelList = [{
    value: 1,
    label: '一级'
  },
@@ -625,8 +610,7 @@
// VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV 暂时用不到,防止以后会用的,先保留 VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
// 调解类型
const mediateType = [
  {
const mediateType = [{
    value: '22_00002-1',
    label: '人民调解',
  },
@@ -644,8 +628,7 @@
  },
];
// 代理人类型
const agentClass = [
  {
const agentClass = [{
    value: '09_01010-1',
    label: '律师',
  },
@@ -675,8 +658,7 @@
  },
];
// 职业
const job = [
  {
const job = [{
    value: '22_00003-1',
    label: '专业人士(教师/医生/律师等)',
  },
@@ -730,8 +712,7 @@
  },
];
// 通知方式
const noticeWay = [
  {
const noticeWay = [{
    value: '22_00023-1',
    label: '微信通知',
  },
@@ -741,8 +722,7 @@
  },
];
// 归档状态
const fileStatus = [
  {
const fileStatus = [{
    value: 0,
    label: '未归档',
  },
@@ -752,8 +732,7 @@
  },
];
// 任务节点执行者类型
const taskCandeType = [
  {
const taskCandeType = [{
    value: 1,
    label: '所有人',
  },
@@ -771,8 +750,7 @@
  },
];
// 实名认证状态
const realStatus = [
  {
const realStatus = [{
    value: 0,
    label: '未认证',
  },
@@ -782,8 +760,7 @@
  },
];
// 会议视频录制状态:1:录制转码中,2:已上传
const recordStatus = [
  {
const recordStatus = [{
    value: '1',
    label: '录制转码中',
  },
@@ -793,8 +770,7 @@
  },
];
// 涉及人群
const crowd = [
  {
const crowd = [{
    value: '22_00035-1',
    label: '未成年人',
  },
@@ -832,8 +808,7 @@
  },
];
// 纠纷来源
const caseSource = [
  {
const caseSource = [{
    value: '22_00036-2',
    label: '依申请调解',
  },
@@ -880,8 +855,7 @@
// 调解不予受理原因
const mediateError = [
  {
const mediateError = [{
    value: '22_00005-1',
    label: '人民法院已经受理或正在受理的',
  },
@@ -903,8 +877,7 @@
  },
];
// 拒绝签收原因
const refuseSign = [
  {
const refuseSign = [{
    value: '22_00009-1',
    label: '人民法院已经受理或正在受理的',
  },
@@ -934,8 +907,7 @@
  },
];
// 签收意见
const signResult = [
  {
const signResult = [{
    value: '22_00010-1',
    label: '同意签收',
  },
@@ -945,8 +917,7 @@
  },
];
// 调度来源
const dispSource = [
  {
const dispSource = [{
    value: '22_00011-1',
    label: '纠纷调度',
  },
@@ -968,8 +939,7 @@
  },
];
// 调度处理
const dispHandle = [
  {
const dispHandle = [{
    value: '22_00013-1',
    label: '正常调度',
  },
@@ -987,8 +957,7 @@
  },
];
// 调解参与人类型
const joinUserType = [
  {
const joinUserType = [{
    value: '22_00022-1',
    label: '调解员',
  },
@@ -1022,8 +991,7 @@
  },
];
// 人脸认证状态
const faceStatus = [
  {
const faceStatus = [{
    value: '1',
    label: '已认证',
  },
@@ -1033,8 +1001,7 @@
  },
];
// 司法确认进度
const judicProcess = [
  {
const judicProcess = [{
    value: '22_00029-1',
    label: '待审查',
  },
@@ -1060,8 +1027,7 @@
  },
];
// 司法确认状态
const judicStatus = [
  {
const judicStatus = [{
    value: '22_00029-1',
    label: '受理确认',
  },
@@ -1087,8 +1053,7 @@
  },
];
// 司法确认结果
const judicResult = [
  {
const judicResult = [{
    value: '22_00028-1',
    label: '已达成',
  },
@@ -1098,8 +1063,7 @@
  },
];
// 司法确认不予受理原因
const judicError = [
  {
const judicError = [{
    value: '22_00031-1',
    label: '不属于人民法院受理民事案件的范围',
  },
@@ -1121,26 +1085,36 @@
  },
];
// 司法确认退回原因
const judicReturn = [
  {
const judicReturn = [{
    value: '22_00032-1',
    label: '其他',
}, ];
// 系列案区别
const selectdata = [{
    value: '1',
    label: '非系列案'
  },
  {
    value: '2',
    label: '系列案'
  },
];
// 系列案区别
const selectdata = [
  { value: '1', label: '非系列案' },
  { value: '2', label: '系列案' },
];
// 履行情况
const fulfilSitu = [
  { value: '22_00008-1', label: '未履行' },
  { value: '22_00008-2', label: '当场履行' },
  { value: '22_00008-3', label: '分期履行' },
const fulfilSitu = [{
    value: '22_00008-1',
    label: '未履行'
  },
  {
    value: '22_00008-2',
    label: '当场履行'
  },
  {
    value: '22_00008-3',
    label: '分期履行'
  },
];
//调解不成功原因
const mediFalseCause = [
  {
const mediFalseCause = [{
    value: '22_00019-1',
    label: '当事人未能就调解协议达成一致',
  },
gz-customerSystem/src/views/filesCheck/newFileCheck.jsx
File was deleted
gz-customerSystem/src/views/register/closingReview/component/AssignedModel.jsx
File was deleted
gz-customerSystem/src/views/register/closingReview/component/BackModel.jsx
File was deleted
gz-customerSystem/src/views/register/closingReview/component/EscalationModel.jsx
File was deleted
gz-customerSystem/src/views/register/closingReview/component/EventFlow.jsx
File was deleted
gz-customerSystem/src/views/register/closingReview/component/Examine.jsx
File was deleted
gz-customerSystem/src/views/register/closingReview/component/ReviewExamine.jsx
New file
@@ -0,0 +1,269 @@
import React, { useRef, useState, useEffect } from 'react'
import { Row, Col, Space } from 'antd';
import { link, register } from '@/assets/images';
import { Form, Input, Button, Radio } from '@arco-design/web-react';
import ArcoUpload from '@/components/ArcoUpload';
import { Scrollbars } from "react-custom-scrollbars";
import ReviewProgress from './ReviewProgress';
import * as $$ from '@/utils/utility';
const RadioGroup = Radio.Group;
const FormItem = Form.Item;
const TextArea = Input.TextArea;
const appUrl = $$.appUrl;
function getData(data) {
  return $$.ax.request({ url: `caseTask/getWindupApplyInfo`, type: 'get', service: 'mediate', data });
}
function getId() {
  return $$.ax.request({ url: `caseUtils/getNewTimeId`, type: 'get', service: 'utils' });
}
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
function submit(data) {
  return $$.ax.request({ url: `caseTask/windupAudit`, type: 'post', service: 'mediate', data });
}
function getListCaseFlow(data) {
  return $$.ax.request({ url: `caseTask/listCaseFlow`, type: 'get', service: 'mediate', data });
}
export default function ReviewExamine(props) {
  const formRef = useRef();
  const [result, setResult] = useState()
  const [infoData, setInfoData] = useState({});
  const [id, setId] = useState();
  const [progressData, setProgressData] = useState({})
  const options = [
    {
      label: '材料不完整',
      value: '1'
    },
    {
      label: '办理流程有问题',
      value: '2'
    },
    {
      label: '当事人不满意调解结果',
      value: '3'
    },
    {
      label: '其他',
      value: '4'
    },
  ]
  useEffect(() => {
    getInfoData()
    getAppId()
    getProData()
  }, [])
  //获取id
  const getAppId = async () => {
    const res = await getId()
    if (res.type) {
      setId(res.data)
    }
  }
  //回显数据
  const getInfoData = async () => {
    const res = await getData({ caseTaskId: props.caseTaskId })
    if (res.type) {
      setInfoData(res.data || {})
    }
  }
  //获取流程信息
  const getProData = async () => {
    const res = await getListCaseFlow({
      caseId: props.caseId
    })
    if (res.type) {
      setProgressData(res.data)
    }
  }
  const handleSubmit = () => {
    if (formRef.current) {
      formRef.current.validate(undefined, (errors, values) => {
        if (!errors) {
          const { file, myNoUp, ...rest } = formRef.current.getFields()
          requestSubmit({
            id,
            caseId: props.caseId,
            caseTaskId: props.caseTaskId,
            ...rest
          })
        }
      })
    }
  }
  const requestSubmit = async (data) => {
    const res = await submit(data)
    if (res.type) {
      $$.infoSuccess({ content: '提交成功!' });
    }
  }
  //删除文件
  const handleDelFile = async (id) => {
    const res = await delFile(id)
    if (res.type) {
      $$.infoSuccess({ content: '删除成功!' });
    }
  }
  return (
    <div className='dataSync'>
      <div className='dataSync-noBackTabPage'>
        <Scrollbars style={{ height: '100%' }} autoHide>
          <div className='whiteBox'>
            <Space size='small'>
              <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>结案申请</h5>
            </Space>
            <Row gutter={[16, 16]}>
              <Col span={24}>
                <div><div className="title-text">化解结果</div></div>
                <div style={{ color: infoData.mediResult == '22_00025-1' ? '#00B42A' : '#F53F3F' }}>{infoData?.mediResultName || '-'}</div>
              </Col>
              <Col span={24}>
                <div><div className="title-text">无法化解理由</div></div>
                <div>{infoData?.failReason || '-'}</div>
              </Col>
              <Col span={24}>
                <div><div className="title-text">结案意见</div></div>
                <div>{infoData?.windupContent || '-'}</div>
              </Col>
              {/* <Col span={24}>
                <div><div className="title-text">是否转诉讼案件</div></div>
                <div>{infoData?.isProceeding || '-'}</div>
              </Col>
              <Col span={24}>
                <div><div className="title-text">诉讼案号</div></div>
                <div>{infoData?.proceeding || '-'}</div>
              </Col> */}
              <Col span={24}>
                <div><div className="title-text">申请时间</div></div>
                <div>{infoData?.applyTime || '-'}</div>
              </Col>
              <Col span={24}>
                <div><div className="title-text">申请人</div></div>
                <div>
                  {infoData?.applyUnitName}&nbsp;&nbsp;
                  {infoData?.applyUserName}
                  <img src={register} alt="" className="title-register" />
                </div>
              </Col>
            </Row>
          </div>
          <div style={{ display: 'flex', marginTop: '8px' }}>
            <div className='whiteBox' style={{ flex: 1, marginRight: '8px' }}>
              <Space size='small'>
                <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>审核</h5>
              </Space>
              <Form
                ref={formRef}
                layout='vertical'
                requiredSymbol={false}
                initialValues={{
                }}//默认值
                scrollToFirstError
              >
                <Row>
                  <Col span={24}>
                    <FormItem
                      label={(<div style={{ display: 'flex' }}>审核结果</div>)}
                      field='auditResult'
                    >
                      <RadioGroup
                        direction='vertical'
                        options={$$.options.auditResult}
                        onChange={(value) => {
                          setResult(value)
                          if (value) {
                            const data = $$.options.auditResult.find(item => item.value === value)
                            formRef.current.setFieldValue('auditResultName', data.label)
                          } else {
                            formRef.current.setFieldValue('auditResultName', '')
                          }
                        }}
                      />
                    </FormItem>
                  </Col>
                  {result === '24_00004-2' &&
                    <>
                      <Col span={24}>
                        <FormItem
                          label={(<div style={{ display: 'flex' }}>理由说明<div className="must">必填</div></div>)}
                          field='myNoUp'
                          rules={[{ required: true, message: '请选择理由说明' }]}
                        >
                          <RadioGroup
                            direction='vertical'
                            options={options}
                            onChange={(value) => {
                              const obj = options.find(item => item.value === value)
                              formRef.current.setFieldValue('audit_content', obj.label)
                            }}
                          >
                          </RadioGroup>
                        </FormItem>
                      </Col>
                      <Col span={24}>
                        <FormItem
                          label=' '
                          field='audit_content'
                          rules={[{ required: true, message: '理由不能为空' }]}
                        >
                          <TextArea
                            autoSize={{ minRows: 4, maxRows: 8 }}
                            placeholder='请填写回退的具体理由'
                          />
                        </FormItem>
                      </Col>
                      <Col span={24} className="doubleFile">
                        <ArcoUpload
                          params={{
                            action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.caseId}&ownerId=${id}&ownerType=22_00018-514`,
                          }}
                          field='file'
                          label='附件材料'
                          handleDelFile={handleDelFile}
                        />
                      </Col>
                    </>
                  }
                </Row>
              </Form>
              <div className='dialogFooter'>
                <Button
                  type="primary"
                  className="dialogPrimary"
                  onClick={handleSubmit}
                >
                  提交
                </Button>
              </div>
            </div>
            {
              (infoData.caseLevel === 1 || infoData.caseLevel === 2) &&
              <div className='whiteBox' style={{ width: '400px' }}>
                <Space size='small'>
                  <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>审核进度</h5>
                </Space>
                <ReviewProgress progressData={progressData} />
              </div>
            }
          </div>
        </Scrollbars>
      </div>
    </div>
  )
}
gz-customerSystem/src/views/register/closingReview/component/ReviewProgress.jsx
@@ -1,86 +1,30 @@
import React from 'react';
import { register } from '@/assets/images';
import * as $$ from '@/utils/utility';
export default function ReviewProgress(props) {
  const fakeData = [
    {
      handlerUserName: '天河区棠下街综治中心',
      finishTime: new Date().getTime() - 24 * 60 * 60 * 1000, // 一天前的时间
      handleResult: '1',
      status: '2',
      taskNodeName: '来访登记',
      mediResult: '22_00025-1',
      handleContent: '调解成功,双方达成一致意见。',
      operationName: '李晓明'
    },
    {
      handlerUserName: '系统派单',
      finishTime: new Date().getTime() - 12 * 60 * 60 * 1000, // 半天前的时间
      handleResult: '1',
      status: '2',
      taskNodeName: '事件流转',
      mediResult: '22_00025-1',
      handleContent: '派单至:白云区新市街市场监管所',
    },
    {
      handlerUserName: '白云区新市街市场监管所',
      finishTime: new Date().getTime() - 11 * 60 * 60 * 1000, // 半天前的时间
      handleResult: '1',
      status: '2',
      taskNodeName: '事件流转',
      mediResult: '22_00025-1',
      handleContent: '已签收',
      operationName: '赵菲菲'
    },
    {
      handlerUserName: '白云区新市街市场监管所',
      finishTime: new Date().getTime() - 10 * 60 * 60 * 1000, // 半天前的时间
      handleResult: '1',
      status: '3',
      taskNodeName: '事件回退',
      mediResult: '22_00025-1',
      // handleContent: '已签收',
      operationName: '赵菲菲'
    },
    {
      handlerUserName: '白云区新市街综治中心',
      finishTime: new Date().getTime() - 9 * 60 * 60 * 1000, // 半天前的时间
      handleResult: '1',
      status: '2',
      taskNodeName: '回退审核',
      mediResult: '22_00025-1',
      handleContent: '通过',
      operationName: '赵菲菲'
    },
    {
      handlerUserName: '白云区综治中心',
      finishTime: new Date().getTime() - 6 * 60 * 60 * 1000, // 6小时前的时间
      handleResult: '2',
      status: '1',
      taskNodeName: '审核中',
      mediResult: '22_00025-1',
      handleContent: '案件已被签收,准备开始调解。',
      operationName: '李晓明'
    },
  ];
  return (
    <div className='reviewProgress'>
      {fakeData.map((item, index) => {
        const flag = index + 1 === fakeData.length
      {props.progressData['handleCaseFlowList']?.map((item, index) => {
        const flag = index + 1 === props.progressData['handleCaseFlowList'].length
        return <div style={{ display: 'flex' }}>
          <div style={{ marginRight: '10px' }}>
            <div className='reviewCircle' style={flag ? { borderColor: '#EF6C24' } : {}}></div>
            {!flag && <div className='reviewLine'></div>}
          </div>
          <div>
            <div className='deepTitle'>{item.handlerUserName}({item.taskNodeName})</div>
            <div className='deepTitle'>{item.handleUnitName}({item.nodeShowName})</div>
            {!flag &&
              <>
                <div className='shallowTitle'>
                  操作人:<span>{item.operationName}<img src={register} alt="" className="title-register" /></span>
                {
                  item.handleUserName && <div className='shallowTitle'>
                    操作人:<span>{item.handleUserName}<img src={register} alt="" className="title-register" /></span>
                </div>
                }
                <div className='shallowTitle'>
                  操作时间:<span>{item.mediResult}</span>
                  操作时间:<span>{$$.timeFormat(item.handleTime)}</span>
                </div>
                <div style={{ height: '34px' }}></div>
              </>
@@ -89,7 +33,6 @@
        </div>
      })}
    </div>
  )
}
gz-customerSystem/src/views/register/closingReview/index.jsx
@@ -1,49 +1,84 @@
/*
 * @Author: dminyi 1301963064@qq.com
 * @Date: 2024-08-09 09:59:43
 * @LastEditors: dminyi 1301963064@qq.com
 * @LastEditTime: 2024-08-31 17:13:53
 * @FilePath: \gzDyh\gz-customerSystem\src\views\basicInformation\organization\index.jsx
 * @Description: 来访登记
 */
import React, { useState, useRef, Fragment } from "react";
import React, { useState, useRef, Fragment, useEffect } from "react";
import NewPage from '@/components/NewPage';
import * as $$ from '@/utils/utility';
import "@arco-themes/react-gzzz/css/arco.css";
import '../index.less';
import { Steps, Tabs } from '@arco-design/web-react';
import { examine, Matter, transfer } from '@/assets/images'
import EventFlow from './component/EventFlow';
import MatterDetail from '../matterDetail';
import Examine from "./component/Examine";
import { Tabs } from '@arco-design/web-react';
import { examine, Matter, transfer, applyRecord } from '@/assets/images'
import EventFlow from '../eventFlow/component/EventFlow';
import ApplyInfo from "../matterDetail/ApplyInfo";
import { useParams } from 'react-router-dom';
import ReviewExamine from './component/ReviewExamine';
const Step = Steps.Step;
const TabPane = Tabs.TabPane;
function getTabButton(data) {
    return $$.ax.request({ url: `caseTask/getTabButton`, type: 'get', service: 'mediate', data });
}
const Organization = () => {
    const [current, setCurrent] = useState(2);
    const [tabsActive, setTabsActive] = useState('3');
    const [tabsList, setTabList] = useState([
const myTab = [
        {
            img: Matter,
            label: '事项详情',
            key: '1'
        key: 'sxxq',
        },
        {
            img: transfer,
            label: '流转办理',
            key: '2',
            isNeedStep: true,//加上这个就有进度条
        img: applyRecord,
        label: '申请记录',
        key: 'sqjl',
        },
        {
            img: examine,
            label: '审核',
            key: '3',
        label: '结案审核',
        key: 'jash',
        },
    ])
]
const ClosingReview = () => {
    const routeData = useParams();
    const [authorData, setAuthorData] = useState({});
    const [tabsList, setTabsList] = useState([]);
    const [tabsActive, setTabsActive] = useState();
    useEffect(() => {
        getAuthor()
    }, [])
    //获取权限tab和按钮权限
    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就不展示
            } else {
                setTabsList(myTab.filter(item => {
                    const flag = tabList.some(result => {
                        if (result.id === item.key) {
                            return true
                        }
                    })
                    return flag
                }))
                setTabsActive(tabList[0].id)
            }
        }
    }
    //根据id定义组件
    const getTypeDom = (key) => {
        if (key === 'dslxq' || key === 'sxxq') {
            return <EventFlow authorData={authorData} caseId={routeData.caseId} />
        }
        if (key === 'sqjl') {
            return <ApplyInfo />
        }
        if (key === 'jash') {
            return <ReviewExamine caseTaskId={routeData.caseTaskId} caseId={routeData.caseId} />
        }
    }
    return (
        <div style={{ position: 'relative' }}>
@@ -53,9 +88,9 @@
                }
            >
                <Tabs
                    activeTab={tabsActive}
                    onChange={(v) => setTabsActive(v)}
                    className='myTabContent'
                    activeTab={tabsActive}
                >
                    {tabsList?.map(item => {
                        return <TabPane
@@ -67,21 +102,7 @@
                                </span>
                            }
                        >
                            {
                                item.isNeedStep && <div style={{ backgroundColor: '#fff', margin: '0 16px 0px 16px', paddingTop: '16px', paddingLeft: '91px' }}>
                                    <Steps type='navigation' current={current}>
                                        <Step title='来访登记' disabled />
                                        <Step title='事件流转' disabled />
                                        <Step title='办理反馈' disabled />
                                        <Step title='结案审核' disabled />
                                        <Step title='当事人评价' disabled />
                                        <Step title='结案归档' disabled />
                                    </Steps>
                                </div>
                            }
                            {tabsActive === '1' && <MatterDetail />}
                            {tabsActive === '2' && <EventFlow />}
                            {tabsActive === '3' && <Examine />}
                            {getTypeDom(item.key)}
                        </TabPane>
                    })}
                </Tabs>
@@ -90,4 +111,4 @@
    )
}
export default Organization;
export default ClosingReview;
gz-customerSystem/src/views/register/eventFlow/component/AssignedModel.jsx
@@ -16,7 +16,7 @@
}
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
export default function BackModel(props) {
gz-customerSystem/src/views/register/eventFlow/component/BackModel.jsx
@@ -15,7 +15,7 @@
}
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
function returnApply(data) {
@@ -134,7 +134,7 @@
            <Col span={24} className="doubleFile">
              <ArcoUpload
                params={{
                  action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.caseId}&ownerId=${id}&ownerType=22_00018-520`,
                  action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.caseId}&ownerId=${id}&ownerType=22_00018-510`,
                }}
                field='file'
                label='附件材料'
gz-customerSystem/src/views/register/eventFlow/component/EscalationModel.jsx
@@ -15,7 +15,7 @@
}
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
function appearApply(data) {
gz-customerSystem/src/views/register/eventFlow/component/EventFlow.jsx
@@ -18,12 +18,29 @@
    return $$.ax.request({ url: `caseTask/listCaseFlow`, type: 'get', service: 'mediate', data });
}
function accept(data) {
  return $$.ax.request({ url: `caseTask/accept`, type: 'post', service: 'mediate', data });
}
export default function EventFlow(props) {
  const myButton = [
    {
      label: '受理',
      type: 'primary',
      click: () => { },
      click: () => {
        Modal.confirm({
          title: '受理确认',
          content: '确认受理该事件?',
          onOk: async () => {
            const res = await accept({
              caseTaskId: props.caseTaskId
            })
            if(res.type) {
              $$.infoSuccess({ content: '受理成功!' });
            }
          },
        });
      },
      key: 'sl',
    },
    {
gz-customerSystem/src/views/register/eventFlow/component/Examine.jsx
@@ -1,26 +1,106 @@
import React, { useRef } from 'react'
import React, { useRef, useEffect, useState } from 'react'
import { Row, Col, Space } from 'antd';
import { link, register } from '@/assets/images';
import { Form, Input, Button, Radio } from '@arco-design/web-react';
import ArcoUpload from '@/components/ArcoUpload';
import { Scrollbars } from "react-custom-scrollbars";
import * as $$ from '@/utils/utility';
const RadioGroup = Radio.Group;
const FormItem = Form.Item;
const TextArea = Input.TextArea;
const appUrl = $$.appUrl;
function getData(type, data) {
  let url = type === 'htsh' ? `caseTask/getReturnApplyInfo` : `caseTask/getAppearApplyInfo`
  return $$.ax.request({ url: url, type: 'get', service: 'mediate', data });
}
function submit(type, data) {
  let url = type === 'htsh' ? `caseTask/returnAudit` : `caseTask/appearAudit`
  return $$.ax.request({ url: url, type: 'post', service: 'mediate', data });
}
function getId() {
  return $$.ax.request({ url: `caseUtils/getNewTimeId`, type: 'get', service: 'utils' });
}
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
export default function Examine(props) {
  const formRef = useRef();
  const infoData = {
    reason: '已经与双方当事人沟通,其中被申请方反应所谓的“个性化学习计划”费用是得到了白云区教育局的批准,而该费用收取是否合理,本部门无法判断',
    file: '广东明智教育培训机构资质合理性调查记录.pdf',
    time: '2024-7-21 12:00',
    people: '白云区新市街市场监管所',
    person: '张晓霞',
  const [infoData, setInfoData] = useState({});
  const [id, setId] = useState();
  const mainFlag = props.type == 'htsh' ? 'return' : 'appear'
  const options = [
    {
      label: '回退理由不充分',
      value: '0'
    },
    {
      label: '回退延迟',
      value: '1'
    },
    {
      label: '其他',
      value: '2'
    },
  ]
  useEffect(() => {
    getInfoData()
    getAppId()
  }, [props.type])
  //获取id
  const getAppId = async () => {
    const res = await getId()
    if (res.type) {
      setId(res.data)
    }
  }
  //回显数据
  const getInfoData = async () => {
    const res = await getData(props.type, {
      caseTaskId: props.caseTaskId
    })
    if (res.type) {
      setInfoData(res.data || {})
    }
  }
  const handleSubmit = () => {
    if (formRef.current) {
      formRef.current.validate(undefined, (errors, values) => {
        if (!errors) {
          const { file, myNoUp, ...rest } = formRef.current.getFields()
          requestSubmit({
            id,
            caseId: props.caseId,
            caseTaskId: props.caseTaskId,
            ...rest
          })
        }
      })
    }
  }
  const requestSubmit = async (data) => {
    const res = await submit(props.type, data)
    if (res.type) {
      $$.infoSuccess({ content: '提交成功!' });
    }
  }
  //删除文件
  const handleDelFile = async (id) => {
    const res = await delFile(id)
    if (res.type) {
      $$.infoSuccess({ content: '删除成功!' });
    }
  }
  return (
@@ -28,24 +108,30 @@
      <div className='dataSync-noBackTabPage'>
        <div className='whiteBox'>
          <Space size='small'>
            <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>回退申请</h5>
            <div className='MediationInfo-subTitle' style={{ marginTop: '-8px' }}></div><h5>{props.type === 'htsh' ? '回退申请' : '上报申请'}</h5>
          </Space>
          <Row gutter={[16, 16]}>
            <Col span={24}>
              <div><div className="title-text">回退理由</div></div>
              <div>{infoData?.reason || '-'}</div>
              <div><div className="title-text">{props.type === 'htsh' ? '回退理由' : '上报理由'}</div></div>
              <div>{infoData[mainFlag + 'Content'] || '-'}</div>
            </Col>
            <Col span={24}>
              <div><div className="title-text">附件材料</div></div>
              <div style={{ color: '#1A6FB8' }}><img src={link} alt="" className="title-file" />{infoData?.file || '-'}</div>
              <div style={{ color: '#1A6FB8' }}>
                <img src={link} alt="" className="title-file" />{infoData?.file || '-'}
              </div>
            </Col>
            <Col span={24}>
              <div><div className="title-text">申请时间</div></div>
              <div>{infoData?.time || '-'}</div>
              <div>{infoData[mainFlag + 'Time'] || '-'}</div>
            </Col>
            <Col span={24}>
              <div><div className="title-text">申请人</div></div>
              <div>{infoData?.people}&nbsp;&nbsp;{infoData?.person}<img src={register} alt="" className="title-register" /></div>
              <div>
                {infoData[mainFlag + 'UnitName']}&nbsp;&nbsp;
                {infoData[mainFlag + 'UserName'] || '-'}
                <img src={register} alt="" className="title-register" />
              </div>
            </Col>
          </Row>
        </div>
@@ -66,48 +152,43 @@
                <Col span={24}>
                  <FormItem
                    label={(<div style={{ display: 'flex' }}>审核结果</div>)}
                    field='result'
                    field='auditResult'
                  >
                    <RadioGroup direction='vertical' options={[
                      {
                        label: '同意',
                        value: 1
                      },
                      {
                        label: '不同意',
                        value: 0
                      },
                    ]}>
                    </RadioGroup>
                    <RadioGroup
                      direction='vertical'
                      options={$$.options.auditResult}
                      onChange={(value) => {
                        if (value) {
                          const data = $$.options.auditResult.find(item => item.value === value)
                          formRef.current.setFieldValue('auditResultName', data.label)
                        } else {
                          formRef.current.setFieldValue('auditResultName', '')
                        }
                      }}
                    />
                  </FormItem>
                </Col>
                <Col span={24}>
                  <FormItem
                    label={(<div style={{ display: 'flex' }}>理由说明<div className="must">必填</div></div>)}
                    field='trueName'
                    field='myNoUp'
                    rules={[{ required: true, message: '请选择理由说明' }]}
                  >
                    <RadioGroup direction='vertical' options={[
                      {
                        label: '回退理由不充分',
                        value: '0'
                      },
                      {
                        label: '回退延迟',
                        value: '1'
                      },
                      {
                        label: '其他',
                        value: '2'
                      },
                    ]}>
                    <RadioGroup
                      direction='vertical'
                      options={options}
                      onChange={(value) => {
                        const obj = options.find(item => item.value === value)
                        formRef.current.setFieldValue('audit_content', obj.label)
                      }}
                    >
                    </RadioGroup>
                  </FormItem>
                </Col>
                <Col span={24}>
                  <FormItem
                    label=' '
                    field='luyou'
                    field='audit_content'
                    rules={[{ required: true, message: '理由不能为空' }]}
                  >
                    <TextArea
@@ -119,10 +200,11 @@
                <Col span={24} className="doubleFile">
                  <ArcoUpload
                    params={{
                      action: ``,
                      action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.caseId}&ownerId=${id}&ownerType=${props.type == 'htsh' ? '22_00018-511' : '22_00018-513'}`,
                    }}
                    field='file'
                    label='附件材料'
                    handleDelFile={handleDelFile}
                  />
                </Col>
              </Row>
gz-customerSystem/src/views/register/eventFlow/index.jsx
@@ -1,12 +1,3 @@
/*
 * @Author: dminyi 1301963064@qq.com
 * @Date: 2024-08-09 09:59:43
 * @LastEditors: dminyi 1301963064@qq.com
 * @LastEditTime: 2024-08-31 17:13:53
 * @FilePath: \gzDyh\gz-customerSystem\src\views\basicInformation\organization\index.jsx
 * @Description: 来访登记
 */
import React, { useState, useRef, Fragment, useEffect } from "react";
import NewPage from '@/components/NewPage';
import * as $$ from '@/utils/utility';
@@ -51,16 +42,6 @@
        img: examine,
        label: '上报审核',
        key: 'sbsh',
    },
    {
        img: examine,
        label: '结案审核',
        key: 'jash',
    },
    {
        img: examine,
        label: '联合处置申请审核',
        key: 'lhczsh',
    },
]
const Organization = () => {
@@ -107,8 +88,8 @@
        if (key === 'sqjl') {
            return <ApplyInfo />
        }
        if (key === 'htsh' || key === 'sbsh' || key === 'jash' || key === 'lhczsh') {
            return <Examine type={key} />
        if (key === 'htsh' || key === 'sbsh' || key === 'lhczsh') {
            return <Examine type={key} caseTaskId={routeData.caseTaskId} caseId={routeData.caseId} />
        }
    }
gz-customerSystem/src/views/register/handleFeedback/component/AuditView.jsx
@@ -12,7 +12,7 @@
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
gz-customerSystem/src/views/register/handleFeedback/component/CaseResult.jsx
@@ -2,33 +2,42 @@
 * @Author: dminyi 1301963064@qq.com
 * @Date: 2024-09-02 14:49:13
 * @LastEditors: dminyi 1301963064@qq.com
 * @LastEditTime: 2024-09-03 14:44:14
 * @LastEditTime: 2024-09-08 18:25:54
 * @FilePath: \gzDyh\gz-customerSystem\src\views\register\handleFeedback\component\CaseResult.jsx
 * @Description: 结案申请
 */
import React, { useState } from 'react';
import React, { useState, useRef } from 'react';
import { Modal, Form, Select, Upload, Input } from '@arco-design/web-react';
import { Col, Space, Button, Tooltip, Radio } from 'antd';
import { Col, Space, Button, Tooltip, Radio, Row } from 'antd';
import DocumentScanner from '../../matterDetail/FileUpLoad'
import { scan } from '@/assets/images/icon'
import { tip, question1 } from '@/assets/images'
import { NoHandleReason } from '../../visit/component/levelDetail'
import ArcoUpload from '../../../../components/ArcoUpload'
import { NoHandleReason } from '../../visit/component/levelDetail';
import ModeSelect from '../../matterDetail/ModeSelect'
import * as $$ from '@/utils/utility';
const appUrl = $$.appUrl;
const FormItem = Form.Item;
const CaseResult = ({ visible = false, handleOnCancel }) => {
function windupApplyApi(data) {
  return $$.ax.request({ url: `caseTask/windupApply`, type: 'post', service: 'mediate', data });
}
const CaseResult = ({ visible = false, handleOnCancel, caseResultId, caseId }) => {
  const formRef = useRef();
  const formRefWrite = useRef();
  const failRef = useRef();
  const [selectedTab, setSelectedTab] = useState('1'); // 默认选中第一个 tab
  const [scanFile, setScanFile] = useState(false);
  const [selectedTab1, setSelectedTab1] = useState('1'); // 默认选中第一个 tab
  const [fileTip, setFileTip] = useState('0');
  const [value, setValue] = useState(1)
  const [noHandleReason, setNoHandleReason] = useState(false);
  const [radioValue, setRadioValue] = useState(1)
  const [radioValue, setRadioValue] = useState(1);
  const [mode, setMode] = useState(false)
  const tabs = [
    { index: '1', label: '化解成功' },
@@ -54,9 +63,11 @@
    setSelectedTab1(newTabIndex);
  };
  const handleConfirm = () => {
  const handleConfirm = (scanContent) => {
    // 处理确认逻辑
    formRef.current.setFieldValue('agreeContent', scanContent)
    setScanFile(false);
  };
  const handleCancel = () => {
@@ -69,10 +80,59 @@
    setRadioValue(e.target.value);
  };
  const handleSubmit = () => {
    if (value === 1) {
      const data = formRef?.current.getFields()
      console.log(data, 'handleSubmit')
      windupApply(data)
    }
    if (value === 2) {
      const data = formRefWrite?.current.getFields()
      console.log(data, 'handleSubmit')
      windupApply(data)
    }
    if (selectedTab === '2') {
      const data = failRef?.current.getFields()
      console.log(data, 'handleSubmit')
      // windupApply(data)
    }
  }
  const handleSubmit1 = () => {
    if (selectedTab === '2') {
      const data = failRef?.current.getFields()
      console.log(data, 'handleSubmit')
      windupApply(data)
    }
  }
  const windupApply = async (submitData) => {
    const res = await windupApplyApi({
      caseResultId: caseResultId,
      ...submitData
    })
    if (res.type) {
      $$.infoSuccess({ content: '提交成功' });
      handleOnCancel()
    }
  }
  return (
    <>
      <Modal visible={visible} onCancel={handleOnCancel} title='申请结案' centered footer={null} style={{ overflow: 'auto' }}>
      <Modal
        visible={visible}
        onCancel={handleOnCancel}
        title='申请结案'
        centered
        footer={null}
        style={{ overflow: 'auto' }}
        unmountOnExit={true}
        maskClosable={false}
      >
        <div className='caseResult-title'>化解结果</div>
        <div className='caseResult-tabs'>
          {tabs.map((tab) => (
@@ -91,13 +151,14 @@
            </div>
          ))}
        </div>
        {/*化解成功*/}
        {selectedTab === '1' &&
          <Form
            layout='vertical'
            scrollToFirstError={true}
            requiredSymbol={false}
            initialValues={{
              caseLevel: 1,
              agreeType: 1,
            }} //默认值
          >
            <Col span={8}>
@@ -106,15 +167,22 @@
                  达成的协议类型
                </div>
                }
                field='caseLevel'
                field='agreeType'
              >
                <Select options={agreement} onChange={(v) => { setValue(v); console.log(typeof v, 'vvv') }}>
                </Select>
              </FormItem>
            </Col>
            {/*口头协议 */}
            {value === 1 &&
              <>
                <Form
                  ref={formRef}
                  layout='vertical'
                  requiredSymbol={false}
                  scrollToFirstError={true}
                >
                  <Row>
                <Col span={24}>
                  <FormItem
                    label={
@@ -129,22 +197,19 @@
                          <img src={tip} alt='' style={{ width: '16px', marginRight: '8px' }} />
                          <span>协议要点应尽量简洁,当事人大厅来访或小程序线上反映问题时,可在小程序中查看到填写的协议要点内容</span>
                        </div>
                            <div className='modeMore'>
                              <div className='caseResult-textarea'>公共模板1:调解成功口头协议</div>
                              <div style={{ color: '#1A6FB8' }} onClick={() => setMode(!mode)}>更多模板</div>
                            </div>
                      </>
                    }
                    field='caseDes'
                    rules={[{ message: '请填写事项概况', required: true }]}
                        field='agreeContent'
                  >
                    <div className='caseResult-textarea'>公共模板1:调解成功口头协议</div>
                    <Input.TextArea
                      rows={5}
                      maxLength={{ length: 200, errorOnly: true }}
                      showWordLimit
                      wrapperStyle={{ width: '100%' }}
                      value='根据纠纷化解人员的协调,当事人双方同意如下调解协议:
                                  [简要说明协议第一条]
                                  [简要说明协议第二条]
                                  [……]
                                  本口头调解协议由纠纷化解人员记录,并已告知双方当事人。双方当事人确认无误。'
                    />
                  </FormItem>
                </Col>
@@ -156,11 +221,7 @@
                          结案意见
                          <div className="must" style={{ marginLeft: '4px' }}>必填</div>
                        </div>
                      </>
                    }
                    field='caseDes'
                    rules={[{ message: '请填写事项概况', required: true }]}
                  >
                            <div className='modeMore'>
                    <div className='tabs1' >
                      {tabs1.map((tab) => (
                        <div
@@ -178,20 +239,33 @@
                        </div>
                      ))}
                    </div>
                              <div style={{ color: '#1A6FB8' }} onClick={() => setMode(!mode)}>更多模板</div>
                            </div>
                          </>
                        }
                        field='windupContent'
                      >
                    <Input.TextArea
                      rows={5}
                      wrapperStyle={{ width: '100%' }}
                      value='鉴于以上协议内容已经双方确认,并认为该协议内容公平合理,能够妥善解决双方的纠纷。建议双方当事人按照协议内容执行,以实现纠纷的最终解决。'
                    />
                  </FormItem>
                </Col>
                  </Row>
                </Form>
              </>
            }
            {/*书面协议 */}
            {value === 2 &&
              <>
                <Form
                  ref={formRefWrite}
                  layout='vertical'
                  requiredSymbol={false}
                  scrollToFirstError={true}
                >
                  <Row>
                <Col span={24}>
                  <FormItem
                    label={
@@ -209,59 +283,14 @@
                    field='caseDes'
                    rules={[{ message: '请填写事项概况', required: true }]}
                  >
                    <Upload
                      drag
                      multiple
                      accept='image/*'
                      action='/'
                      height={158}
                      onDrop={(e) => {
                        <ArcoUpload
                          params={{
                            action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${caseId}&ownerId=${caseResultId}&ownerType=22_00018-302`,
                      }}
                      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='根据纠纷化解人员的协调,当事人双方同意如下调解协议:
                                  [简要说明协议第一条]
                                  [简要说明协议第二条]
                                  [……]
                                  本口头调解协议由纠纷化解人员记录,并已告知双方当事人。双方当事人确认无误。'
                          field='file'
                          label='代理人委托书'
                          // editData={props.editData}
                          ownerType='22_00018-302'
                    />
                  </FormItem>
                </Col>
@@ -273,11 +302,7 @@
                          结案意见
                          <div className="must" style={{ marginLeft: '4px' }}>必填</div>
                        </div>
                      </>
                    }
                    field='caseDes'
                    rules={[{ message: '请填写事项概况', required: true }]}
                  >
                            <div className='modeMore'>
                    <div className='tabs1' >
                      {tabs1.map((tab) => (
                        <div
@@ -295,7 +320,32 @@
                        </div>
                      ))}
                    </div>
                              <div style={{ color: '#1A6FB8' }} onClick={() => setMode(!mode)}>更多模板</div>
                            </div>
                          </>
                        }
                        field='windupContent'
                        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%' }}
@@ -303,74 +353,91 @@
                    />
                  </FormItem>
                </Col>
                  </Row>
                </Form>
              </>
            }
            <Space style={{ marginBottom: '16px' }}>
              <Button type='primary'>提交</Button>
              <Button type='primary' onClick={handleSubmit}>提交</Button>
              <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }}>保存</Button>
            </Space>
          </Form>
        }
        {/*化解不成功*/}
        {selectedTab === '2' &&
          <Form
            ref={failRef}
            layout='vertical'
            requiredSymbol={false}
            scrollToFirstError={true}
            initialValues={{
              caseLevel: 3,
            }}//默认值
          >
            <Col span={24}>
              <FormItem
                label={<div style={{ display: 'flex' }}>
              <div style={{ display: 'flex', marginBottom: '16px' }}>
                  无法化解理由
                  <Tooltip onClick={() => setNoHandleReason(!noHandleReason)}>
                    <img src={question1} alt="" style={{ width: '13px', height: '13px', margin: '4px 4px 0px 4px' }} />
                  </Tooltip>
                  <div className="must" style={{ marginLeft: '4px' }}>必填</div>
                </div>
                }
                field='caseDes'
                rules={[{ message: '请填写事项概况', required: true }]}
              >
                <table border="1" align="center" cellpadding="8" className="table">
                <tr>
                  <th bgcolor="#F7F8FA" className="table-title" width="120">当事人的主要诉求</th>
                  <td>
                    <div>
                      鉴于上述情况,申请方希望综治中心可以帮忙解决:<br />
                      1. 请求判决被申请人张三立即偿还借款本金人民币20万元整;<br />
                      2. 请求判决被申请人支付自借款之日起至实际还款之日止按合同约定的年利率计算的利息;
                    </div>
                  </td>
                </tr>
                  <tr>
                    <th bgcolor="#F7F8FA" className="table-title" width="120">调解过程中提供的解决方案</th>
                    <td>
                    <FormItem
                      label=''
                      field='failReason1'
                    >
                      <Input.TextArea
                        showWordLimit
                        rows={3}
                        placeholder='请完整描述事项概况,应具备5要素:发生时间+发生地点+人物情况+事项起因+事项经过'
                        wrapperStyle={{ width: '100%' }}
                      />
                    </FormItem>
                    </td>
                  </tr>
                  <tr>
                    <th bgcolor="#F7F8FA" className="table-title">调解过程中的主要分歧点</th>
                    <td>
                    <FormItem
                      label=''
                      field='failReason2'
                    >
                      <Input.TextArea
                        showWordLimit
                        rows={3}
                        placeholder='请完整描述事项概况,应具备5要素:发生时间+发生地点+人物情况+事项起因+事项经过'
                        wrapperStyle={{ width: '100%' }}
                      />
                    </FormItem>
                    </td>
                  </tr>
                  <tr>
                    <th bgcolor="#F7F8FA" className="table-title">最终难以调和的原因</th>
                    <td>
                    <FormItem
                      label=''
                      field='failReason3'
                    >
                      <Input.TextArea
                        showWordLimit
                        rows={3}
                        placeholder='请完整描述事项概况,应具备5要素:发生时间+发生地点+人物情况+事项起因+事项经过'
                        wrapperStyle={{ width: '100%' }}
                      />
                    </FormItem>
                    </td>
                  </tr>
                </table>
              </FormItem>
            </Col>
            <Col span={24}>
              <FormItem
@@ -380,12 +447,15 @@
                      结案意见
                      <div className="must" style={{ marginLeft: '4px' }}>必填</div>
                    </div>
                    <div className='modeMore'>
                      <div className='caseResult-textarea'>公共模板:化解不成功结案意见范本</div>
                      <div style={{ color: '#1A6FB8' }} onClick={() => setMode(!mode)}>更多模板</div>
                    </div>
                  </>
                }
                field='caseDes'
                field='windupContent'
                rules={[{ message: '请填写事项概况', required: true }]}
              >
                <div className='caseResult-textarea'>公共模板1:化解不成功结案意见范本</div>
                <Input.TextArea
                  rows={5}
                  wrapperStyle={{ width: '100%' }}
@@ -393,29 +463,8 @@
                />
              </FormItem>
            </Col>
            <Col span={24}>
              <FormItem
                label='是否转诉讼案件'
                field='caseDes'
              >
                <Radio.Group onChange={onChange} value={radioValue}>
                  <Space direction="vertical">
                    <Radio value={1}>否</Radio>
                    <Radio value={2}>是</Radio>
                  </Space>
                </Radio.Group>
              </FormItem>
            </Col>
            <Col span={24}>
              <FormItem
                label='是否转诉诉讼案号讼案件'
                field='caseDes'
              >
                <Input style={{ width: 350 }} placeholder='请输入法院立案号' />
              </FormItem>
            </Col>
            <Space style={{ marginBottom: '16px' }}>
              <Button type='primary'>提交</Button>
              <Button type='primary' onClick={handleSubmit1}>提交</Button>
              <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }}>保存</Button>
            </Space>
          </Form>
@@ -430,6 +479,8 @@
        visible={noHandleReason}
        onClose={() => setNoHandleReason(false)}
      />
      <ModeSelect onCancel={() => setMode(false)} mode={mode} />
    </>
  )
}
gz-customerSystem/src/views/register/handleFeedback/component/handle.jsx
@@ -1,4 +1,5 @@
import React, { useState, useRef, useEffect } from 'react';
import { useParams } from 'react-router-dom';
import { Col, Space, Row, Tooltip } from 'antd';
import { register, aiPerson } from '@/assets/images';
import { Form, Input, Tabs, Typography, Button, Modal, Select } from '@arco-design/web-react';
@@ -81,7 +82,7 @@
}
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
function getNewTimeIdApi(id) {
@@ -112,6 +113,7 @@
const Handle = () => {
  const formRef = useRef();
  const routeData = useParams();
  const [selectedTab, setSelectedTab] = useState('1'); // 默认选中第一个 tab
  const [selectedTab1, setSelectedTab1] = useState('1'); // 默认选中第一个 tab
  const [wantUser, setWantUser] = useState({});
@@ -128,6 +130,8 @@
  const [isModalVisible, setIsModalVisible] = useState(false);
  const [id, setId] = useState('');
  const [uniteHandleId, setUniteHandleId] = useState('');
  const [caseResultId, setCaseResultId] = useState('');
  const tabs = [
@@ -251,6 +255,9 @@
      }
      if (type === 'addMark')
        setId(res.data)
      if (type === 'caseResult') {
        setCaseResultId(res.data)
      }
    }
  }
@@ -301,6 +308,11 @@
  const handlePersonView = () => {
    setPersonView(!personView)
  }
  const handleCaseResultApply = () => {
    SetCaseResult(!caseResult)
    getNewTimeId('caseResult')
  }
@@ -447,7 +459,7 @@
            <Space style={{ marginTop: '38px', bottom: '4px' }}>
              <Button type="primary" style={{ backgroundColor: '#1A6FB8' }} onClick={() => addMark()}>添加办理记录</Button>
              <Button type='outline' style={{ color: '#1A6FB8', border: '1px solid #1A6FB8' }} onClick={() => uniteHandle()}>联合处置申请</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' }} onClick={() => handleCaseResultApply()} >结案申请</Button>
              <Button type='outline' style={{ color: '#EF6C24', border: '1px solid #EF6C24' }} onClick={() => Supervising()}>督办</Button>
              <Button type='secondary'>返回上级页面</Button>
            </Space>
@@ -629,7 +641,7 @@
          </Form>
        </Modal>
        <UniteHandle id={uniteHandleId} visible={uniteHandleView} handleOnCancel={() => setUniteHandleView(false)} />
        <CaseResult visible={caseResult} handleOnCancel={() => SetCaseResult(false)} />
        <CaseResult visible={caseResult} handleOnCancel={() => SetCaseResult(false)} caseResultId={caseResultId} caseId={routeData.caseId} />
      </div>
    </>
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:53:51
 * @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,40 +30,128 @@
    // 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 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 [tabsActive, setTabsActive] = useState('sxxq');
    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: '事项详情',
            key: '1'
            key: "sxxq"
        },
        {
            img: transfer,
            label: '流转办理',
            key: '2',
            isNeedStep: true,//加上这个就有进度条
            label: '事项办理',
            key: "sxbl",
            isNeedStep: true,
        },
        {
            img: Audit,
            label: '审核',
            key: '3',
            img: applyRecord,
            label: '申请记录',
            key: "sqjl",
        },
    ])
    ]
    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 getAuthor = async () => {
        const res = await getTabButton({
            caseTaskId: routeData.caseTaskId
        })
        if (res.type) {
            const { tabList } = res.data
            console.log(tabList, 'tabList1')
            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
                }))
                console.log(tabsList, 'tabsList2')
                setTabsActive(tabList[0].id)
            }
        }
    }
    useEffect(() => {
        getAuthor();
        getCase();
        getLaw();
    }, [])
    return (
        <div style={{ position: 'relative' }}>
        <div style={{ position: 'relative' ,height:'100vh'}}>
            <NewPage
                pageHead={
                    { breadcrumbData: [{ title: '工作台' }, { title: '事件中心' }], title: '办理反馈' }
                }
            >
                <Tabs
                    defaultActiveTab='1'
                    defaultActiveTab='sxxq'
                    onChange={(v) => setTabsActive(v)}
                    className='myTabContent'
                >
@@ -86,16 +177,16 @@
                                    </Steps>
                                </div>
                            }
                            {tabsActive === '1' &&
                            {tabsActive === 'sxxq' &&
                                <MatterDetail hasApplet={true} hasEditBtn={true} />
                            }
                            {
                                tabsActive === '2' && <Typography.Paragraph style={style}>
                                tabsActive === 'sxbl' && <Typography.Paragraph style={style}>
                                    <Handle />
                                </Typography.Paragraph>
                            }
                            {
                                tabsActive === '3' && <Typography.Paragraph style={style}>
                                tabsActive === 'sqjl' && <Typography.Paragraph style={style}>
                                    <AuditView />
                                </Typography.Paragraph>
                            }
@@ -103,13 +194,15 @@
                    })}
                </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)}
                aiData={aiData}
                aiLawData={aiLawData}
      />
        </div>
    )
gz-customerSystem/src/views/register/index.jsx
New file
@@ -0,0 +1,511 @@
/*
 * @Author: dminyi 1301963064@qq.com
 * @Date: 2024-09-08 15:14:12
 * @LastEditors: dminyi 1301963064@qq.com
 * @LastEditTime: 2024-09-09 10:05:35
 * @FilePath: \gzDyh\gz-customerSystem\src\views\register\index.jsx
 * @Description: 工作台
 */
import React, { useState } from 'react';
import { tab1, tab2, tab3, tab4, tab5, tab6,visitInto,checkInto } from '@/assets/images'
import TableView from '../../components/TableView';
import { Space } from 'antd';
import { Tabs, Typography } from '@arco-design/web-react';
const TabPane = Tabs.TabPane;
const VisitWorkBench = () => {
  const [tabActivekey, setTabActivekey] = useState('1')
  const [column, setColumn] = useState('1')
  const tabsList = [
    {
      key: '1',
      label: '待分派',
      bgColor: '#E8F8FF',
      num: 10,
      img: tab1
    },
    {
      key: '2',
      label: '待签收',
      bgColor: '#E8FFEA',
      num: 30,
      img: tab2
    },
    {
      key: '3',
      label: '待受理',
      bgColor: '#F5E8FF',
      num: 50,
      img: tab3
    },
    {
      key: '4',
      label: '办理中',
      bgColor: '#E6FFFB',
      num: 60,
      img: tab4
    },
    {
      key: '5',
      label: '待审核',
      bgColor: '#E8F7FF',
      num: 70,
      img: tab5
    },
    {
      key: '6',
      label: '督办',
      bgColor: '#FFF7E6',
      num: 80,
      img: tab6
    },
  ]
  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 表示系列案
        // 更多字段...
      },
      {
        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 表示系列案
        // 更多字段...
      },
      {
        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 表示系列案
        // 更多字段...
      },
      {
        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 表示系列案
        // 更多字段...
      },
      {
        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 表示系列案
        // 更多字段...
      },
      {
        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 表示系列案
        // 更多字段...
      },
      {
        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 表示系列案
        // 更多字段...
      },
      {
        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 表示系列案
        // 更多字段...
      },
      {
        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 表示系列案
        // 更多字段...
      },
      {
        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 表示系列案
        // 更多字段...
      },
      // 更多数据...
    ]
  )
  // 列配置
  const [fakeColumns, setFakeColumns] = useState([
    {
      title: tabActivekey === '5' ? '回退时间' : tabActivekey === '6' ? '督办时间' : '流转时间',
      dataIndex: 'caseNo',
      key: 'caseNo',
      width: 100,
      render: (text, record, index) => <span>{index + 1}</span>,
    },
    {
      title: '分派时限',
      dataIndex: 'dispatchDeadline',
      key: 'dispatchDeadline',
      width: 60,
    },
    {
      title: '签收时限',
      dataIndex: 'receiptDeadline',
      key: 'receiptDeadline',
      width: 60,
    },
    {
      title: '受理时限',
      dataIndex: 'acceptanceDeadline',
      key: 'acceptanceDeadline',
      width: 60,
    },
    {
      title: '已办天数',
      dataIndex: 'processedDays',
      key: 'processedDays',
      width: 60,
    },
    {
      title: '回复时限',
      dataIndex: 'replyDeadline',
      key: 'replyDeadline',
      width: 60,
    },
    {
      title: '事项等级',
      dataIndex: 'matterLevel',
      key: 'matterLevel',
      width: 180,
      render: (text) => (
        <>
          {text}份
        </>
      ),
    },
    {
      title: '事项来源',
      dataIndex: 'matterSource',
      key: 'matterSource',
      width: 180,
    },
    {
      title: '事项类型',
      dataIndex: 'matterType',
      key: 'matterType',
      width: 180,
    },
    {
      title: '承办部门',
      dataIndex: 'handlingDepartment',
      key: 'handlingDepartment',
      width: 180,
    },
    {
      title: '配合部门',
      dataIndex: 'cooperatingDepartment',
      key: 'cooperatingDepartment',
      width: 180,
    },
    {
      title: '督办部门',
      dataIndex: 'supervisionDepartment',
      key: 'supervisionDepartment',
      width: 180,
    },
    {
      title: '督办意见',
      dataIndex: 'supervisionOpinion',
      key: 'supervisionOpinion',
      width: 180,
    },
    {
      title: '经办人',
      dataIndex: 'handler',
      key: 'handler',
      width: 180,
    },
    {
      title: '申请方',
      dataIndex: 'applicant',
      key: 'applicant',
      width: 180,
    },
    {
      title: '被申请方',
      dataIndex: 'respondent',
      key: 'respondent',
      width: 180,
    },
    {
      title: '操作',
      dataIndex: 'actions',
      key: 'actions',
      width: 180,
      render: (text, record) => (
        <Space>
          <div>详情</div>
          <div>处理</div>
        </Space>
      ),
    },
  ]);
  const tabActive = (key) => {
    setTabActivekey(key)
  }
  // const columnChange = async () => {
  //   const res = await columnChangeApi()
  //   if (res.type) {
  //     setColumn(res.data)
  //   }
  // }
  const handleColumnType = () => {
    const columnList = column.filter(item => fakeColumns.some(itemNew => itemNew.title === item.title))
    setFakeColumns(columnList)
  }
  return (
    <div className='VisitWorkBench'>
      <div className='VisitWorkBench-top'>
        <span style={{ fontWeight: 600 }}>工作总览</span>
        <div className='VisitWorkBench-top-list'>
          {
            tabsList.map((item, index) => (
              <div key={index} className='VisitWorkBench-top-list-tabsItem' style={{ backgroundColor: item.bgColor }} onClick={() => tabActive(item.key)}>
                <div>
                  <div>{item.label}</div>
                  <span className='VisitWorkBench-top-list-tabsItem-title'>{item.num}</span>件
                </div>
                <div>
                  <img src={item.img} alt='' className='VisitWorkBench-top-list-tabsItem-imgView' />
                </div>
              </div>
            ))
          }
        </div>
      </div>
      <div className='VisitWorkBench-middle'>
        <Tabs defaultActiveTab='1'>
          <TabPane
            onChange={handleColumnType}
            key='1'
            title={
              <span style={{ fontSize: '15px' }}>
                {tabActivekey === '1' ? '待分派' :
                  tabActivekey === '2' ? '待签收' :
                    tabActivekey === '3' ? '待受理' :
                      tabActivekey === '4' ? '办理中' :
                        tabActivekey === '5' ? '待审核' : '督办-未回复'
                }
              </span>
            }
          >
            <Typography.Paragraph>
              <TableView
                columns={fakeColumns}
                dataSource={fakeData1}
                size="small"
                rowKey="id"
                bordered={true}
                // style={{ marginBottom: '65px', marginTop: '-16px' }}
                rowSelection={{
                  type: 'Checkbox'
                }}
              />
            </Typography.Paragraph>
          </TabPane>
          <TabPane
            key='2'
            title={
              <span style={{ fontSize: '15px' }}>
                {tabActivekey === '1' ? '已分派' :
                  tabActivekey === '2' ? '已签收' :
                    tabActivekey === '3' ? '已受理' :
                      tabActivekey === '4' ? '结案申请' :
                        tabActivekey === '5' ? '已审核' : '督办-未回复'
                }
              </span>
            }
          >
            <Typography.Paragraph>
            </Typography.Paragraph>
          </TabPane>
        </Tabs>
      </div>
      <div className='VisitWorkBench-bottom'>
        自行排查
        <div style={{ display: 'flex',justifyContent:'space-evenly' }}>
          <div style={{display:'flex'}}>
            <div className='VisitWorkBench-bottom-title'>大厅来访</div>
            <img src={visitInto} alt='' className='VisitWorkBench-bottom-img'/>
          </div>
          <div style={{display:'flex'}}>
            <div className='VisitWorkBench-bottom-title'>自行排查</div>
            <img src={checkInto} alt='' className='VisitWorkBench-bottom-img'/>
          </div>
        </div>
      </div>
    </div>
  )
}
export default VisitWorkBench;
gz-customerSystem/src/views/register/index.less
@@ -465,7 +465,7 @@
        padding: 0px 8px;
        color: #1A6FB8;
        width: fit-content;
        margin: 4px 0px 8px 0px;
        margin: 12px 0px 8px 0px;
    }
}
@@ -473,6 +473,7 @@
    display: flex;
    gap: 8px;
    margin-bottom: 8px;
    margin-top: 12px;
}
.MyDrawer {
@@ -704,7 +705,7 @@
}
.gradient-box {
    position: absolute;
    position: fixed;
    right: 0;
    top: 50%;
    transform: translateY(-50%);
@@ -719,6 +720,7 @@
    flex: 1 1 0%;
    background-color: rgb(242, 243, 245);
    height: 100vh;
    overflow-y: auto;
    &-case {
        display: flex;
@@ -745,20 +747,28 @@
            padding: 8px 12px;
            border-radius: 8px;
            margin-bottom: 8px;
            margin-right: 16px;
            align-items: center;
            &-type {
                border: 1px solid #1A6FB8;
                padding: 0px 8px;
                color: #1A6FB8;
                border-radius: 4px;
                width: 79px;
                height: 24px;
            }
            &-name{
                margin: 0px 16px 0px 8px;
                max-width: 828px;
                width: fit-content;
            }
            &-btn{
                color: #1A6FB8;
                width: 30px;
            }
        }
    }
@@ -786,6 +796,7 @@
    &-name{
        font-size: 16px;
        margin-bottom: 16px;
        max-width: 400px;
    }
    &-littleTitle{
@@ -796,3 +807,66 @@
        margin-bottom: 16px;
    }
}
.VisitWorkBench {
    margin: 16px;
    &-top {
        background: #ffffff;
        padding: 12px 16px 16px 16px;
        &-list {
            display: flex;
            gap: 24px;
            margin-top: 16px;
            &-tabsItem {
                display: flex;
                padding: 12px 16px;
                flex: 1;
                justify-content: space-between;
                &-title {
                    font-size: 18px;
                    margin-right: 4px;
                }
                &-imgView {
                    width: 48px;
                    height: 48px;
                }
            }
        }
    }
    &-middle {
        background: #ffffff;
        padding: 12px 16px 16px 16px;
        margin-top: 12px;
    }
    &-bottom {
        background-color: #fff;
        padding: 12px 16px 16px 16px;
        margin-top: 12px;
        &-title{
            width: 140px;
        }
        &-img {
            width: 72px;
            height: 72px;
        }
    }
}
.modeMore {
    display: flex;
    justify-content: space-between;
    align-items: center;
}
gz-customerSystem/src/views/register/matterDetail/FileTable.jsx
@@ -1,8 +1,7 @@
import React, { Fragment, useEffect, useState, useRef } from 'react';
import * as $$ from '@/utils/utility';
import ArcoUpload from '@/components/ArcoUpload';
import NewFileCheck from '../../filesCheck/newFileCheck';
import { IconLink } from '@arco-design/web-react/icon';
import NewFileCheck from './NewFileCheck';
import { Row, Col, Button } from 'antd';
import { Form, Modal } from '@arco-design/web-react';
import {
@@ -113,6 +112,10 @@
    { value: '22_00018-101', label: '申请材料' },
    { value: '22_00018-102', label: '证据材料' },
  ]
  useEffect(() => {
    console.log(props.fileInfoList);
  },[props.fileInfoList])
  const personIconType = (v) => {
    switch (v) {
@@ -257,7 +260,16 @@
        </div>
      </Modal >
      <Modal style={{ width: '1200px' }} visible={filesCheck} onCancel={() => setFilesCheck(false)} footer={null} title='查看事件材料' centered>
      <Modal
        style={{ width: '1200px' }}
        visible={filesCheck}
        onCancel={() => setFilesCheck(false)}
        footer={null}
        title='查看事件材料'
        centered
        unmountOnExit={true}
        maskClosable={false}
      >
        <div style={{ marginTop: '-16px' }}>
          <NewFileCheck />
        </div>
gz-customerSystem/src/views/register/matterDetail/NewFileCheck.jsx
New file
@@ -0,0 +1,99 @@
import React, { useState, useEffect, useRef } from 'react';
import { Row, Col, Space } from 'antd';
import { Select, DatePicker, Form, Button } from '@arco-design/web-react';
import * as $$ from '@/utils/utility';
const FormItem = Form.Item;
const appUrl = $$.appUrl;
const NewFileCheck = (props) => {
    const formRef = useRef()
    return (
        <nav className="filesCheck-nav" style={{ borderRight: '1px solid transparent' }}>
            <Form
                ref={formRef}
                layout='horizontal'
                style={{ marginTop: '24px', marginBottom: '20px' }}
                scrollToFirstError={true}
                initialValues={{
                }}//默认值
            >
                <Row gutter={24} style={{ marginRight: '0px' }}>
                    <Col span={7}>
                        <FormItem label='材料类型:' field='type'>
                            <Select
                                placeholder='请选择'
                                allowClear
                                options={[
                                    {
                                        label: '全部',
                                        value: '',
                                    },
                                    {
                                        label: '申请材料',
                                        value: '22_00018-101',
                                    },
                                    {
                                        label: '证据材料',
                                        value: '22_00018-102',
                                    },
                                ]}
                            />
                        </FormItem>
                    </Col>
                    <Col span={7}>
                        <FormItem
                            label='上传时间:'
                            field='time'
                        >
                            <DatePicker.RangePicker
                                separator='~'
                                style={{ width: '100%' }}
                            />
                        </FormItem>
                    </Col>
                    <Col span={7}>
                        <FormItem
                            label='上传人类型:'
                            field='name'
                            onChange={(e) => console.log(e.target.value, 'vvv')}
                        >
                            <Select
                                allowClear
                                style={{ width: '100%' }}
                                options={[
                                    {
                                        label: '工作人员',
                                        value: 1
                                    },
                                    {
                                        label: '当事人',
                                        value: 2
                                    }
                                ]}
                            />
                        </FormItem>
                    </Col>
                    <Col span={3}>
                        <Space>
                            <Button size="middle " type='primary'>查询</Button>
                            <Button size="middle ">查询</Button>
                        </Space>
                    </Col>
                </Row>
            </Form>
            <div style={{ display: 'flex' }}>
                <div style={{ width: '200px' }}>
                </div>
                <div style={{ flex: 1 }}>
                </div>
            </div>
        </nav>
    );
};
export default NewFileCheck;
gz-customerSystem/src/views/register/matterDetail/Supervising.jsx
@@ -22,7 +22,7 @@
const appUrl = $$.appUrl;
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
gz-customerSystem/src/views/register/matterDetail/UniteHandle.jsx
@@ -10,7 +10,7 @@
const appUrl = $$.appUrl;
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
gz-customerSystem/src/views/register/matterDetail/fileMessage.jsx
@@ -1,4 +1,4 @@
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';
@@ -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>
@@ -611,25 +636,25 @@
                        <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>
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([]);//当事人信息数据
@@ -27,35 +31,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,
    },
@@ -75,70 +74,92 @@
    },
    // 更多列配置...
  ];
  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
      const partyList = data.personList.concat(data.agentList)
      setInfoData({
        ...data,
        questionName: data.queProvName === null ? '-' : data.queProvName + '/' + data.queCityName + '/' + data.queAreaName + '/' + data.queRoadName + '/' + data.queVillageName,
        caseType: data.caseTypeFirstName === null ? '-' : data.caseTypeFirstName + '/' + data.caseTypeName
      })
      setFakeData(data.personList.concat(data.agentList))
      setFakeData(partyList.map(item => {
        const fileInfoList = item.fileInfoList
        let file = [];//身份证明材料、企业登记材料
        let file1 = [];//法人、机构身份证明材料、代理人授权委托书
        if (fileInfoList && fileInfoList.length != 0) {
          fileInfoList.forEach(item => {
            if (item.ownerType == '22_00018-202' || item.ownerType == '22_00018-203') {
              file.push({
                name: item.fileList[0].trueName,
                uid: item.fileList[0].id,
              })
            }
            if (item.ownerType == '22_00018-204' || item.ownerType == '22_00018-207') {
              file1.push({
                name: item.fileList[0].trueName,
                uid: item.fileList[0].id,
              })
            }
          })
        }
        return {
          ...item,
          file,
          file1
        }
      }))
    }
  }
@@ -232,7 +253,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/agentDialog.jsx
@@ -18,7 +18,7 @@
}
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
export default function AgentDialog(props) {
@@ -131,16 +131,18 @@
                    label='身份证明材料'
                    editData={props.editData}
                    handleDelFile={handleDelFile}
                    ownerType='22_00018-202'
                  />
                </Col>
                <Col span={24} className="doubleFile">
                  <ArcoUpload
                    params={{
                      action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&ownerId=${id}&ownerType=22_00018-202`,
                      action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&ownerId=${id}&ownerType=22_00018-207`,
                    }}
                    field='file1'
                    label='代理人委托书'
                    editData={props.editData}
                    ownerType='22_00018-207'
                  />
                </Col>
                <Col span={12}>
@@ -318,9 +320,9 @@
        </Row>
        {/* 重复来访重点人员 */}
        <div style={{ width: 'calc(100% - 9px)', background: '#f2f3f5', marginBottom: '20px', padding: '12px' }}>
        {/* <div style={{ width: 'calc(100% - 9px)', background: '#f2f3f5', marginBottom: '20px', padding: '12px' }}>
          <KeyVisits />
        </div>
        </div> */}
      </Scrollbars>
      <div className='dialogFooter'>
        <Button
gz-customerSystem/src/views/register/visit/component/applyDialog.jsx
@@ -30,7 +30,7 @@
}
function delFile(id) {
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'get', service: 'sys', data: { id } });
  return $$.ax.request({ url: `fileInfo/deleteFileById`, type: 'delete', service: 'sys', data: { id } });
}
export default function ApplyDialog(props) {
@@ -41,6 +41,7 @@
  useEffect(() => {
    if (props.editData) {
      console.log(props.editData);
      //编辑
      formRef.current.setFieldsValue({
        ...props.editData
@@ -108,6 +109,7 @@
              label='身份证明材料'
              editData={props.editData}
              handleDelFile={handleDelFile}
              ownerType='22_00018-202'
            />
          </Col>
          <Col span={12}>
@@ -238,23 +240,25 @@
          <Col span={24} className="doubleFile">
            <ArcoUpload
              params={{
                action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&ownerId=${id}&ownerType=22_00018-202`,
                action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&ownerId=${id}&ownerType=22_00018-203`,
              }}
              field='file'
              label={isLegal ? '企业登记材料' : '机构登记材料'}
              editData={props.editData}
              handleDelFile={handleDelFile}
              ownerType='22_00018-203'
            />
          </Col>
          <Col span={24} className="doubleFile">
            <ArcoUpload
              params={{
                action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&ownerId=${id}&ownerType=22_00018-202`,
                action: `${appUrl.fileUrl}/${appUrl.sys}/api/web/fileInfo/upload?mainId=${props.mainId}&ownerId=${id}&ownerType=22_00018-204`,
              }}
              field='file1'
              label={isLegal ? '法定代表人身份证明材料' : '机构代表人身份证明材料'}
              editData={props.editData}
              handleDelFile={handleDelFile}
              ownerType='22_00018-204'
            />
          </Col>
          <Col span={12}>
@@ -328,7 +332,6 @@
      formRef.current.validate(undefined, (errors, values) => {
        if (!errors) {
          const fieldValue = formRef.current.getFields()
          console.log(fieldValue);
          if (props.editData) {
            props.handleAddParty({
              ...fieldValue
@@ -393,9 +396,9 @@
        </Row>
        {/* 重复来访重点人员 */}
        <div style={{ width: 'calc(100% - 9px)', background: '#f2f3f5', marginBottom: '20px', padding: '12px' }}>
        {/* <div style={{ width: 'calc(100% - 9px)', background: '#f2f3f5', marginBottom: '20px', padding: '12px' }}>
          <KeyVisits />
        </div>
        </div> */}
      </Scrollbars>
      <div className='dialogFooter'>
        <Button
gz-customerSystem/src/views/register/visit/component/levelDetail.jsx
@@ -2,13 +2,19 @@
 * @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 15:06:05
 * @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';
import * as $$ from '@/utils/utility';
function getCaseDetailApi(data) {
    return $$.ax.request({ urlAi: `case-law/get-case-detail`, typeAi: 'get', service: 'mediate', data });
}
const EventLevelDrawer = ({ visible, onClose }) => {
@@ -104,24 +110,28 @@
}
const AiQuestion = ({ visible, onClose }) => {
const AiQuestion = ({ visible, onClose, aiData, aiLawData }) => {
    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 [caseDetailView, setCaseDetailView] = useState({})
    const [modalType, setModalType] = useState('case')
    const [lawDetail, setLawDetail] = useState({})
    const [layerList, setLayerList] = useState([
        {
@@ -139,21 +149,47 @@
    ])
    const [caseDetail,setCaseDetail] = useState(false)
    const toggleView = (id) => {
        console.log(id, 'iddddddd')
    const toggleView = (type, id) => {
        setCaseDetail(true)
        aiCaseDetail(id)
        setModalType(type)
        if (type === 'case') {
            getCaseDetail(id);
        }
        if (type === 'law') {
            console.log(id,'idddddd')
            const lawItem = aiLawData.find(item => item.lawInfoId === id)
            console.log(lawItem,'lawItem')
            setLawDetail(lawItem)
        }
    };
    const caseDetailOnClose = () => {
        setCaseDetail(false)
    }
    const aiCaseDetail = () => {
    const getCaseDetail = async (id) => {
        const res = await getCaseDetailApi({
            caseId: id,
            type: '1'
        })
        if (res.type) {
            setCaseDetailView(res.data)
        }
    }
    useEffect(() => {
        setList(aiData);
        setLayerList(aiLawData);
    }, [aiData, aiLawData])
    return (
        <>
@@ -161,7 +197,7 @@
                visible={visible}
                onClose={onClose}
                title="智能调解助理"
                width={1000}
                width={1200}
                style={{ position: 'absolute' }}
                bodyStyle={{ marginTop: '-8px' }}
                titleBefore={true}
@@ -180,14 +216,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.caseId)}>查看</div>
                                    </div>
                                ))}
                            </div>
                        </div>
                        <div className='marginLeft'>
                            <div className='marginLeft-title'>相关法条:</div>
@@ -195,8 +229,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>
@@ -209,20 +243,31 @@
            <MyDrawer
                visible={caseDetail}
                onClose={caseDetailOnClose}
                title="查看相关案例"
                    title={modalType === 'case'?"查看相关案例":"查看相关法条"}
                width={400}
                style={{ position: 'absolute' }}
                bodyStyle={{ marginTop: '-8px' }}
                titleBefore={true}
            >
                    {
                        modalType === 'case' &&
                <div className='layerDetail'>
                    <div className='layerDetail-title'>参考案例</div>
                    <div className='layerDetail-name'>唐某某诉重庆某工业有限公司劳动合同纠纷案</div>
                    <div className='layerDetail-littleTitle'>智能摘要</div>
                    <div className='layerDetail-content'>法院生效裁判认为,本案是肖某某要求某工业公司支付经济补偿金,原审法院已经确认某工业公司存在未足额支付肖某某工资、未休年休假工资情形,故依照《中华人民共和国劳动合同法》(以下简称劳动合同法)第三十八条第一款的规定,某工业公司应当支付解除合同的经济补偿金。</div>
                            <div className='layerDetail-name'>{caseDetailView?.caseTitle || '-'}</div>
                            <div className='layerDetail-littleTitle'>基本案情</div>
                            <div className='layerDetail-content'>{caseDetailView?.caseDesc || '-'}</div>
                            <div className='layerDetail-littleTitle'>结果</div>
                            <div className='layerDetail-content'>{caseDetailView?.caseClaim || '-'}</div>
                </div>
                    }
                    {
                        modalType === 'law' &&
                        <div className='layerDetail'>
                            <div className='layerDetail-title'>{lawDetail?.lawIndex}&nbsp;&nbsp;{lawDetail?.lawTitle}</div>
                            <div className='layerDetail-littleTitle'>{lawDetail.lawDesc}</div>
                        </div>
                    }
            </MyDrawer>
        </div>
        </>
gz-customerSystem/src/views/register/visit/component/visitorRegister.jsx
@@ -48,6 +48,35 @@
    }
  }, [fakeData])
  useEffect(() => {
    setFakeData(props.partyList?.map(item => {
      const fileInfoList = item.fileInfoList
      let file = [];//身份证明材料、企业登记材料
      let file1 = [];//法人、机构身份证明材料、代理人授权委托书
      if (fileInfoList && fileInfoList.length != 0) {
        fileInfoList.forEach(item => {
          if (item.ownerType == '22_00018-202' || item.ownerType == '22_00018-203') {
            file.push({
              name: item.fileList[0].trueName,
              uid: item.fileList[0].id,
            })
          }
          if (item.ownerType == '22_00018-204' || item.ownerType == '22_00018-207') {
            file1.push({
              name: item.fileList[0].trueName,
              uid: item.fileList[0].id,
            })
          }
        })
      }
      return {
        ...item,
        file,
        file1
      }
    }) || [])
  }, [props.partyList])
  //获取当前时间
  const getFormattedDateTime = () => {
    let now = new Date();
@@ -85,7 +114,7 @@
  //添加当事人
  const handleAddParty = (value, isEdit) => {
    console.log(value, isEdit);
    console.log(value);
    if (isEdit) {
      //编辑
      const newList = fakeData.map(item => {
@@ -361,7 +390,7 @@
          <div className='MediationInfo-subTitle' style={{ marginTop: '-9px' }}></div><h4>事件材料</h4>
        </Space>
      </Col>
      <FileTable mainId={props.mainId}/>
      <FileTable mainId={props.mainId} fileInfoList={props.fileInfoList}/>
      <DocumentScanner
        visible={scanFile}
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";
@@ -33,17 +34,18 @@
}
function getDetailData(id) {
    return $$.ax.request({ url: `/casedraftInfo/getCasedraftInfo?id=${id}`, type: 'get', service: 'mediate' });
    return $$.ax.request({ url: `casedraftInfo/getCasedraftInfo?id=${id}`, type: 'get', service: 'mediate' });
}
const Organization = (props) => {
    const formRef = useRef();
    const routeData = useParams();
    const navigate = useNavigate();
    const [isReview, setIsReview] = useState(false);//预览页面控制
    const [current, setCurrent] = useState(1);
    const [id, setId] = useState();
    const [editData, setEditData] = useState({});//回显数据
    useEffect(() => {
        if (routeData.id) {
@@ -59,14 +61,16 @@
    const getDeatil = async (id) => {
        const res = await getDetailData(id)
        if (res.type) {
            console.log(res);
            const { agentList, personList, ...rest } = res.data
            formRef.current.setFieldsValue({
            const parList = agentList.concat(personList)
            const obj = {
                ...rest,
                fakeData: agentList.concat(personList),
                fakeData: parList,
                myCaseType: [rest.caseTypeFirst, rest.caseType],
                myQuesAddress: rest.queRoad ? [rest.queProv, rest.queCity, rest.queArea, rest.queRoad] : undefined
            })
            }
            formRef.current.setFieldsValue(obj)
            setEditData(obj)
        }
    }
@@ -146,7 +150,8 @@
            okText: '确定受理',
            cancelText: '我再想想',
            onOk: async () => {
                setCurrent(3)
                setCurrent(3);
                navigate(`mediate/visit/handleFeedback`, { replace: true })
            },
        });
    }
@@ -187,7 +192,13 @@
                        </Steps>
                    </div>
                    <Preview style={{ display: isReview ? '' : 'none' }} data={formRef?.current?.getFields()} />
                    <VisitorRegister formRef={formRef} style={{ display: isReview ? 'none' : '' }} mainId={id} />
                    <VisitorRegister
                        formRef={formRef}
                        style={{ display: isReview ? 'none' : '' }}
                        mainId={id}
                        partyList={editData.fakeData}
                        fileInfoList={editData.fileInfoList}
                    />
                    <div className="dataSync-excel">
                        <Space size="large" style={{ margin: '4px 14px' }}>
                            <Button type="primary" style={{ backgroundColor: '#1A6FB8' }} onClick={handleSave} >保存</Button>
gz-customerSystem/src/views/register/visit/preview.jsx
@@ -12,7 +12,7 @@
import '../index.less';
import TableView from '../../../components/TableView';
import { Modal } from '@arco-design/web-react';
import NewFileCheck from '../../filesCheck/newFileCheck';
import NewFileCheck from '../matterDetail/NewFileCheck';
import * as $$ from '../../../utils/utility';
import { ApplyDialog, AgentDialog, Respondent, Company } from './component/previewTable'