| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- <!-- eslint-disable vue/multi-word-component-names -->
- <template>
- <!-- 新增Tabs组件区分实时/历史数据 -->
- <Tabs v-model:activeKey="activeTab" type="line" class="common-page-tabs">
- <TabPane tab="实时监测" key="realtime">
- <div class="board-info">
- <MiniBoard
- v-for="(item, index) in boardData"
- :key="index"
- type="A"
- :label="item.label"
- :value="item.value"
- layout="label-top"
- class="board-item"
- />
- </div>
- <!-- 实时数据表格 -->
- <BasicTable @register="registerTable" :scroll="{ x: 'max-content' }" :style="{ padding: 0 }">
- <!-- 核心:判断record是否有有效数据,无则显示- -->
- <template #action="{ record }">
- <button @click="openModal(record)" class="resolved-btn" title="解决">
- <SvgIcon name="chart" />
- </button>
- </template>
- <template #empty>
- <!-- 无数据时显示-,样式居中对齐 -->
- <span class="empty-placeholder">-</span>
- </template>
- </BasicTable>
- </TabPane>
- <TabPane tab="历史数据" key="history">
- <!-- 历史数据表格 -->
- <BasicTable @register="registerHistoryTable" :scroll="{ x: 'max-content' }" :style="{ padding: 0 }">
- <!-- <template #action="{ record }">
- <div class="action-buttons">
- <button @click="openModal(record, 'history')" class="action-btn">
- <SvgIcon name="details" />
- </button>
- </div>
- </template> -->
- <template #resetBefore>
- <a-button type="default" class="ml-8px" preIcon="mdi:download" @click="onExportXls"> 导出 </a-button>
- </template>
- <template #form-goaf-select>
- <a-select v-model:value="goafId" :options="goafOptions" placeholder="请选择" />
- </template>
- </BasicTable>
- </TabPane>
- </Tabs>
- <!-- 弹窗组件 -->
- <RealtimeDetailsModal @register="registerRealtimeModal" />
- </template>
- <script setup lang="ts">
- import { ref } from 'vue';
- import { BasicTable, useTable } from '/@/components/Table';
- import { Tabs, TabPane, message } from 'ant-design-vue';
- import MiniBoard from '/@/components/Configurable/detail/MiniBoard.vue';
- import { SvgIcon } from '/@/components/Icon';
- // 引入模拟数据
- import { columns } from './sealRiskJudgeAnalysis.data';
- import { getProvinceAlarm, getProvinceAlarmHistory, getProvinceAlarmNum } from './sealRiskJudge.api';
- import RealtimeDetailsModal from '/@/views/monitor/sealedMonitor/components/RealtimeDetailsModal.vue';
- // import { useIntervalFn } from '@vueuse/core';
- import { useModal } from '/@/components/Modal';
- import { useInitForm } from '../../common/analysis';
- import { historicalFormSchema } from '/@/views/monitor/sealedMonitor/monitor.data';
- import { useListPage } from '/@/hooks/system/useListPage';
- // 激活的Tab页签
- const activeTab = ref('realtime');
- const { goafOptions, goafId, hiscode, initGoafOptions } = useInitForm();
- const boardData = ref([
- {
- label: '存在风险情况数量',
- value: '-',
- },
- {
- label: '低风险',
- value: '-',
- },
- {
- label: '一般风险',
- value: '-',
- },
- {
- label: '较高风险',
- value: '-',
- },
- {
- label: '高风险',
- value: '-',
- },
- ]);
- const wrappedGetMineData = (params) => {
- // 调用原接口
- return Promise.all([getAlarmTotalData(params), getProvinceAlarm(params)]).then(([__, res]) => res);
- };
- // 注册实时数据表格
- const [registerTable] = useTable({
- columns,
- api: wrappedGetMineData,
- formConfig: {
- labelWidth: 120,
- schemas: [
- {
- label: '煤矿名称',
- field: 'deptId',
- component: 'MineCascader', // 自定义组件名
- colProps: { span: 6 },
- rules: [],
- },
- ],
- showAdvancedButton: false,
- schemaGroupNames: ['常规查询'],
- },
- pagination: true,
- striped: true,
- useSearchForm: true,
- bordered: true,
- showIndexColumn: false,
- actionColumn: {
- width: 80,
- title: '详情',
- dataIndex: 'action',
- slots: { customRender: 'action' },
- fixed: undefined,
- },
- });
- // 注册历史数据表格
- const { tableContext, onExportXls } = useListPage({
- tableProps: {
- columns,
- // columns: historyColumns,
- api: (params) => {
- if (!goafId.value) {
- message.info('请先选择煤矿及老空区');
- return Promise.reject();
- }
- params.goafId = goafId.value;
- return getProvinceAlarmHistory(params);
- },
- formConfig: {
- model: { customField: hiscode },
- labelWidth: 120,
- schemas: [
- // {
- // label: '开始时间',
- // field: 'startTime',
- // component: 'DatePicker',
- // defaultValue: dayjs().add(-30, 'day').format('YYYY-MM-DD HH:mm:ss'),
- // componentProps: {
- // showTime: true,
- // placeholder: '请选择开始时间',
- // valueFormat: 'YYYY-MM-DD HH:mm:ss',
- // },
- // colProps: { span: 6 },
- // rules: [{ required: true, message: '请选择开始时间' }],
- // },
- // {
- // label: '结束时间',
- // field: 'endTime',
- // component: 'DatePicker',
- // defaultValue: dayjs(),
- // componentProps: {
- // showTime: true,
- // placeholder: '请选择结束时间',
- // valueFormat: 'YYYY-MM-DD HH:mm:ss',
- // },
- // colProps: { span: 6 },
- // rules: [{ required: true, message: '请选择结束时间' }],
- // },
- {
- label: '煤矿名称',
- field: 'customField',
- component: 'MineCascader', // 自定义组件名
- componentProps: {
- initFromStore: false,
- syncToStore: false,
- changeOnSelect: false,
- onChange: (e) => {
- historyTable.setLoading(true);
- initGoafOptions(e).finally(() => {
- historyTable.setLoading(false);
- });
- },
- },
- colProps: { span: 6 },
- rules: [],
- },
- ...historicalFormSchema,
- ],
- showAdvancedButton: false,
- schemaGroupNames: ['常规查询'],
- },
- pagination: true,
- striped: true,
- useSearchForm: true,
- bordered: true,
- showIndexColumn: true,
- showActionColumn: false,
- },
- exportConfig: {
- url: '/province/alarm/exportProvinceAlarmHistory',
- name: '历史数据',
- params: {
- alarmType: 'explosionAlarm',
- goafId,
- },
- },
- });
- const [registerHistoryTable, historyTable] = tableContext;
- // 弹窗引用
- const [registerRealtimeModal, { openModal: openRealtimeModal }] = useModal();
- // 打开弹窗方法(区分实时/历史)
- const openModal = (record) => {
- openRealtimeModal(true, record);
- // pause();
- };
- async function getAlarmTotalData(p) {
- const params = {
- ...p,
- alarmType: 'explosionAlarm',
- };
- const result = await getProvinceAlarmNum(params);
- boardData.value[1].value = result.alarmLevel1;
- boardData.value[2].value = result.alarmLevel2;
- boardData.value[3].value = result.alarmLevel3;
- boardData.value[4].value = result.alarmLevel4;
- boardData.value[0].value = result.alarmLevel1 + result.alarmLevel2 + result.alarmLevel3 + result.alarmLevel4;
- }
- // const { pause, resume } = useIntervalFn(() => reload({ silence: true }), 60000);
- </script>
- <style lang="less" scoped>
- @import url(../../common/board.less);
- </style>
|