From da0264d264f1c0d46edb5c87243117f0175c16f1 Mon Sep 17 00:00:00 2001
From: guoxin <guoxin@yisa.com>
Date: Fri, 27 Oct 2023 10:25:24 +0800
Subject: [PATCH 1/3] =?UTF-8?q?fix():=E4=BF=AE=E6=94=B9=E7=B3=BB=E7=BB=9F?=
 =?UTF-8?q?=E7=AE=A1=E7=90=86bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/assets/css/base.scss                           |   7 +-
 src/components/layout/Header/index.jsx             |   4 +-
 src/pages/SystemMgm/AdminMgm/index.scss            |   1 +
 src/pages/SystemMgm/AdminMgm/loadable.jsx          | 123 ++++++++++++++++-----
 .../SystemMgm/AreaManage/ModalAreaAdd/index.jsx    |   9 +-
 src/pages/SystemMgm/AreaManage/loadable.jsx        |  48 ++++----
 .../BusinessConfig/BusinessConf/loadable.jsx       |  63 +++++++----
 src/pages/SystemMgm/RoleMgm/loadable.jsx           |  59 ++++++----
 src/services/system.js                             |   2 +-
 9 files changed, 215 insertions(+), 101 deletions(-)

diff --git a/src/assets/css/base.scss b/src/assets/css/base.scss
index fd5707c..66a897a 100644
--- a/src/assets/css/base.scss
+++ b/src/assets/css/base.scss
@@ -26,7 +26,10 @@ body {
   
   & { overflow: -moz-scrollbars-none; }
 }
-
+.redLogo{
+  color: red;
+  margin-right: 10px;
+}
 .full-loading {
   height: 100%;
   width: 100%;
@@ -54,7 +57,7 @@ a {
   background-color: #3e4557 !important;
 }
 .ant-table.ant-table-bordered > .ant-table-container > .ant-table-content {
-  max-height: 715px;
+  max-height: 680px;
   overflow: auto;
 }
 .ant-table-content::-webkit-scrollbar {
diff --git a/src/components/layout/Header/index.jsx b/src/components/layout/Header/index.jsx
index 51843ab..20b852a 100644
--- a/src/components/layout/Header/index.jsx
+++ b/src/components/layout/Header/index.jsx
@@ -237,9 +237,9 @@ export default function Header(props) {
                 <Icon type="sanjibumen" />
               </li>
             </Popover>
-            <li title="换肤" className="skin-icon icon-color" onClick={changeSkin}>
+            {/* <li title="换肤" className="skin-icon icon-color" onClick={changeSkin}>
               <Icon type="pifu" />
-            </li>
+            </li> */}
             {/* <li title="用户" className="shouye">
               <UserInfo />
             </li> */}
diff --git a/src/pages/SystemMgm/AdminMgm/index.scss b/src/pages/SystemMgm/AdminMgm/index.scss
index 1da5b61..d159f5a 100644
--- a/src/pages/SystemMgm/AdminMgm/index.scss
+++ b/src/pages/SystemMgm/AdminMgm/index.scss
@@ -26,6 +26,7 @@ $color-primary: var(--color-primary);
       display: flex;
       label {
         line-height: 31px;
+       
       }
     }
     .yisa-time {
diff --git a/src/pages/SystemMgm/AdminMgm/loadable.jsx b/src/pages/SystemMgm/AdminMgm/loadable.jsx
index 042214d..ac3777e 100644
--- a/src/pages/SystemMgm/AdminMgm/loadable.jsx
+++ b/src/pages/SystemMgm/AdminMgm/loadable.jsx
@@ -99,6 +99,19 @@ function AdminMgm(props) {
     const handleDeptName = (v) => {
         setAddManage({ ...addManage, deptName: v })
     };
+    //添加角色
+    const handleRole = (v) => {
+        setAddManage({ ...addManage, role: v })
+    };
+    //添加管辖方式
+    const handleGovernmentType = (v) => {
+        setGetGovernment(v)
+        setAddManage({ ...addManage, government_style: v })
+    }
+    //添加管辖区域
+    const handleArea = (v) => {
+        setAddManage({ ...addManage, government_area: v })
+    }
     //添加管辖车场接入方式
     const onChangeCarType = (e) => {
         setAddManage({ ...addManage, car_type: e.target.value })
@@ -131,7 +144,7 @@ function AdminMgm(props) {
     };
     //添加移动端管辖区域
     const handleMoveArea = (e) => {
-        setAddManage({ ...addManage, moveArea:e  })
+        setAddManage({ ...addManage, moveArea: e })
     };
     //添加失效时间
     const onChangeTime = (date, dateString) => {
@@ -143,23 +156,32 @@ function AdminMgm(props) {
         let data = {
             ...addManage
         }
-        ajax.addAdminDate(data).then(res => {
-            if (res.status === 20000) {
-                setImgVisible(false)
-                setAddManage({
-                    mobile: '',
-                    userName: '',
-                    account: '',
-                    email: '',
-                    deptName: '',
-                    sex: 1,
-                    car_type: 1,
-                    messageRole: 0,
-                    failure_time: ''
-                })
-                getData(formData)
-            }
-        })
+        if (addManage.account == '') {
+            message.error('请输入登录名')
+        } else if (addManage.userName == '') {
+            message.error('请输入姓名')
+        } else if (addManage.deptName == '') {
+            message.error('请输入所属部门')
+        } else {
+            ajax.addAdminDate(data).then(res => {
+                if (res.status === 20000) {
+                    setImgVisible(false)
+                    setAddManage({
+                        mobile: '',
+                        userName: '',
+                        account: '',
+                        email: '',
+                        deptName: '',
+                        sex: 1,
+                        car_type: 1,
+                        messageRole: 0,
+                        failure_time: ''
+                    })
+                    getData(formData)
+                }
+            })
+        }
+
     }
     //列表
     const handleColumns = (tab) => {
@@ -220,7 +242,7 @@ function AdminMgm(props) {
             title: '状态',
             render: (text, record) => {
                 return <>
-                    {record.workState === 1 ? '离职' : '在职'}
+                    {record.workState === 1 ? '在职' : '离职'}
                 </>
             }
         },
@@ -231,7 +253,7 @@ function AdminMgm(props) {
                     <Popover content={
                         <div className="SpecialRecordBtnAdmin">
                             <div onClick={() => { CheckApplyBtn(record) }}>编辑</div>
-                            <div onClick={() => { deleteApplyBtn(record) }}>{record.workState === 1 ? '在职' : '离职'}</div>
+                            <div onClick={() => { deleteApplyBtn(record) }}>{record.workState === 1 ? '离职' : '在职'}</div>
                             <div onClick={() => { applyBtn(record) }}>重置密码</div>
                         </div>}>
                         <button className="SpecialAdmin">操作</button>
@@ -277,9 +299,9 @@ function AdminMgm(props) {
             messageRole: record.messageRole,
             failure_time: record.failure_time,
             role: record.role,
-            government_style:record.government_style,
-            government_area:record.government_area,
-            moveArea:record.moveArea
+            government_style: record.government_style,
+            government_area: record.government_area,
+            moveArea: record.moveArea
         }))
     }
     //管辖方式
@@ -584,7 +606,7 @@ function AdminMgm(props) {
         >
             <div className="addAdmin">
                 <div className="yisa-search">
-                    <label>手机号</label>
+                    <label style={{ marginLeft: 15 }}>手机号</label>
                     <Input
                         placeholder="请输入手机号"
                         value={addManage.mobile}
@@ -594,6 +616,7 @@ function AdminMgm(props) {
                     />
                 </div>
                 <div className="yisa-search">
+                    <div className="redLogo">*</div>
                     <label>登录名</label>
                     <Input
                         placeholder="请输入用户名"
@@ -603,11 +626,12 @@ function AdminMgm(props) {
                     />
                 </div>
                 <div className="yisa-search">
-                    <label>姓名</label>
+                    <div className="redLogo">*</div>
+                    <label style={{ marginLeft: 15 }}>姓名</label>
                     <Input
                         placeholder="请输入姓名"
                         value={addManage.userName}
-                        style={{ width: 260, marginLeft: 42 }}
+                        style={{ width: 260, marginLeft: 26 }}
                         onChange={handleAddUserName}
                     />
                 </div>
@@ -619,7 +643,7 @@ function AdminMgm(props) {
                     </Radio.Group>
                 </div>
                 <div className="yisa-search">
-                    <label>邮箱</label>
+                    <label style={{ marginLeft: 15 }}>邮箱</label>
                     <Input
                         placeholder="请输入邮箱"
                         value={addManage.email}
@@ -628,6 +652,7 @@ function AdminMgm(props) {
                     />
                 </div>
                 <div className="yisa-search">
+                    <div className="redLogo">*</div>
                     <label>所属部门</label>
                     <Cascader
                         style={{ width: 260, marginLeft: 14 }}
@@ -644,6 +669,50 @@ function AdminMgm(props) {
                     />
                 </div>
                 <div className="yisa-search">
+                    <label>角色</label>
+                    <Select
+                        style={{ width: 260, marginLeft: 42 }}
+                        placeholder="请选择"
+                        value={addManage.role}
+                        options={getRoleData}
+                        onChange={handleRole}
+                    />
+                </div>
+                <div className="yisa-search">
+                    <label>管辖方式</label>
+                    <Select
+                        style={{ width: 260, marginLeft: 14 }}
+                        placeholder="请选择"
+                        value={addManage.government_style}
+                        options={[{
+                            value: 2,
+                            label: '按街管理'
+                        },
+                        {
+                            value: 3,
+                            label: '按区管理'
+                        },]}
+                        onChange={handleGovernmentType}
+
+                    />
+                </div>
+                <div className="yisa-search">
+                    <label>管辖区域</label>
+                    <Tree
+                        checkable
+                        style={{ width: 260, marginLeft: 14 }}
+                        onCheck={handleArea}
+                        checkedKeys={addManage.government_area}
+                        // onSelect={onSelect}
+                        treeData={getGovernmentArea}
+                        fieldNames={{
+                            title: 'name',
+                            key: 'id',
+                            children: 'children'
+                        }}
+                    />
+                </div>
+                <div className="yisa-search">
                     <label>管辖车场接入方式</label>
                     <Radio.Group onChange={onChangeCarType} value={addManage.car_type}>
                         <Radio value={1}>全部</Radio>
diff --git a/src/pages/SystemMgm/AreaManage/ModalAreaAdd/index.jsx b/src/pages/SystemMgm/AreaManage/ModalAreaAdd/index.jsx
index b447226..5bb07b0 100644
--- a/src/pages/SystemMgm/AreaManage/ModalAreaAdd/index.jsx
+++ b/src/pages/SystemMgm/AreaManage/ModalAreaAdd/index.jsx
@@ -16,7 +16,7 @@ function ModalAreaAdd (props) {
     level,
     onCancel
   } = props
-
+  console.log(pid);
   const [form] = Form.useForm()
   const [areaType, setAreaType] = useState("1")
 
@@ -100,16 +100,11 @@ function ModalAreaAdd (props) {
               </Form.Item>
             ) : null
           }
-          <Form.Item label="中心点坐标" rules={[{required: true}]}>
+          <Form.Item label="中心点坐标" >
             <Row gutter={8}>
               <Col span={18}>
                 <Form.Item
                   name="latlng"
-                  rules={[
-                    {
-                      required: true,
-                    },
-                  ]}
                 >
                   <Input />
                 </Form.Item>
diff --git a/src/pages/SystemMgm/AreaManage/loadable.jsx b/src/pages/SystemMgm/AreaManage/loadable.jsx
index f5eb16f..968da42 100644
--- a/src/pages/SystemMgm/AreaManage/loadable.jsx
+++ b/src/pages/SystemMgm/AreaManage/loadable.jsx
@@ -1,5 +1,5 @@
 import React, { useState, useRef, useEffect } from "react";
-import {  message, Pagination, Table, Input, Modal, Tree, Button } from "antd";
+import { message, Pagination, Table, Input, Modal, Tree, Button } from "antd";
 import { DeleteOutlined, EditOutlined, PlusCircleOutlined } from '@ant-design/icons';
 import ajax from "@/services"
 import { BaseMap } from "@/components"
@@ -73,30 +73,31 @@ function AreaManage() {
             }
         })
     }
-    const handleAreaAdd = ({level, pid, isCity}) => {
+    const handleAreaAdd = ({ level, id, isCity }) => {
+        let pid =id 
         setIsCity(isCity)
         setPid(pid)
-        setLevel(Number(level)+1)
+        setLevel(Number(level) + 1)
         setEditStatus(false)
         setModalAreaVisible(true)
     }
 
-    const handleAreaEdit = ({name, id, virtually_code, code, lng_lat}) => {
-        setEditForm({name, id, virtually_code, code, lng_lat})
+    const handleAreaEdit = ({ name, id, virtually_code, code, lng_lat }) => {
+        setEditForm({ name, id, virtually_code, code, lng_lat })
         setEditStatus(true)
         setModalAreaVisible(true)
     }
 
     // 区域删除
-    const handleAreaDel = ({name, id}) => {
+    const handleAreaDel = ({ name, id }) => {
         Modal.confirm({
             title: '确认删除?',
             content: `是否确认删除区域: ${name}`,
-            icon: <DeleteOutlined style={{color: '#f40'}}/>,
+            icon: <DeleteOutlined style={{ color: '#f40' }} />,
             okText: '删除',
             cancelText: '取消',
             onOk: () => {
-                ajaxAreaDel({name, id}).then((msg) => {
+                ajaxAreaDel({ name, id }).then((msg) => {
                     message.success(msg)
                     getAreaTree()
                 }).catch((err) => {
@@ -112,12 +113,12 @@ function AreaManage() {
         setModalAreaVisible(false)
         setModalMapVisible(true)
     }
-    const handleMapClick = ({lat, lng}) => {
+    const handleMapClick = ({ lat, lng }) => {
         setLatlng([lat.toFixed(4), lng.toFixed(4)])
     }
 
     // 区域新增
-    const handleAreaConfirm = ({formData, editStatus}) => {
+    const handleAreaConfirm = ({ formData, editStatus }) => {
         if (editStatus) { // 编辑
             ajaxAreaEdit(formData).then((msg) => {
                 message.success(msg)
@@ -146,19 +147,26 @@ function AreaManage() {
             setModalAreaVisible(true)
         }
     }
-    const treeTitleRender = ({name, children, level, pid, id, virtually_code, lng_lat, code}) => {
+    const treeTitleRender = ({ name, children, level, pid, id, virtually_code, lng_lat, code }) => {
         return <>
             <span className='label-text'>{name}</span>
             {
-                children ? (
-                    <PlusCircleOutlined className='label-icon' onClick={() => handleAreaAdd({level, pid, isCity: true})} />
+                level === 1 ? (
+                    <PlusCircleOutlined className='label-icon' onClick={() => handleAreaAdd({ level, id, isCity: true })} />
                 ) : null
             }
             {
+                level === 2 ? <>
+                    <PlusCircleOutlined className='label-icon' onClick={() => handleAreaAdd({ level, id, isCity: false })} />
+                    <DeleteOutlined className="label-icon" onClick={() => handleAreaDel({ name, id })} />
+                    <EditOutlined className="label-icon" onClick={() => handleAreaEdit({ name, id, virtually_code, code, lng_lat })} />
+                </> : null
+            }
+            {
                 level > 2 ? <>
-                    <PlusCircleOutlined className='label-icon' onClick={() => handleAreaAdd({level, pid, isCity: false})} />
-                    <DeleteOutlined className="label-icon" onClick={() => handleAreaDel({name, id})} />
-                    <EditOutlined className="label-icon" onClick={() => handleAreaEdit({name, id, virtually_code, code, lng_lat})}/>
+                    {/* <PlusCircleOutlined className='label-icon' onClick={() => handleAreaAdd({level, pid, isCity: false})} /> */}
+                    <DeleteOutlined className="label-icon" onClick={() => handleAreaDel({ name, id })} />
+                    <EditOutlined className="label-icon" onClick={() => handleAreaEdit({ name, id, virtually_code, code, lng_lat })} />
                 </> : null
             }
         </>
@@ -189,7 +197,7 @@ function AreaManage() {
             editForm={editForm}
             visible={modalAreaVisible}
             onMapSelect={modalMapSelct}
-            onOk={(formData, editStatus) => handleAreaConfirm({formData, editStatus})}
+            onOk={(formData, editStatus) => handleAreaConfirm({ formData, editStatus })}
             latlng={latlng}
             onCancel={() => handleModalClose()}
         />
@@ -202,12 +210,12 @@ function AreaManage() {
             <div className="modal-map-content">
                 <BaseMap
                     id="map-select-container"
-                    onClick={({latlng}) => handleMapClick(latlng)}
+                    onClick={({ latlng }) => handleMapClick(latlng)}
                 />
             </div>
             <div className="modal-map-info">
-                    <Input value={latlng}></Input>
-                    <Button type="primary" onClick={() => handleLatLngConfirm()}>确定</Button>
+                <Input value={latlng}></Input>
+                <Button type="primary" onClick={() => handleLatLngConfirm()}>确定</Button>
             </div>
         </Modal>
     </>
diff --git a/src/pages/SystemMgm/BusinessConfig/BusinessConf/loadable.jsx b/src/pages/SystemMgm/BusinessConfig/BusinessConf/loadable.jsx
index 34c0923..dd78a2e 100644
--- a/src/pages/SystemMgm/BusinessConfig/BusinessConf/loadable.jsx
+++ b/src/pages/SystemMgm/BusinessConfig/BusinessConf/loadable.jsx
@@ -45,7 +45,7 @@ function BusinessConf(props) {
     //添加
     const [addManage, setAddManage] = useState({
         area_name: 0,
-        operator_name: 0,
+        operator_name: "0",
         item_name: ''
     })
     const addAdmin = () => {
@@ -66,8 +66,11 @@ function BusinessConf(props) {
     const handleConfiguration = (v, option) => {
         setGetMessage(option);
         setGetConfiguration(v)
-
-        setAddManage({ ...addManage, item_name: v })
+        setAddManage({
+            ...addManage, item_name: v ,
+            area_name: 0,
+            operator_name: "0",
+        })
     }
     //添加
     const onChangeAdd = (e) => {
@@ -113,20 +116,32 @@ function BusinessConf(props) {
     }
     //添加提交
     const placeSaveBtn = () => {
+        console.log(addManage.parameter);
         let data = {
             ...addManage
         }
-        ajax.addBusiness(data).then(res => {
-            if (res.status === 20000) {
-                setImgVisible(false)
-                setAddManage({
-                    area_name: 0,
-                    operator_name: 0,
-                    item_name: ''
-                })
-                getData(formData)
-            }
-        })
+        if (addManage.area_name === '') {
+            message.error('请选择城市')
+        } else if (addManage.operator_name === '') {
+            message.error('请选择商户名称')
+        } else if (addManage.item_name === '') {
+            message.error('请选择配置项')
+        } else if (addManage.parameter === undefined && addManage.parameterValue === undefined) {
+            message.error('请选择参数项')
+        } else {
+            ajax.addBusiness(data).then(res => {
+                if (res.status === 20000) {
+                    setImgVisible(false)
+                    setAddManage({
+                        area_name: 0,
+                        operator_name: "0",
+                        item_name: ''
+                    })
+                    getData(formData)
+                    setGetConfiguration(0)
+                }
+            })
+        }
     }
     //列表
     const handleColumns = (tab) => {
@@ -171,11 +186,11 @@ function BusinessConf(props) {
             title: '参数描述',
             dataIndex: 'parameter_dsc',
             key: 'parameter_dsc',
-            render:(text,record)=>{
-                return<>
+            render: (text, record) => {
+                return <>
                     <div dangerouslySetInnerHTML={{ __html: record.parameter_dsc }}>
-                    {/* {getMessage.message} */}
-                </div>
+                        {/* {getMessage.message} */}
+                    </div>
                 </>
             }
         },
@@ -219,9 +234,10 @@ function BusinessConf(props) {
         setImgVisible(false)
         setAddManage({
             area_name: 0,
-            operator_name: 0,
+            operator_name: '0',
             item_name: ''
         })
+        setGetConfiguration(0)
         setGetMessage({})
     }
     //编辑
@@ -274,7 +290,7 @@ function BusinessConf(props) {
         setImgVisible(false)
         setAddManage({
             area_name: 0,
-            operator_name: 0,
+            operator_name: '0',
             item_name: ''
         })
         setGetMessage({})
@@ -346,6 +362,7 @@ function BusinessConf(props) {
             if (res.status === 20000) {
                 setEditVisible(false)
                 getData(formData)
+                setGetConfiguration(0)
             }
         })
     }
@@ -448,6 +465,7 @@ function BusinessConf(props) {
         >
             <div className="addAdmin">
                 <div className="yisa-search">
+                    <div className="redLogo">*</div>
                     <label>城市</label>
                     <Select
                         style={{ width: 260, marginLeft: 50 }}
@@ -459,6 +477,7 @@ function BusinessConf(props) {
                     />
                 </div>
                 <div className="yisa-search">
+                    <div className="redLogo">*</div>
                     <label>商户名称</label>
                     <Select
                         style={{ width: 260, marginLeft: 22 }}
@@ -470,6 +489,7 @@ function BusinessConf(props) {
                     />
                 </div>
                 <div className="yisa-search">
+                    <div className="redLogo">*</div>
                     <label>配置项</label>
                     <Select
                         style={{ width: 260, marginLeft: 35 }}
@@ -490,6 +510,7 @@ function BusinessConf(props) {
                         ?
                         <>
                             <div className="yisa-search">
+                                <div className="redLogo">*</div>
                                 <label>参数</label>
                                 <Input
                                     placeholder="请输入"
@@ -871,7 +892,7 @@ function BusinessConf(props) {
                                     Object.assign({}, geteditData, { parameterValue: v.target.value })
                                 );
                             }}
-                            value={geteditData.parameterValue}>
+                                value={geteditData.parameterValue}>
                                 <Radio value={1}>否</Radio>
                                 <Radio value={2}>是</Radio>
                             </Radio.Group>
diff --git a/src/pages/SystemMgm/RoleMgm/loadable.jsx b/src/pages/SystemMgm/RoleMgm/loadable.jsx
index 9eab8af..44951bf 100644
--- a/src/pages/SystemMgm/RoleMgm/loadable.jsx
+++ b/src/pages/SystemMgm/RoleMgm/loadable.jsx
@@ -134,21 +134,31 @@ function RoleMgm(props) {
         let data = {
             ...addManage
         }
-        console.log(data);
-        ajax.addAdmin(data).then(res => {
-            if (res.status === 20000) {
-                setImgVisible(false)
-                setAddManage({
-                    remark: '',
-                    name: '',
-                    depart_id: '',
-                    auth: ''
-                })
-                getData(formData)
-            }else{
-                message.error(res.message)
-            }
-        })
+        if(addManage.name===''){
+            message.error('请输入角色名称')
+        }else if(addManage.depart_id===''){
+            message.error('请选择所属部门')
+        }else if (addManage.auth === '') {
+            message.error('必须选择权限')
+        } else {
+            ajax.addAdmin(data).then(res => {
+                if (res.status === 20000) {
+                    setImgVisible(false)
+                    setAddManage({
+                        remark: '',
+                        name: '',
+                        depart_id: '',
+                        auth: ''
+                    })
+                    getData(formData)
+                    setGetGovernment(0)
+                } else {
+                    message.error(res.message)
+                    setGetGovernment(0)
+                }
+            })
+        }
+
     }
     //列表
     const handleColumns = (tab) => {
@@ -281,13 +291,15 @@ function RoleMgm(props) {
         setAddManage({
             remark: '',
             name: '',
-            depart_id: [],
+            depart_id: null,
         })
         setCheckedKeys([])
+        setGetGovernment(0)
     }
     const delcancelImg = () => {
         setEditVisible(false)
         setCheckedKeys([])
+        setGetGovernment(0)
     }
     // 获取列表数据
     const getData = (data = formData) => {
@@ -366,14 +378,17 @@ function RoleMgm(props) {
         })
     }
     useEffect(() => {
-        console.log(getGovernment);
         if (getGovernment != 0) {
             let data = {
                 id: getGovernment
             }
             ajax.getDepartId(data).then(res => {
-                if (res.status === 20000) {
-                    setGetGovernmentArea(res.data)
+                if(res.status === 20000){
+                    if (res.status == []) {
+                        message.error('部门没有配置对应菜单权限')
+                    }else{
+                        setGetGovernmentArea(res.data)
+                    }
                 }
             })
         }
@@ -450,6 +465,7 @@ function RoleMgm(props) {
         >
             <div className="addAdmin">
                 <div className="yisa-search">
+                <div className="redLogo">*</div>
                     <label>角色名称</label>
                     <Input
                         placeholder="请输入"
@@ -459,7 +475,7 @@ function RoleMgm(props) {
                     />
                 </div>
                 <div className="yisa-search">
-                    <label>备注</label>
+                    <label style={{marginLeft:15}}>备注</label>
                     <Input
                         placeholder="请输入用户名"
                         value={addManage.remark}
@@ -468,11 +484,12 @@ function RoleMgm(props) {
                     />
                 </div>
                 <div className="yisa-search">
+                <div className="redLogo">*</div>
                     <label>所属部门</label>
                     <Cascader
                         style={{ width: 260, marginLeft: 50 }}
                         placeholder="请选择"
-                        value={addManage.depart_id}
+                        // value={addManage.depart_id}
                         options={getPlateColor}
                         changeOnSelect
                         onChange={handleDeptName}
diff --git a/src/services/system.js b/src/services/system.js
index b8dda41..e5bb306 100644
--- a/src/services/system.js
+++ b/src/services/system.js
@@ -276,7 +276,7 @@ const orgDetailEdit = (params) => {
 const getOrgTree = (params) => {
   return ajax({
     url: '/api/manage/com/depart_tree',
-    type: 'post',
+    type: 'get',
     data: params
   })
 }

From 84b2749c0754952a0f08e3df202c87b22ea6888d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=99=88=E5=AE=87=E8=88=AA?= <740464440@qq.com>
Date: Fri, 27 Oct 2023 13:36:12 +0800
Subject: [PATCH 2/3] =?UTF-8?q?feat():=20=E6=96=B0=E5=BB=BA=E5=8F=91?=
 =?UTF-8?q?=E8=B5=B7=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=E9=A1=B5=E9=9D=A2?=
 =?UTF-8?q?=E7=AD=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/assets/css/base.scss                           |   3 +
 .../ParkingRecordModal/RecordReviewModal.jsx       | 195 +++++++++++
 .../ParkingRecordModal/VehicleInformation.jsx      | 122 +++++++
 src/components/ParkingRecordModal/dataSource.js    | 183 ++++++++++
 src/components/ParkingRecordModal/index.jsx        | 260 +++++++++++++++
 src/components/ParkingRecordModal/index.scss       | 290 ++++++++++++++++
 src/components/QuickMenu/index.jsx                 |  15 +-
 src/components/index.jsx                           |   4 +-
 src/config/character.config.js                     |   1 +
 .../ExceptionDeal/StartExceptionDeal/index.jsx     | 369 +++++++++++++++++----
 .../ExceptionDeal/StartExceptionDeal/index.scss    | 195 +++++++++++
 .../SettleBill/GeneralBusiness/loadable.jsx        |   2 +-
 src/pages/MerchantMgm/InvoiceConf/loadable.jsx     | 282 ++++++++++------
 src/pages/MerchantMgm/MerchantInfo/loadable.jsx    |  14 +-
 src/services/FinancialMgm/exceptionDeal.js         |  52 +++
 15 files changed, 1795 insertions(+), 192 deletions(-)
 create mode 100644 src/components/ParkingRecordModal/RecordReviewModal.jsx
 create mode 100644 src/components/ParkingRecordModal/VehicleInformation.jsx
 create mode 100644 src/components/ParkingRecordModal/dataSource.js
 create mode 100644 src/components/ParkingRecordModal/index.jsx
 create mode 100644 src/components/ParkingRecordModal/index.scss

diff --git a/src/assets/css/base.scss b/src/assets/css/base.scss
index fd5707c..6d1262f 100644
--- a/src/assets/css/base.scss
+++ b/src/assets/css/base.scss
@@ -734,3 +734,6 @@ color:var(--color-text) !important;
 // .ant-checkbox{
 //   background-color: #454c5e;
 // }
+.ant-table-tbody>tr.ant-table-placeholder:hover>td {
+  background: #3e4557 !important;
+}
diff --git a/src/components/ParkingRecordModal/RecordReviewModal.jsx b/src/components/ParkingRecordModal/RecordReviewModal.jsx
new file mode 100644
index 0000000..f658f29
--- /dev/null
+++ b/src/components/ParkingRecordModal/RecordReviewModal.jsx
@@ -0,0 +1,195 @@
+import React, { useState, useRef, useEffect } from "react";
+import { Modal, Tabs, Table, message, Button, Input, Select } from "antd";
+import { RightOutlined, DownOutlined } from "@ant-design/icons";
+import { dictionary, utils } from "@/config/common";
+import VehicleInformation from "./VehicleInformation";
+import { payRecordColumns, refundRecordColumns, operatorRecordColumns } from "./dataSource";
+import moment from "moment";
+import ajax from "@/services";
+import "./index.scss";
+const { TextArea } = Input;
+const RecordReviewModal = (props) => {
+  const {
+    className = "",
+    title = null, // 头部
+    open = false,
+    data = [],
+    disabledModal = false, // 查看或提交
+    onCancel,
+  } = props;
+
+  // 表头
+  const columns = [
+    {
+      title: "停车订单ID",
+      dataIndex: "park_id",
+      key: "park_id",
+      width: 200,
+      align: "center",
+      fixed: 'left',
+      render: (text) => (
+        <>
+          <a onClick={() => {
+            navigator.clipboard.writeText(`${text}`).then(() => { message.success("已复制到剪切板") });
+          }}>{text}</a>
+        </>
+      ),
+    },
+    {
+      title: "车牌号",
+      dataIndex: "plateNumber",
+      key: "plateNumber",
+      align: "center",
+    },
+    {
+      title: "停车场名称",
+      dataIndex: "parkName",
+      key: "parkName",
+      align: "center",
+    },
+    {
+      title: "入场时间",
+      dataIndex: "strEntryTime",
+      key: "strEntryTime",
+      align: "center",
+    },
+    {
+      title: "出场时间",
+      dataIndex: "strExitTime",
+      key: "strExitTime",
+      align: "center",
+    },
+  ];
+  const [modalVisible, setModalVisible] = useState(false); // 模态框显示隐藏
+  const [resultData, setResultData] = useState([]); // 数据
+  const [expandedRowKeys, setExpandedRowKeys] = useState([0]); // 默认展开的列表数据
+
+  // 关闭模态框
+  const $onCancelModal = () => {
+    if (onCancel) onCancel(false);
+    setResultData([]);
+    setExpandedRowKeys([0]);
+  }
+  useEffect(() => {
+    setModalVisible(open)
+  }, [open]);
+
+  useEffect(() => {
+    if (data?.length) {
+      let _data = [];
+      data.map((item, index) => {
+        let value = {
+          ...item,
+          key: index,
+          road: item?.parkName || "",
+          region: item?.areaName || "",
+          operator: item?.operationName || "",
+          berth_id: item?.berthCode,
+          road_type: item?.parkTypeName || "",
+        }
+        _data.push({
+          ...value,
+          description: <VehicleInformation className="abnormal-order--table-content" data={value} type="2" />
+        })
+      });
+      setResultData(_data);
+    };
+  }, [data])
+  return (
+    <Modal
+      className={`parking-record-modal ${className}`}
+      title={title}
+      open={modalVisible}
+      onCancel={$onCancelModal}
+      destroyOnClose={true}
+      footer={null}
+    >
+      <div className="item-title">停车订单详情</div>
+      <Table
+        className="table"
+        columns={columns}
+        dataSource={resultData}
+        scroll={{ y: 400 }}
+        pagination={false}
+        expandable={{
+          expandedRowRender: (record) => <>{record.description}</>,
+          expandedRowKeys,
+          expandIcon: ({ expanded, onExpand, record }) =>
+            expanded ? (
+              <DownOutlined onClick={e => { onExpand(record, e); setExpandedRowKeys([]) }} />
+            ) : (
+              <RightOutlined onClick={e => { onExpand(record, e); setExpandedRowKeys([record?.key]) }} />
+            )
+        }}
+      />
+      {disabledModal ?
+        <div className="process-view">
+          <div className="item-title">流程查看 <span>查看全部</span></div>
+          <div className="item-content">
+            <div className="start">
+              <span className="num">1</span>
+              <span>发起处理</span>
+              <span>哈哈哈 2023-10-26 18:08:48</span>
+            </div>
+            <div className="centre">已完成</div>
+            <div className="end">
+              <span className="num">2</span>
+              <span>发起处理</span>
+              <span>哈哈哈 2023-10-26 18:08:48</span>
+            </div>
+          </div>
+        </div>
+        : null
+      }
+      <div className="order-text">
+        <div className="item-title">异常订单处理</div>
+        <span><em>*</em>处理理由</span>
+        <TextArea
+          maxLength={100}
+          showCount
+          placeholder="请输入处理理由"
+          defaultValue={disabledModal ? resultData?.[0]?.deal_reason : null}
+          disabled={disabledModal}
+          onChange={(e) => { console.log(e.target.value); }}
+        />
+      </div>
+      <div className="process-mode">
+        <div className="item-title">处理方式</div>
+        <div className="yisa-search">
+          <label><em>*</em>更改项</label>
+          <Select
+            style={{ width: 200 }}
+            placeholder="请选择更改项"
+            // value={submitDeploy.adviseType}
+            options={[
+              {
+                value: 1,
+                label: '调整出场时间'
+              },
+              {
+                value: 2,
+                label: '变更车牌号'
+              },
+              {
+                value: 3,
+                label: '变更订单金额'
+              },
+              {
+                value: 4,
+                label: '免费该订单'
+              },
+              {
+                value: 5,
+                label: '作废该订单'
+              }
+            ]}
+            onChange={() => {}}
+          />
+
+        </div>
+      </div>
+    </Modal>
+  );
+}
+
+export default RecordReviewModal;
diff --git a/src/components/ParkingRecordModal/VehicleInformation.jsx b/src/components/ParkingRecordModal/VehicleInformation.jsx
new file mode 100644
index 0000000..2363e47
--- /dev/null
+++ b/src/components/ParkingRecordModal/VehicleInformation.jsx
@@ -0,0 +1,122 @@
+import React, { useState, useRef, useEffect } from "react";
+import { dictionary, utils } from "@/config/common";
+import { Image } from 'antd';
+import { ImgError } from "@/components"
+import errorImg from '@/assets/images/layout/error.png'
+import "./index.scss";
+const VehicleInformation = (props) => {
+  const {
+    className = "",
+    data = {},
+    type = "1", // "1": 停车记录信息 "2": 异常订单处理记录审核
+  } = props
+  const [carImgPreview, setCarImgPreview] = useState(true); //  车辆图片加载失败禁止预览
+  const [plateImgPreview, setPlateImgPreview] = useState(true); //  车牌图片加载失败禁止预览
+  return (
+    <div className={`vehicle-information-modal ${className}`}>
+      <div className="park">
+        <div className="title"><span>{type == "1" ? "停车场信息" : "车场详情"}</span><span className="line"></span></div>
+        {<div className="content">
+          <div className="item"><span>停车场名称</span><span title={data?.road || "--"}>{data?.road || "--"}</span></div>
+          <div className="item"><span>泊位号</span><span title={data?.berth_id}>{data?.berth_id || "--"}</span></div>
+          <div className="item"><span>区域</span><span title={data?.region}>{data?.region || "--"}</span></div>
+          <div className="item"><span>{type == "1" ? "商户" : "商户名称"}</span><span title={data?.operator}>{data?.operator || "--"}</span></div>
+          <div className="item"><span>车场类型</span><span title={data?.road_type}>{data?.road_type || "--"}</span></div>
+        </div>}
+      </div>
+      {type == "1" ?
+        <div className="car">
+          <div className="title"><span>停车信息</span><span className="line"></span></div>
+          <div className="content">
+            <div className="item"><span>车牌号</span><span title={data?.plate || "--"}>{data?.plate || "--"}</span></div>
+            <div className="item"><span>会员手机</span><span title={data?.phone || "--"}>{data?.phone || "--"}</span></div>
+            <div className="item"><span>入场时间</span><span title={data?.in_time || "--"}>{data?.in_time || "--"}</span></div>
+            <div className="item"><span>出场时间</span><span title={data?.out_time || "--"}>{data?.out_time || "--"}</span></div>
+            <div className="item"><span>停车时长</span><span title={data?.admission_time || "--"}>{data?.admission_time || "--"}</span></div>
+            <div className="item"><span>订单金额</span><span title={data?.order_amount || "--"}>{data?.order_amount || "--"}</span></div>
+            <div className="item"><span>停车卡抵扣</span><span title={data?.parking_card_discount || "--"}>{data?.parking_card_discount || "--"}</span></div>
+            <div className="item"><span>车场折扣</span><span title={data?.road_discount || "--"}>{data?.road_discount || "--"}</span></div>
+            <div className="item"><span>应收金额</span><span title={data?.receivable_amount || "--"}>{data?.receivable_amount || "--"}</span></div>
+            <div className="item"><span>优惠券</span><span title={data?.preferential_amount || "--"}>{data?.preferential_amount || "--"}</span></div>
+            <div className="item"><span>优惠总计</span><span title={data?.preferential_total || "--"}>{data?.preferential_total || "--"}</span></div>
+            <div className="item"><span>实付金额</span><span title={data?.actual_amount || "--"}>{data?.actual_amount || "--"}</span></div>
+            <div className="item"><span>优惠退款</span><span title={data?.refund_discount || "--"}>{data?.refund_discount || "--"}</span></div>
+            <div className="item"><span>实付退款</span><span title={data?.actual_refund || "--"}>{data?.actual_refund || "--"}</span></div>
+            <div className="item"><span>退款总计</span><span title={data?.refund_total || "--"}>{data?.refund_total || "--"}</span></div>
+            <div className="item"><span>入场收费员</span><span title={data?.in_person || "--"}>{data?.in_person || "--"}</span></div>
+            <div className="item"><span>出场收费员</span><span title={data?.out_person || "--"}>{data?.out_person || "--"}</span></div>
+          </div>
+        </div>
+        : null
+      }
+      {type == "2" ?
+        <div className="car">
+          <div className="title"><span>车辆详情</span><span className="line"></span></div>
+          <div className="content">
+            <div className="item"><span>车牌号</span><span title={data?.plateNumber || "--"}>{data?.plateNumber || "--"}</span></div>
+            <div className="item"><span>停车时长</span><span title={data?.parkTime || "--"}>{data?.parkTime || "--"}</span></div>
+            <div className="item"><span>入场时间</span><span title={data?.strEntryTime || "--"}>{data?.strEntryTime || "--"}</span></div>
+            <div className="item"><span>出场时间</span><span title={data?.strExitTime || "--"}>{data?.strExitTime || "--"}</span></div>
+            <div className="item"><span>入场记录来源</span><span title={data?.entryDataSourceName || "--"}>{data?.entryDataSourceName || "--"}</span></div>
+            <div className="item"><span>出场记录来源</span><span title={data?.exitDataSourceName || "--"}>{data?.exitDataSourceName || "--"}</span></div>
+            <div className="item"><span>出入场图像</span><span>查看</span></div>
+          </div>
+        </div>
+        : null
+      }
+      {type == "2" ?
+        <div className="car">
+          <div className="title"><span>订单详情</span><span className="line"></span></div>
+          <div className="content">
+            <div className="item"><span>订单金额</span><span title={data?.shouldPayMoney || "--"}>{data?.shouldPayMoney || "--"}</span></div>
+            <div className="item"><span>优惠总计</span><span title={data?.totalCoupon || "--"}>{data?.totalCoupon || "--"}</span></div>
+            <div className="item"><span>实付总计</span><span title={data?.totalPreMoney || "--"}>{data?.totalPreMoney || "--"}</span></div>
+            <div className="item"><span>欠费总计</span><span title={data?.sumActualPay || "--"}>{data?.sumActualPay || "--"}</span></div>
+          </div>
+        </div>
+        : null
+
+      }
+      {type == "abnormalOrder" ?
+        <div className="car-img">
+          <div className="title"><span>入场照片</span><span className="line"></span></div>
+          <div className="img-box">
+            <div className="img-left">
+              {data?.in_veh_pic ?
+                <div className="img-null">
+                  <Image
+                    src={data?.in_veh_pic}
+                    fallback={errorImg}
+                    preview={carImgPreview}
+                    onError={() => { setCarImgPreview(false) }}
+                  />
+                </div>
+                :
+                <div className="img-null">暂无车辆照片</div>
+              }
+              <span>车辆照片</span>
+            </div>
+            <div className="img-right">
+              {data?.in_plate_pic ?
+                <div className="img-null">
+                  <Image
+                    src={data?.in_plate_pic}
+                    fallback={errorImg}
+                    preview={plateImgPreview}
+                    onError={() => { setPlateImgPreview(false) }}
+                  />
+                </div>
+                :
+                <div className="img-null">暂无车牌照片</div>
+              }
+              <span>车牌照片</span>
+            </div>
+          </div>
+        </div>
+        : null
+      }
+    </div>
+  );
+}
+
+export default VehicleInformation;
diff --git a/src/components/ParkingRecordModal/dataSource.js b/src/components/ParkingRecordModal/dataSource.js
new file mode 100644
index 0000000..3d8d5ef
--- /dev/null
+++ b/src/components/ParkingRecordModal/dataSource.js
@@ -0,0 +1,183 @@
+//用来存储表头的js文件
+import React from "react";
+import { Button } from "antd";
+//支付记录的表头
+export const payRecordColumns = [
+  {
+    title: "序号",
+    dataIndex: "id",
+    key: "id",
+    align: "center",
+    render: (text, record, index) => index + 1,
+  },
+  {
+    title: "订单ID",
+    dataIndex: "order_id",
+    key: "order_id",
+    align: "center",
+  },
+  {
+    title: "入场时间",
+    dataIndex: "admission_time",
+    key: "admission_time",
+    align: "center",
+  },
+  {
+    title: "计费时间",
+    dataIndex: "charging_time",
+    key: "charging_time",
+    align: "center",
+  },
+  {
+    title: "支付时间",
+    dataIndex: "pay_time",
+    key: "pay_time",
+    align: "center",
+  },
+  {
+    title: "应收金额",
+    dataIndex: "receivable_amount",
+    key: "receivable_amount",
+    align: "center",
+  },
+  {
+    title: "优惠金额",
+    dataIndex: "discount_amount",
+    key: "discount_amount",
+    align: "center",
+  },
+  {
+    title: "实付金额",
+    dataIndex: "paid_in_money",
+    key: "paid_in_money",
+    align: "center",
+  },
+  {
+    title: "支付类型",
+    dataIndex: "paymentType",
+    key: "paymentType",
+    align: "center",
+  },
+  {
+    title: "支付渠道",
+    dataIndex: "payment_channels",
+    key: "payment_channels",
+    align: "center",
+  },
+  {
+    title: "支付设备",
+    dataIndex: "payment_equipment",
+    key: "payment_equipment",
+    align: "center",
+  },
+  {
+    title: "支付人",
+    dataIndex: "pay_person",
+    key: "pay_person",
+    align: "center",
+  },
+  {
+    title: "付款路段",
+    dataIndex: "pay_road",
+    key: "pay_road",
+    align: "center",
+  },
+  {
+    title: "第三方流水ID",
+    dataIndex: "third_party_flow_id",
+    key: "third_party_flow_id",
+    align: "center",
+  },
+];
+//退款订单的表头
+export const refundRecordColumns = [
+  {
+    title: "序号",
+    dataIndex: "id",
+    key: "id",
+    align: "center",
+    render: (text, record, index) => index + 1,
+  },
+  {
+    title: "退款方式",
+    dataIndex: "refund_type",
+    key: "refund_type",
+    align: "center",
+  },
+  {
+    title: "支付渠道",
+    dataIndex: "pay_road",
+    key: "pay_road",
+    align: "center",
+  },
+  {
+    title: "支付设备",
+    dataIndex: "pay_time",
+    key: "pay_time",
+    align: "center",
+  },
+  {
+    title: "退款原因",
+    dataIndex: "reason",
+    key: "reason",
+    align: "center",
+  },
+  {
+    title: "退款金额",
+    dataIndex: "refund_amonut",
+    key: "refund_amonut",
+    align: "center",
+  },
+  {
+    title: "申请人",
+    dataIndex: "application_person",
+    key: "application_person",
+    align: "center",
+  },
+  {
+    title: "申请时间",
+    dataIndex: "application_time",
+    key: "application_time",
+    align: "center",
+  },
+  {
+    title: "退款时间",
+    dataIndex: "refund_time",
+    key: "refund_time",
+    align: "center",
+  },
+];
+//操作记录
+export const operatorRecordColumns = [
+  {
+    title: "序号",
+    dataIndex: "id",
+    key: "id",
+    align: "center",
+    render: (text, record, index) => index + 1,
+  },
+  {
+    title: "操作类型",
+    dataIndex: "type",
+    key: "type",
+    align: "center",
+  },
+  {
+    title: "操作来源",
+    dataIndex: "source",
+    key: "source",
+    align: "center",
+  },
+  {
+    title: "操作人/设备",
+    dataIndex: "object",
+    key: "object",
+    align: "center",
+  },
+  {
+    title: "操作时间",
+    dataIndex: "time",
+    key: "time",
+    align: "center",
+  },
+];
diff --git a/src/components/ParkingRecordModal/index.jsx b/src/components/ParkingRecordModal/index.jsx
new file mode 100644
index 0000000..3191308
--- /dev/null
+++ b/src/components/ParkingRecordModal/index.jsx
@@ -0,0 +1,260 @@
+import React, { useState, useRef, useEffect } from "react";
+import { Modal, Tabs, Table, message, Button } from "antd";
+import { dictionary, utils } from "@/config/common";
+import VehicleInformation from "./VehicleInformation";
+import RecordReviewModal from "./RecordReviewModal";
+import { payRecordColumns, refundRecordColumns, operatorRecordColumns } from "./dataSource";
+import moment from "moment";
+import ajax from "@/services";
+import "./index.scss";
+const ParkingRecordModal = (props) => {
+  const {
+    className = "",
+    title = null,
+    open = false,
+    tableData = {},
+    tabsTitle = [
+      {text: "停车记录信息", value: "1"},
+      {text: "支付记录", value: "2"},
+      {text: "退款订单", value: "3"},
+      {text: "操作记录", value: "4"},
+      {text: "历史处理", value: "5"},
+    ],
+    onCancel,
+  } = props;
+
+  const [modalVisible, setModalVisible] = useState(false); // 模态框显示隐藏
+  const [tabKey, setTabKey] = useState("1"); // tab默认值
+  const [loading, setLoading] = useState(false); // 检索按钮加载状态
+  const [payRecord, setPayRecord] = useState([]); //支付记录数据
+  const [recordReviewModal, setRecordReviewModal] = useState({open: false, data: []}); // 历史记录详情
+
+  //历史处理的表头
+  const historyProgressColumns = [
+    {
+      title: "序号",
+      dataIndex: "id",
+      key: "id",
+      align: "center",
+      render: (text, record, index) => index + 1,
+    },
+    {
+      title: "状态",
+      dataIndex: "status",
+      key: "status",
+      align: "center",
+      render: (text) => {
+        return text == 1
+          ? "待审核"
+          : text == 2
+            ? "已完成"
+            : text == 3
+              ? "已驳回"
+              : "--"
+      }
+    },
+    {
+      title: "处理记录ID",
+      dataIndex: "deal_record_id",
+      key: "deal_record_id",
+      align: "center",
+      render: (text) => (
+        <>
+          <a onClick={() => {
+            navigator.clipboard.writeText(`${text}`).then(() => { message.success("已复制到剪切板") });
+          }}>{text}</a>
+        </>
+      ),
+    },
+    {
+      title: "处理时间",
+      dataIndex: "deal_time",
+      key: "deal_time",
+      align: "center",
+    },
+    {
+      title: "处理人",
+      dataIndex: "dealer",
+      key: "dealer",
+      align: "center",
+    },
+    {
+      title: "业务订单类型",
+      dataIndex: "business_type",
+      key: "business_type",
+      align: "center",
+    },
+    {
+      title: "更改项",
+      dataIndex: "change_content",
+      key: "change_content",
+      align: "center",
+      // render: (text) => {
+      //   return text == 1
+      //     ? "调整出场时间"
+      //     : text == 2
+      //       ? "变更车牌号"
+      //       : text == 3
+      //         ? "更改订单金额"
+      //         : text == 4
+      //           ? "免费该订单"
+      //           : "作废该订单"
+      // }
+    },
+    {
+      title: "更改初始值",
+      dataIndex: "initial_value",
+      key: "initial_value",
+      align: "center",
+    },
+    {
+      title: "更改更新值",
+      dataIndex: "update_value",
+      key: "update_value",
+      align: "center",
+    },
+    {
+      title: "操作",
+      dataIndex: "operation",
+      key: "operation",
+      align: "center",
+      fixed: "right",
+      render: (_, record) => {
+        return (
+          <Button
+            type="primary"
+            onClick={() => {$historyOperation(record?.deal_record_id)}}
+          >
+            操作
+          </Button>
+        );
+      },
+    },
+  ];
+
+  // 模态框关闭
+  const $handleCancel = () => {
+    setModalVisible(false);
+    setTabKey("1");
+    setPayRecord([]);
+    if(onCancel) {
+      onCancel(false);
+    };
+  };
+
+  // tab切换
+  const $changeKey = (key) => {
+    setTabKey(key);
+    setPayRecord([]);
+    if(key == 1) return;
+    if(!tableData?.park_id) return message.error("未获取到停车订单ID,请重新选择!")
+    setLoading(true);
+    let url = 
+    key == "2" ? ajax.getStartExceptionPaymentList :   // 支付记录
+    key == "3" ? ajax.getStartExceptionRefundList :    // 退款订单
+    key == "4" ? ajax.getStartExceptionHandleList :    // 操作记录
+    key == "5" ? ajax.getStartExceptionHistoryList : null;  // 历史处理
+    url({park_record_id: tableData?.park_id}).then((res) => {
+      setLoading(false);
+      if (res.status === 20000 || res.status == 0) {
+        setPayRecord(res?.data?.list || []);
+      } else {
+        message.error(res.message);
+      }
+    }).catch((error) => {
+      setLoading(false);
+      message.error(error.message);
+    });
+  };
+
+  // 表格
+  const $renderModalTable = (columns, dataSource) => {
+    return (
+      <Table
+        className="table"
+        rowKey={(row) => row?.order_id || row?.id || row?.deal_record_id || Math.random()*10000 }
+        columns={columns}
+        dataSource={dataSource}
+        scroll={{ y: 670 }}
+        loading={loading}
+        pagination={false}
+      />
+    );
+  };
+
+  // 历史记录操作详情
+  const $historyOperation = (id) => {
+    ajax.getStartExceptionParkingRecordsInfo({id}).then((res) => {
+      if (res.status === 20000 || res.status == 0) {
+        setRecordReviewModal({open: true, data: res?.data || []})
+      } else {
+        message.error(res.message);
+      }
+    }).catch((error) => {
+      message.error(error.message);
+    });
+  };
+
+  useEffect(() => {
+    setModalVisible(open)
+  }, [open]);
+
+  return (
+    <>
+      <Modal
+      className={`parking-record-modal ${className}`}
+      title={title}
+      open={modalVisible}
+      onCancel={$handleCancel}
+      destroyOnClose={true}
+      footer={null}
+    >
+      <Tabs 
+        activeKey={tabKey} 
+        onChange={$changeKey}
+        items={
+          tabsTitle.map((item) => {
+            let tem;
+            switch (tabKey) {
+              case "1":
+                tem = <VehicleInformation data={tableData} type="1" />;
+                break;
+              case "2":
+                // 支付记录
+                tem = $renderModalTable(payRecordColumns, payRecord)
+                break;
+              case "3":
+                // 退款订单
+                tem = $renderModalTable(refundRecordColumns, payRecord)
+                break;
+              case "4":
+                // 操作记录
+                tem = $renderModalTable(operatorRecordColumns, payRecord)
+                break;
+              case "5":
+                // 历史处理
+                tem = $renderModalTable(historyProgressColumns, payRecord)
+                break;
+              default:
+                break;
+            }
+            return{
+              label: item.text,
+              key: item.value,
+              children: tem
+            }
+          })
+        } 
+      />
+      </Modal>
+      <RecordReviewModal
+        title="异常订单处理记录审核"
+        {...recordReviewModal}
+        disabledModal={true}
+        onCancel={() => {setRecordReviewModal({open: false, data: []})}}
+      />
+    </>
+  );
+}
+
+export default ParkingRecordModal;
diff --git a/src/components/ParkingRecordModal/index.scss b/src/components/ParkingRecordModal/index.scss
new file mode 100644
index 0000000..8432c8d
--- /dev/null
+++ b/src/components/ParkingRecordModal/index.scss
@@ -0,0 +1,290 @@
+@import "@/assets/css/mixin.scss";
+.parking-record-modal {
+  width: 1500px !important;
+  top: 20px !important;
+  .ant-modal-header {
+    padding: 16px;
+  }
+  .ant-modal-content {
+    .ant-modal-body {
+      padding-top: 0;
+      .ant-tabs .ant-tabs-nav-wrap .ant-tabs-nav-list {
+        width: 50%;
+      }
+    }
+  }
+  .item-title {
+    display: flex;
+    align-items: center;
+    margin-bottom: 15px;
+    color: #fff;
+    font-weight: 700;
+    &::before {
+      content: "";
+      display: inline-block;
+      width: 5px;
+      height: 14px;
+      margin-right: 10px;
+      background-color: #177ddc;
+    }
+  }
+  .table {
+    width: 100%;
+    margin-top: 20px;
+    .ant-table-body {
+      @include scrollBar(var(--color-user-list-bg), #3B97FF);
+
+    }
+    .ant-table-thead {
+      th {
+        // padding: 0px 16px;
+        height: 50px;
+      }
+
+      .ant-table-cell {
+        background: var(--color-table-header-bg) !important;
+        font-weight: 700;
+
+        &::before {
+          display: none;
+        }
+      }
+    }
+
+    .ant-table-tbody {
+      tr {
+        &:nth-child(2n) {
+          td {
+            background: #3E4557 !important;
+          }
+        }
+
+        &:hover {
+          td {
+            background: #3E4557 !important;
+          }
+        }
+
+        td {
+          background: #3E4557 !important;
+          // border-bottom-color: #f2f2f2;
+        }
+      }
+    }
+
+    .ant-pagination-options {
+      .ant-select {
+        &:hover {
+          .ant-select-selector {
+            border-color: #f5f6f9;
+            box-shadow: none;
+          }
+        }
+      }
+
+      .ant-select-selector {
+        border-color: #f5f6f9;
+      }
+
+      .ant-select-focused {
+        .ant-select-selector {
+          box-shadow: none !important;
+          border-color: #f5f6f9 !important;
+        }
+      }
+
+      .ant-pagination-options-quick-jumper {
+        input {
+          background: #3E4557;
+          border-color: #f5f6f9;
+
+          &:focus {
+            box-shadow: none;
+          }
+        }
+      }
+    }
+    .ant-table-cell-fix-left, .ant-table-cell-fix-right {
+      z-index: 2;
+    }
+  }
+  .process-view {
+    margin-top: 16px;
+    .item-content {
+      display: flex;
+      justify-content: center;
+      // align-items: center;
+      .start,
+      .end {
+        display: flex;
+        flex-direction: column;
+        width: 40%;
+        align-items: center;
+        overflow: hidden;
+        .num {
+          position: relative;
+          width: 30px;
+          height: 30px;
+          text-align: center;
+          line-height: 30px;
+          border: 1px solid #fff;
+          border-radius: 50%;
+        }
+      }
+      .start .num::after {
+        content: "";
+        position: absolute;
+        left: 100%;
+        width: 1000px;
+        height: 2px;
+        background-color: #fff;
+        margin-top: 14px;
+        margin-left: 10px;
+      }
+      .end .num::before {
+        content: "";
+        position: absolute;
+        right: 100%;
+        width: 1000px;
+        height: 2px;
+        background-color: #fff;
+        margin-top: 14px;
+        margin-right: 10px
+      }
+      .centre {
+        margin: 7px 10px 0;
+      }
+    }
+  }
+  .order-text,
+  .process-mode {
+    em {
+      margin-right: 5px;
+      color: #a61d24;
+    }
+  }
+  .order-text {
+    margin-top: 15px;
+    >span {
+      display: block;
+      margin-bottom: 10px;
+    }
+  }
+  .process-mode {
+    margin-top: 15px;
+    .yisa-search {
+      >label {
+        margin-right: 5px;
+      }
+    }
+  }
+}
+.vehicle-information-modal {
+  .park, 
+  .car,
+  .car-img {
+    margin-top: 20px;
+    .title {
+      display: flex;
+      align-items: center;
+      font-size: 14px;
+      .line {
+        flex: 1;
+        border: 1px dotted #607092;
+        padding-left: 10px;
+      }
+      >span {
+        &:first-child {
+          margin-right: 10px;
+        }
+      }
+    }
+    .content {
+      display: flex;
+      flex-wrap: wrap;
+      padding: 20px 20px 0;
+      font-size: 14px;
+      >.item {
+        display: flex;
+        align-items: center;
+        width: calc(100% / 3 - 10px);
+        margin-top: 10px;
+        &:nth-child(3n - 1) {
+          margin-left: 15px;
+          margin-right: 15px;
+        }
+        &:nth-child(-n + 3) {
+          margin-top: 0;
+        }
+        >span {
+          display: inline-block;
+          width: 120px;
+          height: 32px;
+          line-height: 32px;
+          background: rgba(150, 161, 192, 0.24);
+          text-align: center;
+          &:last-child {
+            width: 320px;
+            height: 32px;
+            padding: 0 20px;
+            text-align: center;
+            background: #3E4557;
+            box-shadow: 0px 3px 8px 0px rgba(0, 0, 0, 0.12);
+            @include textEllipsis()
+          }
+        }
+      }
+    }
+  }
+  .img-box {
+    display: flex;
+    padding: 20px 20px 0;
+    .img-left,
+    .img-right {
+      width: 400px;
+      .img-null {
+        border: 1px solid #607092;
+        width: 100%;
+        height: 200px;
+        line-height: 200px;
+        text-align: center;
+        .ant-image {
+          width: 100%;
+          height: 100%;
+          .ant-image-img {
+            height: 100%;
+            object-fit: contain;
+          }
+        }
+      }
+      >span {
+        display: block;
+        text-align: center;
+        margin-top: 10px;
+      }
+    }
+    .img-right {
+      margin-left: 50px;
+    }
+  }
+}
+.abnormal-order--table-content {
+  padding: 0 50px;
+  .park {
+    margin-top: 0;
+  }
+  .park, 
+  .car,
+  .car-img {
+    .content {
+      >.item {
+        >span {
+          &:last-child {
+            width: 270px;
+          }
+        }
+      }
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/src/components/QuickMenu/index.jsx b/src/components/QuickMenu/index.jsx
index ce2cac1..3fdcae3 100644
--- a/src/components/QuickMenu/index.jsx
+++ b/src/components/QuickMenu/index.jsx
@@ -55,7 +55,8 @@ function QuickMenu(props) {
           h: endMoment.format('HH'),
           m: endMoment.format('mm'),
           s: endMoment.format('ss')
-        }
+        },
+        value: periodId
       }, '')
 
     } else if (periodId < 0) {
@@ -71,7 +72,8 @@ function QuickMenu(props) {
           h: endMoment.format('HH'),
           m: endMoment.format('mm'),
           s: endMoment.format('ss')
-        }
+        },
+        value: periodId
       }, "2")
     } else {
       $yisaOnChange({
@@ -86,7 +88,8 @@ function QuickMenu(props) {
           h: nowMoment.format('HH'),
           m: nowMoment.format('mm'),
           s: nowMoment.format('ss')
-        }
+        },
+        value: periodId
       }, '')
     }
 
@@ -103,13 +106,15 @@ function QuickMenu(props) {
         _v = {
           time: v.time,
           startDateTime: v.startDateTime && `${(v.startDateTime).format(dateArr[picker])} ${_bTime}`,
-          endDateTime: v.endDateTime && `${(v.endDateTime).format(dateArr[picker])} ${_eTime}`
+          endDateTime: v.endDateTime && `${(v.endDateTime).format(dateArr[picker])} ${_eTime}`,
+          value: v?.value || ""
         }
       } else {
         _v = {
           time: v.time,
           startDateTime: v.startDateTime && (v.startDateTime).format(dateArr[picker]),
-          endDateTime: v.endDateTime && (v.endDateTime).format(dateArr[picker])
+          endDateTime: v.endDateTime && (v.endDateTime).format(dateArr[picker]),
+          value: v?.value || ""
         }
       }
       onChange(_v)
diff --git a/src/components/index.jsx b/src/components/index.jsx
index 10f3cc4..c2269ba 100644
--- a/src/components/index.jsx
+++ b/src/components/index.jsx
@@ -33,6 +33,7 @@ import TreeSelectGroup from "./TreeSelectGroup";
 import SelectLntLat from "./SelectLngLat";
 import ImportBtn from './ImportBtn';
 import QuickMenu from './QuickMenu';
+import ParkingRecordModal from './ParkingRecordModal';
 
 export * from "./layout";
 export * from "./MapComponets";
@@ -74,5 +75,6 @@ export {
   TreeSelectGroup,
   SelectLntLat,
   ImportBtn,
-  QuickMenu
+  QuickMenu,
+  ParkingRecordModal
 };
diff --git a/src/config/character.config.js b/src/config/character.config.js
index 05223bc..d71a6f2 100644
--- a/src/config/character.config.js
+++ b/src/config/character.config.js
@@ -1,5 +1,6 @@
 export default {
   pageSizeOptions: [20, 40, 60, 100, 200], // 页码
+  pageSizeOptions1: [15, 30, 60, 100, 200], // 页码
   maxDate: 365, // 时间组件最大选择范围
   //事件状态
   eventStateList: [{
diff --git a/src/pages/FinancialMgm/ExceptionDeal/StartExceptionDeal/index.jsx b/src/pages/FinancialMgm/ExceptionDeal/StartExceptionDeal/index.jsx
index e303eed..6d66c49 100644
--- a/src/pages/FinancialMgm/ExceptionDeal/StartExceptionDeal/index.jsx
+++ b/src/pages/FinancialMgm/ExceptionDeal/StartExceptionDeal/index.jsx
@@ -1,35 +1,10 @@
 import React, { useState, useRef, useEffect } from "react";
-import {
-  message,
-  Pagination,
-  Table,
-  Space,
-  Modal,
-  Select,
-  Input,
-  Cascader,
-  DatePicker,
-  Button
-} from "antd";
+import { message, Pagination, Table, Select, Input, Cascader, DatePicker, Button, Popover } from "antd";
 import { dictionary, utils } from "@/config/common";
 import moment from "moment";
-import {
-  useSessionStorageState,
-  useUpdateEffect,
-  useSize,
-  useUpdate,
-} from "ahooks";
+import { useSessionStorageState, useUpdateEffect } from "ahooks";
 import ajax from "@/services";
-import {
-  QuickMenu,
-  FormSelect,
-  OptionPanel,
-  ResultPanel,
-  FormSliderPicker,
-  AreaCascader,
-  ImgResize,
-  ImgZoom,
-} from "@/components";
+import { QuickMenu, ParkingRecordModal} from "@/components";
 import "./index.scss";
 import errorImg from "@/assets/images/layout/error.png";
 import { useLocation } from "react-router-dom";
@@ -37,31 +12,184 @@ function StartExceptionDeal() {
   // 默认数据
   const defaultData = {
     park_id: "", // 停车订单ID
-    operator_id: 0, // 商户名称
-    area: [0], // 区域
-    road_id: "", // 车场名称
+    operator: 0, // 商户名称
+    region: [0], // 区域
+    road: "", // 车场名称
     road_type: 0, // 车场类型
     plate: "", // 车牌号
-    exit_gate: 2, // 出入场类型
-    start_date: moment().subtract(7, "days").startOf("day").format("YYYY-MM-DD HH:mm:ss"), // 开始时间
-    end_date: moment().format("YYYY-MM-DD HH:mm:ss"), // 结束时间
+    type: 1, // 出入场类型 1: 入场 2: 出场
+    start_time: moment().subtract(7, "days").startOf("day").format("YYYY-MM-DD HH:mm:ss"), // 开始时间
+    end_time: moment().format("YYYY-MM-DD HH:mm:ss"), // 结束时间
+    pn: 1,
+    page_size: dictionary?.pageSizeOptions1[0]
   };
-  // session缓存
-  // const [defaultParams, setDefaultParams] = useSessionStorageState(
-  //   "formData_editOrderInquiry",
-  //   { defaultValue: null }
-  // );
 
-  // 表单数据
-  const [formData, setFormData] = useState({
-    ...defaultData,
-  });
-  const [operatorList, setOperatorList] = useState([
-    { value: 0, label: "全部" },
-  ]); //商户名称
+  const [formData, setFormData] = useState(defaultData); // 表单数据
+  const [operatorList, setOperatorList] = useState([{ value: 0, label: "全部" }]); //商户名称
   const [areaList, setAreaList] = useState([]); //区域的下拉数据
-  
   const [loading, setLoading] = useState(false); // 检索按钮加载状态
+  const [tableSelectCheck, setTableSelectCheck] = useState([]); // 列表选中的停车订单id
+  const [parkingRecordModal, setParkingRecordModal] = useState({open: false, tableData: {}}); // 详情弹框
+
+  // 表格返回数据
+  const [resultData, setResultData] = useState({
+    total: 0,
+    list: [],
+  });
+
+  //列表
+  const tableColumns = [
+    {
+      title: "序号",
+      width: 60,
+      align: "center",
+      fixed: 'left',
+      render: (text, record, index) => index + 1,
+    },
+    {
+      title: "停车订单ID",
+      dataIndex: "park_id",
+      key: "park_id",
+      width: 200,
+      align: "center",
+      fixed: 'left',
+      render: (text) => (
+        <>
+          <a onClick={() => {
+            navigator.clipboard.writeText(`${text}`).then(() => { message.success("已复制到剪切板") });
+          }}>{text}</a>
+        </>
+      ),
+    },
+    {
+      title: "停车时长",
+      dataIndex: "admission_time",
+      key: "admission_time",
+      align: "center",
+      width: 150,
+    },
+    {
+      title: "区域",
+      dataIndex: "region",
+      key: "region",
+      align: "center",
+      width: 150,
+    },
+    {
+      title: "运营商名称",
+      dataIndex: "operator",
+      key: "operator",
+      align: "center",
+      width: 150,
+    },
+    {
+      title: "停车场名称",
+      dataIndex: "road",
+      key: "road",
+      align: "center",
+      width: 150,
+    },
+    {
+      title: "车场类型",
+      dataIndex: "road_type",
+      key: "road_type",
+      align: "center",
+      width: 150,
+    },
+    {
+      title: " 车牌号",
+      dataIndex: "plate",
+      key: "plate",
+      align: "center",
+      width: 150,
+    },
+    {
+      title: "泊位号",
+      dataIndex: "berth_id",
+      key: "berth_id",
+      align: "center",
+      width: 150,
+    },
+    {
+      title: "入场时间",
+      dataIndex: "in_time",
+      key: "in_time",
+      align: "center",
+      width: 150,
+    },
+    {
+      title: "计费时间",
+      dataIndex: "out_time",
+      key: "out_time",
+      align: "center",
+      width: 150,
+    },
+    {
+      title: "订单金额(元)",
+      dataIndex: "order_amount",
+      key: "order_amount",
+      align: "center",
+      width: 150,
+    },
+    {
+      title: "欠费总计(元)",
+      dataIndex: "arrears_mount",
+      key: "arrears_mount",
+      align: "center",
+      width: 150,
+    },
+    {
+      title: '操作',
+      key: 'operation',
+      dataIndex: 'operation',
+      align: "center",
+      fixed: 'right',
+      width: 100,
+      render: (text, record, index) => {
+        return <>
+          <Popover 
+            overlayClassName="start-exception-deal-operate"
+            content={
+              <div className="operateBtn operate-btn" style={{ cursor: "pointer" }} trigger="hover">
+                <div className="hover" onClick={() => {setParkingRecordModal({open: true, tableData: record || {}})}}>查看</div>
+                { record?.status_now == 2 ?
+                  <div className="disabled">处理中</div> :
+                  <div className="hover" onClick={() => {console.log("处理");}}>处理</div>
+                }
+              </div>
+            }
+          >
+            <Button type="primary">操作</Button>
+          </Popover>
+        </>
+      },
+    },
+  ];
+
+  // 批量处理
+  const $batchProcessing = () => {
+    if(!tableSelectCheck?.length) return message.error("请选择需要处理的数据!");
+    console.log(tableSelectCheck);
+  };
+
+  // 分页
+  const $changePn = (pn, page_size) => {
+    let temFormData = {};
+    if(formData.page_size == page_size) {
+      temFormData = {
+        ...formData,
+        pn
+      };
+    } else {
+      temFormData = {
+        ...formData, 
+        pn: 1, 
+        page_size,
+      };
+    };
+    setFormData(temFormData);
+    $getTableList(temFormData);
+  };
 
   // 获取商户名称
   const $getAllOperator = () => {
@@ -97,12 +225,34 @@ function StartExceptionDeal() {
       });
   };
 
+  // 获取表格数据
+  const $getTableList = (value = {}) => {
+      setTableSelectCheck([]); // 清空表格选中项
+    let _data = {
+      ...formData,
+      ...value
+    };
+    setLoading(true);
+    ajax.getStartExceptionTableData(_data).then((res) => {
+      setLoading(false);
+      if (res.status === 20000 || res.status == 0) {
+        setResultData(res?.data || {});
+      } else {
+        message.error(res.message);
+      }
+    }).catch((error) => {
+      setLoading(false);
+      message.error(error.message);
+    });
+  };
+
   useEffect(() => {
     $getAllOperator();
     $getAreaList();
+    $getTableList();
   }, []);
   return (
-    <div className="start-exception-deal edit-order-inquiry">
+    <div className="start-exception-deal">
       <div className="paid-search">
         <div className="title">查询条件</div>
         <div className="form-Wrap">
@@ -132,9 +282,9 @@ function StartExceptionDeal() {
                 value: "id",
                 children: "children",
               }}
-              value={formData.area}
+              value={formData.region}
               onChange={(v, option) => {
-                setFormData({ ...formData, area: v ? v : [0] });
+                setFormData({ ...formData, region: v ? v : [0] });
               }}
             />
           </div>
@@ -145,8 +295,8 @@ function StartExceptionDeal() {
               placeholder="请选择"
               options={operatorList}
               allowClear
-              value={formData.operator_id}
-              onChange={(v) => setFormData({ ...formData, operator_id: v || 0})}
+              value={formData.operator}
+              onChange={(v) => setFormData({ ...formData, operator: v || 0})}
             />
           </div>
           <div className="yisa-search">
@@ -155,9 +305,9 @@ function StartExceptionDeal() {
               className="form-con"
               placeholder="请输入车场名称"
               allowClear
-              value={formData?.road_id}
+              value={formData?.road}
               onChange={(e) =>
-                setFormData({ ...formData, road_id: e.target.value || "" })
+                setFormData({ ...formData, road: e.target.value || "" })
               }
             />
           </div>
@@ -192,15 +342,15 @@ function StartExceptionDeal() {
               options={[
                 {
                   label: "出场",
-                  value: 1,
+                  value: 2,
                 },
                 {
                   label: "入场",
-                  value: 2,
+                  value: 1,
                 },
               ]}
-              value={formData.exit_gate}
-              onChange={(v) => setFormData({ ...formData, exit_gate: v})}
+              value={formData.type}
+              onChange={(v) => setFormData({ ...formData, type: v})}
             />
           </div>
           <div className="yisa-search">
@@ -209,10 +359,10 @@ function StartExceptionDeal() {
               className="form-con"
               showTime 
               format={"YYYY-MM-DD HH:mm:ss"}
-              value={moment(formData.start_date)}
-              disabledDate={(current) => current > moment(formData.end_date)}
+              value={moment(formData.start_time)}
+              disabledDate={(current) => current > moment(formData.end_time)}
               onChange={(date, time) => {
-                setFormData({ ...formData, start_date: time || null })
+                setFormData({ ...formData, start_time: time || null })
               }}
             />
           </div>
@@ -222,22 +372,44 @@ function StartExceptionDeal() {
               className="form-con"
               showTime 
               format={"YYYY-MM-DD HH:mm:ss"}
-              value={moment(formData.end_date)}
-              disabledDate={(current) => current < moment(formData.start_date)}
+              value={moment(formData.end_time)}
+              disabledDate={(current) => current < moment(formData.start_time)}
               onChange={(date, time) => {
-                setFormData({ ...formData, end_date: time || null })
+                setFormData({ ...formData, end_time: time || null })
               }}
             />
           </div>
           <div className="yisa-search">
             <label></label>
-            <QuickMenu 
+            <QuickMenu
+              dropdownData = {[
+                { text: '昨日', value: 1 },
+                { text: '近30天', value: 30 },
+                { text: '近90天', value: 90 },
+                { text: '近180天', value: 180 }
+              ]}
               onChange={(v) => {
-                console.log(v);
+                let plate = formData?.plateNumber || "";
+                let value = v?.value || 0;
+                if (plate) {
+                  console.log(utils?.validationPlate(plate))
+                  if (utils?.validationPlate(plate)) {
+                    setFormData({
+                      ...formData, 
+                      end_time: v?.endDateTime || null, 
+                      start_time: v?.startDateTime || null,
+                    })
+                  } else {
+                    message.error('请正确输入车牌号')
+                    return
+                  }
+                } else {
+                  if(value > 30) return message.warning("请输入您查询的车牌号!");
+                }
                 setFormData({
                   ...formData, 
-                  end_date: v?.endDateTime || null, 
-                  start_date: v?.startDateTime || null,
+                  end_time: v?.endDateTime || null, 
+                  start_time: v?.startDateTime || null,
                 })
               }}
             />
@@ -245,14 +417,22 @@ function StartExceptionDeal() {
           <div className="form-btn">
               <Button
                 className="reset"
-                onClick={() => setFormData(defaultData)}
+                onClick={() => setFormData({...defaultData, pn: formData?.pn || 1, page_size: formData?.page_size || dictionary?.pageSizeOptions1[0]})}
               >
                 重置
               </Button>
               <Button
                 className="submit"
                 type="primary"
-                // onClick={handleSearch}
+                onClick={() => {
+                  let _data = {
+                    ...formData,
+                    pn: 1,
+                    page_size: dictionary?.pageSizeOptions1[0]
+                  }
+                  setFormData(_data)
+                  $getTableList(_data)
+                }}
                 loading={loading}
               >
                 查询
@@ -260,6 +440,55 @@ function StartExceptionDeal() {
             </div>
         </div>
       </div>
+      <div className="paid-result">
+        <div className="result">
+          <div className="row-head">
+            <span className="number-wrapper">申诉记录列表</span>
+            <div onClick={$batchProcessing}>
+              <Button type="primary">
+                批量处理
+              </Button>
+            </div>
+          </div>
+          <div className="result-data">
+            <Table
+              rowKey={(row) => row.park_id}
+              className="table"
+              dataSource={resultData?.list || []}
+              columns={tableColumns}
+              pagination={false}
+              loading={loading}
+              rowSelection={{
+                selectedRowKeys: tableSelectCheck,
+                onChange: (selectedRowKeys, selectedRows) => {
+                  console.log(selectedRowKeys, selectedRows);
+                  setTableSelectCheck(selectedRowKeys)
+                },
+                getCheckboxProps: (record) => ({
+                  disabled: record?.status_now == 2
+                })
+              }}
+              scroll={{ x: "1500", y: "calc(100vh - 310px)" }}
+            />
+            <Pagination
+              className="pagination-common"
+              showSizeChanger={true}
+              showQuickJumper= {true}
+              showTotal={() => `共 ${resultData.total|| 0} 条`}
+              total={resultData.total}
+              current={formData.pn}
+              pageSize={formData.page_size}
+              pageSizeOptions={dictionary?.pageSizeOptions1}
+              onChange={$changePn}
+            />
+          </div>
+        </div>
+      </div>
+      <ParkingRecordModal
+        title = {parkingRecordModal?.tableData?.road || null}
+        {...parkingRecordModal}
+        onCancel={() => {setParkingRecordModal({open: false, tableData: {}})}}
+      />
     </div>
   );
 }
diff --git a/src/pages/FinancialMgm/ExceptionDeal/StartExceptionDeal/index.scss b/src/pages/FinancialMgm/ExceptionDeal/StartExceptionDeal/index.scss
index cd20a32..115c54a 100644
--- a/src/pages/FinancialMgm/ExceptionDeal/StartExceptionDeal/index.scss
+++ b/src/pages/FinancialMgm/ExceptionDeal/StartExceptionDeal/index.scss
@@ -5,6 +5,180 @@ $color-text: var(--color-text);
 $color-primary: var(--color-primary);
 
 .start-exception-deal {
+  display: flex;
+  padding-top: 10px;
+  width: 100%;
+  height: 100%;
+  .paid-search {
+    display: block;
+    width: 375px;
+    padding: 10px 10px 20px 20px;
+    .title {
+      width: 100%;
+      font-size: 16px;
+      font-family: Microsoft YaHei, Microsoft YaHei-Bold;
+      font-weight: 700;
+      text-align: left;
+      color: var(--color-text);
+      margin-bottom: 20px;
+    }
+    .form-Wrap {
+      height: calc(100% - 45px);
+      overflow-y: auto;
+      scrollbar-width: none;
+      -ms-overflow-style: none;
+
+      &::-webkit-scrollbar {
+        display: none;
+      }
+    }
+    .yisa-search {
+      width: 100%;
+      display: flex;
+      align-items: center;
+      margin-bottom: 24px;
+
+      label {
+        color: var(--color-search-list-item-text);
+        flex: 0 0 25%;
+        max-width: 25%;
+        text-align: right;
+        padding-right: 8px;
+      }
+
+      .form-con {
+        flex: 1;
+        width: 220px;
+      }
+    }
+    .form-btn {
+      display: flex;
+      flex-flow: row nowrap;
+      padding: 0 10px;
+      justify-content: space-between;
+      .reset {
+        width: 90px;
+        height: 36px;
+        border-radius: 4px;
+      }
+      .submit {
+        width: calc(100% - 100px);
+        height: 36px;
+        border-radius: 4px;
+      }
+    }
+    .ant-select-selector,
+    .ant-picker,
+    .ant-input {
+      background-color: var(--color-search-list-item-bg) !important;
+      box-shadow: none !important;
+      color: var(--color-search-list-item-value);
+      border-color: var(--color-search-list-item-bd) !important;
+    }
+  }
+  .paid-result {
+    width: calc(100% - 375px);
+    padding-bottom: 15px;
+    padding: 20px;
+    background: var(--color-user-list-bg);
+    border-top-left-radius: 20px;
+    box-shadow: 0px 3px 8px 0px rgba(0, 0, 0, 0.08);
+    .result {
+      height: 100%;
+      display: flex;
+      flex-direction: column;
+      .row-head {
+        height: 32px;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        margin-bottom: 13px;
+      }
+      .result-data {
+        width: 100%;
+        height: calc(100% - 45px - 60px);
+        .table {
+          width: 100%;
+          .ant-table-body {
+            @include scrollBar(var(--color-user-list-bg), #3B97FF);
+  
+          }
+          .ant-table-thead {
+            th {
+              // padding: 0px 16px;
+              height: 50px;
+            }
+      
+            .ant-table-cell {
+              background: var(--color-table-header-bg) !important;
+              font-weight: 700;
+      
+              &::before {
+                display: none;
+              }
+            }
+          }
+      
+          .ant-table-tbody {
+            tr {
+              &:nth-child(2n) {
+                td {
+                  background: #3E4557 !important;
+                }
+              }
+      
+              &:hover {
+                td {
+                  background: #3E4557 !important;
+                }
+              }
+      
+              td {
+                background: #3E4557 !important;
+                // border-bottom-color: #f2f2f2;
+              }
+            }
+          }
+      
+          .ant-pagination-options {
+            .ant-select {
+              &:hover {
+                .ant-select-selector {
+                  border-color: #f5f6f9;
+                  box-shadow: none;
+                }
+              }
+            }
+      
+            .ant-select-selector {
+              border-color: #f5f6f9;
+            }
+      
+            .ant-select-focused {
+              .ant-select-selector {
+                box-shadow: none !important;
+                border-color: #f5f6f9 !important;
+              }
+            }
+      
+            .ant-pagination-options-quick-jumper {
+              input {
+                background: #3E4557;
+                border-color: #f5f6f9;
+      
+                &:focus {
+                  box-shadow: none;
+                }
+              }
+            }
+          }
+          .ant-table-cell-fix-left, .ant-table-cell-fix-right {
+            z-index: 2;
+          }
+        }
+      }
+    }
+  }
 }
 
 .start-exception-deal-cascader {
@@ -12,3 +186,24 @@ $color-primary: var(--color-primary);
     background-color: var(--color-tag-bg) !important;
   }
 }
+
+.start-exception-deal-operate {
+  .ant-popover-inner-content {
+    padding: 5px 5px;
+    width: 100%;
+    .hover,
+    .disabled {
+      padding: 5px 12px;
+      text-align: center;
+    }
+    .hover {
+      &:hover {
+        background-color: #414960;
+      }
+    }
+    .disabled {
+      cursor: no-drop;
+      color: rgba(255, 255, 255, .3);
+    }
+  }
+}
diff --git a/src/pages/FinancialMgm/SettleBill/GeneralBusiness/loadable.jsx b/src/pages/FinancialMgm/SettleBill/GeneralBusiness/loadable.jsx
index e08cbb3..6735596 100644
--- a/src/pages/FinancialMgm/SettleBill/GeneralBusiness/loadable.jsx
+++ b/src/pages/FinancialMgm/SettleBill/GeneralBusiness/loadable.jsx
@@ -253,7 +253,7 @@ function GeneralBusiness() {
       (res) => {
         if (parseInt(res?.status) === 20000) {
           setData({
-            data: res?.data.list || {},
+            data: res?.data.list || [],
             total: res.data.total || 0,
           });
           setLoading(true);
diff --git a/src/pages/MerchantMgm/InvoiceConf/loadable.jsx b/src/pages/MerchantMgm/InvoiceConf/loadable.jsx
index 46166a0..91afdb6 100644
--- a/src/pages/MerchantMgm/InvoiceConf/loadable.jsx
+++ b/src/pages/MerchantMgm/InvoiceConf/loadable.jsx
@@ -61,6 +61,8 @@ function InvoiceConf() {
   const [taxTypeStatus,setTaxTypeStatus]=useState()
   //税率状态
   const [rateStatus,setRateStatus]=useState()
+  // 发票平台
+  const [InvoicePlatform, setInvoicePlatform] = useState(2);
   //开票项目下拉
   //商户类型选择
   const tenantOption = [
@@ -463,6 +465,8 @@ function InvoiceConf() {
           tax_type,
           code,
           auth_code,
+          appkey,
+          appsecret,
           request_url,
           request_code,
           request_func,
@@ -477,6 +481,7 @@ function InvoiceConf() {
           sell_bank_num,
           pay_name,
           check_name,
+          drawer_name,
           mini_amount,
           max_amount,
         } = value
@@ -490,6 +495,8 @@ function InvoiceConf() {
           tax_type,
           code,
           auth_code,
+          appkey,
+          appsecret,
           request_url,
           request_code,
           request_func,
@@ -504,6 +511,7 @@ function InvoiceConf() {
           sell_bank_num,
           pay_name,
           check_name,
+          drawer_name,
           mini_amount,
           max_amount,
         }
@@ -540,11 +548,10 @@ function InvoiceConf() {
       type: 1,
       receipt_type: 0,
       status: 0,
-      last_time: [moment(defaultData.start), moment(defaultData.end)]
     };
     setFormData(defaultData)
-    searchForm.setFieldsValue(value)
-    getTable({ ...value, pn: 1 })
+    searchForm.setFieldsValue({...value, last_time: [moment(defaultData.start), moment(defaultData.end)]})
+    // getTable({ ...value, pn: 1,  start: defaultData.start , end: defaultData.end})
   }
   useEffect(
     () => {
@@ -556,7 +563,6 @@ function InvoiceConf() {
       // getTable()
     }, []
   )
-
   useEffect(() => {
     if (sessionInvoiceConf && Object.values(sessionInvoiceConf).length > 0) {
       // console.log(4333, sessionInvoiceConf)
@@ -582,7 +588,6 @@ function InvoiceConf() {
       setSessionInvoiceConf(formData)
     }
   }, [formData])
-
   return (
     <div className="invoiceConf">
 
@@ -693,7 +698,7 @@ function InvoiceConf() {
                       条件重置
                     </Button>
                     <Button type="primary"  onClick={() => { createData() }}>
-                      创建用户
+                      创建配置
                     </Button>
                   </Form.Item>
                 </Form>
@@ -748,6 +753,9 @@ function InvoiceConf() {
                         initialValues={{
                           receipt_type: 2,
                         }}
+                        // onValuesChange={(v,allValue) => {
+                        //   console.log(v,allValue, 123);
+                        // }}
                       >
                         <Form.Item
                           label="发票平台"
@@ -759,7 +767,7 @@ function InvoiceConf() {
                             { required: true, message: "请选择发票平台!" }
                           ]}
                         >
-                          <Radio.Group>
+                          <Radio.Group onChange={(e) => {setInvoicePlatform(e.target.value)}}>
                             <Radio value={1}>航信</Radio>
                             <Radio value={2}>航信诺诺</Radio>
                             <Radio value={3}>百旺</Radio>
@@ -890,44 +898,95 @@ function InvoiceConf() {
                       <Form
                         form={editForm}
                       >
-                        <Form.Item
-                          label="平台编码:"
-                          labelAlign="left"
-                          name="code"
-                          required={true}
-                          className="form-item"
-                          validateTrigger="onBlur"
-                          rules={[
-                            { required: true, message: "请输入平台编码!" },
-                            {min:0,max:30,message:"最大长度为30"}
-                          ]}
-                        >
-                          <Input
-                            placeholder="请输入平台编码"
+                        {InvoicePlatform != 2 ?
+                          <Form.Item
+                            label="平台编码:"
+                            labelAlign="left"
+                            name="code"
+                            required={true}
                             className="form-item"
-                            maxLength={30}
-                            showCount
-                          />
-                        </Form.Item>
-                        <Form.Item
-                          label="授权码:"
-                          labelAlign="left"
-                          name="auth_code"
-                          required={true}
-                          className="form-item"
-                          validateTrigger="onBlur"
-                          rules={[
-                            { required: true, message: "请输入授权码!" },
-                            {min:0,max:36,message:"最大长度为36"}
-                          ]}
-                        >
-                          <Input
-                            placeholder="请输入授权码"
+                            validateTrigger="onBlur"
+                            rules={[
+                              { required: true, message: "请输入平台编码!" },
+                              { min: 0, max: 30, message: "最大长度为30" }
+                            ]}
+                          >
+                            <Input
+                              placeholder="请输入平台编码"
+                              className="form-item"
+                              maxLength={30}
+                              showCount
+                            />
+                          </Form.Item>
+                          : null
+                        }
+                        {InvoicePlatform != 2 ?
+                          <Form.Item
+                            label="授权码:"
+                            labelAlign="left"
+                            name="auth_code"
+                            required={true}
                             className="form-item"
-                            maxLength={36}
-                            showCount
-                          />
-                        </Form.Item>
+                            validateTrigger="onBlur"
+                            rules={[
+                              { required: true, message: "请输入授权码!" },
+                              { min: 0, max: 36, message: "最大长度为36" }
+                            ]}
+                          >
+                            <Input
+                              placeholder="请输入授权码"
+                              className="form-item"
+                              maxLength={36}
+                              showCount
+                            />
+                          </Form.Item>
+                          : null
+                        }
+                        {InvoicePlatform == 2 ?
+                          <Form.Item
+                            label="APPKEY:"
+                            labelAlign="left"
+                            name="appkey"
+                            required={true}
+                            className="form-item"
+                            validateTrigger="onBlur"
+                            rules={[
+                              { required: true, message: "请输入APPKEY!" },
+                              { min: 0, max: 36, message: "最大长度为36" }
+                            ]}
+                          >
+                            <Input
+                              placeholder="请输入授权码"
+                              className="form-item"
+                              maxLength={36}
+                              showCount
+                            />
+                          </Form.Item>
+                          : null
+                        }
+                        {InvoicePlatform == 2 ?
+                          <Form.Item
+                            label="APPSECRET:"
+                            labelAlign="left"
+                            name="appsecret"
+                            required={true}
+                            className="form-item"
+                            validateTrigger="onBlur"
+                            rules={[
+                              { required: true, message: "请输入APPSECRET!" },
+                              { min: 0, max: 36, message: "最大长度为36" }
+                            ]}
+                          >
+                            <Input
+                              placeholder="请输入授权码"
+                              className="form-item"
+                              maxLength={36}
+                              showCount
+                            />
+                          </Form.Item>
+                          : null
+                        }
+                        
                         <Form.Item
                           label="请求地址:"
                           labelAlign="left"
@@ -947,73 +1006,72 @@ function InvoiceConf() {
                             showCount
                           />
                         </Form.Item>
-                        <Form.Item
-                          label="请求码:"
-                          labelAlign="left"
-                          name="request_code"
-                          required={true}
-                          className="form-item"
-                          validateTrigger="onBlur"
-                          rules={[
-                            { required: true, message: "请输入请求码!" },
-                            {min:0,max:36,message:"最大长度为36"}
-                          ]}
-                        >
-                          <Input
-                            placeholder="请输入请求码"
+                        {InvoicePlatform != 2 ?
+                          <Form.Item
+                            label="请求码:"
+                            labelAlign="left"
+                            name="request_code"
+                            required={true}
                             className="form-item"
-                            maxLength={36}
-                            showCount
-                          />
-                        </Form.Item>
-                        <Form.Item
-                          label="请求函数:"
-                          labelAlign="left"
-                          name="request_func"
-                          required={true}
-                          className="form-item"
-                          validateTrigger="onBlur"
-                          rules={[
-                            { required: true, message: "请输入请求函数!" },
-                            {min:0,max:40,message:"最大长度为40"}
-                          ]}
-                        >
-                          <Input
-                            placeholder="请输入请求函数"
+                            validateTrigger="onBlur"
+                            rules={[
+                              { required: true, message: "请输入请求码!" },
+                              { min: 0, max: 36, message: "最大长度为36" }
+                            ]}
+                          >
+                            <Input
+                              placeholder="请输入请求码"
+                              className="form-item"
+                              maxLength={36}
+                              showCount
+                            />
+                          </Form.Item>
+                          : null
+                        }
+                        {InvoicePlatform != 2 ?
+                          <Form.Item
+                            label="请求函数:"
+                            labelAlign="left"
+                            name="request_func"
+                            required={true}
                             className="form-item"
-                            maxLength={40}
-                            showCount
-                          />
-                        </Form.Item>
-                        <Form.Item
-                          label="目标命名空间:"
-                          labelAlign="left"
-                          name="namespace"
-                          required={true}
-                          className="form-item"
-                          validateTrigger="onBlur"
-                          rules={[
-                            { required: true, message: "请输入目标命名空间!" },
-                            {min:0,max:200,message:"最大长度为200"}
-                          ]}
-                        >
-                          <Input
-                            placeholder="请输入目标命名空间"
+                            validateTrigger="onBlur"
+                            rules={[
+                              { required: true, message: "请输入请求函数!" },
+                              { min: 0, max: 40, message: "最大长度为40" }
+                            ]}
+                          >
+                            <Input
+                              placeholder="请输入请求函数"
+                              className="form-item"
+                              maxLength={40}
+                              showCount
+                            />
+                          </Form.Item>
+                          : null
+                        }
+                        {InvoicePlatform != 2 ?
+                          <Form.Item
+                            label="目标命名空间:"
+                            labelAlign="left"
+                            name="namespace"
+                            required={true}
                             className="form-item"
-                            maxLength={200}
-                            showCount
-                          />
-                        </Form.Item>
-                      </Form>
-
-                    </div>
-
-                  </div>
-                  <div className="right">
-                    <div className="right-wrap">
-                      <Form
-                        form={editForm}
-                      >
+                            validateTrigger="onBlur"
+                            rules={[
+                              { required: true, message: "请输入目标命名空间!" },
+                              { min: 0, max: 200, message: "最大长度为200" }
+                            ]}
+                          >
+                            <Input
+                              placeholder="请输入目标命名空间"
+                              className="form-item"
+                              maxLength={200}
+                              showCount
+                            />
+                          </Form.Item>
+                          : null
+                        }
                         <Form.Item
                           label="纳税人名称:"
                           labelAlign="left"
@@ -1052,6 +1110,16 @@ function InvoiceConf() {
                             showCount
                           />
                         </Form.Item>
+                      </Form>
+
+                    </div>
+
+                  </div>
+                  <div className="right">
+                    <div className="right-wrap">
+                      <Form
+                        form={editForm}
+                      >
                         <Form.Item
                           label="销贷方名称:"
                           labelAlign="left"
diff --git a/src/pages/MerchantMgm/MerchantInfo/loadable.jsx b/src/pages/MerchantMgm/MerchantInfo/loadable.jsx
index 9e808d4..5dd59fa 100644
--- a/src/pages/MerchantMgm/MerchantInfo/loadable.jsx
+++ b/src/pages/MerchantMgm/MerchantInfo/loadable.jsx
@@ -382,12 +382,10 @@ function MerchantInfo() {
       type: '',
       businessType: '',
       status: '',
-      last_time: [moment(defaultData.start), moment(defaultData.end)]
     };
     setFormData(defaultData)
-    searchForm.setFieldsValue(value)
-
-    getTable({ ...value, pn: 1 })
+    searchForm.setFieldsValue({...value, last_time: [moment(defaultData.start), moment(defaultData.end)]})
+    // getTable({ ...value, pn: 1,  start: defaultData.start , end: defaultData.end})
   }
   //切换分页
   const changePn = (pn, length) => {
@@ -1221,7 +1219,7 @@ function MerchantInfo() {
                       </Form>
                     </div>
                   </div>
-                  <div className="clearinformation">
+                  {/* <div className="clearinformation">
                     <div className="title"><span>清结算信息</span></div>
                     <div className="clear">
                       <Form
@@ -1371,7 +1369,7 @@ function MerchantInfo() {
 
                     </div>
 
-                  </div>
+                  </div> */}
                 </div>
               </div>
             </div>
@@ -1977,7 +1975,7 @@ function MerchantInfo() {
                       </div>
                     </div>
                   </div>
-                  <div className="clearInformation">
+                  {/* <div className="clearInformation">
                     <div className="title"><span>清结算信息</span></div>
                     <div className="clear">
                       <div className="clear-wrap">
@@ -1991,7 +1989,7 @@ function MerchantInfo() {
                     </div>
 
 
-                  </div>
+                  </div> */}
 
                   <div className="operationInformation">
                     <div className="title"><span>操作信息</span></div>
diff --git a/src/services/FinancialMgm/exceptionDeal.js b/src/services/FinancialMgm/exceptionDeal.js
index e69de29..12a87fc 100644
--- a/src/services/FinancialMgm/exceptionDeal.js
+++ b/src/services/FinancialMgm/exceptionDeal.js
@@ -0,0 +1,52 @@
+import ajax from "@/config/ajax";
+
+export default {
+  // 发起异常处理 表格数据
+  getStartExceptionTableData: (params) => {
+    return ajax({
+      url: "/api/fin/abnormal_action/abnormal_list",
+      type: "post",
+      data: params,
+    });
+  },
+  // 发起异常处理 -- 详情支付记录
+  getStartExceptionPaymentList: (params) => {
+    return ajax({
+      url: "/api/fin/abnormal_action/abnormal_payment",
+      type: "post",
+      data: params,
+    });
+  },
+  // 发起异常处理 -- 详情退款记录
+  getStartExceptionRefundList: (params) => {
+    return ajax({
+      url: "/api/fin/abnormal_action/abnormal_refund",
+      type: "post",
+      data: params,
+    });
+  },
+  // 发起异常处理 -- 详情操作记录
+  getStartExceptionHandleList: (params) => {
+    return ajax({
+      url: "/api/fin/abnormal_action/abnormal_operate",
+      type: "post",
+      data: params,
+    });
+  },
+  // 发起异常处理 -- 详情历史处理
+  getStartExceptionHistoryList: (params) => {
+    return ajax({
+      url: "/api/fin/abnormal_action/abnormal_history",
+      type: "post",
+      data: params,
+    });
+  },
+  // 发起异常处理 -- 详情历史处理详情
+  getStartExceptionParkingRecordsInfo: (params) => {
+    return ajax({
+      url: "/api/fin/abnormal_action/parkingRecordsInfo",
+      type: "post",
+      data: params,
+    });
+  },
+}
\ No newline at end of file

From 71dfd84fdef84e48e9a2acca2f9e7482c8a0d4d1 Mon Sep 17 00:00:00 2001
From: guoxin <guoxin@yisa.com>
Date: Fri, 27 Oct 2023 13:38:32 +0800
Subject: [PATCH 3/3] =?UTF-8?q?fix():=E4=BF=AE=E6=94=B9=E7=B3=BB=E7=BB=9F?=
 =?UTF-8?q?=E7=AE=A1=E7=90=86bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/pages/SystemMgm/AreaManage/ModalAreaAdd/index.jsx |  1 -
 src/pages/SystemMgm/AreaManage/loadable.jsx           | 18 +++++++++++++-----
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/pages/SystemMgm/AreaManage/ModalAreaAdd/index.jsx b/src/pages/SystemMgm/AreaManage/ModalAreaAdd/index.jsx
index 5bb07b0..c8d1966 100644
--- a/src/pages/SystemMgm/AreaManage/ModalAreaAdd/index.jsx
+++ b/src/pages/SystemMgm/AreaManage/ModalAreaAdd/index.jsx
@@ -16,7 +16,6 @@ function ModalAreaAdd (props) {
     level,
     onCancel
   } = props
-  console.log(pid);
   const [form] = Form.useForm()
   const [areaType, setAreaType] = useState("1")
 
diff --git a/src/pages/SystemMgm/AreaManage/loadable.jsx b/src/pages/SystemMgm/AreaManage/loadable.jsx
index 968da42..264afbb 100644
--- a/src/pages/SystemMgm/AreaManage/loadable.jsx
+++ b/src/pages/SystemMgm/AreaManage/loadable.jsx
@@ -74,7 +74,7 @@ function AreaManage() {
         })
     }
     const handleAreaAdd = ({ level, id, isCity }) => {
-        let pid =id 
+        let pid = id
         setIsCity(isCity)
         setPid(pid)
         setLevel(Number(level) + 1)
@@ -89,7 +89,15 @@ function AreaManage() {
     }
 
     // 区域删除
-    const handleAreaDel = ({ name, id }) => {
+    const handleAreaDel = ({ name, id, children }) => {
+        let arr = []
+        arr.push(id)
+        console.log(children, id);
+        if (children != undefined) {
+            children.map(res => {
+                arr.push(res.id)
+            })
+        }
         Modal.confirm({
             title: '确认删除?',
             content: `是否确认删除区域: ${name}`,
@@ -97,7 +105,7 @@ function AreaManage() {
             okText: '删除',
             cancelText: '取消',
             onOk: () => {
-                ajaxAreaDel({ name, id }).then((msg) => {
+                ajaxAreaDel({ name, arr }).then((msg) => {
                     message.success(msg)
                     getAreaTree()
                 }).catch((err) => {
@@ -158,14 +166,14 @@ function AreaManage() {
             {
                 level === 2 ? <>
                     <PlusCircleOutlined className='label-icon' onClick={() => handleAreaAdd({ level, id, isCity: false })} />
-                    <DeleteOutlined className="label-icon" onClick={() => handleAreaDel({ name, id })} />
+                    <DeleteOutlined className="label-icon" onClick={() => handleAreaDel({ name, id, children })} />
                     <EditOutlined className="label-icon" onClick={() => handleAreaEdit({ name, id, virtually_code, code, lng_lat })} />
                 </> : null
             }
             {
                 level > 2 ? <>
                     {/* <PlusCircleOutlined className='label-icon' onClick={() => handleAreaAdd({level, pid, isCity: false})} /> */}
-                    <DeleteOutlined className="label-icon" onClick={() => handleAreaDel({ name, id })} />
+                    <DeleteOutlined className="label-icon" onClick={() => handleAreaDel({ name, id, children })} />
                     <EditOutlined className="label-icon" onClick={() => handleAreaEdit({ name, id, virtually_code, code, lng_lat })} />
                 </> : null
             }