Skip to content

接口约定

注意:

nuxtAdmin 是一个约定式的程序,可能无法直接融入你的项目。需要你依照约定修改现有 api,或单独开发一套 api。

标准格式

所有接口统一按照以下格式返回数据:

json
{
    code: 200,
    message: "",
    data: {}
}
字段数据类型含义
codenumber状态码,正常为200,其它请自定义。
messagestring状态消息,留空时页面无动作;如有内容,会在右上角弹出内容。
dataobject数据主体,各接口返回的实际数据内容。

建议:

返回的数据中,简单数据类型的数据统一使用 string 类型, 不要使用 number 类型。特别是表单项,经过组件处理后,最终会以 string 类型被提交。

获取数据统一会发起 GET 请求。请求参数由 query 及 params 两个配置项配置。例如:

// params query
{ id: '', state: '3'}	// {query: ['id'], params: {state: '3'}}

提交数据统一会发起 POST 请求。

登录 /auth/login

这里使用的是 nuxt-auth 模块,它支持本地登录、第三方服务商授权登录、及其它自定义的登录方式,你可以在这里读到它的所有内容。

在 nuxtAdmin 中,仅使用了本地登录的模式,即标准的 jwt 鉴权模式。

登录页面会 POST 提交以下数据到接口,同时也需要接口按标准返回所需数据。

json
// post 提交
{
    username: "",
    password: "",
    keep_login: false
}
json
// 返回数据
{
    code: 200, message:"",
    data: {
        token: "the_token_string"
    }
}

目前只用到了 token 一个数据。如果你无法返回 data.token ,也根据你的数据格式进行修改,查看相关配置

登陆成功后,所有请求都会自动携带 token 信息。

json
// request headers
{
    "Authorization": "Bearer the_token_string"
}

登出 /auth/logout

json
{
    code: 200, message: "",
    data: {}
}

这个没什么好说的,处理好后端逻辑即可。前端会自动清理本地保存的 token 信息,并跳转到登录页面。

用户信息 /auth/me

这个接口是整个 nuxtAdmin 项目的核心,当前登录用户所有的权限功能都在这里返回,整个平台将基于这个数据进行构建。基本数据格式如下:

json
{
    code: 200, message: "",
    data: {
        menu: [],
        topbar: [],
        notice: ""
    }
}
字段数据类型含义备注
menuobject[]定义左侧菜单及各功能模块见下文
topbar(string | object)[]定义右上角区域内容见下文
noticestring消息数的接口地址。
留空或不返回,则不开启消息数的功能。
如:/auth/notice

这部分是页面左侧菜单及各功能模块的配置数据。基本数据格式如下:

json
[
    {
        label: "", 
        value: "", 
        icon: "", 
        component: "", 
        fetchType: "", 
        fetchUrl: "",
        actions: [],
        children: []
    }
]
字段数据类型含义备注
keystring字段名此栏目的key,也用于 url 中当前栏目的地址
labelstring名称在页面中显示的名称
iconstring图标的 class 值支持icones的所有图标,
命名格式为:i-{collection_name}-{icon_name}
如: i-ri-notification-3-line
componentstring内置组件的名称组件不同呈现的页面不同,
具体有哪些组件可参考内置组件
fetchTypestring组件加载时拉取数据的方式默认为 GET
fetchUrlstring组件加载时拉取数据的接口地址默认与当前栏目所在路径相同。
childrenarray当前栏目的子栏目见下文
actionsarray当前栏目的操作项见下文
hiddenboolean在侧边菜单栏中隐藏当前栏目默认 false。此配置只影响侧边菜单。

children

数据格式与上面的相同,不再重复说明。

为满足大多数业务场景,nuxtAdmin 的菜单最多支持三级。也就是 children 还能再有一个 children。

actions

这里把没有独立 url 地址的, 以弹窗(或侧边滑出)等形式出现的操作归为页内操作。基本数据格式如下:

字段数据类型含义备注
keystring字段名此操作的 key
labelstring名称在页面上显示的名称
titlestring对话框的左上角的标题如未配置 title 窗体标题会显示当前 label
iconstring图标的 class 值支持icones的所有图标,
命名格式为:i-{collection_name}-{icon_name}
如: i-ri-notification-3-line
componentstring内置组件的名称组件不同呈现的效果不同,
具体可参考操作级组件
showTypestring组件的展示方式默认为 modal 弹窗;如果设置为 slideover 则为右侧滑出。
fetchTypestring组件加载时拉取数据的方式默认为 GET
fetchUrlstring组件加载时拉取数据的接口地址默认值为与当前栏目所在路径+此操作的 key。如:/student/delete
submitUrlstring组件提交数据的地址默认值同 fetchUrl ,但会以 POST 方式提交。
queryarrayfetchUrl 及 submitUrl 的 GET 参数这里只提供 key,组件会自动匹配操作项数据中的 value。如: ['id']
paramsobjectfetchUrl 及 submitUrl 的 额外参数这里提供的参数都是固定值的,如: {ref: 'baidu.com'}

topbar

这部分是页面右上角内容的配置数据,如下图所示:

image-20240320105921315

基本数据格式如下:

json
[
    {label: "", icon: "", image: "", to: "", type: "", dropDown: []}
]
字段数据类型含义备注
labelstring文本内容
iconstring图标的 class 值支持icones的所有图标,
命名格式为:i-{collection_name}-{icon_name}
如: i-ri-notification-3-line
imagestring图片地址常用于显示用户头像
tostring程序内部路径或外部 url内部路径: /logout
注意:这里一定是当前用户有权限的地址
外部 url : https://www.baidu.com
componentstring内置了一些功能组件darkMode 深色模式与浅色模式的切换
fullScreen 浏览器全屏与非全屏的切换
i18n 多国语言的切换,具体配置看这里
activeIconstring激活状态下图标的 class 值darkMode、fullScreen 可设置此项
dropDownarray下拉菜单见下文
noticeKeystring绑定消息数接口返回的 key如需显示消息数,则需要使用此字段,
保证此字段的值与“接口”返回的key相同即可。

内置组件也可以配置 label、icon 等信息。如果不需要任何配置也可简写为一个 string。如:

json
[
    {label: "设置" '/config'},
    {type: "darkMode", icon: "x", activeIcon: "x"},	// 自定义图标
    'fullScreen',	// 无配置的简写
    {label: '退出', '/logout'}
]

如需下拉菜单,可配置此项,基本格式如下:

json
[
    {label: "", icon: "", to: ""}
]
字段数据类型含义备注
labelstring文本内容
iconstring图标的 class 值支持icones的所有图标,
命名格式为:i-{collection_name}-{icon_name}
如: i-ri-notification-3-line
tostring程序内部路径或外部 url内部路径: /logout
注意:这里一定是当前用户有权限的地址
外部 url : https://www.baidu.com

提示:

dropDown 还支持二维数组 [[{},{}], [{},{}]]。每组菜单之间将会显示一条分割线,如上图中 profile 与 exit 之间。

消息数 /auth/notice

什么是消息数?比如:站内信、新消息等,通常会以小红点的形式展现在页面上,这些功能的通知是如何及时显示在页面上的?这里使用了比较简单(简陋)的方式,每次路由切换时,请求消息数接口并处理返回的数据,此功能基于 Nuxt middleware 实现。

此接口返回数据格式如下:

json
{
    code: 200, message: "",
    data: {
        key1: 0,
        key2: {
            count: 0,
            color: ""
        }
    }
}
字段数据类型含义备注
keystring | object消息数值如果是string,则表示消息数。
值如果是object,则 count 为消息数,
color 为背景色,默认颜色为配置的主色调

key1 key2 为实际业务中自定义的 key,确保需要显示消息数的地方 noticeKey 的值与此 key 相同即可。

注意:

如果消息数是1,则以小红点的形式显示;如果大于1,则会显示实际值。