feat: 引入 ECharts 统一图表并完善员工画像标签分页

后端优化员工行为画像服务和辅助函数,完善系统设置模型和
配置持久化,前端引入 ECharts 替换所有图表组件实现统一
渲染,新增员工画像标签分页器和数字员工工作记录组件,优
化工作台响应式布局和登录页过渡动画,完善预算中心和数字
员工页面样式细节。
This commit is contained in:
caoxiaozhu
2026-05-28 16:24:59 +08:00
parent 8a4a777be7
commit e384318046
53 changed files with 4698 additions and 2468 deletions

View File

@@ -75,10 +75,24 @@
</article>
<article v-else key="list" class="skill-list panel digital-employees-list">
<nav class="status-tabs" aria-label="数字员工类型">
<button class="active" type="button">数字员工</button>
<nav class="status-tabs" aria-label="数字员工页签">
<button
type="button"
:class="{ active: activeSection === 'skills' }"
@click="activeSection = 'skills'"
>
数字员工
</button>
<button
type="button"
:class="{ active: activeSection === 'workRecords' }"
@click="activeSection = 'workRecords'"
>
工作记录
</button>
</nav>
<template v-if="activeSection === 'skills'">
<div class="list-toolbar">
<div class="filter-set">
<label class="search-filter">
@@ -241,6 +255,12 @@
<footer v-if="!loading && !errorMessage && visibleEmployees.length" class="list-foot">
<span class="page-summary">当前展示 {{ visibleEmployees.length }} 条数字员工</span>
</footer>
</template>
<DigitalEmployeeWorkRecords
v-else
class="digital-work-records-section"
/>
</article>
</Transition>
@@ -264,6 +284,7 @@ import { computed, onMounted, ref } from 'vue'
import AuditDigitalEmployeeDetail from '../components/audit/AuditDigitalEmployeeDetail.vue'
import AuditPickerFilter from '../components/audit/AuditPickerFilter.vue'
import DigitalEmployeeScheduleDialog from '../components/audit/DigitalEmployeeScheduleDialog.vue'
import DigitalEmployeeWorkRecords from '../components/audit/DigitalEmployeeWorkRecords.vue'
import TableEmptyState from '../components/shared/TableEmptyState.vue'
import TableLoadingState from '../components/shared/TableLoadingState.vue'
import { useSystemState } from '../composables/useSystemState.js'
@@ -305,6 +326,7 @@ const { toast } = useToast()
const employees = ref([])
const selectedEmployee = ref(null)
const selectedEmployeeId = ref('')
const activeSection = ref('skills')
const keyword = ref('')
const selectedStatus = ref('')
const selectedEnabledState = ref('')