装备定位
This commit is contained in:
parent
00656162f7
commit
1f6445fbb7
|
|
@ -2,94 +2,135 @@
|
|||
<div class="app-container">
|
||||
<!-- 简化版搜索表单 -->
|
||||
<div class="search-wrapper">
|
||||
<el-form
|
||||
:inline="true"
|
||||
label-width="130px"
|
||||
label-position="right"
|
||||
ref="searchFormRef"
|
||||
:model="searchParams"
|
||||
class="search-form"
|
||||
v-show="showSearch"
|
||||
<el-form label-width="130px" ref="searchFormRef" :model="searchParams" v-show="showSearch">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="iotName" label="定位设备名称:">
|
||||
<el-input clearable placeholder="请输入定位设备名称" v-model="searchParams.iotName" style="width: 100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="iotCode" label="定位设备编码:">
|
||||
<el-input clearable placeholder="请输入定位设备编码" v-model="searchParams.iotCode" style="width: 100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="typeId" label="装备类目:">
|
||||
<el-select
|
||||
v-model="searchParams.typeId"
|
||||
placeholder="请选择定位设备状态"
|
||||
clearable
|
||||
filterable
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-form-item prop="keyWord" label="定位设备名称:">
|
||||
<el-input
|
||||
clearable
|
||||
placeholder="请输入定位设备名称"
|
||||
v-model="searchParams.keyWord"
|
||||
style="width: 200px"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="keyWord" label="定位设备编码:">
|
||||
<el-input
|
||||
clearable
|
||||
placeholder="请输入定位设备编码"
|
||||
v-model="searchParams.keyWord"
|
||||
style="width: 200px"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="keyWord" label="装备名称:">
|
||||
<el-input
|
||||
clearable
|
||||
placeholder="请输入装备名称"
|
||||
v-model="searchParams.keyWord"
|
||||
style="width: 200px"
|
||||
<el-option
|
||||
v-for="(item, index) in categoryList"
|
||||
:key="index"
|
||||
:label="item.equipmentName"
|
||||
:value="item.typeId"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<div v-if="searchExpanded">
|
||||
<el-form-item prop="keyWord" label="装备编码:">
|
||||
<el-input
|
||||
clearable
|
||||
placeholder="请输入装备编码"
|
||||
v-model="searchParams.keyWord"
|
||||
style="width: 200px"
|
||||
/>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="typeName" label="装备名称:">
|
||||
<el-input clearable placeholder="请输入装备名称" v-model="searchParams.typeName" style="width: 100%" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="keyWord" label="装备状态:">
|
||||
<el-input
|
||||
clearable
|
||||
placeholder="请输入装备状态"
|
||||
v-model="searchParams.keyWord"
|
||||
style="width: 200px"
|
||||
/>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="maCode" label="装备编码:">
|
||||
<el-input clearable placeholder="请输入装备编码" v-model="searchParams.maCode" style="width: 100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="proName" label="使用项目:">
|
||||
<el-input clearable placeholder="请输入使用项目" v-model="searchParams.proName" style="width: 100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="maStatus" label="装备状态:">
|
||||
<el-select
|
||||
v-model="searchParams.maStatus"
|
||||
placeholder="请选择装备状态"
|
||||
clearable
|
||||
filterable
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option v-for="(item, index) in statusList" :key="index" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<!-- 设备状态 -->
|
||||
<el-form-item prop="iotStatus" label="设备状态:">
|
||||
<el-select
|
||||
v-model="searchParams.iotStatus"
|
||||
placeholder="请选择设备状态"
|
||||
clearable
|
||||
filterable
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option label="在线" value="0" />
|
||||
<el-option label="下线" value="1" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<!-- 绑定状态 -->
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="bindStatus" label="绑定状态:">
|
||||
<el-select
|
||||
v-model="searchParams.bindStatus"
|
||||
placeholder="请选择绑定状态"
|
||||
clearable
|
||||
filterable
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option label="已绑定" value="0" />
|
||||
<el-option label="未绑定" value="1" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<!-- 绑定人 -->
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="iotManager" label="绑定人:">
|
||||
<el-input clearable placeholder="请输入绑定人" v-model="searchParams.iotManager" style="width: 100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
|
||||
</el-form>
|
||||
</div>
|
||||
|
||||
<!-- 状态统计和操作按钮 - 固定定位 -->
|
||||
<div class="status-operation-bar sticky-bar">
|
||||
<div class="operation-buttons">
|
||||
<el-button type="text" size="mini" style="float: right;line-height: 30px;" @click="toggleSearch" class="search-toggle-btn">
|
||||
<el-button
|
||||
type="text"
|
||||
size="mini"
|
||||
style="float: right; line-height: 30px"
|
||||
@click="toggleSearch"
|
||||
class="search-toggle-btn"
|
||||
>
|
||||
<i :class="searchExpanded ? 'el-icon-up' : 'el-icon-down'"></i>
|
||||
{{ searchExpanded ? '收起' : '展开' }}
|
||||
</el-button>
|
||||
|
||||
<el-button @click="handleQuery" icon="el-icon-search" type="primary" style="float: right" >
|
||||
查询
|
||||
</el-button>
|
||||
<el-button @click="handleQuery" icon="el-icon-search" type="primary" style="float: right"> 查询 </el-button>
|
||||
|
||||
<el-button @click="onReset" icon="el-icon-refresh" style="margin-left: 8px; float: right">重置</el-button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 数据列表 -->
|
||||
<div class="table-wrapper">
|
||||
<div class="table-header">
|
||||
<el-button @click="addDevice(null)" type="primary" style="float: right;margin-right: 10px;">
|
||||
新增
|
||||
</el-button>
|
||||
<el-button @click="addDevice(null)" type="primary" style="float: right; margin-right: 10px"> 新增 </el-button>
|
||||
|
||||
<right-toolbar
|
||||
:showSearch.sync="showSearch"
|
||||
@queryTable="getDeviceList"
|
||||
:columns="columns"
|
||||
></right-toolbar>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getDeviceList" :columns="columns"></right-toolbar>
|
||||
</div>
|
||||
|
||||
<!-- 表格容器:限制高度 + 隐藏滚动条 -->
|
||||
|
|
@ -104,8 +145,6 @@
|
|||
:show-overflow-tooltip="true"
|
||||
height="100%"
|
||||
>
|
||||
<!--复选列-->
|
||||
<!-- <el-table-column type="selection" width="50" align="center"/>-->
|
||||
<!--序号列-->
|
||||
<el-table-column align="center" label="序号" type="index" width="60" />
|
||||
|
||||
|
|
@ -137,125 +176,33 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<!-- 核心字段列 - 统一设置换行样式 -->
|
||||
<!-- <el-table-column align="center" prop="iotName" label="定位设备名称" width="180">
|
||||
<template slot-scope="scope">
|
||||
<el-tooltip
|
||||
:content="scope.row.iotName"
|
||||
placement="top"
|
||||
:disabled="!isOverflow(scope.row.iotName, 2, 180)"
|
||||
>
|
||||
<div class="cell-text-ellipsis">
|
||||
{{ scope.row.iotName }}
|
||||
</div>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" prop="iotCode" label="定位设备编码" min-width="120">
|
||||
<template slot-scope="scope">
|
||||
<el-tooltip
|
||||
:content="scope.row.iotCode"
|
||||
placement="top"
|
||||
:disabled="!isOverflow(scope.row.iotCode, 2, 180)"
|
||||
>
|
||||
<div class="cell-text-ellipsis">{{ scope.row.iotCode }}</div>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="typeName" label="装备名称" width="180">
|
||||
<template slot-scope="scope">
|
||||
<el-tooltip
|
||||
:content="scope.row.typeName"
|
||||
placement="top"
|
||||
:disabled="!isOverflow(scope.row.typeName, 2, 180)"
|
||||
>
|
||||
<div class="cell-text-ellipsis">{{ scope.row.typeName }}</div>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="maCode" label="装备编码" min-width="120">
|
||||
<template slot-scope="scope">
|
||||
<el-tooltip
|
||||
:content="scope.row.maCode"
|
||||
placement="top"
|
||||
:disabled="!isOverflow(scope.row.maCode, 2, 180)"
|
||||
>
|
||||
<div class="cell-text-ellipsis">{{ scope.row.maCode }}</div>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" label="设备状态" width="80">
|
||||
<template slot-scope="{ row }">
|
||||
<el-tag size="mini" type="success" v-if="row.iotStatus === 0">在线</el-tag>
|
||||
<el-tag size="mini" type="warning" v-if="row.iotStatus === 1">离线</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="绑定状态" width="80">
|
||||
<template slot-scope="{ row }">
|
||||
<el-tag size="mini" type="success" v-if="row.bindStatus === 0">已绑定</el-tag>
|
||||
<el-tag size="mini" type="warning" v-if="row.bindStatus === 1">未绑定</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" prop="address" label="设备地图" width="80">
|
||||
|
||||
<template slot-scope="{ row }">
|
||||
<i
|
||||
class="el-icon-location location-icon"
|
||||
@click="handleMap(row)"
|
||||
v-if="row.bindStatus === 0"
|
||||
/>
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="iotManager" label="设备负责人" width="100">
|
||||
<template slot-scope="scope">
|
||||
<el-tooltip
|
||||
:content="scope.row.iotManager"
|
||||
placement="top"
|
||||
:disabled="!isOverflow(scope.row.iotManager, 2, 180)"
|
||||
>
|
||||
<div class="cell-text-ellipsis">
|
||||
{{ scope.row.iotManager }}
|
||||
</div>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" prop="bindTime" label="绑定时间" min-width="110"/>
|
||||
<el-table-column align="center" prop="unBindTime" label="解绑时间" min-width="110"/>-->
|
||||
|
||||
<!--操作列:仅修改绑定按钮的传参,其余完全保留-->
|
||||
<el-table-column align="center" label="操作" width="250">
|
||||
<template slot-scope="{ row }">
|
||||
<el-button
|
||||
type="text"
|
||||
icon="el-icon-tickets"
|
||||
@click="handleViewRecord(row.iotId)"
|
||||
>记录</el-button>
|
||||
<el-button type="text" icon="el-icon-tickets" @click="handleViewRecord(row.iotId)">记录</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
style="color: #f56c6c"
|
||||
@click="handleDeleteAndUnbind(row, 1)"
|
||||
v-if="row.bindStatus === 1"
|
||||
>删除</el-button>
|
||||
>删除</el-button
|
||||
>
|
||||
<el-button
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
style="color: #67c23a"
|
||||
@click="addDevice(row)"
|
||||
v-if="row.bindStatus === 1"
|
||||
>修改</el-button>
|
||||
>修改</el-button
|
||||
>
|
||||
<el-button
|
||||
type="text"
|
||||
icon="el-icon-document-delete"
|
||||
style="color: #e6a23c"
|
||||
@click="handleDeleteAndUnbind(row, 2)"
|
||||
v-if="row.bindStatus === 0"
|
||||
>解绑</el-button>
|
||||
>解绑</el-button
|
||||
>
|
||||
<!-- 仅修改这行:传参改为row,其余样式/图标/颜色完全保留 -->
|
||||
<el-button
|
||||
type="text"
|
||||
|
|
@ -263,7 +210,8 @@
|
|||
style="color: #e6a23c"
|
||||
@click="handleBind(row)"
|
||||
v-if="row.bindStatus === 1"
|
||||
>绑定</el-button>
|
||||
>绑定</el-button
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
|
@ -307,10 +255,7 @@
|
|||
<el-form-item label="定位设备负责人:" prop="iotManager">
|
||||
<el-input v-model="addOrEditForm.iotManager" placeholder="输入内容" maxlength="50" show-word-limit />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="地址:" prop="address">-->
|
||||
<!-- <el-input v-model="addOrEditForm.address" placeholder="输入内容" maxlength="50" show-word-limit/>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- 设备状态开关 -->
|
||||
|
||||
<el-form-item label="定位设备状态:">
|
||||
<el-switch
|
||||
size="large"
|
||||
|
|
@ -321,19 +266,16 @@
|
|||
inactive-value="1"
|
||||
/>
|
||||
</el-form-item>
|
||||
<!-- <!– 绑定状态开关 –>-->
|
||||
<!-- <el-form-item label="绑定状态:">-->
|
||||
<!-- <el-switch-->
|
||||
<!-- size="large"-->
|
||||
<!-- v-model="addOrEditForm.bindStatus"-->
|
||||
<!-- active-color="#13ce66"-->
|
||||
<!-- inactive-color="#cccccc"-->
|
||||
<!-- active-value="0"-->
|
||||
<!-- inactive-value="1"-->
|
||||
<!-- />-->
|
||||
<!-- </el-form-item>-->
|
||||
|
||||
<el-form-item label="备注:" prop="remark">
|
||||
<el-input type="textarea" v-model="addOrEditForm.remark" placeholder="请输入备注" rows="2" maxlength="100" show-word-limit/>
|
||||
<el-input
|
||||
type="textarea"
|
||||
v-model="addOrEditForm.remark"
|
||||
placeholder="请输入备注"
|
||||
rows="2"
|
||||
maxlength="100"
|
||||
show-word-limit
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
|
|
@ -344,44 +286,6 @@
|
|||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<!--绑定弹窗:仅修改3处逻辑(prop/取消按钮/隐藏iotId),样式完全保留-->
|
||||
<!-- <el-dialog
|
||||
width="600px"
|
||||
@close="handleBindDialogClose"
|
||||
destroy-on-close
|
||||
:title="bindDialogTitle"
|
||||
:visible.sync="bindDialogVisible"
|
||||
>
|
||||
<el-form
|
||||
label-width="100px"
|
||||
label-position="right"
|
||||
ref="bindFormRef"
|
||||
:model="bindForm"
|
||||
:rules="bindFormRules"
|
||||
>
|
||||
<!– 新增:隐藏存储iotId,无样式修改 –>
|
||||
<el-form-item prop="iotId" style="display: none;">
|
||||
<el-input v-model="bindForm.iotId"/>
|
||||
</el-form-item>
|
||||
|
||||
<!– 仅修改prop为typeName,label/样式完全保留 –>
|
||||
<el-form-item label="装备名称:" prop="typeName">
|
||||
<el-input v-model="bindForm.typeName" placeholder="输入内容" maxlength="50" show-word-limit/>
|
||||
</el-form-item>
|
||||
<!– 仅修改prop为typeCode,label/样式完全保留 –>
|
||||
<el-form-item label="装备编码:" prop="maCode">
|
||||
<el-input v-model="bindForm.maCode" placeholder="输入内容" maxlength="50" show-word-limit/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<!– 仅修改这行:取消按钮关闭绑定弹窗,其余完全保留 –>
|
||||
<el-button @click="bindDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="bindSubmit" :loading="submitLoading">
|
||||
绑定
|
||||
</el-button>
|
||||
</div>
|
||||
</el-dialog>-->
|
||||
|
||||
<el-dialog
|
||||
title="设备绑定"
|
||||
@close="handleBindDialogClose"
|
||||
|
|
@ -394,20 +298,18 @@
|
|||
<div class="instance-dialog-container">
|
||||
<!-- 筛选条件 -->
|
||||
<div class="search-form">
|
||||
|
||||
<el-form :inline="true" :model="searchForm" class="demo-form-inline">
|
||||
<el-form-item label="装备名称">
|
||||
<el-input
|
||||
v-model="searchForm.equipmentName"
|
||||
placeholder="请输入装备名称"
|
||||
clearable
|
||||
size="small"
|
||||
/>
|
||||
<el-input v-model="searchForm.equipmentName" placeholder="请输入装备名称" clearable size="small" />
|
||||
</el-form-item>
|
||||
<el-form-item label="装备分类">
|
||||
<el-select v-model="searchForm.type" placeholder="请选择分类"
|
||||
style="width: 100%;"
|
||||
clearable filterable @change="handleCategoryChange"
|
||||
<el-select
|
||||
v-model="searchForm.type"
|
||||
placeholder="请选择分类"
|
||||
style="width: 100%"
|
||||
clearable
|
||||
filterable
|
||||
@change="handleCategoryChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in categoryList"
|
||||
|
|
@ -417,13 +319,8 @@
|
|||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="规格型号">
|
||||
<el-input
|
||||
v-model="searchForm.specModel"
|
||||
placeholder="请输入规格型号"
|
||||
clearable
|
||||
size="small"
|
||||
/>
|
||||
<el-form-item label="原始编码">
|
||||
<el-input v-model="searchForm.originalEncoding" placeholder="请输入原始编码" clearable size="small" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" size="small" @click="handleOwnSearch">查询</el-button>
|
||||
|
|
@ -443,13 +340,9 @@
|
|||
:highlight-current-row="true"
|
||||
>
|
||||
<el-table-column width="55" align="center">
|
||||
<template slot-scope="scope"> <!-- Element UI 用 slot-scope 而非 v-slot -->
|
||||
<el-radio
|
||||
v-model="selectedRowId"
|
||||
:label="scope.row.id"
|
||||
size="small"
|
||||
class="radio-no-text"
|
||||
/>
|
||||
<template slot-scope="scope">
|
||||
<!-- Element UI 用 slot-scope 而非 v-slot -->
|
||||
<el-radio v-model="selectedRowId" :label="scope.row.id" size="small" class="radio-no-text" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
|
|
@ -475,7 +368,7 @@
|
|||
:page-size="tableData.own.pageSize"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="tableData.own.total"
|
||||
style="margin-top: 15px; text-align: right;"
|
||||
style="margin-top: 15px; text-align: right"
|
||||
>
|
||||
</el-pagination>
|
||||
</div>
|
||||
|
|
@ -483,39 +376,19 @@
|
|||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="ownOpen = false">取消</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="handleOwnConfirm"
|
||||
:disabled="!selectedRowId"
|
||||
>
|
||||
确认选择
|
||||
</el-button>
|
||||
<el-button type="primary" @click="handleOwnConfirm" :disabled="!selectedRowId"> 确认选择 </el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<!-- 弹框 -->
|
||||
<DialogModel
|
||||
:dialogConfig="dialogConfig"
|
||||
@closeDialogOuter="closeDialogOuter"
|
||||
>
|
||||
<DialogModel :dialogConfig="dialogConfig" @closeDialogOuter="closeDialogOuter">
|
||||
<!-- 设备添加表单 -->
|
||||
<template slot="outerContent">
|
||||
<template v-if="dialogConfig.outerTitle !== '绑定记录'">
|
||||
<el-form
|
||||
label-width="80px"
|
||||
:model="addDeviceParams"
|
||||
:rules="addDeviceRules"
|
||||
ref="addDeviceParamsRef"
|
||||
>
|
||||
<el-form label-width="80px" :model="addDeviceParams" :rules="addDeviceRules" ref="addDeviceParamsRef">
|
||||
<el-form-item label="设备类型" prop="iotType">
|
||||
<el-select
|
||||
style="width: 100%"
|
||||
placeholder="请选择设备类型"
|
||||
clearable
|
||||
v-model="addDeviceParams.iotType"
|
||||
>
|
||||
<el-select style="width: 100%" placeholder="请选择设备类型" clearable v-model="addDeviceParams.iotType">
|
||||
<el-option
|
||||
v-for="item in deviceTypeList"
|
||||
:key="item.iotTypeId"
|
||||
|
|
@ -525,18 +398,10 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="设备编号" prop="iotCode">
|
||||
<el-input
|
||||
placeholder="请输入设备编号"
|
||||
clearable
|
||||
v-model="addDeviceParams.iotCode"
|
||||
/>
|
||||
<el-input placeholder="请输入设备编号" clearable v-model="addDeviceParams.iotCode" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item
|
||||
label="设备状态: "
|
||||
prop="iotStatus"
|
||||
v-if="dialogConfig.outerTitle === '修改设备'"
|
||||
>
|
||||
<el-form-item label="设备状态: " prop="iotStatus" v-if="dialogConfig.outerTitle === '修改设备'">
|
||||
<el-switch
|
||||
v-model="addDeviceParams.iotStatus"
|
||||
active-text="在线"
|
||||
|
|
@ -548,30 +413,14 @@
|
|||
</el-form>
|
||||
|
||||
<el-row style="margin-top: 20px; text-align: right">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="primary"
|
||||
@click="handleSubmit()"
|
||||
>确 定</el-button
|
||||
>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="warning"
|
||||
@click="handleCancel()"
|
||||
>取 消</el-button
|
||||
>
|
||||
<el-button size="mini" type="primary" @click="handleSubmit()">确 定</el-button>
|
||||
<el-button size="mini" type="warning" @click="handleCancel()">取 消</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<TableModel
|
||||
:config="dialogConfig"
|
||||
:sendParams="sendParams"
|
||||
:sendApi="getDeviceBindRecordApi"
|
||||
v-else
|
||||
/>
|
||||
<TableModel :config="dialogConfig" :sendParams="sendParams" :sendApi="getDeviceBindRecordApi" v-else />
|
||||
</template>
|
||||
</DialogModel>
|
||||
|
||||
|
||||
<MapDialog
|
||||
v-if="mapDialogVisible"
|
||||
:deviceName="deviceName"
|
||||
|
|
@ -590,12 +439,11 @@ import {
|
|||
unbindDeviceApi,
|
||||
getDeviceBindRecordApi,
|
||||
getDeviceBindDetailsApi,
|
||||
|
||||
addOrUpdate,
|
||||
getIotList,
|
||||
unbindIot,
|
||||
getCategoryList,
|
||||
getEquipment
|
||||
getEquipment,
|
||||
} from '@/api/iotDevice'
|
||||
import { dialogConfig } from './config'
|
||||
import DialogModel from '@/components/DialogModel' // 弹框组件
|
||||
|
|
@ -611,7 +459,7 @@ export default {
|
|||
components: {
|
||||
DialogModel,
|
||||
TableModel,
|
||||
MapDialog
|
||||
MapDialog,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
@ -621,13 +469,22 @@ export default {
|
|||
...dialogConfig, // 继承config.js的配置
|
||||
outerVisible: false, // 显式初始化弹窗显隐状态
|
||||
outerWidth: '50%',
|
||||
outerTitle: ''
|
||||
outerTitle: '',
|
||||
},
|
||||
// 搜索参数
|
||||
searchParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
keyWord: '',
|
||||
iotName: '',
|
||||
iotCode: '',
|
||||
typeId: '',
|
||||
typeName: '',
|
||||
maCode: '',
|
||||
proName: '',
|
||||
maStatus: '',
|
||||
iotStatus: '',
|
||||
bindStatus: '',
|
||||
iotManager: '',
|
||||
},
|
||||
// 列表数据
|
||||
projectList: [],
|
||||
|
|
@ -649,7 +506,7 @@ export default {
|
|||
address: '',
|
||||
iotManager: '',
|
||||
iotStatus: '1', // 初始离线
|
||||
remark: ''
|
||||
remark: '',
|
||||
},
|
||||
// 表单校验规则(匹配表单字段)
|
||||
addOrEditFormRules: {
|
||||
|
|
@ -661,28 +518,30 @@ export default {
|
|||
iotId: '', // 核心:存储绑定的设备ID
|
||||
typeName: '',
|
||||
maCode: '',
|
||||
maId:''
|
||||
maId: '',
|
||||
},
|
||||
// 绑定表单校验规则
|
||||
bindFormRules: {
|
||||
typeName: [{ required: true, message: '请输入装备名称', trigger: 'blur' }],
|
||||
maCode: [{ required: true, message: '请输入装备编码', trigger: 'blur' }],
|
||||
iotId: [{ required: true, message: '缺少设备ID', trigger: 'blur' }]
|
||||
iotId: [{ required: true, message: '缺少设备ID', trigger: 'blur' }],
|
||||
},
|
||||
// 临时变量(查看记录/二维码用)
|
||||
sendParams: {
|
||||
iotId: ''
|
||||
iotId: '',
|
||||
},
|
||||
// 修复2:补充模板中用到但缺失的变量
|
||||
deviceTypeList: [], // 设备类型列表(模板中el-select用到)
|
||||
addDeviceParams: { // 设备添加参数(模板中el-form用到)
|
||||
addDeviceParams: {
|
||||
// 设备添加参数(模板中el-form用到)
|
||||
iotType: '',
|
||||
iotCode: '',
|
||||
iotStatus: 0
|
||||
iotStatus: 0,
|
||||
},
|
||||
addDeviceRules: { // 设备添加表单校验(模板中el-form用到)
|
||||
addDeviceRules: {
|
||||
// 设备添加表单校验(模板中el-form用到)
|
||||
iotType: [{ required: true, message: '请选择设备类型', trigger: 'change' }],
|
||||
iotCode: [{ required: true, message: '请输入设备编号', trigger: 'blur' }]
|
||||
iotCode: [{ required: true, message: '请输入设备编号', trigger: 'blur' }],
|
||||
},
|
||||
// 其他变量
|
||||
qrCode: '',
|
||||
|
|
@ -699,21 +558,26 @@ export default {
|
|||
showSearch: true,
|
||||
// 表头字段
|
||||
columns: [
|
||||
{ key: 1, label: `定位设备名称`, prop: 'iotName', visible: true, },
|
||||
{ key: 2, label: `定位设备编码`, prop: 'iotCode', visible: true, },
|
||||
{ key: 3, label: `装备类目`, prop: 'type',width: 300, visible: true, },
|
||||
{ key: 4, label: `装备名称`, prop: 'typeName',width: 300, visible: true, },
|
||||
{ key: 5, label: `装备编码`, prop: 'maCode', visible: true, },
|
||||
{ key: 6, label: `使用项目`, prop: 'propertyUnit', visible: true, },
|
||||
{ key: 7, label: `装备状态`, prop: 'maStatus', visible: true, },
|
||||
{ key: 8, label: `设备状态`, prop: 'iotStatus', visible: true, },
|
||||
{ key: 9, label: `绑定状态`, prop: 'bindStatus', visible: true, },
|
||||
{ key: 10, label: `设备地图`, prop: 'address', visible: true, },
|
||||
{ key: 11, label: `设备负责人`, prop: 'iotManager', visible: true, },
|
||||
{ key: 12, label: `绑定时间`, prop: 'bindTime', visible: true, },
|
||||
{ key: 13, label: `解绑时间`, prop: 'unBindTime', visible: true, },
|
||||
{ key: 1, label: `定位设备名称`, prop: 'iotName', visible: true },
|
||||
{ key: 2, label: `定位设备编码`, prop: 'iotCode', visible: true },
|
||||
{ key: 3, label: `装备类目`, prop: 'type', width: 300, visible: true },
|
||||
{ key: 4, label: `装备名称`, prop: 'typeName', width: 300, visible: true },
|
||||
{ key: 5, label: `装备编码`, prop: 'maCode', visible: true },
|
||||
{ key: 6, label: `使用项目`, prop: 'proName', visible: true },
|
||||
{ key: 7, label: `装备状态`, prop: 'maStatus', visible: true },
|
||||
{ key: 8, label: `设备状态`, prop: 'iotStatus', visible: true },
|
||||
{ key: 9, label: `绑定状态`, prop: 'bindStatus', visible: true },
|
||||
{ key: 10, label: `设备地图`, prop: 'address', visible: true },
|
||||
{ key: 11, label: `设备负责人`, prop: 'iotManager', visible: true },
|
||||
{ key: 12, label: `绑定时间`, prop: 'bindTime', visible: true },
|
||||
{ key: 13, label: `解绑时间`, prop: 'unBindTime', visible: true },
|
||||
],
|
||||
statusList: [
|
||||
{ label: '在库', value: '1' },
|
||||
{ label: '自用', value: '2' },
|
||||
{ label: '共享', value: '3' },
|
||||
{ label: '维修', value: '5' },
|
||||
],
|
||||
|
||||
|
||||
// 新增:筛选表单数据
|
||||
searchForm: {
|
||||
|
|
@ -737,10 +601,12 @@ export default {
|
|||
{ label: '设备编码', prop: 'deviceCode', minWidth: 120 },
|
||||
{ label: '装备名称', prop: 'name', minWidth: 150 },
|
||||
{ label: '原始编码', prop: 'originalEncoding', minWidth: 120 },
|
||||
{ label: '装备状态', prop: 'maStatus', minWidth: 120,
|
||||
dictMap: { 1: '在库', 2: '自用', 3: '共享', 5: '维修' }
|
||||
{
|
||||
label: '装备状态',
|
||||
prop: 'maStatus',
|
||||
minWidth: 120,
|
||||
dictMap: { 1: '在库', 2: '自用', 3: '共享', 5: '维修' },
|
||||
},
|
||||
|
||||
],
|
||||
},
|
||||
ownOpen: false, // 自有装备弹窗
|
||||
|
|
@ -751,15 +617,15 @@ export default {
|
|||
created() {
|
||||
this.getDeviceList()
|
||||
//this.getDeviceTypeList()
|
||||
this.getCategoryList()
|
||||
},
|
||||
methods: {
|
||||
|
||||
async getCategoryList() {
|
||||
const res = await getCategoryList()
|
||||
if (res.code === 200) {
|
||||
this.categoryList = res.data.map(item => ({
|
||||
this.categoryList = res.data.map((item) => ({
|
||||
...item,
|
||||
uniqueKey: `${item.typeId}-${item.type}`
|
||||
uniqueKey: `${item.typeId}-${item.type}`,
|
||||
}))
|
||||
}
|
||||
},
|
||||
|
|
@ -841,7 +707,6 @@ export default {
|
|||
|
||||
/** 添加/编辑设备 */
|
||||
addDevice(row) {
|
||||
|
||||
this.getCategoryList()
|
||||
// 1. 先清空旧表单(放在最前)
|
||||
this.$refs.addOrEditFormRef?.resetFields()
|
||||
|
|
@ -854,7 +719,7 @@ export default {
|
|||
this.addOrEditForm = {
|
||||
...row,
|
||||
iotStatus: String(row.iotStatus), // 统一转字符串,避免类型问题
|
||||
bindStatus: String(row.bindStatus)
|
||||
bindStatus: String(row.bindStatus),
|
||||
}
|
||||
} else {
|
||||
this.isAdd = true
|
||||
|
|
@ -869,7 +734,7 @@ export default {
|
|||
address: '',
|
||||
iotManager: '', // 原代码写的iotPerson,和表单的iotManager不一致,修正!
|
||||
iotStatus: '1',
|
||||
remark: ''
|
||||
remark: '',
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -879,8 +744,8 @@ export default {
|
|||
|
||||
/** 绑定设备 */
|
||||
handleBind(row) {
|
||||
this.selectedRowId ='';
|
||||
this.getCategoryList();
|
||||
this.selectedRowId = ''
|
||||
this.getCategoryList()
|
||||
this.loadOwnEquipmentData()
|
||||
this.$refs.bindFormRef?.resetFields()
|
||||
this.bindForm = {
|
||||
|
|
@ -890,7 +755,7 @@ export default {
|
|||
maId: '',
|
||||
}
|
||||
this.bindDialogTitle = '设备绑定' // 用新的标题变量
|
||||
this.bindDialogVisible = true;
|
||||
this.bindDialogVisible = true
|
||||
},
|
||||
|
||||
/** 复选框选择事件 */
|
||||
|
|
@ -954,7 +819,7 @@ export default {
|
|||
address: '',
|
||||
iotManager: '',
|
||||
iotStatus: '1',
|
||||
remark: ''
|
||||
remark: '',
|
||||
}
|
||||
},
|
||||
|
||||
|
|
@ -972,7 +837,7 @@ export default {
|
|||
/** 查看记录(强化:确保弹窗参数正确) */
|
||||
handleViewRecord(id) {
|
||||
this.dialogConfig.outerWidth = '70%'
|
||||
this.dialogConfig.outerTitle = "绑定记录"
|
||||
this.dialogConfig.outerTitle = '绑定记录'
|
||||
this.sendParams.iotId = id
|
||||
this.dialogConfig.outerVisible = true // 强制设置为显示
|
||||
console.log('记录弹窗参数:', this.dialogConfig, this.sendParams) // 调试用
|
||||
|
|
@ -991,7 +856,8 @@ export default {
|
|||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}).then(async () => {
|
||||
})
|
||||
.then(async () => {
|
||||
try {
|
||||
if (type === 1) {
|
||||
const res = await deleteDeviceApi(row.iotId)
|
||||
|
|
@ -1010,7 +876,8 @@ export default {
|
|||
this.$message.error(`${title}失败`)
|
||||
console.error(`${title}失败:`, err)
|
||||
}
|
||||
}).catch(() => {
|
||||
})
|
||||
.catch(() => {
|
||||
this.$message.info('已取消操作')
|
||||
})
|
||||
},
|
||||
|
|
@ -1076,9 +943,7 @@ export default {
|
|||
this.formData.classificationForm.category = ''
|
||||
return
|
||||
}
|
||||
const selectedItem = this.categoryList.find(
|
||||
item => item.typeId === selectedTypeId
|
||||
)
|
||||
const selectedItem = this.categoryList.find((item) => item.typeId === selectedTypeId)
|
||||
if (selectedItem) {
|
||||
this.formData.classificationForm.matchingName = selectedItem.typeId
|
||||
this.formData.classificationForm.category = selectedItem.type
|
||||
|
|
@ -1094,7 +959,7 @@ export default {
|
|||
this.searchForm.own = {
|
||||
name: '',
|
||||
type: '',
|
||||
specificationModel: ''
|
||||
specificationModel: '',
|
||||
}
|
||||
this.tableData.own.pageNum = 1
|
||||
this.loadOwnEquipmentData()
|
||||
|
|
@ -1110,7 +975,7 @@ export default {
|
|||
|
||||
// 点击行选中单选框
|
||||
handleRowClick(row) {
|
||||
this.selectedRowId = row.id; // 替换为你行数据的唯一标识(如row.key)
|
||||
this.selectedRowId = row.id // 替换为你行数据的唯一标识(如row.key)
|
||||
|
||||
this.bindForm = {
|
||||
iotId: this.bindForm.iotId,
|
||||
|
|
@ -1135,7 +1000,7 @@ export default {
|
|||
const queryParams = {
|
||||
...this.searchForm.own,
|
||||
pageNum: tabConfig.pageNum,
|
||||
pageSize: tabConfig.pageSize
|
||||
pageSize: tabConfig.pageSize,
|
||||
}
|
||||
const res = await getEquipment(queryParams)
|
||||
tabConfig.list = res.rows || []
|
||||
|
|
@ -1148,9 +1013,8 @@ export default {
|
|||
} finally {
|
||||
tabConfig.loading = false
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
|
|
@ -1258,7 +1122,6 @@ export default {
|
|||
word-break: break-all;
|
||||
}
|
||||
|
||||
|
||||
/* 分页组件:固定右下 */
|
||||
.pagination-wrapper {
|
||||
margin-top: 12px;
|
||||
|
|
@ -1295,7 +1158,7 @@ export default {
|
|||
|
||||
/* 搜索区域收起/展开按钮 */
|
||||
.search-toggle-btn {
|
||||
color: #2CBAB2;
|
||||
color: #2cbab2;
|
||||
padding: 5px 10px;
|
||||
font-size: 16px;
|
||||
font-weight: 300;
|
||||
|
|
@ -1314,12 +1177,12 @@ export default {
|
|||
}
|
||||
|
||||
.el-button--text {
|
||||
color: #2CBAB2;
|
||||
color: #2cbab2;
|
||||
}
|
||||
|
||||
.el-button--primary {
|
||||
background-color: #2CBAB2;
|
||||
border-color: #2CBAB2;
|
||||
background-color: #2cbab2;
|
||||
border-color: #2cbab2;
|
||||
}
|
||||
|
||||
/* 隐藏el-radio的文本部分 */
|
||||
|
|
|
|||
Loading…
Reference in New Issue