feat(product): 新增产品管理模块与字典组件功能

- 新增产品管理相关路由和页面(dashboard、list、requirement、setting)
- 实现产品基础信息编辑弹窗组件(base-info-dialog.vue)
- 添加运行时字典功能(dict-select、dict-text、dict-tag组件)
- 集成字典管理store和API调用
- 规范ID类型定义为string避免精度丢失问题
- 完善国际化资源文件支持中英文对照
- 新增对象上下文业务域入口页导航实现说明
- 添加Vue DevTools浮动入口注释说明
- 统一权限控制支持全局和对象作用域区分
- 规范分页查询参数类型定义与使用方式
This commit is contained in:
2026-04-23 09:05:55 +08:00
parent c5911ea34b
commit 4122dfa50d
95 changed files with 9581 additions and 801 deletions

View File

@@ -169,6 +169,11 @@ const local: App.I18n.Schema = {
function_request: 'Request',
'function_toggle-auth': 'Toggle Auth',
'function_super-page': 'Super Admin Visible',
product: 'Product Management',
product_list: 'Product List',
product_dashboard: 'Product Dashboard',
product_requirement: 'Requirement Pool',
product_setting: 'Product Settings',
system: 'System Management',
system_user: 'User Management',
'system_user-detail': 'User Detail',
@@ -344,6 +349,14 @@ const local: App.I18n.Schema = {
status: {
enable: 'Enable',
disable: 'Disable'
},
scopeType: {
global: 'Global',
object: 'Object Scope'
},
objectType: {
product: 'Product',
project: 'Project'
}
},
role: {
@@ -367,6 +380,16 @@ const local: App.I18n.Schema = {
selectedCount: 'Selected Resources',
disabledTip: 'Disabled roles cannot be assigned menu permissions',
emptyRole: 'Select a role first',
currentRoleCount: 'Role Count',
globalRoleTitle: 'Global Roles',
objectRoleTitle: 'Object-Scope Role Templates',
globalRoleSummary: 'Manage global login-state roles and their resource authorization relations.',
objectRoleSummary:
'Manage object-scope role templates and their authorized resources without participating in the global login-state navigation.',
objectRoleSummaryProduct:
'Manage product-scope role templates and their authorized resources without participating in the global login-state navigation.',
objectRoleSummaryProject:
'Manage project-scope role templates and their authorized resources without participating in the global login-state navigation.',
lastAuthSave: 'Last auth save',
unsavedTip: 'Remember to save after changing permissions',
form: {
@@ -492,6 +515,7 @@ const local: App.I18n.Schema = {
routeKind: 'Route Kind',
routePropsJson: 'Route Props JSON',
pageResource: 'Page Resource',
boundRoute: 'Bound Route',
component: 'Component Path',
componentName: 'Component Name',
iframeUrl: 'Iframe URL',
@@ -521,6 +545,40 @@ const local: App.I18n.Schema = {
alwaysShow: 'Always Show',
createTime: 'Create Time',
topLevel: 'Top Level Menu',
scopeType: 'Scope',
objectType: 'Object Type',
resourceCode: 'Resource Code',
contextEyebrow: 'Menu Configuration Context',
contextTitle: 'Unified Scope Resource Configuration',
contextDescription:
'Use one menu page to manage both global route resources and object-scope permission resources, instead of duplicating product and project pages.',
currentContext: 'Current Context',
currentResourceCount: 'Resource Count',
editorMode: 'Editor Mode',
editorModeGlobal: 'Route Resource Editor',
editorModeObject: 'Object Navigation Editor',
globalResourceTitle: 'Global Menu Resources',
objectResourceTitle: 'Object-Scope Resources',
globalResourceSummary: 'Configure login-state menus, route mappings, and global button permission resources.',
objectResourceSummary:
'Configure object-scope navigation items and action buttons. Navigation items bind real page routes, and action buttons provide in-object permission points.',
objectResourceSummaryProduct:
'Configure product-scope navigation items and action buttons. Navigation items bind real page routes, and action buttons provide in-product permission points.',
objectResourceSummaryProject:
'Configure project-scope navigation items and action buttons. Navigation items bind real page routes, and action buttons provide in-project permission points.',
scopeHintGlobal:
'Global mode keeps the current route-oriented editor and continues to serve login-state menus and global button permissions.',
scopeHintObject:
'Object mode manages navigation items and action buttons. Navigation items bind real page resources, and action buttons only maintain permission codes.',
objectTypePlaceholder: 'Please select an object type',
contextReady: 'Context Selected',
contextPending: 'Waiting For Object Type',
objectTypeRequiredTitle: 'Select an object type first',
objectTypeRequiredDescription:
'Object-scope resources must first define the configuration range, such as product or project. Then load the resource tree and editor.',
objectModeTipTitle: 'Object scope currently manages navigation items and action buttons',
objectModeTipDescription:
'In the first phase, object-scope menus only expose navigation items and action buttons. Navigation items bind real page routes for the object header navigation, and action buttons only maintain permission codes. Directory creation is intentionally hidden for now.',
sections: {
basic: 'Basic Information',
route: 'Route Information',
@@ -532,6 +590,7 @@ const local: App.I18n.Schema = {
parentId: 'Please select parent menu',
menuName: 'Please enter menu name',
permission: 'Please enter permission',
resourceCode: 'Please enter the resource code',
routeName: 'Please enter route name',
routePath: 'Please enter route path',
path: 'Please enter route path',
@@ -539,6 +598,7 @@ const local: App.I18n.Schema = {
componentName: 'Please enter component name',
routeKind: 'Please select route kind',
pageResource: 'Please select page resource',
boundRoute: 'Please select a bound route',
pageResourceParentMismatch: 'The selected page resource does not match the current parent menu path',
routePropsJson: 'Please enter a valid JSON string',
routePropsJsonHint: 'For example {"url":"https://example.com"}',
@@ -586,6 +646,8 @@ const local: App.I18n.Schema = {
'Fill in the last segment of the access path. For Role Management, the full path is /system/role, so this field is usually role.',
pageResource:
'Page routes should select a page resource from the frontend whitelist. For example, Role Management maps to /system/role and view.system_role.',
boundRoute:
'Object-scope navigation items should bind real object page routes. For example, the product scope can bind /product/dashboard or /product/requirement.',
component:
'The component field should use the frontend page-resource whitelist key, not a src file path. For Role Management, use or select view.system_role.'
},
@@ -595,7 +657,9 @@ const local: App.I18n.Schema = {
type: {
directory: 'Directory',
menu: 'Menu',
button: 'Button'
button: 'Button',
navigation: 'Navigation Item',
actionButton: 'Action Button'
},
iconType: {
iconify: 'Iconify Icon',