Browse Source

fix(): 导出Modal统一, 数据分析 && 系统管理

tags/PMS_V1.0.0_Alpha5
wanghx 1 year ago
parent
commit
ea968fcf1d
  1. 70
      src/components/Export/ExportBtnNew/index.jsx
  2. 3
      src/components/MapCircle/index.jsx
  3. 23
      src/pages/DataAnalysisPrediction/EquipmentAly/EquipmentRunningStat/loadable.jsx
  4. 22
      src/pages/DataAnalysisPrediction/MemberStat/ParkingAly/loadable.jsx
  5. 6
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/CarTypeAly/index.scss
  6. 15
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/CarTypeAly/loadable.jsx
  7. 3
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyDuration/index.scss
  8. 28
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyDuration/loadable.jsx
  9. 6
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyOverview/index.scss
  10. 15
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyOverview/loadable.jsx
  11. 3
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyReport/index.scss
  12. 15
      src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyReport/loadable.jsx
  13. 2
      src/pages/SystemMgm/AreaManage/index.scss
  14. 17
      src/pages/SystemMgm/AreaManage/loadable.jsx
  15. 16
      src/pages/SystemMgm/SystemLog/loadable.jsx

70
src/components/Export/ExportBtnNew/index.jsx

@ -17,12 +17,14 @@ function ExportBtn(props) {
const {
children,
className,
modalType = "hasImg", // hasImgnoImg, portrait
totalRecords = 100, //
exportUrl = "http://192.168.8.7:3001/mock/2995/api/v1/common/export", //
ajaxType = "post", //
postdata = {}, // post : {formData:(pn,page_size),other:{}}
timeDelay = 300,
pageName,
imgno = true // true false
} = props;
@ -105,7 +107,32 @@ function ExportBtn(props) {
// [,,]----
const options = [
{ label: "导出全部 (全部导出需等待较长时间,请耐心等候) ", value: "2" }
{ label: "导出当前页", value: "1" },
{
label: (
<div className='piecewise'>
<span>导出</span>
<div className='countInput'>
<InputNumber
key="min"
min={1}
value={min}
onChange={(e) => handleChangeNum(e, "min")}
/>
~
<InputNumber
key="max"
min={1}
value={max}
onChange={(e) => handleChangeNum(e, "max")}
/>
</div>
<div className='count'>{Math.abs(max - min + 1)}</div>
</div>
),
value: "3",
},
{ label: "导出全部", value: "2" }
];
//
@ -134,9 +161,9 @@ function ExportBtn(props) {
}
//
else if (checkedType == 1) {
const { pn, length } = postdata.formData
const { pn, length, page_size } = postdata.formData
console.log(postdata.formData)
startExport((pn - 1) * length + 1, pn * length, exportType == "hasImg" ? 1 : 0)
startExport((pn - 1) * (length || page_size) + 1, pn * (length || page_size) , exportType == "hasImg" ? 1 : 0)
}
//
else {
@ -152,8 +179,18 @@ function ExportBtn(props) {
let url = exportUrl;
if (imgno) {
ajax({ url, type: ajaxType, data: { export_type: checkedType, start, end, isimg:exportType == "hasImg" ? 1 : 0, ...formData, ...other } }).then((res) => {
if (pageName == 'parkingOverview') {
downloadFile(res.export_url)
handleCancel()
setBtnLoading(false);
return
}
if (res.status === 20000) {
downloadFile(res.data.url)
if (end - start > 500) {
message.info('当前导出任务, 已加入导出任务列表')
} else {
downloadFile(res.data.url || res.data.export_url)
}
handleCancel()
// res.data.task_url
// setInProcess("2");
@ -170,8 +207,18 @@ function ExportBtn(props) {
});
} else {
ajax({ url, type: ajaxType, data: { export_type: checkedType, start, end, isimg:0, ...formData, ...other } }).then((res) => {
if (pageName == 'parkingOverview') {
downloadFile(res.export_url)
handleCancel()
setBtnLoading(false);
return
}
if (res.status === 20000) {
downloadFile(res.data.url || res.data.export_url)
if (end - start > 500) {
message.info('当前导出任务, 已加入导出任务列表')
} else {
downloadFile(res.data.url || res.data.export_url)
}
handleCancel()
// setInProcess("2");
// setProcess(res.data?.task_url)
@ -287,7 +334,7 @@ function ExportBtn(props) {
<div className='titleLine' />
</div>
<div className='export-content'>
<div className='mode'>
{/* <div className='mode'>
{EXPORT_TYPE.map((item) => (
<div
key={item.value}
@ -308,7 +355,7 @@ function ExportBtn(props) {
}px)`,
}}
/>
</div>
</div> */}
<div className='options'>
<Radio.Group value={checkedType} onChange={onOptionChange}>
<Space direction="vertical" size={10}>
@ -331,13 +378,14 @@ function ExportBtn(props) {
</Space>
</Radio.Group>
</div>
{/* <div className='alert'>
<div className='alert'>
<ExclamationCircleFilled className='alertIcon' />
<div className='message'>
<div>分段导出每次最多支持导出<span style={{color:'#3B97FF'}}> {maxExportNum} </span></div>
<div>本次查询包含<span style={{color:'#3B97FF'}}> {totalRecords} </span>条数据可供导出</div>
<div>导出文件将加入导出下载列表</div>
{/* <div>分段导出每次最多支持导出<span style={{color:'#3B97FF'}}> {maxExportNum} </span>条</div> */}
{/* <div>本次查询包含<span style={{color:'#3B97FF'}}> {totalRecords} </span>条数据可供导出</div> */}
</div>
</div> */}
</div>
</div>
</div>
)}

3
src/components/MapCircle/index.jsx

@ -18,7 +18,7 @@ function Markers(props) {
<img src='${Rerm}' />
</div>`;
useEffect(() => {
if (data.length) {
if (data.length && data[0].lat && data[0].lng) {
addMarker(data, getMapValue);
console.log(getMapValue);
}
@ -78,6 +78,7 @@ function Markers(props) {
}, 800);
};
useEffect(() => {
if (!data.length || !data[0].lng || !data[0].lat) return
map.setCenter(new AMap.LngLat(parseFloat(data[0].lng), parseFloat(data[0].lat)));
}, [getReset])
return null;

23
src/pages/DataAnalysisPrediction/EquipmentAly/EquipmentRunningStat/loadable.jsx

@ -8,6 +8,7 @@ import {
Popover,
Cascader,
AutoComplete,
Button,
Tooltip,
Checkbox,
Modal,
@ -19,7 +20,7 @@ import moment from "moment";
import ajax from "@/services";
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
import { ResultFlow } from "@/components";
import { ResultFlow, ExportBtnNew } from "@/components";
import "./index.scss";
import Equip1 from "@/assets/images/equip/equip1.png";
import Equip2 from "@/assets/images/equip/equip2.png";
@ -711,7 +712,7 @@ function ExceptionParkReport() {
<p>
共查询到<span> {Data?.total || 0}</span>条数据
</p>
<span
{/* <span
className={"sear_ser"}
onClick={() => {
Data?.total && setOpen(true);
@ -723,7 +724,21 @@ function ExceptionParkReport() {
}}
>
导出
</span>
</span> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
totalRecords={500}
exportUrl="/api/ana/equipmentRuning/export"
postdata={{
formData: {
...FormDatas,
area_id: Show,
export_name: "设备运行统计-" + moment().format("YYYY-MM-DD")
}
}}
imgno={false}
/>
</div>
<ResultFlow
hasLoad={true}
@ -733,7 +748,7 @@ function ExceptionParkReport() {
>
<div className="scrplltab">
<div className="table_raps">
<Table
<Table
className="yisa_tabled"
columns={column(selectArr)}
rowKey={(record) => record.id}

22
src/pages/DataAnalysisPrediction/MemberStat/ParkingAly/loadable.jsx

@ -4,6 +4,7 @@ import {
Pagination,
Table,
Select,
Button,
Input,
Popover,
Cascader,
@ -18,7 +19,7 @@ import moment from "moment";
import ReactEcharts from "echarts-for-react";
import ajax from "@/services";
// import { useSessionStorageState, useUpdateEffect, useSize, useUpdate } from 'ahooks';
import { ResultFlow } from "@/components";
import { ResultFlow, ExportBtnNew } from "@/components";
import "./index.scss";
function ParkingAly() {
@ -602,7 +603,7 @@ function ParkingAly() {
<p>
共查询到<span> {Data?.total || 0}</span>条数据
</p>
<span
{/* <span
className={"sear_ser"}
onClick={() => {
Data?.total && ReportPaySummaryReport();
@ -610,7 +611,22 @@ function ParkingAly() {
}}
>
导出
</span>
</span> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
totalRecords={500}
exportUrl="/api/ana/member/parking_export"
postdata={{
formData: {
pn: 1,
page_size: 15,
...FormData,
...DateFormt(FormDatas.date_type)
}
}}
imgno={false}
/>
</div>
<ResultFlow
hasLoad={true}

6
src/pages/DataAnalysisPrediction/ParkingBusinessAly/CarTypeAly/index.scss

@ -252,14 +252,16 @@ $color-primary : var(--color-primary);
margin: 18px 0 18px 18px;
display: inline-block;
}
.root_gfkk {
float: right;
}
.export-btn {
display: inline-block;
text-align: center;
float: right;
width: 68px;
height: 34px;
line-height: 34px;
// line-height: 34px;
background: linear-gradient(180deg, #3aa9ff, #59b7ff);
border-radius: 4px;
margin-right: 15px;

15
src/pages/DataAnalysisPrediction/ParkingBusinessAly/CarTypeAly/loadable.jsx

@ -1,5 +1,5 @@
import React, { useState, useEffect } from "react";
import { ResultFlowResult, DataSelect } from "@/components";
import { ResultFlowResult, DataSelect, ExportBtnNew } from "@/components";
import { Select, Input, Button, Table, message, Pagination, DatePicker, Modal, Cascader, Tooltip, Tabs } from "antd";
import { useSessionStorageState } from "ahooks";
import { lineChartOption, ringChartOption } from "../echarts.config";
@ -701,7 +701,18 @@ function CarTypeAly() {
</div>
<div className="result-box parkinglive-right">
<div className="result-box-title">新能源车排行</div>
<div className="export-btn" onClick={handleExport}>导出</div>
{/* <div className="export-btn" onClick={handleExport}>导出</div> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
totalRecords={500}
exportUrl="/api/ana/dataanalysis/carType_export"
postdata={{
// formData: {...pageInfo, export_type: 'all', area_id: sessionTabList?.show}
formData: { ...pageInfo, export: 1, type: tabKey == 2 ? 'road' : 'region', area_id: sessionTabList?.show}
}}
imgno={false}
/>
<Tabs
defaultActiveKey="1"
activeKey={tabKey}

3
src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyDuration/index.scss

@ -148,7 +148,8 @@ $color-primary : var(--color-primary);
float: right;
width: 68px;
height: 34px;
line-height: 34px;
// line-height: 34px;
line-height: unset !important;
background: linear-gradient(180deg,#3aa9ff, #59b7ff);
border-radius: 4px;
margin-right: 15px;

28
src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyDuration/loadable.jsx

@ -1,5 +1,5 @@
import React, { useState, useEffect } from "react";
import { ResultFlowResult } from "@/components";
import { ResultFlowResult, ExportBtnNew } from "@/components";
import { Select, Input, Button, Table, message, Pagination, DatePicker, Modal, Cascader, Tooltip, Tabs } from "antd";
import { useSessionStorageState } from "ahooks";
import { dictionary } from "@/config/common";
@ -919,7 +919,18 @@ function ParkingAlyDuration() {
<div className="duration-box">
<div className="result-box duration-left">
<div className="result-box-title">日均泊位周转次数排行榜</div>
<div className="export-btn" onClick={handleExport}>导出</div>
{/* <div className="export-btn" onClick={handleExport}>导出</div> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
totalRecords={500}
exportUrl="/api/ana/dataanalysis/get_turn_times_export"
pageName="parkingOverview"
postdata={{
formData: {...pageInfo, export_type: 'all', area_id: sessionTabList?.show}
}}
imgno={false}
/>
<Tabs
defaultActiveKey="2"
activeKey={tabKey}
@ -1012,7 +1023,18 @@ function ParkingAlyDuration() {
</div>
<div className="result-box duration-right">
<div className="result-box-title">平均停车时长排行榜</div>
<div className="export-btn" onClick={() => { handleExportCar() }}>导出</div>
{/* <div className="export-btn" onClick={() => { handleExportCar() }}>导出</div> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
totalRecords={500}
exportUrl="/api/ana/dataanalysis/get_parking_duration_export"
pageName="parkingOverview"
postdata={{
formData: {...pageInfo, export_type: 'all', area_id: sessionTabList?.show}
}}
imgno={false}
/>
<Tabs
defaultActiveKey="2"
activeKey={tabCarKey}

6
src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyOverview/index.scss

@ -12,7 +12,9 @@ $color-primary : var(--color-primary);
height: 100%;
overflow-y: auto;
@include scrollBar(var(--color-user-list-bg), #3B97FF);
.root_gfkk {
float: right;
}
.paid-search {
display: block;
width: 375px;
@ -259,7 +261,7 @@ $color-primary : var(--color-primary);
float: right;
width: 68px;
height: 34px;
line-height: 34px;
// line-height: 34px;
background: linear-gradient(180deg, #3aa9ff, #59b7ff);
border-radius: 4px;
margin-right: 15px;

15
src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyOverview/loadable.jsx

@ -8,7 +8,7 @@ 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 { Icon } from "@/components"
import { Icon, ExportBtnNew } from "@/components"
import moment from "moment";
import ReactEcharts from "echarts-for-react";
import "./index.scss";
@ -768,7 +768,18 @@ function ParkingAlyOverview() {
</div>
<div className="result-box overview-right">
<div className="result-box-title">停车资源利用率排行榜</div>
<div className="export-btn" onClick={handleExport}>导出</div>
{/* <div className="export-btn" onClick={handleExport}>导出</div> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
totalRecords={500}
exportUrl="/api/ana/dataanalysis/parking_export"
pageName="parkingOverview"
postdata={{
formData: {...pageInfo, export_type: 'all', area_id: sessionTabList?.show}
}}
imgno={false}
/>
<Tabs
//defaultActiveKey="2"
activeKey={tabKey}

3
src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyReport/index.scss

@ -255,6 +255,9 @@ $color-primary : var(--color-primary);
margin-bottom: 10px;
cursor: pointer;
}
.root_gfkk {
float: right;
}
.row-head {
height: 32px;
display: flex;

15
src/pages/DataAnalysisPrediction/ParkingBusinessAly/ParkingAlyReport/loadable.jsx

@ -8,7 +8,7 @@ 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 { Icon } from "@/components"
import { Icon, ExportBtnNew } from "@/components"
import moment from "moment";
import ReactEcharts from "echarts-for-react";
import "./index.scss";
@ -529,7 +529,18 @@ function ParkingAlyReport() {
<div className="paid-result soll-result">
<div className="result">
<div className="result-title">共查询到<p>{resultData?.total_records || 0}</p>条结果</div>
<div className="export-btn" onClick={handleExport}>导出</div>
{/* <div className="export-btn" onClick={handleExport}>导出</div> */}
<ExportBtnNew
children={<Button className="export-btn-new" size='medium' type="primary">导出</Button>}
modalType="noImg"
totalRecords={resultData?.total_records || 500}
exportUrl="/api/ana/dataanalysis/parking_total_analysis_export"
pageName="parkingOverview"
postdata={{
formData: { ...formData, ...pageInfo, area_id: sessionTabList?.show }
}}
imgno={false}
/>
<Table
columns={columns}
dataSource={resultData.list || []}

2
src/pages/SystemMgm/AreaManage/index.scss

@ -21,7 +21,7 @@ $color-primary : var(--color-primary);
}
}
.modal-map-container {
#map-select-container {
#map {
height: 300px;
}
.modal-map-info {

17
src/pages/SystemMgm/AreaManage/loadable.jsx

@ -2,7 +2,7 @@ import React, { useState, useRef, useEffect } from "react";
import { message, Pagination, Table, Input, Modal, Tree, Button, Dropdown } from "antd";
import { DeleteOutlined, EditOutlined, PlusCircleOutlined, EllipsisOutlined } from '@ant-design/icons';
import ajax from "@/services"
import { AMap } from "@/components"
import { AMap, BaseMap, MapCircle } from "@/components"
import ModalAreaAdd from "./ModalAreaAdd";
import "./index.scss";
import { isArray } from "lodash";
@ -127,7 +127,7 @@ function AreaManage() {
setModalMapVisible(true)
}
const handleMapClick = ({ lat, lng }) => {
setLatlng([lat.toFixed(4), lng.toFixed(4)].join(','))
setLatlng([lng.toFixed(4), lat.toFixed(4)].join(','))
}
//
@ -260,10 +260,19 @@ function AreaManage() {
footer={null}
>
<div className="modal-map-content">
<AMap
{/* <AMap
id="map-select-container"
onClick={({ lnglat }) => handleMapClick(lnglat)}
/>
/> */}
<BaseMap zoom={13} id="map-select-container" onClick={({ lnglat }) => handleMapClick(lnglat)}>
<MapCircle
// getReset={getReset}
// getMapValue={getEditModal.attendmin}
data={latlng ? [{lng: latlng.split(',')[0], lat: latlng.split(',')[1]}] : []}
refresh={true}
type="img"
/>
</BaseMap>
</div>
<div className="modal-map-info">
<Input value={latlng}></Input>

16
src/pages/SystemMgm/SystemLog/loadable.jsx

@ -3,7 +3,7 @@ import { message, Cascader, Select, Input, DatePicker, Button, Table, Pagination
import { SearchOutlined, DeleteOutlined, DownloadOutlined } from '@ant-design/icons';
import moment from "moment";
import ajax from '@/services'
import { TableModule } from "@/components";
import { TableModule, ExportBtnNew } from "@/components";
import { useSessionStorageState } from "ahooks";
import { dictionary } from "@/config/common.js";
import "./index.scss";
@ -441,9 +441,19 @@ const SystemLog = () => {
<div className="result">
<div className="result-info-row">
<span className="font">共检索到<em>{resultData.total_records}</em>条结果</span>
<Button type="primary" onClick={() => setModalExport({ ...modalExport, open: true })}>
{/* <Button type="primary" onClick={() => setModalExport({ ...modalExport, open: true })}>
导出
</Button>
</Button> */}
<ExportBtnNew
children={<Button className="export-btn" size='medium' type="primary">导出</Button>}
modalType="noImg"
totalRecords={resultData.total_records}
exportUrl="/api/manage/system/export_system_log"
postdata={{
formData: {...formData, ...{is_excel: 1}}
}}
imgno={false}
/>
</div>
<div className="result-data">
<Table

Loading…
Cancel
Save