Browse Source

Merge branch 'develop' of http://120.27.195.166:3000/chenglb/PMS_Frontend_v1.0.0 into develop

tags/PMS_Frontend_v1.0.6-develop
陈宇航 1 year ago
parent
commit
776a60786f
  1. 395
      src/config/utils.js
  2. 7
      src/pages/DataAnalysisPrediction/ParkingOverview/loadable.jsx
  3. 526
      src/pages/FinancialMgm/OrderInquiry/OrderChangeInquiry/index.jsx
  4. 4
      src/pages/FinancialMgm/OrderInquiry/ParkingOrderInquiry/index.jsx
  5. 1047
      src/pages/FinancialMgm/OrderInquiry/ReturnOrderInquiry/index.jsx
  6. 95
      src/pages/FinancialMgm/OrderInquiry/ReturnOrderInquiry/index.scss
  7. 9
      src/pages/FinancialMgm/PayConf/AppConf/index.scss
  8. 6
      src/pages/FinancialMgm/PayConf/PayMerchantConf/index.jsx
  9. 3
      src/pages/InRoadMgm/BusinessMgm/ChargeRules/index.scss
  10. 2
      src/pages/InRoadMgm/EquipmentMgm/NvrMgm/loadable.jsx
  11. 44
      src/pages/InRoadMgm/PersonMgm/Performance/WorkerStat/loadable.jsx
  12. 51
      src/pages/InRoadMgm/PersonMgm/PersonInfo/loadable.jsx
  13. 4
      src/pages/InRoadMgm/RecordInquiry/DisabledCarParkRecordTotal/loadable.jsx
  14. 2
      src/pages/InRoadMgm/RoadMgm/AddRoad/loadable.jsx
  15. 21
      src/pages/InRoadMgm/RoadMgm/ConfigRoad/loadable.jsx
  16. 6
      src/pages/InRoadMgm/RoadMgm/RoadDetail/loadable.jsx
  17. 95
      src/pages/InRoadMgm/Stuff/StuffMgm/loadable.jsx
  18. 3
      src/pages/OperationCenter/CarMgm/CarAuth/index.scss
  19. 2
      src/pages/OperationCenter/CustomerServieMgm/CallbackSuggestion/loadable.jsx
  20. 563
      src/pages/OperationCenter/CustomerServieMgm/ComplainStat/echartsOptions.jsx
  21. 115
      src/pages/OperationCenter/CustomerServieMgm/ComplainStat/index.scss
  22. 211
      src/pages/OperationCenter/CustomerServieMgm/ComplainStat/loadable.jsx
  23. 29
      src/pages/OperationCenter/DataMonitor/MonitorCarSet/loadable.jsx
  24. 23
      src/pages/OperationCenter/DataMonitor/PDAWarnRecord/loadable.jsx
  25. 5
      src/pages/OperationCenter/OtherBusiness/ParkingCard/ParkingCardMgm/loadable.jsx
  26. 23
      src/pages/OperationCenter/OtherBusiness/ParkingCard/ParkingCardOrder/loadable.jsx
  27. 5
      src/pages/OperationCenter/UserMgm/UserInfo/loadable.jsx
  28. 11
      src/pages/OutRoadMgm/OutDeviceMgm/OutNvrMgm/loadable.jsx
  29. 1
      src/pages/OutRoadMgm/OutSegmentMgm/OutSegment/loadable.jsx
  30. 6
      src/pages/SystemMgm/BusinessConfig/BusinessConf/index.scss
  31. 56
      src/pages/SystemMgm/BusinessConfig/BusinessConf/loadable.jsx
  32. 19
      src/services/OperationCenter/CustomerManage/index.js
  33. 24
      src/services/OperationCenter/DataMonitor/index.js
  34. 12
      src/services/OperationCenter/ParkingCardMgm/index.js
  35. 4
      src/services/OperationCenter/index.js

395
src/config/utils.js

@ -1,39 +1,42 @@
const utils = {
isObject: (params) => Object.prototype.toString.call(params) === "[object Object]",
isArray: (params) => Object.prototype.toString.call(params) === "[object Array]",
isFunction: (params) => Object.prototype.toString.call(params) === "[object Function]",
isObject: (params) =>
Object.prototype.toString.call(params) === "[object Object]",
isArray: (params) =>
Object.prototype.toString.call(params) === "[object Array]",
isFunction: (params) =>
Object.prototype.toString.call(params) === "[object Function]",
toSizeText: (size) => {
let num = 0
let unit = ""
let num = 0;
let unit = "";
if (size / 1024 < 1000) {
num = size / 1024
unit = "KB"
num = size / 1024;
unit = "KB";
} else if (size / 1024 / 1024 < 1000) {
num = size / 1024 / 1024
unit = "MB"
num = size / 1024 / 1024;
unit = "MB";
} else {
num = size / 1024 / 1024 / 1024
unit = "GB"
num = size / 1024 / 1024 / 1024;
unit = "GB";
}
num = Math.floor(num * 100) / 100
return `${num}${unit}`
num = Math.floor(num * 100) / 100;
return `${num}${unit}`;
},
// 获取localStorage的已存容量
getLocalSurplus: () => {
if (!window.localStorage) {
console.log("浏览器不支持localStorage")
console.log("浏览器不支持localStorage");
}
var size = 0
var size = 0;
for (let item in window.localStorage) {
if (window.localStorage.hasOwnProperty(item)) {
size += window.localStorage.getItem(item).length
size += window.localStorage.getItem(item).length;
}
}
if (parseInt((size / 1024).toFixed(2)) > 4000) {
window.localStorage.clear()
window.localStorage.clear();
}
console.log("当前localStorage已存容量为" + (size / 1024).toFixed(2) + "KB")
console.log("当前localStorage已存容量为" + (size / 1024).toFixed(2) + "KB");
},
// parseFormatNum: (number) => {
@ -47,60 +50,60 @@ const utils = {
// return vn.split("").reverse().join("")
// },
parseFormatNum: (number) => {
if (!number) return 0
let arr = number.toString().split(".")
let hasXiaoShu = arr.length > 1 // 有小数
const a = arr[0].split("")
let v = a.reverse()
let vn = ""
if (!number) return 0;
let arr = number.toString().split(".");
let hasXiaoShu = arr.length > 1; // 有小数
const a = arr[0].split("");
let v = a.reverse();
let vn = "";
for (let i = 0; i < v.length; i++) {
vn += v[i] + ((i + 1) % 3 == 0 && i + 1 != v.length ? "," : "")
vn += v[i] + ((i + 1) % 3 == 0 && i + 1 != v.length ? "," : "");
}
return vn.split("").reverse().join("") + (hasXiaoShu ? `.${arr[1]}` : '')
return vn.split("").reverse().join("") + (hasXiaoShu ? `.${arr[1]}` : "");
},
idCardTest: (value) => {
let re = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
return re.test(value)
let re = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
return re.test(value);
},
imsiTest: (value) => {
let re = /(^\d{15}$)/
return re.test(value)
let re = /(^\d{15}$)/;
return re.test(value);
},
getQueryString: (str, name) => {
let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)")
let r = str.substr(1).match(reg)
if (r != null) return decodeURIComponent(r[2])
return null
let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
let r = str.substr(1).match(reg);
if (r != null) return decodeURIComponent(r[2]);
return null;
},
updateTreeData: (data) => {
let item = []
let item = [];
data.map(({ id, text, nodes }) => {
item.push({
key: id,
value: id,
title: text,
children: nodes ? utils.updateTreeData(nodes) : [],
})
})
return item
});
});
return item;
},
changeObjToQuery: (obj) => {
let arr = []
let arr = [];
Object.keys(obj).forEach((elem) => {
if (obj[elem] && Array.isArray(obj[elem])) {
arr.push(`${elem}=${obj[elem].join(",")}`)
arr.push(`${elem}=${obj[elem].join(",")}`);
} else {
arr.push(`${elem}=${obj[elem] ? obj[elem] : ""}`)
arr.push(`${elem}=${obj[elem] ? obj[elem] : ""}`);
}
})
return arr.join("&")
});
return arr.join("&");
},
// openNewWindow: (url, id) => {
// window.location = window.location.href.split("#")[0] + "#" + url
// },
openNewWindow: (url) => {
if (url) {
window.open(url, "_self")
window.open(url, "_self");
}
},
// 打开自定义窗口
@ -115,42 +118,46 @@ const utils = {
//window.screen.height获得屏幕的高,window.screen.width获得屏幕的宽
var iTop = (window.screen.height - 30 - customHeight) / 2; //获得窗口的垂直位置;
var iLeft = (window.screen.width - 10 - customWidth) / 2; //获得窗口的水平位置;
window.open(url, "_blank", `height=${customHeight},innerHeight=${customHeight},width=${customWidth},innerWidth=${customWidth},top=${iTop},left=${iLeft},toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no`)
window.open(
url,
"_blank",
`height=${customHeight},innerHeight=${customHeight},width=${customWidth},innerWidth=${customWidth},top=${iTop},left=${iLeft},toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no`
);
},
toFindRegion: (pro, city, county) => {
let cityData = JSON.parse(localStorage.getItem("_cityData"))
let cityData = JSON.parse(localStorage.getItem("_cityData"));
if (cityData) {
let region = []
let region = [];
for (let i = 0; i < cityData.length; i++) {
let elem = cityData[i]
let elem = cityData[i];
if (elem.label === pro) {
region.push(elem.value)
region.push(elem.value);
if (elem.children) {
if (city.length && county) {
for (let j = 0; j < elem.children.length; j++) {
let node = elem.children[j]
let node = elem.children[j];
if (node.label === city) {
region.push(node.value)
region.push(node.value);
if (node.children) {
for (let k = 0; k < node.children.length; k++) {
let child = node.children[k]
let child = node.children[k];
if (child.label === county) {
region.push(child.value)
break
region.push(child.value);
break;
}
}
}
}
}
} else if (!city.length && county) {
let node = elem.children[0]
region.push(node.value)
let node = elem.children[0];
region.push(node.value);
if (node.children) {
for (let k = 0; k < node.children.length; k++) {
let child = node.children[k]
let child = node.children[k];
if (child.label === county) {
region.push(child.value)
break
region.push(child.value);
break;
}
}
}
@ -158,165 +165,190 @@ const utils = {
}
}
}
return region
return region;
} else {
return []
return [];
}
},
// 生成列表序号
toSerialNumber: (number) => {
let result = number
let result = number;
switch (number.toString().length) {
case 1:
result = `00${number}`
break
result = `00${number}`;
break;
case 2:
result = `0${number}`
break
result = `0${number}`;
break;
default:
result += ""
break
result += "";
break;
}
return result
return result;
},
// 获取地址栏搜索参数 search 格式,如: ?deal_status=2
generateParams: (search) => {
let result = {}
let searchParamsStr = search.split("?")[1]
let result = {};
let searchParamsStr = search.split("?")[1];
if (searchParamsStr) {
let searchParams = searchParamsStr.split("&")
let searchParams = searchParamsStr.split("&");
searchParams.forEach((elem) => {
let arr = elem.split("=")
let key = arr[0]
let value = arr[1]
let arr = elem.split("=");
let key = arr[0];
let value = arr[1];
if (key) {
result[key] = decodeURIComponent(value)
result[key] = decodeURIComponent(value);
}
})
});
}
return result
return result;
},
// 生成一个唯一随机数
createRandom: () => {
return new Date().getTime() + "-" + Math.random() + "-" + Math.random()
return new Date().getTime() + "-" + Math.random() + "-" + Math.random();
},
// 输入框输入整数处理
integerHandle: (value) => {
if (isNaN(parseInt(value))) {
return ""
return "";
} else {
return parseInt(value)
return parseInt(value);
}
},
// 判断时间段是否包含
validationTime: function (obj) {
//如果没有第二个时间段直接通过
if (!obj.start_date2) return true
if (!obj.start_date2) return true;
let start_date = new Date(obj.start_date.replace(/-/g, "/")).getTime()
let end_date = new Date(obj.end_date.replace(/-/g, "/")).getTime()
let start_date2 = new Date(obj.start_date2.replace(/-/g, "/")).getTime()
let end_date2 = new Date(obj.end_date2.replace(/-/g, "/")).getTime()
let start_date = new Date(obj.start_date.replace(/-/g, "/")).getTime();
let end_date = new Date(obj.end_date.replace(/-/g, "/")).getTime();
let start_date2 = new Date(obj.start_date2.replace(/-/g, "/")).getTime();
let end_date2 = new Date(obj.end_date2.replace(/-/g, "/")).getTime();
//如果时间段不互相包含 直接通过
if (
(start_date > start_date2 && end_date > start_date2 && start_date > end_date2) ||
(start_date < start_date2 && end_date < start_date2 && end_date < start_date2)
(start_date > start_date2 &&
end_date > start_date2 &&
start_date > end_date2) ||
(start_date < start_date2 &&
end_date < start_date2 &&
end_date < start_date2)
) {
return true
return true;
}
return false
return false;
},
// 开始时间不可以大于结束时间
validationTime2: function (obj) {
if (obj.start_date && obj.end_date) {
let start_date = new Date(obj.start_date.replace(/-/g, "/")).getTime()
let end_date = new Date(obj.end_date.replace(/-/g, "/")).getTime()
let start_date = new Date(obj.start_date.replace(/-/g, "/")).getTime();
let end_date = new Date(obj.end_date.replace(/-/g, "/")).getTime();
if (start_date > end_date) {
return false
return false;
}
}
if (obj.start_date2 && obj.end_date2) {
let start_date2 = new Date(obj.start_date2.replace(/-/g, "/")).getTime()
let end_date2 = new Date(obj.end_date2.replace(/-/g, "/")).getTime()
let start_date2 = new Date(obj.start_date2.replace(/-/g, "/")).getTime();
let end_date2 = new Date(obj.end_date2.replace(/-/g, "/")).getTime();
if (start_date2 > end_date2) {
return false
return false;
}
}
return true
return true;
},
// 时间范围不能超过多少天
validationTime3: function (obj, max) {
let maxTime = (parseInt(max) + 1) * 24 * 60 * 60 * 1000
let maxTime = (parseInt(max) + 1) * 24 * 60 * 60 * 1000;
if (obj.start_date && obj.end_date) {
let start_date = new Date(obj.start_date.replace(/-/g, "/")).getTime()
let end_date = new Date(obj.end_date.replace(/-/g, "/")).getTime()
let start_date = new Date(obj.start_date.replace(/-/g, "/")).getTime();
let end_date = new Date(obj.end_date.replace(/-/g, "/")).getTime();
if (end_date - start_date > maxTime) {
return false
return false;
}
}
if (obj.start_date2 && obj.end_date2) {
let start_date2 = new Date(obj.start_date2.replace(/-/g, "/")).getTime()
let end_date2 = new Date(obj.end_date2.replace(/-/g, "/")).getTime()
let start_date2 = new Date(obj.start_date2.replace(/-/g, "/")).getTime();
let end_date2 = new Date(obj.end_date2.replace(/-/g, "/")).getTime();
if (end_date2 - start_date2 > maxTime) {
return false
return false;
}
}
return true
return true;
},
// 车牌号校验 plate 车牌号 accurate 是否是精确的
validationPlate: function (plate, accurate) {
let value = plate.toUpperCase().trim().replace(/\s/g, "")
let value = plate.toUpperCase().trim().replace(/\s/g, "");
// 精准车牌不能有这两个字符
if (accurate && (!value || value.indexOf("*") !== -1 || value.indexOf("?") !== -1)) {
return false
if (
accurate &&
(!value || value.indexOf("*") !== -1 || value.indexOf("?") !== -1)
) {
return false;
}
// 车牌号不能大于8
if (value.length > 8) {
return false
return false;
}
// 车牌号不能有特殊字符
let containSpecial = RegExp(
/[(\ )(\~)(\!)(\@)(\#)(\$)(\%)(\¥)(\^)(\&)(\()(\))(\-)(\_)(\+)(\=)(\[)(\])(\{)(\})(\|)(\\)(\;)(\:)(\')(\")(\,)(\.)(\/)(\<)(\>)(\)]+/
)
let ft = containSpecial.test(value)
);
let ft = containSpecial.test(value);
if (ft == true) {
return false
return false;
}
if (value !== "" && value.indexOf("*") == -1 && value.indexOf("?") == -1) {
//let re=/^[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{5}$/;
let re =
/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领军空A-Z]{1}[A-Z]{1}[警京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼]{0,1}[A-Z0-9]{3,5}[A-Z0-9挂学警港澳使领]{1}$/
/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领军空A-Z]{1}[A-Z]{1}[警京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼]{0,1}[A-Z0-9]{3,5}[A-Z0-9挂学警港澳使领]{1}$/;
// let re = /^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$/
if (value.search(re) == -1) {
return false
return false;
}
} else {
if (value !== "" && value.indexOf("*") == -1) {
if (value.length != 6 && value.length != 7 && value.length != 8) {
return false
return false;
}
}
}
return true
return true;
},
// 数字格式格式化 亿、万
numberFormat: function (num) {
if (!num) {
return "0"
return "0";
}
let str = JSON.stringify(num);
let len = str.length;
if (len > 8) {
let str1 = str.substring(0, len - 8);
let str2 = str.substring(str1.length, str1.length + 2);
str = str1 + "." + str2 + "亿";
} else if (len > 4 && len <= 8) {
let str1 = str.substring(0, len - 4);
let str2 = str.substring(str1.length, str1.length + 2);
str = str1 + "." + str2 + "万";
}
return str;
},
// 数字格式格式化 亿、万,echarts要个毛线 .00,y轴放不下
noonenumberFormat: function (num) {
if (!num) {
return "0";
}
let str = JSON.stringify(num)
let len = str.length
let str = JSON.stringify(num);
let len = str.length;
if (len > 8) {
let str1 = str.substring(0, len - 8)
let str2 = str.substring(str1.length, str1.length + 2)
str = str1 + "." + str2 + "亿"
let str1 = str.substring(0, len - 8);
let str2 = str.substring(str1.length, str1.length + 2);
str = str1 + "亿";
} else if (len > 4 && len <= 8) {
let str1 = str.substring(0, len - 4)
let str2 = str.substring(str1.length, str1.length + 2)
str = str1 + "." + str2 + "万"
let str1 = str.substring(0, len - 4);
let str2 = str.substring(str1.length, str1.length + 2);
str = str1 + "万";
}
return str
return str;
},
// 加入暂存架数据转换
transformData: (data) => {
@ -327,7 +359,9 @@ const utils = {
temporaryId: data.temporary_id,
pic_id: data.pic_id,
detection: data.detection ? JSON.stringify(data.detection) : "",
vehicle_detection: data.vehicle_detection ? JSON.stringify(data.vehicle_detection) : "",
vehicle_detection: data.vehicle_detection
? JSON.stringify(data.vehicle_detection)
: "",
imgURL: data.big_pic,
jcryUrl: data.jcry_url,
time: data.capture_time,
@ -350,76 +384,103 @@ const utils = {
car_color: data.color_name,
car_info: data.car_info,
},
}
};
} catch (e) {
return {}
return {};
}
},
validatePlate: (str) => {
return /^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$/.test(
str
)
);
},
// 千位加逗号
toThousands: function (num) {
var num = (num || 0).toString(),
result = ""
result = "";
while (num.length > 3) {
result = "," + num.slice(-3) + result
num = num.slice(0, num.length - 3)
result = "," + num.slice(-3) + result;
num = num.slice(0, num.length - 3);
}
if (num) {
result = num + result
result = num + result;
}
return result
return result;
},
// 验证经度
validatorLongitude: (value) => {
const reg = /^(\-|\+)?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,15})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,15}|180)$/
const reg =
/^(\-|\+)?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,15})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,15}|180)$/;
if (!reg.test(value)) {
return false
return false;
} else {
return true
return true;
}
},
// 验证纬度
validatorLatitude: (value) => {
const reg = /^(\-|\+)?([0-8]?\d{1}\.\d{0,15}|90\.0{0,15}|[0-8]?\d{1}|90)$/
const reg = /^(\-|\+)?([0-8]?\d{1}\.\d{0,15}|90\.0{0,15}|[0-8]?\d{1}|90)$/;
if (!reg.test(value)) {
return false
return false;
} else {
return true
return true;
}
},
createTimeRange: (limit)=>{
let date = new Date(), dateBefore = new Date(date.getTime() - limit * 86400* 1000)
let str = date.getFullYear()+"-" + ('0' + (date.getMonth() + 1)).slice(-2) +"-"+ ("0"+ date.getDate()).slice(-2),
strBefore = dateBefore.getFullYear() +"-"+ ('0' + (dateBefore.getMonth() + 1)).slice(-2) +"-"+ ("0"+ dateBefore.getDate()).slice(-2);
if(limit > 0){
return strBefore + ' 00:00:00' + ',' + str + ' 23:59:59'
}
return str + ' 00:00:00' + ',' + strBefore+ ' 23:59:59'
createTimeRange: (limit) => {
let date = new Date(),
dateBefore = new Date(date.getTime() - limit * 86400 * 1000);
let str =
date.getFullYear() +
"-" +
("0" + (date.getMonth() + 1)).slice(-2) +
"-" +
("0" + date.getDate()).slice(-2),
strBefore =
dateBefore.getFullYear() +
"-" +
("0" + (dateBefore.getMonth() + 1)).slice(-2) +
"-" +
("0" + dateBefore.getDate()).slice(-2);
if (limit > 0) {
return strBefore + " 00:00:00" + "," + str + " 23:59:59";
}
return str + " 00:00:00" + "," + strBefore + " 23:59:59";
},
createTimeStr: (minusOrAdd)=>{
createTimeStr: (minusOrAdd) => {
let num = Number.isInteger(minusOrAdd) ? minusOrAdd : 0;
let date = new Date(new Date().getTime() - num * 86400* 1000)
let str = date.getFullYear()+"-" + ('0' + (date.getMonth() + 1)).slice(-2) +"-"+ ("0"+ date.getDate()).slice(-2) + ' ' +
('0' + date.getHours()).slice(-2) + ':' + ('0' +date.getMinutes() ).slice(-2) + ":" + ('0' + date.getSeconds()).slice(-2)
return str
let date = new Date(new Date().getTime() - num * 86400 * 1000);
let str =
date.getFullYear() +
"-" +
("0" + (date.getMonth() + 1)).slice(-2) +
"-" +
("0" + date.getDate()).slice(-2) +
" " +
("0" + date.getHours()).slice(-2) +
":" +
("0" + date.getMinutes()).slice(-2) +
":" +
("0" + date.getSeconds()).slice(-2);
return str;
},
createDateStr: (minusOrAdd)=>{
createDateStr: (minusOrAdd) => {
let num = Number.isInteger(minusOrAdd) ? minusOrAdd : 0;
let date = new Date(new Date().getTime() - num * 86400* 1000)
let str = date.getFullYear()+"-" + ('0' + (date.getMonth() + 1)).slice(-2) +"-"+ ("0"+ date.getDate()).slice(-2)
return str
let date = new Date(new Date().getTime() - num * 86400 * 1000);
let str =
date.getFullYear() +
"-" +
("0" + (date.getMonth() + 1)).slice(-2) +
"-" +
("0" + date.getDate()).slice(-2);
return str;
},
validateTimeStr: (str) => {
let reg = /^20\d{2}-\d{1,2}-\d{1,2}/;
if (reg.test(str)) {
return true;
}
return false;
},
validateTimeStr : (str)=>{
let reg = /^20\d{2}-\d{1,2}-\d{1,2}/
if(reg.test(str)){
return true
}
return false
}
}
};
export default utils
export default utils;

7
src/pages/DataAnalysisPrediction/ParkingOverview/loadable.jsx

@ -798,7 +798,10 @@ const ParkingOverview = connect(function mapStateToProps(state) {
// interval: 10,
// splitNumber: 6, //
axisLabel: {
//formatter: "{value}",
formatter: (value) => {
return utils.noonenumberFormat(value);
},
textStyle: {
color: "#bbb",
},
@ -824,7 +827,7 @@ const ParkingOverview = connect(function mapStateToProps(state) {
color: "rgba(13,225,250, .31)",
},
data: data.map((ele) => utils.numberFormat(ele.value)),
data: data.map((ele) => ele.value),
},
],
grid: {

526
src/pages/FinancialMgm/OrderInquiry/OrderChangeInquiry/index.jsx

@ -1,11 +1,21 @@
import React, { useState, useEffect } from "react";
import { ResultFlowResult } from "@/components";
import { Select, Input, Button, Table, message, Pagination, DatePicker, Modal, Tooltip } from "antd";
import {
Select,
Input,
Button,
Table,
message,
Pagination,
DatePicker,
Modal,
Tooltip,
} from "antd";
import { useSessionStorageState } from "ahooks";
import { useNavigate } from "react-router-dom";
import { setTabList } from "@/store/common.js";
import { useSelector, useDispatch } from "react-redux";
import { QuestionCircleFilled } from "@ant-design/icons"
import { QuestionCircleFilled } from "@ant-design/icons";
import moment from "moment";
import "./index.scss";
import ajax from "@/services";
@ -22,15 +32,21 @@ function EditOrderInquiry(props) {
{ defaultValue: null }
);
const [detailVisible, setDetailVisible] = useState(false);
const [bigpicVisible, setBigpicVisible] = useState(false);//
const [bigpicVisible, setBigpicVisible] = useState(false); //
const [bigPic, setBigPic] = useState();
const [ycddData, setYcddData] = useState([])//
const [detailTable, setDetailTable] = useState([])
const [ycddData, setYcddData] = useState([]); //
const [detailTable, setDetailTable] = useState([]);
//
const defaultData = {
start_time: moment().subtract(7, "days").startOf("day").format("YYYY-MM-DD HH:mm:ss"),
start_time: moment()
.subtract(7, "days")
.startOf("day")
.format("YYYY-MM-DD HH:mm:ss"),
end_time: moment().endOf("day").format("YYYY-MM-DD HH:mm:ss"),
deal_time_start: moment().subtract(7, "days").startOf("day").format("YYYY-MM-DD HH:mm:ss"),
deal_time_start: moment()
.subtract(7, "days")
.startOf("day")
.format("YYYY-MM-DD HH:mm:ss"),
deal_time_end: moment().endOf("day").format("YYYY-MM-DD HH:mm:ss"),
//app_name: "", //
//app_type: 0, //
@ -59,27 +75,30 @@ function EditOrderInquiry(props) {
const [total, setTotal] = useState(false);
const [detailTableData, setDetailTableData] = useState([]);
const [searchSelectList, setSearchSelectList] = useState([]); //
const [sessionTabList, setSessionTabList] = useSessionStorageState('editOrderInquiry', {
value: {
const [sessionTabList, setSessionTabList] = useSessionStorageState(
"editOrderInquiry",
{
value: {},
}
})
);
useEffect(() => {
if (sessionTabList && Object.values(sessionTabList).length > 0) {
setFormData({
...formData, ...sessionTabList
})
...formData,
...sessionTabList,
});
getData({
...sessionTabList
})
...sessionTabList,
});
} else {
getData()
getData();
}
}, [isAjax])
}, [isAjax]);
useEffect(() => {
setSessionTabList({
...formData
})
}, [formData])
...formData,
});
}, [formData]);
// useEffect(() => {
// getSelectList();
// }, []);
@ -111,12 +130,12 @@ function EditOrderInquiry(props) {
}
setDefaultParams({ ...postData, ...pageInfo });
setTabLoading(true);
console.log(115, pageInfo, { ...postData, ...v, ...pageInfo })
console.log(115, pageInfo, { ...postData, ...v, ...pageInfo });
ajax.getOrderChangeList({ ...postData, ...v, ...pageInfo }).then(
(res) => {
if (parseInt(res?.status) === 20000) {
setResultData(res?.data.list || []);
setTotal(res.data.total)
setTotal(res.data.total);
} else {
message.error(res?.message);
}
@ -136,7 +155,7 @@ function EditOrderInquiry(props) {
(res) => {
if (parseInt(res?.status) === 20000) {
setYcddData(res?.data || []);
setDetailTable(res?.data?.order_update_detail)
setDetailTable(res?.data?.order_update_detail);
} else {
message.error(res?.message);
}
@ -201,11 +220,17 @@ function EditOrderInquiry(props) {
width: 160,
render: (text) => (
<>
<a onClick={() => {
navigator.clipboard.writeText(`${text}`).then(() => { message.success("已复制到剪切板") });
}}>{text}</a>
<a
onClick={() => {
navigator.clipboard.writeText(`${text}`).then(() => {
message.success("已复制到剪切板");
});
}}
>
{text}
</a>
</>
)
),
},
{
title: "业务订单类型",
@ -220,11 +245,17 @@ function EditOrderInquiry(props) {
width: 160,
render: (text) => (
<>
<a onClick={() => {
navigator.clipboard.writeText(`${text}`).then(() => { message.success("已复制到剪切板") });
}}>{text}</a>
<a
onClick={() => {
navigator.clipboard.writeText(`${text}`).then(() => {
message.success("已复制到剪切板");
});
}}
>
{text}
</a>
</>
)
),
},
{
title: "订单金额(元)",
@ -271,13 +302,18 @@ function EditOrderInquiry(props) {
title: "操作",
align: "center",
width: 140,
fixed: 'right',
fixed: "right",
render: (val, row, index) => {
return (
<span style={{
color: "#177ddc",
cursor: "pointer"
}} onClick={() => { handleView(row); }}>
<span
style={{
color: "#177ddc",
cursor: "pointer",
}}
onClick={() => {
handleView(row);
}}
>
查看
</span>
);
@ -312,11 +348,17 @@ function EditOrderInquiry(props) {
align: "center",
render: (text) => (
<>
<a onClick={() => {
navigator.clipboard.writeText(`${text}`).then(() => { message.success("已复制到剪切板") });
}}>{text}</a>
<a
onClick={() => {
navigator.clipboard.writeText(`${text}`).then(() => {
message.success("已复制到剪切板");
});
}}
>
{text}
</a>
</>
)
),
},
{
title: "抵扣修改金额",
@ -346,102 +388,194 @@ function EditOrderInquiry(props) {
];
//
const handleView = (row) => {
getDetailData({ deal_record_id: row.deal_record_id, park_record_id: row.park_record_id })
setDetailVisible(true)
getDetailData({
deal_record_id: row.deal_record_id,
park_record_id: row.park_record_id,
});
setDetailVisible(true);
};
//
const tkddModal = <div className="ltc-box">
<div className="ltc-box-title"><div className="text">停车订单:{ycddData.park_record_id}</div><div className="line"></div></div>
<div className="ltc-box-title"><div className="text">车厂详情</div></div>
<div className="ltc-content">
<div className="ltc-item">
<div className="new-item">停车场名称</div><div className="new-value">{ycddData?.order_info?.parking_detail.road_name || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">区域</div><div className="new-value">{ycddData?.order_info?.parking_detail.region_name || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">商户名称</div><div className="new-value">{ycddData?.order_info?.parking_detail.operator_name || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">泊位号</div><div className="new-value">{ycddData?.order_info?.parking_detail.berth_id || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">车场类型</div><div className="new-value">{ycddData?.order_info?.parking_detail.parking_model_type_name || "--"}</div>
</div>
</div>
<div className="ltc-box-title"><div className="text">车辆详情</div></div>
<div className="ltc-content">
<div className="ltc-item">
<div className="new-item">车牌号</div><div className="new-value">{ycddData?.order_info?.vehicle_detail.plate || "--"}</div>
const tkddModal = (
<div className="ltc-box">
<div className="ltc-box-title">
<div className="text">停车订单:{ycddData.park_record_id}</div>
<div className="line"></div>
</div>
<div className="ltc-item">
<div className="new-item">停车时长</div><div className="new-value">{ycddData?.order_info?.vehicle_detail.parking_duration || "--"}</div>
<div className="ltc-box-title">
<div className="text">车厂详情</div>
</div>
<div className="ltc-item">
<div className="new-item">入场时间</div><div className="new-value">{ycddData?.order_info?.vehicle_detail.in_time || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">出场时间</div><div className="new-value">{ycddData?.order_info?.vehicle_detail.out_time || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">入场记录来源</div><div className="new-value">{ycddData?.order_info?.vehicle_detail.in_source_name || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">出场记录来源</div><div className="new-value">{ycddData?.order_info?.vehicle_detail.out_source_name || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">证据图像</div><div className="new-value"><a onClick={() => { setBigpicVisible(true) }}>查看</a></div>
<div className="ltc-content">
<div className="ltc-item">
<div className="new-item">停车场名称</div>
<div className="new-value">
{ycddData?.order_info?.parking_detail.road_name || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">区域</div>
<div className="new-value">
{ycddData?.order_info?.parking_detail.region_name || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">商户名称</div>
<div className="new-value">
{ycddData?.order_info?.parking_detail.operator_name || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">泊位号</div>
<div className="new-value">
{ycddData?.order_info?.parking_detail.berth_id || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">车场类型</div>
<div className="new-value">
{ycddData?.order_info?.parking_detail.parking_model_type_name ||
"--"}
</div>
</div>
</div>
</div>
<div className="ltc-box-title"><div className="text">订单详情:{ycddData?.refund_id}</div></div>
<div className="ltc-content">
<div className="ltc-item">
<div className="new-item">应收金额</div><div className="new-value">{ycddData?.order_info?.order_detail.receivable_amount || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">优惠总计</div><div className="new-value">{ycddData?.order_info?.order_detail.preferential_amount || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">实付总计</div><div className="new-value">{ycddData?.order_info?.order_detail.actual_amount || "--"}</div>
<div className="ltc-box-title">
<div className="text">车辆详情</div>
</div>
<div className="ltc-item">
<div className="new-item">欠费总计</div><div className="new-value">{ycddData?.order_info?.order_detail.arrears_mount || "--"}</div>
<div className="ltc-content">
<div className="ltc-item">
<div className="new-item">车牌号</div>
<div className="new-value">
{ycddData?.order_info?.vehicle_detail.plate || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">停车时长</div>
<div className="new-value">
{ycddData?.order_info?.vehicle_detail.parking_duration || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">入场时间</div>
<div className="new-value">
{ycddData?.order_info?.vehicle_detail.in_time || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">出场时间</div>
<div className="new-value">
{ycddData?.order_info?.vehicle_detail.out_time || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">入场记录来源</div>
<div className="new-value">
{ycddData?.order_info?.vehicle_detail.in_source_name || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">出场记录来源</div>
<div className="new-value">
{ycddData?.order_info?.vehicle_detail.out_source_name || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">证据图像</div>
<div className="new-value">
<a
onClick={() => {
setBigpicVisible(true);
}}
>
查看
</a>
</div>
</div>
</div>
</div>
<div className="ltc-box-title"><div className="text">修改信息:{ycddData?.refund_id}</div><div className="line"></div></div>
<div className="ltc-content">
<div className="ltc-item">
<div className="new-item">修改原因</div><div className="new-value">{ycddData?.update_info?.update_reason || "--"}</div>
</div>
<div className="ltc-item">
<div className="new-item">欠费金额修改</div><div className="new-value">{ycddData?.update_info?.receivable_amount || "--"}</div>
<div className="ltc-box-title">
<div className="text">订单详情:{ycddData?.refund_id}</div>
</div>
<div className="ltc-item">
<div className="new-item">修改金额</div><div className="new-value">{ycddData?.update_info?.receivable_amount_exception || "--"}</div>
<div className="ltc-content">
<div className="ltc-item">
<div className="new-item">应收金额</div>
<div className="new-value">
{ycddData?.order_info?.order_detail.receivable_amount || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">优惠总计</div>
<div className="new-value">
{ycddData?.order_info?.order_detail.preferential_amount || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">实付总计</div>
<div className="new-value">
{ycddData?.order_info?.order_detail.actual_amount || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">欠费总计</div>
<div className="new-value">
{ycddData?.order_info?.order_detail.arrears_mount || "--"}
</div>
</div>
</div>
<div className="ltc-item">
<div className="new-item">优惠金额修改</div><div className="new-value">{ycddData?.update_info?.preferential_amount || "--"}</div>
<div className="ltc-box-title">
<div className="text">修改信息:{ycddData?.refund_id}</div>
<div className="line"></div>
</div>
<div className="ltc-item">
<div className="new-item">退款方式</div><div className="new-value">{ycddData?.update_info?.refund_type_name || "--"}</div>
<div className="ltc-content">
<div className="ltc-item">
<div className="new-item">修改原因</div>
<div className="new-value">
{ycddData?.update_info?.update_reason || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">欠费金额修改</div>
<div className="new-value">
{ycddData?.update_info?.receivable_amount || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">修改金额</div>
<div className="new-value">
{ycddData?.update_info?.receivable_amount_exception || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">优惠金额修改</div>
<div className="new-value">
{ycddData?.update_info?.preferential_amount || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">退款方式</div>
<div className="new-value">
{ycddData?.update_info?.refund_type_name || "--"}
</div>
</div>
<div className="ltc-item">
<div className="new-item">退款金额共计</div>
<div className="new-value">
{ycddData?.update_info?.actual_refund || "--"}
</div>
</div>
</div>
<div className="ltc-item">
<div className="new-item">退款金额共计</div><div className="new-value">{ycddData?.update_info?.actual_refund || "--"}</div>
<div className="ltc-box-title">
<div className="text">订单修改明细</div>
<div className="line"></div>
</div>
<Table
//rowSelection={rowSelection}
rowKey={"index"}
columns={detailColumns}
dataSource={detailTable || []}
pagination={false}
/>
</div>
<div className="ltc-box-title"><div className="text">订单修改明细</div><div className="line"></div></div>
<Table
//rowSelection={rowSelection}
rowKey={'index'}
columns={detailColumns}
dataSource={detailTable || []}
pagination={false}
/>
</div>
);
//
const handleExport = () => {
if (resultData.list?.length > 0) {
@ -531,50 +665,48 @@ function EditOrderInquiry(props) {
placeholder="请选择"
options={[
{
value: '0',
label: '全部'
value: "0",
label: "全部",
},
{
value: '1',
label: '停车订单'
value: "1",
label: "停车订单",
},
{
value: '2',
label: '充电订单'
value: "2",
label: "充电订单",
},
{
value: '3',
label: '充值订单'
value: "3",
label: "充值订单",
},
{
value: '4',
label: '停车卡订单'
value: "4",
label: "停车卡订单",
},
{
value: '5',
label: '充电预约订单'
value: "5",
label: "充电预约订单",
},
{
value: '6',
label: '停车预约订单'
value: "6",
label: "停车预约订单",
},
{
value: '7',
label: '错峰订单'
value: "7",
label: "错峰订单",
},
{
value: '8',
label: '预付费订单'
value: "8",
label: "预付费订单",
},
{
value: '9',
label: '商家预付费订单'
value: "9",
label: "商家预付费订单",
},
]}
value={formData.parking_type}
onChange={(v) =>
setFormData({ ...formData, parking_type: v })
}
onChange={(v) => setFormData({ ...formData, parking_type: v })}
/>
</div>
<div className="yisa-search">
@ -594,20 +726,31 @@ function EditOrderInquiry(props) {
className="form-con"
showTime
allowClear={false}
value={formData.start_time ? moment(formData.start_time) : undefined}
onChange={(date, dateString) => setFormData({ ...formData, start_time: dateString })}
value={
formData.start_time ? moment(formData.start_time) : undefined
}
onChange={(date, dateString) =>
setFormData({ ...formData, start_time: dateString })
}
disabledDate={(current) => current > moment(formData.end_time)}
/>
</div>
<div className="yisa-search">
<label></label>
<DatePicker
className="form-con"
showTime
allowClear={false}
value={formData.end_time ? moment(formData.end_time) : undefined}
onChange={(date, dateString) => setFormData({ ...formData, end_time: dateString })}
disabledDate={(current) => current < moment(formData.start_time)}
value={
formData.end_time ? moment(formData.end_time) : undefined
}
onChange={(date, dateString) =>
setFormData({ ...formData, end_time: dateString })
}
disabledDate={(current) =>
current < moment(formData.start_time)
}
/>
</div>
<div className="yisa-search">
@ -616,9 +759,17 @@ function EditOrderInquiry(props) {
className="form-con"
showTime
allowClear={false}
value={formData.deal_time_start ? moment(formData.deal_time_start) : undefined}
onChange={(date, dateString) => setFormData({ ...formData, deal_time_start: dateString })}
disabledDate={(current) => current > moment(formData.deal_time_end)}
value={
formData.deal_time_start
? moment(formData.deal_time_start)
: undefined
}
onChange={(date, dateString) =>
setFormData({ ...formData, deal_time_start: dateString })
}
disabledDate={(current) =>
current > moment(formData.deal_time_end)
}
/>
</div>
<div className="yisa-search">
@ -627,9 +778,17 @@ function EditOrderInquiry(props) {
className="form-con"
showTime
allowClear={false}
value={formData.deal_time_end ? moment(formData.deal_time_end) : undefined}
onChange={(date, dateString) => setFormData({ ...formData, deal_time_end: dateString })}
disabledDate={(current) => current < moment(formData.deal_time_start)}
value={
formData.deal_time_end
? moment(formData.deal_time_end)
: undefined
}
onChange={(date, dateString) =>
setFormData({ ...formData, deal_time_end: dateString })
}
disabledDate={(current) =>
current < moment(formData.deal_time_start)
}
/>
</div>
<div className="yisa-search">
@ -652,9 +811,7 @@ function EditOrderInquiry(props) {
},
]}
value={formData.status_id}
onChange={(v) =>
setFormData({ ...formData, status_id: v })
}
onChange={(v) => setFormData({ ...formData, status_id: v })}
/>
</div>
<div className="form-btn">
@ -709,23 +866,27 @@ function EditOrderInquiry(props) {
<Modal
open={detailVisible}
width={1500}
title={'修改详情'}
title={"修改详情"}
onCancel={() => {
setDetailVisible(false);
}}
footer={[
<Button key="back" onClick={() => {
setDetailVisible(false);
}}>
<Button
key="back"
onClick={() => {
setDetailVisible(false);
}}
>
关闭窗口
</Button>]}
</Button>,
]}
>
{tkddModal}
</Modal>
<Modal
open={bigpicVisible}
width={1600}
title={'图片展示'}
title={"图片展示"}
className="eae-modal"
onCancel={() => {
setBigpicVisible(false);
@ -733,22 +894,49 @@ function EditOrderInquiry(props) {
footer={false}
>
<div className="ltc-box">
<div className="ltc-box-title"><div className="text">入场照片</div><div className="line"></div></div>
<div className="ltc-box-title">
<div className="text">入场照片</div>
<div className="line"></div>
</div>
<div className="ltc-content">
<div className="ltc-item ltc-item-img ">
<img src={ycddData?.order_info?.vehicle_detail.admissionPic || require("../../../../../src/assets/images/error-img.png")} />
<img
src={
ycddData?.order_info?.vehicle_detail.admissionPic ||
require("../../../../../src/assets/images/error-img.png")
}
/>
</div>
<div className="ltc-item ltc-item-img ">
<img src={ycddData?.order_info?.vehicle_detail.admissionPicPlate || require("../../../../../src/assets/images/error-img.png")} />
<img
src={
ycddData?.order_info?.vehicle_detail
.admissionPicPlate ||
require("../../../../../src/assets/images/error-img.png")
}
/>
</div>
</div>
<div className="ltc-box-title"><div className="text">出场照片</div><div className="line"></div></div>
<div className="ltc-box-title">
<div className="text">出场照片</div>
<div className="line"></div>
</div>
<div className="ltc-content">
<div className="ltc-item ltc-item-img ">
<img src={ycddData?.order_info?.vehicle_detail.exitionPic || require("../../../../../src/assets/images/error-img.png")} />
<img
src={
ycddData?.order_info?.vehicle_detail.exitionPic ||
require("../../../../../src/assets/images/error-img.png")
}
/>
</div>
<div className="ltc-item ltc-item-img ">
<img src={ycddData?.order_info?.vehicle_detail.exitionPicPlate || require("../../../../../src/assets/images/error-img.png")} />
<img
src={
ycddData?.order_info?.vehicle_detail.exitionPicPlate ||
require("../../../../../src/assets/images/error-img.png")
}
/>
</div>
</div>
</div>

4
src/pages/FinancialMgm/OrderInquiry/ParkingOrderInquiry/index.jsx

@ -301,14 +301,14 @@ function ParkingOrderInquiry(props) {
type: "Select",
label: "支付渠道",
placeholder: "请选择支付渠道",
options: dictionary.PayChannel,
options: sysConfig.payment,
},
{//11
name: "payment_equipment",
type: "Select",
label: "支付设备",
placeholder: "请选择支付设备",
options: dictionary.PayDevice
options: sysConfig.Equipment
},
{//12
name: "pay_type",

1047
src/pages/FinancialMgm/OrderInquiry/ReturnOrderInquiry/index.jsx
File diff suppressed because it is too large
View File

95
src/pages/FinancialMgm/OrderInquiry/ReturnOrderInquiry/index.scss

@ -301,6 +301,101 @@ $color-primary: var(--color-primary);
display: inline-block;
font-size: 16px;
}
.ltc-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;
}
}
}
}
}
.cc-container {
overflow: auto;

9
src/pages/FinancialMgm/PayConf/AppConf/index.scss

@ -208,4 +208,13 @@ $color-primary : var(--color-primary);
margin-left: 20px;
}
}
.form-container{
.ant-form-item{
.ant-form-item-label{
label{
line-height: 32px;
}
}
}
}
}

6
src/pages/FinancialMgm/PayConf/PayMerchantConf/index.jsx

@ -328,6 +328,7 @@ function MerchantConfiguration(props) {
//
const onFinish = (values) => {
console.log(values);
ajax[values?.id ? "getPaymentMerchantEdit" : "getPaymentMerchantAdd"]({
...values,
}).then(
@ -485,7 +486,7 @@ function MerchantConfiguration(props) {
type: "select",
label: "服务窗",
name: "service_window",
value: rowData?.service_window_name,
value: rowData?.service_window,
options: platformToAppData?.service_window || [],
required: false,
allowClear: true,
@ -494,7 +495,7 @@ function MerchantConfiguration(props) {
type: "select",
label: "APP-支付宝",
name: "alipay_app",
value: rowData?.alipay_app_name,
value: rowData?.alipay_app,
options: platformToAppData?.alipay_app || [],
required: false,
allowClear: true,
@ -615,7 +616,6 @@ function MerchantConfiguration(props) {
return null;
}
};
return (
<>
<div className="merchant-configuration">

3
src/pages/InRoadMgm/BusinessMgm/ChargeRules/index.scss

@ -468,6 +468,9 @@ margin-top: 20px;
}
.bindModal {
width: 1000px !important;
position: absolute;
top: 10px;
right: 511px;
.selectChange {
text-align: center;
}

2
src/pages/InRoadMgm/EquipmentMgm/NvrMgm/loadable.jsx

@ -56,7 +56,7 @@ function Fence(props) {
address: "",
device_name: "",
road_name: "", //
operator: -1, //
operator: "0", //
export: false,
road_id: "", //
pn: 1,

44
src/pages/InRoadMgm/PersonMgm/Performance/WorkerStat/loadable.jsx

@ -88,59 +88,27 @@ function WorkerStat(props) {
key: 'name',
},
{
title: '当日实收',
title: '实收金额',
dataIndex: 'today_sale',
key: 'today_sale',
},
{
title: '当日追缴',
title: '追缴金额',
dataIndex: 'today_rate',
key: 'today_rate',
},
{
title: '当日应收',
title: '应收金额',
dataIndex: 'today_receive',
key: 'today_receive',
},
{
title: '收费员收费率',
title: '收费率',
dataIndex: 'sale_rate',
key: 'sale_rate',
},
{
title: '营收总额',
dataIndex: 'total_revenue',
key: 'total_revenue',
width: '160px',
render: (text, record) => {
return <>
<a href={record.total_revenue_url}>{record.total_revenue}</a>
</>
},
},
{
title: '预付金额',
dataIndex: 'prepaid_amount',
key: 'prepaid_amount',
render: (text, record) => {
return <>
<a href={record.prepaid_amount_url}>{record.prepaid_amount}</a>
</>
},
},
{
title: 'PDA欠费追缴金额',
dataIndex: 'debt_collection_amount',
key: 'debt_collection_amount',
width: '200px',
render: (text, record) => {
return <>
<a href={record.debt_collection_amount_url}>{record.debt_collection_amount}</a>
</>
},
},
{
title: '入场操作记录数',
title: '入场操作数',
dataIndex: 'entry_operation_records_count',
key: 'entry_operation_records_count',
render: (text, record) => {
@ -150,7 +118,7 @@ function WorkerStat(props) {
},
},
{
title: '出场操作记录数',
title: '出场操作数',
dataIndex: 'exit_operation_records_count',
key: 'exit_operation_records_count',
width: '120px',

51
src/pages/InRoadMgm/PersonMgm/PersonInfo/loadable.jsx

@ -145,25 +145,8 @@ function PersonInfo() {
}
//
const getPersonAllRoad = () => {
ajax.getPersonAllRoad().then(res => {
if (res.status == 20000) {
let temparr = [];
res.data.map(item => {
temparr.push({
key: item.value + '',
title: item.label
})
})
setTranferAllData(temparr)
} else {
message.error(res.message)
}
}).catch(err => {
console.log(err)
}).finally(() => {
const getPersonAllRoad = (data) => {
})
}
//
const resetPersonPwd = (id) => {
@ -261,7 +244,7 @@ function PersonInfo() {
})
}
const [getPersonId, setGetPersonId] = useState('')
const changeOperator = (e) => {
setFormData({ operator_id: e });
getDeparts(e)
@ -272,8 +255,32 @@ function PersonInfo() {
setCurrentPersonInfo({ ...currentPersonInfo, operator: e })
getDeparts(e)
getAssets(e)
setGetPersonId(e)
}
useEffect(() => {
if (getPersonId !='') {
let data = {
operator_id: getPersonId
}
ajax.getPersonAllRoad(data).then(res => {
if (res.status == 20000) {
let temparr = [];
res.data.map(item => {
temparr.push({
key: item.value + '',
title: item.label
})
})
setTranferAllData(temparr)
} else {
message.error(res.message)
}
}).catch(err => {
console.log(err)
}).finally(() => {
})
}
}, [getPersonId])
/**
* @description 分页功能模块
* @param {number} current 当前页
@ -376,7 +383,7 @@ function PersonInfo() {
message.error('请输入员工编号')
} else if (currentPersonInfo.road_ids === '') {
message.error('请选择路段')
} else if (getEdit==true) {
} else if (getEdit == true) {
ajax.editUserPersonInfo({ ...currentPersonInfo, id: currentPersonId }).then(res => {
if (res.status == 20000) {
message.success(res.message)
@ -425,7 +432,7 @@ function PersonInfo() {
useEffect(() => {
getAllOperator()
getPersonAllRoad()
// getPersonAllRoad()
}, [])
useEffect(() => {

4
src/pages/InRoadMgm/RecordInquiry/DisabledCarParkRecordTotal/loadable.jsx

@ -727,6 +727,10 @@ function DisabledCarParkRecordTotal() {
onCancel={() => {
setCardVisible(false);
}}
onOk={()=>{
setCardVisible(false);
}}
>
<div>
<img src={cjPic} width={750} />

2
src/pages/InRoadMgm/RoadMgm/AddRoad/loadable.jsx

@ -148,7 +148,7 @@ function AddRoad() {
function getAreaArr(data, id, path = []) {
console.log(data);
for (const item of data) {
if (item.id === id) {
if (item.id == id) {
path.push(item.id);
return path;
}

21
src/pages/InRoadMgm/RoadMgm/ConfigRoad/loadable.jsx

@ -747,10 +747,8 @@ function ConfigRoad() {
is_select: record.berth_ids === "" ? 0 : 1,
id: record.id
});
setSelectedBerth(record.berth_ids.split(",").map(item => +item))
// setSelectedBerth(record.berth_ids.split(",").map(item => +item))
setRuleModal(true);
console.log(record.berth_ids);
if(record.berth_ids ===''){
setShowBerthSelect(false);
setIsRuleEdit(true);
@ -760,7 +758,7 @@ function ConfigRoad() {
}
let data = {
road_id: parking_id,
vehicle_type: getCarTypeValue,
vehicle_type: record.vehicle_type,
id:record.id
}
ajax
@ -773,7 +771,6 @@ function ConfigRoad() {
})
setAllBerthList(res.data.left);
setSelectedBerth(res.data.right)
console.log(res.data.list);
} else {
message.error(res.message)
}
@ -856,8 +853,9 @@ function ConfigRoad() {
},
};
//form
const formRef = React.createRef();
console.log(showBerthSelect);
// const formRef = React.createRef();
const formRef=useRef()
//
const tollCollector = {
form: [
@ -1180,6 +1178,7 @@ function ConfigRoad() {
.then((res) => {
if (res.status === 20000) {
message.success(res.message);
formRef.current.getList();
} else {
message.error(res.message);
}
@ -1187,6 +1186,7 @@ function ConfigRoad() {
.catch((err) => console.error(err));
}
function getRoadTollList() {
ajax
.getRoadTollList({ road_id: parking_id })
@ -1205,7 +1205,7 @@ function ConfigRoad() {
.catch((err) => console.error(err));
}
const [getCarType, setGetCarType] = useState(true)
const [getCarTypeValue, setGetCarTypeValue] = useState(true)
const [getCarTypeValue, setGetCarTypeValue] = useState({})
//-
function handleCarTypeChange(value) {
setGetCarTypeValue(value)
@ -2011,6 +2011,7 @@ function ConfigRoad() {
targetKeys={hasSelectTollList}
onChange={(nexTargetKeys) => {
setHasSelectTollList(nexTargetKeys);
console.log(nexTargetKeys);
}}
render={(item) => item.label}
/>
@ -2494,8 +2495,8 @@ const SearchPart = forwardRef((props, ref) => {
getList();
}
useImperativeHandle(ref, () => {
return { getList };
});
return { getList:getList };
},[]);
useEffect(() => {
getList();

6
src/pages/InRoadMgm/RoadMgm/RoadDetail/loadable.jsx

@ -9,11 +9,14 @@ function RoadDetail(props) {
const navigate = useNavigate();
const id = location.search.split("=")[1];
const [resultData, setResultData] = useState({});
const [resultNewData, setResultNewData] = useState({});
function getRoadInfo() {
ajax.getRoadInfo({ id }).then((res) => {
if (res.status === 20000) {
console.log(res.data);
setResultData(res.data);
let arr=res.data.img_url.split(',')
setResultNewData(arr);
}
});
}
@ -115,7 +118,8 @@ function RoadDetail(props) {
</div>
<div className="right-part">
{
resultData.img_url?.map(res=>{
resultNewData.img_url?.map(res=>{
return(
<Image src={res} style={{width:100}}alt="车辆照片" />

95
src/pages/InRoadMgm/Stuff/StuffMgm/loadable.jsx

@ -9,6 +9,7 @@ import { SearchOutlined, DeleteOutlined } from '@ant-design/icons';
import ajax from '@/services'
import { useSessionStorageState } from "ahooks"
import { useNavigate, useLocation } from "react-router-dom"
import { operator } from '@/config/character.config.js';
function StuffMgm(props) {
// const configData = props.sysConfig["lib-deploy"] || {};
@ -51,7 +52,7 @@ function StuffMgm(props) {
setFormData({ ...formData, name: v.target.value })
}
//
const [getBrandId, setGetBrandId] = useState({})
const [getBrandId, setGetBrandId] = useState('')
const handleOperator = (v) => {
setGetBrandId(v)
setFormData({ ...formData, brand_id: v })
@ -222,16 +223,16 @@ function StuffMgm(props) {
/**
*
*/
if (record.status=== '0') {
if (record.status === '0') {
setGetSelectStatus(false)
}
if (record.status=== '1') {
if (record.status === '1') {
setGetSelectStatus(true)
setGetUid({
uid: ''
})
}
if (record.status=== '2') {
if (record.status === '2') {
setGetSelectStatus(true)
setGetUid({
uid: ''
@ -351,39 +352,7 @@ function StuffMgm(props) {
const getSearchData = (data = formData) => {
getData(data)
}
const [getOperationName, setGetOperationName] = useState([])
const [getNewOperationName, setNewGetOperationName] = useState([])
const operatorid = () => {
ajax.assetsType().then(res => {
let arr = res.data
let newArr = arr.slice(1)
setGetOperationName(res.data)
setNewGetOperationName(newArr)
})
}
const [getMerchantDataName, setGetMerchantDataName] = useState([])
const [getNewMerchantDataName, setNewMerchantDataName] = useState([])
const merchantDataName = () => {
ajax.getOperator().then(res => {
let arr = res.data
let newArr = arr.slice(1)
setGetMerchantDataName(res.data)
setNewMerchantDataName(newArr)
})
}
const [getAssetsModel, setGetAssetsModel] = useState([])
const [getNewAssetsModel, setNewGetAssetsModel] = useState([])
const assetsModelName = () => {
let data = {
brand_id: getBrandId
}
ajax.assetsModel(data).then(res => {
let arr = res.data
let newArr = arr.slice(1)
setGetAssetsModel(res.data)
setNewGetAssetsModel(newArr)
})
}
const [getRecipient, setGetRecipient] = useState([])
const recipientName = () => {
ajax.recipient().then(res => {
@ -423,7 +392,7 @@ function StuffMgm(props) {
}
const [checkData, setCheckData] = useState(param)
const [getUid, setGetUid] = useState({
uid:''
uid: ''
})
const onChange = (newValue) => {
let arr = newValue
@ -436,7 +405,9 @@ function StuffMgm(props) {
};
//
const [getOperatorid, setGetOperatorid] = useState(true)
const [getOperatorValue, setGetOperatorValue] = useState('')
const handleAddDeployType = (value) => {
setGetOperatorValue(value)
if (value) {
setGetOperatorid(false)
}
@ -592,9 +563,6 @@ function StuffMgm(props) {
})
setGetSelectStatus(false)
}
useEffect(() => {
assetsModelName()
}, [getBrandId])
const [sessionTabList, setSessionTabList] = useSessionStorageState('stuffMgm', {
value: {
}
@ -616,6 +584,51 @@ function StuffMgm(props) {
})
}
}, [])
const [getOperationName, setGetOperationName] = useState([])
const [getNewOperationName, setNewGetOperationName] = useState([])
useEffect(() => {
if (getOperatorValue != '') {
let data = {
operator_id: getOperatorValue
}
ajax.assetsType(data).then(res => {
let arr = res.data
let newArr = arr.slice(1)
setGetOperationName(res.data)
setNewGetOperationName(newArr)
})
}
}, [getOperatorValue])
const operatorid = () => {
}
const [getMerchantDataName, setGetMerchantDataName] = useState([])
const [getNewMerchantDataName, setNewMerchantDataName] = useState([])
const merchantDataName = () => {
ajax.getOperator().then(res => {
let arr = res.data
let newArr = arr.slice(1)
setGetMerchantDataName(res.data)
setNewMerchantDataName(newArr)
})
}
const [getAssetsModel, setGetAssetsModel] = useState([])
const [getNewAssetsModel, setNewGetAssetsModel] = useState([])
useEffect(() => {
if (getBrandId != '') {
let data = {
brand_id: getBrandId,
operator_id: getOperatorValue
}
ajax.assetsModel(data).then(res => {
let arr = res.data
let newArr = arr.slice(1)
setGetAssetsModel(res.data)
setNewGetAssetsModel(newArr)
})
}
}, [getBrandId])
useEffect(() => {
setSessionTabList({
...formData

3
src/pages/OperationCenter/CarMgm/CarAuth/index.scss

@ -134,6 +134,9 @@ $color-primary : var(--color-primary);
text-align: center;
}
.new-value {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
display: inline-block;
width: 320px;
height: 32px;

2
src/pages/OperationCenter/CustomerServieMgm/CallbackSuggestion/loadable.jsx

@ -351,7 +351,7 @@ function CallbackSuggestion(props) {
const beforeUpload = (file) => {
const isPNG = file.type === 'image/png';
if (!isPNG) {
message.error(`请上传图片`);
message.error(`请上传png,jpeg类型图片`);
}
return isPNG || Upload.LIST_IGNORE;
};

563
src/pages/OperationCenter/CustomerServieMgm/ComplainStat/echartsOptions.jsx

@ -0,0 +1,563 @@
const hexToRgba = (hex, alpha = 1) => {
const color = hex.slice(1);
const rgba = [
parseInt("0x" + color.slice(0, 2)),
parseInt("0x" + color.slice(2, 4)),
parseInt("0x" + color.slice(4, 6)),
alpha,
];
return `rgba(${rgba.toString()})`;
};
const colorList = [
"#9baaff",
"#ff9ba7",
"#c8d6f4",
"#9bfff3",
"#ff9bf3",
"#eeb08e",
"#79d3fb",
];
function linearColors1(color) {
return {
type: "linear",
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0.3,
color: color,
},
{
offset: 1,
color: "#fff",
},
],
global: false,
};
}
function linearColors2(color) {
return {
type: "linear",
x: 0,
y: 0,
x2: 1,
y2: 1,
colorStops: [
{
offset: 0,
color: hexToRgba(color, 1),
},
{
offset: 1,
color: hexToRgba(color, 0.2),
},
],
global: false,
};
}
//
export const barChartOption = (data) => {
const { x_axis = [], y_axis = [] } = data;
// console.log(data);
const len = parseInt(x_axis?.length || 0);
const zoomSpan = 100 / ((len < 8 ? 8 : len) / 8);
return {
backgroundColor: "transparent",
tooltip: {
trigger: "axis",
axisPointer: {
type: "shadow",
},
backgroundColor: "rgba(0, 0, 0, 0.5)",
borderColor: "rgba(75, 253, 238, 0.4)",
textStyle: { color: "#FFFFFF", fontSize: 12 },
},
grid: {
top: 15,
left: "5%",
right: "3%",
bottom: len > 8 ? 25 : 15,
containLabel: true,
},
// legend: {
// top: 0,
// right: "3%",
// itemWidth: 15,
// itemHeight: 10,
// textStyle: { color: "#999999", fontSize: 12 },
// data: getLegend(y_axis),
// },
dataZoom: [
{
type: "inside",
// span: zoomSpan,
minSpan: zoomSpan,
maxSpan: zoomSpan,
zoomLock: true,
},
{
type: "slider",
backgroundColor: "rgba(255,255,255,.3)",
dataBackground: {
areaStyle: "#fff",
},
height: 9,
bottom: 15,
show: len > 8 ? true : false,
zoomLock: true,
moveHandleSize: 10,
handleIcon:
"path://M512 512m-208 0a6.5 6.5 0 1 0 416 0 6.5 6.5 0 1 0-416 0Z M512 192C335.264 192 192 335.264 192 512c0 176.736 143.264 320 320 320s320-143.264 320-320C832 335.264 688.736 192 512 192zM512 800c-159.072 0-288-128.928-288-288 0-159.072 128.928-288 288-288s288 128.928 288 288C800 671.072 671.072 800 512 800z",
handleColor: "#0260FF",
handleSize: "95%",
// handleStyle: {
// shadowBlur: 3,
// shadowOffsetX: 1,
// shadowOffsetY: 1,
// shadowColor: "rgba(0, 0, 0, 0.6)",
// },
textStyle: {
fontSize: 12,
color: "#9A9A9A",
},
showDetail: false,
},
],
xAxis: [
{
// type: "value",
type: "category",
axisTick: { show: false },
axisLine: { show: false },
axisLabel: { fontSize: 12, color: "#FFFFFF", interval: 0 },
data: x_axis || [],
},
],
yAxis: [
{
axisTick: { show: false },
axisLine: {
lineStyle: {
color: "#9A9A9A",
opacity: 0.6,
},
},
splitLine: {
lineStyle: {
opacity: 0.4,
},
},
axisLabel: { fontSize: 12, color: "#FFFFFF" },
type: "value",
// type: "category",
},
],
series: renderBars(y_axis),
};
};
//
function renderBars(arr) {
let newArr = [];
if (arr?.length) {
newArr = arr.map((v, i) => {
return {
type: "bar",
name: v?.name || "数量",
// yAxisIndex: 0,
// barMaxWidth: "auto",
// barCategoryGap:20,
barWidth: 20,
label: {
show: true,
position: "top",
formatter: function (params) {
let value = params.value || params.value != 0 ? params.value : "";
return value;
},
},
itemStyle: {
color: i % 2 ? linearColors2("#fd9a9a") : linearColors2("#4a70f4"),
},
data: v?.value || [],
};
});
}
return newArr;
}
//
export const pieChartOption = (data) => {
const list = [...data];
const labels = list?.length ? list.map((v) => v.name) : [];
const option = {
color: colorList,
backgroundColor: "transparent",
tooltip: {
trigger: "item",
backgroundColor: "rgba(0, 0, 0, 0.5)",
textStyle: { color: "#FFFFFF", fontSize: 14 },
},
grid: {
top: "middle",
eft: "center",
containLabel: false,
},
legend: {
orient: "horizontal",
top: "bottom",
left: "center",
data: labels,
type: "scroll",
// formatter(name) {
// let num = labels.findIndex((v) => v == name);
// return name + " {a|" + list[num]?.value + "}";
// },
// itemWidth: 10,
// itemHeight: 10,
textStyle: {
color: "#FFFFFF",
// width: 120,
// overflow: "breakAll",
// lineHeight: 16,
// rich: {
// a: { color: "#3f7ff7" },
// },
},
// itemGap: 16,
// selectedMode: false
},
series: [
{
// id: "1",
type: "pie",
center: ["50%", "46%"],
radius: ["50%", "70%"],
data: list,
// z: 0,
// itemStyle: {
// color: ({ dataIndex }: any) => linearColors2[dataIndex % 20],
// },
emphasis: { label: { show: true } },
label: {
show: false,
position: "center",
// borderRadius: 10,
// backgroundColor: "#ffffff",
// width: "120",
// overflow: "breakAll",
formatter(param) {
// return "{num|" + param.value + "}" + "\n {name|" + param.name + "}";
return (
"{num|" + param.percent + "%}" + "\n {name|" + param.name + "}"
);
},
rich: {
num: {
fontSize: 16,
fontWeight: 500,
padding: [0, 0, 5],
color: "#3f7ff7",
},
name: {
fontSize: 14,
color: "#FFFFFF",
},
},
},
},
],
};
return option;
};
// 线
export const lineChartOption = (data) => {
const { x_axis = [], y_axis = [] } = data;
// console.log(data);
const len = parseInt(x_axis?.length || 0);
const zoomSpan = 100 / ((len < 8 ? 8 : len) / 8);
return {
backgroundColor: "transparent",
tooltip: {
trigger: "axis",
backgroundColor: "rgba(0, 0, 0, 0.5)",
borderColor: "rgba(75, 253, 238, 0.4)",
textStyle: { color: "#FFFFFF", fontSize: 12 },
},
grid: {
// top: y_axis?.length > 5 ? 60 : 40,
top: 30,
left: "5%",
right: "3%",
bottom: len > 8 ? 25 : 15,
containLabel: true,
},
legend: {
top: 0,
right: "3%",
// itemWidth: 15,
// itemHeight: 10,
textStyle: { color: "#FFFFFF", fontSize: 12 },
data: getLegend(y_axis),
},
dataZoom: [
{
type: "inside",
// span: zoomSpan,
minSpan: zoomSpan,
maxSpan: zoomSpan,
zoomLock: true,
},
{
type: "slider",
backgroundColor: "rgba(255,255,255,.3)",
dataBackground: {
areaStyle: "#fff",
},
height: 9,
bottom: 15,
show: len > 8 ? true : false,
zoomLock: true,
moveHandleSize: 10,
handleIcon:
"path://M512 512m-208 0a6.5 6.5 0 1 0 416 0 6.5 6.5 0 1 0-416 0Z M512 192C335.264 192 192 335.264 192 512c0 176.736 143.264 320 320 320s320-143.264 320-320C832 335.264 688.736 192 512 192zM512 800c-159.072 0-288-128.928-288-288 0-159.072 128.928-288 288-288s288 128.928 288 288C800 671.072 671.072 800 512 800z",
handleColor: "#0260FF",
handleSize: "95%",
// handleStyle: {
// shadowBlur: 3,
// shadowOffsetX: 1,
// shadowOffsetY: 1,
// shadowColor: "rgba(0, 0, 0, 0.6)",
// },
textStyle: {
fontSize: 12,
color: "#9A9A9A",
},
showDetail: false,
},
],
xAxis: [
{
type: "category",
boundaryGap: false,
axisLabel: { fontSize: 12, color: "#FFFFFF" },
axisLine: {
lineStyle: {
color: "#9A9A9A",
opacity: 0.55,
},
},
data: x_axis || [],
},
],
yAxis: [
{
type: "value",
axisLabel: { fontSize: 12, color: "#FFFFFF" },
axisLine: {
lineStyle: {
color: "#9A9A9A",
opacity: 0.6,
},
},
axisTick: {
show: false,
},
splitLine: {
lineStyle: {
opacity: 0.4,
},
},
},
],
series: renderLines(y_axis),
// series: {
// name: "",
// type: "line",
// smooth: true,
// lineStyle: {
// width: 2,
// color: "#58b8ff",
// },
// data: y_axis || [],
// },
};
};
//
function getLegend(arr) {
let newArr = [];
if (arr?.length) {
arr.forEach((v, i) => {
newArr.push(v?.name || "数量" + i);
});
}
return newArr;
}
// 线
function renderLines(arr) {
let newArr = [];
if (arr?.length) {
newArr = arr.map((v) => {
return {
name: v?.name || "数量",
type: "line",
// stack: "Total",
yAxisIndex: 0,
// smooth: true,
// lineStyle: {
// width: 2,
// color: `#30b4ea`,
// },
// itemStyle: {
// color: `#30b4ea`,
// },
// areaStyle: {
// opacity: 0.8,
// color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
// {
// offset: 0,
// color: "rgba(59,255,244,0.3)",
// },
// {
// offset: 1,
// color: "rgba(59,255,244,0)",
// },
// ]),
// },
data: v?.value || [],
};
});
}
return newArr;
}
//
export function waterOption(data) {
let num = (data / 100).toFixed(2);
return {
backgroundColor: "transparent",
// title: [
// {
// text: "",
// x: "22%",
// y: "70%",
// textStyle: {
// fontSize: 14,
// fontWeight: "100",
// color: "#5dc3ea",
// lineHeight: 16,
// textAlign: "center",
// },
// },
// ],
series: [
{
type: "liquidFill",
radius: "85%",
// center: ["25%", "45%"],
color: [
{
type: "linear",
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0,
color: "#7A7BF0",
},
{
offset: 0.25,
color: "#7F76F1",
},
{
offset: 0.5,
color: "#9170F7",
},
{
offset: 0.75,
color: "#BF7EFB",
},
{
offset: 1,
color: "#C89EF9",
},
],
globalCoord: false,
},
],
data: [num, num], // data
backgroundStyle: {
borderWidth: 1,
opacity: 0.5,
color: {
type: "radial",
x: 0.5,
y: 0.5,
r: 0.5,
colorStops: [
{
offset: 0,
color: "#E9EAFB",
},
{
offset: 0.4,
color: "#E9EAFB",
},
{
offset: 1,
color: "#CDCDF9",
},
],
global: false,
},
},
label: {
fontSize: 14,
color: "#fff",
formatter(param) {
return "{num|" + data + "%}" + "\n {name|完好率}";
},
rich: {
num: {
fontSize: 20,
padding: [10, 0, 5],
color: "#ffffff",
},
name: {
fontSize: 10,
color: "#ffffff",
},
},
},
outline: {
// show: false,
borderDistance: 0,
itemStyle: {
borderWidth: 3,
borderColor: "#CCD5F6",
},
},
},
{
type: "pie",
radius: ["85%", "100%"],
silent: true,
labelLine: {
show: false,
},
itemStyle: {
color: "#EDEDFD",
},
data: [{ value: 100 }],
},
],
};
}

115
src/pages/OperationCenter/CustomerServieMgm/ComplainStat/index.scss

@ -17,7 +17,7 @@ $color-primary : var(--color-primary);
align-items: center;
padding: 20px;
background: var(--color-user-list-bg);
border-radius: 20px;
border-radius: 10px;
box-shadow: 0px 3px 8px 0px rgba(0, 0, 0, 0.08);
.ant-select-selector,
@ -85,39 +85,91 @@ $color-primary : var(--color-primary);
width: 100%;
margin-top: 20px;
flex: 1;
padding: 20px;
display: flex;
flex-direction: column;
background: var(--color-user-list-bg);
border-radius: 20px;
box-shadow: 0px 3px 8px 0px rgba(0, 0, 0, 0.08);
.paid-summary {
display: flex;
justify-content: space-between;
width: 100%;
// height: 100px;
height: 120px;
>div {
width: calc(25% - 15px);
width: calc(20% - 16px);
height: 100%;
background-color: #ffc0cb;
&.sum-item{
background: var(--color-user-list-bg);
border-radius: 5px;
box-shadow: 0px 3px 8px 0px rgba(0, 0, 0, 0.08);
&.sum-item {
display: flex;
flex-direction: column;
.sum-con{
padding: 6px;
.sum-con {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
// justify-content: space-between;
overflow: hidden;
.num-box {
padding-left: 30px;
.anticon {
color: var(--color-primary);
transform: rotate(95deg);
}
>span {
margin-right: 5px;
font-size: 28px;
font-weight: 600;
}
}
.per-box{
transform: scale(0.5);
.per-box {
transform: scale(0.4);
}
}
.sum-txt{
padding: 3px;
.sum-txt {
height: 34px;
line-height: 34px;
font-size: 16px;
text-align: center;
border-radius: 4px;
// background-color: rgba($color: pink, $alpha: 0.4);
}
@mixin setColor($color) {
.num-box>span {
color: $color;
}
.sum-txt {
background-color: rgba($color: $color, $alpha: 0.2);
}
}
&:nth-child(1) {
@include setColor(#459CFC);
}
&:nth-child(2) {
@include setColor(#F3511D);
}
&:nth-child(3) {
@include setColor(#F8BF4D);
}
&:nth-child(4) {
@include setColor(#9CC811);
}
&:nth-child(5) {
@include setColor(#8182E6);
}
}
}
@ -135,10 +187,39 @@ $color-primary : var(--color-primary);
margin-top: 20px;
}
>div {
.chart-box {
width: 100%;
height: calc(50% - 10px);
background-color: yellow;
display: flex;
flex-direction: column;
justify-content: space-between;
padding: 10px;
background: var(--color-user-list-bg);
border-radius: 10px;
box-shadow: 0px 3px 8px 0px rgba(0, 0, 0, 0.08);
.title {
width: 100%;
height: 32px;
display: flex;
align-items: center;
&::before {
content: "";
display: inline-block;
width: 6px;
height: 20px;
margin-right: 8px;
border-radius: 3px;
background-color: var(--color-primary);
}
}
.wraper {
flex: 1;
width: 100%;
// height: calc(100% - 32px);
}
}
&.col-one {

211
src/pages/OperationCenter/CustomerServieMgm/ComplainStat/loadable.jsx

@ -1,42 +1,106 @@
import React, { useState, useRef, useEffect } from "react";
import React, { useState, useRef, useEffect, useCallback } from "react";
import { message, Button, DatePicker, Progress, Modal } from "antd";
import { SearchOutlined, DeleteOutlined } from "@ant-design/icons";
import { SearchOutlined, PhoneOutlined } from "@ant-design/icons";
import * as echarts from "echarts";
import ReactEcharts from "echarts-for-react";
// import { dictionary, utils } from "@/config/common";
// import moment from 'moment'
import moment from "moment";
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
// import ajax from "@/services"
// import { FormInput, FormSelect, OptionPanel, ResultPanel, FormSliderPicker, AreaCascader, ImgResize, ImgZoom, } from "@/components"
import ajax from "@/services";
import {
pieChartOption,
barChartOption,
lineChartOption,
} from "./echartsOptions";
import "./index.scss";
// import errorImg from "@/assets/images/layout/error.png"
// import { useLocation } from "react-router-dom";
function ComplainStat() {
function renderItem() {
//
const [formData, setFormData] = useState({
s_time: moment().subtract(7, "days").format("YYYY-MM-DD"), //
e_time: moment().format("YYYY-MM-DD"), //
});
//
const [resultData, setResultData] = useState({
total: 0, //
wait_num: 0, //
follow_num: 0, //
deal_num: 0, //
deal_rate: 0, //
});
// 1
const [chartData1, setChartData1] = useState([]);
// 2
const [chartData2, setChartData2] = useState([]);
// 线
const [chartData3, setChartData3] = useState({});
//
const [chartData4, setChartData4] = useState({});
useEffect(() => {
getData();
}, []);
//
const getData = () => {
ajax.getComplainStatistics(formData).then(
(res) => {
if (parseInt(res?.status) === 20000) {
let { base_data, pie1_data, pie2_data, line_data, bar_data } =
res?.data || {};
setResultData(base_data || {});
setChartData1(pie1_data || []);
setChartData2(pie2_data || []);
setChartData3(line_data || {});
setChartData4(bar_data || {});
} else {
message.error(res?.message);
}
},
(err) => {
console.log(err);
message.error("服务器异常");
}
);
};
//
const getPercent = (val) => {
const a = parseInt(resultData?.total);
const b = parseInt(val);
if (a && b) {
return ((b * 100) / a).toFixed(2);
} else {
return 0;
}
};
//
function renderItem(text, html, num, color) {
const bool = typeof num !== "undefined";
return (
<div className="sum-item">
<div className="sum-con">
<div className="num-box">
6<sup></sup>
</div>
<div className="per-box">
<Progress
type="circle"
showInfo={false}
strokeColor={"#ffc0cb"}
strokeWidth={8}
percent={75}
/>
</div>
</div>
<div
className="sum-txt"
style={{
// backgroundColor: `rgba(${"#ffc0cb"}, 0.4)`,
}}
className="sum-con"
style={{ justifyContent: bool ? "space-between" : "center" }}
>
投诉总量
<div className="num-box">
<PhoneOutlined />
{html}
</div>
{bool ? (
<div className="per-box">
<Progress
type="circle"
showInfo={false}
strokeColor={color}
strokeWidth={10}
percent={num}
/>
</div>
) : null}
</div>
<div className="sum-txt">{text}</div>
</div>
);
}
@ -48,8 +112,18 @@ function ComplainStat() {
<DatePicker.RangePicker
className="form-con"
// showTime
// value={formData?.updateTimes || null}
// onChange={(e, str) => setFormData({ ...formData, updateTimes: e })}
value={[
formData?.s_time ? moment(formData.s_time, "YYYY-MM-DD") : null,
formData?.e_time ? moment(formData.e_time, "YYYY-MM-DD") : null,
]}
onChange={(e, str) => {
let bool = str?.length === 2;
setFormData({
...formData,
s_time: bool ? str[0] : "",
e_time: bool ? str[1] : "",
});
}}
/>
</div>
<div className="form-btn">
@ -57,8 +131,7 @@ function ComplainStat() {
className="submit"
type="primary"
icon={<SearchOutlined />}
// onClick={handleSearch}
// loading={loading}
onClick={() => getData()}
>
查询
</Button>
@ -66,19 +139,81 @@ function ComplainStat() {
</div>
<div className="paid-result">
<div className="paid-summary">
{renderItem()}
{renderItem()}
{renderItem()}
{renderItem()}
{renderItem(
"投诉总量",
<>
<span>{resultData?.total || 0}</span>
</>
)}
{renderItem(
"待处理数量",
<>
<span>{resultData?.wait_num || 0}</span>
</>,
getPercent(resultData?.wait_num),
"#F3511D"
)}
{renderItem(
"跟进中数量",
<>
<span>{resultData?.follow_num || 0}</span>
</>,
getPercent(resultData?.follow_num),
"#F8BF4D"
)}
{renderItem(
"已处理数量",
<>
<span>{resultData?.deal_num || 0}</span>
</>,
getPercent(resultData?.deal_num),
"#9CC811"
)}
{renderItem(
"按时处理比率",
<>
<span>{resultData?.deal_rate || 0}</span>%
</>,
resultData?.deal_rate || 0,
"#8182E6"
)}
</div>
<div className="paid-graphic">
<div className="col-con col-one">
<div className="chart-box"></div>
<div className="chart-box"></div>
<div className="chart-box">
<div className="title">投诉订单来源比例</div>
<ReactEcharts
className="wraper"
notMerge={true}
option={pieChartOption(chartData1)}
/>
</div>
<div className="chart-box">
<div className="title">用户满意度占比</div>
<ReactEcharts
className="wraper"
notMerge={true}
option={pieChartOption(chartData2)}
/>
</div>
</div>
<div className="col-con col-two">
<div className="chart-box"></div>
<div className="chart-box"></div>
<div className="chart-box">
<div className="title">投诉订单来源趋势</div>
<ReactEcharts
className="wraper"
notMerge={true}
option={lineChartOption(chartData3)}
/>
</div>
<div className="chart-box">
<div className="title">问题类型统计</div>
<ReactEcharts
className="wraper"
notMerge={true}
option={barChartOption(chartData4)}
/>
</div>
</div>
</div>
</div>

29
src/pages/OperationCenter/DataMonitor/MonitorCarSet/loadable.jsx

@ -23,12 +23,12 @@ function MonitorCarSet() {
},
{
title: "设置时间",
dataIndex: "in_time",
dataIndex: "create_time",
align: "center",
},
{
title: "备注",
dataIndex: "remark",
dataIndex: "text",
align: "center",
},
{
@ -85,12 +85,19 @@ function MonitorCarSet() {
//
function fetch(params) {
ajax.getOutParkingArrearsList(params).then((res) => {
if (parseInt(res?.status) === 20000) {
setTableData(res.data.list);
setTotal(res.data.total);
ajax.getMonitorCarList(params).then(
(res) => {
if (parseInt(res?.status) === 20000) {
const { list, total } = res?.data || {};
setTableData(list || []);
setTotal(total || 0);
}
},
(err) => {
console.log(err);
message.error("服务器异常");
}
});
);
}
//
@ -99,7 +106,7 @@ function MonitorCarSet() {
message.error("请输入车牌号");
return;
}
ajax.getOutParkingArrearsList(rowData).then(
ajax[rowData?.id ? "doMonitorCarEdit" : "doMonitorCarAdd"](rowData).then(
(res) => {
if (parseInt(res?.status) === 20000) {
message.success(res?.message);
@ -123,7 +130,7 @@ function MonitorCarSet() {
// title: "",
content: <>此操作将删除该车辆是否继续</>,
onOk: () => {
ajax.getOutParkingArrearsList({ id: data?.id }).then(
ajax.doMonitorCarDel({ id: data?.id }).then(
(res) => {
if (parseInt(res?.status) === 20000) {
message.success(res?.message);
@ -210,11 +217,11 @@ function MonitorCarSet() {
<Input.TextArea
className="form-con"
placeholder="请输入"
value={rowData?.remark || undefined}
value={rowData?.text || undefined}
onChange={(e) =>
setRowData({
...rowData,
remark: e.target.value,
text: e.target.value,
})
}
/>

23
src/pages/OperationCenter/DataMonitor/PDAWarnRecord/loadable.jsx

@ -11,7 +11,7 @@ function PDAWarnRecord() {
const columns = [
{
title: "预警类型",
dataIndex: "warn_type",
dataIndex: "type",
align: "center",
},
{
@ -26,13 +26,13 @@ function PDAWarnRecord() {
},
{
title: "预警时间",
dataIndex: "warn_time",
dataIndex: "capture_time",
align: "center",
},
];
const formSearch = [
{
name: "warn_type",
name: "type",
type: "Select",
label: "预警类型",
placeholder: "不限",
@ -81,12 +81,19 @@ function PDAWarnRecord() {
//
function fetch(params) {
ajax.getOutParkingArrearsList(params).then((res) => {
if (parseInt(res?.status) === 20000) {
setTableData(res.data.list);
setTotal(res.data.total);
ajax.getMonitorResList(params).then(
(res) => {
if (parseInt(res?.status) === 20000) {
const { list, total } = res?.data || {};
setTableData(list || []);
setTotal(total || 0);
}
},
(err) => {
console.log(err);
message.error("服务器异常");
}
});
);
}
return (

5
src/pages/OperationCenter/OtherBusiness/ParkingCard/ParkingCardMgm/loadable.jsx

@ -254,7 +254,8 @@ function ParkingCardMgm(props) {
setAddVisible(true)
setCheckData({
...checkData,
...record
...record,
scope:record.scope || "1"
})
scopeRef.current = record.scope;
}
@ -674,7 +675,7 @@ function ParkingCardMgm(props) {
code: sessionTabList?.code || formData.code,//
brand_id: sessionTabList?.brand_id || formData.brand_id,//
model_id: sessionTabList?.model_id || formData.model_id,//
operatorid: sessionTabList?.operatorid || formData?.operatorid,//
operatorid: sessionTabList?.operatorid || formData?.operator_id,//
name: sessionTabList?.name || formData.name,//
status: sessionTabList?.status || formData.status,//
uid: sessionTabList?.uid || formData.uid,//

23
src/pages/OperationCenter/OtherBusiness/ParkingCard/ParkingCardOrder/loadable.jsx

@ -190,8 +190,6 @@ function ParkingCardOrder() {
//
const [ajaxLoading, setAjaxLoading] = useState(false)
//
const [detailTableData, setDetailTableData] = useState([])
//
const disabledDate = (current) => {
return current && current < moment().startOf('day');
@ -271,7 +269,7 @@ function ParkingCardOrder() {
};
//
const ReportPaySummaryReport = () => {
const ReportPaySummaryReport = () => {
ajax.exportOrder(formData).then(res => {
if (parseInt(res?.status) === 20000){
Donwload(res.data?.url)
@ -303,7 +301,8 @@ function ParkingCardOrder() {
...addOrderData,
effective_days:undefined,
days:undefined,
scope:undefined
scope:undefined,
name:undefined
}
let phoneReg = new RegExp(/^(?:(?:\+|00)86)?1[3-9]\d{9}$/)
@ -317,19 +316,19 @@ function ParkingCardOrder() {
}else if(addOrderData.plate_type == ''){
message.error('请选择车牌颜色')
return
}else if(!phoneReg.test(addOrderData.phone)){
}else if(addOrderData.phone && !phoneReg.test(addOrderData.phone)){
message.error('请输入正确的手机号')
return
}else if(addOrderData.name == ''){
message.error('请选择停车卡名称')
return
}else{
ajax.saveCardOrder(data).then((res) => {
ajax.addCardOrder(data).then((res) => {
if (res.status === 20000) {
setAddVisible(false)
setAddOrderData(modalParams)
getData(formData)
message.success("保存成功")
message.success("添加成功")
}
}).catch(err => {
console.log(err);
@ -346,7 +345,7 @@ function ParkingCardOrder() {
effective_days:data.effective_days,
days:data.days,
scope:data.scope,
card_id:data.card_id
card_id:data.value
})
}
@ -358,10 +357,14 @@ function ParkingCardOrder() {
//
const editSave = () => {
ajax.editCardOrder(updataOrder).then(res => {
let data = {
...updataOrder,
id:listItem.id
}
ajax.editCardOrder(data).then(res => {
if(res.status == 20000){
setIsShowDetail(false)
message.success("编辑成功")
message.success("修改成功")
setUpdataOrder({})
getData()
}

5
src/pages/OperationCenter/UserMgm/UserInfo/loadable.jsx

@ -606,6 +606,8 @@ function UserInfo() {
const [bigPic, setBigPic] = useState();
const [total, setTotal] = useState(0);
const [tabKey, setTabKey] = useState("1");
//tab
const [actkey,setactKey]=useState("1")
function openModal(params) {
setDetailVisible(true);
}
@ -1218,10 +1220,11 @@ function UserInfo() {
width={1500}
onCancel={() => {
setDetailVisible(false);
setactKey("1")
}}
footer={null}
>
<Tabs >
<Tabs activeKey={actkey} onChange={(v)=>{setactKey(v)}}>
<Tabs.TabPane tab="停车记录信息" key="1">
{/* {renderParkRecord(detailData)} */}
{renderParkRecord(ycddData)}

11
src/pages/OutRoadMgm/OutDeviceMgm/OutNvrMgm/loadable.jsx

@ -394,7 +394,16 @@ function OutNvrMgm(props) {
//
const onFinish = (values) => {
// console.log(values);
let pattern = /^([0-9]{1,3}\.){3}[0-9]{1,3}$/;
let duankou=/^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/;
if(!pattern.test(values.ip_address)){
message.warning("请输入合理格式的ip地址")
return false
}else if(!duankou.test(values.port)){
message.warning("请输入合适的端口号")
return false
}
console.log(values);
ajax[values?.id ? "doEditOutNvr" : "doAddOutNvr"](values).then(
(res) => {
if (res?.status == 20000) {

1
src/pages/OutRoadMgm/OutSegmentMgm/OutSegment/loadable.jsx

@ -82,6 +82,7 @@ function OutSegment() {
dataIndex: "area_name",
key: "area_name",
align: "center",
render: (text, record, index) => <div style={{ width: '90px' }}>{text}</div>
},
{
title: "车位数",

6
src/pages/SystemMgm/BusinessConfig/BusinessConf/index.scss

@ -221,6 +221,9 @@ $color-primary: var(--color-primary);
.yisa-search {
margin-top: 20px;
display: flex;
.redLogo{
line-height: 35px;
}
label {
line-height: 31px;
}
@ -257,6 +260,9 @@ $color-primary: var(--color-primary);
.yisa-search {
margin-top: 20px;
display: flex;
.redLogo{
line-height: 35px;
}
label {
line-height: 31px;
}

56
src/pages/SystemMgm/BusinessConfig/BusinessConf/loadable.jsx

@ -73,6 +73,8 @@ function BusinessConf(props) {
...addManage, item_name: v,
area_name: '0',
operator_name: "0",
parameter:'',
parameterValue:1
})
}
//
@ -142,7 +144,7 @@ function BusinessConf(props) {
message.error('请选择商户名称')
} else if (addManage.item_name === '') {
message.error('请选择配置项')
} else if (addManage.parameter === undefined && addManage.parameterValue === undefined) {
} else if (addManage.parameter === undefined || addManage.parameterValue === undefined) {
message.error('请选择参数项')
} else {
ajax.addBusiness(data).then(res => {
@ -264,7 +266,11 @@ function BusinessConf(props) {
const [geteditData, setGetEditData] = useState({
area_id: "0",
operator_id: "0",
item_id: ''
item_id: '',
parameter:'',
parameterValue:1,
parameter_exit:'',
parameter_exit_pda:''
})
const CheckApplyBtn = (record) => {
setGetAdminId(record)
@ -281,9 +287,13 @@ function BusinessConf(props) {
}
//
const [getPlateColor, setGetPlateColor] = useState([])
const [getNewPlateColor, setGetNewPlateColor] = useState([])
const plateColor = () => {
ajax.getItemName().then(res => {
let arr = res.data
let newArr = arr.slice(1)
setGetPlateColor(res.data)
setGetNewPlateColor(newArr)
})
}
@ -385,13 +395,27 @@ function BusinessConf(props) {
id: getAdminId.id,
...geteditData
}
ajax.editBusiness(data).then(res => {
if (res.status === 20000) {
setEditVisible(false)
getData(formData)
setGetConfiguration(0)
}
})
console.log(geteditData);
if (geteditData.area_name === '') {
message.error('请选择城市')
} else if (geteditData.operator_name === '') {
message.error('请选择商户名称')
} else if (geteditData.item_name === '') {
message.error('请选择配置项')
} else if (geteditData.parameter === '' && (geteditData.item_id != 1 &&geteditData.item_id != 11 && geteditData.item_id!=8)) {
message.error('请选择参数项')
}else{
ajax.editBusiness(data).then(res => {
if (res.status === 20000) {
setEditVisible(false)
getData(formData)
setGetConfiguration(0)
}else {
message.error(res.message)
}
})
}
}
//
@ -522,7 +546,7 @@ function BusinessConf(props) {
style={{ width: 260, marginLeft: 35 }}
placeholder="请选择"
value={addManage.item_name}
options={getPlateColor}
options={getNewPlateColor}
onChange={handleConfiguration}
fieldNames={{
label: 'type'
@ -675,7 +699,7 @@ function BusinessConf(props) {
style={{ width: 260, marginLeft: 35 }}
placeholder="请选择"
value={getCheckData.item_id}
options={getPlateColor}
options={getNewPlateColor}
onChange={(v, option) => {
setGetMessage(option);
setGetConfiguration(v)
@ -825,6 +849,7 @@ function BusinessConf(props) {
>
<div className="addAdmin">
<div className="yisa-search">
<div className="redLogo">*</div>
<label>城市</label>
<Select
style={{ width: 260, marginLeft: 50 }}
@ -840,6 +865,7 @@ function BusinessConf(props) {
/>
</div>
<div className="yisa-search">
<div className="redLogo">*</div>
<label>商户名称</label>
<Select
style={{ width: 260, marginLeft: 22 }}
@ -855,17 +881,18 @@ function BusinessConf(props) {
/>
</div>
<div className="yisa-search">
<div className="redLogo">*</div>
<label>配置项</label>
<Select
style={{ width: 260, marginLeft: 35 }}
placeholder="请选择"
value={geteditData.item_id}
options={getPlateColor}
options={getNewPlateColor}
onChange={(v, option) => {
setGetMessage(option);
setGetConfiguration(v)
setGetEditData(
Object.assign({}, geteditData, { item_id: v, area_id: "0", operator_id: "0" })
Object.assign({}, geteditData, { item_id: v, area_id: "0", operator_id: "0", parameter:'', parameterValue:1})
);
console.log(geteditData);
}}
@ -881,7 +908,8 @@ function BusinessConf(props) {
?
<>
<div className="yisa-search">
<div className="yisa-search" >
<div className="redLogo">*</div>
<label>参数</label>
<Input
placeholder="请输入"

19
src/services/OperationCenter/CustomerManage/index.js

@ -73,6 +73,14 @@ const submitData = (params) => {
data: params,
});
};
//客服管理-反馈建议-撤回
const getRejectData = (params) => {
return ajax({
url: "/api/ope/service/withDraw",
type: "get",
data: params,
});
};
//客服管理-客诉工单-列表
const getComplainList = (params) => {
return ajax({
@ -81,11 +89,11 @@ const getComplainList = (params) => {
data: params,
});
};
//客服管理-反馈建议-撤回
const getRejectData = (params) => {
//客服管理-客诉统计-数据
const getComplainStatistics = (params) => {
return ajax({
url: "/api/ope/service/withDraw",
type: "get",
url: "/api/ope/service/complaint_statistics",
type: "post",
data: params,
});
};
@ -100,5 +108,6 @@ export default{
submitData,
passData,
rejectData,
getComplainList
getComplainList,
getComplainStatistics,
}

24
src/services/OperationCenter/DataMonitor/index.js

@ -0,0 +1,24 @@
import ajax from "@/config/ajax";
// --推送管理--
export default {
/** 监控车辆设置 */
// 监控车辆设置-列表数据
getMonitorCarList: (data) =>
ajax({ url: "/api/ope/monitor/list", type: "post", data }),
// 监控车辆设置-新增
doMonitorCarAdd: (data) =>
ajax({ url: "/api/ope/monitor/insert", type: "post", data }),
// 监控车辆设置-编辑
doMonitorCarEdit: (data) =>
ajax({ url: "/api/ope/monitor/edit", type: "post", data }),
// 监控车辆设置-删除
doMonitorCarDel: (data) =>
ajax({ url: "/api/ope/monitor/delete", type: "post", data }),
/** PDA预警记录 */
// PDA预警记录-列表
getMonitorResList: (data) =>
ajax({ url: "/api/ope/monitor/res_list", type: "post", data }),
};

12
src/services/OperationCenter/ParkingCardMgm/index.js

@ -62,6 +62,15 @@ const selectCardOrder = (params) => {
data:params
})
}
// 停车卡订单新增
const addCardOrder = (params) => {
return ajax({
url:'/api/ope/parkcard/order_insert',
type:'post',
data:params
})
}
// 停车卡订单导出
const exportOrder = (params) => {
return ajax({
@ -98,5 +107,6 @@ export default {
selectCardOrder,
exportOrder,
editCardOrder,
cardStaData
cardStaData,
addCardOrder
}

4
src/services/OperationCenter/index.js

@ -4,10 +4,12 @@ import OperationSales from "./OperationSales";
import CustomerManage from "./CustomerManage";
import ParkingCardMgm from "./ParkingCardMgm";
import StaggeredMgm from "./StaggeredMgm";
import DataMonitor from "./DataMonitor";
export default {
...CustomerServieMgm,
...OperationSales,
...CustomerManage,
...ParkingCardMgm,
...StaggeredMgm
...StaggeredMgm,
...DataMonitor
};
Loading…
Cancel
Save