mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-27 11:41:09 -04:00
214 lines
6.8 KiB
Vue
214 lines
6.8 KiB
Vue
<template>
|
|
<div class="col-span-5 pr-0">
|
|
<div
|
|
v-if="selectedCustomer"
|
|
class="flex flex-col p-4 bg-white border border-gray-200 border-solid"
|
|
style="min-height: 170px"
|
|
>
|
|
<div class="relative flex justify-between mb-2">
|
|
<label class="flex-1 font-medium">{{ selectedCustomer.name }}</label>
|
|
|
|
<a
|
|
class="relative my-0 ml-0 mr-6 text-sm font-medium cursor-pointer text-primary-500"
|
|
@click.prevent="editCustomer"
|
|
>
|
|
{{ $t('general.edit') }}
|
|
</a>
|
|
|
|
<a
|
|
class="relative my-0 ml-2 mr-6 text-sm font-medium cursor-pointer text-primary-500"
|
|
@click.prevent="resetSelectedCustomer"
|
|
>
|
|
{{ $t('general.deselect') }}
|
|
</a>
|
|
</div>
|
|
|
|
<div class="grid grid-cols-2 gap-4 mt-1">
|
|
<div v-if="selectedCustomer.billing_address">
|
|
<div class="flex flex-col">
|
|
<label
|
|
class="mb-1 text-sm font-medium text-gray-500 uppercase whitespace-nowrap"
|
|
>
|
|
{{ $t('general.bill_to') }}
|
|
</label>
|
|
<div class="flex flex-col flex-1 p-0">
|
|
<label
|
|
v-if="selectedCustomer.billing_address.name"
|
|
class="relative w-11/12 text-sm truncate"
|
|
>
|
|
{{ selectedCustomer.billing_address.name }}
|
|
</label>
|
|
<label
|
|
v-if="selectedCustomer.billing_address.address_street_1"
|
|
class="relative w-11/12 text-sm truncate"
|
|
>
|
|
{{ selectedCustomer.billing_address.address_street_1 }}
|
|
</label>
|
|
<label
|
|
v-if="selectedCustomer.billing_address.address_street_2"
|
|
class="relative w-11/12 text-sm truncate"
|
|
>
|
|
{{ selectedCustomer.billing_address.address_street_2 }}
|
|
</label>
|
|
<label
|
|
v-if="
|
|
selectedCustomer.billing_address.city &&
|
|
selectedCustomer.billing_address.state
|
|
"
|
|
class="relative w-11/12 text-sm truncate"
|
|
>
|
|
{{ selectedCustomer.billing_address.city }},
|
|
{{ selectedCustomer.billing_address.state }}
|
|
{{ selectedCustomer.billing_address.zip }}
|
|
</label>
|
|
<label
|
|
v-if="selectedCustomer.billing_address.country"
|
|
class="relative w-11/12 text-sm truncate"
|
|
>
|
|
{{ selectedCustomer.billing_address.country.name }}
|
|
</label>
|
|
<label
|
|
v-if="selectedCustomer.billing_address.phone"
|
|
class="relative w-11/12 text-sm truncate"
|
|
>
|
|
{{ selectedCustomer.billing_address.phone }}
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div v-if="selectedCustomer.shipping_address" class="col col-6">
|
|
<div class="flex flex-col">
|
|
<label
|
|
class="mb-1 text-sm font-medium text-gray-500 uppercase whitespace-nowrap"
|
|
>
|
|
{{ $t('general.ship_to') }}
|
|
</label>
|
|
<div class="flex flex-col flex-1 p-0">
|
|
<label
|
|
v-if="selectedCustomer.shipping_address.name"
|
|
class="relative w-11/12 text-sm truncate"
|
|
>
|
|
{{ selectedCustomer.shipping_address.name }}
|
|
</label>
|
|
<label
|
|
v-if="selectedCustomer.shipping_address.address_street_1"
|
|
class="relative w-11/12 text-sm truncate"
|
|
>
|
|
{{ selectedCustomer.shipping_address.address_street_1 }}
|
|
</label>
|
|
<label
|
|
v-if="selectedCustomer.shipping_address.address_street_2"
|
|
class="relative w-11/12 text-sm truncate"
|
|
>
|
|
{{ selectedCustomer.shipping_address.address_street_2 }}
|
|
</label>
|
|
<label
|
|
v-if="
|
|
selectedCustomer.shipping_address.city &&
|
|
selectedCustomer.shipping_address
|
|
"
|
|
class="relative w-11/12 text-sm truncate"
|
|
>
|
|
{{ selectedCustomer.shipping_address.city }},
|
|
{{ selectedCustomer.shipping_address.state }}
|
|
{{ selectedCustomer.shipping_address.zip }}
|
|
</label>
|
|
<label
|
|
v-if="selectedCustomer.shipping_address.country"
|
|
class="relative w-11/12 text-sm truncate"
|
|
>
|
|
{{ selectedCustomer.shipping_address.country.name }}
|
|
</label>
|
|
<label
|
|
v-if="selectedCustomer.shipping_address.phone"
|
|
class="relative w-11/12 text-sm truncate"
|
|
>
|
|
{{ selectedCustomer.shipping_address.phone }}
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div v-else>
|
|
<sw-popup
|
|
:class="[
|
|
'add-customer p-0',
|
|
{
|
|
'border border-solid border-danger rounded': valid.$error,
|
|
},
|
|
]"
|
|
>
|
|
<div
|
|
slot="activator"
|
|
class="relative flex justify-center px-0 py-16 bg-white border border-gray-200 border-solid rounded-md"
|
|
style="min-height: 170px"
|
|
>
|
|
<user-icon
|
|
class="flex justify-center w-10 h-10 p-2 mr-5 text-sm text-white bg-gray-200 rounded-full font-base"
|
|
/>
|
|
<div class="mt-1">
|
|
<label class="text-lg">
|
|
{{ $t('customers.new_customer') }}
|
|
<span class="text-danger"> * </span>
|
|
</label>
|
|
<p v-if="valid.$error && !valid.required" class="text-danger">
|
|
{{ $t('validation.required') }}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
<customer-select-popup :user-id="customerId" type="invoice" />
|
|
</sw-popup>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { mapActions, mapGetters } from 'vuex'
|
|
import { UserIcon } from '@vue-hero-icons/solid'
|
|
|
|
export default {
|
|
components: {
|
|
UserIcon,
|
|
},
|
|
|
|
props: {
|
|
valid: {
|
|
type: Object,
|
|
default: () => {},
|
|
},
|
|
customerId: {
|
|
type: Number,
|
|
default: null,
|
|
},
|
|
},
|
|
|
|
computed: {
|
|
...mapGetters('invoice', ['getTemplateName', 'selectedCustomer']),
|
|
},
|
|
|
|
created() {
|
|
this.resetSelectedCustomer()
|
|
if (this.customerId) {
|
|
this.selectCustomer(this.customerId)
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
...mapActions('invoice', ['resetSelectedCustomer', 'selectCustomer']),
|
|
|
|
...mapActions('modal', ['openModal']),
|
|
|
|
editCustomer() {
|
|
this.openModal({
|
|
title: this.$t('customers.edit_customer'),
|
|
componentName: 'CustomerModal',
|
|
id: this.selectedCustomer.id,
|
|
data: this.selectedCustomer,
|
|
})
|
|
},
|
|
},
|
|
}
|
|
</script>
|