update: 优化场景联动-新增校验

This commit is contained in:
xieyonghong 2023-03-20 11:05:04 +08:00
parent 6df60ea7e8
commit 8aaa9418bd
4 changed files with 59 additions and 13 deletions

View File

@ -1,11 +1,34 @@
<template>
<j-form-item
:rules="actionRules"
:name="['branches', 0, 'then']"
>
<Action
:thenOptions="data.branches ? data?.branches[0].then : []"
:name="0"
/>
</j-form-item>
</template>
<script>
export default {
name: 'index'
}
<script lang="ts" setup name='SceneSaveManual'>
import { useSceneStore } from '@/store/scene';
import { storeToRefs } from 'pinia';
import type { BranchesThen } from '@/views/rule-engine/Scene/typings'
import Action from '../action/index.vue';
const sceneStore = useSceneStore();
const { data } = storeToRefs(sceneStore);
const actionRules = [{
validator(_: any, v?: BranchesThen[]) {
console.log(_, v)
if (!v || (v && !v.length) || (v && v.length && !v[0].actions.length)) {
return Promise.reject('至少配置一个执行动作');
}
return Promise.resolve();
},
}]
</script>
<style scoped>

View File

@ -33,13 +33,13 @@
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name='SceneSaveTimer'>
import { useSceneStore } from '@/store/scene';
import { storeToRefs } from 'pinia';
import Action from '../action/index.vue';
import AddModel from './AddModal.vue'
import AddButton from '../components/AddButton.vue'
import type { OperationTimer } from '@/views/rule-engine/Scene/typings'
import type { OperationTimer, BranchesThen } from '@/views/rule-engine/Scene/typings'
const sceneStore = useSceneStore();
const { data } = storeToRefs(sceneStore);
@ -55,7 +55,7 @@ const rules = [{
}]
const actionRules = [{
validator(_, v) {
validator(_: any, v?: BranchesThen[]) {
if (!v || (v && !v.length)) {
return Promise.reject('至少配置一个执行动作');
}
@ -76,8 +76,8 @@ const onActionUpdate = (_data: any, type: boolean) => {
}
};
const save = (data: OperationTimer, options: Record<string, any>) => {
data.value.trigger!.timer = data
const save = (_data: OperationTimer, options: Record<string, any>) => {
data.value.trigger!.timer = _data
data.value.options!.trigger = options
}
</script>

View File

@ -14,10 +14,14 @@
<Device v-if='data.triggerType === "device"' />
<Manual v-else-if='data.triggerType === "manual"' />
<Timer v-else-if='data.triggerType === "timer"' />
<j-form-item>
<j-form-item
>
<template #label>
<TitleComponent data='说明' style='font-size: 14px;' />
</template>
<j-textarea
v-model:value="data.description"
placeholder=''
placeholder='请输入说明'
:rows="4"
show-count
:maxLength="200"
@ -27,6 +31,8 @@
<PermissionButton
type='primary'
hasPermission='rule-engine/Scene:update'
:loading='loading'
@click='save'
>
保存
</PermissionButton>
@ -42,14 +48,31 @@ import { keyByLabel } from '../typings'
import Device from './Device/index.vue'
import Manual from './Manual/index.vue'
import Timer from './Timer/index.vue'
import { modify } from '@/api/rule-engine/scene'
import { useMenuStore } from '@/store/menu'
import { message } from 'jetlinks-ui-components'
const sceneStore = useSceneStore()
const menuStore = useMenuStore()
const { data } = storeToRefs(sceneStore)
const { getDetail } = sceneStore
const route = useRoute();
const sceneForm = ref()
const loading = ref(false)
console.log('data',data)
const save = async () => {
const formData = await sceneForm.value.validateFields()
if (formData) {
loading.value = true
const resp = await modify(data.value.id!, data.value).then(res => res)
loading.value = false
if (resp.success) {
menuStore.jumpPage('rule-engine/Scene')
message.success('操作成功')
}
}
}
getDetail(route.query.id as string)