mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
Merge branch 'master' into stage2
This commit is contained in:
commit
b63cf744fe
@ -33,6 +33,14 @@ services:
|
||||
volumes:
|
||||
- ./logs:/var/log/grd_login
|
||||
- conan:/root/.conan
|
||||
|
||||
#########################################################
|
||||
## COMMUNITY SERVER (cakephp with php-fpm) ##############
|
||||
#########################################################
|
||||
community-server:
|
||||
volumes:
|
||||
- ./community_server
|
||||
|
||||
|
||||
#########################################################
|
||||
## NGINX ################################################
|
||||
|
||||
BIN
docu/menu-struktur.pdf
Normal file
BIN
docu/menu-struktur.pdf
Normal file
Binary file not shown.
29
docu/userstorry_button.txt
Normal file
29
docu/userstorry_button.txt
Normal file
@ -0,0 +1,29 @@
|
||||
## Gradido Button
|
||||
|
||||
Erklärung:
|
||||
Es soll eine einfache Möglichkeit geben, dass ein User einen anderen User Gradidos überweisen kann.
|
||||
Es gibt drei Varianten wie dies möglich sein soll.
|
||||
|
||||
- per Link - der link verweist auf das Überweisungsformular in der Gradido App.
|
||||
|
||||
- Button - der Button hat denselben Link
|
||||
|
||||
- QR-Code - der QR code ist derselbe link
|
||||
|
||||
## Aufbau des Links
|
||||
|
||||
- der link muss
|
||||
- den Hinweis auf den Community-Server ( community.com )
|
||||
- Und den Usernamen beinhalten. (u/username)
|
||||
!!! wichtig ist das der link eine Menschenlesbare Form hat
|
||||
|
||||
z.b. https://community.com/u/username
|
||||
|
||||
## Wichtig
|
||||
|
||||
Dies sollte im Profil an einer zentralen Stelle schnell für den User ersichtlich sein und nutzbar.
|
||||
Kopierhilfe, Button per HTML code generieren lassen.
|
||||
Der Link soll z.b. auch auf einer Visitenkarte lesbar und so kurz wie möglich sein.
|
||||
|
||||
|
||||
|
||||
@ -2,4 +2,5 @@ LOGIN_API_URL=http://localhost/login_api/
|
||||
COMMUNITY_API_STATE_BALANCE_URL=http://localhost/state-balances/
|
||||
COMMUNITY_API_TRANSACTION_CREATION_URL=http://localhost/transaction-creations/
|
||||
COMMUNITY_API_TRANSACTION_SEND_COINS=http://localhost/api
|
||||
VUE_PATH=/vue
|
||||
VUE_PATH=/vue
|
||||
APP_VERSION=0
|
||||
4
frontend/.gitignore
vendored
4
frontend/.gitignore
vendored
@ -19,4 +19,8 @@ package-lock.json
|
||||
*.njsproj
|
||||
*.sln
|
||||
|
||||
# coverage folder
|
||||
|
||||
coverage/
|
||||
|
||||
*~
|
||||
@ -1,13 +1,13 @@
|
||||
module.exports = {
|
||||
verbose: true,
|
||||
//collectCoverageFrom: ['**/*.{js,vue}', '!**/node_modules/**', '!**/?(*.)+(spec|test).js?(x)'],
|
||||
collectCoverageFrom: ['src/**/*.{js,vue}', '!**/node_modules/**', '!**/?(*.)+(spec|test).js?(x)'],
|
||||
moduleFileExtensions: [
|
||||
'js',
|
||||
//'jsx',
|
||||
'json',
|
||||
'vue',
|
||||
],
|
||||
coverageReporters: ['lcov'],
|
||||
// coverageReporters: ['lcov', 'text'],
|
||||
moduleNameMapper: {
|
||||
'^@/(.*)$': '<rootDir>/src/$1',
|
||||
'\\.(css|less)$': 'identity-obj-proxy',
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
"lint": "eslint --ext .js,.vue .",
|
||||
"dev": "yarn run serve",
|
||||
"i18n:report": "vue-cli-service i18n:report --src './src/**/*.?(js|vue)' --locales './src/locales/**/*.json'",
|
||||
"test": "jest"
|
||||
"test": "jest --coverage"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.13.13",
|
||||
|
||||
@ -40,11 +40,11 @@
|
||||
<span>Transactions</span>
|
||||
</router-link>
|
||||
<!--
|
||||
<router-link to="/activity" class="dropdown-item text-lg text-muted">
|
||||
<i class="ni ni-calendar-grid-58"></i>
|
||||
<span>{{ $t('site.navbar.activity') }}</span>
|
||||
</router-link>
|
||||
-->
|
||||
<router-link to="/activity" class="dropdown-item text-lg text-muted">
|
||||
<i class="ni ni-calendar-grid-58"></i>
|
||||
<span>{{ $t('site.navbar.activity') }}</span>
|
||||
</router-link>
|
||||
-->
|
||||
<div class="dropdown-divider"></div>
|
||||
<div @click="logout" class="dropdown-item text-lg text-muted">
|
||||
<i class="ni ni-support-16"></i>
|
||||
@ -75,6 +75,17 @@
|
||||
<slot name="links"></slot>
|
||||
</ul>
|
||||
<hr class="my-3" />
|
||||
<ul class="navbar-nav mb-md-3">
|
||||
<li class="nav-item">
|
||||
<a
|
||||
:href="`https://elopage.com/s/gradido/sign_in?locale=${$i18n.locale}`"
|
||||
class="nav-link text-lg"
|
||||
>
|
||||
{{ $t('site.sidebar.members_area') }}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<hr class="my-3" />
|
||||
<ul class="navbar-nav mb-md-3">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-lg" href="#!" @click="logout">
|
||||
|
||||
@ -7,6 +7,7 @@ const environment = {
|
||||
NODE_ENV: process.env.NODE_ENV,
|
||||
DEBUG: process.env.NODE_ENV !== 'production' || false,
|
||||
PRODUCTION: process.env.NODE_ENV === 'production' || false,
|
||||
APP_VERSION: process.env.APP_VERSION || require('../../package.json').version,
|
||||
}
|
||||
|
||||
const server = {
|
||||
|
||||
@ -1,13 +1,14 @@
|
||||
{
|
||||
"message": "hallo gradido !!",
|
||||
"welcome":"Willkommen!",
|
||||
"community": "Gemeinschaft",
|
||||
"logout":"Abmelden",
|
||||
"login":"Login",
|
||||
"signup": "Registrieren",
|
||||
"imprint":"Impressum",
|
||||
"privacy_policy":"Datenschutzerklärung",
|
||||
"back":"Zurück",
|
||||
"sent":"Senden",
|
||||
"send":"Senden",
|
||||
"transactions":"Transaktionen",
|
||||
"language":"Language",
|
||||
"languages":{
|
||||
@ -15,7 +16,11 @@
|
||||
"en": "English"
|
||||
},
|
||||
"form": {
|
||||
"attention": "<strong>Achtung!</strong> Bitte überprüfe alle deine Eingaben sehr genau. Du bist alleine Verantwortlich für deine Entscheidungen. Versendete Gradidos können nicht wieder zurück geholt werden.",
|
||||
"cancel":"Abbrechen",
|
||||
"close":"schließen",
|
||||
"receiver":"Empfänger",
|
||||
"sender":"Absender",
|
||||
"firstname":"Vorname",
|
||||
"lastname":"Nachname",
|
||||
"email":"eMail",
|
||||
@ -23,13 +28,19 @@
|
||||
"password":"Passwort",
|
||||
"password_repeat":"Passwort wiederholen",
|
||||
"amount":"Betrag",
|
||||
"memo":"Info",
|
||||
"memo":"Nachricht für den Empfänger",
|
||||
"message":"Nachricht",
|
||||
"date":"Datum",
|
||||
"from":"von",
|
||||
"to":"bis",
|
||||
"at":"am",
|
||||
"send_now":"Jetzt versenden"
|
||||
"time":"Zeit",
|
||||
"send_now":"Jetzt versenden",
|
||||
"scann_code":"<strong>QR Code Scanner</strong> - Scanne den QR Code deines Partners",
|
||||
"max_gdd_info":"maximale anzahl GDD zum versenden erreicht!",
|
||||
"send_check":"Bestätige deine Zahlung. Prüfe bitte nochmal alle Daten!",
|
||||
"thx":"Danke!",
|
||||
"send_success":"Deine Zahlung wurde erfolgreich versendet."
|
||||
},
|
||||
"transaction":{
|
||||
"show_part": "Die letzten <strong>{count}</strong> Transaktionen",
|
||||
@ -61,10 +72,18 @@
|
||||
"subtitle": "Wir haben dir eine eMail gesendet."
|
||||
},
|
||||
"overview":{
|
||||
"account_overview":"Kontoübersicht",
|
||||
"since_last_month": "seid letzten Monat",
|
||||
"send_gradido":"Gradido versenden",
|
||||
"add_work":"neuer Gemeinschaftsbeitrag"
|
||||
"account_overview":"Kontoübersicht",
|
||||
"since_last_month": "seid letzten Monat",
|
||||
"send_gradido":"Gradido versenden",
|
||||
"add_work":"neuer Gemeinschaftsbeitrag"
|
||||
},
|
||||
"profil": {
|
||||
"transactions":"transactions",
|
||||
"activity": {
|
||||
"chart":"Gemeinschaftsstunden Chart",
|
||||
"new":"Neue Gemeinschaftsstunden eintragen",
|
||||
"list":"Meine Gemeinschaftsstunden Liste"
|
||||
}
|
||||
},
|
||||
"navbar" : {
|
||||
"my-profil":"Mein Profil",
|
||||
@ -72,24 +91,19 @@
|
||||
"activity":"Aktivität",
|
||||
"support":"Support"
|
||||
},
|
||||
"sidebar" : {
|
||||
"community":"Gemeinschaft",
|
||||
"members_area":"Mitgliederbereich",
|
||||
"membership":"Mitgliedschaft",
|
||||
"language":"Sprachen"
|
||||
},
|
||||
"landing1" : {
|
||||
"explore": "Erkunden Sie Gradido",
|
||||
"text": "Gesundes Geld für eine gesunde Welt — Das Gradido-Modell kann weltweiten Wohlstand und Frieden schaffen",
|
||||
"link": "Seiten erkunden"
|
||||
},
|
||||
"404" : {
|
||||
"ooops" : "Ooops!",
|
||||
"text" : "Seite nicht gefunden. Aber keine Sorge, wir haben noch viele andere Seiten zum Erkunden",
|
||||
"back" : "Zurück zur Übersicht!"
|
||||
"ooops" : "Ooops!",
|
||||
"text" : "Seite nicht gefunden. Aber keine Sorge, wir haben noch viele andere Seiten zum Erkunden",
|
||||
"back" : "Zurück zur Übersicht!"
|
||||
}
|
||||
},
|
||||
"nav": {
|
||||
"features": "Neuigkeiten"
|
||||
"communitys":{
|
||||
"form":{
|
||||
"hours":"Stunden",
|
||||
"date_period":"Datum / Zeitraum",
|
||||
"more_hours":"weitere Stunden",
|
||||
"submit":"Einreichen",
|
||||
"hours_report":"Stundenbericht"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,13 +1,14 @@
|
||||
{
|
||||
"message": "hello gradido !!",
|
||||
"welcome":"Welcome!",
|
||||
"community": "Gemeinschaft",
|
||||
"logout":"Logout",
|
||||
"login":"Login",
|
||||
"signup": "Sign up",
|
||||
"imprint":"Legal notice",
|
||||
"privacy_policy":"Privacy policy",
|
||||
"back":"Back",
|
||||
"sent":"Send",
|
||||
"send":"Send",
|
||||
"transactions":"Transactions",
|
||||
"language":"Sprache",
|
||||
"languages":{
|
||||
@ -15,7 +16,11 @@
|
||||
"en": "English"
|
||||
},
|
||||
"form": {
|
||||
"attention": "Achtung! Bitte überprüfe alle deine Eingaben sehr genau. Du bist alleine Verantwortlich für deine Entscheidungen. Versendete Gradidos können nicht wieder zurück geholt werden.",
|
||||
"cancel":"Cancel",
|
||||
"close":"Close",
|
||||
"receiver":"Receiver",
|
||||
"sender":"Sender",
|
||||
"firstname":"Firstname",
|
||||
"lastname":"Lastname",
|
||||
"email":"Email",
|
||||
@ -23,14 +28,19 @@
|
||||
"password":"Password",
|
||||
"password_repeat":"Repeat password",
|
||||
"amount":"Amount",
|
||||
"memo":"Memo",
|
||||
"memo":"Message for the recipient",
|
||||
"message":"Message",
|
||||
"date":"Date",
|
||||
"from":"from",
|
||||
"to":"to",
|
||||
"at":"at",
|
||||
"time":"Time",
|
||||
"send_now":"Send now"
|
||||
"send_now":"Send now",
|
||||
"scann_code":"<strong>QR Code Scanner</strong> - Scanne den QR Code deines Partners",
|
||||
"max_gdd_info":"maximale anzahl GDD zum versenden erreicht!",
|
||||
"send_check":"Bestätige deine Zahlung. Prüfe bitte nochmal alle Daten!",
|
||||
"thx":"THX",
|
||||
"send_success":"Deine Zahlung wurde erfolgreich versendet."
|
||||
},
|
||||
"transaction":{
|
||||
"show_part": "The last <strong>{count}</strong> transactions",
|
||||
@ -67,30 +77,33 @@
|
||||
"send_gradido":"Send Gradido",
|
||||
"add_work":"New Community Contribution"
|
||||
},
|
||||
"profil": {
|
||||
"transactions":"transactions",
|
||||
"activity": {
|
||||
"chart":"Community Hours Chart",
|
||||
"new":"Register new community hours",
|
||||
"list":"My Community Hours List"
|
||||
}
|
||||
},
|
||||
"navbar" : {
|
||||
"my-profil":"My profile",
|
||||
"settings":"Settings",
|
||||
"activity":"Activity",
|
||||
"support":"Support"
|
||||
},
|
||||
"sidebar" : {
|
||||
"community":"Community",
|
||||
"members_area":"Members area",
|
||||
"membership":"Membership",
|
||||
"language":"Languages"
|
||||
},
|
||||
"landing1" : {
|
||||
"explore":"Explore Gradido",
|
||||
"text":"Healthy money for a healthy world — the Gradido model can create global prosperity and peace",
|
||||
"link":"Explore pages"
|
||||
},
|
||||
"404" : {
|
||||
"ooops" : "Ooops!",
|
||||
"text" : "Page not found. Do not worry though, we have plenty of other pages to explore",
|
||||
"back" : "Back to dashboard!"
|
||||
}
|
||||
},
|
||||
"nav": {
|
||||
"features": "Features"
|
||||
"communitys":{
|
||||
"form":{
|
||||
"hours":"hours",
|
||||
"date_period":"Date / Period",
|
||||
"more_hours":"more hours",
|
||||
"submit":"submit",
|
||||
"hours_report":"Hourly report"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,7 +5,7 @@ import NotFound from '@/views/NotFoundPage.vue'
|
||||
|
||||
const routes = [
|
||||
{
|
||||
path: '/',
|
||||
path: '/login',
|
||||
redirect: 'login',
|
||||
component: AuthLayoutGDD,
|
||||
children: [
|
||||
@ -33,7 +33,7 @@ const routes = [
|
||||
],
|
||||
},
|
||||
{
|
||||
path: '/',
|
||||
path: '/overview',
|
||||
redirect: 'overview',
|
||||
component: DashboardLayout,
|
||||
children: [
|
||||
|
||||
@ -126,7 +126,7 @@ export const store = new Vuex.Store({
|
||||
if (result.success) {
|
||||
commit('user_balance', result.result.data.balance)
|
||||
} else {
|
||||
dispatch('logout')
|
||||
//dispatch('logout')
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
<b-tab :title="names.thisMonth" active>
|
||||
<b-row>
|
||||
<b-col lg="3">
|
||||
<base-input label="Stunden">
|
||||
<base-input :label="$t('communitys.form.hours')">
|
||||
<b-form-input
|
||||
type="number"
|
||||
size="lg"
|
||||
@ -12,7 +12,7 @@
|
||||
style="font-size: xx-large; padding-left: 5px"
|
||||
/>
|
||||
</base-input>
|
||||
<base-input label="Datum / Zeitraum">
|
||||
<base-input :label="$t('communitys.form.date_period')">
|
||||
<flat-pickr
|
||||
class="form-control"
|
||||
v-model="date"
|
||||
@ -22,7 +22,7 @@
|
||||
</base-input>
|
||||
</b-col>
|
||||
<b-col lg="9">
|
||||
<base-input label="Arbeitsreport">
|
||||
<base-input :label="$t('communitys.form.hours_report')">
|
||||
<textarea
|
||||
class="form-control"
|
||||
rows="5"
|
||||
@ -37,10 +37,14 @@
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col md="6">
|
||||
<b-button @click.prevent="newWorkForm" variant="warning">+ weitere Stunden</b-button>
|
||||
<b-button @click.prevent="newWorkForm" variant="warning">
|
||||
+ {{ $t('communitys.form.more_hours') }}
|
||||
</b-button>
|
||||
</b-col>
|
||||
<b-col md="6" class="text-right">
|
||||
<b-button variant="success" @click.prevent="submitForm2">Einreichen, absenden</b-button>
|
||||
<b-button variant="success" @click.prevent="submitForm2">
|
||||
{{ $t('communitys.form.submit') }}
|
||||
</b-button>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</b-tab>
|
||||
|
||||
@ -2,22 +2,17 @@
|
||||
<div>
|
||||
<b-row v-show="row_form">
|
||||
<b-col xl="12" md="12">
|
||||
<b-alert variant="warning" show dismissible>
|
||||
<strong>Achtung!</strong>
|
||||
Bitte überprüfe alle deine Eingaben sehr genau. Du bist alleine Verantwortlich für deine
|
||||
Entscheidungen. Versendete Gradidos können nicht wieder zurück geholt werden.
|
||||
</b-alert>
|
||||
<b-alert variant="warning" show dismissible v-html="$t('form.attention')"></b-alert>
|
||||
<b-card class="p-0 p-md-3" style="background-color: #ebebeba3 !important">
|
||||
<b-alert show variant="secondary">
|
||||
<span class="alert-text">
|
||||
<strong>QR Code Scanner</strong>
|
||||
- Scanne den QR Code deines Partners
|
||||
</span>
|
||||
<span class="alert-text" v-html="$t('form.scann_code')"></span>
|
||||
<b-col v-show="!scan" lg="12" class="text-right">
|
||||
<img src="/img/icons/gradido/qr-scan-pure.png" height="50" @click="scan = true" />
|
||||
</b-col>
|
||||
<b-alert v-show="scan" show variant="warning">
|
||||
<span class="alert-text" @click="scan = false"><strong>schließen!</strong></span>
|
||||
<span class="alert-text" @click="scan = false">
|
||||
<strong>{{ $t('form.cancel') }}</strong>
|
||||
</span>
|
||||
</b-alert>
|
||||
<div v-if="scan">
|
||||
<!-- <b-row>
|
||||
@ -30,10 +25,7 @@
|
||||
<b-row>
|
||||
<b-col lg="8">
|
||||
<b-alert show variant="secondary">
|
||||
<span class="alert-text">
|
||||
<strong>QR Code Scanner</strong>
|
||||
- Scanne den QR Code deines Partners
|
||||
</span>
|
||||
<span class="alert-text" v-html="$t('form.scann_code')"></span>
|
||||
</b-alert>
|
||||
</b-col>
|
||||
</b-row>
|
||||
@ -54,7 +46,7 @@
|
||||
</div>
|
||||
<br />
|
||||
<div>
|
||||
<b-col class="text-left p-3 p-sm-1">Empfänger</b-col>
|
||||
<b-col class="text-left p-3 p-sm-1">{{ $t('form.receiver') }}</b-col>
|
||||
|
||||
<b-input-group
|
||||
id="input-group-1"
|
||||
@ -80,9 +72,9 @@
|
||||
</div>
|
||||
<br />
|
||||
<div>
|
||||
<b-col class="text-left p-3 p-sm-1">Betrag</b-col>
|
||||
<b-col class="text-left p-3 p-sm-1">{{ $t('form.amount') }}</b-col>
|
||||
<b-col v-if="$store.state.user.balance == form.amount" class="text-right">
|
||||
<b-badge variant="primary">maximale anzahl GDD zum versenden erreicht!</b-badge>
|
||||
<b-badge variant="primary">{{ $t('form.max_gdd_info') }}</b-badge>
|
||||
</b-col>
|
||||
<b-input-group
|
||||
id="input-group-2"
|
||||
@ -105,7 +97,7 @@
|
||||
style="font-size: xx-large; padding-left: 20px"
|
||||
></b-form-input>
|
||||
</b-input-group>
|
||||
<b-col class="text-left p-3 p-sm-1">Nachricht für den Empfänger</b-col>
|
||||
<b-col class="text-left p-3 p-sm-1">{{ $t('form.memo') }}</b-col>
|
||||
|
||||
<b-input-group>
|
||||
<b-input-group-prepend class="p-3 d-none d-md-block">
|
||||
@ -142,34 +134,37 @@
|
||||
</b-row>
|
||||
<b-row v-show="row_check">
|
||||
<b-col>
|
||||
<div class="display-4 p-4">Bestätige deine Zahlung. Prüfe bitte nochmal alle Daten!</div>
|
||||
<div class="display-4 p-4">{{ $t('form.send_check') }}</div>
|
||||
|
||||
<b-list-group>
|
||||
<b-list-group-item active>Meine Zahlung</b-list-group-item>
|
||||
<b-list-group-item class="d-flex justify-content-between align-items-center">
|
||||
{{ ajaxCreateData.email }}
|
||||
<b-badge variant="primary" pill>Empfänger</b-badge>
|
||||
{{ $store.state.ajaxCreateData.email }}
|
||||
<b-badge variant="primary" pill>{{ $t('form.receiver') }}</b-badge>
|
||||
</b-list-group-item>
|
||||
|
||||
<b-list-group-item class="d-flex justify-content-between align-items-center">
|
||||
{{ ajaxCreateData.amount }} GDD
|
||||
<b-badge variant="primary" pill>Betrag</b-badge>
|
||||
{{ $store.state.ajaxCreateData.amount }} GDD
|
||||
<b-badge variant="primary" pill>{{ $t('form.amount') }}</b-badge>
|
||||
</b-list-group-item>
|
||||
|
||||
<b-list-group-item class="d-flex justify-content-between align-items-center">
|
||||
{{ ajaxCreateData.memo }}
|
||||
<b-badge variant="primary" pill>Nachricht</b-badge>
|
||||
{{ $store.state.ajaxCreateData.memo }}
|
||||
<b-badge variant="primary" pill>{{ $t('form.message') }}</b-badge>
|
||||
</b-list-group-item>
|
||||
<b-list-group-item class="d-flex justify-content-between align-items-center">
|
||||
{{ $moment(ajaxCreateData.target_date).format('DD.MM.YYYY - HH:mm:ss') }}
|
||||
<b-badge variant="primary" pill>Datum</b-badge>
|
||||
{{ $moment($store.state.ajaxCreateData.target_date).format('DD.MM.YYYY - HH:mm:ss') }}
|
||||
<b-badge variant="primary" pill>{{ $t('form.date') }}</b-badge>
|
||||
</b-list-group-item>
|
||||
</b-list-group>
|
||||
<hr />
|
||||
<b-row>
|
||||
<b-col><b-button @click="onReset">abbrechen</b-button></b-col>
|
||||
<b-col>
|
||||
<b-button @click="onReset">{{ $t('form.cancel') }}</b-button>
|
||||
</b-col>
|
||||
<b-col class="text-right">
|
||||
<b-button variant="success" @click="sendTransaction">jetzt versenden</b-button>
|
||||
<b-button variant="success" @click="sendTransaction">
|
||||
{{ $t('form.send_now') }}
|
||||
</b-button>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</b-col>
|
||||
@ -177,12 +172,12 @@
|
||||
<b-row v-show="row_thx">
|
||||
<b-col>
|
||||
<div class="display-1 p-4">
|
||||
Danke
|
||||
{{ $t('form.thx') }}
|
||||
<hr />
|
||||
Deine Zahlung wurde erfolgreich versendet.
|
||||
{{ $t('form.send_success') }}
|
||||
</div>
|
||||
|
||||
<b-button variant="success" @click="onReset">schließen</b-button>
|
||||
<b-button variant="success" @click="onReset">{{ $t('form.close') }}</b-button>
|
||||
<hr />
|
||||
</b-col>
|
||||
</b-row>
|
||||
@ -229,6 +224,7 @@ export default {
|
||||
computed: {},
|
||||
methods: {
|
||||
async onDecode(decodedString) {
|
||||
//console.log('onDecode JSON.parse(decodedString)', JSON.parse(decodedString))
|
||||
const arr = JSON.parse(decodedString)
|
||||
this.form.email = arr[0].email
|
||||
this.form.amount = arr[0].amount
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
:key="item.id"
|
||||
style="background-color: #ebebeba3 !important"
|
||||
>
|
||||
<div class="d-flex w-100 justify-content-between" @click="toogle(item)">
|
||||
<div class="d-flex w-100 justify-content-between">
|
||||
<b-icon
|
||||
v-if="item.type === 'send'"
|
||||
icon="box-arrow-left"
|
||||
@ -33,10 +33,15 @@
|
||||
<b-collapse :id="'a' + item.transaction_id" class="mt-2">
|
||||
<b-card>
|
||||
<b-list-group>
|
||||
<b-list-group-item>
|
||||
<b-badge class="mr-4" variant="primary" pill>name</b-badge>
|
||||
<b-list-group-item v-if="item.type === 'send'">
|
||||
<b-badge class="mr-4" variant="primary" pill>{{ $t('form.receiver') }}</b-badge>
|
||||
{{ item.name }}
|
||||
</b-list-group-item>
|
||||
<b-list-group-item v-else>
|
||||
<b-badge class="mr-4" variant="primary" pill>{{ $t('form.sender') }}</b-badge>
|
||||
{{ item.name }}
|
||||
</b-list-group-item>
|
||||
|
||||
<b-list-group-item>
|
||||
<b-badge class="mr-4" variant="primary" pill>type</b-badge>
|
||||
{{ item.type }}
|
||||
@ -46,7 +51,7 @@
|
||||
{{ item.transaction_id }}
|
||||
</b-list-group-item>
|
||||
<b-list-group-item>
|
||||
<b-badge class="mr-4" variant="primary" pill>date</b-badge>
|
||||
<b-badge class="mr-4" variant="primary" pill>{{ $t('form.date') }}</b-badge>
|
||||
{{ item.date }}
|
||||
</b-list-group-item>
|
||||
<b-list-group-item>
|
||||
@ -54,7 +59,7 @@
|
||||
{{ item.balance }}
|
||||
</b-list-group-item>
|
||||
<b-list-group-item>
|
||||
<b-badge class="mr-4" variant="primary" pill>memo</b-badge>
|
||||
<b-badge class="mr-4" variant="primary" pill>{{ $t('form.memo') }}</b-badge>
|
||||
{{ item.memo }}
|
||||
</b-list-group-item>
|
||||
</b-list-group>
|
||||
@ -134,10 +139,6 @@ export default {
|
||||
if (item.type === 'send') return 'table-warning'
|
||||
if (item.type === 'creation') return 'table-primary'
|
||||
},
|
||||
toogle(item) {
|
||||
const temp =
|
||||
'<b-collapse visible v-bind:id="item.id">xxx <small class="text-muted">porta</small></b-collapse>'
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -5,6 +5,10 @@
|
||||
<div class="copyright text-center text-lg-center text-muted">
|
||||
© {{ year }}
|
||||
<a href="#/Login" class="font-weight-bold ml-1">Gradido-Akademie</a>
|
||||
|
|
||||
<a href="https://github.com/gradido/gradido/releases/latest" target="_blank">
|
||||
App Verion {{ version }}
|
||||
</a>
|
||||
</div>
|
||||
</b-col>
|
||||
</b-row>
|
||||
@ -20,19 +24,25 @@
|
||||
<b-nav-item :href="`https://gradido.net/${$i18n.locale}/datenschutz/`" target="_blank">
|
||||
{{ $t('privacy_policy') }}
|
||||
</b-nav-item>
|
||||
<!--<b-nav-item href="#!" to="/explorer" >
|
||||
GDD-Explorer
|
||||
</b-nav-item> -->
|
||||
<b-nav-item
|
||||
:href="`https://elopage.com/s/gradido/sign_in?locale=${$i18n.locale}`"
|
||||
target="_blank"
|
||||
>
|
||||
{{ $t('site.sidebar.members_area') }}
|
||||
</b-nav-item>
|
||||
</b-nav>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</footer>
|
||||
</template>
|
||||
<script>
|
||||
import CONFIG from '../../config'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
year: new Date().getFullYear(),
|
||||
version: CONFIG.APP_VERSION,
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
144
frontend/src/views/Layout/DashboardLayout_gdd.spec.js
Normal file
144
frontend/src/views/Layout/DashboardLayout_gdd.spec.js
Normal file
@ -0,0 +1,144 @@
|
||||
import { mount, RouterLinkStub } from '@vue/test-utils'
|
||||
import VueRouter from 'vue-router'
|
||||
import Vuex from 'vuex'
|
||||
import flushPromises from 'flush-promises'
|
||||
import routes from '../../routes/routes'
|
||||
import DashboardLayoutGdd from './DashboardLayout_gdd'
|
||||
|
||||
jest.useFakeTimers()
|
||||
|
||||
const localVue = global.localVue
|
||||
|
||||
const router = new VueRouter({ routes })
|
||||
|
||||
const transitionStub = () => ({
|
||||
render(h) {
|
||||
return this.$options._renderChildren
|
||||
},
|
||||
})
|
||||
|
||||
describe('DashboardLayoutGdd', () => {
|
||||
let wrapper
|
||||
|
||||
let mocks = {
|
||||
$i18n: {
|
||||
locale: 'en',
|
||||
},
|
||||
$t: jest.fn((t) => t),
|
||||
$n: jest.fn(),
|
||||
}
|
||||
|
||||
let state = {
|
||||
user: {
|
||||
name: 'Peter Lustig',
|
||||
balance: 2546,
|
||||
balance_gdt: 20,
|
||||
},
|
||||
email: 'peter.lustig@example.org',
|
||||
}
|
||||
|
||||
let stubs = {
|
||||
RouterLink: RouterLinkStub,
|
||||
FadeTransition: transitionStub(),
|
||||
}
|
||||
|
||||
let store = new Vuex.Store({
|
||||
state,
|
||||
})
|
||||
|
||||
const Wrapper = () => {
|
||||
return mount(DashboardLayoutGdd, { localVue, mocks, router, store, stubs })
|
||||
}
|
||||
|
||||
describe('mount', () => {
|
||||
beforeEach(() => {
|
||||
wrapper = Wrapper()
|
||||
})
|
||||
|
||||
it('has a sidebar', () => {
|
||||
expect(wrapper.find('nav#sidenav-main').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
it('has a notifications component', () => {
|
||||
expect(wrapper.find('div.notifications').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
it('has a main content div', () => {
|
||||
expect(wrapper.find('div.main-content').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
it('has a footer inside the main content', () => {
|
||||
expect(wrapper.find('div.main-content').find('footer.footer').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
describe('navigation bar', () => {
|
||||
let navbar
|
||||
|
||||
beforeEach(() => {
|
||||
navbar = wrapper.findAll('ul.navbar-nav').at(0)
|
||||
})
|
||||
|
||||
it('has five items in the navbar', () => {
|
||||
expect(navbar.findAll('ul > li')).toHaveLength(5)
|
||||
})
|
||||
|
||||
it('has first item "send" in navbar', () => {
|
||||
expect(navbar.findAll('ul > li').at(0).text()).toEqual('sent')
|
||||
})
|
||||
|
||||
it('has first item "send" linked to overview in navbar', () => {
|
||||
navbar.findAll('ul > li').at(0).trigger('click')
|
||||
expect(wrapper.findComponent(RouterLinkStub).props().to).toBe('/overview')
|
||||
})
|
||||
|
||||
it('has second item "transactions" in navbar', () => {
|
||||
expect(navbar.findAll('ul > li').at(1).text()).toEqual('transactions')
|
||||
})
|
||||
|
||||
// to do: get this working!
|
||||
it.skip('has second item "transactions" linked to transactions in navbar', async () => {
|
||||
navbar.findAll('ul > li > a').at(1).trigger('click')
|
||||
await flushPromises()
|
||||
await jest.runAllTimers()
|
||||
await flushPromises()
|
||||
expect(wrapper.findComponent(RouterLinkStub).props().to).toBe('/transactions')
|
||||
})
|
||||
|
||||
it('has third item "My profile" in navbar', () => {
|
||||
expect(navbar.findAll('ul > li').at(2).text()).toEqual('site.navbar.my-profil')
|
||||
})
|
||||
|
||||
it.skip('has third item "My profile" linked to profile in navbar', async () => {
|
||||
navbar.findAll('ul > li > a').at(2).trigger('click')
|
||||
await flushPromises()
|
||||
await jest.runAllTimers()
|
||||
await flushPromises()
|
||||
expect(wrapper.findComponent(RouterLinkStub).props().to).toBe('/profile')
|
||||
})
|
||||
|
||||
it('has fourth item "Settigs" in navbar', () => {
|
||||
expect(navbar.findAll('ul > li').at(3).text()).toEqual('site.navbar.settings')
|
||||
})
|
||||
|
||||
it.skip('has fourth item "Settings" linked to profileedit in navbar', async () => {
|
||||
navbar.findAll('ul > li > a').at(3).trigger('click')
|
||||
await flushPromises()
|
||||
await jest.runAllTimers()
|
||||
await flushPromises()
|
||||
expect(wrapper.findComponent(RouterLinkStub).props().to).toBe('/profileedit')
|
||||
})
|
||||
|
||||
it('has fifth item "Activity" in navbar', () => {
|
||||
expect(navbar.findAll('ul > li').at(4).text()).toEqual('site.navbar.activity')
|
||||
})
|
||||
|
||||
it.skip('has fourth item "Activity" linked to activity in navbar', async () => {
|
||||
navbar.findAll('ul > li > a').at(4).trigger('click')
|
||||
await flushPromises()
|
||||
await jest.runAllTimers()
|
||||
await flushPromises()
|
||||
expect(wrapper.findComponent(RouterLinkStub).props().to).toBe('/activity')
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
@ -4,7 +4,7 @@
|
||||
<side-bar>
|
||||
<template slot="links">
|
||||
<b-nav-item href="#!" to="/overview">
|
||||
<b-nav-text class="p-0 text-lg text-muted">{{ $t('sent') }}</b-nav-text>
|
||||
<b-nav-text class="p-0 text-lg text-muted">{{ $t('send') }}</b-nav-text>
|
||||
</b-nav-item>
|
||||
<b-nav-item href="#!" to="/transactions">
|
||||
<b-nav-text class="p-0 text-lg text-muted">{{ $t('transactions') }}</b-nav-text>
|
||||
@ -15,7 +15,6 @@
|
||||
<b-nav-item href="#!" to="/profileedit">
|
||||
<b-nav-text class="p-0 text-lg text-muted">{{ $t('site.navbar.settings') }}</b-nav-text>
|
||||
</b-nav-item>
|
||||
|
||||
<b-nav-item href="#!" to="/activity">
|
||||
<b-nav-text class="p-0 text-lg text-muted">{{ $t('site.navbar.activity') }}</b-nav-text>
|
||||
</b-nav-item>
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<div class="header pb-7 pt-5"></div>
|
||||
|
||||
<b-container fluid class="mt--6">
|
||||
<div class="display-4 mb-3">Gemeinschaftsstunden Chart</div>
|
||||
<div class="display-4 mb-3">{{ $t('site.profil.activity.chart') }}</div>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<div class="chart">
|
||||
@ -12,7 +12,7 @@
|
||||
</b-col>
|
||||
</b-row>
|
||||
<hr />
|
||||
<div class="display-4 mt-6">Neue Gemeinschaftsstunden eintragen</div>
|
||||
<div class="display-4 mt-6">{{ $t('site.profil.activity.new') }}</div>
|
||||
<b-row>
|
||||
<b-col>
|
||||
<gdd-add-work-2 />
|
||||
@ -20,10 +20,10 @@
|
||||
</b-row>
|
||||
|
||||
<hr />
|
||||
<div class="display-4 mb-3">Meine Gemeinschaftsstunden Liste</div>
|
||||
<div class="display-4 mb-3">{{ $t('site.profil.activity.list') }}</div>
|
||||
<b-row>
|
||||
<b-col class="mb-5">
|
||||
community
|
||||
{{ $t('community') }}
|
||||
<gdd-work-table></gdd-work-table>
|
||||
</b-col>
|
||||
</b-row>
|
||||
|
||||
@ -9,6 +9,13 @@ import { messages } from 'vee-validate/dist/locale/en.json'
|
||||
import BaseInput from '@/components/Inputs/BaseInput.vue'
|
||||
import BaseButton from '@/components/BaseButton.vue'
|
||||
import RegeneratorRuntime from 'regenerator-runtime'
|
||||
import Notifications from '@/components/NotificationPlugin'
|
||||
import SideBar from '@/components/SidebarPlugin'
|
||||
import VueRouter from 'vue-router'
|
||||
import BaseDropdown from '@/components/BaseDropdown.vue'
|
||||
import VueQrcode from 'vue-qrcode'
|
||||
|
||||
import clickOutside from '@/directives/click-ouside.js'
|
||||
|
||||
global.localVue = createLocalVue()
|
||||
|
||||
@ -24,7 +31,14 @@ global.localVue.use(BootstrapVue)
|
||||
global.localVue.use(Vuex)
|
||||
global.localVue.use(IconsPlugin)
|
||||
global.localVue.use(RegeneratorRuntime)
|
||||
global.localVue.use(Notifications)
|
||||
global.localVue.use(SideBar)
|
||||
global.localVue.use(VueRouter)
|
||||
global.localVue.use(VueQrcode)
|
||||
global.localVue.component(BaseInput.name, BaseInput)
|
||||
global.localVue.component('validation-provider', ValidationProvider)
|
||||
global.localVue.component('validation-observer', ValidationObserver)
|
||||
global.localVue.component(BaseButton.name, BaseButton)
|
||||
global.localVue.component(BaseDropdown.name, BaseDropdown)
|
||||
|
||||
global.localVue.directive('click-outside', clickOutside)
|
||||
|
||||
@ -221,7 +221,7 @@ Poco::JSON::Object* JsonCreateTransaction::groupMemberUpdate(Poco::Dynamic::Var
|
||||
return stateError("groupMemberUpdate not allowed with mysql blockchain");
|
||||
}
|
||||
if (mTargetGroup.isNull()) {
|
||||
return stateError("target_group not found");
|
||||
return stateError("group not found");
|
||||
}
|
||||
auto transaction = model::gradido::Transaction::createGroupMemberUpdate(mSession->getNewUser(), mTargetGroup);
|
||||
if (mAutoSign) {
|
||||
@ -293,7 +293,7 @@ bool JsonCreateTransaction::getTargetGroup(Poco::Dynamic::Var params)
|
||||
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
|
||||
try
|
||||
{
|
||||
auto target_group = paramJsonObject->get("target_group");
|
||||
auto target_group = paramJsonObject->get("group");
|
||||
if (!target_group.isEmpty()) {
|
||||
target_group.convert(target_group_alias);
|
||||
auto groups = controller::Group::load(target_group_alias);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user