|
|
@@ -37,257 +37,278 @@
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
- import { onMounted, ref } from 'vue';
|
|
|
- import { BasicTable, useTable } from '/@/components/Table';
|
|
|
- import { Tabs, TabPane } from 'ant-design-vue';
|
|
|
- import MiniBoard from '/@/components/Configurable/detail/MiniBoard.vue';
|
|
|
- import { SvgIcon } from '/@/components/Icon';
|
|
|
- import { getMineData, getProvinceAlarm, getGoafData, getProvinceAlarmHistory, getEnfMineTreeData } from './airLeak.api';
|
|
|
- import formConfig from '/@/components/Form/src/jeecg/components/formCard/formConfig.vue';
|
|
|
- import JPopup from '/@/components/Form/src/jeecg/components/JPopup.vue';
|
|
|
- // 引入模拟数据
|
|
|
- import { columns, boardData, searchFormSchema, historicalMinesData } from './airLeakStatus.data';
|
|
|
+import { onMounted, ref } from 'vue';
|
|
|
+import { BasicTable, useTable } from '/@/components/Table';
|
|
|
+import { Tabs, TabPane } from 'ant-design-vue';
|
|
|
+import MiniBoard from '/@/components/Configurable/detail/MiniBoard.vue';
|
|
|
+import { SvgIcon } from '/@/components/Icon';
|
|
|
+import { getMineData, getProvinceAlarm, getProvinceAlarmNum, getGoafData, getProvinceAlarmHistory, getEnfMineTreeData } from './airLeak.api';
|
|
|
+import formConfig from '/@/components/Form/src/jeecg/components/formCard/formConfig.vue';
|
|
|
+import JPopup from '/@/components/Form/src/jeecg/components/JPopup.vue';
|
|
|
+// 引入模拟数据
|
|
|
+import { columns, searchFormSchema, historicalMinesData } from './airLeakStatus.data';
|
|
|
|
|
|
- // 激活的Tab页签
|
|
|
- const activeTab = ref('realtime');
|
|
|
- //煤矿列表数据
|
|
|
- const deviceOptions = ref([]);
|
|
|
- const goafOptions = ref([]);
|
|
|
- const mineID = ref('');
|
|
|
- const minesData = ref([]);
|
|
|
- const mineCode = ref('');
|
|
|
- const goafId = ref('');
|
|
|
- const alarmFiled = ref('');
|
|
|
- const historyData = ref([]);
|
|
|
- const lawDeptOptions = ref([]);
|
|
|
- // 注册实时数据表格
|
|
|
- const [registerTable] = useTable({
|
|
|
- dataSource: minesData,
|
|
|
- title: '密闭漏风状态判定',
|
|
|
- api: getProvinceAlarm,
|
|
|
- columns,
|
|
|
- formConfig: {
|
|
|
- labelWidth: 120,
|
|
|
- schemas: [
|
|
|
- {
|
|
|
- label: '煤矿名称',
|
|
|
- field: 'mineCode', // 对应组件的value.mineCode(最终传给Table的查询参数)
|
|
|
- component: 'MineCascader', // 自定义组件名
|
|
|
- colProps: { span: 6 },
|
|
|
- rules: [],
|
|
|
- },
|
|
|
- ],
|
|
|
- showAdvancedButton: false,
|
|
|
- schemaGroupNames: ['常规查询'],
|
|
|
- },
|
|
|
- pagination: false,
|
|
|
- striped: false,
|
|
|
- useSearchForm: true,
|
|
|
- bordered: true,
|
|
|
- showIndexColumn: false,
|
|
|
- canResize: false,
|
|
|
- actionColumn: {
|
|
|
- width: 60,
|
|
|
- title: '操作',
|
|
|
- dataIndex: 'action',
|
|
|
- slots: { customRender: 'action' },
|
|
|
- },
|
|
|
- });
|
|
|
+// 激活的Tab页签
|
|
|
+const activeTab = ref('realtime');
|
|
|
+//煤矿列表数据
|
|
|
+const deviceOptions = ref([]);
|
|
|
+const goafOptions = ref([]);
|
|
|
+const boardData = ref([
|
|
|
+ { label: '存在风险情况数量', value: 0 },
|
|
|
+ { label: '闭内气体涌出', value: 0 },
|
|
|
+ { label: '闭外气体涌出', value: 0 },
|
|
|
+]);
|
|
|
+const minesData = ref([]);
|
|
|
+const mineCode = ref('');
|
|
|
+const goafId = ref('');
|
|
|
+const alarmFiled = ref('');
|
|
|
+const historyData = ref([]);
|
|
|
+const lawDeptOptions = ref([]);
|
|
|
+// 注册实时数据表格
|
|
|
+const [registerTable] = useTable({
|
|
|
+ dataSource: minesData,
|
|
|
+ title: '密闭漏风状态判定',
|
|
|
+ api: getProvinceAlarm,
|
|
|
+ columns,
|
|
|
+ formConfig: {
|
|
|
+ labelWidth: 120,
|
|
|
+ schemas: [
|
|
|
+ {
|
|
|
+ label: '煤矿名称',
|
|
|
+ field: 'mineCode', // 对应组件的value.mineCode(最终传给Table的查询参数)
|
|
|
+ component: 'MineCascader', // 自定义组件名
|
|
|
+ colProps: { span: 6 },
|
|
|
+ rules: [],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ showAdvancedButton: false,
|
|
|
+ schemaGroupNames: ['常规查询'],
|
|
|
+ },
|
|
|
+ pagination: false,
|
|
|
+ striped: false,
|
|
|
+ useSearchForm: true,
|
|
|
+ bordered: true,
|
|
|
+ showIndexColumn: false,
|
|
|
+ canResize: false,
|
|
|
+ actionColumn: {
|
|
|
+ width: 60,
|
|
|
+ title: '操作',
|
|
|
+ dataIndex: 'action',
|
|
|
+ slots: { customRender: 'action' },
|
|
|
+ },
|
|
|
+});
|
|
|
|
|
|
- // 注册历史数据表格
|
|
|
- const [registerHistoryTable] = useTable({
|
|
|
- dataSource: historyData,
|
|
|
- columns,
|
|
|
- formConfig: {
|
|
|
- labelWidth: 120,
|
|
|
- schemas: [
|
|
|
- {
|
|
|
- label: '查询煤矿',
|
|
|
- field: 'mineCode',
|
|
|
- component: 'Select',
|
|
|
- defaultValue: deviceOptions.value[0] ? deviceOptions.value[0]['value'] : '',
|
|
|
- componentProps: {
|
|
|
- showSearch: true,
|
|
|
- filterOption: (input: string, option: any) => {
|
|
|
- return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
|
|
|
- },
|
|
|
- options: deviceOptions,
|
|
|
- onChange: async (e, option) => {
|
|
|
- mineCode.value = e;
|
|
|
- await getGoafDataList(e);
|
|
|
- },
|
|
|
- },
|
|
|
- colProps: {
|
|
|
- span: 6,
|
|
|
+// 注册历史数据表格
|
|
|
+const [registerHistoryTable] = useTable({
|
|
|
+ dataSource: historyData,
|
|
|
+ columns,
|
|
|
+ api: getProvinceAlarmHistory,
|
|
|
+ formConfig: {
|
|
|
+ labelWidth: 120,
|
|
|
+ schemas: [
|
|
|
+ {
|
|
|
+ label: '开始时间',
|
|
|
+ field: 'startTime',
|
|
|
+ component: 'DatePicker',
|
|
|
+ componentProps: {
|
|
|
+ showTime: true,
|
|
|
+ // valueFormat: 'YYYY-MM-DD HH:mm:ss',
|
|
|
+ placeholder: '请选择开始时间',
|
|
|
+ },
|
|
|
+ colProps: { span: 6 }, // 占比可根据布局调整
|
|
|
+ rules: [{ required: true, message: '请选择开始时间' }],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '结束时间',
|
|
|
+ field: 'endTime',
|
|
|
+ component: 'DatePicker',
|
|
|
+ componentProps: {
|
|
|
+ showTime: true,
|
|
|
+ // valueFormat: 'YYYY-MM-DD HH:mm:ss',
|
|
|
+ placeholder: '请选择结束时间',
|
|
|
+ },
|
|
|
+ colProps: { span: 6 },
|
|
|
+ rules: [{ required: true, message: '请选择结束时间' }],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '煤矿名称',
|
|
|
+ field: 'mineCode', // 对应组件的value.mineCode(最终传给Table的查询参数)
|
|
|
+ component: 'MineCascader', // 自定义组件名
|
|
|
+ componentProps: {
|
|
|
+ onChange: async (e, option) => {
|
|
|
+ mineCode.value = e;
|
|
|
+ await getGoafDataList(e);
|
|
|
},
|
|
|
},
|
|
|
- {
|
|
|
- label: '采空区查询',
|
|
|
- field: 'goafId',
|
|
|
- component: 'Select',
|
|
|
- defaultValue: goafOptions.value[0] ? goafOptions.value[0]['value'] : '',
|
|
|
- componentProps: {
|
|
|
- showSearch: true,
|
|
|
- filterOption: (input: string, option: any) => {
|
|
|
- return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
|
|
|
- },
|
|
|
- options: goafOptions,
|
|
|
- onChange: async (e, option) => {
|
|
|
- goafId.value = e;
|
|
|
- await fetchAlarmData(e);
|
|
|
- },
|
|
|
+ colProps: { span: 6 },
|
|
|
+ rules: [],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '采空区查询',
|
|
|
+ field: 'goafId',
|
|
|
+ component: 'Select',
|
|
|
+ defaultValue: goafOptions.value[0] ? goafOptions.value[0]['value'] : '',
|
|
|
+ componentProps: {
|
|
|
+ showSearch: true,
|
|
|
+ filterOption: (input: string, option: any) => {
|
|
|
+ return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
|
|
|
},
|
|
|
- colProps: {
|
|
|
- span: 6,
|
|
|
+ options: goafOptions,
|
|
|
+ onChange: async (e, option) => {
|
|
|
+ goafId.value = e;
|
|
|
},
|
|
|
},
|
|
|
- {
|
|
|
- field: 'alarmFiled',
|
|
|
- label: '预警字段',
|
|
|
- component: 'Select',
|
|
|
- componentProps: {
|
|
|
- options: [
|
|
|
- { label: '甲烷', value: 'ch4Val' },
|
|
|
- { label: '氧气', value: 'o2Val' },
|
|
|
- { label: '一氧化碳', value: 'coVal' },
|
|
|
- { label: '二氧化碳', value: 'co2Val' },
|
|
|
- { label: '乙烯', value: 'c2h4Val' },
|
|
|
- { label: '乙炔', value: 'c2h2Val' },
|
|
|
- { label: '压差', value: 'sourcePressure' },
|
|
|
- { label: '温度', value: 'temperature' },
|
|
|
- ],
|
|
|
- onChange: async (e, option) => {
|
|
|
- alarmFiled.value = e;
|
|
|
- await getAlarmHistory(e);
|
|
|
- },
|
|
|
- },
|
|
|
- colProps: { span: 6 },
|
|
|
+ colProps: {
|
|
|
+ span: 6,
|
|
|
},
|
|
|
- ],
|
|
|
- showAdvancedButton: false,
|
|
|
- },
|
|
|
- pagination: false,
|
|
|
- striped: false,
|
|
|
- useSearchForm: true,
|
|
|
- bordered: true,
|
|
|
- showIndexColumn: false,
|
|
|
- canResize: false,
|
|
|
- actionColumn: {
|
|
|
- width: 60,
|
|
|
- title: '操作',
|
|
|
- dataIndex: 'action',
|
|
|
- slots: { customRender: 'action' },
|
|
|
- fixed: undefined,
|
|
|
- },
|
|
|
- });
|
|
|
+ },
|
|
|
+ {
|
|
|
+ field: 'alarmFiled',
|
|
|
+ label: '预警字段',
|
|
|
+ component: 'Select',
|
|
|
+ componentProps: {
|
|
|
+ options: [
|
|
|
+ { label: '甲烷', value: 'ch4Val' },
|
|
|
+ { label: '氧气', value: 'o2Val' },
|
|
|
+ { label: '一氧化碳', value: 'coVal' },
|
|
|
+ { label: '二氧化碳', value: 'co2Val' },
|
|
|
+ { label: '乙烯', value: 'c2h4Val' },
|
|
|
+ { label: '乙炔', value: 'c2h2Val' },
|
|
|
+ { label: '压差', value: 'sourcePressure' },
|
|
|
+ { label: '温度', value: 'temperature' },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ colProps: { span: 6 },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ showAdvancedButton: false,
|
|
|
+ schemaGroupNames: ['常规查询'],
|
|
|
+ },
|
|
|
+ pagination: false,
|
|
|
+ striped: false,
|
|
|
+ useSearchForm: true,
|
|
|
+ bordered: true,
|
|
|
+ showIndexColumn: false,
|
|
|
+ canResize: false,
|
|
|
+ actionColumn: {
|
|
|
+ width: 60,
|
|
|
+ title: '操作',
|
|
|
+ dataIndex: 'action',
|
|
|
+ slots: { customRender: 'action' },
|
|
|
+ fixed: undefined,
|
|
|
+ },
|
|
|
+});
|
|
|
|
|
|
- // 弹窗引用
|
|
|
- const realtimeModalRef = ref(null);
|
|
|
- const historyModalRef = ref(null);
|
|
|
+// 弹窗引用
|
|
|
+const realtimeModalRef = ref(null);
|
|
|
+const historyModalRef = ref(null);
|
|
|
|
|
|
- // 打开弹窗方法(区分实时/历史)
|
|
|
- const openModal = (record, type) => {
|
|
|
- if (type === 'realtime') {
|
|
|
- // 可向实时弹窗传递当前记录数据
|
|
|
- realtimeModalRef.value?.showModal(record);
|
|
|
- } else {
|
|
|
- // 可向历史弹窗传递当前记录数据
|
|
|
- historyModalRef.value?.showModal(record);
|
|
|
- }
|
|
|
- };
|
|
|
- async function fetchAlarmData(id) {
|
|
|
- const params = {
|
|
|
- // 填写所需参数
|
|
|
- alarmType: 'leakageAlarm',
|
|
|
- mineId: id,
|
|
|
- pageNo: 1,
|
|
|
- pageSize: 50,
|
|
|
- };
|
|
|
- const result = await getProvinceAlarm(params);
|
|
|
- minesData.value = result.records;
|
|
|
+// 打开弹窗方法(区分实时/历史)
|
|
|
+const openModal = (record, type) => {
|
|
|
+ if (type === 'realtime') {
|
|
|
+ // 可向实时弹窗传递当前记录数据
|
|
|
+ realtimeModalRef.value?.showModal(record);
|
|
|
+ } else {
|
|
|
+ // 可向历史弹窗传递当前记录数据
|
|
|
+ historyModalRef.value?.showModal(record);
|
|
|
}
|
|
|
- async function getAlarmHistory(id) {
|
|
|
- const params = {
|
|
|
- // 填写所需参数
|
|
|
- alarmType: 'leakageAlarm',
|
|
|
- mineCode: mineCode.value,
|
|
|
- goafId: goafId.value,
|
|
|
- alarmFiled: id,
|
|
|
- };
|
|
|
- const result = await getProvinceAlarmHistory(params);
|
|
|
- historyData.value = result.records;
|
|
|
- }
|
|
|
- const getMineDataList = async () => {
|
|
|
- const params = {
|
|
|
- pageNo: 1,
|
|
|
- pageSize: 50,
|
|
|
- };
|
|
|
- const response = await getMineData(params);
|
|
|
- deviceOptions.value = response.records.map((item, index) => {
|
|
|
- return {
|
|
|
- label: item['mineName'],
|
|
|
- value: item['mineCode'],
|
|
|
- };
|
|
|
- });
|
|
|
+};
|
|
|
+async function fetchAlarmData(id) {
|
|
|
+ const params = {
|
|
|
+ // 填写所需参数
|
|
|
+ alarmType: 'leakageAlarm',
|
|
|
+ mineId: id,
|
|
|
+ pageNo: 1,
|
|
|
+ pageSize: 50,
|
|
|
};
|
|
|
- const getGoafDataList = async (mineId) => {
|
|
|
- const params = {
|
|
|
- mineCode: mineId,
|
|
|
+ const result = await getProvinceAlarm(params);
|
|
|
+ minesData.value = result.records;
|
|
|
+}
|
|
|
+async function getAlarmTotalData() {
|
|
|
+ const params = {
|
|
|
+ alarmType: 'leakageAlarm',
|
|
|
+ };
|
|
|
+ const result = await getProvinceAlarmNum(params);
|
|
|
+ boardData.value[1].value = result.alarmLevel1;
|
|
|
+ boardData.value[2].value = result.alarmLevel2;
|
|
|
+ boardData.value[0].value = result.alarmLevel1 + result.alarmLevel2;
|
|
|
+}
|
|
|
+// async function getAlarmHistory() {
|
|
|
+// const result = await getProvinceAlarmHistory();
|
|
|
+// historyData.value = result.records;
|
|
|
+// }
|
|
|
+const getMineDataList = async () => {
|
|
|
+ const params = {
|
|
|
+ pageNo: 1,
|
|
|
+ pageSize: 50,
|
|
|
+ };
|
|
|
+ const response = await getMineData(params);
|
|
|
+ deviceOptions.value = response.records.map((item, index) => {
|
|
|
+ return {
|
|
|
+ label: item['mineName'],
|
|
|
+ value: item['mineCode'],
|
|
|
};
|
|
|
- const response = await getGoafData(params);
|
|
|
- goafOptions.value = response.records.map((item, index) => {
|
|
|
- return {
|
|
|
- label: item['devicePos'],
|
|
|
- value: item['goafId'],
|
|
|
- };
|
|
|
- });
|
|
|
+ });
|
|
|
+};
|
|
|
+const getGoafDataList = async (mineId) => {
|
|
|
+ const params = {
|
|
|
+ mineCode: mineId,
|
|
|
};
|
|
|
- async function getEnfMineData() {
|
|
|
- const res = await getEnfMineTreeData();
|
|
|
- lawDeptOptions.value = res.map((item) => ({
|
|
|
- label: item.departName,
|
|
|
- value: item.id,
|
|
|
- rawdata: item,
|
|
|
- }));
|
|
|
- console.log(lawDeptOptions.value, '11111111');
|
|
|
- // deviceOptions.value = res;
|
|
|
- }
|
|
|
- onMounted(() => {
|
|
|
- // 页面挂载时的逻辑
|
|
|
- getMineDataList();
|
|
|
- getEnfMineData();
|
|
|
+ const response = await getGoafData(params);
|
|
|
+ goafOptions.value = response.map((item, index) => {
|
|
|
+ return {
|
|
|
+ label: item['devicePos'],
|
|
|
+ value: item['deviceCode'],
|
|
|
+ };
|
|
|
});
|
|
|
+};
|
|
|
+async function getEnfMineData() {
|
|
|
+ const res = await getEnfMineTreeData();
|
|
|
+ lawDeptOptions.value = res.map((item) => ({
|
|
|
+ label: item.departName,
|
|
|
+ value: item.id,
|
|
|
+ rawdata: item,
|
|
|
+ }));
|
|
|
+ console.log(lawDeptOptions.value, '11111111');
|
|
|
+ // deviceOptions.value = res;
|
|
|
+}
|
|
|
+onMounted(() => {
|
|
|
+ // 页面挂载时的逻辑
|
|
|
+ getMineDataList();
|
|
|
+ getEnfMineData();
|
|
|
+ getAlarmTotalData();
|
|
|
+});
|
|
|
</script>
|
|
|
|
|
|
<style lang="less" scoped>
|
|
|
- .monitoring-page {
|
|
|
- padding: 16px;
|
|
|
- }
|
|
|
- .board-info {
|
|
|
- display: flex;
|
|
|
- padding: 10px;
|
|
|
- background-color: #fff;
|
|
|
- margin: 0 10px;
|
|
|
- gap: 10px;
|
|
|
- box-sizing: border-box;
|
|
|
- }
|
|
|
- .board-item {
|
|
|
- flex: 1;
|
|
|
- box-sizing: border-box;
|
|
|
- }
|
|
|
- .action-btn {
|
|
|
- cursor: pointer;
|
|
|
- border: none;
|
|
|
- padding: 4px;
|
|
|
- }
|
|
|
- .action-icon {
|
|
|
- width: 16px;
|
|
|
- height: 16px;
|
|
|
- }
|
|
|
- :deep(.jeecg-basic-table-form-container .ant-form) {
|
|
|
- border: none !important;
|
|
|
- }
|
|
|
- :where(.css-dev-only-do-not-override-x9w3vz).ant-form-item .ant-form-item-label {
|
|
|
- margin-top: 10px !important;
|
|
|
- }
|
|
|
+.monitoring-page {
|
|
|
+ padding: 16px;
|
|
|
+}
|
|
|
+.board-info {
|
|
|
+ display: flex;
|
|
|
+ padding: 10px;
|
|
|
+ background-color: #fff;
|
|
|
+ margin: 0 10px;
|
|
|
+ gap: 10px;
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+.board-item {
|
|
|
+ flex: 1;
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+.action-btn {
|
|
|
+ cursor: pointer;
|
|
|
+ border: none;
|
|
|
+ padding: 4px;
|
|
|
+}
|
|
|
+.action-icon {
|
|
|
+ width: 16px;
|
|
|
+ height: 16px;
|
|
|
+}
|
|
|
+:deep(.jeecg-basic-table-form-container .ant-form) {
|
|
|
+ border: none !important;
|
|
|
+}
|
|
|
+:where(.css-dev-only-do-not-override-x9w3vz).ant-form-item .ant-form-item-label {
|
|
|
+ margin-top: 10px !important;
|
|
|
+}
|
|
|
</style>
|