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

View File

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

View File

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

View File

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

View File

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

View File

@ -97,7 +97,19 @@ const queryColumn = (dataModel: FormModelType) => {
} }
const addBranches = () => { 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) => { const branchesDelete = (index: number) => {

View File

@ -26,21 +26,29 @@
</j-popconfirm> </j-popconfirm>
<j-form-item <j-form-item
v-for='(item, index) in data.terms' v-for='(item, index) in termsData'
:key='item.key' :key='item.key'
:name='["branches", branchName, "when", whenName, "terms", index]' :name='["branches", branchName, "when", whenName, "terms", index]'
> >
<ParamsItem <ParamsItem
v-model:value='formModel.branches[branchName].when[whenName].terms[index]' v-model:value='formModel.branches[branchName].when[whenName].terms[index]'
:isFirst='index === 0' :isFirst='index === 0'
:isLast='index === data.terms.length - 1' :isLast='index === termsData.length - 1'
:showDeleteBtn='termsData.length !== 1'
:name='index' :name='index'
:termsName='name'
:whenName='whenName'
:branchName='branchName'
@change='paramsChange' @change='paramsChange'
@delete='paramsDelete'
@add='paramsAdd'
/> />
</j-form-item> </j-form-item>
</div> </div>
<div class='terms-group-add' @click='addTerms' v-if='isLast'>
<div class='terms-content'>
<AIcon type='PlusOutlined' />
<span>分组</span>
</div>
</div>
</div> </div>
</div> </div>
</template> </template>
@ -61,6 +69,14 @@ const props = defineProps({
type: Boolean, type: Boolean,
default: true default: true
}, },
isLast: {
type: Boolean,
default: true
},
showDeleteBtn: {
type: Boolean,
default: true
},
data: { data: {
type: Object as PropType<TermsType>, type: Object as PropType<TermsType>,
default: () => ({ default: () => ({
@ -73,6 +89,10 @@ const props = defineProps({
type: String, type: String,
default: '' default: ''
}, },
name: {
type: Number,
default: 0
},
branchName: { branchName: {
type: Number, type: Number,
default: 0 default: 0
@ -85,36 +105,48 @@ const props = defineProps({
const showDelete = ref(false) const showDelete = ref(false)
const termsData = computed(() => {
return props.data.terms
})
const mouseover = () => { const mouseover = () => {
if (props.whenName !== 0){ if (props.showDeleteBtn){
showDelete.value = true showDelete.value = true
} }
} }
const mouseout = () => { const mouseout = () => {
if (props.whenName !== 0){ if (props.showDeleteBtn){
showDelete.value = false showDelete.value = false
} }
} }
const onDelete = () => { const onDelete = () => {
formModel.value.branches?.[props.branchName]?.when?.splice(props.name, 1)
}
const onDeleteAll = () => {
} }
const paramsChange = () => { const paramsChange = () => {
} }
const paramsDelete = () => { const addTerms = () => {
const terms = {
} type: 'and',
terms: [
const paramsAdd = () => { {
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> </script>

View File

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