ソースを参照

设备管理统一管理

zengy 4 週間 前
親
コミット
b8a8cd808c

+ 1 - 1
src/api/pipeNetwork/basic.js

@@ -310,7 +310,7 @@ export function getEquipmentById(id) {
   return request({ url: '/equipment-base/' + id, method: 'get' })
 }
 export function getEquipmentTypeList() {
-  return request({ url: '/EquipmentType/getList', method: 'get' })
+  return request({ url: '/equipmentType', method: 'get' })
 }
 export function getEquipmentByTopLevelType(typeName) {
   return request({ url: '/equipment-base/top-level-type', method: 'get', params: { typeName } })

+ 2 - 10
src/api/pipeNetwork/pdeviceInform.js

@@ -191,17 +191,9 @@ export function updateEquipmentStatus(equipmentId, currentStatus) {
   });
 }
 
-export function listEquipmentStatusAll(rootTypeId) {
-  return request({
-    url: "/equipment-status/all",
-    method: "get",
-    params: { rootTypeId }
-  });
-}
-
 export function getEquipmentStatusStatistics(rootTypeId) {
   return request({
-    url: "/equipment-status/statistics",
+    url: "/equipment-base/statistics",
     method: "get",
     params: { rootTypeId }
   });
@@ -210,7 +202,7 @@ export function getEquipmentStatusStatistics(rootTypeId) {
 // 基础辅助数据
 export function listEquipmentTypeAll(rootTypeId) {
   return request({
-    url: "/EquipmentType/getList",
+    url: "/equipmentType",
     method: "get",
     params: { rootTypeId }
   });

+ 7 - 1
src/views/subSystem/manholeCover/home/index.vue

@@ -126,6 +126,12 @@ let alarmChart = null, areaChart = null, deviceTypeChart = null
 
 // ==================== 常量映射 ====================
 const TYPE_MAP = { '5': '供水窨井', '9': '排水窨井', '10': '燃气窨井' }
+
+// 所属片区:后端 DistrictEnum(0-城南 1-城北 2-太常)
+const DISTRICT_MAP = { 0: '城南', 1: '城北', 2: '太常' }
+function districtLabel(code) {
+  return code == null ? '' : (DISTRICT_MAP[code] || String(code))
+}
 const tableHeaderStyle = { background: 'rgba(0,100,200,0.3)', color: '#fff', borderColor: '#2b4b8c' }
 
 const priorityText = (l) => ({ 0: '紧急', 1: '一般', 2: '低' }[l] || '-')
@@ -174,7 +180,7 @@ async function loadDevices() {
       return {
         id: d.equipmentId, code: d.equipmentCode, name: d.equipmentName,
         typeId: d.equipmentTypeId, typeName: d.equipmentTypeName,
-        location: d.equipmentLocation, district: d.district,
+        location: d.equipmentLocation, district: districtLabel(d.district),
         lng: d.longitude != null ? Number(d.longitude) : null,
         lat: d.latitude != null ? Number(d.latitude) : null,
         battery: d.manholeData?.batteryLevel ?? null,

+ 8 - 2
src/views/subSystem/manholeCover/operation/faultMana.vue

@@ -124,7 +124,7 @@
           <el-descriptions-item label="设备编号">{{ selectedDevice.code }}</el-descriptions-item>
           <el-descriptions-item label="设备名称">{{ selectedDevice.name }}</el-descriptions-item>
           <el-descriptions-item label="设备类型">{{ selectedDevice.deviceTypeName }}</el-descriptions-item>
-          <el-descriptions-item label="所属片区">{{ selectedDevice.district || '—' }}</el-descriptions-item>
+          <el-descriptions-item label="所属片区">{{ districtLabel(selectedDevice.district) || '—' }}</el-descriptions-item>
           <el-descriptions-item label="详细地址">{{ selectedDevice.location }}</el-descriptions-item>
           <el-descriptions-item label="经纬度">{{ selectedDevice.lng ?? '—' }}, {{ selectedDevice.lat ?? '—' }}</el-descriptions-item>
           <el-descriptions-item label="故障类型">{{ selectedDevice.faultTypeName }}</el-descriptions-item>
@@ -240,6 +240,12 @@ import locationIcon from '@/assets/images/location.png'
 
 // ==================== 常量 ====================
 const TYPE_MAP = { '5': '供水窨井', '9': '排水窨井', '10': '燃气窨井' }
+
+// 所属片区:后端 DistrictEnum(0-城南 1-城北 2-太常)
+const DISTRICT_MAP = { 0: '城南', 1: '城北', 2: '太常' }
+function districtLabel(code) {
+  return code == null ? '' : (DISTRICT_MAP[code] || String(code))
+}
 const LOW_BATTERY_THRESHOLD = 15
 const LOW_SIGNAL_THRESHOLD = 20
 const ORDER_STATUS_MAP = { 0: '待派单', 1: '待接单', 2: '已接单', 3: '处理中', 4: '待验收', 5: '已结案', 6: '延期中', 7: '已取消' }
@@ -330,7 +336,7 @@ function normalizeDevice(raw) {
     equipmentId: raw?.equipmentId || '',
     name: raw?.equipmentName || raw?.equipmentCode || '未命名设备',
     deviceTypeName: TYPE_MAP[typeId] || raw?.equipmentTypeName || '未知类型',
-    district: raw?.district || '',
+    district: districtLabel(raw?.district),
     location: raw?.equipmentLocation || '暂无位置信息',
     locationShort: (raw?.equipmentLocation || '暂无位置').slice(0, 20),
     lng: raw?.longitude != null ? Number(raw.longitude) : null,

+ 7 - 1
src/views/subSystem/manholeCover/operation/mOdataStatistics.vue

@@ -215,6 +215,12 @@ import {
 
 // ==================== 常量 ====================
 const TYPE_MAP = { '5': '供水窨井', '9': '排水窨井', '10': '燃气窨井' }
+
+// 所属片区:后端 DistrictEnum(0-城南 1-城北 2-太常)
+const DISTRICT_MAP = { 0: '城南', 1: '城北', 2: '太常' }
+function districtLabel(code) {
+  return code == null ? '' : (DISTRICT_MAP[code] || String(code))
+}
 const LOW_BATTERY_THRESHOLD = 15
 const LOW_SIGNAL_THRESHOLD = 20
 
@@ -307,7 +313,7 @@ function normalizeDevice(raw) {
     deviceTypeName: TYPE_MAP[typeId] || raw?.equipmentTypeName || '未知类型',
     location: raw?.equipmentLocation || '暂无位置信息',
     locationShort: (raw?.equipmentLocation || '暂无位置').slice(0, 20),
-    district: raw?.district || '',
+    district: districtLabel(raw?.district),
     battery, signal, temperature, tiltAngle, angleThreshold,
     status: { tilt, waterInfiltration, waterLevel, lowBattery, lowSignal, offline },
     faultTypes, hasAlert,

+ 45 - 32
src/views/subSystem/pipeNetwork/pdeviceInform/index.vue

@@ -4,9 +4,8 @@
     <!-- 页头 -->
     <div class="page-head">
       <div class="page-head-titles">
-        <div class="page-title">设备管理</div>
+        <div class="page-title">设备统计</div>
       </div>
-      <el-button type="primary" icon="Plus" class="btn-primary" @click="handleAdd">新增设备</el-button>
     </div>
 
     <!-- KPI -->
@@ -43,10 +42,17 @@
 
     <!-- 设备台账 -->
     <el-card shadow="never" class="ledger">
-      <div class="ledger-head">
-        <div class="ledger-title">设备台账</div>
-        <div class="ledger-sub">一览管网监测设备台账与运行状态</div>
-      </div>
+      <template #header>
+        <div class="card-header-row">
+          <div>
+            <div class="card-title">设备台账</div>
+            <div class="card-subtitle">一览管网监测设备台账与运行状态</div>
+          </div>
+          <div class="ledger-actions">
+            <el-button type="primary" icon="Plus" class="btn-primary" @click="handleAdd">新增设备</el-button>
+          </div>
+        </div>
+      </template>
 
       <el-form ref="queryRef" :model="queryParams" :inline="true" class="filters">
         <el-form-item label="设备编码" prop="equipmentCode">
@@ -173,7 +179,7 @@
           <el-descriptions-item label="资产价值(元)">{{ selectedDetail.equipmentInfo.assetValue ?? "-" }}</el-descriptions-item>
           <el-descriptions-item label="使用年限(年)">{{ selectedDetail.equipmentInfo.useLife ?? "-" }}</el-descriptions-item>
           <el-descriptions-item label="资产状态">{{ currentStatusMeta(selectedDetail.statusInfo?.currentStatus).text }}</el-descriptions-item>
-          <el-descriptions-item label="所属片区">{{ selectedDetail.equipmentInfo.district || "-" }}</el-descriptions-item>
+          <el-descriptions-item label="所属片区">{{ districtLabel(selectedDetail.equipmentInfo.district) }}</el-descriptions-item>
           <el-descriptions-item label="设备位置" :span="2">{{ selectedDetail.equipmentInfo.equipmentLocation || "-" }}</el-descriptions-item>
           <el-descriptions-item label="经度">{{ selectedDetail.equipmentInfo.longitude ?? "-" }}</el-descriptions-item>
           <el-descriptions-item label="纬度">{{ selectedDetail.equipmentInfo.latitude ?? "-" }}</el-descriptions-item>
@@ -267,7 +273,7 @@
           <el-col :span="12">
             <el-form-item label="所属片区" prop="district">
               <el-select v-model="form.district" clearable placeholder="请选择所属片区" style="width: 100%">
-                <el-option v-for="item in districtOptions" :key="item" :label="item" :value="item" />
+                <el-option v-for="item in districtOptions" :key="item.value" :label="item.label" :value="item.value" />
               </el-select>
             </el-form-item>
           </el-col>
@@ -354,7 +360,6 @@ import {
   getEquipmentDetail,
   getEquipmentStatusStatistics,
   listEquipment,
-  listEquipmentStatusAll,
   listEquipmentTypeAll,
   updateEquipment,
   updateEquipmentStatus
@@ -368,7 +373,6 @@ const rootTypeId = ref(route.query.rootTypeId ? Number(route.query.rootTypeId) :
 
 const equipmentList = ref([]);
 const allTypeList = ref([]);
-const equipmentStatusList = ref([]);
 const loading = ref(false);
 const open = ref(false);
 const detailOpen = ref(false);
@@ -392,8 +396,17 @@ const equipmentStatusOptions = [
   { label: "报废", value: 2 }
 ];
 
-// 所属片区
-const districtOptions = ["城南", "城北", "太常"];
+// 所属片区:与后端 DistrictEnum 对齐(0-城南 1-城北 2-太常)
+const districtOptions = [
+  { label: "城南", value: 0 },
+  { label: "城北", value: 1 },
+  { label: "太常", value: 2 }
+];
+
+function districtLabel(code) {
+  const hit = districtOptions.find((item) => item.value === code);
+  return hit ? hit.label : "-";
+}
 
 const typeNameMap = computed(() => {
   return allTypeList.value.reduce((acc, item) => {
@@ -403,23 +416,16 @@ const typeNameMap = computed(() => {
 });
 
 // 设备状态索引:equipmentId -> EquipmentStatus
-const statusMap = computed(() => {
-  return equipmentStatusList.value.reduce((acc, item) => {
-    acc[item.equipmentId] = item;
-    return acc;
-  }, {});
-});
-
 function getRowStatus(equipmentId) {
-  return statusMap.value[equipmentId]?.currentStatus;
+  return equipmentList.value.find(item => item.equipmentId === equipmentId)?.currentStatus;
 }
 
 function getRowOnline(equipmentId) {
-  return statusMap.value[equipmentId]?.onlineStatus;
+  return equipmentList.value.find(item => item.equipmentId === equipmentId)?.onlineStatus;
 }
 
 function getRowAlarm(equipmentId) {
-  return statusMap.value[equipmentId]?.alarmStatus;
+  return equipmentList.value.find(item => item.equipmentId === equipmentId)?.alarmStatus;
 }
 
 // parentId 为 0(或空)表示父类
@@ -568,9 +574,8 @@ function getList() {
 }
 
 function loadAssistData() {
-  return Promise.all([listEquipmentTypeAll(), listEquipmentStatusAll(rootTypeId.value)]).then(([typeRes, statusRes]) => {
+  return listEquipmentTypeAll().then((typeRes) => {
     allTypeList.value = typeRes.data || [];
-    equipmentStatusList.value = statusRes.data || [];
   });
 }
 
@@ -793,22 +798,30 @@ onMounted(() => {
   padding: 20px;
 }
 
-.ledger-head {
+.card-header-row {
   display: flex;
-  align-items: baseline;
-  gap: 8px;
+  justify-content: space-between;
+  align-items: center;
+  gap: 12px;
 }
 
-.ledger-title {
+.card-title {
   font-size: 16px;
   font-weight: 600;
-  color: #0a1628;
+  color: #1f2937;
 }
 
-.ledger-sub {
+.card-subtitle {
+  margin-top: 4px;
   font-size: 12px;
-  font-weight: 400;
-  color: #9ca3af;
+  color: #6b7280;
+}
+
+.ledger-actions {
+  display: flex;
+  align-items: center;
+  gap: 8px;
+  flex-wrap: wrap;
 }
 
 /* 筛选栏 */