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 "获取快速创建字段失败" + +