|
@@ -14,17 +14,15 @@
|
|
|
queryParams.pageNo = 1
|
|
queryParams.pageNo = 1
|
|
|
getList('all')
|
|
getList('all')
|
|
|
}
|
|
}
|
|
|
- "
|
|
|
|
|
- >
|
|
|
|
|
- <Icon icon="ep:histogram" :size="40" />
|
|
|
|
|
- <div class="card-title">工单数量</div>
|
|
|
|
|
|
|
+ ">
|
|
|
|
|
+ <Icon icon="ep:histogram" class="text-[#2563eb]!" :size="40" />
|
|
|
|
|
+ <div class="card-title text-[#6b7280]!">工单数量</div>
|
|
|
|
|
|
|
|
<div class="card-value pt-5">
|
|
<div class="card-value pt-5">
|
|
|
<CountTo
|
|
<CountTo
|
|
|
- class="text-2xl"
|
|
|
|
|
|
|
+ class="text-3xl text-[#2563eb]!"
|
|
|
:end-val="deviceCount.finished + deviceCount.ignore + deviceCount.todo || 0"
|
|
:end-val="deviceCount.finished + deviceCount.ignore + deviceCount.todo || 0"
|
|
|
- :decimals="0"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ :decimals="0" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -39,13 +37,15 @@
|
|
|
getList('finished')
|
|
getList('finished')
|
|
|
}
|
|
}
|
|
|
"
|
|
"
|
|
|
- :class="{ 'stat-card-selected': statusList.finished }"
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ :class="{ 'stat-card-selected': statusList.finished }">
|
|
|
<div class="stat-card bg-green-gradient">
|
|
<div class="stat-card bg-green-gradient">
|
|
|
- <Icon icon="ep:finished" :size="40" />
|
|
|
|
|
|
|
+ <Icon icon="ep:finished" class="text-[#219241]!" :size="40" />
|
|
|
<div class="card-title">完成数量</div>
|
|
<div class="card-title">完成数量</div>
|
|
|
<div class="card-value pt-5">
|
|
<div class="card-value pt-5">
|
|
|
- <CountTo class="text-2xl" :end-val="deviceCount.finished || 0" :decimals="0" />
|
|
|
|
|
|
|
+ <CountTo
|
|
|
|
|
+ class="text-3xl text-[#219241]!"
|
|
|
|
|
+ :end-val="deviceCount.finished || 0"
|
|
|
|
|
+ :decimals="0" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -60,13 +60,15 @@
|
|
|
getList('todo')
|
|
getList('todo')
|
|
|
}
|
|
}
|
|
|
"
|
|
"
|
|
|
- :class="{ 'stat-card-selected': statusList.todo }"
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ :class="{ 'stat-card-selected': statusList.todo }">
|
|
|
<div class="stat-card bg-orange-gradient">
|
|
<div class="stat-card bg-orange-gradient">
|
|
|
- <Icon icon="ep:more-filled" :size="40" />
|
|
|
|
|
|
|
+ <Icon icon="ep:more-filled" class="text-[#fc9a03]!" :size="40" />
|
|
|
<div class="card-title">未完成数量</div>
|
|
<div class="card-title">未完成数量</div>
|
|
|
<div class="card-value pt-5">
|
|
<div class="card-value pt-5">
|
|
|
- <CountTo class="text-2xl" :end-val="deviceCount.todo || 0" :decimals="0" />
|
|
|
|
|
|
|
+ <CountTo
|
|
|
|
|
+ class="text-3xl text-[#fc9a03]!"
|
|
|
|
|
+ :end-val="deviceCount.todo || 0"
|
|
|
|
|
+ :decimals="0" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -81,13 +83,15 @@
|
|
|
getList('ignore')
|
|
getList('ignore')
|
|
|
}
|
|
}
|
|
|
"
|
|
"
|
|
|
- :class="{ 'stat-card-selected': statusList.ignore }"
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ :class="{ 'stat-card-selected': statusList.ignore }">
|
|
|
<div class="stat-card bg-green-gradient">
|
|
<div class="stat-card bg-green-gradient">
|
|
|
<Icon icon="ep:hide" :size="40" />
|
|
<Icon icon="ep:hide" :size="40" />
|
|
|
<div class="card-title">已忽略</div>
|
|
<div class="card-title">已忽略</div>
|
|
|
<div class="card-value pt-5">
|
|
<div class="card-value pt-5">
|
|
|
- <CountTo class="text-2xl" :end-val="deviceCount.ignore || 0" :decimals="0" />
|
|
|
|
|
|
|
+ <CountTo
|
|
|
|
|
+ class="text-3xl text-[#6b7280]!"
|
|
|
|
|
+ :end-val="deviceCount.ignore || 0"
|
|
|
|
|
+ :decimals="0" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -101,16 +105,17 @@
|
|
|
queryParams.pageNo = 1
|
|
queryParams.pageNo = 1
|
|
|
getExceptionList()
|
|
getExceptionList()
|
|
|
}
|
|
}
|
|
|
- "
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ ">
|
|
|
<div
|
|
<div
|
|
|
class="stat-card bg-red-gradient"
|
|
class="stat-card bg-red-gradient"
|
|
|
- :class="{ 'stat-card-selected': statusList.exception }"
|
|
|
|
|
- >
|
|
|
|
|
- <Icon icon="ep:bell" :size="40" />
|
|
|
|
|
|
|
+ :class="{ 'stat-card-selected': statusList.exception }">
|
|
|
|
|
+ <Icon icon="ep:bell" class="text-[#d45336]!" :size="40" />
|
|
|
<div class="card-title">异常设备数量</div>
|
|
<div class="card-title">异常设备数量</div>
|
|
|
<div class="card-value pt-5">
|
|
<div class="card-value pt-5">
|
|
|
- <CountTo class="text-2xl" :end-val="exceptions?.exceptionNum || 0" :decimals="0" />
|
|
|
|
|
|
|
+ <CountTo
|
|
|
|
|
+ class="text-3xl text-[#d45336]!"
|
|
|
|
|
+ :end-val="exceptions?.exceptionNum || 0"
|
|
|
|
|
+ :decimals="0" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -124,16 +129,17 @@
|
|
|
queryParams.pageNo = 1
|
|
queryParams.pageNo = 1
|
|
|
getExceptionPoint()
|
|
getExceptionPoint()
|
|
|
}
|
|
}
|
|
|
- "
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ ">
|
|
|
<div
|
|
<div
|
|
|
class="stat-card bg-warn-gradient"
|
|
class="stat-card bg-warn-gradient"
|
|
|
- :class="{ 'stat-card-selected': statusList.exceptionPoint }"
|
|
|
|
|
- >
|
|
|
|
|
- <Icon icon="ep:info-filled" :size="40" />
|
|
|
|
|
|
|
+ :class="{ 'stat-card-selected': statusList.exceptionPoint }">
|
|
|
|
|
+ <Icon icon="ep:info-filled" class="text-[#e6a23c]!" :size="40" />
|
|
|
<div class="card-title">异常点数量</div>
|
|
<div class="card-title">异常点数量</div>
|
|
|
<div class="card-value pt-5">
|
|
<div class="card-value pt-5">
|
|
|
- <CountTo class="text-2xl" :end-val="exceptionPoint.value || 0" :decimals="0" />
|
|
|
|
|
|
|
+ <CountTo
|
|
|
|
|
+ class="text-3xl text-[#e6a23c]!"
|
|
|
|
|
+ :end-val="exceptionPoint.value || 0"
|
|
|
|
|
+ :decimals="0" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -163,8 +169,7 @@
|
|
|
:loading="loading"
|
|
:loading="loading"
|
|
|
:data="list3"
|
|
:data="list3"
|
|
|
:stripe="true"
|
|
:stripe="true"
|
|
|
- :show-overflow-tooltip="true"
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ :show-overflow-tooltip="true">
|
|
|
<zm-table-column :label="t('iotDevice.serial')" width="70" align="center">
|
|
<zm-table-column :label="t('iotDevice.serial')" width="70" align="center">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
{{ scope.$index + 1 }}
|
|
{{ scope.$index + 1 }}
|
|
@@ -188,8 +193,7 @@
|
|
|
:loading="loading"
|
|
:loading="loading"
|
|
|
:data="list2"
|
|
:data="list2"
|
|
|
:stripe="true"
|
|
:stripe="true"
|
|
|
- :show-overflow-tooltip="true"
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ :show-overflow-tooltip="true">
|
|
|
<zm-table-column :label="t('iotDevice.serial')" width="70" align="center">
|
|
<zm-table-column :label="t('iotDevice.serial')" width="70" align="center">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
{{ scope.$index + 1 }}
|
|
{{ scope.$index + 1 }}
|
|
@@ -211,8 +215,7 @@
|
|
|
:label="t('inspect.exceptionDes')"
|
|
:label="t('inspect.exceptionDes')"
|
|
|
align="center"
|
|
align="center"
|
|
|
prop="description"
|
|
prop="description"
|
|
|
- action
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ action />
|
|
|
</zm-table>
|
|
</zm-table>
|
|
|
|
|
|
|
|
<zm-table
|
|
<zm-table
|
|
@@ -222,8 +225,7 @@
|
|
|
:data="list"
|
|
:data="list"
|
|
|
:show-overflow-tooltip="true"
|
|
:show-overflow-tooltip="true"
|
|
|
@row-click="handleRowClick"
|
|
@row-click="handleRowClick"
|
|
|
- height="48vh"
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ height="48vh">
|
|
|
<zm-table-column :label="t('iotDevice.serial')" width="70" align="center">
|
|
<zm-table-column :label="t('iotDevice.serial')" width="70" align="center">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
{{ scope.$index + 1 }}
|
|
{{ scope.$index + 1 }}
|
|
@@ -238,14 +240,12 @@
|
|
|
:label="t('route.orderType')"
|
|
:label="t('route.orderType')"
|
|
|
align="center"
|
|
align="center"
|
|
|
prop="type"
|
|
prop="type"
|
|
|
- min-width="90"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ min-width="90" />
|
|
|
<zm-table-column
|
|
<zm-table-column
|
|
|
:label="t('operationFill.status')"
|
|
:label="t('operationFill.status')"
|
|
|
align="center"
|
|
align="center"
|
|
|
prop="status"
|
|
prop="status"
|
|
|
- min-width="95"
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ min-width="95">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<dict-tag :type="DICT_TYPE.PMS_INSPECT_ORDER_STATUS" :value="scope.row.status" />
|
|
<dict-tag :type="DICT_TYPE.PMS_INSPECT_ORDER_STATUS" :value="scope.row.status" />
|
|
|
</template>
|
|
</template>
|
|
@@ -258,16 +258,14 @@
|
|
|
<zm-table-column
|
|
<zm-table-column
|
|
|
:label="t('iotMaintain.PersonInCharge')"
|
|
:label="t('iotMaintain.PersonInCharge')"
|
|
|
align="center"
|
|
align="center"
|
|
|
- prop="chargeName"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ prop="chargeName" />
|
|
|
|
|
|
|
|
<zm-table-column
|
|
<zm-table-column
|
|
|
:label="t('iotMaintain.operation')"
|
|
:label="t('iotMaintain.operation')"
|
|
|
align="center"
|
|
align="center"
|
|
|
min-width="150px"
|
|
min-width="150px"
|
|
|
fixed="right"
|
|
fixed="right"
|
|
|
- action
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ action>
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<el-button link type="primary" @click="openForm(scope.row.id)">
|
|
<el-button link type="primary" @click="openForm(scope.row.id)">
|
|
|
异常巡检点
|
|
异常巡检点
|
|
@@ -281,8 +279,7 @@
|
|
|
:total="total"
|
|
:total="total"
|
|
|
v-model:page="queryParams.pageNo"
|
|
v-model:page="queryParams.pageNo"
|
|
|
v-model:limit="queryParams.pageSize"
|
|
v-model:limit="queryParams.pageSize"
|
|
|
- @pagination="getAllList"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ @pagination="getAllList" />
|
|
|
</ContentWrap>
|
|
</ContentWrap>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
</el-row>
|
|
</el-row>
|
|
@@ -310,16 +307,14 @@
|
|
|
:label="t('inspect.exceptionDes')"
|
|
:label="t('inspect.exceptionDes')"
|
|
|
align="center"
|
|
align="center"
|
|
|
prop="description"
|
|
prop="description"
|
|
|
- action
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ action />
|
|
|
</zm-table>
|
|
</zm-table>
|
|
|
|
|
|
|
|
<Pagination
|
|
<Pagination
|
|
|
:total="detailTotal"
|
|
:total="detailTotal"
|
|
|
v-model:page="detailQueryParams.pageNo"
|
|
v-model:page="detailQueryParams.pageNo"
|
|
|
v-model:limit="detailQueryParams.pageSize"
|
|
v-model:limit="detailQueryParams.pageSize"
|
|
|
- @pagination="goDetail(detailQueryParams.deviceCode)"
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ @pagination="goDetail(detailQueryParams.deviceCode)" />
|
|
|
</el-drawer>
|
|
</el-drawer>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
@@ -694,35 +689,37 @@ onMounted(() => {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.stat-card {
|
|
.stat-card {
|
|
|
- padding: 20px;
|
|
|
|
|
|
|
+ padding: 14px 16px;
|
|
|
|
|
+ background: linear-gradient(180deg, #ffffff 0%, #f7faff 100%);
|
|
|
|
|
+ border: 1px solid #e4ecf7;
|
|
|
border-radius: 10px;
|
|
border-radius: 10px;
|
|
|
- color: white;
|
|
|
|
|
|
|
+ box-shadow: 0 4px 12px rgb(31 91 184 / 8%);
|
|
|
text-align: center;
|
|
text-align: center;
|
|
|
font-size: 14px;
|
|
font-size: 14px;
|
|
|
- /* box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); */
|
|
|
|
|
transition:
|
|
transition:
|
|
|
transform 0.3s ease,
|
|
transform 0.3s ease,
|
|
|
- box-shadow 0.3s ease;
|
|
|
|
|
- backdrop-filter: blur(12px);
|
|
|
|
|
|
|
+ box-shadow 0.3s ease,
|
|
|
|
|
+ border-color 0.3s ease;
|
|
|
|
|
+ color: #6b7280;
|
|
|
height: 170px;
|
|
height: 170px;
|
|
|
cursor: pointer;
|
|
cursor: pointer;
|
|
|
- overflow: hidden; /* 防止闪光效果溢出 */
|
|
|
|
|
-}
|
|
|
|
|
-.stat-card::before {
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- filter: blur(20px);
|
|
|
|
|
- z-index: -1;
|
|
|
|
|
|
|
+ overflow: hidden;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.card-title {
|
|
.card-title {
|
|
|
margin: 8px 0;
|
|
margin: 8px 0;
|
|
|
- font-size: 16px;
|
|
|
|
|
|
|
+ font-size: 14px;
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+ color: #6b7280;
|
|
|
|
|
+ line-height: 1.4;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.card-value {
|
|
.card-value {
|
|
|
- font-size: 28px;
|
|
|
|
|
- font-weight: bold;
|
|
|
|
|
margin: 8px 0;
|
|
margin: 8px 0;
|
|
|
|
|
+ font-size: 28px;
|
|
|
|
|
+ font-weight: 700;
|
|
|
|
|
+ line-height: 1;
|
|
|
|
|
+ color: #1f5bb8;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.card-trend {
|
|
.card-trend {
|
|
@@ -730,28 +727,52 @@ onMounted(() => {
|
|
|
opacity: 0.9;
|
|
opacity: 0.9;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/* 毛玻璃渐变背景 —— 不再使用 background-image */
|
|
|
|
|
.bg-blue-gradient {
|
|
.bg-blue-gradient {
|
|
|
- background: linear-gradient(135deg, rgba(77, 147, 255, 0.5), rgba(75, 132, 254));
|
|
|
|
|
|
|
+ background: linear-gradient(180deg, #ffffff 0%, #f7faff 100%);
|
|
|
|
|
+ border-color: #e4ecf7;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.bg-blue-gradient .card-value {
|
|
|
|
|
+ color: #2563eb;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.bg-green-gradient {
|
|
.bg-green-gradient {
|
|
|
- background: linear-gradient(135deg, rgba(101, 226, 136, 0.3), #52d7a2);
|
|
|
|
|
|
|
+ background: linear-gradient(180deg, #f7fcf8 0%, #edf8f1 100%);
|
|
|
|
|
+ border-color: #d6efdc;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.bg-green-gradient .card-value {
|
|
|
|
|
+ color: #16a34a;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.bg-orange-gradient {
|
|
.bg-orange-gradient {
|
|
|
- background: linear-gradient(135deg, rgba(152, 82, 4, 0.5), rgba(255, 152, 4, 0.6));
|
|
|
|
|
|
|
+ background: linear-gradient(180deg, #fff8ef 0%, #ffeed9 100%);
|
|
|
|
|
+ border-color: #ffd7a1;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.bg-orange-gradient .card-value {
|
|
|
|
|
+ color: #d97706;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.bg-red-gradient {
|
|
.bg-red-gradient {
|
|
|
- background: linear-gradient(135deg, rgba(232, 65, 51), rgba(252, 242, 236));
|
|
|
|
|
|
|
+ background: linear-gradient(180deg, #fff4f4 0%, #ffe8e8 100%);
|
|
|
|
|
+ border-color: #ffcfcf;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.bg-red-gradient .card-value {
|
|
|
|
|
+ color: #de3b3b;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.bg-warn-gradient {
|
|
.bg-warn-gradient {
|
|
|
- background: linear-gradient(135deg, rgba(255, 201, 103), rgba(243, 162, 152));
|
|
|
|
|
|
|
+ background: linear-gradient(180deg, #fff8ef 0%, #ffeed9 100%);
|
|
|
|
|
+ border-color: #ffd7a1;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.bg-warn-gradient .card-value {
|
|
|
|
|
+ color: #d97706;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/* 确保内容不溢出 */
|
|
|
|
|
|
|
+/* ???????????*/
|
|
|
:deep(.el-row) {
|
|
:deep(.el-row) {
|
|
|
flex-wrap: wrap;
|
|
flex-wrap: wrap;
|
|
|
}
|
|
}
|
|
@@ -771,10 +792,9 @@ onMounted(() => {
|
|
|
|
|
|
|
|
.stat-card-selected {
|
|
.stat-card-selected {
|
|
|
position: relative;
|
|
position: relative;
|
|
|
- transform: scale(1.06);
|
|
|
|
|
|
|
+ transform: translateY(-2px);
|
|
|
transition: all 0.2s;
|
|
transition: all 0.2s;
|
|
|
- box-shadow:
|
|
|
|
|
- 0 10px 20px rgba(0, 80, 179, 0.5),
|
|
|
|
|
- 0 0 10px rgba(0, 120, 255, 0.4) inset;
|
|
|
|
|
|
|
+ box-shadow: 0 10px 20px rgb(31 91 184 / 12%);
|
|
|
|
|
+ border-color: #bfd5ee;
|
|
|
}
|
|
}
|
|
|
</style>
|
|
</style>
|