web 端前端

准备工作

概述

Web 项目基于Nuxt.js 3框架开发,需要先安装Node.js和npm。推荐使用稳定版本(LTS)以确保最佳兼容性。

安装步骤

1.访问 Node.js官网

2.下载并安装适合您操作系统的 Node.js 安装包(建议下载LTS版本)

3.安装完成后,打开命令行工具验证安装是否成功:

复制代码
# 检查Node.js版本
node -v

# 检查npm版本
npm -v

如果命令返回对应的版本号,则说明安装成功。

学习地址

Nuxt.js 3官方文档:https://nuxt.com/docs/getting-started/introduction

目录结构

复制代码
web/
├── addon/                      # 插件功能模块
│   ├── cms/                    # 内容管理系统插件
│   │   ├── api/                # CMS相关API
│   │   ├── assets/             # CMS资源文件
│   │   ├── lang/               # CMS语言包
│   │   └── pages/              # CMS页面组件   
│   └── seckill/                # 秒杀插件
│   │   ├── api/                # 秒杀API
│   │   ├── lang/               # 秒杀语言包
│   │   └── pages/              # 秒杀页面组件
├── app/                        # 核心应用代码
│   ├── api/                    # API接口定义
│   │   ├── article.ts          # 文章相关接口
│   │   ├── auth.ts             # 认证相关接口
│   │   ├── member.ts           # 会员相关接口
│   │   └── system.ts           # 系统相关接口
│   ├── assets/                 # 应用资源
│   ├── lang/                   # 应用语言包
│   │   ├── en/                 # 英文
│   │   └── zh-cn/              # 中文
│   ├── pages/                  # 页面组件
│   │   ├── article/            # 文章相关页面
│   │   ├── auth/               # 认证相关页面
│   │   ├── member/             # 会员相关页面
│   │   ├── site/               # 站点相关页面
│   │   ├── index.vue           # 首页
│   │   └── routes.ts           # 路由配置
│   └── router.options.ts       # 路由选项配置
├── assets/                     # 静态资源文件
├── components/                 # 公共组件
│   ├── icon/                   # 图标组件
│   │   └── index.vue           # 图标组件入口
│   ├── sidebar/                # 侧边栏组件
│   │   └── index.vue           # 侧边栏组件入口
│   └── sms-code/               # 短信验证码组件
│   │   └── index.vue           # 短信验证码组件入口
├── composables/                # 组合式函数
│   ├── useCaptcha.ts           # 验证码相关方法
│   ├── useLang.ts              # 语言相关方法
│   ├── useLogin.ts             # 登录相关方法
│   └── useSendSms.ts           # 短信发送相关方法
├── env/                        # 环境配置文件
│   ├── .env.dev                # 开发环境配置
│   └── .env.product            # 生产环境配置
├── lang/                       # 语言包
│   ├── en/                     # 英文语言包
│   │   └── common.json         # 公共英文翻译
│   └── zh-cn/                  # 中文语言包
│   │   └── common.json         # 公共中文翻译
├── layouts/                    # 布局组件
│   ├── default/                # 默认布局
│   │   └── components/         # 默认布局组件
│   ├── container.vue           # 容器布局组件
│   └── default.vue             # 默认布局入口
├── middleware/                 # 中间件
│   ├── auth.ts                 # 认证中间件
│   └── lang-load.global.ts     # 全局语言加载中间件
├── plugins/                    # 插件
│   ├── element.plus.ts         # Element Plus插件配置
│   ├── i18n.ts                 # 国际化插件配置
│   └── pinia.ts                # Pinia状态管理插件配置
├── public/                     # 公共静态资源
│   └── favicon.ico             # 网站图标
├── stores/                     # Pinia状态管理
│   ├── app.ts                  # 应用状态
│   ├── config.ts               # 配置状态
│   ├── member.ts               # 会员状态
│   └── system.ts               # 系统状态
├── types/                      # 类型定义
│   └── global.d.ts             # 全局类型定义
├── utils/                      # 工具函数
│   ├── common.ts               # 公共工具函数
│   ├── language.ts             # 语言工具函数
│   ├── request.ts              # 请求工具函数
│   ├── storage.ts              # 存储工具函数
│   └── test.ts                 # 测试工具函数
├── app.vue                     # 应用入口组件
├── nuxt.config.ts              # Nuxt配置文件
├── package-lock.json           # npm依赖锁定文件
├── package.json                # 项目依赖配置  
├── publish.cjs                 # 发布脚本
├── tsconfig.json               # TypeScript配置
└── windi.config.ts             # Windi CSS配置

路由

路由系统说明

路由配置文件

主应用路由位置:web/app/pages/routes.ts

插件路由位置:addon/插件/pages/routes.ts

路由配置结构

复制代码
{
  path: string,           // 路由路径
  component: () => import('path/to/component.vue'),  // 组件路径
  meta: {
    layout?: string,      // 布局名称
    middleware?: string[] // 中间件列表
  }
}

路由使用

默认布局:layouts/default.vue(含导航栏、侧边栏)

容器布局:layouts/container.vue(简洁布局,用于登录等页面)

中间件

auth:认证中间件,保护会员中心页面

lang-load.global:全局语言加载中间件

跳转方式

复制代码
<!-- Nuxt Link组件 -->
<NuxtLink to="/auth/login">登录</NuxtLink>
<NuxtLink :to="{ path: '/article/detail', query: { id: 123 } }">文章详情</NuxtLink>

// UseRouter组合式函数
import { useRouter, useRoute } from 'vue-router'

const router = useRouter()
const route = useRoute()

// 跳转路由
router.push('/auth/login')
router.push({ path: '/article/detail', query: { id: 123 } })

// 获取参数
const articleId = route.query.id

接口

API模块结构

API按业务领域划分为多个模块,位于 web/app/api/ 目录下:

复制代码
├── app/
│   ├── api/
│   │   ├── article.ts              # 文章相关接口
│   │   ├── auth.ts                 # 认证相关接口
│   │   ├── member.ts               # 会员相关接口
│   │   └── system.ts               # 系统相关接口

文章接口模块(srticle.ts)

提供文章相关的数据获取功能:

复制代码
/**
 * 文章列表
 */
export function getArticleList(params: Record<string, any>) {
    return request.get('article/article', params)
}

/**
 * 文章列表
 */
export function getArticleAll(params: Record<string, any>) {
    return request.get('article/article/all', params)
}

/**
 * 文章详情
 */
export function getArticleDetail(id: number) {
    return request.get(`article/article/${id}`)
}

/**
 * 文章分类
 */
export function getArticleCategory() {
    return request.get('article/category')
}

认证接口模块(auth.ts)

处理用户登录、注册、退出等认证相关功能:

复制代码
// 用户名注册
export function usernameRegister(data: AnyObject) {
    let url = 'register'
    data.pid && (url += `?pid=${data.pid}`) // 支持推荐人ID
    return request.post(url, data)
}

// 手机号注册
export function mobileRegister(data: AnyObject) { /*...*/ }

// 微信登录相关接口
export function wechatLogin(data: AnyObject) { /*...*/ }
export function weappLogin(data: AnyObject) { /*...*/ }
export function scanlogin() { /*...*/ }

// 绑定手机号
export function bind(data: AnyObject) { /*...*/ }

会员接口模块(member.ts)

提供会员信息查询和管理功能:

复制代码
/**
 * 获取验证码
 */
export function getCaptcha() {
    return request.get('captcha', { time: (new Date().getTime()) })
}

/**
 * 获取微信公众号授权码
 */
export function getWechatAuthCode(data: AnyObject) {
    return request.get('wechat/codeurl', data)
}

/**
 * 同步微信信息
 */
export function wechatSync(data: AnyObject) {
    return request.get('wechat/sync', data)
}

/**
 * 获取协议信息
 */
export function getAgreementInfo(key: string) {
    return request.get(`agreement/${key}`)
}

/**
 * 重置密码
 */
export function resetPassword(data: AnyObject) {
    return request.post(`password/reset`, data)
}

/**
 * 发送短信验证码
 */
export function sendSms(data: AnyObject) {
    return request.post(`send/mobile/${data.type}`, data)
}

/**
 * 获取微信jssdk config
 */
export function getWechatSkdConfig(data: AnyObject) {
    return request.get('wechat/jssdkconfig', data)
}

/**
 * 拉取图片
 */
export function fetchImage(data: AnyObject) {
    return request.post('file/image/fetch', data)
}

/**
 * 拉取base64图片
 */
export function fetchBase64Image(data: AnyObject) {
    return request.post('file/image/base64', data)
}

/**
 * 获取版权信息
 */
export function getCopyRight() {
    return request.get('copyright')
}

/**
 * 获取站点信息
 */
export function getSiteInfo() {
    return request.get('site')
}

接口使用示例

导入并使用API:

复制代码
// 在组件中导入并使用API
import { getArticleList, getArticleDetail } from '@/app/api/article'

export default {
  setup() {
    // 获取文章列表
    const fetchArticles = async () => {
      try {
        const params = { page: 1, size: 10, category_id: 1 }
        const result = await getArticleList(params)
        console.log('文章列表:', result)
      } catch (error) {
        console.error('获取文章列表失败:', error)
      }
    }

    // 获取文章详情
    const fetchArticleDetail = async (id: number) => {
      try {
        const result = await getArticleDetail(id)
        console.log('文章详情:', result)
      } catch (error) {
        console.error('获取文章详情失败:', error)
      }
    }

    return {
      fetchArticles,
      fetchArticleDetail
    }
  }
}

web 端打包上线

方式一

云编译:点击云编译按钮,等待编译完成即可

方式二

将项目源代码目录切换到 web 下,路径位置输入 cmd 回车启动命令

命令行中输入npm install 安装依赖

命令行输入npm run gengrate 打包命令,进行编译打包

编译完成后在项目源码根目录下web文件夹中可以看到生成一个 dist 文件夹

将 dist 下的所有文件压缩,运行环境(宝塔)中的 niucloud/public/web 中所有文件全部清除掉

将生成的编译压缩包上传到运行环境中,解压

以上操作完成,浏览器就可以访问web端

相关推荐
胖者是谁5 小时前
EasyPlayerPro的使用方法
前端·javascript·css
EndingCoder5 小时前
索引类型和 keyof 操作符
linux·运维·前端·javascript·ubuntu·typescript
liux35285 小时前
Web集群管理实战指南:从架构到运维
运维·前端·架构
沛沛老爹5 小时前
Web转AI架构篇 Agent Skills vs MCP:工具箱与标准接口的本质区别
java·开发语言·前端·人工智能·架构·企业开发
小光学长6 小时前
基于Web的长江游轮公共服务系统j225o57w(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库
Joe5567 小时前
vue2 + antDesign 下拉框限制只能选择2个
服务器·前端·javascript
ChangYan.7 小时前
monorepo 多包管理识别不到新增模块,解决办法
前端·chrome
Jinuss7 小时前
React元素创建介绍
前端·react.js
济6178 小时前
linux 系统移植(第六期)--Uboot移植(5)--bootcmd 和 bootargs 环境变量-- Ubuntu20.04
java·前端·javascript