用途
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 参考与代码示例,未提供版本兼容范围、性能约束、权限要求及安装配置说明。