infotrack2.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996
  1. <template>
  2. <div class="track-info">
  3. <div class="form-info">
  4. <div class="work-flow">
  5. <div class="work-flow-line"></div>
  6. <div
  7. :class="['work-flow-item', item.name == statu(form) ? 'active' : '']"
  8. v-for="(item, i) in svgarr"
  9. :key="i"
  10. >
  11. <div class="work-flow-icon-item">
  12. <div class="work-flow-icon-o"></div>
  13. <div class="work-flow-icon-i"></div>
  14. <span class="svg-icon">
  15. <SvgIcon :svgid="item.svg"></SvgIcon>
  16. </span>
  17. </div>
  18. <div class="work-flow-text">{{ item.name }}</div>
  19. </div>
  20. </div>
  21. <div class="form-body">
  22. <el-form ref="form" :model="form" label-width="120px">
  23. <el-row>
  24. <el-col :span="12">
  25. <el-form-item label="风场:">
  26. <el-input
  27. v-model="form.wpName"
  28. placeholder="风场名称"
  29. readonly
  30. ></el-input>
  31. </el-form-item>
  32. </el-col>
  33. <el-col :span="12">
  34. <el-form-item label="风机:">
  35. <el-input
  36. v-model="form.wtId"
  37. placeholder="风机名称"
  38. readonly
  39. ></el-input>
  40. </el-form-item>
  41. </el-col>
  42. </el-row>
  43. <el-row>
  44. <el-col :span="12">
  45. <el-form-item label="推荐检修时间:">
  46. <el-input
  47. v-model="form.tjss"
  48. placeholder="推荐检修时间"
  49. readonly
  50. ></el-input>
  51. <!-- <el-date-picker v-model="form.tjjxsj" type="datetime" placeholder="推荐检修时间" popper-class="date-select"></el-date-picker> -->
  52. </el-form-item>
  53. </el-col>
  54. <el-col :span="12">
  55. <el-form-item label="预计检修风速:">
  56. <el-input
  57. v-model="form.tjfs"
  58. placeholder="预计检修风速"
  59. readonly
  60. ></el-input>
  61. </el-form-item>
  62. </el-col>
  63. </el-row>
  64. <el-row>
  65. <el-col :span="24">
  66. <el-form-item label="推荐理由:">
  67. <el-input
  68. type="textarea"
  69. resize="none"
  70. :rows="3"
  71. v-model="form.description"
  72. placeholder="推荐理由"
  73. readonly
  74. ></el-input>
  75. </el-form-item>
  76. </el-col>
  77. </el-row>
  78. <el-row>
  79. <el-col :span="12">
  80. <el-form-item label="下单时间:">
  81. <el-input
  82. v-model="form.prodtdepttime"
  83. placeholder="下单时间"
  84. readonly
  85. ></el-input>
  86. </el-form-item>
  87. </el-col>
  88. <el-col :span="12">
  89. <el-form-item label="主要负责人:">
  90. <el-input
  91. v-model="form.workleader"
  92. placeholder="主要负责人"
  93. readonly
  94. ></el-input>
  95. </el-form-item>
  96. </el-col>
  97. </el-row>
  98. <el-row>
  99. <el-col :span="12">
  100. <el-form-item label="出发时间:">
  101. <el-input
  102. v-model="form.departuretime"
  103. placeholder="出发时间"
  104. readonly
  105. ></el-input>
  106. </el-form-item>
  107. </el-col>
  108. <el-col :span="12">
  109. <el-form-item label="到达时间:">
  110. <el-input
  111. v-model="form.arrivaltime"
  112. placeholder="到达时间"
  113. readonly
  114. ></el-input>
  115. </el-form-item>
  116. </el-col>
  117. </el-row>
  118. <el-row>
  119. <el-col :span="24">
  120. <el-form-item label="排查方法:">
  121. <el-input
  122. type="textarea"
  123. resize="none"
  124. :rows="3"
  125. v-model="form.gzpc"
  126. placeholder="排查方法"
  127. readonly
  128. ></el-input>
  129. </el-form-item>
  130. </el-col>
  131. </el-row>
  132. <el-row>
  133. <el-col :span="24">
  134. <el-form-item label="处理方法:">
  135. <el-input
  136. type="textarea"
  137. resize="none"
  138. :rows="3"
  139. v-model="form.repairedcomment"
  140. placeholder="处理方法"
  141. readonly
  142. ></el-input>
  143. </el-form-item>
  144. </el-col>
  145. </el-row>
  146. <el-row>
  147. <el-col :span="12">
  148. <el-form-item label="消缺时间:">
  149. <el-input
  150. v-model="form.repairedtime"
  151. placeholder="消缺时间"
  152. readonly
  153. ></el-input>
  154. </el-form-item>
  155. </el-col>
  156. <el-col :span="12">
  157. <el-form-item label="故障时长:">
  158. <el-input
  159. v-model="form.degradebugtype"
  160. placeholder="故障时长"
  161. readonly
  162. ></el-input>
  163. </el-form-item>
  164. </el-col>
  165. </el-row>
  166. <el-row>
  167. <el-col :span="12">
  168. <el-form-item label="验收人:">
  169. <el-input
  170. v-model="form.checkdeptlabornum"
  171. placeholder="验收人"
  172. readonly
  173. ></el-input>
  174. </el-form-item>
  175. </el-col>
  176. <el-col :span="12">
  177. <el-form-item label="验收时间:">
  178. <el-input
  179. v-model="form.checktime"
  180. placeholder="验收时间"
  181. readonly
  182. ></el-input>
  183. </el-form-item>
  184. </el-col>
  185. </el-row>
  186. <el-row>
  187. <el-col :span="24">
  188. <el-form-item label="验收意见:">
  189. <el-input
  190. type="textarea"
  191. resize="none"
  192. :rows="3"
  193. v-model="form.checkdeptopinion"
  194. placeholder="验收意见"
  195. readonly
  196. ></el-input>
  197. </el-form-item>
  198. </el-col>
  199. </el-row>
  200. </el-form>
  201. </div>
  202. </div>
  203. <div class="evaluate">
  204. <div class="white">评价</div>
  205. <div
  206. class="evaluate-item"
  207. :class="form.rwfpsc > form.rwfppjsc ? ' warColor' : ''"
  208. >
  209. <div class="evaluate-label">任务分配时长</div>
  210. <el-input
  211. v-model="form.rwfpsc"
  212. style="width: 62px; text-align: center"
  213. placeholder=""
  214. readonly
  215. ></el-input>
  216. <div class="evaluate-unit">min</div>
  217. </div>
  218. <div class="evaluate-item">
  219. <div class="evaluate-label">任务分配平均时长</div>
  220. <el-input
  221. v-model="form.rwfppjsc"
  222. style="width: 62px; text-align: center"
  223. placeholder=""
  224. readonly
  225. ></el-input>
  226. <div class="evaluate-unit">min</div>
  227. </div>
  228. <div
  229. class="evaluate-item"
  230. :class="form.ddxcsc > form.ddxcpjsc ? ' warColor' : ''"
  231. >
  232. <div class="evaluate-label">到达现场时长</div>
  233. <el-input
  234. v-model="form.ddxcsc"
  235. style="width: 62px; text-align: center"
  236. placeholder=""
  237. readonly
  238. ></el-input>
  239. <div class="evaluate-unit">min</div>
  240. </div>
  241. <div class="evaluate-item">
  242. <div class="evaluate-label">到达现场平均时长</div>
  243. <el-input
  244. v-model="form.ddxcpjsc"
  245. style="width: 62px; text-align: center"
  246. placeholder=""
  247. readonly
  248. ></el-input>
  249. <div class="evaluate-unit">min</div>
  250. </div>
  251. <div
  252. class="evaluate-item"
  253. :class="form.qxclsc > form.qxclpjsc ? ' warColor' : ''"
  254. >
  255. <div class="evaluate-label">缺陷处理时长</div>
  256. <el-input
  257. v-model="form.qxclsc"
  258. style="width: 62px; text-align: center"
  259. placeholder=""
  260. readonly
  261. ></el-input>
  262. <div class="evaluate-unit">min</div>
  263. </div>
  264. <div class="evaluate-item">
  265. <div class="evaluate-label">缺陷处理平均时长</div>
  266. <el-input
  267. v-model="form.qxclpjsc"
  268. style="width: 62px; text-align: center"
  269. placeholder=""
  270. readonly
  271. ></el-input>
  272. <div class="evaluate-unit">min</div>
  273. </div>
  274. <div
  275. class="evaluate-item"
  276. :class="form.yssc > form.yspjsc ? ' warColor' : ''"
  277. >
  278. <div class="evaluate-label">验收时长</div>
  279. <el-input
  280. v-model="form.yssc"
  281. style="width: 62px; text-align: center"
  282. placeholder=""
  283. readonly
  284. ></el-input>
  285. <div class="evaluate-unit">min</div>
  286. </div>
  287. <div class="evaluate-item">
  288. <div class="evaluate-label">验收平均时长</div>
  289. <el-input
  290. v-model="form.yspjsc"
  291. style="width: 62px; text-align: center"
  292. placeholder=""
  293. readonly
  294. ></el-input>
  295. <div class="evaluate-unit">min</div>
  296. </div>
  297. </div>
  298. <div class="tabs">
  299. <div class="tab-box">
  300. <div
  301. class="tab-item"
  302. v-for="(tab, index) of tabs"
  303. :key="index"
  304. :class="{ active: activeTab == index }"
  305. @click="selectTab(tab, index)"
  306. >
  307. <span
  308. class="svg-icon svg-icon-md"
  309. :class="activeTab == index ? 'svg-icon-green' : 'svg-icon-write'"
  310. >
  311. <SvgIcon :svgid="tab.icon"></SvgIcon>
  312. </span>
  313. <span>{{ tab.text }}</span>
  314. </div>
  315. </div>
  316. </div>
  317. <defect-elimination-tracking
  318. ref="det"
  319. :show="false"
  320. :formdata="formdata"
  321. ></defect-elimination-tracking>
  322. <div class="dialog-box">
  323. <el-dialog
  324. title="消缺历史"
  325. v-model="dialogVisible"
  326. width="1200px"
  327. height="800px"
  328. custom-class="modal"
  329. :close-on-click-modal="false"
  330. >
  331. <div class="diamain">
  332. <div class="left">
  333. <el-tree
  334. :data="data"
  335. :props="defaultProps"
  336. node-key="id"
  337. :default-expand-all="true"
  338. custom-class="modal"
  339. @node-click="handleNodeClick"
  340. ></el-tree>
  341. </div>
  342. <div class="right">
  343. <div class="table-box">
  344. <ComTable :data="tableData" height="700px"></ComTable>
  345. </div>
  346. </div>
  347. </div>
  348. </el-dialog>
  349. </div>
  350. <el-dialog
  351. title="查看监控视频"
  352. v-model="videoBoxShow"
  353. width="80%"
  354. height="800px"
  355. custom-class="modal"
  356. :close-on-click-modal="true"
  357. >
  358. <video
  359. class="videoPlayer"
  360. id="videoPlayer"
  361. muted
  362. autoplay
  363. webkit-playsinline
  364. playsinline
  365. ></video>
  366. </el-dialog>
  367. <el-dialog
  368. title="GIS地貌"
  369. v-model="gisBoxShow"
  370. top="100px"
  371. width="95%"
  372. custom-class="modal gisBox"
  373. :close-on-click-modal="true"
  374. >
  375. <iframe
  376. width="100%"
  377. height="100%"
  378. src="http://10.155.32.4:8070/gisweb/ditujiankang.html?LAT=106.23507&LNG=38.48989&userid=1500"
  379. sryle="width:100%;height:100%;"
  380. ></iframe>
  381. </el-dialog>
  382. </div>
  383. </template>
  384. <script>
  385. import ComTable from "@com/coms/table/table.vue";
  386. import SvgIcon from "@com/coms/icon/svg-icon.vue";
  387. import DefectEliminationTracking from "../HealthControl/defect-elimination-tracking.vue"; //手环监控
  388. import $ from "jquery";
  389. export default {
  390. components: {
  391. SvgIcon,
  392. ComTable,
  393. DefectEliminationTracking,
  394. },
  395. props: {
  396. formdata: Object,
  397. },
  398. data() {
  399. return {
  400. gisBoxShow: false,
  401. videoBoxShow: false,
  402. location: "",
  403. tableData: {
  404. column: [
  405. {
  406. name: "消缺描述",
  407. field: "xqms",
  408. is_light: false,
  409. },
  410. {
  411. name: "消缺人员",
  412. field: "xqry",
  413. is_light: false,
  414. },
  415. {
  416. name: "消缺时间",
  417. field: "xqsj",
  418. is_light: false,
  419. },
  420. {
  421. name: "更换部件",
  422. field: "ghbj",
  423. is_light: false,
  424. },
  425. {
  426. name: "更换原因",
  427. field: "ghyy",
  428. is_light: false,
  429. },
  430. {
  431. name: "更换数量",
  432. field: "ghsl",
  433. is_light: false,
  434. },
  435. ],
  436. data: [],
  437. },
  438. data: [
  439. {
  440. label: "一级 1",
  441. children: [
  442. {
  443. label: "二级 1-1",
  444. children: [
  445. {
  446. label: "三级 1-1-1",
  447. },
  448. ],
  449. },
  450. ],
  451. },
  452. {
  453. label: "一级 2",
  454. children: [
  455. {
  456. label: "二级 2-1",
  457. children: [
  458. {
  459. label: "三级 2-1-1",
  460. },
  461. ],
  462. },
  463. {
  464. label: "二级 2-2",
  465. children: [
  466. {
  467. label: "三级 2-2-1",
  468. },
  469. ],
  470. },
  471. ],
  472. },
  473. {
  474. label: "一级 3",
  475. children: [
  476. {
  477. label: "二级 3-1",
  478. children: [
  479. {
  480. label: "三级 3-1-1",
  481. },
  482. ],
  483. },
  484. {
  485. label: "二级 3-2",
  486. children: [
  487. {
  488. label: "三级 3-2-1",
  489. },
  490. ],
  491. },
  492. ],
  493. },
  494. ],
  495. defaultProps: {
  496. children: "children",
  497. label: "label",
  498. },
  499. dialogVisible: false,
  500. tabs: [
  501. {
  502. icon: "svg-gis",
  503. text: "GIS地貌",
  504. },
  505. {
  506. icon: "svg-jkp",
  507. text: "手环监控",
  508. },
  509. {
  510. icon: "svg-jk",
  511. text: "监控视频",
  512. },
  513. {
  514. icon: "svg-jk",
  515. text: "消缺历史",
  516. },
  517. ],
  518. activeTab: 0,
  519. svgarr: [
  520. {
  521. svg: "svg-qx-warn",
  522. name: "流程未启动",
  523. },
  524. {
  525. svg: "svg-qx-down",
  526. name: "消缺单已下达",
  527. },
  528. {
  529. svg: "svg-qx-hour-hand",
  530. name: "消缺单处理中",
  531. },
  532. {
  533. svg: "svg-对",
  534. name: "消缺完成",
  535. },
  536. {
  537. svg: "svg-qx-flag",
  538. name: "消缺验收",
  539. },
  540. ],
  541. form: {
  542. wtId: "",
  543. wpId: "",
  544. wpName: "",
  545. tjyy: "",
  546. tjss: null,
  547. tjfs: null,
  548. bugnum: null,
  549. workgroup1: null,
  550. findlabornum: null,
  551. reportlabornum: null,
  552. description: null,
  553. departuretime: null,
  554. arrivaltime: null,
  555. prodtdeptopinion: null,
  556. workleader: null,
  557. repairedtime: null,
  558. repairedcomment: null,
  559. unresolvedbug: null,
  560. checktime: null,
  561. degradebugtype: null,
  562. repairdeptbugtype1: null,
  563. checkdeptlabornum: null,
  564. status: null,
  565. gzpc: null,
  566. gzjx: null,
  567. prodtdepttime: null,
  568. checkdeptopinion: null,
  569. },
  570. videoConfigHost: "10.155.32.4:9984", // 视频 host
  571. // videoConfigHost: 'localhost:9984', // 视频 host
  572. videoConfigToken: "stream-1", // 视频 token
  573. videoConfigStreamprofile: "Profile_1", // 视频流文件
  574. videoPlayer: null, // 视频播放实例
  575. };
  576. },
  577. created() {
  578. this.setData();
  579. },
  580. updated() {
  581. this.setData();
  582. },
  583. onmounted() {
  584. this.cancelPlay();
  585. },
  586. // 函数
  587. methods: {
  588. setData() {
  589. this.form = this.formdata;
  590. this.form.tjss = this.form.tjss
  591. ? new Date(this.form.tjss).formatDate("yyyy-MM-dd hh:mm:ss")
  592. : null;
  593. this.form.prodtdepttime = this.form.prodtdepttime
  594. ? new Date(this.form.prodtdepttime).formatDate("yyyy-MM-dd hh:mm:ss")
  595. : null;
  596. this.form.departuretime = this.form.departuretime
  597. ? new Date(this.form.departuretime).formatDate("yyyy-MM-dd hh:mm:ss")
  598. : null;
  599. this.form.arrivaltime = this.form.arrivaltime
  600. ? new Date(this.form.arrivaltime).formatDate("yyyy-MM-dd hh:mm:ss")
  601. : null;
  602. this.form.repairedtime = this.form.repairedtime
  603. ? new Date(this.form.repairedtime).formatDate("yyyy-MM-dd hh:mm:ss")
  604. : null;
  605. this.form.checktime = this.form.checktime
  606. ? new Date(this.form.checktime).formatDate("yyyy-MM-dd hh:mm:ss")
  607. : null;
  608. },
  609. handleNodeClick(data) {
  610. this.location = data.id;
  611. this.searchTab(data.id);
  612. },
  613. DateformatDate(val) {
  614. return new Date(val).formatDate("yyyy-MM-dd hh:mm:ss");
  615. },
  616. showDet() {
  617. this.$refs.det.show();
  618. },
  619. statu(data) {
  620. if (null != data.checktime) {
  621. return "消缺验收";
  622. } else if (
  623. "等待运行验收" == data.status ||
  624. data.status == "集控中心修改检修时间" ||
  625. null != data.repairedtime
  626. ) {
  627. return "消缺完成";
  628. } else if (null != data.departuretime || null != data.arrivaltime) {
  629. return "消缺单处理中";
  630. } else if (
  631. "风机工作票已批准" == data.status ||
  632. data.status == "开风机工作票"
  633. ) {
  634. return "消缺单已下达";
  635. } else if (
  636. null == data.status ||
  637. data.status == "流程未启动" ||
  638. data.status == "流程未启用"
  639. ) {
  640. return "流程未启动";
  641. } else {
  642. return "流程未启动";
  643. }
  644. },
  645. async searchH() {
  646. const { data } = await this.API.requestData({
  647. method: "POST",
  648. subUrl: "/recommen/findLocationTreeByWtId",
  649. data: {
  650. wtId: this.form.wtId,
  651. },
  652. });
  653. this.dialogVisible = true;
  654. this.data = data.data;
  655. this.location = data.data[0].id;
  656. this.searchTab();
  657. },
  658. async searchTab() {
  659. const { data } = await this.API.requestData({
  660. method: "POST",
  661. subUrl: "/recommen/findWobugeqByLocation",
  662. data: {
  663. tablepar: {
  664. pageNum: 1,
  665. pageSize: 10,
  666. },
  667. location: this.location,
  668. },
  669. });
  670. this.tableData.data = data.data;
  671. console.log(123123,data)
  672. },
  673. showVideoBox() {
  674. this.videoBoxShow = true;
  675. this.$nextTick(() => {
  676. this.listenEvent();
  677. this.resetVideo();
  678. });
  679. },
  680. // 销毁播放实例
  681. cancelPlay() {
  682. $(".videoPlayer").attr("poster", "").attr("src", "");
  683. this.videoPlayer &&
  684. this.videoPlayer.disconnect() &&
  685. (this.videoPlayer = null);
  686. },
  687. // 监听视频被暂停和被播放
  688. listenEvent() {
  689. let that = this;
  690. //判断设备
  691. if (H5siOS() === true || H5sSafariBrowser() === true) {
  692. $(".videoPlayer").prop("controls", true);
  693. }
  694. //如果是暂停状态,就让它开始;如果是开始就让他暂停。每次开始之前都先清空参数
  695. $(".videoPlayer").on("click", function () {
  696. if ($(this).get(0).paused) {
  697. that.resetVideo();
  698. } else {
  699. that.videoPlayer.disconnect();
  700. $(this).get(0).pause();
  701. this.BASE.showMsg({
  702. type: "success",
  703. msg: "暂停播放",
  704. });
  705. }
  706. });
  707. },
  708. // 重置视频播放状态
  709. resetVideo() {
  710. this.$nextTick(() => {
  711. let videoConfig = {
  712. videoid: "videoPlayer", //跟上面video标签的id一致
  713. protocol: "http:", //'http:' or 'https:'
  714. host: this.videoConfigHost, //'localhost:8080'自己内部的网址
  715. rootpath: "/", // '/' or window.location.pathname
  716. token: this.videoConfigToken, //可变参数
  717. // streamprofile: this.videoConfigStreamprofile, // {string} - stream profile, main/sub or other predefine transcoding profile
  718. hlsver: "v1", //v1 is for ts, v2 is for fmp4
  719. session: "e312287e-d809-4b4b-a5d6-336e5006199f", //session got from login可变参数
  720. };
  721. this.cancelPlay();
  722. this.videoPlayer = new H5sPlayerRTC(videoConfig);
  723. this.videoPlayer.connect();
  724. this.BASE.showMsg({
  725. type: "success",
  726. msg: "播放组件初始化中...请稍后...",
  727. });
  728. });
  729. },
  730. selectTab: function (tab, index) {
  731. this.activeTab = index;
  732. if (index === 0) {
  733. this.gisBoxShow = true;
  734. } else if (index == 1) {
  735. this.showDet();
  736. } else if (index === 2) {
  737. this.showVideoBox();
  738. }
  739. if (tab.text == "消缺历史") {
  740. this.searchH();
  741. }
  742. },
  743. },
  744. };
  745. </script>
  746. <style lang="less">
  747. .diamain {
  748. width: 100%;
  749. height: 700px;
  750. overflow: hidden;
  751. display: flex;
  752. justify-content: space-between;
  753. .left {
  754. width: 30%;
  755. height: 100%;
  756. background: rgba(96, 103, 105, 0.2);
  757. overflow-y: auto;
  758. }
  759. .right {
  760. width: 68%;
  761. }
  762. }
  763. .track-info {
  764. display: flex;
  765. .form-info {
  766. flex: 0 0 720px;
  767. .work-flow {
  768. height: 132px;
  769. width: 100%;
  770. background: fade(@gray, 20);
  771. margin-bottom: 8px;
  772. padding: 26px 69px;
  773. display: flex;
  774. position: relative;
  775. .work-flow-line {
  776. position: absolute;
  777. width: 600px;
  778. height: 4px;
  779. left: calc(50% - 300px);
  780. top: calc(50% - 11px);
  781. background: @green;
  782. }
  783. .work-flow-item {
  784. flex: 1;
  785. display: flex;
  786. flex-direction: column;
  787. align-items: center;
  788. justify-content: center;
  789. &.active {
  790. .work-flow-icon-item {
  791. .work-flow-icon-o {
  792. border: 1px solid @green;
  793. opacity: 0.4;
  794. }
  795. .work-flow-icon-i {
  796. border: 2px solid @green;
  797. background: linear-gradient(
  798. to bottom,
  799. #1f2b2b 0%,
  800. #1f2b2b 20%,
  801. @green 100%
  802. );
  803. }
  804. .svg-icon {
  805. svg {
  806. use {
  807. fill: @green;
  808. }
  809. }
  810. }
  811. }
  812. .work-flow-text {
  813. color: @green;
  814. }
  815. }
  816. .work-flow-icon-item {
  817. width: 60px;
  818. height: 60px;
  819. position: relative;
  820. .work-flow-icon-o {
  821. position: absolute;
  822. top: 0;
  823. left: 0;
  824. width: 60px;
  825. height: 60px;
  826. border-radius: 50%;
  827. border: 1px solid #b3bdc0;
  828. opacity: 0.4;
  829. }
  830. .work-flow-icon-m {
  831. position: absolute;
  832. top: 1px;
  833. left: 1px;
  834. width: 59px;
  835. height: 59px;
  836. border-radius: 50%;
  837. border: 4px solid #212b2b;
  838. }
  839. .work-flow-icon-i {
  840. position: absolute;
  841. top: 5px;
  842. left: 5px;
  843. width: 50px;
  844. height: 50px;
  845. border-radius: 50%;
  846. border: 2px solid #606769;
  847. background: linear-gradient(
  848. to bottom,
  849. #1f2b2b 0%,
  850. #1f2b2b 20%,
  851. #606769 100%
  852. );
  853. }
  854. .svg-icon {
  855. position: absolute;
  856. width: 26px;
  857. height: 26px;
  858. top: calc(50% - 10px);
  859. left: calc(50% - 13px);
  860. svg {
  861. width: 26px;
  862. height: 26px;
  863. use {
  864. fill: @gray-l;
  865. }
  866. }
  867. }
  868. }
  869. .work-flow-text {
  870. color: @gray-l;
  871. margin-top: 8px;
  872. font-size: @fontsize-s;
  873. }
  874. }
  875. }
  876. }
  877. .evaluate {
  878. flex: 0 0 240px;
  879. margin-left: 30px;
  880. .evaluate-item {
  881. display: flex;
  882. justify-content: space-between;
  883. align-items: center;
  884. margin-top: 8px;
  885. .el-input__inner {
  886. text-align: center;
  887. }
  888. .evaluate-label {
  889. width: 120px;
  890. text-align: right;
  891. }
  892. .evaluate-label,
  893. .evaluate-unit {
  894. font-size: @fontsize;
  895. color: @gray-l;
  896. }
  897. .input-number {
  898. display: inline-block;
  899. width: 62px;
  900. margin: 0 16px;
  901. }
  902. }
  903. }
  904. .tabs {
  905. flex: 0 0 200px;
  906. height: 619px;
  907. margin-left: 20px;
  908. border-left: 1px solid #53626833;
  909. .tab-box {
  910. margin: 1.852vh 2.778vh;
  911. display: inline-block;
  912. z-index: 2;
  913. position: relative;
  914. margin: 26px 0 0 20px;
  915. .tab-item {
  916. display: flex;
  917. align-items: center; // justify-content: center;
  918. font-size: @fontsize-l;
  919. cursor: pointer; // width: 120px;
  920. padding: 8px;
  921. margin-bottom: 16px;
  922. &.active {
  923. color: @green;
  924. position: relative;
  925. background-image: @greenLinearTop;
  926. &::after {
  927. content: "";
  928. position: absolute;
  929. width: 100%;
  930. height: 5px;
  931. border: 1px solid @green;
  932. border-top: 0;
  933. left: 0;
  934. bottom: 0;
  935. box-sizing: border-box;
  936. }
  937. }
  938. .svg-icon {
  939. margin-right: 16px;
  940. }
  941. }
  942. }
  943. }
  944. }
  945. .videoPlayer {
  946. width: 100%;
  947. height: 100%;
  948. object-fit: contain;
  949. cursor: pointer;
  950. }
  951. </style>
  952. <style lang="less">
  953. .evaluate {
  954. .evaluate-item {
  955. .el-input__inner {
  956. padding: 0 15px;
  957. text-align: center;
  958. }
  959. }
  960. .evaluate-item.warColor {
  961. .el-input__inner {
  962. color: #f25656;
  963. }
  964. }
  965. }
  966. .gisBox {
  967. .el-dialog__body {
  968. height: 800px;
  969. }
  970. }
  971. </style>