Browse Source

(*)脚本更新

master
peng.peng 1 year ago
parent
commit
edf29fed02
  1. 7
      scripts/0.0.12/emergency_shelter_basic_info_statistics.sql
  2. 6
      scripts/0.0.12/flood_control_headquarters.sql
  3. 5
      scripts/0.0.12/rescue_teams.sql
  4. 15
      super-screen/client/src/sections/fire-control/actions/example.js
  5. 42
      super-screen/client/src/sections/fire-control/actions/fire.js
  6. 2
      super-screen/client/src/sections/fire-control/actions/index.js
  7. 91
      super-screen/client/src/sections/fire-control/components/alarm-add.js
  8. 295
      super-screen/client/src/sections/fire-control/containers/gis.js
  9. 30
      super-screen/client/src/sections/fire-control/containers/gis.less
  10. 4
      super-screen/client/src/utils/webapi.js

7
scripts/0.0.12/emergency_shelter_basic_info_statistics.sql

@ -21,7 +21,7 @@
-- ----------------------------
DROP TABLE IF EXISTS "public"."emergency_shelter_basic_info_statistics";
CREATE TABLE "public"."emergency_shelter_basic_info_statistics" (
"id" int4 NOT NULL DEFAULT nextval('emergency_shelter_basic_info_statistics_id_seq'::regclass),
"id" serial PRIMARY KEY,
"shelter_name" text COLLATE "pg_catalog"."default" NOT NULL,
"address" text COLLATE "pg_catalog"."default",
"event_type" text COLLATE "pg_catalog"."default",
@ -112,8 +112,3 @@ INSERT INTO "public"."emergency_shelter_basic_info_statistics" VALUES (25, '八
INSERT INTO "public"."emergency_shelter_basic_info_statistics" VALUES (26, '银三角管理委员会银苑社区居民委员会应急避难场所', '南昌县银三角银苑社区居委会19栋旁', '自然灾害', '地震', '紧急避险场所(1天以内)', '室外', '单一型', '广场类', 1000.00, 1000.00, 3000, '疏散安置用具', '消防设施', '应急管理部门', '应急管理部门', '其他部门', '2015-11-01', '已纳入城市总体或城乡建设规划', 0.000, '待确认', 7, 7, '街道、社区、村', '有,未纳入预算', '财政');
INSERT INTO "public"."emergency_shelter_basic_info_statistics" VALUES (27, '莲塘镇斗柏路社区应急避难场所', '莲塘镇斗柏路369号阳光丽景广场', '其他突发事件', '其他突发事件', '紧急避险场所(1天以内)', '室外', '综合型', '广场类', 800.00, 800.00, 500, '疏散安置用具/医疗物资', '消防设施/医疗设施/通讯设施', '安监', '应急管理部门', '应急管理部门', '2015-08-03', '已纳入城市总体或城乡建设规划', 0.000, '应急避难场所建设标志', 6, 3, '街道、社区、村', '有,纳入预算', '财政');
INSERT INTO "public"."emergency_shelter_basic_info_statistics" VALUES (28, '南昌县洪州体育馆', '莲塘镇小蓝南路', '其他突发事件', '其他突发事件', '短期避难场所(2-14天)', '室内', '综合型', '体育场馆类', 15259.14, 7628.56, 5000, '医疗物资', '医疗设施', '应急管理部门', '应急管理部门', '其他部门', '2017-01-04', '未纳入城市总体或城乡建设规划', 23000.000, '待确认', 100, 20, '企事业单位', '有,未纳入预算', '其他');
-- ----------------------------
-- Primary Key structure for table emergency_shelter_basic_info_statistics
-- ----------------------------
ALTER TABLE "public"."emergency_shelter_basic_info_statistics" ADD CONSTRAINT "emergency_shelter_basic_info_statistics_pkey" PRIMARY KEY ("id");

6
scripts/0.0.12/flood_control_headquarters.sql

@ -21,7 +21,7 @@
-- ----------------------------
DROP TABLE IF EXISTS "public"."flood_control_headquarters";
CREATE TABLE "public"."flood_control_headquarters" (
"id" int4 NOT NULL DEFAULT nextval('flood_control_headquarters_id_seq'::regclass),
"id" serial PRIMARY KEY,
"name" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
"location" varchar(255) COLLATE "pg_catalog"."default",
"dike_length" varchar(255) COLLATE "pg_catalog"."default",
@ -47,7 +47,3 @@ INSERT INTO "public"."flood_control_headquarters" VALUES (7, '抚西大堤防汛
INSERT INTO "public"."flood_control_headquarters" VALUES (8, '塘南防汛分指挥部', '塘南镇水管站', '31814 米', '付向宇、陈 欣、涂相鸿、刘龙军');
INSERT INTO "public"."flood_control_headquarters" VALUES (9, '泾口防汛分指挥部', '长乐联圩分中心', '68563 米', '易才宏、黄炳锋、万家平');
-- ----------------------------
-- Primary Key structure for table flood_control_headquarters
-- ----------------------------
ALTER TABLE "public"."flood_control_headquarters" ADD CONSTRAINT "flood_control_headquarters_pkey" PRIMARY KEY ("id");

5
scripts/0.0.12/rescue_teams.sql

@ -84,8 +84,3 @@ INSERT INTO "public"."rescue_teams" VALUES (215, '南昌县金沙二路消防救
INSERT INTO "public"."rescue_teams" VALUES (201, '莲东政府专职队', '南昌县消防救援大队', '关秋华13767035813', '胡九阳13755659798', 26, '火灾抢险救援', '南昌县莲武路119号莲东消防救援站', '消防救援救援队伍');
INSERT INTO "public"."rescue_teams" VALUES (202, '洪大小型消防站', '南昌县消防救援大队', '张红付15797792928 ', '罗虎15179176646', 11, '火灾抢险救援', '江西省南昌市南昌县河洲路洪大物流园旁', '消防救援救援队伍');
INSERT INTO "public"."rescue_teams" VALUES (203, '邓埠小型消防站', '南昌县消防救援大队', '张志鹏13065172871', '张伟15180178441', 12, '火灾抢险救援', '江西省南昌市南昌县小蓝经济开发区定埠路201号百通物流里面', '消防救援救援队伍');
-- ----------------------------
-- Primary Key structure for table rescue_teams
-- ----------------------------
ALTER TABLE "public"."rescue_teams" ADD CONSTRAINT "rescue_teams_pkey" PRIMARY KEY ("id");

15
super-screen/client/src/sections/fire-control/actions/example.js

@ -1,15 +0,0 @@
'use strict';
import { basicAction } from '@peace/utils'
import { ApiTable } from '$utils'
// export function getMembers(orgId) {
// return dispatch => basicAction({
// type: 'get',
// dispatch: dispatch,
// actionType: 'GET_MEMBERS',
// url: `${ApiTable.getEnterprisesMembers.replace('{enterpriseId}', orgId)}`,
// msg: { error: '获取用户列表失败' },
// reducer: { name: 'members' }
// });
// }

42
super-screen/client/src/sections/fire-control/actions/fire.js

@ -0,0 +1,42 @@
'use strict';
import { basicAction } from '@peace/utils'
import { ApiTable } from '$utils'
export function getFireAlarmList(query) {
return dispatch => basicAction({
type: 'get',
dispatch: dispatch,
query: query || {},
actionType: 'GET_FIRE_ALARM',
url: `${ApiTable.getFireAlarmList}`,
msg: { error: '获取消防告警列表失败' },
reducer: { name: 'riskReport' }
});
}
export function addFireAlarm(params) {
return (dispatch) => basicAction({
type: 'post',
data: params,
dispatch,
actionType: 'ADD_RIST_REPORT',
url: ApiTable.getFireAlarmList,
msg: {
option: '新增消防告警',
},
});
}
export function modifyFireAlarm(id, params) {
return (dispatch) => basicAction({
type: 'put',
data: params,
dispatch,
actionType: 'MODIFY_FIRE_ALARM',
url: ApiTable.modifyFireAlarm.replace('{id}', id),
msg: {
option: '编辑消防告警',
},
});
}

2
super-screen/client/src/sections/fire-control/actions/index.js

@ -1,6 +1,6 @@
'use strict';
import * as example from './example'
import * as example from './fire'
export default {
...example,

91
super-screen/client/src/sections/fire-control/components/alarm-add.js

@ -0,0 +1,91 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import { Row, Col, Modal, Form, Input, Select, DatePicker } from 'antd';
const { Opiton } = Select;
function FireAddForm(props) {
const { visible } = props;
const layout = {
labelCol: { span: 8 },
wrapperCol: { span: 12 },
};
const [form] = Form.useForm();
const renderInfowindow = () => {
return <div className='report_container'>
<div className='gis_exit' onClick={() => { setVisible(false) }} />
<Form
form={form}
{...layout}
name="control-hooks"
style={{ maxWidth: 600 }}
>
<Form.Item name="createTime" label="时间" rules={[{ required: true, message: '请选择时间!' }]} >
<DatePicker showTime placeholder="请选择事件时间" />
</Form.Item>
<Form.Item onFocus={() => {
setLocationVisible(true)
}}
name="地点" label="地点" >
{/* <Select placeholder="请选择事件地点" > </Select> */}
<div
onClick={() => { setLocationVisible(true) }}
style={{ color: 'rgba(89, 153, 200, 1)', paddingLeft: 12 }}>请选择事件地点</div>
</Form.Item>
<Form.Item name="场所" label="场所1" rules={[{ required: true, message: '请选择场所!' }]}>
<Select placeholder="请选择场所">
<Option value="民用建筑">民用建筑</Option>
<Option value="工业建筑">工业建筑</Option>
<Option value="森林">森林</Option>
<Option value="地下建筑">地下建筑</Option>
<Option value="水上">水上</Option>
</Select>
</Form.Item>
<Form.Item name="燃烧物质" label="燃烧物质" rules={[{ required: true, message: '请选择燃烧物质!' }]}>
<Select placeholder="请选择事件燃烧物质" >
<Option value="固体物质火灾">固体物质火灾</Option>
<Option value="液体或可熔物质火灾">液体或可熔物质火灾</Option>
<Option value="气体火灾">气体火灾</Option>
<Option value="金属火灾">金属火灾</Option>
<Option value="带电火灾">带电火灾</Option>
<Option value="烹饪物火灾">烹饪物火灾</Option>
</Select>
</Form.Item>
<Form.Item name="危险等级" label="危险等级" rules={[{ required: true, message: '请选择危险等级!' }]} >
<Select placeholder="请选择事件危险等级" >
<Option value="绿">绿</Option>
<Option value="蓝"></Option>
<Option value="黄"></Option>
<Option value="橙"></Option>
<Option value="红"></Option>
</Select>
</Form.Item>
<div className='flex-row flex-content-around'>
<div className='cancel_button' onClick={() => { props.onCancel() }}>取消</div>
<div onClick={() => { form?.submit() }} className='report_button'>上报</div>
</div>
</Form>
</div >
}
return (
<>
{/* 新增告警 */}
<Modal
maskClosable={false}
wrapClassName="custom-modal"
visible={visible}
closable={false}
width="360px"
centered
footer={null}
bodyStyle={{}}
destroyOnClose
>
{renderInfowindow()}
</Modal>
</>
);
}
export default connect()(FireAddForm);

295
super-screen/client/src/sections/fire-control/containers/gis.js

@ -1,8 +1,8 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import { render } from 'react-dom';
import { Row, Col, Modal, Form, Input, Select } from 'antd';
import { heatmapData } from '../constant/index'
import { Row, Col, Modal, Form, Input, Select, Button } from 'antd';
import FireAddForm from '../components/alarm-add'
import './gis.less'
const MAPDOMID = 'fs-amap-container-fire';
const LOCATION_MAP_ID = 'location_map_id';
@ -67,7 +67,6 @@ function Map(props) {
setDelay(false)
}, 1000);
map && renderAlarms()
loca && renderHeapLayer()
});
map.on('click', (e) => {
@ -129,222 +128,6 @@ function Map(props) {
}, [locationVisible])
const renderMarkers = () => {
map.clearMap();
map.setZoom(10.3)
map.setCenter([116.054664, 28.538966])
map.setPitch(22.9)
map.setRotation(1.7000)
if (loca && heatmap) loca.remove(heatmap)
if (tab == 'person') {
var geo = new Loca.GeoJSONSource({
data: heatmapData
});
heatmap = new Loca.HeatMapLayer({
// loca,
zIndex: 10,
opacity: 1,
visible: true,
zooms: [2, 22],
});
heatmap.setSource(geo, {
radius: 20,
unit: 'px',
height: 10,
// radius: 10,
// unit: 'px',
// height: 10,
gradient: {
0.1: 'rgba(50,48,118,1)',
0.2: 'rgba(127,60,255,1)',
0.4: 'rgba(166,53,219,1)',
0.6: 'rgba(254,64,95,1)',
0.8: 'rgba(255,98,4,1)',
1: 'rgba(236,220,79,1)',
},
value: function (index, feature) {
return feature.properties.count;
},
min: 0,
max: 10, //4.6
heightBezier: [0, .53, .37, .98],
});
loca.add(heatmap);
map.on('click', (e) => {
const feat = heatmap.queryFeature(e.pixel.toArray());
const random = Math.random()
if (feat) {
let infowindow = new AMap.InfoWindow({
isCustom: true, //使用自定义窗体
content: `<div id="map-content" class="gis-infowindow">
<div style="height:${330}px;" id="contentidheatmap${random}"></div></div>`,
offset: new AMap.Pixel(133, 260)
});
let position = map.getCenter();
infowindow.open(map, position);
setTimeout(() => {
if (document.getElementById(`contentidheatmap${random}`)) {
render(<div>
<div className='gis_exit' onClick={() => {
map.clearInfoWindow();
}} />
<div className='gis_item'>
<span className='gis_title'>小区名称</span>
<span className='gis_text'>小区名称</span>
</div>
<div className='gis_item'>
<span className='gis_title'>人口</span>
<span className='gis_text'>2344</span>
</div>
<div className='gis_item'>
<span className='gis_title'>新生儿</span>
<span className='gis_text'>23</span>
</div>
<div className='gis_item'>
<span className='gis_title'>老人</span>
<span className='gis_text'>342</span>
</div>
</div>,
document.getElementById(`contentidheatmap${random}`));
}
}, 50)
}
});
} else {
//初始层级 zoom14以下显示聚合点
const data = [
{ lng: 116.117906, lat: 28.678096, type: 'home', name: '廉租房1', kind: 'markergreen' },
{ lng: 116.195238, lat: 28.842114, type: 'home', name: '廉租房2', kind: 'markerblue' },
{ lng: 116.037227, lat: 28.558811, type: 'home', name: '廉租房3', kind: 'markeryellow' },
{ lng: 115.925856, lat: 28.558811, type: 'home', name: '廉租房4', kind: 'markergreen' },
{ lng: 115.989847, lat: 28.484411, type: 'home', name: '廉租房5', kind: 'markergreen' },
{ lng: 116.054664, lat: 28.538966, type: 'device', name: '廉租房1', kind: 'markergreen' },
{ lng: 116.074711, lat: 28.746745, type: 'device', name: '廉租房2', kind: 'markerblue' },
{ lng: 116.111632, lat: 28.56532, type: 'device', name: '廉租房3', kind: 'markeryellow' },
{ lng: 115.978519, lat: 28.56532, type: 'device', name: '廉租房4', kind: 'markergreen' },
{ lng: 115.95792, lat: 28.417395, type: 'device', name: '廉租房5', kind: 'markergreen' },
]
//zoom14以上显示详情
const databig = [
{ lng: 115.924246, lat: 28.554835, type: 'device', name: '廉租房1', kind: 'markergreenbig' },
{ lng: 115.921495, lat: 28.553053, type: 'device', name: '廉租房2', kind: 'markerbluebig' },
{ lng: 115.919115, lat: 28.557256, type: 'device', name: '廉租房3', kind: 'markeryellowbig' },
]
//初始点位显示
data.filter(s => s.type == tab).map((x, index) => {
var marker = new AMap.Marker({
position: new AMap.LngLat(x.lng, x.lat),
// 将一张图片的地址设置为 icon
icon: '/assets/images/homepage/communtity/' + x.kind + '.png',
// 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点
offset: new AMap.Pixel(-13, -30),
zooms: [3, 14],
});
marker.setTitle(x.name);
map.add(marker);
marker.on('click', () => {
map.setZoom(17.4)
map.setCenter([115.922069, 28.554867])
map.setPitch(47.30)
map.setRotation(1.7000)
})
})
//下钻点位显示
databig.map((x, index) => {
var marker = new AMap.Marker({
position: new AMap.LngLat(x.lng, x.lat),
// 将一张图片的地址设置为 icon
icon: '/assets/images/homepage/communtity/' + x.kind + '.png',
// 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点
offset: new AMap.Pixel(-13, -30),
zooms: [15, 19],
});
marker.setTitle(x.name);
map.add(marker);
let infowindow = new AMap.InfoWindow({
isCustom: true, //使用自定义窗体
content: `<div id="map-content" class="gis-infowindow">
<div style="height:${360}px;" id="contentid${x.name}"></div></div>`,
offset: new AMap.Pixel(233, 260)
});
marker.on('click', () => {
let position = marker.getPosition ? marker.getPosition() : marker.getCenter();
infowindow.open(map, position);
map.setCenter(position)
setTimeout(() => {
if (document.getElementById(`contentid${x.name}`)) {
render(<div>
<div className='gis_exit' onClick={() => {
map.setCenter([115.922069, 28.554867])
map.clearInfoWindow();
}} />
<div className='gis_item'>
<span className='gis_title'>小区名称</span>
<span className='gis_text'>{x.name}</span>
</div>
<div className='gis_item'>
<span className='gis_title'>人流量</span>
<span className='gis_text'>123</span>
<span className='gis_title' style={{ marginLeft: 20 }}>房龄</span>
<span className='gis_text'>9</span>
</div>
<div className='gis_item'>
<span className='gis_title'>租赁中房屋</span>
<span className='gis_text'>165</span>
</div>
<div className='gis_item'>
<span className='gis_title'>网格员</span>
<span className='gis_text'>张三</span>
</div>
<div className='gis_item'>
<span className='gis_title'>手机号码</span>
<span className='gis_text'>15765845845</span>
</div>
</div>,
document.getElementById(`contentid${x.name}`));
}
}, 50)
})
})
if (tab == 'device') {
const data = [
{ lng: 115.921895, lat: 28.556351, type: 'device', name: '廉租房1', kind: 'devicemarker' },
{ lng: 115.920839, lat: 28.555323, type: 'device', name: '廉租房2', kind: 'devicemarker' },
{ lng: 115.918329, lat: 28.55445, type: 'device', name: '廉租房3', kind: 'devicemarker' },
{ lng: 115.919309, lat: 28.553166, type: 'device', name: '廉租房1', kind: 'devicemarker' },
{ lng: 115.921585, lat: 28.553925, type: 'device', name: '廉租房2', kind: 'devicemarker' },
{ lng: 115.92565, lat: 28.556996, type: 'device', name: '廉租房3', kind: 'devicemarker' },
{ lng: 115.922671, lat: 28.558769, type: 'device', name: '廉租房1', kind: 'devicemarker' },
]
data.filter(s => s.type == tab).map((x, index) => {
var marker = new AMap.Marker({
position: new AMap.LngLat(x.lng, x.lat),
// 将一张图片的地址设置为 icon
icon: '/assets/images/homepage/communtity/' + x.kind + '.png',
// 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点
offset: new AMap.Pixel(-13, -30),
zooms: [15, 19],
});
marker.setTitle(x.name);
map.add(marker);
})
}
}
}
const renderAlarms = () => {
// map.clearMap();
const alarms = [
@ -409,43 +192,6 @@ function Map(props) {
})
}
const renderHeapLayer = () => {
var geo = new Loca.GeoJSONSource({
data: heatmapData
});
heatmap = new Loca.HeatMapLayer({
// loca,
zIndex: 60,
opacity: 1,
visible: true,
zooms: [2, 22],
});
heatmap.setSource(geo, {
radius: 50,
unit: 'px',
height: 10,
// radius: 10,
// unit: 'px',
// height: 10,
gradient: {
0.1: 'rgba(50,48,118,1)',
0.2: 'rgba(127,60,255,1)',
0.4: 'rgba(166,53,219,1)',
0.6: 'rgba(254,64,95,1)',
0.8: 'rgba(255,98,4,1)',
1: 'rgba(236,220,79,1)',
},
value: function (index, feature) {
return feature.properties.count;
},
min: 0,
max: 10, //4.6
heightBezier: [0, .53, .37, .98],
});
loca.add(heatmap);
}
const renderAlarmInfowindow = (x) => {
return x && render(<div>
@ -497,15 +243,17 @@ function Map(props) {
wrapperCol: { span: 12 },
};
const [form] = Form.useForm();
const renderInfowindow = () => {
return <div className='report_container'>
<div className='gis_exit' onClick={() => { setVisible(false) }} />
<Form
form={form}
{...layout}
name="control-hooks"
style={{ maxWidth: 600 }}
>
<Form.Item name="时间" label="时间">
<Form.Item name="createTime" label="时间" rules={[{ required: true, message: '请选择时间!' }]} >
<Select placeholder="请选择事件时间" > </Select>
</Form.Item>
<Form.Item onFocus={() => {
@ -517,21 +265,23 @@ function Map(props) {
onClick={() => { setLocationVisible(true) }}
style={{ color: 'rgba(89, 153, 200, 1)', paddingLeft: 12 }}>请选择事件地点</div>
</Form.Item>
<Form.Item name="场所" label="场所" >
<Form.Item name="场所" label="场所" rules={[{ required: true, message: '请选择场所!' }]}>
<Select placeholder="请选择事件场所" > </Select>
</Form.Item>
<Form.Item name="燃烧物质" label="燃烧物质" >
<Form.Item name="燃烧物质" label="燃烧物质" rules={[{ required: true, message: '请选择燃烧物质!' }]}>
<Select placeholder="请选择事件燃烧物质" > </Select>
</Form.Item>
<Form.Item name="危险等级" label="危险等级" >
<Form.Item name="危险等级" label="危险等级" rules={[{ required: true, message: '请选择危险等级!' }]} >
<Select placeholder="请选择事件危险等级" > </Select>
</Form.Item>
<div className='flex-row flex-content-around'>
<div className='cancel_button' onClick={() => { setVisible(false) }}>取消</div>
<div onClick={() => { form?.submit() }} className='report_button'>上报</div>
</div>
</Form>
<div className='flex-row flex-content-around'>
<div className='cancel_button'>取消</div>
<div className='report_button'>上报</div>
</div>
</div >
}
@ -600,20 +350,13 @@ function Map(props) {
<div className='gis-top'></div>
<div className='gis-bottom'></div>
<Modal
maskClosable={false}
wrapClassName="custom-modal"
{/* 新增告警 */}
<FireAddForm
visible={visible}
closable={false}
width="360px"
centered
footer={null}
bodyStyle={{}}
destroyOnClose
>
{renderInfowindow()}
</Modal>
onCancel={() => setVisible(false)}
/>
{/* 位置选点 */}
<Modal
maskClosable={false}
wrapClassName="custom-modal"

30
super-screen/client/src/sections/fire-control/containers/gis.less

@ -419,6 +419,9 @@
text-align: center;
line-height: 26px;
cursor: pointer;
color: #FFF;
display: flex;
justify-content: center;
}
.report_button {
@ -431,6 +434,9 @@
text-align: center;
line-height: 26px;
cursor: pointer;
color: #FFF;
display: flex;
justify-content: center;
}
.ant-form-item-label>label {
@ -459,6 +465,30 @@
.ant-input-placeholder {
color: rgba(89, 153, 200, 1) !important;
}
.ant-select {
color: #FFF !important;
}
.ant-picker {
background-color: transparent !important;
border: 1px solid transparent !important;
color: #FFF !important;
}
.ant-picker-input>input {
color: #FFF !important;
}
.ant-picker-suffix {
color: rgba(89, 153, 200, 1);
}
.ant-picker-input::input-placeholder {
color: rgba(89, 153, 200, 1) !important;
}
}
.location_infowindow {

4
super-screen/client/src/utils/webapi.js

@ -130,6 +130,10 @@ export const ApiTable = {
getEmerExpertList: '_worksafety/emergency/resource-expert-list', // 应急专家
getEmerMedicalList: '_worksafety/emergency/resource-medical-list', // 医疗机构
getEmerRefugeList: '_worksafety/emergency/resource-refuge-list', // 避难场所
//消防
getFireAlarmList: 'fire/alarm',
modifyFireAlarm: 'fire/alarm/{id}',
};
export const RouteTable = {

Loading…
Cancel
Save