diff --git a/code/fms/CODEBUDDY.md b/code/fms/CODEBUDDY.md index 3e314502..6efb1f85 100644 --- a/code/fms/CODEBUDDY.md +++ b/code/fms/CODEBUDDY.md @@ -14,7 +14,7 @@ Supporting docs in the repo root (Chinese): - `新数据库结构.md` — the module-management table design (authoritative schema). - `旧数据库结构.md` — legacy schema, kept for reference only. - `模块管理实施计划.md` — phased plan for the module-management feature. -- `fms-api/config/migrations/001_module_management.sql` — the only migration script. +- `fms-api/config/migrations/` — SQL Server schema migration scripts. ## Commands @@ -87,7 +87,7 @@ Vue 3 ` + + + + + + 多语言资源中心 + 统一维护菜单、模块、权限、字段、提示、按钮与校验文案。 + + + 撤销修改 + 刷新 + + 保存 + + + + + + + + + + + 重置筛选 + + + + + + 新增 Key + + + 批量删除 + + + 共 {{ filteredRows.length }} 个 Key,已选择 {{ selectedRowKeys.length }} 个 + + + + + + + + + + + + + + + + + + + + + + 确定删除选中的 {{ selectedRowKeys.length }} 个 Key 及其全部语言文本吗?已绑定这些 Key + 的业务对象将显示回退文案。 + + + + + + diff --git a/code/fms/fms-vue/src/views/LoginView.vue b/code/fms/fms-vue/src/views/login/index.vue similarity index 100% rename from code/fms/fms-vue/src/views/LoginView.vue rename to code/fms/fms-vue/src/views/login/index.vue diff --git a/code/fms/fms-vue/src/views/module-management/components/ModuleBasicInfoPanel.vue b/code/fms/fms-vue/src/views/module-management/components/ModuleBasicInfoPanel.vue index d3cdf8c6..d860bf35 100644 --- a/code/fms/fms-vue/src/views/module-management/components/ModuleBasicInfoPanel.vue +++ b/code/fms/fms-vue/src/views/module-management/components/ModuleBasicInfoPanel.vue @@ -1,11 +1,13 @@ + + + + 新增 + + + + 批量删除 + + @@ -37,6 +173,13 @@ const columns = [ overflow: hidden; } +.toolbar { + display: flex; + gap: 8px; + flex: none; + padding: 10px 0; +} + .sub-table { flex: 1 1 auto; min-height: 0; diff --git a/code/fms/fms-vue/src/views/module-management/components/ModulePowerPanel.vue b/code/fms/fms-vue/src/views/module-management/components/ModulePowerPanel.vue index 146e609c..e0543002 100644 --- a/code/fms/fms-vue/src/views/module-management/components/ModulePowerPanel.vue +++ b/code/fms/fms-vue/src/views/module-management/components/ModulePowerPanel.vue @@ -1,24 +1,107 @@ + + + + 新增 + + + + 批量删除 + + @@ -32,6 +115,13 @@ const columns = [ overflow: hidden; } +.toolbar { + display: flex; + gap: 8px; + flex: none; + padding: 10px 0; +} + .sub-table { flex: 1 1 auto; min-height: 0; diff --git a/code/fms/fms-vue/src/views/module-management/components/ModuleTranslationEditor.vue b/code/fms/fms-vue/src/views/module-management/components/ModuleTranslationEditor.vue new file mode 100644 index 00000000..60533c5f --- /dev/null +++ b/code/fms/fms-vue/src/views/module-management/components/ModuleTranslationEditor.vue @@ -0,0 +1,59 @@ + + + + + + 多语言 + + + + + + + + + + + + + diff --git a/code/fms/fms-vue/src/views/module-management/components/ModuleTranslationsPanel.vue b/code/fms/fms-vue/src/views/module-management/components/ModuleTranslationsPanel.vue deleted file mode 100644 index 00a1d336..00000000 --- a/code/fms/fms-vue/src/views/module-management/components/ModuleTranslationsPanel.vue +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - diff --git a/code/fms/fms-vue/src/views/module-management/components/ModuleTreePanel.vue b/code/fms/fms-vue/src/views/module-management/components/ModuleTreePanel.vue index 611ff7dd..99a94f46 100644 --- a/code/fms/fms-vue/src/views/module-management/components/ModuleTreePanel.vue +++ b/code/fms/fms-vue/src/views/module-management/components/ModuleTreePanel.vue @@ -5,6 +5,7 @@ import FmsTree from "@/components/FmsTree.vue"; const props = defineProps({ modules: { type: Array, required: true }, + protectedKeys: { type: Array, default: () => [] }, selectedKey: { type: String, default: "" }, loading: Boolean, canCreate: Boolean, @@ -16,15 +17,16 @@ const contextNode = ref(null); const treeData = computed(() => { const keyword = searchText.value.trim().toLowerCase(); + const codeById = new Map(props.modules.map((item) => [item.b_id, item.b_code])); const visible = keyword ? new Set( props.modules .filter( (item) => - String(item.b_id).toLowerCase().includes(keyword) || + String(item.b_code).toLowerCase().includes(keyword) || String(item.b_name).toLowerCase().includes(keyword), ) - .flatMap((item) => [item.b_id, item.b_parent_id]), + .flatMap((item) => [item.b_code, codeById.get(item.b_parent_id)].filter(Boolean)), ) : null; const children = new Map(); @@ -35,11 +37,11 @@ const treeData = computed(() => { }); const build = (parent) => (children.get(parent) || []) - .filter((item) => !visible || visible.has(item.b_id)) + .filter((item) => !visible || visible.has(item.b_code)) .map((item) => { const nodeChildren = build(item.b_id); return { - key: item.b_id, + key: item.b_code, title: item.b_name, children: nodeChildren, isLeaf: nodeChildren.length === 0, @@ -69,7 +71,7 @@ const contextMenu = computed(() => { key: "delete", label: "删除", danger: true, - disabled: !node || !props.canDelete || ["M_SYSTEM", "M_MODULE"].includes(node.key), + disabled: !node || !props.canDelete || props.protectedKeys.includes(String(node.key)), }, ], onClick: ({ key }) => { diff --git a/code/fms/fms-vue/src/views/module-management/ModuleManagementView.vue b/code/fms/fms-vue/src/views/module-management/index.vue similarity index 79% rename from code/fms/fms-vue/src/views/module-management/ModuleManagementView.vue rename to code/fms/fms-vue/src/views/module-management/index.vue index b5ba81ab..41762971 100644 --- a/code/fms/fms-vue/src/views/module-management/ModuleManagementView.vue +++ b/code/fms/fms-vue/src/views/module-management/index.vue @@ -1,18 +1,18 @@
统一维护菜单、模块、权限、字段、提示、按钮与校验文案。
+ 确定删除选中的 {{ selectedRowKeys.length }} 个 Key 及其全部语言文本吗?已绑定这些 Key + 的业务对象将显示回退文案。 +