38 lines
1.5 KiB
JavaScript
38 lines
1.5 KiB
JavaScript
|
|
import { computed, reactive, ref } from 'vue'
|
||
|
|
import { initialRequests } from '../data/requests.js'
|
||
|
|
|
||
|
|
export function useRequests() {
|
||
|
|
const requests = ref(initialRequests)
|
||
|
|
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 matchesCategory = filters.category === '全部费用' || item.category.includes(filters.category.replace('交通', ''))
|
||
|
|
const matchesRisk = filters.risk === '全部风险' || (filters.risk === '高风险' ? item.status === 'danger' : item.verdict.includes(filters.risk.replace('低风险', '通过')))
|
||
|
|
return matchesSearch && matchesCategory && matchesRisk
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
function approveRequest(request) {
|
||
|
|
request.verdict = '已通过'
|
||
|
|
request.status = 'success'
|
||
|
|
return `${request.id} 已标记为通过,审计日志已更新。`
|
||
|
|
}
|
||
|
|
|
||
|
|
function rejectRequest(request) {
|
||
|
|
request.verdict = '已退回补件'
|
||
|
|
request.status = 'danger'
|
||
|
|
return `${request.id} 已退回,系统将通知申请人补充材料。`
|
||
|
|
}
|
||
|
|
|
||
|
|
return {
|
||
|
|
requests, search, filters, ranges, activeRange,
|
||
|
|
filteredRequests, approveRequest, rejectRequest
|
||
|
|
}
|
||
|
|
}
|