src/views/data/channel/http/api/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/data/channel/http/api/tag/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/data/channel/kio/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/data/channel/kio/tag/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/data/channel/modbus/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/data/channel/modbus/tag/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/data/channel/opcda/tag/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/data/channel/opcua/tag/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/data/point/DaPointChart.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/views/data/channel/http/api/index.vue
@@ -146,7 +146,7 @@ /** TAG操作 */ const tagRef = ref() const openTagList = (id?: string, name?:string) => { const openTagList = (id?: string,name?: string) => { tagRef.value.open(id,name) } src/views/data/channel/http/api/tag/index.vue
@@ -26,11 +26,11 @@ </el-form-item> <el-form-item> <el-button @click="handleQuery"> <Icon icon="ep:search" class="mr-5px" /> <Icon icon="ep:search" class="mr-5px"/> 搜索 </el-button> <el-button @click="resetQuery"> <Icon icon="ep:refresh" class="mr-5px" /> <Icon icon="ep:refresh" class="mr-5px"/> 重置 </el-button> <el-button @@ -39,7 +39,7 @@ @click="openForm('create')" v-hasPermi="['data:channel-http:create']" > <Icon icon="ep:plus" class="mr-5px" /> <Icon icon="ep:plus" class="mr-5px"/> 新增 </el-button> <el-button @@ -47,7 +47,8 @@ plain @click="handleImport" v-hasPermi="['data:channel-http-tag:import']"> <Icon icon="ep:upload" /> 导入 <Icon icon="ep:upload"/> 导入 </el-button> <el-button type="success" @@ -55,8 +56,15 @@ @click="handleExport" :loading="exportLoading" v-hasPermi="['data:channel-http-tag:export']"> <Icon icon="ep:download" />导出 <Icon icon="ep:download"/> 导出 </el-button> </el-form-item> <el-form-item label="更新当前值" label-width="100px"> <el-switch v-model="queryParams.currentValue" active-color="#13ce66" inactive-color="#ff4949"/> </el-form-item> </el-form> </ContentWrap> @@ -94,6 +102,25 @@ <el-tag v-else size="small" type="danger">否</el-tag> </template> </el-table-column> <el-table-column prop="dataValue" label="数据值" header-align="center" align="center" :formatter="(row) => {if (row.dataValue === -2.0) {return '--';}return row.dataValue;}" /> <el-table-column prop="quality" label="数据质量" header-align="center" align="center" > <template #default="scope"> <el-tag v-if="scope.row.dataValue === Number(-2.0)" type="danger" size="small">bad </el-tag> <el-tag v-else size="small">good</el-tag> </template> </el-table-column> <el-table-column label="操作" align="center" min-width="110" fixed="right"> <template #default="scope"> <el-button @@ -124,126 +151,128 @@ /> </ContentWrap> <!-- 表单弹窗:添加/修改 --> <TagForm ref="formRef" @success="getList" /> <TagImportForm ref="importFormRef" @success="getList" /> <TagForm ref="formRef" @success="getList"/> <TagImportForm ref="importFormRef" @success="getList"/> </el-drawer> </template> <script lang="ts" setup> import type { DrawerProps } from 'element-plus' import * as HttpTagApi from "@/api/data/channel/http/tag"; import TagForm from './TagForm.vue' import download from "@/utils/download"; import {ref} from "vue"; import TagImportForm from '../../../common/tag/TagImportForm.vue' import type {DrawerProps} from 'element-plus' import * as HttpTagApi from "@/api/data/channel/http/tag"; import TagForm from './TagForm.vue' import download from "@/utils/download"; import {ref} from "vue"; import {onBeforeUnmount, onMounted} from "vue"; import TagImportForm from '../../../common/tag/TagImportForm.vue' defineOptions({name: 'HttpTag'}) defineOptions({name: 'HttpTag'}) const message = useMessage() // 消息弹窗 const {t} = useI18n() // 国际化 const message = useMessage() // 消息弹窗 const {t} = useI18n() // 国际化 const drawer = ref(false) const direction = ref<DrawerProps['direction']>('rtl') const loading = ref(true) // 列表的加载中 const total = ref(0) // 列表的总页数 const list = ref([]) // 列表的数据 const queryParams = reactive({ pageNo: 1, pageSize: 10, apiId: undefined, tagName: undefined, httpName: undefined }) const queryFormRef = ref() // 搜索的表单 const exportLoading = ref(false) // 导出的加载中 const drawer = ref(false) const direction = ref<DrawerProps['direction']>('rtl') const loading = ref(true) // 列表的加载中 const total = ref(0) // 列表的总页数 const list = ref([]) // 列表的数据 const queryParams = reactive({ pageNo: 1, pageSize: 10, apiId: undefined, tagName: undefined, httpName: undefined, currentValue:false, }) const queryFormRef = ref() // 搜索的表单 const exportLoading = ref(false) // 导出的加载中 /** 查询列表 */ const getList = async () => { loading.value = true try { const page = await HttpTagApi.getHttpTagPage(queryParams) list.value = page.list total.value = page.total } finally { loading.value = false /** 查询列表 */ const getList = async () => { loading.value = true try { const page = await HttpTagApi.getHttpTagPage(queryParams) list.value = page.list total.value = page.total } finally { loading.value = false } } } /** 搜索按钮操作 */ const handleQuery = () => { queryParams.pageNo = 1 getList() } /** 重置按钮操作 */ const resetQuery = () => { queryFormRef.value.resetFields() handleQuery() } /** 添加/修改操作 */ const formRef = ref() const openForm = (type: string, id?: number) => { formRef.value.open(type, id, queryParams.apiId) } /** 删除按钮操作 */ const handleDelete = async (id: number) => { try { // 删除的二次确认 await message.delConfirm() // 发起删除 await HttpTagApi.deleteHttpTag(id) message.success(t('common.delSuccess')) // 刷新列表 await getList() } catch { } } /** 打开弹窗 */ const open = async (apiId?: string, name?:string) => { resetForm() drawer.value = true queryParams.apiId = apiId queryParams.httpName = name if (apiId) { /** 搜索按钮操作 */ const handleQuery = () => { queryParams.pageNo = 1 getList() } } defineExpose({open}) // 提供 open 方法,用于打开弹窗 /** 重置表单 */ const resetForm = () => { queryParams.pageNo = 1 queryParams.pageSize = 10 queryParams.apiId = '' queryParams.tagName = '' } const handleClose = (done: () => void) => { drawer.value = false } /** tag导入 */ const importFormRef = ref() const handleImport = () => { if(queryParams.apiId){ importFormRef.value.open(queryParams.httpName, '/data/channel/http/tag/import',HttpTagApi.importHttpTagTemplate(), 'Http', queryParams.apiId) /** 重置按钮操作 */ const resetQuery = () => { queryFormRef.value.resetFields() handleQuery() } } /** 导出按钮操作 */ const handleExport = async () => { try { // 导出的二次确认 await message.exportConfirm() // 发起导出 exportLoading.value = true const data = await HttpTagApi.exportHttpTag(queryParams) download.excel(data, 'Http_' + queryParams.httpName + '_Tag列表.xlsx') } catch { } finally { exportLoading.value = false /** 添加/修改操作 */ const formRef = ref() const openForm = (type: string, id?: number) => { formRef.value.open(type, id, queryParams.apiId) } } /** 删除按钮操作 */ const handleDelete = async (id: number) => { try { // 删除的二次确认 await message.delConfirm() // 发起删除 await HttpTagApi.deleteHttpTag(id) message.success(t('common.delSuccess')) // 刷新列表 await getList() } catch { } } /** 打开弹窗 */ const open = async (apiId?: string, name?: string) => { resetForm() drawer.value = true queryParams.apiId = apiId queryParams.httpName = name if (apiId) { getList() } } defineExpose({open}) // 提供 open 方法,用于打开弹窗 /** 重置表单 */ const resetForm = () => { queryParams.pageNo = 1 queryParams.pageSize = 10 queryParams.apiId = '' queryParams.tagName = '' } const handleClose = (done: () => void) => { drawer.value = false } /** tag导入 */ const importFormRef = ref() const handleImport = () => { if (queryParams.apiId) { importFormRef.value.open(queryParams.httpName, '/data/channel/http/tag/import', HttpTagApi.importHttpTagTemplate(), 'Http', queryParams.apiId) } } /** 导出按钮操作 */ const handleExport = async () => { try { // 导出的二次确认 await message.exportConfirm() // 发起导出 exportLoading.value = true const data = await HttpTagApi.exportHttpTag(queryParams) download.excel(data, 'Http_' + queryParams.httpName + '_Tag列表.xlsx') } catch { } finally { exportLoading.value = false } } </script> src/views/data/channel/kio/index.vue
@@ -145,8 +145,8 @@ /** TAG操作 */ const tagRef = ref() const openTagList = (name?: string) => { tagRef.value.open(name) const openTagList = (id?: string,name?: string) => { tagRef.value.open(id,name) } /** 删除按钮操作 */ src/views/data/channel/kio/tag/index.vue
@@ -58,6 +58,12 @@ <Icon icon="ep:download" />导出 </el-button> </el-form-item> <el-form-item label="更新当前值" label-width="100px"> <el-switch v-model="queryParams.currentValue" active-color="#13ce66" inactive-color="#ff4949"/> </el-form-item> </el-form> </ContentWrap> <!-- 列表 --> @@ -92,6 +98,24 @@ <template #default="scope"> <el-tag v-if="scope.row.enabled === 1" size="small">是</el-tag> <el-tag v-else size="small" type="danger">否</el-tag> </template> </el-table-column> <el-table-column prop="dataValue" label="数据值" header-align="center" align="center" :formatter="(row) => {if (row.dataValue === -2.0) {return '--';}return row.dataValue;}" /> <el-table-column prop="quality" label="数据质量" header-align="center" align="center" > <template #default="scope"> <el-tag v-if="scope.row.dataValue === Number(-2.0)" type="danger" size="small">bad</el-tag> <el-tag v-else size="small">good</el-tag> </template> </el-table-column> <el-table-column label="操作" align="center" min-width="110" fixed="right"> @@ -133,8 +157,9 @@ import * as KioTagApi from "@/api/data/channel/kio/tag"; import TagForm from './TagForm.vue' import download from "@/utils/download"; import {ref} from "vue"; import TagImportForm from '../../common/tag/TagImportForm.vue' import {ref, onBeforeUnmount, onMounted} from "vue"; import * as HttpTagApi from "@/api/data/channel/http/tag"; defineOptions({name: 'KioTag'}) @@ -150,6 +175,8 @@ pageNo: 1, pageSize: 10, device: undefined, deviceId: undefined, currentValue:false, tagName: undefined }) const queryFormRef = ref() // 搜索的表单 @@ -200,10 +227,11 @@ } /** 打开弹窗 */ const open = async (device?: string) => { const open = async (deviceId?: string,device?: string) => { resetForm() drawer.value = true queryParams.device = device queryParams.deviceId = deviceId if (device) { getList() } @@ -244,4 +272,24 @@ exportLoading.value = false } } let intervalId; onMounted(async () => { // 创建定时器 intervalId = setInterval(async () => { if(queryParams.currentValue){ const page = await KioTagApi.getKioTagPage(queryParams) list.value = page.list total.value = page.total } }, 10000); }); // 在组件卸载时清除定时器 onBeforeUnmount(() => { if (intervalId) { clearInterval(intervalId); } }); </script> src/views/data/channel/modbus/index.vue
@@ -75,7 +75,7 @@ <el-button link type="primary" @click="openTagList(scope.row.name)" @click="openTagList(scope.row.id,scope.row.name)" v-hasPermi="['data:channel-modbus:update']" > TAG @@ -161,8 +161,8 @@ /** TAG操作 */ const tagRef = ref() const openTagList = (name?: string) => { tagRef.value.open(name) const openTagList = (id?: string,name?: string) => { tagRef.value.open(id,name) } /** 删除按钮操作 */ src/views/data/channel/modbus/tag/index.vue
@@ -35,11 +35,11 @@ </el-form-item> <el-form-item> <el-button @click="handleQuery"> <Icon icon="ep:search" class="mr-5px" /> <Icon icon="ep:search" class="mr-5px"/> 搜索 </el-button> <el-button @click="resetQuery"> <Icon icon="ep:refresh" class="mr-5px" /> <Icon icon="ep:refresh" class="mr-5px"/> 重置 </el-button> <el-button @@ -47,7 +47,7 @@ plain @click="openForm('create')" v-hasPermi="['data:channel-modbus:create']"> <Icon icon="ep:plus" class="mr-5px" /> <Icon icon="ep:plus" class="mr-5px"/> 新增 </el-button> <el-button @@ -55,7 +55,8 @@ plain @click="handleImport" v-hasPermi="['data:channel-modbus-tag:import']"> <Icon icon="ep:upload" /> 导入 <Icon icon="ep:upload"/> 导入 </el-button> <el-button type="success" @@ -63,8 +64,15 @@ @click="handleExport" :loading="exportLoading" v-hasPermi="['data:channel-modbus-tag:export']"> <Icon icon="ep:download" />导出 <Icon icon="ep:download"/> 导出 </el-button> </el-form-item> <el-form-item label="更新当前值" label-width="100px"> <el-switch v-model="queryParams.currentValue" active-color="#13ce66" inactive-color="#ff4949"/> </el-form-item> </el-form> </ContentWrap> @@ -120,6 +128,24 @@ <el-tag v-else size="small" type="danger">否</el-tag> </template> </el-table-column> <el-table-column prop="dataValue" label="数据值" header-align="center" align="center" :formatter="(row) => {if (row.dataValue === -2.0) {return '--';}return row.dataValue;}" /> <el-table-column prop="quality" label="数据质量" header-align="center" align="center" > <template #default="scope"> <el-tag v-if="scope.row.dataValue === Number(-2.0)" type="danger" size="small">bad</el-tag> <el-tag v-else size="small">good</el-tag> </template> </el-table-column> <el-table-column label="操作" align="center" min-width="110" fixed="right"> <template #default="scope"> <el-button @@ -150,17 +176,19 @@ /> </ContentWrap> <!-- 表单弹窗:添加/修改 --> <TagForm ref="formRef" @success="getList" /> <TagImportForm ref="importFormRef" @success="getList" /> <TagForm ref="formRef" @success="getList"/> <TagImportForm ref="importFormRef" @success="getList"/> </el-drawer> </template> <script lang="ts" setup> import type { DrawerProps } from 'element-plus' import type {DrawerProps} from 'element-plus' import * as ModBusTagApi from "@/api/data/channel/modbus/tag"; import TagForm from './TagForm.vue' import download from "@/utils/download"; import {ref} from "vue"; import TagImportForm from '../../common/tag/TagImportForm.vue' import {onBeforeUnmount, onMounted} from "vue"; import * as HttpTagApi from "@/api/data/channel/http/tag"; defineOptions({name: 'ModBusTag'}) @@ -175,8 +203,10 @@ const queryParams = reactive({ pageNo: 1, pageSize: 10, deviceId: undefined, device: undefined, tagName: undefined, currentValue:false, address: undefined }) const queryFormRef = ref() // 搜索的表单 @@ -227,10 +257,11 @@ } /** 打开弹窗 */ const open = async (device?: string) => { const open = async (deviceId?: string,device?: string) => { resetForm() drawer.value = true queryParams.device = device queryParams.deviceId = deviceId if (device) { getList() } @@ -253,8 +284,8 @@ /** tag导入 */ const importFormRef = ref() const handleImport = () => { if(queryParams.device){ importFormRef.value.open(queryParams.device, '/data/channel/modbus/tag/import',ModBusTagApi.importModBusTagTemplate(), 'ModBus', queryParams.device) if (queryParams.device) { importFormRef.value.open(queryParams.device, '/data/channel/modbus/tag/import', ModBusTagApi.importModBusTagTemplate(), 'ModBus', queryParams.device) } } @@ -272,4 +303,23 @@ exportLoading.value = false } } let intervalId; onMounted(async () => { // 创建定时器 intervalId = setInterval(async () => { if(queryParams.currentValue){ const page = await ModBusTagApi.getModBusTagPage(queryParams) list.value = page.list total.value = page.total } }, 10000); }); // 在组件卸载时清除定时器 onBeforeUnmount(() => { if (intervalId) { clearInterval(intervalId); } }); </script> src/views/data/channel/opcda/tag/index.vue
@@ -58,6 +58,12 @@ <Icon icon="ep:download" />导出 </el-button> </el-form-item> <el-form-item label="更新当前值" label-width="100px"> <el-switch v-model="queryParams.currentValue" active-color="#13ce66" inactive-color="#ff4949"/> </el-form-item> </el-form> </ContentWrap> <!-- 列表 --> @@ -85,6 +91,24 @@ <template #default="scope"> <el-tag v-if="scope.row.enabled === 1" size="small">是</el-tag> <el-tag v-else size="small" type="danger">否</el-tag> </template> </el-table-column> <el-table-column prop="dataValue" label="数据值" header-align="center" align="center" :formatter="(row) => {if (row.dataValue === -2.0) {return '--';}return row.dataValue;}" /> <el-table-column prop="quality" label="数据质量" header-align="center" align="center" > <template #default="scope"> <el-tag v-if="scope.row.dataValue === Number(-2.0)" type="danger" size="small">bad</el-tag> <el-tag v-else size="small">good</el-tag> </template> </el-table-column> <el-table-column label="操作" align="center" min-width="110" fixed="right"> @@ -128,6 +152,8 @@ import download from "@/utils/download"; import {ref,reactive} from "vue"; import TagImportForm from '../../common/tag/TagImportForm.vue' import {onBeforeUnmount, onMounted} from "vue"; import * as OpcdaTagApi from "@/api/data/channel/opcda/tag"; defineOptions({name: 'ModBusTag'}) @@ -145,9 +171,11 @@ serverId: undefined, tagName: undefined, serverName: undefined currentValue:false, }) const queryFormRef = ref() // 搜索的表单 const exportLoading = ref(false) // 导出的加载中 /** 查询列表 */ const getList = async () => { loading.value = true @@ -238,4 +266,23 @@ exportLoading.value = false } } let intervalId; onMounted(async () => { // 创建定时器 intervalId = setInterval(async () => { if(queryParams.currentValue){ const page = await OpcdaTagApi.getOpcdaTagPage(queryParams) list.value = page.list total.value = page.total } }, 10000); }); // 在组件卸载时清除定时器 onBeforeUnmount(() => { if (intervalId) { clearInterval(intervalId); } }); </script> src/views/data/channel/opcua/tag/index.vue
@@ -108,6 +108,24 @@ <el-tag v-else size="small" type="danger">否</el-tag> </template> </el-table-column> <el-table-column prop="dataValue" label="数据值" header-align="center" align="center" :formatter="(row) => {if (row.dataValue === -2.0) {return '--';}return row.dataValue;}" /> <el-table-column prop="quality" label="数据质量" header-align="center" align="center" > <template #default="scope"> <el-tag v-if="scope.row.dataValue === Number(-2.0)" type="danger" size="small">bad</el-tag> <el-tag v-else size="small">good</el-tag> </template> </el-table-column> <el-table-column label="操作" align="center" min-width="110" fixed="right"> <template #default="scope"> <el-button @@ -164,6 +182,7 @@ pageNo: 1, pageSize: 10, device: undefined, deviceId: undefined, tagName: undefined, address: undefined }) @@ -215,10 +234,11 @@ } /** 打开弹窗 */ const open = async (device?: string) => { const open = async (deviceId?: string,device?: string) => { resetForm() drawer.value = true queryParams.device = device queryParams.deviceId = deviceId if (device) { getList() } src/views/data/point/DaPointChart.vue
@@ -10,21 +10,21 @@ :model="dataForm" @keydown.enter="getDataList()" > <el-form-item> <el-form-item label="开始时间"> <el-date-picker size="mini" v-model="dataForm.startTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期时间" /> :clearable="false" placeholder="选择日期时间"/> </el-form-item> <el-form-item> <el-form-item label="结束时间"> <el-date-picker size="mini" v-model="dataForm.endTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期时间" /> :clearable="false" placeholder="选择日期时间"/> </el-form-item> <el-form-item> <el-button @click="getDataList()">查询</el-button> @@ -49,67 +49,39 @@ import {ref} from 'vue'; import * as echarts from 'echarts'; import * as DaPoint from '@/api/data/da/point/daPointChart' import {getYMDHMS} from "@/utils/dateUtil" import download from "@/utils/download"; const message = useMessage() // 消息弹窗 const visible = ref(false); const chartDom = ref(null); let myChart = null; const dataForm = ref({ id: "", pointNo: "", pointName: "", pointTypeName: "", startTime: getYMDHMS(), endTime: undefined, }); const queryParams = reactive({ codes: [], startDate: undefined, endDate: undefined, }) function getYMDHMS() { let timestamp = new Date().getTime(); let time = new Date(timestamp - 1000 * 60 * 30); let year = time.getFullYear(); let month = (time.getMonth() + 1).toString(); let date = time.getDate().toString(); let hours = time.getHours().toString(); let minute = time.getMinutes().toString(); const chartParams = reactive({ pointNos:[], start : undefined, end : undefined, }) const dataForm = ref({ id: "", pointNo: "", pointName: "", pointTypeName: "", startTime: getYMDHMS(new Date() - 1000 * 60 * 60), endTime: getYMDHMS(new Date()), }); if (month < 10) { month = "0" + month; } if (date < 10) { date = "0" + date; } if (hours < 10) { hours = "0" + hours; } if (minute < 10) { minute = "0" + minute; } return ( year + "-" + month + "-" + date + " " + hours + ":" + minute + ":" + "00" ); } /** 打开弹窗 */ const open = async (row: object) => { visible.value = true dataForm.value.id = row.id; dataForm.value.pointNo = row.pointNo; dataForm.value.pointName = row.pointName; dataForm.value.startTime = getYMDHMS(); dataForm.value.endTime = ""; dataForm.value.startTime = getYMDHMS(new Date(this.dataForm.startTime) - 1000 * 60 * 60); dataForm.value.endTime = getYMDHMS(new Date(this.dataForm.endTime) - 1000 * 60 * 60), getDataList(); } @@ -120,8 +92,8 @@ if (dataForm.value.id) { try { queryParams.codes=[dataForm.value.pointNo]; queryParams.startDate = dataForm.value.startTime; queryParams.endDate = dataForm.value.endTime; queryParams.startDate = getYMDHMS(new Date(this.dataForm.startTime) - 1000 * 60 * 60); queryParams.endDate = getYMDHMS(new Date(this.dataForm.endTime) - 1000 * 60 * 60); const data = await DaPoint.getPointDaChart(queryParams) let seriesData = [] data.series.forEach(item => { @@ -196,9 +168,9 @@ /** 导出按钮操作 */ const exportLoading = ref(false) const handleExport = async () => { queryParams.pointNos=[dataForm.value.pointNo]; queryParams.start = dataForm.value.startTime; queryParams.end = dataForm.value.endTime; chartParams.pointNos=[dataForm.value.pointNo]; chartParams.start = dataForm.value.startTime; chartParams.end = dataForm.value.endTime; try { // 导出的二次确认 await message.exportConfirm()