|
@@ -1,3 +1,71 @@
|
|
|
+/**
|
|
|
+ * 理赔管理Mixin
|
|
|
+ * @fileoverview 理赔管理页面的通用逻辑和数据处理
|
|
|
+ * @version 1.0.0
|
|
|
+ */
|
|
|
+
|
|
|
+/**
|
|
|
+ * @typedef {import('@/api/claim/index').ClaimItem} ClaimItem - 理赔申请数据项
|
|
|
+ * @typedef {import('@/api/claim/index').ClaimQueryParams} ClaimQueryParams - 理赔查询参数
|
|
|
+ * @typedef {import('@/api/claim/index').ClaimAuditItem} ClaimAuditItem - 审核记录数据项
|
|
|
+ * @typedef {import('@/api/claim/index').ClaimAttachmentItem} ClaimAttachmentItem - 附件信息
|
|
|
+ * @typedef {import('@/api/claim/index').ApiResponse} ApiResponse - API响应数据
|
|
|
+ * @typedef {import('@/api/claim/index').PageResult} PageResult - 分页结果
|
|
|
+ */
|
|
|
+
|
|
|
+/**
|
|
|
+ * @typedef {import('@/constants/claim').AUDIT_STATUS} AUDIT_STATUS - 审核状态枚举
|
|
|
+ * @typedef {import('@/constants/claim').CLAIM_SOURCE_TYPE} CLAIM_SOURCE_TYPE - 理赔来源类型枚举
|
|
|
+ * @typedef {import('@/constants/claim').ATTACHMENT_FILE_TYPE} ATTACHMENT_FILE_TYPE - 附件文件类型枚举
|
|
|
+ */
|
|
|
+
|
|
|
+/**
|
|
|
+ * 分页参数类型定义
|
|
|
+ * @typedef {Object} PageParams
|
|
|
+ * @property {number} pageSize - 每页大小
|
|
|
+ * @property {number} currentPage - 当前页码
|
|
|
+ * @property {number} total - 总记录数
|
|
|
+ */
|
|
|
+
|
|
|
+/**
|
|
|
+ * 审核表单数据类型定义
|
|
|
+ * @typedef {Object} AuditFormData
|
|
|
+ * @property {string|null} id - 审核记录ID(编辑时必需)
|
|
|
+ * @property {number|null} claimId - 理赔ID
|
|
|
+ * @property {string} claimNo - 理赔编号
|
|
|
+ * @property {number|null} auditResult - 审核结果 1-通过 2-拒绝
|
|
|
+ * @property {number} auditAmount - 审核金额
|
|
|
+ * @property {string} reasonDetail - 审核说明
|
|
|
+ * @property {number|null} auditorId - 审核人ID
|
|
|
+ * @property {string} auditorName - 审核人姓名
|
|
|
+ * @property {string} auditTime - 审核时间
|
|
|
+ * @property {string} feedbackChannel - 反馈渠道
|
|
|
+ * @property {string} feedbackDesc - 反馈描述
|
|
|
+ * @property {string} feedbackTime - 反馈时间
|
|
|
+ * @property {number} appealStatus - 申诉状态 0-无申诉 1-申诉中
|
|
|
+ * @property {string} appealResult - 申诉结果
|
|
|
+ * @property {string} appealTime - 申诉时间
|
|
|
+ */
|
|
|
+
|
|
|
+/**
|
|
|
+ * 表格配置选项类型定义
|
|
|
+ * @typedef {Object} TableOption
|
|
|
+ * @property {string|number} height - 表格高度
|
|
|
+ * @property {number} calcHeight - 计算高度偏移
|
|
|
+ * @property {boolean} tip - 是否显示提示
|
|
|
+ * @property {boolean} searchShow - 是否显示搜索
|
|
|
+ * @property {number} searchMenuSpan - 搜索菜单跨度
|
|
|
+ * @property {boolean} border - 是否显示边框
|
|
|
+ * @property {boolean} index - 是否显示序号
|
|
|
+ * @property {string} indexLabel - 序号列标签
|
|
|
+ * @property {boolean} selection - 是否显示选择框
|
|
|
+ * @property {boolean} viewBtn - 是否显示查看按钮
|
|
|
+ * @property {boolean} editBtn - 是否显示编辑按钮
|
|
|
+ * @property {boolean} delBtn - 是否显示删除按钮
|
|
|
+ * @property {boolean} addBtn - 是否显示添加按钮
|
|
|
+ * @property {Array<Object>} column - 列配置
|
|
|
+ */
|
|
|
+
|
|
|
import { getClaimList, getClaimDetail, getClaimAttachments, getClaimAuditList, addClaimAudit, updateClaimAudit, removeClaimAudit } from '@/api/claim/index'
|
|
|
import { formatFileSize } from '@/util/util'
|
|
|
import { mapGetters } from 'vuex'
|
|
@@ -13,37 +81,63 @@ import {
|
|
|
} from '@/constants/claim'
|
|
|
|
|
|
export default {
|
|
|
+ /**
|
|
|
+ * 组件数据定义
|
|
|
+ * @returns {Object} 组件数据对象
|
|
|
+ */
|
|
|
data() {
|
|
|
return {
|
|
|
+ /** @type {Object} 表单数据 */
|
|
|
form: {},
|
|
|
+ /** @type {ClaimQueryParams} 查询参数 */
|
|
|
query: {},
|
|
|
+ /** @type {boolean} 加载状态 */
|
|
|
loading: true,
|
|
|
+ /** @type {PageParams} 分页参数 */
|
|
|
page: {
|
|
|
pageSize: 10,
|
|
|
currentPage: 1,
|
|
|
total: 0
|
|
|
},
|
|
|
+ /** @type {ClaimItem[]} 选中的列表项 */
|
|
|
selectionList: [],
|
|
|
+ /** @type {boolean} 详情弹窗显示状态 */
|
|
|
detailVisible: false,
|
|
|
+ /** @type {boolean} 附件弹窗显示状态 */
|
|
|
attachmentVisible: false,
|
|
|
+ /** @type {boolean} 审核记录弹窗显示状态 */
|
|
|
auditVisible: false,
|
|
|
+ /** @type {boolean} 审核表单弹窗显示状态 */
|
|
|
auditFormVisible: false,
|
|
|
+ /** @type {ClaimItem|null} 理赔详情数据 */
|
|
|
claimDetail: null,
|
|
|
+ /** @type {ClaimAttachmentItem[]} 附件列表 */
|
|
|
attachmentList: [],
|
|
|
+ /** @type {ClaimAuditItem[]} 审核记录列表 */
|
|
|
auditList: [],
|
|
|
+ /** @type {boolean} 附件加载状态 */
|
|
|
attachmentLoading: false,
|
|
|
+ /** @type {boolean} 审核记录加载状态 */
|
|
|
auditLoading: false,
|
|
|
+ /** @type {boolean} 审核表单加载状态 */
|
|
|
auditFormLoading: false,
|
|
|
+ /** @type {ClaimItem|null} 当前操作的理赔行数据 */
|
|
|
currentClaimRow: null,
|
|
|
- auditFormMode: 'add', // 'add' | 'edit'
|
|
|
- // 图片预览相关状态
|
|
|
+ /** @type {'add'|'edit'} 审核表单模式 */
|
|
|
+ auditFormMode: 'add',
|
|
|
+ /** @type {boolean} 图片预览弹窗显示状态 */
|
|
|
imagePreviewVisible: false,
|
|
|
+ /** @type {string} 预览图片URL */
|
|
|
previewImageUrl: '',
|
|
|
+ /** @type {string[]} 预览图片列表 */
|
|
|
previewImageList: [],
|
|
|
+ /** @type {number} 当前预览图片索引 */
|
|
|
currentPreviewIndex: 0,
|
|
|
- // 视频预览相关状态
|
|
|
+ /** @type {boolean} 视频预览弹窗显示状态 */
|
|
|
videoPreviewVisible: false,
|
|
|
+ /** @type {string} 预览视频URL */
|
|
|
previewVideoUrl: '',
|
|
|
+ /** @type {AuditFormData} 审核表单数据 */
|
|
|
auditForm: {
|
|
|
id: null,
|
|
|
claimId: null,
|
|
@@ -61,6 +155,7 @@ export default {
|
|
|
appealResult: '',
|
|
|
appealTime: ''
|
|
|
},
|
|
|
+ /** @type {Object} 审核表单验证规则 */
|
|
|
auditFormRules: {
|
|
|
auditResult: [
|
|
|
{ required: true, message: '请选择审核结果', trigger: 'change' }
|
|
@@ -81,6 +176,7 @@ export default {
|
|
|
{ required: true, message: '请选择审核时间', trigger: 'change' }
|
|
|
]
|
|
|
},
|
|
|
+ /** @type {TableOption} 表格配置选项 */
|
|
|
option: {
|
|
|
height: 'auto',
|
|
|
calcHeight: 30,
|
|
@@ -160,6 +256,7 @@ export default {
|
|
|
}
|
|
|
]
|
|
|
},
|
|
|
+ /** @type {ClaimItem[]} 理赔数据列表 */
|
|
|
data: []
|
|
|
}
|
|
|
},
|
|
@@ -169,8 +266,9 @@ export default {
|
|
|
methods: {
|
|
|
/**
|
|
|
* 获取列表数据
|
|
|
- * @param {Object} page - 分页参数
|
|
|
- * @param {Object} params - 查询参数
|
|
|
+ * @param {PageParams} page - 分页参数
|
|
|
+ * @param {ClaimQueryParams} [params={}] - 查询参数
|
|
|
+ * @returns {Promise<void>} 无返回值
|
|
|
*/
|
|
|
async onLoad(page, params = {}) {
|
|
|
try {
|
|
@@ -189,8 +287,9 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 搜索
|
|
|
- * @param {Object} params - 搜索参数
|
|
|
- * @param {Function} done - 完成回调
|
|
|
+ * @param {ClaimQueryParams} params - 搜索参数
|
|
|
+ * @param {Function} done - 完成回调函数
|
|
|
+ * @returns {void} 无返回值
|
|
|
*/
|
|
|
searchChange(params, done) {
|
|
|
this.query = params
|
|
@@ -200,6 +299,7 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 搜索重置
|
|
|
+ * @returns {void} 无返回值
|
|
|
*/
|
|
|
searchReset() {
|
|
|
this.query = {}
|
|
@@ -208,7 +308,8 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 选择改变
|
|
|
- * @param {Array} list - 选中的列表
|
|
|
+ * @param {ClaimItem[]} list - 选中的列表项
|
|
|
+ * @returns {void} 无返回值
|
|
|
*/
|
|
|
selectionChange(list) {
|
|
|
this.selectionList = list
|
|
@@ -217,6 +318,7 @@ export default {
|
|
|
/**
|
|
|
* 当前页改变
|
|
|
* @param {number} currentPage - 当前页码
|
|
|
+ * @returns {void} 无返回值
|
|
|
*/
|
|
|
currentChange(currentPage) {
|
|
|
this.page.currentPage = currentPage
|
|
@@ -225,6 +327,7 @@ export default {
|
|
|
/**
|
|
|
* 页大小改变
|
|
|
* @param {number} pageSize - 页大小
|
|
|
+ * @returns {void} 无返回值
|
|
|
*/
|
|
|
sizeChange(pageSize) {
|
|
|
this.page.pageSize = pageSize
|
|
@@ -232,6 +335,7 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 刷新
|
|
|
+ * @returns {void} 无返回值
|
|
|
*/
|
|
|
refreshChange() {
|
|
|
this.onLoad(this.page, this.query)
|
|
@@ -239,7 +343,8 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 查看详情
|
|
|
- * @param {Object} row - 行数据
|
|
|
+ * @param {ClaimItem} row - 理赔行数据
|
|
|
+ * @returns {Promise<void>} 无返回值
|
|
|
*/
|
|
|
async handleDetail(row) {
|
|
|
try {
|
|
@@ -254,7 +359,8 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 查看附件
|
|
|
- * @param {Object} row - 行数据
|
|
|
+ * @param {ClaimItem} row - 理赔行数据
|
|
|
+ * @returns {Promise<void>} 无返回值
|
|
|
*/
|
|
|
async handleAttachments(row) {
|
|
|
try {
|
|
@@ -272,7 +378,8 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 查看审核记录
|
|
|
- * @param {Object} row - 行数据
|
|
|
+ * @param {ClaimItem} row - 理赔行数据
|
|
|
+ * @returns {Promise<void>} 无返回值
|
|
|
*/
|
|
|
async handleAudit(row) {
|
|
|
try {
|
|
@@ -291,6 +398,7 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 新增审核记录
|
|
|
+ * @returns {void} 无返回值
|
|
|
*/
|
|
|
handleAddAudit() {
|
|
|
this.auditFormMode = 'add'
|
|
@@ -302,7 +410,8 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 编辑审核记录
|
|
|
- * @param {Object} row - 审核记录数据
|
|
|
+ * @param {ClaimAuditItem} row - 审核记录数据
|
|
|
+ * @returns {void} 无返回值
|
|
|
*/
|
|
|
handleEditAudit(row) {
|
|
|
this.auditFormMode = 'edit'
|
|
@@ -328,7 +437,8 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 删除审核记录
|
|
|
- * @param {Object} row - 审核记录数据
|
|
|
+ * @param {ClaimAuditItem} row - 审核记录数据
|
|
|
+ * @returns {Promise<void>} 无返回值
|
|
|
*/
|
|
|
async handleDeleteAudit(row) {
|
|
|
try {
|
|
@@ -351,6 +461,7 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 保存审核记录
|
|
|
+ * @returns {Promise<void>} 无返回值
|
|
|
*/
|
|
|
async handleSaveAudit() {
|
|
|
try {
|
|
@@ -384,6 +495,7 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 重置审核表单
|
|
|
+ * @returns {void} 无返回值
|
|
|
*/
|
|
|
resetAuditForm() {
|
|
|
this.auditForm = {
|
|
@@ -412,6 +524,7 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 刷新审核记录列表
|
|
|
+ * @returns {Promise<void>} 无返回值
|
|
|
*/
|
|
|
async refreshAuditList() {
|
|
|
if (!this.currentClaimRow) return
|
|
@@ -430,7 +543,8 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 下载文件
|
|
|
- * @param {Object} file - 文件信息
|
|
|
+ * @param {ClaimAttachmentItem} file - 文件信息
|
|
|
+ * @returns {void} 无返回值
|
|
|
*/
|
|
|
downloadFile(file) {
|
|
|
window.open(file.fileUrl)
|
|
@@ -462,8 +576,9 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 预览图片
|
|
|
- * @param {Object} file - 文件对象
|
|
|
- * @param {number} index - 索引
|
|
|
+ * @param {ClaimAttachmentItem} file - 文件对象
|
|
|
+ * @param {number} [index=0] - 索引
|
|
|
+ * @returns {void} 无返回值
|
|
|
*/
|
|
|
previewImage(file, index = 0) {
|
|
|
// 获取所有图片文件
|
|
@@ -476,7 +591,8 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 预览视频
|
|
|
- * @param {Object} file - 文件对象
|
|
|
+ * @param {ClaimAttachmentItem} file - 文件对象
|
|
|
+ * @returns {void} 无返回值
|
|
|
*/
|
|
|
previewVideo(file) {
|
|
|
this.previewVideoUrl = file.fileUrl
|
|
@@ -486,22 +602,28 @@ export default {
|
|
|
/**
|
|
|
* 处理图片加载错误
|
|
|
* @param {Event} event - 错误事件
|
|
|
+ * @returns {void} 无返回值
|
|
|
*/
|
|
|
handleImageError(event) {
|
|
|
event.target.src = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjRjVGNUY1Ii8+CjxwYXRoIGQ9Ik0yMCAyNkM5LjUgMjYgMSAxNy41IDEgN0MxIDMuNSA0IDEgNyAxSDMzQzM2IDEgMzkgMy41IDM5IDdDMzkgMTcuNSAzMC41IDI2IDIwIDI2WiIgZmlsbD0iI0NDQ0NDQyIvPgo8L3N2Zz4K'
|
|
|
},
|
|
|
|
|
|
// 添加公共方法引用
|
|
|
+ /** @type {(bytes: number) => string} 格式化文件大小 */
|
|
|
formatFileSize,
|
|
|
+ /** @type {(status: number) => string} 获取审核状态标签 */
|
|
|
getAuditStatusLabel,
|
|
|
+ /** @type {(status: number) => string} 获取审核状态类型 */
|
|
|
getAuditStatusType,
|
|
|
+ /** @type {(sourceType: number) => string} 获取理赔来源类型标签 */
|
|
|
getClaimSourceTypeLabel,
|
|
|
+ /** @type {(sourceType: number) => string} 获取理赔来源类型类型 */
|
|
|
getClaimSourceTypeType,
|
|
|
|
|
|
/**
|
|
|
* 获取审核结果类型
|
|
|
- * @param {number} result - 审核结果
|
|
|
- * @returns {string} 结果类型
|
|
|
+ * @param {number} result - 审核结果 1-通过 2-拒绝
|
|
|
+ * @returns {string} 结果类型 'success' | 'danger' | 'info'
|
|
|
*/
|
|
|
getAuditResultType(result) {
|
|
|
const typeMap = {
|
|
@@ -513,6 +635,7 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 关闭图片预览
|
|
|
+ * @returns {void} 无返回值
|
|
|
*/
|
|
|
closeImagePreview() {
|
|
|
this.imagePreviewVisible = false
|
|
@@ -523,6 +646,7 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 关闭视频预览
|
|
|
+ * @returns {void} 无返回值
|
|
|
*/
|
|
|
closeVideoPreview() {
|
|
|
this.videoPreviewVisible = false
|
|
@@ -532,6 +656,7 @@ export default {
|
|
|
/**
|
|
|
* 处理视频加载错误
|
|
|
* @param {Event} event - 错误事件
|
|
|
+ * @returns {void} 无返回值
|
|
|
*/
|
|
|
handleVideoError(event) {
|
|
|
console.error('视频加载失败:', event)
|
|
@@ -540,8 +665,8 @@ export default {
|
|
|
|
|
|
/**
|
|
|
* 获取审核结果文本
|
|
|
- * @param {number} result - 审核结果
|
|
|
- * @returns {string} 结果文本
|
|
|
+ * @param {number} result - 审核结果 1-通过 2-拒绝
|
|
|
+ * @returns {string} 结果文本 '通过' | '拒绝' | '未知'
|
|
|
*/
|
|
|
getAuditResultText(result) {
|
|
|
const textMap = {
|