Compare commits
No commits in common. 'dev_xq_0.0.1' and 'master' have entirely different histories.
dev_xq_0.0
...
master
Binary file not shown.
|
Before Width: | Height: | Size: 158 KiB |
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
Before Width: | Height: | Size: 86 KiB |
Binary file not shown.
@ -1,77 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="vue-characters"></div>
|
|
||||||
</template>
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { ref, watch } from 'vue';
|
|
||||||
import { useNodeByModelsStore } from '@/components/mt-edit/store/nodeByModels';
|
|
||||||
const nodeByModelsStore = useNodeByModelsStore();
|
|
||||||
const double = ref(-1);
|
|
||||||
const boolean = ref(false);
|
|
||||||
const alarms = ref(false);
|
|
||||||
const text = ref('正常');
|
|
||||||
const props = defineProps({
|
|
||||||
moduleType: {
|
|
||||||
type: String,
|
|
||||||
default: '--'
|
|
||||||
},
|
|
||||||
moduleId: {
|
|
||||||
type: String,
|
|
||||||
default: '--'
|
|
||||||
},
|
|
||||||
definitionItemJson: {
|
|
||||||
type: Object,
|
|
||||||
default: () => ({})
|
|
||||||
},
|
|
||||||
location: {
|
|
||||||
type: String,
|
|
||||||
default: 'bottom'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const getSting = (data: any) => {};
|
|
||||||
function getModuleById(moduleId: string) {
|
|
||||||
const globalData = (window as any).globalData;
|
|
||||||
if (!globalData || moduleId == undefined || moduleId == '' || props.moduleId == '--') {
|
|
||||||
console.warn('globalData 未初始化');
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 根据实际类型访问
|
|
||||||
if (globalData instanceof Map) {
|
|
||||||
// 如果是 Map 类型
|
|
||||||
return globalData.get(moduleId);
|
|
||||||
} else {
|
|
||||||
// 如果是普通对象
|
|
||||||
return globalData[moduleId];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function loadingModuleById() {
|
|
||||||
let module = getModuleById(props.moduleId);
|
|
||||||
if (props.moduleId !== '' && props.moduleId !== undefined && props.moduleId !== '--' && module) {
|
|
||||||
if (module) {
|
|
||||||
console.log('当前的module', module);
|
|
||||||
double.value = module.double;
|
|
||||||
boolean.value = module.double;
|
|
||||||
getSting({
|
|
||||||
double: double.value,
|
|
||||||
boolean: boolean.value,
|
|
||||||
alarms: alarms.value,
|
|
||||||
...module
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
watch(
|
|
||||||
() => props.moduleId,
|
|
||||||
(newVal, oldVal) => {
|
|
||||||
loadingModuleById();
|
|
||||||
nodeByModelsStore.change(newVal, oldVal, props.definitionItemJson.id);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.vue-characters {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,174 +0,0 @@
|
|||||||
<template>
|
|
||||||
<el-card class="card" shadow="hover" :body-style="{ padding: '10px' }">
|
|
||||||
<h2 class="cardHead">操作流程</h2>
|
|
||||||
<div class="cardBody">
|
|
||||||
<el-steps
|
|
||||||
style="max-width: 100%"
|
|
||||||
:active="4"
|
|
||||||
align-center
|
|
||||||
direction="vertical"
|
|
||||||
finish-status="success"
|
|
||||||
>
|
|
||||||
<el-step description="变压器故障起火" />
|
|
||||||
<el-step>
|
|
||||||
<template #description>
|
|
||||||
保护动作
|
|
||||||
<div class="parallel-box">
|
|
||||||
<el-tag type="primary">重瓦斯动作</el-tag>
|
|
||||||
<el-tag type="success">温控器动作</el-tag>
|
|
||||||
<el-tag type="primary">压力释放动作</el-tag>
|
|
||||||
<el-tag type="primary">火灾探测器动作</el-tag>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-step>
|
|
||||||
<el-step description="排油阀开启" />
|
|
||||||
<el-step description="注氮阀开启" />
|
|
||||||
<el-step description="注氮阀关闭" />
|
|
||||||
<el-step description="注氮 10 分钟以上达到防爆灭火效果" />
|
|
||||||
</el-steps>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="button-group">
|
|
||||||
<el-button type="primary" size="small">手动启动</el-button>
|
|
||||||
<el-button type="primary" size="small">手动停止</el-button>
|
|
||||||
<el-button type="primary" size="small">紧急停止</el-button>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup lang="ts"></script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.card {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card :deep(.el-card__body) {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
overflow: hidden;
|
|
||||||
padding: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardHead {
|
|
||||||
margin: 0 0 15px 0;
|
|
||||||
padding: 0;
|
|
||||||
font-size: 16px;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: center;
|
|
||||||
color: #ffffff;
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardBody {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 20px;
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 并行步骤框 */
|
|
||||||
.parallel-box {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 15px;
|
|
||||||
margin-top: 15px;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* el-tag 样式调整 */
|
|
||||||
.parallel-box :deep(.el-tag) {
|
|
||||||
text-align: left;
|
|
||||||
padding: 8px 16px;
|
|
||||||
width: 60%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 并行步骤样式 */
|
|
||||||
.parallel-steps {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 8px;
|
|
||||||
margin-top: 10px;
|
|
||||||
padding: 10px;
|
|
||||||
background: rgba(255, 255, 255, 0.05);
|
|
||||||
border-radius: 6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 按钮组样式 */
|
|
||||||
.button-group {
|
|
||||||
display: flex;
|
|
||||||
gap: 1%;
|
|
||||||
justify-content: center;
|
|
||||||
margin-top: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.step-item {
|
|
||||||
padding: 8px 12px;
|
|
||||||
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
|
|
||||||
color: #ffffff;
|
|
||||||
border-radius: 4px;
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.step-title {
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 操作区域 */
|
|
||||||
.operation-area {
|
|
||||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
||||||
border-radius: 8px;
|
|
||||||
padding: 15px;
|
|
||||||
background: rgba(255, 255, 255, 0.05);
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.area-title {
|
|
||||||
margin: 0 0 15px 0;
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: bold;
|
|
||||||
color: #4facfe;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.buttons {
|
|
||||||
display: flex;
|
|
||||||
gap: 15px;
|
|
||||||
justify-content: center;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notes {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
gap: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.note {
|
|
||||||
margin: 0;
|
|
||||||
font-size: 11px;
|
|
||||||
color: #f5576c;
|
|
||||||
line-height: 1.6;
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.note-label {
|
|
||||||
font-weight: bold;
|
|
||||||
color: #f093fb;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 响应式 */
|
|
||||||
@media (max-width: 768px) {
|
|
||||||
.notes {
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,138 +0,0 @@
|
|||||||
<template>
|
|
||||||
<el-card class="card" shadow="hover" :body-style="{ padding: '10px' }">
|
|
||||||
<h2 class="cardHead">火灾探测器基本信息</h2>
|
|
||||||
<div class="cardBody">
|
|
||||||
<el-row :gutter="20" style="height: 100%">
|
|
||||||
<el-col :span="12" class="image-col">
|
|
||||||
<img src="/imgs/xianqvan.png" style="width: 100%; height: 100%" />
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-row class="info-row">
|
|
||||||
<el-col :span="10" class="info-label">厂家</el-col>
|
|
||||||
<el-col :span="12"><el-tag size="small">海湾公司</el-tag></el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-row class="info-row">
|
|
||||||
<el-col :span="10" class="info-label">型号</el-col>
|
|
||||||
<el-col :span="12"><el-tag size="small">CTI-155X</el-tag></el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-row class="info-row">
|
|
||||||
<el-col :span="10" class="info-label">投运日期</el-col>
|
|
||||||
<el-col :span="12"><el-tag size="small">2012-08-08</el-tag></el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-row class="info-row">
|
|
||||||
<el-col :span="10" class="info-label">使用环境</el-col>
|
|
||||||
<el-col :span="12"><el-tag size="small">温度 -5℃~45℃</el-tag></el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-row class="info-row">
|
|
||||||
<el-col :span="10" class="info-label">火灾响应规模</el-col>
|
|
||||||
<el-col :span="12"><el-tag size="small">10mm</el-tag></el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-row class="info-row">
|
|
||||||
<el-col :span="10" class="info-label">测量温度精度</el-col>
|
|
||||||
<el-col :span="12"><el-tag size="small">≤1℃</el-tag></el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-row class="info-row">
|
|
||||||
<el-col :span="10" class="info-label">定位精度</el-col>
|
|
||||||
<el-col :span="12"><el-tag size="small">≤1 米</el-tag></el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-row class="info-row">
|
|
||||||
<el-col :span="10" class="info-label">类型</el-col>
|
|
||||||
<el-col :span="12"><el-tag size="small">定温式</el-tag></el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-row class="info-row">
|
|
||||||
<el-col :span="10" class="info-label">报警温度</el-col>
|
|
||||||
<el-col :span="12"><el-tag size="small">85℃</el-tag></el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-row class="info-row">
|
|
||||||
<el-col :span="10" class="info-label">标准</el-col>
|
|
||||||
<el-col :span="12"><el-tag size="small">GB16280-2014</el-tag></el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup lang="ts"></script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.card {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card :deep(.el-card__body) {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
overflow: hidden;
|
|
||||||
padding: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardHead {
|
|
||||||
margin: 0 0 15px 0;
|
|
||||||
padding: 0;
|
|
||||||
font-size: 16px;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: center;
|
|
||||||
color: #ffffff;
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardBody {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* el-row 高度继承 */
|
|
||||||
.cardBody :deep(.el-row) {
|
|
||||||
/* height: 100%; */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* el-col 高度继承 */
|
|
||||||
.cardBody :deep(.el-col) {
|
|
||||||
/* height: 100%;
|
|
||||||
display: flex;
|
|
||||||
align-items: stretch; */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 图片列样式 */
|
|
||||||
.image-col {
|
|
||||||
height: 100%;
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 探测器图片样式 */
|
|
||||||
.detector-image {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
object-fit: contain;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 信息行样式 */
|
|
||||||
.info-row {
|
|
||||||
margin-bottom: 2%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 标签样式 */
|
|
||||||
.info-label {
|
|
||||||
font-size: 12px;
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* el-tag 样式 */
|
|
||||||
.info-row :deep(.el-tag) {
|
|
||||||
font-size: 11px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,225 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="table-container">
|
|
||||||
<!-- 2号主变 -->
|
|
||||||
<el-card class="card" shadow="hover" :body-style="{ padding: '10px' }">
|
|
||||||
<h2 class="cardHead">消火栓信息</h2>
|
|
||||||
<div class="table-wrapper" v-loading="arr.length === 0">
|
|
||||||
<el-table
|
|
||||||
:data="arr"
|
|
||||||
style="width: 100%"
|
|
||||||
class="full-height-table"
|
|
||||||
@cell-click="handleCellClick"
|
|
||||||
>
|
|
||||||
<el-table-column prop="equipmentName" label="设备名称" />
|
|
||||||
<el-table-column prop="equipmentModel" label="规格型号" />
|
|
||||||
<el-table-column prop="equipmentPlace" label="设备位置" />
|
|
||||||
<el-table-column prop="manufacturers" label="厂家" />
|
|
||||||
</el-table>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts" setup>
|
|
||||||
import { computed, onMounted, onUnmounted } from 'vue';
|
|
||||||
import emitter from '@/utils/emitter';
|
|
||||||
|
|
||||||
// 导入全局类型定义
|
|
||||||
/// <reference path="../../../global.d.ts" />
|
|
||||||
|
|
||||||
function handleCellClick(obj: any) {
|
|
||||||
console.log('点击:', obj);
|
|
||||||
emitter.emit('binding-obj-facility-move', obj.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
emitter.on('binding-data-update', () => {
|
|
||||||
console.log('@@binding-data-update');
|
|
||||||
dataInit();
|
|
||||||
});
|
|
||||||
|
|
||||||
const props = defineProps({
|
|
||||||
fontFamily: {
|
|
||||||
type: String,
|
|
||||||
default: '黑体'
|
|
||||||
},
|
|
||||||
fontSize: {
|
|
||||||
type: Number,
|
|
||||||
default: 12
|
|
||||||
},
|
|
||||||
testColor: {
|
|
||||||
type: String,
|
|
||||||
default: '#ffffff'
|
|
||||||
},
|
|
||||||
definitionItemJson: {
|
|
||||||
type: Object,
|
|
||||||
default: () => ({})
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
console.log('父传子itemjson:', props.definitionItemJson);
|
|
||||||
|
|
||||||
// 计算属性——既读取又修改
|
|
||||||
let computedSize = computed({
|
|
||||||
// 读取
|
|
||||||
get() {
|
|
||||||
return props.fontSize + 'px';
|
|
||||||
}, // 修改
|
|
||||||
set(val) {}
|
|
||||||
});
|
|
||||||
|
|
||||||
//数据初始化
|
|
||||||
async function dataInit() {}
|
|
||||||
|
|
||||||
// 在 onMounted 中
|
|
||||||
onMounted(async () => {
|
|
||||||
await dataInit();
|
|
||||||
});
|
|
||||||
|
|
||||||
onUnmounted(() => {
|
|
||||||
emitter.off('binding-data-update');
|
|
||||||
});
|
|
||||||
|
|
||||||
//node
|
|
||||||
interface EquipmentNode {
|
|
||||||
equipmentName: string; //设备名称
|
|
||||||
equipmentModel: string; //规格型号
|
|
||||||
equipmentPlace: string; //设备位置
|
|
||||||
manufacturers: string; //厂家
|
|
||||||
}
|
|
||||||
|
|
||||||
// 数据源头
|
|
||||||
// equipmentState 0正常 1故障
|
|
||||||
// currentState 0未动作 1报警 2动作 3分位 4关闭 5开启 6运行 7正常
|
|
||||||
// operation true屏蔽 false取消屏蔽 null
|
|
||||||
const arr: EquipmentNode[] = [
|
|
||||||
{
|
|
||||||
equipmentName: '生产综合楼一楼消火栓1',
|
|
||||||
equipmentModel: 'SN-65',
|
|
||||||
equipmentPlace: '生产综合楼一楼东走廊',
|
|
||||||
manufacturers: '宏达'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
equipmentName: '生产综合楼一楼消火栓2',
|
|
||||||
equipmentModel: 'SN-65',
|
|
||||||
equipmentPlace: '生产综合楼一楼西走廊',
|
|
||||||
manufacturers: '宏达'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
equipmentName: '生产综合楼二楼消火栓1',
|
|
||||||
equipmentModel: 'SN-65',
|
|
||||||
equipmentPlace: '生产综合楼二楼东走廊',
|
|
||||||
manufacturers: '宏达'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
equipmentName: '生产综合楼二楼消火栓2',
|
|
||||||
equipmentModel: 'SN-65',
|
|
||||||
equipmentPlace: '生产综合楼二楼西走廊',
|
|
||||||
manufacturers: '宏达'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
equipmentName: '生产综合楼一楼消火栓1',
|
|
||||||
equipmentModel: 'SN-65',
|
|
||||||
equipmentPlace: '生产综合楼一楼东走廊',
|
|
||||||
manufacturers: '宏达'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
equipmentName: '生产综合楼一楼消火栓2',
|
|
||||||
equipmentModel: 'SN-65',
|
|
||||||
equipmentPlace: '生产综合楼一楼西走廊',
|
|
||||||
manufacturers: '宏达'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
equipmentName: '生产综合楼二楼消火栓1',
|
|
||||||
equipmentModel: 'SN-65',
|
|
||||||
equipmentPlace: '生产综合楼二楼东走廊',
|
|
||||||
manufacturers: '宏达'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
equipmentName: '生产综合楼二楼消火栓2',
|
|
||||||
equipmentModel: 'SN-65',
|
|
||||||
equipmentPlace: '生产综合楼二楼西走廊',
|
|
||||||
manufacturers: '宏达'
|
|
||||||
}
|
|
||||||
];
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.table-container {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card :deep(.el-card__body) {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
overflow: hidden;
|
|
||||||
padding: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.table-wrapper {
|
|
||||||
flex: 1;
|
|
||||||
overflow: hidden;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
.full-height-table {
|
|
||||||
flex: 1;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.full-height-table :deep(.el-table__body-wrapper) {
|
|
||||||
flex: 1;
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardHead {
|
|
||||||
margin: 0 0 15px 0;
|
|
||||||
padding: 0;
|
|
||||||
font-size: 16px;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: center;
|
|
||||||
color: #ffffff;
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.operation-btn {
|
|
||||||
width: 60px;
|
|
||||||
min-width: 50px;
|
|
||||||
padding: 8px 12px;
|
|
||||||
height: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 控制表头文字大小 */
|
|
||||||
.full-height-table :deep(.el-table__header th) {
|
|
||||||
font-size: 13px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 控制表格内容文字大小 */
|
|
||||||
.full-height-table :deep(.el-table__body td) {
|
|
||||||
font-size: v-bind('computedSize');
|
|
||||||
color: v-bind('props.testColor');
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 控制标签文字大小 */
|
|
||||||
.full-height-table :deep(.el-tag) {
|
|
||||||
font-size: v-bind('computedSize'); /* 标签内的文字可以稍小一些 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 控制按钮文字大小 */
|
|
||||||
.full-height-table :deep(.el-button) {
|
|
||||||
font-size: v-bind('computedSize');
|
|
||||||
color: v-bind('props.testColor');
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,264 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="table-container">
|
|
||||||
<!-- 2号主变 -->
|
|
||||||
<el-card class="card" shadow="hover" :body-style="{ padding: '10px' }">
|
|
||||||
<h2 class="cardHead">运行信息</h2>
|
|
||||||
<div class="table-wrapper" v-loading="arr.length === 0">
|
|
||||||
<el-table
|
|
||||||
:data="arr"
|
|
||||||
style="width: 100%"
|
|
||||||
class="full-height-table"
|
|
||||||
@cell-click="handleCellClick"
|
|
||||||
>
|
|
||||||
<el-table-column prop="equipmentName" label="设备名称" />
|
|
||||||
|
|
||||||
<el-table-column label="设备状态">
|
|
||||||
<template #default="{ row }">
|
|
||||||
<el-tag :type="row.equipmentState === 0 ? 'success' : 'warning'">
|
|
||||||
{{ row.equipmentState === 0 ? '正常' : '故障' }}
|
|
||||||
</el-tag>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="当前状态">
|
|
||||||
<template #default="{ row }">
|
|
||||||
<el-tag type="primary">{{ row.currentState }}</el-tag>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作">
|
|
||||||
<template #default="{ row }">
|
|
||||||
<el-tag v-if="row.operation == null || row.operation === ''" type="info"
|
|
||||||
>无操作</el-tag
|
|
||||||
>
|
|
||||||
<template v-else>
|
|
||||||
<el-button type="primary" size="small">开启</el-button>
|
|
||||||
<el-button type="primary" size="small">关闭</el-button>
|
|
||||||
</template>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts" setup>
|
|
||||||
import { computed, onMounted, onUnmounted } from 'vue';
|
|
||||||
import emitter from '@/utils/emitter';
|
|
||||||
|
|
||||||
// 导入全局类型定义
|
|
||||||
/// <reference path="../../../global.d.ts" />
|
|
||||||
|
|
||||||
function handleCellClick(obj: any) {
|
|
||||||
console.log('点击:', obj);
|
|
||||||
emitter.emit('binding-obj-facility-move', obj.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
emitter.on('binding-data-update', () => {
|
|
||||||
console.log('@@binding-data-update');
|
|
||||||
dataInit();
|
|
||||||
});
|
|
||||||
|
|
||||||
const props = defineProps({
|
|
||||||
fontFamily: {
|
|
||||||
type: String,
|
|
||||||
default: '黑体'
|
|
||||||
},
|
|
||||||
fontSize: {
|
|
||||||
type: Number,
|
|
||||||
default: 12
|
|
||||||
},
|
|
||||||
testColor: {
|
|
||||||
type: String,
|
|
||||||
default: '#ffffff'
|
|
||||||
},
|
|
||||||
definitionItemJson: {
|
|
||||||
type: Object,
|
|
||||||
default: () => ({})
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
console.log('父传子itemjson:', props.definitionItemJson);
|
|
||||||
|
|
||||||
// 计算属性——既读取又修改
|
|
||||||
let computedSize = computed({
|
|
||||||
// 读取
|
|
||||||
get() {
|
|
||||||
return props.fontSize + 'px';
|
|
||||||
}, // 修改
|
|
||||||
set(val) {}
|
|
||||||
});
|
|
||||||
|
|
||||||
//数据初始化
|
|
||||||
async function dataInit() {}
|
|
||||||
|
|
||||||
// 在 onMounted 中
|
|
||||||
onMounted(async () => {
|
|
||||||
await dataInit();
|
|
||||||
});
|
|
||||||
|
|
||||||
onUnmounted(() => {
|
|
||||||
emitter.off('binding-data-update');
|
|
||||||
});
|
|
||||||
|
|
||||||
//node
|
|
||||||
interface EquipmentNode {
|
|
||||||
equipmentName: string; //设备名称
|
|
||||||
equipmentState: number; //设备状态 0正常 1故障
|
|
||||||
currentState: string; //当前状态
|
|
||||||
operation: boolean | null; //操作 true屏蔽 false取消屏蔽 null
|
|
||||||
}
|
|
||||||
|
|
||||||
// 数据源头
|
|
||||||
// equipmentState 0正常 1故障
|
|
||||||
// currentState 0未动作 1报警 2动作 3分位 4关闭 5开启 6运行 7正常
|
|
||||||
// operation true屏蔽 false取消屏蔽 null
|
|
||||||
const arr: EquipmentNode[] = [
|
|
||||||
{
|
|
||||||
equipmentName: '消防泵控制装置',
|
|
||||||
equipmentState: 0,
|
|
||||||
currentState: '运行',
|
|
||||||
operation: null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
equipmentName: '消防泵主供电源供电',
|
|
||||||
equipmentState: 0,
|
|
||||||
currentState: '关',
|
|
||||||
operation: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
equipmentName: '消防泵备用电源供电',
|
|
||||||
equipmentState: 0,
|
|
||||||
currentState: '开',
|
|
||||||
operation: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
equipmentName: '控制装置主供电源供电',
|
|
||||||
equipmentState: 0,
|
|
||||||
currentState: '开',
|
|
||||||
operation: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
equipmentName: '控制装置备用电源供电',
|
|
||||||
equipmentState: 0,
|
|
||||||
currentState: '关',
|
|
||||||
operation: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
equipmentName: '深井泵',
|
|
||||||
equipmentState: 0,
|
|
||||||
currentState: '关',
|
|
||||||
operation: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
equipmentName: '高压侧断路器',
|
|
||||||
equipmentState: 0,
|
|
||||||
currentState: '关',
|
|
||||||
operation: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
equipmentName: '1号消防泵',
|
|
||||||
equipmentState: 0,
|
|
||||||
currentState: '关',
|
|
||||||
operation: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
equipmentName: '2号消防泵',
|
|
||||||
equipmentState: 0,
|
|
||||||
currentState: '关',
|
|
||||||
operation: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
equipmentName: '消防水池水位',
|
|
||||||
equipmentState: 0,
|
|
||||||
currentState: '80%',
|
|
||||||
operation: null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
equipmentName: '管网压力',
|
|
||||||
equipmentState: 0,
|
|
||||||
currentState: '0.4Mpa',
|
|
||||||
operation: null
|
|
||||||
}
|
|
||||||
];
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.table-container {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card :deep(.el-card__body) {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
overflow: hidden;
|
|
||||||
padding: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.table-wrapper {
|
|
||||||
flex: 1;
|
|
||||||
overflow: hidden;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
.full-height-table {
|
|
||||||
flex: 1;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.full-height-table :deep(.el-table__body-wrapper) {
|
|
||||||
flex: 1;
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardHead {
|
|
||||||
margin: 0 0 15px 0;
|
|
||||||
padding: 0;
|
|
||||||
font-size: 16px;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: center;
|
|
||||||
color: #ffffff;
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.operation-btn {
|
|
||||||
width: 60px;
|
|
||||||
min-width: 50px;
|
|
||||||
padding: 8px 12px;
|
|
||||||
height: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 控制表头文字大小 */
|
|
||||||
.full-height-table :deep(.el-table__header th) {
|
|
||||||
font-size: 13px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 控制表格内容文字大小 */
|
|
||||||
.full-height-table :deep(.el-table__body td) {
|
|
||||||
font-size: v-bind('computedSize');
|
|
||||||
color: v-bind('props.testColor');
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 控制标签文字大小 */
|
|
||||||
.full-height-table :deep(.el-tag) {
|
|
||||||
font-size: v-bind('computedSize'); /* 标签内的文字可以稍小一些 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 控制按钮文字大小 */
|
|
||||||
.full-height-table :deep(.el-button) {
|
|
||||||
font-size: v-bind('computedSize');
|
|
||||||
color: v-bind('props.testColor');
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,143 +0,0 @@
|
|||||||
<template>
|
|
||||||
<el-card class="card">
|
|
||||||
<h3 class="cardHead">2号主变排油注氮灭火</h3>
|
|
||||||
|
|
||||||
<div class="cardBody">
|
|
||||||
<el-row :gutter="0" style="display: flex; align-items: center" class="row-spacing">
|
|
||||||
<el-col :span="12" class="full-width-col">
|
|
||||||
<el-tag type="danger" size="large" class="full-width-tag">火灾探测器1</el-tag>
|
|
||||||
</el-col>
|
|
||||||
|
|
||||||
<el-col :span="12" class="full-width-col">
|
|
||||||
<el-tag type="danger" size="large" class="full-width-tag">火灾探测器2</el-tag>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-row :gutter="0" style="display: flex; align-items: center" class="row-spacing">
|
|
||||||
<el-col :span="12" class="full-width-col">
|
|
||||||
<el-tag type="warning" size="large" class="full-width-tag">火灾探测器3</el-tag>
|
|
||||||
</el-col>
|
|
||||||
|
|
||||||
<el-col :span="12" class="full-width-col">
|
|
||||||
<el-tag type="primary" size="large" class="full-width-tag">火灾探测器4</el-tag>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-row :gutter="0" style="display: flex; align-items: center" class="row-spacing">
|
|
||||||
<el-col :span="12" class="full-width-col">
|
|
||||||
<el-tag type="danger" size="large" class="full-width-tag">注氮阀</el-tag>
|
|
||||||
</el-col>
|
|
||||||
|
|
||||||
<el-col :span="12" class="full-width-col">
|
|
||||||
<el-tag type="danger" size="large" class="full-width-tag">排油阀</el-tag>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-row :gutter="0" style="display: flex; align-items: center" class="row-spacing">
|
|
||||||
<el-col :span="12" class="full-width-col">
|
|
||||||
<el-tag type="danger" size="large" class="full-width-tag">断流阀</el-tag>
|
|
||||||
</el-col>
|
|
||||||
|
|
||||||
<el-col :span="12" class="full-width-col">
|
|
||||||
<el-tag type="primary" size="large" class="full-width-tag">氮气瓶</el-tag>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts" setup>
|
|
||||||
import { computed, ref, watch, onMounted } from 'vue';
|
|
||||||
|
|
||||||
const props = defineProps({
|
|
||||||
fontFamily: {
|
|
||||||
type: String,
|
|
||||||
default: 'Segoe UI'
|
|
||||||
},
|
|
||||||
fontSize: {
|
|
||||||
type: Number,
|
|
||||||
default: 14
|
|
||||||
},
|
|
||||||
testColor: {
|
|
||||||
type: String,
|
|
||||||
default: '#000000'
|
|
||||||
},
|
|
||||||
testBool: {
|
|
||||||
type: Boolean,
|
|
||||||
default: true
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
let computedSize = computed({
|
|
||||||
// 读取
|
|
||||||
get() {
|
|
||||||
return props.fontSize + 'px';
|
|
||||||
}, // 修改
|
|
||||||
set(val) {
|
|
||||||
console.log('有人修改了fullName', val);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.row-spacing {
|
|
||||||
margin-bottom: 10px; /* 每行之间的间隔 */
|
|
||||||
}
|
|
||||||
|
|
||||||
.full-width-col {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center; /* 水平居中 */
|
|
||||||
align-items: center; /* 垂直居中 */
|
|
||||||
}
|
|
||||||
|
|
||||||
.full-width-tag {
|
|
||||||
width: 85%; /* 填满父容器 */
|
|
||||||
text-align: center; /* 文字水平居中 */
|
|
||||||
display: flex; /* 使用 flexbox */
|
|
||||||
justify-content: center; /* 文字水平居中 */
|
|
||||||
align-items: center; /* 文字垂直居中 */
|
|
||||||
font-size: v-bind('computedSize');
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 闪烁动画 */
|
|
||||||
.blinking-tag {
|
|
||||||
animation: blink 1s infinite; /* 1秒一次无限循环 */
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes blink {
|
|
||||||
0%,
|
|
||||||
100% {
|
|
||||||
opacity: 1; /* 完全不透明 */
|
|
||||||
}
|
|
||||||
50% {
|
|
||||||
opacity: 0.3; /* 半透明 */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.card {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
/* max-width: 480px; */
|
|
||||||
color: v-bind('props.testColor');
|
|
||||||
font-family: v-bind('props.fontFamily');
|
|
||||||
/* font-family: 'Segoe UI'; */
|
|
||||||
font-size: v-bind('computedSize' - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardHead {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0px;
|
|
||||||
padding-bottom: 20px;
|
|
||||||
text-align: center;
|
|
||||||
color: #ffffff;
|
|
||||||
font-size: v-bind('computedSize' + 2);
|
|
||||||
}
|
|
||||||
.cardBody {
|
|
||||||
width: 100%;
|
|
||||||
margin: 0 0%;
|
|
||||||
padding: 0px 0%;
|
|
||||||
/* padding-bottom: 15px; */
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,135 +0,0 @@
|
|||||||
/**
|
|
||||||
* Node 服务示例
|
|
||||||
* 处理设备节点相关的 STOMP 消息
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { stompService } from '@/utils/stompService';
|
|
||||||
|
|
||||||
interface NodeData {
|
|
||||||
id: string;
|
|
||||||
name: string;
|
|
||||||
status: string;
|
|
||||||
[key: string]: any;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface NodeRuntime {
|
|
||||||
node: NodeData;
|
|
||||||
[key: string]: any;
|
|
||||||
}
|
|
||||||
|
|
||||||
class NodeService {
|
|
||||||
public runtimes: Record<string, NodeRuntime> = {};
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
// 注册服务
|
|
||||||
stompService.registerService('node', this);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* STOMP 连接成功后调用
|
|
||||||
*/
|
|
||||||
mqttReady(): void {
|
|
||||||
console.log('[NodeService] STOMP 已就绪');
|
|
||||||
// 可以在这里请求初始化数据
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 连接丢失时调用
|
|
||||||
*/
|
|
||||||
onConnectionLost(): void {
|
|
||||||
console.log('[NodeService] STOMP 连接丢失');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 处理 Node 初始化消息
|
|
||||||
* @param value 初始化数据
|
|
||||||
*/
|
|
||||||
msgNodeInit(value: any): void {
|
|
||||||
console.log('[NodeService] 收到 Node 初始化数据:', value);
|
|
||||||
|
|
||||||
// 处理初始化逻辑
|
|
||||||
if (value && Array.isArray(value.nodes)) {
|
|
||||||
value.nodes.forEach((node: NodeData) => {
|
|
||||||
this.runtimes[node.id] = {
|
|
||||||
node,
|
|
||||||
lastUpdate: new Date()
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 处理 Node 更新消息
|
|
||||||
* @param value 更新数据
|
|
||||||
*/
|
|
||||||
msgNode(value: any): void {
|
|
||||||
console.log('[NodeService] 收到 Node 更新:', value);
|
|
||||||
|
|
||||||
if (value && value.id) {
|
|
||||||
const runtime = this.runtimes[value.id];
|
|
||||||
if (runtime) {
|
|
||||||
// 更新现有节点
|
|
||||||
runtime.node = { ...runtime.node, ...value };
|
|
||||||
runtime.lastUpdate = new Date();
|
|
||||||
} else {
|
|
||||||
// 添加新节点
|
|
||||||
this.runtimes[value.id] = {
|
|
||||||
node: value,
|
|
||||||
lastUpdate: new Date()
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// 触发更新事件(可以使用 mitt 或其他事件总线)
|
|
||||||
this.emitNodeUpdate(value.id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取节点数据
|
|
||||||
* @param nodeId 节点 ID
|
|
||||||
*/
|
|
||||||
getNode(nodeId: string): NodeData | null {
|
|
||||||
const runtime = this.runtimes[nodeId];
|
|
||||||
return runtime ? runtime.node : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取所有节点
|
|
||||||
*/
|
|
||||||
getAllNodes(): NodeData[] {
|
|
||||||
return Object.values(this.runtimes).map((runtime) => runtime.node);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新节点属性
|
|
||||||
* @param nodeId 节点 ID
|
|
||||||
* @param updates 更新的属性
|
|
||||||
*/
|
|
||||||
updateNode(nodeId: string, updates: Partial<NodeData>): void {
|
|
||||||
const runtime = this.runtimes[nodeId];
|
|
||||||
if (runtime) {
|
|
||||||
runtime.node = { ...runtime.node, ...updates };
|
|
||||||
runtime.lastUpdate = new Date();
|
|
||||||
|
|
||||||
// 发送更新到服务器
|
|
||||||
stompService.send('/app/web/write', 'nodeUpdate', {
|
|
||||||
id: nodeId,
|
|
||||||
updates
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 触发节点更新事件
|
|
||||||
* @param nodeId 节点 ID
|
|
||||||
*/
|
|
||||||
private emitNodeUpdate(nodeId: string): void {
|
|
||||||
// 这里可以使用 mitt 事件总线
|
|
||||||
// emitter.emit('node-update', nodeId);
|
|
||||||
console.log(`[NodeService] 节点 ${nodeId} 已更新`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 导出单例
|
|
||||||
export const nodeService = new NodeService();
|
|
||||||
export default nodeService;
|
|
||||||
@ -1,271 +0,0 @@
|
|||||||
import { dayjs } from 'element-plus';
|
|
||||||
|
|
||||||
interface RecIn {
|
|
||||||
Node: {
|
|
||||||
InTypeIn: [number, string][];
|
|
||||||
TypeBase: [number, string][];
|
|
||||||
};
|
|
||||||
CONST: {
|
|
||||||
STR: {
|
|
||||||
EnumType: [number, string][];
|
|
||||||
};
|
|
||||||
YX: {
|
|
||||||
EnumType: [number, string][];
|
|
||||||
};
|
|
||||||
UserPage: [string, string][];
|
|
||||||
};
|
|
||||||
EnumTypeVal: [number, string][][];
|
|
||||||
EnumTypeValFun: Function[];
|
|
||||||
regex: any;
|
|
||||||
trans: (val: any, enumArr: [number, string][]) => string;
|
|
||||||
}
|
|
||||||
export const Rec: Partial<RecIn> = {};
|
|
||||||
Rec.Node = {} as RecIn['Node'];
|
|
||||||
Rec.CONST = {} as RecIn['CONST'];
|
|
||||||
Rec.CONST.STR = {} as RecIn['CONST']['STR'];
|
|
||||||
Rec.CONST.YX = {} as RecIn['CONST']['YX'];
|
|
||||||
Rec.trans = (index, type) => {
|
|
||||||
for (let i = 0; i < type.length; i++) {
|
|
||||||
if (type[i][0] == index) {
|
|
||||||
return type[i][1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return '*未知*';
|
|
||||||
};
|
|
||||||
// 所有输入类型
|
|
||||||
Rec.Node.InTypeIn = [
|
|
||||||
[1, '遥信'],
|
|
||||||
[2, '遥测']
|
|
||||||
];
|
|
||||||
export const getIndex = (num: number) => {
|
|
||||||
switch (num) {
|
|
||||||
case 1:
|
|
||||||
return 100;
|
|
||||||
case 2:
|
|
||||||
return 0;
|
|
||||||
default:
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 节点状态
|
|
||||||
* @param num Node里面的sig值
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
export const getNodeStatus = (sig: number) => {
|
|
||||||
switch (sig) {
|
|
||||||
case -2000:
|
|
||||||
return '未初始化状态';
|
|
||||||
case 0:
|
|
||||||
return '正常';
|
|
||||||
case 1:
|
|
||||||
return '开启';
|
|
||||||
case 5:
|
|
||||||
return '联动关';
|
|
||||||
case 10:
|
|
||||||
return '高联动';
|
|
||||||
case -10:
|
|
||||||
return '低联动';
|
|
||||||
case 20:
|
|
||||||
return '高限告警';
|
|
||||||
case -20:
|
|
||||||
return '低限告警';
|
|
||||||
default:
|
|
||||||
return '未知状态';
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 节点颜色
|
|
||||||
* @param num Node里面的sig值
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
export const getNodeColor = (sig: number) => {
|
|
||||||
switch (sig) {
|
|
||||||
case -2000:
|
|
||||||
return 'info';
|
|
||||||
case 0:
|
|
||||||
case 1:
|
|
||||||
return 'primary';
|
|
||||||
case 5:
|
|
||||||
case 10:
|
|
||||||
case -10:
|
|
||||||
return 'warning';
|
|
||||||
case 20:
|
|
||||||
case -20:
|
|
||||||
return 'danger';
|
|
||||||
default:
|
|
||||||
return 'info';
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// 四遥基本类型
|
|
||||||
Rec.Node.TypeBase = [
|
|
||||||
[1, '遥信'],
|
|
||||||
[2, '遥测'],
|
|
||||||
[3, '遥控'],
|
|
||||||
[4, '遥调']
|
|
||||||
];
|
|
||||||
|
|
||||||
// 定值转化的 类型
|
|
||||||
Rec.CONST.STR.EnumType = [
|
|
||||||
[0, '缺省'],
|
|
||||||
[1, '普通开关'],
|
|
||||||
[2, '数值'],
|
|
||||||
[3, '时间秒'],
|
|
||||||
[11, 'RY空调模式'],
|
|
||||||
[12, '空调温度'],
|
|
||||||
[13, '空调风速'],
|
|
||||||
[14, '国网空调模式'],
|
|
||||||
[21, 'KTC空调']
|
|
||||||
];
|
|
||||||
Rec.CONST.YX.EnumType = [
|
|
||||||
[0, '颜色'],
|
|
||||||
[1, '文字'],
|
|
||||||
[2, '颜色+文字']
|
|
||||||
];
|
|
||||||
|
|
||||||
Rec.EnumTypeVal = []; // 定值类型,用于编辑时的选择
|
|
||||||
Rec.EnumTypeValFun = []; // 转换函数,用于显示与控制
|
|
||||||
|
|
||||||
Rec.EnumTypeVal[100] = [
|
|
||||||
[0, 'green'],
|
|
||||||
[1, 'yellow'],
|
|
||||||
[2, 'red']
|
|
||||||
];
|
|
||||||
Rec.EnumTypeVal[101] = [
|
|
||||||
[0, '正常'],
|
|
||||||
[1, '异常'],
|
|
||||||
[2, '故障'],
|
|
||||||
[3, '报警'],
|
|
||||||
[4, '运行'],
|
|
||||||
[5, '关闭']
|
|
||||||
];
|
|
||||||
Rec.EnumTypeVal[102] = [
|
|
||||||
[0, '正常,green'],
|
|
||||||
[1, '异常,brown'],
|
|
||||||
[2, '故障,yellow'],
|
|
||||||
[3, '报警,red'],
|
|
||||||
[4, '运行,blue'],
|
|
||||||
[5, '关闭,purple']
|
|
||||||
];
|
|
||||||
// 缺省
|
|
||||||
Rec.EnumTypeVal[0] = [
|
|
||||||
[0, '关闭'],
|
|
||||||
[1, '开启']
|
|
||||||
];
|
|
||||||
|
|
||||||
Rec.EnumTypeValFun[0] = function (val: any, index: number) {
|
|
||||||
return Rec.trans!(val, Rec.EnumTypeVal![index + 0]);
|
|
||||||
};
|
|
||||||
//Rec.EnumTypeValFun[etype](val,getIndex(btype));
|
|
||||||
|
|
||||||
// 遥控
|
|
||||||
Rec.EnumTypeVal[1] = [
|
|
||||||
[0, '关闭'],
|
|
||||||
[1, '开启']
|
|
||||||
];
|
|
||||||
|
|
||||||
Rec.EnumTypeValFun[1] = function (val: any, index: number) {
|
|
||||||
return Rec.trans!(val, Rec.EnumTypeVal![index + 1]);
|
|
||||||
};
|
|
||||||
|
|
||||||
// 数值
|
|
||||||
Rec.EnumTypeVal[2] = [];
|
|
||||||
Rec.EnumTypeValFun[2] = function (val: any, index: number) {
|
|
||||||
return Rec.trans!(val, Rec.EnumTypeVal![index + 2]);
|
|
||||||
};
|
|
||||||
|
|
||||||
// timestamp 转换成时间
|
|
||||||
Rec.EnumTypeValFun[3] = function (val: any) {
|
|
||||||
// Ext.Date.format(val * 1000, 'Y-m-d H:i:s')
|
|
||||||
dayjs.unix(val).format('YYYY-MM-DD HH:mm:ss');
|
|
||||||
};
|
|
||||||
|
|
||||||
// 国网空调模式
|
|
||||||
Rec.EnumTypeVal[14] = [
|
|
||||||
[4, '自动'],
|
|
||||||
[0, '制冷'],
|
|
||||||
[1, '制热'],
|
|
||||||
[3, '除湿'],
|
|
||||||
[2, '送风']
|
|
||||||
];
|
|
||||||
|
|
||||||
Rec.EnumTypeValFun[14] = function (val: any, index: number) {
|
|
||||||
return Rec.trans!(val, Rec.EnumTypeVal![14]);
|
|
||||||
};
|
|
||||||
|
|
||||||
// RY空调模式
|
|
||||||
Rec.EnumTypeVal[11] = [
|
|
||||||
[0, '自动'],
|
|
||||||
[1, '制冷'],
|
|
||||||
[2, '制热'],
|
|
||||||
[3, '除湿'],
|
|
||||||
[4, '送风']
|
|
||||||
];
|
|
||||||
|
|
||||||
Rec.EnumTypeValFun[11] = function (val: any, index: number) {
|
|
||||||
return Rec.trans!(val, Rec.EnumTypeVal![11]);
|
|
||||||
};
|
|
||||||
|
|
||||||
// 空调温度
|
|
||||||
Rec.EnumTypeVal[12] = [
|
|
||||||
[16, '16℃'],
|
|
||||||
[17, '17℃'],
|
|
||||||
[18, '18℃'],
|
|
||||||
[19, '19℃'],
|
|
||||||
[20, '20℃'],
|
|
||||||
[21, '21℃'],
|
|
||||||
[22, '22℃'],
|
|
||||||
[23, '23℃'],
|
|
||||||
[24, '24℃'],
|
|
||||||
[25, '25℃'],
|
|
||||||
[26, '26℃'],
|
|
||||||
[27, '27℃'],
|
|
||||||
[28, '28℃'],
|
|
||||||
[29, '29℃'],
|
|
||||||
[30, '30℃']
|
|
||||||
];
|
|
||||||
|
|
||||||
Rec.EnumTypeValFun[12] = function (val: any, index: number) {
|
|
||||||
return Rec.trans!(val, Rec.EnumTypeVal![12]);
|
|
||||||
};
|
|
||||||
|
|
||||||
// 空调风速
|
|
||||||
Rec.EnumTypeVal[13] = [
|
|
||||||
[0, '自动'],
|
|
||||||
[1, '低'],
|
|
||||||
[2, '中'],
|
|
||||||
[3, '高']
|
|
||||||
];
|
|
||||||
|
|
||||||
Rec.EnumTypeValFun[13] = function (val: any, index: number) {
|
|
||||||
return Rec.trans!(val, Rec.EnumTypeVal![13]);
|
|
||||||
};
|
|
||||||
|
|
||||||
// KTC 空调
|
|
||||||
Rec.EnumTypeVal[21] = [
|
|
||||||
[0, '关闭'],
|
|
||||||
[1, '制冷'],
|
|
||||||
[2, '制热']
|
|
||||||
];
|
|
||||||
|
|
||||||
Rec.EnumTypeValFun[21] = function (val: any, index: number) {
|
|
||||||
return Rec.trans!(val, Rec.EnumTypeVal![21]);
|
|
||||||
};
|
|
||||||
//
|
|
||||||
Rec.EnumTypeValFun[21]();
|
|
||||||
// 用户的缺省界面
|
|
||||||
Rec.CONST.UserPage = [
|
|
||||||
['Admin', 'Admin'],
|
|
||||||
['User', 'User']
|
|
||||||
];
|
|
||||||
|
|
||||||
// 正则表达式
|
|
||||||
Rec.regex = {
|
|
||||||
// Modbus 配置的正则表达式
|
|
||||||
modbusCfg:
|
|
||||||
/^(?:25[0-4]|2[0-4]\d|1\d{2}|[1-9]\d|[1-9]):(?:[1-6]|10):(?:6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}|0)(?::[2-9])?$/,
|
|
||||||
modbusParm: /^(?:\d+(?::\d+){0,2})?$/
|
|
||||||
};
|
|
||||||
@ -1,87 +0,0 @@
|
|||||||
const EnumTypeVal: [number, string][][] = [];
|
|
||||||
const EnumTypeValFun: ((val: number) => string)[] = [];
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param index
|
|
||||||
* @param type
|
|
||||||
* @returns {string|*}
|
|
||||||
*/
|
|
||||||
const trans = function (index: number, type: any[]) {
|
|
||||||
for (let i = 0; i < type.length; i++) {
|
|
||||||
if (type[i][0] == index) {
|
|
||||||
return type[i][1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return '*未知*';
|
|
||||||
};
|
|
||||||
|
|
||||||
const EnumType = [
|
|
||||||
[0, '缺省'],
|
|
||||||
[1, '普通开关'],
|
|
||||||
[2, '数值'],
|
|
||||||
[3, '时间秒'],
|
|
||||||
[11, 'RY空调模式'],
|
|
||||||
[12, '空调温度'],
|
|
||||||
[13, '空调风速'],
|
|
||||||
[14, '国网空调模式'],
|
|
||||||
[21, 'KTC空调']
|
|
||||||
];
|
|
||||||
|
|
||||||
// 缺省
|
|
||||||
EnumTypeVal[0] = [
|
|
||||||
[0, '关闭'],
|
|
||||||
[1, '开启']
|
|
||||||
];
|
|
||||||
EnumTypeValFun[0] = function (val: number) {
|
|
||||||
return trans(val, EnumTypeVal[0]);
|
|
||||||
};
|
|
||||||
|
|
||||||
// 遥控
|
|
||||||
EnumTypeVal[1] = [
|
|
||||||
[0, '关闭'],
|
|
||||||
[1, '开启']
|
|
||||||
];
|
|
||||||
EnumTypeValFun[1] = function (val) {
|
|
||||||
return trans(val, EnumTypeVal[1]);
|
|
||||||
};
|
|
||||||
|
|
||||||
// 数值
|
|
||||||
EnumTypeVal[2] = [];
|
|
||||||
EnumTypeValFun[2] = function (val) {
|
|
||||||
return val.toString();
|
|
||||||
};
|
|
||||||
|
|
||||||
// timestamp 转换成时间
|
|
||||||
EnumTypeValFun[3] = function (val) {
|
|
||||||
return format(val * 1000, 'Y-m-d H:i:s');
|
|
||||||
};
|
|
||||||
|
|
||||||
export { EnumTypeVal, EnumTypeValFun };
|
|
||||||
|
|
||||||
const format = function (date: Date, format: string) {
|
|
||||||
var formatFunctions = formatFunctions;
|
|
||||||
|
|
||||||
if (!Ext.isDate(date)) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (formatFunctions[format] == null) {
|
|
||||||
utilDate.createFormat(format);
|
|
||||||
}
|
|
||||||
|
|
||||||
return formatFunctions[format].call(date) + '';
|
|
||||||
};
|
|
||||||
|
|
||||||
const formatFunctions: { [key: string]: () => string } = {
|
|
||||||
MS: function () {
|
|
||||||
// UTC milliseconds since Unix epoch (MS-AJAX serialized date format (MRSF))
|
|
||||||
return '\\/Date(' + this.getTime() + ')\\/';
|
|
||||||
},
|
|
||||||
time: function () {
|
|
||||||
return this.getTime().toString();
|
|
||||||
},
|
|
||||||
timestamp: function () {
|
|
||||||
return format(this.getTime(), 'U');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@ -1,91 +0,0 @@
|
|||||||
<template>
|
|
||||||
<mt-preview ref="MtPreviewRef" @on-event-call-back="onEventCallBack"></mt-preview>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup lang="ts">
|
|
||||||
// 定义组件名称用于 keep-alive
|
|
||||||
defineOptions({
|
|
||||||
name: 'PreviewIndex'
|
|
||||||
});
|
|
||||||
|
|
||||||
import { MtPreview } from '@/export';
|
|
||||||
import { onMounted, ref, reactive, onUnmounted } from 'vue';
|
|
||||||
import { ElMessage } from 'element-plus';
|
|
||||||
import { globalStore } from '@/components/mt-edit/store/global';
|
|
||||||
import { useExportJsonToDoneJson } from '@/components/mt-edit/composables';
|
|
||||||
import { useRoute } from 'vue-router';
|
|
||||||
import { modelApi } from '@/utils/request';
|
|
||||||
const route = useRoute();
|
|
||||||
|
|
||||||
const MtPreviewRef = ref<InstanceType<typeof MtPreview>>();
|
|
||||||
const onEventCallBack = (type: string, item_id: string) => {
|
|
||||||
console.log(type, item_id);
|
|
||||||
|
|
||||||
if (type == 'test-dialog') {
|
|
||||||
ElMessage.success(`获取到了id:${item_id}`);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
onUnmounted(() => {
|
|
||||||
console.log('view卸载完毕');
|
|
||||||
});
|
|
||||||
|
|
||||||
async function newLoadModel() {
|
|
||||||
let endJson = {
|
|
||||||
menuType: route.query.screen
|
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
|
||||||
const response = await modelApi.model_getModelData_post(endJson);
|
|
||||||
|
|
||||||
if (response.code == 200) {
|
|
||||||
const result = await response.data;
|
|
||||||
const { canvasCfg, gridCfg, importDoneJson } = useExportJsonToDoneJson(result);
|
|
||||||
|
|
||||||
// 对 importDoneJson 集合中每个元素的 props 属性使用 reactive 包装
|
|
||||||
const processedImportDoneJson = importDoneJson.map((item) => {
|
|
||||||
if (item.props) {
|
|
||||||
return {
|
|
||||||
...item,
|
|
||||||
props: reactive(item.props || {})
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
...item,
|
|
||||||
props: reactive(item.props || {})
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
console.log('processedImportDoneJson:', processedImportDoneJson);
|
|
||||||
MtPreviewRef.value?.setNewImportJson({ canvasCfg, gridCfg, json: processedImportDoneJson });
|
|
||||||
if (globalStore.group_ids.has(route.query.screen as string)) {
|
|
||||||
globalStore.group_ids.delete(route.query.screen as string);
|
|
||||||
}
|
|
||||||
globalStore.group_ids.set(
|
|
||||||
route.query.screen as string,
|
|
||||||
processedImportDoneJson.map((item) => item.id)
|
|
||||||
);
|
|
||||||
|
|
||||||
ElMessage.success('数据模型加载成功');
|
|
||||||
} else {
|
|
||||||
ElMessage.error(`数据模型加载失败: ${response.code} - ${response.message}`);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('请求错误:', error);
|
|
||||||
ElMessage.error('网络请求失败');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
console.log('view挂载完毕');
|
|
||||||
newLoadModel();
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.vertical-radio-group {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 5px;
|
|
||||||
align-items: flex-start;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,91 +0,0 @@
|
|||||||
<template>
|
|
||||||
<mt-preview ref="MtPreviewRef" @on-event-call-back="onEventCallBack"></mt-preview>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup lang="ts">
|
|
||||||
// 定义组件名称用于 keep-alive
|
|
||||||
defineOptions({
|
|
||||||
name: 'PreviewIndex'
|
|
||||||
});
|
|
||||||
|
|
||||||
import { MtPreview } from '@/export';
|
|
||||||
import { onMounted, ref, reactive, onUnmounted } from 'vue';
|
|
||||||
import { ElMessage } from 'element-plus';
|
|
||||||
import { globalStore } from '@/components/mt-edit/store/global';
|
|
||||||
import { useExportJsonToDoneJson } from '@/components/mt-edit/composables';
|
|
||||||
import { useRoute } from 'vue-router';
|
|
||||||
import { modelApi } from '@/utils/request';
|
|
||||||
const route = useRoute();
|
|
||||||
|
|
||||||
const MtPreviewRef = ref<InstanceType<typeof MtPreview>>();
|
|
||||||
const onEventCallBack = (type: string, item_id: string) => {
|
|
||||||
console.log(type, item_id);
|
|
||||||
|
|
||||||
if (type == 'test-dialog') {
|
|
||||||
ElMessage.success(`获取到了id:${item_id}`);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
onUnmounted(() => {
|
|
||||||
console.log('view卸载完毕');
|
|
||||||
});
|
|
||||||
|
|
||||||
async function newLoadModel() {
|
|
||||||
let endJson = {
|
|
||||||
menuType: route.query.screen
|
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
|
||||||
const response = await modelApi.model_getModelData_post(endJson);
|
|
||||||
|
|
||||||
if (response.code == 200) {
|
|
||||||
const result = await response.data;
|
|
||||||
const { canvasCfg, gridCfg, importDoneJson } = useExportJsonToDoneJson(result);
|
|
||||||
|
|
||||||
// 对 importDoneJson 集合中每个元素的 props 属性使用 reactive 包装
|
|
||||||
const processedImportDoneJson = importDoneJson.map((item) => {
|
|
||||||
if (item.props) {
|
|
||||||
return {
|
|
||||||
...item,
|
|
||||||
props: reactive(item.props || {})
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
...item,
|
|
||||||
props: reactive(item.props || {})
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
console.log('processedImportDoneJson:', processedImportDoneJson);
|
|
||||||
MtPreviewRef.value?.setNewImportJson({ canvasCfg, gridCfg, json: processedImportDoneJson });
|
|
||||||
if (globalStore.group_ids.has(route.query.screen as string)) {
|
|
||||||
globalStore.group_ids.delete(route.query.screen as string);
|
|
||||||
}
|
|
||||||
globalStore.group_ids.set(
|
|
||||||
route.query.screen as string,
|
|
||||||
processedImportDoneJson.map((item) => item.id)
|
|
||||||
);
|
|
||||||
|
|
||||||
ElMessage.success('数据模型加载成功');
|
|
||||||
} else {
|
|
||||||
ElMessage.error(`数据模型加载失败: ${response.code} - ${response.message}`);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('请求错误:', error);
|
|
||||||
ElMessage.error('网络请求失败');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
console.log('view挂载完毕');
|
|
||||||
newLoadModel();
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.vertical-radio-group {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 5px;
|
|
||||||
align-items: flex-start;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,93 +0,0 @@
|
|||||||
<template>
|
|
||||||
<mt-preview ref="MtPreviewRef" @on-event-call-back="onEventCallBack"></mt-preview>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<!-- 2号主变 -->
|
|
||||||
|
|
||||||
<script setup lang="ts">
|
|
||||||
// 定义组件名称用于 keep-alive
|
|
||||||
defineOptions({
|
|
||||||
name: 'PreviewIndex'
|
|
||||||
});
|
|
||||||
|
|
||||||
import { MtPreview } from '@/export';
|
|
||||||
import { onMounted, ref, reactive, onUnmounted } from 'vue';
|
|
||||||
import { ElMessage } from 'element-plus';
|
|
||||||
import { globalStore } from '@/components/mt-edit/store/global';
|
|
||||||
import { useExportJsonToDoneJson } from '@/components/mt-edit/composables';
|
|
||||||
import { useRoute } from 'vue-router';
|
|
||||||
import { modelApi } from '@/utils/request';
|
|
||||||
const route = useRoute();
|
|
||||||
|
|
||||||
const MtPreviewRef = ref<InstanceType<typeof MtPreview>>();
|
|
||||||
const onEventCallBack = (type: string, item_id: string) => {
|
|
||||||
console.log(type, item_id);
|
|
||||||
|
|
||||||
if (type == 'test-dialog') {
|
|
||||||
ElMessage.success(`获取到了id:${item_id}`);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
onUnmounted(() => {
|
|
||||||
console.log('view卸载完毕');
|
|
||||||
});
|
|
||||||
|
|
||||||
async function newLoadModel() {
|
|
||||||
let endJson = {
|
|
||||||
menuType: route.query.screen
|
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
|
||||||
const response = await modelApi.model_getModelData_post(endJson);
|
|
||||||
|
|
||||||
if (response.code == 200) {
|
|
||||||
const result = await response.data;
|
|
||||||
const { canvasCfg, gridCfg, importDoneJson } = useExportJsonToDoneJson(result);
|
|
||||||
|
|
||||||
// 对 importDoneJson 集合中每个元素的 props 属性使用 reactive 包装
|
|
||||||
const processedImportDoneJson = importDoneJson.map((item) => {
|
|
||||||
if (item.props) {
|
|
||||||
return {
|
|
||||||
...item,
|
|
||||||
props: reactive(item.props || {})
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
...item,
|
|
||||||
props: reactive(item.props || {})
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
console.log('processedImportDoneJson:', processedImportDoneJson);
|
|
||||||
MtPreviewRef.value?.setNewImportJson({ canvasCfg, gridCfg, json: processedImportDoneJson });
|
|
||||||
if (globalStore.group_ids.has(route.query.screen as string)) {
|
|
||||||
globalStore.group_ids.delete(route.query.screen as string);
|
|
||||||
}
|
|
||||||
globalStore.group_ids.set(
|
|
||||||
route.query.screen as string,
|
|
||||||
processedImportDoneJson.map((item) => item.id)
|
|
||||||
);
|
|
||||||
|
|
||||||
ElMessage.success('数据模型加载成功');
|
|
||||||
} else {
|
|
||||||
ElMessage.error(`数据模型加载失败: ${response.code} - ${response.message}`);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('请求错误:', error);
|
|
||||||
ElMessage.error('网络请求失败');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
console.log('view挂载完毕');
|
|
||||||
newLoadModel();
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.vertical-radio-group {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 5px;
|
|
||||||
align-items: flex-start;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -0,0 +1 @@
|
|||||||
|
.vertical-radio-group[data-v-67a3c190]{display:flex;flex-direction:column;gap:5px;align-items:flex-start}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
.vertical-radio-group[data-v-bdccb96b]{display:flex;flex-direction:column;gap:5px;align-items:flex-start}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
import{d as g,aP as v,r as y,$ as w,Z as x,aw as M,x as l,O as c,I as a,i as h,h as E,o as J,_ as k}from"./index-9847718b.js";import{u as C}from"./index-fd059ba6.js";import{M as D}from"./index-868f5209.js";const I=g({__name:"homeExceptionFacility",setup(q){const n=v(),p=y(),d=(r,o)=>{console.log(r,o),r=="test-dialog"&&a.success(`获取到了id:${o}`)};w(()=>{console.log("view卸载完毕")}),x(()=>{i()});async function i(){var o;let r={menuType:n.query.screen};try{const s=await M.model_getModelData_post(r);if(s.code==200){const u=await s.data,{canvasCfg:_,gridCfg:f,importDoneJson:m}=C(u),t=m.map(e=>e.props?{...e,props:l(e.props||{})}:{...e,props:l(e.props||{})});console.log("processedImportDoneJson:",t),(o=p.value)==null||o.setNewImportJson({canvasCfg:_,gridCfg:f,json:t}),c.group_ids.has(n.query.screen)&&c.group_ids.delete(n.query.screen),c.group_ids.set(n.query.screen,t.map(e=>e.id)),a.success("数据模型加载成功")}else a.error(`数据模型加载失败: ${s.code} - ${s.message}`)}catch(s){console.error("请求错误:",s),a.error("网络请求失败")}}return(r,o)=>(J(),h(E(D),{ref_key:"MtPreviewRef",ref:p,onOnEventCallBack:d},null,512))}});const b=k(I,[["__scopeId","data-v-d872abad"]]);export{b as default};
|
||||||
@ -0,0 +1 @@
|
|||||||
|
.vertical-radio-group[data-v-d872abad]{display:flex;flex-direction:column;gap:5px;align-items:flex-start}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
import{d as g,aP as v,r as M,$ as w,Z as y,aw as h,x as u,O as c,I as a,i as J,h as x,o as O,_ as k}from"./index-9847718b.js";import{u as C}from"./index-fd059ba6.js";import{M as D}from"./index-868f5209.js";const I=g({name:"homeOverrunMessage",__name:"homeOverrunMessage",setup(q){const n=v(),p=M(),l=(r,o)=>{console.log(r,o),r=="test-dialog"&&a.success(`获取到了id:${o}`)};w(()=>{console.log("view卸载完毕")}),y(()=>{d()});async function d(){var o;let r={menuType:n.query.screen};try{const s=await h.model_getModelData_post(r);if(s.code==200){const _=await s.data,{canvasCfg:f,gridCfg:i,importDoneJson:m}=C(_),t=m.map(e=>e.props?{...e,props:u(e.props||{})}:{...e,props:u(e.props||{})});console.log("processedImportDoneJson:",t),(o=p.value)==null||o.setNewImportJson({canvasCfg:f,gridCfg:i,json:t}),c.group_ids.has(n.query.screen)&&c.group_ids.delete(n.query.screen),c.group_ids.set(n.query.screen,t.map(e=>e.id)),a.success("数据模型加载成功")}else a.error(`数据模型加载失败: ${s.code} - ${s.message}`)}catch(s){console.error("请求错误:",s),a.error("网络请求失败")}}return(r,o)=>(O(),J(x(D),{ref_key:"MtPreviewRef",ref:p,onOnEventCallBack:l},null,512))}});const $=k(I,[["__scopeId","data-v-436f0bc5"]]);export{$ as default};
|
||||||
@ -0,0 +1 @@
|
|||||||
|
.vertical-radio-group[data-v-436f0bc5]{display:flex;flex-direction:column;gap:5px;align-items:flex-start}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
.vertical-radio-group[data-v-d0f0d48f]{display:flex;flex-direction:column;gap:5px;align-items:flex-start}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
.common-layout[data-v-635be2c1]{height:100vh;display:flex;align-items:center;justify-content:center}.layout-container[data-v-635be2c1]{width:100%;height:100vh;display:flex;flex-direction:column}.header-part[data-v-635be2c1]{height:18.75vh;background-color:#b3c0d1;display:flex;align-items:center;justify-content:center;font-size:36px;font-weight:700;color:#333}.main-part[data-v-635be2c1]{height:74.21875vh;background-color:#e9eef3;display:flex;align-items:center;justify-content:center;font-size:18px;color:#333}.footer-part[data-v-635be2c1]{height:7.03125vh;background-color:#d3dce6;padding:0!important;margin:0!important;color:#333;margin-top:0}.footer-part-col[data-v-635be2c1]{height:100%;background-color:#333;color:#606266;border:3px solid rgb(206,12,12);border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
.vertical-radio-group[data-v-d1648c7a]{display:flex;flex-direction:column;gap:5px;align-items:flex-start}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
.vertical-radio-group[data-v-91993da2]{display:flex;flex-direction:column;gap:5px;align-items:flex-start}
|
||||||
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@
|
|||||||
|
import{_ as e,a as c,o as n}from"./index-9847718b.js";const o={};function r(t,a){return n(),c("h3",null,"测试页面")}const _=e(o,[["render",r]]);export{_ as default};
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@
|
|||||||
|
.vertical-radio-group[data-v-28d8a977]{display:flex;flex-direction:column;gap:5px;align-items:flex-start}
|
||||||
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@
|
|||||||
|
import{d as v,aP as w,r as c,x as p,$ as x,Z as y,i as M,h as J,aw as I,O as l,I as a,o as k,X as q,_ as C}from"./index-9847718b.js";import{u as D}from"./index-fd059ba6.js";import{M as P}from"./index-868f5209.js";const h=v({name:"PreviewIndex",__name:"index",setup(B){const r=w();console.log("参数:",r.query.screen),c(!1),p([]),c("-1"),q();const d=c(),u=(n,o)=>{console.log(n,o),n=="test-dialog"&&a.success(`获取到了id:${o}`)};x(()=>{console.log("view卸载完毕")});async function i(){var o;let n={menuType:r.query.screen};try{const s=await I.model_getModelData_post(n);if(s.code==200){const _=await s.data,{canvasCfg:f,gridCfg:g,importDoneJson:m}=D(_),t=m.map(e=>e.props?{...e,props:p(e.props||{})}:{...e,props:p(e.props||{})});console.log("processedImportDoneJson:",t),(o=d.value)==null||o.setNewImportJson({canvasCfg:f,gridCfg:g,json:t}),l.group_ids.has(r.query.screen)&&l.group_ids.delete(r.query.screen),l.group_ids.set(r.query.screen,t.map(e=>e.id)),a.success("数据模型加载成功")}else a.error(`数据模型加载失败: ${s.code} - ${s.message}`)}catch(s){console.error("请求错误:",s),a.error("网络请求失败")}}return y(()=>{console.log("view挂载完毕"),i()}),(n,o)=>(k(),M(J(P),{ref_key:"MtPreviewRef",ref:d,onOnEventCallBack:u},null,512))}});const O=C(h,[["__scopeId","data-v-91993da2"]]);export{O as default};
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
ace.define("ace/snippets/javascript.snippets",["require","exports","module"], function(require, exports, module){module.exports = "# Prototype\nsnippet proto\n\t${1:class_name}.prototype.${2:method_name} = function(${3:first_argument}) {\n\t\t${4:// body...}\n\t};\n# Function\nsnippet fun\n\tfunction ${1?:function_name}(${2:argument}) {\n\t\t${3:// body...}\n\t}\n# Anonymous Function\nregex /((=)\\s*|(:)\\s*|(\\()|\\b)/f/(\\))?/\nsnippet f\n\tfunction${M1?: ${1:functionName}}($2) {\n\t\t${0:$TM_SELECTED_TEXT}\n\t}${M2?;}${M3?,}${M4?)}\n# Immediate function\ntrigger \\(?f\\(\nendTrigger \\)?\nsnippet f(\n\t(function(${1}) {\n\t\t${0:${TM_SELECTED_TEXT:/* code */}}\n\t}(${1}));\n# if\nsnippet if\n\tif (${1:true}) {\n\t\t${0}\n\t}\n# if ... else\nsnippet ife\n\tif (${1:true}) {\n\t\t${2}\n\t} else {\n\t\t${0}\n\t}\n# tertiary conditional\nsnippet ter\n\t${1:/* condition */} ? ${2:a} : ${3:b}\n# switch\nsnippet switch\n\tswitch (${1:expression}) {\n\t\tcase '${3:case}':\n\t\t\t${4:// code}\n\t\t\tbreak;\n\t\t${5}\n\t\tdefault:\n\t\t\t${2:// code}\n\t}\n# case\nsnippet case\n\tcase '${1:case}':\n\t\t${2:// code}\n\t\tbreak;\n\t${3}\n\n# while (...) {...}\nsnippet wh\n\twhile (${1:/* condition */}) {\n\t\t${0:/* code */}\n\t}\n# try\nsnippet try\n\ttry {\n\t\t${0:/* code */}\n\t} catch (e) {}\n# do...while\nsnippet do\n\tdo {\n\t\t${2:/* code */}\n\t} while (${1:/* condition */});\n# Object Method\nsnippet :f\nregex /([,{[])|^\\s*/:f/\n\t${1:method_name}: function(${2:attribute}) {\n\t\t${0}\n\t}${3:,}\n# setTimeout function\nsnippet setTimeout\nregex /\\b/st|timeout|setTimeo?u?t?/\n\tsetTimeout(function() {${3:$TM_SELECTED_TEXT}}, ${1:10});\n# Get Elements\nsnippet gett\n\tgetElementsBy${1:TagName}('${2}')${3}\n# Get Element\nsnippet get\n\tgetElementBy${1:Id}('${2}')${3}\n# console.log (Firebug)\nsnippet cl\n\tconsole.log(${1});\n# return\nsnippet ret\n\treturn ${1:result}\n# for (property in object ) { ... }\nsnippet fori\n\tfor (var ${1:prop} in ${2:Things}) {\n\t\t${0:$2[$1]}\n\t}\n# hasOwnProperty\nsnippet has\n\thasOwnProperty(${1})\n# docstring\nsnippet /**\n\t/**\n\t * ${1:description}\n\t *\n\t */\nsnippet @par\nregex /^\\s*\\*\\s*/@(para?m?)?/\n\t@param {${1:type}} ${2:name} ${3:description}\nsnippet @ret\n\t@return {${1:type}} ${2:description}\n# JSON.parse\nsnippet jsonp\n\tJSON.parse(${1:jstr});\n# JSON.stringify\nsnippet jsons\n\tJSON.stringify(${1:object});\n# self-defining function\nsnippet sdf\n\tvar ${1:function_name} = function(${2:argument}) {\n\t\t${3:// initial code ...}\n\n\t\t$1 = function($2) {\n\t\t\t${4:// main code}\n\t\t};\n\t}\n# singleton\nsnippet sing\n\tfunction ${1:Singleton} (${2:argument}) {\n\t\t// the cached instance\n\t\tvar instance;\n\n\t\t// rewrite the constructor\n\t\t$1 = function $1($2) {\n\t\t\treturn instance;\n\t\t};\n\t\t\n\t\t// carry over the prototype properties\n\t\t$1.prototype = this;\n\n\t\t// the instance\n\t\tinstance = new $1();\n\n\t\t// reset the constructor pointer\n\t\tinstance.constructor = $1;\n\n\t\t${3:// code ...}\n\n\t\treturn instance;\n\t}\n# class\nsnippet class\nregex /^\\s*/clas{0,2}/\n\tvar ${1:class} = function(${20}) {\n\t\t$40$0\n\t};\n\t\n\t(function() {\n\t\t${60:this.prop = \"\"}\n\t}).call(${1:class}.prototype);\n\t\n\texports.${1:class} = ${1:class};\n# \nsnippet for-\n\tfor (var ${1:i} = ${2:Things}.length; ${1:i}--; ) {\n\t\t${0:${2:Things}[${1:i}];}\n\t}\n# for (...) {...}\nsnippet for\n\tfor (var ${1:i} = 0; $1 < ${2:Things}.length; $1++) {\n\t\t${3:$2[$1]}$0\n\t}\n# for (...) {...} (Improved Native For-Loop)\nsnippet forr\n\tfor (var ${1:i} = ${2:Things}.length - 1; $1 >= 0; $1--) {\n\t\t${3:$2[$1]}$0\n\t}\n\n\n#modules\nsnippet def\n\tdefine(function(require, exports, module) {\n\t\"use strict\";\n\tvar ${1/.*\\///} = require(\"${1}\");\n\t\n\t$TM_SELECTED_TEXT\n\t});\nsnippet req\nguard ^\\s*\n\tvar ${1/.*\\///} = require(\"${1}\");\n\t$0\nsnippet requ\nguard ^\\s*\n\tvar ${1/.*\\/(.)/\\u$1/} = require(\"${1}\").${1/.*\\/(.)/\\u$1/};\n\t$0\n";
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
ace.define("ace/snippets/javascript",["require","exports","module","ace/snippets/javascript.snippets"], function(require, exports, module){"use strict";
|
||||||
|
exports.snippetText = require("./javascript.snippets");
|
||||||
|
exports.scope = "javascript";
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
ace.require(["ace/snippets/javascript"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,275 @@
|
|||||||
|
ace.define("ace/mode/json_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||||
|
var JsonHighlightRules = function () {
|
||||||
|
this.$rules = {
|
||||||
|
"start": [
|
||||||
|
{
|
||||||
|
token: "variable", // single line
|
||||||
|
regex: '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]\\s*(?=:)'
|
||||||
|
}, {
|
||||||
|
token: "string", // single line
|
||||||
|
regex: '"',
|
||||||
|
next: "string"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // hex
|
||||||
|
regex: "0[xX][0-9a-fA-F]+\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.numeric", // float
|
||||||
|
regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
|
||||||
|
}, {
|
||||||
|
token: "constant.language.boolean",
|
||||||
|
regex: "(?:true|false)\\b"
|
||||||
|
}, {
|
||||||
|
token: "text", // single quoted strings are not allowed
|
||||||
|
regex: "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
|
||||||
|
}, {
|
||||||
|
token: "comment", // comments are not allowed, but who cares?
|
||||||
|
regex: "\\/\\/.*$"
|
||||||
|
}, {
|
||||||
|
token: "comment.start", // comments are not allowed, but who cares?
|
||||||
|
regex: "\\/\\*",
|
||||||
|
next: "comment"
|
||||||
|
}, {
|
||||||
|
token: "paren.lparen",
|
||||||
|
regex: "[[({]"
|
||||||
|
}, {
|
||||||
|
token: "paren.rparen",
|
||||||
|
regex: "[\\])}]"
|
||||||
|
}, {
|
||||||
|
token: "punctuation.operator",
|
||||||
|
regex: /[,]/
|
||||||
|
}, {
|
||||||
|
token: "text",
|
||||||
|
regex: "\\s+"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"string": [
|
||||||
|
{
|
||||||
|
token: "constant.language.escape",
|
||||||
|
regex: /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|["\\\/bfnrt])/
|
||||||
|
}, {
|
||||||
|
token: "string",
|
||||||
|
regex: '"|$',
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "string"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"comment": [
|
||||||
|
{
|
||||||
|
token: "comment.end", // comments are not allowed, but who cares?
|
||||||
|
regex: "\\*\\/",
|
||||||
|
next: "start"
|
||||||
|
}, {
|
||||||
|
defaultToken: "comment"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oop.inherits(JsonHighlightRules, TextHighlightRules);
|
||||||
|
exports.JsonHighlightRules = JsonHighlightRules;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module){"use strict";
|
||||||
|
var Range = require("../range").Range;
|
||||||
|
var MatchingBraceOutdent = function () { };
|
||||||
|
(function () {
|
||||||
|
this.checkOutdent = function (line, input) {
|
||||||
|
if (!/^\s+$/.test(line))
|
||||||
|
return false;
|
||||||
|
return /^\s*\}/.test(input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (doc, row) {
|
||||||
|
var line = doc.getLine(row);
|
||||||
|
var match = line.match(/^(\s*\})/);
|
||||||
|
if (!match)
|
||||||
|
return 0;
|
||||||
|
var column = match[1].length;
|
||||||
|
var openBracePos = doc.findMatchingBracket({ row: row, column: column });
|
||||||
|
if (!openBracePos || openBracePos.row == row)
|
||||||
|
return 0;
|
||||||
|
var indent = this.$getIndent(doc.getLine(openBracePos.row));
|
||||||
|
doc.replace(new Range(row, 0, row, column - 1), indent);
|
||||||
|
};
|
||||||
|
this.$getIndent = function (line) {
|
||||||
|
return line.match(/^\s*/)[0];
|
||||||
|
};
|
||||||
|
}).call(MatchingBraceOutdent.prototype);
|
||||||
|
exports.MatchingBraceOutdent = MatchingBraceOutdent;
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../../lib/oop");
|
||||||
|
var Range = require("../../range").Range;
|
||||||
|
var BaseFoldMode = require("./fold_mode").FoldMode;
|
||||||
|
var FoldMode = exports.FoldMode = function (commentRegex) {
|
||||||
|
if (commentRegex) {
|
||||||
|
this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start));
|
||||||
|
this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
oop.inherits(FoldMode, BaseFoldMode);
|
||||||
|
(function () {
|
||||||
|
this.foldingStartMarker = /([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/;
|
||||||
|
this.foldingStopMarker = /^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/;
|
||||||
|
this.singleLineBlockCommentRe = /^\s*(\/\*).*\*\/\s*$/;
|
||||||
|
this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/;
|
||||||
|
this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/;
|
||||||
|
this._getFoldWidgetBase = this.getFoldWidget;
|
||||||
|
this.getFoldWidget = function (session, foldStyle, row) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
if (this.singleLineBlockCommentRe.test(line)) {
|
||||||
|
if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
var fw = this._getFoldWidgetBase(session, foldStyle, row);
|
||||||
|
if (!fw && this.startRegionRe.test(line))
|
||||||
|
return "start"; // lineCommentRegionStart
|
||||||
|
return fw;
|
||||||
|
};
|
||||||
|
this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
if (this.startRegionRe.test(line))
|
||||||
|
return this.getCommentRegionBlock(session, line, row);
|
||||||
|
var match = line.match(this.foldingStartMarker);
|
||||||
|
if (match) {
|
||||||
|
var i = match.index;
|
||||||
|
if (match[1])
|
||||||
|
return this.openingBracketBlock(session, match[1], row, i);
|
||||||
|
var range = session.getCommentFoldRange(row, i + match[0].length, 1);
|
||||||
|
if (range && !range.isMultiLine()) {
|
||||||
|
if (forceMultiline) {
|
||||||
|
range = this.getSectionRange(session, row);
|
||||||
|
}
|
||||||
|
else if (foldStyle != "all")
|
||||||
|
range = null;
|
||||||
|
}
|
||||||
|
return range;
|
||||||
|
}
|
||||||
|
if (foldStyle === "markbegin")
|
||||||
|
return;
|
||||||
|
var match = line.match(this.foldingStopMarker);
|
||||||
|
if (match) {
|
||||||
|
var i = match.index + match[0].length;
|
||||||
|
if (match[1])
|
||||||
|
return this.closingBracketBlock(session, match[1], row, i);
|
||||||
|
return session.getCommentFoldRange(row, i, -1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this.getSectionRange = function (session, row) {
|
||||||
|
var line = session.getLine(row);
|
||||||
|
var startIndent = line.search(/\S/);
|
||||||
|
var startRow = row;
|
||||||
|
var startColumn = line.length;
|
||||||
|
row = row + 1;
|
||||||
|
var endRow = row;
|
||||||
|
var maxRow = session.getLength();
|
||||||
|
while (++row < maxRow) {
|
||||||
|
line = session.getLine(row);
|
||||||
|
var indent = line.search(/\S/);
|
||||||
|
if (indent === -1)
|
||||||
|
continue;
|
||||||
|
if (startIndent > indent)
|
||||||
|
break;
|
||||||
|
var subRange = this.getFoldWidgetRange(session, "all", row);
|
||||||
|
if (subRange) {
|
||||||
|
if (subRange.start.row <= startRow) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (subRange.isMultiLine()) {
|
||||||
|
row = subRange.end.row;
|
||||||
|
}
|
||||||
|
else if (startIndent == indent) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
endRow = row;
|
||||||
|
}
|
||||||
|
return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);
|
||||||
|
};
|
||||||
|
this.getCommentRegionBlock = function (session, line, row) {
|
||||||
|
var startColumn = line.search(/\s*$/);
|
||||||
|
var maxRow = session.getLength();
|
||||||
|
var startRow = row;
|
||||||
|
var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/;
|
||||||
|
var depth = 1;
|
||||||
|
while (++row < maxRow) {
|
||||||
|
line = session.getLine(row);
|
||||||
|
var m = re.exec(line);
|
||||||
|
if (!m)
|
||||||
|
continue;
|
||||||
|
if (m[1])
|
||||||
|
depth--;
|
||||||
|
else
|
||||||
|
depth++;
|
||||||
|
if (!depth)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var endRow = row;
|
||||||
|
if (endRow > startRow) {
|
||||||
|
return new Range(startRow, startColumn, endRow, line.length);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}).call(FoldMode.prototype);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
ace.define("ace/mode/json",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/json_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/cstyle","ace/worker/worker_client"], function(require, exports, module){"use strict";
|
||||||
|
var oop = require("../lib/oop");
|
||||||
|
var TextMode = require("./text").Mode;
|
||||||
|
var HighlightRules = require("./json_highlight_rules").JsonHighlightRules;
|
||||||
|
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||||
|
var CStyleFoldMode = require("./folding/cstyle").FoldMode;
|
||||||
|
var WorkerClient = require("../worker/worker_client").WorkerClient;
|
||||||
|
var Mode = function () {
|
||||||
|
this.HighlightRules = HighlightRules;
|
||||||
|
this.$outdent = new MatchingBraceOutdent();
|
||||||
|
this.$behaviour = this.$defaultBehaviour;
|
||||||
|
this.foldingRules = new CStyleFoldMode();
|
||||||
|
};
|
||||||
|
oop.inherits(Mode, TextMode);
|
||||||
|
(function () {
|
||||||
|
this.lineCommentStart = "//";
|
||||||
|
this.blockComment = { start: "/*", end: "*/" };
|
||||||
|
this.getNextLineIndent = function (state, line, tab) {
|
||||||
|
var indent = this.$getIndent(line);
|
||||||
|
if (state == "start") {
|
||||||
|
var match = line.match(/^.*[\{\(\[]\s*$/);
|
||||||
|
if (match) {
|
||||||
|
indent += tab;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return indent;
|
||||||
|
};
|
||||||
|
this.checkOutdent = function (state, line, input) {
|
||||||
|
return this.$outdent.checkOutdent(line, input);
|
||||||
|
};
|
||||||
|
this.autoOutdent = function (state, doc, row) {
|
||||||
|
this.$outdent.autoOutdent(doc, row);
|
||||||
|
};
|
||||||
|
this.createWorker = function (session) {
|
||||||
|
var worker = new WorkerClient(["ace"], "ace/mode/json_worker", "JsonWorker");
|
||||||
|
worker.attachToDocument(session.getDocument());
|
||||||
|
worker.on("annotate", function (e) {
|
||||||
|
session.setAnnotations(e.data);
|
||||||
|
});
|
||||||
|
worker.on("terminate", function () {
|
||||||
|
session.clearAnnotations();
|
||||||
|
});
|
||||||
|
return worker;
|
||||||
|
};
|
||||||
|
this.$id = "ace/mode/json";
|
||||||
|
}).call(Mode.prototype);
|
||||||
|
exports.Mode = Mode;
|
||||||
|
|
||||||
|
}); (function() {
|
||||||
|
ace.require(["ace/mode/json"], function(m) {
|
||||||
|
if (typeof module == "object" && typeof exports == "object" && module) {
|
||||||
|
module.exports = m;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
||||||
@ -0,0 +1 @@
|
|||||||
|
.vertical-radio-group[data-v-cf8bfc69]{display:flex;flex-direction:column;gap:5px;align-items:flex-start}
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,140 @@
|
|||||||
|
{
|
||||||
|
"canvasCfg": {
|
||||||
|
"width": 1920,
|
||||||
|
"height": 1080,
|
||||||
|
"scale": 1,
|
||||||
|
"color": "",
|
||||||
|
"img": "",
|
||||||
|
"guide": true,
|
||||||
|
"adsorp": true,
|
||||||
|
"adsorp_diff": 5,
|
||||||
|
"transform_origin": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"drag_offset": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"gridCfg": {
|
||||||
|
"enabled": true,
|
||||||
|
"align": true,
|
||||||
|
"size": 10
|
||||||
|
},
|
||||||
|
"json": [
|
||||||
|
{
|
||||||
|
"id": "vue-my-regulator-iwEp1KifC7",
|
||||||
|
"title": "vue谣调",
|
||||||
|
"type": "vue",
|
||||||
|
"binfo": {
|
||||||
|
"left": 129.98797607421875,
|
||||||
|
"top": 70,
|
||||||
|
"width": 50,
|
||||||
|
"height": 50,
|
||||||
|
"angle": 0
|
||||||
|
},
|
||||||
|
"resize": true,
|
||||||
|
"rotate": true,
|
||||||
|
"lock": false,
|
||||||
|
"active": false,
|
||||||
|
"hide": false,
|
||||||
|
"props": {
|
||||||
|
"moduleType": "遥测",
|
||||||
|
"moduleId": ""
|
||||||
|
},
|
||||||
|
"tag": "vue-my-regulator",
|
||||||
|
"common_animations": {
|
||||||
|
"val": "",
|
||||||
|
"delay": "delay-0s",
|
||||||
|
"speed": "slow",
|
||||||
|
"repeat": "infinite"
|
||||||
|
},
|
||||||
|
"events": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vue-my-switch-info-XZmvJDTfd8",
|
||||||
|
"title": "vue遥控",
|
||||||
|
"type": "vue",
|
||||||
|
"binfo": {
|
||||||
|
"left": 240,
|
||||||
|
"top": 70,
|
||||||
|
"width": 50,
|
||||||
|
"height": 50,
|
||||||
|
"angle": 0
|
||||||
|
},
|
||||||
|
"resize": true,
|
||||||
|
"rotate": true,
|
||||||
|
"lock": false,
|
||||||
|
"active": false,
|
||||||
|
"hide": false,
|
||||||
|
"props": {
|
||||||
|
"moduleType": "遥控",
|
||||||
|
"moduleId": ""
|
||||||
|
},
|
||||||
|
"tag": "vue-my-switch-info",
|
||||||
|
"common_animations": {
|
||||||
|
"val": "",
|
||||||
|
"delay": "delay-0s",
|
||||||
|
"speed": "slow",
|
||||||
|
"repeat": "infinite"
|
||||||
|
},
|
||||||
|
"events": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vue-my-num-info-W1j7n1WBMs",
|
||||||
|
"title": "vue谣测",
|
||||||
|
"type": "vue",
|
||||||
|
"binfo": {
|
||||||
|
"left": 180,
|
||||||
|
"top": 70,
|
||||||
|
"width": 50,
|
||||||
|
"height": 50,
|
||||||
|
"angle": 0
|
||||||
|
},
|
||||||
|
"resize": true,
|
||||||
|
"rotate": true,
|
||||||
|
"lock": false,
|
||||||
|
"active": false,
|
||||||
|
"hide": false,
|
||||||
|
"props": {
|
||||||
|
"moduleType": "遥测",
|
||||||
|
"moduleId": ""
|
||||||
|
},
|
||||||
|
"tag": "vue-my-num-info",
|
||||||
|
"common_animations": {
|
||||||
|
"val": "",
|
||||||
|
"delay": "delay-0s",
|
||||||
|
"speed": "slow",
|
||||||
|
"repeat": "infinite"
|
||||||
|
},
|
||||||
|
"events": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vue-my-signal-info-VFdTsqHrqK",
|
||||||
|
"title": "vue遥信01",
|
||||||
|
"type": "vue",
|
||||||
|
"binfo": {
|
||||||
|
"left": 70,
|
||||||
|
"top": 140,
|
||||||
|
"width": 430,
|
||||||
|
"height": 210,
|
||||||
|
"angle": 0
|
||||||
|
},
|
||||||
|
"resize": true,
|
||||||
|
"rotate": true,
|
||||||
|
"lock": false,
|
||||||
|
"active": false,
|
||||||
|
"hide": false,
|
||||||
|
"props": {},
|
||||||
|
"tag": "vue-my-signal-info",
|
||||||
|
"common_animations": {
|
||||||
|
"val": "",
|
||||||
|
"delay": "delay-0s",
|
||||||
|
"speed": "slow",
|
||||||
|
"repeat": "infinite"
|
||||||
|
},
|
||||||
|
"events": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,139 @@
|
|||||||
|
{
|
||||||
|
"canvasCfg": {
|
||||||
|
"width": 1920,
|
||||||
|
"height": 1080,
|
||||||
|
"scale": 1,
|
||||||
|
"color": "",
|
||||||
|
"img": "",
|
||||||
|
"guide": true,
|
||||||
|
"adsorp": true,
|
||||||
|
"adsorp_diff": 5,
|
||||||
|
"transform_origin": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"drag_offset": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"gridCfg": {
|
||||||
|
"enabled": true,
|
||||||
|
"align": true,
|
||||||
|
"size": 10
|
||||||
|
},
|
||||||
|
"json": [
|
||||||
|
{
|
||||||
|
"id": "vue-my-regulator-iwEp1KifC7",
|
||||||
|
"title": "vue谣调",
|
||||||
|
"type": "vue",
|
||||||
|
"binfo": {
|
||||||
|
"left": 129.98797607421875,
|
||||||
|
"top": 70,
|
||||||
|
"width": 50,
|
||||||
|
"height": 50,
|
||||||
|
"angle": 0
|
||||||
|
},
|
||||||
|
"resize": true,
|
||||||
|
"rotate": true,
|
||||||
|
"lock": false,
|
||||||
|
"active": false,
|
||||||
|
"hide": false,
|
||||||
|
"props": {
|
||||||
|
"moduleType": "遥测",
|
||||||
|
"moduleId": ""
|
||||||
|
},
|
||||||
|
"tag": "vue-my-regulator",
|
||||||
|
"common_animations": {
|
||||||
|
"val": "",
|
||||||
|
"delay": "delay-0s",
|
||||||
|
"speed": "slow",
|
||||||
|
"repeat": "infinite"
|
||||||
|
},
|
||||||
|
"events": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vue-my-num-info-W1j7n1WBMs",
|
||||||
|
"title": "vue谣测",
|
||||||
|
"type": "vue",
|
||||||
|
"binfo": {
|
||||||
|
"left": 330,
|
||||||
|
"top": 380,
|
||||||
|
"width": 50,
|
||||||
|
"height": 50,
|
||||||
|
"angle": 0
|
||||||
|
},
|
||||||
|
"resize": true,
|
||||||
|
"rotate": true,
|
||||||
|
"lock": false,
|
||||||
|
"active": false,
|
||||||
|
"hide": false,
|
||||||
|
"props": {
|
||||||
|
"moduleType": "遥测",
|
||||||
|
"moduleId": ""
|
||||||
|
},
|
||||||
|
"tag": "vue-my-num-info",
|
||||||
|
"common_animations": {
|
||||||
|
"val": "",
|
||||||
|
"delay": "delay-0s",
|
||||||
|
"speed": "slow",
|
||||||
|
"repeat": "infinite"
|
||||||
|
},
|
||||||
|
"events": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vue-my-signal-info-VFdTsqHrqK",
|
||||||
|
"title": "vue遥信01",
|
||||||
|
"type": "vue",
|
||||||
|
"binfo": {
|
||||||
|
"left": 70,
|
||||||
|
"top": 140,
|
||||||
|
"width": 430,
|
||||||
|
"height": 210,
|
||||||
|
"angle": 0
|
||||||
|
},
|
||||||
|
"resize": true,
|
||||||
|
"rotate": true,
|
||||||
|
"lock": false,
|
||||||
|
"active": false,
|
||||||
|
"hide": false,
|
||||||
|
"props": {},
|
||||||
|
"tag": "vue-my-signal-info",
|
||||||
|
"common_animations": {
|
||||||
|
"val": "",
|
||||||
|
"delay": "delay-0s",
|
||||||
|
"speed": "slow",
|
||||||
|
"repeat": "infinite"
|
||||||
|
},
|
||||||
|
"events": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vue-my-img-DLxtEt9t9A",
|
||||||
|
"title": "vue图形组件",
|
||||||
|
"type": "vue",
|
||||||
|
"binfo": {
|
||||||
|
"left": 64.97598266601562,
|
||||||
|
"top": 370,
|
||||||
|
"width": 130,
|
||||||
|
"height": 100,
|
||||||
|
"angle": 0
|
||||||
|
},
|
||||||
|
"resize": true,
|
||||||
|
"rotate": true,
|
||||||
|
"lock": false,
|
||||||
|
"active": false,
|
||||||
|
"hide": false,
|
||||||
|
"props": {
|
||||||
|
"maxWidth": ""
|
||||||
|
},
|
||||||
|
"tag": "vue-my-img",
|
||||||
|
"common_animations": {
|
||||||
|
"val": "",
|
||||||
|
"delay": "delay-0s",
|
||||||
|
"speed": "slow",
|
||||||
|
"repeat": "infinite"
|
||||||
|
},
|
||||||
|
"events": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,147 @@
|
|||||||
|
{
|
||||||
|
"canvasCfg": {
|
||||||
|
"width": 1920,
|
||||||
|
"height": 1080,
|
||||||
|
"scale": 1,
|
||||||
|
"color": "",
|
||||||
|
"img": "",
|
||||||
|
"guide": true,
|
||||||
|
"adsorp": true,
|
||||||
|
"adsorp_diff": 5,
|
||||||
|
"transform_origin": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"drag_offset": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"gridCfg": {
|
||||||
|
"enabled": true,
|
||||||
|
"align": true,
|
||||||
|
"size": 10
|
||||||
|
},
|
||||||
|
"json": [
|
||||||
|
{
|
||||||
|
"id": "vue-my-signal-info-VFdTsqHrqK",
|
||||||
|
"title": "vue遥信01",
|
||||||
|
"type": "vue",
|
||||||
|
"binfo": {
|
||||||
|
"left": 50,
|
||||||
|
"top": 50,
|
||||||
|
"width": 430,
|
||||||
|
"height": 210,
|
||||||
|
"angle": 0
|
||||||
|
},
|
||||||
|
"resize": true,
|
||||||
|
"rotate": true,
|
||||||
|
"lock": false,
|
||||||
|
"active": false,
|
||||||
|
"hide": false,
|
||||||
|
"props": {},
|
||||||
|
"tag": "vue-my-signal-info",
|
||||||
|
"common_animations": {
|
||||||
|
"val": "",
|
||||||
|
"delay": "delay-0s",
|
||||||
|
"speed": "slow",
|
||||||
|
"repeat": "infinite"
|
||||||
|
},
|
||||||
|
"events": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vue-my-run-info-QOvDKecsyZ",
|
||||||
|
"title": "vue运行信息",
|
||||||
|
"type": "vue",
|
||||||
|
"binfo": {
|
||||||
|
"left": 500,
|
||||||
|
"top": 50,
|
||||||
|
"width": 240,
|
||||||
|
"height": 180,
|
||||||
|
"angle": 0
|
||||||
|
},
|
||||||
|
"resize": true,
|
||||||
|
"rotate": true,
|
||||||
|
"lock": false,
|
||||||
|
"active": false,
|
||||||
|
"hide": false,
|
||||||
|
"props": {
|
||||||
|
"fontFamily": "Segoe UI",
|
||||||
|
"fontSize": 14,
|
||||||
|
"testColor": "#000000"
|
||||||
|
},
|
||||||
|
"tag": "vue-my-run-info",
|
||||||
|
"common_animations": {
|
||||||
|
"val": "",
|
||||||
|
"delay": "delay-0s",
|
||||||
|
"speed": "slow",
|
||||||
|
"repeat": "infinite"
|
||||||
|
},
|
||||||
|
"events": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vue-my-multi-type-info-V5rhA1U1PF",
|
||||||
|
"title": "vue运行状态信息",
|
||||||
|
"type": "vue",
|
||||||
|
"binfo": {
|
||||||
|
"left": 490,
|
||||||
|
"top": 240,
|
||||||
|
"width": 270,
|
||||||
|
"height": 180,
|
||||||
|
"angle": 0
|
||||||
|
},
|
||||||
|
"resize": true,
|
||||||
|
"rotate": true,
|
||||||
|
"lock": false,
|
||||||
|
"active": false,
|
||||||
|
"hide": false,
|
||||||
|
"props": {
|
||||||
|
"headline": "11111",
|
||||||
|
"fontFamily": "Segoe UI",
|
||||||
|
"fontSize": 14,
|
||||||
|
"dataSource": "ultraVires",
|
||||||
|
"testColor": "#000000"
|
||||||
|
},
|
||||||
|
"tag": "vue-my-multi-type-info",
|
||||||
|
"common_animations": {
|
||||||
|
"val": "",
|
||||||
|
"delay": "delay-0s",
|
||||||
|
"speed": "slow",
|
||||||
|
"repeat": "infinite"
|
||||||
|
},
|
||||||
|
"events": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vue-my-multi-type-info-OMI6pUcsA9",
|
||||||
|
"title": "vue运行状态信息",
|
||||||
|
"type": "vue",
|
||||||
|
"binfo": {
|
||||||
|
"left": 110,
|
||||||
|
"top": 270,
|
||||||
|
"width": 310,
|
||||||
|
"height": 200,
|
||||||
|
"angle": 0
|
||||||
|
},
|
||||||
|
"resize": true,
|
||||||
|
"rotate": true,
|
||||||
|
"lock": false,
|
||||||
|
"active": false,
|
||||||
|
"hide": false,
|
||||||
|
"props": {
|
||||||
|
"headline": "2222",
|
||||||
|
"fontFamily": "Segoe UI",
|
||||||
|
"fontSize": 14,
|
||||||
|
"dataSource": "ultraVires",
|
||||||
|
"testColor": "#000000"
|
||||||
|
},
|
||||||
|
"tag": "vue-my-multi-type-info",
|
||||||
|
"common_animations": {
|
||||||
|
"val": "",
|
||||||
|
"delay": "delay-0s",
|
||||||
|
"speed": "slow",
|
||||||
|
"repeat": "infinite"
|
||||||
|
},
|
||||||
|
"events": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,113 @@
|
|||||||
|
{
|
||||||
|
"canvasCfg": {
|
||||||
|
"width": 1920,
|
||||||
|
"height": 1080,
|
||||||
|
"scale": 1,
|
||||||
|
"color": "",
|
||||||
|
"img": "",
|
||||||
|
"guide": true,
|
||||||
|
"adsorp": true,
|
||||||
|
"adsorp_diff": 5,
|
||||||
|
"transform_origin": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"drag_offset": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"gridCfg": {
|
||||||
|
"enabled": true,
|
||||||
|
"align": true,
|
||||||
|
"size": 10
|
||||||
|
},
|
||||||
|
"json": [
|
||||||
|
{
|
||||||
|
"id": "vue-my-signal-info-VFdTsqHrqK11111",
|
||||||
|
"title": "vue遥信01",
|
||||||
|
"type": "vue",
|
||||||
|
"binfo": {
|
||||||
|
"left": 50,
|
||||||
|
"top": 50,
|
||||||
|
"width": 430,
|
||||||
|
"height": 210,
|
||||||
|
"angle": 0
|
||||||
|
},
|
||||||
|
"resize": true,
|
||||||
|
"rotate": true,
|
||||||
|
"lock": false,
|
||||||
|
"active": false,
|
||||||
|
"hide": false,
|
||||||
|
"props": {},
|
||||||
|
"tag": "vue-my-signal-info",
|
||||||
|
"common_animations": {
|
||||||
|
"val": "",
|
||||||
|
"delay": "delay-0s",
|
||||||
|
"speed": "slow",
|
||||||
|
"repeat": "infinite"
|
||||||
|
},
|
||||||
|
"events": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vue-my-run-info-QOvDKecsyZ",
|
||||||
|
"title": "vue运行信息",
|
||||||
|
"type": "vue",
|
||||||
|
"binfo": {
|
||||||
|
"left": 500,
|
||||||
|
"top": 50,
|
||||||
|
"width": 240,
|
||||||
|
"height": 180,
|
||||||
|
"angle": 0
|
||||||
|
},
|
||||||
|
"resize": true,
|
||||||
|
"rotate": true,
|
||||||
|
"lock": false,
|
||||||
|
"active": false,
|
||||||
|
"hide": false,
|
||||||
|
"props": {
|
||||||
|
"fontFamily": "Segoe UI",
|
||||||
|
"fontSize": 14,
|
||||||
|
"testColor": "#000000"
|
||||||
|
},
|
||||||
|
"tag": "vue-my-run-info",
|
||||||
|
"common_animations": {
|
||||||
|
"val": "",
|
||||||
|
"delay": "delay-0s",
|
||||||
|
"speed": "slow",
|
||||||
|
"repeat": "infinite"
|
||||||
|
},
|
||||||
|
"events": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vue-my-tableOnly-a6n14qu2iO",
|
||||||
|
"title": "单一功能表单",
|
||||||
|
"type": "vue",
|
||||||
|
"binfo": {
|
||||||
|
"left": 40,
|
||||||
|
"top": 270,
|
||||||
|
"width": 620,
|
||||||
|
"height": 250,
|
||||||
|
"angle": 0
|
||||||
|
},
|
||||||
|
"resize": true,
|
||||||
|
"rotate": true,
|
||||||
|
"lock": false,
|
||||||
|
"active": false,
|
||||||
|
"hide": false,
|
||||||
|
"props": {
|
||||||
|
"fontFamily": "黑体",
|
||||||
|
"fontSize": 12,
|
||||||
|
"testColor": "#767676"
|
||||||
|
},
|
||||||
|
"tag": "vue-my-tableOnly",
|
||||||
|
"common_animations": {
|
||||||
|
"val": "",
|
||||||
|
"delay": "delay-0s",
|
||||||
|
"speed": "slow",
|
||||||
|
"repeat": "infinite"
|
||||||
|
},
|
||||||
|
"events": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue