修改组态

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() { export function eleEpdChooseTree_ypt() {
return http.request({ return http.request({
url: '/cs-system-boot/csDictData/eleEpdChooseTree', url: '/cs-system-boot/csDictData/eleEpdChooseTree',
method: 'post', method: 'GET'
}) })
} }
// 无锡指标列表 // 无锡指标列表

View File

@@ -320,9 +320,13 @@ const onSaveClick = () => {
const useData = useDataStore() const useData = useDataStore()
const onSaveAll = async () => { const onSaveAll = async () => {
let data: any = await useData.dataTree.map((item, ind) => { 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 item.sort = ind
return item return item
}) })
console.log('🚀 ~ onSaveAll ~ data:', data)
let form = new FormData() let form = new FormData()
let blob = new Blob([JSON.stringify(data)], { 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)) { if (!Object.prototype.hasOwnProperty.call(event_obj, event.type)) {
event_obj[event.type] = code_str event_obj[event.type] = code_str
} else { } else {
event_obj[event.type] += code_str event_obj[event.type] += code_str

View File

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

View File

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

View File

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