import { Card, Typography, Table, Checkbox, Button, Form, Input } from 'antd'
import React, { useState, useEffect } from 'react'
const { Title } = Typography
import {
useQueryVehicleAlarmConfig,
useSavingVehicleAlarm,
} from '@/query/settings'
export default function Index() {
const { data, refetch } = useQueryVehicleAlarmConfig()
const [editable, setEdit] = useState(false) // 控制是否可编辑
const [localData, setLocalData] = useState(null) // 用 state 保存可变数据
const [form] = Form.useForm()
const [state, setState] = React.useState([])
const [
violationParkingCountThreshold,
violationParkingCountTimeline,
overSpeedCountThreshold,
overSpeedCountTimeline,
detainTimeThreshold,
detainCountThreshold,
occupationCountThreshold,
alarmCountLevel_1,
alarmCountLevel_2,
alarmCountLevel_3,
alarmCountThreshold_1,
alarmCountThreshold_2,
alarmCountThreshold_3,
] = state
// 初始化 localData
useEffect(() => {
if (data?.rules.length) {
const date = data?.rules.map(item => ({
id: item.id,
name: item.name,
}))
console.log(date, 'data')
setState(date)
}
if (data?.configs) {
setLocalData(data.configs)
}
}, [data])
const handleCheckboxChange = (item, index) => e => {
if (!localData) return
const newData = [...localData]
newData[index].sysVehicleAlarmSecurityList = newData[
index
].sysVehicleAlarmSecurityList.map(alarm =>
alarm.id === item.id ? { ...alarm, status: e.target.checked } : alarm
)
setLocalData(newData) // 更新 state,触发重新渲染
}
const columns = [
{
title: '车辆等级',
dataIndex: 'vehicleLevelName',
key: 'vehicleLevelName',
width: 120,
align: 'center',
},
{
title: '告警类型',
dataIndex: 'sysVehicleAlarmSecurityList',
key: 'sysVehicleAlarmSecurityList',
align: 'center',
render: (list, record, index) => {
return (
<div
style={{
display: 'flex',
alignItems: 'center',
gap: 10,
justifyContent: 'center',
}}
>
{list?.map(item => (
<div key={item.id}>
<Checkbox
checked={item.status}
disabled={!editable}
onChange={handleCheckboxChange(item, index)}
>
{item.name || '未知类型'}
</Checkbox>
</div>
))}
</div>
)
},
},
]
return (
<Card style={{ padding: '0 30px' }}>
<Title level={4}>车辆等级告警</Title>
<Table
bordered
columns={columns}
dataSource={localData}
rowKey="id"
pagination={false}
/>
<Title level={4} style={{ marginTop: 30 }}>
黑名单规则
</Title>
<Form
form={form}
layout="vertical"
labelCol={{ span: 8 }}
wrapperCol={{ span: 16 }}
onFinish={() => {}}
>
<Form.Item
label=""
name="violationParkingMinutes"
rules={[{ required: true, message: '请输入分钟数' }]}
>
<div
style={{
display: 'flex',
alignItems: 'center',
gap: 8,
whiteSpace: 'nowrap',
}}
>
<span style={{ flexShrink: 0 }}>违停</span>
<Input
disabled={!editable}
size="large"
defaultValue={violationParkingCountTimeline?.name || ''}
style={{ width: 100, textAlign: 'center' }}
/>
<span>分钟以内的所有违停只算1次</span>
</div>
</Form.Item>
<Form.Item
label=""
name="overSpeedMinutes"
rules={[{ required: true, message: '请输入分钟数' }]}
>
<div
style={{
display: 'flex',
alignItems: 'center',
gap: 8,
whiteSpace: 'nowrap',
}}
>
<span style={{ flexShrink: 0 }}>超速</span>
<Input
disabled={!editable}
defaultValue={overSpeedCountTimeline?.name || ''}
size="large"
style={{ width: 100, textAlign: 'center' }}
/>
<span>分钟以内的所有超速只算1次</span>
</div>
</Form.Item>
<Form.Item
label=""
name="level1Count"
rules={[{ required: true, message: '请输入次数' }]}
>
<div
style={{
display: 'flex',
alignItems: 'center',
gap: 8,
whiteSpace: 'nowrap',
}}
>
<span style={{ flexShrink: 0 }}>黑名单Level-1</span>
<span>每月违规【超速、违停、滞留】达到</span>
<Input
disabled={!editable}
defaultValue={alarmCountThreshold_1?.name || ''}
size="large"
style={{ width: 100, textAlign: 'center' }}
/>
<span>次进入黑名单,限制入园</span>
<Input
disabled={!editable}
defaultValue={alarmCountLevel_1?.name || ''}
size="large"
style={{ width: 100, textAlign: 'center' }}
/>
<span>天</span>
</div>
</Form.Item>
<Form.Item
label=""
name="level2Count"
rules={[{ required: true, message: '请输入次数' }]}
>
<div
style={{
display: 'flex',
alignItems: 'center',
gap: 8,
whiteSpace: 'nowrap',
}}
>
<span style={{ flexShrink: 0 }}>黑名单Level-2</span>
每月违规【超速、违停、滞留】达到
<Input
disabled={!editable}
size="large"
defaultValue={alarmCountThreshold_2?.name || ''}
style={{ width: 100, textAlign: 'center' }}
/>
<span>次进入黑名单,限制入园</span>
<Input
disabled={!editable}
defaultValue={alarmCountLevel_2?.name || ''}
size="large"
style={{ width: 100, textAlign: 'center' }}
/>
<span>天</span>
</div>
</Form.Item>
<Form.Item
label=""
name="level3Count"
rules={[{ required: true, message: '请输入次数' }]}
>
<div
style={{
display: 'flex',
alignItems: 'center',
gap: 8,
whiteSpace: 'nowrap',
}}
>
<span style={{ flexShrink: 0 }}>黑名单Level-3</span>
每月违规【超速、违停、滞留】达到
<Input
disabled={!editable}
size="large"
defaultValue={alarmCountThreshold_3?.name || ''}
style={{ width: 100, textAlign: 'center' }}
/>
<span>次及以上进入黑名单,限制入园</span>
<Input
disabled={!editable}
size="large"
defaultValue={alarmCountLevel_3?.name || ''}
style={{ width: 100, textAlign: 'center' }}
/>
<span>天</span>
</div>
</Form.Item>
<div
style={{
display: 'flex',
justifyContent: 'center',
}}
>
<Button
type="primary"
style={{
marginRight: 20,
}}
onClick={() => {
setEdit(!editable)
}}
>
编辑
</Button>
<Button
type="primary"
style={{
marginRight: 20,
}}
onClick={() => {
// 保存逻辑
console.log('保存数据:', data)
// 可以在这里调用保存接口
}}
>
保存
</Button>
<Button>取消</Button>
</div>
</Form>
</Card>
)
}
默认赋值,同时还能正常修改
最新发布