| | |
| | | <el-tabs v-model="actTab" @tab-click="checkTab"> |
| | | <el-tab-pane :name="tab.ID" v-for="tab in devices" :key="tab.ID"> |
| | | <div slot="label" class="label-slot"> |
| | | <span>{{tab.Name}}</span> |
| | | <span |
| | | class="title" |
| | | :style="tab.Status == 1 ? { color: '#8A98B8' } : {}" |
| | | >{{ tab.Name }}</span |
| | | > |
| | | <span |
| | | class="capsule" |
| | | :class="{'online':tab.Status==0,'offline':tab.Status==1}" |
| | | >{{tab.Status==0?"å¨çº¿":"离线"}}</span> |
| | | :class="{ online: tab.Status == 0, offline: tab.Status == 1 }" |
| | | >{{ tab.Status == 0 ? "å¨çº¿" : "离线" }}</span |
| | | > |
| | | </div> |
| | | </el-tab-pane> |
| | | <!-- <el-tab-pane name="dev2"> |
| | | <div slot="label" class="label-slot"> |
| | | <span>转å¨è®¾å¤2</span> |
| | | <span class="capsule offline">离线</span> |
| | | </div> |
| | | </el-tab-pane>--> |
| | | </el-tabs> |
| | | <div class="btn-add-dev" @click="showAddDevice"> |
| | | <i class="el-icon-circle-plus"></i> |
| | | <!-- <div class="btn-add-dev" @click="showAddDevice"> |
| | | <span class="icon iconfont"> </span> |
| | | <span>æ·»å 设å¤</span> |
| | | </div> |
| | | </div> --> |
| | | </div> |
| | | <div class="general-view"> |
| | | <div class="indicator"> |
| | | <el-button>设å¤éå¯</el-button> |
| | | </div> |
| | | <div |
| | | class="indicator" |
| | | :class="{'lastOne':index==generalIndicators.length-1}" |
| | | v-for="(indicator,index) in generalIndicators" |
| | | :key="indicator.id" |
| | | > |
| | | <div class="title"> |
| | | <span |
| | | class="dot" |
| | | :class="{'kx':indicator.id=='kx','dx':indicator.id=='dx','ccgz':indicator.id=='ccgz'}" |
| | | ></span> |
| | | <span class="word">{{indicator.title}}</span> |
| | | </div> |
| | | <div class="indicator-val">{{indicator.slots.length}}</div> |
| | | </div> |
| | | </div> |
| | | <div class="table-area"> |
| | | <div class="filter-bar flex-box"> |
| | | <!-- <div> |
| | | <label>设å¤å°å:</label> |
| | | <div> |
| | | <el-input v-model="deviceAddr" size="small"></el-input> |
| | | </div> |
| | | </div>--> |
| | | <div> |
| | | <label>设å¤ç¶æ:</label> |
| | | <div> |
| | | <el-select v-model="deviceState" size="small"> |
| | | <el-option value="" label="å
¨é¨"></el-option> |
| | | <el-option value="1" label="读åä¸"></el-option> |
| | | <el-option value="0" label="空é²ä¸"></el-option> |
| | | <el-option value="2" label="ææ§½æ
é"></el-option> |
| | | </el-select> |
| | | <div class="t-d-content"> |
| | | <div class="general-view"> |
| | | <div class="indicator"> |
| | | <div class="icon-wrap"> |
| | | <div class="icon-div"><span class="iconfont"></span></div> |
| | | |
| | | <span class="text">设å¤éå¯</span> |
| | | </div> |
| | | </div> |
| | | <div class="btns"> |
| | | <el-button @click="findDeviceIfo" type="primary" size="small">æ¥è¯¢</el-button> |
| | | <div |
| | | class="indicator" |
| | | :class="{ lastOne: index == generalIndicators.length - 1 }" |
| | | v-for="(indicator, index) in generalIndicators" |
| | | :key="indicator.id" |
| | | > |
| | | <div class="img-desc"> |
| | | <img class="icon" :src="indicator.path" /> |
| | | </div> |
| | | <div class="title"> |
| | | <div class="indicator-val" :style="{ color: indicator.color }"> |
| | | <span |
| | | style="font-size: 24px" |
| | | :style="{ color: indicator.color }" |
| | | >{{ indicator.slots.length }}</span |
| | | > |
| | | 个 |
| | | </div> |
| | | <span class="word">{{ indicator.title }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <el-table class="thbg" :data="tableData" fit> |
| | | <el-table-column type="index" width="100" label="åºå·"></el-table-column> |
| | | <el-table-column prop="Name" label="ææ§½åç§°"></el-table-column> |
| | | <el-table-column prop="Status" label="ç¶æ"> |
| | | <template slot-scope="scope"> |
| | | <div class="table-area"> |
| | | <div class="filter-bar flex-box"> |
| | | <div> |
| | | <label>设å¤ç¶æ:</label> |
| | | <div> |
| | | <span v-if="scope.row.Status==0">空é²ä¸</span> |
| | | <span v-if="scope.row.Status==1">读åä¸</span> |
| | | <span v-if="scope.row.Status==2">ææ§½æ
é</span> |
| | | <el-select v-model="deviceState" size="small"> |
| | | <el-option value="" label="å
¨é¨"></el-option> |
| | | <el-option value="1" label="读åä¸"></el-option> |
| | | <el-option value="0" label="空é²ä¸"></el-option> |
| | | <el-option value="2" label="ææ§½æ
é"></el-option> |
| | | </el-select> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column prop="state" label="设å¤ç¶æ"></el-table-column> |
| | | <el-table-column prop="pic" label="ç°åºå¾ç"></el-table-column> |
| | | <el-table-column prop="addr" label="设å¤å°å"></el-table-column> |
| | | <el-table-column prop="tel" label="æ¥ä¿®çµè¯"></el-table-column> |
| | | <el-table-column label="æä½"> |
| | | <template slot-scope="scope"> |
| | | <div class="operation"> |
| | | <span @click="checkSlot(scope.row)">æ¥çææ§½</span> |
| | | </div> |
| | | </template> |
| | | </el-table-column>--> |
| | | </el-table> |
| | | </div> |
| | | <div class="btns"> |
| | | <el-button @click="findDeviceIfo" type="primary" size="small" |
| | | >æ¥è¯¢</el-button |
| | | > |
| | | </div> |
| | | </div> |
| | | <el-table |
| | | class="thbg" |
| | | :data="tableData" |
| | | fit |
| | | stripe |
| | | :header-cell-style="{ |
| | | background: '#2D52D7', |
| | | color: '#fff', |
| | | height: '50px', |
| | | }" |
| | | > |
| | | <el-table-column |
| | | type="index" |
| | | width="240" |
| | | label="åºå·" |
| | | ></el-table-column> |
| | | <el-table-column prop="Name" label="ææ§½åç§°"></el-table-column> |
| | | <el-table-column prop="Status" label="ç¶æ"> |
| | | <template slot-scope="scope"> |
| | | <div> |
| | | <span style="color: #6297f2" v-if="scope.row.Status == 0" |
| | | >空é²ä¸</span |
| | | > |
| | | <span style="color: #fea425" v-if="scope.row.Status == 1" |
| | | >读åä¸</span |
| | | > |
| | | <span style="color: #ed663e" v-if="scope.row.Status == 2" |
| | | >ææ§½æ
é</span |
| | | > |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | <el-dialog |
| | | :visible="visibleOfialogAddDev" |
| | |
| | | <el-input v-model="IP"></el-input> |
| | | </div> |
| | | <div slot="footer" class="btns"> |
| | | <el-button type="primary" size="small" @click="toAddDevice">ç¡®å®</el-button> |
| | | <el-button size="small" @click="visibleOfialogAddDev=false">åæ¶</el-button> |
| | | <el-button type="primary" size="small" @click="toAddDevice" |
| | | >ç¡®å®</el-button |
| | | > |
| | | <el-button size="small" @click="visibleOfialogAddDev = false" |
| | | >åæ¶</el-button |
| | | > |
| | | </div> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | <script> |
| | | import { addDevice, getDeviceList, getDeviceInfo } from '@/api/shuohuang'; |
| | | import { addDevice, getDeviceList, getDeviceInfo } from "@/api/shuohuang"; |
| | | export default { |
| | | data() { |
| | | return { |
| | | actTab: 'dev1', |
| | | actTab: "dev1", |
| | | devices: [], |
| | | generalIndicators: [{ id: 'dx', title: '读åä¸', slots: [] }, { id: 'kx', title: '空é²ä¸', slots: [] }, { id: 'ccgz', title: 'ææ§½æ
é', slots: [] }], |
| | | deviceAddr: '', |
| | | deviceState: '', |
| | | generalIndicators: [ |
| | | { |
| | | id: "dx", |
| | | title: "读åä¸", |
| | | slots: [], |
| | | color: "#FEA425", |
| | | path: "/images/shuohuang/ç» 780.png", |
| | | }, |
| | | { |
| | | id: "kx", |
| | | title: "空é²ä¸", |
| | | slots: [], |
| | | color: "#6297F2", |
| | | path: "/images/shuohuang/ç» 781.png", |
| | | }, |
| | | { |
| | | id: "ccgz", |
| | | title: "ææ§½æ
é", |
| | | slots: [], |
| | | color: "#ED663E", |
| | | path: "/images/shuohuang/ç» 782.png", |
| | | }, |
| | | ], |
| | | deviceAddr: "", |
| | | deviceState: "", |
| | | tableData: [], |
| | | visibleOfialogAddDev: false, |
| | | Name: '', |
| | | IP: '', |
| | | } |
| | | Name: "", |
| | | IP: "", |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.findDeviceList(); |
| | |
| | | methods: { |
| | | findDeviceList() { |
| | | let _this = this; |
| | | getDeviceList().then(res => { |
| | | getDeviceList().then((res) => { |
| | | _this.devices = res.data; |
| | | _this.actTab = _this.devices[0].ID; |
| | | _this.findDeviceIfo() |
| | | }) |
| | | _this.findDeviceIfo(); |
| | | }); |
| | | }, |
| | | findDeviceIfo() { |
| | | let _this = this; |
| | | getDeviceInfo({ |
| | | getDeviceInfo({ |
| | | DeviceID: this.actTab, |
| | | Status:this.deviceState |
| | | }).then(res => { |
| | | Status: this.deviceState, |
| | | }).then((res) => { |
| | | // debugger |
| | | _this.tableData = res.data; |
| | | //ç»è®¡å½åææ§½ç¶æ |
| | | let dx = _this.generalIndicators.find(indicator => indicator.id == 'dx'); |
| | | let kx = _this.generalIndicators.find(indicator => indicator.id == 'kx'); |
| | | let ccgz = _this.generalIndicators.find(indicator => indicator.id == 'ccgz'); |
| | | let dx = _this.generalIndicators.find( |
| | | (indicator) => indicator.id == "dx" |
| | | ); |
| | | let kx = _this.generalIndicators.find( |
| | | (indicator) => indicator.id == "kx" |
| | | ); |
| | | let ccgz = _this.generalIndicators.find( |
| | | (indicator) => indicator.id == "ccgz" |
| | | ); |
| | | dx.slots = []; |
| | | kx.slots = []; |
| | | ccgz.slots = []; |
| | | res.data.forEach(slot => { |
| | | res.data.forEach((slot) => { |
| | | if (slot.Status == 0) { |
| | | kx.slots.push(slot) |
| | | kx.slots.push(slot); |
| | | } |
| | | if (slot.Status == 1) { |
| | | dx.slots.push(slot) |
| | | dx.slots.push(slot); |
| | | } |
| | | if (slot.Status == 2) { |
| | | ccgz.slots.push(slot) |
| | | ccgz.slots.push(slot); |
| | | } |
| | | }) |
| | | }); |
| | | //_this.generalIndicators |
| | | }) |
| | | }); |
| | | }, |
| | | toAddDevice() { |
| | | let _this = this; |
| | | let params = { |
| | | Name: this.Name, |
| | | IP: this.IP |
| | | } |
| | | addDevice(params).then(res => { |
| | | IP: this.IP, |
| | | }; |
| | | addDevice(params).then((res) => { |
| | | if (res.success) { |
| | | this.$notify({ |
| | | type: 'success', |
| | | message: res.msg |
| | | }) |
| | | type: "success", |
| | | message: res.msg, |
| | | }); |
| | | _this.visibleOfialogAddDev = true; |
| | | } |
| | | }) |
| | | }); |
| | | }, |
| | | showAddDevice() { |
| | | this.visibleOfialogAddDev = true; |
| | | |
| | | }, |
| | | checkTab(tab, event) { |
| | | this.findDeviceIfo(); |
| | | }, |
| | | checkSlot(row) { |
| | | |
| | | } |
| | | } |
| | | } |
| | | checkSlot(row) {}, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | .transfer-device-manage { |
| | | padding: 20px; |
| | | // padding: 20px; |
| | | // .el-tabs__nav-scroll { |
| | | // overflow-x: scroll; |
| | | // } |
| | | .el-tabs__nav-wrap.is-scrollable { |
| | | padding-right: 90px; |
| | | } |
| | | |
| | | .el-tabs__item { |
| | | height: 45px; |
| | | line-height: 45px; |
| | |
| | | } |
| | | .header-with-tab { |
| | | position: relative; |
| | | background: #ffffff; |
| | | box-shadow: 0px 3px 6px rgba(160, 174, 230, 0.56); |
| | | border-radius: 10px; |
| | | padding: 0 35px; |
| | | padding-top: 15px; |
| | | .el-tabs__header { |
| | | margin: 0; |
| | | } |
| | | .el-tabs__item.is-active .label-slot .title { |
| | | color: #2d52d7; |
| | | } |
| | | .label-slot { |
| | | display: flex; |
| | | align-items: center; |
| | | padding: 0 20px; |
| | | font-weight: bold; |
| | | position: relative; |
| | | .title { |
| | | font-size: 14px; |
| | | } |
| | | .capsule { |
| | | width: 42px; |
| | | height: 20px; |
| | | width: 36px; |
| | | height: 18px; |
| | | margin-left: 10px; |
| | | line-height: 20px; |
| | | line-height: 18px; |
| | | position: absolute; |
| | | text-align: center; |
| | | top: 0px; |
| | | text-align: center; |
| | | border-radius: 20px; |
| | | font-size: 12px; |
| | | font-weight: normal; |
| | | color: #fff; |
| | | right: -20px; |
| | | &.online { |
| | | background: #00a854; |
| | | background: #2ace7c; |
| | | } |
| | | &.offline { |
| | | background: #f04134; |
| | | background: #8a98b8; |
| | | } |
| | | } |
| | | } |
| | | .btn-add-dev { |
| | | cursor: pointer; |
| | | position: absolute; |
| | | right: 0; |
| | | top: 10px; |
| | | color: #1890ff; |
| | | font-size: 14px; |
| | | i { |
| | | padding-right: 4px; |
| | | font-size: 16px; |
| | | } |
| | | // .btn-add-dev { |
| | | // cursor: pointer; |
| | | // position: absolute; |
| | | // right: 25px; |
| | | // top: 20px; |
| | | // /* color: #1890ff; */ |
| | | // font-size: 16px; |
| | | // } |
| | | } |
| | | .t-d-content { |
| | | background: #fff; |
| | | margin-top: 20px; |
| | | border-radius: 10px; |
| | | box-shadow: 0px 3px 6px rgb(160 174 230 / 56%); |
| | | padding: 30px 45px; |
| | | button span { |
| | | color: #fff; |
| | | } |
| | | } |
| | | .general-view { |
| | | display: flex; |
| | | padding: 30px; |
| | | .indicator { |
| | | flex: 1; |
| | | position: relative; |
| | | background: #f4f6f9; |
| | | width: 263px; |
| | | height: 101px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | margin-right: 50px; |
| | | |
| | | .img-desc { |
| | | margin-right: 8px; |
| | | |
| | | img { |
| | | width: 53px; |
| | | } |
| | | } |
| | | .icon-wrap { |
| | | display: flex; |
| | | flex-direction: column; |
| | | .icon-div { |
| | | background: #26d4b4; |
| | | width: 42px; |
| | | height: 42px; |
| | | line-height: 42px; |
| | | |
| | | border-radius: 21px; |
| | | box-shadow: 0 0 0 8px #caf0eb; |
| | | margin-bottom: 10px; |
| | | span { |
| | | font-size: 32px; |
| | | color: #fff; |
| | | } |
| | | } |
| | | } |
| | | &:not(.lastOne):after { |
| | | content: ""; |
| | | width: 1px; |
| | |
| | | } |
| | | .title { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | font-size: 14px; |
| | | color: #999; |
| | | margin-bottom: 10px; |
| | | .dot { |
| | | width: 10px; |
| | | height: 10px; |
| | | margin-right: 5px; |
| | | border-radius: 50%; |
| | | background: #01a854; |
| | | &.kx { |
| | | background: #0f77d1; |
| | | } |
| | | &.ccgz { |
| | | background: #f04235; |
| | | } |
| | | flex-direction: column; |
| | | .indicator-val { |
| | | font-size: 16px; |
| | | font-weight: bold; |
| | | } |
| | | } |
| | | .indicator-val { |
| | | font-size: 24px; |
| | | } |
| | | } |
| | | } |
| | | .table-area { |
| | | margin-top: 25px; |
| | | button { |
| | | background: #2d52d7 !important; |
| | | border-color: #2d52d7 !important; |
| | | } |
| | | .el-table--striped |
| | | .el-table__body |
| | | tr.el-table__row--striped |
| | | td.el-table__cell { |
| | | background: #f4f6f9; |
| | | } |
| | | th.el-table__cell > .cell { |
| | | color: #fff; |
| | | } |
| | | .thbg { |
| | | margin-top: 15px; |
| | | border: none; |
| | | } |
| | | .el-table__row > td { |
| | | border: none; |
| | | } |
| | | .el-table th.is-leaf { |
| | | border: none; |
| | | } |
| | | .el-table::before { |
| | | height: 0px; |
| | | } |
| | | } |
| | | .filter-bar.flex-box { |