| <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> |