修复页面结构,bug
parent
72f65bc850
commit
54b2201fd2
|
|
@ -9,7 +9,9 @@ module.exports = {
|
|||
// 应用后端分支名称,部署上线需要
|
||||
javaGitBranch: "<branch-name>",
|
||||
// 接口服务地址
|
||||
API_HOST: "",
|
||||
// API_HOST: "https://gbs-gateway.qhdsafety.com",
|
||||
API_HOST: "http://192.168.10.45:80",
|
||||
// API_HOST: "http://192.168.20.100:30140",
|
||||
},
|
||||
production: {
|
||||
// 应用后端分支名称,部署上线需要
|
||||
|
|
|
|||
|
|
@ -3,4 +3,3 @@ import { declareRequest } from "@cqsjjb/jjb-dva-runtime";
|
|||
export const alarmAssignList = declareRequest("alarmDisposeLoading", "Post > @/iotalarm/alarmDispose/assignList");
|
||||
export const alarmAssign = declareRequest("alarmDisposeLoading", "Post > @/iotalarm/alarmDispose/assign");
|
||||
export const alarmBatchAssign = declareRequest("alarmDisposeLoading", "Post > @/iotalarm/alarmDispose/batchAssign");
|
||||
export const alarmRecordList = declareRequest("alarmRecordLoading", "Post > @/iotalarm/alarmRecord/list");
|
||||
|
|
|
|||
|
|
@ -1,11 +0,0 @@
|
|||
export {};
|
||||
|
||||
// export const riskList = declareRequest(
|
||||
// "loading",
|
||||
// "Post > @/xxx",
|
||||
// "dataSource: [] | res.data || [] & total: 0 | res.totalCount || 0 & pageIndex: 1 | res.pageIndex || 1 & pageSize: 10 | res.pageSize || 10",
|
||||
// );
|
||||
// export const riskDelete = declareRequest(
|
||||
// "loading",
|
||||
// "Delete > @/xxx/{id}",
|
||||
// );
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
export * from "./AlarmDispose";
|
||||
export * from "./AlarmInfo";
|
||||
export * from "./AlarmRecord";
|
||||
export * from "./DeviceRegion";
|
||||
export * from "./SensorDevice";
|
||||
export * from "./SensorType";
|
||||
|
|
@ -1,39 +1,26 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Form, message, Space } from "antd";
|
||||
import { useEffect, useState } from "react";
|
||||
import { useState } from "react";
|
||||
import Page from "zy-react-library/components/Page";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import AssignModal from "~/components/AlarmDispose/AssignModal";
|
||||
import { ALARM_LEVEL_OPTIONS, ALARM_SOURCE_OPTIONS, ALARM_STATUS_OPTIONS, ALARM_TYPE_OPTIONS } from "~/enumerate/constant";
|
||||
import { NS_ALARMDISPOSE, NS_SENSORDEVICE } from "~/enumerate/namespace";
|
||||
import AlarmRecordView from "~/components/AlarmRecord/View";
|
||||
import AssignModal from "./components/AssignModal";
|
||||
|
||||
function AssignList(props) {
|
||||
const [form] = Form.useForm();
|
||||
const [modalOpen, setModalOpen] = useState(false);
|
||||
const [detailOpen, setDetailOpen] = useState(false);
|
||||
const [detailId, setDetailId] = useState("");
|
||||
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
|
||||
const [currentAlarmId, setCurrentAlarmId] = useState(null);
|
||||
const [isBatch, setIsBatch] = useState(false);
|
||||
const [sensorNameMap, setSensorNameMap] = useState({});
|
||||
|
||||
const { tableProps, getData } = useTable(props["alarmAssignList"], { form });
|
||||
|
||||
useEffect(() => {
|
||||
props.sensorDeviceList({ pageIndex: 1, pageSize: 500 }).then((res) => {
|
||||
if (!res?.success) {
|
||||
return;
|
||||
}
|
||||
setSensorNameMap(
|
||||
Object.fromEntries((res.data || []).map(item => [item.sensorCode, item.sensorName])),
|
||||
);
|
||||
});
|
||||
}, [props.sensorDeviceList]);
|
||||
|
||||
const assignPermission = `${props.type}-iotalarm-alarm-assign`;
|
||||
const pageType = props.type || "fgs";
|
||||
const assignPermission = `${pageType}-iotalarm-alarm-assign`;
|
||||
|
||||
const handleBatchAssign = () => {
|
||||
if (selectedRowKeys.length === 0) {
|
||||
|
|
@ -56,10 +43,13 @@ function AssignList(props) {
|
|||
onChange: setSelectedRowKeys,
|
||||
};
|
||||
|
||||
const dataSource = (tableProps.dataSource || []).map(item => ({
|
||||
...item,
|
||||
sensorName: sensorNameMap[item.sensorCode] || "-",
|
||||
}));
|
||||
const handleSearch = (values) => {
|
||||
getData({
|
||||
sensorName: values.sensorName,
|
||||
alarmTimeStart: values.alarmTime?.[0]?.format?.("YYYY-MM-DD HH:mm:ss"),
|
||||
alarmTimeEnd: values.alarmTime?.[1]?.format?.("YYYY-MM-DD HH:mm:ss"),
|
||||
});
|
||||
};
|
||||
|
||||
const renderCurrentValue = (_, record) => {
|
||||
if (record.currentValue == null || record.currentValue === "") {
|
||||
|
|
@ -74,28 +64,10 @@ function AssignList(props) {
|
|||
<Page isShowAllAction={false}>
|
||||
<Search
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
onFinish={handleSearch}
|
||||
options={[
|
||||
{ name: "alarmNo", label: "报警编号" },
|
||||
{ name: "sensorCode", label: "传感器编码" },
|
||||
{
|
||||
name: "alarmSource",
|
||||
label: "报警来源",
|
||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||
items: ALARM_SOURCE_OPTIONS,
|
||||
},
|
||||
{
|
||||
name: "alarmLevel",
|
||||
label: "报警级别",
|
||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||
items: ALARM_LEVEL_OPTIONS,
|
||||
},
|
||||
{
|
||||
name: "alarmType",
|
||||
label: "报警类型",
|
||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||
items: ALARM_TYPE_OPTIONS,
|
||||
},
|
||||
{ name: "sensorName", label: "传感器名称" },
|
||||
{ name: "alarmTime", label: "报警时间", render: FORM_ITEM_RENDER_ENUM.DATE_RANGE },
|
||||
]}
|
||||
/>
|
||||
<Table
|
||||
|
|
@ -105,55 +77,53 @@ function AssignList(props) {
|
|||
<Space>
|
||||
{props.permission(assignPermission) && (
|
||||
<Button type="primary" onClick={handleBatchAssign}>
|
||||
批量分配
|
||||
批量处置
|
||||
</Button>
|
||||
)}
|
||||
</Space>
|
||||
)}
|
||||
columns={[
|
||||
{ title: "报警编号", dataIndex: "alarmNo" },
|
||||
{
|
||||
title: "报警来源",
|
||||
dataIndex: "alarmSource",
|
||||
render: value => getLabelName({ status: value, list: ALARM_SOURCE_OPTIONS }) || value || "-",
|
||||
},
|
||||
{ title: "传感器编码", dataIndex: "sensorCode" },
|
||||
{ title: "传感器名称", dataIndex: "sensorName", ellipsis: true },
|
||||
{
|
||||
title: "报警级别",
|
||||
dataIndex: "alarmLevel",
|
||||
render: value => getLabelName({ status: value, list: ALARM_LEVEL_OPTIONS }) || value || "-",
|
||||
},
|
||||
{
|
||||
title: "报警类型",
|
||||
dataIndex: "alarmType",
|
||||
render: value => getLabelName({ status: value, list: ALARM_TYPE_OPTIONS }) || value || "-",
|
||||
},
|
||||
{ title: "报警描述", dataIndex: "alarmDesc", ellipsis: true },
|
||||
{
|
||||
title: "报警状态",
|
||||
dataIndex: "status",
|
||||
render: value => getLabelName({ status: value, list: ALARM_STATUS_OPTIONS }) || value || "-",
|
||||
},
|
||||
{ title: "报警时间", dataIndex: "alarmTime", width: 180 },
|
||||
{ title: "报警描述", dataIndex: "alarmDesc", ellipsis: true },
|
||||
{ title: "告警值", render: renderCurrentValue },
|
||||
{
|
||||
title: "操作",
|
||||
width: 120,
|
||||
width: 180,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
{props.permission(assignPermission) && (
|
||||
<Button type="link" onClick={() => handleSingleAssign(record)}>
|
||||
分配
|
||||
处置分配
|
||||
</Button>
|
||||
)}
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
setDetailId(record.id);
|
||||
setDetailOpen(true);
|
||||
}}
|
||||
>
|
||||
查看
|
||||
</Button>
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
dataSource={dataSource}
|
||||
/>
|
||||
{detailOpen && (
|
||||
<AlarmRecordView
|
||||
open={detailOpen}
|
||||
currentId={detailId}
|
||||
alarmRecordInfo={props.alarmRecordInfo}
|
||||
onCancel={() => {
|
||||
setDetailOpen(false);
|
||||
setDetailId("");
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
{modalOpen && (
|
||||
<AssignModal
|
||||
open={modalOpen}
|
||||
|
|
@ -175,4 +145,4 @@ function AssignList(props) {
|
|||
);
|
||||
}
|
||||
|
||||
export default Connect([NS_ALARMDISPOSE, NS_SENSORDEVICE], true)(Permission(AssignList));
|
||||
export default AssignList;
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
export default function AlarmAssign(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
export { default as AssignList } from "./AssignList";
|
||||
export { default as AssignModal } from "./AssignModal";
|
||||
|
|
@ -1,97 +0,0 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Form } from "antd";
|
||||
import { useEffect, useState } from "react";
|
||||
import Page from "zy-react-library/components/Page";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { ALARM_STATUS_OPTIONS } from "~/enumerate/constant";
|
||||
import { NS_DCSALARMINFO, NS_SENSORDEVICE } from "~/enumerate/namespace";
|
||||
|
||||
function DcsList(props) {
|
||||
const [form] = Form.useForm();
|
||||
const [sensorNameMap, setSensorNameMap] = useState({});
|
||||
const { tableProps, getData } = useTable(props["dcsAlarmInfoList"], {
|
||||
form,
|
||||
defaultParams: { alarmSource: "DCS" },
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
props.sensorDeviceList({ pageIndex: 1, pageSize: 500 }).then((res) => {
|
||||
if (!res?.success) {
|
||||
return;
|
||||
}
|
||||
setSensorNameMap(
|
||||
Object.fromEntries((res.data || []).map(item => [item.sensorCode, item.sensorName])),
|
||||
);
|
||||
});
|
||||
}, [props.sensorDeviceList]);
|
||||
|
||||
const dataSource = (tableProps.dataSource || []).map(item => ({
|
||||
...item,
|
||||
sensorName: sensorNameMap[item.sensorCode] || "-",
|
||||
}));
|
||||
|
||||
const renderCurrentValue = (_, record) => {
|
||||
if (record.currentValue == null || record.currentValue === "") {
|
||||
return "-";
|
||||
}
|
||||
const suffix = record.compareFlag === "UP" ? " 上升" : record.compareFlag === "DOWN" ? " 下降" : "";
|
||||
const unit = record.unitName ? ` ${record.unitName}` : "";
|
||||
return `${record.currentValue}${unit}${suffix}`;
|
||||
};
|
||||
|
||||
return (
|
||||
<Page isShowAllAction={false}>
|
||||
<Search
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
options={[
|
||||
{ name: "alarmNo", label: "报警编号" },
|
||||
{ name: "sensorCode", label: "传感器编码" },
|
||||
{
|
||||
name: "status",
|
||||
label: "报警状态",
|
||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||
items: ALARM_STATUS_OPTIONS,
|
||||
},
|
||||
{
|
||||
name: "alarmTimeStart",
|
||||
label: "开始时间",
|
||||
render: FORM_ITEM_RENDER_ENUM.DATE,
|
||||
},
|
||||
{
|
||||
name: "alarmTimeEnd",
|
||||
label: "结束时间",
|
||||
render: FORM_ITEM_RENDER_ENUM.DATE,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
<Table
|
||||
rowKey="id"
|
||||
columns={[
|
||||
{ title: "报警编号", dataIndex: "alarmNo" },
|
||||
{ title: "传感器编码", dataIndex: "sensorCode" },
|
||||
{ title: "传感器名称", dataIndex: "sensorName" },
|
||||
{ title: "报警时间", dataIndex: "alarmTime" },
|
||||
{ title: "报警级别", dataIndex: "alarmLevel" },
|
||||
{ title: "报警描述", dataIndex: "alarmDesc", ellipsis: true },
|
||||
{ title: "告警值", render: renderCurrentValue },
|
||||
{
|
||||
title: "报警状态",
|
||||
dataIndex: "status",
|
||||
render: value => getLabelName({ status: value, list: ALARM_STATUS_OPTIONS }) || value || "-",
|
||||
},
|
||||
{ title: "设备来源", dataIndex: "deviceSourceDesc" },
|
||||
]}
|
||||
{...tableProps}
|
||||
dataSource={dataSource}
|
||||
/>
|
||||
</Page>
|
||||
);
|
||||
}
|
||||
|
||||
export default Connect([NS_DCSALARMINFO, NS_SENSORDEVICE], true)(Permission(DcsList));
|
||||
|
|
@ -1,97 +0,0 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Form } from "antd";
|
||||
import { useEffect, useState } from "react";
|
||||
import Page from "zy-react-library/components/Page";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { ALARM_STATUS_OPTIONS } from "~/enumerate/constant";
|
||||
import { NS_SENSORDEVICE, NS_THRESHOLDALARMINFO } from "~/enumerate/namespace";
|
||||
|
||||
function ThresholdList(props) {
|
||||
const [form] = Form.useForm();
|
||||
const [sensorNameMap, setSensorNameMap] = useState({});
|
||||
const { tableProps, getData } = useTable(props["thresholdAlarmInfoList"], {
|
||||
form,
|
||||
defaultParams: { alarmSource: "THRESHOLD" },
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
props.sensorDeviceList({ pageIndex: 1, pageSize: 500 }).then((res) => {
|
||||
if (!res?.success) {
|
||||
return;
|
||||
}
|
||||
setSensorNameMap(
|
||||
Object.fromEntries((res.data || []).map(item => [item.sensorCode, item.sensorName])),
|
||||
);
|
||||
});
|
||||
}, [props.sensorDeviceList]);
|
||||
|
||||
const dataSource = (tableProps.dataSource || []).map(item => ({
|
||||
...item,
|
||||
sensorName: sensorNameMap[item.sensorCode] || "-",
|
||||
}));
|
||||
|
||||
const renderCurrentValue = (_, record) => {
|
||||
if (record.currentValue == null || record.currentValue === "") {
|
||||
return "-";
|
||||
}
|
||||
const suffix = record.compareFlag === "UP" ? " 上升" : record.compareFlag === "DOWN" ? " 下降" : "";
|
||||
const unit = record.unitName ? ` ${record.unitName}` : "";
|
||||
return `${record.currentValue}${unit}${suffix}`;
|
||||
};
|
||||
|
||||
return (
|
||||
<Page isShowAllAction={false}>
|
||||
<Search
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
options={[
|
||||
{ name: "alarmNo", label: "报警编号" },
|
||||
{ name: "sensorCode", label: "传感器编码" },
|
||||
{
|
||||
name: "status",
|
||||
label: "报警状态",
|
||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||
items: ALARM_STATUS_OPTIONS,
|
||||
},
|
||||
{
|
||||
name: "alarmTimeStart",
|
||||
label: "开始时间",
|
||||
render: FORM_ITEM_RENDER_ENUM.DATE,
|
||||
},
|
||||
{
|
||||
name: "alarmTimeEnd",
|
||||
label: "结束时间",
|
||||
render: FORM_ITEM_RENDER_ENUM.DATE,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
<Table
|
||||
rowKey="id"
|
||||
columns={[
|
||||
{ title: "报警编号", dataIndex: "alarmNo" },
|
||||
{ title: "传感器编码", dataIndex: "sensorCode" },
|
||||
{ title: "传感器名称", dataIndex: "sensorName" },
|
||||
{ title: "报警时间", dataIndex: "alarmTime" },
|
||||
{ title: "报警级别", dataIndex: "alarmLevel" },
|
||||
{ title: "报警描述", dataIndex: "alarmDesc", ellipsis: true },
|
||||
{ title: "告警值", render: renderCurrentValue },
|
||||
{
|
||||
title: "报警状态",
|
||||
dataIndex: "status",
|
||||
render: value => getLabelName({ status: value, list: ALARM_STATUS_OPTIONS }) || value || "-",
|
||||
},
|
||||
{ title: "设备来源", dataIndex: "deviceSourceDesc" },
|
||||
]}
|
||||
{...tableProps}
|
||||
dataSource={dataSource}
|
||||
/>
|
||||
</Page>
|
||||
);
|
||||
}
|
||||
|
||||
export default Connect([NS_THRESHOLDALARMINFO, NS_SENSORDEVICE], true)(Permission(ThresholdList));
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
export { default as DcsList } from "./DcsList";
|
||||
export { default as ThresholdList } from "./ThresholdList";
|
||||
|
|
@ -1,44 +1,35 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Form, Space } from "antd";
|
||||
import { useEffect, useState } from "react";
|
||||
import { useState } from "react";
|
||||
import Page from "zy-react-library/components/Page";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import DetailModal from "~/components/AlarmRecord/DetailModal";
|
||||
import { ALARM_SOURCE_OPTIONS, ALARM_STATUS_OPTIONS } from "~/enumerate/constant";
|
||||
import { NS_ALARMRECORD, NS_SENSORDEVICE } from "~/enumerate/namespace";
|
||||
import { ALARM_STATUS_OPTIONS } from "~/enumerate/constant";
|
||||
import AlarmRecordView from "../View";
|
||||
|
||||
function AlarmRecordList(props) {
|
||||
const [form] = Form.useForm();
|
||||
const [detailOpen, setDetailOpen] = useState(false);
|
||||
const [currentId, setCurrentId] = useState("");
|
||||
const [sensorNameMap, setSensorNameMap] = useState({});
|
||||
const { tableProps, getData } = useTable(props["alarmRecordList"], { form });
|
||||
|
||||
useEffect(() => {
|
||||
props.sensorDeviceList({ pageIndex: 1, pageSize: 500 }).then((res) => {
|
||||
if (!res?.success) {
|
||||
return;
|
||||
}
|
||||
setSensorNameMap(
|
||||
Object.fromEntries((res.data || []).map(item => [item.sensorCode, item.sensorName])),
|
||||
);
|
||||
});
|
||||
}, [props.sensorDeviceList]);
|
||||
|
||||
const handleViewDetail = (record) => {
|
||||
setCurrentId(record.id);
|
||||
setDetailOpen(true);
|
||||
};
|
||||
|
||||
const dataSource = (tableProps.dataSource || []).map(item => ({
|
||||
...item,
|
||||
sensorName: sensorNameMap[item.sensorCode] || "-",
|
||||
}));
|
||||
const handleSearch = (values) => {
|
||||
getData({
|
||||
sensorName: values.sensorName,
|
||||
disposeUserName: values.disposeUserName,
|
||||
status: values.status,
|
||||
alarmTimeStart: values.alarmTime?.[0]?.format?.("YYYY-MM-DD HH:mm:ss"),
|
||||
alarmTimeEnd: values.alarmTime?.[1]?.format?.("YYYY-MM-DD HH:mm:ss"),
|
||||
disposeTimeStart: values.disposeTime?.[0]?.format?.("YYYY-MM-DD HH:mm:ss"),
|
||||
disposeTimeEnd: values.disposeTime?.[1]?.format?.("YYYY-MM-DD HH:mm:ss"),
|
||||
});
|
||||
};
|
||||
|
||||
const renderCurrentValue = (_, record) => {
|
||||
if (record.currentValue == null || record.currentValue === "") {
|
||||
|
|
@ -49,47 +40,45 @@ function AlarmRecordList(props) {
|
|||
return `${record.currentValue}${unit}${suffix}`;
|
||||
};
|
||||
|
||||
const renderAlarmStatus = (_, record) => {
|
||||
if (record.status === 30) {
|
||||
return "已消警";
|
||||
}
|
||||
if (record.status === 40) {
|
||||
return "误报";
|
||||
}
|
||||
return "报警中";
|
||||
};
|
||||
|
||||
return (
|
||||
<Page isShowAllAction={false}>
|
||||
<Search
|
||||
form={form}
|
||||
onFinish={getData}
|
||||
onFinish={handleSearch}
|
||||
options={[
|
||||
{ name: "alarmNo", label: "报警编号" },
|
||||
{ name: "sensorCode", label: "传感器编码" },
|
||||
{
|
||||
name: "alarmSource",
|
||||
label: "报警来源",
|
||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||
items: ALARM_SOURCE_OPTIONS,
|
||||
},
|
||||
{ name: "sensorName", label: "传感器名称" },
|
||||
{ name: "disposeUserName", label: "处置人" },
|
||||
{
|
||||
name: "status",
|
||||
label: "状态",
|
||||
label: "报警状态",
|
||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||
items: ALARM_STATUS_OPTIONS,
|
||||
},
|
||||
{
|
||||
name: "alarmTimeStart",
|
||||
label: "开始时间",
|
||||
render: FORM_ITEM_RENDER_ENUM.DATE,
|
||||
name: "alarmTime",
|
||||
label: "报警时间",
|
||||
render: FORM_ITEM_RENDER_ENUM.DATE_RANGE,
|
||||
},
|
||||
{
|
||||
name: "alarmTimeEnd",
|
||||
label: "结束时间",
|
||||
render: FORM_ITEM_RENDER_ENUM.DATE,
|
||||
name: "disposeTime",
|
||||
label: "处置时间",
|
||||
render: FORM_ITEM_RENDER_ENUM.DATE_RANGE,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
<Table
|
||||
rowKey="id"
|
||||
columns={[
|
||||
{ title: "报警编号", dataIndex: "alarmNo" },
|
||||
{
|
||||
title: "报警来源",
|
||||
dataIndex: "alarmSource",
|
||||
render: value => getLabelName({ status: value, list: ALARM_SOURCE_OPTIONS }) || value || "-",
|
||||
},
|
||||
{ title: "传感器编码", dataIndex: "sensorCode" },
|
||||
{ title: "传感器名称", dataIndex: "sensorName" },
|
||||
{ title: "报警时间", dataIndex: "alarmTime" },
|
||||
|
|
@ -97,17 +86,15 @@ function AlarmRecordList(props) {
|
|||
{ title: "告警值", render: renderCurrentValue },
|
||||
{ title: "报警级别", dataIndex: "alarmLevel" },
|
||||
{ title: "报警类型", dataIndex: "alarmType" },
|
||||
{
|
||||
title: "状态",
|
||||
dataIndex: "status",
|
||||
render: value => getLabelName({ status: value, list: ALARM_STATUS_OPTIONS }) || value || "-",
|
||||
},
|
||||
{
|
||||
title: "处置人",
|
||||
render: (_, record) => record.disposeUserName || record.disposeUserId || "-",
|
||||
dataIndex: "disposeUserName",
|
||||
},
|
||||
{ title: "处置时间", dataIndex: "disposeTime" },
|
||||
{ title: "设备来源描述", dataIndex: "deviceSourceDesc", ellipsis: true },
|
||||
{
|
||||
title: "报警状态",
|
||||
render: renderAlarmStatus,
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
width: 100,
|
||||
|
|
@ -117,21 +104,19 @@ function AlarmRecordList(props) {
|
|||
type="link"
|
||||
onClick={() => handleViewDetail(record)}
|
||||
>
|
||||
详情
|
||||
查看
|
||||
</Button>
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
dataSource={dataSource}
|
||||
/>
|
||||
{detailOpen && (
|
||||
<DetailModal
|
||||
<AlarmRecordView
|
||||
open={detailOpen}
|
||||
currentId={currentId}
|
||||
alarmRecordInfo={props.alarmRecordInfo}
|
||||
sensorNameMap={sensorNameMap}
|
||||
onCancel={() => {
|
||||
setDetailOpen(false);
|
||||
setCurrentId("");
|
||||
|
|
@ -142,4 +127,4 @@ function AlarmRecordList(props) {
|
|||
);
|
||||
}
|
||||
|
||||
export default Connect([NS_ALARMRECORD, NS_SENSORDEVICE], true)(Permission(AlarmRecordList));
|
||||
export default AlarmRecordList;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ function DetailModal(props) {
|
|||
<Modal
|
||||
destroyOnClose
|
||||
open={props.open}
|
||||
title="报警详情"
|
||||
title="查看"
|
||||
onCancel={props.onCancel}
|
||||
footer={null}
|
||||
width={720}
|
||||
|
|
@ -42,9 +42,7 @@ function DetailModal(props) {
|
|||
{getLabelName({ status: detail.alarmSource, list: ALARM_SOURCE_OPTIONS }) || detail.alarmSource || "-"}
|
||||
</Descriptions.Item>
|
||||
<Descriptions.Item label="传感器编码">{detail.sensorCode || "-"}</Descriptions.Item>
|
||||
<Descriptions.Item label="传感器名称">
|
||||
{props.sensorNameMap?.[detail.sensorCode] || detail.sensorName || "-"}
|
||||
</Descriptions.Item>
|
||||
<Descriptions.Item label="传感器名称">{detail.sensorName || "-"}</Descriptions.Item>
|
||||
<Descriptions.Item label="报警时间">{detail.alarmTime || "-"}</Descriptions.Item>
|
||||
<Descriptions.Item label="报警级别">{detail.alarmLevel || "-"}</Descriptions.Item>
|
||||
<Descriptions.Item label="报警类型">{detail.alarmType || "-"}</Descriptions.Item>
|
||||
|
|
@ -1,3 +1,3 @@
|
|||
import AlarmRecordList from "~/components/AlarmRecord/List";
|
||||
|
||||
export default AlarmRecordList;
|
||||
export default function AlarmRecord(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,90 @@
|
|||
import { Form } from "antd";
|
||||
import { useState } from "react";
|
||||
import Page from "zy-react-library/components/Page";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import AlarmRecordView from "~/components/AlarmRecord/View";
|
||||
|
||||
function DcsList(props) {
|
||||
const [form] = Form.useForm();
|
||||
const [detailOpen, setDetailOpen] = useState(false);
|
||||
const [currentId, setCurrentId] = useState("");
|
||||
const { tableProps, getData } = useTable(props["dcsAlarmInfoList"], {
|
||||
form,
|
||||
defaultParams: { alarmSource: "DCS" },
|
||||
});
|
||||
|
||||
const handleSearch = (values) => {
|
||||
getData({
|
||||
sensorName: values.sensorName,
|
||||
alarmTimeStart: values.alarmTime?.[0]?.format?.("YYYY-MM-DD HH:mm:ss"),
|
||||
alarmTimeEnd: values.alarmTime?.[1]?.format?.("YYYY-MM-DD HH:mm:ss"),
|
||||
});
|
||||
};
|
||||
|
||||
const renderCurrentValue = (_, record) => {
|
||||
if (record.currentValue == null || record.currentValue === "") {
|
||||
return "-";
|
||||
}
|
||||
const suffix = record.compareFlag === "UP" ? " 上升" : record.compareFlag === "DOWN" ? " 下降" : "";
|
||||
const unit = record.unitName ? ` ${record.unitName}` : "";
|
||||
return `${record.currentValue}${unit}${suffix}`;
|
||||
};
|
||||
|
||||
return (
|
||||
<Page isShowAllAction={false}>
|
||||
<Search
|
||||
form={form}
|
||||
onFinish={handleSearch}
|
||||
options={[
|
||||
{ name: "sensorName", label: "传感器名称" },
|
||||
{
|
||||
name: "alarmTime",
|
||||
label: "报警时间",
|
||||
render: FORM_ITEM_RENDER_ENUM.DATE_RANGE,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
<Table
|
||||
rowKey="id"
|
||||
columns={[
|
||||
{ title: "传感器编码", dataIndex: "sensorCode" },
|
||||
{ title: "传感器名称", dataIndex: "sensorName" },
|
||||
{ title: "报警时间", dataIndex: "alarmTime" },
|
||||
{ title: "报警描述", dataIndex: "alarmDesc", ellipsis: true },
|
||||
{ title: "告警值", render: renderCurrentValue },
|
||||
{
|
||||
title: "操作",
|
||||
width: 100,
|
||||
render: (_, record) => (
|
||||
<a
|
||||
onClick={() => {
|
||||
setCurrentId(record.id);
|
||||
setDetailOpen(true);
|
||||
}}
|
||||
>
|
||||
查看
|
||||
</a>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
{detailOpen && (
|
||||
<AlarmRecordView
|
||||
open={detailOpen}
|
||||
currentId={currentId}
|
||||
alarmRecordInfo={props.alarmRecordInfo}
|
||||
onCancel={() => {
|
||||
setDetailOpen(false);
|
||||
setCurrentId("");
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
</Page>
|
||||
);
|
||||
}
|
||||
|
||||
export default DcsList;
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
export default function DcsAlarmInfo(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
|
@ -48,6 +48,9 @@ function BindSensorModal(props) {
|
|||
};
|
||||
}, [initialSensorIds, selectedSensorIds]);
|
||||
|
||||
const fireRegionName = detail.fireRegionName || props.currentRecord?.fireRegionName || "-";
|
||||
const fireRegionCode = detail.fireRegionCode || props.currentRecord?.fireRegionCode || "-";
|
||||
|
||||
const handleSubmit = async () => {
|
||||
setLoading(true);
|
||||
try {
|
||||
|
|
@ -60,7 +63,7 @@ function BindSensorModal(props) {
|
|||
for (const sensorId of changes.removeIds) {
|
||||
await props.deviceRegionUnbindSensor({ sensorId });
|
||||
}
|
||||
message.success("传感器绑定已更新");
|
||||
message.success("关联传感器已更新");
|
||||
props.onCancel();
|
||||
props.getData();
|
||||
}
|
||||
|
|
@ -73,7 +76,7 @@ function BindSensorModal(props) {
|
|||
<Modal
|
||||
destroyOnClose
|
||||
open={props.open}
|
||||
title="绑定传感器"
|
||||
title="关联传感器"
|
||||
onCancel={props.onCancel}
|
||||
onOk={handleSubmit}
|
||||
confirmLoading={loading || props.loading}
|
||||
|
|
@ -81,11 +84,11 @@ function BindSensorModal(props) {
|
|||
>
|
||||
<Typography.Paragraph style={{ marginBottom: 16 }}>
|
||||
当前区域:
|
||||
{detail.fireRegionName || "-"}
|
||||
{fireRegionName}
|
||||
{" "}
|
||||
/
|
||||
{" "}
|
||||
{detail.fireRegionCode || "-"}
|
||||
{fireRegionCode}
|
||||
</Typography.Paragraph>
|
||||
{options.length
|
||||
? (
|
||||
|
|
@ -41,7 +41,7 @@ function ManagerModal(props) {
|
|||
<Modal
|
||||
destroyOnClose
|
||||
open={props.open}
|
||||
title="负责人配置"
|
||||
title="设置负责人"
|
||||
onCancel={handleCancel}
|
||||
onOk={form.submit}
|
||||
confirmLoading={props.loading}
|
||||
|
|
@ -1,181 +1,140 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Form, Input, message, Modal, Select, Space } from "antd";
|
||||
import { Button, Descriptions, Form, Modal, Space } from "antd";
|
||||
import { useEffect, useMemo, useState } from "react";
|
||||
import AddIcon from "zy-react-library/components/Icon/AddIcon";
|
||||
import Page from "zy-react-library/components/Page";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import DepartmentSelectTree from "zy-react-library/components/SelectTree/Department/Gwj";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import BindSensorModal from "~/components/DeviceRegion/BindSensorModal";
|
||||
import ManagerModal from "~/components/DeviceRegion/ManagerModal";
|
||||
import { ENABLE_STATUS_OPTIONS } from "~/enumerate/constant";
|
||||
import { NS_DEVICEREGION, NS_SENSORDEVICE } from "~/enumerate/namespace";
|
||||
import BindSensorModal from "./components/BindSensorModal";
|
||||
import ManagerModal from "./components/ManagerModal";
|
||||
|
||||
function DeviceRegionList(props) {
|
||||
const [form] = Form.useForm();
|
||||
const [configForm] = Form.useForm();
|
||||
const [configOpen, setConfigOpen] = useState(false);
|
||||
const [managerOpen, setManagerOpen] = useState(false);
|
||||
const [bindOpen, setBindOpen] = useState(false);
|
||||
const [viewOpen, setViewOpen] = useState(false);
|
||||
const [currentId, setCurrentId] = useState("");
|
||||
const [viewRecord, setViewRecord] = useState(null);
|
||||
const [currentRecord, setCurrentRecord] = useState(null);
|
||||
const [fireRegionOptions, setFireRegionOptions] = useState([]);
|
||||
const { tableProps, getData } = useTable(props["deviceRegionList"], { form });
|
||||
|
||||
const editPermission = `${props.type}-iotalarm-device-region-edit`;
|
||||
const { tableProps, getData } = useTable(props.deviceRegionList, { form });
|
||||
|
||||
const pageType = props.type || "fgs";
|
||||
const editPermission = `${pageType}-iotalarm-device-region-edit`;
|
||||
|
||||
const loadFireRegionOptions = async () => {
|
||||
const res = await props["deviceRegionFireRegionList"]();
|
||||
if (res?.success) {
|
||||
setFireRegionOptions(res.data || []);
|
||||
const res = await props.deviceRegionFireRegionList();
|
||||
if (!res?.success) {
|
||||
return;
|
||||
}
|
||||
setFireRegionOptions(res.data || []);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
loadFireRegionOptions();
|
||||
}, [props.deviceRegionFireRegionList]);
|
||||
|
||||
const fireRegionMap = useMemo(
|
||||
() => Object.fromEntries(fireRegionOptions.map(item => [item.id, item])),
|
||||
[fireRegionOptions],
|
||||
);
|
||||
const dataSource = useMemo(() => (tableProps.dataSource || []).map(item => ({
|
||||
...item,
|
||||
departmentName: item.departmentName || "-",
|
||||
managerName: item.managerName || "-",
|
||||
bindSensorCount: item.bindSensorCount ?? 0,
|
||||
})), [tableProps.dataSource]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!configOpen) {
|
||||
return;
|
||||
const ensureConfigId = async (record) => {
|
||||
if (record.id) {
|
||||
return record.id;
|
||||
}
|
||||
if (!currentId) {
|
||||
configForm.resetFields();
|
||||
configForm.setFieldsValue({ status: 1 });
|
||||
return;
|
||||
await props.deviceRegionSaveOrUpdate({
|
||||
fireRegionId: record.fireRegionId,
|
||||
fireRegionName: record.fireRegionName,
|
||||
fireRegionCode: record.fireRegionCode,
|
||||
departmentId: record.departmentId,
|
||||
status: 1,
|
||||
});
|
||||
const res = await props.deviceRegionList({
|
||||
pageIndex: 1,
|
||||
pageSize: 1000,
|
||||
fireRegionId: record.fireRegionId,
|
||||
});
|
||||
const config = (res?.data || []).find(item => item.fireRegionId === record.fireRegionId);
|
||||
if (!config?.id) {
|
||||
throw new Error("区域配置创建失败");
|
||||
}
|
||||
props["deviceRegionInfo"]({ id: currentId }).then((res) => {
|
||||
if (res?.success) {
|
||||
configForm.setFieldsValue({
|
||||
fireRegionId: res.data?.fireRegionId,
|
||||
status: res.data?.status,
|
||||
remarks: res.data?.remarks,
|
||||
});
|
||||
}
|
||||
});
|
||||
}, [configForm, configOpen, currentId, props.deviceRegionInfo]);
|
||||
|
||||
const handleConfigSubmit = async (values) => {
|
||||
const selectedFireRegion = fireRegionOptions.find(item => item.id === values.fireRegionId);
|
||||
await props["deviceRegionSaveOrUpdate"]({
|
||||
...values,
|
||||
id: currentId || undefined,
|
||||
fireRegionName: selectedFireRegion?.fireRegionName,
|
||||
fireRegionCode: selectedFireRegion?.fireRegionCode,
|
||||
});
|
||||
message.success(currentId ? "设备区域配置已更新" : "设备区域配置已新增");
|
||||
setConfigOpen(false);
|
||||
setCurrentId("");
|
||||
configForm.resetFields();
|
||||
getData();
|
||||
return config.id;
|
||||
};
|
||||
|
||||
const handleSearch = (values) => {
|
||||
getData(values);
|
||||
const handleOpenManager = async (record) => {
|
||||
const configId = await ensureConfigId(record);
|
||||
setCurrentId(configId);
|
||||
setCurrentRecord(record);
|
||||
setManagerOpen(true);
|
||||
};
|
||||
|
||||
const dataSource = (tableProps.dataSource || []).map((item) => {
|
||||
const fireRegion = fireRegionMap[item.fireRegionId] || {};
|
||||
return {
|
||||
...item,
|
||||
fireRegionName: fireRegion.fireRegionName || item.fireRegionName || "-",
|
||||
fireRegionCode: fireRegion.fireRegionCode || item.fireRegionCode || "-",
|
||||
deptName: item.deptName || item.departmentName || fireRegion.departmentName || item.departmentId || "-",
|
||||
managerName: item.managerName || item.managerId || "-",
|
||||
bindSensorCount: item.bindSensorCount ?? item.boundSensors?.length ?? 0,
|
||||
};
|
||||
});
|
||||
const handleOpenBind = async (record) => {
|
||||
const configId = await ensureConfigId(record);
|
||||
setCurrentId(configId);
|
||||
setCurrentRecord(record);
|
||||
setBindOpen(true);
|
||||
};
|
||||
|
||||
return (
|
||||
<Page isShowAllAction={false}>
|
||||
<Search
|
||||
form={form}
|
||||
onFinish={handleSearch}
|
||||
onFinish={getData}
|
||||
options={[
|
||||
{ name: "fireRegionCode", label: "消防区域编码" },
|
||||
{
|
||||
name: "status",
|
||||
label: "状态",
|
||||
name: "fireRegionId",
|
||||
label: "消防区域",
|
||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||
items: ENABLE_STATUS_OPTIONS,
|
||||
items: fireRegionOptions.map(item => ({
|
||||
bianma: item.id,
|
||||
name: item.fireRegionName,
|
||||
})),
|
||||
},
|
||||
{
|
||||
name: "departmentId",
|
||||
label: "负责部门",
|
||||
render: <DepartmentSelectTree />,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
<Table
|
||||
rowKey="id"
|
||||
toolBarRender={() => (
|
||||
<Space>
|
||||
{props.permission(editPermission) && (
|
||||
<Button
|
||||
type="primary"
|
||||
icon={<AddIcon />}
|
||||
onClick={() => {
|
||||
setCurrentId("");
|
||||
setConfigOpen(true);
|
||||
}}
|
||||
>
|
||||
新增
|
||||
</Button>
|
||||
)}
|
||||
</Space>
|
||||
)}
|
||||
rowKey={record => record.id || record.fireRegionId}
|
||||
loading={props.deviceRegionLoading}
|
||||
columns={[
|
||||
{ title: "消防区域名称", dataIndex: "fireRegionName" },
|
||||
{ title: "消防区域", dataIndex: "fireRegionName" },
|
||||
{ title: "消防区域编码", dataIndex: "fireRegionCode" },
|
||||
{ title: "负责部门", dataIndex: "deptName" },
|
||||
{ title: "负责部门", dataIndex: "departmentName" },
|
||||
{ title: "负责人", dataIndex: "managerName" },
|
||||
{ title: "已绑定传感器", dataIndex: "bindSensorCount" },
|
||||
{
|
||||
title: "状态",
|
||||
dataIndex: "status",
|
||||
render: value => getLabelName({ status: value, list: ENABLE_STATUS_OPTIONS }) || value || "-",
|
||||
},
|
||||
{ title: "备注", dataIndex: "remarks", ellipsis: true },
|
||||
{ title: "关联传感器数", dataIndex: "bindSensorCount" },
|
||||
{
|
||||
title: "操作",
|
||||
width: 280,
|
||||
width: 260,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
{props.permission(editPermission) && (
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
setCurrentId(record.id);
|
||||
setConfigOpen(true);
|
||||
}}
|
||||
>
|
||||
编辑配置
|
||||
<Button type="link" onClick={() => handleOpenBind(record)}>
|
||||
关联传感器
|
||||
</Button>
|
||||
)}
|
||||
{props.permission(editPermission) && (
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
setCurrentId(record.id);
|
||||
setManagerOpen(true);
|
||||
}}
|
||||
>
|
||||
负责人
|
||||
</Button>
|
||||
)}
|
||||
{props.permission(editPermission) && (
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
setCurrentId(record.id);
|
||||
setBindOpen(true);
|
||||
}}
|
||||
>
|
||||
绑定传感器
|
||||
<Button type="link" onClick={() => handleOpenManager(record)}>
|
||||
设置负责人
|
||||
</Button>
|
||||
)}
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
setViewRecord(record);
|
||||
setViewOpen(true);
|
||||
}}
|
||||
>
|
||||
查看
|
||||
</Button>
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
|
|
@ -185,49 +144,22 @@ function DeviceRegionList(props) {
|
|||
/>
|
||||
<Modal
|
||||
destroyOnClose
|
||||
open={configOpen}
|
||||
title={currentId ? "编辑设备区域配置" : "新增设备区域配置"}
|
||||
open={viewOpen}
|
||||
title="查看"
|
||||
footer={null}
|
||||
onCancel={() => {
|
||||
setConfigOpen(false);
|
||||
setCurrentId("");
|
||||
configForm.resetFields();
|
||||
setViewOpen(false);
|
||||
setViewRecord(null);
|
||||
}}
|
||||
onOk={configForm.submit}
|
||||
confirmLoading={props.deviceRegionLoading}
|
||||
width={680}
|
||||
>
|
||||
<Form form={configForm} layout="vertical" onFinish={handleConfigSubmit} initialValues={{ status: 1 }}>
|
||||
<Form.Item
|
||||
label="消防区域"
|
||||
name="fireRegionId"
|
||||
rules={[{ required: true, message: "请选择消防区域" }]}
|
||||
>
|
||||
<Select
|
||||
allowClear
|
||||
showSearch
|
||||
optionFilterProp="label"
|
||||
disabled={!!currentId}
|
||||
placeholder="请选择消防区域"
|
||||
options={fireRegionOptions.map(item => ({
|
||||
value: item.id,
|
||||
label: `${item.fireRegionName}${item.fireRegionCode ? `(${item.fireRegionCode})` : ""}`,
|
||||
}))}
|
||||
/>
|
||||
</Form.Item>
|
||||
<Form.Item label="状态" name="status">
|
||||
<Select
|
||||
allowClear
|
||||
placeholder="请选择状态"
|
||||
options={ENABLE_STATUS_OPTIONS.map(item => ({
|
||||
value: item.bianma,
|
||||
label: item.name,
|
||||
}))}
|
||||
/>
|
||||
</Form.Item>
|
||||
<Form.Item label="备注" name="remarks">
|
||||
<Input.TextArea rows={4} maxLength={255} placeholder="请输入备注" />
|
||||
</Form.Item>
|
||||
</Form>
|
||||
<Descriptions bordered column={2}>
|
||||
<Descriptions.Item label="消防区域">{viewRecord?.fireRegionName || "-"}</Descriptions.Item>
|
||||
<Descriptions.Item label="消防区域编码">{viewRecord?.fireRegionCode || "-"}</Descriptions.Item>
|
||||
<Descriptions.Item label="负责部门">{viewRecord?.departmentName || "-"}</Descriptions.Item>
|
||||
<Descriptions.Item label="负责人">{viewRecord?.managerName || "-"}</Descriptions.Item>
|
||||
<Descriptions.Item label="关联传感器数">{viewRecord?.bindSensorCount ?? 0}</Descriptions.Item>
|
||||
</Descriptions>
|
||||
</Modal>
|
||||
{managerOpen && (
|
||||
<ManagerModal
|
||||
|
|
@ -240,6 +172,7 @@ function DeviceRegionList(props) {
|
|||
onCancel={() => {
|
||||
setManagerOpen(false);
|
||||
setCurrentId("");
|
||||
setCurrentRecord(null);
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
|
|
@ -247,6 +180,7 @@ function DeviceRegionList(props) {
|
|||
<BindSensorModal
|
||||
open={bindOpen}
|
||||
currentId={currentId}
|
||||
currentRecord={currentRecord}
|
||||
loading={props.deviceRegionLoading || props.sensorDeviceLoading}
|
||||
getData={getData}
|
||||
deviceRegionInfo={props.deviceRegionInfo}
|
||||
|
|
@ -256,6 +190,7 @@ function DeviceRegionList(props) {
|
|||
onCancel={() => {
|
||||
setBindOpen(false);
|
||||
setCurrentId("");
|
||||
setCurrentRecord(null);
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
|
|
@ -263,4 +198,4 @@ function DeviceRegionList(props) {
|
|||
);
|
||||
}
|
||||
|
||||
export default Connect([NS_DEVICEREGION, NS_SENSORDEVICE], true)(Permission(DeviceRegionList));
|
||||
export default DeviceRegionList;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,3 @@
|
|||
export { default as BindSensorModal } from "./BindSensorModal";
|
||||
export { default as List } from "./List";
|
||||
// 默认导出 List 作为主入口组件
|
||||
export { default } from "./List";
|
||||
|
||||
export { default as ManagerModal } from "./ManagerModal";
|
||||
export default function DeviceRegion(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import { DatePicker, Form, Input, InputNumber, Modal, Radio, Select } from "antd";
|
||||
import dayjs from "dayjs";
|
||||
import { useEffect } from "react";
|
||||
import Map from "zy-react-library/components/Map";
|
||||
import { ENABLE_STATUS_OPTIONS, SENSOR_STATUS_OPTIONS, YES_NO_OPTIONS } from "~/enumerate/constant";
|
||||
|
||||
function SensorDeviceModal(props) {
|
||||
|
|
@ -15,7 +16,7 @@ function SensorDeviceModal(props) {
|
|||
form.setFieldsValue({
|
||||
sensorStatus: "NORMAL",
|
||||
positioningFlag: 0,
|
||||
alarmSwitch: 1,
|
||||
alarmSwitch: 0,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
|
@ -68,7 +69,7 @@ function SensorDeviceModal(props) {
|
|||
initialValues={{
|
||||
sensorStatus: "NORMAL",
|
||||
positioningFlag: 0,
|
||||
alarmSwitch: 1,
|
||||
alarmSwitch: 0,
|
||||
}}
|
||||
>
|
||||
<Form.Item
|
||||
|
|
@ -94,6 +95,7 @@ function SensorDeviceModal(props) {
|
|||
allowClear
|
||||
showSearch
|
||||
optionFilterProp="label"
|
||||
disabled={!!props.currentId}
|
||||
placeholder="请选择传感器类型"
|
||||
options={props.sensorTypeOptions.map(item => ({
|
||||
value: item.id,
|
||||
|
|
@ -104,6 +106,7 @@ function SensorDeviceModal(props) {
|
|||
<Form.Item label="安装位置" name="installPosition">
|
||||
<Input maxLength={255} placeholder="请输入安装位置" />
|
||||
</Form.Item>
|
||||
<Map required={false} />
|
||||
<Form.Item label="传感器状态" name="sensorStatus">
|
||||
<Radio.Group>
|
||||
{SENSOR_STATUS_OPTIONS.map(item => (
|
||||
|
|
@ -1,5 +1,3 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Form, message, Modal, Space, Switch } from "antd";
|
||||
import { useEffect, useState } from "react";
|
||||
import AddIcon from "zy-react-library/components/Icon/AddIcon";
|
||||
|
|
@ -9,15 +7,18 @@ import Table from "zy-react-library/components/Table";
|
|||
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import SensorDeviceModal from "~/components/SensorDevice/Modal";
|
||||
import RealtimeModal from "~/components/SensorDevice/RealtimeModal";
|
||||
import ThresholdModal from "~/components/SensorDevice/ThresholdModal";
|
||||
import { ENABLE_STATUS_OPTIONS, SENSOR_STATUS_OPTIONS, YES_NO_OPTIONS } from "~/enumerate/constant";
|
||||
import { NS_SENSORDEVICE, NS_SENSORTYPE } from "~/enumerate/namespace";
|
||||
import { SENSOR_ATTR_OPTIONS, SENSOR_STATUS_OPTIONS, YES_NO_OPTIONS } from "~/enumerate/constant";
|
||||
import SensorDeviceAdd from "../Add";
|
||||
import PositionModal from "../components/PositionModal";
|
||||
import RealtimeModal from "../components/RealtimeModal";
|
||||
import ThresholdModal from "../components/ThresholdModal";
|
||||
import SensorDeviceView from "../View";
|
||||
|
||||
function SensorDeviceList(props) {
|
||||
const [form] = Form.useForm();
|
||||
const [modalOpen, setModalOpen] = useState(false);
|
||||
const [viewOpen, setViewOpen] = useState(false);
|
||||
const [positionOpen, setPositionOpen] = useState(false);
|
||||
const [thresholdOpen, setThresholdOpen] = useState(false);
|
||||
const [realtimeOpen, setRealtimeOpen] = useState(false);
|
||||
const [currentId, setCurrentId] = useState("");
|
||||
|
|
@ -25,7 +26,8 @@ function SensorDeviceList(props) {
|
|||
const [sensorTypeOptions, setSensorTypeOptions] = useState([]);
|
||||
const { tableProps, getData } = useTable(props["sensorDeviceList"], { form });
|
||||
|
||||
const editPermission = `${props.type}-iotalarm-sensor-device-edit`;
|
||||
const pageType = props.type || "fgs";
|
||||
const editPermission = `${pageType}-iotalarm-sensor-device-edit`;
|
||||
|
||||
const loadSensorTypeOptions = async () => {
|
||||
const res = await props["sensorTypeList"]({
|
||||
|
|
@ -70,7 +72,6 @@ function SensorDeviceList(props) {
|
|||
form={form}
|
||||
onFinish={getData}
|
||||
options={[
|
||||
{ name: "sensorCode", label: "传感器编码" },
|
||||
{ name: "sensorName", label: "传感器名称" },
|
||||
{
|
||||
name: "sensorTypeId",
|
||||
|
|
@ -79,14 +80,14 @@ function SensorDeviceList(props) {
|
|||
items: sensorTypeSelectOptions,
|
||||
},
|
||||
{
|
||||
name: "alarmSwitch",
|
||||
label: "报警开关",
|
||||
name: "sensorStatus",
|
||||
label: "传感器状态",
|
||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||
items: ENABLE_STATUS_OPTIONS,
|
||||
items: SENSOR_STATUS_OPTIONS,
|
||||
},
|
||||
{
|
||||
name: "thresholdFlag",
|
||||
label: "阈值配置",
|
||||
label: "是否阈值设定",
|
||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||
items: YES_NO_OPTIONS,
|
||||
},
|
||||
|
|
@ -114,11 +115,21 @@ function SensorDeviceList(props) {
|
|||
{ title: "传感器编码", dataIndex: "sensorCode" },
|
||||
{ title: "传感器名称", dataIndex: "sensorName" },
|
||||
{ title: "传感器类型", dataIndex: "sensorTypeName" },
|
||||
{
|
||||
title: "传感器属性",
|
||||
dataIndex: "sensorAttr",
|
||||
render: value => getLabelName({ status: value, list: SENSOR_ATTR_OPTIONS }) || value || "-",
|
||||
},
|
||||
{
|
||||
title: "传感器状态",
|
||||
dataIndex: "sensorStatus",
|
||||
render: value => getLabelName({ status: value, list: SENSOR_STATUS_OPTIONS }) || value || "-",
|
||||
},
|
||||
{
|
||||
title: "是否定位",
|
||||
dataIndex: "positioningFlag",
|
||||
render: value => getLabelName({ status: value, list: YES_NO_OPTIONS }) || value || "-",
|
||||
},
|
||||
{
|
||||
title: "报警开关",
|
||||
dataIndex: "alarmSwitch",
|
||||
|
|
@ -133,33 +144,33 @@ function SensorDeviceList(props) {
|
|||
),
|
||||
},
|
||||
{
|
||||
title: "阈值配置",
|
||||
title: "是否阈值设定",
|
||||
dataIndex: "thresholdFlag",
|
||||
render: value => getLabelName({ status: value, list: YES_NO_OPTIONS }) || value || "-",
|
||||
},
|
||||
{ title: "安装位置", dataIndex: "installPosition", ellipsis: true },
|
||||
{ title: "单位", dataIndex: "unitName" },
|
||||
{
|
||||
title: "量程",
|
||||
render: (_, record) => `${record.rangeMin ?? "-"} ~ ${record.rangeMax ?? "-"}`,
|
||||
},
|
||||
{ title: "备注", dataIndex: "remarks", ellipsis: true },
|
||||
{
|
||||
title: "操作",
|
||||
width: 260,
|
||||
width: 320,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
{props.permission(editPermission) && record.sensorAttr === "NUMBER" && (
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
setCurrentId(record.id);
|
||||
setThresholdOpen(true);
|
||||
}}
|
||||
>
|
||||
阈值配置
|
||||
</Button>
|
||||
)}
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
setCurrentRecord(record);
|
||||
setViewOpen(true);
|
||||
}}
|
||||
>
|
||||
查看
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
setCurrentRecord(record);
|
||||
setPositionOpen(true);
|
||||
}}
|
||||
>
|
||||
定位
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
|
|
@ -167,8 +178,19 @@ function SensorDeviceList(props) {
|
|||
setRealtimeOpen(true);
|
||||
}}
|
||||
>
|
||||
实时概览
|
||||
实时数据
|
||||
</Button>
|
||||
{props.permission(editPermission) && record.sensorAttr === "NUMBER" && record.thresholdFlag === 1 && (
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
setCurrentId(record.id);
|
||||
setThresholdOpen(true);
|
||||
}}
|
||||
>
|
||||
阈值设定
|
||||
</Button>
|
||||
)}
|
||||
{props.permission(editPermission) && (
|
||||
<Button
|
||||
type="link"
|
||||
|
|
@ -192,7 +214,7 @@ function SensorDeviceList(props) {
|
|||
{...tableProps}
|
||||
/>
|
||||
{modalOpen && (
|
||||
<SensorDeviceModal
|
||||
<SensorDeviceAdd
|
||||
open={modalOpen}
|
||||
currentId={currentId}
|
||||
loading={props.sensorDeviceLoading}
|
||||
|
|
@ -221,6 +243,26 @@ function SensorDeviceList(props) {
|
|||
}}
|
||||
/>
|
||||
)}
|
||||
{viewOpen && (
|
||||
<SensorDeviceView
|
||||
open={viewOpen}
|
||||
record={currentRecord}
|
||||
onCancel={() => {
|
||||
setViewOpen(false);
|
||||
setCurrentRecord({});
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
{positionOpen && (
|
||||
<PositionModal
|
||||
open={positionOpen}
|
||||
record={currentRecord}
|
||||
onCancel={() => {
|
||||
setPositionOpen(false);
|
||||
setCurrentRecord({});
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
{realtimeOpen && (
|
||||
<RealtimeModal
|
||||
open={realtimeOpen}
|
||||
|
|
@ -235,4 +277,4 @@ function SensorDeviceList(props) {
|
|||
);
|
||||
}
|
||||
|
||||
export default Connect([NS_SENSORDEVICE, NS_SENSORTYPE], true)(Permission(SensorDeviceList));
|
||||
export default SensorDeviceList;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,69 @@
|
|||
import { Button, Descriptions, Modal } from "antd";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { ENABLE_STATUS_OPTIONS, SENSOR_ATTR_OPTIONS, SENSOR_STATUS_OPTIONS, YES_NO_OPTIONS } from "~/enumerate/constant";
|
||||
|
||||
function ViewModal(props) {
|
||||
const record = props.record || {};
|
||||
|
||||
return (
|
||||
<Modal
|
||||
destroyOnClose
|
||||
title="查看"
|
||||
open={props.open}
|
||||
cancelText="关闭"
|
||||
width={800}
|
||||
onCancel={props.onCancel}
|
||||
footer={(
|
||||
<div>
|
||||
<Button onClick={props.onCancel}>关闭</Button>
|
||||
</div>
|
||||
)}
|
||||
>
|
||||
<Descriptions
|
||||
bordered
|
||||
column={2}
|
||||
labelStyle={{ width: 180 }}
|
||||
items={[
|
||||
{ label: "传感器编码", children: record.sensorCode || "-", span: 2 },
|
||||
{ label: "传感器名称", children: record.sensorName || "-", span: 2 },
|
||||
{ label: "传感器类型", children: record.sensorTypeName || "-", span: 2 },
|
||||
{
|
||||
label: "传感器属性",
|
||||
children: getLabelName({ status: record.sensorAttr, list: SENSOR_ATTR_OPTIONS }) || record.sensorAttr || "-",
|
||||
span: 2,
|
||||
},
|
||||
{
|
||||
label: "传感器状态",
|
||||
children: getLabelName({ status: record.sensorStatus, list: SENSOR_STATUS_OPTIONS }) || record.sensorStatus || "-",
|
||||
span: 2,
|
||||
},
|
||||
{
|
||||
label: "是否定位",
|
||||
children: getLabelName({ status: record.positioningFlag, list: YES_NO_OPTIONS }) || record.positioningFlag || "-",
|
||||
span: 2,
|
||||
},
|
||||
{
|
||||
label: "报警开关",
|
||||
children: getLabelName({ status: record.alarmSwitch, list: ENABLE_STATUS_OPTIONS }) || record.alarmSwitch || "-",
|
||||
span: 2,
|
||||
},
|
||||
{
|
||||
label: "是否阈值设定",
|
||||
children: getLabelName({ status: record.thresholdFlag, list: YES_NO_OPTIONS }) || record.thresholdFlag || "-",
|
||||
span: 2,
|
||||
},
|
||||
{ label: "安装位置", children: record.installPosition || "-", span: 2 },
|
||||
{ label: "经度", children: record.longitude || "-", span: 2 },
|
||||
{ label: "纬度", children: record.latitude || "-", span: 2 },
|
||||
{ label: "单位", children: record.unitName || "-", span: 2 },
|
||||
{ label: "量程", children: `${record.rangeMin ?? "-"} ~ ${record.rangeMax ?? "-"}`, span: 2 },
|
||||
{ label: "出厂日期", children: record.factoryDate || "-", span: 2 },
|
||||
{ label: "企业侧源编码", children: record.enterpriseSourceCode || "-", span: 2 },
|
||||
{ label: "备注", children: record.remarks || "-", span: 2 },
|
||||
]}
|
||||
/>
|
||||
</Modal>
|
||||
);
|
||||
}
|
||||
|
||||
export default ViewModal;
|
||||
|
|
@ -0,0 +1,123 @@
|
|||
import { Spin } from "antd";
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import { dynamicLoadJs } from "zy-react-library/utils";
|
||||
|
||||
function StaticMapViewer(props) {
|
||||
const mapContainerRef = useRef(null);
|
||||
const mapInstanceRef = useRef(null);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const longitude = props.longitude;
|
||||
const latitude = props.latitude;
|
||||
|
||||
useEffect(() => {
|
||||
const originalRemoveChild = Node.prototype.removeChild;
|
||||
Node.prototype.removeChild = function (child) {
|
||||
try {
|
||||
if (this.contains(child)) {
|
||||
return originalRemoveChild.call(this, child);
|
||||
}
|
||||
return child;
|
||||
}
|
||||
catch (error) {
|
||||
if (error.message && error.message.includes("removeChild")) {
|
||||
return child;
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
const initMap = async () => {
|
||||
if (!window.BMapGL) {
|
||||
await dynamicLoadJs(`https://api.map.baidu.com/api?v=1.0&type=webgl&ak=${window.mapBaiDuKey}&callback=initialize`);
|
||||
}
|
||||
|
||||
if (!mapContainerRef.current || mapInstanceRef.current) {
|
||||
setLoading(false);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const map = new window.BMapGL.Map(mapContainerRef.current, {
|
||||
enableScrollWheelZoom: true,
|
||||
enableDragging: true,
|
||||
enableDoubleClickZoom: true,
|
||||
enableKeyboard: true,
|
||||
enableInertialDragging: true,
|
||||
enableContinuousZoom: true,
|
||||
});
|
||||
|
||||
mapInstanceRef.current = map;
|
||||
|
||||
const centerLng = longitude || window.mapLongitude;
|
||||
const centerLat = latitude || window.mapLatitude;
|
||||
map.centerAndZoom(new window.BMapGL.Point(centerLng, centerLat), 16);
|
||||
|
||||
if (longitude && latitude) {
|
||||
const point = new window.BMapGL.Point(longitude, latitude);
|
||||
const marker = new window.BMapGL.Marker(point, {
|
||||
draggable: false,
|
||||
enableMassClear: true,
|
||||
});
|
||||
map.addOverlay(marker);
|
||||
}
|
||||
|
||||
setLoading(false);
|
||||
}
|
||||
catch {
|
||||
setLoading(false);
|
||||
}
|
||||
};
|
||||
|
||||
const timer = setTimeout(initMap, 500);
|
||||
|
||||
return () => {
|
||||
clearTimeout(timer);
|
||||
const map = mapInstanceRef.current;
|
||||
if (map) {
|
||||
try {
|
||||
map.destroy();
|
||||
}
|
||||
catch {
|
||||
}
|
||||
}
|
||||
mapInstanceRef.current = null;
|
||||
Node.prototype.removeChild = originalRemoveChild;
|
||||
};
|
||||
}, [latitude, longitude]);
|
||||
|
||||
return (
|
||||
<div
|
||||
ref={mapContainerRef}
|
||||
style={{
|
||||
width: "100%",
|
||||
height: 260,
|
||||
position: "relative",
|
||||
border: "1px solid #f0f0f0",
|
||||
borderRadius: 4,
|
||||
overflow: "hidden",
|
||||
}}
|
||||
>
|
||||
{loading && (
|
||||
<Spin
|
||||
size="large"
|
||||
tip="地图加载中..."
|
||||
spinning
|
||||
style={{
|
||||
position: "absolute",
|
||||
top: 0,
|
||||
left: 0,
|
||||
right: 0,
|
||||
bottom: 0,
|
||||
background: "rgba(255, 255, 255, 0.8)",
|
||||
display: "flex",
|
||||
justifyContent: "center",
|
||||
alignItems: "center",
|
||||
zIndex: 10,
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default StaticMapViewer;
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
import { Alert, Button, Descriptions, Modal } from "antd";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { YES_NO_OPTIONS } from "~/enumerate/constant";
|
||||
import StaticMapViewer from "./StaticMapViewer";
|
||||
|
||||
function PositionModal(props) {
|
||||
const record = props.record || {};
|
||||
const hasPosition = record.positioningFlag === 1 && record.installPosition;
|
||||
|
||||
return (
|
||||
<Modal
|
||||
destroyOnClose
|
||||
title="定位"
|
||||
open={props.open}
|
||||
cancelText="关闭"
|
||||
width={720}
|
||||
onCancel={props.onCancel}
|
||||
footer={(
|
||||
<div>
|
||||
<Button onClick={props.onCancel}>关闭</Button>
|
||||
</div>
|
||||
)}
|
||||
>
|
||||
{!hasPosition && (
|
||||
<Alert
|
||||
showIcon
|
||||
type="warning"
|
||||
message="当前传感器未配置有效定位信息"
|
||||
style={{ marginBottom: 16 }}
|
||||
/>
|
||||
)}
|
||||
<Descriptions
|
||||
bordered
|
||||
column={2}
|
||||
labelStyle={{ width: 180 }}
|
||||
items={[
|
||||
{ label: "传感器编码", children: record.sensorCode || "-", span: 2 },
|
||||
{ label: "传感器名称", children: record.sensorName || "-", span: 2 },
|
||||
{
|
||||
label: "是否定位",
|
||||
children: getLabelName({ status: record.positioningFlag, list: YES_NO_OPTIONS }) || record.positioningFlag || "-",
|
||||
span: 2,
|
||||
},
|
||||
{ label: "安装位置", children: record.installPosition || "-", span: 2 },
|
||||
]}
|
||||
/>
|
||||
<div style={{ marginTop: 16 }}>
|
||||
<StaticMapViewer longitude={record.longitude} latitude={record.latitude} />
|
||||
</div>
|
||||
</Modal>
|
||||
);
|
||||
}
|
||||
|
||||
export default PositionModal;
|
||||
|
|
@ -32,6 +32,8 @@ function RealtimeModal(props) {
|
|||
label: "是否定位",
|
||||
children: getLabelName({ status: record.positioningFlag, list: YES_NO_OPTIONS }) || record.positioningFlag || "-",
|
||||
},
|
||||
{ label: "经度", children: record.longitude || "-" },
|
||||
{ label: "纬度", children: record.latitude || "-" },
|
||||
{ label: "当前量程", children: `${record.rangeMin ?? "-"} ~ ${record.rangeMax ?? "-"}` },
|
||||
{ label: "单位", children: record.unitName || "-" },
|
||||
{ label: "安装位置", children: record.installPosition || "-" },
|
||||
|
|
@ -1,8 +1,3 @@
|
|||
// 导出子组件
|
||||
export { default as List } from "./List";
|
||||
// 默认导出 List 作为主入口
|
||||
export { default } from "./List";
|
||||
export { default as Modal } from "./Modal";
|
||||
export { default as RealtimeModal } from "./RealtimeModal";
|
||||
|
||||
export { default as ThresholdModal } from "./ThresholdModal";
|
||||
export default function SensorDevice(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ function SensorTypeModal(props) {
|
|||
name="sensorAttr"
|
||||
rules={[{ required: true, message: "请选择传感器属性" }]}
|
||||
>
|
||||
<Radio.Group>
|
||||
<Radio.Group disabled={!!props.currentId}>
|
||||
{SENSOR_ATTR_OPTIONS.map(item => (
|
||||
<Radio key={item.bianma} value={item.bianma}>
|
||||
{item.name}
|
||||
|
|
@ -1,25 +1,25 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Form, message, Modal, Space } from "antd";
|
||||
import { useState } from "react";
|
||||
import AddIcon from "zy-react-library/components/Icon/AddIcon";
|
||||
import Page from "zy-react-library/components/Page";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import SensorTypeModal from "~/components/SensorType/Modal";
|
||||
import { ENABLE_STATUS_OPTIONS, SENSOR_ATTR_OPTIONS } from "~/enumerate/constant";
|
||||
import { NS_SENSORTYPE } from "~/enumerate/namespace";
|
||||
import { SENSOR_ATTR_OPTIONS } from "~/enumerate/constant";
|
||||
import SensorTypeAdd from "../Add";
|
||||
import SensorTypeView from "../View";
|
||||
|
||||
function SensorTypeList(props) {
|
||||
const [form] = Form.useForm();
|
||||
const [modalOpen, setModalOpen] = useState(false);
|
||||
const [viewOpen, setViewOpen] = useState(false);
|
||||
const [currentRecord, setCurrentRecord] = useState({});
|
||||
const [currentId, setCurrentId] = useState("");
|
||||
const { tableProps, getData } = useTable(props["sensorTypeList"], { form });
|
||||
|
||||
const editPermission = `${props.type}-iotalarm-sensor-type-edit`;
|
||||
const pageType = props.type || "fgs";
|
||||
const editPermission = `${pageType}-iotalarm-sensor-type-edit`;
|
||||
|
||||
const handleDelete = (record) => {
|
||||
Modal.confirm({
|
||||
|
|
@ -38,20 +38,7 @@ function SensorTypeList(props) {
|
|||
form={form}
|
||||
onFinish={getData}
|
||||
options={[
|
||||
{ name: "typeCode", label: "类型编码" },
|
||||
{ name: "typeName", label: "类型名称" },
|
||||
{
|
||||
name: "sensorAttr",
|
||||
label: "传感器属性",
|
||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||
items: SENSOR_ATTR_OPTIONS,
|
||||
},
|
||||
{
|
||||
name: "status",
|
||||
label: "状态",
|
||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||
items: ENABLE_STATUS_OPTIONS,
|
||||
},
|
||||
{ name: "typeName", label: "传感器类型" },
|
||||
]}
|
||||
/>
|
||||
<Table
|
||||
|
|
@ -73,25 +60,26 @@ function SensorTypeList(props) {
|
|||
</Space>
|
||||
)}
|
||||
columns={[
|
||||
{ title: "类型编码", dataIndex: "typeCode" },
|
||||
{ title: "类型名称", dataIndex: "typeName" },
|
||||
{ title: "传感器类型", dataIndex: "typeName" },
|
||||
{
|
||||
title: "传感器属性",
|
||||
dataIndex: "sensorAttr",
|
||||
render: value => getLabelName({ status: value, list: SENSOR_ATTR_OPTIONS }) || value || "-",
|
||||
},
|
||||
{ title: "排序", dataIndex: "sortNo" },
|
||||
{
|
||||
title: "状态",
|
||||
dataIndex: "status",
|
||||
render: value => getLabelName({ status: value, list: ENABLE_STATUS_OPTIONS }) || value || "-",
|
||||
},
|
||||
{ title: "备注", dataIndex: "remarks", ellipsis: true },
|
||||
{
|
||||
title: "操作",
|
||||
width: 180,
|
||||
width: 220,
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
setCurrentRecord(record);
|
||||
setViewOpen(true);
|
||||
}}
|
||||
>
|
||||
查看
|
||||
</Button>
|
||||
{props.permission(editPermission) && (
|
||||
<Button
|
||||
type="link"
|
||||
|
|
@ -115,7 +103,7 @@ function SensorTypeList(props) {
|
|||
{...tableProps}
|
||||
/>
|
||||
{modalOpen && (
|
||||
<SensorTypeModal
|
||||
<SensorTypeAdd
|
||||
open={modalOpen}
|
||||
currentId={currentId}
|
||||
loading={props.sensorTypeLoading}
|
||||
|
|
@ -129,8 +117,18 @@ function SensorTypeList(props) {
|
|||
}}
|
||||
/>
|
||||
)}
|
||||
{viewOpen && (
|
||||
<SensorTypeView
|
||||
open={viewOpen}
|
||||
record={currentRecord}
|
||||
onCancel={() => {
|
||||
setViewOpen(false);
|
||||
setCurrentRecord({});
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
</Page>
|
||||
);
|
||||
}
|
||||
|
||||
export default Connect([NS_SENSORTYPE], true)(Permission(SensorTypeList));
|
||||
export default SensorTypeList;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,38 @@
|
|||
import { Button, Descriptions, Modal } from "antd";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { SENSOR_ATTR_OPTIONS } from "~/enumerate/constant";
|
||||
|
||||
function ViewModal(props) {
|
||||
const record = props.record || {};
|
||||
|
||||
return (
|
||||
<Modal
|
||||
destroyOnClose
|
||||
title="查看"
|
||||
open={props.open}
|
||||
cancelText="关闭"
|
||||
width={640}
|
||||
onCancel={props.onCancel}
|
||||
footer={(
|
||||
<div>
|
||||
<Button onClick={props.onCancel}>关闭</Button>
|
||||
</div>
|
||||
)}
|
||||
>
|
||||
<Descriptions
|
||||
bordered
|
||||
column={1}
|
||||
labelStyle={{ width: 160 }}
|
||||
items={[
|
||||
{ label: "传感器类型", children: record.typeName || "-" },
|
||||
{
|
||||
label: "传感器属性",
|
||||
children: getLabelName({ status: record.sensorAttr, list: SENSOR_ATTR_OPTIONS }) || record.sensorAttr || "-",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</Modal>
|
||||
);
|
||||
}
|
||||
|
||||
export default ViewModal;
|
||||
|
|
@ -1,5 +1,3 @@
|
|||
export { default as List } from "./List";
|
||||
// 默认导出 List 作为主入口组件
|
||||
export { default } from "./List";
|
||||
|
||||
export { default as Modal } from "./Modal";
|
||||
export default function SensorType(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,90 @@
|
|||
import { Form } from "antd";
|
||||
import { useState } from "react";
|
||||
import Page from "zy-react-library/components/Page";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import AlarmRecordView from "~/components/AlarmRecord/View";
|
||||
|
||||
function ThresholdList(props) {
|
||||
const [form] = Form.useForm();
|
||||
const [detailOpen, setDetailOpen] = useState(false);
|
||||
const [currentId, setCurrentId] = useState("");
|
||||
const { tableProps, getData } = useTable(props["thresholdAlarmInfoList"], {
|
||||
form,
|
||||
defaultParams: { alarmSource: "THRESHOLD" },
|
||||
});
|
||||
|
||||
const handleSearch = (values) => {
|
||||
getData({
|
||||
sensorName: values.sensorName,
|
||||
alarmTimeStart: values.alarmTime?.[0]?.format?.("YYYY-MM-DD HH:mm:ss"),
|
||||
alarmTimeEnd: values.alarmTime?.[1]?.format?.("YYYY-MM-DD HH:mm:ss"),
|
||||
});
|
||||
};
|
||||
|
||||
const renderCurrentValue = (_, record) => {
|
||||
if (record.currentValue == null || record.currentValue === "") {
|
||||
return "-";
|
||||
}
|
||||
const suffix = record.compareFlag === "UP" ? " 上升" : record.compareFlag === "DOWN" ? " 下降" : "";
|
||||
const unit = record.unitName ? ` ${record.unitName}` : "";
|
||||
return `${record.currentValue}${unit}${suffix}`;
|
||||
};
|
||||
|
||||
return (
|
||||
<Page isShowAllAction={false}>
|
||||
<Search
|
||||
form={form}
|
||||
onFinish={handleSearch}
|
||||
options={[
|
||||
{ name: "sensorName", label: "传感器名称" },
|
||||
{
|
||||
name: "alarmTime",
|
||||
label: "报警时间",
|
||||
render: FORM_ITEM_RENDER_ENUM.DATE_RANGE,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
<Table
|
||||
rowKey="id"
|
||||
columns={[
|
||||
{ title: "传感器编码", dataIndex: "sensorCode" },
|
||||
{ title: "传感器名称", dataIndex: "sensorName" },
|
||||
{ title: "报警时间", dataIndex: "alarmTime" },
|
||||
{ title: "报警描述", dataIndex: "alarmDesc", ellipsis: true },
|
||||
{ title: "告警值", render: renderCurrentValue },
|
||||
{
|
||||
title: "操作",
|
||||
width: 100,
|
||||
render: (_, record) => (
|
||||
<a
|
||||
onClick={() => {
|
||||
setCurrentId(record.id);
|
||||
setDetailOpen(true);
|
||||
}}
|
||||
>
|
||||
查看
|
||||
</a>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
{detailOpen && (
|
||||
<AlarmRecordView
|
||||
open={detailOpen}
|
||||
currentId={currentId}
|
||||
alarmRecordInfo={props.alarmRecordInfo}
|
||||
onCancel={() => {
|
||||
setDetailOpen(false);
|
||||
setCurrentId("");
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
</Page>
|
||||
);
|
||||
}
|
||||
|
||||
export default ThresholdList;
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
export default function ThresholdAlarmInfo(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
|
@ -1,6 +1 @@
|
|||
export { default as AlarmDispose } from "./AlarmDispose";
|
||||
export { default as AlarmInfo } from "./AlarmInfo";
|
||||
export { default as AlarmRecord } from "./AlarmRecord";
|
||||
export { default as DeviceRegion } from "./DeviceRegion";
|
||||
export { default as SensorDevice } from "./SensorDevice";
|
||||
export { default as SensorType } from "./SensorType";
|
||||
export {};
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
/**
|
||||
* 全局上下文定义
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
export const InjectContext = React.createContext(null);
|
||||
// 获取antd全局静态方法
|
||||
export const InjectContext = React.createContext({});
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
export * from "./constant";
|
||||
export * from "./context";
|
||||
export * from "./namespace";
|
||||
|
|
@ -1,7 +1,13 @@
|
|||
export const NS_SENSORTYPE = "sensorType";
|
||||
export const NS_SENSORDEVICE = "sensorDevice";
|
||||
export const NS_DEVICEREGION = "deviceRegion";
|
||||
export const NS_DCSALARMINFO = "dcsAlarmInfo";
|
||||
export const NS_THRESHOLDALARMINFO = "thresholdAlarmInfo";
|
||||
export const NS_ALARMDISPOSE = "alarmDispose";
|
||||
export const NS_ALARMRECORD = "alarmRecord";
|
||||
/**
|
||||
* 全局数据状态管理模块定义
|
||||
*/
|
||||
|
||||
import { defineNamespace } from "@cqsjjb/jjb-dva-runtime";
|
||||
|
||||
export const NS_SENSORTYPE = defineNamespace("SensorType");
|
||||
export const NS_SENSORDEVICE = defineNamespace("SensorDevice");
|
||||
export const NS_DEVICEREGION = defineNamespace("DeviceRegion");
|
||||
export const NS_DCSALARMINFO = defineNamespace("AlarmInfo");
|
||||
export const NS_THRESHOLDALARMINFO = defineNamespace("AlarmInfo");
|
||||
export const NS_ALARMDISPOSE = defineNamespace("AlarmDispose");
|
||||
export const NS_ALARMRECORD = defineNamespace("AlarmRecord");
|
||||
|
|
|
|||
|
|
@ -11,6 +11,9 @@ require("zy-react-library/css/common.less");
|
|||
|
||||
dayjs.locale("zh-cn");
|
||||
setJJBCommonAntdMessage(message);
|
||||
window.mapLongitude = "119.69457721306945";
|
||||
window.mapLatitude = "39.940504336846665";
|
||||
window.mapBaiDuKey = "OElqFYoKiAH8KFtph8ftLKF5NlNrbCUr";
|
||||
|
||||
const app = setup();
|
||||
getFileUrlFromServer();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import AlarmAssignList from "~/components/AlarmAssign/List";
|
||||
import { NS_ALARMDISPOSE, NS_ALARMRECORD } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
return <AlarmAssignList {...props} type="fgs" />;
|
||||
}
|
||||
|
||||
export default Connect([NS_ALARMDISPOSE, NS_ALARMRECORD], true)(Permission(List));
|
||||
|
|
@ -1,8 +1,5 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import AssignList from "~/components/AlarmDispose/AssignList";
|
||||
|
||||
function AlarmAssignPage(props) {
|
||||
return <AssignList {...props} type="fgs" />;
|
||||
function AlarmAssign(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
||||
export default Permission(AlarmAssignPage);
|
||||
export default AlarmAssign;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import AlarmRecordList from "~/components/AlarmRecord/List";
|
||||
import { NS_ALARMRECORD } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
return <AlarmRecordList {...props} type="fgs" />;
|
||||
}
|
||||
|
||||
export default Connect([NS_ALARMRECORD], true)(Permission(List));
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import AlarmRecordView from "~/components/AlarmRecord/View";
|
||||
|
||||
function View(props) {
|
||||
return <AlarmRecordView {...props} />;
|
||||
}
|
||||
|
||||
export default View;
|
||||
|
|
@ -1,8 +1,5 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import AlarmRecordList from "~/components/AlarmRecord/List";
|
||||
|
||||
function AlarmRecordPage(props) {
|
||||
return <AlarmRecordList {...props} type="fgs" />;
|
||||
function AlarmRecord(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
||||
export default Permission(AlarmRecordPage);
|
||||
export default AlarmRecord;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import DcsList from "~/components/DcsAlarmInfo/List";
|
||||
import { NS_ALARMRECORD, NS_DCSALARMINFO } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
return <DcsList {...props} type="fgs" />;
|
||||
}
|
||||
|
||||
export default Connect([NS_DCSALARMINFO, NS_ALARMRECORD], true)(Permission(List));
|
||||
|
|
@ -1,8 +1,5 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import DcsList from "~/components/AlarmInfo/DcsList";
|
||||
|
||||
function DcsAlarmInfoPage(props) {
|
||||
return <DcsList {...props} type="fgs" />;
|
||||
function DcsAlarmInfo(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
||||
export default Permission(DcsAlarmInfoPage);
|
||||
export default DcsAlarmInfo;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import DeviceRegionList from "~/components/DeviceRegion/List";
|
||||
import { NS_DEVICEREGION, NS_SENSORDEVICE } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
return <DeviceRegionList {...props} type="fgs" />;
|
||||
}
|
||||
|
||||
export default Connect([NS_DEVICEREGION, NS_SENSORDEVICE], true)(Permission(List));
|
||||
|
|
@ -1,8 +1,5 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import DeviceRegionList from "~/components/DeviceRegion/List";
|
||||
|
||||
function DeviceRegionPage(props) {
|
||||
return <DeviceRegionList {...props} type="fgs" />;
|
||||
function DeviceRegion(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
||||
export default Permission(DeviceRegionPage);
|
||||
export default DeviceRegion;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
import SensorDeviceAdd from "~/components/SensorDevice/Add";
|
||||
|
||||
function Add(props) {
|
||||
return <SensorDeviceAdd {...props} />;
|
||||
}
|
||||
|
||||
export default Add;
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import SensorDeviceList from "~/components/SensorDevice/List";
|
||||
import { NS_SENSORDEVICE, NS_SENSORTYPE } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
return <SensorDeviceList {...props} type="fgs" />;
|
||||
}
|
||||
|
||||
export default Connect([NS_SENSORDEVICE, NS_SENSORTYPE], true)(Permission(List));
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import SensorDeviceView from "~/components/SensorDevice/View";
|
||||
|
||||
function View(props) {
|
||||
return <SensorDeviceView {...props} />;
|
||||
}
|
||||
|
||||
export default View;
|
||||
|
|
@ -1,8 +1,5 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import SensorDeviceList from "~/components/SensorDevice/List";
|
||||
|
||||
function SensorDevicePage(props) {
|
||||
return <SensorDeviceList {...props} type="fgs" />;
|
||||
function SensorDevice(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
||||
export default Permission(SensorDevicePage);
|
||||
export default SensorDevice;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
import SensorTypeAdd from "~/components/SensorType/Add";
|
||||
|
||||
function Add(props) {
|
||||
return <SensorTypeAdd {...props} />;
|
||||
}
|
||||
|
||||
export default Add;
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import SensorTypeList from "~/components/SensorType/List";
|
||||
import { NS_SENSORTYPE } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
return <SensorTypeList {...props} type="fgs" />;
|
||||
}
|
||||
|
||||
export default Connect([NS_SENSORTYPE], true)(Permission(List));
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import SensorTypeView from "~/components/SensorType/View";
|
||||
|
||||
function View(props) {
|
||||
return <SensorTypeView {...props} />;
|
||||
}
|
||||
|
||||
export default View;
|
||||
|
|
@ -1,8 +1,5 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import SensorTypeList from "~/components/SensorType/List";
|
||||
|
||||
function SensorTypePage(props) {
|
||||
return <SensorTypeList {...props} type="fgs" />;
|
||||
function SensorType(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
||||
export default Permission(SensorTypePage);
|
||||
export default SensorType;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import ThresholdList from "~/components/ThresholdAlarmInfo/List";
|
||||
import { NS_ALARMRECORD, NS_THRESHOLDALARMINFO } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
return <ThresholdList {...props} type="fgs" />;
|
||||
}
|
||||
|
||||
export default Connect([NS_THRESHOLDALARMINFO, NS_ALARMRECORD], true)(Permission(List));
|
||||
|
|
@ -1,8 +1,5 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import ThresholdList from "~/components/AlarmInfo/ThresholdList";
|
||||
|
||||
function ThresholdAlarmInfoPage(props) {
|
||||
return <ThresholdList {...props} type="fgs" />;
|
||||
function ThresholdAlarmInfo(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
||||
export default Permission(ThresholdAlarmInfoPage);
|
||||
export default ThresholdAlarmInfo;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import AlarmAssignList from "~/components/AlarmAssign/List";
|
||||
import { NS_ALARMDISPOSE, NS_ALARMRECORD } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
return <AlarmAssignList {...props} type="gfd" />;
|
||||
}
|
||||
|
||||
export default Connect([NS_ALARMDISPOSE, NS_ALARMRECORD], true)(Permission(List));
|
||||
|
|
@ -1,8 +1,3 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import AssignList from "~/components/AlarmDispose/AssignList";
|
||||
|
||||
function AlarmAssignPage(props) {
|
||||
return <AssignList {...props} type="gfd" />;
|
||||
export default function AlarmAssign(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
||||
export default Permission(AlarmAssignPage);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import AlarmRecordList from "~/components/AlarmRecord/List";
|
||||
import { NS_ALARMRECORD } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
return <AlarmRecordList {...props} type="gfd" />;
|
||||
}
|
||||
|
||||
export default Connect([NS_ALARMRECORD], true)(Permission(List));
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import AlarmRecordView from "~/components/AlarmRecord/View";
|
||||
|
||||
function View(props) {
|
||||
return <AlarmRecordView {...props} />;
|
||||
}
|
||||
|
||||
export default View;
|
||||
|
|
@ -1,8 +1,3 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import AlarmRecordList from "~/components/AlarmRecord/List";
|
||||
|
||||
function AlarmRecordPage(props) {
|
||||
return <AlarmRecordList {...props} type="gfd" />;
|
||||
export default function AlarmRecord(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
||||
export default Permission(AlarmRecordPage);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import DcsList from "~/components/DcsAlarmInfo/List";
|
||||
import { NS_ALARMRECORD, NS_DCSALARMINFO } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
return <DcsList {...props} type="gfd" />;
|
||||
}
|
||||
|
||||
export default Connect([NS_DCSALARMINFO, NS_ALARMRECORD], true)(Permission(List));
|
||||
|
|
@ -1,8 +1,3 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import DcsList from "~/components/AlarmInfo/DcsList";
|
||||
|
||||
function DcsAlarmInfoPage(props) {
|
||||
return <DcsList {...props} type="gfd" />;
|
||||
export default function DcsAlarmInfo(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
||||
export default Permission(DcsAlarmInfoPage);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import DeviceRegionList from "~/components/DeviceRegion/List";
|
||||
import { NS_DEVICEREGION, NS_SENSORDEVICE } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
return <DeviceRegionList {...props} type="gfd" />;
|
||||
}
|
||||
|
||||
export default Connect([NS_DEVICEREGION, NS_SENSORDEVICE], true)(Permission(List));
|
||||
|
|
@ -1,8 +1,3 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import DeviceRegionList from "~/components/DeviceRegion/List";
|
||||
|
||||
function DeviceRegionPage(props) {
|
||||
return <DeviceRegionList {...props} type="gfd" />;
|
||||
export default function DeviceRegion(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
||||
export default Permission(DeviceRegionPage);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
import SensorDeviceAdd from "~/components/SensorDevice/Add";
|
||||
|
||||
function Add(props) {
|
||||
return <SensorDeviceAdd {...props} />;
|
||||
}
|
||||
|
||||
export default Add;
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import SensorDeviceList from "~/components/SensorDevice/List";
|
||||
import { NS_SENSORDEVICE, NS_SENSORTYPE } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
return <SensorDeviceList {...props} type="gfd" />;
|
||||
}
|
||||
|
||||
export default Connect([NS_SENSORDEVICE, NS_SENSORTYPE], true)(Permission(List));
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import SensorDeviceView from "~/components/SensorDevice/View";
|
||||
|
||||
function View(props) {
|
||||
return <SensorDeviceView {...props} />;
|
||||
}
|
||||
|
||||
export default View;
|
||||
|
|
@ -1,8 +1,3 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import SensorDeviceList from "~/components/SensorDevice/List";
|
||||
|
||||
function SensorDevicePage(props) {
|
||||
return <SensorDeviceList {...props} type="gfd" />;
|
||||
export default function SensorDevice(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
||||
export default Permission(SensorDevicePage);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
import SensorTypeAdd from "~/components/SensorType/Add";
|
||||
|
||||
function Add(props) {
|
||||
return <SensorTypeAdd {...props} />;
|
||||
}
|
||||
|
||||
export default Add;
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import SensorTypeList from "~/components/SensorType/List";
|
||||
import { NS_SENSORTYPE } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
return <SensorTypeList {...props} type="gfd" />;
|
||||
}
|
||||
|
||||
export default Connect([NS_SENSORTYPE], true)(Permission(List));
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
import SensorTypeView from "~/components/SensorType/View";
|
||||
|
||||
function View(props) {
|
||||
return <SensorTypeView {...props} />;
|
||||
}
|
||||
|
||||
export default View;
|
||||
|
|
@ -1,8 +1,3 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import SensorTypeList from "~/components/SensorType/List";
|
||||
|
||||
function SensorTypePage(props) {
|
||||
return <SensorTypeList {...props} type="gfd" />;
|
||||
export default function SensorType(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
||||
export default Permission(SensorTypePage);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import ThresholdList from "~/components/ThresholdAlarmInfo/List";
|
||||
import { NS_ALARMRECORD, NS_THRESHOLDALARMINFO } from "~/enumerate/namespace";
|
||||
|
||||
function List(props) {
|
||||
return <ThresholdList {...props} type="gfd" />;
|
||||
}
|
||||
|
||||
export default Connect([NS_THRESHOLDALARMINFO, NS_ALARMRECORD], true)(Permission(List));
|
||||
|
|
@ -1,8 +1,3 @@
|
|||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
||||
import ThresholdList from "~/components/AlarmInfo/ThresholdList";
|
||||
|
||||
function ThresholdAlarmInfoPage(props) {
|
||||
return <ThresholdList {...props} type="gfd" />;
|
||||
export default function ThresholdAlarmInfo(props) {
|
||||
return props.children;
|
||||
}
|
||||
|
||||
export default Permission(ThresholdAlarmInfoPage);
|
||||
|
|
|
|||
|
|
@ -1,23 +1,8 @@
|
|||
export { default as Container } from "./Container";
|
||||
export { default as BranchCompany } from "./Container/BranchCompany";
|
||||
export { default as BranchCompanyAlarmAssign } from "./Container/BranchCompany/AlarmAssign";
|
||||
|
||||
export { default as BranchCompanyAlarmRecord } from "./Container/BranchCompany/AlarmRecord";
|
||||
export { default as BranchCompanyDcsAlarmInfo } from "./Container/BranchCompany/DcsAlarmInfo";
|
||||
export { default as BranchCompanyDeviceRegion } from "./Container/BranchCompany/DeviceRegion";
|
||||
export { default as BranchCompanySensorDevice } from "./Container/BranchCompany/SensorDevice";
|
||||
export { default as BranchCompanySensorType } from "./Container/BranchCompany/SensorType";
|
||||
export { default as BranchCompanyThresholdAlarmInfo } from "./Container/BranchCompany/ThresholdAlarmInfo";
|
||||
export { default as Supervision } from "./Container/Supervision";
|
||||
|
||||
export { default as SupervisionAlarmAssign } from "./Container/Supervision/AlarmAssign";
|
||||
export { default as SupervisionAlarmRecord } from "./Container/Supervision/AlarmRecord";
|
||||
export { default as SupervisionDcsAlarmInfo } from "./Container/Supervision/DcsAlarmInfo";
|
||||
export { default as SupervisionDeviceRegion } from "./Container/Supervision/DeviceRegion";
|
||||
export { default as SupervisionSensorDevice } from "./Container/Supervision/SensorDevice";
|
||||
export { default as SupervisionSensorType } from "./Container/Supervision/SensorType";
|
||||
export { default as SupervisionThresholdAlarmInfo } from "./Container/Supervision/ThresholdAlarmInfo";
|
||||
|
||||
export default function HomePage() {
|
||||
return <div style={{ padding: 24 }}>物联网消防报警模块前端骨架已完成</div>;
|
||||
export default function () {
|
||||
return (
|
||||
<h1>
|
||||
底座微应用模板,技术文档:
|
||||
<a rel="noreferrer noopener" target="_blank" href="https://www.yuque.com/buhangjiecheshen-ymbtb/qc0093/gxdun1dphetcurko">https://www.yuque.com/buhangjiecheshen-ymbtb/qc0093/gxdun1dphetcurko</a>
|
||||
</h1>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue