Commit b640816a by wuchao

统计

parent df7a87f2
...@@ -183,6 +183,15 @@ export const getOverdueWarningStatistics = (param) => { ...@@ -183,6 +183,15 @@ export const getOverdueWarningStatistics = (param) => {
}) })
} }
// 获取评分统计数据
export const getScoreStatistics = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyPersonStatistics/getScoreStatistics',
method: 'post',
data: param
})
}
// ===== 评分等级维护(sys_dict: rating_level) ===== // ===== 评分等级维护(sys_dict: rating_level) =====
export const selectLevelSetList = (param) => { export const selectLevelSetList = (param) => {
return axios.request({ return axios.request({
......
...@@ -328,7 +328,35 @@ ...@@ -328,7 +328,35 @@
</template> </template>
<script> <script>
import { getScoreStatistics, getOverdueWarningStatistics, getRatingStatistics } from '@/api/key-person' import { getScoreStatistics, getRatingStatistics, getOverdueWarningStatistics, selectCurrentUserInfo } from '@/api/key-person'
const createVisitWarningBucket = () => ({
total: 0,
completed: 0,
uncompleted: 0,
nearOverdue: 0,
overdue: 0
})
const createVisitWarningData = () => ({
summary: createVisitWarningBucket(),
mentalPatient: createVisitWarningBucket(),
released: createVisitWarningBucket(),
minors: createVisitWarningBucket()
})
const VISIT_BUCKET_FIELDS = ['total', 'completed', 'uncompleted', 'nearOverdue', 'overdue']
const normalizeVisitWarningResponse = (payload = {}) => {
const normalized = createVisitWarningData()
Object.keys(normalized).forEach((key) => {
const source = payload[key] || {}
VISIT_BUCKET_FIELDS.forEach(field => {
normalized[key][field] = Number(source[field]) || 0
})
})
return normalized
}
export default { export default {
data () { data () {
return { return {
...@@ -354,36 +382,8 @@ export default { ...@@ -354,36 +382,8 @@ export default {
released: { total: 0, categories: [] } released: { total: 0, categories: [] }
}, },
// 临期预警数据 // 临期预警数据
overdueWarningData: { overdueWarningData: createVisitWarningData(),
summary: { visitScopeParams: null,
total: 0,
completed: 0,
uncompleted: 0,
nearOverdue: 0,
overdue: 0
},
mentalPatient: {
total: 0,
completed: 0,
uncompleted: 0,
nearOverdue: 0,
overdue: 0
},
released: {
total: 0,
completed: 0,
uncompleted: 0,
nearOverdue: 0,
overdue: 0
},
minors: {
total: 0,
completed: 0,
uncompleted: 0,
nearOverdue: 0,
overdue: 0
}
},
// 评分临期预警数据 // 评分临期预警数据
ratingWarningData: { ratingWarningData: {
summary: { summary: {
...@@ -440,21 +440,38 @@ export default { ...@@ -440,21 +440,38 @@ export default {
this.$Message.error('获取数据失败,请稍后重试') this.$Message.error('获取数据失败,请稍后重试')
}) })
}, },
// 获取临期预警统计数据 // 获取临期预警统计数据(基于回访状态)
getOverdueWarningData () { async getOverdueWarningData () {
getOverdueWarningStatistics().then(ret => { try {
if (ret.data.errcode === 0) { const scopeParams = await this.getVisitScopeParams()
// 只有在成功获取数据时才更新 const res = await getOverdueWarningStatistics(scopeParams || {})
this.overdueWarningData = ret.data.data if (res && res.data && res.data.errcode === 0) {
} else { this.overdueWarningData = normalizeVisitWarningResponse(res.data.data)
// 请求失败,显示错误提示,保持初始数据不变 return
this.$Message.error(ret.data.errmsg || '获取临期预警数据失败')
} }
}).catch(err => { const message = (res && res.data && res.data.errmsg) || '获取失败'
// 网络错误或其他异常,显示错误提示,保持初始数据不变 throw new Error(message)
} catch (err) {
console.error('获取临期预警数据失败:', err) console.error('获取临期预警数据失败:', err)
this.$Message.error('获取临期预警数据失败,请稍后重试') this.$Message.error('获取回访临期预警数据失败,请稍后重试')
}) }
},
async getVisitScopeParams () {
if (this.visitScopeParams) {
return this.visitScopeParams
}
try {
const ret = await selectCurrentUserInfo({})
if (ret && ret.data && ret.data.errcode === 0) {
this.visitScopeParams = ret.data.data || {}
} else {
this.visitScopeParams = {}
}
} catch (err) {
console.error('获取用户范围失败:', err)
this.visitScopeParams = {}
}
return this.visitScopeParams
}, },
// 获取评分临期预警统计数据 // 获取评分临期预警统计数据
getRatingWarningData () { getRatingWarningData () {
......
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
<span>{{ renderVisitStatus(row.visit_status) }}</span> <span>{{ renderVisitStatus(row.visit_status) }}</span>
</template> </template>
<template slot="action" slot-scope="{ row }"> <template slot="action" slot-scope="{ row }">
<Button size="small" type="primary" class="mr5" @click="openVisitModal(row)">回访</Button> <Button size="small" type="primary" class="mr10" @click="openVisitModal(row)">回访</Button>
<Button size="small" @click="openHistoryModal(row)">回访历史</Button> <Button size="small" @click="openHistoryModal(row)">回访历史</Button>
</template> </template>
</Table> </Table>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论