fix(): 图标优化
parent
01204ca96d
commit
79d8a0d0a1
|
|
@ -1,21 +1,170 @@
|
||||||
import moment from "moment";
|
import { Button, Form, Input, Popconfirm, Table } from 'antd';
|
||||||
export default function data(type) {
|
import React, { useContext, useEffect, useRef, useState } from 'react';
|
||||||
const now = moment(); // 获取当前时间
|
const EditableContext = React.createContext(null);
|
||||||
const startOfDay = now.clone().startOf('day'); // 获取今天的凌晨
|
const EditableRow = ({ index, ...props }) => {
|
||||||
|
const [form] = Form.useForm();
|
||||||
|
return (
|
||||||
|
<Form form={form} component={false}>
|
||||||
|
<EditableContext.Provider value={form}>
|
||||||
|
<tr {...props} />
|
||||||
|
</EditableContext.Provider>
|
||||||
|
</Form>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
const EditableCell = ({
|
||||||
|
title,
|
||||||
|
editable,
|
||||||
|
children,
|
||||||
|
dataIndex,
|
||||||
|
record,
|
||||||
|
handleSave,
|
||||||
|
...restProps
|
||||||
|
}) => {
|
||||||
|
const [editing, setEditing] = useState(true);
|
||||||
|
const inputRef = useRef(null);
|
||||||
|
const form = useContext(EditableContext);
|
||||||
|
// useEffect(() => {
|
||||||
|
// if (editing) {
|
||||||
|
// inputRef.current?.focus();
|
||||||
|
// }
|
||||||
|
// }, [editing]);
|
||||||
|
const toggleEdit = (title) => {
|
||||||
|
if (title == '雨量') {
|
||||||
|
// setEditing(!editing);
|
||||||
|
if (record[dataIndex]) {
|
||||||
|
form.setFieldsValue({
|
||||||
|
[dataIndex]: record[dataIndex],
|
||||||
|
});
|
||||||
|
|
||||||
// 初始化数组,第一个元素是今天的凌晨
|
}
|
||||||
let timeArray = [startOfDay];
|
};
|
||||||
|
|
||||||
// 生成接下来的时间点并添加到数组中,间隔为两个小时,且不超过当前时间
|
}
|
||||||
let nextTime = startOfDay.clone().add(1, 'hours');
|
const save = async () => {
|
||||||
while (nextTime <= now) {
|
try {
|
||||||
timeArray.push(nextTime.format('MM-DD HH:mm'));
|
const values = await form.validateFields();
|
||||||
nextTime = nextTime.clone().add(1, 'hours');
|
toggleEdit(title);
|
||||||
|
handleSave({
|
||||||
|
...record,
|
||||||
|
...values,
|
||||||
|
});
|
||||||
|
} catch (errInfo) {
|
||||||
|
console.log('Save failed:', errInfo);
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
let childNode = children;
|
||||||
|
if (editable) {
|
||||||
|
childNode = editing ? (
|
||||||
|
<Form.Item
|
||||||
|
style={{
|
||||||
|
margin: 0,
|
||||||
|
}}
|
||||||
|
name={dataIndex}
|
||||||
|
>
|
||||||
|
<Input ref={inputRef} onPressEnter={save} onBlur={save} />
|
||||||
|
</Form.Item>
|
||||||
|
) : (
|
||||||
|
<div
|
||||||
|
className="editable-cell-value-wrap"
|
||||||
|
style={{
|
||||||
|
paddingRight: 24,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return <td {...restProps} onClick={() => toggleEdit(title)}>{childNode}</td>;
|
||||||
|
};
|
||||||
|
const App = ({ count, tableData, setEditData }) => {
|
||||||
|
const [dataSource, setDataSource] = useState([]);
|
||||||
|
const defaultColumns = [
|
||||||
|
{
|
||||||
|
title: '预见期',
|
||||||
|
dataIndex: 'tm',
|
||||||
|
width: '30%',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '雨量',
|
||||||
|
dataIndex: 'drp',
|
||||||
|
width: '30%',
|
||||||
|
editable: true,
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '水位',
|
||||||
|
dataIndex: 'rz',
|
||||||
|
width: '20%',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
const handleAdd = () => {
|
||||||
|
const newArr = Array(count).fill(0).map((item, i) => ({
|
||||||
|
key: (i + 1).toString(),
|
||||||
|
tm: `${i + 1}小时`,
|
||||||
|
drp: '',
|
||||||
|
rz: '',
|
||||||
|
}))
|
||||||
|
|
||||||
console.log(timeArray);
|
setDataSource([...newArr]);
|
||||||
let result;
|
setEditData([...newArr])
|
||||||
|
};
|
||||||
|
const handleSave = (row) => {
|
||||||
|
const newData = [...dataSource];
|
||||||
|
const index = newData.findIndex((item) => row.key === item.key);
|
||||||
|
const item = newData[index];
|
||||||
|
newData.splice(index, 1, {
|
||||||
|
...item,
|
||||||
|
...row,
|
||||||
|
});
|
||||||
|
console.log('newData', newData);
|
||||||
|
setDataSource(newData);
|
||||||
|
setEditData(newData)
|
||||||
|
};
|
||||||
|
const components = {
|
||||||
|
body: {
|
||||||
|
row: EditableRow,
|
||||||
|
cell: EditableCell,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const columns = defaultColumns.map((col) => {
|
||||||
|
if (!col.editable) {
|
||||||
|
return col;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
...col,
|
||||||
|
onCell: (record) => ({
|
||||||
|
record,
|
||||||
|
editable: col.editable,
|
||||||
|
dataIndex: col.dataIndex,
|
||||||
|
title: col.title,
|
||||||
|
handleSave,
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
return result
|
useEffect(() => {
|
||||||
}
|
if (count) {
|
||||||
|
handleAdd(count)
|
||||||
|
}
|
||||||
|
}, [count])
|
||||||
|
useEffect(() => {
|
||||||
|
if (tableData.length > 0) {
|
||||||
|
setDataSource(tableData)
|
||||||
|
setEditData(tableData)
|
||||||
|
}
|
||||||
|
}, [tableData])
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<Table
|
||||||
|
components={components}
|
||||||
|
rowClassName={() => 'editable-row'}
|
||||||
|
bordered
|
||||||
|
dataSource={dataSource}
|
||||||
|
columns={columns}
|
||||||
|
scroll={{ x: 200, y: 'calc( 100vh - 400px )' }}
|
||||||
|
pagination={false}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
export default App;
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import * as echarts from 'echarts';
|
import * as echarts from 'echarts';
|
||||||
import moment from 'moment';
|
import moment, { min } from 'moment';
|
||||||
|
|
||||||
export default function drpOption(time = '', tabArr) {
|
export default function drpOption(time = '', tabArr) {
|
||||||
|
|
||||||
|
|
@ -1208,6 +1208,12 @@ export default function drpOption(time = '', tabArr) {
|
||||||
0
|
0
|
||||||
];
|
];
|
||||||
const h1DrpData = tabArr.find(item => item.tm == '1小时');
|
const h1DrpData = tabArr.find(item => item.tm == '1小时');
|
||||||
|
const minRz = Math.floor(Math.min(...tabArr.map(item => item.rz),...deadWaterData))
|
||||||
|
const maxRz = Math.ceil(Math.max(...tabArr.map(item => item.rz),...deadWaterData))
|
||||||
|
const mindrp = Math.floor(Math.min(...tabArr.map(item => item.drp),...deadRainData))
|
||||||
|
const maxdrp = Math.ceil(Math.max(...tabArr.map(item => item.drp),...deadRainData))
|
||||||
|
console.log(minRz,maxRz);
|
||||||
|
|
||||||
const upDeadWaterData = deadWaterData.map((item, i) => ({
|
const upDeadWaterData = deadWaterData.map((item, i) => ({
|
||||||
time: i + 1,
|
time: i + 1,
|
||||||
value: item
|
value: item
|
||||||
|
|
@ -1221,18 +1227,24 @@ export default function drpOption(time = '', tabArr) {
|
||||||
const ydata = JSON.parse(JSON.stringify(upDeadrainData));
|
const ydata = JSON.parse(JSON.stringify(upDeadrainData));
|
||||||
if (time == "1h") {
|
if (time == "1h") {
|
||||||
data.push(
|
data.push(
|
||||||
{ time: 601, value: h1DrpData?.rz, predict: true })
|
{ time: 601, value: h1DrpData?.rz, predict: true },
|
||||||
|
...Array(30).fill(0).map((item, i) => ({
|
||||||
|
time: i + 1 + 601,
|
||||||
|
value: '',
|
||||||
|
predict: true
|
||||||
|
}))
|
||||||
|
)
|
||||||
ydata.push({ time: 601, value: h1DrpData?.drp, predict: true })
|
ydata.push({ time: 601, value: h1DrpData?.drp, predict: true })
|
||||||
} else if (time == "3h") {
|
} else if (time == "3h") {
|
||||||
const wData = [
|
const wData = [
|
||||||
{ time: "12-24 16:00", value: 420, predict: true },
|
{ time: 603, value: 420, predict: true },
|
||||||
{ time: "12-24 17:00", value: 450, predict: true },
|
{ time: 604, value: 450, predict: true },
|
||||||
{ time: "12-24 18:00", value: 480, predict: true },
|
{ time: 605, value: 480, predict: true },
|
||||||
]
|
]
|
||||||
const rData = [
|
const rData = [
|
||||||
{ time: "12-24 16:00", value: tabArr.find(item => item.tm == '1小时')?.drp, predict: true },
|
{ time: 603, value: tabArr.find(item => item.tm == '1小时')?.drp, predict: true },
|
||||||
{ time: "12-24 17:00", value: tabArr.find(item => item.tm == '2小时')?.drp, predict: true },
|
{ time: 604, value: tabArr.find(item => item.tm == '2小时')?.drp, predict: true },
|
||||||
{ time: "12-24 18:00", value: tabArr.find(item => item.tm == '3小时')?.drp, predict: true },
|
{ time: 605, value: tabArr.find(item => item.tm == '3小时')?.drp, predict: true },
|
||||||
]
|
]
|
||||||
data.push(...wData)
|
data.push(...wData)
|
||||||
ydata.push(...rData)
|
ydata.push(...rData)
|
||||||
|
|
@ -1374,7 +1386,7 @@ export default function drpOption(time = '', tabArr) {
|
||||||
|
|
||||||
// 如果是折线图,此处需要追加实际数据的最后一组数据,如果是柱状图,则不需要。
|
// 如果是折线图,此处需要追加实际数据的最后一组数据,如果是柱状图,则不需要。
|
||||||
data2.unshift(splitLineData1);
|
data2.unshift(splitLineData1);
|
||||||
console.log("splitLineData",splitLineData);
|
// console.log("splitLineData",splitLineData);
|
||||||
|
|
||||||
data4.unshift(splitLineData2);
|
data4.unshift(splitLineData2);
|
||||||
|
|
||||||
|
|
@ -1407,6 +1419,8 @@ export default function drpOption(time = '', tabArr) {
|
||||||
{
|
{
|
||||||
type: "value",
|
type: "value",
|
||||||
name: '水位',
|
name: '水位',
|
||||||
|
min: minRz,
|
||||||
|
max:maxRz,
|
||||||
splitLine: {
|
splitLine: {
|
||||||
show: true,
|
show: true,
|
||||||
},
|
},
|
||||||
|
|
@ -1422,6 +1436,8 @@ export default function drpOption(time = '', tabArr) {
|
||||||
{
|
{
|
||||||
type: "value",
|
type: "value",
|
||||||
name: '雨量',
|
name: '雨量',
|
||||||
|
min: mindrp,
|
||||||
|
max:maxdrp,
|
||||||
splitLine: {
|
splitLine: {
|
||||||
show: true,
|
show: true,
|
||||||
},
|
},
|
||||||
|
|
@ -1493,14 +1509,14 @@ export default function drpOption(time = '', tabArr) {
|
||||||
// 下面半截绿色的线
|
// 下面半截绿色的线
|
||||||
{
|
{
|
||||||
xAxis: 599,
|
xAxis: 599,
|
||||||
yAxis: 0,
|
yAxis: minRz,
|
||||||
lineStyle: {
|
lineStyle: {
|
||||||
color: "rgba(46, 224, 85, 1)",
|
color: "rgba(46, 224, 85, 1)",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
xAxis: 599,
|
xAxis: 599,
|
||||||
yAxis: 89,
|
yAxis: splitLineData[1],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import ReactEcharts from 'echarts-for-react';
|
||||||
import './index.less'
|
import './index.less'
|
||||||
import drpOption from './drpOption.js'
|
import drpOption from './drpOption.js'
|
||||||
import { httppost2 } from '../../utils/request';
|
import { httppost2 } from '../../utils/request';
|
||||||
|
import TestApp from './createData.js'
|
||||||
|
|
||||||
const TableE = ({count,setEditData,tableData}) => {
|
const TableE = ({count,setEditData,tableData}) => {
|
||||||
const EditableCell = ({
|
const EditableCell = ({
|
||||||
|
|
@ -18,6 +19,7 @@ const TableE = ({count,setEditData,tableData}) => {
|
||||||
...restProps
|
...restProps
|
||||||
}) => {
|
}) => {
|
||||||
const inputNode = <InputNumber style={{ textAlign: "center", flex: 1 }} />;
|
const inputNode = <InputNumber style={{ textAlign: "center", flex: 1 }} />;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<td {...restProps}>
|
<td {...restProps}>
|
||||||
{editing ? (
|
{editing ? (
|
||||||
|
|
@ -39,7 +41,7 @@ const TableE = ({count,setEditData,tableData}) => {
|
||||||
const [editingKey, setEditingKey] = useState('');
|
const [editingKey, setEditingKey] = useState('');
|
||||||
const [details, setDetails] = useState([])
|
const [details, setDetails] = useState([])
|
||||||
const isEditing = (record) => {
|
const isEditing = (record) => {
|
||||||
return record.key === editingKey;
|
return editingKey.includes(record.key);
|
||||||
}
|
}
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
{
|
||||||
|
|
@ -135,8 +137,6 @@ const TableE = ({count,setEditData,tableData}) => {
|
||||||
...col,
|
...col,
|
||||||
onCell: (record) => ({
|
onCell: (record) => ({
|
||||||
record,
|
record,
|
||||||
inputType: col.dataIndex === 'age' ? 'number' :
|
|
||||||
col.dataIndex === 'sex' ? 'select' : "text",
|
|
||||||
dataIndex: col.dataIndex,
|
dataIndex: col.dataIndex,
|
||||||
title: col.title,
|
title: col.title,
|
||||||
editing: isEditing(record),
|
editing: isEditing(record),
|
||||||
|
|
@ -154,7 +154,7 @@ const TableE = ({count,setEditData,tableData}) => {
|
||||||
form1.setFieldsValue(newArr[0])
|
form1.setFieldsValue(newArr[0])
|
||||||
setDetails([...newArr]);
|
setDetails([...newArr]);
|
||||||
setEditData([...newArr]);
|
setEditData([...newArr]);
|
||||||
setEditingKey(newArr[0].key);
|
setEditingKey(newArr.map(item => item.key));
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
@ -167,7 +167,7 @@ const TableE = ({count,setEditData,tableData}) => {
|
||||||
<>
|
<>
|
||||||
<Form form={form1} component={false}>
|
<Form form={form1} component={false}>
|
||||||
<Table
|
<Table
|
||||||
rowKey="index"
|
rowKey="key"
|
||||||
components={{
|
components={{
|
||||||
body: {
|
body: {
|
||||||
// row: EditableRow,
|
// row: EditableRow,
|
||||||
|
|
@ -1409,7 +1409,7 @@ export default function TestLine() {
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
const newArr = res.data?.water_predicts.map(item => ({ drp: '', rz: item, tm: '1小时' }))
|
const newArr = res.data?.water_predicts.map(item => ({ drp: '', rz: item?.toFixed(2), tm: '1小时' }))
|
||||||
setTableData(newArr)
|
setTableData(newArr)
|
||||||
setTableForm({...tableForm,tabArr:newArr})
|
setTableForm({...tableForm,tabArr:newArr})
|
||||||
}
|
}
|
||||||
|
|
@ -1476,11 +1476,11 @@ export default function TestLine() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
setTableForm({ tabArr: editData, time: type.time })
|
|
||||||
const newTabl = editData.map(item => ({
|
const newTabl = editData.map(item => ({
|
||||||
...item,
|
...item,
|
||||||
rz: rowObj[item.tm],
|
rz: rowObj[item.tm],
|
||||||
}))
|
}))
|
||||||
|
setTableForm({ tabArr: newTabl, time: type.time })
|
||||||
setTableData(newTabl)
|
setTableData(newTabl)
|
||||||
|
|
||||||
} catch (errInfo) {
|
} catch (errInfo) {
|
||||||
|
|
@ -1508,7 +1508,8 @@ export default function TestLine() {
|
||||||
</div>
|
</div>
|
||||||
<div style={{ width: 430, marginRight: 30 }}>
|
<div style={{ width: 430, marginRight: 30 }}>
|
||||||
<Button type="primary" onClick={save} style={{float:'right',marginBottom:10}}>生成</Button>
|
<Button type="primary" onClick={save} style={{float:'right',marginBottom:10}}>生成</Button>
|
||||||
<TableE count={tmCount} setEditData={setEditData} tableData={tableData} />
|
{/* <TableE count={tmCount} setEditData={setEditData} tableData={tableData} /> */}
|
||||||
|
<TestApp count={tmCount} tableData={tableData} setEditData={setEditData}/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,9 @@ const ToolBar = ({ setSearchVal, setType, save, form1 }) => {
|
||||||
}
|
}
|
||||||
if ('code' in val) {
|
if ('code' in val) {
|
||||||
setSearchVal(o)
|
setSearchVal(o)
|
||||||
|
// setType({ time: "1h" })
|
||||||
|
// form.setFieldValue('time','1h')
|
||||||
|
// form1.resetFields()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
@ -84,6 +87,7 @@ const ToolBar = ({ setSearchVal, setType, save, form1 }) => {
|
||||||
}
|
}
|
||||||
form.setFieldsValue(params)
|
form.setFieldsValue(params)
|
||||||
setSearchVal(params)
|
setSearchVal(params)
|
||||||
|
setType({ time: "1h" })
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue