From 089f6058826ac067061b6ed4958baff50f9bdac9 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期二, 29 七月 2025 17:40:17 +0800
Subject: [PATCH] fix: 新增生煎保(短期方案)

---
 src/views/Home/components/UploadInsurePersonDialog.vue |   43 +++
 src/views/Home/InsurancePayManage.vue                  |  132 ++++++++++++
 src/hooks/dic.ts                                       |    4 
 src/services/api/typings.d.ts                          |  163 +++++++++++++-
 src/views/Home/components/InsureOrderInfoView.vue      |   16 +
 vite.config.ts                                         |    4 
 src/constants/insuranceClaim.ts                        |   20 +
 src/views/Home/constants/index.ts                      |   44 ++++
 package.json                                           |    2 
 src/router/index.ts                                    |   15 +
 src/services/api/ParkBountyApply.ts                    |   30 ++
 src/views/Home/Home.vue                                |   73 +++++-
 src/services/api/InsuranceOrder.ts                     |   64 +++++
 13 files changed, 565 insertions(+), 45 deletions(-)

diff --git a/package.json b/package.json
index 2a0c634..4dd2a9b 100644
--- a/package.json
+++ b/package.json
@@ -6,6 +6,7 @@
     "dev": "cross-env vite",
     "dev:rz": "cross-env VITE_AppType=rz vite",
     "dev:jx": "cross-env VITE_AppType=jx vite",
+    "dev:tp": "cross-env VITE_AppType=tp vite",
     "dev:other": "cross-env VITE_AppType=other vite",
     "build": "cross-env NODE_OPTIONS=--max_old_space_size=16000 vite build",
     "build:rz": "cross-env NODE_OPTIONS=--max_old_space_size=16000 VITE_AppType=rz vite build --mode rz",
@@ -19,6 +20,7 @@
     "build:staging:yx": "cross-env vite build --mode stagingone",
     "build:staging:other": "cross-env VITE_AppType=other vite build --mode staging",
     "build:staging:jx": "cross-env VITE_AppType=jx vite build --mode staging",
+    "build:staging:tp": "cross-env VITE_AppType=tp vite build --mode staging",
     "build:staging:jenkins": "cross-env NODE_OPTIONS=--max_old_space_size=16000 vite build --mode staging",
     "preview": "vite preview",
     "prepare": "husky install",
diff --git a/src/constants/insuranceClaim.ts b/src/constants/insuranceClaim.ts
index 886c855..c45ee5c 100644
--- a/src/constants/insuranceClaim.ts
+++ b/src/constants/insuranceClaim.ts
@@ -82,14 +82,29 @@
   澧炲憳: '澧炲憳',
   鍑忓憳: '鍑忓憳',
 };
+
+export enum InsurancePeriodEnum {
+  '30D' = '30D',
+  '360D' = '360D',
+  '1-29D' = '1-29D',
+}
+
 export const insuranceTypeText = {
-  '30D': '鏈堜繚',
-  '360D': '骞翠繚',
+  [InsurancePeriodEnum['30D']]: '鏈堜繚',
+  [InsurancePeriodEnum['360D']]: '骞翠繚',
+  [InsurancePeriodEnum['1-29D']]: '鐭湡淇�',
+};
+
+export const insuranceTypeTextForFilter = {
+  [InsurancePeriodEnum['30D']]: '鏈堜繚',
+  [InsurancePeriodEnum['360D']]: '骞翠繚',
 };
 
 export enum InsurancePolicyAuditStatusEnum {
   /**椹冲洖 */
   Reject = -10,
+  /**寰呮彁浜� */
+  WaitAdd = 1,
   /**寰呭鏍� */
   WaitAudit = 10,
   /**寰呭鏍� 寮哄埗鍐嶅鍚庣殑鍐嶅鐘舵��*/
@@ -104,6 +119,7 @@
 
 export const InsurancePolicyAuditStatusEnumText = {
   [InsurancePolicyAuditStatusEnum.Reject]: '椹冲洖',
+  [InsurancePolicyAuditStatusEnum.WaitAdd]: '寰呮彁浜�',
   [InsurancePolicyAuditStatusEnum.WaitAudit]: '寰呭鏍�',
   [InsurancePolicyAuditStatusEnum.WaitReAudit]: '寰呭鏍�',
   [InsurancePolicyAuditStatusEnum.WaitFillAudit]: '寰呭鏍�',
diff --git a/src/hooks/dic.ts b/src/hooks/dic.ts
index e206017..fe72501 100644
--- a/src/hooks/dic.ts
+++ b/src/hooks/dic.ts
@@ -83,10 +83,14 @@
   function getInsureProductSchemeByCode(code: string) {
     return allInsureProductSchemeList.value.find((x) => x.code === code);
   }
+  function getInsureProductSchemeByIdNumber(idNumber: string) {
+    return allInsureProductSchemeList.value.find((x) => x.idNumber === idNumber);
+  }
 
   return {
     allInsureProductSchemeList,
     refetch,
     getInsureProductSchemeByCode,
+    getInsureProductSchemeByIdNumber,
   };
 }
diff --git a/src/router/index.ts b/src/router/index.ts
index f283d1a..3e88bd6 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -84,7 +84,7 @@
     },
     children: [
       {
-        path: 'home',
+        path: '/home',
         name: 'Home',
         hidden: false,
         component: () => import('@/views/Home/Home.vue'),
@@ -93,6 +93,17 @@
           title: '淇濆崟绠$悊',
           affix: true,
           // rootMenu: true,
+          icon: 'home',
+        },
+      },
+      AppType === 'tp' && {
+        path: '/InsurancePayManage',
+        name: 'InsurancePayManage',
+        hidden: false,
+        component: () => import('@/views/Home/InsurancePayManage.vue'),
+        meta: {
+          rank: 1002,
+          title: '浠樻绠$悊',
           icon: 'home',
         },
       },
@@ -156,7 +167,7 @@
           icon: 'home',
         },
       },
-    ],
+    ].filter(Boolean),
   },
 
   {
diff --git a/src/services/api/InsuranceOrder.ts b/src/services/api/InsuranceOrder.ts
index ad9fcb9..d1696f9 100644
--- a/src/services/api/InsuranceOrder.ts
+++ b/src/services/api/InsuranceOrder.ts
@@ -166,6 +166,23 @@
   });
 }
 
+/** 鑾峰彇鎶曚繚浜哄憳瀹℃牳璁板綍 GET /api/InsuranceOrder/GetInsuranceOrderAuditRecord/${param1} */
+export async function getInsuranceOrderAuditRecordId(
+  // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
+  params: API.APIgetInsuranceOrderAuditRecordIdParams,
+  options?: API.RequestConfig
+) {
+  const { insuranceOrderId: param0, id: param1, ...queryParams } = params;
+  return request<API.InsuranceOrderAuditRecordDto[]>(
+    `/api/InsuranceOrder/GetInsuranceOrderAuditRecord/${param1}`,
+    {
+      method: 'GET',
+      params: { ...queryParams },
+      ...(options || {}),
+    }
+  );
+}
+
 /** 鑾峰彇淇濆崟璇︽儏 GET /api/InsuranceOrder/GetInsuranceOrderDetail */
 export async function getInsuranceOrderDetail(
   // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
@@ -318,6 +335,24 @@
   });
 }
 
+/** 鑾峰彇浠樻绠$悊鍒楄〃 POST /api/InsuranceOrder/GetInsurancePolicyPayList */
+export async function getInsurancePolicyPayList(
+  body: API.GetInsurancePolicyPayListInput,
+  options?: API.RequestConfig
+) {
+  return request<API.GetInsurancePolicyPayListItemPageOutput>(
+    '/api/InsuranceOrder/GetInsurancePolicyPayList',
+    {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/json',
+      },
+      data: body,
+      ...(options || {}),
+    }
+  );
+}
+
 /** 鑾峰彇鐩栫珷鏂囦欢 GET /api/InsuranceOrder/GetInsurancePolicyStampFiles */
 export async function getInsurancePolicyStampFiles(
   // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
@@ -395,6 +430,18 @@
   });
 }
 
+/** 鑾峰彇琛ュ綍璁板綍 POST /api/InsuranceOrder/GetOperateRecord */
+export async function getOperateRecord(body: API.OperateRecordInput, options?: API.RequestConfig) {
+  return request<API.OperateRecordDtoPageOutput>('/api/InsuranceOrder/GetOperateRecord', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
 /** 鎶曚繚璇︽儏-瀵煎叆浜哄憳 POST /api/InsuranceOrder/ImportInsDetailStaffToList */
 export async function importInsDetailStaffToList(
   // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄)
@@ -440,12 +487,27 @@
   });
 }
 
+/** 鎻愪氦瀹℃牳 POST /api/InsuranceOrder/InsurancePolicyAddAudit */
+export async function insurancePolicyAddAudit(
+  body: API.InsurancePolicyAuditInput,
+  options?: API.RequestConfig
+) {
+  return request<number>('/api/InsuranceOrder/InsurancePolicyAddAudit', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
 /** 淇濆崟瀹℃牳 POST /api/InsuranceOrder/InsurancePolicyAudit */
 export async function insurancePolicyAudit(
   body: API.InsurancePolicyAuditInput,
   options?: API.RequestConfig
 ) {
-  return request<API.InsurancePolicyAuditOutput>('/api/InsuranceOrder/InsurancePolicyAudit', {
+  return request<number>('/api/InsuranceOrder/InsurancePolicyAudit', {
     method: 'POST',
     headers: {
       'Content-Type': 'application/json',
diff --git a/src/services/api/ParkBountyApply.ts b/src/services/api/ParkBountyApply.ts
index e391fd4..2f27c0b 100644
--- a/src/services/api/ParkBountyApply.ts
+++ b/src/services/api/ParkBountyApply.ts
@@ -2,6 +2,36 @@
 // @ts-ignore
 import { request } from '@/utils/request';
 
+/** 濂栧姳閲�-鍑鸿处 POST /api/ParkBountyApply/AuditParkBountyApplyTrade */
+export async function auditParkBountyApplyTrade(
+  body: API.AuditParkBountyTradeInput,
+  options?: API.RequestConfig
+) {
+  return request<number>('/api/ParkBountyApply/AuditParkBountyApplyTrade', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
+/** 濂栧姳閲�-鍑鸿处-璐㈠姟瀹℃壒 POST /api/ParkBountyApply/FinanceAuditParkBountyApplyTrade */
+export async function financeAuditParkBountyApplyTrade(
+  body: API.AuditParkBountyTradeInput,
+  options?: API.RequestConfig
+) {
+  return request<number>('/api/ParkBountyApply/FinanceAuditParkBountyApplyTrade', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
 /** 杩愯惀绔�-濂栧姳杩涘嚭璐﹁鎯� POST /api/ParkBountyApply/GetParkBountyTradeDetailList */
 export async function getParkBountyTradeDetailList(
   body: API.GetParkBountyTradeDetailByIdInput,
diff --git a/src/services/api/typings.d.ts b/src/services/api/typings.d.ts
index 145b5c3..2cc7939 100644
--- a/src/services/api/typings.d.ts
+++ b/src/services/api/typings.d.ts
@@ -266,6 +266,11 @@
     year?: number;
   }
 
+  interface APIgetInsuranceOrderAuditRecordIdParams {
+    insuranceOrderId: string;
+    id: string;
+  }
+
   interface APIgetInsuranceOrderDetailParams {
     id?: string;
   }
@@ -461,6 +466,16 @@
     values?: Record<string, any>;
   }
 
+  interface AuditParkBountyTradeInput {
+    /** 鍑鸿处璁板綍Id */
+    id?: string;
+    auditStatus?: EnumParkBountyTradeDetailAuditStatus;
+    /** 瀹℃牳澶囨敞 */
+    auditRemark?: string;
+    /** 瀹℃牳鍑瘉 */
+    payAuditFileUrl?: string;
+  }
+
   interface BaseAuthorizeDto {
     moduleType?: number;
     moduleId?: string;
@@ -603,7 +618,9 @@
     /** 淇濋 */
     insured: number;
     /** 淇濊垂 */
-    signPremium: number;
+    signPremium?: number;
+    /** 淇濊垂鎸夊ぉ璁¤垂 */
+    signPremiumByDay?: string;
   }
 
   interface CreateOrUpdateInsureProductSettingInput {
@@ -711,6 +728,8 @@
     properties?: Record<string, any>;
     configuration?: Record<string, any>;
   }
+
+  type EnumParkBountyTradeDetailAuditStatus = 10 | 20 | 30;
 
   interface ExportInsuranceStaffListInput {
     status?: InsuranceDetailStatusEnum;
@@ -892,6 +911,8 @@
   interface GetInsurancePageOutput {
     id?: string;
     userId?: string;
+    /** 浜т笟鍥尯id */
+    industrialParkId?: string;
     /** 鎶曚繚浜� */
     insurerName?: string;
     /** 琚繚闄╀汉 */
@@ -956,6 +977,44 @@
     data?: GetInsurancePageOutput[];
   }
 
+  interface GetInsurancePolicyPayListInput {
+    pageModel?: Pagination;
+    status?: InsurancePolicyPayStatusEnum;
+    /** 鍏抽敭瀛� */
+    keywords?: string;
+  }
+
+  interface GetInsurancePolicyPayListItem {
+    id?: string;
+    /** 鐢ㄦ埛Id */
+    userId?: string;
+    /** 浜т笟鍥尯id */
+    industrialParkId?: string;
+    /** 璁㈠崟鍙� */
+    channelOrderNo?: string;
+    /** 鏀粯鐭摼 */
+    payUrl?: string;
+    /** 淇濊垂閲戦 */
+    sumSignPremium?: number;
+    /** 鍒涘缓鏃ユ湡 */
+    creationTime?: string;
+    status?: InsurancePolicyPayStatusEnum;
+    /** 淇濆崟鍙� */
+    policyNo?: string;
+    /** 鐢靛瓙淇濆崟閾炬帴 */
+    policyUrl?: string;
+    /** 宸叉姇淇濅汉鏁� */
+    proposalCount?: number;
+    /** 瀹屾垚鏃堕棿 */
+    completionTime?: string;
+  }
+
+  interface GetInsurancePolicyPayListItemPageOutput {
+    pageModel?: Pagination;
+    objectData?: any;
+    data?: GetInsurancePolicyPayListItem[];
+  }
+
   interface GetInsuranceStaffListInput {
     pageModel?: Pagination;
     condition?: string;
@@ -980,13 +1039,15 @@
     age?: number;
     birthDay?: string;
     phone?: string;
-    claimCount?: number;
     creationTime?: string;
     /** 鎶曚繚鎵规鍙� */
     payOrder?: string;
     status?: InsuranceDetailStatusEnum;
+    /** 鎶曚繚鐘舵�� */
+    statusText?: string;
     /** 澶囨敞 */
     auditRemark?: string;
+    claimCount?: number;
   }
 
   interface GetInsuranceStaffPageTemplatePageOutput {
@@ -1016,9 +1077,19 @@
     /** 鍑鸿处缁撴潫鏃ユ湡 */
     transferTimeEnd?: string;
     enterpriseId?: string;
+    auditStatus?: EnumParkBountyTradeDetailAuditStatus;
   }
 
   interface GetParkBountyTradeDetailOutput {
+    enterpriseId?: string;
+    /** 璐﹀彿 */
+    userName?: string;
+    /** 浼佷笟鍚嶇О */
+    enterpriseName?: string;
+    /** 鐢佃瘽 */
+    contactPhone?: string;
+    /** 绀句細缁熶竴淇$敤浠g爜 */
+    societyCreditCode?: string;
     id?: string;
     /** 鏈�杩戝嚭璐﹂噾棰� */
     tradeAmount?: number;
@@ -1032,6 +1103,13 @@
     /** 濂栧姳閲戜綑棰� */
     remianAmount?: number;
     financeType?: FinanceTypeEnum;
+    auditStatus?: EnumParkBountyTradeDetailAuditStatus;
+    /** 瀹℃牳澶囨敞 */
+    auditRemark?: string;
+    /** 瀹℃牳鏃堕棿 */
+    auditTime?: string;
+    /** 瀹℃牳鍑瘉 */
+    payAuditFileUrl?: string;
   }
 
   interface GetParkBountyTradeDetailOutputPageOutput {
@@ -1334,10 +1412,12 @@
     url?: string;
     /** 淇濋櫓浜у搧IdNumber */
     productIdNumber?: string;
-    /** 淇濋櫓浜у搧鏂规Id */
+    /** 淇濋櫓鏂规 */
     productSchemeIdNumber?: string;
     /** 淇濆崟鐢熸晥鏃堕棿 */
     effectStartTime?: string;
+    /** 淇濆崟鎴鏃堕棿 */
+    effectEndTime?: string;
   }
 
   interface ImportInsStaffToListOutput {
@@ -1477,6 +1557,21 @@
 
   type InsuranceDetailStatusEnum = 10 | 12 | 13 | 14 | 20 | 30;
 
+  interface InsuranceOrderAuditRecordDto {
+    /** 鍒嗘壒璁㈠崟鍙� */
+    channelOrderNo?: string;
+    /** 鎿嶄綔 */
+    scene?: string;
+    /** 瀹℃牳澶囨敞 */
+    auditRemark?: string;
+    /** 鎿嶄綔鏃堕棿 */
+    creationTime?: string;
+    /** 鎿嶄綔浜� */
+    creatorId?: string;
+    /** 鎿嶄綔浜� */
+    creator?: string;
+  }
+
   interface InsuranceOrderListOutput {
     id?: string;
     /** 娓犻亾 */
@@ -1573,18 +1668,7 @@
     returnUrl?: string;
   }
 
-  interface InsurancePolicyAuditOutput {
-    /** 娑堟伅 */
-    messages?: string[];
-    /** 鎬绘姇淇濅汉鏁� */
-    totalCount?: number;
-    /** 鎶曚繚鎴愬姛 */
-    successCount?: number;
-    /** 鎶曚繚澶辫触 */
-    failCount?: number;
-  }
-
-  type InsurancePolicyAuditStatusEnum = 10 | 11 | 12 | 15 | 20 | -10;
+  type InsurancePolicyAuditStatusEnum = 1 | 10 | 11 | 12 | 15 | 20 | -10;
 
   type InsurancePolicyListPayStatusEnum = 1 | 2;
 
@@ -1731,6 +1815,8 @@
     insured?: number;
     /** 淇濊垂 */
     signPremium?: number;
+    /** 淇濊垂鎸夊ぉ璁¤垂 */
+    signPremiumByDay?: string;
   }
 
   interface InsureProductSchemeDtoPageOutput {
@@ -1754,6 +1840,8 @@
     creationTime?: string;
     /** 鎶曚繚浜烘暟涓婇檺 */
     maxCount?: number;
+    /** 鏄惁璧扮嚎涓婃祦绋� */
+    online?: boolean;
   }
 
   interface InsureProductSettingDtoPageOutput {
@@ -1900,6 +1988,33 @@
   interface ObjectExtensionsDto {
     modules?: Record<string, any>;
     enums?: Record<string, any>;
+  }
+
+  interface OperateRecordDto {
+    /** 鎿嶄綔 */
+    operate?: string;
+    /** 鎿嶄綔鍐呭 */
+    content?: string;
+    /** 鎿嶄綔鏃堕棿 */
+    creationTime?: string;
+    /** 鎿嶄綔浜� */
+    creatorId?: string;
+    /** 鎿嶄綔浜� */
+    creator?: string;
+  }
+
+  interface OperateRecordDtoPageOutput {
+    pageModel?: Pagination;
+    objectData?: any;
+    data?: OperateRecordDto[];
+  }
+
+  interface OperateRecordInput {
+    pageModel?: Pagination;
+    /** 鍦烘櫙 */
+    scene?: string;
+    /** 鐩爣Id */
+    targetId?: string;
   }
 
   interface OrderInput {
@@ -2487,6 +2602,24 @@
     open?: boolean;
     /** 818鐢ㄦ埛Id */
     humanResourcesServiceUserId?: string;
+    /** 鐢ㄦ埛绔疘d */
+    clientId?: string;
+    /** 瑙掕壊 */
+    roleNames?: string[];
+    /** 鏄惁鐞嗚禂鎻愰啋 */
+    sendClaimMessage?: boolean;
+    /** 鏄惁淇濆崟鍒版湡鎻愰啋 */
+    sendBillExpireMessage?: boolean;
+    /** 鏄惁鐭俊鎻愰啋 */
+    isSendMessage?: boolean;
+    /** 鏄惁浜哄憳鍙樻洿鎻愰啋 */
+    staffChangeMessage?: boolean;
+    /** 鏄惁鎵规敼鎻愰啋 */
+    batchUpdateMessage?: boolean;
+    /** 浜т笟鍥尯id */
+    industrialParkId?: string;
+    /** 鍥尯Ids */
+    industrialParkIds?: string[];
     /** 鍚嶇О */
     name?: string;
     /** 鐧诲綍鐢ㄦ埛鍚� */
diff --git a/src/views/Home/Home.vue b/src/views/Home/Home.vue
index d0dce4a..822087a 100644
--- a/src/views/Home/Home.vue
+++ b/src/views/Home/Home.vue
@@ -18,7 +18,7 @@
           <QueryFilterItem>
             <FieldRadio
               v-model="extraParamState.insurancePeriod"
-              :value-enum="insuranceTypeText"
+              :value-enum="insuranceTypeTextForFilter"
               buttonStyle
               showAllBtn
               @change="getList()"
@@ -160,11 +160,13 @@
   InsurancePolicyListPayStatusEnum,
   InsurancePolicyListPayStatusEnumText,
   InsuranceOccupationTypeTempPath,
+  InsurancePeriodEnum,
+  insuranceTypeTextForFilter,
 } from '@/constants';
 import dayjs from 'dayjs';
 import _ from 'lodash';
 import InsureInstructionsDialog from './components/InsureInstructionsDialog.vue';
-import { useUserInsureProductSetting } from '@/hooks';
+import { useInsureProductSchemeAllList, useUserInsureProductSetting } from '@/hooks';
 // import { Recorder } from '@/utils/record';
 
 defineOptions({
@@ -219,19 +221,19 @@
       hide: (row: API.GetInsurancePageOutput) => row.productOnline || !row.insureBillUrl,
     },
   },
-  {
-    data: {
-      enCode: 'payBtn',
-      name: '鏀粯',
-    },
-    emits: {
-      onClick: (role) => handlePay(role),
-    },
-    extraProps: {
-      hide: (row: API.GetInsurancePageOutput) =>
-        row.payStatus != InsurancePolicyListPayStatusEnum.WaitPay,
-    },
-  },
+  // {
+  //   data: {
+  //     enCode: 'payBtn',
+  //     name: '鏀粯',
+  //   },
+  //   emits: {
+  //     onClick: (role) => handlePay(role),
+  //   },
+  //   extraProps: {
+  //     hide: (row: API.GetInsurancePageOutput) =>
+  //       row.payStatus != InsurancePolicyListPayStatusEnum.WaitPay,
+  //   },
+  // },
   {
     data: {
       enCode: 'stampFilesBtn',
@@ -266,6 +268,19 @@
   //     onClick: (role) => handleStandarEndo(role),
   //   },
   // },
+  {
+    data: {
+      enCode: 'submitAuditBtn',
+      name: '鎻愪氦瀹℃牳',
+    },
+    emits: {
+      onClick: (role) => handleSubmitAuditBtn(role),
+    },
+    extraProps: {
+      hide: (row: API.GetInsurancePageOutput) =>
+        row.auditStatus != InsurancePolicyAuditStatusEnum.WaitAdd,
+    },
+  },
 ]).filter(Boolean);
 
 const BaseState = {
@@ -361,6 +376,7 @@
     productIdNumber: '',
     productSchemeIdNumber: '',
     effectStartTime: dayjs().add(1, 'day').format('YYYY-MM-DD'),
+    effectEndTime: '',
   },
   closeAfterConfirm: false,
 });
@@ -389,6 +405,12 @@
   } catch (error) {}
 }
 
+const { isSjbAccount, getInsureProductIdByIdNumber } = useUserInsureProductSetting();
+
+const { getInsureProductSchemeByIdNumber } = useInsureProductSchemeAllList({
+  insureProductId: computed(() => getInsureProductIdByIdNumber(editForm.productIdNumber)),
+});
+
 async function importInsStaffToList() {
   try {
     let params: API.ImportInsStaffToListFrontInput = {
@@ -398,6 +420,12 @@
       productSchemeIdNumber: editForm.productSchemeIdNumber,
       effectStartTime: editForm.effectStartTime,
     };
+    const currentInsureProductScheme = getInsureProductSchemeByIdNumber(
+      editForm.productSchemeIdNumber
+    );
+    if (currentInsureProductScheme?.period === InsurancePeriodEnum['1-29D']) {
+      params.effectEndTime = editForm.effectEndTime;
+    }
     let res = await insuranceOrderServices.importInsStaffToList(params, {
       timeout: 60 * 1000 * 10,
       customErrorHandler(error) {
@@ -452,8 +480,6 @@
 const { dialogProps: dialogInstructionsProps, dialogState: dialogInstructionsState } = useDialog({
   onConfirm: handleUpload,
 });
-
-const { isSjbAccount } = useUserInsureProductSetting();
 
 function handleOpenInstructions() {
   if (isSjbAccount.value) {
@@ -650,4 +676,17 @@
     });
   } catch (error) {}
 }
+
+async function handleSubmitAuditBtn(row: API.GetInsurancePageOutput) {
+  try {
+    let params: API.InsurancePolicyAuditInput = {
+      insurancePolicyId: row.id,
+    };
+    let res = await insuranceOrderServices.insurancePolicyAddAudit(params);
+    if (res) {
+      Message.successMessage('涓婁紶鎴愬姛');
+      getList(paginationState.pageIndex);
+    }
+  } catch (error) {}
+}
 </script>
diff --git a/src/views/Home/InsurancePayManage.vue b/src/views/Home/InsurancePayManage.vue
new file mode 100644
index 0000000..8a45765
--- /dev/null
+++ b/src/views/Home/InsurancePayManage.vue
@@ -0,0 +1,132 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableQueryFilterBar @on-reset="reset">
+        <template #query>
+          <QueryFilterItem>
+            <FieldRadio
+              v-model="extraParamState.status"
+              :value-enum="InsurancePolicyListPayStatusEnumText"
+              buttonStyle
+              showAllBtn
+              @change="getList()"
+            />
+          </QueryFilterItem>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.condition"
+              style="width: 260px"
+              placeholder="璁㈠崟鍙�/淇濆崟鍙�"
+              @on-click-search="getList"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+        </template>
+      </ProTableQueryFilterBar>
+      <ProTableV2
+        v-bind="proTableProps"
+        :columns="InsurePayManageColumns"
+        :operationBtns="operationBtns"
+      >
+      </ProTableV2>
+    </AppContainer>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  OperationBtnType,
+  ProTableV2,
+  LoadingLayout,
+  AppContainer,
+  useTable,
+  ProTableV2Props,
+  defineOperationBtns,
+  QueryFilterItem,
+  FieldRadio,
+  SearchInput,
+  ProTableQueryFilterBar,
+} from '@bole-core/components';
+import * as insuranceOrderServices from '@/services/api/InsuranceOrder';
+import {
+  InsurancePolicyPayStatusEnumText,
+  InsurancePolicyPayStatusEnum,
+  InsurancePolicyListPayStatusEnum,
+  InsurancePolicyListPayStatusEnumText,
+} from '@/constants';
+import { useQuery } from '@tanstack/vue-query';
+import { InsurePayManageColumns } from './constants';
+import { OrderInputType } from '@bole-core/core';
+
+defineOptions({
+  name: 'InsurancePayManage',
+});
+
+const operationBtns = defineOperationBtns([
+  {
+    data: {
+      enCode: 'payBtn',
+      name: '鏀粯',
+    },
+    emits: { onClick: (role) => handlePay(role) },
+    extraProps: {
+      hide: (row: API.GetInsurancePolicyPayListItem) =>
+        row.status !== InsurancePolicyPayStatusEnum.WaitPay,
+    },
+  },
+]);
+
+const BaseState = {
+  loading: true,
+};
+
+const state = reactive({ ...BaseState });
+
+onMounted(async () => {
+  await getList();
+  state.loading = false;
+});
+
+const {
+  getDataSource: getList,
+  proTableProps,
+  paginationState,
+  extraParamState,
+  reset,
+} = useTable(
+  async ({ pageIndex, pageSize }, extraParamState) => {
+    try {
+      let params: API.GetInsurancePolicyPayListInput = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          orderInput: extraParamState.orderInput,
+        },
+        status: extraParamState.status,
+        keywords: extraParamState.condition,
+      };
+      let res = await insuranceOrderServices.getInsurancePolicyPayList(params, {
+        showLoading: !state.loading,
+      });
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      orderInput: [{ property: 'id', order: OrderInputType.Desc }],
+      condition: '',
+      status: '' as any as InsurancePolicyListPayStatusEnum,
+    },
+    columnsRenderProps: {
+      sumSignPremium: { type: 'money' },
+      status: { type: 'enum', valueEnum: InsurancePolicyListPayStatusEnumText },
+      creationTime: { type: 'date' },
+      completionTime: { type: 'date' },
+    },
+  }
+);
+
+function handlePay(row: API.GetInsurancePolicyPayListItem) {
+  window.open(row.payUrl, '_blank');
+}
+</script>
diff --git a/src/views/Home/components/InsureOrderInfoView.vue b/src/views/Home/components/InsureOrderInfoView.vue
index ab32e98..0bcf47a 100644
--- a/src/views/Home/components/InsureOrderInfoView.vue
+++ b/src/views/Home/components/InsureOrderInfoView.vue
@@ -327,10 +327,16 @@
       onClick: (role) => handleChangeInfo(role),
     },
     extraProps: {
-      hide: (row: API.GetInsuranceStaffPageTemplate) =>
-        detail.value?.productOnline ||
-        detail.value?.status !== InsurancePolicyStatusEnum.WaitEffect ||
-        detail.value?.auditStatus === InsurancePolicyAuditStatusEnum.Pass,
+      hide: (row: API.GetInsuranceStaffPageTemplate) => {
+        if (detail.value?.productOnline) {
+          return detail.value?.auditStatus !== InsurancePolicyAuditStatusEnum.WaitAdd;
+        } else {
+          return (
+            detail.value?.status !== InsurancePolicyStatusEnum.WaitEffect ||
+            detail.value?.auditStatus === InsurancePolicyAuditStatusEnum.Pass
+          );
+        }
+      },
     },
   },
   {
@@ -589,6 +595,7 @@
     productIdNumber: detail.value.productIdNumber,
     productSchemeIdNumber: getInsureProductSchemeByCode(detail.value.productSchemeCode)?.idNumber,
     effectStartTime: detail.value.effectStartTime,
+    effectEndTime: detail.value.effectEndTime,
   });
 }
 
@@ -605,6 +612,7 @@
     productIdNumber: '',
     productSchemeIdNumber: '',
     effectStartTime: dayjs().add(1, 'day').format('YYYY-MM-DD'),
+    effectEndTime: '',
   },
   closeAfterConfirm: false,
 });
diff --git a/src/views/Home/components/UploadInsurePersonDialog.vue b/src/views/Home/components/UploadInsurePersonDialog.vue
index 0bc713f..9640f65 100644
--- a/src/views/Home/components/UploadInsurePersonDialog.vue
+++ b/src/views/Home/components/UploadInsurePersonDialog.vue
@@ -64,6 +64,22 @@
           placeholder="璇烽�夋嫨璧蜂繚鏃ユ湡"
           :disabled-date="disabledStartDate"
           :disabled="isSupply"
+          @change="handleStartDateChange"
+        ></ProFormDatePicker>
+      </ProFormItemV2>
+      <ProFormItemV2
+        label="鎴鏃ユ湡:"
+        prop="effectEndTime"
+        :check-rules="[{ message: '璇烽�夋嫨鎴鏃ユ湡' }]"
+        v-if="currentInsureProductScheme?.period === InsurancePeriodEnum['1-29D']"
+      >
+        <ProFormDatePicker
+          v-model="form.effectEndTime"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="璇烽�夋嫨鎴鏃ユ湡"
+          :disabled-date="disabledEndDate"
+          :disabled="isSupply"
         ></ProFormDatePicker>
       </ProFormItemV2>
       <ProFormItemV2
@@ -108,6 +124,7 @@
 import dayjs from 'dayjs';
 import { FormInstance } from 'element-plus';
 import _ from 'lodash';
+import { InsurancePeriodEnum } from '@/constants';
 
 defineOptions({
   name: 'UploadInsurePersonDialog',
@@ -121,6 +138,7 @@
     productIdNumber: string;
     productSchemeIdNumber: string;
     effectStartTime: string;
+    effectEndTime: string;
   };
   //鏄惁鏄ˉ鎻�
   isSupply?: boolean;
@@ -140,9 +158,14 @@
 
 const { allUserInsureProductSettingList, getInsureProductIdByIdNumber } =
   useUserInsureProductSetting();
-const { allInsureProductSchemeList } = useInsureProductSchemeAllList({
-  insureProductId: computed(() => getInsureProductIdByIdNumber(props.form.productIdNumber)),
-});
+const { allInsureProductSchemeList, getInsureProductSchemeByIdNumber } =
+  useInsureProductSchemeAllList({
+    insureProductId: computed(() => getInsureProductIdByIdNumber(props.form.productIdNumber)),
+  });
+
+const currentInsureProductScheme = computed(() =>
+  getInsureProductSchemeByIdNumber(props.form.productSchemeIdNumber)
+);
 
 function handleProductChange() {
   innerForm.value.productSchemeIdNumber = '';
@@ -152,6 +175,20 @@
   return dayjs(time).isBefore(dayjs()) || dayjs(time).isAfter(dayjs().add(60, 'day'));
 };
 
+const disabledEndDate = (time: Date) => {
+  const startDate = dayjs(props.form.effectStartTime);
+  return (
+    dayjs(time).isBefore(startDate) ||
+    dayjs(time).isAfter(dayjs(props.form.effectStartTime).add(28, 'day'))
+  );
+};
+
+function handleStartDateChange() {
+  if (disabledEndDate(props.form.effectEndTime as any)) {
+    innerForm.value.effectEndTime = '';
+  }
+}
+
 const innerVisible = computed({
   get() {
     return props.modelValue;
diff --git a/src/views/Home/constants/index.ts b/src/views/Home/constants/index.ts
index 9582a45..d46d36a 100644
--- a/src/views/Home/constants/index.ts
+++ b/src/views/Home/constants/index.ts
@@ -62,6 +62,12 @@
     width: 160,
   },
   {
+    id: '10-1',
+    enCode: 'insureEffectingCount',
+    name: '鐢熸晥浜烘暟',
+    width: 160,
+  },
+  {
     id: '11',
     enCode: 'sumInsured',
     name: '鎬讳繚棰�(鍏�)',
@@ -168,3 +174,41 @@
     name: '鏀粯鐘舵��',
   },
 ]);
+
+export const InsurePayManageColumns = defineColumns([
+  {
+    id: '1',
+    enCode: 'channelOrderNo',
+    name: '璁㈠崟鍙�',
+  },
+  {
+    id: '2',
+    enCode: 'proposalNo',
+    name: '鎶曚繚鍗曞彿',
+  },
+  {
+    id: '2-1',
+    enCode: 'proposalCount',
+    name: '鎶曚繚浜烘暟',
+  },
+  {
+    id: '3',
+    enCode: 'sumSignPremium',
+    name: '淇濊垂閲戦',
+  },
+  {
+    id: '4',
+    enCode: 'creationTime',
+    name: '鍒涘缓鏃ユ湡',
+  },
+  {
+    id: '5',
+    enCode: 'status',
+    name: '鏀粯鐘舵��',
+  },
+  {
+    id: '6',
+    enCode: 'completionTime',
+    name: '鏀粯鏃ユ湡',
+  },
+]);
diff --git a/vite.config.ts b/vite.config.ts
index f623cc6..f2a9eca 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -97,7 +97,9 @@
       __INTLIFY_PROD_DEVTOOLS__: false,
     },
     build: {
-      outDir: `dist/dist-jybfront-${VITE_AppType}-${mode}-${dayjs().format('YYYYMMDD')}`,
+      outDir: `dist/${dayjs().format(
+        'YYYY-MM-DD'
+      )}/dist-jybfront-${VITE_AppType}-${mode}-${dayjs().format('YYYYMMDD')}`,
     },
     optimizeDeps: {
       include: [

--
Gitblit v1.9.1