index.vue 60 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268
  1. <template>
  2. <!-- 全局大容器 -->
  3. <view class="body2">
  4. <view class="box">
  5. <!-- 左侧监控容器 -->
  6. <view class="left_box">
  7. <view class="topTab">
  8. <view class="" style="display: flex">
  9. <image style="width: 100rpx; height: 100rpx" src="../../static/img/wlt.png" mode="widthFix"></image>
  10. <h3 class="bh_title">湖里区不可移动文物数字化监管平台</h3>
  11. </view>
  12. <el-button
  13. icon="el-icon-view"
  14. class="btn"
  15. @click="
  16. maintabindex = 0;
  17. refreshBtn();
  18. "
  19. :class="{ activeBtn: maintabindex == 0 }"
  20. >
  21. 预览
  22. </el-button>
  23. <el-button
  24. icon="el-icon-document"
  25. class="btn"
  26. @click="
  27. maintabindex = 2;
  28. postEventList();
  29. "
  30. :class="{ activeBtn: maintabindex == 2 }"
  31. >
  32. 事件
  33. </el-button>
  34. <el-button
  35. class="btn"
  36. icon="el-icon-setting"
  37. @click="
  38. maintabindex = 3;
  39. getPollingConfig();
  40. "
  41. :class="{ activeBtn: maintabindex == 3 }"
  42. >
  43. 轮巡配置
  44. </el-button>
  45. <el-button
  46. icon="el-icon-loading"
  47. style="width: 230rpx; font-size: 30rpx"
  48. v-if="maintabindex == 0"
  49. @click="
  50. maintabindex = 0;
  51. refreshBtn();
  52. "
  53. type="success"
  54. >
  55. 刷新
  56. </el-button>
  57. </view>
  58. <!-- 监控视频容器 -->
  59. <view id="player" v-show="maintabindex == 0"></view>
  60. <!-- 事件 -->
  61. <view v-if="maintabindex == 2">
  62. <view class="box2">
  63. <view>
  64. <el-row justify="space-between" :gutter="20">
  65. <el-col :span="6">
  66. <el-input v-model.trim="queryVal" customStyle="width:360rpx;" placeholder="输入信息查询" border="surround"></el-input>
  67. </el-col>
  68. <el-col :span="6">
  69. <el-date-picker v-model="dateVal" align="right" type="date" placeholder="选择日期" :picker-options="pickerOptions"></el-date-picker>
  70. </el-col>
  71. <el-col :span="5">
  72. <el-select v-model="stateVal" clearable placeholder="按状态查询">
  73. <el-option v-for="item in options" :key="item.id" :label="item.label" :value="item.label"></el-option>
  74. </el-select>
  75. </el-col>
  76. <el-col :span="3">
  77. <u-button @click="searchBtn" type="primary" text="搜索" customStyle="width:130rpx;"></u-button>
  78. </el-col>
  79. <el-col :span="4">
  80. <u-button v-print="'#printDiv'" type="primary" text="打印" customStyle="width:130rpx;"></u-button>
  81. </el-col>
  82. </el-row>
  83. </view>
  84. <view class="shijian_box" id="printDiv">
  85. <view class="shijian_item" v-for="(item, index) in tableData">
  86. <img :src="item.image" style="width: 300rpx; height: 250rpx" />
  87. <view class="">{{ item.name }}</view>
  88. <view class="">报警原因:{{ item.reason }}</view>
  89. <view class="">报警类型:{{ item.event_type_text }}</view>
  90. <view class="">事件等级:{{ item.event_level_text }}</view>
  91. <!-- <el-button @click="falseAlarmBtn(item)" type="text">误报</el-button> -->
  92. </view>
  93. <el-empty style="margin: auto" v-if="tableData.length <= 0" description="暂无事件"></el-empty>
  94. </view>
  95. <el-pagination
  96. style="text-align: right; margin-top: 30rpx"
  97. @size-change="handleSizeChange"
  98. @current-change="handleCurrentChange"
  99. :current-page="currentPage"
  100. background
  101. :page-sizes="[8, 12, 16]"
  102. :page-size="pageSize"
  103. layout="total, sizes, prev, pager, next, jumper"
  104. :total="total"
  105. ></el-pagination>
  106. </view>
  107. </view>
  108. <!-- 事件end -->
  109. <!-- 轮巡设置 -->
  110. <view v-if="maintabindex == 3">
  111. <view class="lunxun_box">
  112. <view>
  113. <el-row justify="space-between" :gutter="20">
  114. <el-col :span="8" style="display: flex">
  115. <view style="width: 280rpx; line-height: 80rpx">轮巡时间/分钟</view>
  116. <el-input v-model.trim="interval" customStyle="width:360rpx;" :placeholder="interval" border="surround"></el-input>
  117. </el-col>
  118. <el-col :span="8" style="display: flex">
  119. <view style="width: 160rpx; line-height: 80rpx">轮巡个数</view>
  120. <el-select v-model="number" placeholder="请选择">
  121. <el-option v-for="item in numberList" :key="item.value" :label="item.label" :value="item.label"></el-option>
  122. </el-select>
  123. </el-col>
  124. <el-col :span="3">
  125. <u-button @click="modifyBtn" type="primary" text="修改" customStyle="width:130rpx;"></u-button>
  126. </el-col>
  127. </el-row>
  128. </view>
  129. <!-- 图文列表 -->
  130. <view class="lunxun_tw" v-if="turningList.length > 0">
  131. <view class="" v-for="(item, index) in turningList">
  132. <view class="tw_item">
  133. <img style="width: 400rpx; height: 200rpx" :src="item.image" alt="" />
  134. <view>{{ item.name }}</view>
  135. <view>{{ item.position }}</view>
  136. <el-button @click="lunxunBtn(item, index)" type="text">删除轮巡</el-button>
  137. </view>
  138. </view>
  139. </view>
  140. <el-empty v-else description="暂无配置"></el-empty>
  141. </view>
  142. </view>
  143. <!-- 轮巡设置end -->
  144. </view>
  145. <!-- 左侧监控容器end -->
  146. <!-- 右侧文物列表容器 -->
  147. <view v-if="maintabindex == 0 || maintabindex == 1">
  148. <view class="right_box">
  149. <view class="right_box_top">
  150. <h3 class="right_box_title">文物列表</h3>
  151. <u-button @click="qhGetZhoujieDevice" type="primary" size="mini" customStyle="width:160rpx; height: 53rpx;">
  152. <i style="line-height: 10rpx; margin-right: 5rpx" :class="qhBtn ? 'el-icon-guide ' : 'el-icon-office-building'"></i>
  153. {{ qhBtn ? '显示文物 ' : '显示城区' }}
  154. </u-button>
  155. <view style="display: flex">
  156. <el-input
  157. v-model="culturalValue"
  158. clearable
  159. style="width: 360rpx"
  160. size="mini"
  161. placeholder="输入文物关键字进行筛选"
  162. suffix-icon="el-icon-search"
  163. ></el-input>
  164. <!-- <u-button @click="SearchCultural" icon="search" type= "primary" text="搜索" size="mini" customStyle="width:80rpx; height: 55rpx;"></u-button> -->
  165. </view>
  166. </view>
  167. <view class="right_box_item">
  168. <el-tree ref="tree" :filter-node-method="filterNode" :data="treeData" :props="defaultProps" @node-click="handleNodeClick">
  169. <span class="custom-tree-node" slot-scope="{ node, data }">
  170. <span v-if="data.zhoujie_device_type != '1'">{{ node.label }}</span>
  171. <span
  172. v-if="data.zhoujie_device_type == '1'"
  173. :style="monitors.length > 0 && monitors[selectIndex].device_code == data.device_code ? 'color:#3c9cff' : 'color:black'"
  174. >
  175. {{ node.label }}
  176. </span>
  177. <span v-if="data.area != undefined">
  178. <el-button @click.stop="timeBtn(data)" type="text" size="mini">文物开放时间</el-button>
  179. </span>
  180. <span v-if="data.zhoujie_device_type == '1'">
  181. <el-button type="text" size="mini" @click.stop="() => append(data)">{{ data.isPolling ? ' 删除轮巡' : '加入轮巡' }}</el-button>
  182. </span>
  183. </span>
  184. </el-tree>
  185. </view>
  186. </view>
  187. </view>
  188. <!-- 监控弹层 -->
  189. <view class="jk_show" v-show="showMonitor">
  190. <u-icon @click="showMonitor = false" name="close" size="40rpx" style="position: absolute; top: 5px; right: 5px"></u-icon>
  191. <view class="jk_title">
  192. <text>【{{ treeNode.name }}】</text>
  193. <text>【{{ jkName }}】</text>
  194. <el-badge :value="deviceList.power_supply">
  195. <el-button
  196. @click="
  197. showHandle = true;
  198. eventDclBtn();
  199. "
  200. size="small"
  201. >
  202. 待处理事件
  203. </el-button>
  204. </el-badge>
  205. </view>
  206. <!-- 监控视频展示容器 -->
  207. <view style="width: 50%; height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center">
  208. <view style="width: 90%; height: 90%; border-radius: 40rpx; margin-top: 200rpx; margin-bottom: 200rpx">
  209. <iframe
  210. border="0"
  211. :src="webViedoUrl"
  212. width="100%"
  213. height="100%"
  214. frameborder="no"
  215. marginwidth="0"
  216. marginheight="0"
  217. scrolling="no"
  218. allowtransparency="yes"
  219. ></iframe>
  220. </view>
  221. </view>
  222. <!-- 关联监控 -->
  223. <view class="show_box_bottom">
  224. <view class="">
  225. <h3 style="margin-bottom: 20rpx">关联监控</h3>
  226. <view @click="openVideo(item)" v-for="(item, index) in associatedDevices" class="gljk_item" :style="associationTab == item.name ? 'color:#3c9cff' : ''">
  227. {{ item.name }}
  228. </view>
  229. <el-empty style="height: 100rpx; margin-top: 80rpx" v-if="associatedDevices <= 0" description="暂无关联监控"></el-empty>
  230. </view>
  231. </view>
  232. <!-- 监控信息 -->
  233. <view class="" style="width: 50%; height: 100%">
  234. <view class="" style="width: 94%; height: 100rpx; margin: 40rpx auto">
  235. <h4>五防信息:</h4>
  236. <text>联系人:{{ deviceList.five_prevention_name }}</text>
  237. <text style="margin-left: 20rpx">电话:{{ deviceList.five_prevention_mobile }}</text>
  238. </view>
  239. <view class="box_left_top2">
  240. <view class="jianju">
  241. 文物负责人:
  242. <view class="jianju_item">{{ deviceList.director }}</view>
  243. </view>
  244. <view class="jianju">
  245. 文物地址:
  246. <view class="jianju_item">{{ deviceList.address }}</view>
  247. </view>
  248. <view class="jianju">
  249. 设备状态:
  250. <view class="jianju_item">{{ deviceList.status }}</view>
  251. </view>
  252. <view class="jianju">
  253. 在线状态:
  254. <view class="jianju_item">{{ deviceList.on_line }}</view>
  255. </view>
  256. <view class="jianju">
  257. 设备编号:
  258. <view class="jianju_item">{{ deviceList.device_code }}</view>
  259. </view>
  260. </view>
  261. <!-- 地图 -->
  262. <!-- 监控地图-->
  263. <view style="width: 850rpx; height: 480rpx; margin: 20rpx">
  264. <view id="allmap" class="map" style="width: 100%; height: 100%"></view>
  265. </view>
  266. </view>
  267. </view>
  268. <!-- 监控弹层end -->
  269. <!-- 监控待处理事件弹层 -->
  270. <view v-if="showHandle" class="jk_dcl_tc">
  271. <u-icon @click="showHandle = false" name="close" size="40rpx" style="position: absolute; top: 5px; right: 5px"></u-icon>
  272. <view class="jk_tc_box">
  273. <view class="jk_tc_box2">
  274. <view v-for="item in eventDclList" class="jk_tc_item">
  275. <img style="width: 400rpx; height: 200rpx" :src="item.image" />
  276. <view class="">文物名称:{{ item.name }}</view>
  277. <view class="">事件类型:{{ item.event_type_text }}</view>
  278. <view class="">报警原因:{{ item.reason }}</view>
  279. <view class="">事件类型:{{ item.event_level_text }}</view>
  280. <el-button type="text" @click="viewEventBtn(item)">查看事件</el-button>
  281. </view>
  282. </view>
  283. <el-empty v-if="eventDclList.length <= 0" description="暂无事件"></el-empty>
  284. </view>
  285. </view>
  286. <!-- 监控待处理事件弹层end -->
  287. <!-- 查看事件弹层 -->
  288. <view class="tanceng" v-show="showViewEvent">
  289. <view style="width: 1600rpx; height: 1280rpx">
  290. <view class="show_box">
  291. <!-- 右侧容器 -->
  292. <view class="show_box_left">
  293. <view class="" style="margin-left: 120rpx; margin-top: 50rpx">
  294. <view class="" style="width: 560rpx; height: 1000rpx; padding: 20rpx; border: 1px solid #dbdbdb">
  295. <view class="sjlx">
  296. 事件等级:
  297. <view class="jianju_item3">{{ itemList.event_level_text }}</view>
  298. </view>
  299. <view class="sjlx">
  300. 事件类型:
  301. <view class="jianju_item3">{{ itemList.event_type_text }}</view>
  302. </view>
  303. <view class="sjlx">
  304. 事件状态:
  305. <view class="jianju_item3">{{ itemList.status_text }}</view>
  306. </view>
  307. <view style="margin: 0 auto; margin-top: 130rpx; width: 600rpx; height: 420rpx">
  308. <h3 style="margin-bottom: 20rpx">事件处理报告</h3>
  309. <el-input type="textarea" :rows="3" placeholder="请输入内容" v-model.trim="valueTxt" resize="none"></el-input>
  310. <view class="" style="display: flex; margin-top: 50rpx">
  311. <u-button @click="submitReport" type="primary" text="提交" customStyle="width:130rpx;"></u-button>
  312. <u-button text="误报" customStyle="width:130rpx;"></u-button>
  313. </view>
  314. </view>
  315. </view>
  316. </view>
  317. </view>
  318. <!-- 左侧容器 -->
  319. <view class="show_box_right">
  320. <u-icon @click="showViewEvent = false" name="close" size="40rpx" style="position: absolute; top: 5px; right: 5px"></u-icon>
  321. <!-- 处置体系 -->
  322. <view class="show_box_top">
  323. <h3 style="margin-bottom: 20rpx">处置体系</h3>
  324. <view class="">
  325. <view class="jianju">
  326. 联系人:
  327. <view class="jianju_item3">{{ deviceList.five_prevention_name }}</view>
  328. </view>
  329. <view class="jianju">
  330. 联系电话:
  331. <view class="jianju_item3">{{ deviceList.five_prevention_mobile }}</view>
  332. </view>
  333. </view>
  334. </view>
  335. <!-- 事件弹层地图 -->
  336. <view class="global" style="width: 650rpx; height: 460rpx; margin-top: 40rpx">
  337. <view id="allmap2" class="map" style="width: 100%; height: 100%"></view>
  338. </view>
  339. </view>
  340. </view>
  341. </view>
  342. </view>
  343. <!-- 查看事件弹层end -->
  344. <!-- 倾角弹层 -->
  345. <u-popup :show="showDipAngle" mode="center" @close="close">
  346. <view class="qj_box" style="">
  347. <u-icon @click="showDipAngle = false" name="close" size="40rpx" style="position: absolute; top: 5px; right: 5px"></u-icon>
  348. <view style="display: flex; align-items: baseline">
  349. <h3 style="margin-bottom: 20rpx">【{{ treeNode.name }}】</h3>
  350. <el-badge :value="dipangleList.power_supply">
  351. <el-button size="mini">待处理事件</el-button>
  352. </el-badge>
  353. </view>
  354. <view class="" style="width: 1100rpx; height: 700rpx; border: 1px solid #dbdbdb">
  355. <view class="qj_jianju">
  356. <view class="jianju2">
  357. 文物负责人:
  358. <view class="jianju_item2">{{ dipangleList.director }}</view>
  359. </view>
  360. <view class="jianju2">
  361. 文物地址:
  362. <view class="jianju_item2">{{ dipangleList.address }}</view>
  363. </view>
  364. <view class="jianju2">
  365. 在线状态:
  366. <view class="jianju_item2">{{ dipangleList.on_line }}</view>
  367. </view>
  368. <view class="jianju2">
  369. 设备编号:
  370. <view class="jianju_item2">{{ dipangleList.device_code }}</view>
  371. </view>
  372. <view class="jianju2">
  373. 设备状态:
  374. <view class="jianju_item2">{{ dipangleList.status }}</view>
  375. </view>
  376. <view class="jianju2">
  377. 五防处理人员:
  378. <view class="jianju_item2">{{ dipangleList.five_prevention_name }}</view>
  379. </view>
  380. <view class="jianju2">
  381. 五防处理电话:
  382. <view class="jianju_item2">{{ dipangleList.five_prevention_mobile }}</view>
  383. </view>
  384. </view>
  385. </view>
  386. </view>
  387. </u-popup>
  388. <!-- 倾角弹层end -->
  389. <!-- 右侧文物列表容器 -->
  390. </view>
  391. <!-- 配置时间弹层 -->
  392. <view v-if="showTime" class="pzsj_tc">
  393. <u-icon @click="showTime = false" name="close" size="40rpx" style="position: absolute; top: 5px; right: 5px"></u-icon>
  394. <el-row justify="space-between" :gutter="20" style="position: sticky; bottom: 0; left: 100rpx">
  395. <el-col :span="10" style="display: flex">
  396. <view style="width: 280rpx; line-height: 80rpx">开放时间</view>
  397. <el-input v-model="startTime" customStyle="width:360rpx;" :placeholder="interval" border="surround"></el-input>
  398. </el-col>
  399. <el-col :span="10" style="display: flex">
  400. <view style="width: 280rpx; line-height: 80rpx">结束时间</view>
  401. <el-input v-model="endTime" customStyle="width:360rpx;" :placeholder="interval" border="surround"></el-input>
  402. </el-col>
  403. <el-col :span="3">
  404. <u-button @click="modifyTime" type="primary" text="修改" customStyle="width:130rpx;"></u-button>
  405. </el-col>
  406. </el-row>
  407. <view style="width: 80%">
  408. <view v-for="item in opennessTimeList" :key="item.index" class="" style="display: flex; width: 100%; margin-top: 10rpx">
  409. <view class="" style="width: 500rpx">用户昵称:{{ item.nickname }}</view>
  410. <view class="" style="width: 550rpx">手机号:{{ item.mobile }}</view>
  411. <view class="" style="width: 500rpx">开始时间:{{ item.start_time }}</view>
  412. <view class="" style="width: 500rpx">结束时间:{{ item.end_time }}</view>
  413. </view>
  414. </view>
  415. </view>
  416. <!-- 配置时间弹层end -->
  417. <!-- 事件警告弹层 -->
  418. <view class="sjjg_tc" v-if="showWarn">
  419. <u-icon
  420. @click="
  421. showWarn = false;
  422. isAutio = false;
  423. "
  424. name="close"
  425. size="40rpx"
  426. style="position: absolute; top: 5px; right: 5px"
  427. ></u-icon>
  428. <h3 class="">【{{ latestEvents.cr_name }}】</h3>
  429. <view class="sj_top_box">
  430. <view class="sj_box">
  431. <view class="" style="width: 180rpx">文物负责人:</view>
  432. <view class="sj_item">{{ latestEvents.director }}</view>
  433. </view>
  434. <view class="sj_box">
  435. <view class="" style="width: 180rpx">文物地址:</view>
  436. <view class="sj_item">{{ latestEvents.address }}</view>
  437. </view>
  438. <view class="sj_box">
  439. <view class="" style="width: 180rpx">设备状态:</view>
  440. <view class="sj_item">{{ latestEvents.device_status }}</view>
  441. </view>
  442. <view class="sj_box">
  443. <view class="" style="width: 180rpx">在线状态:</view>
  444. <view class="sj_item">{{ latestEvents.on_line }}</view>
  445. </view>
  446. <view class="sj_box">
  447. <view class="" style="width: 180rpx">事件发生时间:</view>
  448. <view class="sj_item">{{ latestEvents.created_at }}</view>
  449. </view>
  450. <view class="sj_box">
  451. <view class="" style="width: 180rpx">事件说明时间:</view>
  452. <view class="sj_item">{{ latestEvents.sillustrate_time }}</view>
  453. </view>
  454. <view class="sj_box">
  455. <view class="" style="width: 180rpx">事件报告时间:</view>
  456. <view class="sj_item">{{ latestEvents.illustrate_time }}</view>
  457. </view>
  458. <view class="sj_box">
  459. <view class="" style="width: 180rpx">五防处置人员:</view>
  460. <view class="sj_item">{{ latestEvents.five_prevention_name }}</view>
  461. </view>
  462. <view class="sj_box">
  463. <view class="" style="width: 180rpx">五防处置电话:</view>
  464. <view class="sj_item">{{ latestEvents.five_prevention_mobile }}</view>
  465. </view>
  466. </view>
  467. <el-row justify="space-between" :gutter="20" style="margin-left: 235rpx">
  468. <el-col :span="6">
  469. <el-select v-model="event_level_val" clearable placeholder="事件等级">
  470. <el-option v-for="item in event_level_list" :key="item.value" :label="item.label" :value="item.label"></el-option>
  471. </el-select>
  472. </el-col>
  473. <el-col :span="6">
  474. <el-select v-model="event_type_val" clearable placeholder="事件类型">
  475. <el-option v-for="item in event_type_list" :key="item.value" :label="item.label" :value="item.label"></el-option>
  476. </el-select>
  477. </el-col>
  478. <el-col :span="6">
  479. <el-select v-model="status_val" clearable placeholder="事件状态">
  480. <el-option v-for="item in status_list" :key="item.value" :label="item.label" :value="item.label"></el-option>
  481. </el-select>
  482. </el-col>
  483. <el-col :span="5">
  484. <!-- <el-input placeholder="请输入事件说明" v-model="descriptionVal"></el-input> -->
  485. <el-autocomplete
  486. class="inline-input"
  487. v-model="descriptionVal"
  488. :fetch-suggestions="querySearch"
  489. placeholder="请输入事件说明"
  490. @select="handleSelect"
  491. ></el-autocomplete>
  492. </el-col>
  493. </el-row>
  494. <view class="" style="margin-top: 50rpx; margin-left: 860rpx">
  495. <h3>事件处理报告</h3>
  496. <view class="" style="width: 700rpx">
  497. <el-input type="textarea" resize="none" :rows="5" placeholder="请输入报告内容" v-model.trim="valueTxt2"></el-input>
  498. </view>
  499. <view class="" style="margin-top: 50rpx; margin-left: 160rpx">
  500. <el-button @click="submitReportBtn" size="medium" type="primary">提交</el-button>
  501. <el-button @click="wubaoBtn" size="medium" type="success">误报</el-button>
  502. </view>
  503. </view>
  504. </view>
  505. <!-- 事件警告弹层end -->
  506. <iframe v-if="isAutio" src="../../static/img/tip.mp3" frameborder="0" wmode="transparent | window" style="display: none"></iframe>
  507. </view>
  508. </template>
  509. <script>
  510. import { data } from '../../uni_modules/uview-ui/libs/mixin/mixin';
  511. import { mymap } from '@/common/AMap.js';
  512. // let id = 1000;
  513. var md5 = require('@/GraceUI5/js/md5.js');
  514. function launchFullscreen(element) {
  515. if (element.requestFullscreen) {
  516. element.requestFullscreen();
  517. } else if (element.mozRequestFullScreen) {
  518. element.mozRequestFullScreen();
  519. } else if (element.msRequestFullscreen) {
  520. element.msRequestFullscreen();
  521. } else if (element.webkitRequestFullscreen) {
  522. element.webkitRequestFullScreen();
  523. }
  524. }
  525. function exitFullscreen() {
  526. if (document.exitFullscreen) {
  527. document.exitFullscreen();
  528. } else if (document.msExitFullscreen) {
  529. document.msExitFullscreen();
  530. } else if (document.mozCancelFullScreen) {
  531. document.mozCancelFullScreen();
  532. } else if (document.webkitExitFullscreen) {
  533. document.webkitExitFullscreen();
  534. }
  535. }
  536. const IS_MOVE_DEVICE = document.body.clientWidth < 992; // 是否移动设备
  537. const MSE_IS_SUPPORT = !!window.MediaSource; // 是否支持mse
  538. let that;
  539. export default {
  540. data() {
  541. return {
  542. isAutio: false /* 音频 */,
  543. timeId: '',
  544. eventId: '',
  545. ak: '83lYk9WITWwCmTrzmeX2qSxFMSs7znL4',
  546. maintabindex: 0,
  547. polloffset: 0,
  548. activeTitle: 0,
  549. activeTitle2: 1,
  550. activeVideo: 0,
  551. cr_id: 0 /* 文物id */,
  552. // culturalRelicName: '' /* 搜索到的文物名 */,
  553. showViewEvent: false /* 事件列表弹层*/,
  554. showMonitor: false /* 监控弹层*/,
  555. showDipAngle: false /* 倾角弹层 */,
  556. showHandle: false /* 待处理事件弹层 */,
  557. showViewEvent: false /* 查看事件弹层 */,
  558. showTime: false /* 文物配置时间弹层 */,
  559. showWarn: false /* 事件警告弹层 */,
  560. webViedoUrl: '' /* 每项监控链接 */,
  561. culturalValue: '' /* 文物名称 */,
  562. valueTxt: '' /* 文本域内容 */,
  563. valueTxt2: '' /* 文本域内容 */,
  564. startTime: '' /* 开始时间 */,
  565. endTime: '' /* 结束时间 */,
  566. opennessTimeList: [] /* 文物历史开放时间 */,
  567. occurTime: '' /* 事件发生时间 */,
  568. timer: null,
  569. treeData: [],
  570. treeNode: [] /* 取监控父节点信息 */,
  571. deviceCcode: '' /* 设备编号 */,
  572. dipangleList: [] /* 倾角 */,
  573. treeJk: [],
  574. jkName: '' /* 监控名字 */,
  575. deviceList: [] /* 设备详情 */,
  576. associatedDevices: [] /* 关联设备 */,
  577. associationTab: '' /* 关联监控Tab */,
  578. tableData: [] /* 获取事件列表* */,
  579. eventDclList: [] /* 文物待处理事件 */,
  580. itemList: [] /* 查看事件数据 */,
  581. qhBtn: false,
  582. turning: true,
  583. treeClickCnt: 0,
  584. treeClickTimeout: null,
  585. treeClickId: '',
  586. defaultProps: {
  587. children: 'children',
  588. label: 'name'
  589. },
  590. selectIndex: 0,
  591. monitors: [],
  592. turningList: [] /* 轮巡配置图文 */,
  593. interval: '' /* 轮巡时间 */,
  594. number: 4 /* 轮巡个数 */,
  595. numberList: [
  596. {
  597. value: 'id1',
  598. label: '4'
  599. },
  600. {
  601. value: 'id2',
  602. label: '9'
  603. },
  604. {
  605. value: 'id3',
  606. label: '16'
  607. }
  608. ] /*轮巡个数 */,
  609. isOpenPolling: true /* 轮巡按钮状态 */,
  610. total: 30, //总条数
  611. currentPage: 1, //当前页码
  612. pageSize: 12, //每页条数
  613. queryVal: '',
  614. /* 日期 */
  615. pickerOptions: {
  616. disabledDate(time) {
  617. return time.getTime() > Date.now();
  618. },
  619. shortcuts: [
  620. {
  621. text: '今天',
  622. onClick(picker) {
  623. picker.$emit('pick', new Date());
  624. }
  625. },
  626. {
  627. text: '昨天',
  628. onClick(picker) {
  629. const date = new Date();
  630. date.setTime(date.getTime() - 3600 * 1000 * 24);
  631. picker.$emit('pick', date);
  632. }
  633. },
  634. {
  635. text: '一周前',
  636. onClick(picker) {
  637. const date = new Date();
  638. date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
  639. picker.$emit('pick', date);
  640. }
  641. },
  642. {
  643. text: '一个月前',
  644. onClick(picker) {
  645. const date = new Date();
  646. date.setTime(date.getTime() - 3600 * 1000 * 24 * 31);
  647. picker.$emit('pick', date);
  648. }
  649. }
  650. ]
  651. },
  652. dateVal: '' /* 选中的日期 */,
  653. /* 下拉框状态 */
  654. options: [
  655. {
  656. id: '1',
  657. label: '误报'
  658. },
  659. {
  660. id: '2',
  661. label: '待处理'
  662. },
  663. {
  664. id: '3',
  665. label: '处理中'
  666. },
  667. {
  668. id: '4',
  669. label: '已处理'
  670. },
  671. {
  672. id: '5',
  673. label: '超时未处理'
  674. },
  675. {
  676. id: '6',
  677. label: '超时完成处理'
  678. }
  679. ],
  680. stateVal: '' /* 选择的状态 */,
  681. event_level_list: [
  682. {
  683. id: '1',
  684. label: '蓝色事件'
  685. },
  686. {
  687. id: '2',
  688. label: '黄色事件'
  689. },
  690. {
  691. id: '3',
  692. label: '橙色事件'
  693. },
  694. {
  695. id: '4',
  696. label: '红色事件'
  697. }
  698. ] /* 事件等级 */,
  699. event_level_val: '' /* 事件等级选中值 */,
  700. event_type_list: [
  701. {
  702. id: '1',
  703. label: '火灾'
  704. },
  705. {
  706. id: '2',
  707. label: '地震'
  708. },
  709. {
  710. id: '3',
  711. label: '越界报警'
  712. },
  713. {
  714. id: '4',
  715. label: '白蚂蚁'
  716. },
  717. {
  718. id: '5',
  719. label: '电量'
  720. },
  721. {
  722. id: '6',
  723. label: '掉线'
  724. }
  725. ] /*事件类型 */,
  726. event_type_val: '' /* 事件类型选中值 */,
  727. status_list: [
  728. {
  729. id: '1',
  730. label: '误报'
  731. },
  732. {
  733. id: '2',
  734. label: '待处理'
  735. },
  736. {
  737. id: '3',
  738. label: '处理中'
  739. },
  740. {
  741. id: '4',
  742. label: '已处理'
  743. },
  744. {
  745. id: '5',
  746. label: '超时未处理'
  747. },
  748. {
  749. id: '6',
  750. label: '超时完成处理'
  751. }
  752. ] /* 事件状态 */,
  753. status_val: '' /* 事件状态选中值 */,
  754. restaurants: [{ value: '意外事件' }, { value: '意料中事件' }] /* 事件说明推荐语 */,
  755. descriptionVal: '' /* 事件说明 */,
  756. latestEvents: null /* 最新事件 */,
  757. mindex: 0,
  758. mindex2: 0,
  759. eventlist: [],
  760. eventDetails: [],
  761. showedit: false,
  762. // zh_CN: locales.zh_CN,
  763. isMoveDevice: IS_MOVE_DEVICE,
  764. player: null,
  765. splitNum: 1,
  766. mseSupport: MSE_IS_SUPPORT,
  767. tabActive: MSE_IS_SUPPORT ? 'mse' : 'decoder',
  768. labelCol: { span: 7 },
  769. isfull: false,
  770. wrapperCol: { span: 10 },
  771. urls: {
  772. realplay: 'ws://10.19.147.22:559/EUrl/q2jQie4',
  773. talk: 'wss://10.41.163.126:6014/proxy/10.41.163.126:559/EUrl/6gFx47S',
  774. playback: 'wss://10.41.163.126:6014/proxy/10.41.163.126:559/EUrl/6gFx47S'
  775. },
  776. playback: {
  777. startTime: '2021-07-26T00:00:00',
  778. endTime: '2021-07-26T23:59:59',
  779. valueFormat: 'YYYY-MM-DDTHH:mm',
  780. seekStart: '2021-07-26T12:00:00',
  781. rate: ''
  782. },
  783. muted: true,
  784. volume: 50,
  785. volumeOnSvg: {
  786. template:
  787. '<svg t="1624453273744" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1421" width="200" height="200"><path d="M597.994667 138.005333q130.005333 28.010667 213.994667 132.992t84.010667 241.002667-84.010667 241.002667-213.994667 132.992l0-88q93.994667-28.010667 153.002667-106.005333t59.008-180.010667-59.008-180.010667-153.002667-106.005333l0-88zM704 512q0 120-106.005333 172.010667l0-344q106.005333 52.010667 106.005333 172.010667zM128 384l170.005333 0 213.994667-213.994667 0 684.010667-213.994667-213.994667-170.005333 0 0-256z" p-id="1422"></path></svg>'
  788. },
  789. volumeOffSvg: {
  790. template:
  791. '<svg t="1624453193279" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9147" width="200" height="200"><path d="M512 170.005333l0 180.010667-90.005333-90.005333zM181.994667 128l714.005333 714.005333-53.994667 53.994667-88-88q-74.005333 58.005333-156.010667 77.994667l0-88q50.005333-13.994667 96-50.005333l-181.994667-181.994667 0 288-213.994667-213.994667-170.005333 0 0-256 202.005333 0-202.005333-202.005333zM810.005333 512q0-101.994667-59.008-180.010667t-153.002667-106.005333l0-88q130.005333 28.010667 213.994667 132.992t84.010667 241.002667q0 96-44.010667 178.005333l-64-66.005333q21.994667-53.994667 21.994667-112zM704 512q0 18.005333-2.005333 26.005333l-104-104 0-93.994667q106.005333 52.010667 106.005333 172.010667z" p-id="9148"></path></svg>'
  792. }
  793. };
  794. },
  795. created() {},
  796. mounted() {
  797. that = this;
  798. this.getZhoujieDevice();
  799. window.that = this;
  800. this.$el.style.setProperty('display', 'block');
  801. this.init();
  802. this.createPlayer();
  803. this.getPollingConfig();
  804. /* 定时获取最新事件 */
  805. this.startTimer();
  806. /* 事件列表 */
  807. this.postEventList();
  808. // if (this.showvideo == 0) {
  809. // document.getElementById('videowindow').style.display = 'none';
  810. // }
  811. },
  812. computed: {
  813. mode: function () {
  814. return this.tabActive === 'mse' ? 0 : 1;
  815. }
  816. },
  817. watch: {
  818. culturalValue(val) {
  819. this.$refs.tree.filter(val);
  820. },
  821. latestEvents: {
  822. handler(newData) {
  823. if (newData && newData.address === undefined && this.showWarn) {
  824. this.showWarn = false;
  825. this.startTimer();
  826. }
  827. },
  828. deep: true
  829. }
  830. },
  831. beforeDestroy() {
  832. this.stopTimer();
  833. console.log('index.beforeDestroy.stopTimer');
  834. },
  835. onLoad(e) {
  836. console.log('index');
  837. },
  838. methods: {
  839. /* 搜索筛选树形结构数据 */
  840. filterNode(value, data) {
  841. if (!value) return true;
  842. return data.name.indexOf(value) !== -1;
  843. },
  844. /* 刷新了 */
  845. refreshBtn() {
  846. console.log('index.methods.refreshBtn');
  847. window.location.reload();
  848. },
  849. /*获取 树形数据 */
  850. getZhoujieDevice() {
  851. this.$api.getZhoujieDevice(
  852. {
  853. type: 'cr'
  854. },
  855. (res) => {
  856. this.treeData = res.data;
  857. }
  858. );
  859. },
  860. /* 切换数据 */
  861. qhGetZhoujieDevice() {
  862. this.qhBtn = !this.qhBtn;
  863. if (this.qhBtn) {
  864. this.$api.getZhoujieDevice(
  865. {
  866. type: 'area'
  867. },
  868. (res) => {
  869. this.treeData = res.data;
  870. }
  871. );
  872. } else {
  873. this.getZhoujieDevice();
  874. }
  875. },
  876. /* 获取文物历史开放时间 */
  877. timeBtn(data) {
  878. this.timeId = data.id;
  879. // console.log(data, 'data');
  880. this.showTime = true;
  881. this.$api.getCrOpenHoursHistoricalConfig({ cr_id: data.id }, function (res) {
  882. console.log(res, '时间配置');
  883. that.opennessTimeList = res.data;
  884. });
  885. },
  886. /* 修改时间 */
  887. modifyTime() {
  888. this.$api.setCrOpenHoursConfig(
  889. {
  890. cr_id: that.timeId,
  891. start_time: that.startTime,
  892. end_time: that.endTime
  893. },
  894. function (res) {
  895. console.log(res, '修改时间');
  896. if (res.code == 1) {
  897. that.$common.successToShow(res.msg);
  898. } else {
  899. that.$common.errorToShow(res.msg);
  900. }
  901. }
  902. );
  903. },
  904. /* 开启定时获取最新事件 */
  905. startTimer() {
  906. if (!this.timer) {
  907. console.log('getLatestEvent');
  908. this.timer = setInterval(() => {
  909. this.getLatestEvent();
  910. }, 5000);
  911. }
  912. },
  913. /* 关闭定时最新事件 */
  914. stopTimer() {
  915. clearInterval(this.timer);
  916. this.timer = null;
  917. },
  918. /* 定时获取最新事件 */
  919. getLatestEvent() {
  920. this.$api.getLatestEvent({}, (res) => {
  921. const newData = res.data;
  922. if (newData !== null) {
  923. this.latestEvents = newData;
  924. if (newData.address !== undefined) {
  925. if (!this.showWarn) {
  926. this.showWarn = true;
  927. this.isAutio = true;
  928. this.startTimer();
  929. }
  930. } else {
  931. if (this.showWarn) {
  932. this.showWarn = false;
  933. this.isAutio = false;
  934. this.startTimer();
  935. }
  936. }
  937. }
  938. // console.log(this.latestEvents, '最新事件');
  939. });
  940. },
  941. /* 定时获取最新事件 */
  942. // closePopup() {
  943. // this.showWarn = false;
  944. // this.startTimer();
  945. // },
  946. /* 加入轮巡 */
  947. append(data) {
  948. for (let i = 0; i < this.monitors.length; i++) {
  949. if (this.monitors[i].device_code == data.device_code) {
  950. window.editDeviceIndex = i;
  951. /* isPolling为true已经在轮巡 */
  952. if (data.isPolling) {
  953. //del删除轮巡
  954. this.$api.delPollingConfig({ device_id: data.device_id }, function (res) {
  955. that.monitors[window.editDeviceIndex].isPolling = 0;
  956. that.isOpenPolling = true;
  957. console.log('删除成功');
  958. that.$common.successToShow(res.msg);
  959. });
  960. } else {
  961. //add否则加入轮巡
  962. this.$api.addPollingConfig({ device_id: data.device_id }, function (res) {
  963. that.monitors[window.editDeviceIndex].isPolling = 1;
  964. console.log('加入成功');
  965. that.isOpenPolling = true;
  966. that.$common.successToShow(res.msg);
  967. });
  968. }
  969. break;
  970. }
  971. }
  972. },
  973. /* 关联监控点击事件 */
  974. openVideo(item, index) {
  975. this.associationTab = item.name;
  976. var t = Date.parse(new Date()) / 1000;
  977. var key = md5.md5(t + '@feichenghuli');
  978. /* 需要拼接该项文物监控链接 */
  979. this.webViedoUrl = 'https://feicheng.16fw.cn:1443/hik_monitor/center_monitor.html?t=' + t.toString() + '&key=' + key + '&index_code=' + item.device_code;
  980. },
  981. /* 树形组件点击事件 */
  982. handleNodeClick(data, node, obj) {
  983. that.cr_id = data.id;
  984. console.log(data, 111);
  985. console.log(node, 222);
  986. if (data.area !== undefined) {
  987. console.log('点击了文物', data);
  988. that.stopAllPlay();
  989. that.mindex = 0;
  990. /* 获取文物下的所有数据 */
  991. that.monitors = data.children;
  992. /* 调用获取监控编码 */
  993. that.toshow();
  994. }
  995. if (data.zhoujie_device_type == '1') {
  996. that.deviceCcode = data.device_code;
  997. console.log('点击了监控', this.deviceCcode);
  998. /* 获取监控父节点信息 */
  999. this.treeNode = node.parent.data;
  1000. this.treeJk = node.parent.data.children;
  1001. // console.log(this.treeNode, 11122288888);
  1002. /* 点击的监控名字 */
  1003. this.jkName = data.name;
  1004. this.showMonitor = true;
  1005. var t = Date.parse(new Date()) / 1000;
  1006. var key = md5.md5(t + '@feichenghuli');
  1007. this.webViedoUrl = 'https://feicheng.16fw.cn:1443/hik_monitor/center_monitor.html?t=' + t.toString() + '&key=' + key + '&index_code=' + data.device_code;
  1008. /* 获取点击的监控文物及五防信息 */
  1009. this.$api.getDeviceDetails({ device_id: data.device_id }, function (res) {
  1010. // console.log(res, 1717171717);
  1011. /* 设备信息 */
  1012. that.deviceList = res.data;
  1013. /* 关联监控 */
  1014. that.associatedDevices = res.data.device_context_list;
  1015. // console.log(that.associatedDevices, 888888888888);
  1016. /* 地图 */
  1017. mymap(that.ak)
  1018. .then((mymap) => {
  1019. var bmap = null;
  1020. // 创建百度地图实例
  1021. bmap = new BMapGL.Map('allmap');
  1022. let point = new BMapGL.Point(res.data.longitude, res.data.latitude); /* 坐标点 */
  1023. bmap.centerAndZoom(point, 15); //设置缩放级别
  1024. bmap.enableScrollWheelZoom();
  1025. // 添加标注点并设置自定义图标;
  1026. const icon = new BMapGL.Icon('/static/img/company-green.png', new BMapGL.Size(26, 26));
  1027. const marker = new BMapGL.Marker(point, { icon: icon });
  1028. // // 将标注添加到地图
  1029. bmap.addOverlay(marker);
  1030. // 添加标注点上的文字
  1031. const label = new BMapGL.Label(that.treeNode.name, {
  1032. position: point, // 设置文本标注位置
  1033. offset: new BMapGL.Size(20, -10) // 设置文本偏移量
  1034. });
  1035. label.setStyle({
  1036. color: '#576171', // 文本颜色
  1037. fontSize: '12px', // 文本字号
  1038. fontWeight: 'bold' // 文本加粗
  1039. });
  1040. marker.setLabel(label); // 将标注点与文本标注关联
  1041. })
  1042. .catch((e) => {
  1043. console.log(e);
  1044. });
  1045. /* 地图 */
  1046. });
  1047. }
  1048. if (data.zhoujie_device_type == 2) {
  1049. this.$api.getDeviceDetails({ device_id: data.device_id }, function (res) {
  1050. console.log('白蚂蚁', res);
  1051. that.showDipAngle = true;
  1052. that.dipangleList = res.data;
  1053. that.treeNode = node.parent.data;
  1054. /* 白蚂蚁数据 */
  1055. });
  1056. }
  1057. if (data.zhoujie_device_type == 3) {
  1058. this.$api.getDeviceDetails({ device_id: data.device_id }, function (res) {
  1059. console.log(res, '点击了倾角');
  1060. /* 倾角数据 */
  1061. that.showDipAngle = true;
  1062. that.dipangleList = res.data;
  1063. that.treeNode = node.parent.data;
  1064. });
  1065. }
  1066. },
  1067. /* 获取轮巡配置 */
  1068. getPollingConfig() {
  1069. this.$api.getPollingConfig({}, function (res) {
  1070. // console.log(res, 888888888888);
  1071. that.turningList = res.data.device;
  1072. // console.log(that.turningList, 2323232323232323);
  1073. that.interval = res.data.interval / 60;
  1074. that.number = res.data.number;
  1075. /* 控制监控画面展示个数 */
  1076. that.splitNum = Math.sqrt(that.number);
  1077. /* 控制监控画面展示个数 */
  1078. that.arrangeWindow();
  1079. that.getMonitorList();
  1080. });
  1081. },
  1082. /* 修改轮巡配置 */
  1083. modifyBtn() {
  1084. this.$api.editPollingConfig({ interval: this.interval, number: this.number }, function (res) {
  1085. // console.log(res, 99999999999);
  1086. if (res.code == 1) {
  1087. that.isOpenPolling = true;
  1088. that.$common.successToShow(res.msg);
  1089. } else {
  1090. that.$common.errorToShow(res.msg);
  1091. }
  1092. });
  1093. },
  1094. /* 图文中删除轮巡按钮 */
  1095. lunxunBtn(item, index) {
  1096. this.$api.delPollingConfig({ device_id: item.device_id }, function (res) {
  1097. console.log(res, '删除成功');
  1098. that.getPollingConfig();
  1099. that.$common.successToShow(res.msg);
  1100. });
  1101. },
  1102. /* 待处理事件按钮 */
  1103. eventDclBtn() {
  1104. this.$api.postEventList(
  1105. {
  1106. device_code: this.deviceCcode,
  1107. status: this.status_val
  1108. },
  1109. function (res) {
  1110. console.log(res, '待处理事件');
  1111. that.eventDclList = res.data.rows;
  1112. console.log(that.tableData, '待处理事件2');
  1113. }
  1114. );
  1115. },
  1116. // 获取事件列表
  1117. postEventList() {
  1118. // console.log(that.deviceCode, '待核查');
  1119. this.$api.postEventList(
  1120. {
  1121. page: this.currentPage,
  1122. pageSize: this.pageSize
  1123. // device_code: this.deviceCcode,
  1124. // status: this.status_val
  1125. },
  1126. function (res) {
  1127. // console.log(res, '页码');
  1128. that.tableData = res.data.rows;
  1129. // console.log(that.tableData, '页码2');
  1130. that.total = res.data.total;
  1131. }
  1132. );
  1133. },
  1134. /* 事件列表误报按钮 */
  1135. // falseAlarmBtn(item) {
  1136. // // console.log(item, 'item');
  1137. // this.$api.editEvent(
  1138. // {
  1139. // event_id: item.id,
  1140. // event_level: item.event_level,
  1141. // event_type: item.event_type,
  1142. // status: item.status
  1143. // },
  1144. // function (res) {
  1145. // if (res.code == 1) {
  1146. // console.log(res, '误报');
  1147. // that.postEventList();
  1148. // that.$common.successToShow(res.msg);
  1149. // } else {
  1150. // that.$common.errorToShow(res.msg);
  1151. // }
  1152. // }
  1153. // );
  1154. // },
  1155. /* 事件说明推荐语 */
  1156. querySearch(queryString, cb) {
  1157. var restaurants = this.restaurants;
  1158. var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
  1159. // 调用 callback 返回建议列表的数据
  1160. cb(results);
  1161. },
  1162. createFilter(queryString) {
  1163. return (restaurant) => {
  1164. return restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0;
  1165. };
  1166. },
  1167. handleSelect(item) {
  1168. console.log((this.descriptionVal = item.value));
  1169. },
  1170. /* 事件说明推荐语end */
  1171. /* 事件警告弹层提交按钮 */
  1172. submitReportBtn() {
  1173. // console.log(this.latestEvents, '警告数据');
  1174. this.$api.editEvent(
  1175. {
  1176. event_id: this.latestEvents.event_id,
  1177. event_level: this.event_level_val,
  1178. event_type: this.event_type_val,
  1179. status: this.status_val,
  1180. illustrate: this.descriptionVal,
  1181. reports: this.valueTxt2
  1182. },
  1183. function (res) {
  1184. console.log(res, '提交报告');
  1185. if (res.code == 1) {
  1186. that.$common.successToShow('提交成功');
  1187. } else {
  1188. that.$common.errorToShow('请选择事件详情');
  1189. }
  1190. // console.log(res, '提交报告');
  1191. }
  1192. );
  1193. },
  1194. // 事件警告弹层误报按钮
  1195. wubaoBtn() {
  1196. // console.log(this.latestEvents.event_id, 111111212335688);
  1197. this.$api.editEvent(
  1198. {
  1199. vent_id: this.latestEvents.event_id,
  1200. event_level: this.event_level_val,
  1201. event_type: this.event_type_val,
  1202. status: this.status_val,
  1203. illustrate: this.descriptionVal,
  1204. reports: this.valueTxt2
  1205. },
  1206. function (res) {
  1207. that.$common.successToShow('提交成功');
  1208. // console.log(res, '误报数据');
  1209. // if (res.code == 1) {
  1210. // that.$common.successToShow('提交成功');
  1211. // } else {
  1212. // that.$common.errorToShow(res.msg);
  1213. // }
  1214. }
  1215. );
  1216. },
  1217. /* 每页条数改变 */
  1218. handleSizeChange(size) {
  1219. this.pageSize = size;
  1220. this.postEventList();
  1221. /* 页面改变在此调用接口方法 */
  1222. // console.log(this.pageSize);
  1223. },
  1224. /* 页码改变 */
  1225. handleCurrentChange(currentPage) {
  1226. this.currentPage = currentPage;
  1227. this.postEventList();
  1228. /* 页面改变在此调用接口方法 */
  1229. // console.log(this.currentPage); //点击第几页
  1230. },
  1231. /* 事件搜索按钮 */
  1232. searchBtn() {
  1233. if (this.dateVal != '' || this.stateVal != '' || this.queryVal != '') {
  1234. this.$api.postEventList(
  1235. {
  1236. keywords: this.queryVal,
  1237. status: this.stateVal,
  1238. created_at: this.dateVal
  1239. },
  1240. function (res) {
  1241. if (res.code == 1 && res.data.rows.length > 0) {
  1242. that.tableData = res.data.rows;
  1243. // console.log(that.tableData, '搜索事件2');
  1244. } else {
  1245. that.$common.errorToShow('暂无事件');
  1246. }
  1247. }
  1248. );
  1249. }
  1250. },
  1251. /* 查看事件 */
  1252. viewEventBtn(item) {
  1253. this.itemList = item;
  1254. console.log(item, 'item');
  1255. this.eventId = item.id;
  1256. this.showViewEvent = true;
  1257. // mymap(that.ak)
  1258. // .then((mymap) => {
  1259. // var bmap2 = null;
  1260. // // 创建百度地图实例
  1261. // bmap2 = new BMapGL.Map('allmap2');
  1262. // let point = new BMapGL.Point(108.953364, 34.276184); /* 坐标点 */
  1263. // bmap2.centerAndZoom(point, 10); //设置缩放级别
  1264. // bmap2.enableScrollWheelZoom();
  1265. // // 添加标注点并设置自定义图标;
  1266. // const icon = new BMapGL.Icon('/static/img/company-green.png', new BMapGL.Size(26, 26));
  1267. // const marker = new BMapGL.Marker(point, { icon: icon });
  1268. // // // 将标注添加到地图
  1269. // bmap2.addOverlay(marker);
  1270. // // 添加标注点上的文字
  1271. // const label = new BMapGL.Label('自定义', {
  1272. // position: point, // 设置文本标注位置
  1273. // offset: new BMapGL.Size(20, -10) // 设置文本偏移量
  1274. // });
  1275. // label.setStyle({
  1276. // color: '#576171', // 文本颜色
  1277. // fontSize: '12px', // 文本字号
  1278. // fontWeight: 'bold' // 文本加粗
  1279. // });
  1280. // marker.setLabel(label); // 将标注点与文本标注关联
  1281. // })
  1282. // .catch((e) => {
  1283. // console.log(e);
  1284. // });
  1285. /* 地图 */
  1286. },
  1287. /* 监控待处理弹层提交按钮事件 */
  1288. submitReport() {
  1289. // console.log(this.eventId, 'idididid');
  1290. this.$api.editEvent(
  1291. {
  1292. event_id: this.eventId,
  1293. reports: this.valueTxt
  1294. },
  1295. function (res) {
  1296. console.log(res);
  1297. }
  1298. );
  1299. },
  1300. close() {
  1301. // this.showViewEvent = false;
  1302. this.monitorShow = false;
  1303. },
  1304. getMonitorList() {
  1305. if (this.maintabindex == 0) {
  1306. /* 获取轮询设备监控点 */
  1307. // that.isOpenPolling = true;
  1308. this.$api.getPollingDevicePreviewUrl({ offset: this.polloffset }, function (response) {
  1309. // console.log(response, 1111);
  1310. that.polloffset = response.data.offset;
  1311. that.monitors = response.data.device;
  1312. that.isOpenPolling = response.data.isOpenPolling;
  1313. /* 轮巡 */
  1314. if (response.data.isOpenPolling) {
  1315. setTimeout('that.getMonitorList()', response.data.interval * 1000);
  1316. }
  1317. if (that.monitors.length > 0) {
  1318. that.selectIndex = 0;
  1319. that.mindex = 0;
  1320. }
  1321. that.toshow();
  1322. });
  1323. }
  1324. },
  1325. /* 请求监控链接 */
  1326. getUrltoPlay(index) {
  1327. if (parseInt(index) >= that.monitors.length) return;
  1328. this.$api.getCameraPreviewUrl({ device_code: that.monitors[parseInt(index)].device_code }, function (response) {
  1329. // console.log(response, 2222);
  1330. var playURL = response.data;
  1331. var mode = 0;
  1332. that.player.JS_Play(playURL, { playURL, mode }, index).then(
  1333. () => {
  1334. console.log('realplay success');
  1335. },
  1336. (e) => {
  1337. console.error(e);
  1338. }
  1339. );
  1340. });
  1341. },
  1342. toshow() {
  1343. for (var i = 0; i < this.monitors.length; i++) {
  1344. setTimeout(function () {
  1345. var index;
  1346. index = that.mindex;
  1347. that.getUrltoPlay(index);
  1348. that.mindex++;
  1349. }, (i + 1) * 2000);
  1350. }
  1351. },
  1352. init() {
  1353. // 设置播放容器的宽高并监听窗口大小变化
  1354. window.addEventListener('resize', () => {
  1355. this.player.JS_Resize();
  1356. });
  1357. },
  1358. createPlayer() {
  1359. this.player = new window.JSPlugin({
  1360. szId: 'player',
  1361. szBasePath: './',
  1362. iMaxSplit: 4,
  1363. iCurrentSplit: IS_MOVE_DEVICE ? 1 : 4,
  1364. openDebug: true,
  1365. oStyle: {
  1366. borderSelect: IS_MOVE_DEVICE ? '#000' : '#FFCC00'
  1367. }
  1368. });
  1369. // 事件回调绑定
  1370. this.player.JS_SetWindowControlCallback({
  1371. windowEventSelect: function (iWndIndex) {
  1372. //插件选中窗口回调
  1373. console.log('windowSelect callback: ', iWndIndex);
  1374. if (iWndIndex < that.monitors.length) that.selectIndex = iWndIndex;
  1375. },
  1376. pluginErrorHandler: function (iWndIndex, iErrorCode, oError) {
  1377. //插件错误回调
  1378. console.log('pluginError callback: ', iWndIndex, iErrorCode, oError);
  1379. //if (iErrorCode == 26214462 || oError.code == 1006 || oError.code == 1005) {
  1380. let i = parseInt(iWndIndex);
  1381. if (i < that.monitors.length) setTimeout('window.that.getUrltoPlay(' + i.toString() + ');', 3000);
  1382. //}
  1383. },
  1384. windowEventOver: function (iWndIndex) {
  1385. //鼠标移过回调
  1386. //console.log(iWndIndex);
  1387. },
  1388. windowEventOut: function (iWndIndex) {
  1389. //鼠标移出回调
  1390. //console.log(iWndIndex);
  1391. },
  1392. windowEventUp: function (iWndIndex) {
  1393. //鼠标mouseup事件回调
  1394. //console.log(iWndIndex);
  1395. },
  1396. windowFullCcreenChange: function (bFull) {
  1397. //全屏切换回调
  1398. console.log('fullScreen callback: ', bFull);
  1399. },
  1400. firstFrameDisplay: function (iWndIndex, iWidth, iHeight) {
  1401. //首帧显示回调
  1402. console.log('firstFrame loaded callback: ', iWndIndex, iWidth, iHeight);
  1403. },
  1404. performanceLack: function () {
  1405. //性能不足回调
  1406. console.log('performanceLack callback: ');
  1407. }
  1408. });
  1409. },
  1410. /* 控制页面展示个数 */
  1411. arrangeWindow() {
  1412. let splitNum = this.splitNum;
  1413. this.player.JS_ArrangeWindow(splitNum).then(
  1414. () => {
  1415. console.log(`arrangeWindow to ${splitNum}x${splitNum} success`);
  1416. },
  1417. (e) => {
  1418. console.error(e);
  1419. }
  1420. );
  1421. },
  1422. wholeFullScreen() {
  1423. this.player.JS_FullScreenDisplay(true).then(
  1424. () => {
  1425. console.log(`wholeFullScreen success`);
  1426. },
  1427. (e) => {
  1428. console.error(e);
  1429. }
  1430. );
  1431. },
  1432. /* 预览&对讲 */
  1433. realplay(index, playURL) {
  1434. let mode = 0;
  1435. this.player.JS_Play(playURL, { playURL, mode }, index).then(
  1436. () => {
  1437. console.log('realplay success');
  1438. },
  1439. (e) => {
  1440. console.error(e);
  1441. }
  1442. );
  1443. },
  1444. stopPlay() {
  1445. this.player.JS_Stop().then(
  1446. () => {
  1447. this.playback.rate = 0;
  1448. console.log('stop realplay success');
  1449. },
  1450. (e) => {
  1451. console.error(e);
  1452. }
  1453. );
  1454. },
  1455. talkStart() {
  1456. let url = this.urls.talk;
  1457. this.player.JS_SetConnectTimeOut(0, 1000);
  1458. this.player.JS_StartTalk(url).then(
  1459. () => {
  1460. console.log('talkStart success');
  1461. },
  1462. (e) => {
  1463. console.error(e);
  1464. }
  1465. );
  1466. },
  1467. talkStop() {
  1468. this.player.JS_StopTalk().then(
  1469. () => {
  1470. console.log('talkStop success');
  1471. },
  1472. (e) => {
  1473. console.error(e);
  1474. }
  1475. );
  1476. },
  1477. stopAllPlay() {
  1478. this.player.JS_StopRealPlayAll().then(
  1479. () => {
  1480. this.playback.rate = 0;
  1481. console.log('stopAllPlay success');
  1482. },
  1483. (e) => {
  1484. console.error(e);
  1485. }
  1486. );
  1487. },
  1488. /* 回放 */
  1489. playbackStart() {
  1490. let { player, mode, urls, playback } = this,
  1491. index = player.currentWindowIndex,
  1492. playURL = urls.playback,
  1493. { startTime, endTime } = playback;
  1494. startTime += 'Z';
  1495. endTime += 'Z';
  1496. player.JS_Play(playURL, { playURL, mode }, index, startTime, endTime).then(
  1497. () => {
  1498. console.log('playbackStart success');
  1499. this.playback.rate = 1;
  1500. },
  1501. (e) => {
  1502. console.error(e);
  1503. }
  1504. );
  1505. },
  1506. playbackPause() {
  1507. this.player.JS_Pause().then(
  1508. () => {
  1509. console.log('playbackPause success');
  1510. },
  1511. (e) => {
  1512. console.error(e);
  1513. }
  1514. );
  1515. },
  1516. playbackResume() {
  1517. this.player.JS_Resume().then(
  1518. () => {
  1519. console.log('playbackResume success');
  1520. },
  1521. (e) => {
  1522. console.error(e);
  1523. }
  1524. );
  1525. },
  1526. seekTo() {
  1527. let { seekStart, endTime } = this.playback;
  1528. seekStart += 'Z';
  1529. endTime += 'Z';
  1530. this.player.JS_Seek(this.player.currentWindowIndex, seekStart, endTime).then(
  1531. () => {
  1532. console.log('seekTo success');
  1533. },
  1534. (e) => {
  1535. console.error(e);
  1536. }
  1537. );
  1538. },
  1539. playbackSlow() {
  1540. this.player.JS_Slow().then(
  1541. (rate) => {
  1542. this.playback.rate = rate;
  1543. },
  1544. (e) => {
  1545. console.error(e);
  1546. }
  1547. );
  1548. },
  1549. playbackFast() {
  1550. this.player.JS_Fast().then(
  1551. (rate) => {
  1552. this.playback.rate = rate;
  1553. },
  1554. (e) => {
  1555. console.error(e);
  1556. }
  1557. );
  1558. },
  1559. frameForward() {
  1560. this.player.JS_FrameForward(this.player.currentWindowIndex).then(
  1561. () => {
  1562. this.playback.rate = 1;
  1563. console.log('frameForward success');
  1564. },
  1565. (e) => {
  1566. console.error(e);
  1567. }
  1568. );
  1569. },
  1570. /* 声音、抓图、录像 */
  1571. openSound() {
  1572. this.player.JS_OpenSound().then(
  1573. () => {
  1574. console.log('openSound success');
  1575. this.muted = false;
  1576. },
  1577. (e) => {
  1578. console.error(e);
  1579. }
  1580. );
  1581. },
  1582. closeSound() {
  1583. this.player.JS_CloseSound().then(
  1584. () => {
  1585. console.log('closeSound success');
  1586. this.muted = true;
  1587. },
  1588. (e) => {
  1589. console.error(e);
  1590. }
  1591. );
  1592. },
  1593. setVolume(value) {
  1594. let player = this.player,
  1595. index = player.currentWindowIndex;
  1596. this.player.JS_SetVolume(index, value).then(
  1597. () => {
  1598. console.log('setVolume success', value);
  1599. },
  1600. (e) => {
  1601. console.error(e);
  1602. }
  1603. );
  1604. },
  1605. /* 事件信息 */
  1606. // getEventList() {
  1607. // this.$api.getEventList({}, function (response) {
  1608. // console.error(response, 6666);
  1609. // that.eventlist = response.data;
  1610. // });
  1611. // axios.get('/api/culturalrelicplate/work_log/getEvent').then(function (response) {
  1612. // that.eventlist = response.data.data;
  1613. // });
  1614. // },
  1615. capture(imageType) {
  1616. let player = this.player,
  1617. index = player.currentWindowIndex;
  1618. player.JS_CapturePicture(index, 'img', imageType).then(
  1619. () => {
  1620. console.log('capture success', imageType);
  1621. },
  1622. (e) => {
  1623. console.error(e);
  1624. }
  1625. );
  1626. },
  1627. recordStart(type) {
  1628. const codeMap = { MP4: 5, PS: 2 };
  1629. let player = this.player,
  1630. index = player.currentWindowIndex,
  1631. fileName = `${moment().format('YYYYMMDDHHmm')}.mp4`;
  1632. typeCode = codeMap[type];
  1633. player.JS_StartSaveEx(index, fileName, typeCode).then(
  1634. () => {
  1635. console.log('record start ...');
  1636. },
  1637. (e) => {
  1638. console.error(e);
  1639. }
  1640. );
  1641. },
  1642. recordStop() {
  1643. let player = this.player;
  1644. index = player.currentWindowIndex;
  1645. player.JS_StopSave(index).then(
  1646. () => {
  1647. console.log('record stoped, saving ...');
  1648. },
  1649. (e) => {
  1650. console.error(e);
  1651. }
  1652. );
  1653. },
  1654. /* 电子放大、智能信息 */
  1655. enlarge() {
  1656. let player = this.player,
  1657. index = player.currentWindowIndex;
  1658. player.JS_EnableZoom(index).then(
  1659. () => {
  1660. console.log('enlarge start..., select range...');
  1661. },
  1662. (e) => {
  1663. console.error(e);
  1664. }
  1665. );
  1666. },
  1667. enlargeClose() {
  1668. let player = this.player,
  1669. index = player.currentWindowIndex;
  1670. player.JS_DisableZoom(index).then(
  1671. () => {
  1672. console.log('enlargeClose success');
  1673. },
  1674. (e) => {
  1675. console.error(e);
  1676. }
  1677. );
  1678. },
  1679. intellectTrigger(openFlag) {
  1680. let player = this.player,
  1681. index = player.currentWindowIndex;
  1682. let result = player.JS_RenderALLPrivateData(index, openFlag);
  1683. console.log(`${openFlag ? 'open' : 'close'} intellect ${result === 1 ? 'success' : 'failed'}`);
  1684. },
  1685. getvideoInfo() {
  1686. let player = this.player,
  1687. index = player.currentWindowIndex;
  1688. player.JS_GetVideoInfo(index).then(function (videoInfo) {
  1689. console.log('videoInfo:', videoInfo);
  1690. });
  1691. },
  1692. getOSDTime() {
  1693. let player = this.player,
  1694. index = player.currentWindowIndex;
  1695. player.JS_GetOSDTime(index).then(function (time) {
  1696. console.log('osdTime:', new Date(time));
  1697. });
  1698. },
  1699. getUrlKey: function (name) {
  1700. return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [, ''])[1].replace(/\+/g, '%20')) || null;
  1701. }
  1702. }
  1703. };
  1704. </script>
  1705. <style>
  1706. @media screen and (max-width: 991px) {
  1707. #player {
  1708. width: calc(100vw - 16px);
  1709. height: calc((100vw - 16px) * 5 / 8);
  1710. }
  1711. }
  1712. @media screen and (min-width: 992px) {
  1713. #player {
  1714. width: calc(80vw - 16px);
  1715. height: calc((80vw - 16px) * 5 / 8);
  1716. }
  1717. }
  1718. /deep/.anchorBL {
  1719. display: none !important;
  1720. }
  1721. /deep/.BMapLabel {
  1722. border: none !important;
  1723. }
  1724. /deep/.uni-forms-item__label {
  1725. color: black !important;
  1726. }
  1727. /deep/.el-input__inner {
  1728. border-color: #3c9cff !important;
  1729. }
  1730. /deep/.el-textarea__inner {
  1731. width: 90%;
  1732. border-color: #dcdfe6 !important;
  1733. }
  1734. /deep/.el-tree-node__content {
  1735. &:hover {
  1736. background-color: #d9ecff !important;
  1737. }
  1738. }
  1739. /deep/.el-tree-node.is-current > .el-tree-node__content {
  1740. background-color: #d9ecff !important;
  1741. color: #333 !important;
  1742. }
  1743. /deep/.el-tree-node__expand-icon {
  1744. font-size: 36rpx !important;
  1745. }
  1746. .custom-tree-node {
  1747. flex: 1;
  1748. display: flex;
  1749. align-items: center;
  1750. justify-content: space-between;
  1751. font-size: 14px;
  1752. padding-right: 8px;
  1753. }
  1754. .body2 {
  1755. padding: 20rpx;
  1756. width: 100%;
  1757. height: 1890rpx;
  1758. background: url('@/static/img/wenhuazhan-bj.png') no-repeat center;
  1759. background-size: 100% 100%;
  1760. background-color: #f5f5f5;
  1761. }
  1762. .box {
  1763. width: 100%;
  1764. height: 95%;
  1765. display: flex;
  1766. }
  1767. /* .hcqStyle7 {
  1768. position: fixed;
  1769. top: 16rpx;
  1770. left: 30rpx;
  1771. width: 200rpx;
  1772. height: 100rpx;
  1773. animation: rotate3D 10s linear infinite;
  1774. font-family: cursive;
  1775. text-shadow: 6px 2px 2px #626262;
  1776. color: #3c9cff;
  1777. }
  1778. @keyframes rotate3D {
  1779. 0% {
  1780. transform: perspective(1000px) rotateY(0deg);
  1781. }
  1782. 100% {
  1783. transform: perspective(1000px) rotateY(360deg);
  1784. }
  1785. } */
  1786. .left_box {
  1787. display: flex;
  1788. flex-direction: column;
  1789. width: 82%;
  1790. margin-left: -20rpx;
  1791. }
  1792. .topTab {
  1793. width: 100%;
  1794. display: flex;
  1795. margin-bottom: 50rpx;
  1796. justify-content: space-around;
  1797. }
  1798. .btn {
  1799. width: 230rpx;
  1800. color: #3c9cff;
  1801. border: 2px solid #3c9cff;
  1802. font-size: 30rpx;
  1803. cursor: pointer;
  1804. }
  1805. .activeBtn {
  1806. color: aliceblue;
  1807. border: none;
  1808. background-color: #3c9cff;
  1809. }
  1810. .bh_title {
  1811. height: 80rpx;
  1812. line-height: 100rpx;
  1813. margin-left: 10rpx;
  1814. }
  1815. .left_box_item {
  1816. width: 740rpx;
  1817. height: 460rpx;
  1818. margin-left: -1px;
  1819. margin-top: -1px;
  1820. border: 1px solid #343434;
  1821. }
  1822. .right_box {
  1823. width: 680rpx;
  1824. height: 1800rpx;
  1825. margin-right: 160rpx;
  1826. overflow: scroll;
  1827. background-color: #fff;
  1828. }
  1829. .right_box_item {
  1830. margin-top: 20rpx;
  1831. }
  1832. .right_box_title {
  1833. width: 140rpx;
  1834. color: black;
  1835. height: 60rpx;
  1836. line-height: 60rpx;
  1837. }
  1838. .right_box_item_list {
  1839. width: 100%;
  1840. padding: 20rpx;
  1841. font-size: 30rpx;
  1842. box-sizing: border-box;
  1843. background-color: #efefef;
  1844. margin-left: 310rpx;
  1845. }
  1846. .item_list_item {
  1847. height: 50rpx;
  1848. line-height: 50rpx;
  1849. margin-bottom: 10rpx;
  1850. }
  1851. .item_list_item:hover {
  1852. background-color: #d9ecff;
  1853. }
  1854. .right_box_top {
  1855. position: sticky;
  1856. top: 0;
  1857. z-index: 99;
  1858. background-color: #efefef;
  1859. margin-bottom: 10rpx;
  1860. width: 100%;
  1861. height: 60rpx;
  1862. display: flex;
  1863. justify-content: space-between;
  1864. }
  1865. .right_btm {
  1866. width: 680rpx;
  1867. height: 980rpx;
  1868. overflow: scroll;
  1869. background-color: #fff;
  1870. }
  1871. .jianju {
  1872. display: flex;
  1873. justify-content: space-between;
  1874. align-items: center;
  1875. margin-bottom: -1px;
  1876. }
  1877. .gljk_item:hover {
  1878. background-color: #d9ecff;
  1879. }
  1880. .jianju2 {
  1881. display: flex;
  1882. justify-content: space-between;
  1883. align-items: center;
  1884. margin-bottom: -1px;
  1885. }
  1886. .jianju3 {
  1887. display: flex;
  1888. width: 600rpx;
  1889. justify-content: space-between;
  1890. align-items: center;
  1891. margin-bottom: -1px;
  1892. }
  1893. .jianju_item {
  1894. width: 600rpx;
  1895. height: 70rpx;
  1896. border: 1px solid #dbdbdb;
  1897. border-radius: 5rpx;
  1898. overflow: scroll;
  1899. }
  1900. .jianju_item2 {
  1901. width: 920rpx;
  1902. height: 90rpx;
  1903. border: 1px solid #dbdbdb;
  1904. border-radius: 5rpx;
  1905. }
  1906. .jianju_item3 {
  1907. width: 360rpx;
  1908. height: 70rpx;
  1909. border: 1px solid #dbdbdb;
  1910. border-radius: 5rpx;
  1911. }
  1912. .jianju_item4 {
  1913. width: 360rpx;
  1914. height: 70rpx;
  1915. border: 1px solid #dbdbdb;
  1916. border-radius: 5rpx;
  1917. }
  1918. .qj_box {
  1919. display: flex;
  1920. flex-direction: column;
  1921. padding: 30rpx;
  1922. box-sizing: border-box;
  1923. width: 1800rpx;
  1924. height: 1200rpx;
  1925. border: 1px solid #dbdbdb;
  1926. }
  1927. .qj_jianju {
  1928. margin-top: 20rpx;
  1929. align-items: center;
  1930. margin-bottom: -1px;
  1931. }
  1932. .gljk_item {
  1933. margin-bottom: 10rpx;
  1934. cursor: pointer;
  1935. }
  1936. .gljk_item:hover {
  1937. background-color: #d9ecff;
  1938. }
  1939. .qj_jianju_item {
  1940. display: flex;
  1941. width: 300rpx;
  1942. height: 70rpx;
  1943. line-height: 70rpx;
  1944. border: 1px solid #dbdbdb;
  1945. border-radius: 5rpx;
  1946. }
  1947. .tanceng {
  1948. position: absolute;
  1949. z-index: 6;
  1950. top: 10%;
  1951. left: 20%;
  1952. /* background: linear-gradient(#a38cdd, #ff8979, #868060, #826d67); */
  1953. background-color: #f5f5f5;
  1954. }
  1955. .bottom_box_title {
  1956. width: 100%;
  1957. height: 60rpx;
  1958. align-items: center;
  1959. display: flex;
  1960. position: sticky;
  1961. top: 0;
  1962. z-index: 99;
  1963. background-color: #efefef;
  1964. }
  1965. .bottom_box_item {
  1966. width: 100%;
  1967. height: 100%;
  1968. display: flex;
  1969. flex-flow: row wrap;
  1970. justify-content: space-around;
  1971. }
  1972. .bottom_box_content {
  1973. width: 200rpx;
  1974. height: 320rpx;
  1975. margin-top: 10rpx;
  1976. cursor: pointer;
  1977. border: 1px solid #dbdbdb;
  1978. }
  1979. .show_box {
  1980. width: 100%;
  1981. height: 100%;
  1982. background-color: #f2f2ec;
  1983. display: flex;
  1984. }
  1985. .show_box_left {
  1986. width: 60%;
  1987. height: 100%;
  1988. }
  1989. .sjlx {
  1990. display: flex;
  1991. justify-content: space-around;
  1992. line-height: 36px;
  1993. }
  1994. .box_left_top {
  1995. width: 860rpx;
  1996. height: 538rpx;
  1997. color: black;
  1998. padding: 30rpx;
  1999. box-sizing: border-box;
  2000. margin: 0 auto;
  2001. margin-top: 50rpx;
  2002. border: 1px solid #dbdbdb;
  2003. }
  2004. .box_left_top2 {
  2005. width: 800rpx;
  2006. height: 440rpx;
  2007. color: black;
  2008. padding: 30rpx;
  2009. border: 1px solid #dbdbdb;
  2010. margin: 0 auto;
  2011. margin-top: 30rpx;
  2012. }
  2013. .show_box_right {
  2014. width: 40%;
  2015. height: 100%;
  2016. margin-right: 120rpx;
  2017. }
  2018. .show_box_top {
  2019. width: 100%;
  2020. height: 43%;
  2021. color: black;
  2022. margin-top: 42rpx;
  2023. box-sizing: border-box;
  2024. padding: 30rpx;
  2025. border: 1px solid #dbdbdb;
  2026. }
  2027. .show_box_bottom {
  2028. width: 800rpx;
  2029. position: absolute;
  2030. left: 50rpx;
  2031. bottom: 20rpx;
  2032. height: 40%;
  2033. padding: 30rpx;
  2034. margin: auto;
  2035. color: black;
  2036. border: 1px solid #dbdbdb;
  2037. box-sizing: border-box;
  2038. overflow: scroll;
  2039. }
  2040. .box2 {
  2041. width: 64%;
  2042. margin: auto;
  2043. margin-top: 60rpx;
  2044. margin-left: 680rpx;
  2045. background-color: #efefef;
  2046. }
  2047. .shijian_box {
  2048. width: 2010rpx;
  2049. display: flex;
  2050. flex-flow: row wrap;
  2051. align-item: flex-start;
  2052. margin-top: 20rpx;
  2053. background-color: #f2f2ec;
  2054. }
  2055. .shijian_item {
  2056. width: 500rpx;
  2057. height: 480rpx;
  2058. border: 1px solid #dbdbdb;
  2059. margin-left: -1px;
  2060. margin-top: -1px;
  2061. }
  2062. .jk_title {
  2063. width: 51%;
  2064. height: 100rpx;
  2065. position: absolute;
  2066. padding: 20rpx;
  2067. box-sizing: border-box;
  2068. top: 30rpx;
  2069. left: 0;
  2070. }
  2071. .lunxun_box {
  2072. width: 67%;
  2073. height: 1600rpx;
  2074. background-color: #f2f2ec;
  2075. margin-left: 680rpx;
  2076. margin-top: 60rpx;
  2077. }
  2078. .lunxun_tw {
  2079. width: 2400rpx;
  2080. display: flex;
  2081. flex-flow: row wrap;
  2082. align-item: flex-start;
  2083. margin-top: 20rpx;
  2084. }
  2085. .tw_item {
  2086. width: 500rpx;
  2087. height: 320rpx;
  2088. padding: 10rpx;
  2089. border: 1px solid #dbdbdb;
  2090. margin-left: -1px;
  2091. margin-top: -1px;
  2092. }
  2093. .jk_show {
  2094. position: absolute;
  2095. display: flex;
  2096. justify-content: flex-start;
  2097. width: 1800rpx;
  2098. height: 1200rpx;
  2099. background-color: aliceblue;
  2100. top: 200rpx;
  2101. left: 800rpx;
  2102. border: 1px solid #dbdbdb;
  2103. background-color: #f2f2ec;
  2104. }
  2105. .jk_dcl_tc {
  2106. z-index: 5;
  2107. position: absolute;
  2108. top: 200rpx;
  2109. left: 700rpx;
  2110. width: 2060rpx;
  2111. height: 1200rpx;
  2112. padding: 20rpx;
  2113. background-color: aliceblue;
  2114. }
  2115. .jk_tc_box {
  2116. width: 100%;
  2117. height: 100%;
  2118. overflow: scroll;
  2119. }
  2120. .jk_tc_box2 {
  2121. display: flex;
  2122. flex-flow: row wrap;
  2123. align-item: flex-start;
  2124. width: 100%;
  2125. }
  2126. .jk_tc_item {
  2127. padding: 10rpx;
  2128. width: 480rpx;
  2129. height: 420rpx;
  2130. border: 1px solid #dbdbdb;
  2131. }
  2132. .pzsj_tc {
  2133. width: 1300rpx;
  2134. height: 600rpx;
  2135. padding: 40rpx;
  2136. position: absolute;
  2137. overflow: scroll;
  2138. top: 200rpx;
  2139. left: 1000rpx;
  2140. background-color: aliceblue;
  2141. }
  2142. .sjjg_tc {
  2143. width: 2600rpx;
  2144. height: 1400rpx;
  2145. padding: 20rpx;
  2146. position: absolute;
  2147. top: 200rpx;
  2148. left: 300rpx;
  2149. background-color: aliceblue;
  2150. }
  2151. .sj_top_box {
  2152. width: 2500rpx;
  2153. height: 160rpx;
  2154. display: flex;
  2155. flex-flow: wrap;
  2156. justify-content: space-around;
  2157. margin-bottom: 180rpx;
  2158. /* background-color: yellowgreen; */
  2159. }
  2160. .sj_box {
  2161. display: flex;
  2162. margin-top: 10rpx;
  2163. }
  2164. .sj_item {
  2165. width: 500rpx;
  2166. height: 70rpx;
  2167. margin-bottom: 10rpx;
  2168. border: 1px solid #dbdbdb;
  2169. border-radius: 5rpx;
  2170. overflow: scroll;
  2171. }
  2172. /deep/.u-navbar__content {
  2173. width: 200rpx !important;
  2174. }
  2175. /deep/.btn-prev {
  2176. border: none;
  2177. }
  2178. /deep/.btn-next {
  2179. border: none;
  2180. }
  2181. /deep/.el-icon-arrow-left {
  2182. line-height: 50rpx;
  2183. }
  2184. /deep/ .el-input .el-input__inner {
  2185. border-color: #dcdfe6 !important;
  2186. }
  2187. </style>