145 lines
4.4 KiB
Vue
145 lines
4.4 KiB
Vue
<template>
|
|
<q-field labelColor="primary" class="condition-object" dense outlined :label="label" :disable="disabled"
|
|
:clearable="isSelected">
|
|
<template v-slot:control>
|
|
<q-chip color="primary" text-color="white" v-if="isSelected && selectedObject.objectType==='field'" :dense="true" class="selected-obj">
|
|
{{ selectedObject.name }}
|
|
</q-chip>
|
|
<q-chip color="info" text-color="white" v-if="isSelected && selectedObject.objectType==='variable'" :dense="true" class="selected-obj">
|
|
{{ selectedObject.name.name }}
|
|
</q-chip>
|
|
<div v-if="isSelected && selectedObject.objectType==='text'">{{ selectedObject?.sharedText }}</div>
|
|
</template>
|
|
<template v-slot:append>
|
|
<q-icon name="search" class="cursor-pointer" @click="showDg" />
|
|
</template>
|
|
</q-field>
|
|
<show-dialog v-model:visible="show" name="設定項目" @close="closeDg" min-width="400px">
|
|
<!-- <template v-slot:toolbar>
|
|
<q-input dense debounce="200" v-model="filter" placeholder="検索" clearable>
|
|
<template v-slot:before>
|
|
<q-icon name="search" />
|
|
</template>
|
|
</q-input>
|
|
</template>
|
|
<condition-objects ref="appDg" name="フィールド" type="single" :filter="filter" :appId="store.appInfo?.appId" :vars="vars"></condition-objects>
|
|
-->
|
|
<DynamicItemInput v-model:selectedObject="selectedObject" :canInput="config.canInput"
|
|
:buttonsConfig="config.buttonsConfig" :appId="store.appInfo?.appId" :options="options" ref="inputRef" />
|
|
|
|
</show-dialog>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import { defineComponent, reactive, ref, watchEffect, computed ,PropType} from 'vue';
|
|
import ShowDialog from '../ShowDialog.vue';
|
|
// import ConditionObjects from '../ConditionObjects.vue';
|
|
import DynamicItemInput from '../DynamicItemInput/DynamicItemInput.vue';
|
|
import { useFlowEditorStore } from '../../stores/flowEditor';
|
|
import { IActionFlow, IActionNode, IActionVariable } from '../../types/ActionTypes';
|
|
import { IDynamicInputConfig } from 'src/types/ComponentTypes';
|
|
|
|
|
|
export default defineComponent({
|
|
name: 'ConditionObject',
|
|
components: {
|
|
ShowDialog,
|
|
DynamicItemInput,
|
|
// ConditionObjects
|
|
},
|
|
props: {
|
|
disabled: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
label: {
|
|
type: String,
|
|
default: undefined
|
|
},
|
|
config: {
|
|
type: Object as PropType<IDynamicInputConfig>,
|
|
default: () => {
|
|
return {
|
|
canInput: false,
|
|
buttonsConfig: [
|
|
{ label: 'フィールド', color: 'primary', type: 'FieldAdd' },
|
|
{ label: '変数', color: 'green', type: 'VariableAdd' },
|
|
]
|
|
};
|
|
}
|
|
},
|
|
|
|
options:
|
|
{
|
|
type:Array as PropType< string[]>,
|
|
default:()=>[]
|
|
},
|
|
modelValue: {
|
|
type: Object,
|
|
default: null
|
|
},
|
|
},
|
|
setup(props, { emit }) {
|
|
// const appDg = ref();
|
|
const inputRef=ref();
|
|
const show = ref(false);
|
|
const selectedObject = ref(props.modelValue);
|
|
const store = useFlowEditorStore();
|
|
// const sharedText = ref(''); // 共享的文本状态
|
|
const isSelected = computed(() => {
|
|
return selectedObject.value?.sharedText !== '';
|
|
});
|
|
// const isSelected = computed(()=>{
|
|
// return selectedObject.value!==null && typeof selectedObject.value === 'object' && ('name' in selectedObject.value)
|
|
// });
|
|
let vars: IActionVariable[] = [];
|
|
if (store.currentFlow !== undefined && store.activeNode !== undefined) {
|
|
vars = store.currentFlow.getVarNames(store.activeNode);
|
|
}
|
|
// const filter=ref('');
|
|
const showDg = () => {
|
|
show.value = true;
|
|
};
|
|
|
|
const closeDg = (val: string) => {
|
|
if (val == 'OK') {
|
|
// selectedObject.value = appDg.value.selected[0];
|
|
selectedObject.value = inputRef.value.selectedObjectRef
|
|
}
|
|
};
|
|
|
|
watchEffect(() => {
|
|
emit('update:modelValue', selectedObject.value);
|
|
});
|
|
|
|
return {
|
|
inputRef,
|
|
store,
|
|
// appDg,
|
|
show,
|
|
showDg,
|
|
closeDg,
|
|
selectedObject,
|
|
vars: reactive(vars),
|
|
isSelected,
|
|
buttonsConfig: [
|
|
{ label: 'フィールド', color: 'primary', type: 'FieldAdd' },
|
|
{ label: '変数', color: 'green', type: 'VariableAdd' },
|
|
]
|
|
// filter
|
|
};
|
|
}
|
|
});
|
|
</script>
|
|
<style lang="scss">
|
|
.condition-object {
|
|
min-width: 200px;
|
|
max-height: 40px;
|
|
margin: 0 2px;
|
|
}
|
|
|
|
.selected-obj {
|
|
margin: 0 2px;
|
|
}
|
|
</style>
|