Compare commits

...

5 Commits

Author SHA1 Message Date
Nicolai Ort 8b5e1cac13
🚀Bumped version to v0.7.10
continuous-integration/drone/push Build is passing Details
2023-02-01 17:50:46 +01:00
Nicolai Ort 20c6a420e9
Merge branch 'dev' of git.odit.services:lfk/selfservice into dev
continuous-integration/drone/push Build is passing Details
2023-02-01 17:48:52 +01:00
Nicolai Ort 53800b4fa3
Added download for registration code 2023-02-01 17:42:58 +01:00
Nicolai Ort 64382880c4
Pinned version 2023-02-01 17:39:15 +01:00
Nicolai Ort 9e06c46411
Configureable barcode format via bwp-js 2023-02-01 17:39:03 +01:00
7 changed files with 3361 additions and 351 deletions

View File

@ -2,10 +2,19 @@
All notable changes to this project will be documented in this file. Dates are displayed in UTC. All notable changes to this project will be documented in this file. Dates are displayed in UTC.
#### [0.7.10](https://git.odit.services/lfk/selfservice/compare/0.7.9...0.7.10)
- Configureable barcode format via bwp-js [`9e06c46`](https://git.odit.services/lfk/selfservice/commit/9e06c464118c5b5d0cd78c8b8379523bf3bfdbd4)
- Added download for registration code [`53800b4`](https://git.odit.services/lfk/selfservice/commit/53800b4fa355bb972e51e71b5b1f98772deed114)
- Pinned version [`6438288`](https://git.odit.services/lfk/selfservice/commit/64382880c40ba5c1e3c9004ce7fc65099849cd44)
#### [0.7.9](https://git.odit.services/lfk/selfservice/compare/0.7.8...0.7.9) #### [0.7.9](https://git.odit.services/lfk/selfservice/compare/0.7.8...0.7.9)
> 1 February 2023
- migrate to bwip-js [`8cfddb5`](https://git.odit.services/lfk/selfservice/commit/8cfddb502964be7edf45cdc524344ea2f7f20142) - migrate to bwip-js [`8cfddb5`](https://git.odit.services/lfk/selfservice/commit/8cfddb502964be7edf45cdc524344ea2f7f20142)
- fix codeconfig.height [`9b261bf`](https://git.odit.services/lfk/selfservice/commit/9b261bf20023561a7c9691dff33c9a6d2b5c0cac) - fix codeconfig.height [`9b261bf`](https://git.odit.services/lfk/selfservice/commit/9b261bf20023561a7c9691dff33c9a6d2b5c0cac)
- 🚀Bumped version to v0.7.9 [`debbd92`](https://git.odit.services/lfk/selfservice/commit/debbd9219cb53dbd48cf0cb7bee329b765ce4647)
- drop jsbarcode [`713dd15`](https://git.odit.services/lfk/selfservice/commit/713dd153126851e8cf1045bf5ba3ca702a39c738) - drop jsbarcode [`713dd15`](https://git.odit.services/lfk/selfservice/commit/713dd153126851e8cf1045bf5ba3ca702a39c738)
#### [0.7.8](https://git.odit.services/lfk/selfservice/compare/0.7.7...0.7.8) #### [0.7.8](https://git.odit.services/lfk/selfservice/compare/0.7.7...0.7.8)

View File

@ -1,52 +1,52 @@
{ {
"name": "@odit/lfk-selfservice", "name": "@odit/lfk-selfservice",
"version": "0.7.9", "version": "0.7.10",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
"build": "vite build", "build": "vite build",
"release": "release-it", "release": "release-it",
"postbuild": "node env_fix.js" "postbuild": "node env_fix.js"
}, },
"dependencies": { "dependencies": {
"bwip-js": "^3.2.2", "bwip-js": "3.2.2",
"marked": "2.0.3", "marked": "2.0.3",
"redaxios": "0.4.1", "redaxios": "0.4.1",
"toastify-js": "1.10.0", "toastify-js": "1.10.0",
"validator": "13.5.2", "validator": "13.5.2",
"vue-i18n": "9.1.4", "vue-i18n": "9.1.4",
"vue-toastification": "2.0.0-rc.1", "vue-toastification": "2.0.0-rc.1",
"vue": "3.0.9", "vue": "3.0.9",
"vue-router": "4.0.5" "vue-router": "4.0.5"
}, },
"devDependencies": { "devDependencies": {
"@tailwindcss/jit": "0.1.18", "@tailwindcss/jit": "0.1.18",
"@tailwindcss/aspect-ratio": "0.2.0", "@tailwindcss/aspect-ratio": "0.2.0",
"@tailwindcss/forms": "0.3.2", "@tailwindcss/forms": "0.3.2",
"@tailwindcss/line-clamp": "0.2.0", "@tailwindcss/line-clamp": "0.2.0",
"@tailwindcss/typography": "0.4.0", "@tailwindcss/typography": "0.4.0",
"@vitejs/plugin-vue": "1.2.1", "@vitejs/plugin-vue": "1.2.1",
"@vue/compiler-sfc": "3.0.11", "@vue/compiler-sfc": "3.0.11",
"autoprefixer": "10.2.5", "autoprefixer": "10.2.5",
"tailwindcss": "2.1.1", "tailwindcss": "2.1.1",
"release-it": "14.6.1", "release-it": "14.6.1",
"vite": "2.1.5" "vite": "2.1.5"
}, },
"release-it": { "release-it": {
"git": { "git": {
"commit": true, "commit": true,
"requireCleanWorkingDir": false, "requireCleanWorkingDir": false,
"commitMessage": "🚀Bumped version to v${version}", "commitMessage": "🚀Bumped version to v${version}",
"requireBranch": "dev", "requireBranch": "dev",
"push": true, "push": true,
"tag": true, "tag": true,
"tagName": null, "tagName": null,
"tagAnnotation": "v${version}" "tagAnnotation": "v${version}"
}, },
"npm": { "npm": {
"publish": false "publish": false
}, },
"hooks": { "hooks": {
"after:bump": "npx auto-changelog --commit-limit false -p -u --hide-credit && git add CHANGELOG.md && node order_i18n.js && git add src/locales" "after:bump": "npx auto-changelog --commit-limit false -p -u --hide-credit && git add CHANGELOG.md && node order_i18n.js && git add src/locales"
} }
} }
} }

3129
pnpm-lock.yaml Normal file

File diff suppressed because it is too large Load Diff

View File

@ -12,5 +12,6 @@ const config = {
// optional, will fallback to baseurl_selfservice/imprint // optional, will fallback to baseurl_selfservice/imprint
url_imprint: '', url_imprint: '',
// optional, will fallback to baseurl_selfservice/privacy // optional, will fallback to baseurl_selfservice/privacy
url_privacy: '' url_privacy: '',
codeformat: 'code39'
}; };

View File

@ -12,6 +12,7 @@
"delete_my_data": "Meine Daten löschen", "delete_my_data": "Meine Daten löschen",
"deletion_in_progress": "Daten werden gelöscht...", "deletion_in_progress": "Daten werden gelöscht...",
"distance": "Distanz", "distance": "Distanz",
"download registrationcode": "Registrierungscode herunterladen",
"download_certificate": "Urkunde herunterladen", "download_certificate": "Urkunde herunterladen",
"e_mail_adress": "E-Mail Adresse", "e_mail_adress": "E-Mail Adresse",
"go_to_login": "Zum Login", "go_to_login": "Zum Login",

View File

@ -12,6 +12,7 @@
"delete_my_data": "Delete my data", "delete_my_data": "Delete my data",
"deletion_in_progress": "Deletion in progress...", "deletion_in_progress": "Deletion in progress...",
"distance": "Distance", "distance": "Distance",
"download registrationcode": "Download registrationcode",
"download_certificate": "Download certificate", "download_certificate": "Download certificate",
"e_mail_adress": "mail address", "e_mail_adress": "mail address",
"go_to_login": "Go To Login", "go_to_login": "Go To Login",

View File

@ -2,8 +2,7 @@
<div class="min-h-screen w-full p-4"> <div class="min-h-screen w-full p-4">
<section class="text-white body-font"> <section class="text-white body-font">
<div class="container mx-auto flex items-center md:flex-row flex-col"> <div class="container mx-auto flex items-center md:flex-row flex-col">
<div <div class="
class="
flex flex-col flex flex-col
md:pr-10 md:mb-0 md:pr-10 md:mb-0
mb-6 mb-6
@ -12,57 +11,43 @@
md:w-auto md:text-left md:w-auto md:text-left
text-center text-black text-center text-black
dark:text-gray-200 dark:text-gray-200
" ">
> <p class="text-3xl font-bold whitespace-nowrap" v-text="
<p (state.firstname || '') +
class="text-3xl font-bold whitespace-nowrap" ' ' +
v-text=" (state.middlename || '') +
(state.firstname || '') + ' ' +
' ' + (state.lastname || '')
(state.middlename || '') + "></p>
' ' +
(state.lastname || '')
"
></p>
<p class="text-md whitespace-nowrap">{{ state.group }}</p> <p class="text-md whitespace-nowrap">{{ state.group }}</p>
</div> </div>
<div class="inline-flex md:ml-auto md:mr-0 mx-auto items-center"> <div class="inline-flex md:ml-auto md:mr-0 mx-auto items-center">
<div v-if="state.delete_active === false"> <div v-if="state.delete_active === false">
<button <button type="button"
type="button" class="focus:border-black focus:ring-2 focus:ring-black text-white text-sm py-2.5 px-5 rounded-md bg-blue-500 hover:bg-blue-600 hover:shadow-lg"
class=" @click="get_registration">
focus:border-black focus:ring-2 focus:ring-black <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
text-white text-sm stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
py-2.5 class="feather feather-download" style="display: inline;height: 1rem;vertical-align: sub;">
px-5 <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
rounded-md <polyline points="7 10 12 15 17 10" />
bg-blue-500 <line x1="12" y1="15" x2="12" y2="3" />
hover:bg-blue-600 hover:shadow-lg </svg>
" {{ $t('download registrationcode') }}
@click="get_certificate" </button>
> <button type="button"
<svg class="focus:border-black focus:ring-2 focus:ring-black text-white text-sm py-2.5 px-5 rounded-md bg-blue-500 hover:bg-blue-600 hover:shadow-lg"
xmlns="http://www.w3.org/2000/svg" @click="get_certificate">
width="24" <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
height="24" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
viewBox="0 0 24 24" class="feather feather-download" style="display: inline; height: 1rem; vertical-align: sub">
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="feather feather-download"
style="display: inline; height: 1rem; vertical-align: sub"
>
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" /> <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
<polyline points="7 10 12 15 17 10" /> <polyline points="7 10 12 15 17 10" />
<line x1="12" y1="15" x2="12" y2="3" /> <line x1="12" y1="15" x2="12" y2="3" />
</svg> </svg>
{{ $t("download_certificate") }} {{ $t("download_certificate") }}
</button> </button>
<button <button type="button" class="
type="button"
class="
focus:border-black focus:ring-2 focus:ring-black focus:border-black focus:ring-2 focus:ring-black
text-white text-sm text-white text-sm
py-2.5 py-2.5
@ -71,39 +56,23 @@
bg-red-600 bg-red-600
hover:bg-red-700 hover:shadow-lg hover:bg-red-700 hover:shadow-lg
ml-1 ml-1
" " @click="
@click="
() => { () => {
state.delete_active = true; state.delete_active = true;
} }
" ">
> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
<svg stroke="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
xmlns="http://www.w3.org/2000/svg" class="feather feather-download" style="display: inline; height: 1rem; vertical-align: sub">
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="none"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="feather feather-download"
style="display: inline; height: 1rem; vertical-align: sub"
>
<path d="M0 0h24v24H0z" /> <path d="M0 0h24v24H0z" />
<path <path fill="currentColor"
fill="currentColor" d="M17 6h5v2h-2v13a1 1 0 01-1 1H5a1 1 0 01-1-1V8H2V6h5V3a1 1 0 011-1h8a1 1 0 011 1v3zm1 2H6v12h12V8zm-5 6l2 2-1 1-2-2-2 2-1-1 2-2-2-2 1-1 2 2 2-2 1 1-2 2zM9 4v2h6V4H9z" />
d="M17 6h5v2h-2v13a1 1 0 01-1 1H5a1 1 0 01-1-1V8H2V6h5V3a1 1 0 011-1h8a1 1 0 011 1v3zm1 2H6v12h12V8zm-5 6l2 2-1 1-2-2-2 2-1-1 2-2-2-2 1-1 2 2 2-2 1 1-2 2zM9 4v2h6V4H9z"
/>
</svg> </svg>
{{ $t("delete_my_data") }} {{ $t("delete_my_data") }}
</button> </button>
</div> </div>
<div v-if="state.delete_active === true"> <div v-if="state.delete_active === true">
<button <button type="button" class="
type="button"
class="
focus:border-black focus:ring-2 focus:ring-black focus:border-black focus:ring-2 focus:ring-black
text-white text-sm text-white text-sm
py-2.5 py-2.5
@ -111,37 +80,20 @@
rounded-md rounded-md
bg-blue-500 bg-blue-500
hover:bg-blue-600 hover:shadow-lg hover:bg-blue-600 hover:shadow-lg
" " @click="
@click="
() => { () => {
state.delete_active = false; state.delete_active = false;
} }
" ">
> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
<svg stroke="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
xmlns="http://www.w3.org/2000/svg" class="feather feather-download" style="display: inline; height: 1rem; vertical-align: sub">
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="none"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="feather feather-download"
style="display: inline; height: 1rem; vertical-align: sub"
>
<path fill="none" d="M0 0h24v24H0z" /> <path fill="none" d="M0 0h24v24H0z" />
<path <path fill="currentColor" d="M12 11l5-5 1 1-5 5 5 5-1 1-5-5-5 5-1-1 5-5-5-5 1-1z" />
fill="currentColor"
d="M12 11l5-5 1 1-5 5 5 5-1 1-5-5-5 5-1-1 5-5-5-5 1-1z"
/>
</svg> </svg>
{{ $t("cancel_keep_my_data") }} {{ $t("cancel_keep_my_data") }}
</button> </button>
<button <button type="button" class="
type="button"
class="
focus:border-black focus:ring-2 focus:ring-black focus:border-black focus:ring-2 focus:ring-black
text-white text-sm text-white text-sm
py-2.5 py-2.5
@ -150,27 +102,13 @@
bg-red-600 bg-red-600
hover:bg-red-700 hover:shadow-lg hover:bg-red-700 hover:shadow-lg
ml-1 ml-1
" " @click="delete_me">
@click="delete_me" <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
> stroke="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
<svg class="feather feather-download" style="display: inline; height: 1rem; vertical-align: sub">
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="none"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="feather feather-download"
style="display: inline; height: 1rem; vertical-align: sub"
>
<path d="M0 0h24v24H0z" /> <path d="M0 0h24v24H0z" />
<path <path fill="currentColor"
fill="currentColor" d="M17 6h5v2h-2v13a1 1 0 01-1 1H5a1 1 0 01-1-1V8H2V6h5V3a1 1 0 011-1h8a1 1 0 011 1v3zm1 2H6v12h12V8zm-5 6l2 2-1 1-2-2-2 2-1-1 2-2-2-2 1-1 2 2 2-2 1 1-2 2zM9 4v2h6V4H9z" />
d="M17 6h5v2h-2v13a1 1 0 01-1 1H5a1 1 0 01-1-1V8H2V6h5V3a1 1 0 011-1h8a1 1 0 011 1v3zm1 2H6v12h12V8zm-5 6l2 2-1 1-2-2-2 2-1-1 2-2-2-2 1-1 2 2 2-2 1 1-2 2zM9 4v2h6V4H9z"
/>
</svg> </svg>
{{ $t("confirm_delete_all_of_my_data") }} {{ $t("confirm_delete_all_of_my_data") }}
</button> </button>
@ -183,53 +121,38 @@
<div class="flex flex-wrap flex-col w-full tabs"> <div class="flex flex-wrap flex-col w-full tabs">
<div class="flex lg:flex-wrap flex-row lg:space-x-2"> <div class="flex lg:flex-wrap flex-row lg:space-x-2">
<div class="flex-none"> <div class="flex-none">
<button <button @click="
@click=" () => {
() => { state.activetab = 'profile';
state.activetab = 'profile'; }
} " :class="{
" 'tab-active border-b-2 font-medium border-blue-500':
:class="{ state.activetab === 'profile',
'tab-active border-b-2 font-medium border-blue-500': }" class="tab tab-underline py-4 px-6 block" type="button">
state.activetab === 'profile',
}"
class="tab tab-underline py-4 px-6 block"
type="button"
>
{{ $t("profile") }} {{ $t("profile") }}
</button> </button>
</div> </div>
<div class="flex-none"> <div class="flex-none">
<button <button @click="
@click=" () => {
() => { state.activetab = 'laptimes';
state.activetab = 'laptimes'; }
} " :class="{
" 'tab-active border-b-2 font-medium border-blue-500':
:class="{ state.activetab === 'laptimes',
'tab-active border-b-2 font-medium border-blue-500': }" class="tab tab-underline py-4 px-6 block" type="button">
state.activetab === 'laptimes',
}"
class="tab tab-underline py-4 px-6 block"
type="button"
>
{{ $t("lap_times") }} {{ $t("lap_times") }}
</button> </button>
</div> </div>
<div class="flex-none"> <div class="flex-none">
<button <button @click="
@click=" () => {
() => { state.activetab = 'sponsorings';
state.activetab = 'sponsorings'; }
} " :class="{
" 'tab-active border-b-2 font-medium border-blue-500':
:class="{ state.activetab === 'sponsorings',
'tab-active border-b-2 font-medium border-blue-500': }" class="tab tab-underline py-4 px-6 block" type="button">
state.activetab === 'sponsorings',
}"
class="tab tab-underline py-4 px-6 block"
type="button"
>
{{ $t("sponsoring") }} {{ $t("sponsoring") }}
</button> </button>
</div> </div>
@ -243,8 +166,7 @@
<div class="text-lg">{{ $t("registrierungscode") }}</div> <div class="text-lg">{{ $t("registrierungscode") }}</div>
<img alt="Registrierungscode" :src="state.barcode" /> <img alt="Registrierungscode" :src="state.barcode" />
<div class="text-lg">{{ $t("vorname") }}</div> <div class="text-lg">{{ $t("vorname") }}</div>
<p <p class="
class="
h-10 h-10
w-full w-full
dark:bg-gray-800 dark:bg-gray-800
@ -259,14 +181,11 @@
transition-colors transition-colors
duration-200 duration-200
ease-in-out ease-in-out
" " v-text="state.firstname" />
v-text="state.firstname"
/>
</div> </div>
<div class="form-element"> <div class="form-element">
<div class="text-lg">{{ $t("mittelname") }}</div> <div class="text-lg">{{ $t("mittelname") }}</div>
<p <p class="
class="
h-10 h-10
w-full w-full
dark:bg-gray-800 dark:bg-gray-800
@ -281,14 +200,11 @@
transition-colors transition-colors
duration-200 duration-200
ease-in-out ease-in-out
" " v-text="state.middlename" />
v-text="state.middlename"
/>
</div> </div>
<div class="form-element"> <div class="form-element">
<div class="text-lg">{{ $t("nachname") }}</div> <div class="text-lg">{{ $t("nachname") }}</div>
<p <p class="
class="
h-10 h-10
w-full w-full
dark:bg-gray-800 dark:bg-gray-800
@ -303,14 +219,11 @@
transition-colors transition-colors
duration-200 duration-200
ease-in-out ease-in-out
" " v-text="state.lastname" />
v-text="state.lastname"
/>
</div> </div>
<div class="form-element"> <div class="form-element">
<div class="text-lg">{{ $t("e_mail_adress") }}</div> <div class="text-lg">{{ $t("e_mail_adress") }}</div>
<p <p class="
class="
h-10 h-10
w-full w-full
dark:bg-gray-800 dark:bg-gray-800
@ -325,14 +238,11 @@
transition-colors transition-colors
duration-200 duration-200
ease-in-out ease-in-out
" " v-text="state.email" />
v-text="state.email"
/>
</div> </div>
<div class="form-element"> <div class="form-element">
<div class="text-lg">{{ $t("phone_number") }}</div> <div class="text-lg">{{ $t("phone_number") }}</div>
<p <p class="
class="
h-10 h-10
w-full w-full
dark:bg-gray-800 dark:bg-gray-800
@ -347,9 +257,7 @@
transition-colors transition-colors
duration-200 duration-200
ease-in-out ease-in-out
" " v-text="state.phone" />
v-text="state.phone"
/>
</div> </div>
</div> </div>
</form> </form>
@ -361,40 +269,31 @@
<section class="text-gray-400 dark:bg-gray-900 body-font"> <section class="text-gray-400 dark:bg-gray-900 body-font">
<div class="container mx-auto"> <div class="container mx-auto">
<div class="lg:w-2/3 w-full mx-auto overflow-auto"> <div class="lg:w-2/3 w-full mx-auto overflow-auto">
<table <table v-if="state.scans.length > 0" class="table-auto w-full text-left whitespace-no-wrap">
v-if="state.scans.length > 0" <thead class="
class="table-auto w-full text-left whitespace-no-wrap"
>
<thead
class="
text-black text-black
bg-gray-300 bg-gray-300
dark:text-white dark:text-white
text-sm text-sm
dark:bg-gray-800 dark:bg-gray-800
" ">
>
<tr> <tr>
<th <th class="
class="
px-4 px-4
py-3 py-3
title-font title-font
tracking-wider tracking-wider
font-medium font-medium
" ">
>
{{ $t("distance") }} {{ $t("distance") }}
</th> </th>
<th <th class="
class="
px-4 px-4
py-3 py-3
title-font title-font
tracking-wider tracking-wider
font-medium font-medium
" ">
>
{{ $t("lap_time") }} {{ $t("lap_time") }}
</th> </th>
</tr> </tr>
@ -408,21 +307,15 @@
</tr> </tr>
</tbody> </tbody>
</table> </table>
<div <div v-else class="
v-else
class="
text-center text-center
font-bold font-bold
text-black text-black
dark:text-white dark:text-white
text-2xl text-2xl
" ">
> <img src="../assets/empty_laps.svg" style="height: 25rem; margin: 0 auto"
<img :alt="[[$t('no_laps_scans_were_recorded_yet')]]" />
src="../assets/empty_laps.svg"
style="height: 25rem; margin: 0 auto"
:alt="[[$t('no_laps_scans_were_recorded_yet')]]"
/>
{{ $t("no_laps_scans_were_recorded_yet") }} {{ $t("no_laps_scans_were_recorded_yet") }}
</div> </div>
</div> </div>
@ -430,59 +323,45 @@
</section> </section>
</div> </div>
</div> </div>
<div <div v-if="state.activetab === 'sponsorings'" class="tab-content block">
v-if="state.activetab === 'sponsorings'"
class="tab-content block"
>
<div class="py-4 w-full"> <div class="py-4 w-full">
<section class="text-gray-400 dark:bg-gray-900 body-font"> <section class="text-gray-400 dark:bg-gray-900 body-font">
<div class="container mx-auto"> <div class="container mx-auto">
<div class="lg:w-2/3 w-full mx-auto overflow-auto"> <div class="lg:w-2/3 w-full mx-auto overflow-auto">
<table <table v-if="state.sponsorings.length > 0" class="table-auto w-full text-left whitespace-no-wrap">
v-if="state.sponsorings.length > 0" <thead class="
class="table-auto w-full text-left whitespace-no-wrap"
>
<thead
class="
text-black text-black
bg-gray-300 bg-gray-300
dark:text-white dark:text-white
text-sm text-sm
dark:bg-gray-800 dark:bg-gray-800
" ">
>
<tr> <tr>
<th <th class="
class="
px-4 px-4
py-3 py-3
title-font title-font
tracking-wider tracking-wider
font-medium font-medium
" ">
>
Name Name
</th> </th>
<th <th class="
class="
px-4 px-4
py-3 py-3
title-font title-font
tracking-wider tracking-wider
font-medium font-medium
" ">
>
{{ $t("amount_per_kilometer_in_eur") }} {{ $t("amount_per_kilometer_in_eur") }}
</th> </th>
<th <th class="
class="
px-4 px-4
py-3 py-3
title-font title-font
tracking-wider tracking-wider
font-medium font-medium
" ">
>
{{ $t("current_total_amount_in_eur") }} {{ $t("current_total_amount_in_eur") }}
</th> </th>
</tr> </tr>
@ -497,24 +376,18 @@
<span v-text="s.donor.lastname"></span> <span v-text="s.donor.lastname"></span>
</td> </td>
<td class="px-4 py-3"> <td class="px-4 py-3">
<span <span v-text="
v-text=" (s.amountPerDistance / 100)
(s.amountPerDistance / 100) .toFixed(2)
.toFixed(2) .toLocaleString('de-DE', { valute: 'EUR' })
.toLocaleString('de-DE', { valute: 'EUR' }) "></span>
"
></span
>
</td> </td>
<td class="px-4 py-3"> <td class="px-4 py-3">
<span <span v-text="
v-text=" (s.amount / 100)
(s.amount / 100) .toFixed(2)
.toFixed(2) .toLocaleString('de-DE', { valute: 'EUR' })
.toLocaleString('de-DE', { valute: 'EUR' }) "></span>
"
></span
>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -522,61 +395,48 @@
<tr> <tr>
<td class="px-4 py-3">{{ $t("total") }}</td> <td class="px-4 py-3">{{ $t("total") }}</td>
<td class="px-4 py-3"> <td class="px-4 py-3">
<span <span v-text="
v-text=" (
( state.sponsorings.reduce(function (
state.sponsorings.reduce(function ( sum,
sum, current
current ) {
) { return sum + current.amountPerDistance;
return sum + current.amountPerDistance; },
},
0) / 100 0) / 100
) )
.toFixed(2) .toFixed(2)
.toLocaleString('de-DE', { valute: 'EUR' }) .toLocaleString('de-DE', { valute: 'EUR' })
" "></span>
></span
>
</td> </td>
<td class="px-4 py-3"> <td class="px-4 py-3">
<span <span v-text="
v-text=" (
( state.sponsorings.reduce(function (
state.sponsorings.reduce(function ( sum,
sum, current
current ) {
) { return sum + current.amount;
return sum + current.amount; },
},
0) / 100 0) / 100
) )
.toFixed(2) .toFixed(2)
.toLocaleString('de-DE', { valute: 'EUR' }) .toLocaleString('de-DE', { valute: 'EUR' })
" "></span>
></span
>
</td> </td>
</tr> </tr>
</tfoot> </tfoot>
</table> </table>
<div <div v-else class="
v-else
class="
text-center text-center
font-bold font-bold
text-black text-black
dark:text-white dark:text-white
text-2xl text-2xl
" ">
> <img src="../assets/empty_laps.svg" style="height: 25rem; margin: 0 auto" :alt="[
<img [$t('no_sponsorings_for_you_were_recorded_yet')],
src="../assets/empty_laps.svg" ]" />
style="height: 25rem; margin: 0 auto"
:alt="[
[$t('no_sponsorings_for_you_were_recorded_yet')],
]"
/>
{{ $t("no_sponsorings_for_you_were_recorded_yet") }} {{ $t("no_sponsorings_for_you_were_recorded_yet") }}
</div> </div>
</div> </div>
@ -597,19 +457,20 @@ import axios from "redaxios";
import bwipjs from "bwip-js"; import bwipjs from "bwip-js";
function textToBase64Barcode(text) { function textToBase64Barcode(text) {
const canvas = document.createElement("canvas"); var canvas = document.createElement("canvas");
let codeconfig = { bwipjs.toCanvas(canvas,
bcid: config.code_format || "code128", {
text: `${text}` || "?", bcid: config.codeformat || 'code39',
scale: 3, text: text,
includetext: false, scale: 3,
}; height: 10,
if (codeconfig.bcid === "code128" || codeconfig.bcid === "ean13") { // width: 10,
codeconfig.height = 10; // bar height in mm includetext: true,
} textxalign: 'center',
bwipjs.toCanvas(canvas, codeconfig); backgroundcolor: 'ffffff'
const base64 = canvas.toDataURL("image/png"); }
return base64; )
return canvas.toDataURL("image/png");
} }
const state = reactive({ const state = reactive({
@ -624,8 +485,8 @@ const state = reactive({
group: "", group: "",
activetab: "profile", activetab: "profile",
delete_active: false, delete_active: false,
fullobject: {}, fullobject: {}
}); })
const toast = useToast(); const toast = useToast();
const props = defineProps({ const props = defineProps({
token: String, token: String,
@ -722,4 +583,12 @@ function get_certificate() {
toast.error("An error occured while generating your certificate"); toast.error("An error occured while generating your certificate");
}); });
} }
function get_registration() {
toast("Registrierungscode wird generiert...");
var a = document.createElement("a");
a.href = state.barcode;
a.download = "LfK23_Registrierungscode.png";
a.click();
toast("Registrierungscode generiert!", { type: TYPE.SUCCESS });
}
</script> </script>