Commit 74f4fe3d by wangchunyang
parents 27678366 b0c326b6
...@@ -121,67 +121,6 @@ export const getKeyPersonUser = (param) => { ...@@ -121,67 +121,6 @@ export const getKeyPersonUser = (param) => {
}) })
} }
// ===== 回访记录(办理)模块 =====
// 列表
export const findVisitRecordList = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyPersonVisitRecord/findVisitRecordList',
method: 'post',
data: param
})
}
// 获取本次评分统计数据
export const getScoreStatistics = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyPersonStatistics/getScoreStatistics',
method: 'post',
data: param
})
}
// 详情(含基本信息、计划信息、历史记录)
export const getVisitRecordDetail = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyPersonVisitRecord/getVisitRecordDetail',
method: 'post',
data: param
})
}
// 新增回访记录
export const insertVisitRecord = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyPersonVisitRecord/insertVisitRecord',
method: 'post',
data: param
})
}
// 获取回访按钮权限
export const getVisitButtonPower = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyPersonVisitRecord/getVisitButtonPower',
method: 'post',
data: param
})
}
// 历史回访记录分页
export const selectVisitHistoryPage = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyPersonVisitRecord/selectVisitHistoryPage',
method: 'post',
data: param
})
}
// 待办统计(正常/临期)
export const getPendingStats = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyPersonVisitRecord/getPendingStats',
method: 'post',
data: param
})
}
// ===== 按钮可见权限配置 ===== // ===== 按钮可见权限配置 =====
// 列表(来源于字典 page_button,并合并已配置的可见部门) // 列表(来源于字典 page_button,并合并已配置的可见部门)
export const selectPageButtonPowerList = (param) => { export const selectPageButtonPowerList = (param) => {
...@@ -244,6 +183,15 @@ export const getOverdueWarningStatistics = (param) => { ...@@ -244,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({
...@@ -380,3 +328,45 @@ export const getDualDetail = (param) => { ...@@ -380,3 +328,45 @@ export const getDualDetail = (param) => {
data: param data: param
}) })
} }
// ===== 回访记录办理 =====
// 查询回访记录列表
export const findVisitRecordList = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyPersonVisitRecord/findVisitRecordList',
method: 'post',
data: param
})
}
// 获取人员信息(用于回访)
export const getPersonInfoForVisit = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyPersonVisitRecord/getPersonInfoForVisit',
method: 'post',
data: param
})
}
// 保存回访记录
export const saveVisitRecord = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyPersonVisitRecord/saveVisitRecord',
method: 'post',
data: param
})
}
// 查询回访历史(分页)
export const selectVisitHistoryPage = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyPersonVisitRecord/selectVisitHistoryPage',
method: 'post',
data: param
})
}
// 查询回访记录详情
export const getVisitRecordDetail = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyPersonVisitRecord/getVisitRecordDetail',
method: 'post',
data: param
})
}
...@@ -339,7 +339,35 @@ ...@@ -339,7 +339,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 {
...@@ -365,36 +393,8 @@ export default { ...@@ -365,36 +393,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: {
...@@ -451,21 +451,38 @@ export default { ...@@ -451,21 +451,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 () {
...@@ -830,24 +847,24 @@ export default { ...@@ -830,24 +847,24 @@ export default {
'km': '/keyPerson/keyPersonVisitRecordKm' // 重点未成年人 'km': '/keyPerson/keyPersonVisitRecordKm' // 重点未成年人
} }
// 根据状态类型确定查询参数 // 根据状态类型确定查询参数(传递 visit_status 用于自动设置回访状态筛选)
let query = {} let query = {}
switch (statusType) { switch (statusType) {
case 'completed': case 'completed':
// 已办:do_status=1 // 已办:不设置 visit_status,因为已办是已完成的状态
query = { do_status: '1' } query = {}
break break
case 'uncompleted': case 'uncompleted':
// 待办:do_status=0 // 正常待办 -> 正常待访:visit_status=1
query = { do_status: '0' } query = { visit_status: '1' }
break break
case 'nearOverdue': case 'nearOverdue':
// 临期待办:do_status=0&is_overdue=1 // 临期待办 -> 临期待访:visit_status=2
query = { do_status: '0', is_overdue: '1' } query = { visit_status: '2' }
break break
case 'overdue': case 'overdue':
// 超期未办:do_status=2 // 超期未办 -> 超期待访:visit_status=3
query = { do_status: '2' } query = { visit_status: '3' }
break break
} }
......
...@@ -576,6 +576,14 @@ const buildFilters = { ...@@ -576,6 +576,14 @@ const buildFilters = {
forward: () => ({ name: '', card_no: '', city_id: '', area_id: '', street_id: '', community_id: '', push_status: '' }) forward: () => ({ name: '', card_no: '', city_id: '', area_id: '', street_id: '', community_id: '', push_status: '' })
} }
// 身份证号统一转码、规整(去除所有空白并大写),避免查询、筛选不生效
function normalizeCardNo (val) {
if (!val) return ''
const s = String(val).replace(/\s+/g, '').trim()
if (!s) return ''
return s.toUpperCase()
}
export default { export default {
name: 'key-person-dual-index', name: 'key-person-dual-index',
props: { props: {
...@@ -816,7 +824,15 @@ export default { ...@@ -816,7 +824,15 @@ export default {
const api = apiMap[tab] const api = apiMap[tab]
if (!api) return if (!api) return
this.loading[tab] = true this.loading[tab] = true
const params = Object.assign({}, this.filters[tab], { sys_type: this.currentCategory }) // 统一处理身份证号(空白 -> 删除,末位 X -> 大写),避免查询/筛选失败
const rawFilters = this.filters[tab] || {}
const normalizedCardNo = normalizeCardNo(rawFilters.card_no)
const params = Object.assign(
{},
rawFilters,
{ card_no: normalizedCardNo, cardNo: normalizedCardNo },
{ sys_type: this.currentCategory }
)
const payload = Object.assign({}, this.pagers[tab], { params }) const payload = Object.assign({}, this.pagers[tab], { params })
api(payload).then(ret => { api(payload).then(ret => {
if (ret.data && ret.data.errcode === 0) { if (ret.data && ret.data.errcode === 0) {
...@@ -926,10 +942,16 @@ export default { ...@@ -926,10 +942,16 @@ export default {
if (pageNo !== undefined && pageNo !== null) { if (pageNo !== undefined && pageNo !== null) {
this.pushModal.personPager.pageNo = pageNo this.pushModal.personPager.pageNo = pageNo
} }
const normalizedCardNo = normalizeCardNo(this.pushModal.personFilters.card_no)
const payload = { const payload = {
pageNo: this.pushModal.personPager.pageNo, pageNo: this.pushModal.personPager.pageNo,
pageSize: this.pushModal.personPager.pageSize, pageSize: this.pushModal.personPager.pageSize,
params: Object.assign({}, this.pushModal.personFilters, { sys_type: this.currentCategory }) params: Object.assign(
{},
this.pushModal.personFilters,
{ card_no: normalizedCardNo, cardNo: normalizedCardNo },
{ sys_type: this.currentCategory }
)
} }
this.pushModal.personLoading = true this.pushModal.personLoading = true
getDualPersonOptions(payload).then(ret => { getDualPersonOptions(payload).then(ret => {
......
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
<Form :label-width="100"> <Form :label-width="100">
<FormItem label="风险等级"><Input :value="renderRatingType(detail.rating_type)" disabled /></FormItem> <FormItem label="风险等级"><Input :value="renderRatingType(detail.rating_type)" disabled /></FormItem>
<FormItem label="回访人"><Input :value="detail.visit_user || '-'" disabled /></FormItem> <FormItem label="回访人"><Input :value="detail.visit_user || '-'" disabled /></FormItem>
<FormItem label="回访部门"><Input :value="detail.visit_user_company || '-'" disabled /></FormItem>
<FormItem label="回访时间"><Input :value="formatDateTime(detail.visit_time)" disabled /></FormItem> <FormItem label="回访时间"><Input :value="formatDateTime(detail.visit_time)" disabled /></FormItem>
<FormItem label="回访记录"><Input type="textarea" :rows="4" :value="detail.visit_record || '-'" disabled /></FormItem> <FormItem label="回访记录"><Input type="textarea" :rows="4" :value="detail.visit_record || '-'" disabled /></FormItem>
<FormItem label="回访图片"> <FormItem label="回访图片">
...@@ -44,9 +43,8 @@ ...@@ -44,9 +43,8 @@
<div> <div>
<Form :label-width="100"> <Form :label-width="100">
<FormItem label="风险等级"><Input :value="renderRatingType(recordModal.data.rating_type)" disabled /></FormItem> <FormItem label="风险等级"><Input :value="renderRatingType(recordModal.data.rating_type)" disabled /></FormItem>
<FormItem label="回访时间"><Input :value="recordModal.data.visit_time || '-'" disabled /></FormItem> <FormItem label="回访时间"><Input :value="formatDateTime(recordModal.data.visit_time)" disabled /></FormItem>
<FormItem label="回访人"><Input :value="recordModal.data.visit_user || recordModal.data.do_user_name || recordModal.data.operator_name || recordModal.data.create_user_name || '-'" disabled /></FormItem> <FormItem label="回访人"><Input :value="recordModal.data.visit_user || recordModal.data.do_user_name || recordModal.data.operator_name || recordModal.data.create_user_name || '-'" disabled /></FormItem>
<FormItem label="回访部门"><Input :value="recordModal.data.visit_user_company || '-'" disabled /></FormItem>
<FormItem label="回访记录"><Input type="textarea" :rows="4" :value="recordModal.data.visit_record || '-'" disabled /></FormItem> <FormItem label="回访记录"><Input type="textarea" :rows="4" :value="recordModal.data.visit_record || '-'" disabled /></FormItem>
<FormItem label="回访图片"> <FormItem label="回访图片">
<div class="img-list"> <div class="img-list">
...@@ -87,11 +85,9 @@ export default { ...@@ -87,11 +85,9 @@ export default {
page: { pageNo: 1, pageSize: 10, totalRecord: 0 }, page: { pageNo: 1, pageSize: 10, totalRecord: 0 },
visitHistoryColumns: [ visitHistoryColumns: [
{ title: '风险等级', key: 'rating_type', align: 'center', width: 120, render: (h, { row }) => h('span', this.renderRatingType(row.rating_type)) }, { title: '风险等级', key: 'rating_type', align: 'center', width: 120, render: (h, { row }) => h('span', this.renderRatingType(row.rating_type)) },
{ title: '回访人', key: 'visit_user', align: 'center', width: 120 },
{ title: '回访部门', key: 'visit_user_company', align: 'center', width: 180 },
{ title: '回访时间', key: 'visit_time', align: 'center', width: 180, render: (h, { row }) => h('span', this.formatDateTime(row.visit_time)) }, { title: '回访时间', key: 'visit_time', align: 'center', width: 180, render: (h, { row }) => h('span', this.formatDateTime(row.visit_time)) },
{ title: '回访状态', key: 'do_status', align: 'center', width: 120, render: (h, { row }) => h('span', this.renderVisitStatus(row.do_status)) }, { title: '回访人', key: 'visit_user', align: 'center', width: 120 },
{ title: '操作', key: 'action', align: 'center', width: 100, render: (h, { row }) => (String(row.do_status) === '2' ? h('span', '') : h('Button', { props: { type: 'primary', size: 'small' }, on: { click: () => this.openRecord(row) } }, '查看')) } { title: '操作', key: 'action', align: 'center', width: 100, render: (h, { row }) => h('Button', { props: { type: 'primary', size: 'small' }, on: { click: () => this.openRecord(row) } }, '详情') }
], ],
ratingTypeOptions: [], ratingTypeOptions: [],
nationMap: {}, nationMap: {},
...@@ -142,7 +138,11 @@ export default { ...@@ -142,7 +138,11 @@ export default {
this.fetchHistory({ key_person_id: this.key_person_id, order_by: 'visit_time desc' }) this.fetchHistory({ key_person_id: this.key_person_id, order_by: 'visit_time desc' })
}, },
fetchHistory (extraParams) { fetchHistory (extraParams) {
const params = Object.assign({}, extraParams) const params = Object.assign(
{},
extraParams,
{ rating_dict_type: String(this.rating_dict_type || '') }
)
const payload = { params, pageNo: this.page.pageNo, pageSize: this.page.pageSize } const payload = { params, pageNo: this.page.pageNo, pageSize: this.page.pageSize }
selectVisitHistoryPage(payload).then((ret) => { selectVisitHistoryPage(payload).then((ret) => {
if (ret && ret.data && ret.data.errcode === 0) { if (ret && ret.data && ret.data.errcode === 0) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论