feat: refactor monolithic App.vue into modular Vue component architecture
- Extract 711-line App.vue into 15+ focused files across 5 directories
- Add data layer (icons, metrics, policies, auditTrail, requests)
- Add composables (useNavigation, useRequests, useChat, useToast)
- Add layout components (SidebarRail, TopBar, FilterBar)
- Add shared components (PanelHead, InfoRow, ToastNotification)
- Add business component (RequestTable) and 5 view components
- Extract global CSS to assets/styles/global.css
- Add start.sh with WSL/Windows cross-platform support
- Add .gitignore for node_modules, dist, and IDE dirs
2026-04-28 17:20:52 +08:00
|
|
|
import { computed, reactive, ref } from 'vue'
|
|
|
|
|
import { initialRequests } from '../data/requests.js'
|
|
|
|
|
|
|
|
|
|
export function useRequests() {
|
|
|
|
|
const requests = ref(initialRequests)
|
2026-04-29 23:35:56 +08:00
|
|
|
const entityMap = {
|
|
|
|
|
'Northstar China Ltd.': 'Northstar China Ltd.',
|
|
|
|
|
'Northstar Singapore Pte.': 'Northstar Singapore Pte.',
|
|
|
|
|
'Northstar US Inc.': 'Northstar US Inc.'
|
|
|
|
|
}
|
feat: refactor monolithic App.vue into modular Vue component architecture
- Extract 711-line App.vue into 15+ focused files across 5 directories
- Add data layer (icons, metrics, policies, auditTrail, requests)
- Add composables (useNavigation, useRequests, useChat, useToast)
- Add layout components (SidebarRail, TopBar, FilterBar)
- Add shared components (PanelHead, InfoRow, ToastNotification)
- Add business component (RequestTable) and 5 view components
- Extract global CSS to assets/styles/global.css
- Add start.sh with WSL/Windows cross-platform support
- Add .gitignore for node_modules, dist, and IDE dirs
2026-04-28 17:20:52 +08:00
|
|
|
const search = ref('')
|
|
|
|
|
const filters = reactive({ entity: '全部主体', category: '全部费用', risk: '全部风险' })
|
|
|
|
|
const ranges = ['今日', '本周', '本月']
|
2026-04-29 23:35:56 +08:00
|
|
|
const activeRange = ref('本周')
|
feat: refactor monolithic App.vue into modular Vue component architecture
- Extract 711-line App.vue into 15+ focused files across 5 directories
- Add data layer (icons, metrics, policies, auditTrail, requests)
- Add composables (useNavigation, useRequests, useChat, useToast)
- Add layout components (SidebarRail, TopBar, FilterBar)
- Add shared components (PanelHead, InfoRow, ToastNotification)
- Add business component (RequestTable) and 5 view components
- Extract global CSS to assets/styles/global.css
- Add start.sh with WSL/Windows cross-platform support
- Add .gitignore for node_modules, dist, and IDE dirs
2026-04-28 17:20:52 +08:00
|
|
|
|
|
|
|
|
const filteredRequests = computed(() => {
|
|
|
|
|
const key = search.value.trim().toLowerCase()
|
|
|
|
|
return requests.value.filter((item) => {
|
|
|
|
|
const matchesSearch = !key || `${item.id}${item.person}${item.category}${item.risk}`.toLowerCase().includes(key)
|
2026-04-29 23:35:56 +08:00
|
|
|
const matchesEntity = filters.entity === '全部主体' || item.entity === entityMap[filters.entity]
|
|
|
|
|
const matchesCategory = filters.category === '全部费用' || item.category === filters.category
|
|
|
|
|
const matchesRisk = filters.risk === '全部风险'
|
|
|
|
|
|| (filters.risk === '高风险' && item.status === 'danger')
|
|
|
|
|
|| (filters.risk === '需解释' && item.status === 'warning')
|
|
|
|
|
|| (filters.risk === '低风险' && item.status === 'success')
|
2026-04-30 17:11:24 +08:00
|
|
|
const matchesRange = activeRange.value === 'custom'
|
|
|
|
|
|| activeRange.value === '本月'
|
|
|
|
|
|| (activeRange.value === '本周' && item.range !== '本月')
|
|
|
|
|
|| (activeRange.value === '今日' && item.range === '今日')
|
2026-04-29 23:35:56 +08:00
|
|
|
return matchesSearch && matchesEntity && matchesCategory && matchesRisk && matchesRange
|
feat: refactor monolithic App.vue into modular Vue component architecture
- Extract 711-line App.vue into 15+ focused files across 5 directories
- Add data layer (icons, metrics, policies, auditTrail, requests)
- Add composables (useNavigation, useRequests, useChat, useToast)
- Add layout components (SidebarRail, TopBar, FilterBar)
- Add shared components (PanelHead, InfoRow, ToastNotification)
- Add business component (RequestTable) and 5 view components
- Extract global CSS to assets/styles/global.css
- Add start.sh with WSL/Windows cross-platform support
- Add .gitignore for node_modules, dist, and IDE dirs
2026-04-28 17:20:52 +08:00
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
|
2026-04-29 23:35:56 +08:00
|
|
|
function updateRequest(requestId, updates) {
|
|
|
|
|
requests.value = requests.value.map((item) => (item.id === requestId ? { ...item, ...updates } : item))
|
|
|
|
|
}
|
|
|
|
|
|
feat: refactor monolithic App.vue into modular Vue component architecture
- Extract 711-line App.vue into 15+ focused files across 5 directories
- Add data layer (icons, metrics, policies, auditTrail, requests)
- Add composables (useNavigation, useRequests, useChat, useToast)
- Add layout components (SidebarRail, TopBar, FilterBar)
- Add shared components (PanelHead, InfoRow, ToastNotification)
- Add business component (RequestTable) and 5 view components
- Extract global CSS to assets/styles/global.css
- Add start.sh with WSL/Windows cross-platform support
- Add .gitignore for node_modules, dist, and IDE dirs
2026-04-28 17:20:52 +08:00
|
|
|
function approveRequest(request) {
|
2026-04-29 23:35:56 +08:00
|
|
|
updateRequest(request.id, {
|
|
|
|
|
verdict: '已通过',
|
|
|
|
|
status: 'success',
|
|
|
|
|
risk: '已完成人工确认'
|
|
|
|
|
})
|
feat: refactor monolithic App.vue into modular Vue component architecture
- Extract 711-line App.vue into 15+ focused files across 5 directories
- Add data layer (icons, metrics, policies, auditTrail, requests)
- Add composables (useNavigation, useRequests, useChat, useToast)
- Add layout components (SidebarRail, TopBar, FilterBar)
- Add shared components (PanelHead, InfoRow, ToastNotification)
- Add business component (RequestTable) and 5 view components
- Extract global CSS to assets/styles/global.css
- Add start.sh with WSL/Windows cross-platform support
- Add .gitignore for node_modules, dist, and IDE dirs
2026-04-28 17:20:52 +08:00
|
|
|
return `${request.id} 已标记为通过,审计日志已更新。`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function rejectRequest(request) {
|
2026-04-29 23:35:56 +08:00
|
|
|
updateRequest(request.id, {
|
|
|
|
|
verdict: '已退回补件',
|
|
|
|
|
status: 'danger',
|
|
|
|
|
risk: '待申请人补充差旅行程与票据'
|
|
|
|
|
})
|
feat: refactor monolithic App.vue into modular Vue component architecture
- Extract 711-line App.vue into 15+ focused files across 5 directories
- Add data layer (icons, metrics, policies, auditTrail, requests)
- Add composables (useNavigation, useRequests, useChat, useToast)
- Add layout components (SidebarRail, TopBar, FilterBar)
- Add shared components (PanelHead, InfoRow, ToastNotification)
- Add business component (RequestTable) and 5 view components
- Extract global CSS to assets/styles/global.css
- Add start.sh with WSL/Windows cross-platform support
- Add .gitignore for node_modules, dist, and IDE dirs
2026-04-28 17:20:52 +08:00
|
|
|
return `${request.id} 已退回,系统将通知申请人补充材料。`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
requests, search, filters, ranges, activeRange,
|
|
|
|
|
filteredRequests, approveRequest, rejectRequest
|
|
|
|
|
}
|
|
|
|
|
}
|