diff --git a/CHANGELOG.md b/CHANGELOG.md
index 32a6ed0..75ff2ec 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,9 +2,18 @@
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
+#### [0.7.9](https://git.odit.services/lfk/selfservice/compare/0.7.8...0.7.9)
+
+- 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)
+- 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)
+> 1 February 2023
+
- add barcode to profile [`851190e`](https://git.odit.services/lfk/selfservice/commit/851190e6a7f8b9cccbf05e60f9b50b96c196959c)
+- 🚀Bumped version to v0.7.8 [`e5a01bc`](https://git.odit.services/lfk/selfservice/commit/e5a01bcd7629164655cacd10dd1f014260c67c4b)
- certificate generation: success toast styling [`1603a09`](https://git.odit.services/lfk/selfservice/commit/1603a097f71ed85c901baf8da04cb06b86474649)
#### [0.7.7](https://git.odit.services/lfk/selfservice/compare/0.7.6...0.7.7)
diff --git a/package.json b/package.json
index 270782d..18f2664 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@odit/lfk-selfservice",
- "version": "0.7.8",
+ "version": "0.7.9",
"scripts": {
"dev": "vite",
"build": "vite build",
@@ -13,22 +13,22 @@
"redaxios": "0.4.1",
"toastify-js": "1.10.0",
"validator": "13.5.2",
- "vue": "3.0.9",
"vue-i18n": "9.1.4",
- "vue-router": "4.0.5",
- "vue-toastification": "2.0.0-rc.1"
+ "vue-toastification": "2.0.0-rc.1",
+ "vue": "3.0.9",
+ "vue-router": "4.0.5"
},
"devDependencies": {
+ "@tailwindcss/jit": "0.1.18",
"@tailwindcss/aspect-ratio": "0.2.0",
"@tailwindcss/forms": "0.3.2",
- "@tailwindcss/jit": "0.1.18",
"@tailwindcss/line-clamp": "0.2.0",
"@tailwindcss/typography": "0.4.0",
"@vitejs/plugin-vue": "1.2.1",
"@vue/compiler-sfc": "3.0.11",
"autoprefixer": "10.2.5",
- "release-it": "14.6.1",
"tailwindcss": "2.1.1",
+ "release-it": "14.6.1",
"vite": "2.1.5"
},
"release-it": {
diff --git a/public/env.sample.js b/public/env.sample.js
index 7b65166..e561d12 100644
--- a/public/env.sample.js
+++ b/public/env.sample.js
@@ -7,6 +7,8 @@ const config = {
baseurl_selfservice: '/selfservice/',
// full url (including fqdn)
baseurl_documentserver: 'http://localhost:4010/documents',
+ // optional, will fallback to code128
+ code_format: 'ean13',
// optional, will fallback to baseurl_selfservice/imprint
url_imprint: '',
// optional, will fallback to baseurl_selfservice/privacy
diff --git a/src/views/Profile.vue b/src/views/Profile.vue
index 4dbda81..3f6855a 100644
--- a/src/views/Profile.vue
+++ b/src/views/Profile.vue
@@ -2,141 +2,115 @@
-
-
+
-
-
-
-
{ state.delete_active = false }"
- >
-
+
+
{
+ state.delete_active = false;
+ }
+ ">
+
- {{ $t('cancel_keep_my_data') }}
+ {{ $t("cancel_keep_my_data") }}
-
-
+
+
-
+
- {{ $t('confirm_delete_all_of_my_data') }}
+ {{ $t("confirm_delete_all_of_my_data") }}
@@ -147,96 +121,181 @@
- { state.activetab = 'profile' }"
- :class="{ 'tab-active border-b-2 font-medium border-blue-500': (state.activetab === 'profile') }"
- class="tab tab-underline py-4 px-6 block"
- type="button"
- >{{ $t('profile') }}
+ {
+ state.activetab = 'profile';
+ }
+ " :class="{
+ 'tab-active border-b-2 font-medium border-blue-500':
+ state.activetab === 'profile',
+}" class="tab tab-underline py-4 px-6 block" type="button">
+ {{ $t("profile") }}
+
- { state.activetab = 'laptimes' }"
- :class="{ 'tab-active border-b-2 font-medium border-blue-500': (state.activetab === 'laptimes') }"
- class="tab tab-underline py-4 px-6 block"
- type="button"
- >{{ $t('lap_times') }}
+ {
+ state.activetab = 'laptimes';
+ }
+ " :class="{
+ 'tab-active border-b-2 font-medium border-blue-500':
+ state.activetab === 'laptimes',
+}" class="tab tab-underline py-4 px-6 block" type="button">
+ {{ $t("lap_times") }}
+
- { state.activetab = 'sponsorings' }"
- :class="{ 'tab-active border-b-2 font-medium border-blue-500': (state.activetab === 'sponsorings') }"
- class="tab tab-underline py-4 px-6 block"
- type="button"
- >{{ $t('sponsoring') }}
+ {
+ state.activetab = 'sponsorings';
+ }
+ " :class="{
+ 'tab-active border-b-2 font-medium border-blue-500':
+ state.activetab === 'sponsorings',
+}" class="tab tab-underline py-4 px-6 block" type="button">
+ {{ $t("sponsoring") }}
+
-
+
-
+
-
-
+
+
- {{ $t('distance') }} |
- {{ $t('lap_time') }} |
+
+ {{ $t("distance") }}
+ |
+
+ {{ $t("lap_time") }}
+ |
@@ -248,39 +307,63 @@
-
-
- {{ $t('no_laps_scans_were_recorded_yet') }}
+
+
+ {{ $t("no_laps_scans_were_recorded_yet") }}
-
+
-
-
+
+
- Name |
- {{ $t('amount_per_kilometer_in_eur') }} |
- {{ $t('current_total_amount_in_eur') }} |
+
+ Name
+ |
+
+ {{ $t("amount_per_kilometer_in_eur") }}
+ |
+
+ {{ $t("current_total_amount_in_eur") }}
+ |
@@ -293,52 +376,68 @@
- €
+ €
|
- €
+ €
|
- {{ $t('total') }} |
+ {{ $t("total") }} |
- €
+ €
|
- €
+ €
|
-
-
- {{ $t('no_sponsorings_for_you_were_recorded_yet') }}
+
+
+ {{ $t("no_sponsorings_for_you_were_recorded_yet") }}
@@ -357,18 +456,18 @@ import { TYPE, useToast } from "vue-toastification";
import axios from "redaxios";
import bwipjs from "bwip-js";
-function textToBase64Barcode(text){
+function textToBase64Barcode(text) {
var canvas = document.createElement("canvas");
bwipjs.toCanvas(canvas,
{
- bcid: config.codeformat,
- text: text,
- scale: 4,
- height: 10,
- // width: 10,
- includetext: true,
- textxalign: 'center',
- backgroundcolor: 'ffffff'
+ bcid: config.codeformat || 'code39',
+ text: text,
+ scale: 3,
+ height: 10,
+ // width: 10,
+ includetext: true,
+ textxalign: 'center',
+ backgroundcolor: 'ffffff'
}
)
return canvas.toDataURL("image/png");
@@ -388,13 +487,13 @@ const state = reactive({
delete_active: false,
fullobject: {}
})
-state.barcode = textToBase64Barcode("12345");
const toast = useToast();
const props = defineProps({
- token: String
-})
+ token: String,
+});
const accesstoken = atob(props.token);
-axios.get(`${config.baseurl}api/runners/me/${accesstoken}`)
+axios
+ .get(`${config.baseurl}api/runners/me/${accesstoken}`)
.then(({ data }) => {
state.phone = data.phone;
state.email = data.email;
@@ -404,26 +503,38 @@ axios.get(`${config.baseurl}api/runners/me/${accesstoken}`)
state.group = data.group;
state.sponsorings = data.distanceDonations;
state.fullobject = data;
- state.barcode = textToBase64Barcode(state.fullobject.id);
- }).catch((error) => {
- toast.error("Profil konnte nicht geladen werden...");
+ state.barcode = textToBase64Barcode(data.id);
})
-axios.get(`${config.baseurl}api/runners/me/${accesstoken}/scans`)
+ .catch((error) => {
+ toast.error("Profil konnte nicht geladen werden...");
+ });
+axios
+ .get(`${config.baseurl}api/runners/me/${accesstoken}/scans`)
.then(({ data }) => {
- data.map(function(s) {
- s.lapTime = Math.floor(s.lapTime / 60) + 'min ' + (Math.floor(s.lapTime % 60) + "").padStart(2, "0") + "s"
- s.distance = Math.floor(s.distance / 1000) + 'km ' + (Math.floor(s.distance % 1000) + "").padStart(3, "0") + "m"
+ data.map(function (s) {
+ s.lapTime =
+ Math.floor(s.lapTime / 60) +
+ "min " +
+ (Math.floor(s.lapTime % 60) + "").padStart(2, "0") +
+ "s";
+ s.distance =
+ Math.floor(s.distance / 1000) +
+ "km " +
+ (Math.floor(s.distance % 1000) + "").padStart(3, "0") +
+ "m";
return s;
- })
- data.filter(s => s.valid === true);
+ });
+ data.filter((s) => s.valid === true);
state.scans = data;
- }).catch((error) => {
- toast.error("Profil konnte nicht geladen werden...");
})
+ .catch((error) => {
+ toast.error("Profil konnte nicht geladen werden...");
+ });
function delete_me() {
toast("Profil wird gelöscht...");
- let url = `${config.baseurl}api/runners/me/${accesstoken}?force=true`
- axios.delete(url)
+ let url = `${config.baseurl}api/runners/me/${accesstoken}?force=true`;
+ axios
+ .delete(url)
.then(() => {
toast("Alle Daten gelöscht!");
location.replace(`${config.baseurl_selfservice}`);
@@ -434,31 +545,37 @@ function delete_me() {
}
function get_certificate() {
toast("Urkunde wird generiert...");
- const browserlocale = ((navigator.languages && navigator.languages[0]) || '').substr(0, 2);
+ const browserlocale = (
+ (navigator.languages && navigator.languages[0]) ||
+ ""
+ ).substr(0, 2);
let url = `${config.baseurl_documentserver}certificates?locale=${browserlocale}&download=true&key=${config.documentserver_key}`;
let postdata = Object.assign({}, state.fullobject);
postdata.group = {
- name: postdata.group
- }
- postdata = [postdata]
- axios.post(url, postdata, {
- responseType: "blob"
- })
+ name: postdata.group,
+ };
+ postdata = [postdata];
+ axios
+ .post(url, postdata, {
+ responseType: "blob",
+ })
.then((response) => {
- console.log(response)
+ console.log(response);
if (response.status != "200") {
toast.error("Urkunde konnte nicht generiert werden...");
} else {
- var fileURL = window.URL.createObjectURL(new Blob([response.data], { type: 'application/pdf' }));
- var fileLink = document.createElement('a');
+ var fileURL = window.URL.createObjectURL(
+ new Blob([response.data], { type: "application/pdf" })
+ );
+ var fileLink = document.createElement("a");
fileLink.href = fileURL;
- fileLink.setAttribute('download', 'Certificate.pdf');
+ fileLink.setAttribute("download", "Certificate.pdf");
document.body.appendChild(fileLink);
fileLink.click();
fileLink.remove();
- toast("Urkunde generiert!",{type:TYPE.SUCCESS});
+ toast("Urkunde generiert!", { type: TYPE.SUCCESS });
}
})
.catch((err) => {
@@ -466,4 +583,12 @@ function get_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 });
+}
\ No newline at end of file