#2-protocol #6

Merged
jkeffects merged 15 commits from #2-protocol into main 2024-10-29 14:43:29 +00:00
13 changed files with 78 additions and 11 deletions
Showing only changes of commit 0d559c9365 - Show all commits

7
package-lock.json generated
View file

@ -15,6 +15,7 @@
"axios": "^0.26.1", "axios": "^0.26.1",
"jwt-decode": "^4.0.0", "jwt-decode": "^4.0.0",
"lodash.clonedeep": "^4.5.0", "lodash.clonedeep": "^4.5.0",
"lodash.difference": "^4.5.0",
"lodash.isequal": "^4.5.0", "lodash.isequal": "^4.5.0",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pdf-dist": "^1.0.0", "pdf-dist": "^1.0.0",
@ -6702,6 +6703,12 @@
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
"dev": true "dev": true
}, },
"node_modules/lodash.difference": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
"integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==",
"license": "MIT"
},
"node_modules/lodash.isequal": { "node_modules/lodash.isequal": {
"version": "4.5.0", "version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",

View file

@ -30,6 +30,7 @@
"axios": "^0.26.1", "axios": "^0.26.1",
"jwt-decode": "^4.0.0", "jwt-decode": "^4.0.0",
"lodash.clonedeep": "^4.5.0", "lodash.clonedeep": "^4.5.0",
"lodash.difference": "^4.5.0",
"lodash.isequal": "^4.5.0", "lodash.isequal": "^4.5.0",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pdf-dist": "^1.0.0", "pdf-dist": "^1.0.0",

View file

@ -1,8 +1,10 @@
import type { AxiosInstance } from "axios";
import type { RouteLocationNormalizedLoaded, Router } from "vue-router"; import type { RouteLocationNormalizedLoaded, Router } from "vue-router";
declare module "@vue/runtime-core" { declare module "@vue/runtime-core" {
interface ComponentCustomProperties { interface ComponentCustomProperties {
$dev: boolean; $dev: boolean;
$http: AxiosInstance;
$router: Router; $router: Router;
$route: RouteLocationNormalizedLoaded; $route: RouteLocationNormalizedLoaded;
} }

View file

@ -56,8 +56,8 @@ body {
@apply w-full h-full overflow-hidden flex flex-col; @apply w-full h-full overflow-hidden flex flex-col;
} }
button:not([headlessui]):not([id*="headlessui"]):not([class*="headlessui"]), button:not([headlessui]):not([id*="headlessui"]):not([class*="headlessui"]):not([class*="ql"] *),
a[button]:not([headlessui]):not([id*="headlessui"]):not([class*="headlessui"]) { a[button] {
@apply relative box-border h-10 w-full flex justify-center py-2 px-4 text-sm font-medium rounded-md focus:outline-none focus:ring-0; @apply relative box-border h-10 w-full flex justify-center py-2 px-4 text-sm font-medium rounded-md focus:outline-none focus:ring-0;
} }
@ -91,3 +91,30 @@ input[disabled],
textarea[disabled] { textarea[disabled] {
@apply opacity-75 pointer-events-none; @apply opacity-75 pointer-events-none;
} }
details {
user-select: none;
& summary svg {
transform: rotate(90deg);
}
}
details[open] {
& summary svg {
transform: rotate(-90deg);
}
}
details[open] summary ~ * {
animation: ease-opacity-t-b 0.5s ease;
}
summary {
cursor: pointer;
}
summary > svg {
transition: all 0.3s;
}
summary::-webkit-details-marker {
display: none;
}

View file

@ -157,44 +157,44 @@ const router = createRouter({
{ {
path: "", path: "",
name: "admin-club-protocol", name: "admin-club-protocol",
component: () => import("@/views/admin/protocol/Protocol.vue"), component: () => import("@/views/admin/club/protocol/Protocol.vue"),
beforeEnter: [resetProtocolStores], beforeEnter: [resetProtocolStores],
}, },
{ {
path: ":protocolId", path: ":protocolId",
name: "admin-club-protocol-routing", name: "admin-club-protocol-routing",
component: () => import("@/views/admin/protocol/ProtocolRouting.vue"), component: () => import("@/views/admin/club/protocol/ProtocolRouting.vue"),
beforeEnter: [setProtocolId], beforeEnter: [setProtocolId],
props: true, props: true,
children: [ children: [
{ {
path: "overview", path: "overview",
name: "admin-club-protocol-overview", name: "admin-club-protocol-overview",
component: () => import("@/views/admin/protocol/ProtocolOverview.vue"), component: () => import("@/views/admin/club/protocol/ProtocolOverview.vue"),
props: true, props: true,
}, },
{ {
path: "precense", path: "precense",
name: "admin-club-protocol-precense", name: "admin-club-protocol-precense",
component: () => import("@/views/admin/protocol/ProtocolPrecense.vue"), component: () => import("@/views/admin/club/protocol/ProtocolPrecense.vue"),
props: true, props: true,
}, },
{ {
path: "voting", path: "voting",
name: "admin-club-protocol-voting", name: "admin-club-protocol-voting",
component: () => import("@/views/admin/protocol/ProtocolVoting.vue"), component: () => import("@/views/admin/club/protocol/ProtocolVoting.vue"),
props: true, props: true,
}, },
{ {
path: "decisions", path: "decisions",
name: "admin-club-protocol-decisions", name: "admin-club-protocol-decisions",
component: () => import("@/views/admin/protocol/ProtocolDecisions.vue"), component: () => import("@/views/admin/club/protocol/ProtocolDecisions.vue"),
props: true, props: true,
}, },
{ {
path: "protocol", path: "protocol",
name: "admin-club-protocol-protocol", name: "admin-club-protocol-protocol",
component: () => import("@/views/admin/protocol/ProtocolProtocol.vue"), component: () => import("@/views/admin/club/protocol/ProtocolProtocol.vue"),
props: true, props: true,
}, },
], ],

View file

@ -12,7 +12,15 @@
<input id="username" name="username" type="text" required placeholder="Benutzer" class="!rounded-b-none" /> <input id="username" name="username" type="text" required placeholder="Benutzer" class="!rounded-b-none" />
</div> </div>
<div> <div>
<input id="totp" name="totp" type="text" required placeholder="TOTP" class="!rounded-t-none" /> <input
id="totp"
name="totp"
type="text"
required
placeholder="TOTP"
class="!rounded-t-none"
autocomplete="off"
/>
</div> </div>
</div> </div>

View file

@ -2,6 +2,28 @@
<div class="flex flex-col gap-2 h-full w-full overflow-y-auto"> <div class="flex flex-col gap-2 h-full w-full overflow-y-auto">
<Spinner v-if="loadingActive == 'loading'" class="mx-auto" /> <Spinner v-if="loadingActive == 'loading'" class="mx-auto" />
<p v-else-if="loadingActive == 'failed'" @click="" class="cursor-pointer">&#8634; laden fehlgeschlagen</p> <p v-else-if="loadingActive == 'failed'" @click="" class="cursor-pointer">&#8634; laden fehlgeschlagen</p>
<details class="flex flex-col gap-2 rounded-lg w-full justify-between border border-primary overflow-hidden">
<summary class="flex flex-row gap-2 bg-primary p-2 w-full justify-between items-center cursor-pointer">
<input type="text" name="title" id="title" placeholder="TOP" autocomplete="off" />
<svg
class="fill-white stroke-white opacity-75 w-4 h-4 -mr-1"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
>
<path d="M12.95 10.707l.707-.707L8 4.343 6.586 5.757 10.828 10l-4.242 4.243L8 15.657l4.95-4.95z" />
</svg>
</summary>
<QuillEditor
id="top"
theme="snow"
placeholder="TOP Inhalt..."
style="height: 250px; max-height: 250px; min-height: 250px"
contentType="html"
:toolbar="toolbarOptions"
/>
</details>
</div> </div>
</template> </template>

View file

@ -70,7 +70,7 @@ export default defineComponent({
{ route: "admin-club-protocol-overview", title: "Übersicht" }, { route: "admin-club-protocol-overview", title: "Übersicht" },
{ route: "admin-club-protocol-precense", title: "Anwesenheit" }, { route: "admin-club-protocol-precense", title: "Anwesenheit" },
{ route: "admin-club-protocol-voting", title: "Abstimmungen" }, { route: "admin-club-protocol-voting", title: "Abstimmungen" },
{ route: "admin-club-protocol-decisions", title: "Entscheidungen" }, { route: "admin-club-protocol-decisions", title: "Beschlüsse" },
{ route: "admin-club-protocol-protocol", title: "Protokoll" }, { route: "admin-club-protocol-protocol", title: "Protokoll" },
], ],
}; };