diff --git a/package.json b/package.json index 0d43fe5..087f53b 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "lodash-es": "^4.17.21", "react": "^18.2.0", "react-dom": "^18.2.0", - "zy-react-library": "^1.2.19" + "zy-react-library": "^1.2.20" }, "devDependencies": { "@antfu/eslint-config": "^5.4.1", diff --git a/src/api/AlarmDispose/index.js b/src/api/AlarmDispose/index.js new file mode 100644 index 0000000..d98ad07 --- /dev/null +++ b/src/api/AlarmDispose/index.js @@ -0,0 +1,6 @@ +import { declareRequest } from "@cqsjjb/jjb-dva-runtime"; + +export const alarmAssignList = declareRequest("alarmDisposeLoading", "Post > @/iotalarm/alarmDispose/assignList"); +export const alarmAssign = declareRequest("alarmDisposeLoading", "Post > @/iotalarm/alarmDispose/assign"); +export const alarmBatchAssign = declareRequest("alarmDisposeLoading", "Post > @/iotalarm/alarmDispose/batchAssign"); +export const alarmRecordList = declareRequest("alarmRecordLoading", "Post > @/iotalarm/alarmRecord/list"); diff --git a/src/api/AlarmInfo/index.js b/src/api/AlarmInfo/index.js new file mode 100644 index 0000000..f6a2209 --- /dev/null +++ b/src/api/AlarmInfo/index.js @@ -0,0 +1,4 @@ +import { declareRequest } from "@cqsjjb/jjb-dva-runtime"; + +export const dcsAlarmInfoList = declareRequest("dcsAlarmInfoLoading", "Post > @/iotalarm/dcsAlarmInfo/list"); +export const thresholdAlarmInfoList = declareRequest("thresholdAlarmInfoLoading", "Post > @/iotalarm/thresholdAlarmInfo/list"); diff --git a/src/api/AlarmRecord/index.js b/src/api/AlarmRecord/index.js new file mode 100644 index 0000000..6464743 --- /dev/null +++ b/src/api/AlarmRecord/index.js @@ -0,0 +1,10 @@ +import { declareRequest } from "@cqsjjb/jjb-dva-runtime"; + +export const alarmRecordList = declareRequest( + "alarmRecordLoading", + `Post > @/iotalarm/alarmRecord/list`, +); +export const alarmRecordInfo = declareRequest( + "alarmRecordLoading", + `Get > /iotalarm/alarmRecord/{id}`, +); diff --git a/src/api/DeviceRegion/index.js b/src/api/DeviceRegion/index.js new file mode 100644 index 0000000..e662f82 --- /dev/null +++ b/src/api/DeviceRegion/index.js @@ -0,0 +1,9 @@ +import { declareRequest } from "@cqsjjb/jjb-dva-runtime"; + +export const deviceRegionList = declareRequest("deviceRegionLoading", "Post > @/iotalarm/deviceRegion/list"); +export const deviceRegionFireRegionList = declareRequest("deviceRegionLoading", "Get > @/iotalarm/deviceRegion/fireRegionList"); +export const deviceRegionSaveOrUpdate = declareRequest("deviceRegionLoading", "Post > @/iotalarm/deviceRegion/saveOrUpdate"); +export const deviceRegionBindSensor = declareRequest("deviceRegionLoading", "Post > @/iotalarm/deviceRegion/bindSensor"); +export const deviceRegionUnbindSensor = declareRequest("deviceRegionLoading", "Post > @/iotalarm/deviceRegion/unbindSensor"); +export const deviceRegionManager = declareRequest("deviceRegionLoading", "Put > @/iotalarm/deviceRegion/manager"); +export const deviceRegionInfo = declareRequest("deviceRegionLoading", "Get > @/iotalarm/deviceRegion/{id}"); diff --git a/src/api/SensorDevice/index.js b/src/api/SensorDevice/index.js new file mode 100644 index 0000000..eeef711 --- /dev/null +++ b/src/api/SensorDevice/index.js @@ -0,0 +1,9 @@ +import { declareRequest } from "@cqsjjb/jjb-dva-runtime"; + +export const sensorDeviceList = declareRequest("sensorDeviceLoading", "Post > @/iotalarm/sensorDevice/list"); +export const sensorDeviceInfo = declareRequest("sensorDeviceLoading", "Get > @/iotalarm/sensorDevice/{id}"); +export const sensorDeviceSave = declareRequest("sensorDeviceLoading", "Post > @/iotalarm/sensorDevice/save"); +export const sensorDeviceEdit = declareRequest("sensorDeviceLoading", "Put > @/iotalarm/sensorDevice/edit"); +export const sensorDeviceStatus = declareRequest("sensorDeviceLoading", "Put > @/iotalarm/sensorDevice/status"); +export const sensorDeviceThreshold = declareRequest("sensorDeviceLoading", "Put > @/iotalarm/sensorDevice/threshold"); +export const sensorDeviceRemove = declareRequest("sensorDeviceLoading", "Delete > @/iotalarm/sensorDevice/{id}"); diff --git a/src/api/SensorType/index.js b/src/api/SensorType/index.js new file mode 100644 index 0000000..dc8173c --- /dev/null +++ b/src/api/SensorType/index.js @@ -0,0 +1,7 @@ +import { declareRequest } from "@cqsjjb/jjb-dva-runtime"; + +export const sensorTypeList = declareRequest("sensorTypeLoading", "Post > @/iotalarm/sensorType/list"); +export const sensorTypeInfo = declareRequest("sensorTypeLoading", "Get > @/iotalarm/sensorType/{id}"); +export const sensorTypeSave = declareRequest("sensorTypeLoading", "Post > @/iotalarm/sensorType/save"); +export const sensorTypeEdit = declareRequest("sensorTypeLoading", "Put > @/iotalarm/sensorType/edit"); +export const sensorTypeRemove = declareRequest("sensorTypeLoading", "Delete > @/iotalarm/sensorType/{id}"); diff --git a/src/api/index.js b/src/api/index.js new file mode 100644 index 0000000..f3e33cc --- /dev/null +++ b/src/api/index.js @@ -0,0 +1,6 @@ +export * from "./SensorType"; +export * from "./SensorDevice"; +export * from "./DeviceRegion"; +export * from "./AlarmInfo"; +export * from "./AlarmDispose"; +export * from "./AlarmRecord"; diff --git a/src/components/AlarmDispose/AssignList/index.js b/src/components/AlarmDispose/AssignList/index.js new file mode 100644 index 0000000..8b597a1 --- /dev/null +++ b/src/components/AlarmDispose/AssignList/index.js @@ -0,0 +1,147 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Button, Form, message, Space, Modal } 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 { getLabelName } from "zy-react-library/utils"; +import AssignModal from "~/components/AlarmDispose/AssignModal"; +import { ALARM_STATUS_OPTIONS, ALARM_SOURCE_OPTIONS, ALARM_LEVEL_OPTIONS, ALARM_TYPE_OPTIONS } from "~/enumerate/constant"; +import { NS_ALARMDISPOSE } from "~/enumerate/namespace"; + +function AssignList(props) { + const [form] = Form.useForm(); + const [modalOpen, setModalOpen] = useState(false); + const [selectedRowKeys, setSelectedRowKeys] = useState([]); + const [currentAlarmId, setCurrentAlarmId] = useState(null); + const [isBatch, setIsBatch] = useState(false); + + const { tableProps, getData } = useTable(props["alarmAssignList"], { + form, + defaultParams: { status: [10, 20] }, + }); + + const assignPermission = `${props.type}-iotalarm-alarm-assign`; + + const handleBatchAssign = () => { + if (selectedRowKeys.length === 0) { + message.warning("请先选择要分配的报警记录"); + return; + } + setIsBatch(true); + setCurrentAlarmId(null); + setModalOpen(true); + }; + + const handleSingleAssign = (record) => { + setIsBatch(false); + setCurrentAlarmId(record.id); + setModalOpen(true); + }; + + const rowSelection = { + selectedRowKeys, + onChange: setSelectedRowKeys, + }; + + return ( + + item.bianma === 10 || item.bianma === 20), + }, + ]} + /> + ( + + {props.permission(assignPermission) && ( + + )} + + )} + columns={[ + { title: "报警名称", dataIndex: "alarmName", ellipsis: true }, + { title: "设备名称", dataIndex: "deviceName", ellipsis: true }, + { title: "报警位置", dataIndex: "alarmLocation", ellipsis: true }, + { + title: "报警来源", + dataIndex: "alarmSource", + render: value => getLabelName({ status: value, list: ALARM_SOURCE_OPTIONS }) || value || "-", + }, + { + 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: "status", + render: value => getLabelName({ status: value, list: ALARM_STATUS_OPTIONS }) || value || "-", + }, + { title: "报警时间", dataIndex: "alarmTime", width: 180 }, + { title: "报警值", dataIndex: "alarmValue" }, + { + title: "操作", + width: 120, + render: (_, record) => ( + + {props.permission(assignPermission) && ( + + )} + + ), + }, + ]} + {...tableProps} + /> + {modalOpen && ( + { + setModalOpen(false); + setCurrentAlarmId(null); + setSelectedRowKeys([]); + }} + /> + )} + + ); +} + +export default Connect([NS_ALARMDISPOSE], true)(Permission(AssignList)); \ No newline at end of file diff --git a/src/components/AlarmDispose/AssignModal/index.js b/src/components/AlarmDispose/AssignModal/index.js new file mode 100644 index 0000000..19e6631 --- /dev/null +++ b/src/components/AlarmDispose/AssignModal/index.js @@ -0,0 +1,90 @@ +import { Form, Modal, Select } from "antd"; +import { useEffect } from "react"; +import PersonnelSelect from "zy-react-library/components/Select/Personnel/Gwj"; +import { ALARM_LEVEL_OPTIONS, ALARM_TYPE_OPTIONS } from "~/enumerate/constant"; + +function AssignModal(props) { + const [form] = Form.useForm(); + + useEffect(() => { + if (!props.open) { + return; + } + form.resetFields(); + }, [form, props.open]); + + const handleCancel = () => { + form.resetFields(); + props.onCancel(); + }; + + const handleSubmit = async (values) => { + if (props.isBatch) { + await props.alarmBatchAssign({ + alarmIds: props.alarmIds, + disposeUserId: values.disposeUserId, + alarmLevel: values.alarmLevel, + alarmType: values.alarmType, + }); + } else { + await props.alarmAssign({ + alarmId: props.alarmId, + disposeUserId: values.disposeUserId, + alarmLevel: values.alarmLevel, + alarmType: values.alarmType, + }); + } + handleCancel(); + props.getData(); + }; + + return ( + +
+ + + + + + + + + + +
+ ); +} + +export default AssignModal; \ No newline at end of file diff --git a/src/components/AlarmDispose/index.js b/src/components/AlarmDispose/index.js new file mode 100644 index 0000000..4d9177f --- /dev/null +++ b/src/components/AlarmDispose/index.js @@ -0,0 +1,2 @@ +export { default as AssignList } from "./AssignList"; +export { default as AssignModal } from "./AssignModal"; \ No newline at end of file diff --git a/src/components/AlarmInfo/DcsList/index.js b/src/components/AlarmInfo/DcsList/index.js new file mode 100644 index 0000000..af5f101 --- /dev/null +++ b/src/components/AlarmInfo/DcsList/index.js @@ -0,0 +1,64 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Form } from "antd"; +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 } from "~/enumerate/namespace"; + +function DcsList(props) { + const [form] = Form.useForm(); + const { tableProps, getData } = useTable(props["dcsAlarmInfoList"], { form }); + + return ( + + +
getLabelName({ status: value, list: ALARM_STATUS_OPTIONS }) || value || "-", + }, + { title: "设备来源", dataIndex: "deviceSourceDesc" }, + ]} + {...tableProps} + /> + + ); +} + +export default Connect([NS_DCSALARMINFO], true)(Permission(DcsList)); \ No newline at end of file diff --git a/src/components/AlarmInfo/ThresholdList/index.js b/src/components/AlarmInfo/ThresholdList/index.js new file mode 100644 index 0000000..6110725 --- /dev/null +++ b/src/components/AlarmInfo/ThresholdList/index.js @@ -0,0 +1,64 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Form } from "antd"; +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_THRESHOLDALARMINFO } from "~/enumerate/namespace"; + +function ThresholdList(props) { + const [form] = Form.useForm(); + const { tableProps, getData } = useTable(props["thresholdAlarmInfoList"], { form }); + + return ( + + +
getLabelName({ status: value, list: ALARM_STATUS_OPTIONS }) || value || "-", + }, + { title: "设备来源", dataIndex: "deviceSourceDesc" }, + ]} + {...tableProps} + /> + + ); +} + +export default Connect([NS_THRESHOLDALARMINFO], true)(Permission(ThresholdList)); \ No newline at end of file diff --git a/src/components/AlarmInfo/index.js b/src/components/AlarmInfo/index.js new file mode 100644 index 0000000..702928b --- /dev/null +++ b/src/components/AlarmInfo/index.js @@ -0,0 +1,2 @@ +export { default as DcsList } from "./DcsList"; +export { default as ThresholdList } from "./ThresholdList"; \ No newline at end of file diff --git a/src/components/AlarmRecord/DetailModal/index.js b/src/components/AlarmRecord/DetailModal/index.js new file mode 100644 index 0000000..2a74cb3 --- /dev/null +++ b/src/components/AlarmRecord/DetailModal/index.js @@ -0,0 +1,55 @@ +import { Descriptions, Modal } from "antd"; +import { useEffect, useState } from "react"; +import { getLabelName } from "zy-react-library/utils"; +import { ALARM_SOURCE_OPTIONS, ALARM_STATUS_OPTIONS } from "~/enumerate/constant"; + +function DetailModal(props) { + const [detail, setDetail] = useState(null); + + useEffect(() => { + if (!props.open) { + setDetail(null); + return; + } + props.alarmRecordInfo({ id: props.currentId }).then((res) => { + if (res?.success) { + setDetail(res.data || {}); + } + }); + }, [props.open, props.currentId, props.alarmRecordInfo]); + + return ( + + {detail && ( + + {detail.alarmNo || "-"} + + {getLabelName({ status: detail.alarmSource, list: ALARM_SOURCE_OPTIONS }) || detail.alarmSource || "-"} + + {detail.sensorCode || "-"} + {detail.sensorName || "-"} + {detail.alarmTime || "-"} + {detail.alarmLevel || "-"} + + {getLabelName({ status: detail.status, list: ALARM_STATUS_OPTIONS }) || detail.status || "-"} + + {detail.disposeUserName || "-"} + + {detail.deviceSourceDesc || "-"} + + {detail.disposeTime || "-"} + {detail.disposeRemark || "-"} + + )} + + ); +} + +export default DetailModal; \ No newline at end of file diff --git a/src/components/AlarmRecord/List/index.js b/src/components/AlarmRecord/List/index.js new file mode 100644 index 0000000..e68e035 --- /dev/null +++ b/src/components/AlarmRecord/List/index.js @@ -0,0 +1,105 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Button, Form, Space } 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 { getLabelName } from "zy-react-library/utils"; +import DetailModal from "~/components/AlarmRecord/DetailModal"; +import { ALARM_SOURCE_OPTIONS, ALARM_STATUS_OPTIONS } from "~/enumerate/constant"; +import { NS_ALARMRECORD } from "~/enumerate/namespace"; + +function AlarmRecordList(props) { + const [form] = Form.useForm(); + const [detailOpen, setDetailOpen] = useState(false); + const [currentId, setCurrentId] = useState(""); + const { tableProps, getData } = useTable(props["alarmRecordList"], { form }); + + const handleViewDetail = (record) => { + setCurrentId(record.id); + setDetailOpen(true); + }; + + return ( + + +
getLabelName({ status: value, list: ALARM_SOURCE_OPTIONS }) || value || "-", + }, + { title: "传感器编码", dataIndex: "sensorCode" }, + { title: "传感器名称", dataIndex: "sensorName" }, + { title: "报警时间", dataIndex: "alarmTime" }, + { title: "报警级别", dataIndex: "alarmLevel" }, + { + title: "状态", + dataIndex: "status", + render: value => getLabelName({ status: value, list: ALARM_STATUS_OPTIONS }) || value || "-", + }, + { title: "处置人", dataIndex: "disposeUserName" }, + { title: "设备来源描述", dataIndex: "deviceSourceDesc", ellipsis: true }, + { + title: "操作", + width: 100, + render: (_, record) => ( + + + + ), + }, + ]} + {...tableProps} + /> + {detailOpen && ( + { + setDetailOpen(false); + setCurrentId(""); + }} + /> + )} + + ); +} + +export default Connect([NS_ALARMRECORD], true)(Permission(AlarmRecordList)); \ No newline at end of file diff --git a/src/components/AlarmRecord/index.js b/src/components/AlarmRecord/index.js new file mode 100644 index 0000000..4bd7c83 --- /dev/null +++ b/src/components/AlarmRecord/index.js @@ -0,0 +1,3 @@ +import AlarmRecordList from "~/components/AlarmRecord/List"; + +export default AlarmRecordList; diff --git a/src/components/DeviceRegion/BindSensorModal/index.js b/src/components/DeviceRegion/BindSensorModal/index.js new file mode 100644 index 0000000..e5e06e9 --- /dev/null +++ b/src/components/DeviceRegion/BindSensorModal/index.js @@ -0,0 +1,117 @@ +import { Checkbox, Empty, Modal, Typography, message } from "antd"; +import { useEffect, useMemo, useState } from "react"; + +function BindSensorModal(props) { + const [loading, setLoading] = useState(false); + const [detail, setDetail] = useState({}); + const [options, setOptions] = useState([]); + const [initialSensorIds, setInitialSensorIds] = useState([]); + const [selectedSensorIds, setSelectedSensorIds] = useState([]); + + useEffect(() => { + if (!props.open || !props.currentId) { + return; + } + const loadData = async () => { + setLoading(true); + try { + const [detailRes, deviceRes] = await Promise.all([ + props.deviceRegionInfo({ id: props.currentId }), + props.sensorDeviceList({ pageIndex: 1, pageSize: 500 }), + ]); + const regionDetail = detailRes?.data || {}; + const deviceList = deviceRes?.data || []; + const boundIds = (regionDetail.boundSensors || []).map(item => item.id); + setDetail(regionDetail); + setInitialSensorIds(boundIds); + setSelectedSensorIds(boundIds); + setOptions( + deviceList.map(item => ({ + value: item.id, + label: `${item.sensorCode} - ${item.sensorName}${item.sensorTypeName ? `(${item.sensorTypeName})` : ""}`, + })), + ); + } + finally { + setLoading(false); + } + }; + loadData(); + }, [props.currentId, props.deviceRegionInfo, props.open, props.sensorDeviceList]); + + const changes = useMemo(() => { + const initialSet = new Set(initialSensorIds); + const selectedSet = new Set(selectedSensorIds); + return { + addIds: selectedSensorIds.filter(id => !initialSet.has(id)), + removeIds: initialSensorIds.filter(id => !selectedSet.has(id)), + }; + }, [initialSensorIds, selectedSensorIds]); + + const handleSubmit = async () => { + setLoading(true); + try { + if (changes.addIds.length) { + await props.deviceRegionBindSensor({ + regionConfigId: props.currentId, + sensorIds: changes.addIds, + }); + } + if (changes.removeIds.length) { + await props.deviceRegionUnbindSensor({ + regionConfigId: props.currentId, + sensorIds: changes.removeIds, + }); + } + message.success("传感器绑定已更新"); + props.onCancel(); + props.getData(); + } + finally { + setLoading(false); + } + }; + + return ( + + + 当前区域:{detail.fireRegionName || "-"} / {detail.fireRegionCode || "-"} + + {options.length ? ( + +
+ {options.map(item => ( +
+ {item.label} +
+ ))} +
+
+ ) : ( + + )} +
+ ); +} + +export default BindSensorModal; diff --git a/src/components/DeviceRegion/List/index.js b/src/components/DeviceRegion/List/index.js new file mode 100644 index 0000000..528d632 --- /dev/null +++ b/src/components/DeviceRegion/List/index.js @@ -0,0 +1,244 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Button, Form, Input, Modal, Select, Space, message } from "antd"; +import { useEffect, useState } from "react"; +import AddIcon from "zy-react-library/components/Icon/AddIcon"; +import Page from "zy-react-library/components/Page"; +import Search from "zy-react-library/components/Search"; +import Table from "zy-react-library/components/Table"; +import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; +import useTable from "zy-react-library/hooks/useTable"; +import { getLabelName } from "zy-react-library/utils"; +import BindSensorModal from "~/components/DeviceRegion/BindSensorModal"; +import ManagerModal from "~/components/DeviceRegion/ManagerModal"; +import { ENABLE_STATUS_OPTIONS } from "~/enumerate/constant"; +import { NS_DEVICEREGION, NS_SENSORDEVICE } from "~/enumerate/namespace"; + +function DeviceRegionList(props) { + const [form] = Form.useForm(); + const [configForm] = Form.useForm(); + const [configOpen, setConfigOpen] = useState(false); + const [managerOpen, setManagerOpen] = useState(false); + const [bindOpen, setBindOpen] = useState(false); + const [currentId, setCurrentId] = useState(""); + const [fireRegionOptions, setFireRegionOptions] = useState([]); + const { tableProps, getData } = useTable(props["deviceRegionList"], { form }); + + const editPermission = `${props.type}-iotalarm-device-region-edit`; + + const loadFireRegionOptions = async () => { + const res = await props["deviceRegionFireRegionList"](); + if (res?.success) { + setFireRegionOptions(res.data || []); + } + }; + + useEffect(() => { + loadFireRegionOptions(); + }, [props.deviceRegionFireRegionList]); + + 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, + fireRegionCode: selectedFireRegion?.fireRegionCode, + }); + message.success(currentId ? "设备区域配置已更新" : "设备区域配置已新增"); + setConfigOpen(false); + setCurrentId(""); + configForm.resetFields(); + getData(); + }; + + return ( + + +
( + + {props.permission(editPermission) && ( + + )} + + )} + columns={[ + { title: "消防区域名称", dataIndex: "fireRegionName" }, + { title: "消防区域编码", dataIndex: "fireRegionCode" }, + { title: "负责部门", dataIndex: "deptName" }, + { title: "负责人", dataIndex: "managerName" }, + { title: "已绑定传感器", dataIndex: "bindSensorCount" }, + { + title: "状态", + dataIndex: "status", + render: value => getLabelName({ status: value, list: ENABLE_STATUS_OPTIONS }) || value || "-", + }, + { title: "备注", dataIndex: "remarks", ellipsis: true }, + { + title: "操作", + width: 280, + render: (_, record) => ( + + {props.permission(editPermission) && ( + + )} + {props.permission(editPermission) && ( + + )} + {props.permission(editPermission) && ( + + )} + + ), + }, + ]} + {...tableProps} + /> + { + setConfigOpen(false); + setCurrentId(""); + configForm.resetFields(); + }} + onOk={configForm.submit} + confirmLoading={props.deviceRegionLoading} + width={680} + > +
+ + ({ + value: item.bianma, + label: item.name, + }))} + /> + + + + + +
+ {managerOpen && ( + { + setManagerOpen(false); + setCurrentId(""); + }} + /> + )} + {bindOpen && ( + { + setBindOpen(false); + setCurrentId(""); + }} + /> + )} + + ); +} + +export default Connect([NS_DEVICEREGION, NS_SENSORDEVICE], true)(Permission(DeviceRegionList)); diff --git a/src/components/DeviceRegion/ManagerModal/index.js b/src/components/DeviceRegion/ManagerModal/index.js new file mode 100644 index 0000000..d6142fe --- /dev/null +++ b/src/components/DeviceRegion/ManagerModal/index.js @@ -0,0 +1,66 @@ +import { Form, Modal } from "antd"; +import { useEffect, useState } from "react"; +import PersonnelSelect from "zy-react-library/components/Select/Personnel/Gwj"; +import DepartmentSelectTree from "zy-react-library/components/SelectTree/Department/Gwj"; + +function ManagerModal(props) { + const [form] = Form.useForm(); + const [departmentId, setDepartmentId] = useState(); + + useEffect(() => { + if (!props.open || !props.currentId) { + return; + } + props.deviceRegionInfo({ id: props.currentId }).then((res) => { + if (!res?.success) { + return; + } + const data = res.data || {}; + setDepartmentId(data.deptId); + form.setFieldsValue({ + deptId: data.deptId, + managerId: data.managerId, + }); + }); + }, [form, props.currentId, props.deviceRegionInfo, props.open]); + + const handleCancel = () => { + form.resetFields(); + setDepartmentId(undefined); + props.onCancel(); + }; + + const handleSubmit = async (values) => { + await props.deviceRegionManager({ ...values, id: props.currentId }); + handleCancel(); + props.getData(); + }; + + return ( + +
+ + { + setDepartmentId(value); + form.setFieldValue("managerId", undefined); + }} + /> + + + + + +
+ ); +} + +export default ManagerModal; diff --git a/src/components/DeviceRegion/index.js b/src/components/DeviceRegion/index.js new file mode 100644 index 0000000..10dc626 --- /dev/null +++ b/src/components/DeviceRegion/index.js @@ -0,0 +1,6 @@ +export { default as List } from "./List"; +export { default as ManagerModal } from "./ManagerModal"; +export { default as BindSensorModal } from "./BindSensorModal"; + +// 默认导出 List 作为主入口组件 +export { default } from "./List"; diff --git a/src/components/SensorDevice/List/index.js b/src/components/SensorDevice/List/index.js new file mode 100644 index 0000000..bcff1ac --- /dev/null +++ b/src/components/SensorDevice/List/index.js @@ -0,0 +1,238 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Button, Form, message, Modal, Space, Switch } from "antd"; +import { useEffect, useState } from "react"; +import AddIcon from "zy-react-library/components/Icon/AddIcon"; +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 SensorDeviceModal from "~/components/SensorDevice/Modal"; +import RealtimeModal from "~/components/SensorDevice/RealtimeModal"; +import ThresholdModal from "~/components/SensorDevice/ThresholdModal"; +import { ENABLE_STATUS_OPTIONS, SENSOR_STATUS_OPTIONS, YES_NO_OPTIONS } from "~/enumerate/constant"; +import { NS_SENSORDEVICE, NS_SENSORTYPE } from "~/enumerate/namespace"; + +function SensorDeviceList(props) { + const [form] = Form.useForm(); + const [modalOpen, setModalOpen] = useState(false); + const [thresholdOpen, setThresholdOpen] = useState(false); + const [realtimeOpen, setRealtimeOpen] = useState(false); + const [currentId, setCurrentId] = useState(""); + const [currentRecord, setCurrentRecord] = useState({}); + const [sensorTypeOptions, setSensorTypeOptions] = useState([]); + const { tableProps, getData } = useTable(props["sensorDeviceList"], { form }); + + const editPermission = `${props.type}-iotalarm-sensor-device-edit`; + + const loadSensorTypeOptions = async () => { + const res = await props["sensorTypeList"]({ + pageIndex: 1, + pageSize: 500, + status: 1, + }); + if (res?.success) { + setSensorTypeOptions(res.data || []); + } + }; + + useEffect(() => { + loadSensorTypeOptions(); + }, [props.sensorTypeList]); + + const sensorTypeSelectOptions = sensorTypeOptions.map(item => ({ + bianma: item.id, + name: item.typeName, + })); + + const handleDelete = (record) => { + Modal.confirm({ + title: "确定删除这条传感器设备吗?", + onOk: async () => { + await props["sensorDeviceRemove"]({ id: record.id }); + message.success("删除成功"); + getData(); + }, + }); + }; + + const handleAlarmSwitch = async (record, checked) => { + await props["sensorDeviceStatus"]({ id: record.id, alarmSwitch: checked ? 1 : 0 }); + message.success("报警开关更新成功"); + getData(); + }; + + return ( + + +
( + + {props.permission(editPermission) && ( + + )} + + )} + columns={[ + { title: "传感器编码", dataIndex: "sensorCode" }, + { title: "传感器名称", dataIndex: "sensorName" }, + { title: "传感器类型", dataIndex: "sensorTypeName" }, + { + title: "传感器状态", + dataIndex: "sensorStatus", + render: value => getLabelName({ status: value, list: SENSOR_STATUS_OPTIONS }) || value || "-", + }, + { + title: "报警开关", + dataIndex: "alarmSwitch", + render: (_, record) => ( + handleAlarmSwitch(record, checked)} + /> + ), + }, + { + title: "阈值配置", + dataIndex: "thresholdFlag", + render: value => getLabelName({ status: value, list: YES_NO_OPTIONS }) || value || "-", + }, + { title: "安装位置", dataIndex: "installPosition", ellipsis: true }, + { title: "单位", dataIndex: "unitName" }, + { + title: "量程", + render: (_, record) => `${record.rangeMin ?? "-"} ~ ${record.rangeMax ?? "-"}`, + }, + { title: "备注", dataIndex: "remarks", ellipsis: true }, + { + title: "操作", + width: 260, + render: (_, record) => ( + + {props.permission(editPermission) && record.sensorAttr === "NUMBER" && ( + + )} + + {props.permission(editPermission) && ( + + )} + {props.permission(editPermission) && ( + + )} + + ), + }, + ]} + {...tableProps} + /> + {modalOpen && ( + { + setModalOpen(false); + setCurrentId(""); + }} + /> + )} + {thresholdOpen && ( + { + setThresholdOpen(false); + setCurrentId(""); + }} + /> + )} + {realtimeOpen && ( + { + setRealtimeOpen(false); + setCurrentRecord({}); + }} + /> + )} + + ); +} + +export default Connect([NS_SENSORDEVICE, NS_SENSORTYPE], true)(Permission(SensorDeviceList)); diff --git a/src/components/SensorDevice/Modal/index.js b/src/components/SensorDevice/Modal/index.js new file mode 100644 index 0000000..1db5b13 --- /dev/null +++ b/src/components/SensorDevice/Modal/index.js @@ -0,0 +1,157 @@ +import { DatePicker, Form, Input, InputNumber, Modal, Radio, Select } from "antd"; +import dayjs from "dayjs"; +import { useEffect } from "react"; +import { ENABLE_STATUS_OPTIONS, SENSOR_STATUS_OPTIONS, YES_NO_OPTIONS } from "~/enumerate/constant"; + +function SensorDeviceModal(props) { + const [form] = Form.useForm(); + + useEffect(() => { + if (!props.open) { + return; + } + if (!props.currentId) { + form.resetFields(); + form.setFieldsValue({ + sensorStatus: "NORMAL", + positioningFlag: 0, + alarmSwitch: 1, + }); + return; + } + props.sensorDeviceInfo({ id: props.currentId }).then((res) => { + if (!res?.success) { + return; + } + const data = { ...(res.data || {}) }; + if (data.factoryDate) { + data.factoryDate = dayjs(data.factoryDate); + } + form.setFieldsValue(data); + }); + }, [form, props.currentId, props.open, props.sensorDeviceInfo]); + + const handleCancel = () => { + form.resetFields(); + props.onCancel(); + }; + + const handleSubmit = async (values) => { + const payload = { + ...values, + factoryDate: values.factoryDate ? values.factoryDate.format("YYYY-MM-DD") : undefined, + }; + if (props.currentId) { + await props.sensorDeviceEdit({ ...payload, id: props.currentId }); + } + else { + await props.sensorDeviceSave(payload); + } + handleCancel(); + props.getData(); + }; + + return ( + +
+ + + + + + + + + + + + {SENSOR_STATUS_OPTIONS.map(item => ( + + {item.name} + + ))} + + + + + {YES_NO_OPTIONS.map(item => ( + + {item.name} + + ))} + + + + + {ENABLE_STATUS_OPTIONS.map(item => ( + + {item.name} + + ))} + + + + + + + + + + + + + + + + + + + + + +
+ ); +} + +export default SensorDeviceModal; diff --git a/src/components/SensorDevice/RealtimeModal/index.js b/src/components/SensorDevice/RealtimeModal/index.js new file mode 100644 index 0000000..18daedc --- /dev/null +++ b/src/components/SensorDevice/RealtimeModal/index.js @@ -0,0 +1,50 @@ +import { Descriptions, Modal } from "antd"; +import { getLabelName } from "zy-react-library/utils"; +import { ENABLE_STATUS_OPTIONS, SENSOR_STATUS_OPTIONS, YES_NO_OPTIONS } from "~/enumerate/constant"; + +function RealtimeModal(props) { + const record = props.record || {}; + + return ( + + + + ); +} + +export default RealtimeModal; diff --git a/src/components/SensorDevice/ThresholdModal/index.js b/src/components/SensorDevice/ThresholdModal/index.js new file mode 100644 index 0000000..fd30530 --- /dev/null +++ b/src/components/SensorDevice/ThresholdModal/index.js @@ -0,0 +1,74 @@ +import { Alert, Form, InputNumber, Modal } from "antd"; +import { useEffect, useState } from "react"; + +function ThresholdModal(props) { + const [form] = Form.useForm(); + const [sensorAttr, setSensorAttr] = useState(""); + + useEffect(() => { + if (!props.open || !props.currentId) { + return; + } + props.sensorDeviceInfo({ id: props.currentId }).then((res) => { + if (res?.success) { + form.setFieldsValue(res.data || {}); + setSensorAttr(res.data?.sensorAttr || ""); + } + }); + }, [form, props.currentId, props.open, props.sensorDeviceInfo]); + + const handleCancel = () => { + form.resetFields(); + setSensorAttr(""); + props.onCancel(); + }; + + const handleSubmit = async (values) => { + await props.sensorDeviceThreshold({ ...values, id: props.currentId }); + handleCancel(); + props.getData(); + }; + + const isNumberType = sensorAttr === "NUMBER"; + + return ( + + {!isNumberType && sensorAttr && ( + + )} + {isNumberType && ( +
+ + + + + + + + + + + + + + )} +
+ ); +} + +export default ThresholdModal; diff --git a/src/components/SensorDevice/index.js b/src/components/SensorDevice/index.js new file mode 100644 index 0000000..6a15a94 --- /dev/null +++ b/src/components/SensorDevice/index.js @@ -0,0 +1,8 @@ +// 导出子组件 +export { default as List } from "./List"; +export { default as Modal } from "./Modal"; +export { default as ThresholdModal } from "./ThresholdModal"; +export { default as RealtimeModal } from "./RealtimeModal"; + +// 默认导出 List 作为主入口 +export { default } from "./List"; diff --git a/src/components/SensorType/List/index.js b/src/components/SensorType/List/index.js new file mode 100644 index 0000000..ef09b36 --- /dev/null +++ b/src/components/SensorType/List/index.js @@ -0,0 +1,136 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import { Connect } from "@cqsjjb/jjb-dva-runtime"; +import { Button, Form, message, Modal, Space } from "antd"; +import { useState } from "react"; +import AddIcon from "zy-react-library/components/Icon/AddIcon"; +import Page from "zy-react-library/components/Page"; +import Search from "zy-react-library/components/Search"; +import Table from "zy-react-library/components/Table"; +import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; +import useTable from "zy-react-library/hooks/useTable"; +import { getLabelName } from "zy-react-library/utils"; +import SensorTypeModal from "~/components/SensorType/Modal"; +import { ENABLE_STATUS_OPTIONS, SENSOR_ATTR_OPTIONS } from "~/enumerate/constant"; +import { NS_SENSORTYPE } from "~/enumerate/namespace"; + +function SensorTypeList(props) { + const [form] = Form.useForm(); + const [modalOpen, setModalOpen] = useState(false); + const [currentId, setCurrentId] = useState(""); + const { tableProps, getData } = useTable(props["sensorTypeList"], { form }); + + const editPermission = `${props.type}-iotalarm-sensor-type-edit`; + + const handleDelete = (record) => { + Modal.confirm({ + title: "确定删除这条传感器类型吗?", + onOk: async () => { + await props["sensorTypeRemove"]({ id: record.id }); + message.success("删除成功"); + getData(); + }, + }); + }; + + return ( + + +
( + + {props.permission(editPermission) && ( + + )} + + )} + columns={[ + { title: "类型编码", dataIndex: "typeCode" }, + { title: "类型名称", dataIndex: "typeName" }, + { + title: "传感器属性", + dataIndex: "sensorAttr", + render: value => getLabelName({ status: value, list: SENSOR_ATTR_OPTIONS }) || value || "-", + }, + { title: "排序", dataIndex: "sortNo" }, + { + title: "状态", + dataIndex: "status", + render: value => getLabelName({ status: value, list: ENABLE_STATUS_OPTIONS }) || value || "-", + }, + { title: "备注", dataIndex: "remarks", ellipsis: true }, + { + title: "操作", + width: 180, + render: (_, record) => ( + + {props.permission(editPermission) && ( + + )} + {props.permission(editPermission) && ( + + )} + + ), + }, + ]} + {...tableProps} + /> + {modalOpen && ( + { + setModalOpen(false); + setCurrentId(""); + }} + /> + )} + + ); +} + +export default Connect([NS_SENSORTYPE], true)(Permission(SensorTypeList)); diff --git a/src/components/SensorType/Modal/index.js b/src/components/SensorType/Modal/index.js new file mode 100644 index 0000000..3cfc323 --- /dev/null +++ b/src/components/SensorType/Modal/index.js @@ -0,0 +1,115 @@ +import { Form, Input, InputNumber, Modal, Radio } from "antd"; +import { useEffect } from "react"; +import { ENABLE_STATUS_OPTIONS, SENSOR_ATTR_OPTIONS } from "~/enumerate/constant"; + +function SensorTypeModal(props) { + const [form] = Form.useForm(); + + useEffect(() => { + if (!props.open) { + return; + } + if (!props.currentId) { + form.resetFields(); + form.setFieldsValue({ + sensorAttr: "NUMBER", + status: 1, + sortNo: 0, + }); + return; + } + props.sensorTypeInfo({ id: props.currentId }).then((res) => { + if (res?.success) { + form.setFieldsValue(res.data || {}); + } + }); + }, [form, props.currentId, props.open, props.sensorTypeInfo]); + + const handleCancel = () => { + form.resetFields(); + props.onCancel(); + }; + + const handleSubmit = async (values) => { + if (props.currentId) { + await props.sensorTypeEdit({ ...values, id: props.currentId }); + } + else { + await props.sensorTypeSave(values); + } + handleCancel(); + props.getData(); + }; + + return ( + +
+ + + + + + + + + {SENSOR_ATTR_OPTIONS.map(item => ( + + {item.name} + + ))} + + + + + + + + {ENABLE_STATUS_OPTIONS.map(item => ( + + {item.name} + + ))} + + + + + + +
+ ); +} + +export default SensorTypeModal; diff --git a/src/components/SensorType/index.js b/src/components/SensorType/index.js new file mode 100644 index 0000000..79bc6c0 --- /dev/null +++ b/src/components/SensorType/index.js @@ -0,0 +1,5 @@ +export { default as List } from "./List"; +export { default as Modal } from "./Modal"; + +// 默认导出 List 作为主入口组件 +export { default } from "./List"; diff --git a/src/components/index.js b/src/components/index.js index cb0ff5c..22a0861 100644 --- a/src/components/index.js +++ b/src/components/index.js @@ -1 +1,6 @@ -export {}; +export { default as SensorType } from "./SensorType"; +export { default as SensorDevice } from "./SensorDevice"; +export { default as DeviceRegion } from "./DeviceRegion"; +export { default as AlarmInfo } from "./AlarmInfo"; +export { default as AlarmDispose } from "./AlarmDispose"; +export { default as AlarmRecord } from "./AlarmRecord"; diff --git a/src/enumerate/constant/index.js b/src/enumerate/constant/index.js index f077757..fc4eca4 100644 --- a/src/enumerate/constant/index.js +++ b/src/enumerate/constant/index.js @@ -1,5 +1,46 @@ -/** - * 全局常量定义 - */ +export const APP_IDENTIFIER = "iotalarm"; -export {}; +export const SENSOR_ATTR_OPTIONS = [ + { bianma: "NUMBER", name: "数值型" }, + { bianma: "SWITCH", name: "开关量" }, +]; + +export const ENABLE_STATUS_OPTIONS = [ + { bianma: 1, name: "启用" }, + { bianma: 0, name: "停用" }, +]; + +export const YES_NO_OPTIONS = [ + { bianma: 1, name: "是" }, + { bianma: 0, name: "否" }, +]; + +export const SENSOR_STATUS_OPTIONS = [ + { bianma: "NORMAL", name: "正常" }, + { bianma: "FAULT", name: "故障" }, + { bianma: "OFFLINE", name: "离线" }, +]; + +export const ALARM_STATUS_OPTIONS = [ + { bianma: 10, name: "报警中-待研判" }, + { bianma: 20, name: "报警中-待处置" }, + { bianma: 30, name: "已消警" }, + { bianma: 40, name: "误报" }, +]; + +export const ALARM_SOURCE_OPTIONS = [ + { bianma: "DCS", name: "DCS" }, + { bianma: "THRESHOLD", name: "阈值报警" }, +]; + +export const ALARM_LEVEL_OPTIONS = [ + { bianma: "HIGH", name: "高" }, + { bianma: "MEDIUM", name: "中" }, + { bianma: "LOW", name: "低" }, +]; + +export const ALARM_TYPE_OPTIONS = [ + { bianma: "FAULT", name: "故障报警" }, + { bianma: "THRESHOLD", name: "阈值报警" }, + { bianma: "MANUAL", name: "人工报警" }, +]; diff --git a/src/enumerate/context/index.js b/src/enumerate/context/index.js index 2b11e05..4c9bd32 100644 --- a/src/enumerate/context/index.js +++ b/src/enumerate/context/index.js @@ -1,8 +1,3 @@ -/** - * 全局上下文定义 - */ - import React from "react"; -// 获取antd全局静态方法 -export const InjectContext = React.createContext({}); +export const InjectContext = React.createContext(null); diff --git a/src/enumerate/index.js b/src/enumerate/index.js new file mode 100644 index 0000000..2c7f03a --- /dev/null +++ b/src/enumerate/index.js @@ -0,0 +1,3 @@ +export * from "./context"; +export * from "./constant"; +export * from "./namespace"; diff --git a/src/enumerate/namespace/index.js b/src/enumerate/namespace/index.js index b392d90..57b731e 100644 --- a/src/enumerate/namespace/index.js +++ b/src/enumerate/namespace/index.js @@ -1,7 +1,7 @@ -/** - * 全局数据状态管理模块定义 - */ - -import { defineNamespace } from "@cqsjjb/jjb-dva-runtime"; - -export const NS_GLOBAL = defineNamespace("global"); +export const NS_SENSORTYPE = "sensorType"; +export const NS_SENSORDEVICE = "sensorDevice"; +export const NS_DEVICEREGION = "deviceRegion"; +export const NS_DCSALARMINFO = "dcsAlarmInfo"; +export const NS_THRESHOLDALARMINFO = "thresholdAlarmInfo"; +export const NS_ALARMDISPOSE = "alarmDispose"; +export const NS_ALARMRECORD = "alarmRecord"; diff --git a/src/pages/Container/BranchCompany/AlarmAssign/index.js b/src/pages/Container/BranchCompany/AlarmAssign/index.js new file mode 100644 index 0000000..252da1b --- /dev/null +++ b/src/pages/Container/BranchCompany/AlarmAssign/index.js @@ -0,0 +1,8 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import AssignList from "~/components/AlarmDispose/AssignList"; + +function AlarmAssignPage(props) { + return ; +} + +export default Permission(AlarmAssignPage); diff --git a/src/pages/Container/BranchCompany/AlarmRecord/index.js b/src/pages/Container/BranchCompany/AlarmRecord/index.js new file mode 100644 index 0000000..2e8d7b1 --- /dev/null +++ b/src/pages/Container/BranchCompany/AlarmRecord/index.js @@ -0,0 +1,8 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import AlarmRecordList from "~/components/AlarmRecord/List"; + +function AlarmRecordPage(props) { + return ; +} + +export default Permission(AlarmRecordPage); diff --git a/src/pages/Container/BranchCompany/DcsAlarmInfo/index.js b/src/pages/Container/BranchCompany/DcsAlarmInfo/index.js new file mode 100644 index 0000000..3f8673e --- /dev/null +++ b/src/pages/Container/BranchCompany/DcsAlarmInfo/index.js @@ -0,0 +1,8 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import DcsList from "~/components/AlarmInfo/DcsList"; + +function DcsAlarmInfoPage(props) { + return ; +} + +export default Permission(DcsAlarmInfoPage); diff --git a/src/pages/Container/BranchCompany/DeviceRegion/index.js b/src/pages/Container/BranchCompany/DeviceRegion/index.js new file mode 100644 index 0000000..f21388d --- /dev/null +++ b/src/pages/Container/BranchCompany/DeviceRegion/index.js @@ -0,0 +1,8 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import DeviceRegionList from "~/components/DeviceRegion/List"; + +function DeviceRegionPage(props) { + return ; +} + +export default Permission(DeviceRegionPage); diff --git a/src/pages/Container/BranchCompany/SensorDevice/index.js b/src/pages/Container/BranchCompany/SensorDevice/index.js new file mode 100644 index 0000000..f039f79 --- /dev/null +++ b/src/pages/Container/BranchCompany/SensorDevice/index.js @@ -0,0 +1,8 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import SensorDeviceList from "~/components/SensorDevice/List"; + +function SensorDevicePage(props) { + return ; +} + +export default Permission(SensorDevicePage); diff --git a/src/pages/Container/BranchCompany/SensorType/index.js b/src/pages/Container/BranchCompany/SensorType/index.js new file mode 100644 index 0000000..2232523 --- /dev/null +++ b/src/pages/Container/BranchCompany/SensorType/index.js @@ -0,0 +1,8 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import SensorTypeList from "~/components/SensorType/List"; + +function SensorTypePage(props) { + return ; +} + +export default Permission(SensorTypePage); diff --git a/src/pages/Container/BranchCompany/ThresholdAlarmInfo/index.js b/src/pages/Container/BranchCompany/ThresholdAlarmInfo/index.js new file mode 100644 index 0000000..5ec4665 --- /dev/null +++ b/src/pages/Container/BranchCompany/ThresholdAlarmInfo/index.js @@ -0,0 +1,8 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import ThresholdList from "~/components/AlarmInfo/ThresholdList"; + +function ThresholdAlarmInfoPage(props) { + return ; +} + +export default Permission(ThresholdAlarmInfoPage); diff --git a/src/pages/Container/BranchCompany/index.js b/src/pages/Container/BranchCompany/index.js new file mode 100644 index 0000000..834e71b --- /dev/null +++ b/src/pages/Container/BranchCompany/index.js @@ -0,0 +1,7 @@ +export default function BranchCompany(props) { + if (props.children) { + return props.children; + } + + return
分公司端壳页面
; +} diff --git a/src/pages/Container/Supervision/AlarmAssign/index.js b/src/pages/Container/Supervision/AlarmAssign/index.js new file mode 100644 index 0000000..3cd08d7 --- /dev/null +++ b/src/pages/Container/Supervision/AlarmAssign/index.js @@ -0,0 +1,8 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import AssignList from "~/components/AlarmDispose/AssignList"; + +function AlarmAssignPage(props) { + return ; +} + +export default Permission(AlarmAssignPage); diff --git a/src/pages/Container/Supervision/AlarmRecord/index.js b/src/pages/Container/Supervision/AlarmRecord/index.js new file mode 100644 index 0000000..ddaebdd --- /dev/null +++ b/src/pages/Container/Supervision/AlarmRecord/index.js @@ -0,0 +1,8 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import AlarmRecordList from "~/components/AlarmRecord/List"; + +function AlarmRecordPage(props) { + return ; +} + +export default Permission(AlarmRecordPage); diff --git a/src/pages/Container/Supervision/DcsAlarmInfo/index.js b/src/pages/Container/Supervision/DcsAlarmInfo/index.js new file mode 100644 index 0000000..95c6334 --- /dev/null +++ b/src/pages/Container/Supervision/DcsAlarmInfo/index.js @@ -0,0 +1,8 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import DcsList from "~/components/AlarmInfo/DcsList"; + +function DcsAlarmInfoPage(props) { + return ; +} + +export default Permission(DcsAlarmInfoPage); diff --git a/src/pages/Container/Supervision/DeviceRegion/index.js b/src/pages/Container/Supervision/DeviceRegion/index.js new file mode 100644 index 0000000..82a251d --- /dev/null +++ b/src/pages/Container/Supervision/DeviceRegion/index.js @@ -0,0 +1,8 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import DeviceRegionList from "~/components/DeviceRegion/List"; + +function DeviceRegionPage(props) { + return ; +} + +export default Permission(DeviceRegionPage); diff --git a/src/pages/Container/Supervision/SensorDevice/index.js b/src/pages/Container/Supervision/SensorDevice/index.js new file mode 100644 index 0000000..7cc52e2 --- /dev/null +++ b/src/pages/Container/Supervision/SensorDevice/index.js @@ -0,0 +1,8 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import SensorDeviceList from "~/components/SensorDevice/List"; + +function SensorDevicePage(props) { + return ; +} + +export default Permission(SensorDevicePage); diff --git a/src/pages/Container/Supervision/SensorType/index.js b/src/pages/Container/Supervision/SensorType/index.js new file mode 100644 index 0000000..08cca81 --- /dev/null +++ b/src/pages/Container/Supervision/SensorType/index.js @@ -0,0 +1,8 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import SensorTypeList from "~/components/SensorType/List"; + +function SensorTypePage(props) { + return ; +} + +export default Permission(SensorTypePage); diff --git a/src/pages/Container/Supervision/ThresholdAlarmInfo/index.js b/src/pages/Container/Supervision/ThresholdAlarmInfo/index.js new file mode 100644 index 0000000..89ef374 --- /dev/null +++ b/src/pages/Container/Supervision/ThresholdAlarmInfo/index.js @@ -0,0 +1,8 @@ +import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; +import ThresholdList from "~/components/AlarmInfo/ThresholdList"; + +function ThresholdAlarmInfoPage(props) { + return ; +} + +export default Permission(ThresholdAlarmInfoPage); diff --git a/src/pages/Container/Supervision/index.js b/src/pages/Container/Supervision/index.js new file mode 100644 index 0000000..e424db9 --- /dev/null +++ b/src/pages/Container/Supervision/index.js @@ -0,0 +1,7 @@ +export default function Supervision(props) { + if (props.children) { + return props.children; + } + + return
股份端壳页面
; +} diff --git a/src/pages/Container/index.js b/src/pages/Container/index.js index c26d322..10ad3b2 100644 --- a/src/pages/Container/index.js +++ b/src/pages/Container/index.js @@ -7,25 +7,22 @@ import { InjectContext } from "~/enumerate/context"; export default class Container extends React.Component { state = window?.base?.themeConfig || { - algorithm: window.process.env.app.antd.algorithm, - borderRadius: window.process.env.app.antd.borderRadius, - colorPrimary: window.process.env.app.antd.colorPrimary, + algorithm: "defaultAlgorithm", + borderRadius: 6, + colorPrimary: "#0b6cff", }; get token() { - const { - colorPrimary, - borderRadius, - } = this.state; + const { colorPrimary, borderRadius } = this.state; return { - fontFamily: window.process.env.app.antd.fontFamily, colorPrimary, borderRadius, + fontFamily: "Microsoft YaHei, PingFang SC, sans-serif", }; } get algorithm() { - return antdTheme[this.state.algorithm]; + return antdTheme[this.state.algorithm] || antdTheme.defaultAlgorithm; } componentDidMount() { @@ -46,7 +43,6 @@ export default class Container extends React.Component { algorithm: this.algorithm, }} locale={language} - prefixCls={window.process.env.app.antd["ant-prefix"]} > @@ -98,4 +94,4 @@ class Interceptor extends React.Component { ) : this.props.children; } -} +} \ No newline at end of file diff --git a/src/pages/index.js b/src/pages/index.js index 64c36bb..b56c286 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -1,8 +1,23 @@ -export default function () { - return ( -

- 底座微应用模板,技术文档: - https://www.yuque.com/buhangjiecheshen-ymbtb/qc0093/gxdun1dphetcurko -

- ); +export { default as Container } from "./Container"; +export { default as BranchCompany } from "./Container/BranchCompany"; +export { default as Supervision } from "./Container/Supervision"; + +export { default as BranchCompanySensorType } from "./Container/BranchCompany/SensorType"; +export { default as BranchCompanySensorDevice } from "./Container/BranchCompany/SensorDevice"; +export { default as BranchCompanyDeviceRegion } from "./Container/BranchCompany/DeviceRegion"; +export { default as BranchCompanyDcsAlarmInfo } from "./Container/BranchCompany/DcsAlarmInfo"; +export { default as BranchCompanyThresholdAlarmInfo } from "./Container/BranchCompany/ThresholdAlarmInfo"; +export { default as BranchCompanyAlarmAssign } from "./Container/BranchCompany/AlarmAssign"; +export { default as BranchCompanyAlarmRecord } from "./Container/BranchCompany/AlarmRecord"; + +export { default as SupervisionSensorType } from "./Container/Supervision/SensorType"; +export { default as SupervisionSensorDevice } from "./Container/Supervision/SensorDevice"; +export { default as SupervisionDeviceRegion } from "./Container/Supervision/DeviceRegion"; +export { default as SupervisionDcsAlarmInfo } from "./Container/Supervision/DcsAlarmInfo"; +export { default as SupervisionThresholdAlarmInfo } from "./Container/Supervision/ThresholdAlarmInfo"; +export { default as SupervisionAlarmAssign } from "./Container/Supervision/AlarmAssign"; +export { default as SupervisionAlarmRecord } from "./Container/Supervision/AlarmRecord"; + +export default function HomePage() { + return
物联网消防报警模块前端骨架已完成
; }