action.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867
  1. <template>
  2. <el-dialog
  3. width="70%"
  4. @open="opened"
  5. @closed="closed"
  6. :fullscreen="true"
  7. :show-close="true"
  8. class="dialogs"
  9. >
  10. <template #title>
  11. <div class="showTitles currentShowTitles">
  12. <div class="titles">动作查询</div>
  13. </div>
  14. </template>
  15. <div class="body">
  16. <div class="bodyDetial">
  17. <!-- <div style="width: 50%;height:200px;background-color:red;"></div>
  18. <div style="width: 50%;height:200px;background-color:yellow;"></div> -->
  19. <div class="left-item">
  20. <el-scrollbar>
  21. <el-input placeholder="输入关键字进行过滤" v-model="filterText">
  22. </el-input>
  23. <el-tree
  24. class="filter-tree"
  25. :data="showData"
  26. :props="defaultProps"
  27. :filter-node-method="filterNode"
  28. node-key="id"
  29. :default-expanded-keys="[0]"
  30. ref="tree"
  31. @node-click="handleChange"
  32. >
  33. </el-tree>
  34. </el-scrollbar>
  35. </div>
  36. <div class="right-item">
  37. <div class="dateBar">
  38. <el-date-picker
  39. class="pickers"
  40. @change="changes"
  41. v-model="timeValue"
  42. type="datetimerange"
  43. range-separator="至"
  44. start-placeholder="开始日期"
  45. end-placeholder="结束日期"
  46. >
  47. </el-date-picker>
  48. <div
  49. class="buttons"
  50. @click="
  51. () => {
  52. getControlRecord();
  53. getControlStatistics();
  54. }
  55. "
  56. >
  57. 查询
  58. </div>
  59. </div>
  60. <el-scrollbar style="height: 94%">
  61. <div class="tables">
  62. <el-table
  63. :data="recordData"
  64. class="table"
  65. style="width: 100%"
  66. height="81vh"
  67. :header-cell-style="{
  68. background: 'rgb(30,30,30)',
  69. color: 'rgb(220,220,220)',
  70. padding: '4px',
  71. fontSize: '14px',
  72. 'border-bottom': 'solid 1px rgba(77, 77, 77, 1)',
  73. }"
  74. :cell-style="{
  75. height: '40px',
  76. background: 'rgb(30,30,30)',
  77. color: 'rgb(220,220,220)',
  78. padding: '3px',
  79. fontSize: '12px',
  80. 'border-bottom': '1px solid #000000',
  81. }"
  82. @cell-dblclick="cellDbClick"
  83. >
  84. <el-table-column
  85. prop="time"
  86. label="日期"
  87. width="120"
  88. align="center"
  89. >
  90. </el-table-column>
  91. <el-table-column
  92. prop="code"
  93. label="风机号"
  94. width="120"
  95. align="center"
  96. >
  97. </el-table-column>
  98. <el-table-column
  99. prop="controls"
  100. label="控制命令"
  101. width="100"
  102. align="center"
  103. >
  104. </el-table-column>
  105. <el-table-column prop="result" label="操作结果" align="center">
  106. </el-table-column>
  107. <el-table-column
  108. prop="userName"
  109. label="操作人"
  110. width="160"
  111. align="center"
  112. >
  113. </el-table-column>
  114. <el-table-column
  115. prop="windSpeed"
  116. label="风速(m/s)"
  117. width="160"
  118. align="center"
  119. >
  120. </el-table-column>
  121. <el-table-column
  122. prop="statusChanged"
  123. label="状态转换"
  124. width="160"
  125. align="center"
  126. >
  127. </el-table-column>
  128. <el-table-column
  129. prop="statusChangeInterval"
  130. label="状态转换时间(s)"
  131. width="160"
  132. align="center"
  133. >
  134. </el-table-column>
  135. </el-table>
  136. <div class="titleinfoall" v-if="showControlStatistics">
  137. <div class="titleinfo">
  138. <span class="showTitle fontSty1">启动:</span>
  139. <span class="showvalue">
  140. {{controlStatisticsInfo.startSuccessCount }}/{{ controlStatisticsInfo.startCount}}
  141. </span>
  142. <span class="showTitle fontSty">次</span>
  143. </div>
  144. <div class="titleinfo">
  145. <span class="showTitle fontSty1">停机:</span>
  146. <span class="showvalue">
  147. {{controlStatisticsInfo.stopSuccessCount}}/{{ controlStatisticsInfo.stopCount }}
  148. </span>
  149. <span class="showTitle fontSty">次</span>
  150. </div>
  151. <div class="titleinfo">
  152. <span class="showTitle fontSty1">维护:</span>
  153. <span class="showvalue">
  154. {{controlStatisticsInfo.maintenanceSuccessCount }}/{{ controlStatisticsInfo.maintenanceCount}}
  155. </span>
  156. <span class="showTitle fontSty">次</span>
  157. </div>
  158. <div class="titleinfo">
  159. <span class="showTitle fontSty1">解除维护:</span>
  160. <span class="showvalue">
  161. {{controlStatisticsInfo.unMaintenanceSuccessCount }}/{{ controlStatisticsInfo.unMaintenanceCount}}
  162. </span>
  163. <span class="showTitle fontSty">次</span>
  164. </div>
  165. <div class="titleinfo">
  166. <span class="showTitle fontSty1">多发电量:</span>
  167. <span class="showvalue">
  168. {{ controlStatisticsInfo.powerGeneration?.toFixed(2) || 0 }}
  169. </span>
  170. <span class="showTitle fontSty">kwh</span>
  171. </div>
  172. <div class="titleinfo">
  173. <span class="showTitle fontSty1">节约电量:</span>
  174. <span class="showvalue">
  175. {{ controlStatisticsInfo.powerSaving?.toFixed(2) || 0 }}
  176. </span>
  177. <span class="showTitle fontSty">kwh</span>
  178. </div>
  179. <div class="titleinfo">
  180. <span class="showTitle fontSty1">维护时长:</span>
  181. <span class="showvalue">
  182. {{ controlStatisticsInfo.maintenanceTime?.toFixed(2) || 0 }}
  183. </span>
  184. <span class="showTitle fontSty">分钟</span>
  185. </div>
  186. <div class="titleinfo">
  187. <span class="showTitle fontSty1">提前时间:</span>
  188. <span class="showvalue">
  189. {{ controlStatisticsInfo.advanceTime?.toFixed(2) || 0 }}
  190. </span>
  191. <span class="showTitle fontSty">分钟</span>
  192. </div>
  193. </div>
  194. </div>
  195. </el-scrollbar>
  196. <div class="paginations">
  197. <el-pagination
  198. :hide-on-single-page="true"
  199. :page-size="currentPage"
  200. background
  201. layout="prev, pager, next"
  202. :total="total"
  203. @current-change="handleCurrentChange"
  204. />
  205. </div>
  206. </div>
  207. </div>
  208. </div>
  209. <el-dialog
  210. class="dialogs"
  211. custom-class="currentBorder"
  212. width="70%"
  213. top="50px"
  214. :show-close="true"
  215. append-to-body
  216. v-model="showStartDialog"
  217. >
  218. <div id="chart" style="width: 100%; height: 500px" />
  219. <el-card class="otherContentBox" v-if="otherContentInfo.success">
  220. <el-descriptions title="控制评分">
  221. <el-descriptions-item label="控制时间">{{
  222. otherContentInfo.operationRecordTs || "---"
  223. }}</el-descriptions-item>
  224. <el-descriptions-item label="并网开始时间">{{
  225. otherContentInfo.onLineStartTs || "---"
  226. }}</el-descriptions-item>
  227. <el-descriptions-item label="并网结束时间">{{
  228. otherContentInfo.onLineEndTs || "---"
  229. }}</el-descriptions-item>
  230. <el-descriptions-item label="并网时长">
  231. {{ otherContentInfo.onLineDuration || "---" }}
  232. </el-descriptions-item>
  233. <el-descriptions-item label="并网期间发电量">{{
  234. otherContentInfo.onLinePowerGeneration
  235. }}</el-descriptions-item>
  236. <el-descriptions-item label="单位时间内发电量">{{
  237. otherContentInfo.powerGenerationPerHour
  238. }}</el-descriptions-item>
  239. <el-descriptions-item label="并网期间耗电量">{{
  240. otherContentInfo.powerConsumption
  241. }}</el-descriptions-item>
  242. <!-- <el-descriptions-item label="风能利用百分比">{{
  243. otherContentInfo.windUseRate
  244. }}</el-descriptions-item> -->
  245. <el-descriptions-item label="评分">
  246. <el-rate
  247. style="display: inline-block"
  248. v-model="otherContentInfo.score"
  249. allow-half
  250. disabled
  251. />
  252. <span>{{ otherContentInfo.score * 2 }}&nbsp;/&nbsp;10&nbsp;分</span>
  253. </el-descriptions-item>
  254. </el-descriptions>
  255. </el-card>
  256. <el-card class="otherContentBox" v-else>
  257. <div
  258. style="
  259. width: 100%;
  260. height: 140px;
  261. color: #eee;
  262. display: flex;
  263. justify-content: center;
  264. align-items: center;
  265. font-size: 18px;
  266. "
  267. >
  268. <el-empty
  269. class="empSvg"
  270. :image-size="100"
  271. description="暂无控制评分"
  272. />
  273. </div>
  274. </el-card>
  275. </el-dialog>
  276. </el-dialog>
  277. </template>
  278. <script>
  279. import dayjs from "dayjs";
  280. import api from "api/index";
  281. import * as echarts from "echarts";
  282. export default {
  283. props: {},
  284. updated() {
  285. if (this.timeValue.length === 0) {
  286. let date = new Date();
  287. this.timeValue[0] = date.getTime() - 28800000;
  288. this.timeValue[1] = date.getTime() + 3600000;
  289. }
  290. },
  291. mounted() {},
  292. data() {
  293. return {
  294. statname:"",
  295. currentPage: 20,
  296. filterText: "",
  297. pageIndex: 1,
  298. station: [],
  299. datas: {},
  300. chooseStation: {},
  301. timeValue: [],
  302. showData: [
  303. {
  304. id: 0,
  305. code: "全部",
  306. stationId: "",
  307. children: [],
  308. },
  309. ],
  310. defaultProps: {
  311. children: "children",
  312. label: "code",
  313. },
  314. recordData: [],
  315. total: "",
  316. controlErorCodes: [
  317. "控制成功",
  318. "控制命令发送失败",
  319. "无效的控制地址",
  320. "被控设备异常",
  321. "无效的控制功能",
  322. "网络连接错误,检查场站通信",
  323. "控制结果读取超时",
  324. "未知错误",
  325. "控制命令错误",
  326. "收到无法识别数据",
  327. "未读取到数据包",
  328. "未知错误",
  329. "风机操作过频繁",
  330. "风机被挂牌",
  331. "风机操作与风机状态不符",
  332. "需要登录",
  333. ],
  334. showStartDialog: false,
  335. rateValue: 4.5,
  336. otherContentInfo: {
  337. score: 0,
  338. },
  339. showControlStatistics: false,
  340. controlStatisticsInfo: {},
  341. };
  342. },
  343. methods: {
  344. // getWindturbineFdc() {
  345. // api.getWindturbineFdc().then((res) => {
  346. // this.station = res.data;
  347. // this.getControlRecord();
  348. // });
  349. // },
  350. dataDeal() {
  351. let stationList = this.$store.state.stationList;
  352. this.showData[0].children = [
  353. // {
  354. // id : 1,
  355. // code : "风机全部",
  356. // stationId : "WIND_ALL",
  357. // children : [],
  358. // }
  359. ];
  360. stationList.forEach((item, index) => {
  361. if (item.type === 1) {
  362. let obj = {};
  363. obj.id = index + 1;
  364. obj.code = item.name;
  365. obj.stationId = item.id;
  366. obj.children = [];
  367. this.showData[0].children.push(obj);
  368. // console.log(123,obj.stationId);
  369. }
  370. });
  371. this.datas = this.$store.state.windturbinelist
  372. ? this.$store.state.windturbinelist
  373. : {};
  374. let arr = Object.keys(this.datas).sort();
  375. for (let id of arr) {
  376. let item = this.datas[id];
  377. this.showData[0].children
  378. .filter((val) => val.stationId === item.stationId)[0]
  379. ?.children.push(item);
  380. }
  381. },
  382. handleChange(value) {
  383. // console.log(111,value);
  384. this.statname=value.stationId
  385. this.chooseStation = value;
  386. this.pageIndex = 1;
  387. this.getControlRecord(value);
  388. this.getControlStatistics()
  389. },
  390. closed() {
  391. this.pageIndex = 1;
  392. this.chooseStation = {};
  393. this.showData = [
  394. {
  395. id: 0,
  396. code: "全部",
  397. stationId: "",
  398. children: [],
  399. },
  400. ];
  401. let stationList = this.$store.state.stationList;
  402. stationList.forEach((item, index) => {
  403. let obj = {};
  404. obj.id = index + 1;
  405. obj.code = item.name;
  406. obj.stationId = item.id;
  407. obj.children = [];
  408. this.showData[0].children.push(obj);
  409. });
  410. this.$emit("closed");
  411. },
  412. filterNode(value, data) {
  413. if (!value) return true;
  414. return data.code.indexOf(value) !== -1;
  415. },
  416. handleCurrentChange(val) {
  417. this.pageIndex = val;
  418. this.getControlRecord();
  419. },
  420. opened() {
  421. let date = new Date();
  422. this.timeValue[0] = date.getTime() - 28800000;
  423. this.timeValue[1] = date.getTime() + 3600000;
  424. this.dataDeal();
  425. this.getControlRecord();
  426. },
  427. getControlStatistics() {
  428. this.showControlStatistics = false;
  429. this.controlStatisticsInfo = {};
  430. const stTs = this.timeValue[0];
  431. const endTs = this.timeValue[1];
  432. const stationId=this.statname
  433. api
  434. .getControlStatistics(
  435. new Date(stTs).getTime(),
  436. new Date(endTs).getTime(),
  437. stationId
  438. )
  439. .then((res) => {
  440. this.showControlStatistics = true;
  441. // console.log(999,res);
  442. this.controlStatisticsInfo = {
  443. advanceTime: res.data.advanceTime,
  444. maintenanceCount: res.data.maintenanceCount,
  445. maintenanceSuccessCount:res.data.maintenanceSuccessCount,
  446. powerGeneration: res.data.powerGeneration,
  447. powerSaving: res.data.powerSaving,
  448. startCount: res.data.startCount,
  449. startSuccessCount:res.data.startSuccessCount,
  450. stopSuccessCount:res.data.stopSuccessCount,
  451. stopCount: res.data.stopCount,
  452. unMaintenanceCount: res.data.unMaintenanceCount,
  453. unMaintenanceSuccessCount: res.data.unMaintenanceSuccessCount,
  454. maintenanceTime: res.data.maintenanceTime,
  455. };
  456. });
  457. },
  458. getControlRecord() {
  459. api
  460. .controlRecord({
  461. stationId: this.chooseStation.stationId
  462. ? this.chooseStation.stationId
  463. : "",
  464. userName: "",
  465. windturbineId:
  466. String(this.chooseStation?.id)?.length < 2
  467. ? ""
  468. : this.chooseStation.stationId
  469. ? this.chooseStation.windturbineId
  470. : "",
  471. startTime: dayjs(this.timeValue[0]).format("YYYY/MM/DD HH:mm:ss"),
  472. endTime: dayjs(this.timeValue[1]).format("YYYY/MM/DD HH:mm:ss"),
  473. pageSize: this.currentPage,
  474. pageIndex: this.pageIndex,
  475. })
  476. .then((res) => {
  477. console.log(123,res);
  478. if (res) {
  479. let types = {
  480. Start: "启动",
  481. Stop: "停止",
  482. Reset: "复位",
  483. Maintain: "维护",
  484. UnMaintain: "取消维护",
  485. Lock: "挂牌",
  486. UnLock: "取消挂牌",
  487. };
  488. // console.log(666,res);
  489. res.data.dataList.forEach((item) => {
  490. item.time = dayjs(item.time).format("MM-DD HH:mm:ss");
  491. item.result = this.controlErorCodes[item.errorCode];
  492. item.controls = types[item.controlType];
  493. item.showName = item.windturbineId;
  494. if(item.statusChanged==false){
  495. item.statusChanged=''
  496. }else{
  497. item.statusChanged='成功'
  498. }
  499. });
  500. this.total = res.data.total;
  501. this.recordData = res.data.dataList;
  502. console.log(666,res.data.dataList);
  503. }
  504. });
  505. },
  506. cellDbClick(row) {
  507. const controlType = row.controlType || "";
  508. if (controlType === "Start") {
  509. this.initEcharts(row.id);
  510. }
  511. },
  512. initEcharts(id) {
  513. api.getEvaluationData(id).then((res) => {
  514. var data = res.data.datas;
  515. var statistics = res.data.statistics;
  516. var marks = new Array();
  517. if (Array.isArray(statistics.mark)) {
  518. for (var j = 0; j < statistics.mark.length; ++j) {
  519. marks.push({ xAxis: statistics.mark[j] });
  520. }
  521. }
  522. var ser = new Array();
  523. var isFirst = true;
  524. for (var i = 0; i < data.length; ++i) {
  525. var s = {
  526. data: data[i].values.map((item) => {
  527. return item.value;
  528. }),
  529. type: "line",
  530. name: data[i].name,
  531. symbol: "none",
  532. yAxisIndex: /功率/g.test(data[i].name) ? 1 : 0,
  533. };
  534. if (isFirst) {
  535. s.markLine = {
  536. symbol: ["none", "none"],
  537. label: { show: false },
  538. data: marks,
  539. };
  540. }
  541. ser.push(s);
  542. isFirst = false;
  543. }
  544. var option = {
  545. tooltip: {
  546. trigger: "axis",
  547. },
  548. legend: {
  549. show: true,
  550. textStyle: {
  551. color: "#eee", //字体颜色
  552. },
  553. data: data.map((item) => {
  554. return item.name;
  555. }),
  556. },
  557. xAxis: {
  558. type: "category",
  559. data: data[0].values.map((item) => {
  560. return new Date(item.ts).toLocaleString();
  561. }),
  562. axisLabel: {
  563. show: true,
  564. textStyle: {
  565. color: "#eee",
  566. },
  567. },
  568. },
  569. yAxis: [
  570. {
  571. type: "value",
  572. name: "风速(m/s)",
  573. nameTextStyle: {
  574. color: "#fff",
  575. },
  576. axisLabel: {
  577. textStyle: {
  578. color: "#eee",
  579. },
  580. },
  581. splitLine: {
  582. lineStyle: {
  583. color: ["#878787"],
  584. },
  585. },
  586. },
  587. {
  588. type: "value",
  589. name: "功率(kw)",
  590. nameTextStyle: {
  591. color: "#fff",
  592. },
  593. axisLabel: {
  594. textStyle: {
  595. color: "#eee",
  596. },
  597. },
  598. splitLine: {
  599. show: false,
  600. },
  601. },
  602. ],
  603. dataZoom: [
  604. {
  605. type: "inside",
  606. start: 0,
  607. end: 100,
  608. },
  609. ],
  610. series: ser,
  611. };
  612. if (res.data.statistics.success) {
  613. this.otherContentInfo = {
  614. operationRecordTs: this.formatDate(
  615. new Date(res.data.statistics.allTime.operationRecordTs)
  616. ),
  617. onLineStartTs: this.formatDate(
  618. new Date(res.data.statistics.allTime.onlineStartTs)
  619. ),
  620. onLineEndTs: this.formatDate(
  621. new Date(res.data.statistics.allTime.onlineEndTs)
  622. ),
  623. onLineDuration: `${res.data.statistics.allTime.onLineDuration.toFixed(
  624. 2
  625. )} h`,
  626. onLinePowerGeneration: `${res.data.statistics.onLinePowerGeneration.toFixed(
  627. 2
  628. )} kwh`,
  629. powerGenerationPerHour: `${res.data.statistics.powerGenerationPerHour.toFixed(
  630. 2
  631. )} kwh`,
  632. powerConsumption: `${res.data.statistics.powerConsumption.toFixed(
  633. 2
  634. )} kwh`,
  635. windUseRate: `${res.data.statistics.windUseRate.toFixed(2)} %`,
  636. score: res.data.statistics.score / 2,
  637. success: res.data.statistics.success,
  638. };
  639. } else {
  640. this.otherContentInfo = {};
  641. }
  642. this.showStartDialog = true;
  643. this.$nextTick(() => {
  644. let chartDom = document.getElementById("chart");
  645. chartDom.innerHTML = "";
  646. chartDom?.removeAttribute("_echarts_instance_");
  647. let chart = echarts.init(chartDom, null, { renderer: "svg" });
  648. chart.setOption(option);
  649. });
  650. });
  651. },
  652. formatDate(value) {
  653. var date = new Date(value);
  654. var y = date.getFullYear(),
  655. m = date.getMonth() + 1,
  656. d = date.getDate(),
  657. h = date.getHours(),
  658. i = date.getMinutes(),
  659. s = date.getSeconds();
  660. if (m < 10) {
  661. m = "0" + m;
  662. }
  663. if (d < 10) {
  664. d = "0" + d;
  665. }
  666. if (h < 10) {
  667. h = "0" + h;
  668. }
  669. if (i < 10) {
  670. i = "0" + i;
  671. }
  672. if (s < 10) {
  673. s = "0" + s;
  674. }
  675. var t = y + "-" + m + "-" + d + " " + h + ":" + i + ":" + s;
  676. return t;
  677. },
  678. },
  679. watch: {
  680. filterText(val) {
  681. this.$refs.tree.filter(val);
  682. },
  683. },
  684. };
  685. </script>
  686. <style lang="less" scoped>
  687. .body {
  688. background-color: #000000;
  689. height: 90vh;
  690. width: 102%;
  691. margin-left: -1%;
  692. margin-top: -40px;
  693. }
  694. .searchTitle {
  695. display: flex;
  696. flex-direction: row;
  697. justify-content: space-between;
  698. align-items: center;
  699. }
  700. .bodyDetial {
  701. display: flex;
  702. flex-direction: row;
  703. margin-left: 3vw;
  704. padding-top: 10px;
  705. color: #ffffff;
  706. height: 98%;
  707. }
  708. .left-item {
  709. width: 20%;
  710. height: 100%;
  711. background-color: rgba(77, 77, 77, 1);
  712. border-right: 2px solid #000000;
  713. }
  714. .right-item {
  715. width: 80%;
  716. height: 100%;
  717. background-color: rgba(77, 77, 77, 1);
  718. }
  719. .el-tree {
  720. color: #ffffff !important;
  721. background-color: rgba(77, 77, 77, 1) !important;
  722. }
  723. .el-tree-node:focus > .el-tree-node__content {
  724. background-color: #000000 !important;
  725. }
  726. .el-tree-node__content:hover {
  727. background-color: #000000 !important;
  728. }
  729. .dateBar {
  730. display: flex;
  731. flex-direction: row;
  732. align-items: center;
  733. justify-content: space-between;
  734. margin-left: 20px;
  735. }
  736. .pickers {
  737. margin-left: 20px;
  738. }
  739. .tables {
  740. margin-top: 20px;
  741. width: 95%;
  742. margin-left: 3%;
  743. position: relative;
  744. }
  745. .table {
  746. background-color: rgba(77, 77, 77, 1) !important;
  747. }
  748. .el-table td,
  749. .el-table th.is-leaf {
  750. border-bottom: 1px solid rgba(77, 77, 77, 1) !important;
  751. }
  752. .el-table__header {
  753. width: 100% !important;
  754. }
  755. .el-table__body-wrapper {
  756. background-color: rgba(77, 77, 77, 1) !important;
  757. }
  758. .el-table::before {
  759. width: 0;
  760. }
  761. tr {
  762. line-height: 1.5;
  763. background: #1e1e1e;
  764. margin-bottom: 2px;
  765. border-radius: 5px;
  766. }
  767. .table-main {
  768. font-size: 14px;
  769. width: 600px;
  770. text-align: center;
  771. background: #000000;
  772. margin: 5px;
  773. border-collapse: separate;
  774. border-spacing: 0px 5px;
  775. }
  776. .paginations {
  777. display: flex;
  778. flex-direction: row-reverse;
  779. }
  780. .titleinfoall {
  781. display: flex;
  782. position: absolute;
  783. left: 10px;
  784. bottom: 10px;
  785. }
  786. .showTitle {
  787. color: #ffffff;
  788. margin-right: 10px;
  789. }
  790. .fontSty {
  791. font-size: 12px;
  792. }
  793. .fontSty1 {
  794. font-weight: bold;
  795. }
  796. .showvalue {
  797. color: #ffffff;
  798. font-size: 14px;
  799. font-weight: bold;
  800. margin-right: 10px;
  801. }
  802. </style>
  803. <style lang="less">
  804. .el-dialog.currentBorder {
  805. border: 1px solid #eee;
  806. }
  807. .el-card.otherContentBox {
  808. background: rgb(36, 36, 36);
  809. .el-descriptions__header {
  810. color: #fff;
  811. }
  812. .el-descriptions__cell {
  813. white-space: nowrap;
  814. }
  815. .el-descriptions__body {
  816. color: #eee;
  817. background: rgb(36, 36, 36);
  818. }
  819. .empSvg {
  820. .el-empty__image {
  821. opacity: 0.9;
  822. }
  823. .el-empty__description {
  824. p {
  825. color: #eee;
  826. }
  827. }
  828. }
  829. }
  830. </style>