|
|
|
|
<template>
|
|
|
|
|
<div class="tableContain">
|
|
|
|
|
<div class="headTitle">
|
|
|
|
|
<div class="xfMl">
|
|
|
|
|
<el-form :inline="true" :model="formIssue" class="demo-form-inline">
|
|
|
|
|
<el-form-item label="运维操作">
|
|
|
|
|
<el-select v-model="formIssue.operate" placeholder="请输入运维操作">
|
|
|
|
|
<el-option
|
|
|
|
|
v-for="item in operateOptions"
|
|
|
|
|
:key="item.id"
|
|
|
|
|
:label="item.name"
|
|
|
|
|
:value="item.id"
|
|
|
|
|
></el-option>
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item>
|
|
|
|
|
<el-button type="primary" @click="onIssue">下发命令</el-button>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-form>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="zzMsg">
|
|
|
|
|
<p class="total">
|
|
|
|
|
<span
|
|
|
|
|
>已选中:<el-tag type="primary">{{
|
|
|
|
|
multipleSelection.length
|
|
|
|
|
}}</el-tag></span
|
|
|
|
|
>
|
|
|
|
|
<span
|
|
|
|
|
>在线:<el-tag type="success">{{ onlineNum }}</el-tag></span
|
|
|
|
|
>
|
|
|
|
|
<span
|
|
|
|
|
>离线:<el-tag type="danger">{{ offlineNum }}</el-tag></span
|
|
|
|
|
>
|
|
|
|
|
<span
|
|
|
|
|
>未上传图片:<el-tag type="danger">{{ noPicNum }}</el-tag></span
|
|
|
|
|
>
|
|
|
|
|
<span
|
|
|
|
|
>装置总数:<el-tag type="info">{{ tableData.length }}</el-tag></span
|
|
|
|
|
>
|
|
|
|
|
</p>
|
|
|
|
|
<el-tooltip class="item" effect="dark" content="扩展列" placement="top">
|
|
|
|
|
<el-button
|
|
|
|
|
class="drawBox"
|
|
|
|
|
size="small"
|
|
|
|
|
type="primary"
|
|
|
|
|
icon="el-icon-s-operation"
|
|
|
|
|
@click="drawer = true"
|
|
|
|
|
></el-button>
|
|
|
|
|
</el-tooltip>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<el-table
|
|
|
|
|
class="ywTableBox"
|
|
|
|
|
ref="ywMultipleTable"
|
|
|
|
|
:data="tableData"
|
|
|
|
|
border
|
|
|
|
|
stripe
|
|
|
|
|
:row-key="getRowKey"
|
|
|
|
|
style="width: 100%"
|
|
|
|
|
@selection-change="handleSelectionChange"
|
|
|
|
|
height="calc(100% - 40px)"
|
|
|
|
|
:default-sort="{ order: 'descending' }"
|
|
|
|
|
>
|
|
|
|
|
<el-table-column type="selection" :reserve-selection="true" width="50">
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column type="index" width="50" label="序号"> </el-table-column>
|
|
|
|
|
<el-table-column prop="id" label="ID" width="60" sortable>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="oid" label="出厂ID" width="150" sortable>
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
{{
|
|
|
|
|
scope.row.raw_report.hasOwnProperty("oid")
|
|
|
|
|
? scope.row.raw_report.oid
|
|
|
|
|
: ""
|
|
|
|
|
}}
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="cmdid" label="装置编号" width="150" sortable>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="状态" width="72">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
<el-tag
|
|
|
|
|
type="success"
|
|
|
|
|
v-if="nowTime - scope.row.last_heartbeat_ts <= 720"
|
|
|
|
|
>在线</el-tag
|
|
|
|
|
>
|
|
|
|
|
<el-tag type="danger" v-else>离线</el-tag>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="运维" prop="in_maintain" width="70" sortable>
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
<el-checkbox
|
|
|
|
|
v-model="scope.row.in_maintain"
|
|
|
|
|
:true-label="'1'"
|
|
|
|
|
:false-label="'0'"
|
|
|
|
|
@change="(val) => UpdateMaintainMode(val, scope.row)"
|
|
|
|
|
></el-checkbox>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="快心跳" prop="quick_hb" width="88" sortable>
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
<el-checkbox
|
|
|
|
|
v-model="scope.row.quick_hb"
|
|
|
|
|
:true-label="'1'"
|
|
|
|
|
:false-label="'0'"
|
|
|
|
|
@change="(val) => UpdateQuickHbMode(val, scope.row)"
|
|
|
|
|
></el-checkbox>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column
|
|
|
|
|
prop="last_heartbeat"
|
|
|
|
|
label="最后心跳"
|
|
|
|
|
width="142"
|
|
|
|
|
sortable
|
|
|
|
|
class-name="hbClass"
|
|
|
|
|
>
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
<span @click="handleMsgClick(scope.row)">{{
|
|
|
|
|
scope.row.last_heartbeat
|
|
|
|
|
}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column
|
|
|
|
|
label="传图"
|
|
|
|
|
prop="raw_report.pic"
|
|
|
|
|
width="80"
|
|
|
|
|
class-name="picBg"
|
|
|
|
|
sortable
|
|
|
|
|
>
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
{{ scope.row.raw_report.pic }}
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column
|
|
|
|
|
prop="protocol"
|
|
|
|
|
label="规约"
|
|
|
|
|
width="80"
|
|
|
|
|
v-if="gycheck"
|
|
|
|
|
sortable
|
|
|
|
|
>
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
{{ protocolMap[scope.row.protocol] }}
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="电池状态" min-width="120" v-if="dccheck">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
{{
|
|
|
|
|
scope.row.raw_report.hasOwnProperty("msgs")
|
|
|
|
|
? scope.row.raw_report.msgs.battery
|
|
|
|
|
: ""
|
|
|
|
|
}}
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
|
|
|
|
|
<el-table-column label="心跳信息" v-if="xtcheck">
|
|
|
|
|
<el-table-column label="次数" min-width="48">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
{{
|
|
|
|
|
scope.row.raw_report.hasOwnProperty("msgs")
|
|
|
|
|
? scope.row.raw_report.msgs.numberOfHb
|
|
|
|
|
: ""
|
|
|
|
|
}}
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="周期" min-width="48">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
{{
|
|
|
|
|
scope.row.raw_report.hasOwnProperty("msgs")
|
|
|
|
|
? scope.row.raw_report.msgs.heartbeatDuration
|
|
|
|
|
: ""
|
|
|
|
|
}}
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="CMA消息" min-width="60">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
{{
|
|
|
|
|
scope.row.raw_report.hasOwnProperty("msgs")
|
|
|
|
|
? scope.row.raw_report.msgs.recv
|
|
|
|
|
: ""
|
|
|
|
|
}}
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
|
|
|
|
|
<el-table-column label="拍照" v-if="pzcheck">
|
|
|
|
|
<el-table-column label="计划/实际" min-width="60">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
{{
|
|
|
|
|
scope.row.raw_report.hasOwnProperty("msgs")
|
|
|
|
|
? scope.row.raw_report.msgs.photoTimes
|
|
|
|
|
: ""
|
|
|
|
|
}}
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="成功" min-width="48">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
{{
|
|
|
|
|
scope.row.raw_report.hasOwnProperty("msgs")
|
|
|
|
|
? scope.row.raw_report.msgs.success
|
|
|
|
|
: ""
|
|
|
|
|
}}
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
|
|
|
|
|
<el-table-column label="网络信号" v-if="wlcheck">
|
|
|
|
|
<el-table-column label="卡1" min-width="60">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
{{
|
|
|
|
|
scope.row.raw_report.hasOwnProperty("msgs")
|
|
|
|
|
? scope.row.raw_report.msgs.signature1
|
|
|
|
|
: ""
|
|
|
|
|
}}
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="卡2" min-width="60">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
{{
|
|
|
|
|
scope.row.raw_report.hasOwnProperty("msgs")
|
|
|
|
|
? scope.row.raw_report.msgs.signature2
|
|
|
|
|
: ""
|
|
|
|
|
}}
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="错误" min-width="48">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
{{
|
|
|
|
|
scope.row.raw_report.hasOwnProperty("msgs")
|
|
|
|
|
? scope.row.raw_report.msgs.networkError
|
|
|
|
|
: ""
|
|
|
|
|
}}
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
|
|
|
|
|
<el-table-column label="重启次数" v-if="cqcheck">
|
|
|
|
|
<el-table-column label="系统" min-width="48">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
{{
|
|
|
|
|
scope.row.raw_report.hasOwnProperty("msgs")
|
|
|
|
|
? scope.row.raw_report.msgs.rebootTimes
|
|
|
|
|
: ""
|
|
|
|
|
}}
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="I1" min-width="48">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
{{
|
|
|
|
|
scope.row.raw_report.hasOwnProperty("msgs")
|
|
|
|
|
? scope.row.raw_report.msgs.i1RebootTimes
|
|
|
|
|
: ""
|
|
|
|
|
}}
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="CMA服务器" v-if="cmacheck" min-width="160">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
{{
|
|
|
|
|
scope.row.raw_report.hasOwnProperty("msgs")
|
|
|
|
|
? scope.row.raw_report.msgs.cma
|
|
|
|
|
: ""
|
|
|
|
|
}}
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="SIM卡" v-if="simcheck" min-width="160">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
<p>
|
|
|
|
|
{{
|
|
|
|
|
scope.row.raw_report.hasOwnProperty("msgs")
|
|
|
|
|
? scope.row.raw_report.msgs.simcard1
|
|
|
|
|
: ""
|
|
|
|
|
}}
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
{{
|
|
|
|
|
scope.row.raw_report.hasOwnProperty("msgs")
|
|
|
|
|
? scope.row.raw_report.msgs.simcard2
|
|
|
|
|
: ""
|
|
|
|
|
}}
|
|
|
|
|
</p>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column
|
|
|
|
|
label="版本"
|
|
|
|
|
min-width="120"
|
|
|
|
|
v-if="bbcheck"
|
|
|
|
|
class-name="bbStyle"
|
|
|
|
|
>
|
|
|
|
|
<template
|
|
|
|
|
slot-scope="scope"
|
|
|
|
|
v-if="
|
|
|
|
|
scope.row.raw_report.hasOwnProperty('msgs') &&
|
|
|
|
|
scope.row.raw_report.msgs.length !== 0
|
|
|
|
|
"
|
|
|
|
|
>
|
|
|
|
|
<el-tooltip placement="top" effect="light" :open-delay="600">
|
|
|
|
|
<div slot="content" class="contenBoxMsg">
|
|
|
|
|
<p><b>I1:</b>{{ scope.row.raw_report.msgs.i1Version }}</p>
|
|
|
|
|
<p><b>运维:</b>{{ scope.row.raw_report.msgs.maintainVersion }}</p>
|
|
|
|
|
|
|
|
|
|
<p><b>Camera:</b>{{ scope.row.raw_report.msgs.cameraService }}</p>
|
|
|
|
|
<p><b>AI:</b>{{ scope.row.raw_report.msgs.aiVersion }}</p>
|
|
|
|
|
<p><b>MCU:</b>{{ scope.row.raw_report.msgs.mcu }}</p>
|
|
|
|
|
</div>
|
|
|
|
|
<p>
|
|
|
|
|
<b>I1:</b>{{ scope.row.raw_report.msgs.i1Version }}<b>运维:</b
|
|
|
|
|
>{{ scope.row.raw_report.msgs.maintainVersion }}
|
|
|
|
|
</p>
|
|
|
|
|
</el-tooltip>
|
|
|
|
|
|
|
|
|
|
<!-- <p>
|
|
|
|
|
<b>I1:</b>{{ scope.row.raw_report.msgs.i1Version }}<b>运维:</b
|
|
|
|
|
>{{ scope.row.raw_report.msgs.maintainVersion }}<b>Camera:</b
|
|
|
|
|
>{{ scope.row.raw_report.msgs.cameraService }}<b>AI:</b
|
|
|
|
|
>{{ scope.row.raw_report.msgs.aiVersion }}<b>MCU:</b
|
|
|
|
|
>{{ scope.row.raw_report.msgs.mcu }}
|
|
|
|
|
</p> -->
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
</el-table>
|
|
|
|
|
<el-drawer
|
|
|
|
|
class="drawerBox"
|
|
|
|
|
title="我是标题"
|
|
|
|
|
:visible.sync="drawer"
|
|
|
|
|
direction="rtl"
|
|
|
|
|
:with-header="false"
|
|
|
|
|
>
|
|
|
|
|
<div class="drawerSelect">
|
|
|
|
|
<h3>表格列配置</h3>
|
|
|
|
|
<div class="selectBox">
|
|
|
|
|
<el-checkbox v-model="gycheck">规约</el-checkbox>
|
|
|
|
|
<el-checkbox v-model="dccheck">电池状态</el-checkbox>
|
|
|
|
|
<el-checkbox v-model="xtcheck">心跳信息</el-checkbox>
|
|
|
|
|
<el-checkbox v-model="pzcheck">拍照</el-checkbox>
|
|
|
|
|
<el-checkbox v-model="wlcheck">网络信号</el-checkbox>
|
|
|
|
|
<el-checkbox v-model="cqcheck">重启次数</el-checkbox>
|
|
|
|
|
<el-checkbox v-model="cmacheck">CMA服务器</el-checkbox>
|
|
|
|
|
<el-checkbox v-model="simcheck">SIM卡</el-checkbox>
|
|
|
|
|
<el-checkbox v-model="bbcheck">版本</el-checkbox>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</el-drawer>
|
|
|
|
|
<!-- 设置ie服务器 -->
|
|
|
|
|
<el-dialog
|
|
|
|
|
title="设置ie服务器"
|
|
|
|
|
:visible.sync="ieVisible"
|
|
|
|
|
width="30%"
|
|
|
|
|
:close-on-click-modal="false"
|
|
|
|
|
>
|
|
|
|
|
<el-form :model="ieform" ref="ieRuleForm" :rules="ieRules">
|
|
|
|
|
<el-form-item label="CMA IP:" prop="ip">
|
|
|
|
|
<el-input v-model="ieform.ip" autocomplete="off"></el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="CMA Port:" prop="port">
|
|
|
|
|
<el-input v-model.number="ieform.port" autocomplete="off"></el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-form>
|
|
|
|
|
<div slot="footer" class="dialog-footer">
|
|
|
|
|
<el-button @click="ieVisible = false">取 消</el-button>
|
|
|
|
|
<el-button type="primary" @click="handleIeServe">确 定</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
<!-- 设置运维服务器 -->
|
|
|
|
|
<el-dialog
|
|
|
|
|
title="设置运维服务器"
|
|
|
|
|
:visible.sync="operationVisible"
|
|
|
|
|
:close-on-click-modal="false"
|
|
|
|
|
width="30%"
|
|
|
|
|
>
|
|
|
|
|
<el-form
|
|
|
|
|
:model="operationform"
|
|
|
|
|
ref="operationRuleForm"
|
|
|
|
|
:rules="operationRules"
|
|
|
|
|
>
|
|
|
|
|
<el-form-item label="运维服务器IP:" prop="ip">
|
|
|
|
|
<el-input v-model="operationform.ip" autocomplete="off"></el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="运维服务器Port:" prop="port">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model.number="operationform.port"
|
|
|
|
|
autocomplete="off"
|
|
|
|
|
></el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-form>
|
|
|
|
|
<div slot="footer" class="dialog-footer">
|
|
|
|
|
<el-button @click="ieVisible = false">取 消</el-button>
|
|
|
|
|
<el-button type="primary" @click="handleOperationServe"
|
|
|
|
|
>确 定</el-button
|
|
|
|
|
>
|
|
|
|
|
</div>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
<!-- 设置心跳周期 -->
|
|
|
|
|
<el-dialog
|
|
|
|
|
title="设置运维服务器"
|
|
|
|
|
:visible.sync="heartBeatVisible"
|
|
|
|
|
:close-on-click-modal="false"
|
|
|
|
|
width="30%"
|
|
|
|
|
>
|
|
|
|
|
<el-form
|
|
|
|
|
:model="heartBeatform"
|
|
|
|
|
ref="heartBeatRuleForm"
|
|
|
|
|
:rules="heartBeatRules"
|
|
|
|
|
>
|
|
|
|
|
<el-form-item label="心跳周期:(分钟)" prop="heart">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model.number="heartBeatform.heart"
|
|
|
|
|
autocomplete="off"
|
|
|
|
|
></el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-form>
|
|
|
|
|
<div slot="footer" class="dialog-footer">
|
|
|
|
|
<el-button @click="heartBeatVisible = false">取 消</el-button>
|
|
|
|
|
<el-button type="primary" @click="handleheartBeat">确 定</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
<!-- 升级 -->
|
|
|
|
|
<el-dialog
|
|
|
|
|
class="upDialogBox"
|
|
|
|
|
title="请选择升级文件"
|
|
|
|
|
:visible.sync="upgradationVisible"
|
|
|
|
|
:close-on-click-modal="false"
|
|
|
|
|
width="30%"
|
|
|
|
|
>
|
|
|
|
|
<el-form
|
|
|
|
|
:model="upgradationform"
|
|
|
|
|
:rules="upgradationRules"
|
|
|
|
|
ref="upgradationRuleForm"
|
|
|
|
|
>
|
|
|
|
|
<el-form-item label="文件名称" prop="upVal">
|
|
|
|
|
<el-select
|
|
|
|
|
v-model="upgradationform.upVal"
|
|
|
|
|
placeholder="请选择升级文件"
|
|
|
|
|
@change="selectChanged"
|
|
|
|
|
>
|
|
|
|
|
<el-option
|
|
|
|
|
v-for="item in upOptions"
|
|
|
|
|
:key="item.id"
|
|
|
|
|
:label="item.fileName"
|
|
|
|
|
:value="item.path"
|
|
|
|
|
:title="item.title"
|
|
|
|
|
>
|
|
|
|
|
</el-option>
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-form>
|
|
|
|
|
<div slot="footer" class="dialog-footer">
|
|
|
|
|
<el-button @click="upgradationVisible = false">取 消</el-button>
|
|
|
|
|
<el-button type="primary" @click="handleupgradation">确 定</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
<!-- 开启frpc服务器 -->
|
|
|
|
|
<el-dialog
|
|
|
|
|
title="设置frpc"
|
|
|
|
|
:visible.sync="frpcVisible"
|
|
|
|
|
:close-on-click-modal="false"
|
|
|
|
|
width="40%"
|
|
|
|
|
class="frpcDialogBox"
|
|
|
|
|
>
|
|
|
|
|
<el-form
|
|
|
|
|
:model="frpcform"
|
|
|
|
|
ref="frpcRuleForm"
|
|
|
|
|
:rules="frpcRules"
|
|
|
|
|
label-width="132px"
|
|
|
|
|
>
|
|
|
|
|
<el-form-item label="Server Address:" prop="server_addr">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model="frpcform.server_addr"
|
|
|
|
|
autocomplete="off"
|
|
|
|
|
></el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="Server Port:" prop="server_port">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model.number="frpcform.server_port"
|
|
|
|
|
autocomplete="off"
|
|
|
|
|
></el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="Frpc Type:">
|
|
|
|
|
<el-select v-model="frpcform.frpc_type" placeholder="请选择">
|
|
|
|
|
<el-option
|
|
|
|
|
v-for="item in frpc_typeOption"
|
|
|
|
|
:key="item.value"
|
|
|
|
|
:label="item.label"
|
|
|
|
|
:value="item.value"
|
|
|
|
|
>
|
|
|
|
|
</el-option>
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="Type:">
|
|
|
|
|
<el-select v-model="frpcform.type" placeholder="请选择">
|
|
|
|
|
<el-option
|
|
|
|
|
v-for="item in typeOption"
|
|
|
|
|
:key="item.value"
|
|
|
|
|
:label="item.label"
|
|
|
|
|
:value="item.value"
|
|
|
|
|
>
|
|
|
|
|
</el-option>
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="Local IP:" prop="local_ip">
|
|
|
|
|
<el-input v-model="frpcform.local_ip" autocomplete="off"></el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="Local Port:" prop="local_port">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model.number="frpcform.local_port"
|
|
|
|
|
autocomplete="off"
|
|
|
|
|
></el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="Remote Port:" prop="remote_port">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model.number="frpcform.remote_port"
|
|
|
|
|
autocomplete="off"
|
|
|
|
|
></el-input>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-form>
|
|
|
|
|
<div slot="footer" class="dialog-footer">
|
|
|
|
|
<el-button @click="frpcVisible = false">取 消</el-button>
|
|
|
|
|
<el-button type="primary" @click="handleFrpc">确 定</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
<!-- 装置详细信息 -->
|
|
|
|
|
<rowMsgDialog ref="rowMsgDialogref"></rowMsgDialog>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
import { getdoActionApi, getqueryUpgradesApi } from "@/utils/api/index";
|
|
|
|
|
import rowMsgDialog from "./rowMsgDialog.vue";
|
|
|
|
|
export default {
|
|
|
|
|
props: ["tableData", "onlineNum", "offlineNum", "noPicNum"],
|
|
|
|
|
components: {
|
|
|
|
|
rowMsgDialog,
|
|
|
|
|
},
|
|
|
|
|
data() {
|
|
|
|
|
//判断ip
|
|
|
|
|
let validateIPAddress = (rule, value, callback) => {
|
|
|
|
|
let regexp =
|
|
|
|
|
/^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}$/;
|
|
|
|
|
let valdata = value.split(",");
|
|
|
|
|
let isCorrect = true;
|
|
|
|
|
if (valdata.length) {
|
|
|
|
|
for (let i = 0; i < valdata.length; i++) {
|
|
|
|
|
if (regexp.test(valdata[i]) == false) {
|
|
|
|
|
isCorrect = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (value == "") {
|
|
|
|
|
return callback(new Error("请输入iP地址"));
|
|
|
|
|
} else if (!isCorrect) {
|
|
|
|
|
callback(new Error("请输入正确对ip地址"));
|
|
|
|
|
} else {
|
|
|
|
|
callback();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
return {
|
|
|
|
|
drawer: false,
|
|
|
|
|
protocolMap: {
|
|
|
|
|
65280: "国网I1",
|
|
|
|
|
65296: "陕西",
|
|
|
|
|
65281: "安徽",
|
|
|
|
|
65282: "江苏",
|
|
|
|
|
65283: "湖南",
|
|
|
|
|
65284: "浙江",
|
|
|
|
|
65285: "河南",
|
|
|
|
|
65286: "郑州",
|
|
|
|
|
},
|
|
|
|
|
multipleSelection: [],
|
|
|
|
|
|
|
|
|
|
nowTime: new Date().getTime() / 1000,
|
|
|
|
|
gycheck: true,
|
|
|
|
|
dccheck: false,
|
|
|
|
|
xtcheck: false,
|
|
|
|
|
pzcheck: true,
|
|
|
|
|
wlcheck: false,
|
|
|
|
|
cqcheck: false,
|
|
|
|
|
cmacheck: false,
|
|
|
|
|
simcheck: false,
|
|
|
|
|
bbcheck: true,
|
|
|
|
|
//运维操作列表
|
|
|
|
|
operateOptions: [
|
|
|
|
|
{ id: 1, name: "重启" },
|
|
|
|
|
{ id: 2, name: "重启装置" },
|
|
|
|
|
{ id: 3, name: "设置I1服务器" },
|
|
|
|
|
{ id: 4, name: "设置运维服务器" },
|
|
|
|
|
{ id: 5, name: "设置心跳周期" },
|
|
|
|
|
{ id: 6, name: "上传日志" },
|
|
|
|
|
{ id: 7, name: "升级" },
|
|
|
|
|
{ id: 8, name: "开启frpc" },
|
|
|
|
|
{ id: 9, name: "停止frpc" },
|
|
|
|
|
{ id: 10, name: "停止老化测试" },
|
|
|
|
|
],
|
|
|
|
|
formIssue: {
|
|
|
|
|
operate: "",
|
|
|
|
|
}, //运维操作
|
|
|
|
|
idArray: [], //选中的数组 id
|
|
|
|
|
//设置ie服务器
|
|
|
|
|
ieVisible: false,
|
|
|
|
|
ieform: {
|
|
|
|
|
ip: "",
|
|
|
|
|
port: "",
|
|
|
|
|
},
|
|
|
|
|
ieRules: {
|
|
|
|
|
ip: [{ required: true, validator: validateIPAddress, trigger: "blur" }],
|
|
|
|
|
port: [
|
|
|
|
|
{
|
|
|
|
|
required: true,
|
|
|
|
|
type: "number",
|
|
|
|
|
message: "请输入端口号(必须为数字)",
|
|
|
|
|
trigger: "blur",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
//设置运维服务器
|
|
|
|
|
operationVisible: false,
|
|
|
|
|
operationform: {
|
|
|
|
|
ip: "",
|
|
|
|
|
port: "",
|
|
|
|
|
},
|
|
|
|
|
operationRules: {
|
|
|
|
|
ip: [{ required: true, validator: validateIPAddress, trigger: "blur" }],
|
|
|
|
|
port: [
|
|
|
|
|
{
|
|
|
|
|
required: true,
|
|
|
|
|
type: "number",
|
|
|
|
|
message: "请输入端口号(必须为数字)",
|
|
|
|
|
trigger: "blur",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
//设置心跳周期
|
|
|
|
|
heartBeatVisible: false,
|
|
|
|
|
heartBeatform: {
|
|
|
|
|
heart: "",
|
|
|
|
|
},
|
|
|
|
|
heartBeatRules: {
|
|
|
|
|
heart: [
|
|
|
|
|
{
|
|
|
|
|
required: true,
|
|
|
|
|
type: "number",
|
|
|
|
|
message: "请输入心跳周期(必须为数字)",
|
|
|
|
|
trigger: "blur",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
//升级
|
|
|
|
|
upgradationVisible: false,
|
|
|
|
|
upgradationform: {
|
|
|
|
|
upVal: "",
|
|
|
|
|
},
|
|
|
|
|
selectUpObj: {},
|
|
|
|
|
upgradationRules: {
|
|
|
|
|
upVal: [
|
|
|
|
|
{ required: true, message: "请选择升级文件", trigger: "change" },
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
upOptions: [],
|
|
|
|
|
//设置frpc服务器
|
|
|
|
|
frpcVisible: false,
|
|
|
|
|
frpcform: {
|
|
|
|
|
// ip: "",
|
|
|
|
|
// port: "",
|
|
|
|
|
server_addr: "",
|
|
|
|
|
server_port: "",
|
|
|
|
|
frpc_type: "ssh",
|
|
|
|
|
type: "tcp",
|
|
|
|
|
local_ip: "",
|
|
|
|
|
local_port: "",
|
|
|
|
|
remote_port: "",
|
|
|
|
|
},
|
|
|
|
|
frpc_typeOption: [
|
|
|
|
|
{
|
|
|
|
|
value: "ssh",
|
|
|
|
|
label: "SSH",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
value: "adb",
|
|
|
|
|
label: "ADB",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
typeOption: [
|
|
|
|
|
{
|
|
|
|
|
value: "tcp",
|
|
|
|
|
label: "TCP",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
value: "udp",
|
|
|
|
|
label: "UDP",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
frpcRules: {
|
|
|
|
|
server_addr: [
|
|
|
|
|
{ required: true, validator: validateIPAddress, trigger: "blur" },
|
|
|
|
|
],
|
|
|
|
|
server_port: [
|
|
|
|
|
{
|
|
|
|
|
required: true,
|
|
|
|
|
type: "number",
|
|
|
|
|
message: "请输入端口号(必须为数字)",
|
|
|
|
|
trigger: "blur",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
local_ip: [
|
|
|
|
|
{ required: true, validator: validateIPAddress, trigger: "blur" },
|
|
|
|
|
],
|
|
|
|
|
local_port: [
|
|
|
|
|
{
|
|
|
|
|
required: true,
|
|
|
|
|
type: "number",
|
|
|
|
|
message: "请输入端口号(必须为数字)",
|
|
|
|
|
trigger: "blur",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
remote_port: [
|
|
|
|
|
{
|
|
|
|
|
required: true,
|
|
|
|
|
type: "number",
|
|
|
|
|
message: "请输入端口号(必须为数字)",
|
|
|
|
|
trigger: "blur",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
tableData: {
|
|
|
|
|
handler(newVal) {
|
|
|
|
|
// 数据发生变化时的处理逻辑
|
|
|
|
|
console.log("数据已更新:", newVal);
|
|
|
|
|
},
|
|
|
|
|
deep: true,
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
// 保存选中的数据id,row-key就是要指定一个key标识这一行的数据
|
|
|
|
|
getRowKey(row) {
|
|
|
|
|
return row.id;
|
|
|
|
|
},
|
|
|
|
|
handleSelectionChange(val) {
|
|
|
|
|
this.multipleSelection = val;
|
|
|
|
|
console.log(this.multipleSelection);
|
|
|
|
|
for (let i = 0; i < this.multipleSelection.length; i++) {
|
|
|
|
|
this.idArray.push(this.multipleSelection[i].id);
|
|
|
|
|
}
|
|
|
|
|
this.idArray = [...new Set(this.idArray)];
|
|
|
|
|
console.log(this.idArray);
|
|
|
|
|
},
|
|
|
|
|
// 点击装置名称
|
|
|
|
|
handleMsgClick(val) {
|
|
|
|
|
console.log(val);
|
|
|
|
|
this.$refs.rowMsgDialogref.display(val);
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
//运维
|
|
|
|
|
UpdateMaintainMode(val, row) {
|
|
|
|
|
console.log("运维");
|
|
|
|
|
getdoActionApi({
|
|
|
|
|
act: "mntn",
|
|
|
|
|
termId: row.id,
|
|
|
|
|
mntn: val,
|
|
|
|
|
})
|
|
|
|
|
.then((res) => {
|
|
|
|
|
console.log(res);
|
|
|
|
|
})
|
|
|
|
|
.catch((err) => {});
|
|
|
|
|
},
|
|
|
|
|
//快心跳
|
|
|
|
|
UpdateQuickHbMode(val, row) {
|
|
|
|
|
console.log("快心跳");
|
|
|
|
|
getdoActionApi({
|
|
|
|
|
act: "quickhb",
|
|
|
|
|
termId: row.id,
|
|
|
|
|
quickhb: val,
|
|
|
|
|
})
|
|
|
|
|
.then((res) => {
|
|
|
|
|
console.log(res);
|
|
|
|
|
})
|
|
|
|
|
.catch((err) => {});
|
|
|
|
|
},
|
|
|
|
|
//下发命令
|
|
|
|
|
onIssue() {
|
|
|
|
|
console.log(this.formIssue.operate);
|
|
|
|
|
console.log(this.multipleSelection);
|
|
|
|
|
if (this.formIssue.operate == "") {
|
|
|
|
|
this.$message({
|
|
|
|
|
duration: 1500,
|
|
|
|
|
showClose: true,
|
|
|
|
|
message: "请选择运维操作",
|
|
|
|
|
type: "warning",
|
|
|
|
|
});
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (this.multipleSelection.length == 0) {
|
|
|
|
|
this.$message({
|
|
|
|
|
duration: 1500,
|
|
|
|
|
showClose: true,
|
|
|
|
|
message: "至少选中一个设备",
|
|
|
|
|
type: "warning",
|
|
|
|
|
});
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
switch (this.formIssue.operate) {
|
|
|
|
|
case 1:
|
|
|
|
|
console.log("重启");
|
|
|
|
|
var params = {
|
|
|
|
|
act: "reset",
|
|
|
|
|
termIds: this.idArray.join("-"),
|
|
|
|
|
};
|
|
|
|
|
this.changeIssue(params);
|
|
|
|
|
return;
|
|
|
|
|
case 2:
|
|
|
|
|
console.log("重启MCU");
|
|
|
|
|
var params = {
|
|
|
|
|
act: "reset-mcu",
|
|
|
|
|
termIds: this.idArray.join("-"),
|
|
|
|
|
};
|
|
|
|
|
this.changeIssue(params);
|
|
|
|
|
return;
|
|
|
|
|
case 3:
|
|
|
|
|
console.log("设置I1服务器");
|
|
|
|
|
this.ieVisible = true;
|
|
|
|
|
return;
|
|
|
|
|
case 4:
|
|
|
|
|
console.log("设置运维服务器");
|
|
|
|
|
this.operationVisible = true;
|
|
|
|
|
return;
|
|
|
|
|
case 5:
|
|
|
|
|
console.log("设置心跳周期");
|
|
|
|
|
this.heartBeatVisible = true;
|
|
|
|
|
return;
|
|
|
|
|
case 6:
|
|
|
|
|
console.log("上传日志");
|
|
|
|
|
var params = {
|
|
|
|
|
act: "upload-logs",
|
|
|
|
|
url: "http://180.166.218.222:40102/upload/",
|
|
|
|
|
termIds: this.idArray.join("-"),
|
|
|
|
|
};
|
|
|
|
|
this.changeIssue(params);
|
|
|
|
|
return;
|
|
|
|
|
case 7:
|
|
|
|
|
console.log("升级");
|
|
|
|
|
this.upgradationVisible = true;
|
|
|
|
|
this.getUpgradeList();
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
case 8:
|
|
|
|
|
console.log("开启frpc");
|
|
|
|
|
this.frpcVisible = true;
|
|
|
|
|
return;
|
|
|
|
|
case 9:
|
|
|
|
|
console.log("停止frpc");
|
|
|
|
|
var params = {
|
|
|
|
|
act: "stop-frpc",
|
|
|
|
|
termIds: this.idArray.join("-"),
|
|
|
|
|
};
|
|
|
|
|
this.changeIssue(params);
|
|
|
|
|
return;
|
|
|
|
|
case 10:
|
|
|
|
|
console.log("停止老化测试");
|
|
|
|
|
var params = {
|
|
|
|
|
act: " stop-aging-test",
|
|
|
|
|
termIds: this.idArray.join("-"),
|
|
|
|
|
};
|
|
|
|
|
this.changeIssue(params);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
//执行操作
|
|
|
|
|
changeIssue(params) {
|
|
|
|
|
getdoActionApi(params)
|
|
|
|
|
.then((res) => {
|
|
|
|
|
console.log(res);
|
|
|
|
|
this.$refs.ywMultipleTable.clearSelection();
|
|
|
|
|
console.log(this.multipleSelection);
|
|
|
|
|
})
|
|
|
|
|
.catch((err) => {});
|
|
|
|
|
},
|
|
|
|
|
//点击ie服务器确定
|
|
|
|
|
handleIeServe() {
|
|
|
|
|
console.log(this.$refs.ieRuleForm);
|
|
|
|
|
this.$refs.ieRuleForm.validate((valid) => {
|
|
|
|
|
if (valid) {
|
|
|
|
|
var params = {
|
|
|
|
|
act: "set-cma",
|
|
|
|
|
ip: this.ieform.ip,
|
|
|
|
|
port: this.ieform.port,
|
|
|
|
|
termIds: this.idArray.join("-"),
|
|
|
|
|
};
|
|
|
|
|
this.changeIssue(params);
|
|
|
|
|
this.ieVisible = false;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
//点击运维服务器确定
|
|
|
|
|
handleOperationServe() {
|
|
|
|
|
console.log(this.$refs.operationRuleForm);
|
|
|
|
|
this.$refs.operationRuleForm.validate((valid) => {
|
|
|
|
|
if (valid) {
|
|
|
|
|
var params = {
|
|
|
|
|
act: "set-mntn",
|
|
|
|
|
ip: this.operationform.ip,
|
|
|
|
|
port: this.operationform.port,
|
|
|
|
|
termIds: this.idArray.join("-"),
|
|
|
|
|
};
|
|
|
|
|
this.changeIssue(params);
|
|
|
|
|
this.operationVisible = false;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
//点击运维服务器确定
|
|
|
|
|
handleheartBeat() {
|
|
|
|
|
console.log(this.$refs.heartBeatRuleForm);
|
|
|
|
|
this.$refs.heartBeatRuleForm.validate((valid) => {
|
|
|
|
|
if (valid) {
|
|
|
|
|
var params = {
|
|
|
|
|
act: "set-hb",
|
|
|
|
|
hb: this.heartBeatform.heart,
|
|
|
|
|
termIds: this.idArray.join("-"),
|
|
|
|
|
};
|
|
|
|
|
this.changeIssue(params);
|
|
|
|
|
this.heartBeatVisible = false;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
//获取升级apkList
|
|
|
|
|
getUpgradeList() {
|
|
|
|
|
getqueryUpgradesApi()
|
|
|
|
|
.then((res) => {
|
|
|
|
|
console.log(res);
|
|
|
|
|
this.upOptions = res.data;
|
|
|
|
|
})
|
|
|
|
|
.catch((err) => {});
|
|
|
|
|
},
|
|
|
|
|
selectChanged(val) {
|
|
|
|
|
console.log(val);
|
|
|
|
|
// 找到选中项的整个object对象
|
|
|
|
|
this.selectUpObj = this.upOptions.find((item) => {
|
|
|
|
|
return item["path"] === val;
|
|
|
|
|
});
|
|
|
|
|
console.log(this.selectUpObj);
|
|
|
|
|
},
|
|
|
|
|
//升级确定阿
|
|
|
|
|
handleupgradation() {
|
|
|
|
|
this.$refs.upgradationRuleForm.validate((valid) => {
|
|
|
|
|
if (valid) {
|
|
|
|
|
var params = {
|
|
|
|
|
act: "upgrade",
|
|
|
|
|
url: this.upgradationform.upVal,
|
|
|
|
|
md5: this.selectUpObj.md5,
|
|
|
|
|
termIds: this.idArray.join("-"),
|
|
|
|
|
};
|
|
|
|
|
this.changeIssue(params);
|
|
|
|
|
this.upgradationVisible = false;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
//开启frpc
|
|
|
|
|
handleFrpc() {
|
|
|
|
|
console.log(this.$refs.frpcRuleForm);
|
|
|
|
|
this.$refs.frpcRuleForm.validate((valid) => {
|
|
|
|
|
if (valid) {
|
|
|
|
|
var params = {
|
|
|
|
|
act: "start-frpc",
|
|
|
|
|
server_addr: this.frpcform.server_addr,
|
|
|
|
|
server_port: this.frpcform.server_port,
|
|
|
|
|
local_ip: this.frpcform.local_ip,
|
|
|
|
|
local_port: this.frpcform.local_port,
|
|
|
|
|
remote_port: this.frpcform.remote_port,
|
|
|
|
|
frpc_type: this.frpcform.frpc_type,
|
|
|
|
|
type: this.frpcform.type,
|
|
|
|
|
termIds: this.idArray.join("-"),
|
|
|
|
|
};
|
|
|
|
|
this.changeIssue(params);
|
|
|
|
|
this.frpcVisible = false;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
</script>
|
|
|
|
|
<style lang="less">
|
|
|
|
|
.tableContain {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
.headTitle {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
margin-bottom: 8px;
|
|
|
|
|
|
|
|
|
|
.xfMl {
|
|
|
|
|
.el-form-item--small.el-form-item {
|
|
|
|
|
margin-bottom: 0px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.zzMsg {
|
|
|
|
|
display: flex;
|
|
|
|
|
margin-left: auto;
|
|
|
|
|
margin-right: 48px;
|
|
|
|
|
.total {
|
|
|
|
|
margin-left: 8px;
|
|
|
|
|
//width: 100%;
|
|
|
|
|
height: 32px;
|
|
|
|
|
line-height: 32px;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: #333;
|
|
|
|
|
span {
|
|
|
|
|
margin-right: 12px;
|
|
|
|
|
}
|
|
|
|
|
.el-tag--info {
|
|
|
|
|
color: #333;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.drawBox {
|
|
|
|
|
//margin-left: auto;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.ywTableBox {
|
|
|
|
|
color: #333;
|
|
|
|
|
|
|
|
|
|
.el-table__cell {
|
|
|
|
|
text-align: center;
|
|
|
|
|
}
|
|
|
|
|
.bbStyle {
|
|
|
|
|
text-align: left;
|
|
|
|
|
.cell {
|
|
|
|
|
display: flex;
|
|
|
|
|
p {
|
|
|
|
|
display: inline;
|
|
|
|
|
white-space: nowrap;
|
|
|
|
|
text-overflow: ellipsis;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
b {
|
|
|
|
|
margin-left: 4px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.hbClass {
|
|
|
|
|
.cell {
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
&:hover {
|
|
|
|
|
color: #337ab7;
|
|
|
|
|
text-decoration: underline;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.el-table--scrollable-y .el-table__body-wrapper {
|
|
|
|
|
height: calc(100% - 40px) !important;
|
|
|
|
|
}
|
|
|
|
|
.el-table__row .picBg {
|
|
|
|
|
background: #337ab7 !important;
|
|
|
|
|
color: #fff;
|
|
|
|
|
}
|
|
|
|
|
th.el-table__cell {
|
|
|
|
|
background: #d3d3d3;
|
|
|
|
|
}
|
|
|
|
|
thead.is-group th.el-table__cell {
|
|
|
|
|
background: #d3d3d3;
|
|
|
|
|
}
|
|
|
|
|
tr {
|
|
|
|
|
background: #fff;
|
|
|
|
|
}
|
|
|
|
|
.el-table--striped
|
|
|
|
|
.el-table__body
|
|
|
|
|
tr.el-table__row--striped
|
|
|
|
|
td.el-table__cell {
|
|
|
|
|
background: #e9e9e8;
|
|
|
|
|
}
|
|
|
|
|
.el-table__body tr:hover > td.el-table__cell {
|
|
|
|
|
background: #e9e9e9;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
thead {
|
|
|
|
|
color: #333;
|
|
|
|
|
}
|
|
|
|
|
.el-table--scrollable-y .el-table__body-wrapper {
|
|
|
|
|
height: 100% !important;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.el-table--small .el-table__cell {
|
|
|
|
|
padding: 4px 0px;
|
|
|
|
|
}
|
|
|
|
|
.el-table .caret-wrapper {
|
|
|
|
|
height: 24px;
|
|
|
|
|
width: 10px;
|
|
|
|
|
margin-left: 8px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.el-table .sort-caret.ascending {
|
|
|
|
|
border-bottom-color: #666;
|
|
|
|
|
top: 0px;
|
|
|
|
|
left: 0px;
|
|
|
|
|
}
|
|
|
|
|
.el-table .ascending .sort-caret.ascending {
|
|
|
|
|
border-bottom-color: #337ab7;
|
|
|
|
|
}
|
|
|
|
|
.el-table .sort-caret.descending {
|
|
|
|
|
border-top-color: #666;
|
|
|
|
|
bottom: 2px;
|
|
|
|
|
left: 0px;
|
|
|
|
|
}
|
|
|
|
|
.el-table .descending .sort-caret.descending {
|
|
|
|
|
border-top-color: #337ab7;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.drawerBox {
|
|
|
|
|
.el-drawer {
|
|
|
|
|
width: 240px !important;
|
|
|
|
|
.el-drawer__body {
|
|
|
|
|
padding: 16px;
|
|
|
|
|
color: #333;
|
|
|
|
|
.drawerSelect {
|
|
|
|
|
h3 {
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: #333;
|
|
|
|
|
//font-weight: normal;
|
|
|
|
|
margin-bottom: 12px;
|
|
|
|
|
}
|
|
|
|
|
.selectBox {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
height: 32px;
|
|
|
|
|
line-height: 32px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.upDialogBox {
|
|
|
|
|
.el-dialog {
|
|
|
|
|
.el-select {
|
|
|
|
|
width: 100%;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.frpcDialogBox {
|
|
|
|
|
.el-select {
|
|
|
|
|
width: 100%;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.contenBoxMsg {
|
|
|
|
|
p {
|
|
|
|
|
color: #333;
|
|
|
|
|
line-height: 24px;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</style>
|