From 460afa8c21513a8967816d8304878c82c0d40c6f Mon Sep 17 00:00:00 2001 From: wenlele Date: Thu, 24 Aug 2023 08:25:52 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E5=91=A8=E8=BE=B9=E8=B7=AF=E5=86=B5?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/.vscode/launch.json | 2 + api/app/lib/controllers/superScreen/fire.js | 229 ++++-- api/app/lib/middlewares/authenticator.js | 2 + api/app/lib/routes/superScreen/fire.js | 6 + api/config.js | 228 +++--- .../homepage/bigscreen/background_n.png | Bin 0 -> 17431 bytes .../assets/images/homepage/bigscreen/blue.png | Bin 0 -> 8251 bytes .../images/homepage/bigscreen/dateDook.png | Bin 0 -> 39595 bytes .../images/homepage/bigscreen/green.png | Bin 0 -> 8320 bytes .../assets/images/homepage/bigscreen/red.png | Bin 0 -> 6894 bytes .../images/homepage/bigscreen/seniority.png | Bin 0 -> 39452 bytes super-screen/client/src/components/index.js | 2 + .../client/src/components/public/index.less | 213 ++--- .../client/src/components/ysPlayerIframe.js | 52 ++ .../src/sections/fire-control/actions/fire.js | 24 + .../fire-control/components/Right-top2.js | 209 +++++ .../fire-control/components/right-bottom.js | 86 +- .../fire-control/components/style.less | 38 +- .../sections/fire-control/containers/gis.js | 755 +++++++++--------- .../fire-control/containers/homePage.js | 189 ++--- super-screen/client/src/utils/webapi.js | 5 + super-screen/config.js | 192 ++--- super-screen/routes/attachment/index.js | 1 - 23 files changed, 1387 insertions(+), 846 deletions(-) create mode 100644 super-screen/client/assets/images/homepage/bigscreen/background_n.png create mode 100644 super-screen/client/assets/images/homepage/bigscreen/blue.png create mode 100644 super-screen/client/assets/images/homepage/bigscreen/dateDook.png create mode 100644 super-screen/client/assets/images/homepage/bigscreen/green.png create mode 100644 super-screen/client/assets/images/homepage/bigscreen/red.png create mode 100644 super-screen/client/assets/images/homepage/bigscreen/seniority.png create mode 100644 super-screen/client/src/components/ysPlayerIframe.js create mode 100644 super-screen/client/src/sections/fire-control/components/Right-top2.js diff --git a/api/.vscode/launch.json b/api/.vscode/launch.json index 5433cf2..f675800 100644 --- a/api/.vscode/launch.json +++ b/api/.vscode/launch.json @@ -22,6 +22,8 @@ "-d postgres/example/10.8.30.160/30432", "-w https://smartwater.anxinyun.cn", "-a https://smartworksafety.anxinyun.cn", + "--yingshiKey 5d16a667e1c2423d9d0d634f781810b4", + "--yingshiSecret 0cc4e1ec4e6a53ea3dabeb09cd5f468b", ] }, { diff --git a/api/app/lib/controllers/superScreen/fire.js b/api/app/lib/controllers/superScreen/fire.js index 8bc189a..b9c685a 100644 --- a/api/app/lib/controllers/superScreen/fire.js +++ b/api/app/lib/controllers/superScreen/fire.js @@ -1,63 +1,190 @@ 'use strict'; +const request = require('superagent'); -function getFireAlarmList(opts) { - return async function (ctx, next) { - const models = ctx.fs.dc.models; - let errMsg = { message: '获取消防告警失败' } - try { - const res = await models.FireAlarm.findAll(); - ctx.status = 200; - ctx.body = res; - } catch (error) { - ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); - ctx.status = 400; - ctx.body = errMsg - } - } +function getFireAlarmList (opts) { + return async function (ctx, next) { + const models = ctx.fs.dc.models; + let errMsg = { message: '获取消防告警失败' } + try { + const res = await models.FireAlarm.findAll(); + ctx.status = 200; + ctx.body = res; + } catch (error) { + ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); + ctx.status = 400; + ctx.body = errMsg + } + } } // 新增消防告警 -function addAlarm(opts) { - return async function (ctx, next) { - const models = ctx.fs.dc.models; - try { - const body = ctx.request.body - await models.FireAlarm.create(body) - - ctx.status = 204; - ctx.body = { message: '新建消防告警成功' } - } catch (error) { - ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); - ctx.status = 400; - ctx.body = { message: '新建消防告警失败' } - } - } +function addAlarm (opts) { + return async function (ctx, next) { + const models = ctx.fs.dc.models; + try { + const body = ctx.request.body + await models.FireAlarm.create(body) + + ctx.status = 204; + ctx.body = { message: '新建消防告警成功' } + } catch (error) { + ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); + ctx.status = 400; + ctx.body = { message: '新建消防告警失败' } + } + } } // 修改消防告警 -function updateAlarm(opts) { - return async function (ctx, next) { - try { - const models = ctx.fs.dc.models; - const { id } = ctx.params; - const body = ctx.request.body; - await models.FireAlarm.update( - body, - { where: { id: id, } } - ) - ctx.status = 204; - ctx.body = { message: '修改消防告警成功' } - - } catch (error) { - ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); - ctx.status = 400; - ctx.body = { message: '修改消防告警失败' } - } - } +function updateAlarm (opts) { + return async function (ctx, next) { + try { + const models = ctx.fs.dc.models; + const { id } = ctx.params; + const body = ctx.request.body; + await models.FireAlarm.update( + body, + { where: { id: id, } } + ) + ctx.status = 204; + ctx.body = { message: '修改消防告警成功' } + + } catch (error) { + ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); + ctx.status = 400; + ctx.body = { message: '修改消防告警失败' } + } + } } + +function videoList (opts) { + return async function (ctx) { + try { + const { models, } = ctx.fs.dc; + const { app, yingshiTokenRes } = ctx + + let yingshiToken = '' + if (yingshiTokenRes && yingshiTokenRes.token && yingshiTokenRes.expire && moment().isBefore(moment(yingshiTokenRes.expire))) { + yingshiToken = yingshiTokenRes.token + } else { + const tokenRes = await app.fs.yingshiRequest.post(`lapp/token/get`, { + query: { + appKey: opts.yingshiKey, + appSecret: opts.yingshiSecret + } + }) + if (tokenRes.code == 200 && tokenRes.data) { + const { accessToken, expireTime } = tokenRes.data + + ctx.yingshiTokenRes = { + token: accessToken, + expire: expireTime + } + yingshiToken = accessToken + } else { + throw '未能获取进行萤石鉴权' + } + } + + // const deviceRes = await app.fs.yingshiRequest.post(`lapp/device/list`, { + // query: { + // accessToken: yingshiToken, + // } + // }) + + ctx.status = 200; + + let deviceRes_ = [{ + deviceName: '楼前大桥', + deviceSerial: 'L48947105', + }, { + deviceName: '滁北大桥', + deviceSerial: 'L48947108', + }, { + deviceName: '新联桥', + deviceSerial: 'L48947110', + }, { + deviceName: '湾庄线', + deviceSerial: 'L48947112', + }, { + deviceName: '新土线', + deviceSerial: 'AA9943808', + }, { + deviceName: '东文大桥', + deviceSerial: 'L48947087', + }, { + deviceName: '莲姚线', + deviceSerial: 'L48947082', + }, { + deviceName: '荷漳公路', + deviceSerial: 'L48947109', + }, { + deviceName: '新武大桥', + deviceSerial: 'L48947086', + },] + + const deviceState = await Promise.all(deviceRes_.map(d => { + return app.fs.yingshiRequest.post(`lapp/device/info`, { + query: { + accessToken: yingshiToken, + deviceSerial: d.deviceSerial + } + }) + })) + + for (let d of deviceRes_) { + let corState = deviceState.find(item => item.code == 200 && item.data && item.data.deviceSerial == d.deviceSerial) + if (corState) { + d.status = corState.data.status + } else { + d.status = 0 + } + d.token = yingshiToken + } + + ctx.body = deviceRes_ + // || + // (deviceRes.data || []).map(item => { + // return { + // ...item, + // token: yingshiToken, + // } + // }) + } catch (error) { + ctx.fs.logger.error(`path: ${ctx.path}, error: error`); + ctx.status = 400; + ctx.body = { + message: typeof error == 'string' ? error : undefined + } + } + } +} + + +function getDetails (opts) { + return async function (ctx) { + try { + const res = await request.get('https://jiaotong.baidu.com/trafficindex/city/details/?cityCode=163') + + ctx.status = 200 + ctx.body = res.body || {} + + } catch (error) { + ctx.fs.logger.error(`path: ${ctx.path}, error: error`); + ctx.status = 400; + ctx.body = { + message: '获取南昌市道路数据失败' + } + } + } +} + + module.exports = { - addAlarm, - updateAlarm, - getFireAlarmList + addAlarm, + updateAlarm, + getFireAlarmList, + videoList, + getDetails } \ No newline at end of file diff --git a/api/app/lib/middlewares/authenticator.js b/api/app/lib/middlewares/authenticator.js index 07df3ec..34f71d4 100644 --- a/api/app/lib/middlewares/authenticator.js +++ b/api/app/lib/middlewares/authenticator.js @@ -61,6 +61,8 @@ let isPathExcluded = function (opts, path, method) { excludeOpts.push({ p: '/logout', o: 'PUT' }); excludeOpts.push({ p: '/water/realstate', o: 'GET' }); excludeOpts.push({ p: '/water/emergency', o: 'GET' }); + excludeOpts.push({ p: '/videoCenter/list', o: 'GET' }); + excludeOpts.push({ p: '/trafficindex/city/details', o: 'GET' }); excludeOpts.push({ p: '/fire/alarm', o: 'GET' }); excludeOpts.push({ p: '/fire/alarm', o: 'POST' }); excludeOpts.push({ p: '/fire/alarm/:id', o: 'PUT' }); diff --git a/api/app/lib/routes/superScreen/fire.js b/api/app/lib/routes/superScreen/fire.js index b134d95..d5dc113 100644 --- a/api/app/lib/routes/superScreen/fire.js +++ b/api/app/lib/routes/superScreen/fire.js @@ -15,4 +15,10 @@ module.exports = function (app, router, opts, AuthCode) { //修改消防告警状态 app.fs.api.logAttr['PUT/fire/alarm/:id'] = { content: '修改消防告警状态', visible: true }; router.put('/fire/alarm/:id', fire.updateAlarm(opts)); + + app.fs.api.logAttr['GET/videoCenter/list'] = { content: '获取萤石设备列表', visible: true }; + router.get('/videoCenter/list', fire.videoList(opts)); + + app.fs.api.logAttr['GET/trafficindex/city/detailst'] = { content: '获取南昌市道路数据', visible: true }; + router.get('/trafficindex/city/details', fire.getDetails(opts)); }; diff --git a/api/config.js b/api/config.js index 155f150..6558ac0 100644 --- a/api/config.js +++ b/api/config.js @@ -16,6 +16,9 @@ args.option(['d', 'dbconfig'], '后台同步数据库host示例:postgres/example args.option(['w', 'water'], '水环境api地址'); args.option(['a', 'worksafety'], '安监api地址'); +args.option('yingshiKey', '萤石 KEY') +args.option('yingshiSecret', '萤石 SECRET') + const flags = args.parse(process.argv); const DB = process.env.GDRC_DB || flags.pg; @@ -33,124 +36,137 @@ const DATABASE_CONFIG = process.env.DATABASE_HOST || flags.dbconfig;//同步数 const WATER_URL = process.env.WATER_URL || flags.water; const WORKSAFETY_URL = process.env.WORKSAFETY_URL || flags.worksafety; +const YINGSHI_KEY = process.env.YINGSHI_KEY || flags.yingshiKey; +const YINGSHI_SECRET = process.env.YINGSHI_SECRET || flags.yingshiSecret; +// 萤石服务的地址 +const YINGSHI_URL = process.env.YINGSHI_URL || flags.yingshiUrl || 'https://open.ys7.com/api'; + if (!DB || !BACKUPS_URL || !KUBESPHERE_URL || !DATABASE_CONFIG || !WATER_URL || !WORKSAFETY_URL) { - console.log('缺少启动参数,异常退出'); - args.showHelp(); - process.exit(-1); + console.log('缺少启动参数,异常退出'); + args.showHelp(); + process.exit(-1); } const product = { - port: flags.port || 8080, - staticDirs: ['static'], - mws: [ - { - entry: require('@fs/attachment').entry, - opts: { - qiniu: { - domain: QINIU_DOMAIN_QNDMN_RESOURCE, - bucket: QINIU_BUCKET_RESOURCE, - accessKey: QINIU_AK, - secretKey: QINIU_SK - }, - maxSize: 104857600, // 100M - } - }, { - entry: require('./app').entry, - opts: { - dev, - exclude: [ - // "*" - ], // 不做认证的路由,也可以使用 exclude: ["*"] 跳过所有路由 - - sms: { - ///阿里云-安心云 - accessKey: 'LTAI5tAFdjz7j38aNF2C9Qe8', - accessSecret: '1trYkmiqfBtvZL6BxkNH2uQcQQPs0S' - }, - email: { - enabled: true, - host: 'smtp.exmail.qq.com', - port: 465, - sender: { - name: '政务数据资源中心', - address: 'fsiot@free-sun.com.cn', - password: 'Fs2689' - } - }, - pssaRequest: [], - backupsUrl: BACKUPS_URL, - k8s: KUBESPHERE_URL, - dbConfig: DATABASE_CONFIG, - - } - }, { - entry: require('./app/lib/middlewares/proxy').entry, - opts: { - host: WATER_URL, - match: /\/_water\//, - } - }, { - entry: require('./app/lib/middlewares/proxy').entry, - opts: { - host: WORKSAFETY_URL, - match: /\/_worksafety\//, - } - } - ], - dc: { - url: DB, - opts: { - pool: { - max: 80, - min: 10, - idle: 10000 + port: flags.port || 8080, + staticDirs: ['static'], + mws: [ + { + entry: require('@fs/attachment').entry, + opts: { + qiniu: { + domain: QINIU_DOMAIN_QNDMN_RESOURCE, + bucket: QINIU_BUCKET_RESOURCE, + accessKey: QINIU_AK, + secretKey: QINIU_SK }, - define: { - freezeTableName: true, // 固定表名 - timestamps: false // 不含列 "createAt"/"updateAt"/"DeleteAt" + maxSize: 104857600, // 100M + } + }, { + entry: require('./app').entry, + opts: { + dev, + yingshiKey: YINGSHI_KEY, + yingshiSecret: YINGSHI_SECRET, + exclude: [ + // "*" + ], // 不做认证的路由,也可以使用 exclude: ["*"] 跳过所有路由 + + sms: { + ///阿里云-安心云 + accessKey: 'LTAI5tAFdjz7j38aNF2C9Qe8', + accessSecret: '1trYkmiqfBtvZL6BxkNH2uQcQQPs0S' }, - timezone: '+08:00', - logging: false - }, - models: [require('./app').models] - }, - logger: { - level: 'info', - json: false, - filename: path.join(__dirname, 'log', 'runtime.log'), - colorize: false, - maxsize: 1024 * 1024 * 5, - rotationFormat: false, - zippedArchive: true, - maxFiles: 10, - prettyPrint: true, - label: '', - timestamp: () => moment().format('YYYY-MM-DD HH:mm:ss.SSS'), - eol: os.EOL, - tailable: true, - depth: null, - showLevel: true, - maxRetries: 1 - } + email: { + enabled: true, + host: 'smtp.exmail.qq.com', + port: 465, + sender: { + name: '政务数据资源中心', + address: 'fsiot@free-sun.com.cn', + password: 'Fs2689' + } + }, + pssaRequest: [ + { + name: 'yingshiRequest', + root: YINGSHI_URL, + params: {} + }, + ], + backupsUrl: BACKUPS_URL, + k8s: KUBESPHERE_URL, + dbConfig: DATABASE_CONFIG, + + } + }, { + entry: require('./app/lib/middlewares/proxy').entry, + opts: { + host: WATER_URL, + match: /\/_water\//, + } + }, { + entry: require('./app/lib/middlewares/proxy').entry, + opts: { + host: WORKSAFETY_URL, + match: /\/_worksafety\//, + } + } + ], + dc: { + url: DB, + opts: { + pool: { + max: 80, + min: 10, + idle: 10000 + }, + define: { + freezeTableName: true, // 固定表名 + timestamps: false // 不含列 "createAt"/"updateAt"/"DeleteAt" + }, + timezone: '+08:00', + logging: false + }, + models: [require('./app').models] + }, + logger: { + level: 'info', + json: false, + filename: path.join(__dirname, 'log', 'runtime.log'), + colorize: false, + maxsize: 1024 * 1024 * 5, + rotationFormat: false, + zippedArchive: true, + maxFiles: 10, + prettyPrint: true, + label: '', + timestamp: () => moment().format('YYYY-MM-DD HH:mm:ss.SSS'), + eol: os.EOL, + tailable: true, + depth: null, + showLevel: true, + maxRetries: 1 + } }; const development = { - port: product.port, - staticDirs: product.staticDirs, - mws: product.mws, - dc: product.dc, - logger: product.logger + port: product.port, + staticDirs: product.staticDirs, + mws: product.mws, + dc: product.dc, + logger: product.logger }; if (dev) { - // mws - for (let mw of development.mws) { - // if (mw.opts.exclude) mw.opts.exclude = ['*']; // 使用 ['*'] 跳过所有路由 - } - // logger - development.logger.filename = path.join(__dirname, 'log', 'development.log'); - development.logger.level = 'debug'; - development.dc.opts.logging = console.log; + // mws + for (let mw of development.mws) { + // if (mw.opts.exclude) mw.opts.exclude = ['*']; // 使用 ['*'] 跳过所有路由 + } + // logger + development.logger.filename = path.join(__dirname, 'log', 'development.log'); + development.logger.level = 'debug'; + development.dc.opts.logging = console.log; } module.exports = dev ? development : product; diff --git a/super-screen/client/assets/images/homepage/bigscreen/background_n.png b/super-screen/client/assets/images/homepage/bigscreen/background_n.png new file mode 100644 index 0000000000000000000000000000000000000000..0834818a7fed79b8b521737b27034333bcf90b88 GIT binary patch literal 17431 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 literal 0 HcmV?d00001 diff --git a/super-screen/client/assets/images/homepage/bigscreen/dateDook.png b/super-screen/client/assets/images/homepage/bigscreen/dateDook.png new file mode 100644 index 0000000000000000000000000000000000000000..e49d725aebeb295b1b548810ff7d58f93ecff21c GIT binary patch literal 39595 zcmV)cK&ZcoP)PyA07*naRCr$Oy$P_T$9Wxgy8B=5{+5|HZ#Dn}fCNE+q$pCBL`$*|(F-YwS}a2) zmmDWbrJR%;OHmw&CDV?eO6+o#QYzbVIk96!&Qgg=h?XddD2kK>30g>*izJGm1dPA| zFqrMlyzTD)|95xleBFKL&f@?WkXQ!5T=L=Fci)|Nx6@yr?|kR`THy_O@hZG*<=>Dm z{|)@2;|Kpndj}HW)9bzk{5J{$ZUO#Qq<^DeJ$%w{s8=g5_F!~B_zv8P_OEA5+yeZ; zPnWEI@vhtg|LYC>w*Y_bC#vueAYb7UliFLrf4um2YmNM+LJ z_FNG@{eCM({0(?8>ffR|uQ|lu0{r!Od!jN2Kh6Yr-ad@r@5AE(I6S1>Ywpv313ux` zG2mZBbbq19PGDRQ>~}@buYJnn@ppSL@;?lBE5W^aSJExO^RxMK0Y5sefHwg>cx=Ii zh<{7jxfx-93-B)n?1{$klT6WFqW>cr?Fanv?7ZQR=Z42fZyG$Jnw#-MeC%x(dG z`E$5lvP$m09NDK(xFZ#)P6N}k3U~k~H_j?IJE?&4An0ACl^<-Y!oS6?{yCZ>N8lcK z;K$uV4?T1%xqTI}e+%%>2l#_vPmz5qM*Q|^&*%=E!twt3#V$a=+wrb;gN?=eYo^w9 zPmP;1|L#;BEep4*x32>5Z!W<5NJYNnO6Cnx8QR0H`elIUitP8qNdC+crD23$T+Ya~ zlN*_;_fBe4o)_;;JC@JZynQiw5@%ulT!*xkw%1#HL%;pa-ZS}(xvrdneF_?gl`AHEqWw4hY0=W@MW zZRh(H#;0n~vVdC!tS=eOH}DT{KENl?19t8|`x$*Ts$W!g&LlNl+=^BNx?CsNV^mKO-glHD;C-VMT0Q0GW8H2|m9LbZwOcmt zc4x=Om^}8ds&3$OyLFc@@g2B10iRw>iuU(GJ@_DSKj0stNBxU9{tJRVkfdeao*skz zeVM`}urI%%BdAlGXH+w0f*LOMUakr9#Z!$@T>wAb*D5>ZeQ#HQPmm|TGqU@+((O!X zSI@LJN}~-Z$x^UrQ>z%Nmp2k*N|D;|E3<@;ru?#l@H zC9spL^I>(%`sW9{)>s9u;qDEAKGEoQ(Nfx=nUMAf;C-gF*Ao48M;Fb|*=ZZy$&nKC z#~#Kl4gV#?{ml>fr5F3)&wBIZUC{j@{Kgi%0AHg0a{!(xB=Z3&^Is>zFGqJi4*5GH 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 literal 0 HcmV?d00001 diff --git a/super-screen/client/assets/images/homepage/bigscreen/green.png b/super-screen/client/assets/images/homepage/bigscreen/green.png new file mode 100644 index 0000000000000000000000000000000000000000..d6953f652d90821a7475253e40cb12a8a9e385b1 GIT binary patch literal 8320 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 { + + const { containerId, height, width, url, autoplay, audio, videoState, ysToken } = props; + const at = ysToken + if (!url || !at) return null; + const src = `https://open.ys7.com/ezopen/h5/iframe?audio=${audio ? '1' : '0'}&url=${url}&autoplay=${autoplay || 1}&accessToken=${at}` + // const src = `https://open.ys7.com/ezopen/h5/iframe?audio=1&url=${url}&autoplay=${autoplay || 1}&accessToken=${at}` + return ( +
+ + { + videoState && videoState.status == 0 ? +
+ 设备中断,正在处理中... +
+ : '' + } +
+ ) +} + +function mapStateToProps (state) { + const { auth, } = state; + return { + user: auth.user, + }; +} + +export default connect(mapStateToProps)(YSIframePlayer); \ No newline at end of file diff --git a/super-screen/client/src/sections/fire-control/actions/fire.js b/super-screen/client/src/sections/fire-control/actions/fire.js index 3b5b12c..a1296d0 100644 --- a/super-screen/client/src/sections/fire-control/actions/fire.js +++ b/super-screen/client/src/sections/fire-control/actions/fire.js @@ -40,3 +40,27 @@ export function modifyFireAlarm(id, params) { }, }); } + + +export function getVideoCenterList () { + return dispatch => basicAction({ + type: 'get', + dispatch: dispatch, + actionType: 'GET_VIDEO_CENTER_LIST', + url: ApiTable.videoCenterList, + msg: { error: '获取视频中心列表失败' }, + reducer: { name: 'videoCenterList' } + }); +} + +export function getDetails () { + return dispatch => basicAction({ + type: 'get', + dispatch: dispatch, + actionType: 'GET_DETAILS', + url: ApiTable.details, + msg: { error: '获取南昌市道路数据失败' }, + // reducer: { name: 'videoCenterList' } + }); +} + diff --git a/super-screen/client/src/sections/fire-control/components/Right-top2.js b/super-screen/client/src/sections/fire-control/components/Right-top2.js new file mode 100644 index 0000000..7a1adc4 --- /dev/null +++ b/super-screen/client/src/sections/fire-control/components/Right-top2.js @@ -0,0 +1,209 @@ +import React, { useEffect, useState } from 'react' +import { connect } from 'react-redux'; +import { Box, YSIframePlayer } from '$components'; +import { Select } from 'antd'; +import { ArrowDownOutlined, ArrowUpOutlined } from '@ant-design/icons'; +import './style.less'; + + +const DataTop5 = ({ dispatch, actions, longitudeLatitude }) => { + const [videoList, setVideoList] = useState([]) + const [options, setOptions] = useState([]) + const [traffic, setTraffic] = useState({}) + let weeks = { 1: '周一', 2: '周二', 3: '周三', 4: '周四', 5: '周五', 6: '周六', 7: '周日' } + + useEffect(() => { + dispatch(actions.firecontrol.getDetails()).then(res => { + if (res.success) { + setTraffic(res.payload.data?.data?.detail || {}); + } + }) + }, []) + + useEffect(() => { + dispatch(actions.firecontrol.getDetails()).then(res => { + if (res.success) { + setTraffic(res.payload.data?.data?.detail || {}); + } + }) + }, [longitudeLatitude]) + + console.log(longitudeLatitude); + + return
+
+
+ 周边路况实时数据 +
+
+ {longitudeLatitude?.longitude ? + <> + {/*
+
+
= 1 && traffic?.index < 1.5) ? + "#00FF87" : (traffic?.index >= 1.5 && traffic?.index < 1.8) ? + "#FFCC00;" : (traffic?.index >= 1.8 && traffic?.index < 2) ? + "#DE0102;" : (traffic?.index >= 2) ? "#8E0E0B;" : "" + }}>畅通
+
路况整体评价
+
+
+
+
平均通行速度
+
{traffic?.road_network_speed || '--'}
km/h
+
+
+
拥堵距离
+
{traffic?.yongdu_length_4 || '--'}
km
+
+
+
+
+
较10分钟前拥堵趋势:
+
+
+
+ 持平 +
+ +
+
与1设法厕任务v
+ +
+
+
+
路况描述:
+
dewbfdhuihseacf dsjhcf ewdcjaiopsdc op sadc jwe dcfp weopdcf ujew fdc
+ +
*/} + + + + : <> +
+
+ 南昌市
+
NANCHANG CITY
+
+
+
+
+
= 1 && traffic?.index < 1.5) ? + "#00FF87" : (traffic?.index >= 1.5 && traffic?.index < 1.8) ? + "#FFCC00;" : (traffic?.index >= 1.8 && traffic?.index < 2) ? + "#DE0102;" : (traffic?.index >= 2) ? "#8E0E0B;" : "" + }}>{ + (traffic?.index >= 1 && traffic?.index < 1.5) ? + "畅通" : (traffic?.index >= 1.5 && traffic?.index < 1.8) ? + "缓行" : (traffic?.index >= 1.8 && traffic?.index < 2) ? + "拥堵" : (traffic?.index >= 2) ? "严重拥堵" : "" + }
+
路况整体评价
+
+
+
实时拥堵指数
+
+
{traffic?.index || '--'}
+
+ 较上周同期{traffic?.last_index > traffic?.index ? "下降" : '上升'} + {((traffic?.last_index > traffic?.index ? (traffic?.last_index - traffic?.index) / traffic?.last_index : (traffic?.index - traffic?.last_index) / traffic?.last_index) * 100).toFixed(2)}% +
+ {traffic?.last_index > traffic?.index ? + + : } +
+
+
+
+
+ +
+
+
实时拥堵排行
+
+
{traffic?.rank || '--'}
+
/{traffic?.count || '--'}
+
全国重点城市拥堵排行
+ +
+
+
+
+
+
实时平均速度
+
{traffic?.road_network_speed || '--'}
km/h
+
+
+
实时严重拥堵里程
+
{traffic?.yongdu_length_4 || '--'}
km
+
+
+ +
+
+ +
+
+
近30日最高拥堵指数
+
+
{traffic?.month_max_yongdu_index || '--'}
+
{traffic?.month_max_congest_time} {weeks[traffic?.month_max_week_day]}
+
+
+
+
+ + } + +
+ +
+
+} +function mapStateToProps (state) { + const { auth, global } = state + return { + user: auth.user, + actions: global.actions, + } +} +export default connect(mapStateToProps)(DataTop5); + + diff --git a/super-screen/client/src/sections/fire-control/components/right-bottom.js b/super-screen/client/src/sections/fire-control/components/right-bottom.js index e63c64b..fd753c8 100644 --- a/super-screen/client/src/sections/fire-control/components/right-bottom.js +++ b/super-screen/client/src/sections/fire-control/components/right-bottom.js @@ -1,29 +1,71 @@ import React, { useEffect, useState } from 'react' -import { Box } from '$components'; +import { connect } from 'react-redux'; +import { Box, YSIframePlayer } from '$components'; +import { Select } from 'antd'; import './style.less'; -function DataTop5(props) { - - - return -
-
-
南昌大道14:12:32
-
-
-
南昌大道11:34:12
-
-
-
南昌大道08:34:12
-
-
-
南昌大道09:12:34
-
-
-
-} +const DataTop5 = ({ dispatch, actions }) => { + const [videoList, setVideoList] = useState([]) + const [options, setOptions] = useState([]) + const [videoData, setVideoData] = useState({}) + + + useEffect(() => { + dispatch(actions.firecontrol.getVideoCenterList()).then(res => { + if (res.success) { + setVideoList(res.payload.data || []) + setOptions(res.payload.data?.map(v => ({ value: v.deviceSerial, label: v.deviceName })) || []) + setVideoData(res.payload.data[0] || {}) + } + }) + }, []) + -export default DataTop5; + return
+
+
+ 视频监控 + { getFireData(); }, []) @@ -87,6 +87,7 @@ function homePage (props) {
{tab == 'overview' ?
{/*
- -
-
- -
*/} + +
+
+ +
*/}
From 8b507b4a6107850de6fea2bd2d33c5f4daad7005 Mon Sep 17 00:00:00 2001 From: "peng.peng" Date: Thu, 24 Aug 2023 09:50:55 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=EF=BC=88*=EF=BC=89=E7=A4=BE=E5=8C=BAgis?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../community-safty/containers/gis.js | 47 +++---------------- 1 file changed, 7 insertions(+), 40 deletions(-) diff --git a/super-screen/client/src/sections/community-safty/containers/gis.js b/super-screen/client/src/sections/community-safty/containers/gis.js index fff92a0..a8e9c7d 100644 --- a/super-screen/client/src/sections/community-safty/containers/gis.js +++ b/super-screen/client/src/sections/community-safty/containers/gis.js @@ -99,55 +99,22 @@ function Map(props) { map.setRotation(1.7000) - //初始层级 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' }, + { lng: 115.886724, lat: 28.534257, type: 'home', name: '城西幸福庄园', kind: 'markergreen' }, + { lng: 115.956004, lat: 28.541413, type: 'home', name: '城东幸福庄园', kind: 'markerblue' }, + { lng: 115.9335, lat: 28.541146, type: 'home', name: '城南幸福庄园', kind: 'markeryellow' }, + { lng: 115.91131, lat: 28.525062, type: 'home', name: '小蓝经投公租房', 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/markerblue.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) => { + data.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: '/assets/images/homepage/communtity/markergreen.png', // 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点 offset: new AMap.Pixel(-13, -30), - zooms: [15, 19], + zooms: [3, 19], }); marker.setTitle(x.name); map.add(marker); From 1d44e4d9fc4ab7afd815dd992f108ce697e270df Mon Sep 17 00:00:00 2001 From: "peng.peng" Date: Thu, 24 Aug 2023 11:12:08 +0800 Subject: [PATCH 4/9] =?UTF-8?q?(*)=E5=9F=8E=E5=B8=82=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../community-safty/components/infrastructure.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/super-screen/client/src/sections/community-safty/components/infrastructure.js b/super-screen/client/src/sections/community-safty/components/infrastructure.js index 366e469..2f2ed07 100644 --- a/super-screen/client/src/sections/community-safty/components/infrastructure.js +++ b/super-screen/client/src/sections/community-safty/components/infrastructure.js @@ -1,4 +1,4 @@ -import React from 'react' +import React, { useEffect } from 'react' import { Box, NoData } from '$components'; import { useMockRequest, ApiTable } from '$utils'; @@ -7,10 +7,14 @@ function Infrastructure(props) { url: 'https://superchangnan.anxinyun.cn/api/xiaofang/devices', method: 'mockGet', }); - const datas = devices?.map(s => { - s.data = JSON.parse(s.data) - return s; - }) + + let datas = [] + useEffect(() => { + devices?.map(s => { + s.data = JSON.parse(s.data) + return s; + }) + }, [devices]) const data = [ { name: '烟感设备', number: datas?.find(s => s.type == 3)?.data?.length || 0 }, From 8b311649e4df84a7ad51bcc19fb1a012fcde9219 Mon Sep 17 00:00:00 2001 From: "peng.peng" Date: Thu, 24 Aug 2023 12:48:38 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E6=B6=88=E9=98=B2=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/infrastructure.js | 14 ++---- .../community-safty/containers/homePage.js | 4 +- .../fire-control/components/alarm-add.js | 7 ++- .../sections/fire-control/constants/index.js | 4 +- .../sections/fire-control/containers/gis.js | 47 ++++++++++--------- .../fire-control/containers/homePage.js | 8 ++-- .../water-prevention/containers/homePage.js | 2 +- 7 files changed, 42 insertions(+), 44 deletions(-) diff --git a/super-screen/client/src/sections/community-safty/components/infrastructure.js b/super-screen/client/src/sections/community-safty/components/infrastructure.js index 2f2ed07..0d4626f 100644 --- a/super-screen/client/src/sections/community-safty/components/infrastructure.js +++ b/super-screen/client/src/sections/community-safty/components/infrastructure.js @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react' +import React from 'react' import { Box, NoData } from '$components'; import { useMockRequest, ApiTable } from '$utils'; @@ -7,14 +7,10 @@ function Infrastructure(props) { url: 'https://superchangnan.anxinyun.cn/api/xiaofang/devices', method: 'mockGet', }); - - let datas = [] - useEffect(() => { - devices?.map(s => { - s.data = JSON.parse(s.data) - return s; - }) - }, [devices]) + const datas = devices?.map(s => { + if (typeof (s.data) == 'string') s.data = JSON.parse(s.data) + return s; + }) const data = [ { name: '烟感设备', number: datas?.find(s => s.type == 3)?.data?.length || 0 }, diff --git a/super-screen/client/src/sections/community-safty/containers/homePage.js b/super-screen/client/src/sections/community-safty/containers/homePage.js index 4142f6a..51cfb70 100644 --- a/super-screen/client/src/sections/community-safty/containers/homePage.js +++ b/super-screen/client/src/sections/community-safty/containers/homePage.js @@ -60,9 +60,7 @@ function homePage(props) {
- 社区安全 -
- 流动人口 + 房屋租赁安全
{ dispatch(push('/homepage')) }} className='_exit' >返回平台
diff --git a/super-screen/client/src/sections/fire-control/components/alarm-add.js b/super-screen/client/src/sections/fire-control/components/alarm-add.js index b2bf6dd..18d6225 100644 --- a/super-screen/client/src/sections/fire-control/components/alarm-add.js +++ b/super-screen/client/src/sections/fire-control/components/alarm-add.js @@ -57,7 +57,12 @@ function FireAddForm(props) { : '请选择事件地点'}
- { + form.setFieldValue('typeParam', null) + form.setFieldValue('scene', null) + }} + placeholder="请选择警情类型"> {eventType_Data.map(s => )} diff --git a/super-screen/client/src/sections/fire-control/constants/index.js b/super-screen/client/src/sections/fire-control/constants/index.js index bf2e9ef..7701767 100644 --- a/super-screen/client/src/sections/fire-control/constants/index.js +++ b/super-screen/client/src/sections/fire-control/constants/index.js @@ -1,7 +1,7 @@ const typeParam_data = { '火灾扑救': { name: '着火物质', - options: ['固体物质', '液体或可熔物质', '气体', '带电物体和精密仪器等物质', '烹饪器具内的烹饪物',] + options: ['固体物质', '液体或可熔物质', '金属', '气体', '带电物体和精密仪器等物质', '烹饪器具内的烹饪物',] }, '救援抢险': { name: '事件类型', @@ -10,7 +10,7 @@ const typeParam_data = { }, '自然灾害': { name: '灾害类型', - options: ['水旱', '气象', '地质灾害', '等自然灾害', '森林、草原火灾'] + options: ['水旱', '气象', '地质灾害', '森林、草原火灾'] }, '灾难事故': { name: '事故类型', diff --git a/super-screen/client/src/sections/fire-control/containers/gis.js b/super-screen/client/src/sections/fire-control/containers/gis.js index 1c9809a..1393ba8 100644 --- a/super-screen/client/src/sections/fire-control/containers/gis.js +++ b/super-screen/client/src/sections/fire-control/containers/gis.js @@ -17,8 +17,8 @@ const tabs = [ { name: '应急避难场所', tab: 'yjbns', className: 'emergency_button' }, ] -function Map (props) { - const { dispatch, actions, emergencyList, propTab,setLongitudeLatitude } = props; +function Map(props) { + const { dispatch, actions, emergencyList, propTab, setLongitudeLatitude } = props; const [delay, setDelay] = useState(true) const [tab, setTab] = useState('xfyjwz') const [visible, setVisible] = useState(false) @@ -231,7 +231,7 @@ function Map (props) { // driving.clear() //清除路线 } - function drawRoute (route) { + function drawRoute(route) { var path = parseRouteToPath(route) var routeLine = new AMap.Polyline({ @@ -256,13 +256,13 @@ function Map (props) { } //计算两点距离 - function computeDis (p1, p2) { + function computeDis(p1, p2) { return Math.round(p1.distance(p2)); } // 解析DrivingRoute对象,构造成AMap.Polyline的path参数需要的格式 // DrivingResult对象结构参考文档 https://lbs.amap.com/api/javascript-api/reference/route-search#m_DriveRoute - function parseRouteToPath (route) { + function parseRouteToPath(route) { var path = [] for (var i = 0, l = route.steps.length; i < l; i++) { var step = route.steps[i] @@ -300,24 +300,25 @@ function Map (props) {
-
-
{ - map.clearInfoWindow(); - if (emergencyList['xfjy']?.length > 0) { - const list = emergencyList['xfjy'].sort((b, a) => computeDis( - new AMap.LngLat(x.longitude, x.latitude), - new AMap.LngLat(b.location?.split(',')[0], b.location?.split(',')[1]) - ) - computeDis( - new AMap.LngLat(x.longitude, x.latitude), - new AMap.LngLat(a.location?.split(',')[0], a.location?.split(',')[1]) - )) - const location = list[0]?.location - drawDrivings([x.longitude, x.latitude], location.split(','), x, list[0]) - } - }} - >一键护航
-
+ { + propTab == 'overview' &&
+
{ + map.clearInfoWindow(); + if (emergencyList['xfjy']?.length > 0) { + const list = emergencyList['xfjy'].sort((b, a) => computeDis( + new AMap.LngLat(x.longitude, x.latitude), + new AMap.LngLat(b.location?.split(',')[0], b.location?.split(',')[1]) + ) - computeDis( + new AMap.LngLat(x.longitude, x.latitude), + new AMap.LngLat(a.location?.split(',')[0], a.location?.split(',')[1]) + )) + const location = list[0]?.location + drawDrivings([x.longitude, x.latitude], location.split(','), x, list[0]) + } + }} + >一键护航
+
}
, document.getElementById(`alarmcontentid${x.location}`)); } diff --git a/super-screen/client/src/sections/fire-control/containers/homePage.js b/super-screen/client/src/sections/fire-control/containers/homePage.js index b301a25..f23ed82 100644 --- a/super-screen/client/src/sections/fire-control/containers/homePage.js +++ b/super-screen/client/src/sections/fire-control/containers/homePage.js @@ -16,7 +16,7 @@ import Weather from '../../water-prevention/components/weather'; import { FullScreenContainer } from '$components' import { useFsRequest } from '$utils'; -function homePage (props) { +function homePage(props) { const { dispatch, actions } = props; const childStyle = { height: '32%', color: '#fff', marginBottom: 17 } const cardHeight = document.body.clientHeight * 0.896 * 0.32 @@ -53,9 +53,7 @@ function homePage (props) {
- 智慧消防 -
- 一键护航 + 消防一键护航
{ dispatch(push('/homepage')) }} className='_exit' >返回平台
@@ -129,7 +127,7 @@ function homePage (props) { } -function mapStateToProps (state) { +function mapStateToProps(state) { const { auth, global } = state; diff --git a/super-screen/client/src/sections/water-prevention/containers/homePage.js b/super-screen/client/src/sections/water-prevention/containers/homePage.js index ed9810f..be53414 100644 --- a/super-screen/client/src/sections/water-prevention/containers/homePage.js +++ b/super-screen/client/src/sections/water-prevention/containers/homePage.js @@ -176,7 +176,7 @@ function homePage(props) {
- 水务防汛实时监测预警系统 + 防汛提前知
{ dispatch(push('/homepage')) }} className='_exit' >返回平台
From 065591000af765dffb012d7bc4dbe335b18918b5 Mon Sep 17 00:00:00 2001 From: "peng.peng" Date: Thu, 24 Aug 2023 12:54:03 +0800 Subject: [PATCH 6/9] =?UTF-8?q?(*)=E6=B6=88=E9=98=B2=E7=AB=99=E5=B1=95?= =?UTF-8?q?=E7=A4=BA=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/src/sections/fire-control/containers/gis.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/super-screen/client/src/sections/fire-control/containers/gis.js b/super-screen/client/src/sections/fire-control/containers/gis.js index 1393ba8..219ab80 100644 --- a/super-screen/client/src/sections/fire-control/containers/gis.js +++ b/super-screen/client/src/sections/fire-control/containers/gis.js @@ -60,7 +60,7 @@ function Map(props) { } useEffect(() => { - if (!delay && alarmList?.length > 0 && emergencyList['xfjy']) { + if (!delay && (alarmList?.length > 0 || emergencyList['xfjy'])) { map.clearMap() map && renderMarkers() map && renderAlarms() @@ -301,7 +301,7 @@ function Map(props) {
{ - propTab == 'overview' &&
+ propTab !== 'overview' &&
{ map.clearInfoWindow(); From 19704fffdfa842695203d15dc1cc46c908c5f1fd Mon Sep 17 00:00:00 2001 From: "peng.peng" Date: Thu, 24 Aug 2023 13:39:35 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=EF=BC=88*=EF=BC=89=E6=B6=88=E9=98=B2?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/sections/fire-control/components/item-left.js | 4 ++-- .../client/src/sections/fire-control/components/time.js | 9 +++++---- .../client/src/sections/fire-control/containers/gis.js | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/super-screen/client/src/sections/fire-control/components/item-left.js b/super-screen/client/src/sections/fire-control/components/item-left.js index 01d7d1d..f709d40 100644 --- a/super-screen/client/src/sections/fire-control/components/item-left.js +++ b/super-screen/client/src/sections/fire-control/components/item-left.js @@ -2,7 +2,7 @@ import React from 'react' import { Box, AutoRollComponent } from '$components'; import moment from 'moment' import { getName, getPhone } from '$utils'; -import TimeComponent from './time'; +import TimeComponent, { formatSeconds } from './time'; import { typeParam_data } from '../constants/index' import './style.less' function BasicInfo(props) { @@ -75,7 +75,7 @@ function BasicInfo(props) {
-
路线规划
+
路线规划 {alarmInfo?.routes?.time && `(${formatSeconds(alarmInfo?.routes?.time, true)})`}
3} diff --git a/super-screen/client/src/sections/fire-control/components/time.js b/super-screen/client/src/sections/fire-control/components/time.js index 1352d27..aba54fe 100644 --- a/super-screen/client/src/sections/fire-control/components/time.js +++ b/super-screen/client/src/sections/fire-control/components/time.js @@ -22,7 +22,7 @@ export default TimeComponent; //秒数转化为天时分秒 -export const formatSeconds = (value) => { +export const formatSeconds = (value, symbol) => { var secondTime = parseInt(value);// 秒 var minuteTime = 0;// 分 var hourTime = 0;// 小时 @@ -46,12 +46,13 @@ export const formatSeconds = (value) => { } } } - var result = "" + (parseInt(secondTime) < 10 ? '0' + parseInt(secondTime) : parseInt(secondTime)); - result = "" + (parseInt(minuteTime) < 10 ? '0' + parseInt(minuteTime) : parseInt(minuteTime)) + ":" + result; - result = "" + (parseInt(hourTime) < 10 ? '0' + parseInt(hourTime) : parseInt(hourTime)) + ":" + result; + var result = symbol ? '' : "" + (parseInt(secondTime) < 10 ? '0' + parseInt(secondTime) : parseInt(secondTime)); + result = "" + ((!symbol && parseInt(minuteTime) < 10) ? '0' + parseInt(minuteTime) : parseInt(minuteTime)) + (symbol ? '分钟' : ":") + result; + result = (symbol && parseInt(hourTime) == 0) ? result : "" + (!symbol && parseInt(hourTime) < 10 ? '0' + parseInt(hourTime) : parseInt(hourTime)) + (symbol ? '小时' : ":") + result; if (dayTime > 0) { result = "" + parseInt(dayTime) + "天 " + result; } // console.log('result', result); + return result; } \ No newline at end of file diff --git a/super-screen/client/src/sections/fire-control/containers/gis.js b/super-screen/client/src/sections/fire-control/containers/gis.js index 219ab80..fc4219a 100644 --- a/super-screen/client/src/sections/fire-control/containers/gis.js +++ b/super-screen/client/src/sections/fire-control/containers/gis.js @@ -301,7 +301,7 @@ function Map(props) {
{ - propTab !== 'overview' &&
+ propTab == 'overview' &&
{ map.clearInfoWindow(); From 844086b218c963a4839a9ea2cf152dc6a74195c9 Mon Sep 17 00:00:00 2001 From: wenlele Date: Thu, 24 Aug 2023 13:44:16 +0800 Subject: [PATCH 8/9] =?UTF-8?q?=E8=AF=AF=E5=88=A0=E7=9A=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/lib/controllers/superScreen/fire.js | 22 +- api/app/lib/middlewares/authenticator.js | 247 +++++++++--------- api/app/lib/routes/superScreen/fire.js | 3 + api/config.js | 9 + .../src/sections/fire-control/actions/fire.js | 131 +++++----- .../fire-control/components/Right-top2.js | 4 +- .../fire-control/containers/homePage.js | 8 + super-screen/client/src/utils/webapi.js | 3 +- 8 files changed, 240 insertions(+), 187 deletions(-) diff --git a/api/app/lib/controllers/superScreen/fire.js b/api/app/lib/controllers/superScreen/fire.js index 8a947f5..9a11675 100644 --- a/api/app/lib/controllers/superScreen/fire.js +++ b/api/app/lib/controllers/superScreen/fire.js @@ -229,7 +229,26 @@ function getFireTrend (opts) { } +function getSurroundingConditions (opts) { + return async function (ctx) { + try { + + const { app, yingshiTokenRes } = ctx + const { center } = ctx.query; + const res = await app.fs.baiDu.get('/traffic/v1/around', { ak: opts.baiduAK, radius: 1000, center: center }) + ctx.status = 200 + ctx.body = res.body || {} + + } catch (error) { + ctx.fs.logger.error(`path: ${ctx.path}, error: error`); + ctx.status = 400; + ctx.body = { + message: '获取南昌市道路数据失败' + } + } + } +} module.exports = { addAlarm, @@ -238,5 +257,6 @@ module.exports = { getFireDevice, getFireTrend, videoList, - getDetails + getDetails, + getSurroundingConditions } \ No newline at end of file diff --git a/api/app/lib/middlewares/authenticator.js b/api/app/lib/middlewares/authenticator.js index 4f29952..11d2978 100644 --- a/api/app/lib/middlewares/authenticator.js +++ b/api/app/lib/middlewares/authenticator.js @@ -8,42 +8,42 @@ const util = require('util'); const moment = require('moment'); class ExcludesUrls { - constructor(opts) { - this.allUrls = undefined; - this.reload(opts); - } + constructor(opts) { + this.allUrls = undefined; + this.reload(opts); + } - sanitizePath (path) { - if (!path) return '/'; - const p = '/' + path.replace(/^\/+/i, '').replace(/\/+$/, '').replace(/\/{2,}/, '/'); - return p; - } + sanitizePath (path) { + if (!path) return '/'; + const p = '/' + path.replace(/^\/+/i, '').replace(/\/+$/, '').replace(/\/{2,}/, '/'); + return p; + } - reload (opts) { - // load all url - if (!this.allUrls) { - this.allUrls = opts; - let that = this; - this.allUrls.forEach(function (url, i, arr) { - if (typeof url === "string") { - url = { p: url, o: '*' }; - arr[i] = url; - } - const keys = []; - let eachPath = url.p; - url.p = (!eachPath || eachPath === '(.*)' || util.isRegExp(eachPath)) ? eachPath : that.sanitizePath(eachPath); - url.pregexp = pathToRegexp(eachPath, keys); - }); - } - } + reload (opts) { + // load all url + if (!this.allUrls) { + this.allUrls = opts; + let that = this; + this.allUrls.forEach(function (url, i, arr) { + if (typeof url === "string") { + url = { p: url, o: '*' }; + arr[i] = url; + } + const keys = []; + let eachPath = url.p; + url.p = (!eachPath || eachPath === '(.*)' || util.isRegExp(eachPath)) ? eachPath : that.sanitizePath(eachPath); + url.pregexp = pathToRegexp(eachPath, keys); + }); + } + } - isExcluded (path, method) { - return this.allUrls.some(function (url) { - return !url.auth - && url.pregexp.test(path) - && (url.o === '*' || url.o.indexOf(method) !== -1); - }); - } + isExcluded (path, method) { + return this.allUrls.some(function (url) { + return !url.auth + && url.pregexp.test(path) + && (url.o === '*' || url.o.indexOf(method) !== -1); + }); + } } /** @@ -53,108 +53,109 @@ class ExcludesUrls { * @param {*} method 当前request的method */ let isPathExcluded = function (opts, path, method) { - let excludeAll = Boolean(opts.exclude && opts.exclude.length && opts.exclude[0] == '*'); - let excludes = null; - if (!excludeAll) { - let excludeOpts = opts.exclude || []; - excludeOpts.push({ p: '/login', o: 'POST' }); - excludeOpts.push({ p: '/logout', o: 'PUT' }); - excludeOpts.push({ p: '/water/realstate', o: 'GET' }); - excludeOpts.push({ p: '/water/emergency', o: 'GET' }); - excludeOpts.push({ p: '/videoCenter/list', o: 'GET' }); - excludeOpts.push({ p: '/trafficindex/city/details', o: 'GET' }); - excludeOpts.push({ p: '/fire/alarm', o: 'GET' }); - excludeOpts.push({ p: '/fire/alarm', o: 'POST' }); - excludeOpts.push({ p: '/fire/alarm/:id', o: 'PUT' }); - excludeOpts.push({ p: '/fire/device', o: 'GET' }); - excludeOpts.push({ p: '/fire/trend', o: 'GET' }); - excludeOpts.push({ p: '/pumpStatus/:structId', o: 'GET' }); - - excludes = new ExcludesUrls(excludeOpts); - } - let excluded = excludeAll || excludes.isExcluded(path, method); - return excluded; + let excludeAll = Boolean(opts.exclude && opts.exclude.length && opts.exclude[0] == '*'); + let excludes = null; + if (!excludeAll) { + let excludeOpts = opts.exclude || []; + excludeOpts.push({ p: '/login', o: 'POST' }); + excludeOpts.push({ p: '/logout', o: 'PUT' }); + excludeOpts.push({ p: '/water/realstate', o: 'GET' }); + excludeOpts.push({ p: '/water/emergency', o: 'GET' }); + excludeOpts.push({ p: '/videoCenter/list', o: 'GET' }); + excludeOpts.push({ p: '/trafficindex/city/details', o: 'GET' }); + excludeOpts.push({ p: '/traffic/v1/around', o: 'GET' }); + excludeOpts.push({ p: '/fire/alarm', o: 'GET' }); + excludeOpts.push({ p: '/fire/alarm', o: 'POST' }); + excludeOpts.push({ p: '/fire/alarm/:id', o: 'PUT' }); + excludeOpts.push({ p: '/fire/device', o: 'GET' }); + excludeOpts.push({ p: '/fire/trend', o: 'GET' }); + excludeOpts.push({ p: '/pumpStatus/:structId', o: 'GET' }); + + excludes = new ExcludesUrls(excludeOpts); + } + let excluded = excludeAll || excludes.isExcluded(path, method); + return excluded; }; let authorizeToken = async function (ctx, token) { - let rslt = null; - const tokenFormatRegexp = /^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$/g; - if (token && tokenFormatRegexp.test(token)) { - try { + let rslt = null; + const tokenFormatRegexp = /^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$/g; + if (token && tokenFormatRegexp.test(token)) { + try { - const authorizeRes = await ctx.fs.dc.models.UserToken.findOne({ - where: { - token: token - } - }) - const { userInfo, expired } = authorizeRes; - - if (expired && moment().valueOf() <= moment(expired).valueOf()) { - rslt = { - 'authorized': userInfo.authorized, - 'resources': (userInfo || {}).resources || [], - }; - ctx.fs.api.userId = userInfo.id; - ctx.fs.api.userInfo = userInfo; - ctx.fs.api.token = token; + const authorizeRes = await ctx.fs.dc.models.UserToken.findOne({ + where: { + token: token } - } catch (err) { - const { error } = err.response || {}; - ctx.fs.logger.log('[anxinyun]', '[AUTH] failed', (error || {}).message || `cannot GET /users/${token}`); - } - } - return rslt; + }) + const { userInfo, expired } = authorizeRes; + + if (expired && moment().valueOf() <= moment(expired).valueOf()) { + rslt = { + 'authorized': userInfo.authorized, + 'resources': (userInfo || {}).resources || [], + }; + ctx.fs.api.userId = userInfo.id; + ctx.fs.api.userInfo = userInfo; + ctx.fs.api.token = token; + } + } catch (err) { + const { error } = err.response || {}; + ctx.fs.logger.log('[anxinyun]', '[AUTH] failed', (error || {}).message || `cannot GET /users/${token}`); + } + } + return rslt; }; let isResourceAvailable = function (resources, options) { - let authCode = null; - // authorize user by authorization attribute - const { authAttr, method, path } = options; - for (let prop in authAttr) { - let keys = []; - let re = pathToRegexp(prop.replace(/\:[A-Za-z_\-]+\b/g, '(\\d+)'), keys); - if (re.test(`${method}${path}`)) { - authCode = authAttr[prop]; - break; - } - } - return !authCode || (resources || []).some(code => code === authCode); + let authCode = null; + // authorize user by authorization attribute + const { authAttr, method, path } = options; + for (let prop in authAttr) { + let keys = []; + let re = pathToRegexp(prop.replace(/\:[A-Za-z_\-]+\b/g, '(\\d+)'), keys); + if (re.test(`${method}${path}`)) { + authCode = authAttr[prop]; + break; + } + } + return !authCode || (resources || []).some(code => code === authCode); }; function factory (app, opts) { - return async function auth (ctx, next) { - const { path, method, header, query } = ctx; - ctx.fs.logger.log('[AUTH] start', path, method); - ctx.fs.api = ctx.fs.api || {}; - ctx.fs.port = opts.port; - ctx.redis = app.redis; - ctx.redisTools = app.redisTools; - let error = null; - if (path) { - if (!isPathExcluded(opts, path, method)) { - const user = await authorizeToken(ctx, header.token || query.token); - if (user && user.authorized) { - // if (!isResourceAvailable(user.resources, { authAttr: app.fs.auth.authAttr, path, method })) { - // error = { status: 403, name: 'Forbidden' } - // } else { - // error = { status: 401, name: 'Unauthorized' } - // } - } else { - error = { status: 401, name: 'Unauthorized' } - } + return async function auth (ctx, next) { + const { path, method, header, query } = ctx; + ctx.fs.logger.log('[AUTH] start', path, method); + ctx.fs.api = ctx.fs.api || {}; + ctx.fs.port = opts.port; + ctx.redis = app.redis; + ctx.redisTools = app.redisTools; + let error = null; + if (path) { + if (!isPathExcluded(opts, path, method)) { + const user = await authorizeToken(ctx, header.token || query.token); + if (user && user.authorized) { + // if (!isResourceAvailable(user.resources, { authAttr: app.fs.auth.authAttr, path, method })) { + // error = { status: 403, name: 'Forbidden' } + // } else { + // error = { status: 401, name: 'Unauthorized' } + // } + } else { + error = { status: 401, name: 'Unauthorized' } } - } else { - error = { status: 401, name: 'Unauthorized' }; - } - if (error) { - ctx.fs.logger.log('[AUTH] failed', path, method); - ctx.status = error.status; - ctx.body = error.name; - } else { - ctx.fs.logger.log('[AUTH] passed', path, method); - await next(); - } - } + } + } else { + error = { status: 401, name: 'Unauthorized' }; + } + if (error) { + ctx.fs.logger.log('[AUTH] failed', path, method); + ctx.status = error.status; + ctx.body = error.name; + } else { + ctx.fs.logger.log('[AUTH] passed', path, method); + await next(); + } + } } module.exports = factory; diff --git a/api/app/lib/routes/superScreen/fire.js b/api/app/lib/routes/superScreen/fire.js index 86ef193..63a7903 100644 --- a/api/app/lib/routes/superScreen/fire.js +++ b/api/app/lib/routes/superScreen/fire.js @@ -22,6 +22,9 @@ module.exports = function (app, router, opts, AuthCode) { app.fs.api.logAttr['GET/trafficindex/city/detailst'] = { content: '获取南昌市道路数据', visible: true }; router.get('/trafficindex/city/details', fire.getDetails(opts)); + app.fs.api.logAttr['GET/traffic/v1/around'] = { content: '获取周边路况数据失败', visible: true }; + router.get('/traffic/v1/around', fire.getSurroundingConditions(opts)); + //获取消防设备 app.fs.api.logAttr['GET/fire/device'] = { content: '获取消防设备', visible: true }; router.get('/fire/device', fire.getFireDevice(opts)); diff --git a/api/config.js b/api/config.js index aea1ab4..714d054 100644 --- a/api/config.js +++ b/api/config.js @@ -46,6 +46,9 @@ const YINGSHI_SECRET = process.env.YINGSHI_SECRET || flags.yingshiSecret; // 萤石服务的地址 const YINGSHI_URL = process.env.YINGSHI_URL || flags.yingshiUrl || 'https://open.ys7.com/api'; +const BAIDU_API = process.env.BAIDU_API || flags.baiDu || 'https://api.map.baidu.com'; +const BAIDU_AK = process.env.BAIDU_AK || flags.baiDuAk || 'AeSOcqC282tdSUVOfYxe68nEcNF1CTj7'; + if (!DB || !BACKUPS_URL || !KUBESPHERE_URL || !DATABASE_CONFIG || !WATER_URL || !WORKSAFETY_URL || !THIRD_FIRECONTROL || !AXY_API_URL || !AXY_PUMP_PROJECT) { console.log('缺少启动参数,异常退出'); args.showHelp(); @@ -73,6 +76,7 @@ const product = { dev, yingshiKey: YINGSHI_KEY, yingshiSecret: YINGSHI_SECRET, + baiduAK: BAIDU_AK, exclude: [ // "*" ], // 不做认证的路由,也可以使用 exclude: ["*"] 跳过所有路由 @@ -103,6 +107,11 @@ const product = { name: 'yingshiRequest', root: YINGSHI_URL, params: {} + }, + { + name: 'baiDu', + root: BAIDU_API, + params: {} },], } }, { diff --git a/super-screen/client/src/sections/fire-control/actions/fire.js b/super-screen/client/src/sections/fire-control/actions/fire.js index 680f0ed..e651ca6 100644 --- a/super-screen/client/src/sections/fire-control/actions/fire.js +++ b/super-screen/client/src/sections/fire-control/actions/fire.js @@ -3,86 +3,97 @@ 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: 'alarms' } - }); +export function getFireAlarmList (query) { + return dispatch => basicAction({ + type: 'get', + dispatch: dispatch, + query: query || {}, + actionType: 'GET_FIRE_ALARM', + url: `${ApiTable.getFireAlarmList}`, + msg: { error: '获取消防告警列表失败' }, + reducer: { name: 'alarms' } + }); } -export function addFireAlarm(params) { - return (dispatch) => basicAction({ - type: 'post', - data: params, - dispatch, - actionType: 'ADD_RIST_REPORT', - url: ApiTable.getFireAlarmList, - msg: { - option: '新增消防告警', - }, - }); +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: '', - }, - }); +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: '', + }, + }); } - export function getVideoCenterList () { return dispatch => basicAction({ - type: 'get', - dispatch: dispatch, - actionType: 'GET_VIDEO_CENTER_LIST', - url: ApiTable.videoCenterList, - msg: { error: '获取视频中心列表失败' }, - reducer: { name: 'videoCenterList' } + type: 'get', + dispatch: dispatch, + actionType: 'GET_VIDEO_CENTER_LIST', + url: ApiTable.videoCenterList, + msg: { error: '获取视频中心列表失败' }, + reducer: { name: 'videoCenterList' } }); } export function getDetails () { return dispatch => basicAction({ - type: 'get', - dispatch: dispatch, - actionType: 'GET_DETAILS', - url: ApiTable.details, - msg: { error: '获取南昌市道路数据失败' }, + type: 'get', + dispatch: dispatch, + actionType: 'GET_DETAILS', + url: ApiTable.details, + msg: { error: '获取南昌市道路数据失败' }, + // reducer: { name: 'videoCenterList' } + }); +} + +export function getSurroundingConditions (query = {}) { + return dispatch => basicAction({ + type: 'get', + dispatch: dispatch, + query: query, + actionType: 'GET_SURROUNDING_CONDITION', + url: ApiTable.surroundingConditions, + msg: { error: '获取周边路况数据失败' }, // reducer: { name: 'videoCenterList' } }); } -export function getFireDevice() { - return dispatch => basicAction({ - type: 'get', - dispatch: dispatch, - actionType: 'GET_FIRE_DEVICE', - url: `${ApiTable.getFireDevice}`, - msg: { error: '获取消防设备失败' }, - }); +export function getFireDevice () { + return dispatch => basicAction({ + type: 'get', + dispatch: dispatch, + actionType: 'GET_FIRE_DEVICE', + url: `${ApiTable.getFireDevice}`, + msg: { error: '获取消防设备失败' }, + }); } -export function getFireTrend() { - return dispatch => basicAction({ - type: 'get', - dispatch: dispatch, - actionType: 'GET_FIRE_TREND', - url: `${ApiTable.getFireTrend}`, - msg: { error: '获取火情趋势失败' }, - }); +export function getFireTrend () { + return dispatch => basicAction({ + type: 'get', + dispatch: dispatch, + actionType: 'GET_FIRE_TREND', + url: `${ApiTable.getFireTrend}`, + msg: { error: '获取火情趋势失败' }, + }); } diff --git a/super-screen/client/src/sections/fire-control/components/Right-top2.js b/super-screen/client/src/sections/fire-control/components/Right-top2.js index 7a1adc4..e4d0d89 100644 --- a/super-screen/client/src/sections/fire-control/components/Right-top2.js +++ b/super-screen/client/src/sections/fire-control/components/Right-top2.js @@ -21,9 +21,9 @@ const DataTop5 = ({ dispatch, actions, longitudeLatitude }) => { }, []) useEffect(() => { - dispatch(actions.firecontrol.getDetails()).then(res => { + dispatch(actions.firecontrol.getSurroundingConditions({ center: `${longitudeLatitude?.longitude},${longitudeLatitude?.latitude}` })).then(res => { if (res.success) { - setTraffic(res.payload.data?.data?.detail || {}); + // setTraffic(res.payload.data?.data?.detail || {}); } }) }, [longitudeLatitude]) diff --git a/super-screen/client/src/sections/fire-control/containers/homePage.js b/super-screen/client/src/sections/fire-control/containers/homePage.js index b301a25..c2e8afc 100644 --- a/super-screen/client/src/sections/fire-control/containers/homePage.js +++ b/super-screen/client/src/sections/fire-control/containers/homePage.js @@ -30,6 +30,14 @@ function homePage (props) { const [fireTrend, setFireTrend] = useState([]) const { data: emergencyList = {} } = useFsRequest({ url: 'water/emergency' }); + const endEvent = () => { + dispatch(actions.firecontrol.modifyFireAlarm( + alarmInfo?.alarmInfo?.id, { state: 2 } + )).then(res => { + setTab('overview') + }) + } + useEffect(() => { getFireData(); }, []) diff --git a/super-screen/client/src/utils/webapi.js b/super-screen/client/src/utils/webapi.js index 3243cce..a0699a2 100644 --- a/super-screen/client/src/utils/webapi.js +++ b/super-screen/client/src/utils/webapi.js @@ -139,8 +139,9 @@ export const ApiTable = { //获取摄像头数据 - videoCenterList:'videoCenter/list', + videoCenterList: 'videoCenter/list', details: '/trafficindex/city/details', + surroundingConditions: 'traffic/v1/around', getFireDevice: 'fire/device', getFireTrend: 'fire/trend', From db8dd620b8d9b96d4493197ed24a54410a69cab4 Mon Sep 17 00:00:00 2001 From: "peng.peng" Date: Thu, 24 Aug 2023 13:52:11 +0800 Subject: [PATCH 9/9] =?UTF-8?q?(*)=E6=B6=88=E9=98=B2=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/sections/fire-control/containers/gis.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/super-screen/client/src/sections/fire-control/containers/gis.js b/super-screen/client/src/sections/fire-control/containers/gis.js index fc4219a..3f8a656 100644 --- a/super-screen/client/src/sections/fire-control/containers/gis.js +++ b/super-screen/client/src/sections/fire-control/containers/gis.js @@ -66,7 +66,7 @@ function Map(props) { map && renderAlarms() setMapInitFit() } - }, [delay, alarmList, emergencyList]) + }, [delay, alarmList, emergencyList, propTab]) const renderMarkers = () => { const data = emergencyList['xfjy'] @@ -219,11 +219,8 @@ function Map(props) { if (result.routes && result.routes.length) { // 绘制第一条路线,也可以按需求绘制其它几条路线 drawRoute(result.routes[0]) + props.routeCallback({ routes: result.routes[0] }) - props.alarmOk({ - alarmInfo: { ...alarmInfo, routes: result.routes[0] }, - rescueInfo: rescueInfo - }) } } else { } @@ -315,6 +312,14 @@ function Map(props) { )) const location = list[0]?.location drawDrivings([x.longitude, x.latitude], location.split(','), x, list[0]) + + props.alarmOk({ + alarmInfo: { ...x }, + rescueInfo: list[0] + }) + setTimeout(() => { + drawDrivings([x.longitude, x.latitude], location.split(','), x, list[0]) + }, 200); } }} >一键护航