修改现场反馈问题

This commit is contained in:
GGJ
2025-01-03 16:11:31 +08:00
parent 3094ac94c0
commit 439a129589
14 changed files with 92 additions and 39 deletions

View File

@@ -10,8 +10,8 @@ import useSetTheme from '@/utils/setTheme'
import { provide, onMounted, ref } from 'vue' import { provide, onMounted, ref } from 'vue'
//线上mqtt //线上mqtt
let buildUrl = 'wss://pqmcn.com:8087/mqtt'//102 // let buildUrl = 'wss://pqmcn.com:8087/mqtt'//102
// let buildUrl = 'ws://pqmcn.com:8073/mqtt'//27 let buildUrl = 'ws://pqmcn.com:8073/mqtt'//27
// 从 Nginx 获取 MQTT URL // 从 Nginx 获取 MQTT URL

View File

@@ -15,7 +15,7 @@ export const dicDelete = (id: string) => {
export function dicAdd(data: any) { export function dicAdd(data: any) {
return createAxios({ return createAxios({
url: '/system-boot/dictTree//add', url: '/system-boot/dictTree/add',
method: 'post', method: 'post',
data: data data: data
}) })
@@ -23,7 +23,7 @@ export function dicAdd(data: any) {
export function dicUpdate(data: any) { export function dicUpdate(data: any) {
return createAxios({ return createAxios({
url: '/system-boot/dictTree//update', url: '/system-boot/dictTree/update',
method: 'put', method: 'put',
data: data data: data
}) })

View File

@@ -80,7 +80,7 @@ export const addDictTree = (data: any) => {
// 编辑统计指标配置项 // 编辑统计指标配置项
export const updateStatistical = (data: any) => { export const updateStatistical = (data: any) => {
return createAxios({ return createAxios({
url: '/system-boot/dictTree//update', url: '/system-boot/dictTree/update',
method: 'PUT', method: 'PUT',
data: data data: data
}) })
@@ -88,7 +88,7 @@ export const updateStatistical = (data: any) => {
// 单位绑定 // 单位绑定
export function codeDicTree(data: any) { export function codeDicTree(data: any) {
return createAxios({ return createAxios({
url: '/system-boot/dictTree//codeDicTree', url: '/system-boot/dictTree/codeDicTree',
method: 'get', method: 'get',
params: data params: data
}) })

View File

@@ -98,10 +98,10 @@ watch(
() => tableStore.table.allFlag, () => tableStore.table.allFlag,
newVal => { newVal => {
if (tableStore.table.allFlag) { if (tableStore.table.allFlag) {
console.log("🚀 ~ tableStore.table:", tableStore.table) console.log("🚀 ~ tableStore.table:", tableStore.exportName || document.querySelectorAll('.ba-nav-tab.active')[0].textContent || '')
tableRef.value?.exportData({ tableRef.value?.exportData({
filename: tableStore.table.exportName || document.querySelectorAll('.ba-nav-tab.active')[0].textContent || '', // 文件名字 filename: tableStore.exportName || document.querySelectorAll('.ba-nav-tab.active')[0].textContent || '', // 文件名字
sheetName: 'Sheet1', sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true, useStyle: true,

View File

@@ -36,6 +36,7 @@ const apiList = ref([])
const tableStore = new TableStore({ const tableStore = new TableStore({
showPage: false, showPage: false,
url: '/user-boot/function/getButtonById', url: '/user-boot/function/getButtonById',
publicHeight: 60,
column: [ column: [
{ title: '普通接口/接口名称', field: 'name' }, { title: '普通接口/接口名称', field: 'name' },
{ {

View File

@@ -39,6 +39,7 @@ const popupRef = ref()
const tableStore = new TableStore({ const tableStore = new TableStore({
showPage: false, showPage: false,
url: '/user-boot/function/functionTree', url: '/user-boot/function/functionTree',
publicHeight: 60,
column: [ column: [
{ title: '菜单名称', field: 'title', align: 'left', treeNode: true }, { title: '菜单名称', field: 'title', align: 'left', treeNode: true },
{ {

View File

@@ -77,6 +77,7 @@ const rankOptions = ref([
const tableStore = new TableStore({ const tableStore = new TableStore({
url: '/zl-event-boot/csDevErrEvt/list', url: '/zl-event-boot/csDevErrEvt/list',
method: 'POST', method: 'POST',
exportName: '异常事件',
publicHeight: 65, publicHeight: 65,
column: [ column: [
{ title: '设备名称', field: 'ndid', align: 'center' }, { title: '设备名称', field: 'ndid', align: 'center' },

View File

@@ -66,6 +66,7 @@ const rankOptions = ref([
const tableStore = new TableStore({ const tableStore = new TableStore({
url: '/cs-harmonic-boot/eventUser/queryEventpageWeb', url: '/cs-harmonic-boot/eventUser/queryEventpageWeb',
method: 'POST', method: 'POST',
exportName: '稳态越限告警',
publicHeight: 65, publicHeight: 65,
column: [ column: [
{ title: '设备名称', field: 'equipmentName', align: 'center' }, { title: '设备名称', field: 'equipmentName', align: 'center' },

View File

@@ -108,6 +108,7 @@ const tableStore = new TableStore({
url: '/cs-harmonic-boot/eventUser/queryEventpageWeb', url: '/cs-harmonic-boot/eventUser/queryEventpageWeb',
method: 'POST', method: 'POST',
publicHeight: 65, publicHeight: 65,
exportName: '暂态事件',
column: [ column: [
{ title: '设备名称', field: 'equipmentName', align: 'center' }, { title: '设备名称', field: 'equipmentName', align: 'center' },
{ title: '工程名称', field: 'engineeringName', align: 'center' }, { title: '工程名称', field: 'engineeringName', align: 'center' },

View File

@@ -531,6 +531,7 @@ const handleTrend = async () => {
ElMessage.success('装置应答成功') ElMessage.success('装置应答成功')
//每隔30s调用一下接口通知后台推送mqtt消息 //每隔30s调用一下接口通知后台推送mqtt消息
trendTimer.value = window.setInterval(() => { trendTimer.value = window.setInterval(() => {
if (!dataSet.value.includes('_realtimedata')) return
getHarmRealData(lineId.value, activeTrendName.value).then((res: any) => { getHarmRealData(lineId.value, activeTrendName.value).then((res: any) => {
// console.log(res, '获取谐波频谱数据') // console.log(res, '获取谐波频谱数据')
}) })
@@ -587,6 +588,8 @@ const handleHarmonicSpectrum = async () => {
// mqttMessage.value = {} // mqttMessage.value = {}
realDataTimer.value = window.setInterval(() => { realDataTimer.value = window.setInterval(() => {
if (!dataSet.value.includes('_realtimedata')) return
getBasicRealData(lineId.value).then((res: any) => { getBasicRealData(lineId.value).then((res: any) => {
// console.log(res, '获取基础实时数据') // console.log(res, '获取基础实时数据')
}) })
@@ -612,6 +615,7 @@ const handleReturn = async () => {
ElMessage.success('装置应答成功') ElMessage.success('装置应答成功')
// mqttMessage.value = {} // mqttMessage.value = {}
realDataTimer.value = window.setInterval(() => { realDataTimer.value = window.setInterval(() => {
if (!dataSet.value.includes('_realtimedata')) return
getBasicRealData(lineId.value).then((res: any) => { getBasicRealData(lineId.value).then((res: any) => {
// console.log(res, '获取基础实时数据') // console.log(res, '获取基础实时数据')
}) })
@@ -826,6 +830,7 @@ const getRealDataMqttMsg = async () => {
mqttMessage.value = {} mqttMessage.value = {}
realDataTimer.value = window.setInterval(async () => { realDataTimer.value = window.setInterval(async () => {
if (!dataSet.value.includes('_realtimedata')) return
await getBasicRealData(lineId.value).then((res: any) => { await getBasicRealData(lineId.value).then((res: any) => {
// console.log(res, '获取基础实时数据') // console.log(res, '获取基础实时数据')
}) })

View File

@@ -484,9 +484,11 @@ const submit = () => {
if (popupType.value == 3 || popupType.value == 4) { if (popupType.value == 3 || popupType.value == 4) {
let subForm = JSON.parse(JSON.stringify(form1.value)) let subForm = JSON.parse(JSON.stringify(form1.value))
subForm.list = checkedIdList.value subForm.list = checkedIdList.value
console.log(title.value.includes('绑定测试项'));
updateRecord(subForm).then((res: any) => { updateRecord(subForm).then((res: any) => {
if (res.code == 'A0000') { if (res.code == 'A0000') {
ElMessage.success('修改测试项成功') ElMessage.success(title.value.includes('绑定测试项')?'绑定测试项成功':'修改测试项成功')
initForm() initForm()
emit('onSubmit') emit('onSubmit')
close() close()

View File

@@ -7,7 +7,7 @@
<el-option v-for="item in TypeOptions" :key="item.id" :label="item.name" <el-option v-for="item in TypeOptions" :key="item.id" :label="item.name"
:value="item.id"></el-option> :value="item.id"></el-option>
</el-select> --> </el-select> -->
<el-select v-model.trim="form.type" placeholder="请选择" @change="formDevTypeChange" clearable> <el-select v-model.trim="form.type" placeholder="请选择装置类型" @change="formDevTypeChange" clearable>
<el-option v-for="item in devTypeOptions" :key="item.value" :label="item.label" <el-option v-for="item in devTypeOptions" :key="item.value" :label="item.label"
:value="item.value"></el-option> :value="item.value"></el-option>
</el-select> </el-select>
@@ -17,22 +17,22 @@
<el-option v-for="item in DevTypeOptions" :key="item.id" :label="item.name" <el-option v-for="item in DevTypeOptions" :key="item.id" :label="item.name"
:value="item.id"></el-option> :value="item.id"></el-option>
</el-select> --> </el-select> -->
<el-select v-model.trim="form.devType" filterable placeholder="请选择" clearable> <el-select v-model.trim="form.devType" filterable placeholder="请选择装置型号" clearable @change="devTypeChange">
<el-option v-for="item in formDevModelOptionsFilter" :key="item.value" :label="item.label" <el-option v-for="item in formDevModelOptionsFilter" :key="item.value" :label="item.label"
:value="item.value"></el-option> :value="item.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="版本号:" prop="versionNo"> <el-form-item label="版本号:" prop="versionNo">
<el-input maxlength="32" show-word-limit v-model.trim="form.versionNo" autocomplete="off" <el-input maxlength="32" show-word-limit v-model.trim="form.versionNo" autocomplete="off"
placeholder="请输入"></el-input> placeholder="请输入版本号"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="版本类型:" > <el-form-item label="版本类型:" prop="versionType">
<el-input maxlength="32" show-word-limit v-model.trim="form.versionType" autocomplete="off" <el-input maxlength="32" show-word-limit v-model.trim="form.versionType" autocomplete="off"
placeholder="填写特殊类型(不填默认通用类型)"></el-input> placeholder="填写特殊类型(不填默认通用类型)"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="版本协议:" prop="versionAgreement"> <el-form-item label="版本协议:" prop="versionAgreement">
<el-input maxlength="32" show-word-limit v-model.trim="form.versionAgreement" autocomplete="off" <el-input maxlength="32" show-word-limit v-model.trim="form.versionAgreement" autocomplete="off"
placeholder="请输入"></el-input> placeholder="请输入版本协议"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="版本日期:" prop="versionDate"> <el-form-item label="版本日期:" prop="versionDate">
<el-date-picker v-model.trim="form.versionDate" type="date" value-format="YYYY-MM-DD" <el-date-picker v-model.trim="form.versionDate" type="date" value-format="YYYY-MM-DD"
@@ -41,17 +41,17 @@
<el-form-item label="CRC校验:" prop="crcInfo"> <el-form-item label="CRC校验:" prop="crcInfo">
<el-input maxlength="32" show-word-limit v-model.trim="form.crcInfo" autocomplete="off" <el-input maxlength="32" show-word-limit v-model.trim="form.crcInfo" autocomplete="off"
placeholder="请输入"></el-input> placeholder="请输入CRC校验"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form :model="form" label-width="100px" class="mt10"> <el-form :model="form" label-width="100px" class="mt10">
<el-form-item label="描述:" prop="description"> <el-form-item label="描述:" prop="description">
<el-input maxlength="300":autosize="{ minRows: 2, maxRows: 4 }" type="textarea" show-word-limit v-model.trim="form.description" autocomplete="off" <el-input maxlength="300":autosize="{ minRows: 2, maxRows: 4 }" type="textarea" show-word-limit v-model.trim="form.description" autocomplete="off"
placeholder="请输入"></el-input> placeholder="请输入描述"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="升级文件:" prop="file"> <el-form-item label="升级文件:" prop="file">
<el-upload :limit="1" :auto-upload="false" :on-change="fileChange" :on-exceed="fileExceed" <el-upload :limit="1" :auto-upload="false" :on-change="fileChange" :on-exceed="fileExceed" :on-remove="fileRemove"
:file-list="fileList"> :file-list="fileList">
<el-button type="primary">点击上传</el-button> <el-button type="primary">点击上传</el-button>
</el-upload> </el-upload>
@@ -80,7 +80,7 @@ const DevTypeOptions = ref()
const devTypeOptions: any = ref([]) const devTypeOptions: any = ref([])
const devModelOptions: any = ref([]) const devModelOptions: any = ref([])
const fileList = ref() const fileList:any = ref([])
const tableStore = inject('tableStore') as TableStore const tableStore = inject('tableStore') as TableStore
const formRef = ref() const formRef = ref()
const form = reactive<any>({ const form = reactive<any>({
@@ -94,7 +94,7 @@ const form = reactive<any>({
versionDate: null, versionDate: null,
type: null, type: null,
id: null, id: null,
file: null file: []
}) })
const rules = { const rules = {
type: [{ required: true, message: '装置类型不能为空', trigger: 'blur' }], type: [{ required: true, message: '装置类型不能为空', trigger: 'blur' }],
@@ -117,10 +117,11 @@ const typeChange = () => {
} }
const devTypeChange = (e: any) => { const devTypeChange = (e: any) => {
// console.log(e) // console.log(e)
form.devTypeName = DevTypeOptions.value.filter((item: any) => item.value == e)[0].label form.devTypeName = formDevModelOptionsFilter.value.filter((item: any) => item.value == e)[0].label
} }
queryByCode('Device_Type').then(res => { queryByCode('Device_Type').then(res => {
queryCsDictTree(res.data.id).then(res => { const id = res.data.id
queryCsDictTree(id).then(res => {
devTypeOptions.value = res.data.map((item: any) => { devTypeOptions.value = res.data.map((item: any) => {
return { return {
value: item.id, value: item.id,
@@ -129,7 +130,12 @@ queryByCode('Device_Type').then(res => {
} }
}) })
}) })
queryByid(res.data.id).then(res => { queryByid(id).then(res => {
res.data.map((item: any, index: any) => {
if (item.pid == id) {
res.data.splice(index, 1)
}
})
devModelOptions.value = res.data.map((item: any) => { devModelOptions.value = res.data.map((item: any) => {
return { return {
value: item.id, value: item.id,
@@ -138,7 +144,7 @@ queryByCode('Device_Type').then(res => {
} }
}) })
}) })
tableStore.index() // tableStore.index()
}) })
const formDevModelOptionsFilter = computed(() => { const formDevModelOptionsFilter = computed(() => {
return devModelOptions.value.filter((item: any) => { return devModelOptions.value.filter((item: any) => {
@@ -157,11 +163,14 @@ const fileExceed = (e: any) => {
ElMessage.error('只能上传一个文件') ElMessage.error('只能上传一个文件')
} }
const fileRemove = (e: any) => {
form.file = null
}
const formDevTypeChange = (e: any) => { const formDevTypeChange = (e: any) => {
if (!e) { if (!e) {
return return
} }
form.devModel = '' // form.devModel = ''
} }
const dialogVisible = ref(false) const dialogVisible = ref(false)
const title = ref('新增版本') const title = ref('新增版本')
@@ -193,6 +202,12 @@ const open = (text: string, data?: anyObj) => {
}) })
} }
const submit = () => { const submit = () => {
if(form?.file == null){
ElMessage.warning('请上传升级文件')
return
}
// console.log(formRef) // console.log(formRef)
formRef.value.validate(async (valid: boolean) => { formRef.value.validate(async (valid: boolean) => {
// console.log(valid) // console.log(valid)

View File

@@ -3,7 +3,7 @@
<TableHeader ref="tableHeaderRef"> <TableHeader ref="tableHeaderRef">
<template #select> <template #select>
<el-form-item label="装置型号:"> <el-form-item label="装置型号:">
<el-select v-model.trim="tableStore.table.params.devType" placeholder="请选择" clearable> <el-select v-model.trim="tableStore.table.params.devType" placeholder="请选择装置型号" clearable>
<el-option v-for="item in DevTypeOptions" :key="item.id" :label="item.name" <el-option v-for="item in DevTypeOptions" :key="item.id" :label="item.name"
:value="item.id"></el-option> :value="item.id"></el-option>
</el-select> </el-select>
@@ -14,7 +14,7 @@
</template> </template>
</TableHeader> </TableHeader>
<Table ref="tableRef" /> <Table ref="tableRef" />
<PopupVersion ref="popupVersionRef"></PopupVersion> <PopupVersion ref="popupVersionRef" v-if="showPopup"></PopupVersion>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@@ -35,14 +35,10 @@ defineOptions({
}) })
const popupVersionRef = ref() const popupVersionRef = ref()
const dictData = useDictData() const dictData = useDictData()
const showPopup = ref(false)
const DevTypeOptions = ref() const DevTypeOptions = ref()
const tableHeaderRef = ref() const tableHeaderRef = ref()
queryByCode('Direct_Connected_Device').then(res => {
// console.log(res)
queryByid(res.data.id).then(res => {
DevTypeOptions.value = res.data
})
})
const tableStore = new TableStore({ const tableStore = new TableStore({
url: '/cs-device-boot/edData/queryEdDataPage', url: '/cs-device-boot/edData/queryEdDataPage',
method: 'POST', method: 'POST',
@@ -53,7 +49,19 @@ const tableStore = new TableStore({
{ title: '版本日期', field: 'versionDate' }, { title: '版本日期', field: 'versionDate' },
{ title: '归档日期', field: 'updateTime' }, { title: '归档日期', field: 'updateTime' },
{ title: '描述', field: 'description' }, { title: '描述', field: 'description' },
{ title: '状态', field: 'statusName' }, {
title: '状态', field: 'status', render: 'tag',
custom: {
1: 'error',
0: 'success',
},
replaceValue: {
1: '禁用',
0: '启用',
}
},
{ {
title: '操作', title: '操作',
align: 'center', align: 'center',
@@ -119,7 +127,7 @@ const tableStore = new TableStore({
], ],
loadCallback: () => { loadCallback: () => {
tableStore.table.data.forEach((item: any) => { tableStore.table.data.forEach((item: any) => {
item.statusName = item.status === 1 ? '禁用' : '启用' item.statusName = item.status == 1 ? '禁用' : '启用'
for (let key in item) { for (let key in item) {
if (typeof item[key] !== 'number') { if (typeof item[key] !== 'number') {
item[key] = item[key] || '/' item[key] = item[key] || '/'
@@ -128,12 +136,30 @@ const tableStore = new TableStore({
}) })
} }
}) })
queryByCode('Device_Type').then(res => {
const id = res.data.id
queryByid(id).then(res1 => {
res1.data.map((item: any, index: any) => {
if (item.pid == id) {
res1.data.splice(index, 1)
}
})
console.log("🚀 ~ res1.data.map ~ res1.data:", res1.data)
DevTypeOptions.value = res1.data
})
})
tableStore.table.params.devType = '' tableStore.table.params.devType = ''
provide('tableStore', tableStore) provide('tableStore', tableStore)
onMounted(() => { onMounted(() => {
tableHeaderRef.value.onComSearch() tableHeaderRef.value.onComSearch()
}) })
const addMenu = () => { const addMenu = () => {
showPopup.value = true
setTimeout(() => {
popupVersionRef.value.open('新增版本') popupVersionRef.value.open('新增版本')
}, 100)
} }
</script> </script>

View File

@@ -8,11 +8,11 @@
<el-form-item label="编码"> <el-form-item label="编码">
<el-input maxlength="32" show-word-limit v-model.trim="form.code" placeholder="请输入编码" /> <el-input maxlength="32" show-word-limit v-model.trim="form.code" placeholder="请输入编码" />
</el-form-item> </el-form-item>
<!-- <el-form-item label="类型"> <el-form-item label="类型" v-if="title == '新增'|| title == '编辑'">
<el-select v-model.trim="form.type" placeholder="请选择类型"> <el-select v-model.trim="form.type" placeholder="请选择类型">
<el-option v-for="item in options" :key="item.value" :label="item.name" :value="item.value" /> <el-option v-for="item in options" :key="item.value" :label="item.name" :value="item.value" />
</el-select> </el-select>
</el-form-item> --> </el-form-item>
<el-form-item label="备注"> <el-form-item label="备注">
<el-input maxlength="32" show-word-limit v-model.trim="form.remark" placeholder="请输入备注" /> <el-input maxlength="32" show-word-limit v-model.trim="form.remark" placeholder="请输入备注" />
</el-form-item> </el-form-item>