Merge branch 'main' of repo.leafdev.top:Leaf/amber-ui
All checks were successful
Build / build (push) Successful in 1m32s

This commit is contained in:
ivamp 2024-10-14 00:06:11 +08:00
commit 71cfbb722a
6 changed files with 44 additions and 31 deletions

View File

@ -68,6 +68,9 @@
"onWatcherCleanup": true, "onWatcherCleanup": true,
"useId": true, "useId": true,
"useModel": true, "useModel": true,
"useTemplateRef": true "useTemplateRef": true,
"DirectiveBinding": true,
"MaybeRef": true,
"MaybeRefOrGetter": true
} }
} }

View File

@ -17,7 +17,7 @@ spec:
- name: leaf - name: leaf
containers: containers:
- name: amber - name: amber
image: leafdev.top/leaf/amber-ui:dbdc39f image: leafdev.top/leaf/amber-ui:7fc0dac
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
ports: ports:
- containerPort: 80 - containerPort: 80

View File

@ -3,6 +3,7 @@
// @ts-nocheck // @ts-nocheck
// noinspection JSUnusedGlobalSymbols // noinspection JSUnusedGlobalSymbols
// Generated by unplugin-auto-import // Generated by unplugin-auto-import
// biome-ignore lint: disable
export {} export {}
declare global { declare global {
const EffectScope: typeof import('vue')['EffectScope'] const EffectScope: typeof import('vue')['EffectScope']
@ -67,7 +68,7 @@ declare global {
// for type re-export // for type re-export
declare global { declare global {
// @ts-ignore // @ts-ignore
export type { Component, ComponentPublicInstance, ComputedRef, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, VNode, WritableComputedRef } from 'vue' export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
import('vue') import('vue')
} }
// for vue template auto import // for vue template auto import
@ -105,6 +106,7 @@ declare module 'vue' {
readonly onServerPrefetch: UnwrapRef<typeof import('vue')['onServerPrefetch']> readonly onServerPrefetch: UnwrapRef<typeof import('vue')['onServerPrefetch']>
readonly onUnmounted: UnwrapRef<typeof import('vue')['onUnmounted']> readonly onUnmounted: UnwrapRef<typeof import('vue')['onUnmounted']>
readonly onUpdated: UnwrapRef<typeof import('vue')['onUpdated']> readonly onUpdated: UnwrapRef<typeof import('vue')['onUpdated']>
readonly onWatcherCleanup: UnwrapRef<typeof import('vue')['onWatcherCleanup']>
readonly provide: UnwrapRef<typeof import('vue')['provide']> readonly provide: UnwrapRef<typeof import('vue')['provide']>
readonly reactive: UnwrapRef<typeof import('vue')['reactive']> readonly reactive: UnwrapRef<typeof import('vue')['reactive']>
readonly readonly: UnwrapRef<typeof import('vue')['readonly']> readonly readonly: UnwrapRef<typeof import('vue')['readonly']>
@ -122,9 +124,12 @@ declare module 'vue' {
readonly useAttrs: UnwrapRef<typeof import('vue')['useAttrs']> readonly useAttrs: UnwrapRef<typeof import('vue')['useAttrs']>
readonly useCssModule: UnwrapRef<typeof import('vue')['useCssModule']> readonly useCssModule: UnwrapRef<typeof import('vue')['useCssModule']>
readonly useCssVars: UnwrapRef<typeof import('vue')['useCssVars']> readonly useCssVars: UnwrapRef<typeof import('vue')['useCssVars']>
readonly useId: UnwrapRef<typeof import('vue')['useId']>
readonly useModel: UnwrapRef<typeof import('vue')['useModel']>
readonly useRoute: UnwrapRef<typeof import('vue-router/auto')['useRoute']> readonly useRoute: UnwrapRef<typeof import('vue-router/auto')['useRoute']>
readonly useRouter: UnwrapRef<typeof import('vue-router/auto')['useRouter']> readonly useRouter: UnwrapRef<typeof import('vue-router/auto')['useRouter']>
readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']> readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
readonly useTemplateRef: UnwrapRef<typeof import('vue')['useTemplateRef']>
readonly watch: UnwrapRef<typeof import('vue')['watch']> readonly watch: UnwrapRef<typeof import('vue')['watch']>
readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']> readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']>
readonly watchPostEffect: UnwrapRef<typeof import('vue')['watchPostEffect']> readonly watchPostEffect: UnwrapRef<typeof import('vue')['watchPostEffect']>

1
src/components.d.ts vendored
View File

@ -9,7 +9,6 @@ declare module 'vue' {
export interface GlobalComponents { export interface GlobalComponents {
AccountSettings: typeof import('./components/settings/AccountSettings.vue')['default'] AccountSettings: typeof import('./components/settings/AccountSettings.vue')['default']
AssistantMenu: typeof import('./components/AssistantMenu.vue')['default'] AssistantMenu: typeof import('./components/AssistantMenu.vue')['default']
AssistantPublistSettings: typeof import('./components/settings/AssistantPublistSettings.vue')['default']
AssistantSettings: typeof import('./components/settings/AssistantSettings.vue')['default'] AssistantSettings: typeof import('./components/settings/AssistantSettings.vue')['default']
Chat: typeof import('./components/chat/Chat.vue')['default'] Chat: typeof import('./components/chat/Chat.vue')['default']
ChatMenu: typeof import('./components/ChatMenu.vue')['default'] ChatMenu: typeof import('./components/ChatMenu.vue')['default']

View File

@ -5,21 +5,23 @@ document.head.appendChild(meta);
import "./styles/style.css"; import "./styles/style.css";
import "./styles/color.less"; import "./styles/color.less";
import "animate.css"; import "animate.css";
import { registerPlugins } from "./plugins";
import { createApp } from 'vue'
import App from './App.vue'
import naive from 'naive-ui'
import router from "./router"; import router from "./router";
import { registerPlugins } from "./plugins";
const app = createApp(App)
import App from "./App.vue"; app.use(naive)
import { createApp } from "vue";
const app = createApp(App);
registerPlugins(app); registerPlugins(app);
app.use(router); app.use(router);
// @ts-ignore ...
if (process.env.NODE_ENV === "production") { if (process.env.NODE_ENV === "production") {
setTimeout(() => { setTimeout(() => {
const appContainer = document.getElementById("app"); const appContainer = document.getElementById("app");
@ -28,7 +30,6 @@ if (process.env.NODE_ENV === "production") {
} }
setTimeout(() => { setTimeout(() => {
const defaultLoader = document.getElementById("default-loader"); const defaultLoader = document.getElementById("default-loader");
// remove
defaultLoader?.remove(); defaultLoader?.remove();
}, 300); }, 300);
@ -36,7 +37,9 @@ if (process.env.NODE_ENV === "production") {
app.mount("#app"); app.mount("#app");
}, 300); }, 300);
setTimeout(() => { setTimeout(() => {
appContainer!.style.opacity = "1"; if (appContainer) {
appContainer.style.opacity = "1";
}
}, 300); }, 300);
}, 200); }, 200);
} else { } else {

View File

@ -4,16 +4,16 @@
<div class="container"> <div class="container">
<!-- Spotlight 区域 --> <!-- Spotlight 区域 -->
<n-card class="spotlight" :bordered="false"> <n-card class="spotlight" :bordered="false">
<div class="background-pattern"></div>
<div class="background-text">
Leaflow <span class="background-amber">Amber</span>
</div>
<div class="spotlight-content"> <div class="spotlight-content">
<h1 class="title">Leaflow <span class="amber-text">Amber</span></h1> <h1 class="title break-normal">
Leaflow <span class="amber-text">Amber</span>
</h1>
<p class="subtitle"> <p class="subtitle">
下一代智能体平台为您的数字生活带来革命性变化 下一代智能体平台为您的数字生活带来革命性变化
<br class="mobile-break" /> <br class="mobile-break" />
<a href="#" class="cta-link">立即体验 🚀</a> <a @click="gotoLogin" class="cta-link cursor-pointer"
>立即体验 🚀</a
>
</p> </p>
<div <div
class="stats" class="stats"
@ -85,17 +85,18 @@
<!-- 功能特点展示 --> <!-- 功能特点展示 -->
<div class="features-section"> <div class="features-section">
<h2 class="section-title">Amber 核心特性</h2> <h2 class="section-title">Amber 核心特性</h2>
<n-grid :cols="3" :x-gap="24" :y-gap="24" responsive="screen"> <n-grid
<n-gi cols="1 m:2 l:3 xl:3 2xl:3"
span="3 m:1" :x-gap="24"
v-for="(feature, index) in features" :y-gap="24"
:key="index" responsive="screen"
> >
<n-gi v-for="(feature, index) in features" :key="index">
<div <div
class="feature-card" class="feature-card"
@click="toggleFeatureDescription(feature)" @click="toggleFeatureDescription(feature)"
> >
<div class="feature-content"> <div>
<div class="feature-icon">{{ feature.icon }}</div> <div class="feature-icon">{{ feature.icon }}</div>
<div class="feature-title">{{ feature.title }}</div> <div class="feature-title">{{ feature.title }}</div>
<transition name="fade-height" mode="out-in"> <transition name="fade-height" mode="out-in">
@ -156,13 +157,17 @@ import {
} from "naive-ui"; } from "naive-ui";
import { SchemaSiteUsageResponse } from "@/api"; import { SchemaSiteUsageResponse } from "@/api";
import getApi from "@/plugins/api"; import getApi from "@/plugins/api";
import grouppng from "@/assets/images/group.png"; import router from "@/router";
const osTheme = useOsTheme(); const osTheme = useOsTheme();
const theme = computed(() => (osTheme.value === "dark" ? darkTheme : null)); const theme = computed(() => (osTheme.value === "dark" ? darkTheme : null));
const siteUsage = ref<SchemaSiteUsageResponse>({}); const siteUsage = ref<SchemaSiteUsageResponse>({});
const gotoLogin = () => {
router.push("/auth/login");
};
const features = ref([ const features = ref([
{ {
icon: "💬", icon: "💬",
@ -219,8 +224,7 @@ const partners = ref([
name: "HiMCBBS 我的世界中文论坛", name: "HiMCBBS 我的世界中文论坛",
logo: "https://www.himcbbs.com/data/assets/logo/wxmc_logo_text_blue.svg", logo: "https://www.himcbbs.com/data/assets/logo/wxmc_logo_text_blue.svg",
link: "https://www.himcbbs.com/", link: "https://www.himcbbs.com/",
description: description: "中国我的世界玩家社区,提供游戏资讯、模组下载和创意分享。",
"中国最大的我的世界玩家社区,提供游戏资讯、模组下载和创意分享。",
}, },
// //
]); ]);
@ -266,7 +270,6 @@ body {
'theme ? "rgba(0, 0, 0, 0.5)" : "rgba(78, 187, 192, 0.1)"' 'theme ? "rgba(0, 0, 0, 0.5)" : "rgba(78, 187, 192, 0.1)"'
); );
backdrop-filter: blur(10px); backdrop-filter: blur(10px);
height: 70vh;
min-height: 500px; min-height: 500px;
display: flex; display: flex;
align-items: center; align-items: center;