SuperAPI AI 工具集

frappe-frontend-development

前端与建站

查看项目

更新于 10-15 14:19

技能介绍

用途

本技能用于使用 Frappe UI(Vue 3 + TailwindCSS)和门户页面构建现代前端应用。适用场景包括:为 Frappe 应用构建自定义 SPA 前端;使用 Frappe UI 组件(Button、Dialog、ListView 等);通过 Resource、ListResource、DocumentResource 实现数据获取;创建门户/公开页面;在 Frappe 应用内搭建 Vue 3 前端工具链。

前置输入

需要明确:应用名称以及前端是否已存在;前端类型(通过 Frappe UI 的完整 SPA,或门户页面);认证要求(登录用户、访客访问);所需的关键组件和数据资源。

选择前端方案

  • Frappe UI SPA:用于自定义应用前端,技术栈为 Vue 3、TailwindCSS、Vite。
  • 门户页面:用于简单公开页面,技术栈为 Jinja + HTML、少量 JS。
  • Desk 扩展:用于管理界面增强,使用 Form/List 脚本(参见 frappe-desk-customization)。

搭建 Frappe UI 前端

在 Frappe 应用目录内执行:

cd apps/my_app
npx degit frappe/frappe-ui-starter frontend
cd frontend
yarn
yarn dev

配置 main.js

import { createApp } from 'vue'
import {
    FrappeUI,
    setConfig,
    frappeRequest,
    resourcesPlugin,
    pageMetaPlugin
} from 'frappe-ui'
import App from './App.vue'
import './index.css'

let app = createApp(App)
app.use(FrappeUI)
setConfig('resourceFetcher', frappeRequest)
app.use(resourcesPlugin)
app.use(pageMetaPlugin)
app.mount('#app')

使用 Resource 获取数据

通用 Resource 用于自定义 API 调用,支持 url、params、auto、cache、transform、onSuccess、onError 等配置;提供 data、loading、error、fetched 属性,以及 fetch()、reload()、submit()、reset() 方法。

List Resource 用于带分页的 DocType 列表,支持 doctype、fields、filters、orderBy、pageLength、auto、cache;提供 data、hasNextPage、next()、reload(),以及 insert、setValue、delete、runDocMethod 等 CRUD 操作。

Document Resource 用于单个文档操作,支持 doctype、name、whitelistedMethods、onSuccess;提供 doc、reload()、setValue、setValueDebounced、白名单方法调用和 delete。

使用 Frappe UI 组件

组件类别包括:输入类(TextInput、Textarea、Select、Combobox、MultiSelect、Checkbox、Switch、DatePicker、TimePicker、Slider、Password、Rating);展示类(Alert、Avatar、Badge、Breadcrumbs、Progress、Tooltip、ErrorMessage、LoadingText);导航类(Button、Dropdown、Tabs、Sidebar、Popover);布局类(Dialog、ListView、Calendar、Tree);富内容类(TextEditor(TipTap)、Charts、FileUploader)。

指令与工具

可使用 onOutsideClickDirective、visibilityDirective 以及 debounce 工具。

配置 TailwindCSS

在 tailwind.config.js 中引入 frappe-ui 的预设,并将 frappe-ui 组件路径加入 content。

生产构建

执行 cd frontend && yarn build,构建产物由 Frappe 在 /frontend 路径下提供。

门户页面(替代方案)

对于无需完整 SPA 的简单公开页面,可在应用的 website/ 或 www/ 目录下创建 HTML 与 Python 文件,使用 Jinja 模板继承 templates/web.html,并在 get_context 中设置上下文数据。

验证

yarn dev 无错误启动;组件正确渲染;数据资源能获取并展示数据;CRUD 操作正常;认证正常(登录重定向、会话处理);yarn build 成功完成;生产资源能从 Frappe 正确提供。

故障排查

CORS 错误:本地开发设置 ignore_csrf,生产环境确保正确的 CSRF 令牌。API 调用 404:检查方法路径,确认 @frappe.whitelist() 装饰器。组件未找到:确保导入路径正确,检查 frappe-ui 版本。样式损坏:确认 TailwindCSS 配置包含 frappe-ui 组件路径。认证问题:检查会话 cookie,确保开发代理配置中的站点 URL 匹配。

升级路径

Desk UI 脚本参见 frappe-desk-customization;API 端点实现参见 frappe-api-development;应用架构参见 frappe-app-development;官方应用的 UI/UX 模式参见 frappe-ui-patterns。

参考

references/frappe-ui.md(Frappe UI 框架参考);references/portal-development.md(门户页面概览)。

注意事项

自定义前端始终使用 Frappe UI,不要使用原生 JS、jQuery 或自定义框架;优先使用 FrappeUI 组件;CRUD 应用遵循 CRM/Helpdesk 应用外壳模式;处理加载状态;验证 API 响应;正确配置代理;处理认证。

常见错误

缺少 CORS/代理设置导致开发中 API 调用失败,需配置 Vite 代理转发 /api;未处理认证状态导致登出用户崩溃,需在挂载时检查登录用户;资源 URL 错误导致 404;硬编码站点 URL 破坏跨环境;未包含 CSRF 令牌导致 POST 失败;缺少 TailwindCSS 配置导致样式损坏;使用原生 JS/jQuery 导致体验不一致;自定义应用外壳设计与生态不一致。