From 5efcf83a4a67bf5cefbee480c58a697553f9f8de Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 01 八月 2025 17:32:51 +0800
Subject: [PATCH] 新增问题复发清清单界面
---
src/components/table/FYTable.vue | 3
src/api/fysp/dataproductApi.js | 20 ++++
src/api/index.js | 2
src/components/search-option/FYOptionTime.vue | 1
src/components.d.ts | 8 ++
src/views/fysp/data-product/base-data-product/PordProblemRecurrence.vue | 156 +++++++++++++++++++++++++++++++++++++++
src/constants/menu.js | 29 ++++---
src/router/index.js | 12 ++
8 files changed, 213 insertions(+), 18 deletions(-)
diff --git a/src/api/fysp/dataproductApi.js b/src/api/fysp/dataproductApi.js
index fbd31ce..7980a0f 100644
--- a/src/api/fysp/dataproductApi.js
+++ b/src/api/fysp/dataproductApi.js
@@ -18,7 +18,7 @@
}
// 鏂囨。宸插瓨鍦紝杩斿洖鏂囦欢鏁版嵁娴�
else {
- return res
+ return res;
// const name = Base64.decode(res.headers.get('filename'));
// const url = window.URL.createObjectURL(res.data);
// const link = document.createElement('a');
@@ -30,5 +30,23 @@
// window.URL.revokeObjectURL(url);
}
});
+ },
+
+ /**
+ * 鑾峰彇闂鏁存敼娓呭崟
+ */
+ fetchProbChangeList(option) {
+ return $fysp.post(`dataProduct/problemChange?`, option).then((res) => {
+ return res.data;
+ });
+ },
+
+ /**
+ * 鑾峰彇闂澶嶅彂娓呭崟
+ */
+ fetchProbRecurrence(option) {
+ return $fysp.post(`dataProduct/problemRecurrence?`, option).then((res) => {
+ return res.data;
+ });
}
};
diff --git a/src/api/index.js b/src/api/index.js
index a839aee..766ad71 100644
--- a/src/api/index.js
+++ b/src/api/index.js
@@ -1,7 +1,7 @@
import axios from 'axios';
import { ElMessage } from 'element-plus';
-const debug = false;
+const debug = true;
// let ip1 = 'http://47.100.191.150:9005/';
// let ip1_file = 'http://47.100.191.150:9005/';
diff --git a/src/components.d.ts b/src/components.d.ts
index 460929c..3b9ac0b 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -20,6 +20,7 @@
ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
ElButton: typeof import('element-plus/es')['ElButton']
+ ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup']
ElCalendar: typeof import('element-plus/es')['ElCalendar']
ElCard: typeof import('element-plus/es')['ElCard']
ElCascader: typeof import('element-plus/es')['ElCascader']
@@ -36,6 +37,9 @@
ElDialog: typeof import('element-plus/es')['ElDialog']
ElDivider: typeof import('element-plus/es')['ElDivider']
ElDrawer: typeof import('element-plus/es')['ElDrawer']
+ ElDropdown: typeof import('element-plus/es')['ElDropdown']
+ ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
+ ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
ElEmpty: typeof import('element-plus/es')['ElEmpty']
ElForm: typeof import('element-plus/es')['ElForm']
ElFormItem: typeof import('element-plus/es')['ElFormItem']
@@ -51,8 +55,11 @@
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElMenuItemGroup: typeof import('element-plus/es')['ElMenuItemGroup']
ElOption: typeof import('element-plus/es')['ElOption']
+ ElPageHeader: typeof import('element-plus/es')['ElPageHeader']
ElPagination: typeof import('element-plus/es')['ElPagination']
+ ElPopconfirm: typeof import('element-plus/es')['ElPopconfirm']
ElPopover: typeof import('element-plus/es')['ElPopover']
+ ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRow: typeof import('element-plus/es')['ElRow']
@@ -71,6 +78,7 @@
ElTag: typeof import('element-plus/es')['ElTag']
ElText: typeof import('element-plus/es')['ElText']
ElTooltip: typeof import('element-plus/es')['ElTooltip']
+ ElTransfer: typeof import('element-plus/es')['ElTransfer']
ElTree: typeof import('element-plus/es')['ElTree']
ElUpload: typeof import('element-plus/es')['ElUpload']
Footer: typeof import('./components/core/Footer.vue')['default']
diff --git a/src/components/search-option/FYOptionTime.vue b/src/components/search-option/FYOptionTime.vue
index b745a32..9008260 100644
--- a/src/components/search-option/FYOptionTime.vue
+++ b/src/components/search-option/FYOptionTime.vue
@@ -19,6 +19,7 @@
const MONTH = 'month';
const DATE = 'date';
const RANGE = 'datetimerange';
+const RANGE2 = 'daterange';
export default {
props: {
diff --git a/src/components/table/FYTable.vue b/src/components/table/FYTable.vue
index 478a48d..4a5d520 100644
--- a/src/components/table/FYTable.vue
+++ b/src/components/table/FYTable.vue
@@ -40,6 +40,7 @@
:cell-class-name="cellClassName"
@paste="handlePaste"
@sort-change="handleSortChange"
+ :show-overflow-tooltip="true"
border
>
<slot name="table-column" :size="fontSize"></slot>
@@ -219,7 +220,7 @@
mounted() {
this.tableHeight = this.calcTableHeight();
this.onSearch();
- }
+ },
};
</script>
diff --git a/src/constants/menu.js b/src/constants/menu.js
index a017de3..b234fcb 100644
--- a/src/constants/menu.js
+++ b/src/constants/menu.js
@@ -47,20 +47,25 @@
icon: 'DataAnalysis',
name: '鍩虹鏁版嵁浜у搧',
children: [
+ // {
+ // path: '/fysp/data-product/base/ProdScenseInfo',
+ // icon: 'Document',
+ // name: '鍦烘櫙娓呭崟',
+ // },
+ // {
+ // path: '/fysp/data-product/base/ProdMonitorTaskInfo',
+ // icon: 'Document',
+ // name: '鐩戠娓呭崟',
+ // },
+ // {
+ // path: '/fysp/data-product/base/ProdTreatmentDeviceInfo',
+ // icon: 'Document',
+ // name: '闃叉不璁惧娓呭崟',
+ // },
{
- path: '/fysp/data-product/ProdScenseInfo',
+ path: '/fysp/data-product/base/PordProblemRecurrence',
icon: 'Document',
- name: '鍦烘櫙娓呭崟',
- },
- {
- path: '/fysp/data-product/ProdMonitorTaskInfo',
- icon: 'Document',
- name: '鐩戠娓呭崟',
- },
- {
- path: '/fysp/data-product/ProdTreatmentDeviceInfo',
- icon: 'Document',
- name: '闃叉不璁惧娓呭崟',
+ name: '闂澶嶅彂娓呭崟',
},
]
},
diff --git a/src/router/index.js b/src/router/index.js
index 59aa0d9..9fe8550 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -170,21 +170,27 @@
{
// 鍩虹浜у搧-鍦烘櫙娓呭崟
name: 'ProdScenseInfo',
- path: '/fysp/data-product/ProdScenseInfo',
+ path: '/fysp/data-product/base/ProdScenseInfo',
component: () => import('@/views/fysp/data-product/base-data-product/ProdScenseInfo.vue')
},
{
// 鍩虹浜у搧-鐩戠娓呭崟
name: 'ProdMonitorTaskInfo',
- path: '/fysp/data-product/ProdMonitorTaskInfo',
+ path: '/fysp/data-product/base/ProdMonitorTaskInfo',
component: () => import('@/views/fysp/data-product/base-data-product/ProdMonitorTaskInfo.vue')
},
{
// 鍩虹浜у搧-闃叉不璁惧娓呭崟
name: 'ProdTreatmentDeviceInfo',
- path: '/fysp/data-product/ProdTreatmentDeviceInfo',
+ path: '/fysp/data-product/base/ProdTreatmentDeviceInfo',
component: () => import('@/views/fysp/data-product/base-data-product/ProdTreatmentDeviceInfo.vue')
},
+ {
+ // 鍩虹浜у搧-闂澶嶅彂娓呭崟
+ name: 'PordProblemRecurrence',
+ path: '/fysp/data-product/base/PordProblemRecurrence',
+ component: () => import('@/views/fysp/data-product/base-data-product/PordProblemRecurrence.vue')
+ },
/**********************************椋炵窘鐜***********************************************/
{
diff --git a/src/views/fysp/data-product/base-data-product/PordProblemRecurrence.vue b/src/views/fysp/data-product/base-data-product/PordProblemRecurrence.vue
new file mode 100644
index 0000000..72291e6
--- /dev/null
+++ b/src/views/fysp/data-product/base-data-product/PordProblemRecurrence.vue
@@ -0,0 +1,156 @@
+<template>
+ <FYTable
+ @search="onSearch"
+ :data="showData"
+ :pagination="false"
+ ref="tableRef"
+ >
+ <template #options>
+ <!-- 鍖哄幙 -->
+ <FYOptionLocation
+ :allOption="false"
+ :level="3"
+ :checkStrictly="false"
+ v-model:value="formSearch.locations"
+ ></FYOptionLocation>
+ <!-- 鍦烘櫙绫诲瀷 -->
+ <FYOptionScene
+ :allOption="false"
+ :type="2"
+ v-model:value="formSearch.scenetype"
+ ></FYOptionScene>
+ <!-- 鏃堕棿 -->
+ <FYOptionTime
+ :initValue="false"
+ type="daterange"
+ v-model:value="formSearch.timeArr"
+ style="width: 300px"
+ ></FYOptionTime>
+ </template>
+
+ <template #options-expand>
+ <el-radio-group v-model="radio">
+ <el-radio :value="1">鎸夐棶棰樺悕绉扮粺璁�</el-radio>
+ <el-radio :value="2">鎸夐棶棰樼被鍨嬬粺璁�</el-radio>
+ </el-radio-group>
+ </template>
+ <template #buttons> </template>
+ <template #table-column="{ size }">
+ <!-- <el-table-column fixed="left" label="搴忓彿" width="53">
+ <template #default="{ row }">
+ {{ row.index + 1 }}
+ </template>
+ </el-table-column> -->
+ <el-table-column fixed="left" label="鍞竴缂栧彿" width="90" prop="index">
+ </el-table-column>
+ <el-table-column
+ prop="sceneName"
+ :show-overflow-tooltip="true"
+ label="鍚嶇О"
+ >
+ </el-table-column>
+ <el-table-column prop="sceneType" label="绫诲瀷" width="60" />
+ <!-- <el-table-column prop="provinceName" label="鐪佷唤" width="90">
+ </el-table-column>
+ <el-table-column prop="cityName" label="鍩庡競" width="90">
+ </el-table-column> -->
+ <el-table-column prop="districtName" label="鍖哄幙" width="90">
+ </el-table-column>
+ <el-table-column prop="townName" label="琛楅晣" width="110">
+ </el-table-column>
+ <el-table-column prop="problemType" label="闂绫诲瀷" width="110">
+ </el-table-column>
+ <el-table-column
+ v-if="radio == 1"
+ prop="problemName"
+ label="闂鍚嶇О"
+ width="200"
+ >
+ </el-table-column>
+ <el-table-column prop="proNum" label="闂鏁�" width="70">
+ </el-table-column>
+ <el-table-column prop="changeNum" label="鏁存敼鏁�" width="70">
+ </el-table-column>
+ </template>
+ </FYTable>
+</template>
+<script setup>
+import { ref, computed } from 'vue';
+import dayjs from 'dayjs';
+import dataproductApi from '@/api/fysp/dataproductApi.js';
+
+const radio = ref(1);
+const tableRef = ref(null);
+const tableData = ref([]);
+const formSearch = ref({
+ locations: {},
+ scenetype: {},
+ timeArr: [dayjs().add(-1, 'M').date(1).toDate(), dayjs().toDate()]
+});
+
+const option = computed(() => {
+ const { locations, scenetype, timeArr } = formSearch.value;
+ return {
+ provinceCode: locations.pCode,
+ cityCode: locations.cCode,
+ districtCode: locations.dCode,
+ townCode: locations.tCode,
+ startTime: dayjs(timeArr[0]).format('YYYY-MM-DD HH:mm:ss'),
+ endTime: dayjs(timeArr[1])
+ .hour(23)
+ .minute(59)
+ .second(59)
+ .format('YYYY-MM-DD HH:mm:ss'),
+ sceneTypeId: scenetype.value
+ };
+});
+
+const showData = computed(() => {
+ let res = [];
+ switch (radio.value) {
+ case 1:
+ res = tableData.value;
+ break;
+ case 2:
+ tableData.value.forEach((tb) => {
+ const r = res.find((v) => {
+ return v.sceneName == tb.sceneName && v.problemType == tb.problemType;
+ });
+ if (r == undefined) {
+ res.push({ ...tb });
+ } else {
+ r.proNum += tb.proNum;
+ r.changeNum += tb.changeNum;
+ }
+ });
+ break;
+ default:
+ res = tableData.value;
+ break;
+ }
+ if (tableRef.value) {
+ tableRef.value.doLayout();
+ }
+ return res;
+});
+
+function onSearch(page, callback) {
+ fetchProbRecurrence().finally(() => callback());
+}
+
+function fetchProbRecurrence() {
+ return dataproductApi.fetchProbRecurrence(option.value).then((res) => {
+ tableData.value = res.data;
+ });
+}
+// function handleChange(value) {
+// switch (value) {
+// case 1:
+// break;
+// case 2:
+// break;
+// default:
+// break;
+// }
+// }
+</script>
--
Gitblit v1.9.3