SuperAPI AI 工具集

client-scripts

编程与开发

查看项目

更新于 10-16 04:08

技能介绍

用途

client-scripts 是 Frappe 框架中客户端 JavaScript 开发的参考资料,用于在编写表单脚本时查询事件、字段操作与 UI 定制的写法。按资料说明,当需要编写表单脚本(refresh、validate、字段事件)、操作表单字段(显示/隐藏、必填、只读)、创建对话框与提示、从客户端发起 API 调用、定制列表视图、添加自定义按钮或处理子表事件时,可以使用该技能。

主要能力

表单脚本位置

资料给出客户端脚本的目录约定:

my_app/
└── my_module/
    └── doctype/
        └── my_doctype/
            └── my_doctype.js    # Client script

表单事件

通过 frappe.ui.form.on('My DocType', {...}) 注册事件,资料列出的事件包括:

  • 加载事件:setup(表单创建时调用一次,数据加载前,用于设置查询、初始化变量)、onload(表单数据加载时、refresh 之前调用,用于为新单据设置默认值)、onload_post_render(表单渲染后调用,用于 DOM 操作、设置焦点)、refresh(每次表单刷新时调用,用于自定义按钮、字段切换、指示器)。
  • 保存事件:validate(保存前调用,返回 false 可阻止)、before_save(validate 之后、服务端请求之前调用)、after_save(保存成功后调用)。
  • 工作流事件:before_submit、on_submit、before_cancel、after_cancel。
  • 字段事件:以字段名命名函数(如 customer、posting_date),在字段值变化时调用。

字段操作

  • 显示属性:frm.toggle_display 控制显示/隐藏,frm.set_df_property 设置 read_only、reqd、hidden、label、description、options,frm.toggle_enable 禁用字段,frm.toggle_reqd 设置必填,修改后通过 frm.refresh_field 或 frm.refresh_fields 刷新。
  • 设置值:frm.set_value 可设置单个或多个值,支持 then 回调清除字段值;frm.set_df_property 可设置默认值。
  • Link 字段查询:frm.set_query 支持基础过滤、基于表单值的动态过滤、子表过滤、通过服务端方法自定义查询以及清除查询。

自定义按钮

在 refresh 事件中通过 frm.add_custom_button 添加按钮,支持下拉分组、btn-primary 样式、图标前缀、条件显示;可用 frm.remove_custom_button 移除、frm.clear_custom_buttons 清空,也可用 frm.page.set_primary_action 与 set_secondary_action 设置页面操作。

子表操作

子表事件包括 items_add、before_items_remove、items_remove 以及行内字段变化事件,并给出按行计算金额与汇总的示例。行操作包括 frm.add_child 添加行、按索引或 cdn 获取行、frappe.model.set_value 更新行、移除行与清空表、遍历行。

对话框

  • 简单提示:frappe.prompt 支持单字段与多字段表单,并可指定标题与提交按钮文案。
  • 自定义对话框:frappe.ui.Dialog 支持字段定义、get_query、change 事件、Column Break 与 Section Break、Table 字段、size、primary_action_label、primary_action、secondary_action_label,以及设置值、读取值、访问字段等方法。
  • 确认对话框:frappe.confirm 提供确认与取消回调。

API 调用

frappe.call 支持基础调用、加载指示(freeze、freeze_message)、error 回调、async/await 与 Promise 链式调用。

消息与工具

  • 消息:frappe.show_alert(指示色与显示秒数)、frappe.msgprint、frappe.throw。
  • 日期时间:frappe.datetime.nowdate、now_datetime、add_days、add_months。
  • 格式化:frappe.format、format_currency、flt、cint。
  • 导航:frappe.set_route、frappe.new_doc。
  • 翻译:__ 函数。

使用方式

按资料,将客户端脚本放置于对应 DocType 目录下的 .js 文件中,并通过 frappe.ui.form.on 注册事件处理函数。具体的安装或引入步骤在当前资料中暂未提供。

适用场景

适用于 Frappe 框架下的表单交互开发,例如字段联动、必填与只读控制、按钮与下拉操作、弹窗录入、子表明细计算、通过客户端调用服务端方法以及列表视图和 UI 定制。

限制

当前资料为客户端脚本的 API 参考与代码示例,未提供版本兼容范围、性能约束、权限要求及安装配置说明。