leftdata.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011
  1. <template>
  2. <div class="backbone">
  3. <div class="BOXYI" v-hasPermi="['home:performance:performanceData']">
  4. <h3>任务统计</h3>
  5. <div class="BOXsan">
  6. <div class="YC02" @click="getwgl">
  7. <strong class="texyellow">
  8. {{ onrelevance ? onrelevance : 0 }}</strong
  9. >
  10. <span>待分析</span>
  11. </div>
  12. <div class="YC02" @click="getwfx">
  13. <strong class="textred"> {{ abnormal ? abnormal : 0 }}</strong>
  14. <span>异常中断</span>
  15. </div>
  16. <div class="YC03" @click="getpd">
  17. <strong class="textred"> {{ queueNumber ? queueNumber : 0 }}</strong>
  18. <span>排队中</span>
  19. </div>
  20. </div>
  21. <el-dialog title="待分析任务统计表" :visible.sync="glShow" width="45%">
  22. <!-- 外部容器设置最大高度和滚动条 -->
  23. <div style="max-height: 400px; overflow-y: auto">
  24. <el-table :data="glData" style="width: 100%">
  25. <el-table-column
  26. prop="fieldName"
  27. label="风场名称"
  28. width="180"
  29. ></el-table-column>
  30. <el-table-column
  31. prop="analysisName"
  32. label="分析名称"
  33. ></el-table-column>
  34. <el-table-column
  35. prop="createTime"
  36. label="创建时间"
  37. width="180"
  38. ></el-table-column>
  39. <el-table-column fixed="right" label="操作" width="100">
  40. <template slot-scope="scope">
  41. <el-button
  42. @click="handleClick(scope.row)"
  43. type="text"
  44. size="small"
  45. >编辑</el-button
  46. >
  47. </template>
  48. </el-table-column>
  49. </el-table>
  50. </div>
  51. </el-dialog>
  52. <el-dialog title="异常任务统计表" :visible.sync="YCShow" width="45%">
  53. <div style="max-height: 400px; overflow-y: auto">
  54. <el-table :data="FXData" style="width: 100%">
  55. <el-table-column prop="fieldName" label="风场名称" width="180">
  56. </el-table-column>
  57. <el-table-column prop="analysisName" label="分析名称">
  58. </el-table-column>
  59. <el-table-column prop="createTime" label="创建时间" width="180">
  60. </el-table-column>
  61. <el-table-column fixed="right" label="操作" width="100">
  62. <template slot-scope="scope">
  63. <el-button
  64. @click="YChandleClick(scope.row)"
  65. type="text"
  66. size="small"
  67. >编辑</el-button
  68. >
  69. </template>
  70. </el-table-column>
  71. </el-table>
  72. </div>
  73. </el-dialog>
  74. <el-dialog title="排队任务统计表" :visible.sync="PdShow" width="45%">
  75. <div style="max-height: 400px; overflow-y: auto">
  76. <el-table :data="PdData" style="width: 100%">
  77. <el-table-column prop="fieldName" label="风场名称" width="180">
  78. </el-table-column>
  79. <el-table-column prop="analysisName" label="分析名称">
  80. </el-table-column>
  81. <el-table-column prop="createTime" label="创建时间" width="180">
  82. </el-table-column>
  83. <el-table-column fixed="right" label="操作" width="100">
  84. <template slot-scope="scope">
  85. <el-button @click="PDClick(scope.row)" type="text" size="small"
  86. >编辑</el-button
  87. >
  88. </template>
  89. </el-table-column>
  90. </el-table>
  91. </div>
  92. </el-dialog>
  93. </div>
  94. <!-- 入库信息 -->
  95. <!-- 离线 -->
  96. <div class="BOX" v-hasPermi="['home:offlinedata']">
  97. <h3 class="centeredh3">
  98. 入库数据
  99. <span>
  100. <span style="cursor: pointer" @click="importdata">导入数据</span>
  101. <span style="cursor: pointer" @click="more">更多</span>
  102. </span>
  103. </h3>
  104. <div>
  105. <p class="titleYC"><span>风场名称</span><span>入库时间</span></p>
  106. <tabroll
  107. :table-data="tableData"
  108. :shujuloading="shujuloading"
  109. :columns="YCtableColumns"
  110. :column-widths="YCcolumnWidths"
  111. :max-height="140"
  112. ></tabroll>
  113. </div>
  114. </div>
  115. <!-- 在线 -->
  116. <div class="BOX" v-hasPermi="['home:onlinData']">
  117. <h3 class="centeredh3">
  118. 接入数据
  119. <span>
  120. <span style="cursor: pointer" @click="onlinedata">更多</span>
  121. </span>
  122. </h3>
  123. <div>
  124. <p class="titleYC"><span>风场名称</span><span>采集状态</span></p>
  125. <tabroll
  126. :table-data="hometopdata"
  127. :hometoploading="hometoploading"
  128. :columns="hometopColumns"
  129. :column-widths="hometopcolumnWidths"
  130. :max-height="140"
  131. ></tabroll>
  132. </div>
  133. </div>
  134. <el-dialog
  135. title="实时数据采集统计"
  136. :visible.sync="lineShow"
  137. width="1340px"
  138. :before-close="handleClose"
  139. >
  140. <el-container>
  141. <el-aside width="300px">
  142. <h1>当日实时数据</h1>
  143. <el-input
  144. placeholder="请输入内容"
  145. size="small"
  146. v-model="searchvalue"
  147. prefix-icon="el-icon-search"
  148. ></el-input>
  149. <div class="windbox">
  150. <el-empty
  151. v-if="filteredWindList.length === 0"
  152. :image-size="200"
  153. ></el-empty>
  154. <div
  155. class="windlist"
  156. v-for="(item, index) in filteredWindList"
  157. :key="index"
  158. >
  159. <h3>{{ item.windFarmName }}</h3>
  160. <p>数据类型: {{ item.typeName }}</p>
  161. <p>采集条数: {{ item.count }} 条</p>
  162. <p>采集时间: {{ item.latestDataTime }}</p>
  163. </div>
  164. </div>
  165. </el-aside>
  166. <el-main>
  167. <div class="inquire">
  168. <p>
  169. 风场名称:
  170. <el-select v-model="windvalue" placeholder="请选择" size="small">
  171. <el-option
  172. v-for="item in windoptions"
  173. :key="item.fieldCode"
  174. :label="item.fieldName"
  175. :value="item.fieldCode"
  176. >
  177. </el-option>
  178. </el-select>
  179. </p>
  180. <p>
  181. 类型:
  182. <el-select v-model="typevalue" placeholder="请选择" size="small">
  183. <el-option
  184. v-for="item in typeoptions"
  185. :key="item.paramKey"
  186. :label="item.paramValue"
  187. :value="item.paramKey"
  188. >
  189. </el-option>
  190. </el-select>
  191. </p>
  192. <p>
  193. 选择日期:
  194. <el-date-picker
  195. size="small"
  196. v-model="timeval"
  197. type="daterange"
  198. range-separator="至"
  199. start-placeholder="开始日期"
  200. end-placeholder="结束日期"
  201. @change="onDateChange"
  202. >
  203. </el-date-picker>
  204. </p>
  205. <div>
  206. <el-button size="small" @click="conditions">查询</el-button>
  207. <el-button size="small" @click="reset">重置</el-button>
  208. </div>
  209. </div>
  210. <el-table
  211. :data="ListtableData"
  212. style="width: 100%"
  213. class="custom-table"
  214. height="550"
  215. >
  216. <el-table-column prop="windFarmName" label="风场名称">
  217. </el-table-column>
  218. <el-table-column prop="typeName" label="类型" align="center">
  219. </el-table-column>
  220. <el-table-column
  221. prop="totalDays"
  222. label="采集总天数"
  223. align="center"
  224. width="150"
  225. >
  226. </el-table-column>
  227. <el-table-column
  228. prop="totalDataCount"
  229. label="采集总条数"
  230. align="center"
  231. width="180"
  232. >
  233. </el-table-column>
  234. <el-table-column
  235. prop="latestDataTime"
  236. label="最近采集时间"
  237. align="center"
  238. >
  239. </el-table-column>
  240. <el-table-column prop="canAnalysis" label="采集状态" align="center">
  241. <template #default="{ row }">
  242. {{ row.canAnalysis === 0 ? "不可分析" : "可分析" }}
  243. </template>
  244. </el-table-column>
  245. </el-table>
  246. </el-main>
  247. </el-container>
  248. </el-dialog>
  249. <el-dialog title="入库信息" width="70%" :visible.sync="dialogTableVisible">
  250. <el-button size="small" @click="importdata">导入数据</el-button>
  251. <el-table :data="gridData" style="max-height: 400px; overflow: auto">
  252. <el-table-column
  253. property="windFarmName"
  254. label="风场名称"
  255. show-overflow-tooltip
  256. width="150px"
  257. ></el-table-column>
  258. <el-table-column
  259. property="minuteTimeAreaList"
  260. label="SCADA分钟级"
  261. show-overflow-tooltip
  262. ></el-table-column>
  263. <el-table-column
  264. property="secondTimeAreaList"
  265. label="SCADA秒级"
  266. show-overflow-tooltip
  267. ></el-table-column>
  268. <el-table-column
  269. property="faultTimeAreaList"
  270. label="故障数据"
  271. show-overflow-tooltip
  272. ></el-table-column>
  273. <el-table-column
  274. property="warnTimeAreaList"
  275. label="报警数据"
  276. show-overflow-tooltip
  277. ></el-table-column>
  278. <el-table-column
  279. property="vibrationTimeAreaList"
  280. label="振动数据"
  281. show-overflow-tooltip
  282. ></el-table-column>
  283. </el-table>
  284. </el-dialog>
  285. </div>
  286. </template>
  287. <script>
  288. import {
  289. queryWaitTask,
  290. getAnalysisResultStateList,
  291. getAnalysisResultErrStateList,
  292. analysisResultList,
  293. getWindFieldNames,
  294. } from "@/api/ledger.js";
  295. import axios from "axios";
  296. import Tabroll from "./tabroll.vue";
  297. export default {
  298. // props: {
  299. // maplistArr: {
  300. // type: Object,
  301. // default: () => ({}),
  302. // },
  303. // defaultdata: {
  304. // type: Object,
  305. // default: () => ({}),
  306. // },
  307. // },
  308. components: {
  309. Tabroll,
  310. },
  311. data() {
  312. return {
  313. onrelevance: "",
  314. abnormal: "",
  315. queueNumber: "",
  316. glShow: false,
  317. YCShow: false,
  318. PdShow: false,
  319. lineShow: false,
  320. dialogTableVisible: false,
  321. glData: [],
  322. FXData: [],
  323. PdData: [],
  324. tableData: [],
  325. hometopdata: [],
  326. maxHeight: "200",
  327. gridData: [],
  328. shujuloading: false,
  329. hometoploading: false,
  330. searchvalue: "",
  331. timeval: [],
  332. windvalue: "",
  333. typevalue: "",
  334. windoptions: [],
  335. typeoptions: [
  336. {
  337. id: 1,
  338. type: "trans_type",
  339. typeName: "转化类型",
  340. paramKey: "second",
  341. paramValue: "SCADA秒级",
  342. status: 1,
  343. },
  344. {
  345. id: 2,
  346. type: "trans_type",
  347. typeName: "转化类型",
  348. paramKey: "minute",
  349. paramValue: "SCADA分钟级",
  350. status: 1,
  351. },
  352. {
  353. id: 3,
  354. type: "trans_type",
  355. typeName: "转化类型",
  356. paramKey: "fault",
  357. paramValue: "SCADA故障",
  358. status: 1,
  359. },
  360. {
  361. id: 4,
  362. type: "trans_type",
  363. typeName: "转化类型",
  364. paramKey: "warn",
  365. paramValue: "SCADA报警",
  366. status: 1,
  367. },
  368. // {
  369. // id: 5,
  370. // type: "trans_type",
  371. // typeName: "转化类型",
  372. // paramKey: "wave",
  373. // paramValue: "振动",
  374. // status: 1,
  375. // },
  376. ],
  377. windList: [],
  378. YCtableColumns: [{ prop: "windFarmName" }, { prop: "createTime" }],
  379. YCcolumnWidths: {
  380. windFarmName: 130,
  381. createTime: 150,
  382. },
  383. hometopColumns: [
  384. { prop: "windFarmName", label: "风场名称" },
  385. {
  386. prop: "canAnalysis",
  387. label: "分析状态",
  388. },
  389. ],
  390. hometopcolumnWidths: {
  391. windFarmName: 130,
  392. canAnalysis: 150,
  393. },
  394. ListtableData: [],
  395. startDate: "",
  396. endDate: "",
  397. pollInterval: null, // 轮询定时器
  398. pollTime: 5000, // 轮询间隔,单位:毫秒
  399. };
  400. },
  401. created() {
  402. this.getbacklog();
  403. this.ruku();
  404. // this.hometop();
  405. },
  406. computed: {
  407. filteredWindList() {
  408. return this.searchvalue
  409. ? this.windList.filter((item) =>
  410. item.windFarmName.includes(this.searchvalue),
  411. )
  412. : this.windList;
  413. },
  414. },
  415. // 在线版本 离线需要注释
  416. mounted() {
  417. this.startPolling();
  418. },
  419. // 在线版本 离线需要注释
  420. beforeDestroy() {
  421. this.stopPolling();
  422. },
  423. methods: {
  424. getbacklog() {
  425. queryWaitTask().then((res) => {
  426. this.abnormal = res?.data?.errCount;
  427. this.onrelevance = res?.data?.uncorrelatedCount;
  428. this.queueNumber = res?.data?.queueNumber;
  429. });
  430. },
  431. getwgl() {
  432. const arr = {
  433. pageSize: 999,
  434. analysisState: "-1",
  435. };
  436. analysisResultList(arr).then((res) => {
  437. this.glData = res.data.list;
  438. this.glShow = true;
  439. });
  440. },
  441. getwfx() {
  442. const arr = {
  443. pageSize: 999,
  444. errState: 1,
  445. };
  446. analysisResultList(arr).then((res) => {
  447. this.FXData = res.data.list;
  448. this.YCShow = true;
  449. });
  450. },
  451. getpd() {
  452. const arr = {
  453. pageSize: 999,
  454. analysisState: "10",
  455. };
  456. analysisResultList(arr).then((res) => {
  457. this.PdData = res.data.list;
  458. this.PdShow = true;
  459. });
  460. },
  461. PDClick(row) {
  462. const fieldName = row.fieldName; // 获取当前行的 fieldName 数据
  463. const analysisState = "10";
  464. // 打开新窗口
  465. const newWindow = window.open(
  466. "/home/performance/assetssMag?id=195",
  467. "_blank",
  468. );
  469. // 等待窗口加载完成后发送消息
  470. newWindow.onload = () => {
  471. newWindow.postMessage({ fieldName, analysisState }, "*");
  472. };
  473. },
  474. handleClick(row) {
  475. const fieldName = row.fieldName; // 获取当前行的 fieldName 数据
  476. const analysisState = "-1";
  477. // 打开新窗口
  478. const newWindow = window.open(
  479. "/home/performance/assetssMag?id=195",
  480. "_blank",
  481. );
  482. // 等待窗口加载完成后发送消息
  483. newWindow.onload = () => {
  484. newWindow.postMessage({ fieldName, analysisState }, "*");
  485. };
  486. },
  487. YChandleClick(row) {
  488. const fieldName = row.fieldName; // 获取当前行的 fieldName 数据
  489. const errState = 1;
  490. const analysisState = "30";
  491. // 打开新窗口
  492. const newWindow = window.open(
  493. "/home/performance/assetssMag?id=195",
  494. "_blank",
  495. );
  496. // 等待窗口加载完成后发送消息
  497. newWindow.onload = () => {
  498. newWindow.postMessage({ fieldName, errState, analysisState }, "*");
  499. };
  500. },
  501. more() {
  502. this.dialogTableVisible = true;
  503. axios
  504. .post(`/ETLapi/dataTransfer/pltIndexMore`)
  505. .then((res) => {
  506. if (res.data.code === 200) {
  507. this.gridData = res.data.datas.map((item) => {
  508. // 合并数组中的元素,用 '/' 分隔
  509. if (
  510. item.secondTimeAreaList &&
  511. item.secondTimeAreaList.length > 0
  512. ) {
  513. item.secondTimeAreaList = [item.secondTimeAreaList.join(" / ")];
  514. }
  515. if (item.faultTimeAreaList && item.faultTimeAreaList.length > 0) {
  516. item.faultTimeAreaList = [item.faultTimeAreaList.join(" / ")];
  517. }
  518. if (
  519. item.minuteTimeAreaList &&
  520. item.minuteTimeAreaList.length > 0
  521. ) {
  522. item.minuteTimeAreaList = [item.minuteTimeAreaList.join(" / ")];
  523. }
  524. if (
  525. item.vibrationTimeAreaList &&
  526. item.vibrationTimeAreaList.length > 0
  527. ) {
  528. item.vibrationTimeAreaList = [
  529. item.vibrationTimeAreaList.join(" / "),
  530. ];
  531. }
  532. if (item.warnTimeAreaList && item.warnTimeAreaList.length > 0) {
  533. item.warnTimeAreaList = [item.warnTimeAreaList.join(" / ")];
  534. }
  535. return item;
  536. });
  537. }
  538. if (res.data.code === 500) {
  539. this.$message.error(res.data.message);
  540. }
  541. })
  542. .catch((error) => {
  543. console.error("Error fetching data:", error);
  544. });
  545. },
  546. importdata() {
  547. window.open(this.$router.resolve({ path: "/transition" }).href, "_blank");
  548. },
  549. ruku() {
  550. axios
  551. .post(`/ETLapi/dataTransfer/recentlyImportedSuccessful5Data`)
  552. .then((res) => {
  553. if (res.data.code === 200) {
  554. this.tableData = res.data.datas;
  555. }
  556. if (res.data.code === 500) {
  557. this.$message.error(res.data.message);
  558. }
  559. })
  560. .catch((error) => {
  561. console.error("Error fetching data:", error);
  562. });
  563. },
  564. // 在线数据
  565. onlinedata() {
  566. this.windsite();
  567. this.lineShow = true;
  568. // 获取在线数据
  569. axios.post(`/transDataWeb/windFarmDayCount/getTodayData`).then((res) => {
  570. this.windList = res.data.datas;
  571. });
  572. this.conditions();
  573. },
  574. // 首页top
  575. hometop() {
  576. axios
  577. .post("/transDataWeb/windFarmDayCount/getIndexOnlineData")
  578. .then((res) => {
  579. this.hometopdata = res.data.datas.map((item) => ({
  580. ...item,
  581. canAnalysis: item.canAnalysis === 1 ? "可分析" : "不可分析",
  582. }));
  583. this.errorCount = 0; // 请求成功时重置错误计数
  584. })
  585. .catch((err) => {
  586. this.errorCount++;
  587. if (this.errorCount < 3) {
  588. console.log(`请求失败(第 ${this.errorCount} 次):`, err.message);
  589. }
  590. });
  591. },
  592. startPolling() {
  593. this.hometop(); // 先执行一次
  594. this.pollInterval = setInterval(this.hometop, this.pollTime);
  595. },
  596. stopPolling() {
  597. if (this.pollInterval) {
  598. clearInterval(this.pollInterval);
  599. this.pollInterval = null;
  600. }
  601. },
  602. conditions() {
  603. // 获取历史数据
  604. axios
  605. .post(`/transDataWeb/windFarmDayCount/getHistoryDataSummary`, {
  606. beginDate: this.startDate,
  607. endDate: this.endDate,
  608. type: this.typevalue,
  609. windFarmCode: this.windvalue,
  610. })
  611. .then((res) => {
  612. this.ListtableData = res.data.datas;
  613. });
  614. },
  615. reset() {
  616. this.startDate = "";
  617. this.endDate = "";
  618. this.typevalue = "";
  619. this.windvalue = "";
  620. this.timeval = [];
  621. },
  622. async windsite() {
  623. try {
  624. const res = await getWindFieldNames();
  625. this.windoptions = res.data;
  626. } catch (error) {
  627. console.error("Error fetching data:", error);
  628. }
  629. },
  630. onDateChange(date) {
  631. if (Array.isArray(date)) {
  632. this.startDate = this.$formatDate(date[0]);
  633. this.endDate = this.$formatDate(date[1]);
  634. if (this.endDate < this.startDate) {
  635. this.endDate = this.startDate;
  636. }
  637. } else {
  638. this.startDate = null;
  639. this.endDate = null;
  640. }
  641. },
  642. handleClose() {
  643. this.lineShow = false;
  644. this.reset();
  645. },
  646. },
  647. };
  648. </script>
  649. <style lang="scss" scoped>
  650. .backbone {
  651. width: 300px;
  652. color: #fff;
  653. border-radius: 5px;
  654. // padding: 20px;
  655. }
  656. .BOXYI {
  657. background: var(--cockpit-panel-inner-bg, rgba(0, 79, 95, 0.8));
  658. display: flex;
  659. flex-wrap: wrap;
  660. padding-left: 10px;
  661. padding-right: 10px;
  662. padding-bottom: 15px;
  663. color: #fff;
  664. border-radius: 5px;
  665. margin-bottom: 10px;
  666. .BOXsan {
  667. width: 100%;
  668. display: flex;
  669. justify-content: space-around;
  670. .YC01 {
  671. width: 154px;
  672. height: 60px;
  673. background-image: url("../../../../assets/001.png");
  674. background-size: 154px 60px;
  675. background-repeat: no-repeat;
  676. background-position: center;
  677. margin-top: 15px;
  678. text-align: center;
  679. strong {
  680. display: block;
  681. font-size: 26px;
  682. color: var(--cockpit-accent-color, #4bffff);
  683. }
  684. span {
  685. display: block;
  686. font-size: 12px;
  687. }
  688. }
  689. .YC02 {
  690. width: 70px;
  691. height: 60px;
  692. background-image: url("../../../../assets/002.png");
  693. background-size: 70px 60px;
  694. background-repeat: no-repeat;
  695. background-position: center;
  696. margin-top: 15px;
  697. text-align: center;
  698. cursor: pointer;
  699. .textred {
  700. color: #d9001b;
  701. }
  702. .texyellow {
  703. color: #facd91;
  704. }
  705. strong {
  706. display: block;
  707. font-size: 26px;
  708. color: var(--cockpit-accent-color, #4bffff);
  709. }
  710. span {
  711. display: block;
  712. font-size: 12px;
  713. }
  714. }
  715. .YC03 {
  716. width: 70px;
  717. height: 60px;
  718. background-image: url("../../../../assets/002.png");
  719. background-size: 70px 60px;
  720. background-repeat: no-repeat;
  721. background-position: center;
  722. margin-top: 15px;
  723. text-align: center;
  724. cursor: pointer;
  725. .textred {
  726. color: #d9001b;
  727. }
  728. .texyellow {
  729. color: #facd91;
  730. }
  731. strong {
  732. display: block;
  733. font-size: 26px;
  734. color: var(--cockpit-accent-color, #4bffff);
  735. }
  736. span {
  737. display: block;
  738. font-size: 12px;
  739. }
  740. }
  741. }
  742. h3 {
  743. margin-top: 5px;
  744. width: 100%;
  745. }
  746. }
  747. .BOX {
  748. background: var(--cockpit-panel-inner-bg, rgba(0, 79, 95, 0.8));
  749. display: flex;
  750. padding-left: 10px;
  751. flex-wrap: wrap;
  752. padding-bottom: 15px;
  753. color: #fff;
  754. border-radius: 5px;
  755. margin-bottom: 10px;
  756. h3 {
  757. margin-top: 5px;
  758. }
  759. .centeredh3 {
  760. width: 100%;
  761. display: flex;
  762. justify-content: space-between;
  763. margin-bottom: 5px;
  764. span {
  765. font-size: 12px;
  766. padding-right: 10px;
  767. }
  768. }
  769. }
  770. .Tabtab {
  771. font-size: 12px;
  772. }
  773. ::v-deep.el-table__cell {
  774. padding: 2px 0 !important;
  775. }
  776. ::v-deep.el-table .el-table__cell {
  777. padding: 2px 0 !important;
  778. }
  779. ::v-deep.el-table--scrollable-y .el-table__body-wrapper {
  780. overflow-y: clip !important;
  781. }
  782. .titleYC {
  783. font-size: 14px;
  784. background: var(--cockpit-table-header-bg, #214e5d);
  785. padding: 5px 0;
  786. span:nth-child(1) {
  787. margin: 0 70px 0 10px;
  788. }
  789. }
  790. .titleJQ {
  791. font-size: 14px;
  792. background: var(--cockpit-table-header-bg, #214e5d);
  793. padding: 5px 0;
  794. span:nth-child(1) {
  795. margin: 0 15px 0 10px;
  796. }
  797. span:nth-child(2) {
  798. margin: 0 45px 0 30px;
  799. }
  800. }
  801. #Tabtab {
  802. font-size: 12px;
  803. }
  804. ::v-deep.el-table .el-table__cell {
  805. padding: 2px 0 !important;
  806. }
  807. /* 去掉最下面的那一条线 */
  808. .el-table::before {
  809. height: 0px;
  810. }
  811. /* 滚动条样式 */
  812. ::v-deep .el-table__body-wrapper::-webkit-scrollbar-track {
  813. background-color: var(--cockpit-table-track-bg, #004f5f);
  814. }
  815. ::v-deep .el-table__body-wrapper::-webkit-scrollbar {
  816. width: 0px;
  817. opacity: 0.5;
  818. }
  819. ::v-deep .el-table__body-wrapper::-webkit-scrollbar-thumb {
  820. border-radius: 15px;
  821. // background-color: rgba(0, 79, 95, 0.75);
  822. }
  823. // 。。。。。。。。。。。。。。。。。。。。。。。。。。
  824. #Tabtab {
  825. font-size: 12px;
  826. }
  827. ::v-deep.el-table .el-table__cell {
  828. padding: 2px 0 !important;
  829. }
  830. /* 去掉最下面的那一条线 */
  831. .el-table::before {
  832. height: 0px;
  833. }
  834. /* 滚动条样式 */
  835. ::v-deep .el-table__body-wrapper::-webkit-scrollbar-track {
  836. background-color: var(--cockpit-table-track-bg, #004f5f);
  837. }
  838. ::v-deep .el-table__body-wrapper::-webkit-scrollbar {
  839. width: 0px;
  840. opacity: 0.5;
  841. }
  842. ::v-deep .el-table__body-wrapper::-webkit-scrollbar-thumb {
  843. border-radius: 15px;
  844. // background-color: rgba(0, 79, 95, 0.75);
  845. }
  846. .el-aside {
  847. background-color: #e9e9e9;
  848. .el-input {
  849. width: 273px;
  850. margin: 10px 0 0 10px;
  851. }
  852. .windbox {
  853. height: 565px;
  854. overflow: hidden;
  855. overflow-y: auto;
  856. .windlist {
  857. margin: 10px;
  858. padding: 10px;
  859. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
  860. p {
  861. line-height: 20px;
  862. }
  863. margin-bottom: 10px;
  864. background: #fff;
  865. }
  866. }
  867. /* 自定义滚动条样式 */
  868. ::-webkit-scrollbar {
  869. width: 8px;
  870. /* 设置滚动条的宽度 */
  871. }
  872. ::-webkit-scrollbar-thumb {
  873. background-color: #888;
  874. /* 滚动条滑块的颜色 */
  875. border-radius: 10px;
  876. /* 滚动条滑块的圆角 */
  877. border: 2px solid #f1f1f1;
  878. /* 滚动条滑块的边框 */
  879. }
  880. ::-webkit-scrollbar-thumb:hover {
  881. background-color: #555;
  882. /* 滚动条滑块的悬浮颜色 */
  883. }
  884. ::-webkit-scrollbar-track {
  885. background: #f1f1f1;
  886. /* 滚动条轨道的颜色 */
  887. border-radius: 10px;
  888. /* 滚动条轨道的圆角 */
  889. }
  890. }
  891. .el-main {
  892. padding-right: 0;
  893. .inquire {
  894. display: flex;
  895. p {
  896. margin-right: 10px;
  897. }
  898. .el-select {
  899. width: 180px;
  900. }
  901. .el-range-editor--small.el-input__inner {
  902. width: 240px;
  903. }
  904. }
  905. .el-table {
  906. margin: 20px 0;
  907. }
  908. }
  909. ::v-deep .custom-table .el-table__row {
  910. height: 40px;
  911. }
  912. .fenye {
  913. margin: 20px auto;
  914. text-align: center;
  915. }
  916. h1 {
  917. font-size: 24px;
  918. font-weight: 800;
  919. margin-left: 10px;
  920. margin-top: 10px;
  921. }
  922. ::v-deep .el-dialog {
  923. margin-top: 7vh !important;
  924. }
  925. </style>