mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-12 13:24:25 +00:00
102 lines
2.7 KiB
Vue
102 lines
2.7 KiB
Vue
<template>
|
|
<ul class="nav nav-tabs">
|
|
<li v-if="allowedTypes.includes('person')" class="nav-item">
|
|
<a class="nav-link" :class="{ active: isActive('person') }">
|
|
<label for="person">
|
|
<input type="radio" name="person" id="person" v-model="radioType" value="person">
|
|
{{ $trans('ONTHEFLY_CREATE_PERSON') }}
|
|
</label>
|
|
</a>
|
|
</li>
|
|
<li v-if="allowedTypes.includes('thirdparty')" class="nav-item">
|
|
<a class="nav-link" :class="{ active: isActive('thirdparty') }">
|
|
<label for="thirdparty">
|
|
<input type="radio" name="thirdparty" id="thirdparty" v-model="radioType" value="thirdparty">
|
|
{{ $t('onthefly.create.thirdparty') }}
|
|
</label>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
|
|
<div class="my-4">
|
|
<on-the-fly-person
|
|
v-if="type === 'person'"
|
|
:action="action"
|
|
:query="query"
|
|
ref="castPerson"
|
|
>
|
|
</on-the-fly-person>
|
|
|
|
<on-the-fly-thirdparty
|
|
v-if="type === 'thirdparty'"
|
|
:action="action"
|
|
:query="query"
|
|
ref="castThirdparty"
|
|
>
|
|
</on-the-fly-thirdparty>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { ref, computed, onMounted } from 'vue';
|
|
import OnTheFlyPerson from 'ChillPersonAssets/vuejs/_components/OnTheFly/Person.vue';
|
|
import OnTheFlyThirdparty from 'ChillThirdPartyAssets/vuejs/_components/OnTheFly/ThirdParty.vue';
|
|
|
|
// Define props
|
|
const props = defineProps(['action', 'allowedTypes', 'query']);
|
|
|
|
// Create a ref for type
|
|
const type = ref(null);
|
|
|
|
// Computed
|
|
const radioType = computed({
|
|
get: () => type.value,
|
|
set(value) {
|
|
type.value = value;
|
|
console.log('## type:', value, ', action:', props.action);
|
|
}
|
|
});
|
|
|
|
// Mounted
|
|
onMounted(() => {
|
|
type.value = (props.allowedTypes.length === 1 && props.allowedTypes.includes('thirdparty'))
|
|
? 'thirdparty'
|
|
: 'person';
|
|
});
|
|
|
|
// Methods
|
|
const isActive = (tab) => {
|
|
return type.value === tab;
|
|
};
|
|
|
|
const castDataByType = () => {
|
|
switch (radioType.value) {
|
|
case 'person':
|
|
return $refs.castPerson.$data.person;
|
|
case 'thirdparty':
|
|
let data = $refs.castThirdparty.$data.thirdparty;
|
|
if (data.address !== undefined && data.address !== null) {
|
|
data.address = { id: data.address.address_id };
|
|
} else {
|
|
data.address = null;
|
|
}
|
|
return data;
|
|
default:
|
|
throw Error('Invalid type of entity');
|
|
}
|
|
};
|
|
|
|
// Register components
|
|
defineExpose({
|
|
isActive,
|
|
castDataByType
|
|
});
|
|
|
|
</script>
|
|
|
|
<style lang="css" scoped>
|
|
label {
|
|
cursor: pointer;
|
|
}
|
|
</style>
|