controlAllArea.vue 23 KB

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