index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797
  1. <template>
  2. <div class="history-warning">
  3. <div class="form-wrapper">
  4. <div class="search-wrapper">
  5. <div class="search-item">
  6. <span class="label">类型:</span>
  7. <div class="search-content">
  8. <el-select
  9. v-model="state.typeVal"
  10. clearable
  11. size="mini"
  12. placeholder="全部"
  13. popper-class="select"
  14. @change="
  15. () => {
  16. getStationList();
  17. typechange();
  18. }
  19. "
  20. >
  21. <el-option
  22. v-for="item in state.typeList"
  23. :key="item.value"
  24. :value="item.value"
  25. :label="item.label"
  26. >
  27. </el-option>
  28. </el-select>
  29. </div>
  30. </div>
  31. <div class="search-item">
  32. <span class="label">{{
  33. state.isshowwindturbineName ? "场站:" : "升压站:"
  34. }}</span>
  35. <div class="search-content">
  36. <el-select
  37. v-model="state.stationId"
  38. clearable
  39. size="mini"
  40. placeholder="全部"
  41. popper-class="select"
  42. @change="getWindturbineList"
  43. >
  44. <el-option
  45. v-for="item in stationList"
  46. :key="item.id"
  47. :value="item.id"
  48. :label="item.name"
  49. ></el-option>
  50. </el-select>
  51. </div>
  52. </div>
  53. <div class="search-item" v-if="state.isshowwindturbineName">
  54. <span class="label">机组:</span>
  55. <div class="search-content">
  56. <el-select
  57. v-model="state.deviceId"
  58. clearable
  59. size="mini"
  60. placeholder="全部"
  61. popper-class="select"
  62. >
  63. <el-option
  64. v-for="item in state.windturbineList"
  65. :key="item.id"
  66. :value="item.id"
  67. :label="item.name"
  68. >
  69. </el-option>
  70. </el-select>
  71. </div>
  72. </div>
  73. <div class="search-item" v-if="state.isshowwindturbineName">
  74. <span class="label">型号:</span>
  75. <div class="search-content">
  76. <el-select
  77. v-model="state.modelId"
  78. clearable
  79. size="mini"
  80. placeholder="全部"
  81. popper-class="select"
  82. >
  83. <el-option
  84. v-for="item in modelList"
  85. :key="item.id"
  86. :value="item.id"
  87. :label="item.name"
  88. >
  89. </el-option>
  90. </el-select>
  91. </div>
  92. </div>
  93. <div class="search-item" v-if="state.isshowwindturbineName">
  94. <span class="label">部件:</span>
  95. <div class="search-content">
  96. <el-select
  97. v-model="state.components"
  98. clearable
  99. size="mini"
  100. placeholder="全部"
  101. popper-class="select"
  102. >
  103. <el-option
  104. v-for="item in componentList"
  105. :key="item.id"
  106. :value="item.id"
  107. :label="item.name"
  108. >
  109. </el-option>
  110. </el-select>
  111. </div>
  112. </div>
  113. <div class="search-item">
  114. <span class="label">描述:</span>
  115. <div class="search-content"></div>
  116. <el-input
  117. v-model="state.description"
  118. placeholder="请输入..."
  119. size="mini"
  120. ></el-input>
  121. </div>
  122. <div class="search-item">
  123. <span class="label">日期:</span>
  124. <div class="search-content">
  125. <el-date-picker
  126. v-model="state.dateTime"
  127. size="mini"
  128. type="datetimerange"
  129. range-separator="-"
  130. format="YYYY-MM-DD HH:mm:ss"
  131. value-format="YYYY-MM-DD HH:mm:ss"
  132. start-placeholder="开始"
  133. end-placeholder="结束"
  134. popper-class="date-select"
  135. >
  136. </el-date-picker>
  137. </div>
  138. </div>
  139. </div>
  140. <div class="btns">
  141. <el-button class="buttons" round size="mini" @click="getAlarmHistoryt"
  142. >查询</el-button
  143. >
  144. <el-button
  145. size="mini"
  146. class="buttons"
  147. @click="export2Excel"
  148. round
  149. :disabled="state.tableData?.length == 0 ? true : false"
  150. >
  151. 导出</el-button
  152. >
  153. <el-button
  154. class="buttons"
  155. round
  156. size="mini"
  157. :disabled="!state.tableData?.length"
  158. @click="confirmItem(state.tableData)"
  159. >确认本页</el-button
  160. >
  161. </div>
  162. </div>
  163. <div class="table-wrapper">
  164. <div class="leftContent">
  165. <span>{{ pageTitle }}</span>
  166. </div>
  167. <el-table
  168. size="mini"
  169. :data="state.tableData"
  170. height="calc(100% - 35px - 55px)"
  171. style="width: 100%"
  172. stripe
  173. >
  174. <template v-if="state.isshowwindturbineName">
  175. <el-table-column
  176. v-for="item in state.tableHeader"
  177. :label="item.title"
  178. :prop="item.code"
  179. :key="item.code"
  180. :width="item.width || ''"
  181. show-overflow-tooltip
  182. :align="
  183. item.code == 'description' || item.code == 'faultCause'
  184. ? 'left'
  185. : 'center'
  186. "
  187. >
  188. <template #default="scope">
  189. <p :style="item.style && item.style(scope.row)">
  190. <span v-if="item.code == 'rank'">
  191. {{ tableFilter(scope.row.rank) }}
  192. </span>
  193. <span v-else-if="item.code == 'alarmtype'">
  194. {{ tableFilter(scope.row.alarmtype) }}
  195. </span>
  196. <span v-else-if="item.code == 'ts'">
  197. {{ formatTime(scope.row.ts) }}
  198. </span>
  199. <span
  200. :style="`color:${
  201. scope.row.confirmed ? '#05bb4c' : 'var(--el-color-danger)'
  202. }`"
  203. v-else-if="item.code == 'confirmed'"
  204. >
  205. {{ scope.row.confirmed ? "是" : "否" }}
  206. </span>
  207. <span v-else>
  208. {{
  209. scope.row[item.code] != "NULL" ? scope.row[item.code] : ""
  210. }}
  211. </span>
  212. </p>
  213. </template>
  214. </el-table-column>
  215. <el-table-column
  216. label="操作"
  217. width="100"
  218. header-align="center"
  219. align="center"
  220. >
  221. <template #default="scope">
  222. <el-button
  223. type="text"
  224. style="color: #05bb4c"
  225. @click="confirmItem([scope.row])"
  226. >确认本条</el-button
  227. >
  228. </template>
  229. </el-table-column>
  230. </template>
  231. <template v-else>
  232. <el-table-column
  233. v-for="item in state.tableHeader1"
  234. :label="item.title"
  235. :prop="item.code"
  236. :key="item.code"
  237. :width="item.width || ''"
  238. show-overflow-tooltip
  239. header-align="center"
  240. >
  241. <template #default="scope">
  242. <p :style="item.style && item.style(scope.row)">
  243. <span v-if="item.code == 'rank'">
  244. {{ tableFilter(scope.row.rank) }}
  245. </span>
  246. <span v-else-if="item.code == 'alarmtype'">
  247. {{ tableFilter(scope.row.alarmtype) }}
  248. </span>
  249. <span v-else-if="item.code == 'ts'">
  250. {{ formatTime(scope.row.ts) }}
  251. </span>
  252. <span v-else-if="item.code == 'endts'">
  253. {{ scope.row.endts > 0 ? formatTime(scope.row.endts) : "" }}
  254. </span>
  255. <span
  256. :style="`color:${
  257. scope.row.confirmed ? '#05bb4c' : 'var(--el-color-danger)'
  258. }`"
  259. v-else-if="item.code == 'confirmed'"
  260. >
  261. {{ scope.row.confirmed ? "是" : "否" }}
  262. </span>
  263. <span v-else>
  264. {{
  265. scope.row[item.code] != "NULL" ? scope.row[item.code] : ""
  266. }}
  267. </span>
  268. </p>
  269. </template>
  270. </el-table-column>
  271. <el-table-column
  272. label="操作"
  273. width="100"
  274. header-align="center"
  275. align="center"
  276. fixed="right"
  277. >
  278. <template #default="scope">
  279. <el-button
  280. type="text"
  281. style="color: #05bb4c"
  282. @click="confirmItem([scope.row])"
  283. >确认本条</el-button
  284. >
  285. </template>
  286. </el-table-column>
  287. </template>
  288. </el-table>
  289. <div class="pagination-wrapper">
  290. <el-pagination
  291. layout="total, sizes, prev, pager, next"
  292. :current-page="query.page"
  293. :page-size="query.limit"
  294. :page-sizes="[21, 100, 500, 1000]"
  295. :total="query.pageTotal"
  296. @size-change="
  297. (value) => {
  298. query.page = 1;
  299. query.limit = value;
  300. getAlarmHistoryt();
  301. }
  302. "
  303. @current-change="handlePageChange"
  304. ></el-pagination>
  305. </div>
  306. </div>
  307. </div>
  308. </template>
  309. <script setup name="historyWarning">
  310. import { watch, reactive, nextTick, computed, onMounted, ref } from "vue";
  311. import { useRouter, useRoute } from "vue-router";
  312. import BASE from "@/tools/basicTool.js";
  313. import dayjs from "dayjs";
  314. import {
  315. alarm_history,
  316. new_alarm_history,
  317. fetchWindturbineList,
  318. fetchModel,
  319. fetchRelatePartAndAlarmType,
  320. getWpList,
  321. confirmAlart,
  322. } from "@/api/zhbj/index.js";
  323. import { ElMessageBox, ElMessage } from "element-plus";
  324. import { outExportExcel } from "@/tools/excel/exportExcel.js"; //引入文件
  325. import { useStore } from "vuex";
  326. const pageTitle = "报警查询";
  327. const store = useStore();
  328. const route = useRoute();
  329. onMounted(() => {
  330. state.dateTime = [
  331. dayjs().startOf("day").format("YYYY-MM-DD HH:mm:ss"),
  332. dayjs().format("YYYY-MM-DD HH:mm:ss"),
  333. ];
  334. if (route.query.deviceType != "booststation") {
  335. state.deviceId = route.query.deviceId || "";
  336. state.alarmId = route.query.alarmId || "";
  337. state.typeVal = route.query.deviceType || "windturbine";
  338. state.modelId = route.query.modelId || "";
  339. } else {
  340. state.stationName = route.query.deviceId;
  341. state.deviceId = "";
  342. state.alarmId = route.query.alarmId || "";
  343. state.typeVal = route.query.deviceType || "booststation";
  344. }
  345. state.isshowwindturbineName = state.typeVal == "booststation" ? false : true;
  346. // if (route.query.ts) {
  347. // state.dateTime = [
  348. // `${dayjs(Number(route.query.ts)).format("YYYY-MM-DD")} 00:00:00`,
  349. // dayjs(Number(route.query.ts)).format("YYYY-MM-DD HH:mm:ss"),
  350. // ];
  351. // }
  352. // getStationList(); //场站
  353. getequipmentmodel_list(); //机型
  354. getfetchRelatePart(); //部件
  355. });
  356. // 机型
  357. const getequipmentmodel_list = async () => {
  358. const { data } = await fetchModel();
  359. state.modelListAll = data;
  360. };
  361. //所属部件
  362. const getfetchRelatePart = async () => {
  363. const { data } = await fetchRelatePartAndAlarmType();
  364. state.fetchListAll = data;
  365. };
  366. const confirmItem = (alarmItem) => {
  367. ElMessageBox("您确定要执行此操作吗?", "提示", {
  368. confirmButtonText: "确定",
  369. cancelButtonText: "取消",
  370. type: "warning",
  371. })
  372. .then(() => {
  373. confirmAlart(alarmItem)
  374. .then((res) => {
  375. if (res.code === 200) {
  376. ElMessage.success("确认成功");
  377. store.commit("removeWarning", alarmItem);
  378. getAlarmHistoryt();
  379. }
  380. })
  381. .catch(() => {
  382. ElMessage.error("确认失败,请重试");
  383. });
  384. })
  385. .catch(() => {});
  386. };
  387. const getColumnStyle = (columnItem) => {
  388. let style = "color:";
  389. if (columnItem.endts) {
  390. style += " #05bb4c";
  391. } else {
  392. style += "var(--el-color-danger)";
  393. }
  394. return style;
  395. };
  396. const state = reactive({
  397. typeList: [
  398. {
  399. label: "升压站",
  400. value: "booststation",
  401. },
  402. // {
  403. // label: "自定义",
  404. // value: "custom",
  405. // },
  406. {
  407. label: "风机",
  408. value: "windturbine",
  409. },
  410. {
  411. label: "光伏",
  412. value: "inverter",
  413. },
  414. ],
  415. typeVal: "windturbine",
  416. stationId: "",
  417. stationName: "",
  418. alarmId: "",
  419. windturbineList: [],
  420. deviceId: "",
  421. modelListAll: {},
  422. fetchListAll: {},
  423. modelId: "", //型号
  424. components: "", //部件
  425. description: "", //描述
  426. dateTime: [],
  427. startDate: null,
  428. endDate: null,
  429. tableData: [],
  430. isshowwindturbineName: true,
  431. ts: "",
  432. tableHeader: [
  433. { title: "时间", code: "ts", width: "150" },
  434. { title: "场站", code: "stationname", width: "150" },
  435. { title: "机组", code: "devicename", width: "150" },
  436. { title: "报警信息", code: "description", width: "180" },
  437. { title: "故障原因", code: "faultCause" },
  438. // { title: "级别", code: "rank", width: "80" },
  439. { title: "故障编码", code: "nemCode", width: "100" },
  440. // { title: "故障解决方法", code: "resolvent" },
  441. { title: "报警解除时间", code: "endtsName", width: "150" },
  442. {
  443. title: "状态",
  444. code: "isCloseName",
  445. // width: "80",
  446. style: getColumnStyle,
  447. width: 100,
  448. },
  449. { title: "是否确认", code: "confirmed", width: "100" },
  450. { title: "类型", code: "alarmTypeName", width: "80" },
  451. ],
  452. tableHeader1: [
  453. { title: "时间", code: "ts", width: "150" },
  454. { title: "升压站", code: "stationname", width: "150" },
  455. { title: "报警信息", code: "description" },
  456. // { title: "级别", code: "rank", width: "80" },
  457. { title: "报警解除时间", code: "endtsName", width: "150" },
  458. {
  459. title: "状态",
  460. code: "isCloseName",
  461. style: getColumnStyle,
  462. width: 100,
  463. // width: "80",
  464. },
  465. { title: "是否确认", code: "confirmed", width: "100" },
  466. { title: "类型", code: "alarmTypeName", width: "80" },
  467. ],
  468. });
  469. // 场站列表/升压站列表
  470. const stationList = ref([]);
  471. //获取场站列表
  472. const getStationList = async () => {
  473. const { data } = await getWpList(state.typeVal);
  474. stationList.value = data;
  475. if (state.deviceId && state.typeVal != "booststation") {
  476. let station = data.find((i) => {
  477. let st = i.id.split("_")[2];
  478. let dt = state.deviceId.split("_")[2];
  479. if (st == dt) {
  480. return i;
  481. }
  482. });
  483. state.stationId = station?.id;
  484. } else if (state.typeVal == "booststation") {
  485. let station = data.find((i) => i.name == state.stationName);
  486. state.stationId = station ? station?.id : data[0]?.id;
  487. } else {
  488. state.stationId = data[0]?.id;
  489. }
  490. state.stationId = route.query.stationId || state.stationId;
  491. route.query.stationId ? (state.modelId = modelList.value?.[0]?.id || "") : "";
  492. if (stationList.value.length) {
  493. getWindturbineList();
  494. }
  495. };
  496. // watch(
  497. // () => stationList,
  498. // (val, old) => {
  499. // val?.value?.length &&
  500. // nextTick(async () => {
  501. // await getWindturbineList();
  502. // });
  503. // },
  504. // {
  505. // deep: true,
  506. // immediate: true,
  507. // }
  508. // );
  509. watch(
  510. () => route,
  511. (val, old) => {
  512. if (route.query.deviceType != "booststation") {
  513. state.deviceId = route.query.deviceId || "";
  514. state.alarmId = route.query.alarmId || "";
  515. state.typeVal = route.query.deviceType || "windturbine";
  516. state.modelId = route.query.modelId || "";
  517. } else {
  518. state.stationName = route.query.deviceId;
  519. state.deviceId = "";
  520. state.alarmId = route.query.alarmId || "";
  521. state.typeVal = route.query.deviceType || "booststation";
  522. }
  523. state.isshowwindturbineName =
  524. state.typeVal == "booststation" ? false : true;
  525. getStationList();
  526. },
  527. {
  528. deep: true,
  529. immediate: true,
  530. }
  531. );
  532. //型号列表
  533. const modelList = computed(() => {
  534. if (state.typeVal != "booststation") {
  535. if (state.stationId == "") {
  536. return [];
  537. } else {
  538. state.modelId = route.query.deviceId
  539. ? route.query.modelId
  540. : state.modelListAll[state.stationId]?.[0]?.id || "";
  541. return state.modelListAll[state.stationId];
  542. }
  543. } else {
  544. return [];
  545. }
  546. });
  547. //部件列表
  548. const componentList = computed(() => {
  549. if (state.typeVal != "booststation") {
  550. if (state.stationId == "") {
  551. return [];
  552. } else {
  553. if (state.stationId.includes("FDC")) {
  554. return state.fetchListAll?.fjbj;
  555. } else {
  556. return state.fetchListAll?.gfbj;
  557. }
  558. }
  559. } else {
  560. return [];
  561. }
  562. });
  563. //get 风机
  564. const getWindturbineList = async () => {
  565. const { data } = await fetchWindturbineList(state.stationId);
  566. state.windturbineList = data;
  567. // state.modelId = modelList.value?.[0]?.id || "";
  568. await getAlarmHistoryt();
  569. };
  570. const query = reactive({
  571. page: 1,
  572. limit: 21,
  573. pageTotal: null,
  574. });
  575. // 获取历史记录表
  576. const getAlarmHistoryt = async () => {
  577. // if (route.params.deviceId && route.params.alarmId) {
  578. // state.stationId = "";
  579. // }
  580. BASE.showLoading();
  581. let params = {
  582. pageNum: query.page,
  583. pageSize: query.limit,
  584. alarmId: state.alarmId,
  585. alarmType: state.typeVal,
  586. stationid: state.stationId,
  587. deviceid: state.typeVal == "booststation" ? "" : state.deviceId,
  588. modelId: state.typeVal == "booststation" ? "" : state.modelId,
  589. components: state.components,
  590. description: state.description,
  591. begin: state.dateTime[0],
  592. end: state.dateTime[1],
  593. };
  594. const { data } = await alarm_history(params);
  595. BASE.closeLoading();
  596. query.pageTotal = data?.total;
  597. data?.ls?.forEach((ele) => {
  598. ele.isCloseName = ele.endts ? "已解除" : "未解除";
  599. ele.alarmTypeName =
  600. ele.alarmType === "booststation"
  601. ? "升压站"
  602. : ele.alarmType === "windturbine"
  603. ? "风机"
  604. : ele.alarmType === "inverter"
  605. ? "光伏"
  606. : "";
  607. ele.endtsName = ele.endts > 0 ? formatTime(ele.endts) : "";
  608. });
  609. state.tableData = data?.ls;
  610. };
  611. //报警类型变化
  612. const typechange = () => {
  613. state.alarmId = "";
  614. state.deviceId = "";
  615. state.isshowwindturbineName = state.typeVal == "booststation" ? false : true;
  616. };
  617. // 批量导出
  618. const export2Excel = async () => {
  619. let params = {
  620. pageNum: query.page,
  621. pageSize: query.pageTotal,
  622. alarmType: state.typeVal,
  623. stationid: state.stationId,
  624. deviceid: state.typeVal == "booststation" ? "" : state.deviceId,
  625. modelId: state.modelId,
  626. components: state.components,
  627. description: state.description,
  628. begin: state.dateTime[0],
  629. end: state.dateTime[1],
  630. };
  631. if (state.dateTime[1] - state.dateTime[0] > 6 * 24 * 60 * 60 * 1000) {
  632. this.$message({
  633. message: "导出时间范围不能大于7天",
  634. type: "warning",
  635. });
  636. } else {
  637. let tableHeader = [];
  638. let tableKey = [];
  639. const { data } = await alarm_history(params);
  640. if (state.isshowwindturbineName) {
  641. tableHeader = state.tableHeader.map((item) => item.title);
  642. tableKey = state.tableHeader.map((item) => item.code);
  643. } else {
  644. tableHeader = state.tableHeader1.map((item) => item.title);
  645. tableKey = state.tableHeader1.map((item) => item.code);
  646. }
  647. const stationName = stationList.value.find((ele) => {
  648. return ele.id === state.stationId;
  649. }).name;
  650. const fileName = `${stationName} ${state.dateTime[0]} ~ ${state.dateTime[1]} 数据表`;
  651. outExportExcel(
  652. tableHeader,
  653. tableKey,
  654. data.ls.map((item) => {
  655. return {
  656. ...item,
  657. ts: formatTime(item.ts),
  658. rank: tableFilter(item.rank),
  659. alarmtype: tableFilter(item.alarmtype),
  660. };
  661. }),
  662. fileName
  663. );
  664. ElMessage.success(`导出成功!`);
  665. }
  666. };
  667. // 分页导航
  668. const handlePageChange = (val) => {
  669. query.page = val;
  670. getAlarmHistoryt();
  671. };
  672. // 时间格式化
  673. const formatTime = (val) => {
  674. return dayjs(val).format("YYYY-MM-DD HH:mm:ss");
  675. };
  676. // 格式化
  677. const obj = {
  678. 1: "低级",
  679. 2: "低中级",
  680. 3: "中级",
  681. 4: "中高级",
  682. 5: "高级",
  683. booststation: "升压站",
  684. custom: "自定义",
  685. windturbine: "风机",
  686. };
  687. const messageTypeObj = {
  688. 1: "触发",
  689. 3: "解除",
  690. };
  691. const tableFilter = (val) => {
  692. return obj[val];
  693. };
  694. const messageTypeFilter = (val) => {
  695. return messageTypeObj[val];
  696. };
  697. </script>
  698. <style scoped lang="less">
  699. p {
  700. padding: 0;
  701. margin: 0;
  702. }
  703. .history-warning {
  704. height: 100%;
  705. width: 100%;
  706. padding: 0 20px;
  707. padding-bottom: 10px;
  708. .form-wrapper ::v-deep {
  709. display: flex;
  710. flex-direction: column;
  711. padding-top: 10px;
  712. position: relative;
  713. .search-wrapper {
  714. display: flex;
  715. align-items: center;
  716. font-size: 14px;
  717. font-family: Microsoft YaHei;
  718. font-weight: 400;
  719. color: #b3b3b3;
  720. margin-bottom: 10px;
  721. .search-item {
  722. display: flex;
  723. margin-right: 10px;
  724. max-width: 450px;
  725. align-items: center;
  726. .label {
  727. margin-right: 10px;
  728. text-align: right;
  729. white-space: nowrap;
  730. // width: 60px;
  731. }
  732. .search-content {
  733. flex: 1;
  734. }
  735. }
  736. }
  737. .btns {
  738. display: flex;
  739. justify-content: flex-end;
  740. margin-right: 10px;
  741. position: absolute;
  742. right: 0;
  743. top: 53px;
  744. }
  745. .buttons {
  746. background-color: rgba(5, 187, 76, 0.2);
  747. border: 1px solid #3b6c53;
  748. color: #b3b3b3;
  749. font-size: 14px;
  750. &:hover {
  751. background-color: rgba(5, 187, 76, 0.5);
  752. color: #ffffff;
  753. }
  754. }
  755. }
  756. .table-wrapper {
  757. height: calc(100% - 43px);
  758. width: 100%;
  759. .leftContent {
  760. width: 242px;
  761. height: 41px;
  762. display: flex;
  763. align-items: center;
  764. background: url("~@/assets/imgs/title_left_bg1.png") no-repeat;
  765. span {
  766. font-size: 16px;
  767. font-family: Microsoft YaHei;
  768. font-weight: 400;
  769. color: #05bb4c;
  770. margin-left: 25px;
  771. }
  772. }
  773. .pagination-wrapper :deep {
  774. text-align: right;
  775. margin-top: 10px;
  776. }
  777. }
  778. }
  779. </style>