|
@@ -104,7 +104,7 @@
|
|
|
{{ typeNameMap[scope.row.equipmentTypeId] || scope.row.equipmentTypeId || "-" }}
|
|
{{ typeNameMap[scope.row.equipmentTypeId] || scope.row.equipmentTypeId || "-" }}
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
- <el-table-column label="当前状态" align="center" width="110">
|
|
|
|
|
|
|
+ <el-table-column label="资产状态" align="center" width="110">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<el-tag :type="getStatusTagType(getRowStatus(scope.row.equipmentId))">
|
|
<el-tag :type="getStatusTagType(getRowStatus(scope.row.equipmentId))">
|
|
|
{{ getStatusText(getRowStatus(scope.row.equipmentId)) }}
|
|
{{ getStatusText(getRowStatus(scope.row.equipmentId)) }}
|
|
@@ -116,7 +116,7 @@
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<el-button link type="primary" icon="View" @click.stop="handleView(scope.row)">详情</el-button>
|
|
<el-button link type="primary" icon="View" @click.stop="handleView(scope.row)">详情</el-button>
|
|
|
<el-button link type="primary" icon="Edit" @click.stop="handleUpdate(scope.row)">修改</el-button>
|
|
<el-button link type="primary" icon="Edit" @click.stop="handleUpdate(scope.row)">修改</el-button>
|
|
|
- <el-button link type="warning" icon="Tools" @click.stop="openStatusDialog(scope.row)">状态维护</el-button>
|
|
|
|
|
|
|
+ <el-button link type="warning" icon="Tools" @click.stop="openStatusDialog(scope.row)">资产状态维护</el-button>
|
|
|
<el-button link type="success" icon="Aim" @click.stop="openTestDialog(scope.row)">测试验证</el-button>
|
|
<el-button link type="success" icon="Aim" @click.stop="openTestDialog(scope.row)">测试验证</el-button>
|
|
|
<el-button link type="danger" icon="Delete" @click.stop="handleDelete(scope.row)">删除</el-button>
|
|
<el-button link type="danger" icon="Delete" @click.stop="handleDelete(scope.row)">删除</el-button>
|
|
|
</template>
|
|
</template>
|
|
@@ -172,8 +172,8 @@
|
|
|
<div class="section-block">
|
|
<div class="section-block">
|
|
|
<div class="section-title">关联点位</div>
|
|
<div class="section-title">关联点位</div>
|
|
|
<el-table :data="selectedDetail.pointRelList || []" size="small" max-height="180">
|
|
<el-table :data="selectedDetail.pointRelList || []" size="small" max-height="180">
|
|
|
- <el-table-column label="监测点ID" prop="pointId" min-width="160" show-overflow-tooltip />
|
|
|
|
|
- <el-table-column label="设备ID" prop="equipmentId" min-width="160" show-overflow-tooltip />
|
|
|
|
|
|
|
+ <el-table-column label="监测点编码" prop="pointCode" min-width="160" show-overflow-tooltip />
|
|
|
|
|
+ <el-table-column label="监测点名称" prop="pointName" min-width="160" show-overflow-tooltip />
|
|
|
</el-table>
|
|
</el-table>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
@@ -210,14 +210,16 @@
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
|
<el-form-item label="设备类型" prop="equipmentTypeId">
|
|
<el-form-item label="设备类型" prop="equipmentTypeId">
|
|
|
- <el-select v-model="form.equipmentTypeId" placeholder="请选择设备类型" style="width: 100%">
|
|
|
|
|
- <el-option
|
|
|
|
|
- v-for="item in equipmentTypeOptions"
|
|
|
|
|
- :key="item.typeId"
|
|
|
|
|
- :label="item.typeName"
|
|
|
|
|
- :value="item.typeId"
|
|
|
|
|
- />
|
|
|
|
|
- </el-select>
|
|
|
|
|
|
|
+ <el-tree-select
|
|
|
|
|
+ v-model="form.equipmentTypeId"
|
|
|
|
|
+ :data="equipmentTypeTree"
|
|
|
|
|
+ node-key="typeId"
|
|
|
|
|
+ :props="{ label: 'typeName', children: 'children', disabled: 'disabled' }"
|
|
|
|
|
+ default-expand-all
|
|
|
|
|
+ :render-after-expand="false"
|
|
|
|
|
+ placeholder="请选择设备类型"
|
|
|
|
|
+ style="width: 100%"
|
|
|
|
|
+ />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
@@ -307,7 +309,7 @@
|
|
|
<el-form-item label="设备名称">
|
|
<el-form-item label="设备名称">
|
|
|
<span>{{ currentRow.equipmentName || "-" }}</span>
|
|
<span>{{ currentRow.equipmentName || "-" }}</span>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
- <el-form-item label="当前状态">
|
|
|
|
|
|
|
+ <el-form-item label="资产状态">
|
|
|
<el-select v-model="statusForm.currentStatus" style="width: 100%">
|
|
<el-select v-model="statusForm.currentStatus" style="width: 100%">
|
|
|
<el-option
|
|
<el-option
|
|
|
v-for="item in equipmentStatusOptions"
|
|
v-for="item in equipmentStatusOptions"
|
|
@@ -406,6 +408,68 @@ const typeNameMap = computed(() => {
|
|
|
}, {});
|
|
}, {});
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+// parentTypeId 为 0(或空)表示父类
|
|
|
|
|
+function isTopLevelType(item) {
|
|
|
|
|
+ const parentTypeId = item?.parentTypeId;
|
|
|
|
|
+ return parentTypeId === 0 || parentTypeId === "0" || parentTypeId === null || parentTypeId === undefined || parentTypeId === "";
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+const equipmentTypeTree = computed(() => {
|
|
|
|
|
+ const list = equipmentTypeOptions.value || [];
|
|
|
|
|
+ const entries = [];
|
|
|
|
|
+ // 同时按 typeId / id 建索引,兼容 parentTypeId 指向不同主键字段的情况
|
|
|
|
|
+ const nodeIndex = {};
|
|
|
|
|
+
|
|
|
|
|
+ list.forEach((item) => {
|
|
|
|
|
+ const node = {
|
|
|
|
|
+ typeId: item.typeId,
|
|
|
|
|
+ typeName: item.typeName,
|
|
|
|
|
+ disabled: isTopLevelType(item),
|
|
|
|
|
+ children: []
|
|
|
|
|
+ };
|
|
|
|
|
+ entries.push({ item, node });
|
|
|
|
|
+ [item.typeId, item.id].forEach((key) => {
|
|
|
|
|
+ if (key !== undefined && key !== null) {
|
|
|
|
|
+ nodeIndex[String(key)] = node;
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ const roots = [];
|
|
|
|
|
+ // 父节点不在返回列表中时兜底归类,避免子类型在下拉中丢失
|
|
|
|
|
+ const fallbackNode = { typeId: "__other__", typeName: "未分类", disabled: true, children: [] };
|
|
|
|
|
+
|
|
|
|
|
+ entries.forEach(({ item, node }) => {
|
|
|
|
|
+ if (isTopLevelType(item)) {
|
|
|
|
|
+ roots.push(node);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ const parent = nodeIndex[String(item.parentTypeId)];
|
|
|
|
|
+ if (parent && parent !== node) {
|
|
|
|
|
+ parent.children.push(node);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ fallbackNode.children.push(node);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ // 带子级的节点(即父类)统一禁选,叶子节点可选;空 children 去掉渲染为叶子
|
|
|
|
|
+ const prune = (node) => {
|
|
|
|
|
+ if (node.children && node.children.length) {
|
|
|
|
|
+ node.disabled = true;
|
|
|
|
|
+ node.children.forEach(prune);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ delete node.children;
|
|
|
|
|
+ }
|
|
|
|
|
+ return node;
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ const result = roots.map(prune);
|
|
|
|
|
+ if (fallbackNode.children.length) {
|
|
|
|
|
+ result.push(prune(fallbackNode));
|
|
|
|
|
+ }
|
|
|
|
|
+ return result;
|
|
|
|
|
+});
|
|
|
|
|
+
|
|
|
const statusMap = computed(() => {
|
|
const statusMap = computed(() => {
|
|
|
return equipmentStatusList.value.reduce((acc, item) => {
|
|
return equipmentStatusList.value.reduce((acc, item) => {
|
|
|
acc[item.equipmentId] = item;
|
|
acc[item.equipmentId] = item;
|