Commit 74f4fe3d by wangchunyang
parents 27678366 b0c326b6
......@@ -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,并合并已配置的可见部门)
export const selectPageButtonPowerList = (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) =====
export const selectLevelSetList = (param) => {
return axios.request({
......@@ -380,3 +328,45 @@ export const getDualDetail = (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 @@
</template>
<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 {
data () {
return {
......@@ -365,36 +393,8 @@ export default {
released: { total: 0, categories: [] }
},
// 临期预警数据
overdueWarningData: {
summary: {
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
}
},
overdueWarningData: createVisitWarningData(),
visitScopeParams: null,
// 评分临期预警数据
ratingWarningData: {
summary: {
......@@ -451,21 +451,38 @@ export default {
this.$Message.error('获取数据失败,请稍后重试')
})
},
// 获取临期预警统计数据
getOverdueWarningData () {
getOverdueWarningStatistics().then(ret => {
if (ret.data.errcode === 0) {
// 只有在成功获取数据时才更新
this.overdueWarningData = ret.data.data
} else {
// 请求失败,显示错误提示,保持初始数据不变
this.$Message.error(ret.data.errmsg || '获取临期预警数据失败')
// 获取临期预警统计数据(基于回访状态)
async getOverdueWarningData () {
try {
const scopeParams = await this.getVisitScopeParams()
const res = await getOverdueWarningStatistics(scopeParams || {})
if (res && res.data && res.data.errcode === 0) {
this.overdueWarningData = normalizeVisitWarningResponse(res.data.data)
return
}
}).catch(err => {
// 网络错误或其他异常,显示错误提示,保持初始数据不变
const message = (res && res.data && res.data.errmsg) || '获取失败'
throw new Error(message)
} catch (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 () {
......@@ -830,24 +847,24 @@ export default {
'km': '/keyPerson/keyPersonVisitRecordKm' // 重点未成年人
}
// 根据状态类型确定查询参数
// 根据状态类型确定查询参数(传递 visit_status 用于自动设置回访状态筛选)
let query = {}
switch (statusType) {
case 'completed':
// 已办:do_status=1
query = { do_status: '1' }
// 已办:不设置 visit_status,因为已办是已完成的状态
query = {}
break
case 'uncompleted':
// 待办:do_status=0
query = { do_status: '0' }
// 正常待办 -> 正常待访:visit_status=1
query = { visit_status: '1' }
break
case 'nearOverdue':
// 临期待办:do_status=0&is_overdue=1
query = { do_status: '0', is_overdue: '1' }
// 临期待办 -> 临期待访:visit_status=2
query = { visit_status: '2' }
break
case 'overdue':
// 超期未办:do_status=2
query = { do_status: '2' }
// 超期未办 -> 超期待访:visit_status=3
query = { visit_status: '3' }
break
}
......
......@@ -576,6 +576,14 @@ const buildFilters = {
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 {
name: 'key-person-dual-index',
props: {
......@@ -816,7 +824,15 @@ export default {
const api = apiMap[tab]
if (!api) return
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 })
api(payload).then(ret => {
if (ret.data && ret.data.errcode === 0) {
......@@ -926,10 +942,16 @@ export default {
if (pageNo !== undefined && pageNo !== null) {
this.pushModal.personPager.pageNo = pageNo
}
const normalizedCardNo = normalizeCardNo(this.pushModal.personFilters.card_no)
const payload = {
pageNo: this.pushModal.personPager.pageNo,
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
getDualPersonOptions(payload).then(ret => {
......
......@@ -19,7 +19,6 @@
<Form :label-width="100">
<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_company || '-'" 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="回访图片">
......@@ -44,9 +43,8 @@
<div>
<Form :label-width="100">
<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_company || '-'" disabled /></FormItem>
<FormItem label="回访记录"><Input type="textarea" :rows="4" :value="recordModal.data.visit_record || '-'" disabled /></FormItem>
<FormItem label="回访图片">
<div class="img-list">
......@@ -87,11 +85,9 @@ export default {
page: { pageNo: 1, pageSize: 10, totalRecord: 0 },
visitHistoryColumns: [
{ 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: 'do_status', align: 'center', width: 120, render: (h, { row }) => h('span', this.renderVisitStatus(row.do_status)) },
{ 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: 'visit_user', align: 'center', width: 120 },
{ title: '操作', key: 'action', align: 'center', width: 100, render: (h, { row }) => h('Button', { props: { type: 'primary', size: 'small' }, on: { click: () => this.openRecord(row) } }, '详情') }
],
ratingTypeOptions: [],
nationMap: {},
......@@ -142,7 +138,11 @@ export default {
this.fetchHistory({ key_person_id: this.key_person_id, order_by: 'visit_time desc' })
},
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 }
selectVisitHistoryPage(payload).then((ret) => {
if (ret && ret.data && ret.data.errcode === 0) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论