Add nami field
This commit is contained in:
parent
d865e1a46d
commit
db375629fc
|
@ -34,7 +34,6 @@ class MemberResource extends JsonResource
|
||||||
'email' => $this->email,
|
'email' => $this->email,
|
||||||
'email_parents' => $this->email_parents,
|
'email_parents' => $this->email_parents,
|
||||||
'fax' => $this->fax,
|
'fax' => $this->fax,
|
||||||
'nami_id' => $this->nami_id,
|
|
||||||
'country_id' => $this->country_id,
|
'country_id' => $this->country_id,
|
||||||
'region_id' => $this->region_id,
|
'region_id' => $this->region_id,
|
||||||
'nationality_id' => $this->nationality_id,
|
'nationality_id' => $this->nationality_id,
|
||||||
|
@ -43,6 +42,7 @@ class MemberResource extends JsonResource
|
||||||
'letter_address' => $this->letter_address,
|
'letter_address' => $this->letter_address,
|
||||||
'bill_kind_id' => $this->bill_kind_id,
|
'bill_kind_id' => $this->bill_kind_id,
|
||||||
'bill_kind_name' => optional($this->billKind)->name,
|
'bill_kind_name' => optional($this->billKind)->name,
|
||||||
|
'has_nami' => $this->nami_id !== null,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,3 +2,4 @@
|
||||||
@import "tailwindcss/components";
|
@import "tailwindcss/components";
|
||||||
@import "tailwindcss/utilities";
|
@import "tailwindcss/utilities";
|
||||||
@import "base";
|
@import "base";
|
||||||
|
@import "switch";
|
||||||
|
|
|
@ -84,3 +84,21 @@
|
||||||
input, select {
|
input, select {
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input[type="date"],
|
||||||
|
input[type="datetime-local"],
|
||||||
|
input[type="time"],
|
||||||
|
input[type="month"],
|
||||||
|
select,
|
||||||
|
input[type="week"] {
|
||||||
|
height: 37px;
|
||||||
|
&::-webkit-inner-spin-button {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="date"]::-webkit-inner-spin-button,
|
||||||
|
input[type="date"]::-webkit-calendar-picker-indicator {
|
||||||
|
display: none;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
:root {
|
||||||
|
--margin: 0.2rem;
|
||||||
|
--n-width: 37px;
|
||||||
|
--sm-width: 35px;
|
||||||
|
--sm-margin: 0.2rem;
|
||||||
|
--xs-width: 23px;
|
||||||
|
--xs-margin: 0.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.field-switch {
|
||||||
|
input:checked + span {
|
||||||
|
transition: background 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.display {
|
||||||
|
width: calc(var(--n-width) * 2);
|
||||||
|
height: var(--n-width);
|
||||||
|
border-radius: 0.3rem;
|
||||||
|
var {
|
||||||
|
width: calc(var(--n-width) - var(--margin) * 2);
|
||||||
|
height: calc(var(--n-width) - var(--margin) * 2);
|
||||||
|
top: var(--margin);
|
||||||
|
left: var(--margin);
|
||||||
|
transition: left 0.3s;
|
||||||
|
}
|
||||||
|
& > span:nth-of-type(1) {
|
||||||
|
position: absolute;
|
||||||
|
width: calc(var(--n-width) - var(--margin));
|
||||||
|
height: calc(var(--n-width) - var(--margin) * 2);
|
||||||
|
top: var(--margin);
|
||||||
|
left: var(--margin);
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
& > span:nth-of-type(2) {
|
||||||
|
position: absolute;
|
||||||
|
width: calc(var(--n-width) - var(--margin));
|
||||||
|
height: calc(var(--n-width) - var(--margin) * 2);
|
||||||
|
top: var(--margin);
|
||||||
|
left: calc(100% - var(--n-width));
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
input:checked + .display var {
|
||||||
|
left: calc(var(--n-width) + var(--margin));
|
||||||
|
transition: left 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------- small size ---------------------------------- */
|
||||||
|
.inner-field.h-field-sm {
|
||||||
|
input:checked + .display var {
|
||||||
|
left: calc(var(--sm-width) + var(--sm-margin));
|
||||||
|
}
|
||||||
|
|
||||||
|
.display {
|
||||||
|
width: calc(var(--sm-width) * 2);
|
||||||
|
height: var(--sm-width);
|
||||||
|
var {
|
||||||
|
width: calc(var(--sm-width) - var(--sm-margin) * 2);
|
||||||
|
height: calc(var(--sm-width) - var(--sm-margin) * 2);
|
||||||
|
top: var(--sm-margin);
|
||||||
|
left: var(--sm-margin);
|
||||||
|
}
|
||||||
|
& > span:nth-of-type(1) {
|
||||||
|
width: calc(var(--sm-width) - var(--sm-margin));
|
||||||
|
height: calc(var(--sm-width) - var(--sm-margin) * 2);
|
||||||
|
top: var(--sm-margin);
|
||||||
|
left: var(--sm-margin);
|
||||||
|
}
|
||||||
|
& > span:nth-of-type(2) {
|
||||||
|
width: calc(var(--sm-width) - var(--sm-margin));
|
||||||
|
height: calc(var(--sm-width) - var(--sm-margin) * 2);
|
||||||
|
top: var(--sm-margin);
|
||||||
|
left: calc(100% - var(--sm-width));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------ very small size -------------------------------- */
|
||||||
|
.inner-field.h-field-xs {
|
||||||
|
input:checked + .display var {
|
||||||
|
left: calc(var(--xs-width) + var(--xs-margin));
|
||||||
|
}
|
||||||
|
|
||||||
|
.display {
|
||||||
|
width: calc(var(--xs-width) * 2);
|
||||||
|
height: var(--xs-width);
|
||||||
|
var {
|
||||||
|
width: calc(var(--xs-width) - var(--xs-margin) * 2);
|
||||||
|
height: calc(var(--xs-width) - var(--xs-margin) * 2);
|
||||||
|
top: var(--xs-margin);
|
||||||
|
left: var(--xs-margin);
|
||||||
|
}
|
||||||
|
& > span:nth-of-type(1) {
|
||||||
|
width: calc(var(--xs-width) - var(--xs-margin));
|
||||||
|
height: calc(var(--xs-width) - var(--xs-margin) * 2);
|
||||||
|
top: var(--xs-margin);
|
||||||
|
left: var(--xs-margin);
|
||||||
|
}
|
||||||
|
& > span:nth-of-type(2) {
|
||||||
|
width: calc(var(--xs-width) - var(--xs-margin));
|
||||||
|
height: calc(var(--xs-width) - var(--xs-margin) * 2);
|
||||||
|
top: var(--xs-margin);
|
||||||
|
left: calc(100% - var(--xs-width));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ window.io = require('socket.io-client');
|
||||||
import Sprite from './components/Sprite.js';
|
import Sprite from './components/Sprite.js';
|
||||||
|
|
||||||
import FText from './components/FText.vue';
|
import FText from './components/FText.vue';
|
||||||
|
import FSwitch from './components/FSwitch.vue';
|
||||||
import FSelect from './components/FSelect.vue';
|
import FSelect from './components/FSelect.vue';
|
||||||
import FTextarea from './components/FTextarea.vue';
|
import FTextarea from './components/FTextarea.vue';
|
||||||
import Pages from './components/Pages.vue';
|
import Pages from './components/Pages.vue';
|
||||||
|
@ -14,6 +15,7 @@ import App from './layouts/App.vue';
|
||||||
|
|
||||||
Vue.use(plugin)
|
Vue.use(plugin)
|
||||||
Vue.component('f-text', FText);
|
Vue.component('f-text', FText);
|
||||||
|
Vue.component('f-switch', FSwitch);
|
||||||
Vue.component('f-select', FSelect);
|
Vue.component('f-select', FSelect);
|
||||||
Vue.component('f-textarea', FTextarea);
|
Vue.component('f-textarea', FTextarea);
|
||||||
Vue.component('sprite', Sprite);
|
Vue.component('sprite', Sprite);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<label class="flex flex-col relative" :for="id" :class="{['h-field-'+size]: inset === true}">
|
<label class="flex flex-col relative" :for="id" :class="{['h-field-'+size]: inset === true}">
|
||||||
<div class="relative h-full flex flex-col">
|
<div class="relative h-full flex flex-col">
|
||||||
<span v-if="label && !inset" class="font-semibold relative z-10 text-gray-400" :class="{
|
<span v-if="label && !inset" class="leading-none font-semibold relative z-10 text-gray-400" :class="{
|
||||||
'text-xs': size == 'sm',
|
'text-xs': size == 'sm',
|
||||||
'text-sm': size === null
|
'text-sm': size === null
|
||||||
}">{{ label }}<span v-show="required" class="text-red-300"> *</span></span>
|
}">{{ label }}<span v-show="required" class="text-red-300"> *</span></span>
|
||||||
|
@ -9,9 +9,9 @@
|
||||||
'text-xs': size == 'sm',
|
'text-xs': size == 'sm',
|
||||||
'text-sm': size === null
|
'text-sm': size === null
|
||||||
}" v-text="label"></span>
|
}" v-text="label"></span>
|
||||||
<div class="relative h-full" :class="{['h-field-'+size]: inset === false}">
|
<div class="relative h-full mt-1" :class="{['h-field-'+size]: inset === false}">
|
||||||
<select :value="value" @change="trigger"
|
<select :value="value" @change="trigger"
|
||||||
class="border-gray-600 border-solid bg-gray-700 w-full appearance-none outline-none h-full"
|
class="border-gray-600 border-solid bg-gray-700 w-full appearance-none outline-none"
|
||||||
:class="{
|
:class="{
|
||||||
'rounded-lg text-sm border-2 p-2 text-gray-300': size === null,
|
'rounded-lg text-sm border-2 p-2 text-gray-300': size === null,
|
||||||
'rounded-lg py-2 px-2 text-xs border-2 text-gray-800': size == 'sm'
|
'rounded-lg py-2 px-2 text-xs border-2 text-gray-800': size == 'sm'
|
||||||
|
|
|
@ -1,19 +1,15 @@
|
||||||
<template>
|
<template>
|
||||||
<label class="flex flex-col relative field-switch cursor-pointer" :for="id" :class="{[`size-${outerSize}`]: true}">
|
<label class="flex flex-col relative field-switch cursor-pointer" :for="id" :class="{[`size-${outerSize}`]: true}">
|
||||||
<span v-if="label && !inset" class="font-semibold leading-none text-gray-700" :class="{
|
<span v-if="label" class="font-semibold leading-none text-gray-400" :class="{
|
||||||
'text-xs': size == 'sm',
|
'text-xs': size == 'sm',
|
||||||
'text-sm': size === null
|
'text-sm': size === null
|
||||||
}">{{ label }}</span>
|
}">{{ label }}</span>
|
||||||
<span v-if="label && inset" class="z-10 absolute top-0 left-0 -mt-2 px-1 ml-3 inset-bg font-semibold text-gray-700" :class="{
|
<div class="relative inner-field mt-1" :class="`h-field-${fieldSize}`">
|
||||||
'text-xs': size == 'sm',
|
|
||||||
'text-sm': size === null
|
|
||||||
}">{{ label }}</span>
|
|
||||||
<div class="relative inner-field" :class="`h-field-${fieldSize}`">
|
|
||||||
<input :id="id" type="checkbox" v-model="v" :disabled="disabled" class="invisible absolute" />
|
<input :id="id" type="checkbox" v-model="v" :disabled="disabled" class="invisible absolute" />
|
||||||
<span class="relative cursor-pointer flex flex-grow display" :class="{'bg-primary': v === true, 'bg-gray-400': v === false}">
|
<span class="relative cursor-pointer flex flex-grow display" :class="{'bg-primary': v === true, 'bg-gray-700': v === false}">
|
||||||
<span><sprite class="relative text-white flex-none" :class="{'w-2 h-2': size === 'sm' || size == 'xs', 'w-6 h-6': size === null}" src="check"></sprite></span>
|
<span><sprite class="relative text-gray-400 flex-none" :class="{'w-2 h-2': size === 'sm' || size == 'xs', 'w-4 h-4': size === null}" src="check"></sprite></span>
|
||||||
<span><sprite class="relative text-white flex-none" :class="{'w-2 h-2': size === 'sm' || size == 'xs', 'w-6 h-6': size === null}" src="close"></sprite></span>
|
<span><sprite class="relative text-gray-400 flex-none" :class="{'w-2 h-2': size === 'sm' || size == 'xs', 'w-4 h-4': size === null}" src="close"></sprite></span>
|
||||||
<var class="absolute overlay bg-white rounded top-0"></var>
|
<var class="absolute overlay bg-gray-400 rounded top-0"></var>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</label>
|
</label>
|
||||||
|
@ -102,118 +98,3 @@ export default {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="css">
|
|
||||||
:root {
|
|
||||||
--margin: 0.2rem;
|
|
||||||
--n-width: 2.5rem;
|
|
||||||
--sm-width: 35px;
|
|
||||||
--sm-margin: 0.2rem;
|
|
||||||
--xs-width: 23px;
|
|
||||||
--xs-margin: 0.2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.field-switch {
|
|
||||||
input:checked + span {
|
|
||||||
transition: background 0.3s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.display {
|
|
||||||
width: calc(var(--n-width) * 2);
|
|
||||||
height: var(--n-width);
|
|
||||||
border-radius: 0.3rem;
|
|
||||||
var {
|
|
||||||
width: calc(var(--n-width) - var(--margin) * 2);
|
|
||||||
height: calc(var(--n-width) - var(--margin) * 2);
|
|
||||||
top: var(--margin);
|
|
||||||
left: var(--margin);
|
|
||||||
transition: left 0.3s;
|
|
||||||
}
|
|
||||||
& > span:nth-of-type(1) {
|
|
||||||
position: absolute;
|
|
||||||
width: calc(var(--n-width) - var(--margin));
|
|
||||||
height: calc(var(--n-width) - var(--margin) * 2);
|
|
||||||
top: var(--margin);
|
|
||||||
left: var(--margin);
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
& > span:nth-of-type(2) {
|
|
||||||
position: absolute;
|
|
||||||
width: calc(var(--n-width) - var(--margin));
|
|
||||||
height: calc(var(--n-width) - var(--margin) * 2);
|
|
||||||
top: var(--margin);
|
|
||||||
left: calc(100% - var(--n-width));
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
input:checked + .display var {
|
|
||||||
left: calc(var(--n-width) + var(--margin));
|
|
||||||
transition: left 0.3s;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* --------------------------------- small size ---------------------------------- */
|
|
||||||
.inner-field.h-field-sm {
|
|
||||||
input:checked + .display var {
|
|
||||||
left: calc(var(--sm-width) + var(--sm-margin));
|
|
||||||
}
|
|
||||||
|
|
||||||
.display {
|
|
||||||
width: calc(var(--sm-width) * 2);
|
|
||||||
height: var(--sm-width);
|
|
||||||
var {
|
|
||||||
width: calc(var(--sm-width) - var(--sm-margin) * 2);
|
|
||||||
height: calc(var(--sm-width) - var(--sm-margin) * 2);
|
|
||||||
top: var(--sm-margin);
|
|
||||||
left: var(--sm-margin);
|
|
||||||
}
|
|
||||||
& > span:nth-of-type(1) {
|
|
||||||
width: calc(var(--sm-width) - var(--sm-margin));
|
|
||||||
height: calc(var(--sm-width) - var(--sm-margin) * 2);
|
|
||||||
top: var(--sm-margin);
|
|
||||||
left: var(--sm-margin);
|
|
||||||
}
|
|
||||||
& > span:nth-of-type(2) {
|
|
||||||
width: calc(var(--sm-width) - var(--sm-margin));
|
|
||||||
height: calc(var(--sm-width) - var(--sm-margin) * 2);
|
|
||||||
top: var(--sm-margin);
|
|
||||||
left: calc(100% - var(--sm-width));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------ very small size -------------------------------- */
|
|
||||||
.inner-field.h-field-xs {
|
|
||||||
input:checked + .display var {
|
|
||||||
left: calc(var(--xs-width) + var(--xs-margin));
|
|
||||||
}
|
|
||||||
|
|
||||||
.display {
|
|
||||||
width: calc(var(--xs-width) * 2);
|
|
||||||
height: var(--xs-width);
|
|
||||||
var {
|
|
||||||
width: calc(var(--xs-width) - var(--xs-margin) * 2);
|
|
||||||
height: calc(var(--xs-width) - var(--xs-margin) * 2);
|
|
||||||
top: var(--xs-margin);
|
|
||||||
left: var(--xs-margin);
|
|
||||||
}
|
|
||||||
& > span:nth-of-type(1) {
|
|
||||||
width: calc(var(--xs-width) - var(--xs-margin));
|
|
||||||
height: calc(var(--xs-width) - var(--xs-margin) * 2);
|
|
||||||
top: var(--xs-margin);
|
|
||||||
left: var(--xs-margin);
|
|
||||||
}
|
|
||||||
& > span:nth-of-type(2) {
|
|
||||||
width: calc(var(--xs-width) - var(--xs-margin));
|
|
||||||
height: calc(var(--xs-width) - var(--xs-margin) * 2);
|
|
||||||
top: var(--xs-margin);
|
|
||||||
left: calc(100% - var(--xs-width));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<label class="flex flex-col relative" :for="id" :class="{['h-field-'+size]: inset === true}">
|
<label class="flex flex-col relative" :for="id" :class="{['h-field-'+size]: inset === true}">
|
||||||
<div class="relative h-full flex flex-col">
|
<div class="relative h-full flex flex-col">
|
||||||
<span v-if="label && !inset" class="font-semibold relative z-10 text-gray-400" :class="{
|
<span v-if="label && !inset" class="font-semibold leading-none relative z-10 text-gray-400" :class="{
|
||||||
'text-xs': size == 'sm',
|
'text-xs': size == 'sm',
|
||||||
'text-sm': size === null
|
'text-sm': size === null
|
||||||
}">{{ label }}<span v-show="required" class="text-red-300"> *</span></span>
|
}">{{ label }}<span v-show="required" class="text-red-300"> *</span></span>
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
'text-xs': size == 'sm',
|
'text-xs': size == 'sm',
|
||||||
'text-sm': size === null
|
'text-sm': size === null
|
||||||
}" v-text="label"></span>
|
}" v-text="label"></span>
|
||||||
<div class="relative h-full" :class="{['h-field-'+size]: inset === false}">
|
<div class="relative h-full mt-1" :class="{['h-field-'+size]: inset === false}">
|
||||||
<input :type="type" :name="name" :value="transformedValue" @input="onInput" @change="onChange" :disabled="disabled" :placeholder="placeholder"
|
<input :type="type" :name="name" :value="transformedValue" @input="onInput" @change="onChange" :disabled="disabled" :placeholder="placeholder"
|
||||||
@focus="onFocus" @blur="onBlur"
|
@focus="onFocus" @blur="onBlur"
|
||||||
class="border-gray-600 border-solid bg-gray-700 w-full appearance-none outline-none h-full"
|
class="border-gray-600 border-solid bg-gray-700 w-full appearance-none outline-none h-full"
|
||||||
|
|
|
@ -75,6 +75,9 @@
|
||||||
<div>
|
<div>
|
||||||
<f-text id="other_country" v-model="inner.other_country" label="Andere Staatsangehörigkeit"></f-text>
|
<f-text id="other_country" v-model="inner.other_country" label="Andere Staatsangehörigkeit"></f-text>
|
||||||
</div>
|
</div>
|
||||||
|
<div>
|
||||||
|
<f-switch id="has_nami" v-model="inner.has_nami" label="In Nami eintragen"></f-switch>
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<f-text type="date" id="joined_at" v-model="inner.joined_at" label="Eintrittsdatum"></f-text>
|
<f-text type="date" id="joined_at" v-model="inner.joined_at" label="Eintrittsdatum"></f-text>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
<v-bool v-model="member.send_newspaper"></v-bool>
|
<v-bool v-model="member.send_newspaper"></v-bool>
|
||||||
</div>
|
</div>
|
||||||
<div class="py-1 px-6">
|
<div class="py-1 px-6">
|
||||||
<v-bool v-model="member.nami_id !== null"></v-bool>
|
<v-bool v-model="member.has_nami"></v-bool>
|
||||||
</div>
|
</div>
|
||||||
<div class="py-1 px-6">
|
<div class="py-1 px-6">
|
||||||
<div class="py-1 rounded-full flex text-xs items-center justify-center leading-none bg-primary-900" v-text="member.bill_kind_name" v-if="member.bill_kind_name"></div>
|
<div class="py-1 rounded-full flex text-xs items-center justify-center leading-none bg-primary-900" v-text="member.bill_kind_name" v-if="member.bill_kind_name"></div>
|
||||||
|
|
|
@ -18,8 +18,8 @@ mix.js('resources/js/app.js', 'public/js')
|
||||||
.vue({ version: 2 })
|
.vue({ version: 2 })
|
||||||
.postCss('resources/css/app.css', 'public/css', [
|
.postCss('resources/css/app.css', 'public/css', [
|
||||||
atImport(),
|
atImport(),
|
||||||
tailwindcss('./tailwind.config.js'),
|
|
||||||
nested(),
|
nested(),
|
||||||
|
tailwindcss('./tailwind.config.js'),
|
||||||
])
|
])
|
||||||
.copy('resources/img', 'public/img')
|
.copy('resources/img', 'public/img')
|
||||||
.sourceMaps();
|
.sourceMaps();
|
||||||
|
|
Loading…
Reference in New Issue