BasicInformationDetail.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937
  1. <template>
  2. <div class="firstdiv">
  3. <el-row>
  4. <el-col :span="12">
  5. <StandAloneImg :activeIndex="showIndex" @selectSvg="selectSvg" class="sai"></StandAloneImg>
  6. </el-col>
  7. <el-col :span="12" class="rights">
  8. <div class="marks" v-if="healthInfo.bj">
  9. <div class="healthInfo">健康指数:</div>
  10. <div class="healthTable" v-if="healthInfo.other">
  11. <div class="healthTitle">
  12. <div class="name">名称</div>
  13. <div class="level">等级</div>
  14. <div class="times">重要报警次数</div>
  15. <div class="times">一般报警次数</div>
  16. </div>
  17. <div :class="showIndex===3?'healthContent_on':'healthContent'" @click="chooseInfo(3)">
  18. <div class="contentName">变桨</div>
  19. <el-rate class="starLevel" v-model="healthInfo.bj.star" disabled :max="max" void-color="#141414"
  20. text-color="#E8A20D">
  21. </el-rate>
  22. <div class="contentTimes">{{healthInfo.bj.heightCount}}</div>
  23. <div class="contentTimess">{{healthInfo.bj.lowCount}}</div>
  24. </div>
  25. <div :class="showIndex===2?'healthContent_on':'healthContent'" @click="chooseInfo(2)">
  26. <div class="contentName">齿轮箱</div>
  27. <el-rate class="starLevel" v-model="healthInfo.clx.star" disabled :max="max" void-color="#242424"
  28. text-color="#E8A20D">
  29. </el-rate>
  30. <div class="contentTimes">{{healthInfo.clx.heightCount}}</div>
  31. <div class="contentTimess">{{healthInfo.clx.lowCount}}</div>
  32. </div>
  33. <div :class="showIndex===1?'healthContent_on':'healthContent'" @click="chooseInfo(1)">
  34. <div class="contentName">发电机</div>
  35. <el-rate class="starLevel" v-model="healthInfo.fdj.star" disabled :max="max" void-color="#141414"
  36. text-color="#E8A20D">
  37. </el-rate>
  38. <div class="contentTimes">{{healthInfo.fdj.heightCount}}</div>
  39. <div class="contentTimess">{{healthInfo.fdj.lowCount}}</div>
  40. </div>
  41. <div :class="showIndex===5?'healthContent_on':'healthContent'" @click="chooseInfo(5)">
  42. <div class="contentName">液压</div>
  43. <el-rate class="starLevel" v-model="healthInfo.yy.star" disabled :max="max" void-color="#141414"
  44. text-color="#E8A20D">
  45. </el-rate>
  46. <div class="contentTimes">{{healthInfo.yy.heightCount}}</div>
  47. <div class="contentTimess">{{healthInfo.yy.lowCount}}</div>
  48. </div>
  49. <div :class="showIndex===4?'healthContent_on':'healthContent'" @click="chooseInfo(4)">
  50. <div class="contentName">偏航</div>
  51. <el-rate class="starLevel" v-model="healthInfo.ph.star" disabled :max="max" void-color="#141414"
  52. text-color="#E8A20D">
  53. </el-rate>
  54. <div class="contentTimes">{{healthInfo.ph.heightCount}}</div>
  55. <div class="contentTimess">{{healthInfo.ph.lowCount}}</div>
  56. </div>
  57. <div :class="showIndex===6?'healthContent_on':'healthContent'">
  58. <div class="contentName">其他</div>
  59. <el-rate class="starLevel" v-model="healthInfo.other.star" disabled :max="max" void-color="#141414"
  60. text-color="#E8A20D">
  61. </el-rate>
  62. <div class="contentTimes">{{healthInfo.other.heightCount}}</div>
  63. <div class="contentTimess">{{healthInfo.other.lowCount}}</div>
  64. </div>
  65. </div>
  66. </div>
  67. <div class="showDate">
  68. <!-- <div class="label">
  69. <div class="title">标注信息:</div>
  70. <el-autocomplete @blur="labelChange(state1)" class="inputs" v-model="state1"
  71. :fetch-suggestions="querySearch" placeholder="请输入内容" @select="handleSelect" style="width: 174px">
  72. </el-autocomplete>
  73. </div> -->
  74. <div class="label1">
  75. <div class="title">挂牌信息:</div>
  76. <!-- <div>挂牌原因</div> -->
  77. <el-select filterable allow-create default-first-option @change="listedChange(value)" class="inputs"
  78. v-model="selectValue" placeholder="请选择">
  79. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
  80. </el-option>
  81. </el-select>
  82. </div>
  83. </div>
  84. <div class="label">
  85. <div class="button" v-if="types === 2" @click="sendCommand({controlType:'1' })">启动</div>
  86. <div class="button" v-if="types === 4" @click="sendCommand({controlType:'2' })">停机</div>
  87. <div class="button" v-if="types === 0 ||types === 5 " @click="sendCommand({controlType:'5' })">
  88. 复位</div>
  89. <div class="button" v-if="types === 2" @click="sendCommand({controlType:'6' })">维护</div>
  90. <div class="button" v-if="types === 6" @click="sendCommand({controlType:'8' })">取消维护</div>
  91. <div class="button" v-if="selectValue !==''" @click="sendLock({value: 'UnLock' })">取消挂牌
  92. </div>
  93. </div>
  94. </el-col>
  95. </el-row>
  96. <el-row class="datas">
  97. <el-col :span="12">
  98. <div class="dataList">
  99. <div class="dataTitle">
  100. <div style="margin-left: 24px;">部件主要参数</div>
  101. </div>
  102. <div class="dataContent" @dblclick="dbClicks()">
  103. <div class="dataBlock" v-for="(item,index) in showData" :key="index">
  104. <div class="dataName">{{item.name}}</div>
  105. <div class="numerical">
  106. <div class="values">{{item.value}}</div>
  107. <div class="unit">{{item.unit}}</div>
  108. </div>
  109. </div>
  110. </div>
  111. </div>
  112. </el-col>
  113. <el-col :span="12">
  114. <div class="dataLists">
  115. <div class="dataTitle">
  116. <div style="margin-left: 24px;">报警记录</div>
  117. </div>
  118. <el-scrollbar class="scorll">
  119. <el-table stripe="true" border-color="#141414" :data="warning" style="width: 100%" :header-cell-style="{
  120. background: '#141414',
  121. color: '#B3B3B3',
  122. 'border-bottom':'solid 1px #242424',
  123. 'text-align':'center'
  124. }"
  125. :cell-style="{ background: '#141414', color: '#B3B3B3', 'border-bottom': 'solid 1px #242424','text-align':'center' }">
  126. <el-table-column prop="time" label="时间" width="220">
  127. </el-table-column>
  128. <el-table-column prop="alertText" label="故障信息" width="280">
  129. </el-table-column>
  130. <el-table-column prop="rankName" label="故障级别">
  131. </el-table-column>
  132. </el-table>
  133. </el-scrollbar>
  134. </div>
  135. </el-col>
  136. </el-row>
  137. <BasicDataDetails @closed="closeds()" v-model="display"></BasicDataDetails>
  138. </div>
  139. </template>
  140. <script>
  141. import BackgroundData from 'utils/BackgroundData'
  142. import BasicDataDetails from "./basicDataDetails.vue";
  143. import StandAloneImg from "./StandAloneImg.vue";
  144. import dayjs from 'dayjs'
  145. import api from "api/index";
  146. export default {
  147. name: "BasicInformationDetail",
  148. components: {
  149. // Worning,
  150. StandAloneImg,
  151. BasicDataDetails,
  152. },
  153. props: {
  154. types: {
  155. type: Number,
  156. default: null,
  157. },
  158. windturbine: Object,
  159. },
  160. mounted() {
  161. this.getLocks()
  162. this.getHealthDate()
  163. this.getWarning()
  164. this.getDetial()
  165. },
  166. beforeUpdate() {
  167. this.getLocks()
  168. this.getHealthDate()
  169. this.getWarning()
  170. this.getDetial()
  171. },
  172. data() {
  173. return {
  174. // warnList: [],
  175. display: false,
  176. BasicInfo: {},
  177. temperatureInfo: new Array() /* 温度信息 */,
  178. pitchInfo: new Array() /* 变桨信息 */,
  179. generalInfo: new Array() /* 基本信息 */,
  180. powerGridInfo: new Array() /* 电网信息 */,
  181. restaurants: [],
  182. lockValues: [],
  183. state1: "",
  184. showIndex: 1,
  185. starValue: 3,
  186. max: 4,
  187. current: null,
  188. disableds: true,
  189. options: [{
  190. value: '8',
  191. label: '检修'
  192. }, {
  193. value: '7',
  194. label: '故障维修'
  195. }, {
  196. value: '2',
  197. label: '场内受累检修'
  198. }, {
  199. value: '3',
  200. label: '场内受累故障'
  201. }, {
  202. value: '4',
  203. label: '场外受累电网'
  204. }, {
  205. value: '5',
  206. label: '场外受累天气'
  207. }],
  208. selectValue: '7',
  209. healthInfo: {},
  210. warning: ["-"],
  211. showData: [],
  212. controlErorCodes: [
  213. "控制成功",
  214. "控制命令发送失败",
  215. "无效的控制地址",
  216. "被控设备异常",
  217. "网络连接错误,检查场站通信",
  218. "控制结果读取超时",
  219. "未知错误",
  220. "控制命令错误",
  221. "收到无法识别数据",
  222. "未读取到数据包",
  223. "未知错误",
  224. "风机操作过频繁",
  225. "风机被挂牌",
  226. "风机操作与风机状态不符",
  227. "需要登录",
  228. ],
  229. };
  230. },
  231. methods: {
  232. getHealthDate() {
  233. api.getHealthDate(this.windturbine.stationId, this.windturbine.windturbineId).then(msg => {
  234. if (msg.data.code === 200) {
  235. this.healthInfo = msg.data.data;
  236. }
  237. })
  238. .catch(err => {
  239. console.log(err);
  240. });
  241. },
  242. getDetial() {
  243. api.getDetial(this.windturbine.windturbineId).then(msg => {
  244. let restaurants = []
  245. if(msg.data.lockType === 9){
  246. this.selectValue = this.lockValues?.filter(item => this.windturbine.windturbineId === item.windturbineID)[0]?.value;
  247. }else{
  248. this.selectValue = (msg.data.lockType === 0 ? '' : String(msg.data.lockType))
  249. }
  250. this.state1 = msg.data.markValue
  251. msg.data.markValues.forEach(item => {
  252. let data = {}
  253. data.value = item
  254. restaurants.push(data)
  255. })
  256. this.restaurants = restaurants
  257. })
  258. },
  259. getLocks(){
  260. api.getCustomerLock().then(res =>{
  261. if(res){
  262. this.lockValues = res.data
  263. }
  264. })
  265. },
  266. getWarning() {
  267. let parts = ''
  268. switch (this.showIndex) {
  269. case 1:
  270. parts = 'fdj'
  271. break;
  272. case 2:
  273. parts = 'clx'
  274. break;
  275. case 3:
  276. parts = 'bj'
  277. break;
  278. case 4:
  279. parts = 'ph'
  280. break;
  281. case 5:
  282. parts = 'yy'
  283. break;
  284. }
  285. api.getWarning(this.windturbine.stationId, this.windturbine.windturbineId, parts).then(msg => {
  286. if (msg.data.code === 200) {
  287. msg.data.data && msg.data.data.forEach(item => {
  288. item.time = dayjs(item.time).format('MM-DD HH:mm:ss')
  289. })
  290. this.warning = msg.data.data;
  291. }
  292. })
  293. .catch(err => {
  294. console.log(err);
  295. });
  296. },
  297. chooseInfo(value) {
  298. this.showIndex = value
  299. switch (this.showIndex) {
  300. case 1:
  301. this.showData = this.BasicInfo.BasicInfo.filter(item => item.index === "part6")[0]?.param
  302. break;
  303. case 2:
  304. this.showData = this.BasicInfo.BasicInfo.filter(item => item.index === "part8")[0]?.param
  305. break;
  306. case 3:
  307. this.showData = this.BasicInfo.BasicInfo.filter(item => item.index === "part7")[0]?.param
  308. break;
  309. case 4:
  310. this.showData = this.BasicInfo.BasicInfo.filter(item => item.index === "part10")[0]?.param
  311. break;
  312. case 5:
  313. this.showData = this.BasicInfo.BasicInfo.filter(item => item.index === "part9")[0]?.param
  314. break;
  315. }
  316. this.getWarning()
  317. },
  318. listedChange() {
  319. switch (this.selectValue) {
  320. case '8':
  321. this.sendLock({ value: "CheckLock" });
  322. break;
  323. case '7':
  324. this.sendLock({ value: "FaultLock" });
  325. break;
  326. case '2':
  327. this.sendLock({ value: "StationCheckLock" });
  328. break;
  329. case '3':
  330. this.sendLock({ value: "StationFaulLock" });
  331. break;
  332. case '4':
  333. this.sendLock({ value: "StationPowerLineLock" });
  334. break;
  335. case '5':
  336. this.sendLock({ value: "StationWeatherLock" });
  337. break;
  338. default:
  339. this.sendLock({ value: "CustomerLock", lockValue: this.selectValue});
  340. break;
  341. }
  342. },
  343. // labelChange() {
  344. // let values = BackgroundData.getInstance().Marks;
  345. // if (!values.filter(item => item.title = this.windturbine.windturbineId)[0]) {
  346. // this.menuClicked({ type: "marking" })
  347. // }
  348. // BackgroundData.getInstance().updateMarks(this.windturbine, this.state1);
  349. // },
  350. start(bi) {
  351. this.BasicInfo = bi;
  352. this.bindData();
  353. this.refreshData();
  354. this.refreshTimer = setInterval(this.refreshData, 3000);
  355. },
  356. end() {
  357. clearInterval(this.refreshTimer);
  358. },
  359. /* 刷新数据 */
  360. refreshData() {
  361. var bg = BackgroundData.getInstance();
  362. let mark = BackgroundData.getInstance().Marks;
  363. console.log(mark);
  364. bg.initWinturbineBaseData(this.BasicInfo, this.onMessage);
  365. },
  366. /* 获得数据 */
  367. onMessage(msg) {
  368. this.BasicInfo.BasicInfo.forEach((element) => {
  369. element.param.forEach((im) => {
  370. var val = msg[im.code];
  371. if (typeof val !== "undefined") {
  372. if (im.unit == "万度") {
  373. im.value = (val.doubleValue / 10000).toFixed(2);
  374. } else {
  375. im.value = val.doubleValue === 0 ? val.doubleValue : val.doubleValue ? val.doubleValue.toFixed(2) : val.longValue ? val.longValue : val.booleanValue;
  376. }
  377. }
  378. });
  379. });
  380. console.log(msg);
  381. console.log(this.BasicInfo.BasicInfo);
  382. switch (this.showIndex) {
  383. case 1:
  384. this.showData = this.BasicInfo.BasicInfo.filter(item => item.index === "part6")[0]?.param
  385. break;
  386. case 2:
  387. this.showData = this.BasicInfo.BasicInfo.filter(item => item.index === "part8")[0]?.param
  388. break;
  389. case 3:
  390. this.showData = this.BasicInfo.BasicInfo.filter(item => item.index === "part7")[0]?.param
  391. break;
  392. case 4:
  393. this.showData = this.BasicInfo.BasicInfo.filter(item => item.index === "part10")[0]?.param
  394. break;
  395. case 5:
  396. this.showData = this.BasicInfo.BasicInfo.filter(item => item.index === "part9")[0]?.param
  397. break;
  398. }
  399. },
  400. bindData() {
  401. this.BasicInfo.BasicInfo.forEach((element) => {
  402. if (element.tag == "基本信息") {
  403. this.generalInfo = element.param;
  404. } else if (element.tag == "温度信息") {
  405. this.temperatureInfo = element.param;
  406. } else if (element.tag == "电网信息") {
  407. this.powerGridInfo = element.param;
  408. } else if (element.tag == "桨叶信息") {
  409. this.pitchInfo = element.param;
  410. }
  411. });
  412. },
  413. querySearch(queryString, cb) {
  414. var restaurants = this.restaurants;
  415. var results = queryString
  416. ? restaurants.filter(this.createFilter(queryString))
  417. : restaurants;
  418. // 调用 callback 返回建议列表的数据
  419. cb(results);
  420. },
  421. createFilter(queryString) {
  422. return (restaurant) => {
  423. return (
  424. restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) ===
  425. 0
  426. );
  427. };
  428. },
  429. handleSelect(item) {
  430. console.log(item);
  431. },
  432. selectSvg(index) {
  433. this.showIndex = index;
  434. // this.showData = this.BasicInfo.BasicInfo.filter(item => item.index === `part${this.showIndex+5}`)[0]?.param
  435. switch (this.showIndex) {
  436. case 1:
  437. this.showData = this.BasicInfo.BasicInfo.filter(item => item.index === `part6`)[0]?.param
  438. break;
  439. case 2:
  440. this.showData = this.BasicInfo.BasicInfo.filter(item => item.index === "part8")[0]?.param
  441. break;
  442. case 3:
  443. this.showData = this.BasicInfo.BasicInfo.filter(item => item.index === "part7")[0]?.param
  444. break;
  445. case 4:
  446. this.showData = this.BasicInfo.BasicInfo.filter(item => item.index === "part10")[0]?.param
  447. break;
  448. case 5:
  449. this.showData = this.BasicInfo.BasicInfo.filter(item => item.index === "part9")[0]?.param
  450. break;
  451. }
  452. this.getWarning()
  453. },
  454. sendCommand(msg, windturbine) {
  455. let bd = BackgroundData.getInstance();
  456. if (!bd.LoginUser) {
  457. this.$notify({
  458. title: "请登录",
  459. message: "控制风机需要先登录!",
  460. type: "warning",
  461. position: "bottom-right",
  462. offset: 60,
  463. duration: 3000,
  464. });
  465. return;
  466. }
  467. let sendList = []
  468. this.windturbine.controlType = Number(msg.controlType)
  469. sendList.push(this.windturbine)
  470. if (sendList.length > 0) {
  471. bd.checkout(sendList);
  472. let pairs = {}
  473. sendList.forEach(item => {
  474. let ct = {
  475. windturbineId: item.windturbineId,
  476. stationId: item.stationId,
  477. projectId: item.projectId,
  478. modelId: item.modelId,
  479. controlType: item.controlType,
  480. lockType: item.lockType,
  481. userName: `system_${bd.LoginUser.name}`,
  482. userId: 0,
  483. };
  484. pairs[ct.windturbineId] = ct;
  485. })
  486. api.windturbControl(pairs).then(res => {
  487. if (res) {
  488. this.controlSuccess(res)
  489. }
  490. })
  491. }
  492. },
  493. sendLock(msg) {
  494. let bd = BackgroundData.getInstance();
  495. if (!bd.LoginUser) {
  496. this.$notify({
  497. title: "请登录",
  498. message: "控制风机需要先登录!",
  499. type: "warning",
  500. position: "bottom-right",
  501. offset: 60,
  502. duration: 3000,
  503. });
  504. return;
  505. }
  506. let sendList = []
  507. this.windturbine.lockType = msg.value;
  508. if(msg.lockValue){
  509. this.windturbine.lockValue = msg.lockValue
  510. }
  511. sendList.push(this.windturbine)
  512. if (sendList.length > 0) {
  513. this.chooseList = []
  514. let pairs = {}
  515. sendList.forEach(item => {
  516. let ct = {
  517. windturbineId: item.windturbineId,
  518. stationId: item.stationId,
  519. projectId: item.projectId,
  520. modelId: item.modelId,
  521. controlType: item.controlType,
  522. lockType: item.lockType,
  523. lockValue: item.lockValue,
  524. userName: `system_${bd.LoginUser.name}`,
  525. userId: 0,
  526. };
  527. pairs[ct.windturbineId] = ct;
  528. })
  529. api.windturbControlLock(pairs).then(res => {
  530. if (res) {
  531. this.controlSuccess(res)
  532. }
  533. })
  534. }
  535. },
  536. /* 控制成功 */
  537. controlSuccess(msg) {
  538. console.log(msg);
  539. var mss = ''; // 信息
  540. var iserror = false;// 是否有控制错误的风机
  541. for (var v in msg.data) {
  542. var val = msg.data[v];
  543. if (val.errorCode > 0) {
  544. iserror = true;
  545. mss += `${val.windturbineId} ${this.controlErorCodes[val.errorCode]}\n`;
  546. }
  547. }
  548. var tp = iserror ? "warning" : "success";
  549. var dt = iserror ? 0 : 4500;
  550. if (!iserror) {
  551. mss = "控制成功";
  552. }
  553. this.$notify({
  554. title: "控制",
  555. message: mss,
  556. type: tp,
  557. position: "bottom-right",
  558. offset: 60,
  559. duration: 3000,
  560. });
  561. },
  562. /* 控制失败 */
  563. controlError(err) {
  564. this.$notify({
  565. title: "控制出现错误",
  566. message: err.message,
  567. type: "warning",
  568. position: "bottom-right",
  569. offset: 60,
  570. duration: 3000,
  571. });
  572. },
  573. dbClicks() {
  574. this.display = true;
  575. },
  576. closeds() {
  577. this.display = false;
  578. }
  579. },
  580. };
  581. </script>
  582. <style scoped>
  583. .firstdiv {
  584. height: 70vh;
  585. }
  586. .onediv {
  587. float: left;
  588. margin-right: 30px;
  589. }
  590. .twodiv {
  591. float: right;
  592. margin-right: 30px;
  593. }
  594. td:nth-child(1) {
  595. height: 25px;
  596. width: 130px;
  597. text-align: right;
  598. }
  599. td:nth-child(2) {
  600. width: 78px;
  601. text-align: right;
  602. color: rgb(5, 176, 71);
  603. }
  604. td:nth-child(3) {
  605. text-align: center;
  606. width: 30px;
  607. }
  608. tr:nth-child(1) {
  609. font-size: 20px;
  610. width: 90px;
  611. text-align: right;
  612. }
  613. th {
  614. height: 40px;
  615. }
  616. table {
  617. margin-top: 30px;
  618. }
  619. /* .worning1{
  620. position: absolute;
  621. top: 143px;
  622. left: 119px;
  623. z-index: 999;
  624. }
  625. .worning2{
  626. position: absolute;
  627. top: 210px;
  628. left: 282px;
  629. z-index: 99;
  630. }
  631. .worning3{
  632. position: absolute;
  633. top: 219px;
  634. left: 348px;
  635. z-index: 0;
  636. }
  637. .worning4{
  638. position: absolute;
  639. top: 273px;
  640. left: 296px;
  641. z-index: 0;
  642. }
  643. .worning5{
  644. position: absolute;
  645. top: 287px;
  646. left: 252px;
  647. z-index: 0;
  648. } */
  649. .sai {
  650. float: left;
  651. margin-left: 40px;
  652. margin-top: 30px;
  653. margin-bottom: 15px;
  654. width: 55vh;
  655. height: 34vh;
  656. }
  657. /* .inline-input {
  658. .el-scrollbar{
  659. max-height: 160px;
  660. }
  661. } */
  662. .rights {
  663. display: flex;
  664. flex-direction: column;
  665. }
  666. .marks {
  667. display: flex;
  668. flex-direction: column;
  669. }
  670. .title {
  671. margin-right: 16px;
  672. font-size: 18px;
  673. color: #ffffff;
  674. }
  675. .inputs {
  676. border: none;
  677. width: 174px !important;
  678. }
  679. .area {
  680. border: 2px dashed #ffffff;
  681. height: 200px;
  682. border-radius: 10px;
  683. margin-top: 20px;
  684. margin-left: 5.5%;
  685. }
  686. .healthInfo {
  687. margin-top: 16px;
  688. margin-bottom: 11px;
  689. font-size: 18px;
  690. color: #FFFFFF;
  691. }
  692. .healthTable {
  693. width: 688px;
  694. background-color: #141414;
  695. }
  696. .healthTitle {
  697. width: 100%;
  698. height: 37px;
  699. background-color: #242424;
  700. font-size: 12px;
  701. color: #FFFFFF;
  702. display: flex;
  703. flex-direction: row;
  704. margin-bottom: 5px;
  705. }
  706. .name {
  707. width: 172px;
  708. height: 100%;
  709. display: flex;
  710. align-items: center;
  711. justify-content: center;
  712. }
  713. .level {
  714. width: 211px;
  715. height: 100%;
  716. display: flex;
  717. align-items: center;
  718. justify-content: center;
  719. }
  720. .times {
  721. width: 153px;
  722. height: 100%;
  723. display: flex;
  724. align-items: center;
  725. justify-content: center;
  726. }
  727. .healthContent {
  728. height: 30px;
  729. display: flex;
  730. flex-direction: row;
  731. width: 96%;
  732. margin-left: 2%;
  733. border-bottom: 1px solid #242424;
  734. font-size: 12px;
  735. color: #B3B3B3;
  736. }
  737. .healthContent_on {
  738. height: 30px;
  739. display: flex;
  740. flex-direction: row;
  741. width: 96%;
  742. margin-left: 2%;
  743. border-bottom: 1px solid #242424;
  744. background-color: #242424;
  745. font-size: 12px;
  746. color: #05BB4C;
  747. }
  748. .contentName {
  749. width: 158px;
  750. height: 100%;
  751. display: flex;
  752. align-items: center;
  753. justify-content: center;
  754. margin-left: -5px;
  755. }
  756. .starLevel {
  757. width: 211px;
  758. height: 100%;
  759. display: flex;
  760. align-items: center;
  761. justify-content: center;
  762. margin-left: 8px;
  763. }
  764. .contentTimes {
  765. width: 124px;
  766. height: 100%;
  767. display: flex;
  768. align-items: center;
  769. justify-content: center;
  770. margin-left: 11px;
  771. }
  772. .contentTimess {
  773. width: 120px;
  774. height: 100%;
  775. display: flex;
  776. align-items: center;
  777. justify-content: center;
  778. margin-left: 30px;
  779. }
  780. .label {
  781. display: flex;
  782. flex-direction: row;
  783. align-items: center;
  784. margin-top: 16px;
  785. }
  786. .label1 {
  787. display: flex;
  788. flex-direction: row;
  789. align-items: center;
  790. margin-top: 16px;
  791. margin-right: 15px;
  792. }
  793. .button {
  794. width: 100px;
  795. height: 27px;
  796. display: flex;
  797. align-items: center;
  798. justify-content: center;
  799. font-size: 12px;
  800. color: #ffffff;
  801. background-color: #242424;
  802. border: 1px solid #3D3D3D;
  803. margin-right: 12px;
  804. }
  805. .datas {
  806. margin-top: 15px;
  807. }
  808. .dataList {
  809. width: 94%;
  810. /* min-height: 250px; */
  811. height: 28vh;
  812. background-color: #141414;
  813. display: flex;
  814. flex-direction: column;
  815. margin-left: 2%;
  816. }
  817. .dataLists {
  818. width: 97%;
  819. /* min-height: 250px; */
  820. height: 28vh;
  821. background-color: #141414;
  822. display: flex;
  823. flex-direction: column;
  824. }
  825. .dataTitle {
  826. display: flex;
  827. height: 37px;
  828. width: 100%;
  829. background-color: #242424;
  830. color: #FFFFFF;
  831. font-size: 12px;
  832. align-items: center;
  833. }
  834. .dataContent {
  835. display: flex;
  836. flex-direction: row;
  837. flex-wrap: wrap;
  838. }
  839. .dataBlock {
  840. width: 145px;
  841. height: 62px;
  842. background-color: #242424;
  843. border: 1px solid #3D3D3D;
  844. margin-left: 16px;
  845. margin-top: 22px;
  846. display: flex;
  847. flex-direction: column;
  848. justify-content: center;
  849. }
  850. .dataName {
  851. font-size: 12px;
  852. color: #FFFFFF;
  853. margin-left: 26px;
  854. margin-bottom: 6px;
  855. }
  856. .numerical {
  857. display: flex;
  858. flex-direction: row;
  859. color: #05BB4C;
  860. align-items: baseline;
  861. margin-left: 26px;
  862. }
  863. .values {
  864. font-size: 16px;
  865. }
  866. .unit {
  867. font-size: 12px;
  868. margin-left: 8px;
  869. }
  870. .scorll {
  871. height: 212px;
  872. }
  873. .showDate {
  874. display: flex;
  875. flex-direction: row;
  876. justify-content: space-between;
  877. align-items: center;
  878. }
  879. .el-table::before {
  880. width: 0;
  881. }
  882. </style>