Browse Source

fix(): 系统管理,修复已知问题

tags/PMS_Frontend_v1.0.6-develop
wanghx 1 year ago
parent
commit
2764916039
  1. 1
      package.json
  2. 37
      src/components/Export/ExportBtnNew/index.jsx
  3. 5
      src/components/Export/ExportBtnNew/index.scss
  4. 4
      src/config/character.config.js
  5. 2
      src/pages/DataAnalysisPrediction/ParkingIncomeAly/ArrearageAly/ParkArrear/index.jsx
  6. 3
      src/pages/DataAnalysisPrediction/ParkingIncomeAly/ArrearageAly/loadable.jsx
  7. 2
      src/pages/DataAnalysisPrediction/ParkingIncomeAly/ArrearageRecoverAly/loadable.jsx
  8. 2
      src/pages/DataAnalysisPrediction/ParkingIncomeAly/CityArrearageAly/loadable.jsx
  9. 28
      src/pages/DataAnalysisPrediction/ParkingIncomeAly/CityIncomeAly/loadable.jsx
  10. 3
      src/pages/DataAnalysisPrediction/ParkingIncomeAly/OrderArrearageAly/loadable.jsx
  11. 4
      src/pages/DataAnalysisPrediction/ParkingIncomeAly/PriceAly/loadable.jsx
  12. 8
      src/pages/InRoadMgm/EquipmentMgm/BarMgm/index.scss
  13. 16
      src/pages/InRoadMgm/EquipmentMgm/BarMgm/loadable.jsx
  14. 76
      src/pages/InRoadMgm/EquipmentMgm/EquipmentStatus/Device/index.jsx
  15. 8
      src/pages/InRoadMgm/EquipmentMgm/EquipmentStatus/Device/index.scss
  16. 2
      src/pages/SystemMgm/AreaManage/ModalAreaAdd/index.jsx
  17. 33
      src/pages/SystemMgm/OrgnizationMgm/loadable.jsx

1
package.json

@ -28,6 +28,7 @@
"antd": "^4.21.4", "antd": "^4.21.4",
"autoprefixer": "^10.4.2", "autoprefixer": "^10.4.2",
"babel-loader": "^8.2.3", "babel-loader": "^8.2.3",
"bignumber.js": "^9.1.2",
"clean-webpack-plugin": "^4.0.0", "clean-webpack-plugin": "^4.0.0",
"copy-webpack-plugin": "^9.1.0", "copy-webpack-plugin": "^9.1.0",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",

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

@ -67,7 +67,7 @@ function ExportBtn(props) {
const [percent, setPercent] = useState(0); const [percent, setPercent] = useState(0);
// //
const [checkedType, setCheckedType] = useState("1");
const [checkedType, setCheckedType] = useState("2");
// //
const [min, setMin] = useState(1); const [min, setMin] = useState(1);
@ -80,7 +80,7 @@ function ExportBtn(props) {
if (val === exportType) return; if (val === exportType) return;
setMaxExportNum(val === "hasImg" ? 10000 : 100000); setMaxExportNum(val === "hasImg" ? 10000 : 100000);
setExportType(val); setExportType(val);
setCheckedType("1");
setCheckedType("2");
setMin(1); setMin(1);
setMax(1); setMax(1);
}; };
@ -105,32 +105,7 @@ function ExportBtn(props) {
// [,,]---- // [,,]----
const options = [ const options = [
{ label: "导出当前页", value: "1" },
{ label: "导出全部 (全部导出需等待较长时间,请耐心等候) ", value: "2" },
{
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" }
]; ];
// //
@ -233,7 +208,7 @@ function ExportBtn(props) {
// //
const handleReset = () => { const handleReset = () => {
setExportType(modalType); setExportType(modalType);
setCheckedType("1");
setCheckedType("2");
setMin(1); setMin(1);
setMax(1); setMax(1);
setInProcess("1"); setInProcess("1");
@ -356,13 +331,13 @@ function ExportBtn(props) {
</Space> </Space>
</Radio.Group> </Radio.Group>
</div> </div>
<div className='alert'>
{/* <div className='alert'>
<ExclamationCircleFilled className='alertIcon' /> <ExclamationCircleFilled className='alertIcon' />
<div className='message'> <div className='message'>
<div>分段导出每次最多支持导出<span style={{color:'#3B97FF'}}> {maxExportNum} </span></div> <div>分段导出每次最多支持导出<span style={{color:'#3B97FF'}}> {maxExportNum} </span></div>
<div>本次查询包含<span style={{color:'#3B97FF'}}> {totalRecords} </span>条数据可供导出</div> <div>本次查询包含<span style={{color:'#3B97FF'}}> {totalRecords} </span>条数据可供导出</div>
</div> </div>
</div>
</div> */}
</div> </div>
</div> </div>
)} )}

5
src/components/Export/ExportBtnNew/index.scss

@ -1,3 +1,8 @@
.export-container {
display: flex;
justify-content: flex-end;
}
.export { .export {
.title { .title {
margin: 18px 0 24px; margin: 18px 0 24px;

4
src/config/character.config.js

@ -935,9 +935,9 @@ export const lineChartOption = {
name: '', name: '',
type: 'line', type: 'line',
// stack: 'Total', // stack: 'Total',
symbolSize: 1,
symbolSize: 6,
symbol: 'circle', symbol: 'circle',
showSymbol: false,
showSymbol: true,
smooth: true, smooth: true,
lineStyle: { lineStyle: {
width: 3 width: 3

2
src/pages/DataAnalysisPrediction/ParkingIncomeAly/ArrearageAly/ParkArrear/index.jsx

@ -28,7 +28,7 @@ const ParkArrear = forwardRef((props, ref) => {
title: "序号", title: "序号",
width: 60, width: 60,
align: 'center', align: 'center',
render: (text, record, index) => index + 1,
render: (text, record, index) => (pageInfo.pn - 1) * pageInfo.length + index + 1,
}, },
{ {
title: "停车场名称", title: "停车场名称",

3
src/pages/DataAnalysisPrediction/ParkingIncomeAly/ArrearageAly/loadable.jsx

@ -229,11 +229,12 @@ function ArrearageAly(props) {
/> */} /> */}
<Select <Select
showSearch showSearch
allowClear
className="form-con" className="form-con"
value={formData.park_text} value={formData.park_text}
onSearch={(newValue) => handleSearchPark(newValue)} onSearch={(newValue) => handleSearchPark(newValue)}
onChange={(v) => setFormData({...formData, park_text: v})} onChange={(v) => setFormData({...formData, park_text: v})}
placeholder=""
placeholder="全部"
defaultActiveFirstOption={false} defaultActiveFirstOption={false}
filterOption={false} filterOption={false}

2
src/pages/DataAnalysisPrediction/ParkingIncomeAly/ArrearageRecoverAly/loadable.jsx

@ -52,7 +52,7 @@ function ArrearageRecoverAly(props) {
dataIndex: "area", dataIndex: "area",
}, },
{ {
title: "间范围",
title: "间范围",
align: 'center', align: 'center',
dataIndex: "date", dataIndex: "date",
}, },

2
src/pages/DataAnalysisPrediction/ParkingIncomeAly/CityArrearageAly/loadable.jsx

@ -52,7 +52,7 @@ function CityArrearageAly(props) {
dataIndex: "area", dataIndex: "area",
}, },
{ {
title: "间范围",
title: "间范围",
align: 'center', align: 'center',
dataIndex: "date", dataIndex: "date",
}, },

28
src/pages/DataAnalysisPrediction/ParkingIncomeAly/CityIncomeAly/loadable.jsx

@ -1,5 +1,6 @@
import React, { useState, useRef, useEffect } from "react" import React, { useState, useRef, useEffect } from "react"
import { Select, Input, Button, Table, message, Pagination, DatePicker, Cascader, Tooltip } from "antd" import { Select, Input, Button, Table, message, Pagination, DatePicker, Cascader, Tooltip } from "antd"
import { QuickMenu } from '@/components'
import { QuestionCircleFilled } from '@ant-design/icons' import { QuestionCircleFilled } from '@ant-design/icons'
import { dictionary } from "@/config/common" import { dictionary } from "@/config/common"
import ReactEcharts from "echarts-for-react" import ReactEcharts from "echarts-for-react"
@ -8,6 +9,7 @@ import utils from "@/config/utils"
import ajax from "@/services" import ajax from "@/services"
import moment from "moment" import moment from "moment"
import './index.scss' import './index.scss'
const BigNumber = require('bignumber.js')
function CityIncomeAly(props) { function CityIncomeAly(props) {
const { const {
@ -104,9 +106,9 @@ function CityIncomeAly(props) {
} }
const initPieChart = (data, chartName, unit) => { const initPieChart = (data, chartName, unit) => {
let total = 0
let total = new BigNumber(0)
data.map((item) => { data.map((item) => {
total += item.value
total = total.plus(item.value)
}) })
if (chartName == 'ys') { if (chartName == 'ys') {
setYsPieChartOption({ setYsPieChartOption({
@ -236,6 +238,14 @@ function CityIncomeAly(props) {
}) })
} }
const toDeftime = (v) => {
setFormData({
...formData,
start_time: moment(v.startDateTime),
end_time: moment(v.endDateTime)
})
}
const handleSearch = () => { const handleSearch = () => {
let days = moment(formData.end_time).diff(moment(formData.start_time), 'days') let days = moment(formData.end_time).diff(moment(formData.start_time), 'days')
if (formData.date_type == 'day' && days > 31) { if (formData.date_type == 'day' && days > 31) {
@ -428,6 +438,20 @@ function CityIncomeAly(props) {
} }
/> />
</div> </div>
<div className="yisa-search">
<QuickMenu
dropdownData={[
{ text: '昨日', value: 1 },
{ text: '今日', value: 0 },
{ text: '近三日', value: 2 },
{ text: '近一周', value: 6 },
{ text: '近一月', value: 29 },
{ text: '近半年', value: 180 },
{ text: '近一年', value: 365 },
{ text: '近两年', value: 730 }
]}
onChange={(v) => toDeftime(v)} />
</div>
<div className="form-btn"> <div className="form-btn">
<Button <Button
className="reset" className="reset"

3
src/pages/DataAnalysisPrediction/ParkingIncomeAly/OrderArrearageAly/loadable.jsx

@ -359,11 +359,12 @@ function OrderArrearageAly(props) {
/> */} /> */}
<Select <Select
showSearch showSearch
allowClear
className="form-con" className="form-con"
value={formData.park_text} value={formData.park_text}
onSearch={(newValue) => handleSearchPark(newValue)} onSearch={(newValue) => handleSearchPark(newValue)}
onChange={(v) => setFormData({...formData, park_text: v})} onChange={(v) => setFormData({...formData, park_text: v})}
placeholder=""
placeholder="全部"
defaultActiveFirstOption={false} defaultActiveFirstOption={false}
filterOption={false} filterOption={false}
options={(parkList).map((d) => ({ options={(parkList).map((d) => ({

4
src/pages/DataAnalysisPrediction/ParkingIncomeAly/PriceAly/loadable.jsx

@ -324,14 +324,14 @@ function PriceAly(props) {
/> */} /> */}
<Select <Select
showSearch showSearch
allowClear
className="form-con" className="form-con"
value={formData.park_text} value={formData.park_text}
onSearch={(newValue) => handleSearchPark(newValue)} onSearch={(newValue) => handleSearchPark(newValue)}
onChange={(v) => setFormData({...formData, park_text: v})} onChange={(v) => setFormData({...formData, park_text: v})}
placeholder=""
placeholder="全部"
defaultActiveFirstOption={false} defaultActiveFirstOption={false}
filterOption={false} filterOption={false}
options={(parkList).map((d) => ({ options={(parkList).map((d) => ({
value: d.value, value: d.value,
label: d.text label: d.text

8
src/pages/InRoadMgm/EquipmentMgm/BarMgm/index.scss

@ -142,6 +142,14 @@ $color-primary: var(--color-primary);
} }
} }
} }
.black {
.yisa-btn {
user-select: none;
&:hover {
cursor: pointer;
}
}
}
.fence { .fence {
// width: 660px !important; // width: 660px !important;
.ant-modal-body { .ant-modal-body {

16
src/pages/InRoadMgm/EquipmentMgm/BarMgm/loadable.jsx

@ -1,6 +1,6 @@
import React, { useState, useRef, useEffect } from "react"; import React, { useState, useRef, useEffect } from "react";
import { ResultFlowResult, BaseMap, Marker, ExportBtnNew, ImportBtn } from "@/components" import { ResultFlowResult, BaseMap, Marker, ExportBtnNew, ImportBtn } from "@/components"
import { Select, Input, Button, Table, message, Pagination, Cascader, Modal, TreeSelect } from 'antd'
import { Select, Input, Button, Table, message, Pagination, Cascader, Modal, TreeSelect, Popover } from 'antd'
import { import {
pageSizeOptions pageSizeOptions
} from '@/config/character.config.js' } from '@/config/character.config.js'
@ -133,11 +133,21 @@ function Fence(props) {
// }, // },
{ {
title: '操作', title: '操作',
// render: (text, record) => {
// return <>
// <Button type="primary" shape="circle" size="middle" icon={<InfoCircleOutlined />} onClick={() => handleDetail(record)}/>
// </>
// },
render: (text, record) => { render: (text, record) => {
return <> return <>
<Button type="primary" shape="circle" size="middle" icon={<InfoCircleOutlined />} onClick={() => handleDetail(record)}/>
<Popover content={
<div className="black">
<div className="yisa-btn" onClick={() => handleDetail(record)}>查看设备</div>
</div>}>
<Button type="primary" size="middle">操作</Button>
</Popover>
</> </>
}
},
} }
] ]
// //

76
src/pages/InRoadMgm/EquipmentMgm/EquipmentStatus/Device/index.jsx

@ -163,13 +163,23 @@ function Road(props) {
{ {
title: '操作', title: '操作',
width: 135, width: 135,
render: (text, record, index) => {
// render: (text, record, index) => {
// return <>
// <div className="action-wrapper">
// <Button type="primary" shape="circle" s size="middle" icon={<InfoCircleOutlined />} onClick={() => handleEdit(record)}/>
// </div>
// </>
// },
render: (text, record) => {
return <> return <>
<div className="action-wrapper">
<Button type="primary" shape="circle" s size="middle" icon={<InfoCircleOutlined />} onClick={() => handleEdit(record)}/>
</div>
<Popover content={
<div className="black">
<div className="yisa-btn" onClick={() => handleEdit(record)}>查看设备</div>
</div>}>
<Button type="primary" size="middle">操作</Button>
</Popover>
</> </>
}
},
} }
] ]
@ -362,31 +372,41 @@ useEffect(() => {
label: '下线' label: '下线'
} }
]} ]}
onChange={(v) => setFormData({...formData, operate_status: v})}
/>
</div>
<div className="yisa-search">
<label>设备状态</label>
<Select
style={{ width: 260, marginLeft: 14 }}
placeholder="请选择"
value={formData.device_status}
options={[
{
value: -1,
label: '全部'
},
{
value: '1',
label: '在线'
}, {
value: '2',
label: '离线'
}
]}
onChange={(v) => setFormData({...formData, device_status: v})}
onChange={(v) => {
if (v == 2) {
setFormData({...formData, operate_status: v, device_status: -1})
} else {
setFormData({...formData, operate_status: v})
}
}}
/> />
</div> </div>
{
formData.operate_status != 2 ? (
<div className="yisa-search">
<label>设备状态</label>
<Select
style={{ width: 260, marginLeft: 14 }}
placeholder="请选择"
value={formData.device_status}
options={[
{
value: -1,
label: '全部'
},
{
value: '1',
label: '在线'
}, {
value: '2',
label: '离线'
}
]}
onChange={(v) => setFormData({...formData, device_status: v})}
/>
</div>
) : (<></>)
}
<div className="timePicker yisa-search"> <div className="timePicker yisa-search">
<div className="btnBox"> <div className="btnBox">
<Button type="primary" className="yisa-btn colorBtn" icon={<SearchOutlined />} onClick={() => { getSearchData() }}> <Button type="primary" className="yisa-btn colorBtn" icon={<SearchOutlined />} onClick={() => { getSearchData() }}>

8
src/pages/InRoadMgm/EquipmentMgm/EquipmentStatus/Device/index.scss

@ -134,6 +134,14 @@ $color-primary : var(--color-primary);
} }
} }
} }
.black {
.yisa-btn {
user-select: none;
&:hover {
cursor: pointer;
}
}
}
.tabchange { .tabchange {
height: 100%; height: 100%;
.yisa-tabs { .yisa-tabs {

2
src/pages/SystemMgm/AreaManage/ModalAreaAdd/index.jsx

@ -77,7 +77,7 @@ function ModalAreaAdd(props) {
offset: 0 offset: 0
}} }}
initialValues={{ initialValues={{
type: "1"
type: 1
}} }}
onValuesChange={onValuesChange} onValuesChange={onValuesChange}
> >

33
src/pages/SystemMgm/OrgnizationMgm/loadable.jsx

@ -116,6 +116,7 @@ function OrgnizationMgm() {
if (e.status == 20000) { if (e.status == 20000) {
message.success(e.message) message.success(e.message)
getAreaTree() getAreaTree()
getOrgTree()
} else { } else {
message.error(e.message) message.error(e.message)
} }
@ -222,8 +223,8 @@ function OrgnizationMgm() {
const handleTreeClick = (e, { node }) => { const handleTreeClick = (e, { node }) => {
//
if (node.level > 2) {
//
if (node.level > 3) {
setActiveOrg({}) setActiveOrg({})
message.error('不允许配置') message.error('不允许配置')
return return
@ -403,7 +404,6 @@ function OrgnizationMgm() {
} }
const tabRender = useMemo(() => { const tabRender = useMemo(() => {
// console.log(areaTree)
return [ return [
{ {
label: `基础配置`, label: `基础配置`,
@ -489,17 +489,17 @@ function OrgnizationMgm() {
<div className="sys-form-container"> <div className="sys-form-container">
<div className="role-tree-container"> <div className="role-tree-container">
<div className="tree-title">权限分配</div> <div className="tree-title">权限分配</div>
<Tree
disabled={!editStatus}
checkable
treeData={roleTree}
onCheck={handleRoleTreeChange}
checkedKeys={roleCheckedKeys}
fieldNames={{
title: 'name',
key: 'id'
}}
/>
<Tree
disabled={!editStatus}
checkable
treeData={roleTree}
onCheck={handleRoleTreeChange}
checkedKeys={roleCheckedKeys}
fieldNames={{
title: 'name',
key: 'id'
}}
/>
</div> </div>
</div> </div>
), ),
@ -560,7 +560,10 @@ function OrgnizationMgm() {
<div className="org-content"> <div className="org-content">
<Tabs <Tabs
defaultActiveKey="1" defaultActiveKey="1"
onChange={(v) => setTabActive(v)}
onChange={(v) => {
setAreaTreeUpdate(areaTreeUpdate+1)
setTabActive(v)
}}
items={Object.keys(activeOrg).length ? (activeOrg.level < 3 ? tabRender : null) : null} items={Object.keys(activeOrg).length ? (activeOrg.level < 3 ? tabRender : null) : null}
/> />
{ {

Loading…
Cancel
Save