iot-ui-vue/src/views/rule-engine/Scene/Save/components/Terms/TermsItem.vue

156 lines
3.3 KiB
Vue

<template>
<div class='terms-params'>
<div class='terms-params-warp'>
<div v-if='!isFirst' class='term-type-warp'>
<DropdownButton
:options='[
{ label: "并且", value: "and" },
{ label: "或者", value: "or" },
]'
type='type'
v-model:value='formModel.branches[branchName].when[whenName].type'
/>
</div>
<div
class='terms-params-content'
@mouseover='mouseover'
@mouseout='mouseout'
>
<j-popconfirm
title='确认删除?'
@confirm='onDelete'
>
<div v-show='showDelete' class='terms-params-delete'>
<AIcon type='CloseOutlined' />
</div>
</j-popconfirm>
<j-form-item
v-for='(item, index) in termsData'
:key='item.key'
:name='["branches", branchName, "when", whenName, "terms", index]'
>
<ParamsItem
v-model:value='formModel.branches[branchName].when[whenName].terms[index]'
:isFirst='index === 0'
:isLast='index === termsData.length - 1'
:showDeleteBtn='termsData.length !== 1'
:name='index'
:termsName='name'
:whenName='whenName'
:branchName='branchName'
@change='paramsChange'
/>
</j-form-item>
</div>
<div class='terms-group-add' @click='addTerms' v-if='isLast'>
<div class='terms-content'>
<AIcon type='PlusOutlined' />
<span>分组</span>
</div>
</div>
</div>
</div>
</template>
<script setup lang='ts' name='TermsItem'>
import type { PropType } from 'vue'
import type { TermsType } from '@/views/rule-engine/Scene/typings'
import DropdownButton from '../DropdownButton'
import { storeToRefs } from 'pinia';
import { useSceneStore } from 'store/scene'
import ParamsItem from './ParamsItem.vue'
const sceneStore = useSceneStore()
const { data: formModel } = storeToRefs(sceneStore)
const props = defineProps({
isFirst: {
type: Boolean,
default: true
},
isLast: {
type: Boolean,
default: true
},
showDeleteBtn: {
type: Boolean,
default: true
},
data: {
type: Object as PropType<TermsType>,
default: () => ({
when: [],
shakeLimit: {},
then: []
})
},
class: {
type: String,
default: ''
},
name: {
type: Number,
default: 0
},
branchName: {
type: Number,
default: 0
},
whenName: {
type: Number,
default: 0
}
})
const showDelete = ref(false)
const termsData = computed(() => {
return props.data.terms
})
const mouseover = () => {
if (props.showDeleteBtn){
showDelete.value = true
}
}
const mouseout = () => {
if (props.showDeleteBtn){
showDelete.value = false
}
}
const onDelete = () => {
formModel.value.branches?.[props.branchName]?.when?.splice(props.name, 1)
}
const paramsChange = () => {
}
const addTerms = () => {
const terms = {
type: 'and',
terms: [
{
column: undefined,
value: {
source: 'fixed',
value: undefined
},
termType: undefined,
key: 'params_1',
type: 'and',
}
],
key: `terms_${new Date().getTime()}`
}
formModel.value.branches?.[props.branchName]?.when?.push(terms)
}
</script>
<style scoped>
</style>