|
@@ -209,18 +209,35 @@
|
|
<t-tooltip content="json格式">
|
|
<t-tooltip content="json格式">
|
|
<div class="flex middle mr-8" style="font-size:12px;color:var(--color)">数据</div>
|
|
<div class="flex middle mr-8" style="font-size:12px;color:var(--color)">数据</div>
|
|
</t-tooltip>
|
|
</t-tooltip>
|
|
- <add-circle-icon @click="addSendData(a)" class="hover"/>
|
|
|
|
|
|
+ <!-- <add-circle-icon @click="addSendData(a)" class="hover"/> -->
|
|
</div>
|
|
</div>
|
|
<template v-for="(d,idx) in a.data">
|
|
<template v-for="(d,idx) in a.data">
|
|
- <div class="flex middle actions-data mt-16" style="position:relative" >
|
|
|
|
- <t-tooltip :content="d.prop?(d._label+'('+d.prop+')'):''">
|
|
|
|
- <!-- <t-input class="actions-prop" style="width: 70px;" v-model="d.prop" /> -->
|
|
|
|
- <div class="actions-prop"> {{ d.label||'请编辑' }}</div>
|
|
|
|
- </t-tooltip>
|
|
|
|
- <Edit1Icon style="position:absolute;left:56px;height: 32px;" class="hover" @click="selectDeviceProps(d)"/>
|
|
|
|
|
|
+ <div class="flex middle actions-data mt-4">
|
|
|
|
+ <div class="flex action-param">
|
|
|
|
+ <t-tooltip>
|
|
|
|
+ <template #content>
|
|
|
|
+ <template v-if="d.prop">{{d._label||d.label}}<br>{{ d.prop }}</template>
|
|
|
|
+ </template>
|
|
|
|
+ <!-- <t-input class="actions-prop" style="width: 70px;" v-model="d.prop" /> -->
|
|
|
|
+ <div class="actions-prop"> {{ d.label||'参数名' }}</div>
|
|
|
|
+ </t-tooltip>
|
|
|
|
+ <Edit1Icon class="hover" @click="selectDeviceProps(d)"/>
|
|
<!-- <t-input style="width: 100px;" v-model="item.value" /> -->
|
|
<!-- <t-input style="width: 100px;" v-model="item.value" /> -->
|
|
|
|
+ </div>
|
|
:
|
|
:
|
|
- <t-tree-select
|
|
|
|
|
|
+ <div class="flex actions-value">
|
|
|
|
+ <t-button
|
|
|
|
+ v-if="['code','struct','array','object'].includes(d.type)&&!(d.key&&d.id)"
|
|
|
|
+ shape="square"
|
|
|
|
+ variant="outline"
|
|
|
|
+ @click="showCode(d)"
|
|
|
|
+ >
|
|
|
|
+ <ellipsis-icon slot="icon" />
|
|
|
|
+ </t-button>
|
|
|
|
+ <t-input v-else :placeholder="d.key&&d.id?((d.idLabel||d.id)+'.'+(d.keyLabel||d.key)):('参数值')" :readonly="!!(d.key&&d.id)" class="full" v-model="d.value" />
|
|
|
|
+ <LinkIcon class="hover actions-bind" :class="{ primary: d.key }" @click="bindPenProp(d)" />
|
|
|
|
+ </div>
|
|
|
|
+ <!-- <t-tree-select
|
|
placeholder="固定值"
|
|
placeholder="固定值"
|
|
style="width: 90px;"
|
|
style="width: 90px;"
|
|
v-model="d.id"
|
|
v-model="d.id"
|
|
@@ -287,8 +304,12 @@
|
|
<ellipsis-icon slot="icon" />
|
|
<ellipsis-icon slot="icon" />
|
|
</t-button>
|
|
</t-button>
|
|
<t-input v-else class="actions-value" placeholder="输入值" style="width: 82px;" v-model="d.value" @change="valueDChange($event,d)" />
|
|
<t-input v-else class="actions-value" placeholder="输入值" style="width: 82px;" v-model="d.value" @change="valueDChange($event,d)" />
|
|
- </template>
|
|
|
|
- <close-icon style="position:absolute;right:2px" class="hover" @click="delSendData(a.data,idx)"/>
|
|
|
|
|
|
+ </template> -->
|
|
|
|
+ <div class="actions-operation">
|
|
|
|
+ <add-circle-icon @click="addSendData(a,idx)" class="hover"/>
|
|
|
|
+ <!-- <close-icon class="hover" @click="delSendData(a,idx)"/> -->
|
|
|
|
+ <minus-circle-icon class="hover ml-4" @click="delSendData(a,idx)"/>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
<template v-for="(item,idx) in a.list">
|
|
<template v-for="(item,idx) in a.list">
|
|
@@ -602,7 +623,9 @@
|
|
</div>
|
|
</div>
|
|
<PropModal v-model:visible="propModal.visible" @change="getProp" />
|
|
<PropModal v-model:visible="propModal.visible" @change="getProp" />
|
|
<MoreModal v-model:visible="more.visible" @change="getMProp" />
|
|
<MoreModal v-model:visible="more.visible" @change="getMProp" />
|
|
- <t-dialog
|
|
|
|
|
|
+ <PenPropModal v-model:visible="penProp.visible" v-model:data="penProp.data"/>
|
|
|
|
+ <JsonModal v-model:visible="codeDialog.visible" v-model:data="codeDialog.data.value" @change="getJsonData" />
|
|
|
|
+ <!-- <t-dialog
|
|
v-if="codeDialog.show"
|
|
v-if="codeDialog.show"
|
|
:visible="true"
|
|
:visible="true"
|
|
header="下发数据"
|
|
header="下发数据"
|
|
@@ -611,16 +634,18 @@
|
|
:width="800"
|
|
:width="800"
|
|
>
|
|
>
|
|
<CodeEditor v-model="codeDialog.data.value" style="height: 300px" />
|
|
<CodeEditor v-model="codeDialog.data.value" style="height: 300px" />
|
|
- </t-dialog>
|
|
|
|
|
|
+ </t-dialog> -->
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
<script lang="ts" setup>
|
|
import { onBeforeMount, ref, reactive, getCurrentInstance } from 'vue';
|
|
import { onBeforeMount, ref, reactive, getCurrentInstance } from 'vue';
|
|
import PropModal from '@/views/components/common/PropModal.vue';
|
|
import PropModal from '@/views/components/common/PropModal.vue';
|
|
import MoreModal from '@/views/components/common/MoreModal.vue';
|
|
import MoreModal from '@/views/components/common/MoreModal.vue';
|
|
|
|
+import PenPropModal from '@/views/components/common/PenPropModal.vue';
|
|
|
|
+import JsonModal from '@/views/components/common/JsonModal.vue';
|
|
import CodeEditor from '@/views/components/common/CodeEditor.vue';
|
|
import CodeEditor from '@/views/components/common/CodeEditor.vue';
|
|
import Network from './Network.vue';
|
|
import Network from './Network.vue';
|
|
-import { CloseIcon, AddCircleIcon, DeleteIcon, CheckIcon, Edit1Icon, LinkIcon, EllipsisIcon} from 'tdesign-icons-vue-next';
|
|
|
|
|
|
+import { CloseIcon, AddCircleIcon, DeleteIcon, CheckIcon, Edit1Icon, LinkIcon, EllipsisIcon, MinusCircleIcon} from 'tdesign-icons-vue-next';
|
|
import { getPenAnimations, getPenTree ,changeType, getIframeTree} from '@/services/common';
|
|
import { getPenAnimations, getPenTree ,changeType, getIframeTree} from '@/services/common';
|
|
import { deepClone } from '@meta2d/core';
|
|
import { deepClone } from '@meta2d/core';
|
|
|
|
|
|
@@ -769,6 +794,12 @@ const onChangeAction = (action: any) => {
|
|
// action.params = '';
|
|
// action.params = '';
|
|
// action.value = {};
|
|
// action.value = {};
|
|
action.targetType = 'id';
|
|
action.targetType = 'id';
|
|
|
|
+ if(!action.data){
|
|
|
|
+ action.data = [{
|
|
|
|
+ key:'',
|
|
|
|
+ value:''
|
|
|
|
+ }];
|
|
|
|
+ }
|
|
// action.list = [
|
|
// action.list = [
|
|
// {params:undefined,value:{}}
|
|
// {params:undefined,value:{}}
|
|
// ];
|
|
// ];
|
|
@@ -948,18 +979,19 @@ const addData = (a:any)=>{
|
|
a.list.push({params:undefined,value:{}})
|
|
a.list.push({params:undefined,value:{}})
|
|
}
|
|
}
|
|
|
|
|
|
-const addSendData = (a:any)=>{
|
|
|
|
|
|
+const addSendData = (a:any ,i:number)=>{
|
|
if(!a.data){
|
|
if(!a.data){
|
|
a.data = [];
|
|
a.data = [];
|
|
}
|
|
}
|
|
- a.data.push({
|
|
|
|
- key:'',
|
|
|
|
- value:''
|
|
|
|
- });
|
|
|
|
|
|
+ a.data.splice(i+1,0,{ key:'',value:''});
|
|
}
|
|
}
|
|
|
|
|
|
-const delSendData = (data:any[] ,i:number)=>{
|
|
|
|
- data.splice(i,1);
|
|
|
|
|
|
+const delSendData = (a:any ,i:number)=>{
|
|
|
|
+ if(i==0){
|
|
|
|
+ a.data = [{ key:'',value:''}];
|
|
|
|
+ }else{
|
|
|
|
+ a.data.splice(i,1);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
let dprops = ref<any>([{
|
|
let dprops = ref<any>([{
|
|
@@ -1054,13 +1086,30 @@ const getProp = (e)=>{
|
|
}
|
|
}
|
|
|
|
|
|
const codeDialog = reactive({
|
|
const codeDialog = reactive({
|
|
- show:false,
|
|
|
|
- data:null
|
|
|
|
|
|
+ visible:false,
|
|
|
|
+ data:{
|
|
|
|
+ value:null
|
|
|
|
+ }
|
|
});
|
|
});
|
|
|
|
|
|
const showCode = (d)=>{
|
|
const showCode = (d)=>{
|
|
codeDialog.data = d;
|
|
codeDialog.data = d;
|
|
- codeDialog.show = true;
|
|
|
|
|
|
+ codeDialog.visible = true;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+const getJsonData = (data)=>{
|
|
|
|
+ codeDialog.data.value = data;
|
|
|
|
+ codeDialog.visible = false;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+const penProp = ref({
|
|
|
|
+ visible:false,
|
|
|
|
+ data:null
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+const bindPenProp = (d)=>{
|
|
|
|
+ penProp.value.visible = true;
|
|
|
|
+ penProp.value.data = d;
|
|
}
|
|
}
|
|
|
|
|
|
const more = ref({
|
|
const more = ref({
|
|
@@ -1132,6 +1181,67 @@ const themeOptions = [
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.actions-data{
|
|
.actions-data{
|
|
|
|
+ position:relative;
|
|
|
|
+ .action-param{
|
|
|
|
+ position:relative;
|
|
|
|
+ svg{
|
|
|
|
+ position:absolute;
|
|
|
|
+ left:56px;
|
|
|
|
+ height: 22px;
|
|
|
|
+ display: none;
|
|
|
|
+ }
|
|
|
|
+ &:hover{
|
|
|
|
+ svg{
|
|
|
|
+ display: inline-block;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ .actions-value{
|
|
|
|
+ position: relative;
|
|
|
|
+ width: 150px;
|
|
|
|
+ :deep(.t-input){
|
|
|
|
+ width: 150px;
|
|
|
|
+ }
|
|
|
|
+ .actions-bind{
|
|
|
|
+ display: none;
|
|
|
|
+ position: absolute;
|
|
|
|
+ right: 2px;
|
|
|
|
+ height: 30px;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ :deep(.t-button){
|
|
|
|
+ border-color: transparent;
|
|
|
|
+ height: 30px;
|
|
|
|
+ width: 150px;
|
|
|
|
+ justify-content:left;
|
|
|
|
+ padding-left: 8px;
|
|
|
|
+ &:hover{
|
|
|
|
+ border-color: var(--color-desc);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ &:hover{
|
|
|
|
+ svg{
|
|
|
|
+ display: inline-block;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ .actions-operation{
|
|
|
|
+ display: none;
|
|
|
|
+ svg{
|
|
|
|
+ position:absolute;
|
|
|
|
+ right:0px;
|
|
|
|
+ top:9px;
|
|
|
|
+ }
|
|
|
|
+ svg:first-child{
|
|
|
|
+ right:16px;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ &:hover{
|
|
|
|
+ .actions-operation{
|
|
|
|
+ display: inline-block;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
:deep(.t-input){
|
|
:deep(.t-input){
|
|
border-color:transparent;
|
|
border-color:transparent;
|
|
&:hover {
|
|
&:hover {
|
|
@@ -1153,14 +1263,14 @@ const themeOptions = [
|
|
width: 82px;
|
|
width: 82px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- .actions-value{
|
|
|
|
|
|
+ /* .actions-value{
|
|
:deep(.t-input){
|
|
:deep(.t-input){
|
|
width: 82px;
|
|
width: 82px;
|
|
}
|
|
}
|
|
- }
|
|
|
|
- .t-input-number.t-is-controls-right{
|
|
|
|
|
|
+ } */
|
|
|
|
+ /* .t-input-number.t-is-controls-right{
|
|
width: 82px;
|
|
width: 82px;
|
|
- }
|
|
|
|
|
|
+ } */
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|
|
</style>
|