Quellcode durchsuchen

feat(s0-modeling): 模块抽屉新增 L2 勾选表(S1-S9 除 S8 通用)+ bump 2.4.96/1.0.63

此前"运营指标建模"模块抽屉只有 L1 勾选表,L2 只能在 S4 L1 节点下钻抽屉里配。
S1/S2/S3/S5/S6/S7/S9 用户无法在模块级直接启用 L2(drawerS4L1 对非 S4 硬判 rawId 前缀)。

改动(仅 Web/src/views/aidop/kanban/s0.vue):
- drawerS4 分支模板在 .s0-s4__l1 之后新增 .s0-s4__l2 区块:
  - 标题「二级指标 L2(详情看板 {{ currentModuleCode }})」+ 说明文案
  - catalogL2 为空时 el-alert 提示"去运营指标主数据补充 metricLevel≥2"
  - 否则 el-table 列:选用(el-switch) / 编码 / 字典名称 / 显示名称 /
    父级 L1(复用 parentOptionsForRow) / 栏(左右) / 计算公式(FormulaEditor)
  - 所有字段共用既有响应态:l2On / l2ParentMetric / l2Zone / l2DisplayName /
    l2Formula,保存时 saveModuleLayoutClick 已迭代 catalogL2 组装 L2 payload。
- S4 下钻抽屉(drawerS4L1)保留不动;两条路径共用响应态,编辑不冲突。
- 后端 / DTO / 接口 0 改动。

Made-with: Cursor
skygu vor 6 Monaten
Ursprung
Commit
9dd7ab5be5

+ 1 - 1
Web/package.json

@@ -1,7 +1,7 @@
 {
 	"name": "admin.net",
 	"type": "module",
-	"version": "2.4.95",
+	"version": "2.4.96",
 	"packageManager": "pnpm@10.32.1",
 	"lastBuildTime": "2026.03.15",
 	"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",

+ 86 - 0
Web/src/views/aidop/kanban/s0.vue

@@ -118,6 +118,92 @@
               </el-table-column>
             </el-table>
           </div>
+
+          <div class="s0-s4__l2">
+            <div class="s0-s4__subhd">二级指标 L2(详情看板 {{ currentModuleCode }})</div>
+            <p class="s0-s4__hint">
+              在此处开启该模块全部 L2 指标并配置父级 / 栏位 / 显示名 / 结构化公式,与上方共用「保存 {{ currentModuleCode }} 布局」按钮。
+              <template v-if="currentModuleCode === 'S4'">
+                亦可在图谱中点击 S4 的 L1 节点按父级聚焦编辑(下钻抽屉)。
+              </template>
+            </p>
+            <el-alert
+              v-if="!catalogL2.length"
+              type="info"
+              :closable="false"
+              show-icon
+              class="s0-s4__empty-l2"
+              title="该模块字典中暂无 L2 指标。请先到「运营指标主数据」为该模块补充 L2(metricLevel ≥ 2)。"
+            />
+            <el-table
+              v-else
+              :data="catalogL2"
+              size="small"
+              border
+              stripe
+              class="s0-s4__table"
+            >
+              <el-table-column label="选用" width="56" align="center">
+                <template #default="{ row }">
+                  <el-switch
+                    :model-value="Boolean(l2On[row.metricCode])"
+                    @update:model-value="(v) => onL2Toggle(row.metricCode, v)"
+                  />
+                </template>
+              </el-table-column>
+              <el-table-column prop="metricCode" label="编码" width="120" />
+              <el-table-column prop="defaultName" label="字典名称" min-width="100" />
+              <el-table-column label="显示名称" min-width="120">
+                <template #default="{ row }">
+                  <el-input
+                    v-model="l2DisplayName[row.metricCode]"
+                    placeholder="留空则同字典"
+                    size="small"
+                    :disabled="!l2On[row.metricCode]"
+                  />
+                </template>
+              </el-table-column>
+              <el-table-column label="父级 L1(可选)" min-width="160">
+                <template #default="{ row }">
+                  <el-select
+                    v-model="l2ParentMetric[row.metricCode]"
+                    placeholder="可不选"
+                    filterable
+                    clearable
+                    style="width: 100%"
+                    :disabled="!l2On[row.metricCode]"
+                  >
+                    <el-option
+                      v-for="c in parentOptionsForRow(row)"
+                      :key="c.metricCode"
+                      :label="parentOptionLabel(c)"
+                      :value="c.metricCode"
+                    />
+                  </el-select>
+                </template>
+              </el-table-column>
+              <el-table-column label="栏" width="88">
+                <template #default="{ row }">
+                  <el-select v-model="l2Zone[row.metricCode]" :disabled="!l2On[row.metricCode]">
+                    <el-option label="左" value="left" />
+                    <el-option label="右" value="right" />
+                  </el-select>
+                </template>
+              </el-table-column>
+              <el-table-column label="计算公式(结构化)" min-width="260">
+                <template #default="{ row }">
+                  <FormulaEditor
+                    v-if="l2On[row.metricCode]"
+                    v-model="l2Formula[row.metricCode]"
+                    :module-code="currentModuleCode"
+                    :exclude-kpi-id="row.id"
+                    placeholder="支持 @指标 / $事实"
+                  />
+                  <span v-else class="s0-s4__formula-off">(未选用)</span>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
         </template>
       </div>
       <div v-else-if="drawerS4L1" v-loading="!s4PanelReady" class="s0-drawer-s4">

+ 3 - 3
server/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj

@@ -11,9 +11,9 @@
     <GenerateSatelliteAssembliesForCore>true</GenerateSatelliteAssembliesForCore>
     <Copyright>Admin.NET</Copyright>
     <Description>Admin.NET 通用权限开发平台</Description>
-    <AssemblyVersion>1.0.62</AssemblyVersion>
-    <FileVersion>1.0.62</FileVersion>
-    <Version>1.0.62</Version>
+    <AssemblyVersion>1.0.63</AssemblyVersion>
+    <FileVersion>1.0.63</FileVersion>
+    <Version>1.0.63</Version>
   </PropertyGroup>
 
   <ItemGroup>