Initial commit
1
.astro/content-assets.mjs
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export default new Map();
|
||||||
1
.astro/content-modules.mjs
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export default new Map();
|
||||||
199
.astro/content.d.ts
vendored
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
declare module 'astro:content' {
|
||||||
|
export interface RenderResult {
|
||||||
|
Content: import('astro/runtime/server/index.js').AstroComponentFactory;
|
||||||
|
headings: import('astro').MarkdownHeading[];
|
||||||
|
remarkPluginFrontmatter: Record<string, any>;
|
||||||
|
}
|
||||||
|
interface Render {
|
||||||
|
'.md': Promise<RenderResult>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RenderedContent {
|
||||||
|
html: string;
|
||||||
|
metadata?: {
|
||||||
|
imagePaths: Array<string>;
|
||||||
|
[key: string]: unknown;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module 'astro:content' {
|
||||||
|
type Flatten<T> = T extends { [K: string]: infer U } ? U : never;
|
||||||
|
|
||||||
|
export type CollectionKey = keyof AnyEntryMap;
|
||||||
|
export type CollectionEntry<C extends CollectionKey> = Flatten<AnyEntryMap[C]>;
|
||||||
|
|
||||||
|
export type ContentCollectionKey = keyof ContentEntryMap;
|
||||||
|
export type DataCollectionKey = keyof DataEntryMap;
|
||||||
|
|
||||||
|
type AllValuesOf<T> = T extends any ? T[keyof T] : never;
|
||||||
|
type ValidContentEntrySlug<C extends keyof ContentEntryMap> = AllValuesOf<
|
||||||
|
ContentEntryMap[C]
|
||||||
|
>['slug'];
|
||||||
|
|
||||||
|
export type ReferenceDataEntry<
|
||||||
|
C extends CollectionKey,
|
||||||
|
E extends keyof DataEntryMap[C] = string,
|
||||||
|
> = {
|
||||||
|
collection: C;
|
||||||
|
id: E;
|
||||||
|
};
|
||||||
|
export type ReferenceContentEntry<
|
||||||
|
C extends keyof ContentEntryMap,
|
||||||
|
E extends ValidContentEntrySlug<C> | (string & {}) = string,
|
||||||
|
> = {
|
||||||
|
collection: C;
|
||||||
|
slug: E;
|
||||||
|
};
|
||||||
|
export type ReferenceLiveEntry<C extends keyof LiveContentConfig['collections']> = {
|
||||||
|
collection: C;
|
||||||
|
id: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @deprecated Use `getEntry` instead. */
|
||||||
|
export function getEntryBySlug<
|
||||||
|
C extends keyof ContentEntryMap,
|
||||||
|
E extends ValidContentEntrySlug<C> | (string & {}),
|
||||||
|
>(
|
||||||
|
collection: C,
|
||||||
|
// Note that this has to accept a regular string too, for SSR
|
||||||
|
entrySlug: E,
|
||||||
|
): E extends ValidContentEntrySlug<C>
|
||||||
|
? Promise<CollectionEntry<C>>
|
||||||
|
: Promise<CollectionEntry<C> | undefined>;
|
||||||
|
|
||||||
|
/** @deprecated Use `getEntry` instead. */
|
||||||
|
export function getDataEntryById<C extends keyof DataEntryMap, E extends keyof DataEntryMap[C]>(
|
||||||
|
collection: C,
|
||||||
|
entryId: E,
|
||||||
|
): Promise<CollectionEntry<C>>;
|
||||||
|
|
||||||
|
export function getCollection<C extends keyof AnyEntryMap, E extends CollectionEntry<C>>(
|
||||||
|
collection: C,
|
||||||
|
filter?: (entry: CollectionEntry<C>) => entry is E,
|
||||||
|
): Promise<E[]>;
|
||||||
|
export function getCollection<C extends keyof AnyEntryMap>(
|
||||||
|
collection: C,
|
||||||
|
filter?: (entry: CollectionEntry<C>) => unknown,
|
||||||
|
): Promise<CollectionEntry<C>[]>;
|
||||||
|
|
||||||
|
export function getLiveCollection<C extends keyof LiveContentConfig['collections']>(
|
||||||
|
collection: C,
|
||||||
|
filter?: LiveLoaderCollectionFilterType<C>,
|
||||||
|
): Promise<
|
||||||
|
import('astro').LiveDataCollectionResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>
|
||||||
|
>;
|
||||||
|
|
||||||
|
export function getEntry<
|
||||||
|
C extends keyof ContentEntryMap,
|
||||||
|
E extends ValidContentEntrySlug<C> | (string & {}),
|
||||||
|
>(
|
||||||
|
entry: ReferenceContentEntry<C, E>,
|
||||||
|
): E extends ValidContentEntrySlug<C>
|
||||||
|
? Promise<CollectionEntry<C>>
|
||||||
|
: Promise<CollectionEntry<C> | undefined>;
|
||||||
|
export function getEntry<
|
||||||
|
C extends keyof DataEntryMap,
|
||||||
|
E extends keyof DataEntryMap[C] | (string & {}),
|
||||||
|
>(
|
||||||
|
entry: ReferenceDataEntry<C, E>,
|
||||||
|
): E extends keyof DataEntryMap[C]
|
||||||
|
? Promise<DataEntryMap[C][E]>
|
||||||
|
: Promise<CollectionEntry<C> | undefined>;
|
||||||
|
export function getEntry<
|
||||||
|
C extends keyof ContentEntryMap,
|
||||||
|
E extends ValidContentEntrySlug<C> | (string & {}),
|
||||||
|
>(
|
||||||
|
collection: C,
|
||||||
|
slug: E,
|
||||||
|
): E extends ValidContentEntrySlug<C>
|
||||||
|
? Promise<CollectionEntry<C>>
|
||||||
|
: Promise<CollectionEntry<C> | undefined>;
|
||||||
|
export function getEntry<
|
||||||
|
C extends keyof DataEntryMap,
|
||||||
|
E extends keyof DataEntryMap[C] | (string & {}),
|
||||||
|
>(
|
||||||
|
collection: C,
|
||||||
|
id: E,
|
||||||
|
): E extends keyof DataEntryMap[C]
|
||||||
|
? string extends keyof DataEntryMap[C]
|
||||||
|
? Promise<DataEntryMap[C][E]> | undefined
|
||||||
|
: Promise<DataEntryMap[C][E]>
|
||||||
|
: Promise<CollectionEntry<C> | undefined>;
|
||||||
|
export function getLiveEntry<C extends keyof LiveContentConfig['collections']>(
|
||||||
|
collection: C,
|
||||||
|
filter: string | LiveLoaderEntryFilterType<C>,
|
||||||
|
): Promise<import('astro').LiveDataEntryResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>>;
|
||||||
|
|
||||||
|
/** Resolve an array of entry references from the same collection */
|
||||||
|
export function getEntries<C extends keyof ContentEntryMap>(
|
||||||
|
entries: ReferenceContentEntry<C, ValidContentEntrySlug<C>>[],
|
||||||
|
): Promise<CollectionEntry<C>[]>;
|
||||||
|
export function getEntries<C extends keyof DataEntryMap>(
|
||||||
|
entries: ReferenceDataEntry<C, keyof DataEntryMap[C]>[],
|
||||||
|
): Promise<CollectionEntry<C>[]>;
|
||||||
|
|
||||||
|
export function render<C extends keyof AnyEntryMap>(
|
||||||
|
entry: AnyEntryMap[C][string],
|
||||||
|
): Promise<RenderResult>;
|
||||||
|
|
||||||
|
export function reference<C extends keyof AnyEntryMap>(
|
||||||
|
collection: C,
|
||||||
|
): import('astro/zod').ZodEffects<
|
||||||
|
import('astro/zod').ZodString,
|
||||||
|
C extends keyof ContentEntryMap
|
||||||
|
? ReferenceContentEntry<C, ValidContentEntrySlug<C>>
|
||||||
|
: ReferenceDataEntry<C, keyof DataEntryMap[C]>
|
||||||
|
>;
|
||||||
|
// Allow generic `string` to avoid excessive type errors in the config
|
||||||
|
// if `dev` is not running to update as you edit.
|
||||||
|
// Invalid collection names will be caught at build time.
|
||||||
|
export function reference<C extends string>(
|
||||||
|
collection: C,
|
||||||
|
): import('astro/zod').ZodEffects<import('astro/zod').ZodString, never>;
|
||||||
|
|
||||||
|
type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R : T;
|
||||||
|
type InferEntrySchema<C extends keyof AnyEntryMap> = import('astro/zod').infer<
|
||||||
|
ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']>
|
||||||
|
>;
|
||||||
|
|
||||||
|
type ContentEntryMap = {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
type DataEntryMap = {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
type AnyEntryMap = ContentEntryMap & DataEntryMap;
|
||||||
|
|
||||||
|
type ExtractLoaderTypes<T> = T extends import('astro/loaders').LiveLoader<
|
||||||
|
infer TData,
|
||||||
|
infer TEntryFilter,
|
||||||
|
infer TCollectionFilter,
|
||||||
|
infer TError
|
||||||
|
>
|
||||||
|
? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError }
|
||||||
|
: { data: never; entryFilter: never; collectionFilter: never; error: never };
|
||||||
|
type ExtractDataType<T> = ExtractLoaderTypes<T>['data'];
|
||||||
|
type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>['entryFilter'];
|
||||||
|
type ExtractCollectionFilterType<T> = ExtractLoaderTypes<T>['collectionFilter'];
|
||||||
|
type ExtractErrorType<T> = ExtractLoaderTypes<T>['error'];
|
||||||
|
|
||||||
|
type LiveLoaderDataType<C extends keyof LiveContentConfig['collections']> =
|
||||||
|
LiveContentConfig['collections'][C]['schema'] extends undefined
|
||||||
|
? ExtractDataType<LiveContentConfig['collections'][C]['loader']>
|
||||||
|
: import('astro/zod').infer<
|
||||||
|
Exclude<LiveContentConfig['collections'][C]['schema'], undefined>
|
||||||
|
>;
|
||||||
|
type LiveLoaderEntryFilterType<C extends keyof LiveContentConfig['collections']> =
|
||||||
|
ExtractEntryFilterType<LiveContentConfig['collections'][C]['loader']>;
|
||||||
|
type LiveLoaderCollectionFilterType<C extends keyof LiveContentConfig['collections']> =
|
||||||
|
ExtractCollectionFilterType<LiveContentConfig['collections'][C]['loader']>;
|
||||||
|
type LiveLoaderErrorType<C extends keyof LiveContentConfig['collections']> = ExtractErrorType<
|
||||||
|
LiveContentConfig['collections'][C]['loader']
|
||||||
|
>;
|
||||||
|
|
||||||
|
export type ContentConfig = typeof import("./../src/content.config.mjs");
|
||||||
|
export type LiveContentConfig = never;
|
||||||
|
}
|
||||||
1
.astro/data-store.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[["Map",1,2],"meta::meta",["Map",3,4,5,6],"astro-version","5.17.1","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true,\"allowedDomains\":[]},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"liveContentCollections\":false,\"csp\":false,\"staticImportMetaEnv\":false,\"chromeDevtoolsWorkspace\":false,\"failOnPrerenderConflict\":false,\"svgo\":false},\"legacy\":{\"collections\":false}}"]
|
||||||
5
.astro/settings.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"_variables": {
|
||||||
|
"lastUpdateCheck": 1770610101158
|
||||||
|
}
|
||||||
|
}
|
||||||
2
.astro/types.d.ts
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/// <reference types="astro/client" />
|
||||||
|
/// <reference path="content.d.ts" />
|
||||||
51
.gitignore
vendored
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# 依赖包
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# 环境变量
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
.env.*.local
|
||||||
|
|
||||||
|
# 数据库文件
|
||||||
|
*.sqlite
|
||||||
|
*.sqlite3
|
||||||
|
*.db
|
||||||
|
|
||||||
|
# 日志文件
|
||||||
|
logs/
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
# 编辑器目录和文件
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# 构建输出
|
||||||
|
dist/
|
||||||
|
build/
|
||||||
|
output/
|
||||||
|
|
||||||
|
# 临时文件
|
||||||
|
tmp/
|
||||||
|
temp/
|
||||||
|
*.tmp
|
||||||
|
*.temp
|
||||||
|
|
||||||
|
# 测试覆盖率
|
||||||
|
coverage/
|
||||||
|
.nyc_output/
|
||||||
|
|
||||||
|
# PM2配置
|
||||||
|
pm2.json
|
||||||
|
ecosystem.config.js
|
||||||
|
|
||||||
|
# 备份文件
|
||||||
|
*.bak
|
||||||
|
*.backup
|
||||||
|
*.old
|
||||||
188
README.md
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
# 贝凡官网
|
||||||
|
|
||||||
|
浙江贝凡网络科技公司官方网站,提供企业介绍、产品展示、解决方案等信息的现代化网站。
|
||||||
|
|
||||||
|
## 技术栈
|
||||||
|
|
||||||
|
- **框架**:[Astro 5.7.3](https://astro.build) - 现代化的静态站点生成器
|
||||||
|
- **样式**:[Tailwind CSS](https://tailwindcss.com) - 实用优先的 CSS 框架
|
||||||
|
- **包管理器**:[pnpm](https://pnpm.io) - 快速、节省磁盘空间的包管理器
|
||||||
|
|
||||||
|
## 项目结构
|
||||||
|
|
||||||
|
```
|
||||||
|
beifan.cn/
|
||||||
|
├── src/
|
||||||
|
│ ├── layouts/
|
||||||
|
│ │ └── Layout.astro # 主布局组件(包含导航栏、页脚等)
|
||||||
|
│ ├── pages/
|
||||||
|
│ │ ├── index.astro # 首页
|
||||||
|
│ │ └── intro/
|
||||||
|
│ │ ├── qazk/ # 企安智控详情页
|
||||||
|
│ │ ├── hardware/ # 硬件物联详情页
|
||||||
|
│ │ ├── customized-deployment/ # 本地化定制详情页
|
||||||
|
│ │ └── miniapp-manual/ # 小程序手册页
|
||||||
|
│ ├── components/
|
||||||
|
│ │ └── sections/ # 首页各功能区块组件
|
||||||
|
│ │ ├── Hero.astro
|
||||||
|
│ │ ├── Timeline.astro
|
||||||
|
│ │ ├── SaaS.astro
|
||||||
|
│ │ ├── Customization.astro
|
||||||
|
│ │ ├── Policy.astro
|
||||||
|
│ │ ├── AccidentCases.astro
|
||||||
|
│ │ ├── Hardware.astro
|
||||||
|
│ │ ├── AIModel.astro
|
||||||
|
│ │ ├── Honors.astro
|
||||||
|
│ │ ├── Contact.astro
|
||||||
|
│ │ ├── Partnership.astro
|
||||||
|
│ │ └── Footer.astro
|
||||||
|
│ ├── styles/
|
||||||
|
│ │ └── global.css # 全局样式
|
||||||
|
文件├── public/ # 静态资源
|
||||||
|
│ ├── img/ # 图片资源
|
||||||
|
│ ├── js/ # JavaScript 文件
|
||||||
|
│ ├── docs/ # 文档资源
|
||||||
|
│ └── intro/ # Intro 页面的静态资源
|
||||||
|
│ ├── qazk/
|
||||||
|
│ ├── hardware/
|
||||||
|
│ ├── customized-deployment/
|
||||||
|
│ └── miniapp-manual/
|
||||||
|
├── astro.config.mjs # Astro 配置文件
|
||||||
|
├── tailwind.config.mjs # Tailwind CSS 配置文件
|
||||||
|
├── package.json # 项目依赖配置
|
||||||
|
└── pnpm-lock.yaml # pnpm 锁文件
|
||||||
|
```
|
||||||
|
|
||||||
|
## 快速开始
|
||||||
|
|
||||||
|
### 安装依赖
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm install
|
||||||
|
```
|
||||||
|
|
||||||
|
### 开发模式
|
||||||
|
|
||||||
|
启动本地开发服务器:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm dev
|
||||||
|
```
|
||||||
|
|
||||||
|
访问 http://localhost:4321 查看网站。
|
||||||
|
|
||||||
|
### 构建生产版本
|
||||||
|
|
||||||
|
构建静态站点:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm build
|
||||||
|
```
|
||||||
|
|
||||||
|
构建产物将输出到 `dist/` 目录。
|
||||||
|
|
||||||
|
### 预览构建结果
|
||||||
|
|
||||||
|
预览生产构建:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm preview
|
||||||
|
```
|
||||||
|
|
||||||
|
## 功能特性
|
||||||
|
|
||||||
|
- 响应式设计,支持桌面端和移动端
|
||||||
|
- 基于 Astro 的静态站点生成,加载速度快
|
||||||
|
- Tailwind CSS 提供丰富的实用样式类
|
||||||
|
- 模块化组件设计,便于维护和扩展
|
||||||
|
- 支持 Type checking(通过 Astro Check)
|
||||||
|
|
||||||
|
## 站点内容
|
||||||
|
|
||||||
|
### 主页
|
||||||
|
|
||||||
|
- **Hero 区域**:全场景产业数字化转型服务介绍
|
||||||
|
- **公司介绍**:浙江贝凡发展历程时间轴
|
||||||
|
- **核心业务 1 - SaaS化系统**:企安智控智能安全管理解决方案
|
||||||
|
- **核心业务 2 - 本地化定制**:多行业全场景定制服务
|
||||||
|
- **最新政策导向**:安全生产相关政策法规
|
||||||
|
- **典型事故案例**:重大事故案例分析
|
||||||
|
- **核心业务 3 - 硬件物联**:12个物联网应用场景
|
||||||
|
- **AI大模型**:15个AI应用场景
|
||||||
|
- **公司荣誉资质**:企业资质展示
|
||||||
|
- **联系我们**:联系方式展示
|
||||||
|
- **生态合作**:合作伙伴信息
|
||||||
|
- **页脚**:版权信息、ICP备案等
|
||||||
|
|
||||||
|
### Intro 子页面
|
||||||
|
|
||||||
|
- **企安智控**:智能安全管理平台详细介绍
|
||||||
|
- **硬件物联**:27种智能硬件产品展示
|
||||||
|
- **本地化定制**:全场景产业数字化定制方案
|
||||||
|
- **小程序手册**:企安智控小程序使用指南
|
||||||
|
|
||||||
|
## 配置说明
|
||||||
|
|
||||||
|
### Astro 配置
|
||||||
|
|
||||||
|
项目使用了 Astro 的 Tailwind 集成,在 `astro.config.mjs` 中配置:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
import tailwind from '@astrojs/tailwind';
|
||||||
|
import { defineConfig } from 'astro/config';
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
integrations: [tailwind()],
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
### Tailwind 配置
|
||||||
|
|
||||||
|
在 `tailwind.config.mjs` 中扩展了主题颜色:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
export default {
|
||||||
|
content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'],
|
||||||
|
theme: {
|
||||||
|
extend: {
|
||||||
|
colors: {
|
||||||
|
primary: '#165DFF',
|
||||||
|
secondary: '#36D399',
|
||||||
|
dark: '#1E293B',
|
||||||
|
light: '#F8FAFC'
|
||||||
|
},
|
||||||
|
fontFamily: {
|
||||||
|
inter: ['Inter', 'system-ui', 'sans-serif'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
plugins: [],
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 部署
|
||||||
|
|
||||||
|
### 静态部署
|
||||||
|
|
||||||
|
项目构建为静态站点,可部署到任何静态托管服务:
|
||||||
|
|
||||||
|
- **Vercel**
|
||||||
|
- **Netlify**
|
||||||
|
- **GitHub Pages**
|
||||||
|
- **Cloudflare Pages**
|
||||||
|
- **阿里云 OSS**
|
||||||
|
- **腾讯云 COS**
|
||||||
|
|
||||||
|
部署时只需将 `dist/` 目录的内容上传到静态托管服务即可。
|
||||||
|
|
||||||
|
## 许可证
|
||||||
|
|
||||||
|
© 2026 浙江贝凡网络科技有限公司. All Rights Reserved.
|
||||||
|
|
||||||
|
- ICP 备案:浙ICP备2025170226号-4
|
||||||
|
- 公安备案:浙公网安备33011002018371号
|
||||||
|
|
||||||
|
## 联系方式
|
||||||
|
|
||||||
|
- 电话:400-998-5710
|
||||||
|
- 网址:https://beifan.cn
|
||||||
6
astro.config.mjs
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
import tailwind from '@astrojs/tailwind';
|
||||||
|
import { defineConfig } from 'astro/config';
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
integrations: [tailwind()],
|
||||||
|
});
|
||||||
28
package.json
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"name": "贝凡官网",
|
||||||
|
"type": "module",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"packageManager": "pnpm@10.29.2",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "astro dev",
|
||||||
|
"start": "astro dev",
|
||||||
|
"build": "astro check && astro build",
|
||||||
|
"preview": "astro preview",
|
||||||
|
"astro": "astro"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"astro": "^5.7.3"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@astrojs/check": "^0.9.6",
|
||||||
|
"@astrojs/tailwind": "^6.0.2",
|
||||||
|
"tailwindcss": "^3.4.19",
|
||||||
|
"typescript": "^5.9.3"
|
||||||
|
},
|
||||||
|
"pnpm": {
|
||||||
|
"onlyBuiltDependencies": [
|
||||||
|
"esbuild",
|
||||||
|
"sharp"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
4316
pnpm-lock.yaml
generated
Normal file
BIN
public/docs/合作申请表.xlsx
Normal file
BIN
public/favicon.ico
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
public/img/accident-case-1.webp
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
public/img/accident-case-2.webp
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
public/img/accident-case-3.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
public/img/accident-case-4.webp
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
public/img/accident-case-5.webp
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
public/img/accident-case-6.webp
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
public/img/ai-landscape.webp
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
public/img/ai-product-1.webp
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
public/img/ai-product-10.webp
Normal file
|
After Width: | Height: | Size: 75 KiB |
BIN
public/img/ai-product-11.webp
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
public/img/ai-product-12.webp
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
public/img/ai-product-13.webp
Normal file
|
After Width: | Height: | Size: 75 KiB |
BIN
public/img/ai-product-14.webp
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/img/ai-product-15.webp
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
public/img/ai-product-16.webp
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
public/img/ai-product-2.webp
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
public/img/ai-product-3.webp
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
public/img/ai-product-4.webp
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
public/img/ai-product-5.webp
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
public/img/ai-product-6.webp
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
public/img/ai-product-7.webp
Normal file
|
After Width: | Height: | Size: 94 KiB |
BIN
public/img/ai-product-8.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
public/img/ai-product-9.webp
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
public/img/banner.webp
Normal file
|
After Width: | Height: | Size: 103 KiB |
BIN
public/img/bcm-2.webp
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
public/img/beian.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
public/img/certificate-1.webp
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
public/img/certificate-2.webp
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
public/img/certificate-3.webp
Normal file
|
After Width: | Height: | Size: 243 KiB |
BIN
public/img/company-building.jpg
Normal file
|
After Width: | Height: | Size: 85 KiB |
BIN
public/img/company-hangzhou.jpg
Normal file
|
After Width: | Height: | Size: 87 KiB |
BIN
public/img/company-showroom.jpg
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
public/img/grid.webp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/img/hardware-1.webp
Normal file
|
After Width: | Height: | Size: 163 KiB |
BIN
public/img/hardware-10.webp
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
public/img/hardware-2.webp
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
public/img/hardware-3.webp
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
public/img/hardware-4.webp
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
public/img/hardware-5.webp
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
public/img/hardware-6.webp
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
public/img/hardware-7.webp
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
public/img/hardware-8.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
public/img/hardware-9.webp
Normal file
|
After Width: | Height: | Size: 113 KiB |
BIN
public/img/hero-banner-1.webp
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/img/hero-banner-2.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
public/img/hero-banner-3.webp
Normal file
|
After Width: | Height: | Size: 61 KiB |
BIN
public/img/hr.webp
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
public/img/logo.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
public/img/official-douyin.jpg
Normal file
|
After Width: | Height: | Size: 103 KiB |
BIN
public/img/official-wechat.jpg
Normal file
|
After Width: | Height: | Size: 150 KiB |
BIN
public/img/official-xiaohongshu.jpg
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
public/img/partner-aliyun.webp
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
public/img/partner-amap.webp
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
BIN
public/img/partner-cmcc.webp
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
public/img/partner-ct.webp
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
public/img/partner-cu.webp
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
public/img/partner-doubao.webp
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
public/img/partner-hikvision.webp
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
public/img/partner-inspur.webp
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/img/partner-tencent.webp
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
public/img/partner-zjtd.webp
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
public/img/policy-1.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
public/img/policy-2.webp
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
public/img/policy-3.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
public/img/policy-4.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
public/img/policy-5.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
public/img/policy-6.webp
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
public/img/policy-7.webp
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
public/img/product-customization-1.webp
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
public/img/product-customization-2.webp
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
public/img/product-energy-1.webp
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/img/product-saas-1.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
public/img/product-safety-1.webp
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
public/img/product-safety-2.webp
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
public/img/product-safety-3.webp
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
public/img/product-solution-1.webp
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
public/img/product-system-1.webp
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
public/img/product-system-2.webp
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
public/img/qazk-logo.png
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
public/img/timeline-2019-icon.webp
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
public/img/timeline-2022-icon.webp
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
public/img/timeline-2024-icon.webp
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
public/img/timeline-2025-icon.webp
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
public/img/timeline-2026-icon.webp
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
public/img/timeline-ecology-icon.webp
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/img/timeline-innovation-icon.webp
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
public/img/timeline-vision-icon.webp
Normal file
|
After Width: | Height: | Size: 10 KiB |