diff --git a/frontend/src/app/layouts/AppHeader.vue b/frontend/src/app/layouts/AppHeader.vue
index 03f3fd723..b123ff10b 100644
--- a/frontend/src/app/layouts/AppHeader.vue
+++ b/frontend/src/app/layouts/AppHeader.vue
@@ -55,6 +55,9 @@
/>
+
+
+
@@ -74,6 +77,7 @@ import { useAuthStore } from '../../shared/stores/auth'
import { t } from '../../shared/i18n'
import UserMenu from '../../shared/components/UserMenu.vue'
import NotificationDropdown from '../../shared/components/NotificationDropdown.vue'
+import QuickCreate from '../../shared/components/QuickCreate.vue'
import AwesomeBarDropdown from '../../shared/components/AwesomeBarDropdown.vue'
import { useAwesomeBar } from '../../shared/composables/useAwesomeBar'
diff --git a/frontend/src/shared/api/common.ts b/frontend/src/shared/api/common.ts
index 3ca29515c..486f72afa 100644
--- a/frontend/src/shared/api/common.ts
+++ b/frontend/src/shared/api/common.ts
@@ -141,6 +141,16 @@ export const getPageTypeMeta = async (pagetype: string): Promise<{ success: bool
}
}
+// Get quick entry fields for a PageType
+export const getQuickEntryFields = async (pagetype: string): Promise<{ success: boolean; data?: any[]; message?: string }> => {
+ try {
+ const result = await api.call('jingrow.client.get_quick_entry_fields', { pagetype })
+ return { success: true, data: result.message || [] }
+ } catch (error: any) {
+ return { success: false, data: [], message: error.message || t('Failed to get quick entry fields') }
+ }
+}
+
// Get record attachments list
export const getRecordAttachments = async (pagetype: string, name: string): Promise<{ success: boolean; data?: any[]; message?: string }> => {
try {
diff --git a/frontend/src/shared/components/QuickCreate.vue b/frontend/src/shared/components/QuickCreate.vue
new file mode 100644
index 000000000..58c18110d
--- /dev/null
+++ b/frontend/src/shared/components/QuickCreate.vue
@@ -0,0 +1,298 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jingrow/client.py b/jingrow/client.py
index 71a790ff7..f3e110589 100644
--- a/jingrow/client.py
+++ b/jingrow/client.py
@@ -95,6 +95,30 @@ def get(pagetype, name=None, filters=None, parent=None):
return pg.as_dict()
+@jingrow.whitelist()
+def get_quick_entry_fields(pagetype):
+ """Returns fields for quick entry form of given pagetype"""
+ meta = jingrow.get_meta(pagetype)
+ fields = []
+ for df in meta.fields:
+ if (
+ (df.reqd or df.allow_in_quick_entry)
+ and not df.read_only
+ and not df.is_virtual
+ and df.fieldtype not in ("Tab Break", "Section Break", "Column Break")
+ ):
+ fields.append({
+ "fieldname": df.fieldname,
+ "label": df.label,
+ "fieldtype": df.fieldtype,
+ "reqd": df.reqd or 0,
+ "options": df.options or "",
+ "default": df.default or "",
+ "description": df.description or "",
+ })
+ return fields
+
+
@jingrow.whitelist()
def get_value(pagetype, fieldname, filters=None, as_dict=True, debug=False, parent=None):
"""Returns a value form a document
diff --git a/jingrow/core/pagetype/activity/activity.json b/jingrow/core/pagetype/activity/activity.json
index 8679a3db0..b532aacb7 100644
--- a/jingrow/core/pagetype/activity/activity.json
+++ b/jingrow/core/pagetype/activity/activity.json
@@ -17,6 +17,7 @@
],
"fields": [
{
+ "allow_in_quick_entry": 1,
"fieldname": "title",
"fieldtype": "Data",
"in_global_search": 1,
@@ -30,6 +31,7 @@
"fieldtype": "Column Break"
},
{
+ "allow_in_quick_entry": 1,
"default": "Note",
"fieldname": "activity_type",
"fieldtype": "Select",
@@ -44,6 +46,7 @@
"fieldtype": "Section Break"
},
{
+ "allow_in_quick_entry": 1,
"fieldname": "content",
"fieldtype": "Jeditor",
"label": "Content"
@@ -76,7 +79,7 @@
"grid_page_length": 50,
"index_web_pages_for_search": 1,
"links": [],
- "modified": "2026-04-20 21:35:36.193833",
+ "modified": "2026-04-21 23:42:39.213855",
"modified_by": "Administrator",
"module": "Core",
"name": "Activity",
diff --git a/jingrow/desk/pagetype/knowledge_base/knowledge_base.json b/jingrow/desk/pagetype/knowledge_base/knowledge_base.json
index 6658fb251..4681c2c92 100644
--- a/jingrow/desk/pagetype/knowledge_base/knowledge_base.json
+++ b/jingrow/desk/pagetype/knowledge_base/knowledge_base.json
@@ -12,6 +12,7 @@
],
"fields": [
{
+ "allow_in_quick_entry": 1,
"fieldname": "title",
"fieldtype": "Data",
"in_filter": 1,
@@ -21,11 +22,13 @@
"label": "Title"
},
{
+ "allow_in_quick_entry": 1,
"fieldname": "content",
"fieldtype": "Jeditor",
"label": "Content"
},
{
+ "allow_in_quick_entry": 1,
"fieldname": "status",
"fieldtype": "Select",
"in_list_view": 1,
@@ -42,6 +45,7 @@
"read_only": 1
},
{
+ "allow_in_quick_entry": 1,
"fieldname": "category",
"fieldtype": "Link",
"in_list_view": 1,
@@ -53,7 +57,7 @@
"grid_page_length": 50,
"index_web_pages_for_search": 1,
"links": [],
- "modified": "2025-09-01 22:31:27.311442",
+ "modified": "2026-04-21 23:43:13.225221",
"modified_by": "Administrator",
"module": "Desk",
"name": "Knowledge Base",
diff --git a/jingrow/desk/pagetype/note/note.json b/jingrow/desk/pagetype/note/note.json
index 48d82f545..8a5498ffd 100644
--- a/jingrow/desk/pagetype/note/note.json
+++ b/jingrow/desk/pagetype/note/note.json
@@ -16,6 +16,7 @@
],
"fields": [
{
+ "allow_in_quick_entry": 1,
"fieldname": "title",
"fieldtype": "Data",
"in_list_view": 1,
@@ -59,6 +60,7 @@
"search_index": 1
},
{
+ "allow_in_quick_entry": 1,
"bold": 1,
"description": "Help: To link to another record in the system, use \"/app/note/[Note Name]\" as the Link URL. (don't use \"http://\")",
"fieldname": "content",
@@ -85,7 +87,7 @@
"icon": "fa fa-file-text",
"idx": 1,
"links": [],
- "modified": "2025-09-01 14:07:24.540571",
+ "modified": "2026-04-21 23:44:37.725453",
"modified_by": "Administrator",
"module": "Desk",
"name": "Note",
diff --git a/jingrow/desk/pagetype/todo/todo.json b/jingrow/desk/pagetype/todo/todo.json
index 65081929a..4705954df 100644
--- a/jingrow/desk/pagetype/todo/todo.json
+++ b/jingrow/desk/pagetype/todo/todo.json
@@ -42,6 +42,7 @@
"options": "Todo\nIn Progress\nReview\nDone\nCancelled"
},
{
+ "allow_in_quick_entry": 1,
"default": "Medium",
"fieldname": "priority",
"fieldtype": "Select",
@@ -77,6 +78,7 @@
"fieldtype": "Section Break"
},
{
+ "allow_in_quick_entry": 1,
"fieldname": "description",
"fieldtype": "Jeditor",
"in_global_search": 1,
@@ -148,6 +150,7 @@
"read_only": 1
},
{
+ "allow_in_quick_entry": 1,
"fieldname": "allocated_to",
"fieldtype": "Link",
"ignore_user_permissions": 1,
@@ -158,8 +161,10 @@
"options": "User"
},
{
+ "allow_in_quick_entry": 1,
"fieldname": "title",
"fieldtype": "Data",
+ "in_global_search": 1,
"in_list_view": 1,
"label": "Title",
"reqd": 1
@@ -168,7 +173,7 @@
"icon": "fa fa-check",
"idx": 2,
"links": [],
- "modified": "2026-04-21 21:31:33.885406",
+ "modified": "2026-04-21 23:41:45.406544",
"modified_by": "Administrator",
"module": "Desk",
"name": "ToDo",
diff --git a/jingrow/locale/zh.po b/jingrow/locale/zh.po
index 978d0623f..6043efeff 100644
--- a/jingrow/locale/zh.po
+++ b/jingrow/locale/zh.po
@@ -35761,3 +35761,26 @@ msgstr "下载备份"
msgid "No ToDos"
msgstr "没有待办事项"
+# Quick Create
+msgid "Quick Create"
+msgstr "快速创建"
+
+msgid "New {0}"
+msgstr "新建{0}"
+
+msgid "{0} is required"
+msgstr "{0}为必填项"
+
+msgid "{0} created successfully"
+msgstr "{0}创建成功"
+
+msgid "Failed to load fields"
+msgstr "加载字段失败"
+
+msgid "Failed to create record"
+msgstr "创建记录失败"
+
+msgid "Failed to get quick entry fields"
+msgstr "获取快速创建字段失败"
+
+