update: 场景联动条件优化

This commit is contained in:
xieyonghong 2023-03-15 09:59:11 +08:00
parent 0011e85de9
commit d7f3ba6317
8 changed files with 134 additions and 36 deletions

View File

@ -53,6 +53,7 @@
v-model:value="myValue"
placeholder="请输入图片链接"
allowClear
@change='inputChange'
>
<template #addonAfter>
<j-upload
@ -182,6 +183,7 @@ const handleFileChange = (info: UploadChangeParam<UploadFile<any>>) => {
const url = info.file.response?.result;
myValue.value = url;
emit('update:modelValue', url);
emit('change', url);
}
};

View File

@ -1,7 +1,7 @@
<template>
<div class='dropdown-time-picker'>
<j-time-picker
v-if='!_type'
v-if='type === "time"'
open
v-model:value='myValue'
class='manual-time-picker'
@ -59,9 +59,6 @@ const change = (e: Dayjs) => {
emit('change', e.format(myFormat))
}
const _type = computed(() => {
return props.value?.includes('-')
})
</script>
<style lang='less'>

View File

@ -23,7 +23,7 @@
<div class='select-box-content'>
<DropdownTimePicker
v-if='["time","date"].includes(item.component)'
:type='item.component'
type='time'
v-model:value='myValue'
@change='timeChange'
/>

View File

@ -19,19 +19,23 @@
>
<j-popconfirm
title='该操作将清空其它所有否则条件,确认删除?'
placement='topRight'
placement="topRight"
@confirm='onDeleteAll'
>
<AIcon type='CloseOutlined' v-show='showDelete' />
<div class='terms-params-delete' v-show='showDelete'>
<AIcon type='CloseOutlined' />
</div>
</j-popconfirm>
<div class='actions-terms-list-content'>
<template v-if='showWhen'>
<TermsItem
v-for='(item, index) in data.when'
v-for='(item, index) in whenData'
:key='item.key'
:name='index'
:showDeleteBtn='whenData.length !== 1'
:isFirst='index === 0'
:isLast='index === data.when.length -1'
:isLast='index === whenData.length -1'
:branchName='name'
:whenName='index'
:data='item'
@ -92,6 +96,10 @@ const showWhen = computed(() => {
return props.data.when.length
})
const whenData = computed(() => {
return props.data.when
})
const onDelete = () => {
}
@ -101,19 +109,36 @@ const onDeleteAll = () => {
}
const mouseover = () => {
if (props.isFirst && props.data.when.length){
if (!props.isFirst){
showDelete.value = true
}
}
const mouseout = () => {
if (props.isFirst && props.data.when.length){
if (!props.isFirst){
showDelete.value = false
}
}
const addWhen = () => {
const whenItem = {
key: `when_${new Date().getTime()}`,
type: 'and',
terms: [
{
column: undefined,
value: {
source: 'fixed',
value: undefined
},
termType: undefined,
key: 'params_1',
type: 'and',
}
]
}
FormModel.value.branches?.[props.name].when.push(whenItem)
FormModel.value.branches?.push(null)
}
const optionsClass = computed(() => {

View File

@ -75,6 +75,11 @@ import { getOption } from '../DropdownButton/util'
import ParamsDropdown, { DoubleParamsDropdown } from '../ParamsDropdown'
import { inject } from 'vue'
import { ContextKey } from './util'
import { useSceneStore } from 'store/scene'
import { storeToRefs } from 'pinia';
const sceneStore = useSceneStore()
const { data: formModel } = storeToRefs(sceneStore)
type Emit = {
(e: 'update:value', data: TermsType): void
@ -95,10 +100,26 @@ const props = defineProps({
type: Boolean,
default: true
},
showDeleteBtn: {
type: Boolean,
default: true
},
name: {
type: Number,
default: 0
},
termsName: {
type: Number,
default: 0
},
branchName: {
type: Number,
default: 0
},
whenName: {
type: Number,
default: 0
},
value: {
type: Object as PropType<TermsType>,
default: () => ({
@ -176,13 +197,13 @@ const showDouble = computed(() => {
})
const mouseover = () => {
if (props.name !== 0){
if (props.showDeleteBtn){
showDelete.value = true
}
}
const mouseout = () => {
if (props.name !== 0){
if (props.showDeleteBtn){
showDelete.value = false
}
}
@ -205,11 +226,21 @@ const termsTypeSelect = () => {
}
const termAdd = () => {
const terms = {
column: undefined,
value: {
source: 'fixed',
value: undefined
},
termType: undefined,
type: 'and',
key: `params_${new Date().getTime()}`
}
formModel.value.branches?.[props.branchName]?.when?.[props.whenName]?.terms?.push(terms)
}
const onDelete = () => {
formModel.value.branches?.[props.branchName]?.when?.[props.whenName]?.terms?.splice(props.name, 1)
}
nextTick(() => {

View File

@ -97,7 +97,19 @@ const queryColumn = (dataModel: FormModelType) => {
}
const addBranches = () => {
const branchesItem = {
when: [],
key: `branches_${new Date().getTime()}`,
shakeLimit: {
enabled: false,
time: 1,
threshold: 1,
alarmFirst: false,
},
then: [],
}
const lastIndex = data.value.branches!.length - 1 || 0
data.value.branches?.splice(lastIndex, 1, branchesItem)
}
const branchesDelete = (index: number) => {

View File

@ -26,21 +26,29 @@
</j-popconfirm>
<j-form-item
v-for='(item, index) in data.terms'
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 === data.terms.length - 1'
:isLast='index === termsData.length - 1'
:showDeleteBtn='termsData.length !== 1'
:name='index'
:termsName='name'
:whenName='whenName'
:branchName='branchName'
@change='paramsChange'
@delete='paramsDelete'
@add='paramsAdd'
/>
</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>
@ -61,6 +69,14 @@ const props = defineProps({
type: Boolean,
default: true
},
isLast: {
type: Boolean,
default: true
},
showDeleteBtn: {
type: Boolean,
default: true
},
data: {
type: Object as PropType<TermsType>,
default: () => ({
@ -73,6 +89,10 @@ const props = defineProps({
type: String,
default: ''
},
name: {
type: Number,
default: 0
},
branchName: {
type: Number,
default: 0
@ -85,36 +105,48 @@ const props = defineProps({
const showDelete = ref(false)
const termsData = computed(() => {
return props.data.terms
})
const mouseover = () => {
if (props.whenName !== 0){
if (props.showDeleteBtn){
showDelete.value = true
}
}
const mouseout = () => {
if (props.whenName !== 0){
if (props.showDeleteBtn){
showDelete.value = false
}
}
const onDelete = () => {
}
const onDeleteAll = () => {
formModel.value.branches?.[props.branchName]?.when?.splice(props.name, 1)
}
const paramsChange = () => {
}
const paramsDelete = () => {
const addTerms = () => {
const terms = {
type: 'and',
terms: [
{
column: undefined,
value: {
source: 'fixed',
value: undefined
},
termType: undefined,
key: 'params_1',
type: 'and',
}
const paramsAdd = () => {
],
key: `terms_${new Date().getTime()}`
}
formModel.value.branches?.[props.branchName]?.when?.push(terms)
}
</script>

View File

@ -15,7 +15,6 @@
position: absolute;
top: -10px;
right: -10px;
display: none;
width: 20px;
height: 20px;
color: #999;
@ -37,7 +36,7 @@
.actions-terms {
.actions-terms-warp {
display: flex;
width: 66.66%;
//width: 66.66%;
margin-bottom: 24px;
&.first-children {