|
|
@@ -85,277 +85,280 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
<script lang="ts" setup>
|
|
|
- import { ref, onMounted, reactive } from 'vue';
|
|
|
- import customHeader from '/@/components/vent/customHeader.vue';
|
|
|
- import infoBox from './components/infoBox.vue';
|
|
|
- import { sysDataColumn, accessStatusColumn, dailyNumOption } from './infoCenter.data';
|
|
|
- import CustomChart from '@/views/vent/home/configurable/components/detail/CustomChart.vue';
|
|
|
- import { getDeviceAll, getHomepageSummaryIndexes } from './infoCenter.api';
|
|
|
- let mainTitle = ref('智能通风数据中心');
|
|
|
- //分页参数配置
|
|
|
- const pagination = reactive({
|
|
|
- current: 1, // 当前页码
|
|
|
- pageSize: 5, // 每页显示条数
|
|
|
- total: 0, // 总条目数,后端返回
|
|
|
- // showTotal: (total, range) => `${range[0]}-${range[1]} 条,总共 ${total} 条`, // 分页右下角显示信息
|
|
|
- });
|
|
|
- // 设备接入情况数据
|
|
|
- const accessStatusData = ref([]);
|
|
|
- // 数据中心首页设备数据
|
|
|
- const deviceData = ref({
|
|
|
- monitorParamsCount: 0,
|
|
|
- deviceCount: 0,
|
|
|
- databaseDiskUsage: {
|
|
|
- total_size_bytes: 0,
|
|
|
- total_size_mb: 0,
|
|
|
- total_size_gb: 0,
|
|
|
+import { ref, onMounted, reactive } from 'vue';
|
|
|
+import customHeader from '/@/components/vent/customHeader.vue';
|
|
|
+import infoBox from './components/infoBox.vue';
|
|
|
+import { sysDataColumn, accessStatusColumn, dailyNumOption } from './infoCenter.data';
|
|
|
+import CustomChart from '@/views/vent/home/configurable/components/detail/CustomChart.vue';
|
|
|
+import { getDeviceAll, getHomepageSummaryIndexes } from './infoCenter.api';
|
|
|
+import { useRouter } from 'vue-router';
|
|
|
+let mainTitle = ref('智能通风数据中心');
|
|
|
+let router = useRouter();
|
|
|
+//分页参数配置
|
|
|
+const pagination = reactive({
|
|
|
+ current: 1, // 当前页码
|
|
|
+ pageSize: 5, // 每页显示条数
|
|
|
+ total: 0, // 总条目数,后端返回
|
|
|
+ // showTotal: (total, range) => `${range[0]}-${range[1]} 条,总共 ${total} 条`, // 分页右下角显示信息
|
|
|
+});
|
|
|
+// 设备接入情况数据
|
|
|
+const accessStatusData = ref([]);
|
|
|
+// 数据中心首页设备数据
|
|
|
+const deviceData = ref({
|
|
|
+ monitorParamsCount: 0,
|
|
|
+ deviceCount: 0,
|
|
|
+ databaseDiskUsage: {
|
|
|
+ total_size_bytes: 0,
|
|
|
+ total_size_mb: 0,
|
|
|
+ total_size_gb: 0,
|
|
|
+ },
|
|
|
+ collectTotalNum: 0,
|
|
|
+ summaryShareAPINum: 0,
|
|
|
+ collectDataByStationList: [
|
|
|
+ {
|
|
|
+ sub_id: '1',
|
|
|
+ strName: '测试分站',
|
|
|
+ total_num: 0,
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ collectDataByDayList: [
|
|
|
+ {
|
|
|
+ day: '2025-10-29',
|
|
|
+ total_count: 0,
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ collectGroupByDevKindList: [
|
|
|
+ {
|
|
|
+ devKind: 'bundletube',
|
|
|
+ devNum: 0,
|
|
|
+ dataCount: 0,
|
|
|
},
|
|
|
- collectTotalNum: 0,
|
|
|
- summaryShareAPINum: 0,
|
|
|
- collectDataByStationList: [
|
|
|
- {
|
|
|
- sub_id: '1',
|
|
|
- strName: '测试分站',
|
|
|
- total_num: 0,
|
|
|
- },
|
|
|
- ],
|
|
|
- collectDataByDayList: [
|
|
|
- {
|
|
|
- day: '2025-10-29',
|
|
|
- total_count: 0,
|
|
|
- },
|
|
|
- ],
|
|
|
- collectGroupByDevKindList: [
|
|
|
- {
|
|
|
- devKind: 'bundletube',
|
|
|
- devNum: 0,
|
|
|
- dataCount: 0,
|
|
|
- },
|
|
|
- ],
|
|
|
+ ],
|
|
|
+});
|
|
|
+// 查看数据
|
|
|
+function viewData(record) {
|
|
|
+ console.log(record.devicekind, '设备类型');
|
|
|
+ router.push(`/sjzx/deviceCenter/home?deviceType=${record.devicekind}`);
|
|
|
+}
|
|
|
+//分页切换
|
|
|
+const pageChange = async (val) => {
|
|
|
+ pagination.current = val.current;
|
|
|
+ pagination.pageSize = val.pageSize;
|
|
|
+ const res = await getDeviceAll({
|
|
|
+ pageNo: pagination.current,
|
|
|
+ pageSize: pagination.pageSize,
|
|
|
});
|
|
|
- // 查看数据
|
|
|
- function viewData(record) {
|
|
|
- console.log(record);
|
|
|
+ accessStatusData.value = res.records; // 赋值给响应式变量
|
|
|
+ pagination.total = res.total; // 更新总条数
|
|
|
+};
|
|
|
+// 获取设备数据接口
|
|
|
+const fetchDeviceData = async () => {
|
|
|
+ try {
|
|
|
+ const summaryRes = await getHomepageSummaryIndexes();
|
|
|
+ deviceData.value = summaryRes;
|
|
|
+ } catch (error) {
|
|
|
+ console.error('获取首页汇总指标数据失败:', error);
|
|
|
}
|
|
|
- //分页切换
|
|
|
- const pageChange = async (val) => {
|
|
|
- pagination.current = val.current;
|
|
|
- pagination.pageSize = val.pageSize;
|
|
|
- const res = await getDeviceAll({
|
|
|
+
|
|
|
+ try {
|
|
|
+ const deviceRes = await getDeviceAll({
|
|
|
pageNo: pagination.current,
|
|
|
pageSize: pagination.pageSize,
|
|
|
});
|
|
|
- accessStatusData.value = res.records; // 赋值给响应式变量
|
|
|
- pagination.total = res.total; // 更新总条数
|
|
|
- };
|
|
|
- // 获取设备数据接口
|
|
|
- const fetchDeviceData = async () => {
|
|
|
- try {
|
|
|
- const summaryRes = await getHomepageSummaryIndexes();
|
|
|
- deviceData.value = summaryRes;
|
|
|
- } catch (error) {
|
|
|
- console.error('获取首页汇总指标数据失败:', error);
|
|
|
- }
|
|
|
-
|
|
|
- try {
|
|
|
- const deviceRes = await getDeviceAll({
|
|
|
- pageNo: pagination.current,
|
|
|
- pageSize: pagination.pageSize,
|
|
|
- });
|
|
|
- accessStatusData.value = deviceRes.records;
|
|
|
- pagination.total = deviceRes.total;
|
|
|
- } catch (error) {
|
|
|
- console.error('获取设备接入情况数据失败:', error);
|
|
|
- }
|
|
|
- };
|
|
|
+ accessStatusData.value = deviceRes.records;
|
|
|
+ pagination.total = deviceRes.total;
|
|
|
+ } catch (error) {
|
|
|
+ console.error('获取设备接入情况数据失败:', error);
|
|
|
+ }
|
|
|
+};
|
|
|
|
|
|
- // 数字千位分隔格式化函数
|
|
|
- const formatNumber = (num: number | string): string => {
|
|
|
- // 处理非数字或空值的情况
|
|
|
- if (!num && num !== 0) return '0';
|
|
|
- // 转换为数字后再处理,避免字符串类型的数字出现问题
|
|
|
- const number = typeof num === 'number' ? num : parseFloat(num);
|
|
|
- // 利用正则表达式实现千位分隔
|
|
|
- return number.toLocaleString('zh-CN');
|
|
|
- };
|
|
|
+// 数字千位分隔格式化函数
|
|
|
+const formatNumber = (num: number | string): string => {
|
|
|
+ // 处理非数字或空值的情况
|
|
|
+ if (!num && num !== 0) return '0';
|
|
|
+ // 转换为数字后再处理,避免字符串类型的数字出现问题
|
|
|
+ const number = typeof num === 'number' ? num : parseFloat(num);
|
|
|
+ // 利用正则表达式实现千位分隔
|
|
|
+ return number.toLocaleString('zh-CN');
|
|
|
+};
|
|
|
|
|
|
- // 页面挂载时调用接口获取数据
|
|
|
- onMounted(async () => {
|
|
|
- await fetchDeviceData();
|
|
|
- });
|
|
|
+// 页面挂载时调用接口获取数据
|
|
|
+onMounted(async () => {
|
|
|
+ await fetchDeviceData();
|
|
|
+});
|
|
|
</script>
|
|
|
<style lang="less" scoped>
|
|
|
- @font-face {
|
|
|
- font-family: 'douyuFont';
|
|
|
- src: url('@/assets/font/douyuFont.otf');
|
|
|
- }
|
|
|
+@font-face {
|
|
|
+ font-family: 'douyuFont';
|
|
|
+ src: url('@/assets/font/douyuFont.otf');
|
|
|
+}
|
|
|
|
|
|
- .company-home {
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- position: relative;
|
|
|
+.company-home {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ position: relative;
|
|
|
|
|
|
- :deep(.vent-home-header) {
|
|
|
- height: 50px;
|
|
|
- background: url('@/assets/images/vent/home/modal-top.png') no-repeat center;
|
|
|
- background-size: 100% 100%;
|
|
|
- }
|
|
|
+ :deep(.vent-home-header) {
|
|
|
+ height: 50px;
|
|
|
+ background: url('@/assets/images/vent/home/modal-top.png') no-repeat center;
|
|
|
+ background-size: 100% 100%;
|
|
|
+ }
|
|
|
|
|
|
- .company-content {
|
|
|
- position: absolute;
|
|
|
- left: 0;
|
|
|
+ .company-content {
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ width: 100%;
|
|
|
+ height: calc(100% - 50px);
|
|
|
+ padding: 20px 20px 10px 20px;
|
|
|
+ --image-border1: url('/@/assets/images/dataCenter/infoCenter/info-border1.png');
|
|
|
+ --image-border2: url('/@/assets/images/dataCenter/infoCenter/info-border2.png');
|
|
|
+ --image-border3: url('/@/assets/images/dataCenter/infoCenter/info-border3.png');
|
|
|
+ --image-border4: url('/@/assets/images/dataCenter/infoCenter/info-border4.png');
|
|
|
+ --image-split-line: url('/@/assets/images/dataCenter/infoCenter/split-line.png');
|
|
|
+ --image-rank: url('/@/assets/images/dataCenter/infoCenter/rank-bg.png');
|
|
|
+ .content-item {
|
|
|
width: 100%;
|
|
|
- height: calc(100% - 50px);
|
|
|
- padding: 20px 20px 10px 20px;
|
|
|
- --image-border1: url('/@/assets/images/dataCenter/infoCenter/info-border1.png');
|
|
|
- --image-border2: url('/@/assets/images/dataCenter/infoCenter/info-border2.png');
|
|
|
- --image-border3: url('/@/assets/images/dataCenter/infoCenter/info-border3.png');
|
|
|
- --image-border4: url('/@/assets/images/dataCenter/infoCenter/info-border4.png');
|
|
|
- --image-split-line: url('/@/assets/images/dataCenter/infoCenter/split-line.png');
|
|
|
- --image-rank: url('/@/assets/images/dataCenter/infoCenter/rank-bg.png');
|
|
|
- .content-item {
|
|
|
- width: 100%;
|
|
|
- overflow: hidden;
|
|
|
- padding-bottom: 20px;
|
|
|
- }
|
|
|
- .item-1 {
|
|
|
- height: 20%;
|
|
|
- }
|
|
|
- .item-2 {
|
|
|
- height: 40%;
|
|
|
- grid-template-columns: 6fr 4fr;
|
|
|
- gap: 20px;
|
|
|
- :deep(table) {
|
|
|
- border-collapse: separate !important;
|
|
|
- border-spacing: 0 10px !important;
|
|
|
- .zxm-table-thead {
|
|
|
- height: 35px;
|
|
|
- background-color: unset !important;
|
|
|
- .zxm-table-cell {
|
|
|
- color: #66ffff !important;
|
|
|
- }
|
|
|
- }
|
|
|
- .zxm-table-tbody {
|
|
|
- background-color: unset !important;
|
|
|
+ overflow: hidden;
|
|
|
+ padding-bottom: 20px;
|
|
|
+ }
|
|
|
+ .item-1 {
|
|
|
+ height: 20%;
|
|
|
+ }
|
|
|
+ .item-2 {
|
|
|
+ height: 40%;
|
|
|
+ grid-template-columns: 6fr 4fr;
|
|
|
+ gap: 20px;
|
|
|
+ :deep(table) {
|
|
|
+ border-collapse: separate !important;
|
|
|
+ border-spacing: 0 10px !important;
|
|
|
+ .zxm-table-thead {
|
|
|
+ height: 35px;
|
|
|
+ background-color: unset !important;
|
|
|
+ .zxm-table-cell {
|
|
|
+ color: #66ffff !important;
|
|
|
}
|
|
|
+ }
|
|
|
+ .zxm-table-tbody {
|
|
|
+ background-color: unset !important;
|
|
|
+ }
|
|
|
+ .zxm-table-cell {
|
|
|
+ border: none !important;
|
|
|
+ background: none !important;
|
|
|
+ padding: 0px;
|
|
|
+ }
|
|
|
+ tr {
|
|
|
+ background: var(--image-rank) no-repeat !important;
|
|
|
+ background-size: 100% 100% !important;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .item-3 {
|
|
|
+ height: 40%;
|
|
|
+ padding-bottom: 0;
|
|
|
+ :deep(table) {
|
|
|
+ border-collapse: collapse !important;
|
|
|
+ // border-spacing: 0 10px !important;
|
|
|
+ .zxm-table-thead {
|
|
|
+ height: 35px;
|
|
|
+ background-color: #0b2542 !important;
|
|
|
+ border: 1px solid #1f7eb5;
|
|
|
.zxm-table-cell {
|
|
|
border: none !important;
|
|
|
- background: none !important;
|
|
|
- padding: 0px;
|
|
|
- }
|
|
|
- tr {
|
|
|
- background: var(--image-rank) no-repeat !important;
|
|
|
- background-size: 100% 100% !important;
|
|
|
+ color: #37e0eb !important;
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- .item-3 {
|
|
|
- height: 40%;
|
|
|
- padding-bottom: 0;
|
|
|
- :deep(table) {
|
|
|
- border-collapse: collapse !important;
|
|
|
- // border-spacing: 0 10px !important;
|
|
|
- .zxm-table-thead {
|
|
|
- height: 35px;
|
|
|
- background-color: #0b2542 !important;
|
|
|
- border: 1px solid #1f7eb5;
|
|
|
- .zxm-table-cell {
|
|
|
- border: none !important;
|
|
|
- color: #37e0eb !important;
|
|
|
- }
|
|
|
+ .zxm-table-tbody {
|
|
|
+ .zxm-table-row:nth-child(odd) {
|
|
|
+ background-color: #0e3455;
|
|
|
}
|
|
|
- .zxm-table-tbody {
|
|
|
- .zxm-table-row:nth-child(odd) {
|
|
|
- background-color: #0e3455;
|
|
|
- }
|
|
|
|
|
|
- /* 偶数行背景色 */
|
|
|
- .zxm-table-row:nth-child(even) {
|
|
|
- background-color: #114268 !important;
|
|
|
- }
|
|
|
- .zxm-table-cell {
|
|
|
- border: none !important;
|
|
|
- background: none !important;
|
|
|
- }
|
|
|
+ /* 偶数行背景色 */
|
|
|
+ .zxm-table-row:nth-child(even) {
|
|
|
+ background-color: #114268 !important;
|
|
|
+ }
|
|
|
+ .zxm-table-cell {
|
|
|
+ border: none !important;
|
|
|
+ background: none !important;
|
|
|
}
|
|
|
}
|
|
|
- .box-container {
|
|
|
- overflow: hidden;
|
|
|
- }
|
|
|
- }
|
|
|
- .infoBox1 {
|
|
|
- background-color: var(--image-border1) no-repeat;
|
|
|
- }
|
|
|
- .infoBox2 {
|
|
|
- background-color: var(--image-border2) no-repeat;
|
|
|
}
|
|
|
- .infoBox3 {
|
|
|
- background-color: var(--image-border3) no-repeat;
|
|
|
- }
|
|
|
- .infoBox4 {
|
|
|
- background-color: var(--image-border4) no-repeat;
|
|
|
+ .box-container {
|
|
|
+ overflow: hidden;
|
|
|
}
|
|
|
}
|
|
|
- .wrapper-1 {
|
|
|
- grid-template-columns: repeat(5, 1fr);
|
|
|
- .data-item {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- position: relative;
|
|
|
- &::after {
|
|
|
- position: absolute;
|
|
|
- right: 1px;
|
|
|
- top: 5px;
|
|
|
- display: block;
|
|
|
- width: 2px;
|
|
|
- height: 100%;
|
|
|
- background: var(--image-split-line);
|
|
|
- content: '';
|
|
|
- }
|
|
|
- &:last-child::after {
|
|
|
- display: none;
|
|
|
- }
|
|
|
- .value {
|
|
|
- font-family: 'douyuFont';
|
|
|
- color: #66ffff;
|
|
|
- margin-top: 20px;
|
|
|
- }
|
|
|
- .item-icon {
|
|
|
- width: 80px;
|
|
|
- height: 80px;
|
|
|
- background-size: 100% 100%;
|
|
|
- margin-right: 15px;
|
|
|
- }
|
|
|
- .icon1 {
|
|
|
- background-image: url('/@/assets/images/dataCenter/infoCenter/icon1.png');
|
|
|
- }
|
|
|
- .icon2 {
|
|
|
- background-image: url('/@/assets/images/dataCenter/infoCenter/icon2.png');
|
|
|
- }
|
|
|
- .icon3 {
|
|
|
- background-image: url('/@/assets/images/dataCenter/infoCenter/icon3.png');
|
|
|
- }
|
|
|
- .icon4 {
|
|
|
- background-image: url('/@/assets/images/dataCenter/infoCenter/icon4.png');
|
|
|
- }
|
|
|
- .icon5 {
|
|
|
- background-image: url('/@/assets/images/dataCenter/infoCenter/icon5.png');
|
|
|
- }
|
|
|
- }
|
|
|
+ .infoBox1 {
|
|
|
+ background-color: var(--image-border1) no-repeat;
|
|
|
}
|
|
|
- .option-cont {
|
|
|
+ .infoBox2 {
|
|
|
+ background-color: var(--image-border2) no-repeat;
|
|
|
+ }
|
|
|
+ .infoBox3 {
|
|
|
+ background-color: var(--image-border3) no-repeat;
|
|
|
+ }
|
|
|
+ .infoBox4 {
|
|
|
+ background-color: var(--image-border4) no-repeat;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .wrapper-1 {
|
|
|
+ grid-template-columns: repeat(5, 1fr);
|
|
|
+ .data-item {
|
|
|
display: flex;
|
|
|
- justify-content: center;
|
|
|
align-items: center;
|
|
|
- .view-icon {
|
|
|
- width: 20px;
|
|
|
- height: 20px;
|
|
|
- background-image: url('/@/assets/images/dataCenter/infoCenter/view-icon.png');
|
|
|
- background-repeat: no-repeat;
|
|
|
- background-size: contain;
|
|
|
- background-position: center;
|
|
|
+ justify-content: center;
|
|
|
+ position: relative;
|
|
|
+ &::after {
|
|
|
+ position: absolute;
|
|
|
+ right: 1px;
|
|
|
+ top: 5px;
|
|
|
+ display: block;
|
|
|
+ width: 2px;
|
|
|
+ height: 100%;
|
|
|
+ background: var(--image-split-line);
|
|
|
+ content: '';
|
|
|
+ }
|
|
|
+ &:last-child::after {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+ .value {
|
|
|
+ font-family: 'douyuFont';
|
|
|
+ color: #66ffff;
|
|
|
+ margin-top: 20px;
|
|
|
}
|
|
|
+ .item-icon {
|
|
|
+ width: 80px;
|
|
|
+ height: 80px;
|
|
|
+ background-size: 100% 100%;
|
|
|
+ margin-right: 15px;
|
|
|
+ }
|
|
|
+ .icon1 {
|
|
|
+ background-image: url('/@/assets/images/dataCenter/infoCenter/icon1.png');
|
|
|
+ }
|
|
|
+ .icon2 {
|
|
|
+ background-image: url('/@/assets/images/dataCenter/infoCenter/icon2.png');
|
|
|
+ }
|
|
|
+ .icon3 {
|
|
|
+ background-image: url('/@/assets/images/dataCenter/infoCenter/icon3.png');
|
|
|
+ }
|
|
|
+ .icon4 {
|
|
|
+ background-image: url('/@/assets/images/dataCenter/infoCenter/icon4.png');
|
|
|
+ }
|
|
|
+ .icon5 {
|
|
|
+ background-image: url('/@/assets/images/dataCenter/infoCenter/icon5.png');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .option-cont {
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ .view-icon {
|
|
|
+ width: 20px;
|
|
|
+ height: 20px;
|
|
|
+ background-image: url('/@/assets/images/dataCenter/infoCenter/view-icon.png');
|
|
|
+ background-repeat: no-repeat;
|
|
|
+ background-size: contain;
|
|
|
+ background-position: center;
|
|
|
}
|
|
|
}
|
|
|
+}
|
|
|
</style>
|