|
@@ -1,7 +1,7 @@
|
|
|
|
|
|
<template>
|
|
<template>
|
|
<div class="type-item">
|
|
<div class="type-item">
|
|
- <div v-for="(item, index) in parallellist" :key="index" class="item " :class="index > 0 ? 'biankang' : ''">
|
|
|
|
|
|
+ <div v-for="(item, index) in parallel" :key="index" class="item " :class="index > 0 ? 'biankang' : ''">
|
|
<div class="conicon" style="width: 100%; text-align: right; position: relative; right: -8px; top: -8px; color: red"
|
|
<div class="conicon" style="width: 100%; text-align: right; position: relative; right: -8px; top: -8px; color: red"
|
|
v-if="index > 0">
|
|
v-if="index > 0">
|
|
<el-icon @click="delScene(index)">
|
|
<el-icon @click="delScene(index)">
|
|
@@ -9,112 +9,61 @@
|
|
</el-icon>
|
|
</el-icon>
|
|
</div>
|
|
</div>
|
|
<div class="product flex flex-warp">
|
|
<div class="product flex flex-warp">
|
|
-
|
|
|
|
- <el-form-item label="动作类型:" prop="product_key">
|
|
|
|
- <el-select v-model="item.product_key" filterable placeholder="请选择产品">
|
|
|
|
|
|
+ <el-form-item label="动作类型:" prop="actionType">
|
|
|
|
+ <el-select v-model="item.actionType" filterable placeholder="请选择动作类型" @change="saveData">
|
|
<el-option v-for="it in sourceActionTypeData" :key="it.key" :label="it.name" :value="it.key">
|
|
<el-option v-for="it in sourceActionTypeData" :key="it.key" :label="it.name" :value="it.key">
|
|
<span style="float: left">{{ it.name }}</span>
|
|
<span style="float: left">{{ it.name }}</span>
|
|
<span style="float: right; font-size: 13px">{{ it.key }}</span>
|
|
<span style="float: right; font-size: 13px">{{ it.key }}</span>
|
|
</el-option>
|
|
</el-option>
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item label="用户类型:" prop="device_key">
|
|
|
|
- <el-select v-model="item.device_key" filterable placeholder="请选择设备">
|
|
|
|
- <el-option v-for="it in sourceData" :key="it.key" :label="it.name" :value="it.key">
|
|
|
|
- <span style="float: left">{{ it.name }}</span>
|
|
|
|
- <span style="float: right; font-size: 13px">{{ it.key }}</span>
|
|
|
|
- </el-option>
|
|
|
|
- </el-select>
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="触发类型:" prop="type">
|
|
|
|
- <el-select v-model="item.type" filterable placeholder="请选择触发类型">
|
|
|
|
- <el-option v-for="it in sourceData" :key="it.key" :label="it.name" :value="it.key">
|
|
|
|
- <span style="float: left">{{ it.name }}</span>
|
|
|
|
- <span style="float: right; font-size: 13px">{{ it.key }}</span>
|
|
|
|
- </el-option>
|
|
|
|
- </el-select>
|
|
|
|
- </el-form-item>
|
|
|
|
-
|
|
|
|
- <el-form-item label="属性:" prop="type">
|
|
|
|
- <el-select v-model="item.type" filterable placeholder="请选择触发类型">
|
|
|
|
- <el-option v-for="it in sourceData" :key="it.key" :label="it.name" :value="it.key">
|
|
|
|
- <span style="float: left">{{ it.name }}</span>
|
|
|
|
- <span style="float: right; font-size: 13px">{{ it.key }}</span>
|
|
|
|
- </el-option>
|
|
|
|
- </el-select>
|
|
|
|
- </el-form-item>
|
|
|
|
|
|
+ <DeviceOut :index="index" :sourceData="sourceData" v-if="item.actionType==='deviceOutput'" @SetSaveData="SetSaveData"></DeviceOut>
|
|
|
|
+ <SendNotice :index="index" v-if="item.actionType==='sendNotice'" @SetSaveData="SetSaveData"></SendNotice>
|
|
|
|
+ <CallWebService :index="index" v-if="item.actionType==='callWebService'" @SetSaveData="SetSaveData"></CallWebService>
|
|
|
|
+ <TriggerAlarm :index="index" v-if="item.actionType==='triggerAlarm'" @saveData="saveData"></TriggerAlarm>
|
|
|
|
+ <DelayExecution :index="index" v-if="item.actionType==='delayExecution'" @saveData="saveData"></DelayExecution>
|
|
|
|
+ <TriggerCustomEvent :index="index" v-if="item.actionType==='triggerCustomEvent'" @saveData="saveData"></TriggerCustomEvent>
|
|
</div>
|
|
</div>
|
|
-
|
|
|
|
-
|
|
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div>
|
|
<div class=" flex-center">
|
|
<div class=" flex-center">
|
|
- <el-button :icon="DocumentAdd" @click="addScene()" style="border: 1px solid #409eff;color: #409eff;">新增并行动作</el-button>
|
|
|
|
|
|
+ <el-button :icon="DocumentAdd" @click="addScene()"
|
|
|
|
+ style="border: 1px solid #409eff;color: #409eff;">新增串行动作</el-button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
<script lang="ts" setup>
|
|
-import { PropType, ref } from 'vue'
|
|
|
|
|
|
+import { PropType, ref,watch } from 'vue'
|
|
import { DocumentAdd, CircleClose } from '@element-plus/icons-vue';
|
|
import { DocumentAdd, CircleClose } from '@element-plus/icons-vue';
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-interface IConditionItem {
|
|
|
|
- param?: string;
|
|
|
|
- operator?: string;
|
|
|
|
- value?: string;
|
|
|
|
-}
|
|
|
|
|
|
+import DeviceOut from './actionType/deviceOut.vue';
|
|
|
|
+import SendNotice from './actionType/sendNotice.vue';
|
|
|
|
+import CallWebService from './actionType/callWebService.vue';
|
|
|
|
+import TriggerAlarm from './actionType/triggerAlarm.vue';
|
|
|
|
+import DelayExecution from './actionType/delayExecution.vue';
|
|
|
|
+import TriggerCustomEvent from './actionType/triggerCustomEvent.vue';
|
|
|
|
+const deviceListData = ref<testIValueType[]>([]);
|
|
|
|
+const emit = defineEmits(['addScenesDetail','delScenesDetail','saveData']);
|
|
|
|
|
|
interface IValueType {
|
|
interface IValueType {
|
|
- type?: string;
|
|
|
|
- product_key?: string;
|
|
|
|
- device_key?: string;
|
|
|
|
- where?: string;
|
|
|
|
- cronExpression?: string;
|
|
|
|
- condition?: {
|
|
|
|
- list?: IConditionItem[] ;
|
|
|
|
- }[];
|
|
|
|
|
|
+ actionType?:string;
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
interface testIValueType {
|
|
interface testIValueType {
|
|
- key: string;
|
|
|
|
|
|
+ key?: string;
|
|
name?: string;
|
|
name?: string;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
const props = defineProps({
|
|
const props = defineProps({
|
|
|
|
|
|
- parallellist: {
|
|
|
|
|
|
+ parallel: {
|
|
type: Array as PropType<IValueType[]>,
|
|
type: Array as PropType<IValueType[]>,
|
|
default: () => []
|
|
default: () => []
|
|
},
|
|
},
|
|
sourceData: {
|
|
sourceData: {
|
|
type: Array as PropType<testIValueType[]>,
|
|
type: Array as PropType<testIValueType[]>,
|
|
- default: () => [{
|
|
|
|
- 'key': 'test',
|
|
|
|
- 'name': '测试',
|
|
|
|
- }, {
|
|
|
|
- 'key': 'test',
|
|
|
|
- 'name': '测试',
|
|
|
|
- }, {
|
|
|
|
- 'key': 'test',
|
|
|
|
- 'name': '测试',
|
|
|
|
- }, {
|
|
|
|
- 'key': 'test',
|
|
|
|
- 'name': '测试',
|
|
|
|
- }, {
|
|
|
|
- 'key': 'test',
|
|
|
|
- 'name': '测试',
|
|
|
|
- }]
|
|
|
|
|
|
+ default: () => []
|
|
},
|
|
},
|
|
sourceActionTypeData: {
|
|
sourceActionTypeData: {
|
|
type: Array as PropType<testIValueType[]>,
|
|
type: Array as PropType<testIValueType[]>,
|
|
@@ -134,35 +83,37 @@ const props = defineProps({
|
|
'key': 'delayExecution',
|
|
'key': 'delayExecution',
|
|
'name': '延迟执行',
|
|
'name': '延迟执行',
|
|
}, {
|
|
}, {
|
|
- 'key': 'triggerCustomEvent',
|
|
|
|
- 'name': '触发场景自定义事件',
|
|
|
|
|
|
+ 'key': 'triggerCustomEvent',
|
|
|
|
+ 'name': '触发场景自定义事件',
|
|
}]
|
|
}]
|
|
- },
|
|
|
|
-
|
|
|
|
|
|
+ }
|
|
})
|
|
})
|
|
|
|
+const serialValue = ref(props.parallel);
|
|
|
|
+
|
|
|
|
+const saveData=()=>{
|
|
|
|
+ emit('saveData',props.parallel);
|
|
|
|
+}
|
|
|
|
+watch(() => props.parallel, (newSerial) => {
|
|
|
|
+ serialValue.value = newSerial;
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
+const SetSaveData = (data:any) => {
|
|
|
|
+ serialValue.value[data.index] = data.data;
|
|
|
|
+ emit('saveData', serialValue.value);
|
|
|
|
+}
|
|
const addScene = () => {
|
|
const addScene = () => {
|
|
- props.parallellist.push({
|
|
|
|
- 'product_key': '',
|
|
|
|
- 'device_key': '',
|
|
|
|
- 'type': '',
|
|
|
|
- 'condition':[{
|
|
|
|
- 'list': [{
|
|
|
|
- 'param': '',
|
|
|
|
- 'operator': '',
|
|
|
|
- 'value': ''
|
|
|
|
- }]
|
|
|
|
- }]
|
|
|
|
|
|
+ props.parallel.push({
|
|
|
|
+ 'actionType': '',
|
|
});
|
|
});
|
|
};
|
|
};
|
|
const delScene = (index: number) => {
|
|
const delScene = (index: number) => {
|
|
- props.parallellist.splice(index, 1);
|
|
|
|
|
|
+ props.parallel.splice(index, 1);
|
|
}
|
|
}
|
|
-
|
|
|
|
</script>
|
|
</script>
|
|
<style scoped lang="scss">
|
|
<style scoped lang="scss">
|
|
-
|
|
|
|
.type-item {
|
|
.type-item {
|
|
width: 100%;
|
|
width: 100%;
|
|
|
|
|
|
@@ -186,7 +137,7 @@ const delScene = (index: number) => {
|
|
|
|
|
|
.biankang {
|
|
.biankang {
|
|
|
|
|
|
- border: 1px dashed #959596;;
|
|
|
|
|
|
+ border: 1px solid #d6d6d6;
|
|
border-radius: 10px;
|
|
border-radius: 10px;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -205,6 +156,7 @@ const delScene = (index: number) => {
|
|
|
|
|
|
.product {
|
|
.product {
|
|
margin-bottom: 20px;
|
|
margin-bottom: 20px;
|
|
|
|
+
|
|
.el-form-item {
|
|
.el-form-item {
|
|
margin-left: 30px;
|
|
margin-left: 30px;
|
|
margin-bottom: 10px;
|
|
margin-bottom: 10px;
|
|
@@ -213,3 +165,4 @@ const delScene = (index: number) => {
|
|
|
|
|
|
}
|
|
}
|
|
</style>
|
|
</style>
|
|
|
|
+
|