| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <!-- <el-row :gutter="10" class="mb8">--> |
| | | <!-- <el-col :span="1.5">--> |
| | | <!-- <el-button--> |
| | | <!-- type="primary"--> |
| | | <!-- plain--> |
| | | <!-- icon="el-icon-plus"--> |
| | | <!-- size="mini"--> |
| | | <!-- @click="handleAdd"--> |
| | | <!-- v-hasPermi="['ycl:threshold:add']"--> |
| | | <!-- >新增--> |
| | | <!-- </el-button>--> |
| | | <!-- </el-col>--> |
| | | <!-- </el-row>--> |
| | | |
| | | <el-table v-loading="loading" :data="thresholdList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center"/> |
| | | <el-table-column label="设备类型" align="center" prop="monitorType"> |
| | | <template slot-scope="scope"> |
| | | <span v-show="scope.row['monitorType'] === 'face'">人脸</span> |
| | | <span v-show="scope.row['monitorType'] === 'car'">车辆</span> |
| | | <span v-show="scope.row['monitorType'] === 'video'">视频</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="工单阈值" align="center"> |
| | | <template slot-scope="scope"> |
| | | <template v-if="scope.row.monitorType === 'face'"> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">抓拍量</div> |
| | | <div class="table-row-item">{{ scope.row.captureNum }}</div> |
| | | <!-- <el-row :gutter="10" class="mb8">--> |
| | | <!-- <el-col :span="1.5">--> |
| | | <!-- <el-button--> |
| | | <!-- type="primary"--> |
| | | <!-- plain--> |
| | | <!-- icon="el-icon-plus"--> |
| | | <!-- size="mini"--> |
| | | <!-- @click="handleAdd"--> |
| | | <!-- v-hasPermi="['ycl:threshold:add']"--> |
| | | <!-- >新增--> |
| | | <!-- </el-button>--> |
| | | <!-- </el-col>--> |
| | | <!-- </el-row>--> |
| | | <el-row> |
| | | <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="8"> |
| | | <el-card style="margin-bottom: 20px; height: 350px; margin-right: 20px;color: #656565;"> |
| | | <div style="display: flex; justify-content: space-between"> |
| | | <div class="header—text">视频</div> |
| | | <div> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | v-hasPermi="['ycl:threshold:edit']" |
| | | @click="showEdit('video')" |
| | | v-if="!ifEditVideo" |
| | | >修改 |
| | | </el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="primary" |
| | | @click="saveEdit('video')" |
| | | v-if="ifEditVideo" |
| | | >保存 |
| | | </el-button> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">及时率</div> |
| | | <div class="table-row-item">{{ scope.row.timelyRate }}</div> |
| | | </div> |
| | | <div |
| | | style=" |
| | | margin: 20px; |
| | | display: flex; |
| | | width: 400px; |
| | | justify-content: space-between; |
| | | " |
| | | > |
| | | <div> |
| | | <div |
| | | style=" |
| | | font-size: small; |
| | | display: flex; |
| | | flex-direction: row-reverse; |
| | | width: 192px; |
| | | " |
| | | > |
| | | 工单阈值 |
| | | </div> |
| | | <div> |
| | | <el-form label-width="140px"> |
| | | <el-form-item |
| | | v-for="(item, index) in thresholdList.video" |
| | | :label="item.name + ':'" |
| | | :key="item.id" |
| | | > |
| | | <el-input |
| | | v-model="videoList[index].value" |
| | | size="mini" |
| | | style="width: 100px" |
| | | :type="item.countType=='int'?'number':''" |
| | | v-if="ifEditVideo" |
| | | ></el-input> |
| | | <span v-else>{{ item.value }}</span> |
| | | <span class="unit" v-if="item.countType=='percent'">%</span> |
| | | <span class="unit" v-if="item.countType=='second'">秒</span> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">延迟量</div> |
| | | <div class="table-row-item">{{ scope.row.delayAmount }}</div> |
| | | <div> |
| | | <span style="font-size: small">下发阈值</span> |
| | | <div> |
| | | <el-form ref="form"> |
| | | <el-form-item |
| | | v-for="(item, index) in thresholdList.video" |
| | | label="" |
| | | :key="item.id" |
| | | > |
| | | <el-input |
| | | v-model="videoList[index].valueAuto" |
| | | size="mini" |
| | | style="width: 100px" |
| | | :type="item.countType=='int'?'number':''" |
| | | v-if="ifEditVideo" |
| | | ></el-input> |
| | | <span v-else>{{ item.valueAuto }}</span> |
| | | <span class="unit" v-if="item.countType=='percent'">%</span> |
| | | <span class="unit" v-if="item.countType=='second'">秒</span> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">设备活跃率</div> |
| | | <div class="table-row-item">{{ scope.row.deviceActiveRate }}</div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="8"> |
| | | <el-card style="margin-bottom: 20px; height: 350px; margin-right: 20px;color: #656565;"> |
| | | <div style="display: flex; justify-content: space-between"> |
| | | <div class="header—text">人脸</div> |
| | | <div> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | v-hasPermi="['ycl:threshold:edit']" |
| | | @click="showEdit('face')" |
| | | v-if="!ifEditFace" |
| | | >修改 |
| | | </el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="primary" |
| | | @click="saveEdit('face')" |
| | | v-if="ifEditFace" |
| | | >保存 |
| | | </el-button> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">抓拍及时率</div> |
| | | <div class="table-row-item">{{ scope.row.timelyCapture }}</div> |
| | | </div> |
| | | <div |
| | | style=" |
| | | margin: 20px; |
| | | display: flex; |
| | | width: 400px; |
| | | justify-content: space-between; |
| | | " |
| | | > |
| | | <div> |
| | | <div |
| | | style=" |
| | | font-size: small; |
| | | display: flex; |
| | | flex-direction: row-reverse; |
| | | width: 190px; |
| | | " |
| | | > |
| | | 工单阈值 |
| | | </div> |
| | | <div> |
| | | <el-form label-width="140px"> |
| | | <el-form-item |
| | | v-for="(item, index) in thresholdList.face" |
| | | :label="item.name + ':'" |
| | | :key="item.id" |
| | | > |
| | | <el-input |
| | | v-model="faceList[index].value" |
| | | size="mini" |
| | | style="width: 100px" |
| | | :type="item.countType=='int'?'number':''" |
| | | v-if="ifEditFace" |
| | | ></el-input> |
| | | <span v-else>{{ item.value }}</span> |
| | | <span class="unit" v-if="item.countType=='percent'">%</span> |
| | | <span class="unit" v-if="item.countType=='second'">秒</span> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">时钟准确率</div> |
| | | <div class="table-row-item">{{ scope.row.timeAccuracy }}</div> |
| | | <div> |
| | | <span style="font-size: small">下发阈值</span> |
| | | <div> |
| | | <el-form ref="form"> |
| | | <el-form-item |
| | | v-for="(item, index) in thresholdList.face" |
| | | label="" |
| | | :key="item.id" |
| | | > |
| | | <el-input |
| | | v-model="faceList[index].valueAuto" |
| | | size="mini" |
| | | style="width: 100px" |
| | | :type="item.countType=='int'?'number':''" |
| | | v-if="ifEditFace" |
| | | ></el-input> |
| | | <span v-else>{{ item.valueAuto }}</span> |
| | | <span class="unit" v-if="item.countType=='percent'">%</span> |
| | | <span class="unit" v-if="item.countType=='second'">秒</span> |
| | | </el-form-item |
| | | > |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <template v-else-if="scope.row.monitorType === 'car'"> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">过车数据量</div> |
| | | <div class="table-row-item">{{ scope.row.passCarNum }}</div> |
| | | </div> |
| | | </el-card></el-col |
| | | > |
| | | <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="8"> |
| | | <el-card style="margin-bottom: 20px; height: 350px; margin-right: 20px;color: #656565;"> |
| | | <div style="display: flex; justify-content: space-between"> |
| | | <div class="header—text">车辆</div> |
| | | <div> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | v-hasPermi="['ycl:threshold:edit']" |
| | | @click="showEdit('car')" |
| | | v-if="!ifEditCar" |
| | | >修改 |
| | | </el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="primary" |
| | | @click="saveEdit('car')" |
| | | v-if="ifEditCar" |
| | | >保存 |
| | | </el-button> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">过车缺失率</div> |
| | | <div class="table-row-item">{{ scope.row.passCarMissRate }}</div> |
| | | </div> |
| | | <div |
| | | style=" |
| | | margin: 20px; |
| | | display: flex; |
| | | width: 400px; |
| | | justify-content: space-between; |
| | | " |
| | | > |
| | | <div> |
| | | <div |
| | | style=" |
| | | font-size: small; |
| | | display: flex; |
| | | flex-direction: row-reverse; |
| | | width: 206px; |
| | | " |
| | | > |
| | | 工单阈值 |
| | | </div> |
| | | <div> |
| | | <el-form ref="form" label-width="160px"> |
| | | <el-form-item |
| | | v-for="(item, index) in thresholdList.car" |
| | | :label="item.name + ':'" |
| | | :key="item.id" |
| | | > |
| | | <el-input |
| | | v-model="carList[index].value" |
| | | size="mini" |
| | | style="width: 100px" |
| | | :type="item.countType=='int'?'number':''" |
| | | v-if="ifEditCar" |
| | | ></el-input> |
| | | <span v-else>{{ item.value }}</span> |
| | | <span class="unit" v-if="item.countType=='percent'">%</span> |
| | | <span class="unit" v-if="item.countType=='second'">秒</span> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">有效过车数据量</div> |
| | | <div class="table-row-item">{{ scope.row.passCarEffectiveNum }}</div> |
| | | <div> |
| | | <span style="font-size: small">下发阈值</span> |
| | | <div> |
| | | <el-form ref="form"> |
| | | <el-form-item |
| | | v-for="(item, index) in thresholdList.car" |
| | | label="" |
| | | :key="item.id" |
| | | > |
| | | <el-input |
| | | v-model="carList[index].valueAuto" |
| | | size="mini" |
| | | style="width: 100px" |
| | | :type="item.countType=='int'?'number':''" |
| | | v-if="ifEditCar" |
| | | ></el-input> |
| | | <span v-else>{{ item.valueAuto }}</span> |
| | | <span class="unit" v-if="item.countType=='percent'">%</span> |
| | | <span class="unit" v-if="item.countType=='second'">秒</span> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">设备活跃率</div> |
| | | <div class="table-row-item">{{ scope.row.deviceActiveRate }}</div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">抓拍及时率</div> |
| | | <div class="table-row-item">{{ scope.row.timelyCapture }}</div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">时钟准确率</div> |
| | | <div class="table-row-item">{{ scope.row.timeAccuracy }}</div> |
| | | </div> |
| | | </template> |
| | | <template v-else-if="scope.row.monitorType === 'video'"> |
| | | <div class="table-row" style="display: flex;flex-direction: row"> |
| | | <div class="table-row-item">图像质量</div> |
| | | <div class="table-row-item">{{ scope.row.imageQuality }}</div> |
| | | </div> |
| | | <div class="table-row" style="display: flex;flex-direction: row"> |
| | | <div class="table-row-item">视频质量</div> |
| | | <div class="table-row-item">{{ scope.row.videoQuality }}</div> |
| | | </div> |
| | | <div class="table-row" style="display: flex;flex-direction: row"> |
| | | <div class="table-row-item">标注准确率</div> |
| | | <div class="table-row-item">{{ scope.row.annotationAccuracy }}</div> |
| | | </div> |
| | | </template> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="下发阈值" align="center"> |
| | | <template slot-scope="scope"> |
| | | <template v-if="scope.row.monitorType === 'face'"> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">抓拍量</div> |
| | | <div class="table-row-item">{{ scope.row.captureNumAuto }}</div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">及时率</div> |
| | | <div class="table-row-item">{{ scope.row.timelyRateAuto }}</div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">延迟量</div> |
| | | <div class="table-row-item">{{ scope.row.delayAmountAuto }}</div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">设备活跃率</div> |
| | | <div class="table-row-item">{{ scope.row.deviceActiveRateAuto }}</div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">抓拍及时率</div> |
| | | <div class="table-row-item">{{ scope.row.timelyCaptureAuto }}</div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">时钟准确率</div> |
| | | <div class="table-row-item">{{ scope.row.timeAccuracyAuto }}</div> |
| | | </div> |
| | | </template> |
| | | <template v-else-if="scope.row.monitorType === 'car'"> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">过车数据量</div> |
| | | <div class="table-row-item">{{ scope.row.passCarNumAuto }}</div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">过车缺失率</div> |
| | | <div class="table-row-item">{{ scope.row.passCarMissRateAuto }}</div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">有效过车数据量</div> |
| | | <div class="table-row-item">{{ scope.row.passCarEffectiveNumAuto }}</div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">设备活跃率</div> |
| | | <div class="table-row-item">{{ scope.row.deviceActiveRateAuto }}</div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">抓拍及时率</div> |
| | | <div class="table-row-item">{{ scope.row.timelyCaptureAuto }}</div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">时钟准确率</div> |
| | | <div class="table-row-item">{{ scope.row.timeAccuracyAuto }}</div> |
| | | </div> |
| | | </template> |
| | | <template v-else-if="scope.row.monitorType === 'video'"> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">图像质量</div> |
| | | <div class="table-row-item">{{ scope.row.imageQualityAuto }}</div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">视频质量</div> |
| | | <div class="table-row-item">{{ scope.row.videoQualityAuto }}</div> |
| | | </div> |
| | | <div class="table-row"> |
| | | <div class="table-row-item">标注准确率</div> |
| | | <div class="table-row-item">{{ scope.row.annotationAccuracyAuto }}</div> |
| | | </div> |
| | | </template> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | v-hasPermi="['ycl:threshold:edit']" |
| | | @click="updateWho(scope.row)" |
| | | >修改 |
| | | </el-button> |
| | | <!-- <el-button--> |
| | | <!-- size="mini"--> |
| | | <!-- type="text"--> |
| | | <!-- icon="el-icon-delete"--> |
| | | <!-- @click="handleDelete(scope.row)"--> |
| | | <!-- v-hasPermi="['ycl:threshold:remove']"--> |
| | | <!-- >删除--> |
| | | <!-- </el-button>--> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <pagination |
| | | v-show="total>0" |
| | | :total="total" |
| | | :page.sync="queryParams.pageNum" |
| | | :limit.sync="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | |
| | | <!-- 人脸阈值 --> |
| | | <el-dialog title="修改人脸工单阈值" :visible.sync="faceOpen" width="700px" append-to-body> |
| | | <el-form ref="faceForm" :model="faceForm" label-width="150px" :inline="true"> |
| | | <el-form-item class="fixedWidth" label="抓拍量" prop="captureNum"> |
| | | <el-input clearable size="small" v-model="faceForm.captureNum" placeholder="工单阈值"/> |
| | | <el-input clearable size="small" v-model="faceForm.captureNumAuto" placeholder="下发阈值"/> |
| | | </div> |
| | | </el-card></el-col |
| | | > |
| | | </el-row> |
| | | <el-row class="content-warp"> |
| | | <div class="header—text" style="margin-bottom: 5px">工单白名单</div> |
| | | <el-form :model="queryParams" ref="queryForm" size="small" :inline="true"> |
| | | <el-form-item label="设备编码" prop="serialNumber"> |
| | | <el-input |
| | | v-model="queryParams.serialNumber" |
| | | placeholder="设备编码" |
| | | clearable |
| | | @keyup.enter.native="getWhiteList" |
| | | @clear="getWhiteList" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item class="fixedWidth" label="过车缺失率" prop="timelyRate"> |
| | | <el-input clearable size="small" v-model="faceForm.timelyRate" placeholder="工单阈值"/> |
| | | <el-input clearable size="small" v-model="faceForm.timelyRateAuto" placeholder="下发阈值"/> |
| | | <el-form-item label="点位名称" prop="pointName"> |
| | | <el-input |
| | | v-model="queryParams.pointName" |
| | | placeholder="点位名称" |
| | | clearable |
| | | @keyup.enter.native="getWhiteList" |
| | | @clear="getWhiteList" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item class="fixedWidth" label="延迟量" prop="delayAmount"> |
| | | <el-input clearable size="small" v-model="faceForm.delayAmount" placeholder="工单阈值"/> |
| | | <el-input clearable size="small" v-model="faceForm.delayAmountAuto" placeholder="下发阈值"/> |
| | | </el-form-item> |
| | | <el-form-item class="fixedWidth" label="设备活跃率" prop="deviceActiveRate"> |
| | | <el-input clearable size="small" v-model="faceForm.deviceActiveRate" placeholder="工单阈值"/> |
| | | <el-input clearable size="small" v-model="faceForm.deviceActiveRateAuto" placeholder="下发阈值"/> |
| | | </el-form-item> |
| | | <el-form-item class="fixedWidth" label="抓拍及时率" prop="timelyCapture"> |
| | | <el-input clearable size="small" v-model="faceForm.timelyCapture" placeholder="工单阈值"/> |
| | | <el-input clearable size="small" v-model="faceForm.timelyCaptureAuto" placeholder="下发阈值"/> |
| | | </el-form-item> |
| | | <el-form-item class="fixedWidth" label="时钟准确率" prop="deviceActiveRate"> |
| | | <el-input clearable size="small" v-model="faceForm.timeAccuracy" placeholder="工单阈值"/> |
| | | <el-input clearable size="small" v-model="faceForm.timeAccuracyAuto" placeholder="下发阈值"/> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" size="small" @click="getWhiteList">搜索</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="editFace">确 定</el-button> |
| | | <el-button @click="cancelFace">取 消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </el-row> |
| | | <el-row class="content-warp"> |
| | | <el-button size="small" type="success" @click="addOpen" plain>新增</el-button> |
| | | <el-button size="small" type="danger" @click="bathDelete" plain>删除</el-button> |
| | | <el-popover style="margin-left: 10px" placement="bottom" trigger="hover" content="导入点位"> |
| | | <div class="bottom_"> |
| | | <p>导入点位只做新增操作</p> |
| | | </div> |
| | | <div class="bottom_"> |
| | | <el-upload |
| | | ref="upload" |
| | | class="upload-demo" |
| | | drag |
| | | :action="importUrl" |
| | | :file-list="fileList" |
| | | :before-upload="beforeUpload" |
| | | > |
| | | <i class="el-icon-upload"></i> |
| | | <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div> |
| | | <div class="el-upload__tip" slot="tip">只能上传xls/xlsx文件</div> |
| | | </el-upload> |
| | | </div> |
| | | <div> |
| | | <el-button class="bottom_" type="primary" size="small" v-loading="upload" @click="handleImport" |
| | | v-hasPermi="['point:import']">导入</el-button> |
| | | </div> |
| | | <el-button type="primary" size="small" plain icon="el-icon-bottom" slot="reference" v-hasPermi="['point:import']">导入白名单</el-button> |
| | | </el-popover> |
| | | </el-row> |
| | | <el-row class="content-warp"> |
| | | <el-col :span="24"> |
| | | <el-table v-loading="loading" :data="workOrderWhiteList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center" prop="id"/> |
| | | <el-table-column label="设备编码" align="center" prop="serialNumber"/> |
| | | <el-table-column label="点位名称" align="center" prop="pointName"/> |
| | | <el-table-column label="创建人" align="center" prop="createBy"/> |
| | | <el-table-column label="备注" align="center" prop="remark"/> |
| | | </el-table> |
| | | |
| | | <!-- 车辆阈值 --> |
| | | <el-dialog title="修改车辆工单阈值" :visible.sync="carOpen" width="700px" append-to-body> |
| | | <el-form ref="faceForm" :model="faceForm" label-width="150px" :inline="true"> |
| | | <el-form-item class="fixedWidth" label="过车数据量" prop="passCarNum"> |
| | | <el-input clearable size="small" v-model="carForm.passCarNum" placeholder="工单阈值"/> |
| | | <el-input clearable size="small" v-model="carForm.passCarNumAuto" placeholder="下发阈值"/> |
| | | </el-form-item> |
| | | <el-form-item class="fixedWidth" label="过车缺失率" prop="passCarMissRate"> |
| | | <el-input clearable size="small" v-model="carForm.passCarMissRate" placeholder="工单阈值"/> |
| | | <el-input clearable size="small" v-model="carForm.passCarMissRateAuto" placeholder="下发阈值"/> |
| | | </el-form-item> |
| | | <el-form-item class="fixedWidth" label="有效过车数据量" prop="passCarEffectiveNum"> |
| | | <el-input clearable size="small" v-model="carForm.passCarEffectiveNum" placeholder="工单阈值"/> |
| | | <el-input clearable size="small" v-model="carForm.passCarEffectiveNumAuto" placeholder="下发阈值"/> |
| | | </el-form-item> |
| | | <el-form-item class="fixedWidth" label="设备活跃率" prop="deviceActiveRate"> |
| | | <el-input clearable size="small" v-model="carForm.deviceActiveRate" placeholder="工单阈值"/> |
| | | <el-input clearable size="small" v-model="carForm.deviceActiveRateAuto" placeholder="下发阈值"/> |
| | | </el-form-item> |
| | | <el-form-item class="fixedWidth" label="抓拍及时率" prop="timelyCapture"> |
| | | <el-input clearable size="small" v-model="carForm.timelyCapture" placeholder="工单阈值"/> |
| | | <el-input clearable size="small" v-model="carForm.timelyCaptureAuto" placeholder="下发阈值"/> |
| | | </el-form-item> |
| | | <el-form-item class="fixedWidth" label="时钟准确率" prop="timeAccuracy"> |
| | | <el-input clearable size="small" v-model="carForm.timeAccuracy" placeholder="工单阈值"/> |
| | | <el-input clearable size="small" v-model="carForm.timeAccuracyAuto" placeholder="下发阈值"/> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="editCar">确 定</el-button> |
| | | <el-button @click="cancelCar">取 消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | <pagination |
| | | v-show="total>0" |
| | | :total="total" |
| | | :page.sync="queryParams.pageNum" |
| | | :limit.sync="queryParams.pageSize" |
| | | @pagination="getWhiteList" |
| | | /> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <!-- 视频阈值 --> |
| | | <el-dialog title="修改视频工单阈值" :visible.sync="videoOpen" width="700px" append-to-body> |
| | | <el-form ref="videoForm" :model="videoForm" label-width="100px" :inline="true"> |
| | | <el-form-item class="fixedWidth" label="图像质量" prop="imageQuality" label-width="100px"> |
| | | <el-select v-model="videoForm.imageQuality" placeholder="工单阈值" @change="handleModeNameChange"> |
| | | <el-option :key="dict.value" :label="dict.value" v-for="dict in dict.type.image_qualify"/> |
| | | </el-select> |
| | | <el-select v-model="videoForm.imageQualityAuto" placeholder="下发阈值" @change="handleModeNameChange"> |
| | | <el-option :key="dict.value" :label="dict.value" v-for="dict in dict.type.image_qualify"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item class="fixedWidth" label="视频质量" prop="videoQuality" label-width="100px"> |
| | | <el-select v-model="videoForm.videoQuality" placeholder="工单阈值" @change="handleModeNameChange"> |
| | | <el-option :key="dict.value" :label="dict.value" v-for="dict in dict.type.video_qualify"/> |
| | | </el-select> |
| | | <el-select v-model="videoForm.videoQualityAuto" placeholder="下发阈值" @change="handleModeNameChange"> |
| | | <el-option :key="dict.value" :label="dict.value" v-for="dict in dict.type.video_qualify"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item class="fixedWidth" label="标注准确率" prop="annotationAccuracy" label-width="100px"> |
| | | <el-input v-model="videoForm.annotationAccuracy" type="number" size="small" placeholder="工单阈值"></el-input> |
| | | <el-input v-model="videoForm.annotationAccuracy" type="number" size="small" placeholder="下发阈值"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="editVideo">确 定</el-button> |
| | | <el-button @click="cancelVideo">取 消</el-button> |
| | | <!-- 新增白名单--> |
| | | <el-dialog |
| | | title="新增白名单" |
| | | :visible.sync="addShow" |
| | | width="500px" |
| | | :close-on-click-modal="false" |
| | | :before-close="addClose"> |
| | | <div> |
| | | <el-form :model="addForm" label-position="top" :rules="addFormRules" ref="addForm" size="small"> |
| | | <el-form-item label="设备编码" prop="serialNumber"> |
| | | <el-input v-model="addForm.serialNumber"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="备注信息" prop="remark"> |
| | | <el-input v-model="addForm.remark"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="addClose">取 消</el-button> |
| | | <el-button type="primary" @click="addSubmit">新 增</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { listThreshold, getThreshold, editVideo } from '@/api/platform/threshold' |
| | | import { editCar, editFace, getCar, getFace, getVideo } from '../../../../api/platform/threshold' |
| | | import { |
| | | listThreshold, |
| | | getThreshold, |
| | | updateThreshold, |
| | | importData, |
| | | } from "@/api/platform/threshold"; |
| | | import { |
| | | editCar, |
| | | editFace, |
| | | getCar, |
| | | getFace, |
| | | getVideo, |
| | | } from "../../../../api/platform/threshold"; |
| | | |
| | | import { |
| | | getWhiteList, |
| | | addWhiteList, |
| | | bathDelete, |
| | | } from "@/api/platform/work-order"; |
| | | |
| | | export default { |
| | | dicts: ['image_qualify', 'video_qualify'], |
| | | name: 'Threshold', |
| | | dicts: ["image_qualify", "video_qualify"], |
| | | name: "Threshold", |
| | | data() { |
| | | return { |
| | | ifEditVideo: false, |
| | | ifEditFace: false, |
| | | ifEditCar: false, |
| | | indicators: [], |
| | | // 遮罩层 |
| | | loading: true, |
| | |
| | | // 总条数 |
| | | total: 0, |
| | | // 运维阈值表格数据 |
| | | thresholdList: [], |
| | | thresholdList: {}, |
| | | videoList: [], |
| | | faceList: [], |
| | | carList: [], |
| | | // 弹出层标题 |
| | | title: '', |
| | | title: "", |
| | | // 是否显示弹出层 |
| | | videoOpen: false, |
| | | faceOpen: false, |
| | |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | monitorType: null |
| | | monitorType: null, |
| | | serialNumber: null, |
| | | pointName: null, |
| | | }, |
| | | // 表单参数 |
| | | videoForm: {}, |
| | |
| | | // 表单校验 |
| | | faceRules: { |
| | | monitorType: [ |
| | | { required: true, message: '设备类型不能为空', trigger: 'change' } |
| | | {required: true, message: "设备类型不能为空", trigger: "change"}, |
| | | ], |
| | | captureNum: [ |
| | | { required: true, message: '请填写抓拍量', trigger: 'blur' } |
| | | {required: true, message: "请填写抓拍量", trigger: "blur"}, |
| | | ], |
| | | timelyRate: [ |
| | | { required: true, message: '请填写及时率', trigger: 'blur' } |
| | | {required: true, message: "请填写及时率", trigger: "blur"}, |
| | | ], |
| | | delayAmount: [ |
| | | { required: true, message: '请填写延迟量', trigger: 'blur' } |
| | | {required: true, message: "请填写延迟量", trigger: "blur"}, |
| | | ], |
| | | deviceActiveRate: [ |
| | | { required: true, message: '请填写设备活跃率', trigger: 'blur' } |
| | | {required: true, message: "请填写设备活跃率", trigger: "blur"}, |
| | | ], |
| | | timeAccuracy: [ |
| | | { required: true, message: '请填写时钟准确率', trigger: 'blur' } |
| | | {required: true, message: "请填写时钟准确率", trigger: "blur"}, |
| | | ], |
| | | timelyCapture: [ |
| | | { required: true, message: '请填写抓拍及时率', trigger: 'blur' } |
| | | {required: true, message: "请填写抓拍及时率", trigger: "blur"}, |
| | | ], |
| | | }, |
| | | carRules: { |
| | | monitorType: [ |
| | | { required: true, message: '设备类型不能为空', trigger: 'change' } |
| | | {required: true, message: "设备类型不能为空", trigger: "change"}, |
| | | ], |
| | | passCarNum: [ |
| | | { required: true, message: '请填写过车数据量', trigger: 'blur' } |
| | | {required: true, message: "请填写过车数据量", trigger: "blur"}, |
| | | ], |
| | | passCarMissRate: [ |
| | | { required: true, message: '请填写过车缺失率', trigger: 'blur' } |
| | | {required: true, message: "请填写过车缺失率", trigger: "blur"}, |
| | | ], |
| | | passCarEffectiveNum: [ |
| | | { required: true, message: '请填写有效过车数据量', trigger: 'blur' } |
| | | {required: true, message: "请填写有效过车数据量", trigger: "blur"}, |
| | | ], |
| | | timelyCapture: [ |
| | | { required: true, message: '请填写抓拍及时率', trigger: 'blur' } |
| | | {required: true, message: "请填写抓拍及时率", trigger: "blur"}, |
| | | ], |
| | | deviceActiveRate: [ |
| | | { required: true, message: '请填写设备活跃率', trigger: 'blur' } |
| | | {required: true, message: "请填写设备活跃率", trigger: "blur"}, |
| | | ], |
| | | timeAccuracy: [ |
| | | { required: true, message: '请填写时钟准确率', trigger: 'blur' } |
| | | {required: true, message: "请填写时钟准确率", trigger: "blur"}, |
| | | ], |
| | | }, |
| | | rules: { |
| | | monitorType: [ |
| | | { required: true, message: '设备类型:1人脸 2车辆 3视频不能为空', trigger: 'change' } |
| | | { |
| | | required: true, |
| | | message: "设备类型:1人脸 2车辆 3视频不能为空", |
| | | trigger: "change", |
| | | }, |
| | | ], |
| | | videoQuality: [ |
| | | { required: true, message: '请选择视频质量阈值', trigger: 'change' } |
| | | {required: true, message: "请选择视频质量阈值", trigger: "change"}, |
| | | ], |
| | | imageQuality: [ |
| | | { required: true, message: '请选择图像质量阈值', trigger: 'change' } |
| | | {required: true, message: "请选择图像质量阈值", trigger: "change"}, |
| | | ], |
| | | annotationAccuracy: [ |
| | | { required: true, message: '请填写标注准确率阈值', trigger: 'blur' } |
| | | {required: true, message: "请填写标注准确率阈值", trigger: "blur"}, |
| | | ], |
| | | } |
| | | } |
| | | }, |
| | | // 白名单列表 |
| | | workOrderWhiteList: [], |
| | | // 新增框 |
| | | addShow: false, |
| | | addForm: { |
| | | serialNumber: "", |
| | | remark: "", |
| | | }, |
| | | // 新增框校验 |
| | | addFormRules: { |
| | | serialNumber: [ |
| | | {required: true, message: "设备编码不能为空", trigger: "blur"}, |
| | | ], |
| | | }, |
| | | // 导入文件路径 |
| | | importUrl: '', |
| | | fileList: [], |
| | | importFile: null, |
| | | upload: false, |
| | | }; |
| | | }, |
| | | created() { |
| | | this.getList() |
| | | this.getList(); |
| | | this.getWhiteList(); |
| | | }, |
| | | methods: { |
| | | showEdit(value) { |
| | | if (value == "video") { |
| | | this.videoList = JSON.parse(JSON.stringify(this.thresholdList.video)); |
| | | this.ifEditVideo = true; |
| | | } |
| | | if (value == "face") { |
| | | this.faceList = JSON.parse(JSON.stringify(this.thresholdList.face)); |
| | | this.ifEditFace = true; |
| | | } |
| | | if (value == "car") { |
| | | this.carList = JSON.parse(JSON.stringify(this.thresholdList.car)); |
| | | this.ifEditCar = true; |
| | | } |
| | | }, |
| | | saveEdit(value) { |
| | | let data = [] |
| | | if (value == "video") { |
| | | data = this.videoList; |
| | | this.ifEditVideo = false; |
| | | } |
| | | if (value == "face") { |
| | | data = this.faceList; |
| | | this.ifEditFace = false; |
| | | } |
| | | if (value == "car") { |
| | | data = this.carList; |
| | | this.ifEditCar = false; |
| | | } |
| | | updateThreshold(data).then((response) => { |
| | | this.$modal.msgSuccess("修改成功"); |
| | | this.getList(); |
| | | }); |
| | | }, |
| | | showContent(row) { |
| | | if(row.monitorType === "car") { |
| | | |
| | | if (row.monitorType === "car") { |
| | | } |
| | | }, |
| | | editVideo() { |
| | | // this.$refs['videoForm'].validate(validate => { |
| | | // if (validate) { |
| | | editVideo(this.videoForm).then(res => { |
| | | if (res.code === 200) { |
| | | this.$message.success("修改成功") |
| | | this.videoOpen = false |
| | | this.getList(); |
| | | } else { |
| | | this.$message.success("修改失败") |
| | | } |
| | | editVideo(this.videoForm).then((res) => { |
| | | if (res.code === 200) { |
| | | this.$message.success("修改成功"); |
| | | this.videoOpen = false; |
| | | this.getList(); |
| | | } else { |
| | | this.$message.success("修改失败"); |
| | | } |
| | | // }) |
| | | // } |
| | | }) |
| | | }); |
| | | }, |
| | | editFace() { |
| | | // this.$refs['faceForm'].validate(validate => { |
| | | // if (validate) { |
| | | editFace(this.videoForm).then(res => { |
| | | editFace(this.videoForm).then((res) => { |
| | | if (res.code === 200) { |
| | | this.$message.success("修改成功") |
| | | this.faceOpen = false |
| | | this.$message.success("修改成功"); |
| | | this.faceOpen = false; |
| | | this.getList(); |
| | | } else { |
| | | this.$message.success("修改失败") |
| | | this.$message.success("修改失败"); |
| | | } |
| | | // }) |
| | | // } |
| | | }) |
| | | }); |
| | | }, |
| | | editCar() { |
| | | // this.$refs['carForm'].validate(validate => { |
| | | // if (validate) { |
| | | editCar(this.carForm).then(res => { |
| | | editCar(this.carForm).then((res) => { |
| | | if (res.code === 200) { |
| | | this.$message.success("修改成功") |
| | | this.carOpen = false |
| | | this.$message.success("修改成功"); |
| | | this.carOpen = false; |
| | | this.getList(); |
| | | } else { |
| | | this.$message.success("修改失败") |
| | | this.$message.success("修改失败"); |
| | | } |
| | | // }) |
| | | // } |
| | | }) |
| | | }); |
| | | }, |
| | | /** 查询运维阈值列表 */ |
| | | getList() { |
| | | this.loading = true |
| | | listThreshold(this.queryParams).then(response => { |
| | | this.thresholdList = response.rows |
| | | this.total = response.total |
| | | this.loading = false |
| | | }) |
| | | this.loading = true; |
| | | listThreshold(this.queryParams).then((response) => { |
| | | this.thresholdList = response.data; |
| | | this.videoList = JSON.parse(JSON.stringify(this.thresholdList.video)); |
| | | this.faceList = JSON.parse(JSON.stringify(this.thresholdList.face)); |
| | | this.carList = JSON.parse(JSON.stringify(this.thresholdList.car)); |
| | | this.total = response.total; |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | getWhiteList() { |
| | | this.loading = true; |
| | | getWhiteList(this.queryParams).then((response) => { |
| | | this.workOrderWhiteList = response.data; |
| | | this.total = response.total; |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | // 取消按钮 |
| | | cancelFace() { |
| | | this.faceOpen = false |
| | | this.resetFace() |
| | | this.faceOpen = false; |
| | | this.resetFace(); |
| | | }, |
| | | cancelCar() { |
| | | this.carOpen = false |
| | | this.resetCar() |
| | | this.carOpen = false; |
| | | this.resetCar(); |
| | | }, |
| | | cancelVideo() { |
| | | this.videoOpen = false |
| | | this.resetVideo() |
| | | this.videoOpen = false; |
| | | this.resetVideo(); |
| | | }, |
| | | // 表单重置 |
| | | reset() { |
| | |
| | | indicator: null, |
| | | createTime: null, |
| | | updateTime: null, |
| | | deleted: null |
| | | } |
| | | this.resetForm('form') |
| | | deleted: null, |
| | | }; |
| | | this.resetForm("form"); |
| | | }, |
| | | resetVideo() { |
| | | this.videoForm = { |
| | |
| | | videoQualityAuto: "", |
| | | annotationAccuracy: null, |
| | | annotationAccuracyAuto: null, |
| | | } |
| | | this.resetForm('videoForm') |
| | | }; |
| | | this.resetForm("videoForm"); |
| | | }, |
| | | resetFace() { |
| | | this.faceForm = { |
| | |
| | | videoQualityAuto: "", |
| | | annotationAccuracy: null, |
| | | annotationAccuracyAuto: null, |
| | | } |
| | | this.resetForm('faceForm') |
| | | }; |
| | | this.resetForm("faceForm"); |
| | | }, |
| | | resetCar() { |
| | | this.carForm = { |
| | |
| | | videoQualityAuto: "", |
| | | annotationAccuracy: null, |
| | | annotationAccuracyAuto: null, |
| | | } |
| | | this.resetForm('carForm') |
| | | }; |
| | | this.resetForm("carForm"); |
| | | }, |
| | | /** 搜索按钮操作 */ |
| | | handleQuery() { |
| | | this.queryParams.pageNum = 1 |
| | | this.getList() |
| | | }, |
| | | // handleQuery() { |
| | | // this.queryParams.pageNum = 1; |
| | | // this.getList(); |
| | | // }, |
| | | /** 重置按钮操作 */ |
| | | resetQuery() { |
| | | this.resetForm('queryForm') |
| | | this.handleQuery() |
| | | // resetQuery() { |
| | | // this.resetForm("queryForm"); |
| | | // this.handleQuery(); |
| | | // }, |
| | | // 多选框选中数据 |
| | | // handleSelectionChange(selection) { |
| | | // this.ids = selection.map((item) => item.id); |
| | | // this.single = selection.length !== 1; |
| | | // this.multiple = !selection.length; |
| | | // }, |
| | | /** 新增按钮操作 */ |
| | | // handleAdd() { |
| | | // this.reset(); |
| | | // this.open = true; |
| | | // this.title = "添加运维阈值"; |
| | | // this.handleModeNameChange(); |
| | | // }, |
| | | /** 修改按钮操作 */ |
| | | updateWho(row) { |
| | | if (row.monitorType === "face") { |
| | | getFace(row.id).then((response) => { |
| | | this.faceForm = response.data; |
| | | this.faceOpen = true; |
| | | }); |
| | | } else if (row.monitorType === "car") { |
| | | getCar(row.id).then((response) => { |
| | | this.carForm = response.data; |
| | | this.carOpen = true; |
| | | }); |
| | | } else { |
| | | getVideo(row.id).then((response) => { |
| | | this.videoForm = response.data; |
| | | this.videoOpen = true; |
| | | }); |
| | | } |
| | | }, |
| | | handleUpdate(row) { |
| | | this.reset(); |
| | | const id = row.id || this.ids; |
| | | getThreshold(id).then((response) => { |
| | | this.form = response.data; |
| | | this.indicators = JSON.parse(this.form.indicator); |
| | | this.videoOpen = true; |
| | | this.title = "修改运维阈值"; |
| | | }); |
| | | }, |
| | | /** 提交按钮 */ |
| | | submitForm() { |
| | | this.$refs["form"].validate((valid) => { |
| | | if (valid) { |
| | | // 将indicators转为json赋值到form |
| | | this.form.indicator = JSON.stringify(this.indicators); |
| | | if (this.form.id != null) { |
| | | updateThreshold(this.form).then((response) => { |
| | | this.$modal.msgSuccess("修改成功"); |
| | | this.open = false; |
| | | this.getList(); |
| | | }); |
| | | } else { |
| | | addThreshold(this.form).then((response) => { |
| | | this.$modal.msgSuccess("新增成功"); |
| | | this.open = false; |
| | | this.getList(); |
| | | }); |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | /** 删除按钮操作 */ |
| | | handleDelete(row) { |
| | | const ids = row.id || this.ids; |
| | | this.$modal |
| | | .confirm('是否确认删除运维阈值编号为"' + ids + '"的数据项?') |
| | | .then(function () { |
| | | return delThreshold(ids); |
| | | }) |
| | | .then(() => { |
| | | this.getList(); |
| | | this.$modal.msgSuccess("删除成功"); |
| | | }) |
| | | .catch(() => { |
| | | }); |
| | | }, |
| | | /** 切换不同指标 */ |
| | | handleModeNameChange() { |
| | | if (this.form.monitorType === "1" || this.form.monitorType === null) { |
| | | this.indicators = [ |
| | | { |
| | | label: "抓拍量", |
| | | value: null, |
| | | }, |
| | | { |
| | | label: "及时率", |
| | | value: null, |
| | | }, |
| | | { |
| | | label: "延迟量", |
| | | value: null, |
| | | }, |
| | | { |
| | | label: "抽检量", |
| | | value: null, |
| | | }, |
| | | { |
| | | label: "设备活跃率", |
| | | value: null, |
| | | }, |
| | | { |
| | | label: "抓拍及时率", |
| | | value: null, |
| | | }, |
| | | { |
| | | label: "时钟准确率", |
| | | value: null, |
| | | }, |
| | | { |
| | | label: "时钟不准确率", |
| | | value: null, |
| | | }, |
| | | ]; |
| | | } else if (this.form.monitorType === "car") { |
| | | this.indicators = [ |
| | | { |
| | | label: "过车数据量", |
| | | value: null, |
| | | }, |
| | | { |
| | | label: "过车缺失率", |
| | | value: null, |
| | | }, |
| | | { |
| | | label: "有效过车数据量", |
| | | value: null, |
| | | }, |
| | | { |
| | | label: "抽检量", |
| | | value: null, |
| | | }, |
| | | { |
| | | label: "设备活跃率", |
| | | value: null, |
| | | }, |
| | | { |
| | | label: "抓拍及时率", |
| | | value: null, |
| | | }, |
| | | { |
| | | label: "时钟准确率", |
| | | value: null, |
| | | }, |
| | | { |
| | | label: "时钟不准确率", |
| | | value: null, |
| | | }, |
| | | ]; |
| | | } else if (this.form.monitorType === "video") { |
| | | this.indicators = [ |
| | | { |
| | | label: "录像质量", |
| | | value: null, |
| | | }, |
| | | { |
| | | label: "标注准确率", |
| | | value: null, |
| | | }, |
| | | { |
| | | label: "图像质量", |
| | | value: null, |
| | | }, |
| | | ]; |
| | | } |
| | | }, |
| | | // 打开新增框 |
| | | addOpen() { |
| | | this.addShow = true; |
| | | }, |
| | | // 关闭新增框 |
| | | addClose() { |
| | | this.addShow = false; |
| | | this.addReset(); |
| | | }, |
| | | // 新增框提交 |
| | | addSubmit() { |
| | | this.$refs["addForm"].validate((valid) => { |
| | | if (valid) { |
| | | addWhiteList(this.addForm).then((response) => { |
| | | this.$modal.msgSuccess("新增成功"); |
| | | this.addShow = false; |
| | | this.getWhiteList(); |
| | | this.addReset(); |
| | | }); |
| | | } |
| | | }); |
| | | }, |
| | | // 新增框重置 |
| | | addReset() { |
| | | this.addForm = { |
| | | serialNumber: "", |
| | | remark: "", |
| | | }; |
| | | }, |
| | | // 多选框选中数据 |
| | | handleSelectionChange(selection) { |
| | |
| | | this.single = selection.length !== 1 |
| | | this.multiple = !selection.length |
| | | }, |
| | | /** 新增按钮操作 */ |
| | | handleAdd() { |
| | | this.reset() |
| | | this.open = true |
| | | this.title = '添加运维阈值' |
| | | this.handleModeNameChange() |
| | | }, |
| | | /** 修改按钮操作 */ |
| | | updateWho(row) { |
| | | if (row.monitorType === 'face') { |
| | | getFace(row.id).then(response => { |
| | | this.faceForm = response.data |
| | | this.faceOpen = true; |
| | | }) |
| | | } else if (row.monitorType === 'car') { |
| | | getCar(row.id).then(response => { |
| | | this.carForm = response.data |
| | | this.carOpen = true; |
| | | }) |
| | | } else { |
| | | getVideo(row.id).then(response => { |
| | | this.videoForm = response.data |
| | | this.videoOpen = true; |
| | | }) |
| | | } |
| | | }, |
| | | handleUpdate(row) { |
| | | this.reset() |
| | | const id = row.id || this.ids |
| | | getThreshold(id).then(response => { |
| | | this.form = response.data |
| | | this.indicators = JSON.parse(this.form.indicator) |
| | | this.videoOpen = true |
| | | this.title = '修改运维阈值' |
| | | // 批量删除 |
| | | bathDelete() { |
| | | bathDelete(this.ids).then(() => { |
| | | this.getWhiteList(); |
| | | this.$modal.msgSuccess("批量删除成功"); |
| | | this.ids = []; |
| | | }) |
| | | }, |
| | | /** 提交按钮 */ |
| | | submitForm() { |
| | | this.$refs['form'].validate(valid => { |
| | | if (valid) { |
| | | // 将indicators转为json赋值到form |
| | | this.form.indicator = JSON.stringify(this.indicators) |
| | | if (this.form.id != null) { |
| | | updateThreshold(this.form).then(response => { |
| | | this.$modal.msgSuccess('修改成功') |
| | | this.open = false |
| | | this.getList() |
| | | }) |
| | | } else { |
| | | addThreshold(this.form).then(response => { |
| | | this.$modal.msgSuccess('新增成功') |
| | | this.open = false |
| | | this.getList() |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | | beforeUpload(file) { |
| | | this.importFile = file |
| | | this.fileList = [file] |
| | | return false |
| | | }, |
| | | /** 删除按钮操作 */ |
| | | handleDelete(row) { |
| | | const ids = row.id || this.ids |
| | | this.$modal.confirm('是否确认删除运维阈值编号为"' + ids + '"的数据项?').then(function() { |
| | | return delThreshold(ids) |
| | | }).then(() => { |
| | | this.getList() |
| | | this.$modal.msgSuccess('删除成功') |
| | | }).catch(() => { |
| | | // 导入白名单 |
| | | handleImport() { |
| | | this.upload = true; |
| | | let formData = new FormData() |
| | | formData.append("file", this.importFile) |
| | | importData(formData).then(res => { |
| | | this.$message.success("导入成功") |
| | | this.upload = false |
| | | this.fileList = [] |
| | | this.getWhiteList() |
| | | }) |
| | | }, |
| | | /** 切换不同指标 */ |
| | | handleModeNameChange() { |
| | | if (this.form.monitorType === '1' || this.form.monitorType === null) { |
| | | this.indicators = [ |
| | | { |
| | | label: '抓拍量', |
| | | value: null |
| | | }, |
| | | { |
| | | label: '及时率', |
| | | value: null |
| | | }, |
| | | { |
| | | label: '延迟量', |
| | | value: null |
| | | }, |
| | | { |
| | | label: '抽检量', |
| | | value: null |
| | | }, |
| | | { |
| | | label: '设备活跃率', |
| | | value: null |
| | | }, |
| | | { |
| | | label: '抓拍及时率', |
| | | value: null |
| | | }, |
| | | { |
| | | label: '时钟准确率', |
| | | value: null |
| | | }, |
| | | { |
| | | label: '时钟不准确率', |
| | | value: null |
| | | } |
| | | ] |
| | | } else if (this.form.monitorType === 'car') { |
| | | this.indicators = [ |
| | | { |
| | | label: '过车数据量', |
| | | value: null |
| | | }, |
| | | { |
| | | label: '过车缺失率', |
| | | value: null |
| | | }, |
| | | { |
| | | label: '有效过车数据量', |
| | | value: null |
| | | }, |
| | | { |
| | | label: '抽检量', |
| | | value: null |
| | | }, |
| | | { |
| | | label: '设备活跃率', |
| | | value: null |
| | | }, |
| | | { |
| | | label: '抓拍及时率', |
| | | value: null |
| | | }, |
| | | { |
| | | label: '时钟准确率', |
| | | value: null |
| | | }, |
| | | { |
| | | label: '时钟不准确率', |
| | | value: null |
| | | } |
| | | ] |
| | | } else if (this.form.monitorType === 'video') { |
| | | this.indicators = [ |
| | | { |
| | | label: '录像质量', |
| | | value: null |
| | | }, |
| | | { |
| | | label: '标注准确率', |
| | | value: null |
| | | }, |
| | | { |
| | | label: '图像质量', |
| | | value: null |
| | | }, |
| | | ] |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | <style> |
| | | .el-input-half-width { |
| | | <style scoped> |
| | | ::v-deep .el-input-half-width { |
| | | width: calc(50% - 6px); /* 减去一些间隔 */ |
| | | } |
| | | .table-row { |
| | | ::v-deep .table-row { |
| | | display: flex; |
| | | flex-direction: row; |
| | | } |
| | | .table-row-item { |
| | | ::v-deep .table-row-item { |
| | | width: 120px; |
| | | text-align: center; |
| | | } |
| | |
| | | display: flex; |
| | | flex-direction: row; |
| | | } |
| | | |
| | | .header—text { |
| | | font-weight: bold; |
| | | font-size: large; |
| | | } |
| | | ::v-deep .el-form-item { |
| | | margin-bottom: 0px; /* 根据需求调整这个值 */ |
| | | } |
| | | ::v-deep .el-form-item__label { |
| | | color: #8d8d8d; |
| | | } |
| | | .unit { |
| | | margin-left: 5px; |
| | | display: inline-block; |
| | | } |
| | | .content-warp { |
| | | margin-top: 10px; |
| | | } |
| | | </style> |