controlAllArea.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885
  1. <template>
  2. <div class="problem" @contextmenu="contextmenu">
  3. <div class="body">
  4. <img class="logo" src="../../assets/img/logo.png" alt="" />
  5. <div class="titleBar">
  6. <div class="title" @click="parametersContrast()">设备区</div>
  7. <el-select
  8. @change="listedChange()"
  9. class="inputs"
  10. v-model="selectValue"
  11. placeholder="请选择"
  12. >
  13. <el-option
  14. v-for="item in options"
  15. :key="item.value"
  16. :label="item.label"
  17. :value="item.value"
  18. >
  19. </el-option>
  20. </el-select>
  21. </div>
  22. <div
  23. class="content"
  24. style="
  25. margin-top: 20px;
  26. margin-left: 35px;
  27. height: 85%;
  28. overflow-y: auto;
  29. "
  30. >
  31. <!-- <el-scrollbar>
  32. <div class="scoll"> -->
  33. <div class="matrix" v-if="showList.length > 0">
  34. <!-- 简单矩阵 -->
  35. <box-select node=".box" @selectList="selectList">
  36. <div v-if="selectValue === '0'">
  37. <div v-for="(item, index) in allList" :key="index">
  38. <div class="box1">
  39. {{ key }}
  40. </div>
  41. <EaxyMatrxBlock
  42. @choose-click="handleClick"
  43. @on-click="handleDetails"
  44. :dataList="item"
  45. >
  46. </EaxyMatrxBlock>
  47. </div>
  48. </div>
  49. <!-- 全部矩阵 -->
  50. <div v-if="selectValue === '1'">
  51. <div v-for="(item, index) in allList" :key="index">
  52. <div class="box1">
  53. {{ key }}
  54. </div>
  55. <MatrixBlock
  56. @choose-click="handleClick"
  57. @on-click="handleDetails"
  58. :dataList="item"
  59. >
  60. </MatrixBlock>
  61. </div>
  62. </div>
  63. <!-- 其他 -->
  64. <div v-else>
  65. <MatrixBlock
  66. @choose-click="handleClick"
  67. @on-click="handleDetails"
  68. :dataList="showList"
  69. >
  70. </MatrixBlock>
  71. </div>
  72. </box-select>
  73. </div>
  74. <!-- </div>
  75. </el-scrollbar> -->
  76. </div>
  77. </div>
  78. <WindturbineDetailPages
  79. v-model="dialogVisible"
  80. :showSvg="showSvg"
  81. @close="handleClose"
  82. :windturbine="currentWindturbine"
  83. ></WindturbineDetailPages>
  84. <ParametersContrast
  85. :chooseList="chooseList"
  86. v-model="parametersDisplay"
  87. ></ParametersContrast>
  88. </div>
  89. </template>
  90. <script>
  91. import WindturbineDetailPages from "../WindturbineDetailPages.vue";
  92. import MatrixBlock from "../matrixBlock.vue";
  93. import EaxyMatrxBlock from "../eaxyMatrixBlock.vue";
  94. import BackgroundData from "utils/BackgroundData";
  95. import api from "api/index";
  96. import boxSelect from "components/boxSelect.vue";
  97. import ParametersContrast from "./parametersContrast.vue";
  98. export default {
  99. name: "ProblemArea",
  100. components: {
  101. WindturbineDetailPages,
  102. MatrixBlock,
  103. boxSelect,
  104. ParametersContrast,
  105. EaxyMatrxBlock,
  106. },
  107. props: {
  108. current: {
  109. type: Number,
  110. },
  111. datas: {
  112. type: String,
  113. },
  114. },
  115. data() {
  116. return {
  117. allNames: [],
  118. allList: {},
  119. dataList: [],
  120. showList: [],
  121. chooseList: [],
  122. lockValues: [],
  123. currentWindturbine: {},
  124. dialogVisible: false,
  125. showSvg: false,
  126. parametersDisplay: false,
  127. windturbinelist: {},
  128. options: [
  129. {
  130. value: "0",
  131. label: "简单矩阵",
  132. },
  133. {
  134. value: "1",
  135. label: "全部设备",
  136. },
  137. {
  138. value: "2",
  139. label: "故障",
  140. },
  141. {
  142. value: "3",
  143. label: "维护",
  144. },
  145. {
  146. value: "4",
  147. label: "离线",
  148. },
  149. {
  150. value: "5",
  151. label: "挂牌",
  152. },
  153. ],
  154. selectValue: "0",
  155. controlErorCodes: [
  156. "控制成功",
  157. "控制命令发送失败",
  158. "无效的控制地址",
  159. "被控设备异常",
  160. "无效的控制功能",
  161. "网络连接错误,检查场站通信",
  162. "控制结果读取超时",
  163. "未知错误",
  164. "控制命令错误",
  165. "收到无法识别数据",
  166. "未读取到数据包",
  167. "未知错误",
  168. "风机操作过频繁",
  169. "风机被挂牌",
  170. "风机操作与风机状态不符",
  171. "需要登录",
  172. ],
  173. };
  174. },
  175. computed: {},
  176. created: function () {
  177. this.controls();
  178. this.getLocks();
  179. },
  180. methods: {
  181. selectList(val) {
  182. val.forEach((item) => {
  183. this.handleClick(this.windturbinelist[item.id]);
  184. });
  185. },
  186. controls() {
  187. this.options = [
  188. {
  189. value: "0",
  190. label: "简单矩阵",
  191. },
  192. {
  193. value: "1",
  194. label: "全部设备",
  195. },
  196. {
  197. value: "2",
  198. label: "故障",
  199. },
  200. {
  201. value: "3",
  202. label: "维护",
  203. },
  204. {
  205. value: "4",
  206. label: "离线",
  207. },
  208. {
  209. value: "5",
  210. label: "挂牌",
  211. },
  212. ];
  213. let stationList = this.$store.state.stationList;
  214. stationList.forEach((item, index) => {
  215. let obj = {};
  216. obj.value = String(index + 6);
  217. obj.label = item.address;
  218. obj.stationId = item.code;
  219. this.options.push(obj);
  220. });
  221. let json = this.$store.state.windturbinelist;
  222. this.dataList = [];
  223. this.showList = [];
  224. let arr = Object.keys(json).sort();
  225. for (let id of arr) {
  226. let val = json[id];
  227. this.chooseList.forEach((item) => {
  228. if (item.windturbineId === val.windturbineId) {
  229. val.active = true;
  230. }
  231. });
  232. this.dataList.push(val);
  233. switch (Number(this.selectValue)) {
  234. case 0:
  235. this.showList.push(val);
  236. break;
  237. case 1:
  238. this.showList.push(val);
  239. break;
  240. case 2:
  241. val.status === 5 ? this.showList.push(val) : "";
  242. break;
  243. case 3:
  244. val.status === 6 ? this.showList.push(val) : "";
  245. break;
  246. case 4:
  247. val.status === 7 ? this.showList.push(val) : "";
  248. break;
  249. case 5:
  250. val.lockValue > 0 ? this.showList.push(val) : "";
  251. break;
  252. default:
  253. if (
  254. val.stationId ===
  255. this.options.filter((ops) => ops?.value === this.selectValue)[0]
  256. .stationId
  257. ) {
  258. this.showList.push(val);
  259. }
  260. break;
  261. }
  262. }
  263. let checkoutList = BackgroundData.getInstance().checkouts;
  264. checkoutList.forEach((item) => {
  265. let showIndex = null;
  266. this.showList.forEach((param, index) => {
  267. if (item.windturbineId === param.windturbineId) {
  268. showIndex = index;
  269. }
  270. });
  271. this.showList.splice(showIndex, 1);
  272. });
  273. },
  274. getLocks() {
  275. api.getCustomerLock().then((res) => {
  276. if (res) {
  277. this.lockValues = res.data;
  278. }
  279. });
  280. },
  281. /* 右键菜单 */
  282. contextmenu() {
  283. const remote = require("electron").remote;
  284. let that = this;
  285. let menuTemplate = [];
  286. if (
  287. this.selectValue === "0" ||
  288. this.selectValue === "1" ||
  289. this.selectValue === "2" ||
  290. this.selectValue === "3" ||
  291. this.selectValue === "4"
  292. ) {
  293. menuTemplate = [
  294. // {
  295. // label: "标注",
  296. // click() {
  297. // that.sendLock({ type: "marking" });
  298. // },
  299. // },
  300. {
  301. label: "挂牌",
  302. submenu: [
  303. {
  304. label: "检修",
  305. click() {
  306. that.sendLock({ value: "CheckLock" });
  307. },
  308. },
  309. {
  310. label: "故障维修",
  311. click() {
  312. that.sendLock({ value: "FaultLock" });
  313. },
  314. },
  315. {
  316. label: "场内受累检修",
  317. click() {
  318. that.sendLock({ value: "StationCheckLock" });
  319. },
  320. },
  321. {
  322. label: "场内受累故障",
  323. click() {
  324. that.sendLock({ value: "StationFaulLock" });
  325. },
  326. },
  327. {
  328. label: "场外受累电网",
  329. click() {
  330. that.sendLock({ value: "StationPowerLineLock" });
  331. },
  332. },
  333. {
  334. label: "场外受累天气",
  335. click() {
  336. that.sendLock({ value: "StationWeatherLock" });
  337. },
  338. },
  339. ],
  340. },
  341. {
  342. label: "取消挂牌",
  343. click() {
  344. that.sendLock({ value: "UnLock" });
  345. },
  346. },
  347. {
  348. label: "参数对比",
  349. click() {
  350. that.parametersContrast();
  351. },
  352. },
  353. ];
  354. } else {
  355. menuTemplate = [
  356. // {
  357. // label: "启动",
  358. // click() {
  359. // that.sendCommand({ controlType: "1", deviceType: "Manual" });
  360. // },
  361. // },
  362. // {
  363. // label: "停机",
  364. // click() {
  365. // that.sendCommand({ controlType: "2", deviceType: "Manual" });
  366. // },
  367. // },
  368. // {
  369. // label: "复位",
  370. // click() {
  371. // that.sendCommand({ controlType: "5", deviceType: "Manual" });
  372. // },
  373. // },
  374. // {
  375. // label: "维护",
  376. // click() {
  377. // that.sendCommand({ controlType: "6", deviceType: "Manual" });
  378. // },
  379. // },
  380. // {
  381. // label: "取消维护",
  382. // click() {
  383. // that.sendCommand({ controlType: "8", deviceType: "Manual" });
  384. // },
  385. // },
  386. {
  387. label: "挂牌",
  388. submenu: [
  389. {
  390. label: "检修",
  391. click() {
  392. that.sendLock({ value: "CheckLock" });
  393. },
  394. },
  395. {
  396. label: "故障维修",
  397. click() {
  398. that.sendLock({ value: "FaultLock" });
  399. },
  400. },
  401. {
  402. label: "场内受累检修",
  403. click() {
  404. that.sendLock({ value: "StationCheckLock" });
  405. },
  406. },
  407. {
  408. label: "场内受累故障",
  409. click() {
  410. that.sendLock({ value: "StationFaulLock" });
  411. },
  412. },
  413. {
  414. label: "场外受累电网",
  415. click() {
  416. that.sendLock({ value: "StationPowerLineLock" });
  417. },
  418. },
  419. {
  420. label: "场外受累天气",
  421. click() {
  422. that.sendLock({ value: "StationWeatherLock" });
  423. },
  424. },
  425. ],
  426. },
  427. {
  428. label: "取消挂牌",
  429. click() {
  430. that.sendLock({ value: "UnLock" });
  431. },
  432. },
  433. {
  434. label: "参数对比",
  435. click() {
  436. that.parametersContrast();
  437. },
  438. },
  439. // {
  440. // label: "标注",
  441. // click() {
  442. // that.sendLock({ type: "marking" });
  443. // },
  444. // },
  445. ];
  446. }
  447. const menu = remote.Menu.buildFromTemplate(menuTemplate);
  448. menu.popup(remote.getCurrentWindow());
  449. },
  450. sendCommand(msg, windturbine) {
  451. let bd = BackgroundData.getInstance();
  452. if (!bd.LoginUser) {
  453. this.$notify({
  454. title: "请登录",
  455. message: "控制风机需要先登录!",
  456. type: "warning",
  457. position: "bottom-right",
  458. offset: 60,
  459. duration: 3000,
  460. });
  461. return;
  462. }
  463. let sendList = [];
  464. if (windturbine) {
  465. sendList = windturbine;
  466. } else {
  467. this.chooseList.forEach((item) => {
  468. item.controlType = Number(msg.controlType);
  469. });
  470. sendList = this.chooseList;
  471. }
  472. if (sendList.length > 0) {
  473. bd.checkout(sendList);
  474. this.chooseList = [];
  475. let pairs = {};
  476. sendList.forEach((item) => {
  477. let ct = {
  478. windturbineId: item.windturbineId,
  479. stationId: item.stationId,
  480. projectId: item.projectId,
  481. modelId: item.modelId,
  482. controlType: item.controlType,
  483. lockType: item.lockType,
  484. userName: `system_${bd.LoginUser.name}`,
  485. userId: 0,
  486. auto: false,
  487. deviceType: msg.deviceType,
  488. };
  489. pairs[ct.windturbineId] = ct;
  490. });
  491. api.windturbControl(pairs).then((res) => {
  492. if (res) {
  493. this.controlSuccess(res);
  494. }
  495. });
  496. }
  497. },
  498. sendLock(msg, windturbine) {
  499. let bd = BackgroundData.getInstance();
  500. if (!bd.LoginUser) {
  501. this.$notify({
  502. title: "请登录",
  503. message: "控制风机需要先登录!",
  504. type: "warning",
  505. position: "bottom-right",
  506. offset: 60,
  507. duration: 3000,
  508. });
  509. return;
  510. }
  511. let sendList = [];
  512. if (windturbine) {
  513. windturbine.lockType = msg.value;
  514. sendList.push(windturbine);
  515. } else {
  516. this.chooseList.forEach((item) => {
  517. item.lockType = msg.value;
  518. });
  519. sendList = this.chooseList;
  520. }
  521. if (sendList.length > 0) {
  522. this.chooseList = [];
  523. let pairs = {};
  524. sendList.forEach((item) => {
  525. let ct = {
  526. windturbineId: item.windturbineId,
  527. stationId: item.stationId,
  528. projectId: item.projectId,
  529. modelId: item.modelId,
  530. controlType: item.controlType,
  531. lockType: item.lockType,
  532. userName: `system_${bd.LoginUser.name}`,
  533. userId: 0,
  534. };
  535. pairs[ct.windturbineId] = ct;
  536. });
  537. api.windturbControlLock(pairs).then((res) => {
  538. if (res) {
  539. this.controlSuccess(res);
  540. }
  541. });
  542. }
  543. },
  544. /* 控制成功 */
  545. controlSuccess(msg) {
  546. let bd = BackgroundData.getInstance();
  547. for (let id in msg.data) {
  548. let val = msg.data[id];
  549. if (val.errorCode !== "0") {
  550. bd.removeCheckouts(val);
  551. }
  552. }
  553. let mss = ""; // 信息
  554. let iserror = false; // 是否有控制错误的风机
  555. for (let v in msg.data) {
  556. let val = msg.data[v];
  557. if (val.errorCode > 0) {
  558. iserror = true;
  559. mss += `${val.windturbineId} ${
  560. this.controlErorCodes[val.errorCode]
  561. }\n`;
  562. }
  563. }
  564. let tp = iserror ? "warning" : "success";
  565. if (!iserror) {
  566. mss = "控制成功";
  567. }
  568. this.$notify({
  569. title: "控制",
  570. message: mss,
  571. type: tp,
  572. position: "bottom-right",
  573. offset: 60,
  574. duration: 3000,
  575. });
  576. },
  577. /* 控制失败 */
  578. controlError(err) {
  579. this.$notify({
  580. title: "控制出现错误",
  581. message: err.message,
  582. type: "warning",
  583. position: "bottom-right",
  584. offset: 60,
  585. duration: 3000,
  586. });
  587. },
  588. handleClick(values) {
  589. if (values.active) {
  590. let showIndex = null;
  591. this.chooseList.forEach((item, index) => {
  592. if (item.windturbineId === values.windturbineId) {
  593. showIndex = index;
  594. }
  595. });
  596. this.chooseList.splice(showIndex, 1);
  597. } else {
  598. this.chooseList.push(values);
  599. }
  600. this.showList.forEach((item) => {
  601. if (item.windturbineId === values.windturbineId) {
  602. item.active = !item.active;
  603. }
  604. });
  605. },
  606. listedChange() {
  607. this.chooseList = [];
  608. this.showList = [];
  609. if (Number(this.selectValue) >= 6) {
  610. console.log(
  611. this.options.filter((ops) => ops?.value === this.selectValue)[0]
  612. .stationId
  613. );
  614. this.$store.commit(
  615. "currentStation",
  616. this.options.filter((ops) => ops?.value === this.selectValue)[0]
  617. .stationId
  618. );
  619. } else {
  620. this.$store.commit("currentStation", "");
  621. }
  622. console.log(this.$store.state.currentStation);
  623. this.dataList.forEach((val) => {
  624. val.active = false;
  625. switch (Number(this.selectValue)) {
  626. case 0:
  627. this.showList.push(val);
  628. break;
  629. case 1:
  630. // if (
  631. // val.status === 5 ||
  632. // val.status === 6 ||
  633. // val.status === 7 ||
  634. // val.lockValue > 0
  635. // ) {
  636. this.showList.push(val);
  637. // }
  638. break;
  639. case 2:
  640. val.status === 5 ? this.showList.push(val) : "";
  641. break;
  642. case 3:
  643. val.status === 6 ? this.showList.push(val) : "";
  644. break;
  645. case 4:
  646. val.status === 7 ? this.showList.push(val) : "";
  647. break;
  648. case 5:
  649. val.lockValue > 0 ? this.showList.push(val) : "";
  650. break;
  651. default:
  652. if (
  653. val.stationId ===
  654. this.options.filter((ops) => ops?.value === this.selectValue)[0]
  655. .stationId
  656. ) {
  657. this.showList.push(val);
  658. }
  659. break;
  660. }
  661. });
  662. },
  663. handleDetails(itm) {
  664. this.dialogVisible = true;
  665. this.currentWindturbine = itm;
  666. },
  667. handleClose() {
  668. this.dialogVisible = false;
  669. this.showSvg = false;
  670. this.getLocks();
  671. },
  672. parametersContrast() {
  673. if (this.chooseList.length > 0) {
  674. this.parametersDisplay = true;
  675. }
  676. },
  677. },
  678. watch: {
  679. "$store.getters.windturbinelist": {
  680. deep: true,
  681. handler: function (json) {
  682. this.windturbinelist = json;
  683. this.dataList = [];
  684. this.showList = [];
  685. let arr = Object.keys(json).sort();
  686. let newArr = [];
  687. for (let id of arr) {
  688. let val = json[id];
  689. newArr.push(val);
  690. this.chooseList.forEach((item) => {
  691. if (item.windturbineId === val.windturbineId) {
  692. val.active = true;
  693. }
  694. });
  695. if (val.lockValue === 9) {
  696. val.lockValues = this.lockValues.filter(
  697. (item) => val.windturbineId === item.windturbineID
  698. )[0]?.value;
  699. }
  700. this.dataList.push(val);
  701. switch (this.selectValue) {
  702. case "0":
  703. this.showList.push(val);
  704. break;
  705. case "1":
  706. this.showList.push(val);
  707. break;
  708. case "2":
  709. if (val.status === 5) {
  710. this.showList.push(val);
  711. }
  712. break;
  713. case "3":
  714. if (val.status === 6) {
  715. this.showList.push(val);
  716. }
  717. break;
  718. case "4":
  719. if (val.status === 7) {
  720. this.showList.push(val);
  721. }
  722. break;
  723. case "5":
  724. if (val.lockValue > 0) {
  725. this.showList.push(val);
  726. }
  727. break;
  728. default:
  729. if (
  730. val.stationId ===
  731. this.options.filter((ops) => ops?.value === this.selectValue)[0]
  732. .stationId
  733. ) {
  734. this.showList.push(val);
  735. }
  736. break;
  737. }
  738. }
  739. // -----------------------------------------
  740. // if(this.selectValue === 0){
  741. let arr1 = [];
  742. let arr2 = [];
  743. let arr3 = [];
  744. let arr4 = [];
  745. this.allList = {};
  746. newArr.forEach((item) => {
  747. let Fid = item.projectId;
  748. if (Fid.indexOf("CL") != -1) {
  749. arr1.push(item);
  750. } else if (Fid.indexOf("KB") != -1) {
  751. arr2.push(item);
  752. } else if (Fid.indexOf("DX") != -1) {
  753. arr3.push(item);
  754. } else if (Fid.indexOf("SY") != -1) {
  755. arr4.push(item);
  756. }
  757. });
  758. // 获取场站
  759. // this.allNames = [];
  760. let stationList = this.$store.state.stationList;
  761. stationList.forEach((item, index) => {
  762. if (item.stationName.indexOf("崇礼") != -1) {
  763. this.allList[item.stationName] = arr1;
  764. } else if (item.stationName.indexOf("康保") != -1) {
  765. this.allList[item.stationName] = arr2;
  766. } else if (item.stationName.indexOf("代县") != -1) {
  767. this.allList[item.stationName] = arr3;
  768. } else if (item.stationName.indexOf("寿阳") != -1) {
  769. this.allList[item.stationName] = arr4;
  770. }
  771. });
  772. // console.log(this.allNames);
  773. console.log(this.allList);
  774. let checkoutList = BackgroundData.getInstance().checkouts;
  775. checkoutList.forEach((item) => {
  776. let showIndex = null;
  777. this.showList.forEach((param, index) => {
  778. if (item.windturbineId === param.windturbineId) {
  779. showIndex = index;
  780. }
  781. });
  782. this.showList.splice(showIndex, 1);
  783. });
  784. },
  785. },
  786. },
  787. };
  788. </script>
  789. <style scoped>
  790. .problem {
  791. height: 100%;
  792. }
  793. .body {
  794. border: 1px solid #373737;
  795. width: 100%;
  796. margin-left: 15px;
  797. margin-top: 10px;
  798. height: 61vh;
  799. }
  800. .body .scoll {
  801. height: 91%;
  802. }
  803. .titleBar {
  804. display: flex;
  805. flex-direction: row;
  806. align-items: center;
  807. }
  808. .title {
  809. color: #ffffff;
  810. font-size: 14px;
  811. margin-left: 32px;
  812. /* margin-top: 12px; */
  813. margin-bottom: 10px;
  814. /* width: 570px; */
  815. width: 29vw;
  816. height: 50px;
  817. display: flex;
  818. align-items: center;
  819. position: absolute;
  820. background-color: #000000;
  821. }
  822. .title::before {
  823. z-index: 1;
  824. content: "";
  825. position: absolute;
  826. left: -18px !important;
  827. /* top: 30px !important; */
  828. width: 5px;
  829. height: 5px;
  830. background-color: #54b75a;
  831. border-radius: 50%;
  832. }
  833. .inputs {
  834. border: none;
  835. width: 174px !important;
  836. margin-left: 110px;
  837. }
  838. .el-input__inner {
  839. background-color: rgb(100, 100, 100) !important;
  840. color: rgb(220, 220, 220) !important;
  841. border: 1px solid red !important;
  842. }
  843. .logo {
  844. position: absolute;
  845. top: 2px;
  846. left: 12px;
  847. }
  848. .content::-webkit-scrollbar {
  849. /*隐藏滚轮*/
  850. display: none;
  851. }
  852. .box1 {
  853. width: 99%;
  854. height: 40px;
  855. background-color: rgb(30, 30, 30);
  856. margin-top: 2px;
  857. text-align: left;
  858. line-height: 40px;
  859. color: #fff;
  860. box-sizing: border-box;
  861. padding-left: 20px;
  862. }
  863. </style>