diff --git a/src/config/ajax.js b/src/config/ajax.js
index 4ef8ea7..b99d380 100644
--- a/src/config/ajax.js
+++ b/src/config/ajax.js
@@ -8,9 +8,6 @@ axios.defaults.baseURL = baseApi
axios.defaults.timeout = 5 * 60 * 1000
axios.defaults.headers.common['Authorization'] = getToken()
window.queryRecord = {} // 临时方案, 对于查询比较慢的接口, 先统一在这里处理, todo, 后期每个接口再加loading,
-const longtimeInterfaces = [ // 对于一些查询比较慢的接口, 先定义一个数组,
- "/api/orp/road/road_list"
-]
// axios.defaults.headers.common['Authorization'] = `Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2OTk2MzAwNzUsInN1YiI6Inlpc2Ffand0IiwibmJmIjoxNjk5NjI2NDc1LCJhdWQiOiJ5aXNhX3VzZXIiLCJpYXQiOjE2OTk2MjY0NzUsImp0aSI6IjlhYzg3MzcxNGUyYWUyNjQyOWNlMTFjMDliZjZiMTFiIiwiaXNzIjoieWlzYV9pc3MiLCJzdGF0dXMiOjEsImRhdGEiOnsidXNlcl91aWQiOjE4MTkwOTEwNDA1MzQ2MTU5NjksImlkX2NhcmQiOm51bGwsInJvbGVfaWQiOjE3NjcyMTAwNDQ0NDE2MTQ0NzksIm5hbWUiOiLotoXnuqfnrqHnkIblkZgiLCJkZXBhcnRtZW50X25hbWUiOiLopb_mtbflsrjlhaznlKjkuovkuJrpm4blm6IiLCJ1c2VyX25hbWUiOiJ4dXF1biIsInRlbCI6IjE4OTc2MzMwMzIwIiwiYXV0aCI6IjE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTUyLDEyMSwxMzQsMTM1LDEzOSwxNDMsMTQ5LDEzNiwxMzcsMTM4LDE0MCwxNDEsMTQyLDE0NCwxNDUsMTUwLDE1MSwxMjAsMTIyLDEyMywxMjQsMTI1LDExMiwxMTMsMTE0LDExNSwxNDYsMTQ3LDE0OCw4OCw4OSw5MCw5MSwxMDMsMTE4LDEyNiwxMzAsOTcsMTE2LDExNyw5Miw5Myw5NCw5NSw5NiwxMDQsMTA1LDExOSwxMjcsMTI4LDEyOSwxMzEsMTMyLDEzMyw5OCw5OSwxMDAsMTAxLDEwMiwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxLDIsMyw2LDcsOCw5LDEwLDQsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMTEsMTIsMjEsMjIsMjcsMjgsMzMsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDksNTAsNTEsNTIsNTMsNSw1Nyw1OCw1NCw1NSw1Niw3MSw3Miw1OSw2MCw2MSw2Miw2OSw3MCw3Myw3NCw3NSw3Niw3Nyw2NSw2Niw2Nyw2OCw2Myw2NCwyMywyNCwyNSwyNiwzNCwzNSwyOSwzMCwzMSwzMiw0Nyw0OCw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4NyIsInBpZCI6MCwiaWRfbmFtZSI6IuiuuOe-pCJ9fQ.mYH-k_uKUDxysOiytBSRzOj4hWjKSxkTBVEpy4FnLe8`
/**
* @description 请求全局拦截
@@ -46,9 +43,10 @@ function ajax(ajaxData = {}) {
if( window.queryRecord[ajaxData.url]?.ing ){
message.destroy()
if(ajaxData.data.pn && ajaxData.data.pn != window.queryRecord[ajaxData.url].pn){ // 约定pn 作为分页器 页码的唯一变量名
- message.error('建议不要快速切换')
+ // message.error('建议不要快速切换')
}else{
- message.error('请勿重复操作')
+ // message.error('请勿重复操作') // todo 直接组织重复操作, 不提示
+ console.error('重复操作')
// 返回一个promise防止语法错误
return new Promise((resolve, reject)=>{
new Error(1)
@@ -62,6 +60,8 @@ function ajax(ajaxData = {}) {
}
}
}
+ // 新增逻辑 用于判断发起该请求的页面是否已经销毁
+ ajaxData.data = {...ajaxData.data, pageHash: location.hash.replace(/\?.*/, '').replace('#/',"").replace('/', '_')}
return new Promise((resolve, reject) => {
if (!utils.isObject(ajaxData)) {
return reject(new Error('ajax请求配置错误'))
@@ -70,23 +70,38 @@ function ajax(ajaxData = {}) {
method = method.toLowerCase()
let url = ajaxData.mock && isDevelopment ? `/mock` + ajaxData.url : ajaxData.url
// let data = method === 'get' ? { params: ajaxData.data } : ajaxData.data
- let data =
- method === "get" || method === 'delete'
- ? { params: ajaxData.data }
- : ajaxData.data;
+ let data = method === "get" || method === 'delete' ? { params: ajaxData.data }: ajaxData.data;
axios[method](url, data)
.then(res => {
- if(res?.config?.data && JSON.parse(res.config.data)?.guard){
- if(window.queryRecord[res.config.url]){
- window.queryRecord[res.config.url].ing = false
+ if(res.config.method == 'post'){
+ if(res?.config?.data ){
+ if(JSON.parse(res.config.data)?.guard){
+ if(window.queryRecord[res.config.url]){
+ window.queryRecord[res.config.url].ing = false
+ }
+ }
+ // if(location.hash.replace(/\?.*/, '') != JSON.parse(res.config.data)?.pageHash){
+ // console.log('页面已销毁')
+ // resolve({message: "",status: 20000,data: [] })
+ // return
+ // }
}
-
+ }else{
+ if(res.config.params.guard){
+ if(window.queryRecord[res.config.url]){
+ window.queryRecord[res.config.url].ing = false
+ }
+ }
+ // if(location.hash.replace(/\?.*/, '') != res.config.params.pageHash){
+ // console.log('页面已销毁')
+ // resolve({message: "", status: 20000,data: [] })
+ // return
+ // }
}
if (res.data.status === 30009 || res.data.status === 40006 || res.data.status === 40005 ) {
removeToken()
window.location.replace(sysConfig.logout_url)
- // window.location.replace("/#/login")
message.error(res.data.message)
reject(res)
} else {
@@ -94,9 +109,27 @@ function ajax(ajaxData = {}) {
}
})
.catch(err => {
- if(err?.config?.data && JSON.parse(err.config.data)?.guard){
- if(window.queryRecord[err.config.url]){
- window.queryRecord[err.config.url].ing = false
+ if(err.config.method == 'post'){
+ if(err?.config?.data ){
+ if(JSON.parse(err.config.data)?.guard){
+ window.queryRecord[err.config.url].ing = false
+ }
+ if(location.hash.replace(/\?.*/, '') != JSON.parse(err.config.data)?.pageHash){
+ console.log('接口异常,但页面已销毁')
+ reject(new Error(1))
+ return
+ }
+ }
+ }else{
+ if(err.config.params.guard){
+ if(window.queryRecord[err.config.url]){
+ window.queryRecord[err.config.url].ing = false
+ }
+ }
+ if(location.hash.replace(/\?.*/, '') != err.config.params.pageHash){
+ console.log('接口异常,但页面已销毁')
+ reject(new Error(1))
+ return
}
}
let response = err.response
diff --git a/src/pages/Nav/index.jsx b/src/pages/Nav/index.jsx
index c1a2375..9cadf05 100644
--- a/src/pages/Nav/index.jsx
+++ b/src/pages/Nav/index.jsx
@@ -18,39 +18,51 @@ export default function Nav() {
const menusNew = useSelector(state=>{ return state.user.menus_new })
const [activeIndex,setActiveIndex] = useState(-1)
const getNavData = ()=>{
- ajax.getNavData().then(res=>{
- if(res.status == 20000){
- setNavData(res.data)
- let tempmap = {};
- res.data.map(dataItem=>{
- for(let key in menusNew){
- menusNew[key].map(menuItem=>{
- if(menuItem.path == dataItem.path){
- tempmap[menuItem.path.split('/')[1]] = {
- path: menuItem.path,
- text: menuItem.text ,
- name: menuItem.name,
+ if(!sessionStorage.getItem('navData')){
+ ajax.getNavData().then(res=>{
+ if(res.status == 20000){
+ setNavData(res.data)
+ sessionStorage.setItem('navData', JSON.stringify(res.data))
+ createFirstPageMap(res.data)
+ }
+ })
+ }else{
+ let nav_temp = JSON.parse(sessionStorage.getItem('navData'))
+ setNavData(nav_temp)
+ createFirstPageMap(nav_temp)
+
+ }
+ }
+
+ const createFirstPageMap = (data)=>{
+ let tempmap = {};
+ data.map(dataItem=>{
+ for(let key in menusNew){
+ menusNew[key].map(menuItem=>{
+ if(menuItem.path == dataItem.path){
+ tempmap[menuItem.path.split('/')[1]] = {
+ path: menuItem.path,
+ text: menuItem.text ,
+ name: menuItem.name,
+ }
+ }
+ if(menuItem.children){
+ menuItem.children.map(childItem=>{
+ if(childItem.path == dataItem.path){
+ tempmap[childItem.path.split('/')[1]] = {
+ path: childItem.path,
+ text: childItem.text ,
+ name: childItem.name,
}
}
- if(menuItem.children){
- menuItem.children.map(childItem=>{
- if(childItem.path == dataItem.path){
- tempmap[childItem.path.split('/')[1]] = {
- path: childItem.path,
- text: childItem.text ,
- name: childItem.name,
- }
- }
- })
- }
-
})
}
+
})
- sessionStorage.setItem('firstPageMap', JSON.stringify(tempmap))
- dispatch(setFirstPageMap(tempmap))
- }
- })
+ }
+ })
+ sessionStorage.setItem('firstPageMap', JSON.stringify(tempmap))
+ dispatch(setFirstPageMap(tempmap))
}
const clickItem = (item)=>{
if(item.is_disable == 0){
diff --git a/src/pages/OffPeak/OffPeakParkMgm/BookInfo/loadable.jsx b/src/pages/OffPeak/OffPeakParkMgm/BookInfo/loadable.jsx
index aeceefd..581de88 100644
--- a/src/pages/OffPeak/OffPeakParkMgm/BookInfo/loadable.jsx
+++ b/src/pages/OffPeak/OffPeakParkMgm/BookInfo/loadable.jsx
@@ -7,9 +7,10 @@ import ajax from "@/services";
import { TableModule } from "@/components";
// import "./index.scss";
// import errorImg from "@/assets/images/layout/error.png"
-// import { useLocation } from "react-router-dom";
+import { useLocation } from "react-router-dom";
-function BookInfo() {
+function BookInfo(props) {
+ const stateInfo = useLocation();
const columns = [
{
title: "手机号",
@@ -113,11 +114,10 @@ function BookInfo() {
];
//搜索参数初始化
const initFormData = {
- merchantName: "0",
- road_name: "",
- parking_num: "",
- operator: "",
- exceedTime: "",
+ park_name: "",
+ plate: "",
+ status: "",
+ tel: stateInfo?.state?.tel ? stateInfo.state.tel : '',
book_time_range: [moment('2023-10-10'), moment('2024-01-01')]
};
//搜索的结果
diff --git a/src/pages/OffPeak/OffPeakParkMgm/BreakInfo/index.scss b/src/pages/OffPeak/OffPeakParkMgm/BreakInfo/index.scss
index e69de29..1e23a41 100644
--- a/src/pages/OffPeak/OffPeakParkMgm/BreakInfo/index.scss
+++ b/src/pages/OffPeak/OffPeakParkMgm/BreakInfo/index.scss
@@ -0,0 +1,6 @@
+.break-info-op{
+ span{
+ cursor: pointer;
+ color: #02a7f0;
+ }
+}
\ No newline at end of file
diff --git a/src/pages/OffPeak/OffPeakParkMgm/BreakInfo/loadable.jsx b/src/pages/OffPeak/OffPeakParkMgm/BreakInfo/loadable.jsx
index f7d5d9f..8835c74 100644
--- a/src/pages/OffPeak/OffPeakParkMgm/BreakInfo/loadable.jsx
+++ b/src/pages/OffPeak/OffPeakParkMgm/BreakInfo/loadable.jsx
@@ -5,9 +5,9 @@ import { message, Pagination, Table, Space, Modal, Button } from "antd";
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
import ajax from "@/services";
import { TableModule } from "@/components";
-// import "./index.scss";
+import "./index.scss";
// import errorImg from "@/assets/images/layout/error.png"
-// import { useLocation } from "react-router-dom";
+import { Link } from "react-router-dom";
function BreakInfo() {
const columns = [
@@ -51,7 +51,21 @@ function BreakInfo() {
title: "操作",
align: "center",
render: (text, record, index) => (
-
查看 修改
+
+ {/* {}}>查看 */}
+
+ 查看
+
+
+ {setCurrentRecord(record); setVisible(true)}}>修改
+
)
}
];
@@ -82,6 +96,9 @@ function BreakInfo() {
};
//搜索的结果
const [tableData, setTableData] = useState([]);
+
+ const [visible, setVisible] = useState(false)
+ const [currentRecord,setCurrentRecord] = useState({})
//搜索的总结果数
const [total, setTotal] = useState(0);
function search(params) {
@@ -98,19 +115,31 @@ function BreakInfo() {
}
return (
-
+ <>
+
setVisible(true)}>违约次数配置}
+ isExport={false}
+ initFormData={initFormData}
+ // exportUrl="/api/bpm/record/get_pda_export"
+ />
+ {setVisible(false);setCurrentRecord({})}}
+ >
+
+
+ >
+
);
}
diff --git a/src/pages/OffPeak/OffPeakParkMgm/OffPeakParkingRecords/index.scss b/src/pages/OffPeak/OffPeakParkMgm/OffPeakParkingRecords/index.scss
index e69de29..74160f2 100644
--- a/src/pages/OffPeak/OffPeakParkMgm/OffPeakParkingRecords/index.scss
+++ b/src/pages/OffPeak/OffPeakParkMgm/OffPeakParkingRecords/index.scss
@@ -0,0 +1,165 @@
+.offpeak-records-op {
+ cursor: pointer;
+ color: #02a7f0;
+}
+
+.offpeak-record-box {
+ width: 100%;
+
+ .ltc-box-title {
+ font-size: 18px;
+ font-weight: bolder;
+ width: 100%;
+ white-space: nowrap;
+ overflow: hidden;
+
+ .text {
+ display: inline-block;
+ }
+
+ .line {
+ display: inline-block;
+ border: 1px dotted #607092;
+ width: inherit;
+ margin-bottom: 6px;
+ }
+
+ .ltc-icon {
+ width: 5px;
+ background: #0080db;
+ height: 19px;
+ display: inline-block;
+ margin-right: 10px;
+ }
+
+ .ltc-btn {
+ display: inline-block;
+ border: 1px solid;
+ border-radius: 5px;
+ margin: 0 10px;
+ width: 60px;
+ height: 35px;
+ line-height: 35px;
+ text-align: center;
+ background: #409eff;
+ color: #fff;
+ font-weight: 100;
+ cursor: pointer;
+ }
+
+ .ltc-cancel {
+ background: #fff;
+ color: #000;
+ }
+ }
+
+ .ltc-box-line {
+ border: 1px solid #e7e7e7;
+ margin: 8px 0;
+ }
+
+ .ltc-box-in {
+ margin-left: 20px;
+
+ .ant-descriptions {
+ margin-left: 20px;
+ }
+ }
+
+ .ltc-title {
+ margin: auto;
+ width: 50%;
+ text-align: center;
+ font-size: 18px;
+ font-weight: 600;
+ }
+
+ .ltc-content {
+ margin: auto;
+ padding: 20px;
+
+ .ltc-item {
+ font-size: 14px;
+ margin: 6px 12px 6px 0;
+ display: inline-flex;
+
+ //width: 470px;
+ .new-item {
+ display: inline-block;
+ width: 120px;
+ height: 32px;
+ line-height: 32px;
+ background: rgba(150, 161, 192, 0.24);
+ text-align: center;
+ }
+
+ .new-value {
+ display: inline-block;
+ width: 320px;
+ height: 32px;
+ line-height: 32px;
+ text-align: center;
+ background: #3E4557;
+ box-shadow: 0px 3px 8px 0px rgba(0, 0, 0, 0.12);
+ }
+
+ .ltc-item-input {
+ display: inline-block;
+ width: 200px;
+ }
+
+ div {
+ width: 150px;
+ }
+ }
+ }
+
+ .ltc-liuc {
+ display: flex;
+ margin-left: 200px;
+
+ .ltc-item {
+ display: flex;
+
+ .ltc-item-name {
+ margin: 6px 10px 0 10px;
+ color: #3f94df;
+ }
+ }
+
+ .ltc-work {
+ text-align: center;
+
+ .ltc-tips {
+ border: 3px solid #000;
+ text-align: center;
+ line-height: 27px;
+ height: 35px;
+ width: 35px;
+ border-radius: 28px;
+ margin: auto;
+ }
+ }
+
+ }
+}
+
+.offpeak-bigpic-modal {
+ .eae-modal-title {
+ font-size: 18px;
+ font-weight: bolder;
+
+ .ltc-icon {
+ width: 5px;
+ background: #0080db;
+ height: 19px;
+ display: inline-block;
+ margin-right: 10px;
+ }
+ }
+
+ .eae-modal-item {
+ display: inline-block;
+ font-size: 16px;
+ }
+}
\ No newline at end of file
diff --git a/src/pages/OffPeak/OffPeakParkMgm/OffPeakParkingRecords/loadable.jsx b/src/pages/OffPeak/OffPeakParkMgm/OffPeakParkingRecords/loadable.jsx
index 6dd194c..7082bf6 100644
--- a/src/pages/OffPeak/OffPeakParkMgm/OffPeakParkingRecords/loadable.jsx
+++ b/src/pages/OffPeak/OffPeakParkMgm/OffPeakParkingRecords/loadable.jsx
@@ -5,7 +5,7 @@ import { message, Pagination, Table, Space, Modal, Button } from "antd";
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
import ajax from "@/services";
import { TableModule } from "@/components";
-// import "./index.scss";
+import "./index.scss";
// import errorImg from "@/assets/images/layout/error.png"
// import { useLocation } from "react-router-dom";
@@ -57,7 +57,7 @@ function OffPeakParkingRecords() {
title: "操作",
align: "center",
render: (text, record, index) => (
- 详情
+ {setVisible(true);setCurrentRecord(record)}}>详情
)
},
];
@@ -70,7 +70,7 @@ function OffPeakParkingRecords() {
// placeholder:"请选择商户名称"
// },
{
- type: "Input",
+ type: "SearchSelect",
label: "停车场名称",
placeholder: "请输入",
name: "park_name",
@@ -131,6 +131,10 @@ function OffPeakParkingRecords() {
};
//搜索的结果
const [tableData, setTableData] = useState([]);
+ const [visible,setVisible] = useState(false)
+ const [currentRecord,setCurrentRecord] = useState({})
+ const [bigPic, setBigPic] = useState();
+ const [bigpicVisible, setBigpicVisible] = useState(false);//大图展示
//搜索的总结果数
const [total, setTotal] = useState(0);
function search(params) {
@@ -143,19 +147,96 @@ function OffPeakParkingRecords() {
}
return (
-
+ <>
+
+ { setVisible(false); setCurrentRecord({}) }}
+ >
+
+
+
+
+
停车场名称
{currentRecord?.road || "--"}
+
+
+
区域
{currentRecord.region || "--"}
+
+
+
商户
{currentRecord.operator || "--"}
+
+
+
车场类型
{currentRecord.road_type || "--"}
+
+
+
+
+
+
车牌号
{currentRecord.plate || "--"}
+
+
+
会员手机号
{currentRecord.phone || "--"}
+
+
+
入场时间
{currentRecord.in_time || "--"}
+
+
+
出场时间
{currentRecord.out_time || "--"}
+
+
+
停车时长
{currentRecord.admission_time || "--"}
+
+
+
应收金额
{currentRecord.receivable_amount || "--"}
+
+
+
实付金额
{currentRecord.actual_amount || "--"}
+
+
+
+
+
+

{ setBigPic(currentRecord.in_veh_pic); setBigpicVisible(true) }} />
+
+
+

{ setBigPic(currentRecord.in_plate_pic); setBigpicVisible(true) }} />
+
+
+
+
+
+ {
+ setBigpicVisible(false);
+ }}
+ footer={false}
+ >
+
+
+

+
+
+
+ >
+
);
}
diff --git a/src/pages/OutRoadMgm/OutDeviceMgm/OutMonitorMgm/HistoryTable.jsx b/src/pages/OutRoadMgm/OutDeviceMgm/OutMonitorMgm/HistoryTable.jsx
index 3e8b089..0cac8f4 100644
--- a/src/pages/OutRoadMgm/OutDeviceMgm/OutMonitorMgm/HistoryTable.jsx
+++ b/src/pages/OutRoadMgm/OutDeviceMgm/OutMonitorMgm/HistoryTable.jsx
@@ -66,6 +66,7 @@ export default function HistoryTable(props) {
}else{
setTableData([])
setTotal(0)
+ message.error(res.message)
}
}
).catch(err=>{
@@ -85,6 +86,8 @@ export default function HistoryTable(props) {
modalVideoRef.current.changeUrl(res.data.url)
}, 300);
startIntervalToPlay()
+ }else {
+ message.error(res.message)
}
}
).catch(err=>{
diff --git a/src/pages/OutRoadMgm/OutDeviceMgm/OutMonitorMgm/loadable.jsx b/src/pages/OutRoadMgm/OutDeviceMgm/OutMonitorMgm/loadable.jsx
index 93a3729..23e1315 100644
--- a/src/pages/OutRoadMgm/OutDeviceMgm/OutMonitorMgm/loadable.jsx
+++ b/src/pages/OutRoadMgm/OutDeviceMgm/OutMonitorMgm/loadable.jsx
@@ -218,7 +218,8 @@ function OutMonitorMgm(props) {
}, 300);
startIntervalToPlay(1) // 因为默认展示实时的视频播放
}else{
- message.error(`播放数据暂未对接`);
+ // message.error(`播放数据暂未对接`);
+ message.error(res.message);
}
}
).catch(err=>{
diff --git a/src/services/common.js b/src/services/common.js
index e5b92bc..c3c5e8f 100644
--- a/src/services/common.js
+++ b/src/services/common.js
@@ -14,7 +14,7 @@ const getUserInfo = (params) => {
return ajax({
url: "/api/manage/com/get_user_info",
type: "get",
- data: params,
+ data: {...params, guard: true},
});
};