You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
5.1 KiB
166 lines
5.1 KiB
<script lang="ts" setup>
|
|
import { onMounted, onUnmounted, ref } from 'vue'
|
|
import { Space } from 'ant-design-vue'
|
|
import { columns, searchFormSchema } from '../exa.data'
|
|
import EXAModal from './EXAModal.vue'
|
|
import CreateBatchModal from './CreateBatchModal.vue'
|
|
|
|
import HistoryModal from './HistoryModal.vue'
|
|
import { useI18n } from '@/hooks/web/useI18n'
|
|
import { useMessage } from '@/hooks/web/useMessage'
|
|
import { useModal } from '@/components/Modal'
|
|
import { IconEnum } from '@/enums/appEnum'
|
|
import { BasicTable, TableAction, useTable } from '@/components/Table'
|
|
import type { RoleExportReqVO } from '@/api/system/role'
|
|
import { deletePoint, getEXAPage, getExaNow } from '@/api/alert/exa'
|
|
|
|
defineOptions({ name: 'EXAConfig' })
|
|
|
|
const { t } = useI18n()
|
|
const { createConfirm, createMessage } = useMessage()
|
|
const [registerModal, { openModal }] = useModal()
|
|
const [registerCreateBatchModal, { openModal: openCreateBatchModal }] = useModal()
|
|
|
|
const [registerHistoryModal, { openModal: openHistoryModal }] = useModal()
|
|
const [registerTable, { getForm, reload, getDataSource, updateTableDataRecord }] = useTable({
|
|
title: '测点列表',
|
|
api: getEXAPage,
|
|
rowKey: 'serialNumber',
|
|
immediate: false,
|
|
columns,
|
|
formConfig: {
|
|
labelWidth: 150,
|
|
schemas: searchFormSchema,
|
|
showResetButton: false,
|
|
actionColOptions: {
|
|
span: 6,
|
|
},
|
|
},
|
|
useSearchForm: true,
|
|
showTableSetting: true,
|
|
showIndexColumn: false,
|
|
actionColumn: {
|
|
width: 80,
|
|
title: t('common.action'),
|
|
dataIndex: 'action',
|
|
fixed: 'right',
|
|
},
|
|
})
|
|
|
|
async function getNow() {
|
|
const params = getDataSource()
|
|
params.forEach((item: any) => {
|
|
// 对数组中的每个元素执行异步操作
|
|
getExaNow(item.itemName).then((result) => {
|
|
updateTableDataRecord(item.serialNumber, Object.assign(item, { value: result }))
|
|
})
|
|
})
|
|
}
|
|
|
|
let timerId
|
|
onMounted(() => {
|
|
// 启动定时器,每5秒刷新一次
|
|
timerId = setInterval(() => {
|
|
getNow()
|
|
}, 5000) // 每5秒执行一次[^1]
|
|
})
|
|
|
|
onUnmounted(() => {
|
|
// 组件销毁时清除定时器
|
|
clearInterval(timerId)
|
|
})
|
|
function handleCreate() {
|
|
openModal(true, {})
|
|
}
|
|
function handleCreateBatch() {
|
|
openCreateBatchModal(true, {})
|
|
}
|
|
const itemName = ref<string>()
|
|
const legendName = ref<string[]>()
|
|
function handleHistory(record: Recordable) {
|
|
itemName.value = record.itemName
|
|
legendName.value = []
|
|
legendName.value.push(`${record.descriptor}-${record.itemName}`)
|
|
openHistoryModal(true, { record })
|
|
}
|
|
async function handleExport() {
|
|
createConfirm({
|
|
title: t('common.exportTitle'),
|
|
iconType: 'warning',
|
|
content: t('common.exportMessage'),
|
|
async onOk() {
|
|
await exportRole(getForm().getFieldsValue() as RoleExportReqVO)
|
|
createMessage.success(t('common.exportSuccessText'))
|
|
},
|
|
})
|
|
}
|
|
|
|
async function handleDelete(record: Recordable) {
|
|
await deletePoint(record.itemName)
|
|
createMessage.success(t('common.delSuccessText'))
|
|
reload()
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<div>
|
|
<BasicTable @register="registerTable">
|
|
<template #form-advanceBefore>
|
|
<Space style="margin-right: 10%;">
|
|
<a-button v-auth="['system:role:create']" type="primary" :pre-icon="IconEnum.ADD" @click="handleCreate">
|
|
{{ t('action.create') }}
|
|
</a-button>
|
|
<a-button v-auth="['system:role:create']" type="primary" :pre-icon="IconEnum.ADDS" @click="handleCreateBatch">
|
|
{{ t('action.createBatch') }}
|
|
</a-button>
|
|
</Space>
|
|
</template>
|
|
|
|
<template #value="{ record }">
|
|
<a class="click-status" @click="handleHistory(record)">
|
|
{{ record.value }}
|
|
</a>
|
|
<!-- <SlidersOutlined class="click-status" /> -->
|
|
</template>
|
|
<template #toolbar>
|
|
<!-- <a-button v-auth="['system:role:create']" type="primary" :pre-icon="IconEnum.ADD" @click="handleCreate">
|
|
{{ t('action.create') }}
|
|
</a-button>
|
|
<a-button v-auth="['system:role:create']" type="primary" :pre-icon="IconEnum.ADDS" @click="handleCreateBatch">
|
|
{{ t('action.createBatch') }}
|
|
</a-button> -->
|
|
<!-- <a-button v-auth="['system:role:create']" :pre-icon="IconEnum.EXPORT" @click="handleExport">
|
|
{{ t('action.export') }}
|
|
</a-button> -->
|
|
</template>
|
|
<template #bodyCell="{ column, record }">
|
|
<template v-if="column.key === 'action'">
|
|
<TableAction
|
|
:actions="[{
|
|
icon: IconEnum.DELETE,
|
|
danger: true,
|
|
label: t('action.delete'),
|
|
auth: 'alert:exa:delete',
|
|
popConfirm: {
|
|
title: t('common.delMessage'),
|
|
placement: 'left',
|
|
confirm: handleDelete.bind(null, record),
|
|
},
|
|
},
|
|
]"
|
|
/>
|
|
</template>
|
|
</template>
|
|
</BasicTable>
|
|
<EXAModal @register="registerModal" @success="reload" />
|
|
<CreateBatchModal @register="registerCreateBatchModal" @success="reload" />
|
|
<HistoryModal :item-name="itemName" :legend-name="legendName" @register="registerHistoryModal" />
|
|
</div>
|
|
</template>
|
|
|
|
<style lang="less" scoped>
|
|
:deep(.value) {
|
|
font-weight:bold;
|
|
color: #0B55A4
|
|
}
|
|
</style>
|
|
|