Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
e857b04
fix(i18n): load complete locale packs and preserve retry behavior
qianmoQ Oct 27, 2026
c992263
fix(ui): restore menu selection and full-row navigation
qianmoQ Oct 27, 2026
4170653
fix(web): improve header spacing and fill the content width
qianmoQ Oct 27, 2026
33074de
fix(ui): position and space selection lists
qianmoQ Oct 27, 2026
5dd303d
fix(ui): dismiss floating panels on outside clicks and Escape
qianmoQ Oct 27, 2026
5acfcf7
refactor(plugin): declare plugin configuration in code instead of YAML
qianmoQ Oct 27, 2026
9ee2b84
fix(ui): render dropdown and popover overlays in a portal
qianmoQ Oct 27, 2026
b307e73
fix(ui): cap modal height and scroll long content
qianmoQ Oct 27, 2026
9f2c848
fix(ui): replace native select with MfSelect in pagination
qianmoQ Oct 27, 2026
0f56f2e
fix(service): fill saved configure values back for editing
qianmoQ Oct 27, 2026
0c009d7
feat(web): add key=value text mode for configure fields
qianmoQ Oct 27, 2026
833de28
refactor(plugin): rename configure API, add category and bilingual de…
qianmoQ Oct 27, 2026
e8ed0e7
feat(web): read category and metadata from plugin descriptors
qianmoQ Oct 27, 2026
19572c7
feat(service): add scoped filters to paginated resource lists
qianmoQ Oct 27, 2026
ec3bb91
feat(ui): add table toolbar and themed date picker
qianmoQ Oct 27, 2026
2728f73
feat(web): add page-specific filters to data lists
qianmoQ Oct 27, 2026
ba6988b
fix(web): simplify shared page headings
qianmoQ Oct 27, 2026
98f4994
fix(ui): dismiss tooltips on pointer down and keep portal overlays wi…
qianmoQ Oct 27, 2026
18efc20
feat(server): support manual schedule trigger and upcoming run times
qianmoQ Oct 27, 2026
09e7d80
feat(web): add manual trigger and upcoming runs to schedule list
qianmoQ Oct 27, 2026
f2c4357
feat(web): add searchable full icon picker for menu icon field
qianmoQ Oct 27, 2026
b6a0c44
feat(role): allow validated custom codes and prevent code changes
qianmoQ Oct 27, 2026
69e1707
fix(role): use JDBC for menu assignment and navigation
qianmoQ Oct 27, 2026
ec1b3b6
test(ui): cover tooltip scrolling and viewport boundaries
qianmoQ Oct 27, 2026
592c7f0
fix(security): restrict management APIs to administrators
qianmoQ Oct 27, 2026
3786895
refactor(web): replace @ant-design/icons-vue with @lucide/vue
qianmoQ Oct 27, 2026
5c35408
feat(web): searchable menu form selects and pinned drawer footers
qianmoQ Oct 27, 2026
a4973ac
feat(navigation): separate user and admin pages and regroup menus
qianmoQ Oct 27, 2026
70f49fb
fix(web): size icons that the lucide migration left unsized
qianmoQ Oct 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -91,3 +91,4 @@ test/metaforge-test-convert/*convertservice
# Local assistant memory (never commit)
.claude/
.Codex/
plugins/
78 changes: 76 additions & 2 deletions configure/etc/conf/i18n/messages_en.properties
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,8 @@ menu.common.new=New Menu
menu.common.i18nKey=I18n Key
menu.common.icon=Icon
menu.tip.selectType=Please select a type
common.parent=Parent menu
menu.tip.searchIcon=Search icons\nmenu.tip.selectIcon=Select an icon
menu.tip.selectParent=Please select a parent menu
menu.tip.selectRedirect=Please select a redirect menu
## Snippet i18n
Expand Down Expand Up @@ -384,7 +386,7 @@ common.uninstallSuccess=Uninstalled successfully
common.installTime=Install Time
common.installVersion=Install Version
common.plugin.version=Plugin Version
common.plugin.systemVersion=Current system version:
common.plugin.systemVersion=Current system version:\u0020
common.plugin.list.name=Plugin List
common.plugin.list.description=List of available plugins
common.plugin.list.supportVersion=Support Version
Expand Down Expand Up @@ -516,6 +518,9 @@ role.validate.descriptionSize=Route description must be 3-50 characters long.
## Schedule i18n
schedule.common.list=Schedule List
schedule.common.history=Schedule History
schedule.common.trigger=Trigger now
schedule.common.triggerSuccess=Task triggered successfully
schedule.common.upcoming=Next 7 executions
## Dashboard i18n
dashboard.common.list=Dashboard List
dashboard.common.delete=Delete Dashboard
Expand Down Expand Up @@ -819,7 +824,6 @@ notify.tip.deleted=Notify when datasets are deleted
notify.tip.dynamic=Notify when new activities are generated
notify.tip.syncData=Notify when data synchronization completes


common.searchPlaceholder=Search datasets, tables, documents...
user.tip.modifyUsernamePage=Set a new username to represent your identity across the system
user.common.currentUsername=Current Username
Expand Down Expand Up @@ -945,3 +949,73 @@ dataset.search.fields=Search fields...
dataset.adhoc.all=All
dataset.adhoc.dimensions=Dimensions
dataset.adhoc.measures=Measures
dataTable.search=Search
dataTable.keyword=Keyword
dataTable.keywordPlaceholder=Search by name or code
dataTable.logKeywordPlaceholder=Search device, client or IP
dataTable.codePlaceholder=Enter the exact code
dataTable.all=All
dataTable.enabled=Enabled
dataTable.disabled=Disabled
dataTable.moreFilters=More filters
dataTable.lessFilters=Fewer filters
dataTable.createdFrom=Created from
dataTable.createdTo=Created through
dataTable.invalidDateRange=Start date must not be after end date
dataTable.yes=Yes
dataTable.no=No
dataTable.success=Success
dataTable.failure=Failure
dataTable.systemAccount=System account
dataTable.systemTask=System task
dataTable.menuPath=Menu path
dataTable.sqlContent=SQL content
dataTable.loginResult=Login result
dataTable.loginFrom=Logged in from
dataTable.loginTo=Logged in through
dataTable.queryReport=Query report
dataTable.datasetReport=Dataset report
dataTable.selectDate=Select date
dataTable.today=Today
dataTable.clear=Clear
dataTable.previousMonth=Previous month or year
dataTable.nextMonth=Next month or year
dataTable.stateCREATED=Created
dataTable.stateQUEUE=Queued
dataTable.stateRUNNING=Running
dataTable.stateSUCCESS=Success
dataTable.stateFAILURE=Failure
dataTable.stateTIMEOUT=Timed out
dataTable.stateSTOPPING=Stopping
dataTable.stateSTOPPED=Stopped
dataTable.stateINTERRUPTED=Interrupted
dataTable.modeADHOC=Ad hoc query
dataTable.modeHISTORY=History
dataTable.modeREPORT=Report
dataTable.modeSNIPPET=Snippet
dataTable.modeSYNC=Sync
dataTable.modeDATASET=Dataset
common.columns=Columns
common.download=Export current page
dataTable.available=Available
dataTable.unavailable=Unavailable
role.tip.codePlaceholder=Optional; generated automatically when blank
role.tip.codeHint=Use 1–64 letters, digits, underscores or hyphens; start with a letter or digit. Leave blank to generate a code.
role.tip.codeReadonly=The code cannot be changed after creation
role.tip.codeChecking=Checking code…
role.tip.codeAvailable=Code is available
role.validate.codeFormat=Use 1–64 letters, digits, underscores or hyphens, starting with a letter or digit
role.validate.codeExists=This code already exists; choose another code
role.validate.codeCheckFailed=Could not check the code; please retry
role.validate.identityMismatch=The record does not match the original role; refresh and retry
role.validate.codeConstraint=Could not enforce unique codes; check the database for existing duplicates
role.validate.invalidMenus=Some menus do not exist or cannot be assigned; refresh and retry
role.validate.menuSaveFailed=Could not save the menu assignment; please retry
role.validate.menuLoadFailed=Could not load menus; please retry
role.tip.menuRefreshFailed=Menus were saved, but navigation could not refresh; reload the page
role.tip.expandMenu=Expand $NAME
role.tip.collapseMenu=Collapse $NAME
navigation.dataDevelopment=Data development
navigation.dataAnalysis=Data analysis
navigation.systemManagement=Administration
navigation.accountSettings=Account settings
81 changes: 78 additions & 3 deletions configure/etc/conf/i18n/messages_zh-cn.properties
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,9 @@ menu.common.new=\u65B0\u83DC\u5355
menu.common.i18nKey=\u56FD\u9645\u5316\u6807\u8BC6
menu.common.icon=\u56FE\u6807
menu.tip.selectType=\u8BF7\u9009\u62E9\u7C7B\u578B
common.parent=上级菜单
menu.tip.searchIcon=搜索图标
menu.tip.selectIcon=请选择图标
menu.tip.selectParent=\u8BF7\u9009\u62E9\u7236\u83DC\u5355
menu.tip.selectRedirect=\u8BF7\u9009\u62E9\u91CD\u5B9A\u5411\u83DC\u5355
## Snippet i18n
Expand Down Expand Up @@ -384,7 +387,7 @@ common.installVersion=\u5B89\u88C5\u7248\u672C
common.installSuccess=\u5B89\u88C5\u6210\u529F
common.uninstallSuccess=\u5378\u8F7D\u6210\u529F
common.plugin.version=\u63D2\u4EF6\u7248\u672C
common.plugin.systemVersion=\u5F53\u524D\u7CFB\u7EDF\u7248\u672C:
common.plugin.systemVersion=\u5F53\u524D\u7CFB\u7EDF\u7248\u672C:\u0020
common.plugin.list.name=\u63D2\u4EF6\u5217\u8868
common.plugin.list.description=\u53EF\u7528\u7684\u63D2\u4EF6\u5217\u8868
common.plugin.list.supportVersion=\u652F\u6301\u7684\u7248\u672C
Expand Down Expand Up @@ -516,6 +519,9 @@ role.validate.descriptionSize=\u8DEF\u7531\u63CF\u8FF0\u5FC5\u987B\u57283-50\u4E
## Schedule i18n
schedule.common.list=\u8C03\u5EA6\u5217\u8868
schedule.common.history=\u8C03\u5EA6\u5386\u53F2
schedule.common.trigger=立即执行
schedule.common.triggerSuccess=任务已触发成功,请稍后查看执行结果
schedule.common.upcoming=未来 7 次执行时间
## Dashboard i18n
dashboard.common.list=\u4EEA\u8868\u76D8\u5217\u8868
dashboard.common.delete=\u5220\u9664\u4EEA\u8868\u76D8
Expand All @@ -524,7 +530,7 @@ dashboard.common.modify=\u4FEE\u6539\u4EEA\u8868\u76D8
dashboard.common.modifyInfo=\u4FEE\u6539\u4EEA\u8868\u76D8 [ $VALUE ]
dashboard.common.addReport=\u6DFB\u52A0\u56FE\u8868
dashboard.tip.deleteTip1=\u60A8\u6B63\u5728\u5220\u9664\u4EEA\u8868\u677F\u3002\u6B64\u64CD\u4F5C\u5C06\u6C38\u4E45\u5220\u9664\u4EEA\u8868\u677F\u3002\u5728\u7EE7\u7EED\u64CD\u4F5C\u4E4B\u524D\uFF0C\u8BF7\u52A1\u5FC5\u786E\u8BA4\u60A8\u7684\u64CD\u4F5C\u3002
dashboard.tip.deleteTip2=\u8B66\u544A\uFF1A\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u6D88\u3002
dashboard.tip.deleteTip2=\u8B66\u544A\uFF1A\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u6D88\u3002\u0020
dashboard.tip.deleteTip3=\u8981\u786E\u8BA4\uFF0C\u8BF7\u5728\u4E0B\u9762\u7684\u6846\u4E2D\u952E\u5165 [ $NAME ]
dashboard.tip.publishSuccess=\u4EEA\u8868\u677F [ $VALUE ] \u53D1\u5E03\u6210\u529F
dashboard.tip.notFound=\u4EEA\u8868\u677F [ $VALUE ] \u4E0D\u5B58\u5728
Expand Down Expand Up @@ -819,7 +825,6 @@ notify.tip.deleted=\u6570\u636E\u96C6\u5220\u9664\u65F6\u53D1\u9001\u901A\u77E5
notify.tip.dynamic=\u4EA7\u751F\u65B0\u52A8\u6001\u65F6\u53D1\u9001\u901A\u77E5
notify.tip.syncData=\u6570\u636E\u540C\u6B65\u5B8C\u6210\u540E\u53D1\u9001\u901A\u77E5


common.searchPlaceholder=\u641C\u7D22\u6570\u636E\u96C6\u3001\u8868\u3001\u6587\u6863...
user.tip.modifyUsernamePage=\u8BBE\u7F6E\u4E00\u4E2A\u65B0\u7684\u7528\u6237\u540D\uFF0C\u7528\u4E8E\u5728\u7CFB\u7EDF\u4E2D\u663E\u793A\u60A8\u7684\u8EAB\u4EFD
user.common.currentUsername=\u5F53\u524D\u7528\u6237\u540D
Expand Down Expand Up @@ -945,3 +950,73 @@ dataset.search.fields=\u641C\u7D22\u5B57\u6BB5...
dataset.adhoc.all=\u5168\u90E8
dataset.adhoc.dimensions=\u7EF4\u5EA6
dataset.adhoc.measures=\u6307\u6807
dataTable.search=\u67E5\u8BE2
dataTable.keyword=\u5173\u952E\u8BCD
dataTable.keywordPlaceholder=\u6309\u540D\u79F0\u6216\u7F16\u7801\u641C\u7D22
dataTable.logKeywordPlaceholder=\u641C\u7D22\u8BBE\u5907\u3001\u5BA2\u6237\u7AEF\u6216 IP
dataTable.codePlaceholder=\u8F93\u5165\u5B8C\u6574\u7F16\u7801
dataTable.all=\u5168\u90E8
dataTable.enabled=\u542F\u7528
dataTable.disabled=\u505C\u7528
dataTable.moreFilters=\u66F4\u591A\u7B5B\u9009
dataTable.lessFilters=\u6536\u8D77\u7B5B\u9009
dataTable.createdFrom=\u521B\u5EFA\u65E5\u671F\u8D77
dataTable.createdTo=\u521B\u5EFA\u65E5\u671F\u6B62
dataTable.invalidDateRange=\u5F00\u59CB\u65E5\u671F\u4E0D\u80FD\u665A\u4E8E\u7ED3\u675F\u65E5\u671F
dataTable.yes=\u662F
dataTable.no=\u5426
dataTable.success=\u6210\u529F
dataTable.failure=\u5931\u8D25
dataTable.systemAccount=\u7CFB\u7EDF\u8D26\u6237
dataTable.systemTask=\u7CFB\u7EDF\u4EFB\u52A1
dataTable.menuPath=\u83DC\u5355\u8DEF\u5F84
dataTable.sqlContent=SQL \u5185\u5BB9
dataTable.loginResult=\u767B\u5F55\u7ED3\u679C
dataTable.loginFrom=\u767B\u5F55\u65E5\u671F\u8D77
dataTable.loginTo=\u767B\u5F55\u65E5\u671F\u6B62
dataTable.queryReport=\u67E5\u8BE2\u62A5\u8868
dataTable.datasetReport=\u6570\u636E\u96C6\u62A5\u8868
dataTable.selectDate=\u8BF7\u9009\u62E9\u65E5\u671F
dataTable.today=\u4ECA\u5929
dataTable.clear=\u6E05\u7A7A
dataTable.previousMonth=\u4E0A\u4E00\u6708\u6216\u5E74
dataTable.nextMonth=\u4E0B\u4E00\u6708\u6216\u5E74
dataTable.stateCREATED=\u5DF2\u521B\u5EFA
dataTable.stateQUEUE=\u6392\u961F\u4E2D
dataTable.stateRUNNING=\u8FD0\u884C\u4E2D
dataTable.stateSUCCESS=\u6210\u529F
dataTable.stateFAILURE=\u5931\u8D25
dataTable.stateTIMEOUT=\u8D85\u65F6
dataTable.stateSTOPPING=\u505C\u6B62\u4E2D
dataTable.stateSTOPPED=\u5DF2\u505C\u6B62
dataTable.stateINTERRUPTED=\u5DF2\u4E2D\u65AD
dataTable.modeADHOC=\u5373\u5E2D\u67E5\u8BE2
dataTable.modeHISTORY=\u5386\u53F2\u67E5\u8BE2
dataTable.modeREPORT=\u62A5\u8868
dataTable.modeSNIPPET=\u4EE3\u7801\u7247\u6BB5
dataTable.modeSYNC=\u540C\u6B65
dataTable.modeDATASET=\u6570\u636E\u96C6
common.columns=\u5217\u8BBE\u7F6E
common.download=\u5BFC\u51FA\u5F53\u524D\u9875
dataTable.available=\u53EF\u7528
dataTable.unavailable=\u4E0D\u53EF\u7528
role.tip.codePlaceholder=\u53EF\u9009\uFF0C\u7559\u7A7A\u81EA\u52A8\u751F\u6210
role.tip.codeHint=1\u201364 \u4F4D\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u4E0B\u5212\u7EBF\u6216\u8FDE\u5B57\u7B26\uFF0C\u4EE5\u5B57\u6BCD\u6216\u6570\u5B57\u5F00\u5934\uFF1B\u7559\u7A7A\u81EA\u52A8\u751F\u6210
role.tip.codeReadonly=\u7F16\u7801\u521B\u5EFA\u540E\u4E0D\u53EF\u4FEE\u6539
role.tip.codeChecking=\u6B63\u5728\u6821\u9A8C\u7F16\u7801\u2026
role.tip.codeAvailable=\u7F16\u7801\u53EF\u7528
role.validate.codeFormat=\u7F16\u7801\u987B\u4E3A 1\u201364 \u4F4D\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u4E0B\u5212\u7EBF\u6216\u8FDE\u5B57\u7B26\uFF0C\u5E76\u4EE5\u5B57\u6BCD\u6216\u6570\u5B57\u5F00\u5934
role.validate.codeExists=\u8BE5\u7F16\u7801\u5DF2\u5B58\u5728\uFF0C\u8BF7\u4F7F\u7528\u5176\u4ED6\u7F16\u7801
role.validate.codeCheckFailed=\u7F16\u7801\u6821\u9A8C\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5
role.validate.identityMismatch=\u6240\u7F16\u8F91\u7684\u8BB0\u5F55\u4E0E\u539F\u8DEF\u7531\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5
role.validate.codeConstraint=\u65E0\u6CD5\u4FDD\u8BC1\u7F16\u7801\u552F\u4E00\uFF0C\u8BF7\u5148\u68C0\u67E5\u6570\u636E\u5E93\u4E2D\u7684\u91CD\u590D\u7F16\u7801
role.validate.invalidMenus=\u90E8\u5206\u83DC\u5355\u4E0D\u5B58\u5728\u6216\u4E0D\u5141\u8BB8\u5206\u914D\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5
role.validate.menuSaveFailed=\u4FDD\u5B58\u83DC\u5355\u5206\u914D\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5
role.validate.menuLoadFailed=\u52A0\u8F7D\u83DC\u5355\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5
role.tip.menuRefreshFailed=\u83DC\u5355\u5DF2\u4FDD\u5B58\uFF0C\u4F46\u5BFC\u822A\u5237\u65B0\u5931\u8D25\uFF0C\u8BF7\u5237\u65B0\u9875\u9762
role.tip.expandMenu=\u5C55\u5F00 $NAME
role.tip.collapseMenu=\u6536\u8D77 $NAME
navigation.dataDevelopment=\u6570\u636E\u5F00\u53D1
navigation.dataAnalysis=\u6570\u636E\u5206\u6790
navigation.systemManagement=\u7CFB\u7EDF\u7BA1\u7406
navigation.accountSettings=\u8D26\u6237\u8BBE\u7F6E
12 changes: 0 additions & 12 deletions configure/etc/conf/plugins/README.md

This file was deleted.

27 changes: 0 additions & 27 deletions configure/etc/conf/plugins/alioss.yaml

This file was deleted.

26 changes: 0 additions & 26 deletions configure/etc/conf/plugins/cassandra.yaml

This file was deleted.

20 changes: 0 additions & 20 deletions configure/etc/conf/plugins/ceresdb.yaml

This file was deleted.

Loading
Loading