mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-28 04:01:10 -04:00
Compare commits
3 Commits
dark-cust-
...
dark-label
| Author | SHA1 | Date | |
|---|---|---|---|
| 6740f66903 | |||
| 29430ccc5d | |||
| 065775633d |
@ -43,12 +43,6 @@
|
|||||||
max-w-full
|
max-w-full
|
||||||
left-0
|
left-0
|
||||||
top-3
|
top-3
|
||||||
bg-white
|
|
||||||
dark:border
|
|
||||||
dark:border-white/10
|
|
||||||
dark:text-white
|
|
||||||
dark:bg-gray-800
|
|
||||||
dark:shadow-glass
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
@ -59,7 +53,7 @@
|
|||||||
ring-1 ring-black ring-opacity-5
|
ring-1 ring-black ring-opacity-5
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div class="relative grid bg-white dark:bg-gray-800">
|
<div class="relative grid bg-white">
|
||||||
<div class="relative p-4">
|
<div class="relative p-4">
|
||||||
<BaseInput
|
<BaseInput
|
||||||
v-model="textSearch"
|
v-model="textSearch"
|
||||||
@ -72,7 +66,7 @@
|
|||||||
|
|
||||||
<div
|
<div
|
||||||
v-if="filteredNotes.length > 0"
|
v-if="filteredNotes.length > 0"
|
||||||
class="relative flex flex-col overflow-auto list max-h-36 dark:border-white/10"
|
class="relative flex flex-col overflow-auto list max-h-36"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
v-for="(note, index) in filteredNotes"
|
v-for="(note, index) in filteredNotes"
|
||||||
@ -85,8 +79,6 @@
|
|||||||
cursor-pointer
|
cursor-pointer
|
||||||
hover:bg-gray-100 hover:cursor-pointer
|
hover:bg-gray-100 hover:cursor-pointer
|
||||||
last:border-b-0
|
last:border-b-0
|
||||||
dark:border-gray-600
|
|
||||||
dark:border-white/10 dark:hover:bg-gray-700/30
|
|
||||||
"
|
"
|
||||||
@click="selectNote(index, close)"
|
@click="selectNote(index, close)"
|
||||||
>
|
>
|
||||||
@ -127,10 +119,6 @@
|
|||||||
bg-gray-200
|
bg-gray-200
|
||||||
border-none
|
border-none
|
||||||
outline-none
|
outline-none
|
||||||
dark:bg-gray-600/70
|
|
||||||
dark:backdrop-blur-xl
|
|
||||||
dark:shadow-glass
|
|
||||||
dark:hover:bg-gray-600/80
|
|
||||||
"
|
"
|
||||||
@click="openNoteModal"
|
@click="openNoteModal"
|
||||||
>
|
>
|
||||||
|
|||||||
@ -1,13 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<tr
|
<tr class="box-border bg-white border border-gray-200 border-solid rounded-b">
|
||||||
class="
|
|
||||||
box-border
|
|
||||||
bg-white
|
|
||||||
border border-gray-200 border-solid
|
|
||||||
rounded-b
|
|
||||||
dark:shadow-glass dark:border dark:border-white/10 dark:bg-gray-800/70
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<td colspan="5" class="p-0 text-left align-top">
|
<td colspan="5" class="p-0 text-left align-top">
|
||||||
<table class="w-full">
|
<table class="w-full">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
@ -138,7 +130,7 @@
|
|||||||
<div class="flex items-center justify-center w-6 h-10 mx-2">
|
<div class="flex items-center justify-center w-6 h-10 mx-2">
|
||||||
<BaseIcon
|
<BaseIcon
|
||||||
v-if="showRemoveButton"
|
v-if="showRemoveButton"
|
||||||
class="h-5 dark:text-red-400 cursor-pointer"
|
class="h-5 text-gray-700 cursor-pointer"
|
||||||
name="TrashIcon"
|
name="TrashIcon"
|
||||||
@click="store.removeItem(index)"
|
@click="store.removeItem(index)"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -1,113 +1,155 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="relative" >
|
<table class="text-center item-table min-w-full">
|
||||||
<BaseDarkHighlight class="z-[-1]" />
|
<colgroup>
|
||||||
<table class="text-center item-table min-w-full">
|
<col style="width: 40%; min-width: 280px" />
|
||||||
<colgroup>
|
<col style="width: 10%; min-width: 120px" />
|
||||||
<col style="width: 40%; min-width: 280px" />
|
<col style="width: 15%; min-width: 120px" />
|
||||||
<col style="width: 10%; min-width: 120px" />
|
<col
|
||||||
<col style="width: 15%; min-width: 120px" />
|
v-if="store[storeProp].discount_per_item === 'YES'"
|
||||||
<col
|
style="width: 15%; min-width: 160px"
|
||||||
v-if="store[storeProp].discount_per_item === 'YES'"
|
/>
|
||||||
style="width: 15%; min-width: 160px"
|
<col style="width: 15%; min-width: 120px" />
|
||||||
/>
|
</colgroup>
|
||||||
<col style="width: 15%; min-width: 120px" />
|
<thead class="bg-white border border-gray-200 border-solid">
|
||||||
</colgroup>
|
<tr>
|
||||||
<thead
|
<th
|
||||||
class="
|
class="
|
||||||
bg-white
|
px-5
|
||||||
border border-gray-200 border-solid
|
py-3
|
||||||
dark:shadow-glass dark:border dark:border-white/10 dark:bg-gray-800/70
|
text-sm
|
||||||
|
not-italic
|
||||||
|
font-medium
|
||||||
|
leading-5
|
||||||
|
text-left text-gray-700
|
||||||
|
border-t border-b border-gray-200 border-solid
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<tr>
|
<BaseContentPlaceholders v-if="isLoading">
|
||||||
<th class="text-left" :class="theadClass">
|
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
||||||
<BaseContentPlaceholders v-if="isLoading">
|
</BaseContentPlaceholders>
|
||||||
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
<span v-else class="pl-7">
|
||||||
</BaseContentPlaceholders>
|
{{ $tc('items.item', 2) }}
|
||||||
<span v-else class="pl-7">
|
</span>
|
||||||
{{ $tc('items.item', 2) }}
|
</th>
|
||||||
</span>
|
<th
|
||||||
</th>
|
class="
|
||||||
<th class="text-right" :class="theadClass">
|
px-5
|
||||||
<BaseContentPlaceholders v-if="isLoading">
|
py-3
|
||||||
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
text-sm
|
||||||
</BaseContentPlaceholders>
|
not-italic
|
||||||
<span v-else>
|
font-medium
|
||||||
{{ $t('invoices.item.quantity') }}
|
leading-5
|
||||||
</span>
|
text-right text-gray-700
|
||||||
</th>
|
border-t border-b border-gray-200 border-solid
|
||||||
<th class="text-left" :class="theadClass">
|
"
|
||||||
<BaseContentPlaceholders v-if="isLoading">
|
>
|
||||||
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
<BaseContentPlaceholders v-if="isLoading">
|
||||||
</BaseContentPlaceholders>
|
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
||||||
<span v-else>
|
</BaseContentPlaceholders>
|
||||||
{{ $t('invoices.item.price') }}
|
<span v-else>
|
||||||
</span>
|
{{ $t('invoices.item.quantity') }}
|
||||||
</th>
|
</span>
|
||||||
<th
|
</th>
|
||||||
v-if="store[storeProp].discount_per_item_enabled"
|
<th
|
||||||
class="text-left"
|
class="
|
||||||
:class="theadClass"
|
px-5
|
||||||
>
|
py-3
|
||||||
<BaseContentPlaceholders v-if="isLoading">
|
text-sm
|
||||||
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
not-italic
|
||||||
</BaseContentPlaceholders>
|
font-medium
|
||||||
<span v-else>
|
leading-5
|
||||||
{{ $t('invoices.item.discount') }}
|
text-left text-gray-700
|
||||||
</span>
|
border-t border-b border-gray-200 border-solid
|
||||||
</th>
|
"
|
||||||
<th class="text-right" :class="theadClass">
|
>
|
||||||
<BaseContentPlaceholders v-if="isLoading">
|
<BaseContentPlaceholders v-if="isLoading">
|
||||||
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
||||||
</BaseContentPlaceholders>
|
</BaseContentPlaceholders>
|
||||||
<span v-else class="pr-10 column-heading">
|
<span v-else>
|
||||||
{{ $t('invoices.item.amount') }}
|
{{ $t('invoices.item.price') }}
|
||||||
</span>
|
</span>
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
<th
|
||||||
</thead>
|
v-if="store[storeProp].discount_per_item === 'YES'"
|
||||||
<draggable
|
class="
|
||||||
v-model="store[storeProp].items"
|
px-5
|
||||||
item-key="id"
|
py-3
|
||||||
tag="tbody"
|
text-sm
|
||||||
handle=".handle"
|
not-italic
|
||||||
>
|
font-medium
|
||||||
<template #item="{ element, index }">
|
leading-5
|
||||||
<Item
|
text-left text-gray-700
|
||||||
:key="element.id"
|
border-t border-b border-gray-200 border-solid
|
||||||
:index="index"
|
"
|
||||||
:item-data="element"
|
>
|
||||||
:loading="isLoading"
|
<BaseContentPlaceholders v-if="isLoading">
|
||||||
:currency="defaultCurrency"
|
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
||||||
:item-validation-scope="itemValidationScope"
|
</BaseContentPlaceholders>
|
||||||
:invoice-items="store[storeProp].items"
|
<span v-else>
|
||||||
:store="store"
|
{{ $t('invoices.item.discount') }}
|
||||||
:store-prop="storeProp"
|
</span>
|
||||||
/>
|
</th>
|
||||||
</template>
|
<th
|
||||||
</draggable>
|
class="
|
||||||
</table>
|
px-5
|
||||||
|
py-3
|
||||||
<div
|
text-sm
|
||||||
class="
|
not-italic
|
||||||
flex
|
font-medium
|
||||||
items-center
|
leading-5
|
||||||
justify-center
|
text-right text-gray-700
|
||||||
w-full
|
border-t border-b border-gray-200 border-solid
|
||||||
px-6
|
"
|
||||||
py-3
|
>
|
||||||
text-base
|
<BaseContentPlaceholders v-if="isLoading">
|
||||||
border border-t-0 border-gray-200 border-solid
|
<BaseContentPlaceholdersText :lines="1" class="w-16 h-5" />
|
||||||
cursor-pointer
|
</BaseContentPlaceholders>
|
||||||
text-primary-400
|
<span v-else class="pr-10 column-heading">
|
||||||
hover:bg-primary-100
|
{{ $t('invoices.item.amount') }}
|
||||||
dark:bg-gray-900/50 dark:border-white/10 dark:hover:bg-gray-900/80
|
</span>
|
||||||
"
|
</th>
|
||||||
@click="store.addItem"
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<draggable
|
||||||
|
v-model="store[storeProp].items"
|
||||||
|
item-key="id"
|
||||||
|
tag="tbody"
|
||||||
|
handle=".handle"
|
||||||
>
|
>
|
||||||
<BaseIcon name="PlusCircleIcon" class="mr-2" />
|
<template #item="{ element, index }">
|
||||||
{{ $t('general.add_new_item') }}
|
<Item
|
||||||
</div>
|
:key="element.id"
|
||||||
|
:index="index"
|
||||||
|
:item-data="element"
|
||||||
|
:loading="isLoading"
|
||||||
|
:currency="defaultCurrency"
|
||||||
|
:item-validation-scope="itemValidationScope"
|
||||||
|
:invoice-items="store[storeProp].items"
|
||||||
|
:store="store"
|
||||||
|
:store-prop="storeProp"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</draggable>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div
|
||||||
|
class="
|
||||||
|
flex
|
||||||
|
items-center
|
||||||
|
justify-center
|
||||||
|
w-full
|
||||||
|
px-6
|
||||||
|
py-3
|
||||||
|
text-base
|
||||||
|
border border-t-0 border-gray-200 border-solid
|
||||||
|
cursor-pointer
|
||||||
|
text-primary-400
|
||||||
|
hover:bg-primary-100
|
||||||
|
"
|
||||||
|
@click="store.addItem"
|
||||||
|
>
|
||||||
|
<BaseIcon name="PlusCircleIcon" class="mr-2" />
|
||||||
|
{{ $t('general.add_new_item') }}
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -138,11 +180,6 @@ const props = defineProps({
|
|||||||
type: String,
|
type: String,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
theadClass: {
|
|
||||||
type: String,
|
|
||||||
default: `px-5 py-3 text-sm not-italic font-medium leading-5
|
|
||||||
text-gray-700 border-t border-b border-gray-200 border-solid dark:text-white dark:border-white/10`
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const companyStore = useCompanyStore()
|
const companyStore = useCompanyStore()
|
||||||
|
|||||||
@ -6,7 +6,6 @@
|
|||||||
mt-6
|
mt-6
|
||||||
bg-white
|
bg-white
|
||||||
border border-gray-200 border-solid
|
border border-gray-200 border-solid
|
||||||
dark:bg-gray-800/50 dark:border-white/10
|
|
||||||
rounded
|
rounded
|
||||||
md:min-w-[390px]
|
md:min-w-[390px]
|
||||||
min-w-[300px]
|
min-w-[300px]
|
||||||
@ -193,7 +192,6 @@
|
|||||||
pt-2
|
pt-2
|
||||||
mt-5
|
mt-5
|
||||||
border-t border-gray-200 border-solid
|
border-t border-gray-200 border-solid
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<BaseContentPlaceholders v-if="isLoading">
|
<BaseContentPlaceholders v-if="isLoading">
|
||||||
@ -201,7 +199,7 @@
|
|||||||
</BaseContentPlaceholders>
|
</BaseContentPlaceholders>
|
||||||
<label
|
<label
|
||||||
v-else
|
v-else
|
||||||
class="m-0 text-sm font-semibold leading-5 text-gray-400 uppercase dark:text-gray-400"
|
class="m-0 text-sm font-semibold leading-5 text-gray-400 uppercase"
|
||||||
>{{ $t('estimates.total') }} {{ $t('estimates.amount') }}:</label
|
>{{ $t('estimates.total') }} {{ $t('estimates.amount') }}:</label
|
||||||
>
|
>
|
||||||
|
|
||||||
|
|||||||
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
<BaseIcon
|
<BaseIcon
|
||||||
name="TrashIcon"
|
name="TrashIcon"
|
||||||
class="h-5 ml-2 cursor-pointer dark:text-red-400"
|
class="h-5 ml-2 cursor-pointer"
|
||||||
@click="$emit('remove', tax.id)"
|
@click="$emit('remove', tax.id)"
|
||||||
/>
|
/>
|
||||||
</label>
|
</label>
|
||||||
|
|||||||
@ -44,7 +44,7 @@
|
|||||||
>
|
>
|
||||||
<!-- Tax Search Input -->
|
<!-- Tax Search Input -->
|
||||||
|
|
||||||
<div class="relative bg-white dark:bg-gray-800">
|
<div class="relative bg-white">
|
||||||
<div class="relative p-4">
|
<div class="relative p-4">
|
||||||
<BaseInput
|
<BaseInput
|
||||||
v-model="textSearch"
|
v-model="textSearch"
|
||||||
@ -65,14 +65,13 @@
|
|||||||
list
|
list
|
||||||
max-h-36
|
max-h-36
|
||||||
border-t border-gray-200
|
border-t border-gray-200
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
v-for="(taxType, index) in filteredTaxType"
|
v-for="(taxType, index) in filteredTaxType"
|
||||||
:key="index"
|
:key="index"
|
||||||
:class="{
|
:class="{
|
||||||
'bg-gray-100 cursor-not-allowed opacity-50 pointer-events-none dark:bg-gray-900':
|
'bg-gray-100 cursor-not-allowed opacity-50 pointer-events-none':
|
||||||
taxes.find((val) => {
|
taxes.find((val) => {
|
||||||
return val.tax_type_id === taxType.id
|
return val.tax_type_id === taxType.id
|
||||||
}),
|
}),
|
||||||
@ -85,7 +84,6 @@
|
|||||||
cursor-pointer
|
cursor-pointer
|
||||||
hover:bg-gray-100 hover:cursor-pointer
|
hover:bg-gray-100 hover:cursor-pointer
|
||||||
last:border-b-0
|
last:border-b-0
|
||||||
dark:border-gray-600 dark:hover:bg-gray-700/20
|
|
||||||
"
|
"
|
||||||
@click="selectTaxType(taxType, close)"
|
@click="selectTaxType(taxType, close)"
|
||||||
>
|
>
|
||||||
@ -142,10 +140,6 @@
|
|||||||
bg-gray-200
|
bg-gray-200
|
||||||
border-none
|
border-none
|
||||||
outline-none
|
outline-none
|
||||||
dark:bg-gray-600/70
|
|
||||||
dark:backdrop-blur-xl
|
|
||||||
dark:shadow-glass
|
|
||||||
dark:hover:bg-gray-600/80
|
|
||||||
"
|
"
|
||||||
@click="openTaxTypeModal"
|
@click="openTaxTypeModal"
|
||||||
>
|
>
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="grid h-screen grid-cols-12 overflow-y-hidden bg-gray-100 dark:bg-gray-900">
|
<div class="grid h-screen grid-cols-12 overflow-y-hidden bg-gray-100">
|
||||||
<NotificationRoot />
|
<NotificationRoot />
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
@ -32,7 +32,7 @@
|
|||||||
<div class="mt-4 mb-4 text-sm">
|
<div class="mt-4 mb-4 text-sm">
|
||||||
<router-link
|
<router-link
|
||||||
to="/login"
|
to="/login"
|
||||||
class="text-sm text-primary-400 hover:text-gray-700 dark:hover:text-primary-500"
|
class="text-sm text-primary-400 hover:text-gray-700"
|
||||||
>
|
>
|
||||||
{{ $t('general.back_to_login') }}
|
{{ $t('general.back_to_login') }}
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|||||||
@ -49,7 +49,7 @@
|
|||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<router-link
|
<router-link
|
||||||
to="forgot-password"
|
to="forgot-password"
|
||||||
class="text-sm text-primary-400 hover:text-gray-700 dark:hover:text-primary-500"
|
class="text-sm text-primary-400 hover:text-gray-700"
|
||||||
>
|
>
|
||||||
{{ $t('login.forgot_password') }}
|
{{ $t('login.forgot_password') }}
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|||||||
@ -50,7 +50,6 @@
|
|||||||
xl:ml-64
|
xl:ml-64
|
||||||
w-88
|
w-88
|
||||||
xl:block
|
xl:block
|
||||||
dark:bg-gray-800
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
@ -63,7 +62,6 @@
|
|||||||
pb-2
|
pb-2
|
||||||
border border-gray-200 border-solid
|
border border-gray-200 border-solid
|
||||||
height-full
|
height-full
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
@ -98,10 +96,9 @@
|
|||||||
px-4
|
px-4
|
||||||
py-1
|
py-1
|
||||||
pb-2
|
pb-2
|
||||||
mb-2
|
mb-1 mb-2
|
||||||
text-sm
|
text-sm
|
||||||
border-b border-gray-200 border-solid
|
border-b border-gray-200 border-solid
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ $t('general.sort_by') }}
|
{{ $t('general.sort_by') }}
|
||||||
@ -164,7 +161,6 @@
|
|||||||
overflow-y-scroll
|
overflow-y-scroll
|
||||||
border-l border-gray-200 border-solid
|
border-l border-gray-200 border-solid
|
||||||
base-scroll
|
base-scroll
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div v-for="(estimate, index) in estimateList" :key="index">
|
<div v-for="(estimate, index) in estimateList" :key="index">
|
||||||
@ -173,9 +169,9 @@
|
|||||||
:id="'estimate-' + estimate.id"
|
:id="'estimate-' + estimate.id"
|
||||||
:to="`/admin/estimates/${estimate.id}/view`"
|
:to="`/admin/estimates/${estimate.id}/view`"
|
||||||
:class="[
|
:class="[
|
||||||
'flex justify-between side-estimate p-4 cursor-pointer hover:bg-gray-100 items-center border-l-4 border-transparent dark:hover:bg-gray-700',
|
'flex justify-between side-estimate p-4 cursor-pointer hover:bg-gray-100 items-center border-l-4 border-transparent',
|
||||||
{
|
{
|
||||||
'bg-gray-100 border-l-4 border-primary-500 border-solid dark:border-primary-400 dark:bg-gray-700':
|
'bg-gray-100 border-l-4 border-primary-500 border-solid':
|
||||||
hasActiveUrl(estimate.id),
|
hasActiveUrl(estimate.id),
|
||||||
},
|
},
|
||||||
]"
|
]"
|
||||||
@ -195,7 +191,6 @@
|
|||||||
text-black
|
text-black
|
||||||
capitalize
|
capitalize
|
||||||
truncate
|
truncate
|
||||||
dark:text-white
|
|
||||||
"
|
"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
@ -208,7 +203,6 @@
|
|||||||
font-medium
|
font-medium
|
||||||
leading-5
|
leading-5
|
||||||
text-gray-600
|
text-gray-600
|
||||||
dark:text-gray-400
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ estimate.estimate_number }}
|
{{ estimate.estimate_number }}
|
||||||
@ -234,7 +228,6 @@
|
|||||||
font-semibold
|
font-semibold
|
||||||
leading-8
|
leading-8
|
||||||
text-right text-gray-900
|
text-right text-gray-900
|
||||||
dark:text-white
|
|
||||||
"
|
"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
@ -246,7 +239,6 @@
|
|||||||
leading-5
|
leading-5
|
||||||
text-right text-gray-600
|
text-right text-gray-600
|
||||||
est-date
|
est-date
|
||||||
dark:text-gray-400
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ estimate.formatted_estimate_date }}
|
{{ estimate.formatted_estimate_date }}
|
||||||
@ -259,7 +251,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<p
|
<p
|
||||||
v-if="!estimateList?.length && !isLoading"
|
v-if="!estimateList?.length && !isLoading"
|
||||||
class="flex justify-center px-4 mt-5 text-sm text-gray-600 dark:text-gray-300"
|
class="flex justify-center px-4 mt-5 text-sm text-gray-600"
|
||||||
>
|
>
|
||||||
{{ $t('estimates.no_matching_estimates') }}
|
{{ $t('estimates.no_matching_estimates') }}
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@ -299,7 +299,6 @@ onSearched = debounce(onSearched, 500)
|
|||||||
xl:ml-64
|
xl:ml-64
|
||||||
w-88
|
w-88
|
||||||
xl:block
|
xl:block
|
||||||
dark:bg-gray-800
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
@ -312,7 +311,6 @@ onSearched = debounce(onSearched, 500)
|
|||||||
pb-2
|
pb-2
|
||||||
border border-gray-200 border-solid
|
border border-gray-200 border-solid
|
||||||
height-full
|
height-full
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
@ -341,10 +339,9 @@ onSearched = debounce(onSearched, 500)
|
|||||||
px-2
|
px-2
|
||||||
py-1
|
py-1
|
||||||
pb-2
|
pb-2
|
||||||
mb-2
|
mb-1 mb-2
|
||||||
text-sm
|
text-sm
|
||||||
border-b border-gray-200 border-solid
|
border-b border-gray-200 border-solid
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ $t('general.sort_by') }}
|
{{ $t('general.sort_by') }}
|
||||||
@ -407,7 +404,6 @@ onSearched = debounce(onSearched, 500)
|
|||||||
overflow-y-scroll
|
overflow-y-scroll
|
||||||
border-l border-gray-200 border-solid
|
border-l border-gray-200 border-solid
|
||||||
base-scroll
|
base-scroll
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div v-for="(invoice, index) in invoiceList" :key="index">
|
<div v-for="(invoice, index) in invoiceList" :key="index">
|
||||||
@ -416,9 +412,9 @@ onSearched = debounce(onSearched, 500)
|
|||||||
:id="'invoice-' + invoice.id"
|
:id="'invoice-' + invoice.id"
|
||||||
:to="`/admin/invoices/${invoice.id}/view`"
|
:to="`/admin/invoices/${invoice.id}/view`"
|
||||||
:class="[
|
:class="[
|
||||||
'flex justify-between side-invoice p-4 cursor-pointer hover:bg-gray-100 items-center border-l-4 border-transparent dark:hover:bg-gray-700',
|
'flex justify-between side-invoice p-4 cursor-pointer hover:bg-gray-100 items-center border-l-4 border-transparent',
|
||||||
{
|
{
|
||||||
'bg-gray-100 border-l-4 border-primary-500 border-solid dark:bg-gray-700':
|
'bg-gray-100 border-l-4 border-primary-500 border-solid':
|
||||||
hasActiveUrl(invoice.id),
|
hasActiveUrl(invoice.id),
|
||||||
},
|
},
|
||||||
]"
|
]"
|
||||||
@ -438,7 +434,6 @@ onSearched = debounce(onSearched, 500)
|
|||||||
text-black
|
text-black
|
||||||
capitalize
|
capitalize
|
||||||
truncate
|
truncate
|
||||||
dark:text-white
|
|
||||||
"
|
"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
@ -451,17 +446,16 @@ onSearched = debounce(onSearched, 500)
|
|||||||
font-medium
|
font-medium
|
||||||
leading-5
|
leading-5
|
||||||
text-gray-600
|
text-gray-600
|
||||||
dark:text-gray-400
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ invoice.invoice_number }}
|
{{ invoice.invoice_number }}
|
||||||
</div>
|
</div>
|
||||||
<BaseInvoiceStatusBadge
|
<BaseEstimateStatusBadge
|
||||||
:status="invoice.status"
|
:status="invoice.status"
|
||||||
class="px-1 text-xs"
|
class="px-1 text-xs"
|
||||||
>
|
>
|
||||||
{{ invoice.status }}
|
{{ invoice.status }}
|
||||||
</BaseInvoiceStatusBadge>
|
</BaseEstimateStatusBadge>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex-1 whitespace-nowrap right">
|
<div class="flex-1 whitespace-nowrap right">
|
||||||
@ -474,7 +468,6 @@ onSearched = debounce(onSearched, 500)
|
|||||||
leading-8
|
leading-8
|
||||||
text-right text-gray-900
|
text-right text-gray-900
|
||||||
block
|
block
|
||||||
dark:text-white
|
|
||||||
"
|
"
|
||||||
:amount="invoice.total"
|
:amount="invoice.total"
|
||||||
:currency="invoice.customer.currency"
|
:currency="invoice.customer.currency"
|
||||||
@ -487,7 +480,6 @@ onSearched = debounce(onSearched, 500)
|
|||||||
leading-5
|
leading-5
|
||||||
text-right text-gray-600
|
text-right text-gray-600
|
||||||
est-date
|
est-date
|
||||||
dark:text-gray-400
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ invoice.formatted_invoice_date }}
|
{{ invoice.formatted_invoice_date }}
|
||||||
@ -500,7 +492,7 @@ onSearched = debounce(onSearched, 500)
|
|||||||
</div>
|
</div>
|
||||||
<p
|
<p
|
||||||
v-if="!invoiceList?.length && !isLoading"
|
v-if="!invoiceList?.length && !isLoading"
|
||||||
class="flex justify-center px-4 mt-5 text-sm text-gray-600 dark:text-gray-300"
|
class="flex justify-center px-4 mt-5 text-sm text-gray-600"
|
||||||
>
|
>
|
||||||
{{ $t('invoices.no_matching_invoices') }}
|
{{ $t('invoices.no_matching_invoices') }}
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@ -35,7 +35,6 @@
|
|||||||
xl:ml-64
|
xl:ml-64
|
||||||
w-88
|
w-88
|
||||||
xl:block
|
xl:block
|
||||||
dark:bg-gray-800
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
@ -47,7 +46,6 @@
|
|||||||
pt-8
|
pt-8
|
||||||
pb-6
|
pb-6
|
||||||
border border-gray-200 border-solid
|
border border-gray-200 border-solid
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<BaseInput
|
<BaseInput
|
||||||
@ -79,7 +77,6 @@
|
|||||||
mb-2
|
mb-2
|
||||||
text-sm
|
text-sm
|
||||||
border-b border-gray-200 border-solid
|
border-b border-gray-200 border-solid
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ $t('general.sort_by') }}
|
{{ $t('general.sort_by') }}
|
||||||
@ -142,7 +139,7 @@
|
|||||||
|
|
||||||
<div
|
<div
|
||||||
ref="paymentListSection"
|
ref="paymentListSection"
|
||||||
class="h-full overflow-y-scroll border-l border-gray-200 border-solid dark:border-gray-600"
|
class="h-full overflow-y-scroll border-l border-gray-200 border-solid"
|
||||||
>
|
>
|
||||||
<div v-for="(payment, index) in paymentList" :key="index">
|
<div v-for="(payment, index) in paymentList" :key="index">
|
||||||
<router-link
|
<router-link
|
||||||
@ -150,9 +147,9 @@
|
|||||||
:id="'payment-' + payment.id"
|
:id="'payment-' + payment.id"
|
||||||
:to="`/admin/payments/${payment.id}/view`"
|
:to="`/admin/payments/${payment.id}/view`"
|
||||||
:class="[
|
:class="[
|
||||||
'flex justify-between p-4 items-center cursor-pointer hover:bg-gray-100 border-l-4 border-transparent dark:hover:bg-gray-700',
|
'flex justify-between p-4 items-center cursor-pointer hover:bg-gray-100 border-l-4 border-transparent',
|
||||||
{
|
{
|
||||||
'bg-gray-100 border-l-4 border-primary-500 border-solid dark:bg-gray-700':
|
'bg-gray-100 border-l-4 border-primary-500 border-solid':
|
||||||
hasActiveUrl(payment.id),
|
hasActiveUrl(payment.id),
|
||||||
},
|
},
|
||||||
]"
|
]"
|
||||||
@ -172,7 +169,6 @@
|
|||||||
text-black
|
text-black
|
||||||
capitalize
|
capitalize
|
||||||
truncate
|
truncate
|
||||||
dark:text-white
|
|
||||||
"
|
"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
@ -185,7 +181,6 @@
|
|||||||
leading-5
|
leading-5
|
||||||
text-gray-500
|
text-gray-500
|
||||||
capitalize
|
capitalize
|
||||||
dark:text-gray-400
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ payment?.payment_number }}
|
{{ payment?.payment_number }}
|
||||||
@ -216,13 +211,12 @@
|
|||||||
font-semibold
|
font-semibold
|
||||||
leading-8
|
leading-8
|
||||||
text-right text-gray-900
|
text-right text-gray-900
|
||||||
dark:text-white
|
|
||||||
"
|
"
|
||||||
:amount="payment?.amount"
|
:amount="payment?.amount"
|
||||||
:currency="payment.customer?.currency"
|
:currency="payment.customer?.currency"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="text-sm text-right text-gray-500 non-italic dark:text-gray-400">
|
<div class="text-sm text-right text-gray-500 non-italic">
|
||||||
{{ payment.formatted_payment_date }}
|
{{ payment.formatted_payment_date }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -233,7 +227,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<p
|
<p
|
||||||
v-if="!paymentList?.length && !isLoading"
|
v-if="!paymentList?.length && !isLoading"
|
||||||
class="flex justify-center px-4 mt-5 text-sm text-gray-600 dark:text-gray-300"
|
class="flex justify-center px-4 mt-5 text-sm text-gray-600"
|
||||||
>
|
>
|
||||||
{{ $t('payments.no_matching_payments') }}
|
{{ $t('payments.no_matching_payments') }}
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@ -152,7 +152,6 @@ onSearched = debounce(onSearched, 500)
|
|||||||
xl:ml-64
|
xl:ml-64
|
||||||
w-88
|
w-88
|
||||||
xl:block
|
xl:block
|
||||||
dark:bg-gray-800
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
@ -165,7 +164,6 @@ onSearched = debounce(onSearched, 500)
|
|||||||
pb-2
|
pb-2
|
||||||
border border-gray-200 border-solid
|
border border-gray-200 border-solid
|
||||||
height-full
|
height-full
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
@ -194,10 +192,9 @@ onSearched = debounce(onSearched, 500)
|
|||||||
px-2
|
px-2
|
||||||
py-1
|
py-1
|
||||||
pb-2
|
pb-2
|
||||||
mb-2
|
mb-1 mb-2
|
||||||
text-sm
|
text-sm
|
||||||
border-b border-gray-200 border-solid
|
border-b border-gray-200 border-solid
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ $t('general.sort_by') }}
|
{{ $t('general.sort_by') }}
|
||||||
@ -246,7 +243,6 @@ onSearched = debounce(onSearched, 500)
|
|||||||
overflow-y-scroll
|
overflow-y-scroll
|
||||||
border-l border-gray-200 border-solid
|
border-l border-gray-200 border-solid
|
||||||
base-scroll
|
base-scroll
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div v-for="(invoice, index) in invoiceList" :key="index">
|
<div v-for="(invoice, index) in invoiceList" :key="index">
|
||||||
@ -255,9 +251,9 @@ onSearched = debounce(onSearched, 500)
|
|||||||
:id="'recurring-invoice-' + invoice.id"
|
:id="'recurring-invoice-' + invoice.id"
|
||||||
:to="`/admin/recurring-invoices/${invoice.id}/view`"
|
:to="`/admin/recurring-invoices/${invoice.id}/view`"
|
||||||
:class="[
|
:class="[
|
||||||
'flex justify-between side-invoice p-4 cursor-pointer hover:bg-gray-100 items-center border-l-4 border-transparent dark:hover:bg-gray-700',
|
'flex justify-between side-invoice p-4 cursor-pointer hover:bg-gray-100 items-center border-l-4 border-transparent',
|
||||||
{
|
{
|
||||||
'bg-gray-100 border-l-4 border-primary-500 border-solid dark:bg-gray-700':
|
'bg-gray-100 border-l-4 border-primary-500 border-solid':
|
||||||
hasActiveUrl(invoice.id),
|
hasActiveUrl(invoice.id),
|
||||||
},
|
},
|
||||||
]"
|
]"
|
||||||
@ -277,7 +273,6 @@ onSearched = debounce(onSearched, 500)
|
|||||||
text-black
|
text-black
|
||||||
capitalize
|
capitalize
|
||||||
truncate
|
truncate
|
||||||
dark:text-white
|
|
||||||
"
|
"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
@ -290,7 +285,6 @@ onSearched = debounce(onSearched, 500)
|
|||||||
font-medium
|
font-medium
|
||||||
leading-5
|
leading-5
|
||||||
text-gray-600
|
text-gray-600
|
||||||
dark:text-gray-400
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ invoice.invoice_number }}
|
{{ invoice.invoice_number }}
|
||||||
@ -313,7 +307,6 @@ onSearched = debounce(onSearched, 500)
|
|||||||
font-semibold
|
font-semibold
|
||||||
leading-8
|
leading-8
|
||||||
text-right text-gray-900
|
text-right text-gray-900
|
||||||
dark:text-white
|
|
||||||
"
|
"
|
||||||
:amount="invoice.total"
|
:amount="invoice.total"
|
||||||
:currency="invoice.customer.currency"
|
:currency="invoice.customer.currency"
|
||||||
@ -327,7 +320,6 @@ onSearched = debounce(onSearched, 500)
|
|||||||
leading-5
|
leading-5
|
||||||
text-right text-gray-600
|
text-right text-gray-600
|
||||||
est-date
|
est-date
|
||||||
dark:text-gray-400
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ invoice.formatted_starts_at }}
|
{{ invoice.formatted_starts_at }}
|
||||||
@ -340,7 +332,7 @@ onSearched = debounce(onSearched, 500)
|
|||||||
</div>
|
</div>
|
||||||
<p
|
<p
|
||||||
v-if="!invoiceList?.length && !isLoading"
|
v-if="!invoiceList?.length && !isLoading"
|
||||||
class="flex justify-center px-4 mt-5 text-sm text-gray-600 dark:text-gray-300"
|
class="flex justify-center px-4 mt-5 text-sm text-gray-600"
|
||||||
>
|
>
|
||||||
{{ $t('invoices.no_matching_invoices') }}
|
{{ $t('invoices.no_matching_invoices') }}
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@ -1,50 +0,0 @@
|
|||||||
<template>
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="
|
|
||||||
flex
|
|
||||||
h-8
|
|
||||||
w-8
|
|
||||||
items-center
|
|
||||||
justify-center
|
|
||||||
rounded-md
|
|
||||||
transition
|
|
||||||
hover:bg-zinc-900/5
|
|
||||||
dark:hover:bg-white/5
|
|
||||||
"
|
|
||||||
@click="onChange"
|
|
||||||
>
|
|
||||||
<BaseIcon v-if="!globalStore.isDarkModeOn" class="h-5 w-5 text-black" name="SunIcon" />
|
|
||||||
<BaseIcon v-else class="h-5 w-5 text-white" name="MoonIcon" />
|
|
||||||
</button>
|
|
||||||
</template>
|
|
||||||
<script setup>
|
|
||||||
import { computed } from 'vue'
|
|
||||||
import { useGlobalStore } from '@/scripts/customer/stores/global'
|
|
||||||
|
|
||||||
const globalStore = useGlobalStore()
|
|
||||||
|
|
||||||
const enabled = computed(
|
|
||||||
()=>
|
|
||||||
localStorage.getItem('theme') === 'dark' ||
|
|
||||||
document.documentElement.classList.contains('dark')
|
|
||||||
)
|
|
||||||
|
|
||||||
globalStore.isDarkModeOn = enabled.value
|
|
||||||
|
|
||||||
function onChange() {
|
|
||||||
globalStore.isDarkModeOn = !globalStore.isDarkModeOn
|
|
||||||
|
|
||||||
if (globalStore.isDarkModeOn) {
|
|
||||||
localStorage.theme = 'dark'
|
|
||||||
document.documentElement.classList.add('dark')
|
|
||||||
document.documentElement.style.setProperty('color-scheme', 'dark')
|
|
||||||
} else {
|
|
||||||
localStorage.theme = 'light'
|
|
||||||
document.documentElement.classList.remove('dark')
|
|
||||||
document.documentElement.style.setProperty('color-scheme', 'light')
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
@ -28,7 +28,6 @@
|
|||||||
:attributes="attrs"
|
:attributes="attrs"
|
||||||
:model-config="config"
|
:model-config="config"
|
||||||
:masks="masks"
|
:masks="masks"
|
||||||
:is-dark="isDarkModeOn"
|
|
||||||
:locale="global.locale"
|
:locale="global.locale"
|
||||||
>
|
>
|
||||||
<template
|
<template
|
||||||
@ -73,7 +72,7 @@
|
|||||||
|
|
||||||
<template v-if="showExtraOptions" #footer>
|
<template v-if="showExtraOptions" #footer>
|
||||||
<div
|
<div
|
||||||
class="bg-gray-100 dark:bg-gray-800 grid grid-cols-3 gap-2 p-2 border-t dark:border-gray-500 rounded-b-lg"
|
class="bg-gray-100 grid grid-cols-3 gap-2 p-2 border-t rounded-b-lg"
|
||||||
>
|
>
|
||||||
<button type="button" class="extra-button" @click="moveToDate(sourceDate)">
|
<button type="button" class="extra-button" @click="moveToDate(sourceDate)">
|
||||||
{{ global.t('date_picker.same_day') }}
|
{{ global.t('date_picker.same_day') }}
|
||||||
@ -147,7 +146,7 @@ const props = defineProps({
|
|||||||
defaultInputClass: {
|
defaultInputClass: {
|
||||||
type: String,
|
type: String,
|
||||||
default:
|
default:
|
||||||
'border-2 dark:bg-gray-700 dark:border-gray-600 dark:text-white font-base pl-8 py-2 outline-none focus:ring-primary-400 focus:outline-none focus:border-primary-400 block w-full sm:text-sm border-gray-200 rounded-md text-black',
|
'border-2 font-base pl-8 py-2 outline-none focus:ring-primary-400 focus:outline-none focus:border-primary-400 block w-full sm:text-sm border-gray-200 rounded-md text-black',
|
||||||
},
|
},
|
||||||
time24hr: {
|
time24hr: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
@ -164,7 +163,7 @@ const props = defineProps({
|
|||||||
sourceDate: {
|
sourceDate: {
|
||||||
type: [String, Date],
|
type: [String, Date],
|
||||||
default: () => new Date(),
|
default: () => new Date(),
|
||||||
},
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const emit = defineEmits(['update:modelValue'])
|
const emit = defineEmits(['update:modelValue'])
|
||||||
@ -176,9 +175,6 @@ const vCalendar = ref(null)
|
|||||||
const hasIconSlot = computed(() => {
|
const hasIconSlot = computed(() => {
|
||||||
return !!slots.icon
|
return !!slots.icon
|
||||||
})
|
})
|
||||||
const isDarkModeOn = computed(() =>
|
|
||||||
document.documentElement.classList.contains('dark')
|
|
||||||
)
|
|
||||||
|
|
||||||
const computedContainerClass = computed(() => {
|
const computedContainerClass = computed(() => {
|
||||||
let containerClass = `${props.containerClass} `
|
let containerClass = `${props.containerClass} `
|
||||||
|
|||||||
@ -29,12 +29,14 @@
|
|||||||
text-left
|
text-left
|
||||||
bg-white
|
bg-white
|
||||||
dark:bg-gray-700
|
dark:bg-gray-700
|
||||||
|
border border-gray-200
|
||||||
rounded-md
|
rounded-md
|
||||||
shadow-sm
|
shadow-sm
|
||||||
cursor-default
|
cursor-default
|
||||||
focus:outline-none
|
focus:outline-none
|
||||||
focus:ring-1
|
focus:ring-1
|
||||||
focus:ring-primary-400 focus:border-primary-400
|
focus:ring-primary-500
|
||||||
|
focus:border-primary-500
|
||||||
sm:text-sm
|
sm:text-sm
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
|
|||||||
@ -5,30 +5,27 @@
|
|||||||
viewBox="0 0 50 50"
|
viewBox="0 0 50 50"
|
||||||
fill="none"
|
fill="none"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
:class="colorClass"
|
||||||
>
|
>
|
||||||
<circle cx="25" cy="25" r="25" :class="bgColor" />
|
<circle cx="25" cy="25" r="25" fill="#EAF1FB" />
|
||||||
<path
|
<path
|
||||||
d="M17.8 17.8C17.1635 17.8 16.5531 18.0529 16.103 18.503C15.6529 18.9531 15.4 19.5635 15.4 20.2V21.4H34.6V20.2C34.6 19.5635 34.3472 18.9531 33.8971 18.503C33.447 18.0529 32.8365 17.8 32.2 17.8H17.8Z"
|
d="M17.8 17.8C17.1635 17.8 16.5531 18.0529 16.103 18.503C15.6529 18.9531 15.4 19.5635 15.4 20.2V21.4H34.6V20.2C34.6 19.5635 34.3472 18.9531 33.8971 18.503C33.447 18.0529 32.8365 17.8 32.2 17.8H17.8Z"
|
||||||
:class="color"
|
fill="currentColor"
|
||||||
/>
|
/>
|
||||||
<path
|
<path
|
||||||
fill-rule="evenodd"
|
fill-rule="evenodd"
|
||||||
clip-rule="evenodd"
|
clip-rule="evenodd"
|
||||||
d="M34.6 23.8H15.4V29.8C15.4 30.4366 15.6529 31.047 16.103 31.4971C16.5531 31.9472 17.1635 32.2 17.8 32.2H32.2C32.8365 32.2 33.447 31.9472 33.8971 31.4971C34.3472 31.047 34.6 30.4366 34.6 29.8V23.8ZM17.8 28.6C17.8 28.2818 17.9265 27.9766 18.1515 27.7515C18.3765 27.5265 18.6818 27.4 19 27.4H20.2C20.5183 27.4 20.8235 27.5265 21.0486 27.7515C21.2736 27.9766 21.4 28.2818 21.4 28.6C21.4 28.9183 21.2736 29.2235 21.0486 29.4486C20.8235 29.6736 20.5183 29.8 20.2 29.8H19C18.6818 29.8 18.3765 29.6736 18.1515 29.4486C17.9265 29.2235 17.8 28.9183 17.8 28.6ZM23.8 27.4C23.4818 27.4 23.1765 27.5265 22.9515 27.7515C22.7265 27.9766 22.6 28.2818 22.6 28.6C22.6 28.9183 22.7265 29.2235 22.9515 29.4486C23.1765 29.6736 23.4818 29.8 23.8 29.8H25C25.3183 29.8 25.6235 29.6736 25.8486 29.4486C26.0736 29.2235 26.2 28.9183 26.2 28.6C26.2 28.2818 26.0736 27.9766 25.8486 27.7515C25.6235 27.5265 25.3183 27.4 25 27.4H23.8Z"
|
d="M34.6 23.8H15.4V29.8C15.4 30.4366 15.6529 31.047 16.103 31.4971C16.5531 31.9472 17.1635 32.2 17.8 32.2H32.2C32.8365 32.2 33.447 31.9472 33.8971 31.4971C34.3472 31.047 34.6 30.4366 34.6 29.8V23.8ZM17.8 28.6C17.8 28.2818 17.9265 27.9766 18.1515 27.7515C18.3765 27.5265 18.6818 27.4 19 27.4H20.2C20.5183 27.4 20.8235 27.5265 21.0486 27.7515C21.2736 27.9766 21.4 28.2818 21.4 28.6C21.4 28.9183 21.2736 29.2235 21.0486 29.4486C20.8235 29.6736 20.5183 29.8 20.2 29.8H19C18.6818 29.8 18.3765 29.6736 18.1515 29.4486C17.9265 29.2235 17.8 28.9183 17.8 28.6ZM23.8 27.4C23.4818 27.4 23.1765 27.5265 22.9515 27.7515C22.7265 27.9766 22.6 28.2818 22.6 28.6C22.6 28.9183 22.7265 29.2235 22.9515 29.4486C23.1765 29.6736 23.4818 29.8 23.8 29.8H25C25.3183 29.8 25.6235 29.6736 25.8486 29.4486C26.0736 29.2235 26.2 28.9183 26.2 28.6C26.2 28.2818 26.0736 27.9766 25.8486 27.7515C25.6235 27.5265 25.3183 27.4 25 27.4H23.8Z"
|
||||||
:class="color"
|
fill="currentColor"
|
||||||
/>
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
color: {
|
colorClass: {
|
||||||
type: String,
|
|
||||||
default: 'fill-primary-500 dark:fill-white',
|
|
||||||
},
|
|
||||||
bgColor: {
|
|
||||||
type: String,
|
type: String,
|
||||||
default: 'fill-gray-100 dark:fill-primary-400',
|
default: 'text-primary-500',
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -3,7 +3,6 @@
|
|||||||
<path
|
<path
|
||||||
d="M690 4.08004C518 -9.91998 231 4.08004 -6 176.361L231 197.08L1170 219.08C1113.33 175.747 909.275 21.928 690 4.08004Z"
|
d="M690 4.08004C518 -9.91998 231 4.08004 -6 176.361L231 197.08L1170 219.08C1113.33 175.747 909.275 21.928 690 4.08004Z"
|
||||||
fill="white"
|
fill="white"
|
||||||
class="dark:fill-gray-900"
|
|
||||||
fill-opacity="0.1"
|
fill-opacity="0.1"
|
||||||
/>
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<!-- <SiteSidebar /> -->
|
<!-- <SiteSidebar /> -->
|
||||||
|
|
||||||
<main class="h-screen min-h-0 pb-16 mt-16 overflow-y-auto">
|
<main class="mt-16 pb-16 h-screen overflow-y-auto min-h-0">
|
||||||
<router-view />
|
<router-view />
|
||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,24 +1,31 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
class="flex flex-col justify-center h-full min-h-screen py-12 overflow-hidden bg-gray-100 sm:px-6 lg:px-8 dark:bg-gray-800/80 dark:text-white font-base "
|
class="
|
||||||
|
min-h-screen
|
||||||
|
bg-gray-200
|
||||||
|
flex flex-col
|
||||||
|
justify-center
|
||||||
|
py-12
|
||||||
|
sm:px-6
|
||||||
|
lg:px-8
|
||||||
|
"
|
||||||
>
|
>
|
||||||
<NotificationRoot />
|
<NotificationRoot />
|
||||||
|
|
||||||
<div class="px-4 sm:mx-auto sm:w-full sm:max-w-md sm:px-0">
|
<div class="sm:mx-auto sm:w-full sm:max-w-md px-4 sm:px-0">
|
||||||
<MainLogo
|
<MainLogo
|
||||||
v-if="!customerLogo"
|
v-if="!customerLogo"
|
||||||
class="block w-48 h-auto max-w-full mx-auto text-primary-400"
|
class="block w-48 h-auto max-w-full text-primary-400 mx-auto"
|
||||||
/>
|
/>
|
||||||
<img
|
<img
|
||||||
v-else
|
v-else
|
||||||
:src="customerLogo"
|
:src="customerLogo"
|
||||||
class="block w-48 h-auto max-w-full mx-auto text-primary-400"
|
class="block w-48 h-auto max-w-full text-primary-400 mx-auto"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="px-4 mt-8 sm:mx-auto sm:w-full sm:max-w-md sm:px-0">
|
<div class="mt-8 sm:mx-auto sm:w-full sm:max-w-md px-4 sm:px-0">
|
||||||
<div class="px-4 py-8 bg-white rounded-lg shadow sm:px-10 dark:from-gray-700/70 dark:to-gray-800/70 dark:bg-transparent dark:backdrop-blur-xl dark:shadow-glass dark:border dark:border-white/10">
|
<div class="bg-white py-8 px-4 shadow rounded-lg sm:px-10">
|
||||||
<BaseDarkHighlight/>
|
|
||||||
<router-view />
|
<router-view />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -2,9 +2,8 @@
|
|||||||
<Disclosure
|
<Disclosure
|
||||||
v-slot="{ open }"
|
v-slot="{ open }"
|
||||||
as="nav"
|
as="nav"
|
||||||
class="bg-white shadow-sm fixed top-0 left-0 z-20 w-full dark:bg-gray-800"
|
class="bg-white shadow-sm fixed top-0 left-0 z-20 w-full"
|
||||||
>
|
>
|
||||||
<BaseDarkHighlight />
|
|
||||||
<div class="mx-auto px-8">
|
<div class="mx-auto px-8">
|
||||||
<div class="flex justify-between h-16 w-full">
|
<div class="flex justify-between h-16 w-full">
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
@ -34,8 +33,8 @@
|
|||||||
:to="`/${globalStore.companySlug}${item.link}`"
|
:to="`/${globalStore.companySlug}${item.link}`"
|
||||||
:class="[
|
:class="[
|
||||||
hasActiveUrl(item.link)
|
hasActiveUrl(item.link)
|
||||||
? 'text-primary-600 border-primary-600 dark:border-primary-400 dark:text-primary-400'
|
? 'border-primary-500 text-primary-600'
|
||||||
: 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 dark:text-gray-200',
|
: 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300',
|
||||||
'inline-flex items-center px-1 pt-1 border-b-2 text-sm font-medium',
|
'inline-flex items-center px-1 pt-1 border-b-2 text-sm font-medium',
|
||||||
]"
|
]"
|
||||||
>
|
>
|
||||||
@ -44,8 +43,20 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="hidden sm:ml-6 sm:flex sm:items-center">
|
<div class="hidden sm:ml-6 sm:flex sm:items-center">
|
||||||
<!-- Dark mode Toggle -->
|
<button
|
||||||
<CustomerLightDarkButton/>
|
type="button"
|
||||||
|
class="
|
||||||
|
bg-white
|
||||||
|
p-1
|
||||||
|
rounded-full
|
||||||
|
text-gray-400
|
||||||
|
hover:text-gray-500
|
||||||
|
focus:outline-none
|
||||||
|
focus:ring-2
|
||||||
|
focus:ring-offset-2
|
||||||
|
focus:ring-primary-500
|
||||||
|
"
|
||||||
|
></button>
|
||||||
|
|
||||||
<!-- Profile dropdown -->
|
<!-- Profile dropdown -->
|
||||||
|
|
||||||
@ -74,7 +85,7 @@
|
|||||||
<router-link :to="{ name: 'customer.profile' }">
|
<router-link :to="{ name: 'customer.profile' }">
|
||||||
<BaseDropdownItem>
|
<BaseDropdownItem>
|
||||||
<CogIcon
|
<CogIcon
|
||||||
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500 dark:group-hover:text-gray-200"
|
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
/>
|
/>
|
||||||
{{ $t('navigation.settings') }}
|
{{ $t('navigation.settings') }}
|
||||||
@ -83,7 +94,7 @@
|
|||||||
|
|
||||||
<BaseDropdownItem @click="logout">
|
<BaseDropdownItem @click="logout">
|
||||||
<LogoutIcon
|
<LogoutIcon
|
||||||
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500 dark:group-hover:text-gray-200"
|
class="w-5 h-5 mr-3 text-gray-400 group-hover:text-gray-500"
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
/>
|
/>
|
||||||
{{ $t('navigation.logout') }}
|
{{ $t('navigation.logout') }}
|
||||||
@ -107,8 +118,6 @@
|
|||||||
focus:ring-2
|
focus:ring-2
|
||||||
focus:ring-offset-2
|
focus:ring-offset-2
|
||||||
focus:ring-primary-500
|
focus:ring-primary-500
|
||||||
dark:bg-gray-700
|
|
||||||
dark:focus:ring-offset-gray-900
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<span class="sr-only">Open main menu</span>
|
<span class="sr-only">Open main menu</span>
|
||||||
@ -127,31 +136,43 @@
|
|||||||
:to="`/${globalStore.companySlug}${item.link}`"
|
:to="`/${globalStore.companySlug}${item.link}`"
|
||||||
:class="[
|
:class="[
|
||||||
hasActiveUrl(item.link)
|
hasActiveUrl(item.link)
|
||||||
? 'bg-primary-50 border-primary-500 text-primary-700 dark:bg-gray-700 dark:text-primary-400'
|
? 'bg-primary-50 border-primary-500 text-primary-700'
|
||||||
: 'border-transparent text-gray-600 hover:bg-gray-50 hover:border-gray-300 hover:text-gray-800 dark:text-gray-200 dark:hover:bg-gray-700',
|
: 'border-transparent text-gray-600 hover:bg-gray-50 hover:border-gray-300 hover:text-gray-800',
|
||||||
'block pl-3 pr-4 py-2 border-l-4 text-base font-medium',
|
'block pl-3 pr-4 py-2 border-l-4 text-base font-medium',
|
||||||
]"
|
]"
|
||||||
:aria-current="item.current ? 'page' : undefined"
|
:aria-current="item.current ? 'page' : undefined"
|
||||||
>{{ item.title }}
|
>{{ item.title }}
|
||||||
</router-link>
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
<div class="pt-4 pb-3 border-t border-gray-200 dark:border-gray-500">
|
<div class="pt-4 pb-3 border-t border-gray-200">
|
||||||
<div class="flex items-center justify-between pr-5">
|
<div class="flex items-center px-4">
|
||||||
<div class="flex items-center px-4">
|
<div class="shrink-0">
|
||||||
<div class="shrink-0">
|
<img class="h-10 w-10 rounded-full" :src="previewAvatar" alt="" />
|
||||||
<img class="h-10 w-10 rounded-full" :src="previewAvatar" alt="" />
|
</div>
|
||||||
|
<div class="ml-3">
|
||||||
|
<div class="text-base font-medium text-gray-800">
|
||||||
|
{{ globalStore.currentUser.title }}
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-3">
|
<div class="text-sm font-medium text-gray-500">
|
||||||
<div class="text-base font-medium text-gray-800">
|
{{ globalStore.currentUser.email }}
|
||||||
{{ globalStore.currentUser.title }}
|
|
||||||
</div>
|
|
||||||
<div class="text-sm font-medium text-gray-500 dark:text-gray-200">
|
|
||||||
{{ globalStore.currentUser.email }}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Dark mode Toggle -->
|
<button
|
||||||
<CustomerLightDarkButton/>
|
type="button"
|
||||||
|
class="
|
||||||
|
ml-auto
|
||||||
|
bg-white
|
||||||
|
shrink-0
|
||||||
|
p-1
|
||||||
|
rounded-full
|
||||||
|
text-gray-400
|
||||||
|
hover:text-gray-500
|
||||||
|
focus:outline-none
|
||||||
|
focus:ring-2
|
||||||
|
focus:ring-offset-2
|
||||||
|
focus:ring-primary-500
|
||||||
|
"
|
||||||
|
></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-3 space-y-1">
|
<div class="mt-3 space-y-1">
|
||||||
<router-link
|
<router-link
|
||||||
@ -161,7 +182,7 @@
|
|||||||
:class="[
|
:class="[
|
||||||
hasActiveUrl(item.link)
|
hasActiveUrl(item.link)
|
||||||
? 'bg-primary-50 border-primary-500 text-primary-700'
|
? 'bg-primary-50 border-primary-500 text-primary-700'
|
||||||
: 'border-transparent text-gray-600 hover:bg-gray-50 hover:border-gray-300 hover:text-gray-800 dark:text-gray-200 dark:hover:bg-gray-700',
|
: 'border-transparent text-gray-600 hover:bg-gray-50 hover:border-gray-300 hover:text-gray-800',
|
||||||
'block pl-3 pr-4 py-2 border-l-4 text-base font-medium',
|
'block pl-3 pr-4 py-2 border-l-4 text-base font-medium',
|
||||||
]"
|
]"
|
||||||
>{{ item.title }}</router-link
|
>{{ item.title }}</router-link
|
||||||
@ -178,7 +199,6 @@ import { useRoute, useRouter } from 'vue-router'
|
|||||||
import { ref, watch, computed } from 'vue'
|
import { ref, watch, computed } from 'vue'
|
||||||
import { useGlobalStore } from '@/scripts/customer/stores/global'
|
import { useGlobalStore } from '@/scripts/customer/stores/global'
|
||||||
import MainLogo from '@/scripts/components/icons/MainLogo.vue'
|
import MainLogo from '@/scripts/components/icons/MainLogo.vue'
|
||||||
import CustomerLightDarkButton from '@/scripts/components/CustomerLightDarkButton.vue'
|
|
||||||
import {
|
import {
|
||||||
Disclosure,
|
Disclosure,
|
||||||
DisclosureButton,
|
DisclosureButton,
|
||||||
|
|||||||
@ -13,8 +13,7 @@ export const useGlobalStore = defineStore({
|
|||||||
currentUser: null,
|
currentUser: null,
|
||||||
companySlug: '',
|
companySlug: '',
|
||||||
mainMenu: null,
|
mainMenu: null,
|
||||||
enabledModules: [],
|
enabledModules: []
|
||||||
isDarkModeOn: false
|
|
||||||
}),
|
}),
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
|
|||||||
@ -31,7 +31,7 @@
|
|||||||
<div class="mt-4 mb-4 text-sm">
|
<div class="mt-4 mb-4 text-sm">
|
||||||
<router-link
|
<router-link
|
||||||
to="login"
|
to="login"
|
||||||
class="text-sm text-primary-400 hover:text-gray-700 dark:hover:text-primary-500"
|
class="text-sm text-primary-400 hover:text-gray-700"
|
||||||
>
|
>
|
||||||
{{ $t('general.back_to_login') }}
|
{{ $t('general.back_to_login') }}
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|||||||
@ -55,7 +55,7 @@
|
|||||||
<div class="flex items-center justify-between">
|
<div class="flex items-center justify-between">
|
||||||
<router-link
|
<router-link
|
||||||
:to="{ name: 'customer.forgot-password' }"
|
:to="{ name: 'customer.forgot-password' }"
|
||||||
class="text-sm text-primary-400 hover:text-gray-500 dark:hover:text-primary-500"
|
class="text-sm text-primary-600 hover:text-gray-500"
|
||||||
>
|
>
|
||||||
{{ $t('login.forgot_password') }}
|
{{ $t('login.forgot_password') }}
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|||||||
@ -12,24 +12,18 @@
|
|||||||
hover:bg-gray-50
|
hover:bg-gray-50
|
||||||
xl:p-4
|
xl:p-4
|
||||||
lg:col-span-2
|
lg:col-span-2
|
||||||
dark:backdrop-blur-xl
|
|
||||||
dark:shadow-glass
|
|
||||||
dark:border
|
|
||||||
dark:border-white/10
|
|
||||||
dark:bg-gray-800/70
|
|
||||||
"
|
"
|
||||||
:class="{ 'lg:!col-span-3': large }"
|
:class="{ 'lg:!col-span-3': large }"
|
||||||
:to="route"
|
:to="route"
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<span class="text-xl font-semibold leading-tight text-black xl:text-3xl dark:text-white">
|
<span class="text-xl font-semibold leading-tight text-black xl:text-3xl">
|
||||||
<slot />
|
<slot />
|
||||||
</span>
|
</span>
|
||||||
<span class="block mt-1 text-sm leading-tight text-gray-500 xl:text-lg dark:text-gray-300">
|
<span class="block mt-1 text-sm leading-tight text-gray-500 xl:text-lg">
|
||||||
{{ label }}
|
{{ label }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<BaseDarkHighlight class="!bg-highlight/[.17] !top-5" />
|
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<component :is="iconComponent" class="w-10 h-10 xl:w-12 xl:h-12" />
|
<component :is="iconComponent" class="w-10 h-10 xl:w-12 xl:h-12" />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<BaseContentPlaceholders
|
<BaseContentPlaceholders
|
||||||
:rounded="true"
|
:rounded="true"
|
||||||
class="relative flex justify-between w-full p-3 bg-white rounded shadow lg:col-span-3 xl:p-4 dark:bg-gray-800"
|
class="relative flex justify-between w-full p-3 bg-white rounded shadow lg:col-span-3 xl:p-4"
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<BaseContentPlaceholdersText
|
<BaseContentPlaceholdersText
|
||||||
|
|||||||
@ -12,7 +12,6 @@
|
|||||||
shadow
|
shadow
|
||||||
lg:col-span-2
|
lg:col-span-2
|
||||||
xl:p-4
|
xl:p-4
|
||||||
dark:bg-gray-800
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@ -119,11 +119,11 @@
|
|||||||
<template #cell-actions="{ row }">
|
<template #cell-actions="{ row }">
|
||||||
<BaseDropdown>
|
<BaseDropdown>
|
||||||
<template #activator>
|
<template #activator>
|
||||||
<BaseIcon name="DotsHorizontalIcon" class="h-5 text-gray-500 dark:text-gray-200" />
|
<BaseIcon name="DotsHorizontalIcon" class="h-5 text-gray-500" />
|
||||||
</template>
|
</template>
|
||||||
<router-link :to="`estimates/${row.data.id}/view`">
|
<router-link :to="`estimates/${row.data.id}/view`">
|
||||||
<BaseDropdownItem>
|
<BaseDropdownItem>
|
||||||
<BaseIcon name="EyeIcon" class="h-5 mr-3 text-gray-600 dark:text-gray-200" />
|
<BaseIcon name="EyeIcon" class="h-5 mr-3 text-gray-600" />
|
||||||
{{ $t('general.view') }}
|
{{ $t('general.view') }}
|
||||||
</BaseDropdownItem>
|
</BaseDropdownItem>
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|||||||
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
<!-- Sidebar -->
|
<!-- Sidebar -->
|
||||||
<div
|
<div
|
||||||
class="fixed top-0 left-0 hidden h-full pt-16 pb-4 bg-white w-88 xl:block dark:bg-gray-800"
|
class="fixed top-0 left-0 hidden h-full pt-16 pb-4 bg-white w-88 xl:block"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="
|
class="
|
||||||
@ -36,7 +36,6 @@
|
|||||||
pt-8
|
pt-8
|
||||||
pb-6
|
pb-6
|
||||||
border border-gray-200 border-solid
|
border border-gray-200 border-solid
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<BaseInput
|
<BaseInput
|
||||||
@ -71,7 +70,6 @@
|
|||||||
mb-2
|
mb-2
|
||||||
text-sm
|
text-sm
|
||||||
border-b border-gray-200 border-solid
|
border-b border-gray-200 border-solid
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ $t('general.sort_by') }}
|
{{ $t('general.sort_by') }}
|
||||||
@ -126,7 +124,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</BaseDropdown>
|
</BaseDropdown>
|
||||||
|
|
||||||
<BaseButton class="ml-1" variant="gray" @click="sortData">
|
<BaseButton class="ml-1" variant="white" @click="sortData">
|
||||||
<BaseIcon v-if="getOrderBy" name="SortAscendingIcon" class="h-5" />
|
<BaseIcon v-if="getOrderBy" name="SortAscendingIcon" class="h-5" />
|
||||||
<BaseIcon v-else name="SortDescendingIcon" class="h-5" />
|
<BaseIcon v-else name="SortDescendingIcon" class="h-5" />
|
||||||
</BaseButton>
|
</BaseButton>
|
||||||
@ -140,7 +138,6 @@
|
|||||||
overflow-y-scroll
|
overflow-y-scroll
|
||||||
border-l border-gray-200 border-solid
|
border-l border-gray-200 border-solid
|
||||||
sw-scroll
|
sw-scroll
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<router-link
|
<router-link
|
||||||
@ -149,9 +146,9 @@
|
|||||||
:key="index"
|
:key="index"
|
||||||
:to="`/${globalStore.companySlug}/customer/estimates/${estimate.id}/view`"
|
:to="`/${globalStore.companySlug}/customer/estimates/${estimate.id}/view`"
|
||||||
:class="[
|
:class="[
|
||||||
'flex justify-between p-4 items-center cursor-pointer hover:bg-gray-100 border-l-4 border-transparent dark:hover:bg-gray-700',
|
'flex justify-between p-4 items-center cursor-pointer hover:bg-gray-100 border-l-4 border-transparent',
|
||||||
{
|
{
|
||||||
'bg-gray-100 border-l-4 border-primary-500 border-solid dark:bg-gray-700':
|
'bg-gray-100 border-l-4 border-primary-500 border-solid':
|
||||||
hasActiveUrl(estimate.id),
|
hasActiveUrl(estimate.id),
|
||||||
},
|
},
|
||||||
]"
|
]"
|
||||||
@ -167,7 +164,6 @@
|
|||||||
leading-5
|
leading-5
|
||||||
text-gray-500
|
text-gray-500
|
||||||
capitalize
|
capitalize
|
||||||
dark:text-gray-400
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ estimate.estimate_number }}
|
{{ estimate.estimate_number }}
|
||||||
@ -188,12 +184,11 @@
|
|||||||
leading-8
|
leading-8
|
||||||
text-right text-gray-900
|
text-right text-gray-900
|
||||||
block
|
block
|
||||||
dark:text-white
|
|
||||||
"
|
"
|
||||||
:amount="estimate.total"
|
:amount="estimate.total"
|
||||||
:currency="estimate.currency"
|
:currency="estimate.currency"
|
||||||
/>
|
/>
|
||||||
<div class="text-sm text-right text-gray-500 dark:text-gray-400 non-italic">
|
<div class="text-sm text-right text-gray-500 non-italic">
|
||||||
{{ estimate.formatted_estimate_date }}
|
{{ estimate.formatted_estimate_date }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -201,7 +196,7 @@
|
|||||||
|
|
||||||
<p
|
<p
|
||||||
v-if="!estimateStore.estimates.length"
|
v-if="!estimateStore.estimates.length"
|
||||||
class="flex justify-center px-4 mt-5 text-sm text-gray-600 dark:text-gray-300"
|
class="flex justify-center px-4 mt-5 text-sm text-gray-600"
|
||||||
>
|
>
|
||||||
{{ $t('estimates.no_matching_estimates') }}
|
{{ $t('estimates.no_matching_estimates') }}
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@ -126,11 +126,11 @@
|
|||||||
<template #cell-actions="{ row }">
|
<template #cell-actions="{ row }">
|
||||||
<BaseDropdown>
|
<BaseDropdown>
|
||||||
<template #activator>
|
<template #activator>
|
||||||
<BaseIcon name="DotsHorizontalIcon" class="h-5 text-gray-500 dark:text-gray-200" />
|
<BaseIcon name="DotsHorizontalIcon" class="h-5 text-gray-500" />
|
||||||
</template>
|
</template>
|
||||||
<router-link :to="`invoices/${row.data.id}/view`">
|
<router-link :to="`invoices/${row.data.id}/view`">
|
||||||
<BaseDropdownItem>
|
<BaseDropdownItem>
|
||||||
<BaseIcon name="EyeIcon" class="h-5 mr-3 text-gray-600 dark:text-gray-200" />
|
<BaseIcon name="EyeIcon" class="h-5 mr-3 text-gray-600" />
|
||||||
{{ $t('general.view') }}
|
{{ $t('general.view') }}
|
||||||
</BaseDropdownItem>
|
</BaseDropdownItem>
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|||||||
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
<!-- Sidebar -->
|
<!-- Sidebar -->
|
||||||
<div
|
<div
|
||||||
class="fixed top-0 left-0 hidden h-full pt-16 pb-4 bg-white w-88 xl:block dark:bg-gray-800"
|
class="fixed top-0 left-0 hidden h-full pt-16 pb-4 bg-white w-88 xl:block"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="
|
class="
|
||||||
@ -42,7 +42,6 @@
|
|||||||
pt-8
|
pt-8
|
||||||
pb-6
|
pb-6
|
||||||
border border-gray-200 border-solid
|
border border-gray-200 border-solid
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<BaseInput
|
<BaseInput
|
||||||
@ -77,7 +76,6 @@
|
|||||||
mb-2
|
mb-2
|
||||||
text-sm
|
text-sm
|
||||||
border-b border-gray-200 border-solid
|
border-b border-gray-200 border-solid
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ $t('general.sort_by') }}
|
{{ $t('general.sort_by') }}
|
||||||
@ -132,7 +130,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</BaseDropdown>
|
</BaseDropdown>
|
||||||
|
|
||||||
<BaseButton class="ml-1" variant="gray" @click="sortData">
|
<BaseButton class="ml-1" variant="white" @click="sortData">
|
||||||
<BaseIcon v-if="getOrderBy" name="SortAscendingIcon" class="h-5" />
|
<BaseIcon v-if="getOrderBy" name="SortAscendingIcon" class="h-5" />
|
||||||
<BaseIcon v-else name="SortDescendingIcon" class="h-5" />
|
<BaseIcon v-else name="SortDescendingIcon" class="h-5" />
|
||||||
</BaseButton>
|
</BaseButton>
|
||||||
@ -146,7 +144,6 @@
|
|||||||
overflow-y-scroll
|
overflow-y-scroll
|
||||||
border-l border-gray-200 border-solid
|
border-l border-gray-200 border-solid
|
||||||
sw-scroll
|
sw-scroll
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<router-link
|
<router-link
|
||||||
@ -155,9 +152,9 @@
|
|||||||
:key="index"
|
:key="index"
|
||||||
:to="`/${globalStore.companySlug}/customer/invoices/${invoice.id}/view`"
|
:to="`/${globalStore.companySlug}/customer/invoices/${invoice.id}/view`"
|
||||||
:class="[
|
:class="[
|
||||||
'flex justify-between p-4 items-center cursor-pointer hover:bg-gray-100 border-l-4 border-transparent dark:hover:bg-gray-700',
|
'flex justify-between p-4 items-center cursor-pointer hover:bg-gray-100 border-l-4 border-transparent',
|
||||||
{
|
{
|
||||||
'bg-gray-100 border-l-4 border-primary-500 border-solid dark:bg-gray-700':
|
'bg-gray-100 border-l-4 border-primary-500 border-solid':
|
||||||
hasActiveUrl(invoice.id),
|
hasActiveUrl(invoice.id),
|
||||||
},
|
},
|
||||||
]"
|
]"
|
||||||
@ -173,7 +170,6 @@
|
|||||||
text-gray-500
|
text-gray-500
|
||||||
capitalize
|
capitalize
|
||||||
text-md
|
text-md
|
||||||
dark:text-gray-400
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ invoice.invoice_number }}
|
{{ invoice.invoice_number }}
|
||||||
@ -193,13 +189,12 @@
|
|||||||
leading-8
|
leading-8
|
||||||
text-right text-gray-900
|
text-right text-gray-900
|
||||||
block
|
block
|
||||||
dark:text-white
|
|
||||||
"
|
"
|
||||||
:amount="invoice.total"
|
:amount="invoice.total"
|
||||||
:currency="invoice.currency"
|
:currency="invoice.currency"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="text-sm text-right text-gray-500 dark:text-gray-400 non-italic">
|
<div class="text-sm text-right text-gray-500 non-italic">
|
||||||
{{ invoice.formatted_invoice_date }}
|
{{ invoice.formatted_invoice_date }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -207,7 +202,7 @@
|
|||||||
|
|
||||||
<p
|
<p
|
||||||
v-if="!invoiceStore.invoices.length"
|
v-if="!invoiceStore.invoices.length"
|
||||||
class="flex justify-center px-4 mt-5 text-sm text-gray-600 dark:text-gray-300"
|
class="flex justify-center px-4 mt-5 text-sm text-gray-600"
|
||||||
>
|
>
|
||||||
{{ $t('invoices.no_matching_invoices') }}
|
{{ $t('invoices.no_matching_invoices') }}
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@ -111,11 +111,11 @@
|
|||||||
<template #cell-actions="{ row }">
|
<template #cell-actions="{ row }">
|
||||||
<BaseDropdown>
|
<BaseDropdown>
|
||||||
<template #activator>
|
<template #activator>
|
||||||
<BaseIcon name="DotsHorizontalIcon" class="w-5 text-gray-500 dark:text-gray-200" />
|
<BaseIcon name="DotsHorizontalIcon" class="w-5 text-gray-500" />
|
||||||
</template>
|
</template>
|
||||||
<router-link :to="`payments/${row.data.id}/view`">
|
<router-link :to="`payments/${row.data.id}/view`">
|
||||||
<BaseDropdownItem>
|
<BaseDropdownItem>
|
||||||
<BaseIcon name="EyeIcon" class="h-5 mr-3 text-gray-600 dark:text-gray-200" />
|
<BaseIcon name="EyeIcon" class="h-5 mr-3 text-gray-600" />
|
||||||
{{ $t('general.view') }}
|
{{ $t('general.view') }}
|
||||||
</BaseDropdownItem>
|
</BaseDropdownItem>
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|||||||
@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
<!-- Sidebar -->
|
<!-- Sidebar -->
|
||||||
<div
|
<div
|
||||||
class="fixed top-0 left-0 hidden h-full pt-16 pb-4 bg-white w-88 xl:block dark:bg-gray-800"
|
class="fixed top-0 left-0 hidden h-full pt-16 pb-4 bg-white w-88 xl:block"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="
|
class="
|
||||||
@ -30,7 +30,6 @@
|
|||||||
pt-8
|
pt-8
|
||||||
pb-6
|
pb-6
|
||||||
border border-gray-200 border-solid
|
border border-gray-200 border-solid
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<BaseInput
|
<BaseInput
|
||||||
@ -65,7 +64,6 @@
|
|||||||
mb-2
|
mb-2
|
||||||
text-sm
|
text-sm
|
||||||
border-b border-gray-200 border-solid
|
border-b border-gray-200 border-solid
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ $t('general.sort_by') }}
|
{{ $t('general.sort_by') }}
|
||||||
@ -120,7 +118,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</BaseDropdown>
|
</BaseDropdown>
|
||||||
|
|
||||||
<BaseButton class="ml-1" variant="gray" @click="sortData">
|
<BaseButton class="ml-1" variant="white" @click="sortData">
|
||||||
<BaseIcon v-if="getOrderBy" name="SortAscendingIcon" class="h-5" />
|
<BaseIcon v-if="getOrderBy" name="SortAscendingIcon" class="h-5" />
|
||||||
<BaseIcon v-else name="SortDescendingIcon" class="h-5" />
|
<BaseIcon v-else name="SortDescendingIcon" class="h-5" />
|
||||||
</BaseButton>
|
</BaseButton>
|
||||||
@ -134,7 +132,6 @@
|
|||||||
overflow-y-scroll
|
overflow-y-scroll
|
||||||
border-l border-gray-200 border-solid
|
border-l border-gray-200 border-solid
|
||||||
sw-scroll
|
sw-scroll
|
||||||
dark:border-gray-600
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<router-link
|
<router-link
|
||||||
@ -143,9 +140,9 @@
|
|||||||
:key="index"
|
:key="index"
|
||||||
:to="`/${globalStore.companySlug}/customer/payments/${payment.id}/view`"
|
:to="`/${globalStore.companySlug}/customer/payments/${payment.id}/view`"
|
||||||
:class="[
|
:class="[
|
||||||
'flex justify-between p-4 items-center cursor-pointer hover:bg-gray-100 border-l-4 border-transparent dark:hover:bg-gray-700',
|
'flex justify-between p-4 items-center cursor-pointer hover:bg-gray-100 border-l-4 border-transparent',
|
||||||
{
|
{
|
||||||
'bg-gray-100 border-l-4 border-primary-500 border-solid dark:bg-gray-700':
|
'bg-gray-100 border-l-4 border-primary-500 border-solid':
|
||||||
hasActiveUrl(payment.id),
|
hasActiveUrl(payment.id),
|
||||||
},
|
},
|
||||||
]"
|
]"
|
||||||
@ -161,7 +158,6 @@
|
|||||||
leading-5
|
leading-5
|
||||||
text-gray-500
|
text-gray-500
|
||||||
capitalize
|
capitalize
|
||||||
dark:text-gray-400
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{ payment.payment_number }}
|
{{ payment.payment_number }}
|
||||||
@ -178,13 +174,12 @@
|
|||||||
leading-8
|
leading-8
|
||||||
text-right text-gray-900
|
text-right text-gray-900
|
||||||
block
|
block
|
||||||
dark:text-white
|
|
||||||
"
|
"
|
||||||
:amount="payment.amount"
|
:amount="payment.amount"
|
||||||
:currency="payment.currency"
|
:currency="payment.currency"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="text-sm text-right text-gray-500 dark:text-gray-400 non-italic">
|
<div class="text-sm text-right text-gray-500 non-italic">
|
||||||
{{ payment.formatted_payment_date }}
|
{{ payment.formatted_payment_date }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -192,7 +187,7 @@
|
|||||||
|
|
||||||
<p
|
<p
|
||||||
v-if="!paymentStore.payments.length"
|
v-if="!paymentStore.payments.length"
|
||||||
class="flex justify-center px-4 mt-5 text-sm text-gray-600 dark:text-gray-300"
|
class="flex justify-center px-4 mt-5 text-sm text-gray-600"
|
||||||
>
|
>
|
||||||
{{ $t('payments.no_matching_payments') }}
|
{{ $t('payments.no_matching_payments') }}
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
Reference in New Issue
Block a user