feat: 数字员工财务报告体系与定时提醒及看板快照调度
- 新增数字员工财务报告生成、邮件投递与渲染调度器 - 引入员工画像扫描调度与定时提醒任务 - 完善财务看板快照、排行口径与部门人员占比计算 - 优化数字员工工作看板仪表盘与技能目录 - 增强前端总览页图表、工作台摘要与顶部导航栏交互 - 新增差旅申请规划推动提醒与报销创建会话状态管理 - 补充财务报告、看板调度、数字员工工作记录测试覆盖
This commit is contained in:
@@ -34,12 +34,15 @@ export function useAppShell() {
|
||||
conversation: null,
|
||||
scope: null,
|
||||
sessionType: '',
|
||||
budgetContext: null
|
||||
budgetContext: null,
|
||||
initialPromptAutoSubmit: true,
|
||||
initialApplicationPreview: null
|
||||
})
|
||||
const smartEntrySessionId = ref(0)
|
||||
const smartEntryRevealToken = ref(0)
|
||||
const smartEntryInvalidatedDraftClaimId = ref('')
|
||||
const selectedRequestSnapshot = ref(null)
|
||||
const selectedRequestSnapshot = ref(null)
|
||||
const documentCenterRefreshToken = ref(0)
|
||||
|
||||
const { activeView, currentView, setView } = useNavigation()
|
||||
const {
|
||||
@@ -98,12 +101,19 @@ export function useAppShell() {
|
||||
: []
|
||||
))
|
||||
|
||||
const requestsNeeded = computed(() => ['documents', 'workbench'].includes(activeView.value))
|
||||
async function reloadDocumentCenterRequests() {
|
||||
documentCenterRefreshToken.value += 1
|
||||
return reloadRequests()
|
||||
}
|
||||
|
||||
watch(
|
||||
requestsNeeded,
|
||||
(isNeeded) => {
|
||||
if (isNeeded) {
|
||||
() => [activeView.value, route.name],
|
||||
([view]) => {
|
||||
if (view === 'documents') {
|
||||
void reloadDocumentCenterRequests()
|
||||
return
|
||||
}
|
||||
if (view === 'workbench') {
|
||||
void ensureRequestsLoaded()
|
||||
}
|
||||
},
|
||||
@@ -166,10 +176,17 @@ export function useAppShell() {
|
||||
toast(message)
|
||||
}
|
||||
|
||||
function handleNavigate(view) {
|
||||
smartEntryOpen.value = false
|
||||
setView(view)
|
||||
}
|
||||
function handleNavigate(view) {
|
||||
smartEntryOpen.value = false
|
||||
const shouldRefreshCurrentDocumentCenter =
|
||||
view === 'documents'
|
||||
&& activeView.value === 'documents'
|
||||
&& route.name === 'app-documents'
|
||||
setView(view)
|
||||
if (shouldRefreshCurrentDocumentCenter) {
|
||||
void reloadDocumentCenterRequests()
|
||||
}
|
||||
}
|
||||
|
||||
function openFinancialAssistantCreate(source) {
|
||||
if (smartEntryOpen.value) {
|
||||
@@ -185,7 +202,9 @@ export function useAppShell() {
|
||||
conversation: null,
|
||||
scope: null,
|
||||
sessionType: '',
|
||||
budgetContext: null
|
||||
budgetContext: null,
|
||||
initialPromptAutoSubmit: true,
|
||||
initialApplicationPreview: null
|
||||
}
|
||||
smartEntrySessionId.value += 1
|
||||
}
|
||||
@@ -320,6 +339,7 @@ export function useAppShell() {
|
||||
|| String(payload?.prompt || '').trim()
|
||||
|| (Array.isArray(payload?.files) && payload.files.length)
|
||||
|| payload?.conversation
|
||||
|| payload?.applicationPreview
|
||||
)
|
||||
if (smartEntryOpen.value && !shouldReplaceOpenEntry) {
|
||||
smartEntryRevealToken.value += 1
|
||||
@@ -342,6 +362,10 @@ export function useAppShell() {
|
||||
sessionType,
|
||||
budgetContext: payload.budgetContext && typeof payload.budgetContext === 'object'
|
||||
? payload.budgetContext
|
||||
: null,
|
||||
initialPromptAutoSubmit: payload.initialPromptAutoSubmit !== false,
|
||||
initialApplicationPreview: payload.applicationPreview && typeof payload.applicationPreview === 'object'
|
||||
? payload.applicationPreview
|
||||
: null
|
||||
}
|
||||
smartEntrySessionId.value += 1
|
||||
@@ -410,6 +434,7 @@ export function useAppShell() {
|
||||
currentView,
|
||||
customRange,
|
||||
detailMode,
|
||||
documentCenterRefreshToken,
|
||||
filteredRequests,
|
||||
filters,
|
||||
handleApprove,
|
||||
@@ -429,6 +454,7 @@ export function useAppShell() {
|
||||
requestsError,
|
||||
requestsLoading,
|
||||
reloadRequests,
|
||||
reloadDocumentCenterRequests,
|
||||
requests,
|
||||
search,
|
||||
selectedRequest,
|
||||
|
||||
Reference in New Issue
Block a user