Vue3 + TypeScript 项目目录结构

news/2025/12/4 16:08:01/文章来源:https://www.cnblogs.com/mengqc1995/p/19308046

📁 项目根目录

项目名称/
├── .vscode/                    # VSCode 配置
│   ├── settings.json          # 编辑器设置
│   └── extensions.json         # 推荐扩展
├── .husky/                     # Git hooks
│   └── pre-commit             # 提交前检查
├── public/                     # 静态资源(不经过打包)
│   ├── favicon.ico
│   └── index.html
├── src/                        # 源代码目录
│   ├── api/                    # API 接口管理
│   │   ├── modules/           # 按模块划分的接口
│   │   │   ├── user.ts
│   │   │   ├── order.ts
│   │   │   └── product.ts
│   │   ├── request.ts          # axios 封装
│   │   ├── types.ts            # API 类型定义
│   │   └── index.ts            # 统一导出
│   │
│   ├── assets/                 # 静态资源(经过打包)
│   │   ├── images/            # 图片资源
│   │   │   ├── common/        # 公共图片
│   │   │   └── icons/         # 图标
│   │   ├── fonts/             # 字体文件
│   │   └── styles/            # 全局样式
│   │       ├── variables.scss # SCSS 变量
│   │       ├── mixins.scss    # SCSS 混入
│   │       ├── reset.scss     # 样式重置
│   │       └── index.scss     # 样式入口
│   │
│   ├── components/             # 公共组件
│   │   ├── common/            # 通用基础组件
│   │   │   ├── Button/
│   │   │   │   ├── Button.vue
│   │   │   │   └── index.ts
│   │   │   ├── Input/
│   │   │   │   ├── Input.vue
│   │   │   │   └── index.ts
│   │   │   └── Table/
│   │   │       ├── Table.vue
│   │   │       └── index.ts
│   │   │
│   │   ├── business/          # 业务组件
│   │   │   ├── UserCard/      # 用户卡片组件
│   │   │   │   ├── UserCard.vue
│   │   │   │   ├── components/ # 子组件
│   │   │   │   │   ├── UserAvatar.vue
│   │   │   │   │   ├── UserInfo.vue
│   │   │   │   │   └── UserActions.vue
│   │   │   │   ├── composables/ # 组件相关 hooks(逻辑复杂时使用)
│   │   │   │   │   └── useUserCard.ts
│   │   │   │   ├── styles/    # 组件样式(样式过长时抽离)
│   │   │   │   │   └── index.scss
│   │   │   │   └── index.ts
│   │   │   │
│   │   │   ├── OrderList/     # 订单列表组件
│   │   │   │   ├── OrderList.vue
│   │   │   │   ├── components/
│   │   │   │   │   ├── OrderItem.vue
│   │   │   │   │   ├── OrderStatus.vue
│   │   │   │   │   └── OrderActions.vue
│   │   │   │   ├── composables/
│   │   │   │   │   └── useOrderList.ts
│   │   │   │   ├── styles/
│   │   │   │   │   └── index.scss
│   │   │   │   └── index.ts
│   │   │   │
│   │   │   └── ProductCard/   # 商品卡片组件
│   │   │       ├── ProductCard.vue
│   │   │       ├── components/
│   │   │       │   ├── ProductImage.vue
│   │   │       │   ├── ProductPrice.vue
│   │   │       │   └── ProductTags.vue
│   │   │       ├── composables/
│   │   │       │   └── useProductCard.ts
│   │   │       ├── styles/
│   │   │       │   └── index.scss
│   │   │       └── index.ts
│   │   │
│   │   └── layout/            # 布局组件
│   │       ├── Header/
│   │       │   ├── Header.vue
│   │       │   ├── components/
│   │       │   │   ├── NavMenu.vue
│   │       │   │   ├── UserDropdown.vue
│   │       │   │   └── SearchBar.vue
│   │       │   ├── composables/
│   │       │   │   └── useHeader.ts
│   │       │   ├── styles/
│   │       │   │   └── index.scss
│   │       │   └── index.ts
│   │       │
│   │       ├── Sidebar/
│   │       │   ├── Sidebar.vue
│   │       │   ├── components/
│   │       │   │   └── MenuItem.vue
│   │       │   ├── composables/
│   │       │   │   └── useSidebar.ts
│   │       │   ├── styles/
│   │       │   │   └── index.scss
│   │       │   └── index.ts
│   │       │
│   │       └── Footer/
│   │           ├── Footer.vue
│   │           ├── styles/
│   │           │   └── index.scss
│   │           └── index.ts
│   │
│   ├── composables/            # 组合式函数(Hooks)
│   │   ├── useAuth.ts          # 认证相关
│   │   ├── useTable.ts         # 表格相关
│   │   ├── useForm.ts          # 表单相关
│   │   ├── usePagination.ts   # 分页相关
│   │   ├── useRequest.ts       # 请求相关
│   │   ├── usePermission.ts   # 权限相关
│   │   ├── useDebounce.ts     # 防抖
│   │   ├── useThrottle.ts     # 节流
│   │   ├── useLocalStorage.ts # 本地存储
│   │   └── index.ts            # 统一导出
│   │
│   ├── directives/             # 自定义指令
│   │   ├── v-loading.ts
│   │   ├── v-permission.ts
│   │   └── index.ts
│   │
│   ├── plugins/                # 插件配置
│   │   ├── element-plus.ts    # Element Plus 配置
│   │   ├── pinia.ts            # Pinia 配置
│   │   └── index.ts
│   │
│   ├── router/                 # 路由配置
│   │   ├── modules/            # 路由模块
│   │   │   ├── user.ts
│   │   │   ├── order.ts
│   │   │   └── product.ts
│   │   ├── index.ts            # 路由入口
│   │   ├── guards.ts           # 路由守卫
│   │   └── types.ts            # 路由类型
│   │
│   ├── stores/                 # Pinia 状态管理
│   │   ├── modules/            # 状态模块
│   │   │   ├── user.ts         # 用户状态
│   │   │   ├── app.ts          # 应用状态
│   │   │   ├── permission.ts   # 权限状态
│   │   │   └── order.ts        # 订单状态
│   │   └── index.ts            # Store 入口
│   │
│   ├── views/                  # 页面级组件(业务页面)
│   │   ├── login/              # 登录页面
│   │   │   ├── Login.vue
│   │   │   ├── components/     # 页面级子组件
│   │   │   │   ├── LoginForm.vue
│   │   │   │   └── LoginHeader.vue
│   │   │   ├── composables/    # 页面级 hooks(逻辑复杂时使用)
│   │   │   │   └── useLogin.ts
│   │   │   ├── styles/         # 页面样式(样式过长时抽离)
│   │   │   │   └── index.scss
│   │   │   └── index.ts
│   │   │
│   │   ├── dashboard/          # 仪表盘页面
│   │   │   ├── Dashboard.vue
│   │   │   ├── components/
│   │   │   │   ├── StatCard.vue
│   │   │   │   ├── ChartCard.vue
│   │   │   │   └── RecentActivity.vue
│   │   │   ├── composables/
│   │   │   │   └── useDashboard.ts
│   │   │   ├── styles/
│   │   │   │   └── index.scss
│   │   │   └── index.ts
│   │   │
│   │   ├── user/               # 用户管理页面
│   │   │   ├── index.vue       # 用户列表
│   │   │   ├── components/
│   │   │   │   ├── UserTable.vue
│   │   │   │   ├── UserSearch.vue
│   │   │   │   └── UserDialog.vue
│   │   │   ├── composables/
│   │   │   │   └── useUserManagement.ts
│   │   │   ├── styles/
│   │   │   │   └── index.scss
│   │   │   │
│   │   │   ├── detail/         # 用户详情子页面
│   │   │   │   ├── UserDetail.vue
│   │   │   │   ├── components/
│   │   │   │   │   ├── UserInfo.vue
│   │   │   │   │   └── UserHistory.vue
│   │   │   │   ├── composables/
│   │   │   │   │   └── useUserDetail.ts
│   │   │   │   └── styles/
│   │   │   │       └── index.scss
│   │   │   │
│   │   │   └── edit/           # 用户编辑子页面
│   │   │       ├── UserEdit.vue
│   │   │       ├── components/
│   │   │       │   └── UserForm.vue
│   │   │       ├── composables/
│   │   │       │   └── useUserEdit.ts
│   │   │       └── styles/
│   │   │           └── index.scss
│   │   │
│   │   ├── order/              # 订单管理页面
│   │   │   ├── index.vue       # 订单列表
│   │   │   ├── components/
│   │   │   │   ├── OrderTable.vue
│   │   │   │   ├── OrderFilter.vue
│   │   │   │   └── OrderDetailDialog.vue
│   │   │   ├── composables/
│   │   │   │   └── useOrderManagement.ts
│   │   │   ├── styles/
│   │   │   │   └── index.scss
│   │   │   │
│   │   │   └── detail/         # 订单详情子页面
│   │   │       ├── OrderDetail.vue
│   │   │       ├── components/
│   │   │       │   ├── OrderInfo.vue
│   │   │       │   ├── OrderItems.vue
│   │   │       │   └── OrderTimeline.vue
│   │   │       ├── composables/
│   │   │       │   └── useOrderDetail.ts
│   │   │       └── styles/
│   │   │           └── index.scss
│   │   │
│   │   └── product/            # 商品管理页面
│   │       ├── index.vue       # 商品列表
│   │       ├── components/
│   │       │   ├── ProductTable.vue
│   │       │   ├── ProductSearch.vue
│   │       │   └── ProductDialog.vue
│   │       ├── composables/
│   │       │   └── useProductManagement.ts
│   │       ├── styles/
│   │       │   └── index.scss
│   │       │
│   │       └── detail/         # 商品详情子页面
│   │           ├── ProductDetail.vue
│   │           ├── components/
│   │           │   ├── ProductInfo.vue
│   │           │   ├── ProductGallery.vue
│   │           │   └── ProductSpecs.vue
│   │           ├── composables/
│   │           │   └── useProductDetail.ts
│   │           └── styles/
│   │               └── index.scss
│   │
│   ├── utils/                  # 工具函数
│   │   ├── format.ts           # 格式化工具
│   │   ├── validate.ts         # 验证工具
│   │   ├── date.ts             # 日期工具
│   │   ├── storage.ts          # 存储工具
│   │   ├── common.ts           # 通用工具
│   │   └── index.ts
│   │
│   ├── types/                  # TypeScript 类型定义
│   │   ├── api.ts              # API 类型
│   │   ├── user.ts             # 用户类型
│   │   ├── order.ts            # 订单类型
│   │   ├── product.ts          # 商品类型
│   │   ├── common.ts           # 通用类型
│   │   └── index.ts
│   │
│   ├── constants/              # 常量定义
│   │   ├── api.ts              # API 常量
│   │   ├── status.ts           # 状态常量
│   │   └── index.ts
│   │
│   ├── config/                 # 配置文件
│   │   ├── index.ts            # 配置入口
│   │   └── env.ts              # 环境配置
│   │
│   ├── enums/                  # 枚举定义
│   │   ├── status.ts           # 状态枚举
│   │   ├── user.ts             # 用户相关枚举
│   │   └── index.ts
│   │
│   ├── App.vue                 # 根组件
│   ├── main.ts                 # 应用入口
│   └── env.d.ts                # 环境类型声明
│
├── tests/                      # 测试文件
│   ├── unit/                   # 单元测试
│   │   ├── components/
│   │   ├── composables/
│   │   └── utils/
│   ├── e2e/                    # 端到端测试
│   ├── setup.ts                # 测试配置
│   └── utils/                  # 测试工具
│
├── .eslintrc.cjs               # ESLint 配置
├── .prettierrc                 # Prettier 配置
├── .prettierignore             # Prettier 忽略文件
├── .gitignore                  # Git 忽略文件
├── .env                        # 环境变量
├── .env.development            # 开发环境变量
├── .env.production             # 生产环境变量
├── index.html                  # HTML 模板
├── package.json                # 项目依赖
├── pnpm-lock.yaml              # 依赖锁定文件(或 yarn.lock)
├── tsconfig.json               # TypeScript 配置
├── tsconfig.node.json          # Node TypeScript 配置
├── vite.config.ts              # Vite 配置
└── README.md                   # 项目说明

📋 目录说明

1. 复杂组件结构(components/business/)

复杂业务组件采用模块化组织,每个组件包含:

  • 主组件文件ComponentName.vue - 使用 <script setup lang="ts">
  • 子组件目录components/ - 存放组件内部使用的子组件
  • 组合式函数composables/ - 逻辑复杂时抽离业务逻辑 hooks
  • 样式文件styles/index.scss - 样式过长时抽离为单独文件
  • 导出文件index.ts - 统一导出

逻辑处理方案:

  • 简单逻辑:直接在 <script setup> 中编写
  • 复杂逻辑:抽离到 composables/useComponentName.ts

样式处理方案:

  • 简单样式:使用 <style scoped> 在组件内
  • 复杂样式:抽离到 styles/index.scss

示例:UserCard 组件结构

UserCard/
├── UserCard.vue              # 主组件(<script setup lang="ts">)
├── components/               # 子组件
│   ├── UserAvatar.vue       # 用户头像
│   ├── UserInfo.vue         # 用户信息
│   └── UserActions.vue      # 用户操作按钮
├── composables/             # 组件 hooks(逻辑复杂时使用)
│   └── useUserCard.ts       # 用户卡片相关逻辑
├── styles/                  # 组件样式(样式过长时抽离)
│   └── index.scss           # 样式文件
└── index.ts                 # 导出

2. 业务组件结构(views/)

页面级组件采用相同的模块化结构:

  • 主页面文件PageName.vueindex.vue - 使用 <script setup lang="ts">
  • 子组件目录components/ - 页面内部使用的组件
  • 组合式函数composables/ - 逻辑复杂时抽离页面级业务逻辑
  • 样式文件styles/index.scss - 样式过长时抽离为单独文件
  • 子页面目录:支持嵌套的子页面(如 detail/edit/

逻辑处理方案:

  • 简单逻辑:直接在 <script setup> 中编写
  • 复杂逻辑:抽离到 composables/usePageName.ts

样式处理方案:

  • 简单样式:使用 <style scoped> 在组件内
  • 复杂样式:抽离到 styles/index.scss

示例:用户管理页面结构

user/
├── index.vue                # 用户列表主页面
├── components/              # 页面级组件
│   ├── UserTable.vue       # 用户表格
│   ├── UserSearch.vue      # 搜索组件
│   └── UserDialog.vue      # 对话框组件
├── composables/            # 页面 hooks
│   └── useUserManagement.ts
├── styles/                 # 页面样式
│   └── index.scss
│
├── detail/                 # 用户详情子页面
│   ├── UserDetail.vue
│   ├── components/
│   ├── composables/
│   └── styles/
│
└── edit/                   # 用户编辑子页面├── UserEdit.vue├── components/├── composables/└── styles/

3. 组合式函数(composables/)

全局可复用的业务逻辑 hooks:

  • 通用 hooksuseAuth.tsuseTable.tsuseForm.ts
  • 工具类 hooksuseDebounce.tsuseThrottle.tsuseLocalStorage.ts
  • 组件级 hooks:放在对应组件的 composables/ 目录下

示例:useTable.ts

// composables/useTable.ts
export function useTable<T = any>(api: Function) {const loading = ref(false)const tableData = ref<T[]>([])const pagination = reactive({current: 1,pageSize: 10,total: 0})// ... 表格相关逻辑return {loading,tableData,pagination,// ... 其他方法}
}

4. 样式抽离(styles/)

样式采用分层管理,遵循"样式过长时抽离"的原则:

  • 全局样式src/assets/styles/ - 变量、混入、重置样式
  • 组件样式components/*/styles/ - 组件样式过长时抽离
  • 页面样式views/*/styles/ - 页面样式过长时抽离

样式组织原则:

  1. 简单样式:使用 <style scoped lang="scss"> 在组件/页面内
  2. 复杂样式:当样式代码超过 100-150 行时,抽离到独立的 styles/index.scss 文件
  3. 全局样式:统一在 assets/styles/ 管理

样式文件结构:

assets/styles/
├── variables.scss    # SCSS 变量(颜色、尺寸等)
├── mixins.scss      # SCSS 混入(复用样式片段)
├── reset.scss       # 样式重置
└── index.scss       # 样式入口(导入所有全局样式)components/UserCard/styles/
└── index.scss       # UserCard 组件样式(样式过长时抽离)views/user/styles/
└── index.scss       # 用户管理页面样式(样式过长时抽离)

🔧 技术栈说明

  • Vue 3:使用 Composition API
  • TypeScript:类型安全
  • Pinia:状态管理
  • Element Plus:UI 组件库
  • Vite:构建工具
  • ESLint:代码检查
  • Prettier:代码格式化

📝 命名规范

  1. 组件命名:PascalCase(如 UserCard.vue
  2. 文件命名
    • Vue 组件:PascalCase
    • TypeScript 文件:camelCase
    • 工具函数:camelCase
  3. 目录命名:kebabCase(如 userManagement/
  4. 变量命名:camelCase
  5. 常量命名:UPPER_SNAKE_CASE

🎯 最佳实践

  1. 组件拆分:复杂组件拆分为多个子组件
  2. 逻辑抽离:业务逻辑抽离到 composables
  3. 样式隔离:每个组件/页面有独立的样式文件
  4. 类型定义:所有接口和数据结构都有类型定义
  5. 统一导出:使用 index.ts 统一导出,方便引用

✅ 符合业内规范的部分

1. 核心目录结构

  • src/ 作为源代码根目录
  • components/views/ 分离(组件库 vs 页面)
  • composables/ 用于组合式函数(Vue3 标准做法)
  • stores/ 使用 modules/ 模块化组织(Pinia 推荐)
  • router/ 使用 modules/ 模块化组织
  • api/ 使用 modules/ 按业务模块划分
  • types/ 独立目录管理类型定义
  • utils/ 工具函数集中管理

2. 组件组织方式

  • components/common/ 通用基础组件
  • components/business/ 业务组件
  • components/layout/ 布局组件
  • ✅ 组件内部包含子组件、composables、样式(模块化组织)

3. 页面组织方式

  • views/ 按业务模块组织
  • ✅ 支持嵌套子页面(detail、edit 等)
  • ✅ 页面级组件、hooks、样式分离

4. 样式管理

  • ✅ 全局样式在 assets/styles/
  • ✅ 组件样式独立管理
  • ✅ 使用 SCSS 变量和混入

5. 配置文件

  • ✅ ESLint、Prettier 配置
  • ✅ TypeScript 配置
  • ✅ 环境变量文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/987001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树状数组写法

标准写法、后缀和写法、0下标写法树状数组写法 标准写法 template <int N> struct fenwick {int t[N + 1];void add(int x, int k) {for (; x <= N; x += x & -x) t[x] += k;}int query(int x, int r = 0…

MATLAB实现的光纤通信系统中的相干系统仿真

1. 系统参数设置 % 系统参数 fs = 1e12; % 采样频率 (Hz) fc = 193.1e12; % 载波频率 (Hz) B = 50e9; % 信号带宽 (Hz) L = 50e3; % 光纤长度 (m) alpha = 0.2; % 光纤衰减系数 (dB/km) gamma = 1.3; % 光纤非线性系数…

2025年三层共挤大棚膜厂商权威推荐榜:灌浆膜/无滴大棚农膜/农用大棚po膜实力厂商精选

在设施农业蓬勃发展的今天,作为覆盖材料的核心,农用大棚膜的性能直接决定了作物的生长环境、农资投入与最终产出。三层共挤技术的广泛应用,通过将不同功能的树脂分层复合,实现了“一膜多能”,有效解决了传统农膜在…

MATLAB实现牧羊人算法

MATLAB实现牧羊人算法,整合路径规划、动态编队控制和多智能体协同一、算法架构设计二、核心模块实现 1. 环境建模与角色分配 %% 参数设置 numAgents = 10; % 总智能体数量 dt = 0.1; % 时间步长 T = 50; % 总时间 ste…

品牌口碑声量榜:南京留学中介十大机构口碑持续破圈

南京高校扎堆,从南大、东大到各类国际学校,留学需求常年火爆。中介TOP10的比拼早已不是“能申请就行”,而是文书够不够独特、服务够不够透明、性价比够不够高。结合本地学生冲G5、藤校的核心诉求,实测10家机构后,…

使用 Java 将 PowerPoint 转换为 PDF 的完整指南 - E

虽然 PowerPoint 在演示、培训、汇报和营销素材中发挥着重要作用,但并不是所有设备和平台都能完美打开 PPT 文件。相比之下,PDF 文件则更适合跨设备阅读、在线分享和归档存储,而将 PowerPoint 转换为 PDF 就是一个规…

2025年终盘点:人行通道闸机行业十强榜单揭晓,智慧通行新趋势一览

2025年,中国通道闸机市场规模预计将突破330亿元,其中生物识别闸机的渗透率已达45%。市场对设备稳定性、智能化及场景适配性的要求持续升级,单纯依靠价格竞争的厂家正在被淘汰。 在这个技术迭代与市场分化的关键节点…

linux 批量停止进程

1. pkill -9 进程名pkill -9 进程名 pkill -9 是一个强制终止进程的命令,应该谨慎使用,优先尝试正常终止(不带 -9)。在内存紧急情况下(如您的Swap已满),可以合理使用来快速释放资源。

大模型工具调用的另类用法——结构化json输出

一. 原理 在我的上一篇笔记中,记录了如何使用原生的大模型进行工具调用:https://www.cnblogs.com/nanimono/p/19295032。让大模型进行工具调用本质上并不是让模型自动调用工具并返回结果,而是: 1. 在输入给模型的数…

2025年Deepseek知识库本地化部署服务商:别让知识卡壳拖垮你的业务

“张总,客户催着要设备维修方案,技术部查了俩小时还没找到去年的案例!”周五下午,某机械制造公司的销售总监王磊又接到这样的紧急电话——这已经是本周第三次因“知识找不到”错失商机。你是否也有过类似经历:新员…

canopen规范DS301/302/401/402

canopen规范DS301/302/401/4021. DS-301:CANopen 应用层与通信协议规范 (基础通用层)这是 CANopen 的“宪法”,所有其他规范都基于它都必须遵守。核心内容:定义了 CANopen 的 基本通信模型:PDO(Process Data Ob…

linux 操作系统中清空文件内容的两种方式对比

linux 操作系统中清空文件内容的两种方式对比方式 1:删除文件后再创建 rm -f file_name && touch file_name 会导致文件 inode 发生变化,如果某些运行中的进程是通过 inode 访问该文件,它们依然持用旧 inod…

Flathub常用软件

适合中国宝宝的Linux软件推荐Flathub是Linux系统上最主要的Flatpak应用商店和分发中心。你可以把它理解为一个集中化的“软件商城”,专门提供采用Flatpak打包格式的应用程序。它的核心价值在于解决了Linux长期以来的软…

2025年长沙烘焙西点口碑不错培训学校推荐,专业技能培训企业

在消费升级与餐饮业态多元化的浪潮中,烘焙西点行业正迎来黄金发展期。根据《2024中国烘焙行业白皮书》显示,我国烘焙市场规模已突破3000亿元,年复合增长率达12.8%,专业人才缺口超200万。面对市场上良莠不齐的培训机…

北京能够上门回收名家字画的公司机构 北京上门收画

祖传的齐白石花鸟册页不知真伪?多年前收藏的李可染山水画想变现却摸不准行情?整理老宅时翻出的启功书法,连是否为真迹都没把握——在字画收藏氛围浓厚的北京,不少个人藏家都有过这样的困惑。个人字画变现,怕遇到“…

2025年工业显示解决方案商口碑排行榜:友达光电口碑出众

工业显示作为智能设备的视觉中枢,其品质与供应链稳定性直接决定终端产品的市场竞争力。随着工业4.0与智能制造的加速渗透,企业对高可靠、定制化显示方案的需求激增,而友达光电口碑如何也成为采购决策中的高频疑问。…

2025年佛山五大AI搜索geo服务商排行榜,新测评精选AI

为帮佛山企业高效锁定适配自身需求的AI搜索geo合作伙伴,避免选型走弯路,我们从技术落地能力(如AI算法精准度、geo定位覆盖范围)、行业适配经验(含制造业场景贴合度、多渠道数据整合能力)、全周期服务质量(覆盖需…

2025年安徽AI搜索推广专业公司TOP5推荐,诚信高效的A

AI搜索时代呼啸而至,AI搜索能精准获客已成为安徽企业共识,但不敢动、不会动的困境却让众多合肥机械、芜湖建材、安庆律所等企业望而却步。面对市场上鱼龙混杂的AI搜索推广服务,如何挑选专业且诚信的合作伙伴?以下依…

脑电以及AI在酿酒领域究竟能发挥什么样的作用呢

一直在思考一个问题。身处酿酒行业,却又工作在脑电研究小组。所有研究都要围绕味嗅觉感知来进行。但是做纯科研,没人买单。领导要求做成产品,他们简单易用,可以直接出结果。结果做出了产品,但是做成什么样的产品才…

2025年湖南蛋糕培训学校年度排名:教学模式、环境与联系指南

在西点烘焙行业蓬勃发展的今天,选择一家靠谱的蛋糕培训学校成为许多烘焙爱好者与创业者的首要难题。蛋糕培训学校的教学模式是怎样的?环境如何?怎么联系?这些问题困扰着不少零基础学员。本文结合教学模式、环境设施…