Merge branch 'anhui-mall-ui-test' of http://192.168.30.2:3000/bonus/bonus-ui into anhui-mall-ui-test

This commit is contained in:
zzyuan 2026-01-28 14:41:36 +08:00
commit dafa5b03a0
2 changed files with 304 additions and 438 deletions

View File

@ -138,14 +138,14 @@
<div class="status-operation-bar" style="margin-top: 15px;margin-bottom: 2px;"> <div class="status-operation-bar" style="margin-top: 15px;margin-bottom: 2px;">
<el-form <el-form
ref="queryForm" ref="queryForm"
label-width="110px" label-width="120px"
v-show="showSearch" v-show="showSearch"
:model="queryParams" :model="queryParams"
:rules="queryRules" :rules="queryRules"
style="margin-top: 10px;width: 100%;" style="margin-top: 10px;width: 100%;"
> >
<!-- 始终显示的查询条件 --> <!-- 始终显示的查询条件 -->
<el-row :gutter="15"> <el-row :gutter="20">
<!-- <el-col :span="6"> <!-- <el-col :span="6">
<el-form-item label="所属省份" prop="province"> <el-form-item label="所属省份" prop="province">
<el-select <el-select
@ -230,6 +230,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="装备编码" prop="code"> <el-form-item label="装备编码" prop="code">
<el-input v-model="queryParams.code" placeholder="请输入装备编码" clearable/> <el-input v-model="queryParams.code" placeholder="请输入装备编码" clearable/>
@ -265,6 +266,8 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="资产原值(万元)" prop="originalValue"> <el-form-item label="资产原值(万元)" prop="originalValue">
<el-input-number <el-input-number
@ -273,7 +276,7 @@
clearable clearable
:controls="false" :controls="false"
:min="0" :min="0"
style="width: 150px" style="width: 100%"
/> />
<span> - </span> <span> - </span>
<el-input-number <el-input-number
@ -282,7 +285,7 @@
clearable clearable
:controls="false" :controls="false"
:min="0" :min="0"
style="width: 150px" style="width: 100%"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>

View File

@ -2,94 +2,135 @@
<div class="app-container"> <div class="app-container">
<!-- 简化版搜索表单 --> <!-- 简化版搜索表单 -->
<div class="search-wrapper"> <div class="search-wrapper">
<el-form <el-form label-width="130px" ref="searchFormRef" :model="searchParams" v-show="showSearch">
:inline="true" <el-row :gutter="20">
label-width="130px" <el-col :span="8">
label-position="right" <el-form-item prop="iotName" label="定位设备名称:">
ref="searchFormRef" <el-input clearable placeholder="请输入定位设备名称" v-model="searchParams.iotName" style="width: 100%" />
:model="searchParams" </el-form-item>
class="search-form" </el-col>
v-show="showSearch" <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-option
<el-input v-for="(item, index) in categoryList"
clearable :key="index"
placeholder="请输入定位设备名称" :label="item.equipmentName"
v-model="searchParams.keyWord" :value="item.typeId"
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-select>
</el-form-item> </el-form-item>
</el-col>
</el-row>
<div v-if="searchExpanded"> <div v-if="searchExpanded">
<el-form-item prop="keyWord" label="装备编码:"> <el-row :gutter="20">
<el-input <el-col :span="8">
clearable <el-form-item prop="typeName" label="装备名称:">
placeholder="请输入装备编码" <el-input clearable placeholder="请输入装备名称" v-model="searchParams.typeName" style="width: 100%" />
v-model="searchParams.keyWord"
style="width: 200px"
/>
</el-form-item> </el-form-item>
</el-col>
<el-form-item prop="keyWord" label="装备状态:"> <el-col :span="8">
<el-input <el-form-item prop="maCode" label="装备编码:">
clearable <el-input clearable placeholder="请输入装备编码" v-model="searchParams.maCode" style="width: 100%" />
placeholder="请输入装备状态"
v-model="searchParams.keyWord"
style="width: 200px"
/>
</el-form-item> </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> </div>
</el-form> </el-form>
</div> </div>
<!-- 状态统计和操作按钮 - 固定定位 --> <!-- 状态统计和操作按钮 - 固定定位 -->
<div class="status-operation-bar sticky-bar"> <div class="status-operation-bar sticky-bar">
<div class="operation-buttons"> <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> <i :class="searchExpanded ? 'el-icon-up' : 'el-icon-down'"></i>
{{ searchExpanded ? '收起' : '展开' }} {{ searchExpanded ? '收起' : '展开' }}
</el-button> </el-button>
<el-button @click="handleQuery" icon="el-icon-search" type="primary" style="float: right" > <el-button @click="handleQuery" icon="el-icon-search" type="primary" style="float: right"> 查询 </el-button>
查询
</el-button>
<el-button @click="onReset" icon="el-icon-refresh" style="margin-left: 8px;float: right">重置</el-button>
<el-button @click="onReset" icon="el-icon-refresh" style="margin-left: 8px; float: right">重置</el-button>
</div> </div>
</div> </div>
<!-- 数据列表 --> <!-- 数据列表 -->
<div class="table-wrapper"> <div class="table-wrapper">
<div class="table-header"> <div class="table-header">
<el-button @click="addDevice(null)" type="primary" style="float: right;margin-right: 10px;"> <el-button @click="addDevice(null)" type="primary" style="float: right; margin-right: 10px"> 新增 </el-button>
新增
</el-button>
<right-toolbar <right-toolbar :showSearch.sync="showSearch" @queryTable="getDeviceList" :columns="columns"></right-toolbar>
:showSearch.sync="showSearch"
@queryTable="getDeviceList"
:columns="columns"
></right-toolbar>
</div> </div>
<!-- 表格容器限制高度 + 隐藏滚动条 --> <!-- 表格容器限制高度 + 隐藏滚动条 -->
@ -104,10 +145,8 @@
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
height="100%" height="100%"
> >
<!--复选列-->
<!-- <el-table-column type="selection" width="50" align="center"/>-->
<!--序号列--> <!--序号列-->
<el-table-column align="center" label="序号" type="index" width="60"/> <el-table-column align="center" label="序号" type="index" width="60" />
<el-table-column <el-table-column
v-for="(item, index) in columns" v-for="(item, index) in columns"
@ -137,125 +176,33 @@
</template> </template>
</el-table-column> </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"> <el-table-column align="center" label="操作" width="250">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<el-button <el-button type="text" icon="el-icon-tickets" @click="handleViewRecord(row.iotId)">记录</el-button>
type="text"
icon="el-icon-tickets"
@click="handleViewRecord(row.iotId)"
>记录</el-button>
<el-button <el-button
type="text" type="text"
icon="el-icon-delete" icon="el-icon-delete"
style="color: #f56c6c" style="color: #f56c6c"
@click="handleDeleteAndUnbind(row, 1)" @click="handleDeleteAndUnbind(row, 1)"
v-if="row.bindStatus === 1" v-if="row.bindStatus === 1"
>删除</el-button> >删除</el-button
>
<el-button <el-button
type="text" type="text"
icon="el-icon-edit" icon="el-icon-edit"
style="color: #67c23a" style="color: #67c23a"
@click="addDevice(row)" @click="addDevice(row)"
v-if="row.bindStatus === 1" v-if="row.bindStatus === 1"
>修改</el-button> >修改</el-button
>
<el-button <el-button
type="text" type="text"
icon="el-icon-document-delete" icon="el-icon-document-delete"
style="color: #e6a23c" style="color: #e6a23c"
@click="handleDeleteAndUnbind(row, 2)" @click="handleDeleteAndUnbind(row, 2)"
v-if="row.bindStatus === 0" v-if="row.bindStatus === 0"
>解绑</el-button> >解绑</el-button
>
<!-- 仅修改这行传参改为row其余样式/图标/颜色完全保留 --> <!-- 仅修改这行传参改为row其余样式/图标/颜色完全保留 -->
<el-button <el-button
type="text" type="text"
@ -263,7 +210,8 @@
style="color: #e6a23c" style="color: #e6a23c"
@click="handleBind(row)" @click="handleBind(row)"
v-if="row.bindStatus === 1" v-if="row.bindStatus === 1"
>绑定</el-button> >绑定</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -299,18 +247,15 @@
:rules="addOrEditFormRules" :rules="addOrEditFormRules"
> >
<el-form-item label="定位设备名称:" prop="iotName"> <el-form-item label="定位设备名称:" prop="iotName">
<el-input v-model="addOrEditForm.iotName" placeholder="输入内容" maxlength="50" show-word-limit/> <el-input v-model="addOrEditForm.iotName" placeholder="输入内容" maxlength="50" show-word-limit />
</el-form-item> </el-form-item>
<el-form-item label="定位设备编码:" prop="iotCode"> <el-form-item label="定位设备编码:" prop="iotCode">
<el-input v-model="addOrEditForm.iotCode" placeholder="输入内容" maxlength="50" show-word-limit/> <el-input v-model="addOrEditForm.iotCode" placeholder="输入内容" maxlength="50" show-word-limit />
</el-form-item> </el-form-item>
<el-form-item label="定位设备负责人:" prop="iotManager"> <el-form-item label="定位设备负责人:" prop="iotManager">
<el-input v-model="addOrEditForm.iotManager" placeholder="输入内容" maxlength="50" show-word-limit/> <el-input v-model="addOrEditForm.iotManager" placeholder="输入内容" maxlength="50" show-word-limit />
</el-form-item> </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-form-item label="定位设备状态:">
<el-switch <el-switch
size="large" size="large"
@ -321,19 +266,16 @@
inactive-value="1" inactive-value="1"
/> />
</el-form-item> </el-form-item>
<!-- &lt;!&ndash; 绑定状态开关 &ndash;&gt;-->
<!-- <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-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-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
@ -344,44 +286,6 @@
</div> </div>
</el-dialog> </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"
>
&lt;!&ndash; 新增隐藏存储iotId无样式修改 &ndash;&gt;
<el-form-item prop="iotId" style="display: none;">
<el-input v-model="bindForm.iotId"/>
</el-form-item>
&lt;!&ndash; 仅修改prop为typeNamelabel/样式完全保留 &ndash;&gt;
<el-form-item label="装备名称:" prop="typeName">
<el-input v-model="bindForm.typeName" placeholder="输入内容" maxlength="50" show-word-limit/>
</el-form-item>
&lt;!&ndash; 仅修改prop为typeCodelabel/样式完全保留 &ndash;&gt;
<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">
&lt;!&ndash; 仅修改这行取消按钮关闭绑定弹窗其余完全保留 &ndash;&gt;
<el-button @click="bindDialogVisible = false">取消</el-button>
<el-button type="primary" @click="bindSubmit" :loading="submitLoading">
绑定
</el-button>
</div>
</el-dialog>-->
<el-dialog <el-dialog
title="设备绑定" title="设备绑定"
@close="handleBindDialogClose" @close="handleBindDialogClose"
@ -394,36 +298,29 @@
<div class="instance-dialog-container"> <div class="instance-dialog-container">
<!-- 筛选条件 --> <!-- 筛选条件 -->
<div class="search-form"> <div class="search-form">
<el-form :inline="true" :model="searchForm" class="demo-form-inline"> <el-form :inline="true" :model="searchForm" class="demo-form-inline">
<el-form-item label="装备名称"> <el-form-item label="装备名称">
<el-input <el-input v-model="searchForm.equipmentName" placeholder="请输入装备名称" clearable size="small" />
v-model="searchForm.equipmentName"
placeholder="请输入装备名称"
clearable
size="small"
/>
</el-form-item> </el-form-item>
<el-form-item label="装备分类"> <el-form-item label="装备分类">
<el-select v-model="searchForm.type" placeholder="请选择分类" <el-select
style="width: 100%;" v-model="searchForm.typeId"
clearable filterable @change="handleCategoryChange" placeholder="请选择分类"
style="width: 100%"
clearable
filterable
@change="handleCategoryChange"
> >
<el-option <el-option
v-for="item in categoryList" v-for="item in categoryList"
:key="item.uniqueKey" :key="item.uniqueKey"
:label="`${item.equipmentName}(${item.devType})`" :label="`${item.equipmentName}(${item.devType})`"
:value="item.equipmentName" :value="item.typeId"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="规格型号"> <el-form-item label="原始编码">
<el-input <el-input v-model="searchForm.originalEncoding" placeholder="请输入原始编码" clearable size="small" />
v-model="searchForm.specModel"
placeholder="请输入规格型号"
clearable
size="small"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" size="small" @click="handleOwnSearch">查询</el-button> <el-button type="primary" size="small" @click="handleOwnSearch">查询</el-button>
@ -443,13 +340,9 @@
:highlight-current-row="true" :highlight-current-row="true"
> >
<el-table-column width="55" align="center"> <el-table-column width="55" align="center">
<template slot-scope="scope"> <!-- Element UI slot-scope 而非 v-slot --> <template slot-scope="scope">
<el-radio <!-- Element UI slot-scope 而非 v-slot -->
v-model="selectedRowId" <el-radio v-model="selectedRowId" :label="scope.row.id" size="small" class="radio-no-text" />
:label="scope.row.id"
size="small"
class="radio-no-text"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -475,7 +368,7 @@
:page-size="tableData.own.pageSize" :page-size="tableData.own.pageSize"
layout="total, sizes, prev, pager, next, jumper" layout="total, sizes, prev, pager, next, jumper"
:total="tableData.own.total" :total="tableData.own.total"
style="margin-top: 15px; text-align: right;" style="margin-top: 15px; text-align: right"
> >
</el-pagination> </el-pagination>
</div> </div>
@ -483,39 +376,19 @@
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button @click="ownOpen = false">取消</el-button> <el-button @click="ownOpen = false">取消</el-button>
<el-button <el-button type="primary" @click="handleOwnConfirm" :disabled="!selectedRowId"> 确认选择 </el-button>
type="primary"
@click="handleOwnConfirm"
:disabled="!selectedRowId"
>
确认选择
</el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<!-- 弹框 --> <!-- 弹框 -->
<DialogModel <DialogModel :dialogConfig="dialogConfig" @closeDialogOuter="closeDialogOuter">
:dialogConfig="dialogConfig"
@closeDialogOuter="closeDialogOuter"
>
<!-- 设备添加表单 --> <!-- 设备添加表单 -->
<template slot="outerContent"> <template slot="outerContent">
<template v-if="dialogConfig.outerTitle !== '绑定记录'"> <template v-if="dialogConfig.outerTitle !== '绑定记录'">
<el-form <el-form label-width="80px" :model="addDeviceParams" :rules="addDeviceRules" ref="addDeviceParamsRef">
label-width="80px"
:model="addDeviceParams"
:rules="addDeviceRules"
ref="addDeviceParamsRef"
>
<el-form-item label="设备类型" prop="iotType"> <el-form-item label="设备类型" prop="iotType">
<el-select <el-select style="width: 100%" placeholder="请选择设备类型" clearable v-model="addDeviceParams.iotType">
style="width: 100%"
placeholder="请选择设备类型"
clearable
v-model="addDeviceParams.iotType"
>
<el-option <el-option
v-for="item in deviceTypeList" v-for="item in deviceTypeList"
:key="item.iotTypeId" :key="item.iotTypeId"
@ -525,18 +398,10 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="设备编号" prop="iotCode"> <el-form-item label="设备编号" prop="iotCode">
<el-input <el-input placeholder="请输入设备编号" clearable v-model="addDeviceParams.iotCode" />
placeholder="请输入设备编号"
clearable
v-model="addDeviceParams.iotCode"
/>
</el-form-item> </el-form-item>
<el-form-item <el-form-item label="设备状态: " prop="iotStatus" v-if="dialogConfig.outerTitle === '修改设备'">
label="设备状态: "
prop="iotStatus"
v-if="dialogConfig.outerTitle === '修改设备'"
>
<el-switch <el-switch
v-model="addDeviceParams.iotStatus" v-model="addDeviceParams.iotStatus"
active-text="在线" active-text="在线"
@ -548,30 +413,14 @@
</el-form> </el-form>
<el-row style="margin-top: 20px; text-align: right"> <el-row style="margin-top: 20px; text-align: right">
<el-button <el-button size="mini" type="primary" @click="handleSubmit()"> </el-button>
size="mini" <el-button size="mini" type="warning" @click="handleCancel()"> </el-button>
type="primary"
@click="handleSubmit()"
> </el-button
>
<el-button
size="mini"
type="warning"
@click="handleCancel()"
> </el-button
>
</el-row> </el-row>
</template> </template>
<TableModel <TableModel :config="dialogConfig" :sendParams="sendParams" :sendApi="getDeviceBindRecordApi" v-else />
:config="dialogConfig"
:sendParams="sendParams"
:sendApi="getDeviceBindRecordApi"
v-else
/>
</template> </template>
</DialogModel> </DialogModel>
<MapDialog <MapDialog
v-if="mapDialogVisible" v-if="mapDialogVisible"
:deviceName="deviceName" :deviceName="deviceName"
@ -590,12 +439,11 @@ import {
unbindDeviceApi, unbindDeviceApi,
getDeviceBindRecordApi, getDeviceBindRecordApi,
getDeviceBindDetailsApi, getDeviceBindDetailsApi,
addOrUpdate, addOrUpdate,
getIotList, getIotList,
unbindIot, unbindIot,
getCategoryList, getCategoryList,
getEquipment getEquipment,
} from '@/api/iotDevice' } from '@/api/iotDevice'
import { dialogConfig } from './config' import { dialogConfig } from './config'
import DialogModel from '@/components/DialogModel' // import DialogModel from '@/components/DialogModel' //
@ -611,7 +459,7 @@ export default {
components: { components: {
DialogModel, DialogModel,
TableModel, TableModel,
MapDialog MapDialog,
}, },
data() { data() {
return { return {
@ -621,13 +469,22 @@ export default {
...dialogConfig, // config.js ...dialogConfig, // config.js
outerVisible: false, // outerVisible: false, //
outerWidth: '50%', outerWidth: '50%',
outerTitle: '' outerTitle: '',
}, },
// //
searchParams: { searchParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
keyWord: '', iotName: '',
iotCode: '',
typeId: '',
typeName: '',
maCode: '',
proName: '',
maStatus: '',
iotStatus: '',
bindStatus: '',
iotManager: '',
}, },
// //
projectList: [], projectList: [],
@ -638,7 +495,7 @@ export default {
addOrEditDialogVisible: false, addOrEditDialogVisible: false,
bindDialogVisible: false, bindDialogVisible: false,
dialogTitle: '', dialogTitle: '',
bindDialogTitle:'', bindDialogTitle: '',
isAdd: true, isAdd: true,
submitLoading: false, submitLoading: false,
// //
@ -649,7 +506,7 @@ export default {
address: '', address: '',
iotManager: '', iotManager: '',
iotStatus: '1', // 线 iotStatus: '1', // 线
remark: '' remark: '',
}, },
// //
addOrEditFormRules: { addOrEditFormRules: {
@ -658,31 +515,33 @@ export default {
}, },
// //
bindForm: { bindForm: {
iotId:'', // ID iotId: '', // ID
typeName:'', typeName: '',
maCode: '', maCode: '',
maId:'' maId: '',
}, },
// //
bindFormRules: { bindFormRules: {
typeName: [{ required: true, message: '请输入装备名称', trigger: 'blur' }], typeName: [{ required: true, message: '请输入装备名称', trigger: 'blur' }],
maCode: [{ 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: { sendParams: {
iotId: '' iotId: '',
}, },
// 2 // 2
deviceTypeList: [], // el-select deviceTypeList: [], // el-select
addDeviceParams: { // el-form addDeviceParams: {
// el-form
iotType: '', iotType: '',
iotCode: '', iotCode: '',
iotStatus: 0 iotStatus: 0,
}, },
addDeviceRules: { // el-form addDeviceRules: {
// el-form
iotType: [{ required: true, message: '请选择设备类型', trigger: 'change' }], iotType: [{ required: true, message: '请选择设备类型', trigger: 'change' }],
iotCode: [{ required: true, message: '请输入设备编号', trigger: 'blur' }] iotCode: [{ required: true, message: '请输入设备编号', trigger: 'blur' }],
}, },
// //
qrCode: '', qrCode: '',
@ -698,29 +557,34 @@ export default {
searchExpanded: false, searchExpanded: false,
showSearch: true, showSearch: true,
// //
columns:[ columns: [
{ key: 1, label: `定位设备名称`, prop: 'iotName', visible: true, }, { key: 1, label: `定位设备名称`, prop: 'iotName', visible: true },
{ key: 2, label: `定位设备编码`, prop: 'iotCode', visible: true, }, { key: 2, label: `定位设备编码`, prop: 'iotCode', visible: true },
{ key: 3, label: `装备类目`, prop: 'type',width: 300, visible: true, }, { key: 3, label: `装备类目`, prop: 'type', width: 300, visible: true },
{ key: 4, label: `装备名称`, prop: 'typeName',width: 300, visible: true, }, { key: 4, label: `装备名称`, prop: 'typeName', width: 300, visible: true },
{ key: 5, label: `装备编码`, prop: 'maCode', visible: true, }, { key: 5, label: `装备编码`, prop: 'maCode', visible: true },
{ key: 6, label: `使用项目`, prop: 'propertyUnit', visible: true, }, { key: 6, label: `使用项目`, prop: 'proName', visible: true },
{ key: 7, label: `装备状态`, prop: 'maStatus', visible: true, }, { key: 7, label: `装备状态`, prop: 'maStatus', visible: true },
{ key: 8, label: `设备状态`, prop: 'iotStatus', visible: true, }, { key: 8, label: `设备状态`, prop: 'iotStatus', visible: true },
{ key: 9, label: `绑定状态`, prop: 'bindStatus', visible: true, }, { key: 9, label: `绑定状态`, prop: 'bindStatus', visible: true },
{ key: 10, label: `设备地图`, prop: 'address', visible: true, }, { key: 10, label: `设备地图`, prop: 'address', visible: true },
{ key: 11, label: `设备负责人`, prop: 'iotManager', visible: true, }, { key: 11, label: `设备负责人`, prop: 'iotManager', visible: true },
{ key: 12, label: `绑定时间`, prop: 'bindTime', visible: true, }, { key: 12, label: `绑定时间`, prop: 'bindTime', visible: true },
{ key: 13, label: `解绑时间`, prop: 'unBindTime', visible: true, }, { key: 13, label: `解绑时间`, prop: 'unBindTime', visible: true },
],
statusList: [
{ label: '在库', value: '1' },
{ label: '自用', value: '2' },
{ label: '共享', value: '3' },
{ label: '维修', value: '5' },
], ],
// //
searchForm: { searchForm: {
equipmentName: '', equipmentName: '',
equipmentType: '', equipmentType: '',
specModel: '', specModel: '',
type: '', typeId: '',
}, },
categoryList: [], categoryList: [],
@ -737,10 +601,12 @@ export default {
{ label: '设备编码', prop: 'deviceCode', minWidth: 120 }, { label: '设备编码', prop: 'deviceCode', minWidth: 120 },
{ label: '装备名称', prop: 'name', minWidth: 150 }, { label: '装备名称', prop: 'name', minWidth: 150 },
{ label: '原始编码', prop: 'originalEncoding', minWidth: 120 }, { 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, // ownOpen: false, //
@ -751,20 +617,20 @@ export default {
created() { created() {
this.getDeviceList() this.getDeviceList()
//this.getDeviceTypeList() //this.getDeviceTypeList()
this.getCategoryList()
}, },
methods: { methods: {
async getCategoryList() { async getCategoryList() {
const res = await getCategoryList() const res = await getCategoryList()
if (res.code === 200) { if (res.code === 200) {
this.categoryList = res.data.map(item => ({ this.categoryList = res.data.map((item) => ({
...item, ...item,
uniqueKey: `${item.typeId}-${item.type}` uniqueKey: `${item.typeId}-${item.type}`,
})) }))
} }
}, },
/* async getEquipment(){ /* async getEquipment(){
const res = await getEquipment() const res = await getEquipment()
if (res.code === 200) { if (res.code === 200) {
this.tableData.own.list = res.rows this.tableData.own.list = res.rows
@ -841,7 +707,6 @@ export default {
/** 添加/编辑设备 */ /** 添加/编辑设备 */
addDevice(row) { addDevice(row) {
this.getCategoryList() this.getCategoryList()
// 1. // 1.
this.$refs.addOrEditFormRef?.resetFields() this.$refs.addOrEditFormRef?.resetFields()
@ -854,7 +719,7 @@ export default {
this.addOrEditForm = { this.addOrEditForm = {
...row, ...row,
iotStatus: String(row.iotStatus), // iotStatus: String(row.iotStatus), //
bindStatus: String(row.bindStatus) bindStatus: String(row.bindStatus),
} }
} else { } else {
this.isAdd = true this.isAdd = true
@ -869,7 +734,7 @@ export default {
address: '', address: '',
iotManager: '', // iotPersoniotManager iotManager: '', // iotPersoniotManager
iotStatus: '1', iotStatus: '1',
remark: '' remark: '',
} }
} }
@ -878,9 +743,9 @@ export default {
}, },
/** 绑定设备 */ /** 绑定设备 */
handleBind(row){ handleBind(row) {
this.selectedRowId =''; this.selectedRowId = ''
this.getCategoryList(); this.getCategoryList()
this.loadOwnEquipmentData() this.loadOwnEquipmentData()
this.$refs.bindFormRef?.resetFields() this.$refs.bindFormRef?.resetFields()
this.bindForm = { this.bindForm = {
@ -890,7 +755,7 @@ export default {
maId: '', maId: '',
} }
this.bindDialogTitle = '设备绑定' // this.bindDialogTitle = '设备绑定' //
this.bindDialogVisible = true; this.bindDialogVisible = true
}, },
/** 复选框选择事件 */ /** 复选框选择事件 */
@ -954,7 +819,7 @@ export default {
address: '', address: '',
iotManager: '', iotManager: '',
iotStatus: '1', iotStatus: '1',
remark: '' remark: '',
} }
}, },
@ -962,8 +827,8 @@ export default {
handleBindDialogClose() { handleBindDialogClose() {
this.$refs.bindFormRef?.resetFields() this.$refs.bindFormRef?.resetFields()
this.bindForm = { this.bindForm = {
iotId:'', iotId: '',
typeName:'', typeName: '',
maCode: '', maCode: '',
maId: '', maId: '',
} }
@ -972,7 +837,7 @@ export default {
/** 查看记录(强化:确保弹窗参数正确) */ /** 查看记录(强化:确保弹窗参数正确) */
handleViewRecord(id) { handleViewRecord(id) {
this.dialogConfig.outerWidth = '70%' this.dialogConfig.outerWidth = '70%'
this.dialogConfig.outerTitle = "绑定记录" this.dialogConfig.outerTitle = '绑定记录'
this.sendParams.iotId = id this.sendParams.iotId = id
this.dialogConfig.outerVisible = true // this.dialogConfig.outerVisible = true //
console.log('记录弹窗参数:', this.dialogConfig, this.sendParams) // console.log('记录弹窗参数:', this.dialogConfig, this.sendParams) //
@ -991,7 +856,8 @@ export default {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning', type: 'warning',
}).then(async () => { })
.then(async () => {
try { try {
if (type === 1) { if (type === 1) {
const res = await deleteDeviceApi(row.iotId) const res = await deleteDeviceApi(row.iotId)
@ -1010,7 +876,8 @@ export default {
this.$message.error(`${title}失败`) this.$message.error(`${title}失败`)
console.error(`${title}失败:`, err) console.error(`${title}失败:`, err)
} }
}).catch(() => { })
.catch(() => {
this.$message.info('已取消操作') this.$message.info('已取消操作')
}) })
}, },
@ -1076,9 +943,7 @@ export default {
this.formData.classificationForm.category = '' this.formData.classificationForm.category = ''
return return
} }
const selectedItem = this.categoryList.find( const selectedItem = this.categoryList.find((item) => item.typeId === selectedTypeId)
item => item.typeId === selectedTypeId
)
if (selectedItem) { if (selectedItem) {
this.formData.classificationForm.matchingName = selectedItem.typeId this.formData.classificationForm.matchingName = selectedItem.typeId
this.formData.classificationForm.category = selectedItem.type this.formData.classificationForm.category = selectedItem.type
@ -1094,7 +959,7 @@ export default {
this.searchForm.own = { this.searchForm.own = {
name: '', name: '',
type: '', type: '',
specificationModel: '' specificationModel: '',
} }
this.tableData.own.pageNum = 1 this.tableData.own.pageNum = 1
this.loadOwnEquipmentData() this.loadOwnEquipmentData()
@ -1110,7 +975,7 @@ export default {
// //
handleRowClick(row) { handleRowClick(row) {
this.selectedRowId = row.id; // row.key this.selectedRowId = row.id // row.key
this.bindForm = { this.bindForm = {
iotId: this.bindForm.iotId, iotId: this.bindForm.iotId,
@ -1133,9 +998,9 @@ export default {
tabConfig.loading = true tabConfig.loading = true
try { try {
const queryParams = { const queryParams = {
...this.searchForm.own, ...this.searchForm,
pageNum: tabConfig.pageNum, pageNum: tabConfig.pageNum,
pageSize: tabConfig.pageSize pageSize: tabConfig.pageSize,
} }
const res = await getEquipment(queryParams) const res = await getEquipment(queryParams)
tabConfig.list = res.rows || [] tabConfig.list = res.rows || []
@ -1148,9 +1013,8 @@ export default {
} finally { } finally {
tabConfig.loading = false tabConfig.loading = false
} }
} },
},
}
} }
</script> </script>
@ -1258,7 +1122,6 @@ export default {
word-break: break-all; word-break: break-all;
} }
/* 分页组件:固定右下 */ /* 分页组件:固定右下 */
.pagination-wrapper { .pagination-wrapper {
margin-top: 12px; margin-top: 12px;
@ -1295,7 +1158,7 @@ export default {
/* 搜索区域收起/展开按钮 */ /* 搜索区域收起/展开按钮 */
.search-toggle-btn { .search-toggle-btn {
color: #2CBAB2; color: #2cbab2;
padding: 5px 10px; padding: 5px 10px;
font-size: 16px; font-size: 16px;
font-weight: 300; font-weight: 300;
@ -1314,12 +1177,12 @@ export default {
} }
.el-button--text { .el-button--text {
color: #2CBAB2; color: #2cbab2;
} }
.el-button--primary { .el-button--primary {
background-color: #2CBAB2; background-color: #2cbab2;
border-color: #2CBAB2; border-color: #2cbab2;
} }
/* 隐藏el-radio的文本部分 */ /* 隐藏el-radio的文本部分 */
@ -1332,11 +1195,11 @@ export default {
display: block; display: block;
} }
.el-radio__input.is-checked+.el-radio__label{ .el-radio__input.is-checked + .el-radio__label {
display: none; display: none;
} }
::v-deep .el-radio__label{ ::v-deep .el-radio__label {
display: none; display: none;
} }
</style> </style>