first commit

This commit is contained in:
cieanyau committed 2026-11-06 00:04:38 +08:00
commit db5762abd4
687 files changed
+171307

No files matched your search

+50
View File
@@ -0,0 +1,50 @@
<script setup>
import "~/assets/styles/blank.DOa3C9wi.css";
import { onMounted } from "vue";
import { useRoute } from "#app";
import { NuxtLink } from "#components";
import { t as useSiteConfig } from "~/lib/useSiteConfig.js";
import { t as useTheme } from "~/lib/useTheme.js";
import { t as authLink } from "~/lib/auth-redirect.js";
import { logoUrl } from "~/utils/brand.js";
const route = useRoute();
const siteConfig = useSiteConfig();
const theme = useTheme();
onMounted(() => siteConfig.load().catch(() => {}));
</script>
<template>
<!-- Keep the published CSS scope until its shared auth styles are migrated together. -->
<div class="blank-layout" data-v-69ca9392>
<header class="auth-topbar" data-v-69ca9392>
<NuxtLink to="/" class="auth-logo" data-v-69ca9392>
<img :src="logoUrl" alt="破碎工坊云" data-v-69ca9392 />
</NuxtLink>
<div class="auth-top-actions" data-v-69ca9392>
<button
class="auth-theme"
type="button"
:aria-label="theme.isDark.value ? '切换浅色模式' : '切换深色模式'"
data-v-69ca9392
@click="theme.cycle"
>
<i
:class="theme.isDark.value ? 'pi pi-moon' : 'pi pi-sun'"
data-v-69ca9392
/>
</button>
<NuxtLink
v-if="route.path !== '/login'"
:to="authLink('/login', route.query.redirect)"
class="auth-login"
data-v-69ca9392
>
<i class="pi pi-user" data-v-69ca9392 /> 登录
</NuxtLink>
</div>
</header>
<main class="auth-main" data-v-69ca9392><slot /></main>
</div>
</template>
File diff suppressed because it is too large. Load diff
+587
View File
@@ -0,0 +1,587 @@
<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()),
(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>
+224
View File
@@ -0,0 +1,224 @@
<script>
import "~/assets/styles/ConsoleLegalFooter.DAYWmXIB.css";
import "~/assets/styles/public-order.0RThfr7m.css";
import { provide } from "vue";
import { toDisplayString } from "vue";
import { onMounted } from "vue";
import { normalizeClass } from "vue";
import { renderSlot } from "vue";
import { watch } from "vue";
import { ref } from "vue";
import { withCtx } from "vue";
import { createCommentVNode } from "vue";
import { computed } from "vue";
import { createElementBlock } 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 { useRoute } from "#app";
import { useHead } from "#app";
import { NuxtLink } from "#components";
import { t as useSiteConfig_t } from "~/lib/useSiteConfig.js";
import { t as _plugin_vue_export_helper_t } from "~/lib/_plugin-vue_export-helper.js";
import { t as useTheme_t } from "~/lib/useTheme.js";
import { t as auth_redirect_t } from "~/lib/auth-redirect.js";
import ConsoleLegalFooter from "~/components/ConsoleLegalFooter.vue";
import { t as order_image_continuation_t } from "~/lib/order-image-continuation.js";
import { logoUrl } from "~/utils/brand.js";
var D = {
class: `public-order-layout`,
},
O = {
class: `public-order-header`,
},
k = {
href: `https://www.crash.work/`,
class: `public-order-brand`,
},
A = [`alt`],
j = {
"aria-label": `产品导航`,
},
M = {
class: `public-order-account`,
},
N = [`aria-label`],
P = {
key: 0,
class: `public-order-maintenance`,
role: `status`,
},
F = {
id: `main-content`,
class: `public-order-content`,
tabindex: `-1`,
},
I = _plugin_vue_export_helper_t(
defineComponent({
__name: `public-order`,
setup(m) {
let x = useRoute(),
I = useTheme_t(),
L = useSiteConfig_t(),
R = ref(``),
z = 0;
(provide(order_image_continuation_t, (e) => {
let t = ++z;
return (
(R.value = e),
() => {
t === z && (R.value = ``);
}
);
}),
watch(
() => x.fullPath,
() => {
(z++, (R.value = ``));
},
));
let B = computed(() =>
auth_redirect_t(`/login`, R.value || x.fullPath),
);
return (
onMounted(() => {
L.load();
}),
useHead(() => ({
title: `产品选购 - ${L.siteName.value}`,
})),
(e, n) => {
let a = NuxtLink,
o = ConsoleLegalFooter;
return (
openBlock(),
createElementBlock(`div`, D, [
(n[5] ||= createElementVNode(
`a`,
{
href: `#main-content`,
class: `skip-link`,
},
`跳转到主要内容`,
-1,
)),
createElementVNode(`header`, O, [
createElementVNode(`a`, k, [
createElementVNode(
`img`,
{
src: logoUrl,
alt: unref(L).siteName.value,
},
null,
8,
A,
),
]),
createElementVNode(`nav`, j, [
createVNode(
a,
{
to: `/products/cloud-server`,
},
{
default: withCtx(() => [
...(n[1] ||= [createTextVNode(`云服务器`, -1)]),
]),
_: 1,
},
),
createVNode(
a,
{
to: `/products/dedicated-server`,
},
{
default: withCtx(() => [
...(n[2] ||= [createTextVNode(`物理服务器`, -1)]),
]),
_: 1,
},
),
createVNode(
a,
{
to: `/products`,
},
{
default: withCtx(() => [
...(n[3] ||= [createTextVNode(`全部产品`, -1)]),
]),
_: 1,
},
),
]),
createElementVNode(`div`, M, [
createElementVNode(
`button`,
{
type: `button`,
"aria-label": `切换主题,当前${unref(I).label.value}`,
onClick: (n[0] ||= (e) => unref(I).cycle()),
},
[
createElementVNode(
`i`,
{
class: normalizeClass(unref(I).icon.value),
"aria-hidden": `true`,
},
null,
2,
),
],
8,
N,
),
createVNode(
a,
{
to: unref(B),
class: `public-order-login`,
},
{
default: withCtx(() => [
...(n[4] ||= [createTextVNode(`登录`, -1)]),
]),
_: 1,
},
8,
[`to`],
),
]),
]),
unref(L).maintenance.value
? (openBlock(),
createElementBlock(
`div`,
P,
toDisplayString(
unref(L).config.value?.maintenance_mode_message ||
`站点维护中,部分功能可能不可用。`,
),
1,
))
: createCommentVNode(``, !0),
createElementVNode(`main`, F, [
renderSlot(e.$slots, `default`, {}, void 0, !0),
]),
createVNode(o),
])
);
}
);
},
}),
[[`__scopeId`, `data-v-f882e304`]],
);
export {};
export default I;
</script>