SandTable.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850
  1. <template>
  2. <div class="sand-table">
  3. <img :src="require('@assets/png/3dback.png')" class="i3dback" />
  4. <!-- <img :src="require('@assets/png/3dcloud.png')" class="i3dcloud" /> -->
  5. <StBack></StBack>
  6. <ThreeModel1
  7. class="three-model-layer"
  8. :data="mapSource"
  9. @when="when"
  10. ></ThreeModel1>
  11. <div class="sand-table-left" v-if="showPanel">
  12. <PanelSand
  13. class="left-panel"
  14. title="气象预测"
  15. :subTitle="timeStr + '实况'"
  16. >
  17. <weather class="pd-t-16" :data="tqmap1" />
  18. </PanelSand>
  19. <PanelSand class="left-panel mg-t-16" title="健康推荐">
  20. <RankTable :data="levelTableData"></RankTable>
  21. </PanelSand>
  22. <PanelSand class="left-panel mg-t-16" title="停机信息">
  23. <RankTable :data="sels" @rowClick="clickRow"></RankTable>
  24. <!-- <ComTable :data="sels"></ComTable> -->
  25. </PanelSand>
  26. <PanelSandToolbar class="left-panel mg-t-16" title="部件">
  27. <template v-slot:tools>
  28. <div class="exchange" @click="exchange1">
  29. <span :class="exchangeBtn1 ? 'gray' : 'green'">次数</span>
  30. <i class="green fa fa-exchange mg-l-8 mg-r-8"></i>
  31. <span :class="exchangeBtn1 ? 'green' : 'gray'">库存</span>
  32. </div>
  33. </template>
  34. <template v-slot:default>
  35. <RadarPieChart height="20.6vh" />
  36. </template>
  37. </PanelSandToolbar>
  38. </div>
  39. <div class="sand-table-right" v-if="showPanel">
  40. <PanelSand class="right-panel" title="板块标题">
  41. <el-row v-for="(pItem, pIndex) in videoArray" :key="pIndex">
  42. <el-col
  43. :span="12"
  44. class="pre-img-box"
  45. v-for="(cItem, cIndex) in pItem"
  46. :key="cIndex"
  47. @click="openVideoDialog(cItem)"
  48. >
  49. <div class="mask"></div>
  50. <iframe
  51. class="pre-img videoBoxiframe"
  52. width="95%"
  53. height="8.657vh"
  54. :src="cItem.url + cItem.token"
  55. v-if="cItem.switch"
  56. />
  57. </el-col>
  58. </el-row>
  59. </PanelSand>
  60. <PanelSand class="right-panel mg-t-16" title="工单管理">
  61. <div
  62. class="person-info-box mg-t-16 animated a0"
  63. :class="peopleClass"
  64. v-if="workData.data[0]"
  65. >
  66. <img
  67. class="header mg-r-8 bg-green"
  68. style="width: 75px; height: 75px"
  69. :src="workData.data[workDataIndex].imgurl"
  70. />
  71. <div class="person-info">
  72. <div class="green font-lg" style="font-weight: bold">
  73. {{ workData.data[workDataIndex].laborname }}
  74. </div>
  75. <div class="white font-sm">
  76. <span>职务:{{ workData.data[workDataIndex].jobcode }}</span>
  77. <!-- <span class="mg-l-16">当前任务编号 000000</span> -->
  78. </div>
  79. <div class="white font-sm">
  80. <!-- 平均检修时间 <span class="green">5</span> 小时 -->
  81. 开始时间
  82. <span class="green">{{
  83. workData.data[workDataIndex].starttime
  84. }}</span>
  85. </div>
  86. </div>
  87. </div>
  88. <div class="table mg-t-8">
  89. <Table :data="workData" />
  90. </div>
  91. </PanelSand>
  92. <PanelSandToolbar class="right-panel mg-t-16" title="风险隐患详情">
  93. <template v-slot:tools>
  94. <div class="exchange" @click="exchange">
  95. <span :class="exchangeBtn ? 'gray' : 'green'">预警</span>
  96. <i class="green fa fa-exchange mg-l-8 mg-r-8"></i>
  97. <span :class="exchangeBtn ? 'green' : 'gray'">时长</span>
  98. </div>
  99. </template>
  100. <template v-slot:default>
  101. <RadarPieChart height="21vh" />
  102. </template>
  103. </PanelSandToolbar>
  104. </div>
  105. <div class="sand-table-bottom" v-if="showPanel">
  106. <!-- <Ppanel
  107. title="利用小时"
  108. :data="riseNumber(gxkmap.bg_dxkyss)"
  109. :dataColor="gxkmap.bg_dxkyss < 0 ? '#f25656' : '#05BB4C'"
  110. :days="gxkmap.ydxkyss"
  111. :data1Icon="gxkmap.tb_dxkyss < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'"
  112. :data1IconClass="gxkmap.tb_dxkyss < 0 ? 'svg-icon-sm svg-icon-yellow' : 'svg-icon-sm svg-icon-green'"
  113. :data2Icon="gxkmap.hb_dxkyss < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'"
  114. :data2IconClass="gxkmap.hb_dxkyss < 0 ? 'svg-icon-sm svg-icon-yellow' : 'svg-icon-sm svg-icon-green'"
  115. ></Ppanel>
  116. <Ppanel title="设备可利用率"
  117. class="stb-p"
  118. :data="riseNumber(gxkmap.bg_sbklyl)"
  119. :dataColor="gxkmap.bg_sbklyl < 0 ? '#f25656' : '#05BB4C'"
  120. :days="gxkmap.ysbklyl"
  121. :data1Icon="gxkmap.hb_sbklyl < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'"
  122. :data1IconClass="gxkmap.hb_sbklyl < 0 ? 'svg-icon-sm svg-icon-yellow' : 'svg-icon-sm svg-icon-green'"
  123. :data2Icon="gxkmap.tb_sbklyl < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'"
  124. :data2IconClass="gxkmap.tb_sbklyl < 0 ? 'svg-icon-sm svg-icon-yellow' : 'svg-icon-sm svg-icon-green'"
  125. ></Ppanel>
  126. <Ppanel
  127. title="MTBF"
  128. class="stb-p"
  129. :data="riseNumber(gxkmap.bg_mtbf)"
  130. :dataColor="gxkmap.bg_mtbf < 0 ? '#f25656' : '#05BB4C'"
  131. :days="gxkmap.mtbf"
  132. :data1Icon="gxkmap.hb_mtbf < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'"
  133. :data1IconClass="gxkmap.hb_mtbf < 0 ? 'svg-icon-sm svg-icon-yellow' : 'svg-icon-sm svg-icon-green'"
  134. :data2Icon="gxkmap.tb_mtbf < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'"
  135. :data2IconClass="gxkmap.tb_mtbf < 0 ? 'svg-icon-sm svg-icon-yellow' : 'svg-icon-sm svg-icon-green'"
  136. ></Ppanel>
  137. <Ppanel
  138. title="MTTR"
  139. class="stb-p"
  140. :data="riseNumber(gxkmap.bg_mttr)"
  141. :dataColor="gxkmap.bg_mttr < 0 ? '#f25656' : '#05BB4C'"
  142. :days="gxkmap.mttr"
  143. :data1Icon="gxkmap.hb_mttr < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'"
  144. :data1IconClass="gxkmap.hb_mttr < 0 ? 'svg-icon-sm svg-icon-yellow' : 'svg-icon-sm svg-icon-green'"
  145. :data2Icon="gxkmap.tb_mttr < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'"
  146. :data2IconClass="gxkmap.tb_mttr < 0 ? 'svg-icon-sm svg-icon-yellow' : 'svg-icon-sm svg-icon-green'"
  147. ></Ppanel>
  148. <Ppanel
  149. title="MTTF"
  150. class="stb-p"
  151. :data="riseNumber(gxkmap.bg_mttf)"
  152. :dataColor="gxkmap.bg_mttf < 0 ? '#f25656' : '#05BB4C'"
  153. :days="gxkmap.mttf"
  154. :data1Icon="gxkmap.hb_mttf < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'"
  155. :data1IconClass="gxkmap.hb_mttf < 0 ? 'svg-icon-sm svg-icon-yellow' : 'svg-icon-sm svg-icon-green'"
  156. :data2Icon="gxkmap.tb_mttf < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'"
  157. :data2IconClass="gxkmap.tb_mttf < 0 ? 'svg-icon-sm svg-icon-yellow' : 'svg-icon-sm svg-icon-green'"
  158. ></Ppanel> -->
  159. <Ppanel
  160. title="利用小时"
  161. :data="riseNumber(gxkmap.bg_dxkyss)"
  162. :dataColor="gxkmap.bg_dxkyss < 0 ? '#f25656' : '#05BB4C'"
  163. :days="gxkmap.ydxkyss"
  164. :data1Icon="
  165. gxkmap.tb_dxkyss < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'
  166. "
  167. :data1IconClass="
  168. gxkmap.tb_dxkyss < 0
  169. ? 'svg-icon-sm svg-icon-yellow'
  170. : 'svg-icon-sm svg-icon-green'
  171. "
  172. :data2Icon="
  173. gxkmap.hb_dxkyss < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'
  174. "
  175. :data2IconClass="
  176. gxkmap.hb_dxkyss < 0
  177. ? 'svg-icon-sm svg-icon-yellow'
  178. : 'svg-icon-sm svg-icon-green'
  179. "
  180. ></Ppanel>
  181. <Ppanel
  182. title="设备可利用率"
  183. class="stb-p"
  184. :data="riseNumber(gxkmap.bg_sbklyl)"
  185. :dataColor="gxkmap.bg_sbklyl < 0 ? '#f25656' : '#05BB4C'"
  186. :days="gxkmap.ysbklyl"
  187. :data1Icon="
  188. gxkmap.hb_sbklyl < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'
  189. "
  190. :data1IconClass="
  191. gxkmap.hb_sbklyl < 0
  192. ? 'svg-icon-sm svg-icon-yellow'
  193. : 'svg-icon-sm svg-icon-green'
  194. "
  195. :data2Icon="
  196. gxkmap.tb_sbklyl < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'
  197. "
  198. :data2IconClass="
  199. gxkmap.tb_sbklyl < 0
  200. ? 'svg-icon-sm svg-icon-yellow'
  201. : 'svg-icon-sm svg-icon-green'
  202. "
  203. ></Ppanel>
  204. <Ppanel
  205. title="MTBF"
  206. class="stb-p"
  207. :data="riseNumber(gxkmap.bg_mtbf)"
  208. :dataColor="gxkmap.bg_mtbf < 0 ? '#f25656' : '#05BB4C'"
  209. :days="gxkmap.mtbf"
  210. :data1Icon="gxkmap.hb_mtbf < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'"
  211. :data1IconClass="
  212. gxkmap.hb_mtbf < 0
  213. ? 'svg-icon-sm svg-icon-yellow'
  214. : 'svg-icon-sm svg-icon-green'
  215. "
  216. :data2Icon="gxkmap.tb_mtbf < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'"
  217. :data2IconClass="
  218. gxkmap.tb_mtbf < 0
  219. ? 'svg-icon-sm svg-icon-yellow'
  220. : 'svg-icon-sm svg-icon-green'
  221. "
  222. ></Ppanel>
  223. <Ppanel
  224. title="MTTR"
  225. class="stb-p"
  226. :data="riseNumber(gxkmap.bg_mttr)"
  227. :dataColor="gxkmap.bg_mttr < 0 ? '#f25656' : '#05BB4C'"
  228. :days="gxkmap.mttr"
  229. :data1Icon="gxkmap.hb_mttr < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'"
  230. :data1IconClass="
  231. gxkmap.hb_mttr < 0
  232. ? 'svg-icon-sm svg-icon-yellow'
  233. : 'svg-icon-sm svg-icon-green'
  234. "
  235. :data2Icon="gxkmap.tb_mttr < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'"
  236. :data2IconClass="
  237. gxkmap.tb_mttr < 0
  238. ? 'svg-icon-sm svg-icon-yellow'
  239. : 'svg-icon-sm svg-icon-green'
  240. "
  241. ></Ppanel>
  242. <Ppanel
  243. title="MTTF"
  244. class="stb-p"
  245. :data="riseNumber(gxkmap.bg_mttf)"
  246. :dataColor="gxkmap.bg_mttf < 0 ? '#f25656' : '#05BB4C'"
  247. :days="gxkmap.mttf"
  248. :data1Icon="gxkmap.hb_mttf < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'"
  249. :data1IconClass="
  250. gxkmap.hb_mttf < 0
  251. ? 'svg-icon-sm svg-icon-yellow'
  252. : 'svg-icon-sm svg-icon-green'
  253. "
  254. :data2Icon="gxkmap.tb_mttf < 0 ? 'svg-arrow-dpwn-1' : 'svg-arrow-up-1'"
  255. :data2IconClass="
  256. gxkmap.tb_mttf < 0
  257. ? 'svg-icon-sm svg-icon-yellow'
  258. : 'svg-icon-sm svg-icon-green'
  259. "
  260. ></Ppanel>
  261. </div>
  262. <el-dialog
  263. top="50px"
  264. title="查看视频"
  265. :custom-class="videoDialogClass"
  266. v-model="showVideoDialog"
  267. width="80%"
  268. :destroy-on-close="true"
  269. :before-close="
  270. (done) => {
  271. videoDialogClass = 'modal animated a1 bounceOut';
  272. delaylyFn(450, done);
  273. }
  274. "
  275. @closed="
  276. dialogVideoUrl = '';
  277. videoDialogClass = 'modal animated a1 bounceIn';
  278. "
  279. >
  280. <iframe
  281. class="videoBoxiframe"
  282. width="95%"
  283. height="800px"
  284. :src="dialogVideoUrl"
  285. />
  286. </el-dialog>
  287. <el-dialog
  288. title="停机详情"
  289. :custom-class="tableDialogClass"
  290. v-model="showTableDialog"
  291. width="80%"
  292. :destroy-on-close="true"
  293. :before-close="
  294. (done) => {
  295. tableDialogClass = 'modal animated a1 fadeOutLeftBig';
  296. delaylyFn(450, done);
  297. }
  298. "
  299. @closed="
  300. dialogVideoUrl = '';
  301. tableDialogClass = 'modal animated a1 fadeInLeftBig';
  302. "
  303. >
  304. <el-form style="margin: 30px 0" label-width="120px" inline>
  305. <el-form-item label="风机ID" style="width: 45%; margin-bottom: 25px">
  306. <el-input v-model="tableItem.windTurbineId" readonly></el-input>
  307. </el-form-item>
  308. <el-form-item label="所属风场" style="width: 45%; margin-bottom: 25px">
  309. <el-input v-model="tableItem.wpName" readonly></el-input>
  310. </el-form-item>
  311. <el-form-item label="停机类型" style="width: 45%; margin-bottom: 25px">
  312. <el-input v-model="tableItem.statusName" readonly></el-input>
  313. </el-form-item>
  314. <el-form-item label="停机时间" style="width: 45%; margin-bottom: 25px">
  315. <el-input v-model="tableItem.stopTime" readonly></el-input>
  316. </el-form-item>
  317. <el-form-item label="恢复时间" style="width: 45%; margin-bottom: 25px">
  318. <el-input v-model="tableItem.startTime" readonly></el-input>
  319. </el-form-item>
  320. <el-form-item
  321. label="停机时长(小时)"
  322. style="width: 45%; margin-bottom: 25px"
  323. >
  324. <el-input v-model="tableItem.stopHours" readonly></el-input>
  325. </el-form-item>
  326. </el-form>
  327. </el-dialog>
  328. </div>
  329. </template>
  330. <script>
  331. import ThreeModel1 from "./component/ThreeModel1.vue";
  332. import PanelSand from "@com/coms/panel/panel-sand.vue";
  333. import PanelSandToolbar from "@com/coms/panel/panel-sand-toolbar.vue";
  334. import Weather from "./component/weather.vue";
  335. import StBack from "./component/st-back.vue";
  336. import Table from "@com/coms/table/table.vue";
  337. import RankTable from "./component/rank-table.vue";
  338. import Ppanel from "./component/p-panel.vue";
  339. import RadarPieChart from "@com/chart/pie/radar-pie-chart.vue";
  340. export default {
  341. // 名称
  342. name: "SandTable",
  343. // 使用组件
  344. components: {
  345. ThreeModel1,
  346. PanelSand,
  347. PanelSandToolbar,
  348. Weather,
  349. Table,
  350. RadarPieChart,
  351. StBack,
  352. RankTable,
  353. Ppanel,
  354. },
  355. // 数据
  356. data() {
  357. const that = this;
  358. return {
  359. videoShow: true,
  360. showPanel: false,
  361. exchangeBtn: false,
  362. exchangeBtn1: false,
  363. timmer1: null,
  364. showTableDialog: false,
  365. videoDialogClass: "modal animated a1 bounceIn",
  366. tableDialogClass: "modal animated a1 fadeInLeftBig",
  367. peopleClass: "",
  368. timeStr: "",
  369. wpId: "0",
  370. tqmap1: {},
  371. gxkmap: {},
  372. tableItem: {},
  373. mapSource: {},
  374. videoArray: [
  375. [
  376. {
  377. url: "http://10.155.32.4:9984/ws.html",
  378. token: "?token=SG01_48_TD&autoplay=true",
  379. switch: true,
  380. },
  381. {
  382. url: "http://10.155.32.4:9984/ws.html",
  383. token: "?token=SG01_48_TD&autoplay=true",
  384. switch: true,
  385. },
  386. ],
  387. [
  388. {
  389. url: "http://10.155.32.4:9984/ws.html",
  390. token: "?token=SG01_01_TD&autoplay=true",
  391. switch: true,
  392. },
  393. {
  394. url: "http://10.155.32.4:9984/ws.html",
  395. token: "?token=SG01_02_TD&autoplay=true",
  396. switch: true,
  397. },
  398. ],
  399. [
  400. {
  401. url: "http://10.155.32.4:9984/ws.html",
  402. token: "?token=SG01_03_TD&autoplay=true",
  403. switch: true,
  404. },
  405. {
  406. url: "http://10.155.32.4:9984/ws.html",
  407. token: "?token=SG01_04_TD&autoplay=true",
  408. switch: true,
  409. },
  410. ],
  411. ],
  412. showVideoDialog: false,
  413. dialogVideoUrl: "",
  414. ForecastPower: [
  415. {
  416. name: "今日预测电量",
  417. value: 103.62,
  418. total: 150,
  419. },
  420. {
  421. name: "月预测发电量",
  422. value: 98.62,
  423. total: 100,
  424. },
  425. ],
  426. workDataIndex: 0,
  427. workData: {
  428. column: [
  429. {
  430. name: "人员",
  431. field: "laborname",
  432. is_num: false,
  433. is_light: false,
  434. click(e, row) {
  435. that.changePeople(row.index);
  436. },
  437. },
  438. {
  439. name: "职务",
  440. field: "jobcode",
  441. is_num: false,
  442. is_light: false,
  443. click(e, row) {
  444. that.changePeople(row.index);
  445. },
  446. },
  447. {
  448. name: "开始时间",
  449. field: "starttime",
  450. width: "150px",
  451. is_num: false,
  452. is_light: false,
  453. click(e, row) {
  454. that.changePeople(row.index);
  455. },
  456. },
  457. {
  458. name: "原因",
  459. field: "problem",
  460. is_num: false,
  461. is_light: false,
  462. click(e, row) {
  463. that.changePeople(row.index);
  464. },
  465. },
  466. ],
  467. data: [],
  468. },
  469. levelTableData: {
  470. column: [
  471. {
  472. name: "编号",
  473. field: "no",
  474. },
  475. {
  476. name: "等级",
  477. field: "level",
  478. },
  479. {
  480. name: "分数",
  481. field: "score",
  482. },
  483. ],
  484. data: [
  485. {
  486. no: "MHS_A01",
  487. level: "AAA",
  488. score: 98,
  489. },
  490. {
  491. no: "MHS_A02",
  492. level: "AAA",
  493. score: 95,
  494. },
  495. {
  496. no: "MHS_A01",
  497. level: "AA",
  498. score: 94,
  499. },
  500. {
  501. no: "MHS_A02",
  502. level: "BB",
  503. score: 92,
  504. },
  505. {
  506. no: "MHS_A01",
  507. level: "BB",
  508. score: 90,
  509. },
  510. ],
  511. },
  512. sels: {
  513. column: [
  514. {
  515. name: "风机编号",
  516. field: "windTurbineId",
  517. },
  518. {
  519. name: "时间",
  520. field: "stopTime",
  521. },
  522. ],
  523. data: [],
  524. },
  525. };
  526. },
  527. // 函数
  528. methods: {
  529. openVideoDialog(item) {
  530. if (item.url && item.token) {
  531. this.dialogVideoUrl = item.url + item.token;
  532. this.showVideoDialog = true;
  533. }
  534. },
  535. getWtInfo() {
  536. let that = this;
  537. that.API.requestData({
  538. method: "POST",
  539. subUrl: "sandtable/findWtInfo",
  540. data: {
  541. wpId: that.wpId,
  542. },
  543. success(res) {
  544. console.log(11111, res);
  545. that.tqmap1 = res.data.tqmap1;
  546. res.data.sels.forEach((ele) => {
  547. ele.stopTime = new Date(ele.stopTime).formatDate(
  548. "yyyy-MM-dd hh:mm:ss"
  549. );
  550. ele.startTime = new Date(ele.stopTime).formatDate(
  551. "yyyy-MM-dd hh:mm:ss"
  552. );
  553. });
  554. that.sels.data = res.data.sels;
  555. that.gxkmap = res.data.gxkmap;
  556. },
  557. });
  558. },
  559. // 获取中部地图数据
  560. getWpHealthInfo() {
  561. let that = this;
  562. that.API.requestData({
  563. method: "POST",
  564. subUrl: "sandtable/judgeWpHealth",
  565. data: {
  566. wpId: that.wpId,
  567. },
  568. success(res) {
  569. that.mapSource = res.data;
  570. },
  571. });
  572. },
  573. // 获取中部地图数据
  574. getTop4Info() {
  575. let that = this;
  576. that.API.requestData({
  577. method: "GET",
  578. baseURL: "http://192.168.1.18:9988/",
  579. subUrl: "equoperationrecord/top4",
  580. data: {
  581. stId: that.wpId,
  582. },
  583. success(res) {
  584. res.data.forEach((ele, index) => {
  585. ele.index = index;
  586. });
  587. that.workData.data = res.data;
  588. },
  589. });
  590. },
  591. clickRow(row) {
  592. this.tableItem = row;
  593. this.showTableDialog = true;
  594. },
  595. delaylyFn(time, fn) {
  596. setTimeout(() => {
  597. fn();
  598. }, time);
  599. },
  600. riseNumber(number) {
  601. if (number < 0) {
  602. return (number - number * 2) / 100;
  603. } else {
  604. return number / 100;
  605. }
  606. },
  607. // 切换人员展示
  608. changePeople(index) {
  609. if (!this.peopleAnmLock && this.workDataIndex !== index) {
  610. this.peopleAnmLock = true;
  611. this.peopleClass = "fadeOutRight";
  612. setTimeout(() => {
  613. this.workDataIndex = index;
  614. this.peopleClass = "fadeInRight";
  615. this.peopleAnmLock = false;
  616. }, 150);
  617. }
  618. },
  619. when: function () {
  620. this.showPanel = true;
  621. },
  622. exchange: function () {
  623. this.exchangeBtn = !this.exchangeBtn;
  624. },
  625. exchange1: function () {
  626. this.exchangeBtn1 = !this.exchangeBtn1;
  627. },
  628. },
  629. // 生命周期钩子
  630. beforeCreate() {
  631. // 创建前
  632. },
  633. created() {
  634. this.getWtInfo();
  635. this.getWpHealthInfo();
  636. this.getTop4Info();
  637. this.timeStr = new Date().formatDate("MM-dd hh:mm");
  638. this.timmer1 = setInterval(() => {
  639. this.timeStr = new Date().formatDate("MM-dd hh:mm");
  640. });
  641. },
  642. beforeMount() {
  643. // 渲染前
  644. },
  645. mounted() {
  646. // 渲染后
  647. },
  648. beforeUpdate() {
  649. // 数据更新前
  650. },
  651. updated() {
  652. // 数据更新后
  653. },
  654. unmounted() {
  655. clearInterval(this.timmer1);
  656. this.timmer1 = null;
  657. },
  658. };
  659. </script>
  660. <style lang="less">
  661. .sand-table {
  662. width: 100%;
  663. height: 91.667vh;
  664. position: relative;
  665. .i3dback {
  666. position: fixed;
  667. z-index: -1;
  668. width: 100vw;
  669. height: 100vh;
  670. top: 0;
  671. left: 0;
  672. }
  673. .i3dcloud {
  674. position: absolute;
  675. z-index: 2;
  676. width: 100vw;
  677. height: 100vh;
  678. top: 0;
  679. left: 0;
  680. }
  681. .left-panel {
  682. width: 360px;
  683. }
  684. .right-panel {
  685. width: 36.852vh;
  686. }
  687. .three-model-layer {
  688. position: absolute;
  689. width: 100%;
  690. height: 100%;
  691. z-index: 1;
  692. }
  693. .sand-table-left {
  694. position: absolute;
  695. left: 0;
  696. top: 0;
  697. z-index: 2;
  698. }
  699. .sand-table-right {
  700. position: absolute;
  701. right: 0;
  702. top: 0;
  703. z-index: 2;
  704. }
  705. .sand-table-bottom {
  706. position: absolute;
  707. right: calc(50vw - 50.463vh);
  708. bottom: 0;
  709. z-index: 2;
  710. display: flex;
  711. .stb-p {
  712. margin-left: 0.926vh;
  713. }
  714. }
  715. .pre-img-box {
  716. display: flex;
  717. align-items: center;
  718. justify-content: center;
  719. margin-top: 0.556vh;
  720. padding: 0;
  721. position: relative;
  722. cursor: pointer;
  723. .sand-table-bottom {
  724. position: absolute;
  725. right: calc(50vw - 545px);
  726. bottom: 0;
  727. z-index: 2;
  728. display: flex;
  729. }
  730. .mask {
  731. position: absolute;
  732. left: 0;
  733. top: 0;
  734. width: 100%;
  735. height: 100%;
  736. z-index: 5;
  737. }
  738. .pre-img {
  739. position: relative;
  740. width: 95%;
  741. height: 8.657vh;
  742. z-index: 4;
  743. }
  744. }
  745. .person-info-box {
  746. display: flex;
  747. .header {
  748. width: 75px;
  749. }
  750. }
  751. .table {
  752. width: calc(100% + 2.963vh);
  753. margin-left: -1.481vh;
  754. margin-bottom: -1.481vh;
  755. tr {
  756. cursor: pointer;
  757. }
  758. .com-table thead tr th,
  759. .com-table tr td {
  760. padding: 0.556vh 0;
  761. color: #fff;
  762. }
  763. }
  764. .animated.a0 {
  765. animation-duration: 0.35s;
  766. }
  767. .animated.a1 {
  768. animation-duration: 0.5s;
  769. }
  770. .el-overlay {
  771. overflow: hidden;
  772. }
  773. }
  774. .exchange {
  775. cursor: pointer;
  776. }
  777. .videoBoxiframe {
  778. border: none;
  779. overflow: hidden;
  780. cursor: pointer;
  781. }
  782. .modal {
  783. animation-duration: 0;
  784. @keyframes dialog-fade-in {
  785. 0% {
  786. transform: translate3d(-1000%, -1000%, 0);
  787. opacity: 0;
  788. }
  789. 100% {
  790. transform: translate3d(-1000%, -1000%, 0);
  791. opacity: 1;
  792. }
  793. }
  794. @keyframes dialog-fade-out {
  795. 0% {
  796. // transform: translate3d(0, 0, 0);
  797. transform: translate3d(-1000%, -1000%, 0);
  798. opacity: 1;
  799. }
  800. 100% {
  801. // transform: translate3d(0, -100%, 0);
  802. transform: translate3d(-1000%, -1000%, 0);
  803. opacity: 0;
  804. }
  805. }
  806. }
  807. </style>