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:
@@ -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',
|
||||
|
||||
@@ -169,6 +169,11 @@ const local: App.I18n.Schema = {
|
||||
function_request: '请求',
|
||||
'function_toggle-auth': '切换权限',
|
||||
'function_super-page': '超级管理员可见',
|
||||
product: '产品管理',
|
||||
product_list: '产品列表',
|
||||
product_dashboard: '产品仪表盘',
|
||||
product_requirement: '需求池',
|
||||
product_setting: '产品设置',
|
||||
system: '系统管理',
|
||||
system_user: '用户管理',
|
||||
'system_user-detail': '用户详情',
|
||||
@@ -343,6 +348,14 @@ const local: App.I18n.Schema = {
|
||||
status: {
|
||||
enable: '启用',
|
||||
disable: '禁用'
|
||||
},
|
||||
scopeType: {
|
||||
global: '全域',
|
||||
object: '对象域'
|
||||
},
|
||||
objectType: {
|
||||
product: '产品',
|
||||
project: '项目'
|
||||
}
|
||||
},
|
||||
role: {
|
||||
@@ -358,7 +371,7 @@ const local: App.I18n.Schema = {
|
||||
roleStatus: '角色状态',
|
||||
roleDesc: '角色描述',
|
||||
remark: '备注',
|
||||
sort: '显示顺序',
|
||||
sort: '排序',
|
||||
createTime: '创建时间',
|
||||
menuAuth: '菜单权限',
|
||||
buttonAuth: '按钮权限',
|
||||
@@ -366,6 +379,13 @@ const local: App.I18n.Schema = {
|
||||
selectedCount: '已选资源',
|
||||
disabledTip: '禁用角色不允许分配菜单权限',
|
||||
emptyRole: '请先选择角色',
|
||||
currentRoleCount: '当前角色数',
|
||||
globalRoleTitle: '全域角色',
|
||||
objectRoleTitle: '对象域角色模板',
|
||||
globalRoleSummary: '当前维护登录态全域角色及其资源授权关系。',
|
||||
objectRoleSummary: '当前维护对象域角色模板及其可授权资源关系,不参与登录态全局菜单导航。',
|
||||
objectRoleSummaryProduct: '当前维护产品域角色模板及其可授权资源关系,不参与登录态全局菜单导航。',
|
||||
objectRoleSummaryProject: '当前维护项目域角色模板及其可授权资源关系,不参与登录态全局菜单导航。',
|
||||
lastAuthSave: '最近一次授权保存',
|
||||
unsavedTip: '授权变更后请记得保存',
|
||||
form: {
|
||||
@@ -374,7 +394,7 @@ const local: App.I18n.Schema = {
|
||||
roleStatus: '请选择角色状态',
|
||||
roleDesc: '请输入角色描述',
|
||||
remark: '请输入备注',
|
||||
sort: '请输入显示顺序',
|
||||
sort: '请输入排序',
|
||||
resourceKeyword: '输入资源名称过滤权限树',
|
||||
startTime: '开始时间',
|
||||
endTime: '结束时间'
|
||||
@@ -491,6 +511,7 @@ const local: App.I18n.Schema = {
|
||||
routeKind: '路由类型',
|
||||
routePropsJson: '路由参数 JSON',
|
||||
pageResource: '页面资源',
|
||||
boundRoute: '绑定路由',
|
||||
component: '组件路径',
|
||||
componentName: '组件名称',
|
||||
iframeUrl: 'iframe 地址',
|
||||
@@ -520,6 +541,36 @@ const local: App.I18n.Schema = {
|
||||
alwaysShow: '总是显示子菜单',
|
||||
createTime: '创建时间',
|
||||
topLevel: '顶级菜单',
|
||||
scopeType: '作用域',
|
||||
objectType: '对象类型',
|
||||
resourceCode: '资源编码',
|
||||
contextEyebrow: '菜单配置上下文',
|
||||
contextTitle: '统一作用域资源配置',
|
||||
contextDescription: '用同一套菜单页同时承接全域路由资源与对象域权限资源,避免为产品和项目再拆多套重复页面。',
|
||||
currentContext: '当前上下文',
|
||||
currentResourceCount: '当前资源数',
|
||||
editorMode: '编辑模式',
|
||||
editorModeGlobal: '路由型资源编辑器',
|
||||
editorModeObject: '对象导航编辑器',
|
||||
globalResourceTitle: '全域菜单资源',
|
||||
objectResourceTitle: '对象域资源',
|
||||
globalResourceSummary: '当前维护登录态菜单、路由映射与全局按钮权限资源。',
|
||||
objectResourceSummary: '当前维护对象域导航项与操作按钮。导航项绑定真实页面路由,操作按钮用于对象内权限点。',
|
||||
objectResourceSummaryProduct:
|
||||
'当前维护产品域导航项与操作按钮。导航项绑定真实页面路由,操作按钮用于产品对象内权限点。',
|
||||
objectResourceSummaryProject:
|
||||
'当前维护项目域导航项与操作按钮。导航项绑定真实页面路由,操作按钮用于项目对象内权限点。',
|
||||
scopeHintGlobal: '全域模式下保留现有路由型资源编辑方式,用于登录态菜单与全局按钮权限链路。',
|
||||
scopeHintObject: '对象域模式下维护导航项和操作按钮。导航项绑定真实页面资源,操作按钮只维护权限标识。',
|
||||
objectTypePlaceholder: '请选择对象类型',
|
||||
contextReady: '已选定配置范围',
|
||||
contextPending: '等待选择对象类型',
|
||||
objectTypeRequiredTitle: '请先选择对象类型',
|
||||
objectTypeRequiredDescription:
|
||||
'对象域资源必须先明确配置范围,例如产品或项目。选定后再加载树形资源列表和编辑弹层。',
|
||||
objectModeTipTitle: '对象域当前配置的是对象导航项和操作按钮',
|
||||
objectModeTipDescription:
|
||||
'第一版对象域菜单页只开放导航项和操作按钮。导航项通过绑定真实页面路由建立对象内头部导航,操作按钮只维护权限标识;暂不开放目录配置。',
|
||||
sections: {
|
||||
basic: '基础信息',
|
||||
route: '路由信息',
|
||||
@@ -531,6 +582,7 @@ const local: App.I18n.Schema = {
|
||||
parentId: '请选择父级菜单',
|
||||
menuName: '请输入菜单名称',
|
||||
permission: '请输入权限标识',
|
||||
resourceCode: '请输入资源编码',
|
||||
routeName: '请输入路由名称',
|
||||
routePath: '请输入路由路径',
|
||||
path: '请输入路由地址',
|
||||
@@ -538,6 +590,7 @@ const local: App.I18n.Schema = {
|
||||
componentName: '请输入组件名称',
|
||||
routeKind: '请选择路由类型',
|
||||
pageResource: '请选择页面资源',
|
||||
boundRoute: '请选择绑定路由',
|
||||
pageResourceParentMismatch: '所选页面资源与当前父级菜单层级不匹配',
|
||||
routePropsJson: '请输入合法的 JSON 字符串',
|
||||
routePropsJsonHint: '例如 {"url":"https://example.com"}',
|
||||
@@ -581,6 +634,8 @@ const local: App.I18n.Schema = {
|
||||
routePath: '路由地址填写访问路径中的末级段。以“角色管理”为例,完整地址是 /system/role,这里通常填写 role。',
|
||||
pageResource:
|
||||
'普通页面请从前端页面资源白名单中选择。例如角色管理对应 /system/role,与组件键 view.system_role。',
|
||||
boundRoute:
|
||||
'对象域导航项请绑定真实对象页面路由。例如产品域可绑定 /product/dashboard、/product/requirement 等页面。',
|
||||
component:
|
||||
'组件路径填写前端页面资源白名单中的组件键,不是 src 下的文件路径。以“角色管理”为例,可填写或选择 view.system_role。'
|
||||
},
|
||||
@@ -590,7 +645,9 @@ const local: App.I18n.Schema = {
|
||||
type: {
|
||||
directory: '目录',
|
||||
menu: '菜单',
|
||||
button: '按钮'
|
||||
button: '按钮',
|
||||
navigation: '导航项',
|
||||
actionButton: '操作按钮'
|
||||
},
|
||||
iconType: {
|
||||
iconify: 'iconify图标',
|
||||
|
||||
Reference in New Issue
Block a user