列表视图是为除子表和单文档类型之外的所有文档类型生成的。
列表视图功能丰富,其中一些功能包括:
- 筛选
- 排序
- 分页
- 按标签筛选
- 切换视图为报表、日历、甘特图、看板等。
列表视图
标准列表 JS
要自定义列表视图,您必须在文档类型目录中有一个 {doctype}_list.js 文件。以下是所有可以自定义的选项。
例如,如果您想自定义 Note 文档类型,您需要创建一个包含以下内容的 note_list.js 文件。
frappe.listview_settings['Note'] = {
// add fields to fetch
add_fields: ['title', 'public'],
// set default filters
filters: [
['public', '=', 1]
],
hide_name_column: true, // hide the last column which shows the `name`
hide_name_filter: true, // hide the default filter field for the name column
onload(listview) {
// triggers once before the list is loaded
},
before_render() {
// triggers before every render of list records
},
// set this to true to apply indicator function on draft documents too
has_indicator_for_draft: false,
get_indicator(doc) {
// customize indicator color
if (doc.public) {
return [__("Public"), "green", "public,=,Yes"];
} else {
return [__("Private"), "darkgrey", "public,=,No"];
}
},
primary_action() {
// triggers when the primary action is clicked
},
get_form_link(doc) {
// override the form route for this doc
},
// add a custom button for each row
button: {
show(doc) {
return doc.reference_name;
},
get_label() {
return 'View';
},
get_description(doc) {
return __('View {0}', [`${doc.reference_type} ${doc.reference_name}`])
},
action(doc) {
frappe.set_route('Form', doc.reference_type, doc.reference_name);
}
},
// format how a field value is shown
formatters: {
title(val) {
return val.bold();
},
public(val) {
return val ? 'Yes' : 'No';
}
}
}
自定义列表 JS
您还可以通过创建系统中的客户端脚本来自定义列表视图。如果逻辑特定于您的站点,您应该编写客户端脚本。如果您想在多个站点之间共享列表视图自定义设置,则必须通过应用程序来包含它们。
要创建新的客户端脚本,请前往
首页 > 自定义 > 客户端脚本 > 新建
用于列表的新客户端脚本
上述自定义将产生如下所示的列表视图:
自定义列表视图
列表 JS 中的多个按钮
此功能在开发版中可用。
您现在可以通过列表视图客户端脚本,在列表视图行中的下拉菜单内添加多个按钮。此功能通过直接从列表视图方便地访问各种操作,增强了用户体验。
frappe.listview_settings["ToDo"] = {
hide_name_column: true,
add_fields: ["reference_type", "reference_name"],
button: {
show: function(doc) {
return doc.reference_name;
},
get_label: function() {
return __("Open", null, "Access");
},
get_description: function(doc) {
return __("Open {0}", [
`${__(doc.reference_type)}: ${doc.reference_name}`
]);
},
action: function(doc) {
frappe.set_route("Form", doc.reference_type, doc
.reference_name);
},
},
dropdown_button: {
get_label: __("Dropdown"),
buttons: [{
get_label: __("Button 1"),
show: function(doc) {
return true;
},
get_description: function(doc) {
return "Open Button 1 " + doc.reference_name;
},
action: function(doc) {
frappe.msgprint("Dropdown Button 1 Clicked " +
doc.reference_name);
}
},
{
get_label: __("Button 2"),
show: function(doc) {
return doc.status != "Closed";
},
get_description: function(doc) {
return "Open Button 2 " + doc.reference_name;
},
action: function(doc) {
frappe.msgprint("Dropdown Button 2 Clicked " +
doc.reference_name);
}
},
{
get_label: __("Button 3"),
show: function(doc) {
return doc.status != "Cancelled";
},
get_description: function(doc) {
return "Open Button 3 " + doc.reference_name;
},
action: function(doc) {
frappe.msgprint("Dropdown Button 3 Clicked " +
doc.reference_name);
}
},
]
}
};