lipenghui 1 週間 前
コミット
fc22e66a2b

+ 1 - 0
src/locales/en.ts

@@ -1022,6 +1022,7 @@ export default {
     routeDescHolder:'please enter route description',
     generateTime:'GenerateTime',
     executeTime:'ExecuteTime',
+    ignore:'ignore'
   },
   route:{
     RouteName:'RouteName',

+ 2 - 1
src/locales/zh-CN.ts

@@ -1016,7 +1016,8 @@ export default {
     routeDesc:'路线描述',
     routeDescHolder:'请输入路线描述',
     generateTime:'生成时间',
-    executeTime:'执行时间'
+    executeTime:'执行时间',
+    ignore:'忽略'
   },
   route:{
     RouteName:'路线名称',

+ 6 - 6
src/views/pms/failure/index.vue

@@ -149,15 +149,15 @@
             </template>
           </el-table-column>
           <!--        <el-table-column label="故障编码" align="center" prop="failureCode" />-->
-          <el-table-column :label="t('fault.faultTitle')" align="center" prop="failureName" width="320"/>
-          <el-table-column :label="t('iotMaintain.deviceCode')" align="center" prop="deviceCode" width="220" />
-          <el-table-column :label="t('fault.deviceName')" align="center" prop="deviceName" width="240"/>
-          <el-table-column :label="t('fault.status')" align="center" prop="status" width="110">
+          <el-table-column :label="t('fault.faultTitle')" align="center" prop="failureName" min-width="320"/>
+          <el-table-column :label="t('iotMaintain.deviceCode')" align="center" prop="deviceCode" min-width="220" />
+          <el-table-column :label="t('fault.deviceName')" align="center" prop="deviceName" min-width="240"/>
+          <el-table-column :label="t('fault.status')" align="center" prop="status" min-width="110">
             <template #default="scope">
               <dict-tag :type="DICT_TYPE.PMS_FAILURE_STATUS" :value="scope.row.status" />
             </template>
           </el-table-column>
-          <el-table-column :label="t('fault.approvalStatus')"  align="center" prop="auditStatus" width="130">
+          <el-table-column :label="t('fault.approvalStatus')"  align="center" prop="auditStatus" min-width="130">
             <template #default="scope">
               <dict-tag :type="DICT_TYPE.CRM_AUDIT_STATUS" :value="scope.row.auditStatus" />
             </template>
@@ -172,7 +172,7 @@
             align="center"
             prop="failureTime"
             :formatter="dateFormatter"
-            width="180px"
+            min-width="180px"
           />
           <el-table-column :label="t('fault.solveTime')" align="center" prop="dealHour" >
             <template #default="scope">

+ 11 - 26
src/views/pms/inspect/order/index.vue

@@ -96,26 +96,26 @@
               {{ scope.$index + 1 }}
             </template>
           </el-table-column>
-          <el-table-column :label="t('bomList.name')" align="center" prop="inspectOrderTitle" width="300" />
+          <el-table-column :label="t('bomList.name')" align="center" prop="inspectOrderTitle" min-width="300" />
 <!--          <el-table-column label="工单编码" align="center" prop="inspectOrderCode" />-->
-          <el-table-column :label="t('route.orderType')" align="center" prop="type" />
-          <el-table-column :label="t('operationFill.status')" align="center" prop="status">
+          <el-table-column :label="t('route.orderType')" align="center" prop="type" min-width="90"/>
+          <el-table-column :label="t('operationFill.status')" align="center" prop="status" min-width="95">
             <template #default="scope">
               <dict-tag :type="DICT_TYPE.PMS_INSPECT_ORDER_STATUS" :value="scope.row.status" />
             </template>
           </el-table-column>
-          <el-table-column :label="t('iotMaintain.PersonInCharge')" align="center" prop="chargeName" />
-          <el-table-column :label="t('inspect.deviceCount')" align="center" prop="deviceCount" >
+          <el-table-column :label="t('iotMaintain.PersonInCharge')" align="center" prop="chargeName" min-width="110"/>
+          <el-table-column :label="t('inspect.deviceCount')" align="center" prop="deviceCount" min-width="100">
             <template #default="scope">
               <el-tag  type="info"> {{scope.row.deviceCount}}</el-tag>
             </template>
           </el-table-column>
-          <el-table-column :label="t('inspect.needDevice')" align="center" prop="needDevice" >
+          <el-table-column :label="t('inspect.needDevice')" align="center" prop="needDevice" min-width="100">
             <template #default="scope">
               <el-tag  type="success"> {{scope.row.needDevice}}</el-tag>
             </template>
           </el-table-column>
-          <el-table-column :label="t('inspect.exceptionCount')" align="center" prop="exceptionCount" >
+          <el-table-column :label="t('inspect.exceptionCount')" align="center" prop="exceptionCount" min-width="100">
             <template #default="scope">
               <el-tag  type="danger"> {{scope.row.exceptionCount}}</el-tag>
             </template>
@@ -126,33 +126,17 @@
             align="center"
             prop="createTime"
             :formatter="dateFormatter"
-            width="180px"
+            min-width="180px"
           />
           <el-table-column
             :label="t('inspect.executeTime')"
             align="center"
             prop="executeDate"
             :formatter="dateFormatter"
-            width="180px"
+            min-width="180px"
           />
-          <el-table-column :label="t('iotMaintain.operation')" align="center" min-width="120px" fixed="right">
+          <el-table-column :label="t('iotMaintain.operation')" align="center" min-width="160px" fixed="right">
             <template #default="scope">
-              <!--          <el-button-->
-              <!--            link-->
-              <!--            type="primary"-->
-              <!--            @click="openForm('update', scope.row.id)"-->
-              <!--            v-hasPermi="['rq:iot-inspect-order:update']"-->
-              <!--          >-->
-              <!--            编辑-->
-              <!--          </el-button>-->
-              <!--          <el-button-->
-              <!--            link-->
-              <!--            type="danger"-->
-              <!--            @click="handleDelete(scope.row.id)"-->
-              <!--            v-hasPermi="['rq:iot-inspect-order:delete']"-->
-              <!--          >-->
-              <!--            删除-->
-              <!--          </el-button>-->
               <el-button link type="primary" @click="openForm(scope.row.id)"> {{ t('operationFill.view') }} </el-button>
               <el-button
                 v-if="scope.row.status === 'todo'"
@@ -163,6 +147,7 @@
               >
                 {{ t('operationFill.fill') }}
               </el-button>
+<!--              <el-button link type="primary" @click="openForm(scope.row.id)"> {{ t('inspect.ignore') }} </el-button>-->
             </template>
           </el-table-column>
         </el-table>

+ 10 - 10
src/views/pms/inspect/plan/index.vue

@@ -87,15 +87,15 @@
               {{ scope.$index + 1 }}
             </template>
           </el-table-column>
-          <el-table-column :label="t('route.planTitle')" align="center" prop="planTitle" width="240" />
-          <el-table-column :label="t('route.planNumber')" align="center" prop="planCode" width="200" />
-          <el-table-column :label="t('route.cycle')" align="center" prop="planCycle"  width="80"/>
-          <el-table-column :label="t('workOrderMaterial.unit')" align="center" prop="planUnit" width="80">
+          <el-table-column :label="t('route.planTitle')" align="center" prop="planTitle" min-width="240" />
+          <el-table-column :label="t('route.planNumber')" align="center" prop="planCode" min-width="200" />
+          <el-table-column :label="t('route.cycle')" align="center" prop="planCycle"  min-width="80"/>
+          <el-table-column :label="t('workOrderMaterial.unit')" align="center" prop="planUnit" min-width="80">
             <template #default="scope">
               <dict-tag :type="DICT_TYPE.PMS_INSPECT_UNIT" :value="scope.row.planUnit" />
             </template>
           </el-table-column>
-          <el-table-column :label="t('bomList.status')" key="status" width="80">
+          <el-table-column :label="t('bomList.status')" key="status" min-width="80">
             <template #default="scope">
               <el-switch
                 v-model="scope.row.status"
@@ -110,18 +110,18 @@
             align="center"
             prop="beginCreateTime"
             :formatter="dateFormatter"
-            width="180px"
+            min-width="180px"
           />
           <el-table-column
             :label="t('route.lastCreateTime')"
             align="center"
             prop="lastCreateTime"
             :formatter="dateFormatter"
-            width="180px"
+            min-width="180px"
           />
-          <el-table-column :label="t('iotDevice.dept')" align="center" prop="deptName" width="130"/>
-          <el-table-column :label="t('inspect.createName')" align="center" prop="createName" width="130"/>
-          <el-table-column :label="t('operationFill.operation')" align="center" width="180" fixed="right">
+          <el-table-column :label="t('iotDevice.dept')" align="center" prop="deptName" min-width="130"/>
+          <el-table-column :label="t('inspect.createName')" align="center" prop="createName" min-width="130"/>
+          <el-table-column :label="t('operationFill.operation')" align="center" min-width="180" fixed="right">
             <template #default="scope">
               <el-button
                 link

+ 11 - 11
src/views/pms/maintain/index.vue

@@ -133,32 +133,32 @@
       <!-- 列表 -->
       <ContentWrap>
         <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
-          <el-table-column :label="t('maintain.serial')" width="70" align="center">
+          <el-table-column :label="t('maintain.serial')" min-width="70" align="center">
             <template #default="scope">
               {{ scope.$index + 1 }}
             </template>
           </el-table-column>
 <!--          <el-table-column label="故障编码" align="center" prop="failureCode" />-->
 <!--          <el-table-column label="故障名称" align="center" prop="failureName" />-->
-          <el-table-column :label="t('iotDevice.code')" align="center" prop="deviceCode" width="150" />
-          <el-table-column :label="t('maintain.deviceName')" align="center" prop="deviceName" width="185" />
-          <el-table-column :label="t('maintain.status')" align="center" prop="status" width="85" >
+          <el-table-column :label="t('iotDevice.code')" align="center" prop="deviceCode" min-width="150" />
+          <el-table-column :label="t('maintain.deviceName')" align="center" prop="deviceName" min-width="185" />
+          <el-table-column :label="t('maintain.status')" align="center" prop="status" min-width="85" >
             <template #default="scope">
               <dict-tag :type="DICT_TYPE.PMS_MAIN_STATUS" :value="scope.row.status" />
             </template>
           </el-table-column>
-          <el-table-column :label="t('maintain.source')" align="center" prop="maintainType" width="135"/>
+          <el-table-column :label="t('maintain.source')" align="center" prop="maintainType" min-width="135"/>
 <!--          <el-table-column :label="t('maintain.audit')" align="center" prop="auditStatus" width="135">-->
 <!--            <template #default="scope">-->
 <!--              <dict-tag :type="DICT_TYPE.CRM_AUDIT_STATUS" :value="scope.row.auditStatus" />-->
 <!--            </template>-->
 <!--          </el-table-column>-->
-          <el-table-column :label="t('iotMaintain.repairType')" align="center" prop="type" width="135">
+          <el-table-column :label="t('iotMaintain.repairType')" align="center" prop="type" min-width="135">
             <template #default="scope">
               <dict-tag :type="DICT_TYPE.PMS_MAIN_TYPE" :value="scope.row.type" />
             </template>
           </el-table-column>
-          <el-table-column :label="t('maintain.shutDown')" align="center" prop="ifStop"  width="135">
+          <el-table-column :label="t('maintain.shutDown')" align="center" prop="ifStop"  min-width="135">
             <template #default="scope">
               <dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.ifStop" />
             </template>
@@ -168,10 +168,10 @@
                       align="center"
                       prop="executeDate"
                       :formatter="dateFormatter"
-                      width="180px"
+                      min-width="180px"
                     />
-          <el-table-column :label="t('maintain.dept')" align="center" prop="deptName" width="135"/>
-          <el-table-column :label="t('inspect.createName')" align="center" prop="createName" width="130"/>
+          <el-table-column :label="t('maintain.dept')" align="center" prop="deptName" min-width="135"/>
+          <el-table-column :label="t('inspect.createName')" align="center" prop="createName" min-width="130"/>
 <!--          <el-table-column-->
 <!--            :label="t('iotMaintain.startTime')"-->
 <!--            align="center"-->
@@ -201,7 +201,7 @@
 <!--            :formatter="dateFormatter"-->
 <!--            width="180px"-->
 <!--          />-->
-          <el-table-column :label="t('maintain.operation')" align="center" width="170" fixed="right">
+          <el-table-column :label="t('maintain.operation')" align="center" min-width="170" fixed="right">
             <template #default="scope">
               <el-button
                 link

+ 143 - 9
src/views/pms/stat/rykb.vue

@@ -88,11 +88,21 @@
           <div ref="statusChartRef" class="h-[320px]"></div>
         </el-card>
       </el-col>
+<!--      <el-col :span="7">-->
+<!--        <el-card class="chart-card" shadow="never">-->
+<!--          <template #header>-->
+<!--            <div class="flex items-center">-->
+<!--              <span class="text-base font-medium" style="color: #b6c8da">项目部设备数量统计</span>-->
+<!--            </div>-->
+<!--          </template>-->
+<!--          <div ref="topContainer" class="h-[320px]"></div>-->
+<!--        </el-card>-->
+<!--      </el-col>-->
       <el-col :span="7">
         <el-card class="chart-card" shadow="never">
           <template #header>
             <div class="flex items-center">
-              <span class="text-base font-medium" style="color: #b6c8da">项目部设备数量统计</span>
+              <span class="text-base font-medium" style="color: #b6c8da">设备类别TOP5数量</span>
             </div>
           </template>
           <div ref="topContainer" class="h-[320px]"></div>
@@ -327,10 +337,10 @@ const getStats = () => {
     status.value = res
     // initCharts()
   })
-  // IotStatApi.getMaintenanceTodayStatus().then((res) => {
-  //   todayStatus.value = res
-  //   initTopChart()
-  // })
+  IotStatApi.getMaintenanceTodayStatus().then((res) => {
+    todayStatus.value = res
+    initTopChart()
+  })
 
   IotStatApi.getDeviceStatusCount('ry').then((res) => {
     typeData.value = res
@@ -366,10 +376,10 @@ const getStats = () => {
   IotStatApi.getDeptStatistics(fillQueryParams).then((res) => {
     fill.value = res.totalList[0] || []
   })
-  IotStatApi.getProject('ry').then((res) => {
-    typeData.value = res;
-    initProjectCharts()
-  })
+  // IotStatApi.getProject('ry').then((res) => {
+  //   typeData.value = res;
+  //   initProjectCharts()
+  // })
 }
 
 const initDrillingWorkloadChart = () => {
@@ -554,6 +564,130 @@ let topInstance = null
 // 响应式容器尺寸
 const { width, height } = useElementSize(topContainer)
 
+
+// 处理数据(排序+限制5条)
+const processedData = () => {
+  const data = IotStatApi.getDeviceTypeCount()
+  backendData.value = data
+  return [...backendData.value].sort((a, b) => a.value - b.value)
+}
+
+const fetchTop = () => {
+  IotStatApi.getDeviceTypeCount().then((res) => {
+    backendData.value = res
+  })
+}
+
+
+watch(
+  backendData,
+  () => {
+    updateTopChart()
+  },
+  { deep: true }
+)
+
+// 初始化图表配置
+const getTopOption = () => {
+  // backendData.value = data
+  const data = backendData.value.sort((a, b) => a.value - b.value)
+  return {
+    tooltip: {
+      trigger: 'axis',
+      axisPointer: { type: 'shadow' },
+      formatter: (params) => {
+        const item = params[0]
+        return `${item.name}<br/>${item.marker} ${item.value.toLocaleString()}`
+      }
+    },
+    grid: {
+      height: '200px',
+      left: '6%',
+      right: '6%',
+      bottom: '18%',
+      containLabel: true
+    },
+    xAxis: {
+      type: 'value',
+      axisLabel: {
+        color: '#B6C8DA',
+        formatter: (value) => {
+          if (value >= 10000) return `${(value / 10000).toFixed(1)}万`
+          return value.toLocaleString()
+        }
+      },
+      axisLine: {
+        lineStyle: {
+          color: '#B6C8DA' // X轴线白色半透明
+        }
+      },
+      splitLine: {
+        show: true, // 显示水平网格线(默认显示)
+        lineStyle: {
+          // 水平网格线颜色(可设置为纯色或带透明度的颜色)
+          color: '#457794', // 浅灰色半透明
+          // 可选:设置线条类型(实线/虚线/点线)
+          type: 'dashed'
+        }
+      }
+    },
+    yAxis: {
+      type: 'category',
+      data: data.map((item) => item.category),
+      axisTick: { show: false },
+      axisLabel: { color: '#B6C8DA' },
+      axisLine: {
+        lineStyle: {
+          color: '#B6C8DA' // X轴线白色半透明
+        }
+      }
+    },
+    series: [
+      {
+        type: 'bar',
+        data: data.map((item) => item.value),
+        itemStyle: {
+          color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [
+            { offset: 0, color: '#83bff6' },
+            { offset: 0.7, color: '#188df0' },
+            { offset: 1, color: '#188df0' }
+          ]),
+          borderRadius: [0, 8, 8, 0]
+        },
+        label: {
+          show: true,
+          position: 'right',
+          formatter: '{@value}',
+          color: '#B6C8DA',
+          fontWeight: 'bold'
+        },
+        emphasis: {
+          itemStyle: {
+            shadowBlur: 10,
+            shadowColor: 'rgba(0, 0, 0, 0.5)'
+          }
+        }
+      }
+    ]
+  }
+}
+
+// 初始化图表
+const initTopChart = async () => {
+  await IotStatApi.getDeviceTypeCount('ry').then((res) => {
+    backendData.value = res
+  })
+  if (!topContainer.value) return
+  topInstance = echarts.init(topContainer.value)
+  updateTopChart()
+}
+
+// 更新图表
+const updateTopChart = () => {
+  if (!topInstance) return
+  topInstance.setOption(getTopOption())
+}
+
 const initProjectCharts = () => {
   const chart = echarts.init(topContainer.value);
   chart.setOption({