Files
console-dev/app/layouts/official-site.vue
T

592 lines
22 KiB
Vue

<script>
/**
* 官网布局:从内容模型派生导航、页脚链接、品牌图与主题色;过滤隐藏项,页面正文通过默认插槽提供,移动导航状态仅在当前布局内维护。
*/
import "~/assets/styles/official-site.pBD-PXD7.css";
import { toDisplayString } from "vue";
import { renderList } from "vue";
import { onMounted } from "vue";
import { normalizeClass } from "vue";
import { renderSlot } from "vue";
import { ref } from "vue";
import { withCtx } from "vue";
import { createCommentVNode } from "vue";
import { computed } from "vue";
import { createElementBlock } from "vue";
import { Fragment } from "vue";
import { createElementVNode } from "vue";
import { createTextVNode } from "vue";
import { unref } from "vue";
import { defineComponent } from "vue";
import { createVNode } from "vue";
import { openBlock } from "vue";
import { normalizeStyle } from "vue";
import { NuxtLink } from "#components";
import { i as useOfficialSiteContent_i } from "~/lib/useOfficialSiteContent.js";
import { n as useOfficialSiteContent_n } from "~/lib/useOfficialSiteContent.js";
import { r as useOfficialSiteContent_r } from "~/lib/useOfficialSiteContent.js";
import { t as useOfficialSiteContent_t } from "~/lib/useOfficialSiteContent.js";
var S = {
class: `official-header`,
},
C = {
class: `official-header-inner`,
},
w = [`src`, `alt`],
T = {
key: 1,
class: `official-brand-mark`,
"aria-hidden": `true`,
},
E = {
class: `official-brand-copy`,
},
D = {
class: `official-nav`,
"aria-label": `官网导航`,
},
O = [`href`],
k = {
class: `official-header-actions`,
},
A = [`aria-expanded`],
j = {
key: 0,
id: `official-mobile-nav`,
class: `official-mobile-nav`,
"aria-label": `移动端官网导航`,
},
M = [`href`],
N = {
class: `official-main`,
},
P = {
class: `official-footer`,
},
F = {
class: `official-footer-main`,
},
I = {
class: `official-footer-brand`,
},
te = [`src`, `alt`],
L = {
key: 1,
class: `official-brand-mark`,
"aria-hidden": `true`,
},
R = {
class: `official-brand-copy`,
},
z = {
class: `official-footer-groups`,
},
B = [`href`],
V = {
class: `official-footer-contact`,
},
H = [`href`],
U = [`href`],
W = {
key: 2,
},
G = {
key: 3,
class: `official-footer-qr`,
},
K = [`src`, `alt`],
q = {
class: `official-footer-bottom`,
},
J = [`href`],
Y = defineComponent({
__name: `official-site`,
setup(p) {
let { content: Y, load: X } = useOfficialSiteContent_t(),
Z = ref(!1),
Q = computed(() =>
Y.value.header.navigation.filter((e) => e.is_show !== !1),
),
ne = computed(() =>
Y.value.footer.linkGroups.filter((e) => e.is_show !== !1),
),
re = computed(() =>
Y.value.footer.legalLinks.filter((e) => e.is_show !== !1 && e.href),
),
$ = computed(() => useOfficialSiteContent_i(Y.value.brand.logoUrl)),
ie = computed(() => ({
"--official-primary": useOfficialSiteContent_n(
Y.value.theme.primary,
`#0052d9`,
),
"--official-accent": useOfficialSiteContent_n(
Y.value.theme.accent,
`#eff6ff`,
),
}));
return (
onMounted(() => X()),
// 公共头尾使用同一内容模型,导航/品牌/页脚 URL 逐项经过内容工具处理,正文通过插槽注入。
(n, i) => {
let s = NuxtLink;
return (
openBlock(),
createElementBlock(
`div`,
{
class: `official-site`,
style: normalizeStyle(unref(ie)),
},
[
createElementVNode(`header`, S, [
createElementVNode(`div`, C, [
createVNode(
s,
{
class: `official-brand`,
to: `/official-site`,
"aria-label": unref(Y).brand.name,
},
{
default: withCtx(() => [
unref($)
? (openBlock(),
createElementBlock(
`img`,
{
key: 0,
class: `official-brand-image`,
src: unref($),
alt: unref(Y).brand.name,
},
null,
8,
w,
))
: (openBlock(),
createElementBlock(`span`, T, [
...(i[3] ||= [
createElementVNode(`span`, null, null, -1),
createElementVNode(`span`, null, null, -1),
createElementVNode(`span`, null, null, -1),
]),
])),
createElementVNode(`span`, E, [
createElementVNode(
`strong`,
null,
toDisplayString(unref(Y).brand.name),
1,
),
createElementVNode(
`small`,
null,
toDisplayString(unref(Y).brand.tagline),
1,
),
]),
]),
_: 1,
},
8,
[`aria-label`],
),
createElementVNode(`nav`, D, [
(openBlock(!0),
createElementBlock(
Fragment,
null,
renderList(
unref(Q),
(t) => (
openBlock(),
createElementBlock(
`a`,
{
key: t.label + t.href,
href: unref(useOfficialSiteContent_r)(t.href),
},
toDisplayString(t.label),
9,
O,
)
),
),
128,
)),
]),
createElementVNode(`div`, k, [
createVNode(
s,
{
class: `official-header-login`,
to: unref(useOfficialSiteContent_r)(
unref(Y).header.buttonHref,
),
},
{
default: withCtx(() => [
createTextVNode(
toDisplayString(unref(Y).header.buttonLabel) +
` `,
1,
),
(i[4] ||= createElementVNode(
`i`,
{
class: `pi pi-arrow-up-right`,
"aria-hidden": `true`,
},
null,
-1,
)),
]),
_: 1,
},
8,
[`to`],
),
createElementVNode(
`button`,
{
class: `official-menu-toggle`,
type: `button`,
"aria-expanded": unref(Z),
"aria-controls": `official-mobile-nav`,
"aria-label": `切换导航菜单`,
onClick: (i[0] ||= (e) => (Z.value = !unref(Z))),
},
[
createElementVNode(
`i`,
{
class: normalizeClass(
unref(Z) ? `pi pi-times` : `pi pi-bars`,
),
"aria-hidden": `true`,
},
null,
2,
),
],
8,
A,
),
]),
]),
unref(Z)
? (openBlock(),
createElementBlock(`nav`, j, [
(openBlock(!0),
createElementBlock(
Fragment,
null,
renderList(
unref(Q),
(t) => (
openBlock(),
createElementBlock(
`a`,
{
key: t.label + t.href,
href: unref(useOfficialSiteContent_r)(t.href),
onClick: (i[1] ||= (e) => (Z.value = !1)),
},
toDisplayString(t.label),
9,
M,
)
),
),
128,
)),
createVNode(
s,
{
to: unref(useOfficialSiteContent_r)(
unref(Y).header.buttonHref,
),
onClick: (i[2] ||= (e) => (Z.value = !1)),
},
{
default: withCtx(() => [
createTextVNode(
toDisplayString(unref(Y).header.buttonLabel),
1,
),
]),
_: 1,
},
8,
[`to`],
),
]))
: createCommentVNode(``, !0),
]),
createElementVNode(`main`, N, [
renderSlot(n.$slots, `default`),
]),
createElementVNode(`footer`, P, [
createElementVNode(`div`, F, [
createElementVNode(`div`, I, [
createVNode(
s,
{
class: `official-brand`,
to: `/official-site`,
},
{
default: withCtx(() => [
unref($)
? (openBlock(),
createElementBlock(
`img`,
{
key: 0,
class: `official-brand-image`,
src: unref($),
alt: unref(Y).brand.name,
},
null,
8,
te,
))
: (openBlock(),
createElementBlock(`span`, L, [
...(i[5] ||= [
createElementVNode(`span`, null, null, -1),
createElementVNode(`span`, null, null, -1),
createElementVNode(`span`, null, null, -1),
]),
])),
createElementVNode(`span`, R, [
createElementVNode(
`strong`,
null,
toDisplayString(unref(Y).brand.name),
1,
),
createElementVNode(
`small`,
null,
toDisplayString(unref(Y).brand.tagline),
1,
),
]),
]),
_: 1,
},
),
createElementVNode(
`p`,
null,
toDisplayString(unref(Y).meta.description),
1,
),
]),
createElementVNode(`div`, z, [
(openBlock(!0),
createElementBlock(
Fragment,
null,
renderList(
unref(ne),
(n) => (
openBlock(),
createElementBlock(
`section`,
{
key: n.title,
class: `official-footer-group`,
},
[
createElementVNode(
`h2`,
null,
toDisplayString(n.title),
1,
),
(openBlock(!0),
createElementBlock(
Fragment,
null,
renderList(
n.links.filter((e) => e.is_show !== !1),
(t) => (
openBlock(),
createElementBlock(
`a`,
{
key: t.label + t.href,
href: unref(useOfficialSiteContent_r)(
t.href,
),
},
toDisplayString(t.label),
9,
B,
)
),
),
128,
)),
],
)
),
),
128,
)),
]),
createElementVNode(`section`, V, [
createElementVNode(
`h2`,
null,
toDisplayString(unref(Y).footer.contactTitle),
1,
),
unref(Y).footer.phone
? (openBlock(),
createElementBlock(
`a`,
{
key: 0,
href: unref(useOfficialSiteContent_r)(
`tel:${unref(Y).footer.phone}`,
),
},
[
(i[6] ||= createElementVNode(
`i`,
{
class: `pi pi-phone`,
"aria-hidden": `true`,
},
null,
-1,
)),
createTextVNode(
toDisplayString(unref(Y).footer.phone),
1,
),
],
8,
H,
))
: createCommentVNode(``, !0),
unref(Y).footer.email
? (openBlock(),
createElementBlock(
`a`,
{
key: 1,
href: unref(useOfficialSiteContent_r)(
`mailto:${unref(Y).footer.email}`,
),
},
[
(i[7] ||= createElementVNode(
`i`,
{
class: `pi pi-envelope`,
"aria-hidden": `true`,
},
null,
-1,
)),
createTextVNode(
toDisplayString(unref(Y).footer.email),
1,
),
],
8,
U,
))
: createCommentVNode(``, !0),
unref(Y).footer.address
? (openBlock(),
createElementBlock(`p`, W, [
(i[8] ||= createElementVNode(
`i`,
{
class: `pi pi-map-marker`,
"aria-hidden": `true`,
},
null,
-1,
)),
createTextVNode(
toDisplayString(unref(Y).footer.address),
1,
),
]))
: createCommentVNode(``, !0),
unref(Y).footer.qrImage
? (openBlock(),
createElementBlock(`div`, G, [
createElementVNode(
`img`,
{
src: unref(useOfficialSiteContent_i)(
unref(Y).footer.qrImage,
),
alt: unref(Y).footer.qrCaption,
},
null,
8,
K,
),
createElementVNode(
`span`,
null,
toDisplayString(unref(Y).footer.qrCaption),
1,
),
]))
: createCommentVNode(``, !0),
]),
]),
createElementVNode(`div`, q, [
createElementVNode(
`span`,
null,
toDisplayString(unref(Y).footer.copyright),
1,
),
createElementVNode(`div`, null, [
(openBlock(!0),
createElementBlock(
Fragment,
null,
renderList(
unref(re),
(t) => (
openBlock(),
createElementBlock(
`a`,
{
key: t.label,
href: unref(useOfficialSiteContent_r)(t.href),
},
toDisplayString(t.label),
9,
J,
)
),
),
128,
)),
]),
]),
]),
],
4,
)
);
}
);
},
});
export {};
export default Y;
</script>