newEvacuationBigData.vue 130 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597
  1. <template>
  2. <div class="newEvacuationBigData">
  3. <div class="evacuation-title-positon-box">风险应急处置指挥平台</div>
  4. <!--顶部标题-->
  5. <!--左侧 传感器/硬件/echarts-->
  6. <div class="left-max-big-box">
  7. <div class="left-big-box-one">
  8. <div class="big-title-box">
  9. <img src="@/assets/ZDimages/bigData3_2/icon_znjc_tb.png">
  10. <p>智能检测</p>
  11. </div>
  12. <div class="max-sensor-box scrollbar-box" id="max-sensor-box">
  13. <div class="sensor-for-max-box" :class="item.type==1?'sensor-alarm-one':'sensor-alarm-two'"
  14. v-for="(item,index) in sensorList" :key="index">
  15. <div class="sensor-min-img-box">
  16. </div>
  17. <img v-if="item.type == 0" :src="item.zcImg" alt="">
  18. <img v-if="item.type == 1" :src="item.ycImg" alt="">
  19. <p class="sensor-name-p">{{item.funcName}}</p>
  20. <p class="sensor-num-p">{{item.formatVal}}</p>
  21. </div>
  22. <p v-if="!sensorList[0]" style="line-height:200px;font-size:16px;color:#fff;text-align: center">暂无数据</p>
  23. </div>
  24. </div>
  25. <div class="left-big-box-two">
  26. <div class="big-title-box">
  27. <img src="@/assets/ZDimages/bigData3_2/icon_znkz_tb.png">
  28. <p>智能控制</p>
  29. </div>
  30. <div class="control-max-box scrollbar-box" id="control-max-box">
  31. <div class="control-for-box" v-for="(item,index) in controlList" :key="index">
  32. <p class="control-for-title-p">{{item.name}}</p>
  33. <div class="control-for-img-box">
  34. <img class="position-img" src="@/assets/ZDimages/bigData3_2/icon_znkz_bg.png">
  35. <img v-if="item.enumName == 'AI_VENTILATION'" class="for-img" src="@/assets/ZDimages/bigData3_2/icon_znkz_tf.png">
  36. <img v-if="item.enumName == 'SWITCH'" class="for-img" src="@/assets/ZDimages/bigData3_2/icon_znkz_dy.png">
  37. </div>
  38. <img class="position-big-img" src="@/assets/ZDimages/bigData3_2/icon_znkz_wq.png">
  39. <el-switch
  40. v-if="item.code == 3||item.code == 4"
  41. class="switch"
  42. @click.native="changeIsNeedCaptcha(item)"
  43. v-model="item.code"
  44. :active-value="4"
  45. :inactive-value="3"
  46. active-text="关闭"
  47. inactive-text="开启"
  48. disabled>
  49. </el-switch>
  50. <p class="control-null-p" v-if="item.code != 3&&item.code != 4">离线</p>
  51. </div>
  52. <p v-if="!controlList[0]" style="line-height:200px;font-size:16px;color:#fff;text-align: center">暂无数据</p>
  53. </div>
  54. </div>
  55. <div class="left-big-box-three">
  56. <div class="big-title-box">
  57. <img src="@/assets/ZDimages/bigData3_2/icon_yygb_wxy.png">
  58. <p>危险源</p>
  59. </div>
  60. <div id="eCharts"></div>
  61. </div>
  62. </div>
  63. <!--中间 楼栋/楼层/当前位置/疏散开关-->
  64. <div class="center-max-big-box">
  65. <div class="left-big-box-one">
  66. <div>
  67. <el-select v-model="buildingId" placeholder="请选择"
  68. :popper-append-to-body="false"
  69. @change="buildingChange"
  70. class="building-select-box">
  71. <el-option
  72. v-for="item in buildingOptions"
  73. :key="item.id"
  74. :label="item.name"
  75. :value="item.id">
  76. <div style="display: flex" v-if="item.planType">
  77. <img src="@/assets/ZDimages/bigData3_2/icon_lc_yc.png" style="margin:11px 10px 0 0;width:14px;height:12px;">
  78. <p style="margin-right:24px;">{{ item.name }}</p>
  79. </div>
  80. <div style="display: flex" v-else>
  81. <p style="margin:0 24px;">{{ item.name }}</p>
  82. </div>
  83. </el-option>
  84. </el-select>
  85. </div>
  86. <div>
  87. <el-select v-model="floorId" placeholder="请选择"
  88. :popper-append-to-body="false"
  89. @change="floorChange"
  90. class="floor-select-box">
  91. <el-option
  92. v-for="item in floorOptions"
  93. :key="item.id"
  94. :label="item.name"
  95. :value="item.id">
  96. <div style="display: flex" v-if="item.planType">
  97. <img src="@/assets/ZDimages/bigData3_2/icon_lc_yc.png" style="margin:11px 10px 0 0;width:14px;height:12px;">
  98. <p style="margin-right:24px;">{{ item.name }}</p>
  99. </div>
  100. <div style="display: flex" v-else>
  101. <p style="margin:0 24px;">{{ item.name }}</p>
  102. </div>
  103. </el-option>
  104. </el-select>
  105. </div>
  106. <p class="text-p">{{subText}} {{floorText}}</p>
  107. <p class="button-p-one" @click="evacuationButton">{{evacuationType?'结束疏散':'立即疏散'}}</p>
  108. <p class="button-p-two" @click="goRoute">{{routeType?'返回':'全屏'}}</p>
  109. </div>
  110. <div class="left-big-box-two">
  111. <div class="newEvacuation-map-max-big-box"
  112. v-if="mapType"
  113. :style="'width:'+mapData.width+'px;height:'+mapData.height+'px;transform: scale('+mapData.zoomData+');margin-top:-'+mapData.height/2+'px;margin-left:-'+mapData.width/2+'px;'">
  114. <div class="newEvacuation-map-big-box"
  115. :style="'width:'+mapData.width+'px;height:'+mapData.height+'px;'">
  116. <div class="newEvacuation-map-for-box for-map-box-one"
  117. :class="!item.planType && checkSubId ==item.subId ? 'room-type-one':(
  118. item.planType && checkSubId !=item.subId ? 'room-type-two':(
  119. item.planType && checkSubId ==item.subId ? 'room-type-three':(
  120. !item.loginAdmin ? 'room-type-noe':''
  121. )))"
  122. @click="checkSubClick(item)"
  123. v-for="(item,index) in mapList" :key="index" v-if="item.type == 1"
  124. :style="'top:'+item.y+'px;left:'+item.x+'px;width:'+item.w+'px;height:'+item.h+'px;'">
  125. <div class="newEvacuation-map-for-min-box">
  126. <!--名称/实验室名称-->
  127. <el-tooltip class="item" effect="dark" :content="item.roomType == '-99'?item.roomName:item.subName" placement="top">
  128. <p class="map-for-name-p" :style="'margin-top:'+((item.h/2)-20)+'px;'">{{item.roomType == '-99'?item.roomName:item.subName}}</p>
  129. </el-tooltip>
  130. <!--编号-->
  131. <el-tooltip class="item" effect="dark" :content="'('+item.roomNum+')'" placement="top">
  132. <p class="map-for-num-p">({{item.roomNum}})</p>
  133. </el-tooltip>
  134. <!--门-->
  135. <div class="position-box"
  136. :class="minItem.toward=='top'?'center-move-door-p-t':(minItem.toward=='bottom'?'center-move-door-p-b':(minItem.toward=='left'?'center-move-door-p-l':(minItem.toward=='right'?'center-move-door-p-r':'')))"
  137. v-for="(minItem,minIndex) in item.doorList" :key="minIndex"
  138. :style="'top:'+minItem.y+'px;left:'+minItem.x+'px;width:'+minItem.w+'px;height:'+minItem.h+'px;'"></div>
  139. <!--实验室人数-->
  140. <div v-if="item.online!=null" class="user-num-box" :class="item.doorList[0].toward == 'top'?'user-num-two':'user-num-one'">
  141. <img src="@/assets/ZDimages/bigData3_2/icon_pmt_ry.png">
  142. <p>{{item.online}} 人</p>
  143. </div>
  144. </div>
  145. </div>
  146. <div class="newEvacuation-map-for-box for-map-box"
  147. v-for="(item,indexOne) in mapList" :key="indexOne" v-if="item.type == 2"
  148. :style="'top:'+item.y+'px;left:'+item.x+'px;width:'+item.w+'px;height:'+item.h+'px;'">
  149. <div class="newEvacuation-map-for-min-box">
  150. <!--灯-->
  151. <div @click="shadeButton(2,minItem)"
  152. class="position-box"
  153. :class="
  154. minItem.state=='1'&&minItem.openType?'lightTopOn':(minItem.state=='1'&&!minItem.openType?'lightTopOff':
  155. (minItem.state=='2'&&minItem.openType?'lightBottomOn':(minItem.state=='2'&&!minItem.openType?'lightBottomOff':
  156. (minItem.state=='3'&&minItem.openType?'lightLeftOn':(minItem.state=='3'&&!minItem.openType?'lightLeftOff':
  157. (minItem.state=='4'&&minItem.openType?'lightRightOn':(minItem.state=='4'&&!minItem.openType?'lightRightOff':'')))))))"
  158. v-for="(minItem,minIndex) in item.lightList" :key="minIndex"
  159. :style="'top:'+minItem.y+'px;left:'+minItem.x+'px;width:'+minItem.w+'px;height:'+minItem.h+'px;cursor: pointer;'"></div>
  160. </div>
  161. </div>
  162. <div class="newEvacuation-map-for-box for-map-box-two"
  163. v-for="(item,indexTwo) in mapList" :key="indexTwo" v-if="item.type == 3"
  164. :class="item.roomCheckType?'for-map-box-two-check':''"
  165. :style="'top:'+item.y+'px;left:'+item.x+'px;width:'+item.w+'px;height:'+item.h+'px;'">
  166. <div class="newEvacuation-map-for-min-box"></div>
  167. </div>
  168. <div class="plan-map-for-box" :class="checkPlanId == item.subId?'check-plan-map-for-box':''"
  169. :style="'width:'+item.width+'px;height:'+item.height+'px;left:'+item.left+'px;top:'+item.top+'px;'"
  170. @click="checkPlanButton(item.subId)"
  171. v-for="(item,index) in planMapList" :key="item.subId" v-if="item.planType">
  172. <div class="plan-top-button-box">
  173. <p></p>
  174. <p class="el-icon-close" @click="offPlanShade(planIndex)"></p>
  175. </div>
  176. <div class="plan-time-box">
  177. <img src="@/assets/ZDimages/bigData3_2/icon_dp_bjsj.png">
  178. <p>{{item.riskPlanTriggerTime}}</p>
  179. </div>
  180. <div :class="item.riskAttribute == 1?'plan-text-box':'plan-text-box-two'">
  181. <p class="plan-title-p" :class="item.riskPlanLevel==1?'color-type-1':(item.riskPlanLevel==2?'color-type-2':(item.riskPlanLevel==3?'color-type-3':(item.riskPlanLevel==4?'color-type-4':'')))">{{item.riskPlanLevelName}}</p>
  182. <p class="plan-text-p">{{item.name}}</p>
  183. </div>
  184. <p class="plan-button-p" v-if="item.riskAttribute == 1" @click="shadeButton(7,item.riskPlanId)">结束预案</p>
  185. </div>
  186. </div>
  187. </div>
  188. <p class="null-mapList" v-if="!mapList[0]">暂无数据</p>
  189. </div>
  190. <div class="left-big-box-three">
  191. <div class="horn-max-big-box-one" v-show="fireType">
  192. <div class="horn-max-big-box-one-left">
  193. <div class="big-title-box">
  194. <img src="@/assets/ZDimages/bigData3_2/icon_yygb_tb.png">
  195. <p>语音广播</p>
  196. </div>
  197. <div class="radio-button-box scrollbar-box">
  198. <p @click="checkTrumpet(index)" :class="item.type?'check-p':''"
  199. v-for="(item,index) in trumpetList" :key="index">{{item.name}}</p>
  200. <p v-if="!trumpetList[0]" style="line-height:200px;font-size:16px;color:#fff;text-align: center">暂无数据</p>
  201. </div>
  202. <div class="radio-text-box scrollbar-box">
  203. <div v-for="(item,index) in radioTextList" :key="index">
  204. <p>
  205. <span>{{item.name}}</span>
  206. <span>{{item.time}}</span>
  207. </p>
  208. <p>{{item.text}}</p>
  209. </div>
  210. </div>
  211. <div class="radio-input-box">
  212. <el-input placeholder="请输入内容" v-model="inputText" maxLength="50">
  213. <p class="radio-input-button" slot="append" @click="addHxpChemical">发送</p>
  214. </el-input>
  215. </div>
  216. </div>
  217. <div class="horn-max-big-box-one-right">
  218. <div class="big-title-box">
  219. <img src="@/assets/ZDimages/bigData3_2/icon_zdmh.png">
  220. <p>自动灭火</p>
  221. </div>
  222. <div class="fire-max-box" v-if="fireListType">
  223. <div class="fire-min-box">
  224. <p class="fire-title-p" :class="!fireData.temperatureType?'fire-title-color-one':'fire-title-color-two'">{{!fireData.temperatureType?'正常':'温度异常'}}</p>
  225. <img class="center-img" src="@/assets/ZDimages/bigData3_2/icon_zdmh_wd_zc.png" v-if="!fireData.temperatureType">
  226. <img class="center-img" src="@/assets/ZDimages/bigData3_2/icon_zdmh_wd_yc.png" v-if="fireData.temperatureType">
  227. <img class="background-img" src="@/assets/ZDimages/bigData3_2/img_zdmh_zcbg.png" v-if="!fireData.temperatureType">
  228. <img class="background-img" src="@/assets/ZDimages/bigData3_2/img_zdmh_ycbg.png" v-if="fireData.temperatureType">
  229. <p class="fire-name-p">温度</p>
  230. <p class="img-p" :class="!fireData.temperatureType?'img-p-1-one':'img-p-1-two'"></p>
  231. <p class="img-p" :class="!fireData.temperatureType?'img-p-2-one':'img-p-2-two'"></p>
  232. <p class="img-p" :class="!fireData.temperatureType?'img-p-3-one':'img-p-3-two'"></p>
  233. </div>
  234. <div class="fire-min-box">
  235. <p class="fire-title-p" :class="!fireData.smokeType?'fire-title-color-one':'fire-title-color-two'">{{!fireData.smokeType?'正常':'发现烟雾'}}</p>
  236. <img class="center-img" src="@/assets/ZDimages/bigData3_2/icon_zdmh_yg_zc.png" v-if="!fireData.smokeType">
  237. <img class="center-img" src="@/assets/ZDimages/bigData3_2/icon_zdmh_yg_yc.png" v-if="fireData.smokeType">
  238. <img class="background-img" src="@/assets/ZDimages/bigData3_2/img_zdmh_zcbg.png" v-if="!fireData.smokeType">
  239. <img class="background-img" src="@/assets/ZDimages/bigData3_2/img_zdmh_ycbg.png" v-if="fireData.smokeType">
  240. <p class="fire-name-p">烟感</p>
  241. <p class="img-p" :class="!fireData.smokeType?'img-p-1-one':'img-p-1-two'"></p>
  242. <p class="img-p" :class="!fireData.smokeType?'img-p-2-one':'img-p-2-two'"></p>
  243. <p class="img-p" :class="!fireData.smokeType?'img-p-3-one':'img-p-3-two'"></p>
  244. </div>
  245. <div class="fire-min-box">
  246. <p class="fire-title-p" :class="!fireData.flameType?'fire-title-color-one':'fire-title-color-two'">{{!fireData.flameType?'正常':'发现火焰'}}</p>
  247. <img class="center-img" src="@/assets/ZDimages/bigData3_2/icon_zdmh_hyjc_zc.png" v-if="!fireData.flameType">
  248. <img class="center-img" src="@/assets/ZDimages/bigData3_2/icon_zdmh_hyjc_yc.png" v-if="fireData.flameType">
  249. <img class="background-img" src="@/assets/ZDimages/bigData3_2/img_zdmh_zcbg.png" v-if="!fireData.flameType">
  250. <img class="background-img" src="@/assets/ZDimages/bigData3_2/img_zdmh_ycbg.png" v-if="fireData.flameType">
  251. <p class="fire-name-p">火焰监测</p>
  252. <p class="img-p" :class="!fireData.flameType?'img-p-1-one':'img-p-1-two'"></p>
  253. <p class="img-p" :class="!fireData.flameType?'img-p-2-one':'img-p-2-two'"></p>
  254. <p class="img-p" :class="!fireData.flameType?'img-p-3-one':'img-p-3-two'"></p>
  255. </div>
  256. </div>
  257. <p class="fire-button" v-if="fireListType&&!fireStartType" @click="shadeButton(1)">一键灭火</p>
  258. <p class="fire-text" v-if="fireListType&&fireStartType">{{fireStartText}},灭火程序将于{{fireStartTime}}秒后结束</p>
  259. <div class="null-fire-box" v-if="!fireListType">
  260. <img src="@/assets/ZDimages/bigData3_2/icon_sblx.png">
  261. <p>设备已离线,请及时处理</p>
  262. </div>
  263. </div>
  264. </div>
  265. <div class="horn-max-big-box-two" v-show="!fireType">
  266. <div class="big-title-box">
  267. <img src="@/assets/ZDimages/bigData3_2/icon_yygb_tb.png">
  268. <p>语音广播</p>
  269. </div>
  270. <div class="horn-big-box-two">
  271. <div class="horn-max-big-box-two-left scrollbar-box">
  272. <p @click="checkTrumpet(index)" :class="item.type?'check-p':''"
  273. v-for="(item,index) in trumpetList" :key="index">{{item.name}}</p>
  274. <p v-if="!trumpetList[0]" style="line-height:200px;font-size:16px;color:#fff;text-align: center">暂无数据</p>
  275. </div>
  276. <div class="horn-max-big-box-two-right">
  277. <div class="radio-text-box scrollbar-box">
  278. <div v-for="(item,index) in radioTextList" :key="index">
  279. <p>
  280. <span>{{item.name}}</span>
  281. <span>{{item.time}}</span>
  282. </p>
  283. <p>{{item.text}}</p>
  284. </div>
  285. </div>
  286. <div class="radio-input-box">
  287. <el-input placeholder="请输入内容" v-model="inputText" maxLength="50">
  288. <p class="radio-input-button" slot="append" @click="addHxpChemical">发送</p>
  289. </el-input>
  290. </div>
  291. </div>
  292. </div>
  293. </div>
  294. </div>
  295. </div>
  296. <!--右侧 人员/视频-->
  297. <div class="right-max-big-box">
  298. <div class="left-big-box-one">
  299. <div class="big-title-box">
  300. <img src="@/assets/ZDimages/bigData3_2/icon_sysnry_tb.png">
  301. <p>实验室内人员</p>
  302. </div>
  303. <div class="user-max-box scrollbar-box" id="user-max-box">
  304. <div class="user-box" v-for="(item,index) in userList" :key="index">
  305. <div>
  306. <img :src="item.avatar">
  307. <p>{{item.nickName}}</p>
  308. </div>
  309. </div>
  310. <p v-if="!userList[0]" style="line-height:200px;font-size:16px;color:#fff;text-align: center">暂无数据</p>
  311. </div>
  312. </div>
  313. <div class="left-big-box-two scrollbar-box">
  314. <div class="video-max-big-for-box">
  315. <div class="video-max-big-title-box">
  316. <p>实验室摄像头</p>
  317. <i :class="subjectVideoType?'el-icon-arrow-up':'el-icon-arrow-down'" @click="subjectVideoCheckClick"></i>
  318. </div>
  319. <div class="video-mx-big-box" v-show="subjectVideoType"
  320. v-for="(item,index) in subjectVideoList" :key="index">
  321. <video class="video-box" :id="item.divId" ref="videoRef" autoplay controls muted width="368px" height="170px"></video>
  322. </div>
  323. </div>
  324. <div class="video-max-big-for-box" >
  325. <div class="video-max-big-title-box">
  326. <p>楼层摄像头</p>
  327. <i :class="floorVideoType?'el-icon-arrow-up':'el-icon-arrow-down'" @click="floorVideoCheckClick"></i>
  328. </div>
  329. <div class="video-mx-big-box" v-show="floorVideoType"
  330. v-for="(item,index) in floorVideoList" :key="index">
  331. <video class="video-box" :id="item.divId" ref="videoRef" autoplay controls muted width="368px" height="170px"></video>
  332. </div>
  333. </div>
  334. </div>
  335. </div>
  336. <!--确认弹层-->
  337. <div class="shade-max-big-box" v-if="shadeType != 0">
  338. <div class="shade-big-box">
  339. <p class="off-button el-icon-close" @click="shadeButton(4)"></p>
  340. <div class="text-box" v-if="shadeType == 1">
  341. <p>是否确认执行一键灭火</p>
  342. <p>该操作存在风险,请您务必确认实验室内人员已安全撤离</p>
  343. </div>
  344. <div class="text-box" v-if="shadeType == 2 || shadeType == 3 || shadeType == 4">
  345. <p>{{shadeText}}</p>
  346. <p></p>
  347. </div>
  348. <div class="button-box">
  349. <p class="button-null"></p>
  350. <p class="button-p" style="margin-right:39px;" @click="shadeButton(4)">取消</p>
  351. <p class="button-p" @click="shadeButton(5)">确定</p>
  352. <p class="button-null"></p>
  353. </div>
  354. </div>
  355. </div>
  356. <!--疏散选择-->
  357. <div class="evacuation-shade-max-big-box" v-if="evacuationShadeType">
  358. <div class="evacuation-shade-big-box">
  359. <p class="position-title-p">请确定疏散出口</p>
  360. <p class="position-off-button-p el-icon-close" @click="executeEvacuation(2)"></p>
  361. <div class="evacuation-shade-map-max-big-box">
  362. <div class="evacuation-shade-map-big-box"
  363. :style="'width:'+mapData.width+'px;height:'+mapData.height+'px;transform: scale('+mapData.zoomData+');margin-top:-'+mapData.height/2+'px;margin-left:-'+mapData.width/2+'px;'">
  364. <div class="evacuation-shade-map-box"
  365. :style="'width:'+mapData.width+'px;height:'+mapData.height+'px;'">
  366. <div class="evacuation-shade-map-for-box for-map-box-one"
  367. :class="!item.planType && checkSubId ==item.subId ? 'room-type-one':(
  368. item.planType && checkSubId !=item.subId ? 'room-type-two':(
  369. item.planType && checkSubId ==item.subId ? 'room-type-three':(
  370. !item.loginAdmin ? 'room-type-noe':''
  371. )))"
  372. v-for="(item,index) in shadeMapList" :key="index" v-if="item.type == 1"
  373. :style="'top:'+item.y+'px;left:'+item.x+'px;width:'+item.w+'px;height:'+item.h+'px;'">
  374. <div class="evacuation-shade-map-min-box">
  375. <!--名称/实验室名称-->
  376. <el-tooltip class="item" effect="dark" :content="item.roomType == '-99'?item.roomName:item.subName" placement="top">
  377. <p class="map-for-name-p" :style="'margin-top:'+((item.h/2)-20)+'px;'">{{item.roomType == '-99'?item.roomName:item.subName}}</p>
  378. </el-tooltip>
  379. <!--编号-->
  380. <el-tooltip class="item" effect="dark" :content="'('+item.roomNum+')'" placement="top">
  381. <p class="map-for-num-p">({{item.roomNum}})</p>
  382. </el-tooltip>
  383. <!--门-->
  384. <div class="position-box"
  385. :class="minItem.toward=='top'?'center-move-door-p-t':(minItem.toward=='bottom'?'center-move-door-p-b':(minItem.toward=='left'?'center-move-door-p-l':(minItem.toward=='right'?'center-move-door-p-r':'')))"
  386. v-for="(minItem,minIndex) in item.doorList" :key="minIndex"
  387. :style="'top:'+minItem.y+'px;left:'+minItem.x+'px;width:'+minItem.w+'px;height:'+minItem.h+'px;'"></div>
  388. </div>
  389. </div>
  390. <div class="evacuation-shade-map-for-box for-map-box"
  391. v-for="(item,indexOne) in shadeMapList" :key="indexOne" v-if="item.type == 2"
  392. :style="'top:'+item.y+'px;left:'+item.x+'px;width:'+item.w+'px;height:'+item.h+'px;'">
  393. <div class="evacuation-shade-map-min-box"></div>
  394. </div>
  395. <div class="evacuation-shade-map-for-box for-map-box-two"
  396. v-for="(item,indexTwo) in shadeMapList" :key="indexTwo" v-if="item.type == 3"
  397. @click="shadeCheckRoomClick(item)"
  398. :class="item.roomCheckType?'for-map-box-two-check':''"
  399. :style="'top:'+item.y+'px;left:'+item.x+'px;width:'+item.w+'px;height:'+item.h+'px;'">
  400. <div class="evacuation-shade-map-min-box"></div>
  401. </div>
  402. </div>
  403. </div>
  404. </div>
  405. <p class="evacuation-button-p" @click="executeEvacuation(1)">已确定疏散出口,立即执行疏散</p>
  406. </div>
  407. </div>
  408. <!--灭火倒计时-->
  409. <div class="fire-shade-max-big-box" v-if="fireShadeType">
  410. <div class="fire-shade-big-box">
  411. <img src="@/assets/ZDimages/bigData3_2/img_mhz.png">
  412. <p>一键灭火启动中,倒计时<span>{{fireTime}}</span>秒.</p>
  413. <p @click="putOutTheFireButton">放弃一键灭火</p>
  414. </div>
  415. </div>
  416. </div>
  417. </template>
  418. <script>
  419. import mqtt from 'mqtt'
  420. import flvjs from 'flv.js'
  421. import { hardWareControl } from "@/api/laboratory/hardware";
  422. import { subjectInfo,startUrl } from "@/api/laboratory/subject";
  423. import { getCameraByFloor } from '@/api/executeThePlan.js'
  424. import { getDeviceList,addHxpChemical,getHornLastMess, subOnlineUser,
  425. exitHazardTotal,getFireStatus,getFloorData,getBuildOrFloorList,
  426. executeEvacuation,endEvacuation,openLight,closeLight,getRedisEvacuation,
  427. outfirepc,isCancelOutFile,selectTriggerInfo,riskPlanId} from '@/api/evacuationBigData/index.js'
  428. export default {
  429. name: 'newEvacuationBigData',
  430. props:{
  431. propsBigData:{},
  432. },
  433. computed:{
  434. Obj(){
  435. return this.$store.state.settings.planData
  436. }
  437. },
  438. watch:{
  439. Obj(newVal,oldVal){
  440. //可以对数据执行相应的操作
  441. console.log(newVal,oldVal)
  442. this.selectTriggerInfo();
  443. }
  444. },
  445. data() {
  446. return {
  447. //当前路由状态
  448. routeType:false,
  449. //全局MQTT相关
  450. allClient:{},
  451. planTopic:"lab/newexit/line",//预案
  452. //楼层MQTT相关
  453. floorClient:{},
  454. messageTopic:"lab/horn",//消息
  455. evacuationTopic:"lab/newexit/line",//疏散
  456. userTopic:"lab/subuser/change",//实验室人员数量
  457. //实验室MQTT相关
  458. subClient:{},
  459. sensorTopic:"lab/function/data",//传感器
  460. switchTopic:"lab/hardware/data",//硬件
  461. //灭火设备MQTT相关
  462. fireClient:{},
  463. fireTopic:"lab/fireDevice/Warn/",//传感器状态异常
  464. fireOnlineTopic:"lab/fireDevice/isOnline/",//设备是否在线
  465. firePerformTopic:"lab/fireDevice/executing/",//是否正在执行灭火操作
  466. //当前实验室/楼栋/楼层
  467. subText:"",
  468. floorText:"",
  469. //楼栋ID
  470. buildingId:null,
  471. //楼层ID
  472. floorId:null,
  473. //实验室ID
  474. subId:null,
  475. //楼栋下拉列表
  476. buildingOptions:[],
  477. //楼层下拉列表
  478. floorOptions:[],
  479. //传感器小图标数据
  480. sensorIconData:null,
  481. //传感器数据
  482. sensorList:[],
  483. //控制器数据
  484. controlList:[],
  485. //控制器开关
  486. code:3,
  487. //喇叭列表
  488. trumpetList:[
  489. {
  490. name:"测试用假数据",
  491. deviceSn:"",
  492. port:"",
  493. deviceIp:"",
  494. deviceVol:"",
  495. type:false,
  496. }
  497. ],
  498. //广播历史记录
  499. inputText:"",
  500. radioTextList:[],
  501. //有无火焰设备状态
  502. fireType:false,
  503. //灭火设备在线离线
  504. fireListType:false,
  505. fireData:{ //0正常 1异常
  506. temperatureType:false,//温度
  507. smokeType:false,//烟感
  508. flameType:false,//火焰
  509. },
  510. //灭火设备code
  511. fireCode:null,
  512. //灭火启动状态
  513. fireStartType:false,
  514. //灭火描述
  515. fireStartText:null,
  516. /***********一键灭火相关数据***********/
  517. //一件灭火遮罩
  518. fireShadeType:false,
  519. //灭火倒计时
  520. fireTime:null,
  521. //灭火倒计时方法数据
  522. fireTimeData:null,
  523. //灭火中倒计时
  524. fireStartTime:null,
  525. //灭火中倒计时方法数据
  526. fireStartTimeData:null,
  527. //一键灭火倒计时开启状态
  528. putOutTheFireType:false,
  529. //实验室人员数据
  530. userList:[],
  531. //地图数据
  532. mapType:false,
  533. mapData:{},
  534. mapList:[],
  535. zoomData:null,
  536. //预案发生实验室弹层数据
  537. planMapList:[],
  538. //遮罩层
  539. shadeType:0,
  540. shadeText:'',
  541. shadeData:{},
  542. //视频监控相关数据
  543. subjectVideoType:false,
  544. subjectVideoIds:[],
  545. subjectVideoList:[],
  546. subjectVideoPlayList:[],
  547. floorVideoType:false,
  548. floorVideoIds:[],
  549. floorVideoList:[],
  550. floorVideoPlayList:[],
  551. /********************疏散遮罩相关数据********************/
  552. //当前疏散状态
  553. evacuationType:false,
  554. //疏散弹窗状态
  555. evacuationShadeType:false,
  556. //疏散用布局数据
  557. shadeMapList:[],
  558. //实验室选中/报警数据
  559. checkSubId:null,
  560. //传参状态
  561. planDataType:false,
  562. //优先显示的提示
  563. checkPlanId:null,
  564. //结束预案时使用的预案ID
  565. checkRiskPlanId:null
  566. }
  567. },
  568. created() {
  569. if(this.$route.path == '/newEvacuationBigData'){
  570. this.$set(this,'routeType',true);
  571. }else{
  572. this.$set(this,'routeType',false);
  573. }
  574. if(this.$route.query.subId){
  575. this.$set(this,'buildingId',this.$route.query.buildingId);
  576. this.$set(this,'floorId',this.$route.query.floorId);
  577. this.$set(this,'subId',this.$route.query.subId);
  578. this.$set(this,'checkSubId',this.$route.query.subId);
  579. if(this.$route.query.riskPlanId){
  580. this.riskPlanId(this.$route.query.riskPlanId);
  581. }
  582. this.$set(this,'planDataType',true);
  583. this.initialization();
  584. console.log('有参数',this.$route.query);
  585. }else{
  586. this.$set(this,'planDataType',false);
  587. this.initialization();
  588. console.log('无参数',this.$route.query);
  589. }
  590. },
  591. mounted(){
  592. //全局类MQTT
  593. // this.onAllMQTT('on');
  594. //初始化
  595. // this.initialization();
  596. },
  597. methods:{
  598. //标记当前查看的预案
  599. riskPlanId(riskPlanId){
  600. let obj = {
  601. riskPlanId:riskPlanId,
  602. ifcheck:1,
  603. };
  604. riskPlanId(obj).then(response => {})
  605. },
  606. //初始化
  607. initialization(){
  608. getBuildOrFloorList({type:2,parentId:''}).then(response => {
  609. if(response.data[0]){
  610. for(let i=0;i<response.data.length;i++){
  611. response.data[i].planType = false
  612. }
  613. this.$set(this,'buildingOptions',response.data);
  614. if(this.planDataType){
  615. this.getBuildOrFloorList();
  616. }else{
  617. //处理实验室数量多的楼栋优先选择
  618. let num = 0;
  619. let index = null;
  620. for(let i=0;i<response.data.length;i++){
  621. if(response.data[i].subNum>num){
  622. num = response.data[i].subNum;
  623. index = i;
  624. }
  625. }
  626. this.$set(this,'buildingId',response.data[index].id);
  627. this.getBuildOrFloorList('automatic');
  628. }
  629. }
  630. })
  631. },
  632. //全屏页面跳转
  633. goRoute(){
  634. if(this.routeType){
  635. this.$router.push({
  636. path: "/emergencyManagement/evacuation/newPerformEvacuation"
  637. })
  638. }else{
  639. this.$router.push({
  640. path: "/newEvacuationBigData"
  641. })
  642. }
  643. },
  644. /*********************************** 点击操作事件-相关接口 *********************************/
  645. //选中实验室
  646. checkSubClick(item){
  647. let self = this;
  648. if(item.roomType != '-99'){
  649. if(item.loginAdmin){
  650. if(this.checkSubId != item.subId){
  651. this.$set(this,'subId',item.subId);
  652. this.$set(this,'checkSubId',item.subId);
  653. let subText = item.roomType == '-99'?item.roomName:item.subName +' - '+ item.roomNum;
  654. this.$set(this,'subText',subText);
  655. this.buttonSubject();
  656. }
  657. if(item.planType){
  658. for(let i=0;i<self.planMapList.length;i++){
  659. if(self.planMapList[i].subId == item.subId){
  660. this.$set(self.planMapList[i],'planType',true)
  661. }
  662. }
  663. }
  664. }else{
  665. this.msgError('操作失败,您不是该实验室的管理人员。')
  666. }
  667. }
  668. },
  669. //关闭实验室预案弹窗
  670. offPlanShade(index){
  671. this.$set(this.planMapList[index],'planType',false)
  672. },
  673. //设备switch开关
  674. changeIsNeedCaptcha(item){
  675. let self = this;
  676. console.log(item)
  677. if(item.code!=3 && item.code!=4){
  678. return
  679. }
  680. this.$set(this,'shadeData',item);
  681. let text = item.code==3?'关闭':(item.code==4?'开启':'')
  682. this.shadeButton(3,`是否`+text+`此设备?`);
  683. },
  684. //遮罩层开关/弹层提示确认
  685. shadeButton(type,text){
  686. if(type == 1){
  687. this.$set(this,'shadeType',1);
  688. }else if(type == 2){
  689. //疏散灯开关 执行疏散时才可以开启
  690. if(this.evacuationType){
  691. let newText = `是否`+(text.openType?'关闭':'开启')+`该疏散灯?`
  692. this.$set(this,'shadeData',text);
  693. this.$set(this,'shadeText',newText);
  694. this.$set(this,'shadeType',2);
  695. }
  696. }else if(type == 3){
  697. //设备开关
  698. this.$set(this,'shadeText',text);
  699. this.$set(this,'shadeType',3);
  700. }else if(type == 4){
  701. this.$set(this,'shadeType',0)
  702. }else if(type == 5){
  703. if(this.shadeType == 1){
  704. //一键灭火弹窗
  705. this.putOutTheFireButton();
  706. }else if(this.shadeType == 2){
  707. //开关灯弹窗
  708. if(this.shadeData.openType){
  709. //关闭
  710. this.closeLight();
  711. }else{
  712. //开启
  713. this.openLight();
  714. }
  715. }else if(this.shadeType == 3){
  716. //设备开关弹窗
  717. this.switchChange(this.shadeData)
  718. }else if(this.shadeType == 4){
  719. //结束疏散
  720. let obj = {
  721. buildId:this.buildingId,
  722. floorId:this.floorId,
  723. }
  724. endEvacuation(obj).then(response => {
  725. this.$set(this,'shadeType',0);
  726. this.getBuildingData();
  727. })
  728. }else if(this.shadeType == 5){
  729. //结束预案
  730. let obj = {
  731. buildId:this.buildingId,
  732. floorId:this.floorId,
  733. }
  734. endEvacuation(obj).then(response => {
  735. this.$set(this,'shadeType',0);
  736. this.getBuildingData();
  737. })
  738. }
  739. }else if(type == 6){
  740. this.$set(this,'shadeText','是否结束疏散?');
  741. this.$set(this,'shadeType',4);
  742. }else if(type == 6){
  743. this.$set(this,'shadeText','是否结束预案?');
  744. this.$set(this,'checkRiskPlanId',text);
  745. this.$set(this,'shadeType',5);
  746. }
  747. },
  748. //选中优先展示的预案弹窗
  749. checkPlanButton(id){
  750. this.$set(this,'checkPlanId',id);
  751. },
  752. //实验室视频展开收起开关
  753. subjectVideoCheckClick(){
  754. if(this.subjectVideoType){
  755. this.videoOff('subject')
  756. }else{
  757. if(this.subjectVideoIds[0]){
  758. this.startUrl('subject');
  759. }else{
  760. this.msgError('该实验室未配置摄像头')
  761. }
  762. }
  763. },
  764. //楼层视频展开收起开关
  765. floorVideoCheckClick(){
  766. if(this.floorVideoType){
  767. this.videoOff('floor')
  768. }else{
  769. if(this.floorVideoIds[0]){
  770. this.startUrl('floor');
  771. }else{
  772. this.msgError('该楼层未配置摄像头')
  773. }
  774. }
  775. },
  776. //楼栋选择
  777. buildingChange(val){
  778. this.$set(this,'buildingId',val);
  779. this.getBuildOrFloorList();
  780. },
  781. //楼层选择
  782. floorChange(val){
  783. this.$set(this,'floorId',val);
  784. //获取楼层消息
  785. this.getHornLastMess();
  786. //获取楼层喇叭
  787. this.getDeviceList();
  788. //获取楼层摄像头数据
  789. this.getCameraByFloor();
  790. //获取楼层数据
  791. this.getBuildingData();
  792. //楼层mqtt
  793. this.offFloorMQTT('on');
  794. //断开楼层视频流
  795. this.videoOff('floor');
  796. },
  797. //开始/结束疏散按钮
  798. evacuationButton(){
  799. let self = this;
  800. if(this.evacuationType){
  801. //结束疏散
  802. this.shadeButton(6);
  803. }else{
  804. //开始疏散
  805. //默认勾选所有疏散口
  806. if(!this.mapList[0]){
  807. this.msgError('没有楼层数据,无法疏散')
  808. return
  809. }
  810. for(let i=0;i<self.shadeMapList.length;i++){
  811. if(self.shadeMapList[i].type == 3){
  812. self.shadeMapList[i].roomCheckType = true;
  813. }
  814. }
  815. this.$set(this,'evacuationShadeType',true);
  816. }
  817. },
  818. //选中疏散通道
  819. shadeCheckRoomClick(item){
  820. item.roomCheckType = !item.roomCheckType;
  821. },
  822. //执行疏散 上报疏散通道
  823. executeEvacuation(type){
  824. let self = this;
  825. if(type == 1){
  826. let list = [];
  827. let doorPointNames = [];
  828. for(let i=0;i<self.shadeMapList.length;i++){
  829. if(self.shadeMapList[i].type == 3){
  830. if(!self.shadeMapList[i].roomCheckType){
  831. list.push(self.shadeMapList[i].key)
  832. }else{
  833. doorPointNames.push(self.shadeMapList[i].key)
  834. }
  835. }
  836. }
  837. if(!doorPointNames[0]){
  838. this.msgError('请选择疏散出口')
  839. return
  840. }
  841. let obj = {
  842. buildId:this.buildingId,
  843. floorId:this.floorId,
  844. subId: this.subId,
  845. badPointNames:list,
  846. doorPointNames:doorPointNames,
  847. }
  848. executeEvacuation(obj).then(response => {
  849. for(let o=0;o<self.mapList.length;o++){
  850. if(self.mapList[o].type == 2){
  851. for(let x=0;x<self.mapList[o].lightList.length;x++){
  852. let num = 0;
  853. for(let i=0;i<response.data.lightPointSet.length;i++){
  854. if(self.mapList[o].lightList[x].key == response.data.lightPointSet[i].key){
  855. num++
  856. }
  857. }
  858. self.mapList[o].lightList[x].openType = num != 0;
  859. }
  860. }
  861. }
  862. for(let i=0;i<response.data.doorPointNames.length;i++){
  863. for(let o=0;o<self.mapList.length;o++){
  864. if(self.mapList[o].type == 3){
  865. if(response.data.doorPointNames[i] == self.mapList[o].key){
  866. self.mapList[o].roomCheckType = true;
  867. }
  868. }
  869. }
  870. }
  871. this.msgSuccess(response.msg);
  872. this.$set(this,'evacuationShadeType',false);
  873. this.$set(this,'evacuationType',true);
  874. this.$forceUpdate();
  875. })
  876. console.log('key',list);
  877. }else if(type == 2){
  878. this.$set(this,'evacuationShadeType',false);
  879. }
  880. },
  881. //执行灭火
  882. putOutTheFireButton(){
  883. let self = this;
  884. if(!self.putOutTheFireType){
  885. let obj = {
  886. subjectId:self.subId,
  887. deviceCode:self.fireCode,
  888. }
  889. outfirepc(obj).then(response => {
  890. if(response.data.waitTime){
  891. self.$set(self,'fireTime',response.data.waitTime);
  892. self.fireTimeData = window.setInterval(refreshCount, 1000);
  893. self.$set(self,'shadeType',0);
  894. self.$set(self,'fireShadeType',true);
  895. self.$set(self,'putOutTheFireType',true);
  896. function refreshCount() {
  897. if(self.fireTime<=1){
  898. window.clearInterval(self.fireTimeData);
  899. self.$set(self,'putOutTheFireType',false);
  900. self.$set(self,'fireShadeType',false);
  901. }else{
  902. self.fireTime--
  903. }
  904. }
  905. }else{
  906. self.msgError('一键灭火启动失败')
  907. }
  908. })
  909. }else{
  910. let obj = {
  911. subjectId:this.subId
  912. };
  913. isCancelOutFile(obj).then(response => {
  914. if(response.code == 200){
  915. window.clearInterval(self.fireTimeData);
  916. self.$set(self,'putOutTheFireType',false);
  917. self.$set(self,'fireShadeType',false);
  918. }else{
  919. self.msgError('放弃一键灭火失败')
  920. }
  921. })
  922. }
  923. },
  924. //灭火中倒计时
  925. fireStartTimeFunction(time){
  926. let self = this;
  927. self.$set(self,'fireStartTime',time);
  928. self.fireStartTimeData = window.setInterval(refreshCount, 1000);
  929. function refreshCount() {
  930. if(self.fireStartTime<=1){
  931. window.clearInterval(self.fireStartTimeData);
  932. self.$set(self,'fireStartType',false);
  933. }else{
  934. self.fireStartTime--
  935. }
  936. }
  937. },
  938. //获取相关实验室数据
  939. buttonSubject(){
  940. //获取实验室人员数据
  941. this.subOnlineUser();
  942. //获取危险源数据
  943. this.exitHazardTotal();
  944. //获取实验室数据(传感器/硬件)
  945. this.subjectInfo();
  946. //获取实验室火焰报警数据
  947. this.getFireStatus();
  948. //实验室相关MQTT
  949. this.offSubMQTT('on');
  950. //断开实验室视频流
  951. this.videoOff('subject');
  952. },
  953. /*********************************** 查询当前是否有进行中的疏散-相关接口 *********************************/
  954. getRedisEvacuation(){
  955. let self = this;
  956. let obj = {
  957. buildId:this.buildingId,
  958. floorId:this.floorId,
  959. }
  960. getRedisEvacuation(obj).then(response => {
  961. if(response.data.doorPointNames){
  962. this.$set(this,'evacuationType',true);
  963. for(let o=0;o<self.mapList.length;o++){
  964. if(self.mapList[o].type == 2){
  965. for(let x=0;x<self.mapList[o].lightList.length;x++){
  966. let num = 0;
  967. for(let i=0;i<response.data.lightPointSet.length;i++){
  968. if(response.data.lightPointSet[i]){//处理后端返回的异常的NULL
  969. if(self.mapList[o].lightList[x].key == response.data.lightPointSet[i].key){
  970. num++
  971. }
  972. }
  973. }
  974. self.mapList[o].lightList[x].openType = num != 0;
  975. }
  976. }
  977. }
  978. for(let i=0;i<response.data.doorPointNames.length;i++){
  979. for(let o=0;o<self.mapList.length;o++){
  980. if(self.mapList[o].type == 3){
  981. if(response.data.doorPointNames[i] == self.mapList[o].key){
  982. self.mapList[o].roomCheckType = true;
  983. }
  984. }
  985. }
  986. }
  987. this.$forceUpdate();
  988. }else{
  989. this.$set(this,'evacuationType',false);
  990. }
  991. });
  992. },
  993. /*********************************** 喇叭-相关接口 *********************************/
  994. //获取喇叭列表
  995. getDeviceList(){
  996. let obj ={
  997. subId:this.subId,
  998. floorId:this.floorId,
  999. page:1,
  1000. pageSize:100,
  1001. };
  1002. getDeviceList(obj).then(response => {
  1003. for(let i=0;i<response.data.length;i++){
  1004. response.data[i].type = false;
  1005. }
  1006. if(response.data[0]){
  1007. this.$set(this,'trumpetList',response.data)
  1008. }
  1009. });
  1010. },
  1011. //喇叭操作
  1012. checkTrumpet(index){
  1013. let self = this;
  1014. for(let i=0;i<self.trumpetList.length;i++){
  1015. self.trumpetList[i].type = i == index;
  1016. }
  1017. },
  1018. //发送消息到喇叭
  1019. addHxpChemical(){
  1020. let self = this;
  1021. let obj = {
  1022. floorId:this.floorId,
  1023. messageContext:this.inputText,
  1024. };
  1025. let num = 0;
  1026. for(let i=0;i<self.trumpetList.length;i++){
  1027. if(self.trumpetList[i].type){
  1028. obj.playVo=[{
  1029. sn:self.trumpetList[i].deviceSn,
  1030. port:self.trumpetList[i].port,
  1031. deviceIp:self.trumpetList[i].deviceIp,
  1032. type:"",
  1033. name:"",
  1034. speed:"",
  1035. params:{
  1036. tid:"",
  1037. vol:self.trumpetList[i].deviceVol,
  1038. urls:[]
  1039. }
  1040. }];
  1041. num++
  1042. }
  1043. }
  1044. if(num == 0){
  1045. this.msgError('请选择喇叭')
  1046. return
  1047. }
  1048. addHxpChemical(obj).then(response => {
  1049. this.msgSuccess(response.msg);
  1050. this.$set(this,'inputText','');
  1051. });
  1052. },
  1053. //获取楼层消息
  1054. getHornLastMess(){
  1055. let obj = {
  1056. floorId : this.floorId
  1057. }
  1058. getHornLastMess(obj).then(response => {
  1059. if(response.data.messageContext){
  1060. this.$set(this,'radioTextList',[{
  1061. name:response.data.sendName,
  1062. time:response.data.nowTime,
  1063. text:response.data.messageContext
  1064. }]);
  1065. }
  1066. });
  1067. },
  1068. /*********************************** 开关疏散灯-相关接口 *********************************/
  1069. //开启疏散灯
  1070. openLight(){
  1071. let obj = {
  1072. buildId:this.buildingId,
  1073. floorId:this.floorId,
  1074. pointName:this.shadeData.key
  1075. };
  1076. openLight(obj).then(response => {
  1077. if(response.code==200){
  1078. this.$set(this,'shadeType',0)
  1079. this.msgSuccess(response.msg)
  1080. }
  1081. });
  1082. },
  1083. //关闭疏散灯
  1084. closeLight(){
  1085. let obj = {
  1086. buildId:this.buildingId,
  1087. floorId:this.floorId,
  1088. pointName:this.shadeData.key
  1089. };
  1090. closeLight(obj).then(response => {
  1091. if(response.code==200){
  1092. this.$set(this,'shadeType',0)
  1093. this.msgSuccess(response.msg)
  1094. }
  1095. });
  1096. },
  1097. /*********************************** 开关设备-相关接口 *********************************/
  1098. //开关设备按钮
  1099. switchChange(item){
  1100. let switchData = {
  1101. id:item.id,
  1102. switchVal:item.code==3?'close':(item.code==4?'open':'')
  1103. };
  1104. hardWareControl(switchData).then(response => {
  1105. if(response.code==200){
  1106. item.code = item.code==3?4:(item.code==4?3:'')
  1107. this.$set(this,'shadeType',0);
  1108. this.msgSuccess("操作成功")
  1109. }
  1110. });
  1111. },
  1112. /*********************************** 实验室人员-相关接口 *********************************/
  1113. subOnlineUser(id){
  1114. let self = this;
  1115. subOnlineUser({subId:this.subId}).then(response => {
  1116. if(response.rows[0]){
  1117. this.$set(this,'userList',response.rows);
  1118. if(id){
  1119. for(let i=0;i<self.mapList.length;i++){
  1120. if(self.mapList[i].type == '1'){
  1121. if(self.mapList[i].subId == id){
  1122. this.$set(self.mapList[i],'online',response.rows.length);
  1123. }
  1124. }
  1125. }
  1126. }
  1127. }
  1128. });
  1129. },
  1130. /*********************************** 危险源-相关接口 *********************************/
  1131. exitHazardTotal(){
  1132. exitHazardTotal({subjectId:this.subId}).then(response => {
  1133. if(response.data[0]){
  1134. let obj = {
  1135. nameList: [],
  1136. numList: [],
  1137. maxNumList: [],
  1138. }
  1139. for(let i=0;i<response.data.length;i++){
  1140. obj.nameList.push(response.data[i].name)
  1141. obj.numList.push(response.data[i].percentage)
  1142. obj.maxNumList.push(100)
  1143. }
  1144. this.eChartsFunction(obj);
  1145. }else{
  1146. document.getElementById('eCharts').innerHTML = '<p style="line-height:200px;font-size:16px;color:#fff;text-align: center">暂无数据</p>'
  1147. }
  1148. });
  1149. },
  1150. //eCharts表格
  1151. eChartsFunction(obj){
  1152. let self = this;
  1153. let myChart = this.$echarts.init(document.getElementById('eCharts'));
  1154. let option = {
  1155. backgroundColor: 'rgba(0,0,0,0)',
  1156. grid: {
  1157. left: '6%',
  1158. right: '4%',
  1159. bottom: '0%',
  1160. top: '20%',
  1161. containLabel: true,
  1162. },
  1163. legend: [{
  1164. show: false,
  1165. }],
  1166. xAxis: [
  1167. {
  1168. type: 'category',
  1169. data: obj.nameList,
  1170. axisLine: {
  1171. lineStyle: {
  1172. color: 'rgba(5, 80, 93, 1)',
  1173. },
  1174. },
  1175. axisLabel: {
  1176. fontSize: 12,
  1177. // color: 'black',
  1178. color: '#fff',
  1179. fontFamily: 'DIN-Medium',
  1180. padding: [3, 0, 0, 0]
  1181. },
  1182. axisTick: {
  1183. show: false,
  1184. },
  1185. },
  1186. {
  1187. type: 'category',
  1188. data: obj.nameList,
  1189. show: false,
  1190. },],
  1191. yAxis: [{
  1192. type: 'value',
  1193. name: "",
  1194. nameTextStyle: {
  1195. fontSize: 14,
  1196. fontFamily: 'Source Han Sans CN',
  1197. fontWeight: '400',
  1198. color: 'rgba(255, 255, 255, 1)',
  1199. padding: [0, 75, -8, 0]
  1200. },
  1201. nameGap: 24,
  1202. axisLine: {
  1203. show: true,
  1204. lineStyle: {
  1205. color: 'rgba(5, 80, 93, 1)',
  1206. }
  1207. },
  1208. axisTick: {
  1209. show: false,
  1210. },
  1211. splitLine: {
  1212. show: false,
  1213. lineStyle: {
  1214. color: 'rgba(5, 80, 93, 1)',
  1215. type: "dashed",
  1216. },
  1217. },
  1218. alignTicks: true,
  1219. axisLabel: {
  1220. fontSize: 14,
  1221. color: 'rgba(255, 255, 255, 1)',
  1222. fontFamily: 'DIN-Medium',
  1223. padding: [0, 7, 0, 0]
  1224. },
  1225. splitArea: {
  1226. show: false,
  1227. },
  1228. }],
  1229. series: [
  1230. {
  1231. type: 'bar',
  1232. label: {
  1233. normal: {
  1234. show: true,
  1235. position: 'top',
  1236. fontSize: 12,
  1237. color: 'rgba(16, 213, 223, 1)',
  1238. formatter: function (params) {
  1239. return params.value + '%'
  1240. },
  1241. offset: [0, -10],
  1242. },
  1243. },
  1244. tooltip: {
  1245. show: false
  1246. },
  1247. barWidth: 14,
  1248. itemStyle: {
  1249. color: {
  1250. type: 'linear',
  1251. x: 0, x2: 0, y: 0, y2: 1,
  1252. colorStops: [
  1253. { offset: 0, color: '#00FCFC' },
  1254. { offset: 1, color: '#016FCC' }
  1255. ]
  1256. },
  1257. },
  1258. name: '',
  1259. data: obj.numList
  1260. },
  1261. {
  1262. // 分隔
  1263. type: 'pictorialBar',
  1264. itemStyle: {
  1265. normal: {
  1266. color: 'rgba(3, 72, 84, 0.5)',
  1267. },
  1268. },
  1269. symbolRepeat: 'fixed',//重复
  1270. symbolMargin: 2,//上下间隔
  1271. symbol: 'rect',//图形类型
  1272. symbolClip: true,//是否裁剪
  1273. symbolSize: [20, 2],//图形的大小,可以用数组分开表示宽和高
  1274. symbolPosition: 'center',//图形的定位位置
  1275. symbolOffset: [0, 2],//图形相对于原本位置的偏移
  1276. data: obj.numList,
  1277. z: 0,
  1278. zlevel: 1,
  1279. },
  1280. {
  1281. type: 'bar',
  1282. barWidth: 40,
  1283. xAxisIndex: 1,
  1284. itemStyle: {
  1285. color: 'rgba(0, 0, 0, 0)'
  1286. },
  1287. name: '',
  1288. data: obj.maxNumList
  1289. },
  1290. ],
  1291. }
  1292. myChart.setOption(option);
  1293. },
  1294. /*********************************** 传感器/设备/视频-相关接口 *********************************/
  1295. //获取实验室传感器/设备/视屏相关接口
  1296. subjectInfo(){
  1297. //1.只查硬件数据 0.查询所有数据
  1298. subjectInfo(this.subId,1).then(response => {
  1299. let list = [];
  1300. let videoList = [];
  1301. if (response.data.labHardwareVOList){
  1302. for(let i=0;i<response.data.labHardwareVOList.length;i++){
  1303. if(response.data.labHardwareVOList[i].hardwareTypeEnum.enumName == 'AI_VENTILATION' ||
  1304. response.data.labHardwareVOList[i].hardwareTypeEnum.enumName == 'SWITCH'){
  1305. //AI_VENTILATION 通风 SWITCH 电源开关
  1306. let obj = {
  1307. id:response.data.labHardwareVOList[i].id,
  1308. name:response.data.labHardwareVOList[i].hardwareName?response.data.labHardwareVOList[i].hardwareName:'未命名',
  1309. enumName:response.data.labHardwareVOList[i].hardwareTypeEnum.enumName,
  1310. code:response.data.labHardwareVOList[i].state.code
  1311. }
  1312. list.push(obj);
  1313. }
  1314. if(response.data.labHardwareVOList[i].hardwareTypeEnum.enumName == 'VIDEO_MONITOR'){
  1315. videoList.push(response.data.labHardwareVOList[i].hardwareNUM);
  1316. }
  1317. }
  1318. }
  1319. this.$set(this,'controlList',list);
  1320. this.$set(this,'subjectVideoIds',videoList);
  1321. this.$set(this,'sensorList',this.sensorIconMatching(response.data.sensorFunctionStatusList));
  1322. })
  1323. },
  1324. //获取楼层视频接口
  1325. getCameraByFloor(){
  1326. getCameraByFloor({floorId:this.floorId}).then(response => {
  1327. this.$set(this,'floorVideoIds',response.data);
  1328. })
  1329. },
  1330. /*********************************** 视频-相关接口 *********************************/
  1331. //视频播放接口
  1332. async startUrl(type){
  1333. let self = this;
  1334. let list = [];
  1335. if(type == 'subject'){
  1336. list = self.subjectVideoIds+'';
  1337. }else if(type == 'floor'){
  1338. list = self.floorVideoIds+'';
  1339. }
  1340. let obj = {
  1341. page:"1",
  1342. count:"100",
  1343. deviceIds:list,
  1344. };
  1345. const { data } = await startUrl(obj);
  1346. console.log('data',data);
  1347. if(data.data){
  1348. let newData = data.data;
  1349. let urlText = window.location.href;
  1350. if(urlText.indexOf(localStorage.getItem('ipIdentify')) != -1){
  1351. console.log('本地');
  1352. for(let i=0;i<newData.length;i++){
  1353. let obj = {
  1354. divId:'divId'+type+i,
  1355. hasAudio:false,
  1356. height:false,
  1357. videoUrl:newData[i].ws_flv,
  1358. }
  1359. if(type == 'subject'){
  1360. self.subjectVideoList.push(obj)
  1361. }else if(type == 'floor'){
  1362. self.floorVideoList.push(obj)
  1363. }
  1364. }
  1365. }else{
  1366. console.log('外网');
  1367. for(let i=0;i<newData.length;i++){
  1368. let text = localStorage.getItem('cameraUrl');
  1369. let url = newData[i].ws_flv;
  1370. url = url.split("rtp/");
  1371. let newUrl = text+'rtp/'+url[1];
  1372. let obj = {
  1373. divId:'divId'+type+i,
  1374. hasAudio:false,
  1375. height:false,
  1376. videoUrl:newUrl,
  1377. }
  1378. if(type == 'subject'){
  1379. self.subjectVideoList.push(obj)
  1380. }else if(type == 'floor'){
  1381. self.floorVideoList.push(obj)
  1382. }
  1383. }
  1384. }
  1385. if(type == 'subject'){
  1386. this.$set(this,'subjectVideoType',true);
  1387. }else if(type == 'floor'){
  1388. this.$set(this,'floorVideoType',true);
  1389. }
  1390. setTimeout(function(){
  1391. self.videoPlay(type);
  1392. },300);
  1393. }
  1394. },
  1395. //播放视频流
  1396. videoPlay(type){
  1397. let self = this;
  1398. this.loading = false;
  1399. let videoList = []
  1400. if(type == 'subject'){
  1401. videoList = JSON.parse(JSON.stringify(this.subjectVideoList))
  1402. }else if(type == 'floor'){
  1403. videoList = JSON.parse(JSON.stringify(this.floorVideoList))
  1404. }
  1405. for(let i=0;i<videoList.length;i++){
  1406. let obj = {
  1407. player :{},
  1408. flvPlayer:{}
  1409. };
  1410. obj.player = document.getElementById(videoList[i].divId);
  1411. obj.flvPlayer = flvjs.createPlayer(
  1412. {
  1413. // isLive: true, //=> 是否为直播流
  1414. // hasAudio: false, //=> 是否开启声音
  1415. type: 'flv', //媒体类型 flv 或 mp4
  1416. url: videoList[i].videoUrl //视频流地址
  1417. },
  1418. {
  1419. enableStashBuffer: true,//启用 IO 存储缓冲区。 如果您需要实时流播放(最小延迟),请设置为 false,但如果存在网络抖动,则可能会停止。
  1420. stashInitialSize: 128,//IO 存储缓冲区初始大小。 默认值为 384KB。 指示合适的大小可以改善视频加载/搜索时间。
  1421. isLive: true,//是否是直播
  1422. lazyLoadRecoverDuration: 30,//指示以秒为单位的lazyLoad 恢复时间边界。
  1423. autoCleanupSourceBuffer: true,//进行自动清理
  1424. autoCleanupMaxBackwardDuration: 3 * 60,//3 * 60 当向后缓冲持续时间超过这个值(以秒为单位)时,对 SourceBuffer 进行自动清理
  1425. autoCleanupMinBackwardDuration: 2 * 60,//2 * 60 指示在执行自动清理时为后向缓冲区保留的持续时间(以秒为单位)。
  1426. }
  1427. );
  1428. if(type == 'subject'){
  1429. self.subjectVideoPlayList.push(obj);
  1430. }else if(type == 'floor'){
  1431. self.floorVideoPlayList.push(obj);
  1432. }
  1433. }
  1434. if(type == 'subject'){
  1435. for(let i=0;i<self.subjectVideoPlayList.length;i++){
  1436. self.subjectVideoPlayList[i].flvPlayer.attachMediaElement(self.subjectVideoPlayList[i].player);
  1437. self.subjectVideoPlayList[i].flvPlayer.load(); //加载
  1438. self.subjectVideoPlayList[i].flvPlayer.play(); //加载
  1439. }
  1440. }else if(type == 'floor'){
  1441. for(let i=0;i<self.floorVideoPlayList.length;i++){
  1442. self.floorVideoPlayList[i].flvPlayer.attachMediaElement(self.floorVideoPlayList[i].player);
  1443. self.floorVideoPlayList[i].flvPlayer.load(); //加载
  1444. self.floorVideoPlayList[i].flvPlayer.play(); //加载
  1445. }
  1446. }
  1447. },
  1448. //断开视频流
  1449. videoOff(type){
  1450. let self = this;
  1451. if(type == 'subject'){
  1452. if(self.subjectVideoList[0]){
  1453. for(let i=0;i<self.subjectVideoList.length;i++){
  1454. if(self.subjectVideoList[i].flvPlayer){
  1455. self.subjectVideoList[i].flvPlayer.pause();
  1456. self.subjectVideoList[i].flvPlayer.unload();
  1457. self.subjectVideoList[i].flvPlayer.detachMediaElement();
  1458. self.subjectVideoList[i].flvPlayer.destroy();
  1459. self.subjectVideoList[i].flvPlayer = null;
  1460. }
  1461. }
  1462. self.$set(self,'subjectVideoList',[]);
  1463. self.$set(self,'subjectVideoType',false);
  1464. }
  1465. }else if(type == 'floor'){
  1466. if(self.floorVideoList[0]){
  1467. for(let i=0;i<self.floorVideoList.length;i++){
  1468. if(self.floorVideoList[i].flvPlayer){
  1469. self.floorVideoList[i].flvPlayer.pause();
  1470. self.floorVideoList[i].flvPlayer.unload();
  1471. self.floorVideoList[i].flvPlayer.detachMediaElement();
  1472. self.floorVideoList[i].flvPlayer.destroy();
  1473. self.floorVideoList[i].flvPlayer = null;
  1474. }
  1475. }
  1476. self.$set(self,'floorVideoList',[]);
  1477. self.$set(self,'floorVideoType',false);
  1478. }
  1479. }
  1480. },
  1481. /*********************************** 火焰报警-相关接口 *********************************/
  1482. //获取实验室灭火设备数据
  1483. getFireStatus(){
  1484. getFireStatus({subjectId:this.subId}).then(response => {
  1485. if(response.data.isexist){
  1486. this.$set(this,'fireType',response.data.isexist);
  1487. if(response.data.online){
  1488. this.$set(this,'fireListType',response.data.online);
  1489. this.$set(this.fireData,'temperatureType',response.data.temperature);
  1490. this.$set(this.fireData,'smokeType',response.data.smoke);
  1491. this.$set(this.fireData,'flameType',response.data.fire);
  1492. this.$set(this,'fireCode',response.data.fireDevice.deviceCode);
  1493. this.offFireMQTT('on');
  1494. if(response.data.temperature && response.data.smoke){
  1495. if(!this.fireStartType){
  1496. this.$set(this,'fireStartType',true);
  1497. this.$set(this,'fireStartText','自动灭火中');
  1498. this.fireStartTimeFunction(response.data.timeDifference);
  1499. }
  1500. }
  1501. }else{
  1502. this.$set(this,'fireListType',false);
  1503. this.$set(this.fireData,'temperatureType',false);
  1504. this.$set(this.fireData,'smokeType',false);
  1505. this.$set(this.fireData,'flameType',false);
  1506. this.$set(this,'fireCode',null);
  1507. this.offFireMQTT('on');
  1508. }
  1509. }else{
  1510. this.$set(this,'fireType',false);
  1511. this.offFireMQTT('on');
  1512. }
  1513. })
  1514. },
  1515. /*********************************** 楼层数据-相关接口 *********************************/
  1516. //地图数据
  1517. getBuildingData(){
  1518. let self = this;
  1519. getFloorData(this.floorId).then(response => {
  1520. if(response.data.buildFloorLayoutVoList[0]){
  1521. let list = JSON.parse(response.data.labExitLineVertex.layoutJoinData)
  1522. for(let i=0;i<list.length;i++){
  1523. if(list[i].type == '2'){
  1524. //楼道
  1525. for(let o=0;o<list[i].lightList.length;o++){
  1526. list[i].lightList[o].openType = false;
  1527. }
  1528. }else if(list[i].type == '1'){
  1529. for(let o=0;o<response.data.buildFloorLayoutVoList.length;o++){
  1530. if(list[i].key == response.data.buildFloorLayoutVoList[o].pointName){
  1531. list[i].id = response.data.buildFloorLayoutVoList[o].id;
  1532. list[i].buildId = response.data.buildFloorLayoutVoList[o].buildId;
  1533. list[i].floorId = response.data.buildFloorLayoutVoList[o].floorId;
  1534. list[i].roomType = response.data.buildFloorLayoutVoList[o].roomType;
  1535. list[i].roomName = response.data.buildFloorLayoutVoList[o].roomName;
  1536. list[i].roomNum = response.data.buildFloorLayoutVoList[o].roomNum;
  1537. list[i].subName = response.data.buildFloorLayoutVoList[o].subName;
  1538. list[i].subId = response.data.buildFloorLayoutVoList[o].subId;
  1539. list[i].online = response.data.buildFloorLayoutVoList[o].online;
  1540. list[i].loginAdmin = response.data.buildFloorLayoutVoList[o].loginAdmin;
  1541. list[i].planType = false;
  1542. }
  1543. }
  1544. }else if(list[i].type == 3){
  1545. list[i].roomCheckType = false;
  1546. }
  1547. }
  1548. let obj = this.calculateMapMax(list)
  1549. this.$set(this.mapData,'width',obj.maxWidth);
  1550. this.$set(this.mapData,'height',obj.maxHeight);
  1551. this.$set(this.mapData,'zoomData',obj.zoomData);
  1552. this.$set(this,'mapList',JSON.parse(JSON.stringify(list)));
  1553. this.$set(this,'shadeMapList',JSON.parse(JSON.stringify(list)));
  1554. this.$set(this,'mapType',true);
  1555. let floorText = '';
  1556. for(let i=0;i<self.buildingOptions.length;i++){
  1557. if(self.buildingOptions[i].id == self.buildingId){
  1558. floorText = floorText + self.buildingOptions[i].name
  1559. }
  1560. }
  1561. for(let i=0;i<self.floorOptions.length;i++){
  1562. if(self.floorOptions[i].id == self.floorId){
  1563. floorText = floorText + ' - ' + self.floorOptions[i].name
  1564. }
  1565. }
  1566. this.$set(this,'floorText',floorText);
  1567. //自动选中楼层中该用户有权限的第一个实验室
  1568. if(!this.planDataType){
  1569. console.log('无传参');
  1570. for(let i=0;i<response.data.buildFloorLayoutVoList.length;i++){
  1571. if(response.data.buildFloorLayoutVoList[i].loginAdmin === true){
  1572. let subText = response.data.buildFloorLayoutVoList[i].roomType == '-99'?response.data.buildFloorLayoutVoList[i].roomName:response.data.buildFloorLayoutVoList[i].subName +' - '+ response.data.buildFloorLayoutVoList[i].roomNum;
  1573. this.$set(this,'subText',subText);
  1574. this.$set(this,'subId',response.data.buildFloorLayoutVoList[i].subId);
  1575. this.$set(this,'checkSubId',response.data.buildFloorLayoutVoList[i].subId);
  1576. break
  1577. }
  1578. }
  1579. }else{
  1580. console.log('传参');
  1581. for(let i=0;i<response.data.buildFloorLayoutVoList.length;i++){
  1582. if(response.data.buildFloorLayoutVoList[i].subId == self.subId){
  1583. let subText = response.data.buildFloorLayoutVoList[i].roomType == '-99'?response.data.buildFloorLayoutVoList[i].roomName:response.data.buildFloorLayoutVoList[i].subName +' - '+ response.data.buildFloorLayoutVoList[i].roomNum;
  1584. this.$set(this,'subText',subText);
  1585. break
  1586. }
  1587. }
  1588. }
  1589. //处理实验室弹窗数据
  1590. let roomList = [];
  1591. for(let i=0;i<list.length;i++){
  1592. if(list[i].type == 1 && list[i].subId){
  1593. let roomObj = {
  1594. subId:list[i].subId
  1595. };
  1596. if(list[i].doorList[0].toward == 'top'){
  1597. roomObj.width = 266;
  1598. roomObj.height = 111;
  1599. roomObj.left = (list[i].w/2) + (list[i].x) - 133;
  1600. roomObj.top = list[i].y - 111;
  1601. roomObj.planType = false;
  1602. }else if(list[i].doorList[0].toward == 'bottom'){
  1603. roomObj.width = 266;
  1604. roomObj.height = 111;
  1605. roomObj.left = (list[i].w/2) + (list[i].x) - 133;
  1606. roomObj.top = list[i].y + list[i].h;
  1607. roomObj.planType = false;
  1608. }else if(list[i].doorList[0].toward == 'left'){
  1609. roomObj.width = 266;
  1610. roomObj.height = 111;
  1611. roomObj.left = list[i].x - 133;
  1612. roomObj.top = (list[i].h/2) + (list[i].y) - 56;
  1613. roomObj.planType = false;
  1614. }else if(list[i].doorList[0].toward == 'fight'){
  1615. roomObj.width = 266;
  1616. roomObj.height = 111;
  1617. roomObj.left = list[i].x + list[i].w + 133;
  1618. roomObj.top = (list[i].h/2) + (list[i].y) - 56;
  1619. roomObj.planType = false;
  1620. }
  1621. roomList.push(roomObj);
  1622. }
  1623. }
  1624. this.$set(this,'planMapList',roomList);
  1625. //获取相关实验室数据
  1626. this.buttonSubject();
  1627. //查询当前是否有进行中的疏散
  1628. this.getRedisEvacuation();
  1629. //测试查询预案
  1630. this.selectTriggerInfo();
  1631. this.$set(this,'planDataType',false);
  1632. }
  1633. })
  1634. },
  1635. //计算布局最大尺寸
  1636. calculateMapMax(list) {
  1637. //基础参数
  1638. let height = 500;
  1639. let width = 1000;
  1640. let maxWidth = 0
  1641. let maxHeight = 0
  1642. let zoomData = 1;
  1643. //参数处理
  1644. for (let i = 0; i < list.length; i++) {
  1645. if ((list[i].x + list[i].w) > maxWidth) {
  1646. maxWidth = list[i].x + list[i].w
  1647. }
  1648. if ((list[i].y + list[i].h) > maxHeight) {
  1649. maxHeight = list[i].y + list[i].h
  1650. }
  1651. }
  1652. //处理等值数据
  1653. if(maxHeight == height){
  1654. maxHeight++
  1655. }
  1656. if(maxWidth == width){
  1657. maxWidth++
  1658. }
  1659. //缩放判断
  1660. if(maxHeight>height&&maxWidth>width){
  1661. if((maxHeight-height)>(maxWidth-width)){
  1662. zoomData = height/maxHeight;
  1663. this.$set(this,'zoomData',height/maxHeight);
  1664. }else{
  1665. zoomData = width / maxWidth;
  1666. this.$set(this,'zoomData',width / maxWidth);
  1667. }
  1668. }else if(maxHeight<height&&maxWidth<width){
  1669. if((height-maxHeight)>(width-maxWidth)){
  1670. zoomData = width / maxWidth;
  1671. this.$set(this,'zoomData',width / maxWidth);
  1672. }else{
  1673. zoomData = height / maxHeight;
  1674. this.$set(this,'zoomData',height / maxHeight);
  1675. }
  1676. }else if(maxHeight<height&&maxWidth>width){
  1677. zoomData = width / maxWidth;
  1678. this.$set(this,'zoomData',width / maxWidth);
  1679. }else if(maxHeight>height&&maxWidth<width){
  1680. zoomData = height / maxHeight;
  1681. this.$set(this,'zoomData',height / maxHeight);
  1682. }
  1683. return { maxWidth: maxWidth, maxHeight: maxHeight,zoomData:zoomData }
  1684. },
  1685. /*********************************** 楼层/楼栋数据-相关接口 *********************************/
  1686. //根据楼栋获取楼层数据
  1687. getBuildOrFloorList(type){
  1688. let obj = {
  1689. type : 3,
  1690. parentId : this.buildingId
  1691. }
  1692. getBuildOrFloorList(obj).then(response => {
  1693. if(response.data[0]){
  1694. for(let i=0;i<response.data.length;i++){
  1695. response.data[i].planType = false
  1696. }
  1697. this.$set(this,'floorOptions',response.data);
  1698. if(!this.planDataType){
  1699. if(type == 'automatic'){
  1700. //处理实验室数量多的楼层优先选择
  1701. let num = 0;
  1702. let index = null;
  1703. for(let i=0;i<response.data.length;i++){
  1704. if(response.data[i].subNum>num){
  1705. num = response.data[i].subNum;
  1706. index = i;
  1707. }
  1708. }
  1709. this.$set(this,'floorId',response.data[index].id);
  1710. }
  1711. }
  1712. //获取楼层消息
  1713. this.getHornLastMess();
  1714. //获取楼层喇叭
  1715. this.getDeviceList();
  1716. //获取楼层摄像头数据
  1717. this.getCameraByFloor();
  1718. //获取楼层数据
  1719. this.getBuildingData();
  1720. //楼层mqtt
  1721. this.offFloorMQTT('on');
  1722. //断开楼层视频流
  1723. this.videoOff('floor');
  1724. }
  1725. })
  1726. },
  1727. //查询当前用户下的预案触发数据
  1728. selectTriggerInfo(){
  1729. let self = this;
  1730. selectTriggerInfo().then(response => {
  1731. //楼栋预案标记
  1732. for(let o=0;o<self.buildingOptions.length;o++){
  1733. let num = 0;
  1734. for(let i=0;i<response.data.length;i++){
  1735. if(response.data[i].buildId == self.buildingOptions[o].id){
  1736. num++
  1737. }
  1738. }
  1739. self.buildingOptions[o].planType = num != 0;
  1740. }
  1741. //楼层预案标记
  1742. for(let o=0;o<self.floorOptions.length;o++){
  1743. let num = 0;
  1744. for(let i=0;i<response.data.length;i++){
  1745. if(response.data[i].floorId == self.floorOptions[o].id){
  1746. num++
  1747. }
  1748. }
  1749. self.floorOptions[o].planType = num != 0;
  1750. }
  1751. //实验室预案标记
  1752. for(let o=0;o<self.mapList.length;o++){
  1753. if(self.mapList[o].type == 1){
  1754. let num = 0;
  1755. for(let i=0;i<response.data.length;i++){
  1756. if(response.data[i].subId == self.mapList[o].subId){
  1757. self.mapList[o].planType = true;
  1758. for(let x=0;x<self.planMapList.length;x++){
  1759. if(self.planMapList[x].subId == self.mapList[o].subId){
  1760. self.planMapList[x].riskPlanTriggerTime = response.data[i].riskPlanTriggerTime;
  1761. self.planMapList[x].riskAttribute = response.data[i].riskAttribute;
  1762. self.planMapList[x].riskPlanLevel = response.data[i].riskPlanLevel;
  1763. self.planMapList[x].riskPlanLevelName = response.data[i].riskPlanLevelName;
  1764. self.planMapList[x].name = response.data[i].name;
  1765. self.planMapList[x].planType = true;
  1766. }
  1767. }
  1768. }
  1769. }
  1770. // self.mapList[o].planType = num != 0;
  1771. }
  1772. }
  1773. //浮层实验室预案标记
  1774. for(let o=0;o<self.shadeMapList.length;o++){
  1775. if(self.shadeMapList[o].type == 1){
  1776. let num = 0;
  1777. for(let i=0;i<response.data.length;i++){
  1778. if(response.data[i].subId == self.shadeMapList[o].subId){
  1779. num++
  1780. }
  1781. }
  1782. self.shadeMapList[o].planType = num != 0;
  1783. }
  1784. }
  1785. this.$forceUpdate();
  1786. })
  1787. },
  1788. /*********************************** MQTT相关-相关接口 *********************************/
  1789. //全局-MQTT订阅
  1790. onAllMQTT(){
  1791. let self = this;
  1792. this.allClient = mqtt.connect(localStorage.getItem('mqttUrl'), {
  1793. username: localStorage.getItem('mqttUser'),
  1794. password: localStorage.getItem('mqttPassword')
  1795. });
  1796. this.allClient.on("connect", e =>{
  1797. console.log("连接成功");
  1798. this.allClient.subscribe(self.planTopic, (err) => {
  1799. if (!err) {
  1800. console.log("预案-订阅成功:" + self.planTopic);
  1801. }
  1802. });
  1803. });
  1804. this.allClient.on("message", (topic, message) => {
  1805. if (message){
  1806. let data = JSON.parse(message)
  1807. if(data){
  1808. console.log('data',data);
  1809. if(topic == self.planTopic){
  1810. //传感器状态
  1811. console.log('预案-状态');
  1812. }
  1813. }
  1814. }
  1815. });
  1816. },
  1817. //楼层-MQTT订阅
  1818. onFloorMQTT(){
  1819. let self = this;
  1820. this.floorClient = mqtt.connect(localStorage.getItem('mqttUrl'), {
  1821. username: localStorage.getItem('mqttUser'),
  1822. password: localStorage.getItem('mqttPassword')
  1823. });
  1824. this.floorClient.on("connect", e =>{
  1825. console.log("连接成功");
  1826. this.floorClient.subscribe(self.messageTopic+self.floorId, (err) => {
  1827. if (!err) {
  1828. console.log("消息订阅成功:" + self.messageTopic+self.floorId);
  1829. }
  1830. });
  1831. });
  1832. this.floorClient.subscribe(self.evacuationTopic+self.floorId, (err) => {
  1833. if (!err) {
  1834. console.log("疏散-订阅成功:" + self.evacuationTopic+self.floorId);
  1835. self.getRedisEvacuation();
  1836. }
  1837. });
  1838. this.floorClient.subscribe(self.userTopic+self.floorId, (err) => {
  1839. if (!err) {
  1840. console.log("实验室人数-订阅成功:" + self.userTopic+self.floorId);
  1841. }
  1842. });
  1843. this.floorClient.on("message", (topic, message) => {
  1844. if (message){
  1845. let data = JSON.parse(message)
  1846. if(data){
  1847. console.log('data',data);
  1848. if(topic == (self.messageTopic+self.floorId)){
  1849. //消息状态
  1850. console.log('消息-状态');
  1851. if(data.data == 'FLOOR_HORN'){
  1852. self.getHornLastMess();
  1853. }
  1854. }else if(topic == (self.evacuationTopic+self.floorId)){
  1855. console.log('疏散-状态');
  1856. if(data.data == 'FLOOR_EXITLINE'){
  1857. //疏散消息
  1858. self.getRedisEvacuation();
  1859. }else if(data.data == 'FLOOR_OVER_EXITLINE'){
  1860. self.getBuildingData();
  1861. }
  1862. }else if(topic == (self.userTopic+self.floorId)){
  1863. console.log('实验室人数-状态');
  1864. //实验室人数
  1865. self.subOnlineUser(data.data);
  1866. }
  1867. }
  1868. }
  1869. });
  1870. },
  1871. //实验室-MQTT订阅
  1872. onSubMQTT(){
  1873. let self = this;
  1874. this.subClient = mqtt.connect(localStorage.getItem('mqttUrl'), {
  1875. username: localStorage.getItem('mqttUser'),
  1876. password: localStorage.getItem('mqttPassword')
  1877. });
  1878. this.subClient.on("connect", e =>{
  1879. console.log("连接成功");
  1880. this.subClient.subscribe(self.sensorTopic+self.subId, (err) => {
  1881. if (!err) {
  1882. console.log("传感器-订阅成功:" + self.sensorTopic+self.subId);
  1883. }
  1884. });
  1885. this.subClient.subscribe(self.switchTopic+self.subId, (err) => {
  1886. if (!err) {
  1887. console.log("设备-订阅成功:" + self.switchTopic+self.subId);
  1888. }
  1889. });
  1890. });
  1891. this.subClient.on("message", (topic, message) => {
  1892. if (message){
  1893. let data = JSON.parse(message)
  1894. if(data){
  1895. console.log('data',data);
  1896. if(topic == (self.sensorTopic+self.subId)){
  1897. //传感器状态
  1898. console.log('实验室传感器-状态');
  1899. this.$set(this,'sensorList',this.sensorIconMatching(data.data.functionStatuses));
  1900. }else if(topic == (self.switchTopic+self.subId)){
  1901. //设备在线状态
  1902. console.log('实验室设备-状态');
  1903. for (let i = 0; i < data.data.length; i++) {
  1904. if (self.controlList[0]) {
  1905. for (let k = 0; k < self.controlList.length; k++) {
  1906. if (self.controlList[k].id == data.data[i].num) {
  1907. if (data.data[i].hardwareOperate == 'CLOSE') {
  1908. self.controlList[k].code = 4;
  1909. } else if (data.data[i].hardwareOperate == 'OPEN') {
  1910. self.controlList[k].code = 3;
  1911. } else if (data.data[i].hardwareOperate == 'OFFLINE') {
  1912. self.controlList[k].code = 0;
  1913. }
  1914. }
  1915. }
  1916. }
  1917. }
  1918. }
  1919. }
  1920. }
  1921. });
  1922. },
  1923. //灭火设备-MQTT订阅
  1924. onFireMQTT(){
  1925. let self = this;
  1926. if(self.fireCode){
  1927. this.fireClient = mqtt.connect(localStorage.getItem('mqttUrl'), {
  1928. username: localStorage.getItem('mqttUser'),
  1929. password: localStorage.getItem('mqttPassword')
  1930. });
  1931. this.fireClient.on("connect", e =>{
  1932. console.log("连接成功");
  1933. this.fireClient.subscribe(self.fireTopic+self.fireCode, (err) => {
  1934. if (!err) {
  1935. console.log("火灾传感器状态-订阅成功:" + self.fireTopic+self.fireCode);
  1936. }
  1937. });
  1938. this.fireClient.subscribe(self.fireOnlineTopic+self.fireCode, (err) => {
  1939. if (!err) {
  1940. console.log("火灾设备是否在线-订阅成功:" + self.fireOnlineTopic+self.fireCode);
  1941. }
  1942. });
  1943. this.fireClient.subscribe(self.firePerformTopic+self.fireCode, (err) => {
  1944. if (!err) {
  1945. console.log("火灾是否正在执行灭火操作-订阅成功:" + self.firePerformTopic+self.fireCode);
  1946. }
  1947. });
  1948. });
  1949. this.fireClient.on("message", (topic, message) => {
  1950. if (message){
  1951. let data = JSON.parse(message)
  1952. if(data){
  1953. console.log('data',data);
  1954. if(topic == (self.fireTopic + self.fireCode)){
  1955. //传感器状态
  1956. console.log('传感器状态');
  1957. self.getFireStatus();
  1958. }else if(topic == (self.fireOnlineTopic + self.fireCode)){
  1959. //设备在线状态
  1960. console.log('设备在线状态');
  1961. }else if(topic == (self.firePerformTopic + self.fireCode)){
  1962. //灭火执行操作
  1963. if(data.fireStatus == 1){
  1964. if(!self.fireStartType){
  1965. self.$set(self,'fireStartType',true);
  1966. self.$set(self,'fireStartText','灭火中');
  1967. self.fireStartTimeFunction(data.direTime);
  1968. }else if(data.fireStatus == 0){
  1969. self.msgError('一键灭火启动失败')
  1970. }
  1971. }
  1972. }
  1973. }
  1974. }
  1975. });
  1976. }
  1977. },
  1978. //取消订阅-全局-关闭MQTT连接
  1979. offAllMQTT(type){
  1980. let self = this;
  1981. //判断是否已有连接如果有责断开
  1982. if(this.allClient.unsubscribe){
  1983. this.allClient.unsubscribe(self.planTopic, error => {
  1984. if (error) {
  1985. console.log('预案-MQTT断开报错=>', error)
  1986. }
  1987. })
  1988. this.allClient.end();
  1989. this.$set(this,'allClient',{});
  1990. }
  1991. //判断传入参数如果存在 发起一次新的连接
  1992. if(type){
  1993. this.onAllMQTT();
  1994. }
  1995. },
  1996. //取消订阅-楼层-关闭MQTT连接
  1997. offFloorMQTT(type){
  1998. let self = this;
  1999. //判断是否已有连接如果有责断开
  2000. if(this.floorClient.unsubscribe){
  2001. this.floorClient.unsubscribe(self.evacuationTopic+self.floorId, error => {
  2002. if (error) {
  2003. console.log('疏散-MQTT断开报错=>', error)
  2004. }
  2005. })
  2006. this.floorClient.unsubscribe(self.messageTopic+self.floorId, error => {
  2007. if (error) {
  2008. console.log('消息-MQTT断开报错=>', error)
  2009. }
  2010. })
  2011. this.floorClient.unsubscribe(self.userTopic+self.floorId, error => {
  2012. if (error) {
  2013. console.log('实验室人数-MQTT断开报错=>', error)
  2014. }
  2015. })
  2016. this.floorClient.end();
  2017. this.$set(this,'floorClient',{});
  2018. }
  2019. //判断传入参数如果存在 发起一次新的连接
  2020. if(type){
  2021. this.onFloorMQTT();
  2022. }
  2023. },
  2024. //取消订阅-实验室-关闭MQTT连接
  2025. offSubMQTT(type){
  2026. let self = this;
  2027. //判断是否已有连接如果有责断开
  2028. if(this.subClient.unsubscribe){
  2029. this.subClient.unsubscribe(self.sensorTopic+self.subId, error => {
  2030. if (error) {
  2031. console.log('传感器-MQTT断开报错=>', error)
  2032. }
  2033. })
  2034. this.subClient.unsubscribe(self.switchTopic+self.subId, error => {
  2035. if (error) {
  2036. console.log('硬件-MQTT断开报错=>', error)
  2037. }
  2038. })
  2039. this.subClient.end();
  2040. this.$set(this,'subClient',{});
  2041. }
  2042. //判断传入参数如果存在 发起一次新的连接
  2043. if(type){
  2044. this.onSubMQTT();
  2045. }
  2046. },
  2047. //取消订阅-灭火设备-关闭MQTT连接
  2048. offFireMQTT(type){
  2049. let self = this;
  2050. //判断是否已有连接如果有责断开
  2051. if(this.fireClient.unsubscribe){
  2052. this.fireClient.unsubscribe(self.fireTopic+self.fireCode, error => {
  2053. if (error) {
  2054. console.log('火灾传感器状态-MQTT断开报错=>', error)
  2055. }
  2056. })
  2057. this.fireClient.unsubscribe(self.fireOnlineTopic+self.fireCode, error => {
  2058. if (error) {
  2059. console.log('火灾设备是否在线-MQTT断开报错=>', error)
  2060. }
  2061. })
  2062. this.fireClient.unsubscribe(self.firePerformTopic+self.fireCode, error => {
  2063. if (error) {
  2064. console.log('火灾是否正在执行灭火操作-MQTT断开报错=>', error)
  2065. }
  2066. })
  2067. this.fireClient.end();
  2068. this.$set(this,'fireClient',{});
  2069. }
  2070. //判断传入参数如果存在 发起一次新的连接
  2071. if(type){
  2072. this.onFireMQTT();
  2073. }
  2074. },
  2075. /*********************************** 其他-相关接口 *********************************/
  2076. // 传感器图标匹配
  2077. sensorIconMatching(list){
  2078. if(!this.sensorIconData){
  2079. this.$set(this,'sensorIconData',{
  2080. wendu_zc : require('@/assets/ZDimages/bigData3_2/icon_znjc_wsd.png'),
  2081. wendu_yc : require('@/assets/ZDimages/bigData3_2/icon_znjc_wsd_yc.png'),
  2082. shidu_zc : require('@/assets/ZDimages/bigData3_2/icon_znjc_sd.png'),
  2083. shidu_yc : require('@/assets/ZDimages/bigData3_2/icon_znjc_sd_yc.png'),
  2084. co_zc : require('@/assets/ZDimages/bigData3_2/icon_znjc_yyht_zc.png'),
  2085. co_yc : require('@/assets/ZDimages/bigData3_2/icon_znjc_yyht_yc.png'),
  2086. jiawan_zc : require('@/assets/ZDimages/bigData3_2/icon_znjc_jw.png'),
  2087. jiawan_yc : require('@/assets/ZDimages/bigData3_2/icon_znjc_jw_yc.png'),
  2088. o2_zc : require('@/assets/ZDimages/bigData3_2/icon_znjc_yq_zc.png'),
  2089. o2_yc : require('@/assets/ZDimages/bigData3_2/icon_znjc_yq_yc.png'),
  2090. yanwu_zc : require('@/assets/ZDimages/bigData3_2/icon_yg_zc.png'),
  2091. yanwu_yc : require('@/assets/ZDimages/bigData3_2/icon_yg_yc.png'),
  2092. daqiya_zc : require('@/assets/ZDimages/bigData3_2/icon_znjc_dqy.png'),
  2093. daqiya_yc : require('@/assets/ZDimages/bigData3_2/icon_znjc_dqy_yc.png'),
  2094. voc_zc : require('@/assets/ZDimages/bigData3_2/icon_znjc_voc.png'),
  2095. voc_yc : require('@/assets/ZDimages/bigData3_2/icon_znjc_voc_yc.png'),
  2096. tvoc_zc : require('@/assets/ZDimages/bigData3_2/icon_znjc_tcoc.png'),
  2097. tvoc_yc : require('@/assets/ZDimages/bigData3_2/icon_znjc_tcoc_yc.png'),
  2098. so2_zc : require('@/assets/ZDimages/bigData3_2/icon_znjc_soer.png'),
  2099. so2_yc : require('@/assets/ZDimages/bigData3_2/icon_znjc_soe_yc.png'),
  2100. no1_zc : require('@/assets/ZDimages/bigData3_2/icon_znjc_noy.png'),
  2101. no1_yc : require('@/assets/ZDimages/bigData3_2/icon_znjc_noy_yc.png'),
  2102. fenchen_zc : require('@/assets/ZDimages/bigData3_2/icon_znjc_fc.png'),
  2103. fenchen_yc : require('@/assets/ZDimages/bigData3_2/icon_znjc_fc_yc.png'),
  2104. H2_zc : require('@/assets/ZDimages/bigData3_2/icon_znjc_he.png'),
  2105. H2_yc : require('@/assets/ZDimages/bigData3_2/icon_znjc_he_yc.png'),
  2106. guangqi_zc : require('@/assets/ZDimages/bigData3_2/icon_yygb_gq.png'),
  2107. guangqi_yc : require('@/assets/ZDimages/bigData3_2/icon_yygb_gq_yc.png'),
  2108. lvqi_zc : require('@/assets/ZDimages/bigData3_2/icon_znjc_lq.png'),
  2109. lvqi_yc : require('@/assets/ZDimages/bigData3_2/icon_znjc_lq_yc.png'),
  2110. nullClass : require('@/assets/ZDimages/evacuation3_2/icon_znwl_sybz.png'),
  2111. });
  2112. }
  2113. let newList = [];
  2114. for(let i=0;i<list.length;i++){
  2115. let obj = {
  2116. id:list[i].id,
  2117. funcName:list[i].funcName,
  2118. formatVal:list[i].formatVal,
  2119. type:0,
  2120. }
  2121. switch (list[i].funNum)
  2122. {
  2123. case 'wendu':
  2124. obj.zcImg = this.sensorIconData.wendu_zc;
  2125. obj.ycImg = this.sensorIconData.wendu_yc;
  2126. break;
  2127. case 'shidu':
  2128. obj.zcImg = this.sensorIconData.shidu_zc;
  2129. obj.ycImg = this.sensorIconData.shidu_yc;
  2130. break;
  2131. case 'co':
  2132. obj.zcImg = this.sensorIconData.co_zc;
  2133. obj.ycImg = this.sensorIconData.co_yc;
  2134. break;
  2135. case 'jiawan':
  2136. obj.zcImg = this.sensorIconData.jiawan_zc;
  2137. obj.ycImg = this.sensorIconData.jiawan_yc;
  2138. break;
  2139. case 'o2':
  2140. obj.zcImg = this.sensorIconData.o2_zc;
  2141. obj.ycImg = this.sensorIconData.o2_yc;
  2142. break;
  2143. case 'yanwu':
  2144. obj.zcImg = this.sensorIconData.yanwu_zc;
  2145. obj.ycImg = this.sensorIconData.yanwu_yc;
  2146. break;
  2147. case 'daqiya':
  2148. obj.zcImg = this.sensorIconData.daqiya_zc;
  2149. obj.ycImg = this.sensorIconData.daqiya_yc;
  2150. break;
  2151. case 'voc':
  2152. obj.zcImg = this.sensorIconData.voc_zc;
  2153. obj.ycImg = this.sensorIconData.voc_yc;
  2154. break;
  2155. case 'tvoc':
  2156. obj.zcImg = this.sensorIconData.tvoc_zc;
  2157. obj.ycImg = this.sensorIconData.tvoc_yc;
  2158. break;
  2159. case 'so2':
  2160. obj.zcImg = this.sensorIconData.so2_zc;
  2161. obj.ycImg = this.sensorIconData.so2_yc;
  2162. break;
  2163. case 'no1':
  2164. obj.zcImg = this.sensorIconData.no1_zc;
  2165. obj.ycImg = this.sensorIconData.no1_yc;
  2166. break;
  2167. case 'fenchen':
  2168. obj.zcImg = this.sensorIconData.fenchen_zc;
  2169. obj.ycImg = this.sensorIconData.fenchen_yc;
  2170. break;
  2171. case 'H2':
  2172. obj.zcImg = this.sensorIconData.H2_zc;
  2173. obj.ycImg = this.sensorIconData.H2_yc;
  2174. break;
  2175. case 'guangqi':
  2176. obj.zcImg = this.sensorIconData.guangqi_zc;
  2177. obj.ycImg = this.sensorIconData.guangqi_yc;
  2178. break;
  2179. case 'lvqi':
  2180. obj.zcImg = this.sensorIconData.lvqi_zc;
  2181. obj.ycImg = this.sensorIconData.lvqi_yc;
  2182. break;
  2183. default:
  2184. obj.zcImg = this.sensorIconData.nullClass;
  2185. obj.ycImg = this.sensorIconData.nullClass;
  2186. }
  2187. newList.push(obj)
  2188. }
  2189. return newList;
  2190. },
  2191. },
  2192. beforeDestroy() {
  2193. //清除定时器
  2194. let self = this;
  2195. // self.offAllMQTT();
  2196. self.offFloorMQTT();
  2197. self.offSubMQTT();
  2198. if(self.fireListType){
  2199. self.offFireMQTT();
  2200. }
  2201. console.log("beforeDestroy");
  2202. },
  2203. }
  2204. </script>
  2205. <style scoped lang="scss">
  2206. .newEvacuationBigData{
  2207. flex:1;
  2208. position: relative;
  2209. display: flex;
  2210. width:1920px;
  2211. height:1080px;
  2212. background: url("../assets/ZDimages/bigData3_2/img_bg.png") repeat;
  2213. background-size: 100% 100%;
  2214. p{
  2215. margin:0;
  2216. }
  2217. .evacuation-title-positon-box{
  2218. position: absolute;
  2219. top:0;
  2220. /*left:2%;*/
  2221. /*width:96%;*/
  2222. height:92px;
  2223. left:41px;
  2224. width: 1837px;
  2225. background: url("../assets/ZDimages/bigData3_2/sy_db_bg.png");
  2226. background-size: 100% 100%;
  2227. text-align: center;
  2228. font-size:40px;
  2229. line-height:82px;
  2230. color:#24d1f9;
  2231. font-weight:900;
  2232. letter-spacing:10px
  2233. }
  2234. .big-title-box{
  2235. width:181px;
  2236. height:59px;
  2237. background: url("../assets/ZDimages/bigData3_2/img_zjdp_bg.png");
  2238. background-size: 100%;
  2239. display: flex;
  2240. img{
  2241. width:18px;
  2242. height:18px;
  2243. margin:27px 16px 0 20px;
  2244. }
  2245. p{
  2246. margin-top:16px;
  2247. line-height:40px;
  2248. color:#fff;
  2249. font-size:16px;
  2250. }
  2251. }
  2252. .left-max-big-box{
  2253. width:462px;
  2254. /*智能检测*/
  2255. .left-big-box-one{
  2256. margin-left:30px;
  2257. margin-top:70px;
  2258. height:414px;
  2259. .max-sensor-box{
  2260. height:318px;
  2261. margin:17px 20px 20px 0;
  2262. .sensor-for-max-box{
  2263. width:348px;
  2264. height:70px;
  2265. margin-bottom:12px;
  2266. display: flex;
  2267. position: relative;
  2268. .sensor-min-img-box{
  2269. position: absolute;
  2270. width:54px;
  2271. height:54px;
  2272. top:8px;
  2273. left:12px;
  2274. z-index: 5;
  2275. animation:rotating 6s linear infinite; //旋转动画
  2276. }
  2277. img{
  2278. width:24px;
  2279. height:24px;
  2280. margin:23px 50px 23px 27px;
  2281. z-index: 10;
  2282. }
  2283. .sensor-name-p{
  2284. width:130px;
  2285. line-height:70px;
  2286. font-size:18px;
  2287. }
  2288. .sensor-num-p{
  2289. flex:1;
  2290. line-height:70px;
  2291. font-size:20px;
  2292. }
  2293. }
  2294. .sensor-alarm-one{
  2295. background: url("../assets/ZDimages/bigData3_2/img_yc_bg.png");
  2296. background-size: 100% 100%;
  2297. color:#E80000;
  2298. .sensor-min-img-box{
  2299. background: url("../assets/ZDimages/bigData3_2/icon_cgqbg_yc.png");
  2300. background-size: 100% 100%;
  2301. }
  2302. }
  2303. .sensor-alarm-two{
  2304. color:#24D1F9;
  2305. background: url("../assets/ZDimages/bigData3_2/img_zc_bg.png");
  2306. background-size: 100% 100%;
  2307. .sensor-min-img-box{
  2308. background: url("../assets/ZDimages/bigData3_2/icon_cgqbg_zc.png");
  2309. background-size: 100% 100%;
  2310. }
  2311. }
  2312. }
  2313. }
  2314. .left-big-box-two{
  2315. margin-left:30px;
  2316. height:274px;
  2317. /*智能控制*/
  2318. .control-max-box{
  2319. height:214px;
  2320. margin-right: 20px;
  2321. .control-for-box:nth-child(2n+1){
  2322. margin-right:72px;
  2323. }
  2324. .control-for-box{
  2325. overflow: hidden;
  2326. height:210px;
  2327. width:160px;
  2328. display: inline-block;
  2329. position: relative;
  2330. .control-for-title-p{
  2331. line-height:40px;
  2332. margin-top:5px;
  2333. text-align: center;
  2334. font-size:18px;
  2335. color:#24D1F9;
  2336. }
  2337. .control-for-img-box{
  2338. width:104px;
  2339. height:104px;
  2340. position: relative;
  2341. margin:0 28px;
  2342. .position-img{
  2343. position:absolute;
  2344. width:84px;
  2345. height:84px;
  2346. margin:10px;
  2347. z-index:5;
  2348. animation:rotating 6s linear infinite; //旋转动画
  2349. }
  2350. .for-img{
  2351. width:50px;
  2352. height:50px;
  2353. margin:27px;
  2354. z-index:10;
  2355. }
  2356. }
  2357. .position-big-img{
  2358. width:104px;
  2359. height:104px;
  2360. position: absolute;
  2361. top:45px;
  2362. left:28px;
  2363. animation: scaleDraw 5s ease-in-out infinite;
  2364. -webkit-animation: scaleDraw 5s ease-in-out infinite;
  2365. }
  2366. .control-null-p{
  2367. color:#999;
  2368. width:70px;
  2369. height:30px;
  2370. line-height:30px;
  2371. border:1px solid #999;
  2372. font-size:14px;
  2373. text-align: center;
  2374. border-radius:15px;
  2375. margin:12px 0 0 44px;
  2376. }
  2377. }
  2378. }
  2379. }
  2380. .left-big-box-three{
  2381. margin-left:30px;
  2382. height:322px;
  2383. #eCharts{
  2384. height:233px;
  2385. }
  2386. }
  2387. }
  2388. .center-max-big-box{
  2389. flex:1;
  2390. .left-big-box-one{
  2391. height:137px;
  2392. margin-top:92px;
  2393. display: flex;
  2394. .text-p{
  2395. width:359px;
  2396. margin-right:10px;
  2397. margin-top:45px;
  2398. height:40px;
  2399. line-height:40px;
  2400. flex:1;
  2401. color:#24d1f9;
  2402. overflow:hidden;
  2403. text-overflow:ellipsis;
  2404. white-space:nowrap;
  2405. }
  2406. .button-p-one{
  2407. width:172px;
  2408. height:38px;
  2409. line-height:38px;
  2410. color:#24d1f9;
  2411. text-align: center;
  2412. background: url("../assets/ZDimages/bigData3_2/icon_sspt_ljssbk.png");
  2413. margin-right:5px;
  2414. margin-top:45px;
  2415. cursor: pointer;
  2416. }
  2417. .button-p-two{
  2418. width:120px;
  2419. height:38px;
  2420. line-height:38px;
  2421. color:#24d1f9;
  2422. text-align: center;
  2423. background: url("../assets/ZDimages/bigData3_2/icon_yjzh_fh.png");
  2424. margin-top:45px;
  2425. cursor: pointer;
  2426. }
  2427. }
  2428. .left-big-box-two{
  2429. height:500px;
  2430. position: relative;
  2431. .newEvacuation-map-max-big-box{
  2432. position: absolute;
  2433. top: 50%;
  2434. left: 50%;
  2435. -webkit-user-select: none;
  2436. img{
  2437. -webkit-user-drag: none;
  2438. }
  2439. .newEvacuation-map-big-box{
  2440. position: relative;
  2441. border:1px dashed #24D1F9;
  2442. .newEvacuation-map-for-box{
  2443. position: absolute;
  2444. display: flex;
  2445. flex-direction: column;
  2446. overflow: hidden;
  2447. .newEvacuation-map-for-min-box{
  2448. height:100%;
  2449. position: relative;
  2450. .map-for-name-p{
  2451. padding:0 10px;
  2452. height:20px;
  2453. line-height:20px;
  2454. font-size:14px;
  2455. text-align: center;
  2456. color:#24D1F9;
  2457. overflow: hidden;
  2458. text-overflow:ellipsis;
  2459. white-space:nowrap;
  2460. }
  2461. .map-for-num-p{
  2462. padding:0 10px;
  2463. height:20px;
  2464. line-height:20px;
  2465. font-size:14px;
  2466. text-align: center;
  2467. color:#24D1F9;
  2468. overflow: hidden;
  2469. text-overflow:ellipsis;
  2470. white-space:nowrap;
  2471. }
  2472. .user-num-box{
  2473. position: absolute;
  2474. left:0;
  2475. display: flex;
  2476. img{
  2477. width:20px;
  2478. height:15px;
  2479. margin:10px;
  2480. }
  2481. p{
  2482. line-height:35px;
  2483. font-size:14px;
  2484. color:#24D1F9;
  2485. }
  2486. }
  2487. .user-num-one{
  2488. top:0;
  2489. }
  2490. .user-num-two{
  2491. bottom:0;
  2492. }
  2493. .position-box{
  2494. position: absolute;
  2495. font-size:14px;
  2496. overflow: hidden;
  2497. }
  2498. .center-move-door-p-t {
  2499. background: url("../assets/ZDimages/bigData3_2/icon_pmbjt_m.png") !important;
  2500. background-size: 100% !important;
  2501. transform: rotate(180deg);
  2502. }
  2503. .center-move-door-p-b {
  2504. background: url("../assets/ZDimages/bigData3_2/icon_pmbjt_m.png") !important;
  2505. background-size: 100% !important;
  2506. }
  2507. .center-move-door-p-l {
  2508. background: url("../assets/ZDimages/bigData3_2/icon_pmbjt_m.png") !important;
  2509. background-size: 100% !important;
  2510. transform: rotate(90deg);
  2511. }
  2512. .center-move-door-p-r {
  2513. background: url("../assets/ZDimages/bigData3_2/icon_pmbjt_m.png") !important;
  2514. background-size: 100% !important;
  2515. transform: rotateZ(270deg);
  2516. }
  2517. .lightTopOn {
  2518. background: url("../assets/ZDimages/evacuation3_2/icon_sjt.png");
  2519. background-size: 100%;
  2520. }
  2521. .lightTopOff {
  2522. background: url("../assets/ZDimages/evacuation3_2/icon_shang_hs.png");
  2523. background-size: 100%;
  2524. }
  2525. .lightBottomOn {
  2526. background: url("../assets/ZDimages/evacuation3_2/icon_xjt.png");
  2527. background-size: 100%;
  2528. }
  2529. .lightBottomOff {
  2530. background: url("../assets/ZDimages/evacuation3_2/icon_xia_hs.png");
  2531. background-size: 100%;
  2532. }
  2533. .lightLeftOn {
  2534. background: url("../assets/ZDimages/evacuation3_2/icon_zuo.png");
  2535. background-size: 100%;
  2536. }
  2537. .lightLeftOff {
  2538. background: url("../assets/ZDimages/evacuation3_2/icon_zou_hs.png");
  2539. background-size: 100%;
  2540. }
  2541. .lightRightOn {
  2542. background: url("../assets/ZDimages/evacuation3_2/icon_yuo.png");
  2543. background-size: 100%;
  2544. }
  2545. .lightRightOff {
  2546. background: url("../assets/ZDimages/evacuation3_2/icon_you_hs.png");
  2547. background-size: 100%;
  2548. }
  2549. }
  2550. }
  2551. .for-map-box-one{
  2552. border:1px solid #24D1F9;
  2553. }
  2554. .for-map-box{
  2555. background: rgba(1,16,32,0.5);
  2556. }
  2557. .for-map-box-two{
  2558. background: url("../assets/ZDimages/bigData3_2/icon_jjck.png") center center no-repeat rgba(5,45,43,0.5);
  2559. background-size: 80px 80px;
  2560. }
  2561. .for-map-box-two-check{
  2562. background: url("../assets/ZDimages/bigData3_2/icon_jjck.png") center center no-repeat rgba(50,205,50,1);
  2563. background-size: 80px 80px;
  2564. }
  2565. .room-type-one{
  2566. //选中
  2567. background: rgba(30,118,142,0.4);
  2568. }
  2569. .room-type-two{
  2570. //报警
  2571. background: rgba(232,0,0,0.4);
  2572. box-shadow:0 0 10px 1px #E80000 inset;
  2573. }
  2574. .room-type-three{
  2575. //选中报警
  2576. background: rgba(30,118,142,0.4);
  2577. box-shadow:0 0 10px 1px #E80000 inset;
  2578. }
  2579. .room-type-noe{
  2580. /*border:1px solid #666;*/
  2581. /*background: rgba(102,102,102,0.6);*/
  2582. /*color:#666!important;*/
  2583. p{
  2584. /*color:#666!important;*/
  2585. }
  2586. }
  2587. .plan-map-for-box{
  2588. font-weight:500;
  2589. position:absolute;
  2590. z-index:100;
  2591. background: url("../assets/ZDimages/bigData3_2/img_zhpt_bg.png");
  2592. .plan-top-button-box{
  2593. display: flex;
  2594. p:nth-child(1){
  2595. flex:1;
  2596. }
  2597. p:nth-child(2){
  2598. font-size:14px;
  2599. color:#fff;
  2600. cursor: pointer;
  2601. margin:9px 12px 0 0 ;
  2602. }
  2603. }
  2604. .plan-time-box{
  2605. display: flex;
  2606. img{
  2607. width:24px;
  2608. height:24px;
  2609. margin-left:19px;
  2610. margin-right:8px;
  2611. }
  2612. p{
  2613. line-height:24px;
  2614. color:#fff;
  2615. font-size:14px;
  2616. }
  2617. }
  2618. .plan-text-box{
  2619. display: flex;
  2620. color:#fff;
  2621. margin-top:10px;
  2622. overflow: hidden;
  2623. .plan-title-p{
  2624. width:60px;
  2625. height:20px;
  2626. line-height:20px;
  2627. font-size:14px;
  2628. text-align: center;
  2629. margin:0 10px 0 18px;
  2630. border-radius:15px;
  2631. }
  2632. .plan-text-p{
  2633. width:170px;
  2634. height:20px;
  2635. line-height:20px;
  2636. font-size:14px;
  2637. overflow:hidden;
  2638. text-overflow:ellipsis;
  2639. white-space:nowrap;
  2640. }
  2641. .color-type-1{
  2642. background: #0183FA;
  2643. }
  2644. .color-type-2{
  2645. background: #FF9900;
  2646. }
  2647. .color-type-3{
  2648. background: #FF4800;
  2649. }
  2650. .color-type-4{
  2651. background: #FF0000;
  2652. }
  2653. }
  2654. .plan-text-box-two{
  2655. display: flex;
  2656. color:#fff;
  2657. margin-top:22px;
  2658. overflow: hidden;
  2659. .plan-title-p{
  2660. width:60px;
  2661. height:20px;
  2662. line-height:20px;
  2663. font-size:14px;
  2664. text-align: center;
  2665. margin:0 10px 0 18px;
  2666. border-radius:15px;
  2667. }
  2668. .plan-text-p{
  2669. width:170px;
  2670. height:20px;
  2671. line-height:20px;
  2672. font-size:14px;
  2673. overflow:hidden;
  2674. text-overflow:ellipsis;
  2675. white-space:nowrap;
  2676. }
  2677. .color-type-1{
  2678. background: #0183FA;
  2679. }
  2680. .color-type-2{
  2681. background: #FF9900;
  2682. }
  2683. .color-type-3{
  2684. background: #FF4800;
  2685. }
  2686. .color-type-4{
  2687. background: #FF0000;
  2688. }
  2689. }
  2690. .plan-button-p{
  2691. margin:5px auto 0;
  2692. width:80px;
  2693. line-height:22px;
  2694. background: #00a0e9;
  2695. color:#fff;
  2696. text-align: center;
  2697. border-radius:10px;
  2698. cursor: pointer;
  2699. }
  2700. }
  2701. .check-plan-map-for-box{
  2702. z-index:1000!important;
  2703. }
  2704. }
  2705. }
  2706. .null-mapList{
  2707. text-align: center;
  2708. font-size:16px;
  2709. color:#fff;
  2710. line-height:300px;
  2711. }
  2712. }
  2713. .left-big-box-three{
  2714. height:284px;
  2715. margin-top:47px;
  2716. .big-title-box{
  2717. margin-left:21px;
  2718. }
  2719. .horn-max-big-box-one{
  2720. display: flex;
  2721. margin-top:20px;
  2722. .horn-max-big-box-one-left{
  2723. flex:1;
  2724. //广播
  2725. .radio-button-box{
  2726. margin:10px 40px 10px 12px;
  2727. height:60px;
  2728. p{
  2729. width:128px;
  2730. line-height:28px;
  2731. font-size:14px;
  2732. text-align: center;
  2733. color:#fff;
  2734. border: 1px solid #1E768E;
  2735. border-radius: 5px;
  2736. display: inline-block;
  2737. margin:0 0 10px 10px;
  2738. cursor: pointer;
  2739. }
  2740. p:hover{
  2741. color:#24d1f9;
  2742. }
  2743. .check-p{
  2744. color:#24d1f9;
  2745. }
  2746. }
  2747. .radio-text-box{
  2748. height:90px;
  2749. margin:0 40px 0 22px;
  2750. div{
  2751. margin-bottom:10px;
  2752. p:nth-child(1){
  2753. color:#24D1F9;
  2754. font-size: 16px;
  2755. line-height:18px;
  2756. margin-bottom:10px;
  2757. span{
  2758. margin-right:20px;
  2759. }
  2760. }
  2761. p:nth-child(2){
  2762. font-size:14px;
  2763. line-height:16px;
  2764. color:#fff;
  2765. }
  2766. }
  2767. }
  2768. .radio-input-box{
  2769. margin:10px 40px 10px 22px;
  2770. .radio-input-button{
  2771. cursor: pointer;
  2772. }
  2773. }
  2774. }
  2775. .horn-max-big-box-one-right{
  2776. width:473px;
  2777. //火焰
  2778. .fire-max-box{
  2779. display: flex;
  2780. margin-left:16px;
  2781. .fire-min-box{
  2782. width:147px;
  2783. height:165px;
  2784. position: relative;
  2785. .fire-title-color-one{
  2786. color:#24d1f9;
  2787. }
  2788. .fire-title-color-two{
  2789. color:#FF2333;
  2790. }
  2791. .fire-title-p{
  2792. font-size:16px;
  2793. margin-top:28px;
  2794. text-align: center;
  2795. }
  2796. .center-img{
  2797. width:40px;
  2798. height:40px;
  2799. position: absolute;
  2800. top:60px;
  2801. left:54px;
  2802. }
  2803. .background-img{
  2804. position: absolute;
  2805. top:28px;
  2806. left:0;
  2807. width:147px;
  2808. height:113px;
  2809. }
  2810. .fire-name-p{
  2811. text-align: center;
  2812. margin-top:94px;
  2813. line-height:24px;
  2814. font-size:16px;
  2815. color:#fff;
  2816. }
  2817. .img-p{
  2818. z-index:10;
  2819. }
  2820. .img-p-1-one{
  2821. width:109px;
  2822. height:59px;
  2823. position: absolute;
  2824. top: 35px;
  2825. left:19px;
  2826. background: url("../assets/ZDimages/bigData3_2/img_yh_db_zdmh.png");
  2827. -webkit-animation-name: ringMove;
  2828. -webkit-animation-duration: 2s;
  2829. -webkit-animation-iteration-count: infinite;
  2830. -webkit-animation-delay: 0s;
  2831. }
  2832. .img-p-2-one{
  2833. width:117px;
  2834. height:59px;
  2835. position: absolute;
  2836. top: 25px;
  2837. left:15px;
  2838. background: url("../assets/ZDimages/bigData3_2/img_yh_zj_zdmh.png");
  2839. -webkit-animation-name: ringMove;
  2840. -webkit-animation-duration: 2s;
  2841. -webkit-animation-iteration-count: infinite;
  2842. -webkit-animation-delay: 0.2s;
  2843. }
  2844. .img-p-3-one{
  2845. width:133px;
  2846. height:65px;
  2847. position: absolute;
  2848. top: 8px;
  2849. left:7px;
  2850. background: url("../assets/ZDimages/bigData3_2/img_yh_dd_zdmh.png");
  2851. -webkit-animation-name: ringMove;
  2852. -webkit-animation-duration: 2s;
  2853. -webkit-animation-iteration-count: infinite;
  2854. -webkit-animation-delay: 0.4s;
  2855. }
  2856. .img-p-1-two{
  2857. width:109px;
  2858. height:59px;
  2859. position: absolute;
  2860. top: 35px;
  2861. left:19px;
  2862. background: url("../assets/ZDimages/bigData3_2/img_yh_db_zdmh_yc.png");
  2863. -webkit-animation-name: ringMove;
  2864. -webkit-animation-duration: 2s;
  2865. -webkit-animation-iteration-count: infinite;
  2866. -webkit-animation-delay: 0s;
  2867. }
  2868. .img-p-2-two{
  2869. width:117px;
  2870. height:59px;
  2871. position: absolute;
  2872. top: 25px;
  2873. left:15px;
  2874. background: url("../assets/ZDimages/bigData3_2/img_yh_zj_zdmh_yc.png");
  2875. -webkit-animation-name: ringMove;
  2876. -webkit-animation-duration: 2s;
  2877. -webkit-animation-iteration-count: infinite;
  2878. -webkit-animation-delay: 0.2s;
  2879. }
  2880. .img-p-3-two{
  2881. width:133px;
  2882. height:65px;
  2883. position: absolute;
  2884. top: 8px;
  2885. left:7px;
  2886. background: url("../assets/ZDimages/bigData3_2/img_yh_dd_zdmh_yc.png");
  2887. -webkit-animation-name: ringMove;
  2888. -webkit-animation-duration: 2s;
  2889. -webkit-animation-iteration-count: infinite;
  2890. -webkit-animation-delay: 0.4s;
  2891. }
  2892. }
  2893. }
  2894. .fire-button{
  2895. width:200px;
  2896. line-height:40px;
  2897. font-size:16px;
  2898. border:1px solid #FF2333;
  2899. color:#FF2333;
  2900. text-align: center;
  2901. border-radius:6px;
  2902. margin:15px auto;
  2903. cursor: pointer;
  2904. }
  2905. .fire-button:hover{
  2906. border:1px solid #FF2333;
  2907. background:#FF2333;
  2908. color:#fff;
  2909. }
  2910. .fire-text{
  2911. color:#FF2333;
  2912. font-size:14px;
  2913. text-align: center;
  2914. margin-top:25px;
  2915. }
  2916. .null-fire-box{
  2917. img{
  2918. width:60px;
  2919. height:47px;
  2920. margin:88px 0 20px 204px;
  2921. }
  2922. p{
  2923. color:#fff;
  2924. font-size:16px;
  2925. text-align: center;
  2926. }
  2927. }
  2928. }
  2929. }
  2930. .horn-max-big-box-two{
  2931. margin-top:20px;
  2932. .horn-big-box-two{
  2933. display: flex;
  2934. margin-top:20px;
  2935. .horn-max-big-box-two-left{
  2936. height: 195px;
  2937. width:470px;
  2938. margin-right:20px;
  2939. p{
  2940. width:128px;
  2941. line-height:28px;
  2942. font-size:14px;
  2943. text-align: center;
  2944. color:#fff;
  2945. border: 1px solid #1E768E;
  2946. border-radius: 5px;
  2947. display: inline-block;
  2948. margin:0 0 20px 20px;
  2949. cursor: pointer;
  2950. }
  2951. p:hover{
  2952. color:#24d1f9;
  2953. }
  2954. .check-p{
  2955. color:#24d1f9;
  2956. }
  2957. }
  2958. .horn-max-big-box-two-right{
  2959. flex:1;
  2960. .radio-text-box{
  2961. height:150px;
  2962. margin:0 0 0 22px;
  2963. div{
  2964. margin-bottom:10px;
  2965. p:nth-child(1){
  2966. color:#24D1F9;
  2967. font-size: 16px;
  2968. line-height:18px;
  2969. margin-bottom:10px;
  2970. span{
  2971. margin-right:20px;
  2972. }
  2973. }
  2974. p:nth-child(2){
  2975. font-size:14px;
  2976. line-height:16px;
  2977. color:#fff;
  2978. }
  2979. }
  2980. }
  2981. .radio-input-box{
  2982. margin:10px 0 10px 22px;
  2983. .radio-input-button{
  2984. cursor: pointer;
  2985. }
  2986. }
  2987. }
  2988. }
  2989. }
  2990. }
  2991. }
  2992. .right-max-big-box{
  2993. width:462px;
  2994. .left-big-box-one{
  2995. margin-top:70px;
  2996. height:365px;
  2997. .big-title-box{
  2998. margin-left:65px;
  2999. }
  3000. .user-max-box{
  3001. margin-right:20px;
  3002. height:340px;
  3003. margin-left:65px;
  3004. margin-top:27px;
  3005. .user-box{
  3006. width:148px;
  3007. line-height:48px;
  3008. border-radius:5px;
  3009. border: 1px solid #24D1F9;
  3010. display: inline-block;
  3011. margin:0 33px 18px 0;
  3012. div{
  3013. display: flex;
  3014. img{
  3015. margin:7px 16px;
  3016. height:36px;
  3017. width:36px;
  3018. border: 1px solid #24D1F9;
  3019. border-radius:50%;
  3020. padding:2px;
  3021. overflow: hidden;
  3022. box-shadow:0 0 5px 1px #24D1F9
  3023. }
  3024. p{
  3025. color:#24D1F9;
  3026. }
  3027. }
  3028. }
  3029. }
  3030. }
  3031. .left-big-box-two{
  3032. height:550px;
  3033. margin:70px 20px 0 65px;
  3034. .video-max-big-for-box{
  3035. .video-max-big-title-box{
  3036. border-bottom: 1px dashed #24d1f9;
  3037. display: flex;
  3038. color:#24d1f9;
  3039. margin-bottom:14px;
  3040. p{
  3041. line-height:55px;
  3042. margin-left:8px;
  3043. font-size:16px;
  3044. flex:1;
  3045. }
  3046. i{
  3047. font-size:16px;
  3048. line-height:55px;
  3049. margin-right:32px;
  3050. cursor: pointer;
  3051. }
  3052. }
  3053. .video-mx-big-box{
  3054. width:368px;
  3055. height:170px;
  3056. background: red;
  3057. margin-top:14px;
  3058. }
  3059. }
  3060. }
  3061. }
  3062. .shade-max-big-box{
  3063. height:100%;
  3064. width:100%;
  3065. position: absolute;
  3066. top:0;
  3067. left:0;
  3068. background: rgba(0,0,0,0.5);
  3069. .shade-big-box{
  3070. position: absolute;
  3071. top:50%;
  3072. left:50%;
  3073. margin-left:-250px;
  3074. margin-top:-125px;
  3075. width:500px;
  3076. height:250px;
  3077. background: #011020;
  3078. border:1px solid #116e8e;
  3079. border-radius:10px;
  3080. .off-button{
  3081. position: absolute;
  3082. right:15px;
  3083. top:15px;
  3084. color:#fff;
  3085. font-size:16px;
  3086. cursor: pointer;
  3087. }
  3088. .text-box{
  3089. height:160px;
  3090. color:#fff;
  3091. overflow: hidden;
  3092. p{
  3093. padding:0 45px;
  3094. font-size:16px;
  3095. height:20px;
  3096. line-height:20px;
  3097. }
  3098. p:nth-child(1){
  3099. margin-top:55px;
  3100. }
  3101. p:nth-child(2){
  3102. margin-top:20px;
  3103. }
  3104. }
  3105. .button-box{
  3106. height:88px;
  3107. border-top:2px solid #116e8e;
  3108. display: flex;
  3109. .button-null{
  3110. flex:1;
  3111. }
  3112. .button-p{
  3113. width:80px;
  3114. height:30px;
  3115. line-height:30px;
  3116. margin-top:29px;
  3117. text-align: center;
  3118. border:1px solid #24D1F9;
  3119. color:#fff;
  3120. font-size:16px;
  3121. border-radius:4px;
  3122. cursor: pointer;
  3123. }
  3124. .button-p:hover{
  3125. border:1px solid #24D1F9;
  3126. background: #24D1F9;
  3127. color:#fff;
  3128. }
  3129. }
  3130. }
  3131. }
  3132. .evacuation-shade-max-big-box{
  3133. height:100%;
  3134. width:100%;
  3135. position: absolute;
  3136. top:0;
  3137. left:0;
  3138. background: rgba(0,0,0,0.5);
  3139. .evacuation-shade-big-box{
  3140. position: absolute;
  3141. top:50%;
  3142. left:50%;
  3143. margin-left:-550px;
  3144. margin-top:-335px;
  3145. width:1100px;
  3146. height:670px;
  3147. background: #011020;
  3148. border:1px solid #116e8e;
  3149. border-radius:10px;
  3150. .position-title-p{
  3151. position: absolute;
  3152. top:31px;
  3153. left:28px;
  3154. font-size:16px;
  3155. color:#fff;
  3156. line-height:18px;
  3157. }
  3158. .position-off-button-p{
  3159. position: absolute;
  3160. top:32px;
  3161. right:28px;
  3162. font-size:16px;
  3163. width:14px;
  3164. height:14px;
  3165. color:#24D1F9;
  3166. cursor: pointer;
  3167. }
  3168. .evacuation-shade-map-max-big-box{
  3169. width:1000px;
  3170. height:500px;
  3171. margin:77px 50px 20px;
  3172. position: relative;
  3173. /*border:1px solid #1E768E;*/
  3174. .evacuation-shade-map-big-box{
  3175. position: absolute;
  3176. top: 50%;
  3177. left: 50%;
  3178. -webkit-user-select: none;
  3179. .evacuation-shade-map-box{
  3180. position: relative;
  3181. border:1px dashed #24D1F9;
  3182. overflow: hidden;
  3183. .evacuation-shade-map-for-box{
  3184. position: absolute;
  3185. display: flex;
  3186. flex-direction: column;
  3187. overflow: hidden;
  3188. .evacuation-shade-map-min-box{
  3189. height:100%;
  3190. position: relative;
  3191. .map-for-name-p{
  3192. padding:0 10px;
  3193. height:20px;
  3194. line-height:20px;
  3195. font-size:14px;
  3196. text-align: center;
  3197. color:#24D1F9;
  3198. overflow: hidden;
  3199. text-overflow:ellipsis;
  3200. white-space:nowrap;
  3201. }
  3202. .map-for-num-p{
  3203. padding:0 10px;
  3204. height:20px;
  3205. line-height:20px;
  3206. font-size:14px;
  3207. text-align: center;
  3208. color:#24D1F9;
  3209. overflow: hidden;
  3210. text-overflow:ellipsis;
  3211. white-space:nowrap;
  3212. }
  3213. .user-num-box{
  3214. position: absolute;
  3215. left:0;
  3216. display: flex;
  3217. img{
  3218. width:20px;
  3219. height:15px;
  3220. margin:10px;
  3221. }
  3222. p{
  3223. line-height:35px;
  3224. font-size:14px;
  3225. color:#24D1F9;
  3226. }
  3227. }
  3228. .user-num-one{
  3229. top:0;
  3230. }
  3231. .user-num-two{
  3232. bottom:0;
  3233. }
  3234. .position-box{
  3235. position: absolute;
  3236. font-size:14px;
  3237. overflow: hidden;
  3238. }
  3239. .center-move-door-p-t {
  3240. background: url("../assets/ZDimages/bigData3_2/icon_pmbjt_m.png") !important;
  3241. background-size: 100% !important;
  3242. transform: rotate(180deg);
  3243. }
  3244. .center-move-door-p-b {
  3245. background: url("../assets/ZDimages/bigData3_2/icon_pmbjt_m.png") !important;
  3246. background-size: 100% !important;
  3247. }
  3248. .center-move-door-p-l {
  3249. background: url("../assets/ZDimages/bigData3_2/icon_pmbjt_m.png") !important;
  3250. background-size: 100% !important;
  3251. transform: rotate(90deg);
  3252. }
  3253. .center-move-door-p-r {
  3254. background: url("../assets/ZDimages/bigData3_2/icon_pmbjt_m.png") !important;
  3255. background-size: 100% !important;
  3256. transform: rotateZ(270deg);
  3257. }
  3258. .lightTopOn {
  3259. background: url("../assets/ZDimages/evacuation3_2/icon_sjt.png");
  3260. background-size: 100%;
  3261. }
  3262. .lightTopOff {
  3263. background: url("../assets/ZDimages/evacuation3_2/icon_shang_hs.png");
  3264. background-size: 100%;
  3265. }
  3266. .lightBottomOn {
  3267. background: url("../assets/ZDimages/evacuation3_2/icon_xjt.png");
  3268. background-size: 100%;
  3269. }
  3270. .lightBottomOff {
  3271. background: url("../assets/ZDimages/evacuation3_2/icon_xia_hs.png");
  3272. background-size: 100%;
  3273. }
  3274. .lightLeftOn {
  3275. background: url("../assets/ZDimages/evacuation3_2/icon_zuo.png");
  3276. background-size: 100%;
  3277. }
  3278. .lightLeftOff {
  3279. background: url("../assets/ZDimages/evacuation3_2/icon_zou_hs.png");
  3280. background-size: 100%;
  3281. }
  3282. .lightRightOn {
  3283. background: url("../assets/ZDimages/evacuation3_2/icon_yuo.png");
  3284. background-size: 100%;
  3285. }
  3286. .lightRightOff {
  3287. background: url("../assets/ZDimages/evacuation3_2/icon_you_hs.png");
  3288. background-size: 100%;
  3289. }
  3290. }
  3291. }
  3292. .for-map-box-one{
  3293. background: rgba(7,36,54,1);
  3294. border:1px solid #24D1F9;
  3295. }
  3296. .for-map-box{
  3297. /*background: rgba(1,16,32,1);*/
  3298. background: rgba(6,30,48,1);
  3299. }
  3300. .for-map-box-two{
  3301. background: url("../assets/ZDimages/bigData3_2/icon_jjck.png") center center no-repeat rgba(5,45,43,1);
  3302. background-size: 80px 80px;
  3303. }
  3304. .for-map-box-two-check{
  3305. background: url("../assets/ZDimages/bigData3_2/icon_jjck.png") center center no-repeat rgba(50,205,50,1);
  3306. background-size: 80px 80px;
  3307. }
  3308. .room-type-one{
  3309. //选中
  3310. background: rgba(30,118,142,0.4);
  3311. }
  3312. .room-type-two{
  3313. //报警
  3314. background: rgba(232,0,0,0.4);
  3315. box-shadow:0 0 10px 1px #E80000 inset;
  3316. }
  3317. .room-type-three{
  3318. //选中报警
  3319. background: rgba(30,118,142,0.4);
  3320. box-shadow:0 0 10px 1px #E80000 inset;
  3321. }
  3322. .room-type-noe{
  3323. /*border:1px solid #666;*/
  3324. /*background: rgba(102,102,102,0.6);*/
  3325. }
  3326. }
  3327. }
  3328. }
  3329. .evacuation-button-p{
  3330. width:500px;
  3331. line-height:50px;
  3332. border:1px solid #1E768E;
  3333. box-shadow:0 0 10px 1px #1E768E inset;
  3334. color:#24D1F9;
  3335. border-radius:6px;
  3336. text-align: center;
  3337. margin:0 300px;
  3338. cursor: pointer;
  3339. }
  3340. }
  3341. }
  3342. .fire-shade-max-big-box{
  3343. height:100%;
  3344. width:100%;
  3345. position: absolute;
  3346. top:0;
  3347. left:0;
  3348. background: rgba(0,0,0,0.8);
  3349. .fire-shade-big-box{
  3350. position: absolute;
  3351. top:50%;
  3352. left:50%;
  3353. margin-left:-175px;
  3354. margin-top:-105px;
  3355. width:350px;
  3356. height:210px;
  3357. border-radius:10px;
  3358. img{
  3359. width:106px;
  3360. height:81px;
  3361. margin:0 122px 25px;
  3362. }
  3363. p:nth-child(2){
  3364. font-size:22px;
  3365. line-height:30px;
  3366. text-align: center;
  3367. color:#fff;
  3368. margin-bottom:26px;
  3369. span{
  3370. font-size:28px;
  3371. color:#D60000;
  3372. font-weight:400;
  3373. }
  3374. }
  3375. p:nth-child(3){
  3376. font-size:14px;
  3377. box-shadow:0 0 10px 1px rgba(214,0,0,0.8) inset;
  3378. border: 1px solid #D60000;
  3379. color:#DE1F1F;
  3380. line-height:50px;
  3381. width:350px;
  3382. text-align: center;
  3383. cursor: pointer;
  3384. border-radius:10px;
  3385. }
  3386. }
  3387. }
  3388. /******************** css动画 ***********************/
  3389. //旋转
  3390. @keyframes rotating{
  3391. 0% {
  3392. transform: rotate(0deg);
  3393. /*transform: rotatex(0deg) rotateY(0deg) rotateZ(0deg);*/
  3394. }
  3395. 100% {
  3396. transform: rotate(360deg);
  3397. /*transform: rotatex(360deg) rotateY(360deg) rotateZ(360deg);*/
  3398. }
  3399. /*100%{transform:rotate(360deg);}*/
  3400. }
  3401. //心跳
  3402. @keyframes scaleDraw { /*定义关键帧、scaleDrew是需要绑定到选择器的关键帧名称*/
  3403. 0%{
  3404. transform: scale(1); /*开始为原始大小*/
  3405. }
  3406. 25%{
  3407. transform: scale(0.9); /*放大1.1倍*/
  3408. }
  3409. 50%{
  3410. transform: scale(1);
  3411. }
  3412. 75%{
  3413. transform: scale(0.9);
  3414. }
  3415. }
  3416. //上浮
  3417. @-webkit-keyframes ringMove {
  3418. 0% {
  3419. -webkit-transform: translateY(0px);
  3420. /*transform:scale(0.5px;*/
  3421. /*opacity:1;*/
  3422. }
  3423. 50% {
  3424. -webkit-transform: translateY(20px);
  3425. /*transform:scale(0.5px;*/
  3426. /*opacity:0;*/
  3427. }
  3428. 100% {
  3429. -webkit-transform: translateY(0);
  3430. /*transform:scale(0.6px;/*/
  3431. /*opacity:0;*/
  3432. }
  3433. }
  3434. }
  3435. </style>
  3436. <style lang="scss">
  3437. .newEvacuationBigData{
  3438. .building-select-box{
  3439. margin-top:45px;
  3440. width:200px;
  3441. margin-right:10px;
  3442. .el-input__inner{
  3443. background:rgba(0,0,0,0);
  3444. border:1px solid #24D1F9;
  3445. box-shadow:0 0 5px 1px #24D1F9 inset;
  3446. color:#fff;
  3447. }
  3448. .el-input__inner:hover{
  3449. border:1px solid #24D1F9;
  3450. box-shadow:0 0 5px 1px #24D1F9 inset;
  3451. }
  3452. }
  3453. .floor-select-box{
  3454. margin-top:45px;
  3455. width:100px;
  3456. margin-right:20px;
  3457. .el-input__inner{
  3458. background:rgba(0,0,0,0);
  3459. border:1px solid #24D1F9;
  3460. box-shadow:0 0 5px 1px #24D1F9 inset;
  3461. color:#fff;
  3462. }
  3463. .el-input__inner:hover{
  3464. border:1px solid #24D1F9;
  3465. box-shadow:0 0 5px 1px #24D1F9 inset;
  3466. }
  3467. }
  3468. .el-select-dropdown{
  3469. background:#01294d;
  3470. border:1px solid #24D1F9;
  3471. .el-select-dropdown__item{
  3472. background: rgba(0,0,0,0);
  3473. color:#fff;
  3474. }
  3475. .el-select-dropdown__item:hover{
  3476. background: #24D1F9;
  3477. }
  3478. }
  3479. .popper__arrow{
  3480. top:-7px;
  3481. border-bottom-color:#24D1F9!important;
  3482. }
  3483. ::after{
  3484. border-bottom-color:#24D1F9!important;
  3485. }
  3486. ::placeholder{
  3487. color: #fff;
  3488. }
  3489. .scrollbar-box::-webkit-scrollbar{
  3490. width: 4px; /*高宽分别对应横竖滚动条的尺寸*/
  3491. height: 4px;
  3492. }
  3493. .scrollbar-box::-webkit-scrollbar-thumb{
  3494. border-radius: 5px;
  3495. -webkit-box-shadow: inset 0 0 5px #116e8e;
  3496. background: #116e8e;
  3497. }
  3498. .scrollbar-box::-webkit-scrollbar-track{
  3499. -webkit-box-shadow: inset 0 0 5px rgba(255,255,255,0);
  3500. border-radius: 0;
  3501. background: rgba(255,255,255,0);
  3502. }
  3503. //switch开关
  3504. .control-for-box{
  3505. .switch .el-switch__label {
  3506. position: absolute;
  3507. display: none;
  3508. }
  3509. .switch .el-switch__label--right {
  3510. z-index: 1;
  3511. }
  3512. .switch .el-switch__label--right span{
  3513. margin-right: 9px;
  3514. }
  3515. .switch .el-switch__label--left {
  3516. z-index: 1;
  3517. }
  3518. .switch .el-switch__label--left span{
  3519. margin-left: 9px;
  3520. }
  3521. .switch .el-switch__label.is-active {
  3522. display: block;
  3523. }
  3524. .switch.el-switch .el-switch__core,
  3525. .el-switch .el-switch__label {
  3526. width: 72px !important;
  3527. height:32px!important;
  3528. line-height:32px!important;
  3529. -webkit-border-radius: 20px!important;
  3530. -moz-border-radius: 20px!important;
  3531. border-radius: 20px!important;
  3532. margin: 0;
  3533. position: absolute;
  3534. top: 0;
  3535. }
  3536. .switch .el-switch__label--left span{
  3537. margin-left:36px!important;
  3538. color: #24d1f9;
  3539. }
  3540. .switch .el-switch__label--right span{
  3541. margin-left:8px!important;
  3542. color:#0c516b;
  3543. }
  3544. .el-switch__core:after{
  3545. height:24px!important;
  3546. width:24px!important;
  3547. top:3px!important;
  3548. margin-left: 2px!important;
  3549. background-color: #24d1f9;
  3550. }
  3551. .el-switch__core{
  3552. border-color: #24d1f9;
  3553. background-color: rgba(0,0,0,0);
  3554. }
  3555. .el-switch.is-checked .el-switch__core{
  3556. border-color: #0c516b;
  3557. background-color: rgba(0,0,0,0);
  3558. }
  3559. .el-switch.is-checked .el-switch__core::after{
  3560. background-color: #0c516b;
  3561. margin-left: -27px!important;
  3562. }
  3563. .el-switch{
  3564. margin:12px 0 0 42px;
  3565. display: block;
  3566. width:80px!important;
  3567. height:4px!important;
  3568. }
  3569. }
  3570. //input 样式
  3571. .radio-input-box{
  3572. .el-input__inner{
  3573. background:rgba(0,0,0,0);
  3574. border:1px solid #24D1F9;
  3575. box-shadow:0 0 5px 1px #24D1F9 inset;
  3576. color:#fff;
  3577. border-bottom-left-radius: 4px;
  3578. border-top-left-radius: 4px;
  3579. border-bottom-right-radius: 0!important;
  3580. border-top-right-radius: 0!important;
  3581. }
  3582. .el-input-group__append{
  3583. background:rgba(0,0,0,0);
  3584. border:1px solid #24D1F9;
  3585. box-shadow:0 0 5px 1px #24D1F9 inset;
  3586. color:#fff;
  3587. border-bottom-left-radius: 0!important;
  3588. border-top-left-radius: 0!important;
  3589. }
  3590. }
  3591. }
  3592. </style>