修复页面结构,bug
parent
72f65bc850
commit
54b2201fd2
|
|
@ -9,7 +9,9 @@ module.exports = {
|
||||||
// 应用后端分支名称,部署上线需要
|
// 应用后端分支名称,部署上线需要
|
||||||
javaGitBranch: "<branch-name>",
|
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: {
|
production: {
|
||||||
// 应用后端分支名称,部署上线需要
|
// 应用后端分支名称,部署上线需要
|
||||||
|
|
|
||||||
|
|
@ -3,4 +3,3 @@ import { declareRequest } from "@cqsjjb/jjb-dva-runtime";
|
||||||
export const alarmAssignList = declareRequest("alarmDisposeLoading", "Post > @/iotalarm/alarmDispose/assignList");
|
export const alarmAssignList = declareRequest("alarmDisposeLoading", "Post > @/iotalarm/alarmDispose/assignList");
|
||||||
export const alarmAssign = declareRequest("alarmDisposeLoading", "Post > @/iotalarm/alarmDispose/assign");
|
export const alarmAssign = declareRequest("alarmDisposeLoading", "Post > @/iotalarm/alarmDispose/assign");
|
||||||
export const alarmBatchAssign = declareRequest("alarmDisposeLoading", "Post > @/iotalarm/alarmDispose/batchAssign");
|
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 { Button, Form, message, Space } from "antd";
|
||||||
import { useEffect, useState } from "react";
|
import { useState } from "react";
|
||||||
import Page from "zy-react-library/components/Page";
|
import Page from "zy-react-library/components/Page";
|
||||||
import Search from "zy-react-library/components/Search";
|
import Search from "zy-react-library/components/Search";
|
||||||
import Table from "zy-react-library/components/Table";
|
import Table from "zy-react-library/components/Table";
|
||||||
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||||
import useTable from "zy-react-library/hooks/useTable";
|
import useTable from "zy-react-library/hooks/useTable";
|
||||||
import { getLabelName } from "zy-react-library/utils";
|
import AlarmRecordView from "~/components/AlarmRecord/View";
|
||||||
import AssignModal from "~/components/AlarmDispose/AssignModal";
|
import AssignModal from "./components/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";
|
|
||||||
|
|
||||||
function AssignList(props) {
|
function AssignList(props) {
|
||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
const [modalOpen, setModalOpen] = useState(false);
|
const [modalOpen, setModalOpen] = useState(false);
|
||||||
|
const [detailOpen, setDetailOpen] = useState(false);
|
||||||
|
const [detailId, setDetailId] = useState("");
|
||||||
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
|
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
|
||||||
const [currentAlarmId, setCurrentAlarmId] = useState(null);
|
const [currentAlarmId, setCurrentAlarmId] = useState(null);
|
||||||
const [isBatch, setIsBatch] = useState(false);
|
const [isBatch, setIsBatch] = useState(false);
|
||||||
const [sensorNameMap, setSensorNameMap] = useState({});
|
|
||||||
|
|
||||||
const { tableProps, getData } = useTable(props["alarmAssignList"], { form });
|
const { tableProps, getData } = useTable(props["alarmAssignList"], { form });
|
||||||
|
|
||||||
useEffect(() => {
|
const pageType = props.type || "fgs";
|
||||||
props.sensorDeviceList({ pageIndex: 1, pageSize: 500 }).then((res) => {
|
const assignPermission = `${pageType}-iotalarm-alarm-assign`;
|
||||||
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 handleBatchAssign = () => {
|
const handleBatchAssign = () => {
|
||||||
if (selectedRowKeys.length === 0) {
|
if (selectedRowKeys.length === 0) {
|
||||||
|
|
@ -56,10 +43,13 @@ function AssignList(props) {
|
||||||
onChange: setSelectedRowKeys,
|
onChange: setSelectedRowKeys,
|
||||||
};
|
};
|
||||||
|
|
||||||
const dataSource = (tableProps.dataSource || []).map(item => ({
|
const handleSearch = (values) => {
|
||||||
...item,
|
getData({
|
||||||
sensorName: sensorNameMap[item.sensorCode] || "-",
|
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) => {
|
const renderCurrentValue = (_, record) => {
|
||||||
if (record.currentValue == null || record.currentValue === "") {
|
if (record.currentValue == null || record.currentValue === "") {
|
||||||
|
|
@ -74,28 +64,10 @@ function AssignList(props) {
|
||||||
<Page isShowAllAction={false}>
|
<Page isShowAllAction={false}>
|
||||||
<Search
|
<Search
|
||||||
form={form}
|
form={form}
|
||||||
onFinish={getData}
|
onFinish={handleSearch}
|
||||||
options={[
|
options={[
|
||||||
{ name: "alarmNo", label: "报警编号" },
|
{ name: "sensorName", label: "传感器名称" },
|
||||||
{ name: "sensorCode", label: "传感器编码" },
|
{ name: "alarmTime", label: "报警时间", render: FORM_ITEM_RENDER_ENUM.DATE_RANGE },
|
||||||
{
|
|
||||||
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,
|
|
||||||
},
|
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
<Table
|
<Table
|
||||||
|
|
@ -105,55 +77,53 @@ function AssignList(props) {
|
||||||
<Space>
|
<Space>
|
||||||
{props.permission(assignPermission) && (
|
{props.permission(assignPermission) && (
|
||||||
<Button type="primary" onClick={handleBatchAssign}>
|
<Button type="primary" onClick={handleBatchAssign}>
|
||||||
批量分配
|
批量处置
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
</Space>
|
</Space>
|
||||||
)}
|
)}
|
||||||
columns={[
|
columns={[
|
||||||
{ title: "报警编号", dataIndex: "alarmNo" },
|
|
||||||
{
|
|
||||||
title: "报警来源",
|
|
||||||
dataIndex: "alarmSource",
|
|
||||||
render: value => getLabelName({ status: value, list: ALARM_SOURCE_OPTIONS }) || value || "-",
|
|
||||||
},
|
|
||||||
{ title: "传感器编码", dataIndex: "sensorCode" },
|
{ title: "传感器编码", dataIndex: "sensorCode" },
|
||||||
{ title: "传感器名称", dataIndex: "sensorName", ellipsis: true },
|
{ 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: "alarmTime", width: 180 },
|
||||||
|
{ title: "报警描述", dataIndex: "alarmDesc", ellipsis: true },
|
||||||
{ title: "告警值", render: renderCurrentValue },
|
{ title: "告警值", render: renderCurrentValue },
|
||||||
{
|
{
|
||||||
title: "操作",
|
title: "操作",
|
||||||
width: 120,
|
width: 180,
|
||||||
render: (_, record) => (
|
render: (_, record) => (
|
||||||
<Space>
|
<Space>
|
||||||
{props.permission(assignPermission) && (
|
{props.permission(assignPermission) && (
|
||||||
<Button type="link" onClick={() => handleSingleAssign(record)}>
|
<Button type="link" onClick={() => handleSingleAssign(record)}>
|
||||||
分配
|
处置分配
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => {
|
||||||
|
setDetailId(record.id);
|
||||||
|
setDetailOpen(true);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
查看
|
||||||
|
</Button>
|
||||||
</Space>
|
</Space>
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
{...tableProps}
|
{...tableProps}
|
||||||
dataSource={dataSource}
|
|
||||||
/>
|
/>
|
||||||
|
{detailOpen && (
|
||||||
|
<AlarmRecordView
|
||||||
|
open={detailOpen}
|
||||||
|
currentId={detailId}
|
||||||
|
alarmRecordInfo={props.alarmRecordInfo}
|
||||||
|
onCancel={() => {
|
||||||
|
setDetailOpen(false);
|
||||||
|
setDetailId("");
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
{modalOpen && (
|
{modalOpen && (
|
||||||
<AssignModal
|
<AssignModal
|
||||||
open={modalOpen}
|
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 { Button, Form, Space } from "antd";
|
||||||
import { useEffect, useState } from "react";
|
import { useState } from "react";
|
||||||
import Page from "zy-react-library/components/Page";
|
import Page from "zy-react-library/components/Page";
|
||||||
import Search from "zy-react-library/components/Search";
|
import Search from "zy-react-library/components/Search";
|
||||||
import Table from "zy-react-library/components/Table";
|
import Table from "zy-react-library/components/Table";
|
||||||
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||||
import useTable from "zy-react-library/hooks/useTable";
|
import useTable from "zy-react-library/hooks/useTable";
|
||||||
import { getLabelName } from "zy-react-library/utils";
|
import { ALARM_STATUS_OPTIONS } from "~/enumerate/constant";
|
||||||
import DetailModal from "~/components/AlarmRecord/DetailModal";
|
import AlarmRecordView from "../View";
|
||||||
import { ALARM_SOURCE_OPTIONS, ALARM_STATUS_OPTIONS } from "~/enumerate/constant";
|
|
||||||
import { NS_ALARMRECORD, NS_SENSORDEVICE } from "~/enumerate/namespace";
|
|
||||||
|
|
||||||
function AlarmRecordList(props) {
|
function AlarmRecordList(props) {
|
||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
const [detailOpen, setDetailOpen] = useState(false);
|
const [detailOpen, setDetailOpen] = useState(false);
|
||||||
const [currentId, setCurrentId] = useState("");
|
const [currentId, setCurrentId] = useState("");
|
||||||
const [sensorNameMap, setSensorNameMap] = useState({});
|
|
||||||
const { tableProps, getData } = useTable(props["alarmRecordList"], { form });
|
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) => {
|
const handleViewDetail = (record) => {
|
||||||
setCurrentId(record.id);
|
setCurrentId(record.id);
|
||||||
setDetailOpen(true);
|
setDetailOpen(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
const dataSource = (tableProps.dataSource || []).map(item => ({
|
const handleSearch = (values) => {
|
||||||
...item,
|
getData({
|
||||||
sensorName: sensorNameMap[item.sensorCode] || "-",
|
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) => {
|
const renderCurrentValue = (_, record) => {
|
||||||
if (record.currentValue == null || record.currentValue === "") {
|
if (record.currentValue == null || record.currentValue === "") {
|
||||||
|
|
@ -49,47 +40,45 @@ function AlarmRecordList(props) {
|
||||||
return `${record.currentValue}${unit}${suffix}`;
|
return `${record.currentValue}${unit}${suffix}`;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const renderAlarmStatus = (_, record) => {
|
||||||
|
if (record.status === 30) {
|
||||||
|
return "已消警";
|
||||||
|
}
|
||||||
|
if (record.status === 40) {
|
||||||
|
return "误报";
|
||||||
|
}
|
||||||
|
return "报警中";
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Page isShowAllAction={false}>
|
<Page isShowAllAction={false}>
|
||||||
<Search
|
<Search
|
||||||
form={form}
|
form={form}
|
||||||
onFinish={getData}
|
onFinish={handleSearch}
|
||||||
options={[
|
options={[
|
||||||
{ name: "alarmNo", label: "报警编号" },
|
{ name: "sensorName", label: "传感器名称" },
|
||||||
{ name: "sensorCode", label: "传感器编码" },
|
{ name: "disposeUserName", label: "处置人" },
|
||||||
{
|
|
||||||
name: "alarmSource",
|
|
||||||
label: "报警来源",
|
|
||||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
|
||||||
items: ALARM_SOURCE_OPTIONS,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "status",
|
name: "status",
|
||||||
label: "状态",
|
label: "报警状态",
|
||||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||||
items: ALARM_STATUS_OPTIONS,
|
items: ALARM_STATUS_OPTIONS,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "alarmTimeStart",
|
name: "alarmTime",
|
||||||
label: "开始时间",
|
label: "报警时间",
|
||||||
render: FORM_ITEM_RENDER_ENUM.DATE,
|
render: FORM_ITEM_RENDER_ENUM.DATE_RANGE,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "alarmTimeEnd",
|
name: "disposeTime",
|
||||||
label: "结束时间",
|
label: "处置时间",
|
||||||
render: FORM_ITEM_RENDER_ENUM.DATE,
|
render: FORM_ITEM_RENDER_ENUM.DATE_RANGE,
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
<Table
|
<Table
|
||||||
rowKey="id"
|
rowKey="id"
|
||||||
columns={[
|
columns={[
|
||||||
{ title: "报警编号", dataIndex: "alarmNo" },
|
|
||||||
{
|
|
||||||
title: "报警来源",
|
|
||||||
dataIndex: "alarmSource",
|
|
||||||
render: value => getLabelName({ status: value, list: ALARM_SOURCE_OPTIONS }) || value || "-",
|
|
||||||
},
|
|
||||||
{ title: "传感器编码", dataIndex: "sensorCode" },
|
{ title: "传感器编码", dataIndex: "sensorCode" },
|
||||||
{ title: "传感器名称", dataIndex: "sensorName" },
|
{ title: "传感器名称", dataIndex: "sensorName" },
|
||||||
{ title: "报警时间", dataIndex: "alarmTime" },
|
{ title: "报警时间", dataIndex: "alarmTime" },
|
||||||
|
|
@ -97,17 +86,15 @@ function AlarmRecordList(props) {
|
||||||
{ title: "告警值", render: renderCurrentValue },
|
{ title: "告警值", render: renderCurrentValue },
|
||||||
{ title: "报警级别", dataIndex: "alarmLevel" },
|
{ title: "报警级别", dataIndex: "alarmLevel" },
|
||||||
{ title: "报警类型", dataIndex: "alarmType" },
|
{ title: "报警类型", dataIndex: "alarmType" },
|
||||||
{
|
|
||||||
title: "状态",
|
|
||||||
dataIndex: "status",
|
|
||||||
render: value => getLabelName({ status: value, list: ALARM_STATUS_OPTIONS }) || value || "-",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
title: "处置人",
|
title: "处置人",
|
||||||
render: (_, record) => record.disposeUserName || record.disposeUserId || "-",
|
dataIndex: "disposeUserName",
|
||||||
},
|
},
|
||||||
{ title: "处置时间", dataIndex: "disposeTime" },
|
{ title: "处置时间", dataIndex: "disposeTime" },
|
||||||
{ title: "设备来源描述", dataIndex: "deviceSourceDesc", ellipsis: true },
|
{
|
||||||
|
title: "报警状态",
|
||||||
|
render: renderAlarmStatus,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: "操作",
|
title: "操作",
|
||||||
width: 100,
|
width: 100,
|
||||||
|
|
@ -117,21 +104,19 @@ function AlarmRecordList(props) {
|
||||||
type="link"
|
type="link"
|
||||||
onClick={() => handleViewDetail(record)}
|
onClick={() => handleViewDetail(record)}
|
||||||
>
|
>
|
||||||
详情
|
查看
|
||||||
</Button>
|
</Button>
|
||||||
</Space>
|
</Space>
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
{...tableProps}
|
{...tableProps}
|
||||||
dataSource={dataSource}
|
|
||||||
/>
|
/>
|
||||||
{detailOpen && (
|
{detailOpen && (
|
||||||
<DetailModal
|
<AlarmRecordView
|
||||||
open={detailOpen}
|
open={detailOpen}
|
||||||
currentId={currentId}
|
currentId={currentId}
|
||||||
alarmRecordInfo={props.alarmRecordInfo}
|
alarmRecordInfo={props.alarmRecordInfo}
|
||||||
sensorNameMap={sensorNameMap}
|
|
||||||
onCancel={() => {
|
onCancel={() => {
|
||||||
setDetailOpen(false);
|
setDetailOpen(false);
|
||||||
setCurrentId("");
|
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
|
<Modal
|
||||||
destroyOnClose
|
destroyOnClose
|
||||||
open={props.open}
|
open={props.open}
|
||||||
title="报警详情"
|
title="查看"
|
||||||
onCancel={props.onCancel}
|
onCancel={props.onCancel}
|
||||||
footer={null}
|
footer={null}
|
||||||
width={720}
|
width={720}
|
||||||
|
|
@ -42,9 +42,7 @@ function DetailModal(props) {
|
||||||
{getLabelName({ status: detail.alarmSource, list: ALARM_SOURCE_OPTIONS }) || detail.alarmSource || "-"}
|
{getLabelName({ status: detail.alarmSource, list: ALARM_SOURCE_OPTIONS }) || detail.alarmSource || "-"}
|
||||||
</Descriptions.Item>
|
</Descriptions.Item>
|
||||||
<Descriptions.Item label="传感器编码">{detail.sensorCode || "-"}</Descriptions.Item>
|
<Descriptions.Item label="传感器编码">{detail.sensorCode || "-"}</Descriptions.Item>
|
||||||
<Descriptions.Item label="传感器名称">
|
<Descriptions.Item label="传感器名称">{detail.sensorName || "-"}</Descriptions.Item>
|
||||||
{props.sensorNameMap?.[detail.sensorCode] || detail.sensorName || "-"}
|
|
||||||
</Descriptions.Item>
|
|
||||||
<Descriptions.Item label="报警时间">{detail.alarmTime || "-"}</Descriptions.Item>
|
<Descriptions.Item label="报警时间">{detail.alarmTime || "-"}</Descriptions.Item>
|
||||||
<Descriptions.Item label="报警级别">{detail.alarmLevel || "-"}</Descriptions.Item>
|
<Descriptions.Item label="报警级别">{detail.alarmLevel || "-"}</Descriptions.Item>
|
||||||
<Descriptions.Item label="报警类型">{detail.alarmType || "-"}</Descriptions.Item>
|
<Descriptions.Item label="报警类型">{detail.alarmType || "-"}</Descriptions.Item>
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
import AlarmRecordList from "~/components/AlarmRecord/List";
|
export default function AlarmRecord(props) {
|
||||||
|
return props.children;
|
||||||
export default AlarmRecordList;
|
}
|
||||||
|
|
|
||||||
|
|
@ -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]);
|
}, [initialSensorIds, selectedSensorIds]);
|
||||||
|
|
||||||
|
const fireRegionName = detail.fireRegionName || props.currentRecord?.fireRegionName || "-";
|
||||||
|
const fireRegionCode = detail.fireRegionCode || props.currentRecord?.fireRegionCode || "-";
|
||||||
|
|
||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
try {
|
try {
|
||||||
|
|
@ -60,7 +63,7 @@ function BindSensorModal(props) {
|
||||||
for (const sensorId of changes.removeIds) {
|
for (const sensorId of changes.removeIds) {
|
||||||
await props.deviceRegionUnbindSensor({ sensorId });
|
await props.deviceRegionUnbindSensor({ sensorId });
|
||||||
}
|
}
|
||||||
message.success("传感器绑定已更新");
|
message.success("关联传感器已更新");
|
||||||
props.onCancel();
|
props.onCancel();
|
||||||
props.getData();
|
props.getData();
|
||||||
}
|
}
|
||||||
|
|
@ -73,7 +76,7 @@ function BindSensorModal(props) {
|
||||||
<Modal
|
<Modal
|
||||||
destroyOnClose
|
destroyOnClose
|
||||||
open={props.open}
|
open={props.open}
|
||||||
title="绑定传感器"
|
title="关联传感器"
|
||||||
onCancel={props.onCancel}
|
onCancel={props.onCancel}
|
||||||
onOk={handleSubmit}
|
onOk={handleSubmit}
|
||||||
confirmLoading={loading || props.loading}
|
confirmLoading={loading || props.loading}
|
||||||
|
|
@ -81,11 +84,11 @@ function BindSensorModal(props) {
|
||||||
>
|
>
|
||||||
<Typography.Paragraph style={{ marginBottom: 16 }}>
|
<Typography.Paragraph style={{ marginBottom: 16 }}>
|
||||||
当前区域:
|
当前区域:
|
||||||
{detail.fireRegionName || "-"}
|
{fireRegionName}
|
||||||
{" "}
|
{" "}
|
||||||
/
|
/
|
||||||
{" "}
|
{" "}
|
||||||
{detail.fireRegionCode || "-"}
|
{fireRegionCode}
|
||||||
</Typography.Paragraph>
|
</Typography.Paragraph>
|
||||||
{options.length
|
{options.length
|
||||||
? (
|
? (
|
||||||
|
|
@ -41,7 +41,7 @@ function ManagerModal(props) {
|
||||||
<Modal
|
<Modal
|
||||||
destroyOnClose
|
destroyOnClose
|
||||||
open={props.open}
|
open={props.open}
|
||||||
title="负责人配置"
|
title="设置负责人"
|
||||||
onCancel={handleCancel}
|
onCancel={handleCancel}
|
||||||
onOk={form.submit}
|
onOk={form.submit}
|
||||||
confirmLoading={props.loading}
|
confirmLoading={props.loading}
|
||||||
|
|
@ -1,181 +1,140 @@
|
||||||
import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
|
import { Button, Descriptions, Form, Modal, Space } from "antd";
|
||||||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
|
||||||
import { Button, Form, Input, message, Modal, Select, Space } from "antd";
|
|
||||||
import { useEffect, useMemo, useState } from "react";
|
import { useEffect, useMemo, useState } from "react";
|
||||||
import AddIcon from "zy-react-library/components/Icon/AddIcon";
|
|
||||||
import Page from "zy-react-library/components/Page";
|
import Page from "zy-react-library/components/Page";
|
||||||
import Search from "zy-react-library/components/Search";
|
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 Table from "zy-react-library/components/Table";
|
||||||
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||||
import useTable from "zy-react-library/hooks/useTable";
|
import useTable from "zy-react-library/hooks/useTable";
|
||||||
import { getLabelName } from "zy-react-library/utils";
|
import BindSensorModal from "./components/BindSensorModal";
|
||||||
import BindSensorModal from "~/components/DeviceRegion/BindSensorModal";
|
import ManagerModal from "./components/ManagerModal";
|
||||||
import ManagerModal from "~/components/DeviceRegion/ManagerModal";
|
|
||||||
import { ENABLE_STATUS_OPTIONS } from "~/enumerate/constant";
|
|
||||||
import { NS_DEVICEREGION, NS_SENSORDEVICE } from "~/enumerate/namespace";
|
|
||||||
|
|
||||||
function DeviceRegionList(props) {
|
function DeviceRegionList(props) {
|
||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
const [configForm] = Form.useForm();
|
|
||||||
const [configOpen, setConfigOpen] = useState(false);
|
|
||||||
const [managerOpen, setManagerOpen] = useState(false);
|
const [managerOpen, setManagerOpen] = useState(false);
|
||||||
const [bindOpen, setBindOpen] = useState(false);
|
const [bindOpen, setBindOpen] = useState(false);
|
||||||
|
const [viewOpen, setViewOpen] = useState(false);
|
||||||
const [currentId, setCurrentId] = useState("");
|
const [currentId, setCurrentId] = useState("");
|
||||||
|
const [viewRecord, setViewRecord] = useState(null);
|
||||||
|
const [currentRecord, setCurrentRecord] = useState(null);
|
||||||
const [fireRegionOptions, setFireRegionOptions] = useState([]);
|
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 loadFireRegionOptions = async () => {
|
||||||
const res = await props["deviceRegionFireRegionList"]();
|
const res = await props.deviceRegionFireRegionList();
|
||||||
if (res?.success) {
|
if (!res?.success) {
|
||||||
setFireRegionOptions(res.data || []);
|
return;
|
||||||
}
|
}
|
||||||
|
setFireRegionOptions(res.data || []);
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
loadFireRegionOptions();
|
loadFireRegionOptions();
|
||||||
}, [props.deviceRegionFireRegionList]);
|
}, [props.deviceRegionFireRegionList]);
|
||||||
|
|
||||||
const fireRegionMap = useMemo(
|
const dataSource = useMemo(() => (tableProps.dataSource || []).map(item => ({
|
||||||
() => Object.fromEntries(fireRegionOptions.map(item => [item.id, item])),
|
|
||||||
[fireRegionOptions],
|
|
||||||
);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (!configOpen) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!currentId) {
|
|
||||||
configForm.resetFields();
|
|
||||||
configForm.setFieldsValue({ status: 1 });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
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();
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleSearch = (values) => {
|
|
||||||
getData(values);
|
|
||||||
};
|
|
||||||
|
|
||||||
const dataSource = (tableProps.dataSource || []).map((item) => {
|
|
||||||
const fireRegion = fireRegionMap[item.fireRegionId] || {};
|
|
||||||
return {
|
|
||||||
...item,
|
...item,
|
||||||
fireRegionName: fireRegion.fireRegionName || item.fireRegionName || "-",
|
departmentName: item.departmentName || "-",
|
||||||
fireRegionCode: fireRegion.fireRegionCode || item.fireRegionCode || "-",
|
managerName: item.managerName || "-",
|
||||||
deptName: item.deptName || item.departmentName || fireRegion.departmentName || item.departmentId || "-",
|
bindSensorCount: item.bindSensorCount ?? 0,
|
||||||
managerName: item.managerName || item.managerId || "-",
|
})), [tableProps.dataSource]);
|
||||||
bindSensorCount: item.bindSensorCount ?? item.boundSensors?.length ?? 0,
|
|
||||||
};
|
const ensureConfigId = async (record) => {
|
||||||
|
if (record.id) {
|
||||||
|
return record.id;
|
||||||
|
}
|
||||||
|
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("区域配置创建失败");
|
||||||
|
}
|
||||||
|
return config.id;
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleOpenManager = async (record) => {
|
||||||
|
const configId = await ensureConfigId(record);
|
||||||
|
setCurrentId(configId);
|
||||||
|
setCurrentRecord(record);
|
||||||
|
setManagerOpen(true);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleOpenBind = async (record) => {
|
||||||
|
const configId = await ensureConfigId(record);
|
||||||
|
setCurrentId(configId);
|
||||||
|
setCurrentRecord(record);
|
||||||
|
setBindOpen(true);
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Page isShowAllAction={false}>
|
<Page isShowAllAction={false}>
|
||||||
<Search
|
<Search
|
||||||
form={form}
|
form={form}
|
||||||
onFinish={handleSearch}
|
onFinish={getData}
|
||||||
options={[
|
options={[
|
||||||
{ name: "fireRegionCode", label: "消防区域编码" },
|
|
||||||
{
|
{
|
||||||
name: "status",
|
name: "fireRegionId",
|
||||||
label: "状态",
|
label: "消防区域",
|
||||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
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
|
<Table
|
||||||
rowKey="id"
|
rowKey={record => record.id || record.fireRegionId}
|
||||||
toolBarRender={() => (
|
loading={props.deviceRegionLoading}
|
||||||
<Space>
|
|
||||||
{props.permission(editPermission) && (
|
|
||||||
<Button
|
|
||||||
type="primary"
|
|
||||||
icon={<AddIcon />}
|
|
||||||
onClick={() => {
|
|
||||||
setCurrentId("");
|
|
||||||
setConfigOpen(true);
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
新增
|
|
||||||
</Button>
|
|
||||||
)}
|
|
||||||
</Space>
|
|
||||||
)}
|
|
||||||
columns={[
|
columns={[
|
||||||
{ title: "消防区域名称", dataIndex: "fireRegionName" },
|
{ title: "消防区域", dataIndex: "fireRegionName" },
|
||||||
{ title: "消防区域编码", dataIndex: "fireRegionCode" },
|
{ title: "消防区域编码", dataIndex: "fireRegionCode" },
|
||||||
{ title: "负责部门", dataIndex: "deptName" },
|
{ title: "负责部门", dataIndex: "departmentName" },
|
||||||
{ title: "负责人", dataIndex: "managerName" },
|
{ title: "负责人", dataIndex: "managerName" },
|
||||||
{ title: "已绑定传感器", dataIndex: "bindSensorCount" },
|
{ title: "关联传感器数", dataIndex: "bindSensorCount" },
|
||||||
{
|
|
||||||
title: "状态",
|
|
||||||
dataIndex: "status",
|
|
||||||
render: value => getLabelName({ status: value, list: ENABLE_STATUS_OPTIONS }) || value || "-",
|
|
||||||
},
|
|
||||||
{ title: "备注", dataIndex: "remarks", ellipsis: true },
|
|
||||||
{
|
{
|
||||||
title: "操作",
|
title: "操作",
|
||||||
width: 280,
|
width: 260,
|
||||||
render: (_, record) => (
|
render: (_, record) => (
|
||||||
<Space>
|
<Space>
|
||||||
{props.permission(editPermission) && (
|
{props.permission(editPermission) && (
|
||||||
<Button
|
<Button type="link" onClick={() => handleOpenBind(record)}>
|
||||||
type="link"
|
关联传感器
|
||||||
onClick={() => {
|
|
||||||
setCurrentId(record.id);
|
|
||||||
setConfigOpen(true);
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
编辑配置
|
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
{props.permission(editPermission) && (
|
{props.permission(editPermission) && (
|
||||||
|
<Button type="link" onClick={() => handleOpenManager(record)}>
|
||||||
|
设置负责人
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
<Button
|
<Button
|
||||||
type="link"
|
type="link"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setCurrentId(record.id);
|
setViewRecord(record);
|
||||||
setManagerOpen(true);
|
setViewOpen(true);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
负责人
|
查看
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
|
||||||
{props.permission(editPermission) && (
|
|
||||||
<Button
|
|
||||||
type="link"
|
|
||||||
onClick={() => {
|
|
||||||
setCurrentId(record.id);
|
|
||||||
setBindOpen(true);
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
绑定传感器
|
|
||||||
</Button>
|
|
||||||
)}
|
|
||||||
</Space>
|
</Space>
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
|
@ -185,49 +144,22 @@ function DeviceRegionList(props) {
|
||||||
/>
|
/>
|
||||||
<Modal
|
<Modal
|
||||||
destroyOnClose
|
destroyOnClose
|
||||||
open={configOpen}
|
open={viewOpen}
|
||||||
title={currentId ? "编辑设备区域配置" : "新增设备区域配置"}
|
title="查看"
|
||||||
|
footer={null}
|
||||||
onCancel={() => {
|
onCancel={() => {
|
||||||
setConfigOpen(false);
|
setViewOpen(false);
|
||||||
setCurrentId("");
|
setViewRecord(null);
|
||||||
configForm.resetFields();
|
|
||||||
}}
|
}}
|
||||||
onOk={configForm.submit}
|
|
||||||
confirmLoading={props.deviceRegionLoading}
|
|
||||||
width={680}
|
width={680}
|
||||||
>
|
>
|
||||||
<Form form={configForm} layout="vertical" onFinish={handleConfigSubmit} initialValues={{ status: 1 }}>
|
<Descriptions bordered column={2}>
|
||||||
<Form.Item
|
<Descriptions.Item label="消防区域">{viewRecord?.fireRegionName || "-"}</Descriptions.Item>
|
||||||
label="消防区域"
|
<Descriptions.Item label="消防区域编码">{viewRecord?.fireRegionCode || "-"}</Descriptions.Item>
|
||||||
name="fireRegionId"
|
<Descriptions.Item label="负责部门">{viewRecord?.departmentName || "-"}</Descriptions.Item>
|
||||||
rules={[{ required: true, message: "请选择消防区域" }]}
|
<Descriptions.Item label="负责人">{viewRecord?.managerName || "-"}</Descriptions.Item>
|
||||||
>
|
<Descriptions.Item label="关联传感器数">{viewRecord?.bindSensorCount ?? 0}</Descriptions.Item>
|
||||||
<Select
|
</Descriptions>
|
||||||
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>
|
|
||||||
</Modal>
|
</Modal>
|
||||||
{managerOpen && (
|
{managerOpen && (
|
||||||
<ManagerModal
|
<ManagerModal
|
||||||
|
|
@ -240,6 +172,7 @@ function DeviceRegionList(props) {
|
||||||
onCancel={() => {
|
onCancel={() => {
|
||||||
setManagerOpen(false);
|
setManagerOpen(false);
|
||||||
setCurrentId("");
|
setCurrentId("");
|
||||||
|
setCurrentRecord(null);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
@ -247,6 +180,7 @@ function DeviceRegionList(props) {
|
||||||
<BindSensorModal
|
<BindSensorModal
|
||||||
open={bindOpen}
|
open={bindOpen}
|
||||||
currentId={currentId}
|
currentId={currentId}
|
||||||
|
currentRecord={currentRecord}
|
||||||
loading={props.deviceRegionLoading || props.sensorDeviceLoading}
|
loading={props.deviceRegionLoading || props.sensorDeviceLoading}
|
||||||
getData={getData}
|
getData={getData}
|
||||||
deviceRegionInfo={props.deviceRegionInfo}
|
deviceRegionInfo={props.deviceRegionInfo}
|
||||||
|
|
@ -256,6 +190,7 @@ function DeviceRegionList(props) {
|
||||||
onCancel={() => {
|
onCancel={() => {
|
||||||
setBindOpen(false);
|
setBindOpen(false);
|
||||||
setCurrentId("");
|
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 function DeviceRegion(props) {
|
||||||
export { default as List } from "./List";
|
return props.children;
|
||||||
// 默认导出 List 作为主入口组件
|
}
|
||||||
export { default } from "./List";
|
|
||||||
|
|
||||||
export { default as ManagerModal } from "./ManagerModal";
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import { DatePicker, Form, Input, InputNumber, Modal, Radio, Select } from "antd";
|
import { DatePicker, Form, Input, InputNumber, Modal, Radio, Select } from "antd";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import { useEffect } from "react";
|
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";
|
import { ENABLE_STATUS_OPTIONS, SENSOR_STATUS_OPTIONS, YES_NO_OPTIONS } from "~/enumerate/constant";
|
||||||
|
|
||||||
function SensorDeviceModal(props) {
|
function SensorDeviceModal(props) {
|
||||||
|
|
@ -15,7 +16,7 @@ function SensorDeviceModal(props) {
|
||||||
form.setFieldsValue({
|
form.setFieldsValue({
|
||||||
sensorStatus: "NORMAL",
|
sensorStatus: "NORMAL",
|
||||||
positioningFlag: 0,
|
positioningFlag: 0,
|
||||||
alarmSwitch: 1,
|
alarmSwitch: 0,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -68,7 +69,7 @@ function SensorDeviceModal(props) {
|
||||||
initialValues={{
|
initialValues={{
|
||||||
sensorStatus: "NORMAL",
|
sensorStatus: "NORMAL",
|
||||||
positioningFlag: 0,
|
positioningFlag: 0,
|
||||||
alarmSwitch: 1,
|
alarmSwitch: 0,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Form.Item
|
<Form.Item
|
||||||
|
|
@ -94,6 +95,7 @@ function SensorDeviceModal(props) {
|
||||||
allowClear
|
allowClear
|
||||||
showSearch
|
showSearch
|
||||||
optionFilterProp="label"
|
optionFilterProp="label"
|
||||||
|
disabled={!!props.currentId}
|
||||||
placeholder="请选择传感器类型"
|
placeholder="请选择传感器类型"
|
||||||
options={props.sensorTypeOptions.map(item => ({
|
options={props.sensorTypeOptions.map(item => ({
|
||||||
value: item.id,
|
value: item.id,
|
||||||
|
|
@ -104,6 +106,7 @@ function SensorDeviceModal(props) {
|
||||||
<Form.Item label="安装位置" name="installPosition">
|
<Form.Item label="安装位置" name="installPosition">
|
||||||
<Input maxLength={255} placeholder="请输入安装位置" />
|
<Input maxLength={255} placeholder="请输入安装位置" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
<Map required={false} />
|
||||||
<Form.Item label="传感器状态" name="sensorStatus">
|
<Form.Item label="传感器状态" name="sensorStatus">
|
||||||
<Radio.Group>
|
<Radio.Group>
|
||||||
{SENSOR_STATUS_OPTIONS.map(item => (
|
{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 { Button, Form, message, Modal, Space, Switch } from "antd";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import AddIcon from "zy-react-library/components/Icon/AddIcon";
|
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 { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||||
import useTable from "zy-react-library/hooks/useTable";
|
import useTable from "zy-react-library/hooks/useTable";
|
||||||
import { getLabelName } from "zy-react-library/utils";
|
import { getLabelName } from "zy-react-library/utils";
|
||||||
import SensorDeviceModal from "~/components/SensorDevice/Modal";
|
import { SENSOR_ATTR_OPTIONS, SENSOR_STATUS_OPTIONS, YES_NO_OPTIONS } from "~/enumerate/constant";
|
||||||
import RealtimeModal from "~/components/SensorDevice/RealtimeModal";
|
import SensorDeviceAdd from "../Add";
|
||||||
import ThresholdModal from "~/components/SensorDevice/ThresholdModal";
|
import PositionModal from "../components/PositionModal";
|
||||||
import { ENABLE_STATUS_OPTIONS, SENSOR_STATUS_OPTIONS, YES_NO_OPTIONS } from "~/enumerate/constant";
|
import RealtimeModal from "../components/RealtimeModal";
|
||||||
import { NS_SENSORDEVICE, NS_SENSORTYPE } from "~/enumerate/namespace";
|
import ThresholdModal from "../components/ThresholdModal";
|
||||||
|
import SensorDeviceView from "../View";
|
||||||
|
|
||||||
function SensorDeviceList(props) {
|
function SensorDeviceList(props) {
|
||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
const [modalOpen, setModalOpen] = useState(false);
|
const [modalOpen, setModalOpen] = useState(false);
|
||||||
|
const [viewOpen, setViewOpen] = useState(false);
|
||||||
|
const [positionOpen, setPositionOpen] = useState(false);
|
||||||
const [thresholdOpen, setThresholdOpen] = useState(false);
|
const [thresholdOpen, setThresholdOpen] = useState(false);
|
||||||
const [realtimeOpen, setRealtimeOpen] = useState(false);
|
const [realtimeOpen, setRealtimeOpen] = useState(false);
|
||||||
const [currentId, setCurrentId] = useState("");
|
const [currentId, setCurrentId] = useState("");
|
||||||
|
|
@ -25,7 +26,8 @@ function SensorDeviceList(props) {
|
||||||
const [sensorTypeOptions, setSensorTypeOptions] = useState([]);
|
const [sensorTypeOptions, setSensorTypeOptions] = useState([]);
|
||||||
const { tableProps, getData } = useTable(props["sensorDeviceList"], { form });
|
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 loadSensorTypeOptions = async () => {
|
||||||
const res = await props["sensorTypeList"]({
|
const res = await props["sensorTypeList"]({
|
||||||
|
|
@ -70,7 +72,6 @@ function SensorDeviceList(props) {
|
||||||
form={form}
|
form={form}
|
||||||
onFinish={getData}
|
onFinish={getData}
|
||||||
options={[
|
options={[
|
||||||
{ name: "sensorCode", label: "传感器编码" },
|
|
||||||
{ name: "sensorName", label: "传感器名称" },
|
{ name: "sensorName", label: "传感器名称" },
|
||||||
{
|
{
|
||||||
name: "sensorTypeId",
|
name: "sensorTypeId",
|
||||||
|
|
@ -79,14 +80,14 @@ function SensorDeviceList(props) {
|
||||||
items: sensorTypeSelectOptions,
|
items: sensorTypeSelectOptions,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "alarmSwitch",
|
name: "sensorStatus",
|
||||||
label: "报警开关",
|
label: "传感器状态",
|
||||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||||
items: ENABLE_STATUS_OPTIONS,
|
items: SENSOR_STATUS_OPTIONS,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "thresholdFlag",
|
name: "thresholdFlag",
|
||||||
label: "阈值配置",
|
label: "是否阈值设定",
|
||||||
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||||
items: YES_NO_OPTIONS,
|
items: YES_NO_OPTIONS,
|
||||||
},
|
},
|
||||||
|
|
@ -114,11 +115,21 @@ function SensorDeviceList(props) {
|
||||||
{ title: "传感器编码", dataIndex: "sensorCode" },
|
{ title: "传感器编码", dataIndex: "sensorCode" },
|
||||||
{ title: "传感器名称", dataIndex: "sensorName" },
|
{ title: "传感器名称", dataIndex: "sensorName" },
|
||||||
{ title: "传感器类型", dataIndex: "sensorTypeName" },
|
{ title: "传感器类型", dataIndex: "sensorTypeName" },
|
||||||
|
{
|
||||||
|
title: "传感器属性",
|
||||||
|
dataIndex: "sensorAttr",
|
||||||
|
render: value => getLabelName({ status: value, list: SENSOR_ATTR_OPTIONS }) || value || "-",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: "传感器状态",
|
title: "传感器状态",
|
||||||
dataIndex: "sensorStatus",
|
dataIndex: "sensorStatus",
|
||||||
render: value => getLabelName({ status: value, list: SENSOR_STATUS_OPTIONS }) || value || "-",
|
render: value => getLabelName({ status: value, list: SENSOR_STATUS_OPTIONS }) || value || "-",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: "是否定位",
|
||||||
|
dataIndex: "positioningFlag",
|
||||||
|
render: value => getLabelName({ status: value, list: YES_NO_OPTIONS }) || value || "-",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: "报警开关",
|
title: "报警开关",
|
||||||
dataIndex: "alarmSwitch",
|
dataIndex: "alarmSwitch",
|
||||||
|
|
@ -133,33 +144,33 @@ function SensorDeviceList(props) {
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "阈值配置",
|
title: "是否阈值设定",
|
||||||
dataIndex: "thresholdFlag",
|
dataIndex: "thresholdFlag",
|
||||||
render: value => getLabelName({ status: value, list: YES_NO_OPTIONS }) || value || "-",
|
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: "操作",
|
title: "操作",
|
||||||
width: 260,
|
width: 320,
|
||||||
render: (_, record) => (
|
render: (_, record) => (
|
||||||
<Space>
|
<Space>
|
||||||
{props.permission(editPermission) && record.sensorAttr === "NUMBER" && (
|
|
||||||
<Button
|
<Button
|
||||||
type="link"
|
type="link"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setCurrentId(record.id);
|
setCurrentRecord(record);
|
||||||
setThresholdOpen(true);
|
setViewOpen(true);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
阈值配置
|
查看
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => {
|
||||||
|
setCurrentRecord(record);
|
||||||
|
setPositionOpen(true);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
定位
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
|
||||||
<Button
|
<Button
|
||||||
type="link"
|
type="link"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
|
|
@ -167,8 +178,19 @@ function SensorDeviceList(props) {
|
||||||
setRealtimeOpen(true);
|
setRealtimeOpen(true);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
实时概览
|
实时数据
|
||||||
</Button>
|
</Button>
|
||||||
|
{props.permission(editPermission) && record.sensorAttr === "NUMBER" && record.thresholdFlag === 1 && (
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => {
|
||||||
|
setCurrentId(record.id);
|
||||||
|
setThresholdOpen(true);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
阈值设定
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
{props.permission(editPermission) && (
|
{props.permission(editPermission) && (
|
||||||
<Button
|
<Button
|
||||||
type="link"
|
type="link"
|
||||||
|
|
@ -192,7 +214,7 @@ function SensorDeviceList(props) {
|
||||||
{...tableProps}
|
{...tableProps}
|
||||||
/>
|
/>
|
||||||
{modalOpen && (
|
{modalOpen && (
|
||||||
<SensorDeviceModal
|
<SensorDeviceAdd
|
||||||
open={modalOpen}
|
open={modalOpen}
|
||||||
currentId={currentId}
|
currentId={currentId}
|
||||||
loading={props.sensorDeviceLoading}
|
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 && (
|
{realtimeOpen && (
|
||||||
<RealtimeModal
|
<RealtimeModal
|
||||||
open={realtimeOpen}
|
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: "是否定位",
|
label: "是否定位",
|
||||||
children: getLabelName({ status: record.positioningFlag, list: YES_NO_OPTIONS }) || record.positioningFlag || "-",
|
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.rangeMin ?? "-"} ~ ${record.rangeMax ?? "-"}` },
|
||||||
{ label: "单位", children: record.unitName || "-" },
|
{ label: "单位", children: record.unitName || "-" },
|
||||||
{ label: "安装位置", children: record.installPosition || "-" },
|
{ label: "安装位置", children: record.installPosition || "-" },
|
||||||
|
|
@ -1,8 +1,3 @@
|
||||||
// 导出子组件
|
export default function SensorDevice(props) {
|
||||||
export { default as List } from "./List";
|
return props.children;
|
||||||
// 默认导出 List 作为主入口
|
}
|
||||||
export { default } from "./List";
|
|
||||||
export { default as Modal } from "./Modal";
|
|
||||||
export { default as RealtimeModal } from "./RealtimeModal";
|
|
||||||
|
|
||||||
export { default as ThresholdModal } from "./ThresholdModal";
|
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,7 @@ function SensorTypeModal(props) {
|
||||||
name="sensorAttr"
|
name="sensorAttr"
|
||||||
rules={[{ required: true, message: "请选择传感器属性" }]}
|
rules={[{ required: true, message: "请选择传感器属性" }]}
|
||||||
>
|
>
|
||||||
<Radio.Group>
|
<Radio.Group disabled={!!props.currentId}>
|
||||||
{SENSOR_ATTR_OPTIONS.map(item => (
|
{SENSOR_ATTR_OPTIONS.map(item => (
|
||||||
<Radio key={item.bianma} value={item.bianma}>
|
<Radio key={item.bianma} value={item.bianma}>
|
||||||
{item.name}
|
{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 { Button, Form, message, Modal, Space } from "antd";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import AddIcon from "zy-react-library/components/Icon/AddIcon";
|
import AddIcon from "zy-react-library/components/Icon/AddIcon";
|
||||||
import Page from "zy-react-library/components/Page";
|
import Page from "zy-react-library/components/Page";
|
||||||
import Search from "zy-react-library/components/Search";
|
import Search from "zy-react-library/components/Search";
|
||||||
import Table from "zy-react-library/components/Table";
|
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 useTable from "zy-react-library/hooks/useTable";
|
||||||
import { getLabelName } from "zy-react-library/utils";
|
import { getLabelName } from "zy-react-library/utils";
|
||||||
import SensorTypeModal from "~/components/SensorType/Modal";
|
import { SENSOR_ATTR_OPTIONS } from "~/enumerate/constant";
|
||||||
import { ENABLE_STATUS_OPTIONS, SENSOR_ATTR_OPTIONS } from "~/enumerate/constant";
|
import SensorTypeAdd from "../Add";
|
||||||
import { NS_SENSORTYPE } from "~/enumerate/namespace";
|
import SensorTypeView from "../View";
|
||||||
|
|
||||||
function SensorTypeList(props) {
|
function SensorTypeList(props) {
|
||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
const [modalOpen, setModalOpen] = useState(false);
|
const [modalOpen, setModalOpen] = useState(false);
|
||||||
|
const [viewOpen, setViewOpen] = useState(false);
|
||||||
|
const [currentRecord, setCurrentRecord] = useState({});
|
||||||
const [currentId, setCurrentId] = useState("");
|
const [currentId, setCurrentId] = useState("");
|
||||||
const { tableProps, getData } = useTable(props["sensorTypeList"], { form });
|
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) => {
|
const handleDelete = (record) => {
|
||||||
Modal.confirm({
|
Modal.confirm({
|
||||||
|
|
@ -38,20 +38,7 @@ function SensorTypeList(props) {
|
||||||
form={form}
|
form={form}
|
||||||
onFinish={getData}
|
onFinish={getData}
|
||||||
options={[
|
options={[
|
||||||
{ name: "typeCode", label: "类型编码" },
|
{ name: "typeName", 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,
|
|
||||||
},
|
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
<Table
|
<Table
|
||||||
|
|
@ -73,25 +60,26 @@ function SensorTypeList(props) {
|
||||||
</Space>
|
</Space>
|
||||||
)}
|
)}
|
||||||
columns={[
|
columns={[
|
||||||
{ title: "类型编码", dataIndex: "typeCode" },
|
{ title: "传感器类型", dataIndex: "typeName" },
|
||||||
{ title: "类型名称", dataIndex: "typeName" },
|
|
||||||
{
|
{
|
||||||
title: "传感器属性",
|
title: "传感器属性",
|
||||||
dataIndex: "sensorAttr",
|
dataIndex: "sensorAttr",
|
||||||
render: value => getLabelName({ status: value, list: SENSOR_ATTR_OPTIONS }) || value || "-",
|
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: "操作",
|
title: "操作",
|
||||||
width: 180,
|
width: 220,
|
||||||
render: (_, record) => (
|
render: (_, record) => (
|
||||||
<Space>
|
<Space>
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => {
|
||||||
|
setCurrentRecord(record);
|
||||||
|
setViewOpen(true);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
查看
|
||||||
|
</Button>
|
||||||
{props.permission(editPermission) && (
|
{props.permission(editPermission) && (
|
||||||
<Button
|
<Button
|
||||||
type="link"
|
type="link"
|
||||||
|
|
@ -115,7 +103,7 @@ function SensorTypeList(props) {
|
||||||
{...tableProps}
|
{...tableProps}
|
||||||
/>
|
/>
|
||||||
{modalOpen && (
|
{modalOpen && (
|
||||||
<SensorTypeModal
|
<SensorTypeAdd
|
||||||
open={modalOpen}
|
open={modalOpen}
|
||||||
currentId={currentId}
|
currentId={currentId}
|
||||||
loading={props.sensorTypeLoading}
|
loading={props.sensorTypeLoading}
|
||||||
|
|
@ -129,8 +117,18 @@ function SensorTypeList(props) {
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
{viewOpen && (
|
||||||
|
<SensorTypeView
|
||||||
|
open={viewOpen}
|
||||||
|
record={currentRecord}
|
||||||
|
onCancel={() => {
|
||||||
|
setViewOpen(false);
|
||||||
|
setCurrentRecord({});
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</Page>
|
</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";
|
export default function SensorType(props) {
|
||||||
// 默认导出 List 作为主入口组件
|
return props.children;
|
||||||
export { default } from "./List";
|
}
|
||||||
|
|
||||||
export { default as Modal } from "./Modal";
|
|
||||||
|
|
|
||||||
|
|
@ -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 {};
|
||||||
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";
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
/**
|
||||||
|
* 全局上下文定义
|
||||||
|
*/
|
||||||
|
|
||||||
import React from "react";
|
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";
|
import { defineNamespace } from "@cqsjjb/jjb-dva-runtime";
|
||||||
export const NS_ALARMDISPOSE = "alarmDispose";
|
|
||||||
export const NS_ALARMRECORD = "alarmRecord";
|
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");
|
dayjs.locale("zh-cn");
|
||||||
setJJBCommonAntdMessage(message);
|
setJJBCommonAntdMessage(message);
|
||||||
|
window.mapLongitude = "119.69457721306945";
|
||||||
|
window.mapLatitude = "39.940504336846665";
|
||||||
|
window.mapBaiDuKey = "OElqFYoKiAH8KFtph8ftLKF5NlNrbCUr";
|
||||||
|
|
||||||
const app = setup();
|
const app = setup();
|
||||||
getFileUrlFromServer();
|
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";
|
function AlarmAssign(props) {
|
||||||
import AssignList from "~/components/AlarmDispose/AssignList";
|
return props.children;
|
||||||
|
|
||||||
function AlarmAssignPage(props) {
|
|
||||||
return <AssignList {...props} type="fgs" />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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";
|
function AlarmRecord(props) {
|
||||||
import AlarmRecordList from "~/components/AlarmRecord/List";
|
return props.children;
|
||||||
|
|
||||||
function AlarmRecordPage(props) {
|
|
||||||
return <AlarmRecordList {...props} type="fgs" />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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";
|
function DcsAlarmInfo(props) {
|
||||||
import DcsList from "~/components/AlarmInfo/DcsList";
|
return props.children;
|
||||||
|
|
||||||
function DcsAlarmInfoPage(props) {
|
|
||||||
return <DcsList {...props} type="fgs" />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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";
|
function DeviceRegion(props) {
|
||||||
import DeviceRegionList from "~/components/DeviceRegion/List";
|
return props.children;
|
||||||
|
|
||||||
function DeviceRegionPage(props) {
|
|
||||||
return <DeviceRegionList {...props} type="fgs" />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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";
|
function SensorDevice(props) {
|
||||||
import SensorDeviceList from "~/components/SensorDevice/List";
|
return props.children;
|
||||||
|
|
||||||
function SensorDevicePage(props) {
|
|
||||||
return <SensorDeviceList {...props} type="fgs" />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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";
|
function SensorType(props) {
|
||||||
import SensorTypeList from "~/components/SensorType/List";
|
return props.children;
|
||||||
|
|
||||||
function SensorTypePage(props) {
|
|
||||||
return <SensorTypeList {...props} type="fgs" />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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";
|
function ThresholdAlarmInfo(props) {
|
||||||
import ThresholdList from "~/components/AlarmInfo/ThresholdList";
|
return props.children;
|
||||||
|
|
||||||
function ThresholdAlarmInfoPage(props) {
|
|
||||||
return <ThresholdList {...props} type="fgs" />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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";
|
export default function AlarmAssign(props) {
|
||||||
import AssignList from "~/components/AlarmDispose/AssignList";
|
return props.children;
|
||||||
|
|
||||||
function AlarmAssignPage(props) {
|
|
||||||
return <AssignList {...props} type="gfd" />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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";
|
export default function AlarmRecord(props) {
|
||||||
import AlarmRecordList from "~/components/AlarmRecord/List";
|
return props.children;
|
||||||
|
|
||||||
function AlarmRecordPage(props) {
|
|
||||||
return <AlarmRecordList {...props} type="gfd" />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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";
|
export default function DcsAlarmInfo(props) {
|
||||||
import DcsList from "~/components/AlarmInfo/DcsList";
|
return props.children;
|
||||||
|
|
||||||
function DcsAlarmInfoPage(props) {
|
|
||||||
return <DcsList {...props} type="gfd" />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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";
|
export default function DeviceRegion(props) {
|
||||||
import DeviceRegionList from "~/components/DeviceRegion/List";
|
return props.children;
|
||||||
|
|
||||||
function DeviceRegionPage(props) {
|
|
||||||
return <DeviceRegionList {...props} type="gfd" />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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";
|
export default function SensorDevice(props) {
|
||||||
import SensorDeviceList from "~/components/SensorDevice/List";
|
return props.children;
|
||||||
|
|
||||||
function SensorDevicePage(props) {
|
|
||||||
return <SensorDeviceList {...props} type="gfd" />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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";
|
export default function SensorType(props) {
|
||||||
import SensorTypeList from "~/components/SensorType/List";
|
return props.children;
|
||||||
|
|
||||||
function SensorTypePage(props) {
|
|
||||||
return <SensorTypeList {...props} type="gfd" />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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";
|
export default function ThresholdAlarmInfo(props) {
|
||||||
import ThresholdList from "~/components/AlarmInfo/ThresholdList";
|
return props.children;
|
||||||
|
|
||||||
function ThresholdAlarmInfoPage(props) {
|
|
||||||
return <ThresholdList {...props} type="gfd" />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Permission(ThresholdAlarmInfoPage);
|
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,8 @@
|
||||||
export { default as Container } from "./Container";
|
export default function () {
|
||||||
export { default as BranchCompany } from "./Container/BranchCompany";
|
return (
|
||||||
export { default as BranchCompanyAlarmAssign } from "./Container/BranchCompany/AlarmAssign";
|
<h1>
|
||||||
|
底座微应用模板,技术文档:
|
||||||
export { default as BranchCompanyAlarmRecord } from "./Container/BranchCompany/AlarmRecord";
|
<a rel="noreferrer noopener" target="_blank" href="https://www.yuque.com/buhangjiecheshen-ymbtb/qc0093/gxdun1dphetcurko">https://www.yuque.com/buhangjiecheshen-ymbtb/qc0093/gxdun1dphetcurko</a>
|
||||||
export { default as BranchCompanyDcsAlarmInfo } from "./Container/BranchCompany/DcsAlarmInfo";
|
</h1>
|
||||||
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>;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue