refactor: split project into web and server directories

- Move frontend to web/ directory
- Add server/ directory for backend
- Restructure project for前后端分离架构

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-06 11:00:38 +08:00
parent 9a7b0794a1
commit 9785fb527b
85 changed files with 10474 additions and 10047 deletions

View File

@@ -0,0 +1,60 @@
import { computed, reactive, ref } from 'vue'
import { initialRequests } from '../data/requests.js'
export function useRequests() {
const requests = ref(initialRequests)
const entityMap = {
'Northstar China Ltd.': 'Northstar China Ltd.',
'Northstar Singapore Pte.': 'Northstar Singapore Pte.',
'Northstar US Inc.': 'Northstar US Inc.'
}
const search = ref('')
const filters = reactive({ entity: '全部主体', category: '全部费用', risk: '全部风险' })
const ranges = ['今日', '本周', '本月']
const activeRange = ref('本周')
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)
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')
const matchesRange = activeRange.value === 'custom'
|| activeRange.value === '本月'
|| (activeRange.value === '本周' && item.range !== '本月')
|| (activeRange.value === '今日' && item.range === '今日')
return matchesSearch && matchesEntity && matchesCategory && matchesRisk && matchesRange
})
})
function updateRequest(requestId, updates) {
requests.value = requests.value.map((item) => (item.id === requestId ? { ...item, ...updates } : item))
}
function approveRequest(request) {
updateRequest(request.id, {
verdict: '已通过',
status: 'success',
risk: '已完成人工确认'
})
return `${request.id} 已标记为通过,审计日志已更新。`
}
function rejectRequest(request) {
updateRequest(request.id, {
verdict: '已退回补件',
status: 'danger',
risk: '待申请人补充差旅行程与票据'
})
return `${request.id} 已退回,系统将通知申请人补充材料。`
}
return {
requests, search, filters, ranges, activeRange,
filteredRequests, approveRequest, rejectRequest
}
}