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