修复页面结构,bug

main
wangyan 2026-04-07 16:37:41 +08:00
parent 72f65bc850
commit 54b2201fd2
78 changed files with 1072 additions and 742 deletions

View File

@ -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: {
// 应用后端分支名称,部署上线需要

View File

@ -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");

View File

@ -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}",
// );

View File

@ -1,6 +0,0 @@
export * from "./AlarmDispose";
export * from "./AlarmInfo";
export * from "./AlarmRecord";
export * from "./DeviceRegion";
export * from "./SensorDevice";
export * from "./SensorType";

View File

@ -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;

View File

@ -0,0 +1,3 @@
export default function AlarmAssign(props) {
return props.children;
}

View File

@ -1,2 +0,0 @@
export { default as AssignList } from "./AssignList";
export { default as AssignModal } from "./AssignModal";

View File

@ -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));

View File

@ -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));

View File

@ -1,2 +0,0 @@
export { default as DcsList } from "./DcsList";
export { default as ThresholdList } from "./ThresholdList";

View File

@ -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;

View File

@ -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>

View File

@ -1,3 +1,3 @@
import AlarmRecordList from "~/components/AlarmRecord/List";
export default AlarmRecordList;
export default function AlarmRecord(props) {
return props.children;
}

View File

@ -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;

View File

@ -0,0 +1,3 @@
export default function DcsAlarmInfo(props) {
return props.children;
}

View File

@ -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
? (

View File

@ -41,7 +41,7 @@ function ManagerModal(props) {
<Modal
destroyOnClose
open={props.open}
title="负责人配置"
title="设置负责人"
onCancel={handleCancel}
onOk={form.submit}
confirmLoading={props.loading}

View File

@ -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;

View File

@ -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;
}

View File

@ -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 => (

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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 || "-" },

View File

@ -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;
}

View File

@ -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}

View File

@ -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;

View File

@ -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;

View File

@ -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;
}

View File

@ -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;

View File

@ -0,0 +1,3 @@
export default function ThresholdAlarmInfo(props) {
return props.children;
}

View File

@ -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 {};

View File

@ -1,3 +1,8 @@
/**
* 全局上下文定义
*/
import React from "react";
export const InjectContext = React.createContext(null);
// 获取antd全局静态方法
export const InjectContext = React.createContext({});

View File

@ -1,3 +0,0 @@
export * from "./constant";
export * from "./context";
export * from "./namespace";

View File

@ -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");

View File

@ -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();

View File

@ -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));

View File

@ -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;

View File

@ -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));

View File

@ -0,0 +1,7 @@
import AlarmRecordView from "~/components/AlarmRecord/View";
function View(props) {
return <AlarmRecordView {...props} />;
}
export default View;

View File

@ -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;

View File

@ -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));

View File

@ -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;

View File

@ -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));

View File

@ -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;

View File

@ -0,0 +1,7 @@
import SensorDeviceAdd from "~/components/SensorDevice/Add";
function Add(props) {
return <SensorDeviceAdd {...props} />;
}
export default Add;

View File

@ -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));

View File

@ -0,0 +1,7 @@
import SensorDeviceView from "~/components/SensorDevice/View";
function View(props) {
return <SensorDeviceView {...props} />;
}
export default View;

View File

@ -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;

View File

@ -0,0 +1,7 @@
import SensorTypeAdd from "~/components/SensorType/Add";
function Add(props) {
return <SensorTypeAdd {...props} />;
}
export default Add;

View File

@ -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));

View File

@ -0,0 +1,7 @@
import SensorTypeView from "~/components/SensorType/View";
function View(props) {
return <SensorTypeView {...props} />;
}
export default View;

View File

@ -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;

View File

@ -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));

View File

@ -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;

View File

@ -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));

View File

@ -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);

View File

@ -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));

View File

@ -0,0 +1,7 @@
import AlarmRecordView from "~/components/AlarmRecord/View";
function View(props) {
return <AlarmRecordView {...props} />;
}
export default View;

View File

@ -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);

View File

@ -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));

View File

@ -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);

View File

@ -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));

View File

@ -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);

View File

@ -0,0 +1,7 @@
import SensorDeviceAdd from "~/components/SensorDevice/Add";
function Add(props) {
return <SensorDeviceAdd {...props} />;
}
export default Add;

View File

@ -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));

View File

@ -0,0 +1,7 @@
import SensorDeviceView from "~/components/SensorDevice/View";
function View(props) {
return <SensorDeviceView {...props} />;
}
export default View;

View File

@ -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);

View File

@ -0,0 +1,7 @@
import SensorTypeAdd from "~/components/SensorType/Add";
function Add(props) {
return <SensorTypeAdd {...props} />;
}
export default Add;

View File

@ -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));

View File

@ -0,0 +1,7 @@
import SensorTypeView from "~/components/SensorType/View";
function View(props) {
return <SensorTypeView {...props} />;
}
export default View;

View File

@ -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);

View File

@ -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));

View File

@ -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);

View File

@ -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>
);
}