<template> 
 | 
  <LoadingLayout :loading="state.loading"> 
 | 
    <AppContainer> 
 | 
      <ProTableQueryFilterBar @on-reset="reset"> 
 | 
        <template #query> 
 | 
          <QueryFilterItem> 
 | 
            <FieldDatePicker 
 | 
              v-model="extraParamState.creationDate" 
 | 
              type="daterange" 
 | 
              range-separator="~" 
 | 
              start-placeholder="起始日期" 
 | 
              end-placeholder="结束日期" 
 | 
              clearable 
 | 
              @change="getList()" 
 | 
              tooltipContent="导入日期" 
 | 
            ></FieldDatePicker> 
 | 
          </QueryFilterItem> 
 | 
          <QueryFilterItem> 
 | 
            <FieldRadio 
 | 
              v-model="extraParamState.onJobFlag" 
 | 
              :value-enum="OnJobFlagEnumText" 
 | 
              buttonStyle 
 | 
              showAllBtn 
 | 
              @change="getList()" 
 | 
            /> 
 | 
          </QueryFilterItem> 
 | 
          <QueryFilterItem> 
 | 
            <FieldRadio 
 | 
              v-model="extraParamState.insuranceType" 
 | 
              :value-enum="insuranceTypeText" 
 | 
              buttonStyle 
 | 
              showAllBtn 
 | 
              @change="getList()" 
 | 
            /> 
 | 
          </QueryFilterItem> 
 | 
          <QueryFilterItem> 
 | 
            <SearchInput 
 | 
              v-model="extraParamState.keyword" 
 | 
              style="width: 260px" 
 | 
              placeholder="单位/保单号/参保机构" 
 | 
              @on-click-search="getList" 
 | 
            > 
 | 
            </SearchInput> 
 | 
          </QueryFilterItem> 
 | 
        </template> 
 | 
        <template #btn> 
 | 
          <el-button 
 | 
            @click="handleDownload()" 
 | 
            icon="Download" 
 | 
            type="primary" 
 | 
            style="margin-right: 10px" 
 | 
            link 
 | 
            >模板下载</el-button 
 | 
          > 
 | 
  
 | 
          <el-button @click="handleUpload()" icon="Upload" type="primary" style="margin-right: 10px" 
 | 
            >导入</el-button 
 | 
          > 
 | 
  
 | 
          <el-button @click="downloadInsureOrder()" type="primary" icon="Download" link 
 | 
            >导出保单列表</el-button 
 | 
          > 
 | 
          <el-button @click="downloadInsurePerson()" icon="Download" type="primary" link 
 | 
            >导出在保人员</el-button 
 | 
          > 
 | 
        </template> 
 | 
      </ProTableQueryFilterBar> 
 | 
      <ProTableV2 
 | 
        v-bind="proTableProps" 
 | 
        :columns="columns" 
 | 
        :operationBtns="operationBtns" 
 | 
        ref="proTable" 
 | 
        :table-props="{ 
 | 
          rowStyle: handleRowStyle, 
 | 
          rowKey: 'id', 
 | 
        }" 
 | 
      > 
 | 
      </ProTableV2> 
 | 
    </AppContainer> 
 | 
    <UploadInsurePersonDialog v-bind="dialogProps" /> 
 | 
    <UploadStampFileDialog v-bind="dialogStampFileProps" /> 
 | 
  </LoadingLayout> 
 | 
</template> 
 | 
  
 | 
<script setup lang="ts"> 
 | 
import { 
 | 
  ProTableQueryFilterBar, 
 | 
  ProTableV2, 
 | 
  LoadingLayout, 
 | 
  AppContainer, 
 | 
  QueryFilterItem, 
 | 
  useTable, 
 | 
  useFormDialog, 
 | 
  FieldDatePicker, 
 | 
  BlFileUpload, 
 | 
  defineOperationBtns, 
 | 
  UploadUserFile, 
 | 
  XLSXUtils, 
 | 
  SearchInput, 
 | 
  FieldRadio, 
 | 
} from '@bole-core/components'; 
 | 
import * as insuranceOrderServices from '@/services/api/InsuranceOrder'; 
 | 
import { Message, OrderInputType, downloadFileByUrl } from '@bole-core/core'; 
 | 
import { columns } from './constants'; 
 | 
import UploadInsurePersonDialog from './components/UploadInsurePersonDialog.vue'; 
 | 
import UploadStampFileDialog from './components/UploadStampFileDialog.vue'; 
 | 
import { toThousand, format, downloadFile, setOSSLink } from '@/utils'; 
 | 
import { omit } from 'lodash'; 
 | 
import { ModelValueType } from 'element-plus'; 
 | 
import { useQueryClient } from '@tanstack/vue-query'; 
 | 
import { 
 | 
  InsuranceOrderTempPath, 
 | 
  JYBInsuranceOrderTempPath, 
 | 
  OnJobFlagEnumText, 
 | 
  insuranceTypeText, 
 | 
} from '@/constants'; 
 | 
import dayjs from 'dayjs'; 
 | 
import _ from 'lodash'; 
 | 
  
 | 
defineOptions({ 
 | 
  name: 'Home', 
 | 
}); 
 | 
  
 | 
const operationBtns = defineOperationBtns([ 
 | 
  { 
 | 
    data: { 
 | 
      enCode: 'downloadBtn', 
 | 
      name: '保单下载', 
 | 
    }, 
 | 
    emits: { 
 | 
      onClick: (role) => handleDownloadOrderNo(role), 
 | 
    }, 
 | 
    extraProps: { 
 | 
      hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile, 
 | 
    }, 
 | 
  }, 
 | 
  { 
 | 
    data: { 
 | 
      enCode: 'batchBtn', 
 | 
      name: '批改', 
 | 
    }, 
 | 
    emits: { 
 | 
      onClick: (role) => handleBatch(role), 
 | 
    }, 
 | 
    // extraProps: { 
 | 
    //   hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile, 
 | 
    // }, 
 | 
  }, 
 | 
  { 
 | 
    data: { 
 | 
      enCode: 'uploadStampFileBtn', 
 | 
      name: '上传盖章文件', 
 | 
    }, 
 | 
    emits: { 
 | 
      onClick: (role) => handleUploadStampFile(role), 
 | 
    }, 
 | 
    extraProps: { 
 | 
      hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile, 
 | 
    }, 
 | 
  }, 
 | 
  { 
 | 
    data: { 
 | 
      enCode: 'detailBtn', 
 | 
      name: '详情', 
 | 
    }, 
 | 
    emits: { 
 | 
      onClick: (role) => handleDetail(role), 
 | 
    }, 
 | 
  }, 
 | 
]).filter(Boolean); 
 | 
  
 | 
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 = createParams(pageIndex, pageSize); 
 | 
      let res = await insuranceOrderServices.getInsuranceOrderPage(params, { 
 | 
        showLoading: !state.loading, 
 | 
      }); 
 | 
      return res; 
 | 
    } catch (error) {} 
 | 
  }, 
 | 
  { 
 | 
    defaultExtraParams: { 
 | 
      orderInput: [{ property: 'createTime', order: OrderInputType.Desc }], 
 | 
      creationDate: [] as unknown as ModelValueType, 
 | 
      keyword: '', 
 | 
      onJobFlag: '', 
 | 
      insuranceType: '', 
 | 
    }, 
 | 
    columnsRenderProps: { 
 | 
      createTime: { 
 | 
        type: 'date', 
 | 
        format: 'YYYY/MM/DD', 
 | 
      }, 
 | 
      insuranceBeginTime: { 
 | 
        type: 'date', 
 | 
        format: 'YYYY/MM/DD', 
 | 
      }, 
 | 
      insuranceEndTime: { 
 | 
        type: 'date', 
 | 
        format: 'YYYY/MM/DD', 
 | 
      }, 
 | 
    }, 
 | 
    showSummary: true, 
 | 
    summaryPropertys: [ 
 | 
      { 
 | 
        property: 'table-operation', 
 | 
        valueKey: 'totalAmount', 
 | 
        formatter: (v) => `¥${toThousand(v)}`, 
 | 
      }, 
 | 
    ], 
 | 
  } 
 | 
); 
 | 
  
 | 
function createParams(pageIndex: number, pageSize: number) { 
 | 
  let params: API.QueryInsuranceOrderPageInput = { 
 | 
    pageModel: { 
 | 
      rows: pageSize, 
 | 
      page: pageIndex, 
 | 
      orderInput: extraParamState.orderInput, 
 | 
    }, 
 | 
    beginCreationTime: format(extraParamState.creationDate?.[0] ?? '', 'YYYY-MM-DD 00:00:00'), 
 | 
    endCreationTime: format(extraParamState.creationDate?.[1] ?? '', 'YYYY-MM-DD 23:59:59'), 
 | 
    condition: extraParamState.keyword, 
 | 
    onJobFlag: extraParamState.onJobFlag, 
 | 
    insuranceType: extraParamState.insuranceType, 
 | 
  }; 
 | 
  return params; 
 | 
} 
 | 
  
 | 
const { dialogProps, handleAdd, editForm } = useFormDialog({ 
 | 
  onConfirm: uploadInsurePerson, 
 | 
  defaultFormParams: { 
 | 
    orderNo: '', 
 | 
    url: [] as UploadUserFile[], 
 | 
  }, 
 | 
}); 
 | 
  
 | 
function handleUpload() { 
 | 
  handleAdd({ 
 | 
    orderNo: '', 
 | 
    url: [] as UploadUserFile[], 
 | 
  }); 
 | 
} 
 | 
  
 | 
async function uploadInsurePerson() { 
 | 
  try { 
 | 
    let params = { 
 | 
      orderNo: editForm.orderNo, 
 | 
      url: editForm.url?.[0]?.path, 
 | 
    }; 
 | 
    // let res = await insuranceOrderServices.uploadStampFile(params); 
 | 
    // if (res) { 
 | 
    //   Message.successMessage('上传成功'); 
 | 
    //   getList(paginationState.pageIndex); 
 | 
    // } 
 | 
  } catch (error) {} 
 | 
} 
 | 
  
 | 
const router = useRouter(); 
 | 
  
 | 
async function handleExport() { 
 | 
  try { 
 | 
    if (paginationState.total === 0) { 
 | 
      Message.warnMessage('没有数据可以导出哦~'); 
 | 
      return; 
 | 
    } 
 | 
    let params = createParams(paginationState.pageIndex, paginationState.pageSize); 
 | 
    let res = await insuranceOrderServices.exportInsuranceOrderList(params, { 
 | 
      responseType: 'blob', 
 | 
      getResponse: true, 
 | 
    }); 
 | 
    if (res) { 
 | 
      downloadFile(res.data, `保单导出`, 'xlsx'); 
 | 
    } 
 | 
  } catch (error) {} 
 | 
} 
 | 
  
 | 
function handleDownload() { 
 | 
  downloadFileByUrl(JYBInsuranceOrderTempPath, '保单导入模板'); 
 | 
} 
 | 
  
 | 
function handleRowStyle(data: { row: API.InsuranceOrderListOutput; rowIndex: number }) { 
 | 
  if ( 
 | 
    dayjs(dayjs(data.row?.insuranceEndTime).format('YYYY-MM-DD')).diff(dayjs(), 'day') >= 0 && 
 | 
    dayjs(dayjs(data.row?.insuranceEndTime).format('YYYY-MM-DD')).diff(dayjs(), 'day') < 6 
 | 
  ) { 
 | 
    return { 
 | 
      color: '#ff0000', 
 | 
    }; 
 | 
  } 
 | 
} 
 | 
  
 | 
const { 
 | 
  dialogProps: dialogStampFileProps, 
 | 
  handleEdit: handleStampFileEdit, 
 | 
  editForm: stampFileForm, 
 | 
} = useFormDialog({ 
 | 
  onConfirm: uploadStampFile, 
 | 
  defaultFormParams: { 
 | 
    id: '', 
 | 
    url: [] as UploadUserFile[], 
 | 
  }, 
 | 
}); 
 | 
  
 | 
function handleUploadStampFile(row: API.InsuranceOrderListOutput) { 
 | 
  handleStampFileEdit({ 
 | 
    id: row.id, 
 | 
    url: [] as UploadUserFile[], 
 | 
  }); 
 | 
} 
 | 
  
 | 
async function uploadStampFile() { 
 | 
  try { 
 | 
    let params = { 
 | 
      id: stampFileForm.id, 
 | 
      url: stampFileForm.url?.[0]?.path, 
 | 
    }; 
 | 
    // let res = await insuranceOrderServices.uploadStampFile(params); 
 | 
    // if (res) { 
 | 
    //   Message.successMessage('上传成功'); 
 | 
    //   getList(paginationState.pageIndex); 
 | 
    // } 
 | 
  } catch (error) {} 
 | 
} 
 | 
  
 | 
function handleDownloadOrderNo(row: API.InsuranceOrderListOutput) { 
 | 
  downloadFileByUrl(setOSSLink(row.orderBillFile)); 
 | 
} 
 | 
  
 | 
function handleDetail(row: API.InsuranceOrderListOutput) { 
 | 
  router.push({ 
 | 
    name: 'InsuranceOrderDetail', 
 | 
    params: { 
 | 
      id: row.id, 
 | 
    }, 
 | 
  }); 
 | 
} 
 | 
function handleBatch(row: API.InsuranceOrderListOutput) { 
 | 
  router.push({ 
 | 
    name: 'BatchChange', 
 | 
    params: { 
 | 
      id: row.id, 
 | 
    }, 
 | 
  }); 
 | 
} 
 | 
function downloadInsureOrder() {} 
 | 
function downloadInsurePerson() {} 
 | 
</script> 
 |