CoreDeviceReportBank.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800
  1. <!-- 核心设备报表 -->
  2. <template>
  3. <div class="core-device-report">
  4. <div class="main-left">
  5. <Select
  6. class="system-select"
  7. width="217"
  8. :isReadOnly="true"
  9. tipPlace="top"
  10. caption="系统名称:"
  11. @change="changeCurSystem"
  12. v-model="systemId"
  13. :selectdata="systemList"
  14. :placeholder="'请选择'"
  15. hideClear
  16. />
  17. <div class="system-content">
  18. <div
  19. v-for="(item) in systemContentData"
  20. :key="'key_' + item.category_code"
  21. class="item-content"
  22. :class="{'active': item.isActive}"
  23. @click="changeEquipment(item.category_code)"
  24. >
  25. <div class="first-row">
  26. <div>{{item.name}}</div>
  27. <div>{{item.isMaintenance?'维保中' : ''}}</div>
  28. </div>
  29. <div class="sec-row">
  30. <div>
  31. {{item.num}}
  32. <span>{{systemId !== '1008'?'台' : item.unitText}}</span>
  33. </div>
  34. <span :class="{'abnormal': item.abnormal}">{{item.statusNum !== 0?item.statusNum : ''}}</span>
  35. </div>
  36. </div>
  37. </div>
  38. </div>
  39. <div class="main-right">
  40. <div class="search-container">
  41. <Input
  42. iconType="search"
  43. v-model="searchKey"
  44. placeholder="搜索"
  45. width="192"
  46. @pressEnter="getTableData"
  47. @clear="getTableData"
  48. />
  49. </div>
  50. <el-table
  51. :data="tableData"
  52. style="width: 100%;margin-bottom: 63px;"
  53. @row-click="showEquipmentStatus"
  54. >
  55. <el-table-column label="序号" prop="index" width="60"></el-table-column>
  56. <el-table-column prop="sbjc" label="设备名称" width="600"></el-table-column>
  57. <el-table-column prop="assetnum" label="设备内码"></el-table-column>
  58. <el-table-column prop="is_exception" label="状态">
  59. <template slot-scope="scope">
  60. <span
  61. style="display: inline-block;width: 6px;height:6px;border-radius: 3px;background: #0091FF;"
  62. :style="{'background': !scope.row.is_exception?'#0091FF' : '#F54E45'}"
  63. ></span>
  64. <span style="margin-left: 10px">{{ !scope.row.is_exception?'正常' : '异常' }}</span>
  65. </template>
  66. </el-table-column>
  67. <el-table-column prop="photos_num" label="照片">
  68. <template slot-scope="scope">
  69. <span
  70. style="color: #025BAA"
  71. :style="{'cursor': scope.row.photos_num?'pointer' : 'default'}"
  72. @click="showPicturesDetail(scope.row, 'equip')"
  73. >{{ scope.row.photos_num?(scope.row.photos_num + '张') : '—' }}</span>
  74. <!-- <span style="color: #025BAA" @click="showPicturesDetail(scope.row)">1张</span> -->
  75. </template>
  76. </el-table-column>
  77. <el-table-column prop="attachments_num" label="报告">
  78. <template slot-scope="scope">
  79. <span
  80. style="color: #025BAA"
  81. :style="{'cursor': scope.row.attachments_num?'pointer' : 'default'}"
  82. @click="(e) => showReportDetail(scope.row, 'equip', e)"
  83. >{{ scope.row.attachments_num?(scope.row.attachments_num+ '张') : '—'}}</span>
  84. <!-- <span style="color: #025BAA" @click="(e) => showReportDetail(scope.row, 'equip', e)">1张</span> -->
  85. </template>
  86. </el-table-column>
  87. </el-table>
  88. <div class="page">
  89. <el-pagination
  90. background
  91. layout="prev, pager, next"
  92. :total="tatol"
  93. :current-page="curPage"
  94. :page-size="pageSize"
  95. @current-change="changeTablePage"
  96. ></el-pagination>
  97. </div>
  98. <el-dialog :title="equipTitle" :visible.sync="dialogTableVisible" width="1260px">
  99. <el-date-picker
  100. style="margin-bottom: 12px;"
  101. v-model="dialogTime"
  102. type="daterange"
  103. range-separator="至"
  104. @change="changeTime"
  105. start-placeholder="开始日期"
  106. end-placeholder="结束日期"
  107. ></el-date-picker>
  108. <el-table :data="historyTableData" style="margin-bottom: 55px;" max-height="500">
  109. <el-table-column width="200" property="finishDate" label="日期"></el-table-column>
  110. <el-table-column width="100" property="typeName" label="事项类型"></el-table-column>
  111. <el-table-column property="taskName" label="事项名称"></el-table-column>
  112. <el-table-column width="100" property="photosNum" label="照片">
  113. <template slot-scope="scope">
  114. <span
  115. style="color: #025BAA"
  116. :style="{'cursor': scope.row.photosNum?'pointer' : 'default'}"
  117. @click="showPicturesDetail(scope.row, 'his')"
  118. >{{ scope.row.photosNum?(scope.row.photosNum + '张') : '—' }}</span>
  119. <!-- <span style="color: #025BAA" @click="showPicturesDetail(scope.row)">1张</span> -->
  120. </template>
  121. </el-table-column>
  122. <el-table-column width="100" property="attachmentsNum" label="报告">
  123. <template slot-scope="scope">
  124. <span
  125. style="color: #025BAA"
  126. :style="{'cursor': scope.row.attachmentsNum?'pointer' : 'default'}"
  127. @click="(e) => showReportDetail(scope.row, 'his', e)"
  128. >{{ scope.row.attachmentsNum?(scope.row.attachmentsNum+ '张') : '—'}}</span>
  129. <!-- <span style="color: #025BAA" @click="(e) => showReportDetail(scope.row, 'his', e)">1张</span> -->
  130. </template>
  131. </el-table-column>
  132. </el-table>
  133. <div class="page">
  134. <el-pagination
  135. background
  136. layout="prev, pager, next"
  137. :current-page="hisCurPage"
  138. :page-size="hisPageSize"
  139. :total="hisTotal"
  140. @current-change="changeHisTablePage"
  141. ></el-pagination>
  142. </div>
  143. </el-dialog>
  144. <div class="img-detail-container">
  145. <el-dialog :title="detailTitle" :visible.sync="showDetail" width="1260px">
  146. <div class="detail-container">
  147. <div class="pictures-menu">
  148. <div
  149. v-for="(item) in pictureList"
  150. :key="'id_' + item.id"
  151. class="item"
  152. @click="changeCurImg(item.id)"
  153. :class="{'active': item.isActive}"
  154. >
  155. <img :src="item.url" alt />
  156. <div class="name" :title="item.name">{{item.name}}</div>
  157. </div>
  158. </div>
  159. <div class="cur-img-container">
  160. <img v-if="curImg.url" :src="curImg.url" alt />
  161. </div>
  162. </div>
  163. </el-dialog>
  164. </div>
  165. </div>
  166. <div
  167. v-show="showAccessory"
  168. class="accessory-container"
  169. :style="{'top': accessoryPos.top + 'px', 'left': accessoryPos.left + 'px'}"
  170. >
  171. <div v-for="(item) in accessoryList" :key="'id_' + item.id">
  172. <a :href="item.url" target="_blank" :title="item.name">{{item.name}}</a>
  173. </div>
  174. </div>
  175. </div>
  176. </template>
  177. <script>
  178. import { Select, Input } from "meri-design";
  179. import {
  180. querySystemList,
  181. queryEquipmentList,
  182. queryTableData,
  183. queryHistoryTableData,
  184. queryDetailData,
  185. } from "../../api/coreDeviceReport";
  186. import _ from "lodash";
  187. import moment from "moment";
  188. export default {
  189. data() {
  190. return {
  191. plazaId: 1000423, // 广场id
  192. systemId: "", // 当前系统Id
  193. systemList: [], // 系统
  194. systemContentData: [
  195. // {id: 1, name: '高压配电柜', isMaintenance: true, num: 95, statusNum: 0, abnormal: false, isActive: true},
  196. // {id: 2, name: '变压器', isMaintenance: false, num: 256, statusNum: 12, abnormal: true, isActive: false},
  197. // {id: 3, name: '低压配电柜', isMaintenance: false, num: 354, statusNum: 0, abnormal: false, isActive: false},
  198. // {id: 4, name: '直流屏', isMaintenance: false, num: 175, statusNum: 0, abnormal: false, isActive: false},
  199. // {id: 5, name: '柴油发电机组', isMaintenance: false, num: 186, status: 0, abnormal: false, isActive: false},
  200. ], // 系统下的各种组成
  201. searchKey: "", // 搜索关键字
  202. tableData: [
  203. // {serialNumber: 1, equipmentName: 2, equipmentNumber: 3, status: '正常', photo: 5, report: 6},
  204. // {serialNumber: 1, equipmentName: 2, equipmentNumber: 3, status: '异常', photo: 5, report: 6},
  205. // {serialNumber: 1, equipmentName: 2, equipmentNumber: 3, status: '正常', photo: 5, report: 6},
  206. ], // 表数据
  207. curPage: 1, // 当前页码
  208. pageSize: 10, // 每页条数
  209. tatol: 0, // 总数据
  210. dialogTableVisible: false, // 弹窗显示状态
  211. // 核心设备实例
  212. equipTitle: "", // 核心设备弹窗名称
  213. assetnum: null, // 设备台账编码
  214. historyTableData: [], // 核心设备实例的所有历史事项信息
  215. dialogTime: null, // 弹框内的时间
  216. hisCurPage: 1, // 当前页码
  217. hisPageSize: 8, // 当前页码
  218. hisTotal: 0, // 总条数
  219. startTime: null, // 开始时间
  220. endTime: null, // 结束事件
  221. showDetail: false, // 显示照片、报告详情
  222. detailTitle: "图片预览", // 弹窗名称
  223. pictureList: [
  224. // {id: 1, url: require('../../assets/images/login_back.png'), name: '图层名称1.jpg'},
  225. // {id: 2, url: require('../../assets/images/matter_pop3.png'), name: '图层名称2.jpg'},
  226. // {id: 3, url: require('../../assets/images/login_back.png'), name: '图层名称3.jpg'},
  227. ], // 图片列表
  228. curImg: {}, // 当前图片
  229. isClickPicture: false, // 是否点击的是照片
  230. showAccessory: false, // 附件窗口显示状态
  231. isClickAccessory: false, // 是否点击的是附件
  232. accessoryList: [], // 附件
  233. accessoryPos: {
  234. top: 0,
  235. left: 0,
  236. }, // 附件弹窗位置
  237. };
  238. },
  239. components: {
  240. Select,
  241. Input,
  242. },
  243. computed: {},
  244. beforeMount() {
  245. let PLAZAID = localStorage.getItem("PLAZAID");
  246. this.plazaId = Number(PLAZAID) || 1000423;
  247. },
  248. mounted() {
  249. document.addEventListener("click", () => {
  250. setTimeout(() => {
  251. if (this.isClickAccessory) {
  252. this.isClickAccessory = false;
  253. return;
  254. }
  255. this.showAccessory = false;
  256. }, 20);
  257. });
  258. this.getSystemList();
  259. },
  260. methods: {
  261. /**
  262. * 获取系统列表数据
  263. */
  264. getSystemList() {
  265. querySystemList().then((res) => {
  266. if (res.result === "success") {
  267. let data = res.data;
  268. let newData = [];
  269. _.forEach(data, (item) => {
  270. newData.push({
  271. id: item.code,
  272. name: item.name,
  273. });
  274. });
  275. this.systemList = newData;
  276. const { query } = this.$route;
  277. if (!_.isEmpty(query)) {
  278. this.systemId = query.smsxt || newData[0].id;
  279. } else {
  280. this.systemId = newData[0].id;
  281. }
  282. this.getEquipmentOfSystem();
  283. }
  284. });
  285. },
  286. /**
  287. * 切换系统名称
  288. */
  289. changeCurSystem(val) {
  290. console.log("val", val);
  291. this.curPage = 1;
  292. this.getEquipmentOfSystem();
  293. },
  294. /**
  295. * 获取系统下的设备
  296. */
  297. getEquipmentOfSystem() {
  298. let param = {
  299. plazaId: this.plazaId,
  300. };
  301. if (this.systemId !== "") {
  302. param.smsxt = this.systemId;
  303. }
  304. queryEquipmentList("/data/home/querySystemCard", param).then((res) => {
  305. const { result, data } = res;
  306. if (result === "success") {
  307. let newData = [],
  308. abnormalList = [];
  309. if (!data[0].assetTypeList) {
  310. this.tableData = [];
  311. this.systemContentData = [];
  312. this.curPage = 1;
  313. this.tatol = 0;
  314. return;
  315. }
  316. _.forEach(data[0].assetTypeList, (item, index) => {
  317. let itemData = {
  318. name: item.category_name,
  319. isMaintenance: item.is_detecting,
  320. statusNum:
  321. item.category_code !== "rdd" && item.category_code !== "rqa"
  322. ? item.is_exception_num
  323. : item.is_exception_workorder_num,
  324. num: item.asset_num,
  325. abnormal: item.is_exception_num !== 0,
  326. category_code: item.category_code,
  327. };
  328. if (!item.category_code) {
  329. console.error("without category_code..", item);
  330. }
  331. if (item.is_exception_num === 0) {
  332. newData.push(itemData);
  333. } else {
  334. abnormalList.push(itemData);
  335. }
  336. });
  337. newData = abnormalList.concat(newData);
  338. _.map(newData, (o, i) => {
  339. return (o.isActive = i === 0);
  340. });
  341. const { query } = this.$route;
  342. _.forEach(newData, (item) => {
  343. if (item.category_code === "tja") {
  344. item.unitText = "个";
  345. } else if (item.category_code === "tjb") {
  346. item.unitText = "段";
  347. } else {
  348. item.unitText = "台";
  349. }
  350. });
  351. this.systemContentData = newData;
  352. if (!_.isEmpty(query) && query.equipId) {
  353. _.map(this.systemContentData, (o) => {
  354. return (o.isActive = o.category_code == query.equipId);
  355. });
  356. }
  357. this.getTableData();
  358. }
  359. });
  360. },
  361. /**
  362. * 切换系统下的设备
  363. */
  364. changeEquipment(id) {
  365. this.curPage = 1;
  366. _.map(this.systemContentData, (o) => {
  367. return (o.isActive = o.category_code === id);
  368. });
  369. this.getTableData();
  370. },
  371. /**
  372. * 获取表数据
  373. */
  374. getTableData() {
  375. let query = {
  376. category_code: _.find(this.systemContentData, (o) => {
  377. return o.isActive;
  378. }).category_code,
  379. };
  380. let url = `/data/sms_asset/query?plazaId=${this.plazaId}&page=${this.curPage}&size=${this.pageSize}&orderBy=is_exception,0`;
  381. if (_.trim(this.searchKey) !== "") {
  382. url = `${url}&keyword=${this.searchKey}:sbjc,sbjbm`;
  383. }
  384. queryTableData(url, query).then((res) => {
  385. const { result, count, data } = res;
  386. if (result === "success") {
  387. this.tatol = count;
  388. this.tableData = data;
  389. _.forEach(this.tableData, (item, index) => {
  390. item.index = (this.curPage - 1) * this.pageSize + index + 1;
  391. });
  392. }
  393. });
  394. },
  395. /**
  396. * 表第一列序号
  397. */
  398. indexMethod(index) {
  399. return index + 1;
  400. },
  401. /**
  402. * 切换页码
  403. */
  404. changeTablePage(page) {
  405. this.curPage = page;
  406. this.getTableData();
  407. },
  408. /**
  409. * 显示设备实例的维保、专维等状态
  410. */
  411. showEquipmentStatus(row, column, e) {
  412. let ins = this;
  413. setTimeout(() => {
  414. ins.hisCurPage = 1;
  415. if (ins.showDetail || ins.showAccessory) {
  416. return;
  417. }
  418. if (ins.isClickPicture) {
  419. ins.isClickPicture = false;
  420. return;
  421. }
  422. ins.equipTitle = row.sbjc;
  423. ins.dialogTableVisible = true;
  424. ins.assetnum = row.assetnum;
  425. ins.initTimePicker();
  426. }, 36);
  427. },
  428. /**
  429. * 获取核心设备实例的所有历史事项信息
  430. */
  431. getEquipmentHistoryMsg() {
  432. this.historyTableData = [];
  433. let param = {
  434. page: this.hisCurPage,
  435. size: this.hisPageSize,
  436. plazaId: this.plazaId,
  437. assetnum: this.assetnum,
  438. // assetnum: 24071,
  439. startDate: this.startTime,
  440. // startDate: 20000101000000,
  441. endDate: this.endTime,
  442. // endDate: 20200201000000
  443. };
  444. queryHistoryTableData("/data/base/queryDateByAssetNum", param).then(
  445. (res) => {
  446. const { result, data, count } = res;
  447. if (result === "success") {
  448. this.historyTableData = data;
  449. this.hisTotal = count;
  450. _.forEach(this.historyTableData, (item) => {
  451. let name;
  452. switch (item.type) {
  453. case 0:
  454. name = "专维";
  455. break;
  456. case 1:
  457. name = "维保";
  458. break;
  459. case 2:
  460. name = "第三方视图";
  461. break;
  462. }
  463. item.typeName = name;
  464. item.finishDate = moment
  465. .unix(item.finishDate / 1000)
  466. .format("YYYY.MM.DD");
  467. });
  468. }
  469. }
  470. );
  471. },
  472. /**
  473. * 初始化时间选择器
  474. */
  475. initTimePicker() {
  476. let endTime = new Date(),
  477. startTime = new Date(endTime.getTime() - 1000 * 60 * 60 * 24 * 30);
  478. this.dialogTime = [startTime, endTime];
  479. this.changeTime();
  480. },
  481. /**
  482. * 切换时间
  483. */
  484. changeTime() {
  485. this.hisCurPage = 1;
  486. if (this.dialogTime) {
  487. this.startTime = moment
  488. .unix(new Date(this.dialogTime[0]).getTime() / 1000)
  489. .format("YYYYMMDDHHmmss");
  490. this.endTime = moment
  491. .unix(new Date(this.dialogTime[1]).getTime() / 1000)
  492. .format("YYYYMMDDHHmmss");
  493. } else {
  494. this.initTimePicker();
  495. }
  496. this.getEquipmentHistoryMsg();
  497. },
  498. /**
  499. * 切换设备台账下所有历史事项信息页码
  500. */
  501. changeHisTablePage(page) {
  502. this.hisCurPage = page;
  503. this.getEquipmentHistoryMsg();
  504. },
  505. /**
  506. * 显示图片详情
  507. */
  508. showPicturesDetail(val, type) {
  509. if (type === "equip") {
  510. if (!val.photos_num) {
  511. this.isClickPicture = true;
  512. return;
  513. }
  514. if (!val.file_type || !val.file_type_id) {
  515. return;
  516. }
  517. } else {
  518. if (!val.photosNum) {
  519. this.isClickPicture = true;
  520. return;
  521. }
  522. }
  523. this.showDetail = true;
  524. this.detailTitle = "图片预览";
  525. this.getDetailData(val, type);
  526. },
  527. /**
  528. * 显示附件详情
  529. */
  530. showReportDetail(val, type, e) {
  531. if (type === "equip") {
  532. if (!val.attachments_num) {
  533. this.isClickPicture = true;
  534. return;
  535. }
  536. if (!val.file_type || !val.file_type_id) {
  537. return;
  538. }
  539. } else {
  540. if (!val.attachmentsNum) {
  541. this.isClickPicture = true;
  542. return;
  543. }
  544. }
  545. this.accessoryPos = {
  546. top: e.clientY + 5,
  547. left: e.clientX - 360 - 5,
  548. };
  549. this.showAccessory = true;
  550. this.isClickAccessory = true;
  551. this.detailTitle = "附件预览";
  552. this.getDetailData(val, type);
  553. },
  554. /**
  555. * 获取图片/报告详情
  556. */
  557. getDetailData(val, type) {
  558. let param = {
  559. assetnum: this.assetnum,
  560. plazaId: this.plazaId,
  561. file_type: type === "equip" ? val.file_type : val.type,
  562. // file_type: 0,
  563. file_type_id: type === "equip" ? val.file_type_id : val.id,
  564. // file_type_id: this.detailTitle === "图片预览" ?2914 : 1136,
  565. // file_type_id: 9886,
  566. type: this.detailTitle === "图片预览" ? 0 : 1,
  567. };
  568. queryDetailData("/data/base/queryFileDetails", param).then((res) => {
  569. const { result, data } = res;
  570. if (result === "success") {
  571. let newData = [];
  572. _.forEach(data, (item, index) => {
  573. newData.push({
  574. id: item.id,
  575. url: item.urlname,
  576. isActive: index === 0,
  577. name: item.description,
  578. });
  579. });
  580. if (this.detailTitle === "图片预览") {
  581. this.pictureList = newData;
  582. if (this.pictureList.length > 0) {
  583. this.curImg = this.pictureList[0];
  584. }
  585. } else {
  586. this.accessoryList = newData;
  587. }
  588. }
  589. });
  590. },
  591. /**
  592. * 切换当前预览大图
  593. */
  594. changeCurImg(id) {
  595. _.map(this.pictureList, (o) => {
  596. return (o.isActive = o.id === id);
  597. });
  598. this.curImg = _.find(this.pictureList, (o) => {
  599. return o.isActive;
  600. });
  601. },
  602. },
  603. };
  604. </script>
  605. <style lang='less' scoped>
  606. .core-device-report {
  607. display: flex;
  608. width: 100%;
  609. height: 100%;
  610. .main-left {
  611. padding-left: 16px;
  612. padding-right: 14px;
  613. padding-top: 12px;
  614. padding-bottom: 12px;
  615. width: 247px;
  616. border-top: 1px solid #e4e6e7;
  617. border-right: 1px solid #e4e6e7;
  618. .system-select {
  619. margin-bottom: 16px;
  620. }
  621. .item-content {
  622. padding-left: 12px;
  623. padding-right: 21px;
  624. padding-top: 7px;
  625. padding-bottom: 8px;
  626. border-bottom: 1px solid #e4e6e7;
  627. cursor: pointer;
  628. > div {
  629. display: flex;
  630. }
  631. .first-row {
  632. margin-bottom: 6px;
  633. display: flex;
  634. justify-content: space-between;
  635. > div:first-child {
  636. font-size: 14px;
  637. color: #1f2429;
  638. line-height: 19px;
  639. }
  640. > div:nth-of-type(2) {
  641. margin-left: 8px;
  642. font-size: 12px;
  643. color: #cd981d;
  644. line-height: 20px;
  645. }
  646. }
  647. .sec-row {
  648. margin-bottom: 6px;
  649. > div:first-child {
  650. font-size: 14px;
  651. color: #1f2429;
  652. line-height: 19px;
  653. > span {
  654. font-size: 12px;
  655. color: #646c73;
  656. }
  657. }
  658. // >div:nth-of-type(2){
  659. // padding-left: 8px;
  660. // padding-right: 8px;
  661. // font-size: 12px;
  662. // color: #0065B3;
  663. // line-height: 22px;
  664. // background: #E1F2FF;
  665. // }
  666. .abnormal {
  667. margin-left: 11px;
  668. padding-left: 3px;
  669. padding-right: 3px;
  670. font-size: 12px;
  671. color: #f54e45 !important;
  672. background: #fde3e2 !important;
  673. border-radius: 9px;
  674. }
  675. }
  676. }
  677. .system-content {
  678. .active {
  679. background: #e5eef5;
  680. border-radius: 2px;
  681. .first-row > div:first-child,
  682. .sec-row > div {
  683. color: #025baa;
  684. > span {
  685. color: #025baa;
  686. }
  687. }
  688. }
  689. }
  690. }
  691. .main-right {
  692. flex: 1;
  693. background: #fff;
  694. padding-left: 15px;
  695. padding-right: 13px;
  696. padding-top: 13px;
  697. padding-bottom: 25px;
  698. overflow: auto;
  699. .search-container {
  700. margin-bottom: 12px;
  701. }
  702. .page {
  703. display: flex;
  704. justify-content: flex-end;
  705. }
  706. }
  707. .el-dialog {
  708. min-height: 600px;
  709. }
  710. .detail-container {
  711. display: flex;
  712. height: 600px;
  713. }
  714. .pictures-menu {
  715. margin-right: 21px;
  716. padding-top: 16px;
  717. padding-bottom: 16px;
  718. padding-right: 5px;
  719. height: 100%;
  720. overflow: auto;
  721. .item {
  722. cursor: pointer;
  723. > img {
  724. width: 180px;
  725. border: 4px solid rgba(245, 246, 247, 1);
  726. border-radius: 4px;
  727. }
  728. .name {
  729. width: 180px;
  730. font-size: 12px;
  731. color: #1f2429;
  732. line-height: 16px;
  733. margin-top: 12px;
  734. text-align: center;
  735. overflow: hidden;
  736. text-overflow: ellipsis;
  737. white-space: nowrap;
  738. }
  739. &:not(:last-of-type) {
  740. margin-bottom: 20px;
  741. }
  742. .active > img {
  743. border-color: rgba(31, 35, 41, 0.15);
  744. }
  745. }
  746. .active > img {
  747. border-color: rgba(31, 35, 41, 0.15);
  748. }
  749. }
  750. .cur-img-container {
  751. padding: 20px;
  752. flex: 1;
  753. height: 100%;
  754. background: #f5f6f7;
  755. display: flex;
  756. justify-content: center;
  757. align-items: center;
  758. > img {
  759. max-width: 730px;
  760. max-height: 530px;
  761. }
  762. }
  763. .accessory-container {
  764. padding-top: 4px;
  765. padding-bottom: 4px;
  766. width: 360px;
  767. max-height: 166px;
  768. overflow: auto;
  769. position: fixed;
  770. background: #fff;
  771. box-shadow: 0px 2px 10px 0px rgba(31, 35, 41, 0.1);
  772. border-radius: 2px;
  773. border: 1px solid rgba(228, 229, 231, 1);
  774. z-index: 5000;
  775. > div > a {
  776. padding-left: 12px;
  777. padding-right: 12px;
  778. display: block;
  779. height: 38px;
  780. font-size: 14px;
  781. line-height: 38px;
  782. overflow: hidden;
  783. text-overflow: ellipsis;
  784. white-space: nowrap;
  785. &:hover {
  786. background: #f5f6f7;
  787. }
  788. }
  789. }
  790. }
  791. </style>