ai-coding
2026-08-19 2fec9b032fb2aa4e600ba0c63ab4b974dd191e14
feat: 新增qbi看板

Co-Authored-By: 武世龙 <wusl13@xiaopeng.com>
18 文件已重命名
1个文件已添加
2个文件已修改
82 ■■■■■ 已修改文件
.kiro/k8s/generated-files.json 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/lark-wiki-fetch/specs/design.md 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/lark-wiki-fetch/specs/requirements.md 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/lark-wiki-fetch/specs/summary.md 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/lark-wiki-fetch/specs/tasks.md 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/lark-wiki-fetch/tests/TC-001-01-no-permission.png 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/lark-wiki-fetch/tests/TC-002-01-homepage.png 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/lark-wiki-fetch/tests/TC-002-01-system-config.png 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/lark-wiki-fetch/tests/TC-002-02-system-config.png 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/lark-wiki-fetch/tests/TC-003-01-account-management.png 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/lark-wiki-fetch/tests/TC-005-01-add-vehicle-step1.png 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/lark-wiki-fetch/tests/TC-005-01-add-vehicle.png 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/lark-wiki-fetch/tests/TC-006-01-test-plan-list.png 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/lark-wiki-fetch/tests/TC-007-01-final-state.png 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/lark-wiki-fetch/tests/TC-007-01-initial-load.png 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/lark-wiki-fetch/tests/test-cases.md 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/lark-wiki-fetch/tests/test-report.md 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/lark-wiki-fetch/tests/test-results.json 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/lark-wiki-fetch/tests/ui-test.mjs 补丁 | 查看 | 原始文档 | blame | 历史
src/router/routes.static.ts 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataAnalysis/index.vue 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.kiro/k8s/generated-files.json
@@ -1,5 +1,6 @@
[
  ".kiro/lark-doc-implement",
  ".kiro/lark-wiki-dev",
  ".kiro/lark-wiki-dev_084245"
  ".kiro/lark-wiki-dev_084245",
  ".kiro/lark-wiki-fetch"
]
.kiro/lark-wiki-fetch/specs/design.md
.kiro/lark-wiki-fetch/specs/requirements.md
.kiro/lark-wiki-fetch/specs/summary.md
.kiro/lark-wiki-fetch/specs/tasks.md
.kiro/lark-wiki-fetch/tests/TC-001-01-no-permission.png

.kiro/lark-wiki-fetch/tests/TC-002-01-homepage.png

.kiro/lark-wiki-fetch/tests/TC-002-01-system-config.png

.kiro/lark-wiki-fetch/tests/TC-002-02-system-config.png

.kiro/lark-wiki-fetch/tests/TC-003-01-account-management.png

.kiro/lark-wiki-fetch/tests/TC-005-01-add-vehicle-step1.png

.kiro/lark-wiki-fetch/tests/TC-005-01-add-vehicle.png

.kiro/lark-wiki-fetch/tests/TC-006-01-test-plan-list.png

.kiro/lark-wiki-fetch/tests/TC-007-01-final-state.png

.kiro/lark-wiki-fetch/tests/TC-007-01-initial-load.png

.kiro/lark-wiki-fetch/tests/test-cases.md
.kiro/lark-wiki-fetch/tests/test-report.md
.kiro/lark-wiki-fetch/tests/test-results.json
.kiro/lark-wiki-fetch/tests/ui-test.mjs
src/router/routes.static.ts
@@ -1998,6 +1998,21 @@
    fullScreen: false,
  },
  {
    // 数据分析:内嵌 Quick BI 报表看板(一级菜单)
    // id 同时作为权限码:超级管理员(role 含 super)在 usePermission 中直通,
    // 其余账号需后台下发该权限码才可见该 tab,符合"仅超管可见"的诉求。
    name: 'dataAnalysis',
    path: '/dataAnalysis',
    title: '数据分析',
    requiresAuth: true,
    icon: 'icon-park-outline:chart-histogram',
    menuType: 'page',
    componentPath: '/dataAnalysis/index.vue',
    id: 93100,
    keepAlive: true,
    pid: null,
  },
  {
    name: 'safetyManagement',
    path: '/safetyManagement',
    title: '安全管理',
src/views/dataAnalysis/index.vue
New file
@@ -0,0 +1,64 @@
<script setup lang="ts">
import { ref } from 'vue'
defineOptions({ name: 'dataAnalysis' })
/**
 * Quick BI 报表看板地址(当前为单个固定看板)。
 * 直连 SSO 访问:报表访问权限由 Quick BI 自身按登录身份校验,
 * 无 QBI 权限时会在 iframe 内展示 QBI 自带的「未加入组织 / 权限不足」页面,
 * 本系统无需额外处理该分支。
 * 后续如需切换或新增看板,仅调整此常量即可。
 */
const QBI_DASHBOARD_URL
  = 'https://ai-quickbi.xiaopeng.link/dashboard/view/pc.htm?pageId=0e63337e-9b9e-4e72-9894-5cb5c357ef86&dd_orientation=auto'
const loading = ref(true)
function handleLoaded() {
  loading.value = false
}
</script>
<template>
  <div class="data-analysis-wrapper">
    <iframe
      :src="QBI_DASHBOARD_URL"
      title="数据分析"
      class="data-analysis-iframe"
      frameborder="0"
      scrolling="auto"
      @load="handleLoaded"
    />
    <div v-if="loading" class="data-analysis-loading">
      <n-spin size="large" />
    </div>
  </div>
</template>
<style scoped>
.data-analysis-wrapper {
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
  background-color: #fff;
  border-radius: 3px;
}
.data-analysis-iframe {
  display: block;
  width: 100%;
  height: 100%;
  border: none;
}
.data-analysis-loading {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #fff;
}
</style>