瀏覽代碼

refactor(claim): 完善理赔组件类型定义并与实现对齐

yz 3 天之前
父節點
當前提交
7d109d6fae
共有 2 個文件被更改,包括 229 次插入30 次删除
  1. 36 8
      src/views/claim/claimMixin.js
  2. 193 22
      src/views/claim/types.d.ts

+ 36 - 8
src/views/claim/claimMixin.js

@@ -266,6 +266,7 @@ export default {
   methods: {
     /**
      * 获取列表数据
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {PageParams} page - 分页参数
      * @param {ClaimQueryParams} [params={}] - 查询参数
      * @returns {Promise<void>} 无返回值
@@ -287,6 +288,7 @@ export default {
 
     /**
      * 搜索
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {ClaimQueryParams} params - 搜索参数
      * @param {Function} done - 完成回调函数
      * @returns {void} 无返回值
@@ -299,6 +301,7 @@ export default {
 
     /**
      * 搜索重置
+     * @this {Vue & import('./types').ClaimComponent}
      * @returns {void} 无返回值
      */
     searchReset() {
@@ -308,6 +311,7 @@ export default {
 
     /**
      * 选择改变
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {ClaimItem[]} list - 选中的列表项
      * @returns {void} 无返回值
      */
@@ -317,6 +321,7 @@ export default {
 
     /**
      * 当前页改变
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {number} currentPage - 当前页码
      * @returns {void} 无返回值
      */
@@ -326,6 +331,7 @@ export default {
 
     /**
      * 页大小改变
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {number} pageSize - 页大小
      * @returns {void} 无返回值
      */
@@ -335,6 +341,7 @@ export default {
 
     /**
      * 刷新
+     * @this {Vue & import('./types').ClaimComponent}
      * @returns {void} 无返回值
      */
     refreshChange() {
@@ -343,6 +350,7 @@ export default {
 
     /**
      * 查看详情
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {ClaimItem} row - 理赔行数据
      * @returns {Promise<void>} 无返回值
      */
@@ -359,6 +367,7 @@ export default {
 
     /**
      * 查看附件
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {ClaimItem} row - 理赔行数据
      * @returns {Promise<void>} 无返回值
      */
@@ -378,6 +387,7 @@ export default {
 
     /**
      * 查看审核记录
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {ClaimItem} row - 理赔行数据
      * @returns {Promise<void>} 无返回值
      */
@@ -398,25 +408,27 @@ export default {
 
     /**
      * 新增审核记录
+     * @this {Vue & import('./types').ClaimComponent}
      * @returns {void} 无返回值
      */
     handleAddAudit() {
       this.auditFormMode = 'add'
       this.resetAuditForm()
-      this.auditForm.claimId = this.currentClaimRow.id
-      this.auditForm.claimNo = this.currentClaimRow.claimNo
+      this.auditForm.claimId = this.currentClaimRow?.id || ''
+      this.auditForm.claimNo = this.currentClaimRow?.claimNo || ''
       this.auditFormVisible = true
     },
 
     /**
      * 编辑审核记录
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {ClaimAuditItem} row - 审核记录数据
      * @returns {void} 无返回值
      */
     handleEditAudit(row) {
       this.auditFormMode = 'edit'
       this.auditForm = {
-        id: row.id,
+        id: row.id || null,
         claimId: row.claimId,
         claimNo: row.claimNo,
         auditResult: row.auditResult,
@@ -437,6 +449,7 @@ export default {
 
     /**
      * 删除审核记录
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {ClaimAuditItem} row - 审核记录数据
      * @returns {Promise<void>} 无返回值
      */
@@ -448,7 +461,7 @@ export default {
           type: 'warning'
         })
 
-        await removeClaimAudit(row.id)
+        await removeClaimAudit(String(row.id))
         this.$message.success('删除成功')
         this.refreshAuditList()
       } catch (error) {
@@ -465,15 +478,17 @@ export default {
      * @returns {Promise<void>} 无返回值
      */
     async handleSaveAudit() {
+      /** @type {Vue & import('./types').ClaimComponent} */
+      const $this = this
       try {
-        const valid = await this.$refs.auditFormRef.validate()
+        const valid = await $this.$refs.auditFormRef.validate()
         if (!valid) return
 
-        this.auditFormLoading = true
+        $this.auditFormLoading = true
 
         // 设置审核人ID(这里可以从用户信息中获取)
-        if (!this.auditForm.auditorId) {
-          this.auditForm.auditorId = 10001 // 默认审核人ID,实际应该从当前登录用户获取
+        if (!$this.auditForm.auditorId) {
+          $this.auditForm.auditorId = 10001 // 默认审核人ID,实际应该从当前登录用户获取
         }
 
         if (this.auditFormMode === 'add') {
@@ -498,6 +513,7 @@ export default {
 
     /**
      * 重置审核表单
+     * @this {Vue & import('./types').ClaimComponent}
      * @returns {void} 无返回值
      */
     resetAuditForm() {
@@ -527,6 +543,7 @@ export default {
 
     /**
      * 刷新审核记录列表
+     * @this {Vue & import('./types').ClaimComponent}
      * @returns {Promise<void>} 无返回值
      */
     async refreshAuditList() {
@@ -546,6 +563,7 @@ export default {
 
     /**
      * 下载文件
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {ClaimAttachmentItem} file - 文件信息
      * @returns {void} 无返回值
      */
@@ -555,6 +573,7 @@ export default {
 
     /**
      * 判断文件是否为图片
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {string} fileName - 文件名
      * @returns {boolean} 是否为图片
      */
@@ -567,6 +586,7 @@ export default {
 
     /**
      * 判断文件是否为视频
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {string} fileName - 文件名
      * @returns {boolean} 是否为视频
      */
@@ -579,6 +599,7 @@ export default {
 
     /**
      * 预览图片
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {ClaimAttachmentItem} file - 文件对象
      * @param {number} [index=0] - 索引
      * @returns {void} 无返回值
@@ -594,6 +615,7 @@ export default {
 
     /**
      * 预览视频
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {ClaimAttachmentItem} file - 文件对象
      * @returns {void} 无返回值
      */
@@ -604,6 +626,7 @@ export default {
 
     /**
      * 处理图片加载错误
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {Event} event - 错误事件
      * @returns {void} 无返回值
      */
@@ -625,6 +648,7 @@ export default {
 
     /**
      * 获取审核结果类型
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {number} result - 审核结果 1-通过 2-拒绝
      * @returns {string} 结果类型 'success' | 'danger' | 'info'
      */
@@ -638,6 +662,7 @@ export default {
 
     /**
      * 关闭图片预览
+     * @this {Vue & import('./types').ClaimComponent}
      * @returns {void} 无返回值
      */
     closeImagePreview() {
@@ -649,6 +674,7 @@ export default {
 
     /**
      * 关闭视频预览
+     * @this {Vue & import('./types').ClaimComponent}
      * @returns {void} 无返回值
      */
     closeVideoPreview() {
@@ -658,6 +684,7 @@ export default {
 
     /**
      * 处理视频加载错误
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {Event} event - 错误事件
      * @returns {void} 无返回值
      */
@@ -668,6 +695,7 @@ export default {
 
     /**
      * 获取审核结果文本
+     * @this {Vue & import('./types').ClaimComponent}
      * @param {number} result - 审核结果 1-通过 2-拒绝
      * @returns {string} 结果文本 '通过' | '拒绝' | '未知'
      */

+ 193 - 22
src/views/claim/types.d.ts

@@ -121,27 +121,198 @@ export interface ClaimComponentData {
 }
 
 /**
- * 理赔组件类型定义
+ * 理赔组件类型定义(与 src/views/claim/claimMixin.js 对齐)
  */
-export interface ClaimComponent extends ClaimComponentData {
-  // 组件数据
-  data(): ClaimComponentData;
-  // 查询理赔申请列表
-  getClaimList(): Promise<void>;
-  // 获取理赔申请详情
-  getClaimDetail(claimId: string | number): Promise<void>;
-  // 获取审核记录列表
-  getAuditList(claimId: string | number): Promise<void>;
-  // 获取附件列表
-  getAttachmentList(claimId: string | number): Promise<void>;
-  // 提交审核
-  submitAudit(auditData: ClaimAuditItem): Promise<void>;
-  // 删除理赔申请
-  deleteClaim(ids: string): Promise<void>;
-  // 重置查询表单
-  resetQueryForm(): void;
-  // 处理分页变化
-  handlePageChange(page: number): void;
-  // 处理页面大小变化
-  handleSizeChange(size: number): void;
+
+// 查询参数
+export interface ClaimQueryParams {
+  claimNo?: string;
+  claimSourceType?: number;
+  sourceCode?: string;
+  sourceName?: string;
+  consumerName?: string;
+  consumerPhone?: string;
+  tyreNo?: string;
+  auditStatus?: number;
+  startDate?: string;
+  endDate?: string;
+}
+
+// 列表项
+export interface ClaimItem {
+  id: string;
+  claimNo: string;
+  claimSourceType: number;
+  sourceId: number;
+  sourceCode: string;
+  sourceName: string;
+  consumerName: string;
+  consumerPhone: string;
+  tyreNo: string;
+  tyreSpecs: string;
+  purchaseDate: string;
+  mountDate: string;
+  runMileage: number;
+  claimReason: string;
+  claimAmount: string;
+  auditStatus: number;
+  submitTime: string;
+  createTime: string;
+  updateTime: string;
+}
+
+// 审核记录
+export interface ClaimAuditItem {
+  id?: string;
+  claimId: number;
+  claimNo: string;
+  auditResult: number;
+  auditAmount: number;
+  reasonDetail: string;
+  auditorId: number | null;
+  auditorName: string;
+  auditTime: string;
+  feedbackChannel?: string;
+  feedbackDesc?: string;
+  feedbackTime?: string;
+  appealStatus?: number;
+  appealResult?: string;
+  appealTime?: string;
+  createTime?: string;
+}
+
+// 附件信息
+export interface ClaimAttachmentItem {
+  id?: string;
+  claimId: number;
+  fileName: string;
+  fileUrl: string;
+  fileType: 'jpeg' | 'jpg' | 'png' | 'mp4' | 'pdf';
+  fileSize: number;
+  remark?: string;
+  createTime?: string;
+  updateTime?: string;
+}
+
+// 分页参数
+export interface PageParams {
+  pageSize: number;
+  currentPage: number;
+  total: number;
+}
+
+// 审核表单数据
+export interface AuditFormData {
+  id: string | null;
+  claimId: number | string | null;
+  claimNo: string;
+  auditResult: number | null; // 1-通过 2-拒绝
+  auditAmount: number;
+  reasonDetail: string;
+  auditorId: number | null;
+  auditorName: string;
+  auditTime: string;
+  feedbackChannel: string;
+  feedbackDesc: string;
+  feedbackTime: string;
+  appealStatus: number;
+  appealResult: string;
+  appealTime: string;
+}
+
+// 表格配置(精简结构,满足当前使用)
+export interface TableOptionColumn {
+  label: string;
+  prop: string;
+  type?: string;
+  dicData?: Array<{ label: string; value: number | string }>;
+  search?: boolean;
+  slot?: boolean;
+  format?: string;
+  valueFormat?: string;
+}
+
+export interface TableOption {
+  height: string | number;
+  calcHeight: number;
+  tip: boolean;
+  searchShow: boolean;
+  searchMenuSpan: number;
+  border: boolean;
+  index: boolean;
+  indexLabel: string;
+  selection: boolean;
+  viewBtn: boolean;
+  editBtn: boolean;
+  delBtn: boolean;
+  addBtn: boolean;
+  column: TableOptionColumn[];
+}
+
+// 组件类型(与 claimMixin 中 data/computed/methods 对齐)
+export interface ClaimComponent {
+  // data
+  form: Record<string, any>;
+  query: ClaimQueryParams;
+  loading: boolean;
+  page: PageParams;
+  selectionList: ClaimItem[];
+  detailVisible: boolean;
+  attachmentVisible: boolean;
+  auditVisible: boolean;
+  auditFormVisible: boolean;
+  claimDetail: ClaimItem | null;
+  attachmentList: ClaimAttachmentItem[];
+  auditList: ClaimAuditItem[];
+  attachmentLoading: boolean;
+  auditLoading: boolean;
+  auditFormLoading: boolean;
+  currentClaimRow: ClaimItem | null;
+  auditFormMode: 'add' | 'edit';
+  imagePreviewVisible: boolean;
+  previewImageUrl: string;
+  previewImageList: string[];
+  currentPreviewIndex: number;
+  videoPreviewVisible: boolean;
+  previewVideoUrl: string;
+  auditForm: AuditFormData;
+  auditFormRules: Record<string, any>;
+  option: TableOption;
+  data: ClaimItem[];
+
+  // 公共方法引用
+  formatFileSize(bytes: number): string;
+  getAuditStatusLabel(status: number): string;
+  getAuditStatusType(status: number): string;
+  getClaimSourceTypeLabel(sourceType: number): string;
+  getClaimSourceTypeType(sourceType: number): string;
+
+  // methods
+  onLoad(page: PageParams, params?: ClaimQueryParams): Promise<void>;
+  searchChange(params: ClaimQueryParams, done: () => void): void;
+  searchReset(): void;
+  selectionChange(list: ClaimItem[]): void;
+  currentChange(currentPage: number): void;
+  sizeChange(pageSize: number): void;
+  refreshChange(): void;
+  handleDetail(row: ClaimItem): Promise<void>;
+  handleAttachments(row: ClaimItem): Promise<void>;
+  handleAudit(row: ClaimItem): Promise<void>;
+  handleAddAudit(): void;
+  handleEditAudit(row: ClaimAuditItem): void;
+  handleDeleteAudit(row: ClaimAuditItem): Promise<void>;
+  handleSaveAudit(): Promise<void>;
+  resetAuditForm(): void;
+  refreshAuditList(): Promise<void>;
+  downloadFile(file: ClaimAttachmentItem): void;
+  isImageFile(fileName: string): boolean;
+  isVideoFile(fileName: string): boolean;
+  previewImage(file: ClaimAttachmentItem, index?: number): void;
+  previewVideo(file: ClaimAttachmentItem): void;
+  handleImageError(event: Event): void;
+  getAuditResultType(result: number): string;
+  closeImagePreview(): void;
+  closeVideoPreview(): void;
+  handleVideoError(event: Event): void;
+  getAuditResultText(result: number): string;
 }