ref #6175 VnLinkPhone and MicroSIP icon created
gitea/salix-front/pipeline/head This commit looks good
Details
gitea/salix-front/pipeline/head This commit looks good
Details
This commit is contained in:
parent
4478c2e37d
commit
3a3ae14dc5
|
@ -0,0 +1,36 @@
|
||||||
|
<script setup>
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
const props = defineProps({
|
||||||
|
phoneNumber: { type: [String, Number], default: null },
|
||||||
|
icon: { type: Boolean, default: true },
|
||||||
|
showNumber: { type: Boolean, default: true },
|
||||||
|
schemeUrl: { type: String, default: 'tel' },
|
||||||
|
});
|
||||||
|
const { t } = useI18n();
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<div v-if="props.phoneNumber">
|
||||||
|
<span v-if="props.icon">
|
||||||
|
<span v-if="props.showNumber">
|
||||||
|
{{ props.phoneNumber }}
|
||||||
|
</span>
|
||||||
|
<QBtn
|
||||||
|
flat
|
||||||
|
round
|
||||||
|
:icon="'phone'"
|
||||||
|
size="sm"
|
||||||
|
class="q-ml-xs"
|
||||||
|
color="primary"
|
||||||
|
padding="none"
|
||||||
|
:href="`${props.schemeUrl}:${props.phoneNumber}`"
|
||||||
|
:title="t('globals.microsip')"
|
||||||
|
@click.stop
|
||||||
|
/>
|
||||||
|
</span>
|
||||||
|
<a v-else :href="`tel:${props.phoneNumber}`" class="link">
|
||||||
|
{{ props.phoneNumber }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<span v-else>-</span>
|
||||||
|
</template>
|
||||||
|
<style scoped></style>
|
|
@ -36,6 +36,7 @@ export default {
|
||||||
summary: {
|
summary: {
|
||||||
basicData: 'Basic data',
|
basicData: 'Basic data',
|
||||||
},
|
},
|
||||||
|
microsip: 'Open in MicroSIP',
|
||||||
},
|
},
|
||||||
errors: {
|
errors: {
|
||||||
statusUnauthorized: 'Access denied',
|
statusUnauthorized: 'Access denied',
|
||||||
|
|
|
@ -36,6 +36,7 @@ export default {
|
||||||
summary: {
|
summary: {
|
||||||
basicData: 'Datos básicos',
|
basicData: 'Datos básicos',
|
||||||
},
|
},
|
||||||
|
microsip: 'Abrir en MicroSIP',
|
||||||
},
|
},
|
||||||
errors: {
|
errors: {
|
||||||
statusUnauthorized: 'Acceso denegado',
|
statusUnauthorized: 'Acceso denegado',
|
||||||
|
|
|
@ -6,6 +6,7 @@ import { toCurrency, toPercentage, toDate } from 'src/filters';
|
||||||
import CardSummary from 'components/ui/CardSummary.vue';
|
import CardSummary from 'components/ui/CardSummary.vue';
|
||||||
import { getUrl } from 'src/composables/getUrl';
|
import { getUrl } from 'src/composables/getUrl';
|
||||||
import VnLv from 'src/components/ui/VnLv.vue';
|
import VnLv from 'src/components/ui/VnLv.vue';
|
||||||
|
import VnLinkPhone from 'src/components/ui/VnLinkPhone.vue';
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
@ -68,8 +69,26 @@ const creditWarning = computed(() => {
|
||||||
<VnLv :label="t('customer.summary.customerId')" :value="entity.id" />
|
<VnLv :label="t('customer.summary.customerId')" :value="entity.id" />
|
||||||
<VnLv :label="t('customer.summary.name')" :value="entity.name" />
|
<VnLv :label="t('customer.summary.name')" :value="entity.name" />
|
||||||
<VnLv :label="t('customer.summary.contact')" :value="entity.contact" />
|
<VnLv :label="t('customer.summary.contact')" :value="entity.contact" />
|
||||||
<VnLv :label="t('customer.summary.phone')" :value="entity.phone" />
|
<VnLv :value="entity.phone">
|
||||||
<VnLv :label="t('customer.summary.mobile')" :value="entity.mobile" />
|
<template #label>
|
||||||
|
{{ t('customer.summary.phone') }}
|
||||||
|
<VnLinkPhone
|
||||||
|
:phone-number="entity.phone"
|
||||||
|
scheme-url="sip"
|
||||||
|
:show-number="false"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</VnLv>
|
||||||
|
<VnLv :value="entity.mobile">
|
||||||
|
<template #label>
|
||||||
|
{{ t('customer.summary.mobile') }}
|
||||||
|
<VnLinkPhone
|
||||||
|
:phone-number="entity.mobile"
|
||||||
|
scheme-url="sip"
|
||||||
|
:show-number="false"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</VnLv>
|
||||||
<VnLv :label="t('customer.summary.email')" :value="entity.email" />
|
<VnLv :label="t('customer.summary.email')" :value="entity.email" />
|
||||||
<VnLv
|
<VnLv
|
||||||
:label="t('customer.summary.salesPerson')"
|
:label="t('customer.summary.salesPerson')"
|
||||||
|
|
|
@ -9,6 +9,7 @@ import VnSearchbar from 'src/components/ui/VnSearchbar.vue';
|
||||||
import CustomerFilter from './CustomerFilter.vue';
|
import CustomerFilter from './CustomerFilter.vue';
|
||||||
import VnLv from 'src/components/ui/VnLv.vue';
|
import VnLv from 'src/components/ui/VnLv.vue';
|
||||||
import CardList from 'src/components/ui/CardList.vue';
|
import CardList from 'src/components/ui/CardList.vue';
|
||||||
|
import VnLinkPhone from 'src/components/ui/VnLinkPhone.vue';
|
||||||
|
|
||||||
const stateStore = useStateStore();
|
const stateStore = useStateStore();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
@ -77,7 +78,14 @@ function viewSummary(id) {
|
||||||
<template #list-items>
|
<template #list-items>
|
||||||
<VnLv label="ID" :value="row.id" />
|
<VnLv label="ID" :value="row.id" />
|
||||||
<VnLv :label="t('customer.list.email')" :value="row.email" />
|
<VnLv :label="t('customer.list.email')" :value="row.email" />
|
||||||
<VnLv :label="t('customer.list.phone')" :value="row.phone" />
|
<VnLv :label="t('customer.list.phone')">
|
||||||
|
<template #value>
|
||||||
|
<VnLinkPhone
|
||||||
|
:phone-number="row.phone"
|
||||||
|
scheme-url="sip"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</VnLv>
|
||||||
</template>
|
</template>
|
||||||
<template #actions>
|
<template #actions>
|
||||||
<QBtn
|
<QBtn
|
||||||
|
|
|
@ -8,6 +8,7 @@ import CardDescriptor from 'components/ui/CardDescriptor.vue';
|
||||||
import TicketDescriptorMenu from './TicketDescriptorMenu.vue';
|
import TicketDescriptorMenu from './TicketDescriptorMenu.vue';
|
||||||
import VnLv from 'src/components/ui/VnLv.vue';
|
import VnLv from 'src/components/ui/VnLv.vue';
|
||||||
import useCardDescription from 'src/composables/useCardDescription';
|
import useCardDescription from 'src/composables/useCardDescription';
|
||||||
|
import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
|
||||||
|
|
||||||
const $props = defineProps({
|
const $props = defineProps({
|
||||||
id: {
|
id: {
|
||||||
|
|
|
@ -10,6 +10,7 @@ import FetchedTags from 'components/ui/FetchedTags.vue';
|
||||||
import InvoiceOutDescriptorProxy from 'pages/InvoiceOut/Card/InvoiceOutDescriptorProxy.vue';
|
import InvoiceOutDescriptorProxy from 'pages/InvoiceOut/Card/InvoiceOutDescriptorProxy.vue';
|
||||||
import WorkerDescriptorProxy from 'pages/Worker/Card/WorkerDescriptorProxy.vue';
|
import WorkerDescriptorProxy from 'pages/Worker/Card/WorkerDescriptorProxy.vue';
|
||||||
import VnLv from 'src/components/ui/VnLv.vue';
|
import VnLv from 'src/components/ui/VnLv.vue';
|
||||||
|
import VnLinkPhone from 'src/components/ui/VnLinkPhone.vue';
|
||||||
import { getUrl } from 'src/composables/getUrl';
|
import { getUrl } from 'src/composables/getUrl';
|
||||||
|
|
||||||
onUpdated(() => summaryRef.value.fetch());
|
onUpdated(() => summaryRef.value.fetch());
|
||||||
|
@ -208,22 +209,38 @@ async function changeState(value) {
|
||||||
:value="toDate(ticket.landed)"
|
:value="toDate(ticket.landed)"
|
||||||
/>
|
/>
|
||||||
<VnLv :label="t('ticket.summary.packages')" :value="ticket.packages" />
|
<VnLv :label="t('ticket.summary.packages')" :value="ticket.packages" />
|
||||||
<VnLv
|
<VnLv :label="t('ticket.summary.consigneePhone')">
|
||||||
:label="t('ticket.summary.consigneePhone')"
|
<template #value>
|
||||||
:value="ticket.address.phone"
|
<VnLinkPhone
|
||||||
/>
|
:phone-number="ticket.address.phone"
|
||||||
<VnLv
|
scheme-url="sip"
|
||||||
:label="t('ticket.summary.consigneeMobile')"
|
/>
|
||||||
:value="ticket.address.mobile"
|
</template>
|
||||||
/>
|
</VnLv>
|
||||||
<VnLv
|
<VnLv :label="t('ticket.summary.consigneeMobile')">
|
||||||
:label="t('ticket.summary.clientPhone')"
|
<template #value>
|
||||||
:value="ticket.client.phone"
|
<VnLinkPhone
|
||||||
/>
|
:phone-number="ticket.address.mobile"
|
||||||
<VnLv
|
scheme-url="sip"
|
||||||
:label="t('ticket.summary.clientMobile')"
|
/>
|
||||||
:value="ticket.client.mobile"
|
</template>
|
||||||
/>
|
</VnLv>
|
||||||
|
<VnLv :label="t('ticket.summary.clientPhone')">
|
||||||
|
<template #value>
|
||||||
|
<VnLinkPhone
|
||||||
|
:phone-number="ticket.client.phone"
|
||||||
|
scheme-url="sip"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</VnLv>
|
||||||
|
<VnLv :label="t('ticket.summary.clientMobile')">
|
||||||
|
<template #value>
|
||||||
|
<VnLinkPhone
|
||||||
|
:phone-number="ticket.client.mobile"
|
||||||
|
scheme-url="sip"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</VnLv>
|
||||||
<VnLv
|
<VnLv
|
||||||
:label="t('ticket.summary.consignee')"
|
:label="t('ticket.summary.consignee')"
|
||||||
:value="formattedAddress()"
|
:value="formattedAddress()"
|
||||||
|
|
|
@ -5,7 +5,9 @@ import { useI18n } from 'vue-i18n';
|
||||||
import { useSession } from 'src/composables/useSession';
|
import { useSession } from 'src/composables/useSession';
|
||||||
import CardDescriptor from 'src/components/ui/CardDescriptor.vue';
|
import CardDescriptor from 'src/components/ui/CardDescriptor.vue';
|
||||||
import VnLv from 'src/components/ui/VnLv.vue';
|
import VnLv from 'src/components/ui/VnLv.vue';
|
||||||
|
import VnLinkPhone from 'src/components/ui/VnLinkPhone.vue';
|
||||||
import useCardDescription from 'src/composables/useCardDescription';
|
import useCardDescription from 'src/composables/useCardDescription';
|
||||||
|
|
||||||
const $props = defineProps({
|
const $props = defineProps({
|
||||||
id: {
|
id: {
|
||||||
type: Number,
|
type: Number,
|
||||||
|
@ -96,8 +98,27 @@ const setData = (entity) =>
|
||||||
:label="t('worker.list.department')"
|
:label="t('worker.list.department')"
|
||||||
:value="entity.department ? entity.department.department.name : null"
|
:value="entity.department ? entity.department.department.name : null"
|
||||||
/>
|
/>
|
||||||
<VnLv :label="t('worker.card.phone')" :value="entity.phone" />
|
<VnLv :value="entity.phone">
|
||||||
<VnLv :label="t('worker.summary.sipExtension')" :value="sip" />
|
<template #label>
|
||||||
|
{{ t('worker.card.phone') }}
|
||||||
|
<VnLinkPhone
|
||||||
|
:phone-number="entity.phone"
|
||||||
|
scheme-url="sip"
|
||||||
|
:show-number="false"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</VnLv>
|
||||||
|
<VnLv :value="sip">
|
||||||
|
<template #label>
|
||||||
|
{{ t('worker.summary.sipExtension') }}
|
||||||
|
<VnLinkPhone
|
||||||
|
v-if="sip"
|
||||||
|
:phone-number="sip"
|
||||||
|
scheme-url="sip"
|
||||||
|
:show-number="false"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</VnLv>
|
||||||
</template>
|
</template>
|
||||||
</CardDescriptor>
|
</CardDescriptor>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -8,6 +8,7 @@ import { getUrl } from 'src/composables/getUrl';
|
||||||
import VnLv from 'src/components/ui/VnLv.vue';
|
import VnLv from 'src/components/ui/VnLv.vue';
|
||||||
import WorkerDescriptorProxy from './WorkerDescriptorProxy.vue';
|
import WorkerDescriptorProxy from './WorkerDescriptorProxy.vue';
|
||||||
import { dashIfEmpty } from 'src/filters';
|
import { dashIfEmpty } from 'src/filters';
|
||||||
|
import VnLinkPhone from 'src/components/ui/VnLinkPhone.vue';
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
@ -92,15 +93,27 @@ const filter = {
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</VnLv>
|
</VnLv>
|
||||||
<VnLv
|
<VnLv :label="t('worker.summary.phoneExtension')">
|
||||||
:label="t('worker.summary.phoneExtension')"
|
<template #value>
|
||||||
:value="worker.mobileExtension"
|
<VnLinkPhone
|
||||||
/>
|
:phone-number="worker.mobileExtension"
|
||||||
<VnLv :label="t('worker.summary.entPhone')" :value="worker.phone" />
|
scheme-url="sip"
|
||||||
<VnLv
|
/>
|
||||||
:label="t('worker.summary.personalPhone')"
|
</template>
|
||||||
:value="worker.client.phone"
|
</VnLv>
|
||||||
/>
|
<VnLv :label="t('worker.summary.entPhone')">
|
||||||
|
<template #value>
|
||||||
|
<VnLinkPhone :phone-number="worker.phone" scheme-url="sip" />
|
||||||
|
</template>
|
||||||
|
</VnLv>
|
||||||
|
<VnLv :label="t('worker.summary.personalPhone')">
|
||||||
|
<template #value>
|
||||||
|
<VnLinkPhone
|
||||||
|
:phone-number="worker.client.phone"
|
||||||
|
scheme-url="sip"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</VnLv>
|
||||||
<VnLv :label="t('worker.summary.locker')" :value="worker.locker" />
|
<VnLv :label="t('worker.summary.locker')" :value="worker.locker" />
|
||||||
</QCard>
|
</QCard>
|
||||||
<QCard class="vn-one">
|
<QCard class="vn-one">
|
||||||
|
@ -110,10 +123,11 @@ const filter = {
|
||||||
<VnLv :label="t('worker.summary.userId')" :value="worker.user.id" />
|
<VnLv :label="t('worker.summary.userId')" :value="worker.user.id" />
|
||||||
<VnLv :label="t('worker.card.name')" :value="worker.user.nickname" />
|
<VnLv :label="t('worker.card.name')" :value="worker.user.nickname" />
|
||||||
<VnLv :label="t('worker.summary.role')" :value="worker.user.role.name" />
|
<VnLv :label="t('worker.summary.role')" :value="worker.user.role.name" />
|
||||||
<VnLv
|
<VnLv :label="t('worker.summary.sipExtension')">
|
||||||
:label="t('worker.summary.sipExtension')"
|
<template #value>
|
||||||
:value="worker?.sip?.extension"
|
<VnLinkPhone :phone-number="worker?.sip?.extension" />
|
||||||
/>
|
</template>
|
||||||
|
</VnLv>
|
||||||
</QCard>
|
</QCard>
|
||||||
</template>
|
</template>
|
||||||
</CardSummary>
|
</CardSummary>
|
||||||
|
|
Loading…
Reference in New Issue