|
@@ -14,11 +14,23 @@
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</el-card>
|
|
</el-card>
|
|
- <el-card style=" margin-top: 15px;">
|
|
|
|
|
|
+ <el-card style=" margin-top: 15px;" v-if="detail.sceneType==='device'">
|
|
<div class="font20">场景定义</div>
|
|
<div class="font20">场景定义</div>
|
|
<SceneItem v-if="showstatus && sourceData.length>0" :sceneList="sceneList" :sourceData="sourceData" :sceneType="detail.sceneType" @addScenesDetail="addScenesDetail"
|
|
<SceneItem v-if="showstatus && sourceData.length>0" :sceneList="sceneList" :sourceData="sourceData" :sceneType="detail.sceneType" @addScenesDetail="addScenesDetail"
|
|
@delScenesDetail="delScenesDetail" @editScenesDetail="editScenesDetail"></SceneItem>
|
|
@delScenesDetail="delScenesDetail" @editScenesDetail="editScenesDetail"></SceneItem>
|
|
</el-card>
|
|
</el-card>
|
|
|
|
+ <el-card style=" margin-top: 15px;" v-if="detail.sceneType==='timer'">
|
|
|
|
+ <el-form-item label="定时触发">
|
|
|
|
+ <div style="display:flex">
|
|
|
|
+ <el-input v-model="timerData.timer" placeholder="请输入cron表达式" />
|
|
|
|
+ <el-dialog v-model="dialogVisible" title="选择Cron规则" width="60%">
|
|
|
|
+ <vue3cron @handlelisten="handlelisten" @close="cronclose"></vue3cron>
|
|
|
|
+ </el-dialog>
|
|
|
|
+ <el-button type="success" @click="showCron()" style="margin-left: 5px;">设置</el-button>
|
|
|
|
+
|
|
|
|
+ </div>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-card>
|
|
<el-card style=" margin-top: 15px;">
|
|
<el-card style=" margin-top: 15px;">
|
|
<div class="font20">场景动作</div>
|
|
<div class="font20">场景动作</div>
|
|
<ActionItem v-if="detail.id" :scene_id="detail.id" :sourceData="sourceData"></ActionItem>
|
|
<ActionItem v-if="detail.id" :scene_id="detail.id" :sourceData="sourceData"></ActionItem>
|
|
@@ -35,6 +47,9 @@ import SceneItem from './component/sceneItem.vue';
|
|
import EditForm from './edit.vue';
|
|
import EditForm from './edit.vue';
|
|
import api from '/@/api/scene';
|
|
import api from '/@/api/scene';
|
|
import product from '/@/api/device';
|
|
import product from '/@/api/device';
|
|
|
|
+import vue3cron from '/@/components/vue3cron/vue3cron.vue';
|
|
|
|
+import { stat } from 'fs';
|
|
|
|
+
|
|
|
|
|
|
const editFormRef = ref();
|
|
const editFormRef = ref();
|
|
//原始
|
|
//原始
|
|
@@ -55,14 +70,21 @@ const originalSceneList = ref([{
|
|
id: 0
|
|
id: 0
|
|
}]);
|
|
}]);
|
|
export default defineComponent({
|
|
export default defineComponent({
|
|
- components: { EditPen, EditForm, DocumentAdd, SceneItem, ActionItem },
|
|
|
|
|
|
+ components: { EditPen, EditForm, DocumentAdd, SceneItem, ActionItem,vue3cron},
|
|
setup(props, context) {
|
|
setup(props, context) {
|
|
const route = useRoute();
|
|
const route = useRoute();
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
const state = reactive({
|
|
const state = reactive({
|
|
|
|
+ timer:'',
|
|
|
|
+ timer_id:0,
|
|
|
|
+ dialogVisible:false,
|
|
developer_status: 2,
|
|
developer_status: 2,
|
|
showstatus: false,
|
|
showstatus: false,
|
|
sourceData: [],
|
|
sourceData: [],
|
|
|
|
+ timerData: {
|
|
|
|
+ triggerType:'timer',
|
|
|
|
+ timer:'',
|
|
|
|
+ },
|
|
detail: {
|
|
detail: {
|
|
id: '',
|
|
id: '',
|
|
name: '',
|
|
name: '',
|
|
@@ -93,13 +115,25 @@ export default defineComponent({
|
|
}],
|
|
}],
|
|
|
|
|
|
});
|
|
});
|
|
|
|
+
|
|
|
|
+ const handlelisten = (e: any) => {
|
|
|
|
+ state.timerData.timer=e.cron
|
|
|
|
+ api.manage.editDetail({ id: state.timer_id, bodyjson: state.timerData })
|
|
|
|
+ };
|
|
|
|
+ const showCron = () => {
|
|
|
|
+ state.dialogVisible = true;
|
|
|
|
+ };
|
|
|
|
+ const cronclose = () => {
|
|
|
|
+ state.dialogVisible = false;
|
|
|
|
+ }
|
|
const activeName = ref('first')
|
|
const activeName = ref('first')
|
|
const getDetail = () => {
|
|
const getDetail = () => {
|
|
const id = route.params && route.params.id;
|
|
const id = route.params && route.params.id;
|
|
api.manage.getDetail({ "id": id }).then((res: any) => {
|
|
api.manage.getDetail({ "id": id }).then((res: any) => {
|
|
state.detail = res
|
|
state.detail = res
|
|
|
|
+ getOneDetail();
|
|
|
|
+
|
|
})
|
|
})
|
|
- getOneDetail();
|
|
|
|
};
|
|
};
|
|
const getProductList = () => {
|
|
const getProductList = () => {
|
|
product.product.getSubList().then((res: any) => {
|
|
product.product.getSubList().then((res: any) => {
|
|
@@ -108,24 +142,48 @@ export default defineComponent({
|
|
};
|
|
};
|
|
|
|
|
|
const getOneDetail = () => {
|
|
const getOneDetail = () => {
|
|
|
|
+
|
|
const id = route.params && route.params.id;
|
|
const id = route.params && route.params.id;
|
|
|
|
+ if(state.detail.sceneType==='device'){
|
|
|
|
+ api.manage.getOneDetail({ "sceneId": id, 'group': 'definition' }).then((res: any) => {
|
|
|
|
+ if (!res) {
|
|
|
|
+ addScenesDetail('definition');
|
|
|
|
+ // getOneDetail();
|
|
|
|
+ }
|
|
|
|
+ originalSceneList.value = res;
|
|
|
|
+ const scenes = res.map((scene: any) => {
|
|
|
|
+ const parsedBodyJson = JSON.parse(scene.bodyjson);
|
|
|
|
+ return {
|
|
|
|
+ ...parsedBodyJson
|
|
|
|
+ };
|
|
|
|
+ });
|
|
|
|
+ getProductList();
|
|
|
|
+ state.sceneList = scenes;
|
|
|
|
+ state.showstatus = true;
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ //定时触发
|
|
|
|
+ if(state.detail.sceneType=='timer'){
|
|
|
|
+ api.manage.getOneDetail({ "sceneId": id, 'group': 'timer' }).then((res: any) => {
|
|
|
|
+ if (!res) {
|
|
|
|
+ let data = {
|
|
|
|
+ sceneId: id,
|
|
|
|
+ group: 'timer',
|
|
|
|
+ bodyjson:state.timerData,
|
|
|
|
+ }
|
|
|
|
+ api.manage.addDetail(data).then((res: any) => {
|
|
|
|
+ getOneDetail();
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ state.timer_id=res[0].id
|
|
|
|
+ state.timerData=JSON.parse(res[0].bodyjson);
|
|
|
|
+
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
- api.manage.getOneDetail({ "sceneId": id, 'group': 'definition' }).then((res: any) => {
|
|
|
|
- if (!res) {
|
|
|
|
- addScenesDetail('definition');
|
|
|
|
- // getOneDetail();
|
|
|
|
- }
|
|
|
|
- originalSceneList.value = res;
|
|
|
|
- const scenes = res.map((scene: any) => {
|
|
|
|
- const parsedBodyJson = JSON.parse(scene.bodyjson);
|
|
|
|
- return {
|
|
|
|
- ...parsedBodyJson
|
|
|
|
- };
|
|
|
|
- });
|
|
|
|
- getProductList();
|
|
|
|
- state.sceneList = scenes;
|
|
|
|
- state.showstatus = true;
|
|
|
|
- })
|
|
|
|
};
|
|
};
|
|
//新增一条场景定义
|
|
//新增一条场景定义
|
|
const addScenesDetail = (type: String) => {
|
|
const addScenesDetail = (type: String) => {
|
|
@@ -164,6 +222,9 @@ export default defineComponent({
|
|
getDetail();
|
|
getDetail();
|
|
});
|
|
});
|
|
return {
|
|
return {
|
|
|
|
+ cronclose,
|
|
|
|
+ showCron,
|
|
|
|
+ handlelisten,
|
|
addOrEdit,
|
|
addOrEdit,
|
|
delScenesDetail,
|
|
delScenesDetail,
|
|
addScenesDetail,
|
|
addScenesDetail,
|