Cbd.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854
  1. <template>
  2. <div v-loading="pageLoading">
  3. <el-breadcrumb
  4. separator-class="el-icon-arrow-right"
  5. :class="'el-icon-arrow-right ' + (flag.flag == false ? 'breadcrumb_tab' : '')"
  6. >
  7. <el-breadcrumb-item>{{flag.siteNameTitle}} 物联网虫情测报</el-breadcrumb-item>
  8. </el-breadcrumb>
  9. <search-bar
  10. @fun="getDisplayType"
  11. @fun2="getIDName"
  12. @fun3="getIsOnline"
  13. ></search-bar>
  14. <div v-loading="tableLoading">
  15. <template v-if="displayType == 1">
  16. <el-row :gutter="10">
  17. <el-col
  18. :xs="24"
  19. :sm="24"
  20. :md="12"
  21. :lg="8"
  22. :xl="6"
  23. v-for="item in equipList"
  24. :key="item.imei"
  25. >
  26. <el-card class="box-card">
  27. <equip-item :is_online="item.device_status">
  28. <!-- <span slot="title">虫情测报</span> -->
  29. <span slot="title">{{
  30. (item.device_name == '' ? '无' : item.device_name) | ellipsis
  31. }}</span>
  32. <div slot="content" class="content">
  33. <p>
  34. <i class="iconfont icon-yonghu"></i>
  35. 设备ID:{{ item.device_id }}
  36. </p>
  37. <!-- <p :title="item.device_name">
  38. <i class="iconfont icon-biaoqian"></i>
  39. 设备名称:{{
  40. (item.device_name == '' ? '无' : item.device_name)
  41. | ellipsis
  42. }}
  43. </p> -->
  44. <p class="onlineState">
  45. <i class="iconfont icon-diannao"></i>在线状态:
  46. <span
  47. :class="{
  48. red: item.device_status == 0,
  49. green: item.device_status == 1
  50. }"
  51. >{{ item.device_status == 0 ? '离线' : '在线' }}</span
  52. >
  53. </p>
  54. <p>
  55. <i class="iconfont icon-shijian"></i>
  56. 最新上报时间 : {{ item.status_time }}
  57. </p>
  58. <p>
  59. <i class="iconfont icon-dizhi"></i>
  60. 地址 : {{ item.address || '无' }}
  61. </p>
  62. <p class="btns">
  63. <i class="iconfont icon-yemiancaozuo"></i>
  64. <el-button
  65. size="mini"
  66. type="info"
  67. @click="viewPhotoDialog(item.device_id, item.d_id)"
  68. >查看图片</el-button
  69. >
  70. <el-button
  71. size="mini"
  72. type="warning"
  73. @click="EquipControl(item.device_id)"
  74. >设备控制</el-button
  75. >
  76. <!-- <el-button size="mini" type="success" v-if="item.disc==1" @click="showTimeControlDialog(item.device_id)">害虫统计</el-button> -->
  77. <el-button
  78. size="mini"
  79. type="success"
  80. @click="
  81. showTimeControlDialog(
  82. item.device_id,
  83. item.device_name,
  84. item.address
  85. )
  86. "
  87. >害虫统计</el-button
  88. >
  89. <el-button
  90. size="mini"
  91. type="danger"
  92. @click="
  93. dataDetails(
  94. item.device_id,
  95. item.device_name,
  96. item.address
  97. )
  98. "
  99. >数据详情</el-button
  100. >
  101. </p>
  102. </div>
  103. </equip-item>
  104. </el-card>
  105. </el-col>
  106. </el-row>
  107. </template>
  108. <template v-if="displayType == 2">
  109. <el-card class="box-card">
  110. <el-table :data="equipList" stripe style="width: 100%">
  111. <el-table-column prop="device_id" label="设备ID" width="180">
  112. <template slot-scope="scope">{{ scope.row.device_id }}</template>
  113. </el-table-column>
  114. <el-table-column prop="device_name" label="设备名称" width="180">
  115. <template slot-scope="scope">{{
  116. scope.row.device_name == '' ? '无' : scope.row.device_name
  117. }}</template>
  118. </el-table-column>
  119. <el-table-column prop="device_status" label="在线状态">
  120. <template slot-scope="scope">
  121. <p style="color: #17bb89" v-if="scope.row.device_status == 1">
  122. 在线
  123. </p>
  124. <p style="color: #eb6765" v-if="scope.row.device_status == 0">
  125. 离线
  126. </p>
  127. </template>
  128. </el-table-column>
  129. <el-table-column prop="address" label="地址">
  130. <template slot-scope="scope">
  131. {{ scope.row.address == '' ? '暂无地址' : scope.row.address }}
  132. </template>
  133. </el-table-column>
  134. <el-table-column prop="status_time" label="最新上报时间">
  135. <template slot-scope="scope">{{
  136. scope.row.status_time
  137. }}</template>
  138. </el-table-column>
  139. <el-table-column label="操作" width="400">
  140. <template slot-scope="scope">
  141. <el-button
  142. size="mini"
  143. type="info"
  144. @click="viewPhotoDialog(scope.row.device_id, scope.row.d_id)"
  145. >查看图片</el-button
  146. >
  147. <el-button
  148. size="mini"
  149. type="warning"
  150. @click="EquipControl(scope.row.d_id)"
  151. >设备控制</el-button
  152. >
  153. <el-button
  154. size="mini"
  155. type="success"
  156. @click="
  157. showTimeControlDialog(
  158. scope.row.device_id,
  159. scope.row.device_name,
  160. scope.row.address
  161. )
  162. "
  163. >害虫统计</el-button
  164. >
  165. <el-button
  166. size="mini"
  167. type="danger"
  168. @click="
  169. dataDetails(
  170. scope.row.device_id,
  171. scope.row.device_name,
  172. scope.row.address
  173. )
  174. "
  175. >数据详情</el-button
  176. >
  177. </template>
  178. </el-table-column>
  179. </el-table>
  180. </el-card>
  181. </template>
  182. <!-- 暂无数据 -->
  183. <div
  184. class="expertDiagnosis_referral_units_not"
  185. v-if="equipList.length <= 0 && displayType == 1"
  186. >
  187. <img
  188. src="@/assets/images/zanwu.png"
  189. alt
  190. class="expertDiagnosis_referral_units_notImg"
  191. />
  192. </div>
  193. </div>
  194. <el-pagination
  195. v-if="equipList.length > 0"
  196. background
  197. :page-size="8"
  198. layout="prev, pager, next"
  199. :total="totalNum"
  200. :current-page="queryInfo.page"
  201. @current-change="changePage"
  202. ></el-pagination>
  203. <!-- 设备控制对话框 -->
  204. <el-dialog
  205. title="设备控制"
  206. :visible.sync="equipControlDialogVisible"
  207. @close="resetEquipControlDialogClosed"
  208. width="600px"
  209. >
  210. <div class="handAddForm">
  211. <el-form
  212. ref="equipContrlRef"
  213. :model="equipContrlForm"
  214. label-position="right"
  215. label-width="120px"
  216. >
  217. <el-form-item label="工作模式:" prop="ws">
  218. <el-select
  219. v-model="ws"
  220. placeholder="请选择害虫名称"
  221. @change="wsChange()"
  222. >
  223. <el-option label="节能" :value="0"></el-option>
  224. <el-option label="常规" :value="1"></el-option>
  225. <el-option label="加强" :value="2"></el-option>
  226. </el-select>
  227. </el-form-item>
  228. <el-form-item label="定时模式:" prop="ts">
  229. <el-select
  230. v-model="equipContrlForm.ts"
  231. placeholder="请选择害虫名称"
  232. >
  233. <el-option label="光控" :value="0"></el-option>
  234. <el-option label="时控" :value="1"></el-option>
  235. </el-select>
  236. </el-form-item>
  237. <el-form-item
  238. v-if="equipContrlForm.ts == 1"
  239. label="开始结束时间:"
  240. prop="st"
  241. >
  242. <el-col :span="11">
  243. <el-time-select
  244. placeholder="起始时间"
  245. v-model="equipContrlForm.st"
  246. :picker-options="{
  247. start: '00:00',
  248. step: '01:00',
  249. end: '24:00'
  250. }"
  251. ></el-time-select>
  252. </el-col>
  253. <el-col class="line" :span="2">-</el-col>
  254. <el-col :span="11">
  255. <el-time-select
  256. placeholder="结束时间"
  257. v-model="equipContrlForm.et"
  258. :picker-options="{
  259. start: '00:00',
  260. step: '01:00',
  261. end: '24:00'
  262. }"
  263. ></el-time-select>
  264. </el-col>
  265. </el-form-item>
  266. <el-form-item
  267. v-if="equipContrlForm.ts != 1"
  268. label="定时时长:"
  269. prop="tt"
  270. >
  271. <div class="sliderParent">
  272. <div class="block">
  273. <el-slider
  274. v-model="equipContrlForm.tt"
  275. show-input
  276. :min="1"
  277. :max="10"
  278. ></el-slider>
  279. </div>
  280. </div>
  281. </el-form-item>
  282. <el-form-item label="落虫时间:" prop="collt">
  283. <div class="sliderParent">
  284. <div class="block">
  285. <el-slider
  286. v-model="equipContrlForm.collt"
  287. show-input
  288. :min="1"
  289. :max="20"
  290. ></el-slider>
  291. </div>
  292. </div>
  293. </el-form-item>
  294. <el-form-item label="加热时间:" prop="htim">
  295. <div class="sliderParent">
  296. <div class="block">
  297. <el-slider
  298. v-model="equipContrlForm.htim"
  299. show-input
  300. :min="1"
  301. :max="20"
  302. ></el-slider>
  303. </div>
  304. </div>
  305. </el-form-item>
  306. <el-form-item label="加热温度:" prop="hst">
  307. <div class="sliderParent">
  308. <div class="block">
  309. <el-slider
  310. v-model="equipContrlForm.hst"
  311. show-input
  312. :min="75"
  313. :max="120"
  314. ></el-slider>
  315. </div>
  316. </div>
  317. </el-form-item>
  318. <el-form-item label="高温保护阈值:" prop="tph">
  319. <div class="sliderParent">
  320. <div class="block">
  321. <el-slider
  322. v-model="equipContrlForm.tph"
  323. show-input
  324. :min="50"
  325. :max="70"
  326. ></el-slider>
  327. </div>
  328. </div>
  329. </el-form-item>
  330. <el-form-item label="低温保护阈值:" prop="tpl">
  331. <div class="sliderParent">
  332. <div class="block">
  333. <el-slider
  334. v-model="equipContrlForm.tpl"
  335. show-input
  336. :min="1"
  337. :max="10"
  338. ></el-slider>
  339. </div>
  340. </div>
  341. </el-form-item>
  342. <el-form-item label="数据上传间隔:" prop="datt">
  343. <div class="sliderParent">
  344. <div class="block">
  345. <el-slider
  346. v-model="equipContrlForm.datt"
  347. :step="10"
  348. show-input
  349. :min="10"
  350. :max="60"
  351. ></el-slider>
  352. </div>
  353. </div>
  354. </el-form-item>
  355. <el-form-item label="图片分辨率:" prop="imgres">
  356. <el-select
  357. v-model="equipContrlForm.imgres"
  358. placeholder="请选择害虫名称"
  359. >
  360. <el-option label="高" :value="0"></el-option>
  361. <el-option label="中" :value="1"></el-option>
  362. <el-option label="低" :value="2"></el-option>
  363. </el-select>
  364. </el-form-item>
  365. <el-form-item class="handAddFormBtn">
  366. <el-button type="primary" size="mini" @click="equipControlSubm()"
  367. >确定</el-button
  368. >
  369. <el-button size="mini" @click="equipControlDialogVisible = false"
  370. >取消</el-button
  371. >
  372. </el-form-item>
  373. </el-form>
  374. </div>
  375. </el-dialog>
  376. <!-- 管理员操作弹框 -->
  377. <el-dialog title="信息" :visible.sync="operationDialogVisible" width="30%">
  378. <el-divider content-position="left">强制操作</el-divider>
  379. <el-row>
  380. <el-button
  381. type="primary"
  382. size="mini"
  383. @click="equipBtnControl('takephoto')"
  384. >拍照</el-button
  385. >
  386. <el-button type="primary" size="mini" @click="equipBtnControl('update')"
  387. >升级</el-button
  388. >
  389. <el-button type="primary" size="mini" @click="equipBtnControl('reboot')"
  390. >重启</el-button
  391. >
  392. <el-button
  393. type="primary"
  394. size="mini"
  395. @click="equipBtnControl('open_shake')"
  396. >震动开启</el-button
  397. >
  398. <el-button
  399. type="primary"
  400. size="mini"
  401. @click="equipBtnControl('close_shake')"
  402. >震动关闭</el-button
  403. >
  404. </el-row>
  405. <el-divider content-position="left">板子设置</el-divider>
  406. <el-row>
  407. <el-button type="primary" size="mini">查看原始imei</el-button>
  408. <el-button type="primary" size="mini">更改imei</el-button>
  409. </el-row>
  410. </el-dialog>
  411. </div>
  412. </template>
  413. <script>
  414. import SearchBar from '@/components/SearchBar'
  415. import EquipItem from '@/components/EquipItem'
  416. export default {
  417. props: {
  418. flag: {
  419. flag: Boolean,
  420. siteID: Number,
  421. siteNameTitle:String
  422. },
  423. },
  424. data() {
  425. return {
  426. //图表和表格切换
  427. displayType: '1',
  428. //设备列表
  429. equipList: [],
  430. // 设备加载loading
  431. tableLoading: false,
  432. pageLoading: false,
  433. device_id: '',
  434. currid: '', //选中配置设备id
  435. ws: 0, //工作模式
  436. equipContrlForm: {
  437. st: '',
  438. et: '',
  439. ts: 0,
  440. tt: null,
  441. collt: null,
  442. htim: null,
  443. hst: null,
  444. tph: null,
  445. tpl: null,
  446. datt: null,
  447. imgres: 0
  448. },
  449. //参数
  450. queryInfo: {
  451. page: 1,
  452. is_online: '',
  453. f_id: '',
  454. ename: ''
  455. },
  456. totalNum: 0,
  457. //设备控制对话框
  458. equipControlDialogVisible: false,
  459. operationDialogVisible: false,
  460. objData: {}
  461. }
  462. },
  463. mounted() {
  464. this.getEquipList()
  465. },
  466. computed: {
  467. userType: function () {
  468. //获取用户类型
  469. return window.sessionStorage.getItem('myuser_type')
  470. }
  471. },
  472. methods: {
  473. getIsOnline(data) {
  474. this.queryInfo.is_online = data
  475. this.queryInfo.page = 1
  476. this.getEquipList()
  477. },
  478. getIDName(data) {
  479. this.queryInfo.f_id = data.f_id
  480. this.queryInfo.ename = data.ename
  481. this.queryInfo.page = 1
  482. this.getEquipList()
  483. },
  484. getDisplayType(data) {
  485. this.displayType = data
  486. },
  487. //获取设备列表
  488. getEquipList(obj, page) {
  489. if (obj) {
  490. this.queryInfo.page = page
  491. this.objData = obj
  492. }
  493. var id = ''
  494. if (this.objData !== undefined) {
  495. id = this.objData.id
  496. } else if (obj !== undefined) {
  497. id = obj.id
  498. }
  499. this.tableLoading = true
  500. this.$axios({
  501. method: 'POST',
  502. url: '/equipmanage_cbd',
  503. data: this.qs.stringify({
  504. req: 'filter',
  505. page: this.queryInfo.page,
  506. is_online: this.queryInfo.is_online,
  507. ename: this.queryInfo.ename,
  508. f_id: this.queryInfo.f_id,
  509. dver: this.queryInfo.dver,
  510. // site_id: obj == undefined ? '' : obj.id,
  511. site_id: id,
  512. equip_type_id:3
  513. })
  514. }).then(
  515. (res) => {
  516. this.tableLoading = false
  517. if (res.status == 200) {
  518. var dataArr = []
  519. var dat = res.data.dat
  520. for (var i = 0; i < dat.length; i++) {
  521. dataArr.push({
  522. address: dat[i].locat,
  523. device_id: dat[i].equip_id,
  524. device_name: dat[i].equip_name,
  525. device_status: parseInt(dat[i].is_online),
  526. status_time: dat[i].upl_time
  527. })
  528. }
  529. this.equipList = dataArr
  530. this.totalNum = res.data.nums
  531. }
  532. },
  533. (error) => {
  534. this.dataloading = false
  535. this.$message.error('获取失败')
  536. }
  537. )
  538. },
  539. //改变page
  540. changePage(val) {
  541. this.queryInfo.page = val
  542. this.getEquipList()
  543. },
  544. // 数据详情
  545. dataDetails(e_id, name, address) {
  546. this.device_id = e_id
  547. this.$router.push({
  548. path: `/index/cbdDataDetails`,
  549. query: { id: e_id, name, address }
  550. })
  551. },
  552. // 查看图片
  553. viewPhotoDialog(id, d_id) {
  554. this.device_id = id
  555. this.$router.push({
  556. path: `/index/cbdDataPhotos/${id}`,
  557. query: { d_id: d_id }
  558. })
  559. },
  560. //设备控制
  561. EquipControl(id) {
  562. this.currid = id
  563. this.pageLoading = true
  564. this.$axios({
  565. method: 'POST',
  566. url: '/cbd_mqtt',
  567. data: this.qs.stringify({
  568. req: 'read',
  569. topicid: id,
  570. kind: 'paramconf'
  571. })
  572. }).then(
  573. (res) => {
  574. if (res.data == 0) {
  575. setTimeout(() => {
  576. this.$axios({
  577. method: 'POST',
  578. url: '/equipmanage_cbd',
  579. data: this.qs.stringify({
  580. req: 'paramconf',
  581. id: id,
  582. equip_type_id:3
  583. })
  584. }).then(
  585. (res) => {
  586. this.pageLoading = false
  587. if (res.data.paramconf) {
  588. this.equipContrlForm = eval('(' + res.data.paramconf + ')')
  589. } else {
  590. this.equipContrlForm = {
  591. collt: 10,
  592. datt: 20,
  593. et: 6,
  594. hst: 85,
  595. htim: 10,
  596. shake: 0,
  597. shake_sec: 1,
  598. st: 20,
  599. tph: 70,
  600. tpl: 5,
  601. ts: 1,
  602. tt: 8,
  603. imgres: 1
  604. }
  605. }
  606. this.equipControlDialogVisible = true
  607. },
  608. (error) => {
  609. this.pageLoading = false
  610. this.$message({
  611. type: 'error',
  612. message: '请求失败'
  613. })
  614. }
  615. )
  616. }, 3000)
  617. }
  618. },
  619. (error) => {
  620. this.pageLoading = false
  621. this.$message({
  622. type: 'error',
  623. message: '请求失败'
  624. })
  625. }
  626. )
  627. },
  628. //设备控制提交
  629. equipControlSubm() {
  630. var dat = {
  631. dropTime: this.equipContrlForm.collt,
  632. dataUpTime: this.equipContrlForm.datt,
  633. end: this.equipContrlForm.et,
  634. calefactionTemperature: this.equipContrlForm.hst,
  635. calefactionTime: this.equipContrlForm.htim,
  636. begin: this.equipContrlForm.st,
  637. highLimit: this.equipContrlForm.tph,
  638. lowLimit: this.equipContrlForm.tpl,
  639. timing: this.equipContrlForm.ts,
  640. timingLength: this.equipContrlForm.tt,
  641. imgres: this.equipContrlForm.imgres,
  642. id: this.currid,
  643. req: 'set'
  644. }
  645. this.$axios({
  646. method: 'POST',
  647. url: '/cbd_mqtt',
  648. data: this.qs.stringify(dat)
  649. }).then((res) => {
  650. if (res.data == 0) {
  651. this.$message.success('设备控制修改成功')
  652. this.equipControlDialogVisible = false
  653. } else {
  654. this.$message.error('设备控制修改失败')
  655. }
  656. })
  657. },
  658. resetEquipControlDialogClosed() {
  659. this.$refs.equipContrlRef.resetFields()
  660. this.ws = 0
  661. },
  662. //害虫统计
  663. showTimeControlDialog(id, name, address) {
  664. this.device_id = id
  665. console.log(name)
  666. console.log(address)
  667. this.$router.push({
  668. path: '/index/pestsStats/',
  669. query: { id: id, name: name, address: address }
  670. })
  671. },
  672. //设备控制->工作模式切换
  673. wsChange() {
  674. this.$confirm('确定修改工作模式?', '提示', {
  675. confirmButtonText: '确定',
  676. cancelButtonText: '取消',
  677. type: 'warning'
  678. })
  679. .then(() => {
  680. this.$axios({
  681. method: 'POST',
  682. url: '/api_gateway?method=forecast.send_control.device_control',
  683. data: this.qs.stringify({
  684. device_type_id: 3,
  685. d_id: this.d_id,
  686. work_type: this.ws
  687. })
  688. }).then((res) => {
  689. if (res.data.message == '') {
  690. this.$message({
  691. type: 'success',
  692. message: '修改成功!'
  693. })
  694. } else {
  695. this.$message({
  696. type: 'error',
  697. message: res.data.message
  698. })
  699. }
  700. })
  701. })
  702. .catch(() => {
  703. this.$message({
  704. type: 'info',
  705. message: '已取消修改'
  706. })
  707. })
  708. },
  709. equipOperation(d_id) {
  710. this.d_id = d_id
  711. this.operationDialogVisible = true
  712. },
  713. equipBtnControl(cmd) {
  714. this.$axios({
  715. method: 'POST',
  716. url: '/api_gateway?method=forecast.send_control.admin_device_control',
  717. data: this.qs.stringify({
  718. cmd,
  719. device_type_id: 3,
  720. d_id: this.d_id
  721. })
  722. }).then((res) => {
  723. if (res.data.message == '') {
  724. this.$message.success('指令下发成功!')
  725. }
  726. })
  727. }
  728. },
  729. components: {
  730. SearchBar,
  731. EquipItem
  732. },
  733. filters: {
  734. ellipsis(value) {
  735. if (!value) return ''
  736. if (value.length > 20) {
  737. return value.slice(0, 20) + '...'
  738. }
  739. return value
  740. }
  741. }
  742. }
  743. </script>
  744. <style lang="less" scoped>
  745. .handAddForm {
  746. /deep/.el-form-item {
  747. margin-bottom: 8px;
  748. }
  749. .handAddFormBtn {
  750. text-align: right;
  751. }
  752. }
  753. .sliderParent {
  754. display: flex;
  755. .block {
  756. flex: 1;
  757. margin-right: 10px;
  758. /deep/.el-slider__runway,
  759. /deep/.el-slider__bar {
  760. height: 10px;
  761. }
  762. }
  763. > span {
  764. width: 40px;
  765. }
  766. }
  767. .swi-box {
  768. text-align: center;
  769. padding: 10px 0;
  770. label {
  771. color: #333;
  772. margin-right: 8px;
  773. font-size: 14px;
  774. }
  775. i.el-icon-edit {
  776. margin-right: 8px;
  777. }
  778. }
  779. .real-time {
  780. display: flex;
  781. justify-content: left;
  782. align-items: center;
  783. padding: 20px 0;
  784. .left {
  785. margin-right: 10px;
  786. .icon-box {
  787. border-radius: 50%;
  788. width: 46px;
  789. height: 46px;
  790. padding: 5px;
  791. box-sizing: border-box;
  792. margin-bottom: 3px;
  793. img {
  794. width: 100%;
  795. height: auto;
  796. }
  797. }
  798. .aisle {
  799. text-align: center;
  800. font-size: 14px;
  801. color: #666;
  802. }
  803. }
  804. .right {
  805. color: #333;
  806. .num {
  807. font-weight: 600;
  808. font-size: 20px;
  809. margin-bottom: 3px;
  810. }
  811. .unit {
  812. font-size: 14px;
  813. color: #666;
  814. }
  815. }
  816. }
  817. .checkData {
  818. text-align: right;
  819. font-size: 14px;
  820. span {
  821. cursor: pointer;
  822. }
  823. }
  824. .red {
  825. color: rgb(235, 103, 101);
  826. }
  827. .green {
  828. color: rgb(23, 187, 137);
  829. }
  830. .el-date-editor--time-select {
  831. width: 100% !important;
  832. }
  833. .el-form .line {
  834. text-align: center;
  835. }
  836. .el-select {
  837. width: 100%;
  838. }
  839. .onlineState .icon-diannao {
  840. margin: 0 21px 0 -2px !important;
  841. }
  842. // 暂无数据
  843. .expertDiagnosis_referral_units_not {
  844. width: 272px;
  845. margin: 0 auto;
  846. }
  847. .breadcrumb_tab {
  848. top: 60px !important;
  849. }
  850. </style>