修改组态

This commit is contained in:
guanj
2025-12-09 08:41:11 +08:00
parent d586f19bd9
commit da26b1d237
6 changed files with 56 additions and 61 deletions

View File

@@ -82,7 +82,7 @@ export function targetList(params: any) {
export function eleEpdChooseTree_ypt() {
return http.request({
url: '/cs-system-boot/csDictData/eleEpdChooseTree',
method: 'post',
method: 'GET'
})
}
// 无锡指标列表

View File

@@ -320,9 +320,13 @@ const onSaveClick = () => {
const useData = useDataStore()
const onSaveAll = async () => {
let data: any = await useData.dataTree.map((item, ind) => {
let pathList = JSON.parse(item.path)
pathList.canvasCfg.lineList = pathList.json.filter(k => k.lineId != '' && k.lineId != null).map(k => k.lineId)
item.path = JSON.stringify(pathList)
item.sort = ind
return item
})
console.log('🚀 ~ onSaveAll ~ data:', data)
let form = new FormData()
let blob = new Blob([JSON.stringify(data)], {

View File

@@ -819,7 +819,6 @@ export const eventToVOn = (item: IDoneJson, externalMethod: (kid?: string) => vo
}
if (!Object.prototype.hasOwnProperty.call(event_obj, event.type)) {
event_obj[event.type] = code_str
} else {
event_obj[event.type] += code_str

View File

@@ -6,12 +6,13 @@
<div class="title">{{ corner.title }}</div>
<el-descriptions :column="1" size="small" label-width="70px" border>
<el-descriptions-item label="指标数据">
<div style="max-height: 120px; overflow-y: auto">
<div style="height: 200px; overflow-y: auto">
<div
v-for="item in props.steadyState?.filter(k => k.lineId === corner.elementId)"
:key="item.id"
>
{{ item.statisticalName }}: {{ item.value === 3.1415926 ? '/' : item.value }}
{{ item.statisticalName.replace(/\//g, '_') }}:
{{ item.value === 3.1415926 ? '/' : item.value + item.unit }}
</div>
</div>
</el-descriptions-item>
@@ -29,9 +30,7 @@ import { ref, onMounted, watch } from 'vue'
import { Close } from '@element-plus/icons-vue'
// 定义 emits
const emit = defineEmits<{
(e: 'lineListChange', lineList: string[]): void
}>()
const emit = defineEmits(['lineListChange'])
// 定义接收的 props
const props = defineProps<{
@@ -59,7 +58,6 @@ const corners = ref([
])
const displayOrder = ref<number[]>([])
const lineList = ref<string[]>([]) // 缓存打开的lineId
// 截取名称的最后一部分作为标题
const extractTitleFromLineName = (lineName: string): string => {
@@ -117,20 +115,25 @@ const showNextCorner = (elementId: string, lineName: string) => {
displayOrder.value.push(replaceIndex)
}
// 更新 lineList去重并触发事件
// updateLineList()
}
const timer = ref<any>(null)
// 更新 lineList根据 corners 的 show 状态来维护
const updateLineList = () => {
// 根据 corners 中 show 为 true 的项来构建 lineList
const newLineList = corners.value.filter(corner => corner.show && corner.elementId).map(corner => corner.elementId)
// 更新 lineList
lineList.value = newLineList
// 触发事件,传递更新后的 lineList
emit('lineListChange', [...lineList.value])
if (timer.value) {
clearInterval(timer.value)
timer.value = null
}
if (newLineList.length > 0) {
emit('lineListChange', newLineList)
timer.value = setInterval(
() => {
emit('lineListChange', newLineList)
},
3 * 60 * 1000
)
}
}
// 关闭指定角落的函数
@@ -145,9 +148,6 @@ const closeCorner = (id: string) => {
if (orderIndex !== -1) {
displayOrder.value.splice(orderIndex, 1)
}
// 更新 lineList
// updateLineList()
}
}
@@ -159,7 +159,6 @@ const closeAllCorners = () => {
})
displayOrder.value = []
// 更新 lineList
updateLineList()
}
@@ -188,20 +187,7 @@ defineExpose({
<style scoped lang="less">
.corner {
width: 260px;
background-color: #2b2d3a90;
position: absolute;
color: 000;
opacity: 0;
transform: scale(0.3);
transition: all 0.4s ease-out;
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
}
/* 显示状态的样式 */
.corner:not([style*='display: none']):not([style*='display:none']) {
opacity: 1;
transform: scale(1);
}
.top-left {
@@ -235,15 +221,15 @@ defineExpose({
.title {
font-size: 16px;
padding: 8px;
border-bottom: 1px solid #fff;
border-bottom: 1px solid #ccc;
background-color: #fff;
border-radius: 8px 8px 0 0;
}
.data-item {
display: flex;
margin-bottom: 4px;
font-size: 12px;
font-size: 14px;
}
.label {

View File

@@ -43,9 +43,9 @@
@drag-canvas-mouse-up="dragCanvasMouseUp"
></drag-canvas>
</div>
<!-- 弹框 -->
<iframeDia :steadyState="dataList" ref="iframeDiaRef" @lineListChange="indicator"></iframeDia>
</div>
<!-- 弹框 -->
<iframeDia :steadyState="dataList" ref="iframeDiaRef" @lineListChange="indicator"></iframeDia>
</template>
<script setup lang="ts">
@@ -611,7 +611,7 @@ const setImportJson = (exportJson: IExportJson) => {
if (!useData.loading) {
if (exportJson == null) {
setDoneJson(useData.dataTree[0].kId)
publish(useData.dataTree[0].id)
publish(useData.dataTree[0])
} else {
executeOperations()
}
@@ -624,7 +624,7 @@ const setImportJson = (exportJson: IExportJson) => {
// 当loading变为true时执行操作
if (exportJson == null) {
setDoneJson(useData.dataTree[0].kId)
publish(useData.dataTree[0].id)
publish(useData.dataTree[0])
} else {
executeOperations()
}
@@ -869,6 +869,7 @@ const setMqtt = async () => {
// 设置消息接收回调
mqttClient.value.onMessage((subscribe: string, message: any) => {
const msg: any = uint8ArrayToObject(message)
console.log('🚀 ~ setMqtt ~ msg:', msg)
if (subscribe.split('/')[2] === 'csConfigRtData') {
// 指标数据
dataList.value = JSON.parse(msg.message)
@@ -878,22 +879,28 @@ const setMqtt = async () => {
console.error('MQTT 初始化失败:', error)
}
}
const publish = async (id: string) => {
// if (mqttClient.value) {
// await mqttClient.value.subscribe('zl/askCSConfigWarnData/' + id)
// // 发送消息
// await mqttClient.value.publish('/zl/askCSConfigWarnData/' + id, '{}')
// if (timer.value) {
// clearInterval(timer.value)
// timer.value = null
// }
// timer.value = setInterval(
// () => {
// mqttClient.value.publish('/zl/askCSConfigWarnData/' + id, '{}')
// },
// 3 * 60 * 1000
// )
// }
const publish = async (list: any) => {
console.log('🚀 ~ publish ~ list:', JSON.parse(list.path).canvasCfg.lineList)
if (mqttClient.value) {
// 发送消息
await mqttClient.value.publish(
'/zl/askCSConfigWarnData/' + useData.dataTree[0].id,
`[${JSON.parse(list.path).canvasCfg.lineList}]`
)
if (timer.value) {
clearInterval(timer.value)
timer.value = null
}
timer.value = setInterval(
() => {
mqttClient.value.publish(
'/zl/askCSConfigWarnData/' + useData.dataTree[0].id,
`[${JSON.parse(list.path).canvasCfg.lineList}]`
)
},
3 * 60 * 1000
)
}
}
// 绑定指标
const indicator = async (ids: string[]) => {

View File

@@ -19,11 +19,10 @@ class HttpRequest {
instance.interceptors.request.use(
config => {
// 添加全局的loading..
config.headers['Authorization'] =
'bearer ' + JSON.parse(window.localStorage.getItem('adminInfo') || '{}').access_token // 请求头带上token token要在登录的时候保存在localStorage中
// config.headers['Authorization'] =
// 'bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySW5kZXgiOiJmYTM3YjkzY2M5MGQ0YzE3ODRjYThmNmRlYmRkZWUxYSIsInVzZXJfbmFtZSI6InJvb3QiLCJzY29wZSI6WyJhbGwiXSwibmlja25hbWUiOiLotoXnuqfnrqHnkIblkZgiLCJ1c2VyVHlwZSI6MCwiZGVwdEluZGV4IjoiNTY5OWU1OTE2YTE4YTYzODFlMWFjOTJkYTViZDI2MjgiLCJleHAiOjE4MjE4MTc2MTksImF1dGhvcml0aWVzIjpbInJvb3QiXSwianRpIjoiMmJiM2Q5ZTYtNmY3Yy00Yjg1LThiM2EtZDI2ODdmMTUzMDg5IiwiY2xpZW50X2lkIjoibmpjbnRlc3QiLCJoZWFkU2N1bHB0dXJlIjoicmVzb3VyY2VEYXRhLzMxNzRDRUFFOUQ0MjRGMjJCQjkxQTU4OURENjdCMDUxLmpwZyJ9.WjeYl1lvvJdDE1FUGIhS99rE5qKaBXOypWxmxK0svWweGqEbu1XCLjKm_YkiTwjZJ_oIcn5JOO9rvHFkkea76BUsYo5wlzuBBiy7sKqM1fFzOFQq6hdFevNTJAbYH9FiBxYxI-e9DZ5mvLGE6umOjUfn_FAsku2w6Uj5DtvpOKBWYzLEPTEifOqNI9he4zJAmVZniUUMf26SDoEdfu0TyrIS1j_qKaEb-cqR1XDhivdthEBK5m9vxJyXFZ5kofNxwQQkit_oiqJRkCZIt9TWAjCh-frzMHCvA30hkAr-VCD2JfCmmEr3hW_lmwfINaPtFVbHCdCKqdrl6VmF1HObaQ'
// 'bearer ' + JSON.parse(window.localStorage.getItem('adminInfo') || '{}').access_token // 请求头带上token token要在登录的时候保存在localStorage中
config.headers['Authorization'] =
'bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySW5kZXgiOiJmYTM3YjkzY2M5MGQ0YzE3ODRjYThmNmRlYmRkZWUxYSIsInVzZXJfbmFtZSI6InJvb3QiLCJzY29wZSI6WyJhbGwiXSwibmlja25hbWUiOiLotoXnuqfnrqHnkIblkZgiLCJ1c2VyVHlwZSI6MCwiZGVwdEluZGV4IjoiNTY5OWU1OTE2YTE4YTYzODFlMWFjOTJkYTViZDI2MjgiLCJleHAiOjE4MjE4MTc2MTksImF1dGhvcml0aWVzIjpbInJvb3QiXSwianRpIjoiMmJiM2Q5ZTYtNmY3Yy00Yjg1LThiM2EtZDI2ODdmMTUzMDg5IiwiY2xpZW50X2lkIjoibmpjbnRlc3QiLCJoZWFkU2N1bHB0dXJlIjoicmVzb3VyY2VEYXRhLzMxNzRDRUFFOUQ0MjRGMjJCQjkxQTU4OURENjdCMDUxLmpwZyJ9.WjeYl1lvvJdDE1FUGIhS99rE5qKaBXOypWxmxK0svWweGqEbu1XCLjKm_YkiTwjZJ_oIcn5JOO9rvHFkkea76BUsYo5wlzuBBiy7sKqM1fFzOFQq6hdFevNTJAbYH9FiBxYxI-e9DZ5mvLGE6umOjUfn_FAsku2w6Uj5DtvpOKBWYzLEPTEifOqNI9he4zJAmVZniUUMf26SDoEdfu0TyrIS1j_qKaEb-cqR1XDhivdthEBK5m9vxJyXFZ5kofNxwQQkit_oiqJRkCZIt9TWAjCh-frzMHCvA30hkAr-VCD2JfCmmEr3hW_lmwfINaPtFVbHCdCKqdrl6VmF1HObaQ'
// 请求头携带token
return config
},