- The SPA loads the backend::lang bundle before /auth/me, sets the document language from meta.locale and renders plural messages with Intl.PluralRules; interpolate mirrors phrasebook for :name/:Name/:NAME - Create and record routes; mapWinterUrl maps recordUrl and redirects onto the controller's list, create and record routes only - List rows open their record; FormView loads the form schema and the record, shows context-allowed fields in the span grid, saves values keyed by field name and toasts the resolved saved message - A 422 puts each message under its field (aria-invalid, aria-describedby), shows the plural banner, focuses the first invalid field in schema order and clears a field's error on change - The D-05 registry maps text, textarea, number and dropdown; any other type renders the unsupported-field box with the type in DM Mono - The admin OpenAPI document declares the write request bodies (AdminRecord, AdminIDsRequest) and the list filter query as a deepObject, so the typed client can send them - New backend::lang form.load_failed key; boardwalk/dist rebuilt
20 lines
624 B
Vue
20 lines
624 B
Vue
<script setup lang="ts">
|
|
import { computed } from 'vue'
|
|
import { RouterView, useRoute } from 'vue-router'
|
|
import AppShell from './components/shell/AppShell.vue'
|
|
|
|
const route = useRoute()
|
|
const inShell = computed(() => route.meta.shell === true)
|
|
</script>
|
|
|
|
<template>
|
|
<!-- Keyed by path, not full path: a new controller or record remounts its
|
|
view, while list query changes (search, sort, page) keep it. -->
|
|
<AppShell v-if="inShell">
|
|
<RouterView v-slot="{ Component, route: current }">
|
|
<component :is="Component" :key="current.path" />
|
|
</RouterView>
|
|
</AppShell>
|
|
<RouterView v-else />
|
|
</template>
|