| | |
| | | export const AppType = import.meta.env.VITE_AppType || 'one'; |
| | | |
| | | export const isJYB = |
| | | AppType === 'other' || AppType === 'jx' || AppType === 'jy' || AppType === 'backup'; |
| | | export const AppType = import.meta.env.VITE_AppType || 'other'; |
| | |
| | | component: Layout, |
| | | redirect: '/home', |
| | | alwaysShow: true, |
| | | meta: { |
| | | rank: 1001, |
| | | icon: 'home', |
| | | title: '保单管理', |
| | | rootMenu: true, |
| | | }, |
| | | children: [ |
| | | { |
| | | path: 'home', |
| | |
| | | hidden: false, |
| | | component: () => import('@/views/Home/Home.vue'), |
| | | meta: { |
| | | rank: 10001, |
| | | title: '首页', |
| | | rank: 1001, |
| | | title: '保单管理', |
| | | affix: true, |
| | | // rootMenu: true, |
| | | icon: 'home', |
| | | }, |
| | | }, |
| | | { |
| | | path: '/InsuranceOrderDetail/:id', |
| | | name: 'InsuranceOrderDetail', |
| | | hidden: true, |
| | | component: () => import('@/views/Home/InsuranceOrderDetail.vue'), |
| | | meta: { |
| | | rank: 10002, |
| | | title: '保单详情', |
| | | // rootMenu: true, |
| | | icon: 'home', |
| | | }, |
| | | }, |
| | | { |
| | | path: '/BatchChange/:id', |
| | | name: 'BatchChange', |
| | | hidden: true, |
| | | component: () => import('@/views/Home/BatchChange.vue'), |
| | | meta: { |
| | | rank: 10002, |
| | | title: '批改', |
| | | // rootMenu: true, |
| | | icon: 'home', |
| | | }, |
| | | }, |
| | | ], |
| | | meta: { |
| | | rank: 1001, |
| | | icon: 'home', |
| | | title: '首页', |
| | | rootMenu: true, |
| | | }, |
| | | }, |
| | | |
| | | { |
| | | path: '/InsuranceClaim', |
| | | redirect: 'noRedirect', |
| | |
| | | // @ts-ignore |
| | | import { request } from '@/utils/request'; |
| | | |
| | | /** 批量添加保单文件 POST /api/InsuranceOrder/AddInsuranceOrderBillFile */ |
| | | export async function addInsuranceOrderBillFile( |
| | | body: API.AddInsuranceOrderBillFile, |
| | | options?: API.RequestConfig |
| | | ) { |
| | | return request<number>('/api/InsuranceOrder/AddInsuranceOrderBillFile', { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json', |
| | | }, |
| | | data: body, |
| | | ...(options || {}), |
| | | }); |
| | | } |
| | | |
| | | /** 添加保单材料 POST /api/InsuranceOrder/AddInsuranceOrderMaterial */ |
| | | export async function addInsuranceOrderMaterial( |
| | | body: API.AddInsuranceOrderMaterialInput, |
| | |
| | | }); |
| | | } |
| | | |
| | | /** 检查导入保单模板 POST /api/InsuranceOrder/CheckImportInsuranceOrderData */ |
| | | export async function checkImportInsuranceOrderData(body: string, options?: API.RequestConfig) { |
| | | return request<number>('/api/InsuranceOrder/CheckImportInsuranceOrderData', { |
| | | /** 删除保单材料 POST /api/InsuranceOrder/DeleteInsuranceOrderMaterial */ |
| | | export async function deleteInsuranceOrderMaterial(body: string, options?: API.RequestConfig) { |
| | | return request<number>('/api/InsuranceOrder/DeleteInsuranceOrderMaterial', { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json', |
| | |
| | | }); |
| | | } |
| | | |
| | | /** 删除保单材料 POST /api/InsuranceOrder/DeleteInsuranceOrderMaterial */ |
| | | export async function deleteInsuranceOrderMaterial(body: string, options?: API.RequestConfig) { |
| | | return request<number>('/api/InsuranceOrder/DeleteInsuranceOrderMaterial', { |
| | | /** 批量减员保单数据 POST /api/InsuranceOrder/DownsizingInsuranceOrderData */ |
| | | export async function downsizingInsuranceOrderData( |
| | | body: API.DownsizingInsuranceOrderData, |
| | | options?: API.RequestConfig |
| | | ) { |
| | | return request<any>('/api/InsuranceOrder/DownsizingInsuranceOrderData', { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json', |
| | | }, |
| | | data: body, |
| | | ...(options || {}), |
| | | }); |
| | | } |
| | | |
| | | /** 批量减员保单数据校验 POST /api/InsuranceOrder/DownsizingInsuranceOrderDataCheck */ |
| | | export async function downsizingInsuranceOrderDataCheck( |
| | | body: API.DownsizingInsuranceOrderData, |
| | | options?: API.RequestConfig |
| | | ) { |
| | | return request<number>('/api/InsuranceOrder/DownsizingInsuranceOrderDataCheck', { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json', |
| | |
| | | attachments?: AddInsuranceClaimAttachmentInput[]; |
| | | } |
| | | |
| | | interface AddInsuranceOrderBillFile { |
| | | /** 保单号 */ |
| | | orderNo?: string; |
| | | /** 保单文件 */ |
| | | orderBillFile?: string; |
| | | } |
| | | |
| | | interface AddInsuranceOrderMaterialInput { |
| | | insuranceOrderId?: string; |
| | | /** 文件名称 */ |
| | |
| | | clientId?: string; |
| | | /** 角色 */ |
| | | roleNames?: string[]; |
| | | /** 是否理赔提醒 */ |
| | | sendClaimMessage?: boolean; |
| | | /** 是否保单到期提醒 */ |
| | | sendBillExpireMessage?: boolean; |
| | | /** 是否短信提醒 */ |
| | | isSendMessage?: boolean; |
| | | } |
| | | |
| | | interface CreateOrUpdateRoleInput { |
| | |
| | | dateSeparator?: string; |
| | | shortTimePattern?: string; |
| | | longTimePattern?: string; |
| | | } |
| | | |
| | | interface DownsizingInsuranceOrderData { |
| | | /** 导入地址 */ |
| | | url?: string; |
| | | /** 保单号 */ |
| | | orderNo?: string; |
| | | /** 减员保单id */ |
| | | downsizingInsuranceList?: string[]; |
| | | } |
| | | |
| | | interface EntityExtensionDto { |
| | |
| | | laborContractEnterprise?: string; |
| | | /** 实际工作单位 */ |
| | | workEnterprise?: string; |
| | | workAddress?: string; |
| | | /** 保险起始时间 */ |
| | | insuranceBeginTime?: string; |
| | | insuranceBeginTimeShow?: string; |
| | |
| | | insuredInstitution?: string; |
| | | /** 投保方案 */ |
| | | insuranceScheme?: string; |
| | | /** 投保方式 */ |
| | | insuranceType?: string; |
| | | /** 在职标识 */ |
| | | onJobFlag?: string; |
| | | /** 性别 */ |
| | |
| | | orderNo?: string; |
| | | /** 保单关联唯一字符串 */ |
| | | orderRelevanceStr?: string; |
| | | /** 保单文件 */ |
| | | orderBillFile?: string; |
| | | } |
| | | |
| | | interface InsuranceOrderListOutputPageOutput { |
| | |
| | | condition?: string; |
| | | /** 增减员查询 */ |
| | | onJobFlag?: string; |
| | | /** 投保方式查询 月保/年保 */ |
| | | insuranceType?: string; |
| | | importChannel?: string; |
| | | } |
| | | |
| | |
| | | phoneNumber: string; |
| | | /** 渠道 */ |
| | | channel?: string; |
| | | /** 是否理赔提醒 */ |
| | | sendClaimMessage?: boolean; |
| | | /** 是否保单到期提醒 */ |
| | | sendBillExpireMessage?: boolean; |
| | | /** 是否短信提醒 */ |
| | | isSendMessage?: boolean; |
| | | /** 角色 */ |
| | | roleNames?: string[]; |
| | | } |
| | |
| | | channel?: string; |
| | | /** 用户端Id */ |
| | | clientId?: string; |
| | | /** 是否理赔提醒 */ |
| | | sendClaimMessage?: boolean; |
| | | /** 是否保单到期提醒 */ |
| | | sendBillExpireMessage?: boolean; |
| | | /** 是否短信提醒 */ |
| | | isSendMessage?: boolean; |
| | | /** 角色 */ |
| | | roleNames?: string[]; |
| | | } |
| | |
| | | channel?: string; |
| | | /** 用户端Id */ |
| | | clientId?: string; |
| | | /** 是否理赔提醒 */ |
| | | sendClaimMessage?: boolean; |
| | | /** 是否保单到期提醒 */ |
| | | sendBillExpireMessage?: boolean; |
| | | /** 是否短信提醒 */ |
| | | isSendMessage?: boolean; |
| | | /** 角色 */ |
| | | roleNames?: string[]; |
| | | } |
New file |
| | |
| | | <template> |
| | | <LoadingLayout :loading="state.loading"> |
| | | <AppScrollContainer> |
| | | <ChunkCell title="1"> |
| | | <template #title> |
| | | <el-text>{{ `保单号:${'958585860689'}` }}</el-text> |
| | | <el-text>{{ `投保人:${'人力无忧'}` }}</el-text> |
| | | </template> |
| | | <ProForm :model="state.form" ref="formRef" label-width="120px"> |
| | | <ProFormCol> |
| | | <ProFormColItem :span="8"> |
| | | <ProFormItemV2 |
| | | label="期望生效日期:" |
| | | prop="time" |
| | | :check-rules="[{ message: '请选择日期' }]" |
| | | > |
| | | <ProFormDatePicker |
| | | v-model="state.form.time" |
| | | type="date" |
| | | value-format="YYYY-MM-DD" |
| | | placeholder="请选择日期" |
| | | ></ProFormDatePicker> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | </ProFormCol> |
| | | <ProFormCol> |
| | | <ProFormColItem :span="8"> |
| | | <ProFormItemV2 label="" prop="url" label-width="0"> |
| | | <ProFormUpload |
| | | v-model:file-url="state.form.url" |
| | | :limit="1" |
| | | :limitFileSize="10" |
| | | accept="xlsx,xls" |
| | | :showTip="false" |
| | | > |
| | | <template #default> |
| | | <el-button type="primary">加减人</el-button> |
| | | <el-button link type="primary" @click.stop="handleTemplateDownload" |
| | | >下载模板</el-button |
| | | > |
| | | </template> |
| | | </ProFormUpload> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | </ProFormCol> |
| | | <ProFormCol> |
| | | <ProFormColItem :span="8"> |
| | | <ProFormItemV2 label="" prop="url" label-width="0"> |
| | | <ProFormUpload |
| | | v-model:file-url="state.form.url" |
| | | :limit="1" |
| | | :limitFileSize="10" |
| | | accept="xlsx,xls" |
| | | :showTip="false" |
| | | > |
| | | <template #default> |
| | | <el-button type="primary">替换人</el-button> |
| | | <el-button link type="primary" @click.stop="handleTemplateDownload" |
| | | >下载模板</el-button |
| | | > |
| | | </template> |
| | | </ProFormUpload> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | </ProFormCol> |
| | | </ProForm> |
| | | </ChunkCell> |
| | | <ChunkCell title="批改人员详情"> |
| | | <template #titleRight> |
| | | <el-button type="primary" @click="handleClear">清空数据</el-button> |
| | | </template> |
| | | <ProTableV2 |
| | | v-bind="proTableProps" |
| | | :columns="column" |
| | | :show-operation-column="false" |
| | | :auto-height="false" |
| | | ref="proTable" |
| | | :tableProps="{ |
| | | maxHeight: '400px', |
| | | }" |
| | | > |
| | | </ProTableV2> |
| | | <div class="chuck-add-or-edit-actions"> |
| | | <el-button class="chuck-add-or-edit-actions" type="primary" @click="handleSubmit" |
| | | >提交</el-button |
| | | > |
| | | </div> |
| | | </ChunkCell> |
| | | </AppScrollContainer> |
| | | </LoadingLayout> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { |
| | | LoadingLayout, |
| | | AppScrollContainer, |
| | | ProForm, |
| | | ProFormItemV2, |
| | | ChunkCell, |
| | | ProFormText, |
| | | ProTableQueryFilterBar, |
| | | QueryFilterItem, |
| | | SearchInput, |
| | | ProFormCol, |
| | | ProFormColItem, |
| | | ProFormDatePicker, |
| | | ProFormInputNumber, |
| | | useTable, |
| | | ProTableV2, |
| | | ProFormRadio, |
| | | FieldSelect, |
| | | defineOperationBtns, |
| | | useFormDialog, |
| | | ProFormUpload, |
| | | UploadUserFile, |
| | | } from '@bole-core/components'; |
| | | import * as insuranceOrderServices from '@/services/api/InsuranceOrder'; |
| | | import { OrderInputType } from '@bole-core/core'; |
| | | |
| | | defineOptions({ |
| | | name: 'BatchChange', |
| | | }); |
| | | |
| | | const column: API.CustomModuleColumnDto[] = [ |
| | | { |
| | | id: '1', |
| | | enCode: 'name', |
| | | name: '批改类型', |
| | | }, |
| | | { |
| | | id: '2', |
| | | enCode: 'name', |
| | | name: '姓名', |
| | | }, |
| | | { |
| | | id: '3', |
| | | enCode: 'name', |
| | | name: '身份证号', |
| | | }, |
| | | { |
| | | id: '4', |
| | | enCode: 'idNumber', |
| | | name: '雇员工种', |
| | | }, |
| | | { |
| | | id: '5', |
| | | enCode: 'idNumber', |
| | | name: '性别', |
| | | }, |
| | | { |
| | | id: '6', |
| | | enCode: 'idNumber', |
| | | name: '年龄', |
| | | }, |
| | | { |
| | | id: '7', |
| | | enCode: 'idNumber', |
| | | name: '出生日期', |
| | | }, |
| | | { |
| | | id: '8', |
| | | enCode: 'idNumber', |
| | | name: '手机号码', |
| | | }, |
| | | ]; |
| | | |
| | | const route = useRoute(); |
| | | const id = route.params.id as string; |
| | | const BaseState = { |
| | | loading: true, |
| | | form: { |
| | | time: '', |
| | | url: [] as UploadUserFile[], |
| | | }, |
| | | }; |
| | | |
| | | const state = reactive({ ...BaseState }); |
| | | |
| | | const { |
| | | getDataSource: getBatchRefundInfoDetail, |
| | | proTableProps, |
| | | paginationState, |
| | | extraParamState, |
| | | reset, |
| | | } = useTable( |
| | | async ({ pageIndex, pageSize }, extraParamState) => { |
| | | try { |
| | | let params: API.QueryInsuranceOrderPageInput = { |
| | | pageModel: { |
| | | rows: pageSize, |
| | | page: pageIndex, |
| | | orderInput: extraParamState.orderInput, |
| | | }, |
| | | condition: extraParamState.keyWord, |
| | | // insurePolicyOperateHistoryId: id, |
| | | }; |
| | | let res = await insuranceOrderServices.getInsuranceOrderPage(params, { |
| | | showLoading: !state.loading, |
| | | }); |
| | | return res; |
| | | } catch (error) {} |
| | | }, |
| | | { |
| | | defaultExtraParams: { |
| | | keyWord: '', |
| | | orderInput: [{ property: 'id', order: OrderInputType.Asc }], |
| | | }, |
| | | columnsRenderProps: {}, |
| | | } |
| | | ); |
| | | |
| | | function handleClear() {} |
| | | function handleSubmit() {} |
| | | function handleTemplateDownload() {} |
| | | |
| | | onMounted(async () => { |
| | | await getBatchRefundInfoDetail(); |
| | | state.loading = false; |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @use '@/style/common.scss' as *; |
| | | |
| | | .chuck-add-or-edit-actions { |
| | | // margin-bottom: 20px; |
| | | } |
| | | </style> |
| | |
| | | <SearchInput |
| | | v-model="extraParamState.keyword" |
| | | style="width: 260px" |
| | | placeholder="姓名/身份证/单位/保单号等" |
| | | placeholder="单位/保单号/参保机构" |
| | | @on-click-search="getList" |
| | | > |
| | | </SearchInput> |
| | |
| | | >模板下载</el-button |
| | | > |
| | | |
| | | <BlFileUpload |
| | | :limitFileSize="10" |
| | | accept="xls,xlsx" |
| | | :showTip="false" |
| | | :show-file-list="false" |
| | | :on-success="handleUploadSuccess" |
| | | <el-button @click="handleUpload()" icon="Upload" type="primary" style="margin-right: 10px" |
| | | >导入</el-button |
| | | > |
| | | <template #default> |
| | | <el-button icon="Plus" type="primary">导入</el-button> |
| | | </template> |
| | | </BlFileUpload> |
| | | |
| | | <el-button |
| | | @click="handleEnterpriseBatchRefund()" |
| | | type="primary" |
| | | style="margin-right: 10px" |
| | | >批量减员</el-button |
| | | <el-button @click="downloadInsureOrder()" type="primary" icon="Download" link |
| | | >导出保单列表</el-button |
| | | > |
| | | <el-button |
| | | @click="handleExport()" |
| | | icon="Download" |
| | | type="primary" |
| | | style="margin-left: 10px" |
| | | >导出</el-button |
| | | <el-button @click="downloadInsurePerson()" icon="Download" type="primary" link |
| | | >导出在保人员</el-button |
| | | > |
| | | </template> |
| | | </ProTableQueryFilterBar> |
| | | <ProTableV2 |
| | | v-bind="proTableProps" |
| | | :columns="HomeColumns" |
| | | :columns="columns" |
| | | :operationBtns="operationBtns" |
| | | :show-column-check="true" |
| | | :column-selectable="columnSelectable" |
| | | ref="proTable" |
| | | :table-props="{ |
| | | rowStyle: handleRowStyle, |
| | |
| | | > |
| | | </ProTableV2> |
| | | </AppContainer> |
| | | <UploadMaterialDialog |
| | | v-bind="dialogProps" |
| | | @onAddUpdateMaterial="getList(paginationState.pageIndex)" |
| | | /> |
| | | <BatchDownsizingDialog v-bind="dialogBatchDownsizingProps" /> |
| | | <UploadInsurePersonDialog v-bind="dialogProps" /> |
| | | <UploadStampFileDialog v-bind="dialogStampFileProps" /> |
| | | </LoadingLayout> |
| | | </template> |
| | | |
| | |
| | | } from '@bole-core/components'; |
| | | import * as insuranceOrderServices from '@/services/api/InsuranceOrder'; |
| | | import { Message, OrderInputType, downloadFileByUrl } from '@bole-core/core'; |
| | | import { HomeColumns } from './constants'; |
| | | import UploadMaterialDialog from './components/UploadMaterialDialog.vue'; |
| | | import BatchDownsizingDialog from './components/BatchDownsizingDialog.vue'; |
| | | 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'; |
| | |
| | | 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 columnSelectable = (row: API.InsuranceOrderListOutput) => { |
| | | return row.onJobFlag === '增员'; |
| | | }; |
| | | |
| | | const BaseState = { |
| | | loading: true, |
| | |
| | | return params; |
| | | } |
| | | |
| | | const queryClient = useQueryClient(); |
| | | |
| | | async function handleUploadSuccess(response: UploadUserFile) { |
| | | try { |
| | | let res = await insuranceOrderServices.importInsuranceOrderData(response.url, { |
| | | getResponse: true, |
| | | responseType: 'blob', |
| | | }); |
| | | if (res?.data?.size) { |
| | | await Message.tipMessage('存在错误数据,是否导出?'); |
| | | downloadFile(res.data, `错误人员名单`, 'xlsx'); |
| | | // XLSXUtils.exportToXLSX({ |
| | | // workbookDataList: res, |
| | | // fileName: '错误人员名单', |
| | | // workbookHeaderMap: { |
| | | // ...omit(Object.fromEntries(HomeColumns.map((x) => [x.enCode, x.name])), [ |
| | | // 'channel', |
| | | // 'salesmanName', |
| | | // 'createTime', |
| | | // ]), |
| | | // erroMsg: '备注', |
| | | // }, |
| | | // }); |
| | | } |
| | | queryClient.invalidateQueries({ |
| | | queryKey: ['insuranceOrderServices/getInsuranceOrderListByOrderRelevance'], |
| | | }); |
| | | getList(); |
| | | } catch (error) {} |
| | | } |
| | | |
| | | const { dialogProps, handleAdd } = useFormDialog({ |
| | | const { dialogProps, handleAdd, editForm } = useFormDialog({ |
| | | onConfirm: uploadInsurePerson, |
| | | defaultFormParams: { |
| | | id: '', |
| | | materialName: '', |
| | | orderNo: '', |
| | | url: [] as UploadUserFile[], |
| | | }, |
| | | }); |
| | | |
| | | function openDialog(row: API.InsuranceOrderListOutput) { |
| | | function handleUpload() { |
| | | handleAdd({ |
| | | id: row.id, |
| | | orderNo: '', |
| | | url: [] as UploadUserFile[], |
| | | }); |
| | | } |
| | | |
| | | const router = useRouter(); |
| | | function goDetail(row: API.InsuranceOrderListOutput) { |
| | | router.push({ |
| | | name: 'InsuranceClaimDetail', |
| | | params: { |
| | | id: row.id, |
| | | }, |
| | | }); |
| | | 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 { |
| | |
| | | } |
| | | } |
| | | |
| | | const proTable = ref<InstanceType<typeof ProTableV2>>(); |
| | | function handleEnterpriseBatchRefund() { |
| | | if (proTableProps.value.tableData.length) { |
| | | const res: API.InsuranceOrderListOutput[] = proTable.value.innerTableRef.getSelectionRows(); |
| | | if (res.length > 0) { |
| | | const orderNos = _.uniq(res.map((x) => x.orderNo)); |
| | | if (orderNos.length > 1) { |
| | | Message.errorMessage('存在不同的保单号,无法批量减员'); |
| | | return; |
| | | } |
| | | handleBatchDownsizing(res); |
| | | } else { |
| | | Message.errorMessage('请先勾选减员人员'); |
| | | } |
| | | } else { |
| | | Message.errorMessage('暂无数据'); |
| | | } |
| | | } |
| | | |
| | | const { |
| | | dialogProps: dialogBatchDownsizingProps, |
| | | handleAdd: handleBatchDownsizingAdd, |
| | | editForm: batchDownsizingForm, |
| | | dialogProps: dialogStampFileProps, |
| | | handleEdit: handleStampFileEdit, |
| | | editForm: stampFileForm, |
| | | } = useFormDialog({ |
| | | onConfirm: downsizingInsuranceOrderData, |
| | | onConfirm: uploadStampFile, |
| | | defaultFormParams: { |
| | | orderNo: '', |
| | | checkOrderNo: '', |
| | | id: '', |
| | | url: [] as UploadUserFile[], |
| | | downsizingInsuranceList: [] as string[], |
| | | }, |
| | | }); |
| | | |
| | | function handleBatchDownsizing(res: API.InsuranceOrderListOutput[]) { |
| | | handleBatchDownsizingAdd({ |
| | | checkOrderNo: res[0]?.orderNo, |
| | | downsizingInsuranceList: res.map((x) => x.id), |
| | | function handleUploadStampFile(row: API.InsuranceOrderListOutput) { |
| | | handleStampFileEdit({ |
| | | id: row.id, |
| | | url: [] as UploadUserFile[], |
| | | }); |
| | | } |
| | | |
| | | async function downsizingInsuranceOrderData() { |
| | | async function uploadStampFile() { |
| | | try { |
| | | let params: API.DownsizingInsuranceOrderData = { |
| | | orderNo: batchDownsizingForm.checkOrderNo, |
| | | downsizingInsuranceList: batchDownsizingForm.downsizingInsuranceList, |
| | | url: batchDownsizingForm.url?.[0]?.path ?? '', |
| | | let params = { |
| | | id: stampFileForm.id, |
| | | url: stampFileForm.url?.[0]?.path, |
| | | }; |
| | | let res = await insuranceOrderServices.downsizingInsuranceOrderDataCheck(params); |
| | | if (res) { |
| | | let downRes = await insuranceOrderServices.downsizingInsuranceOrderData(params, { |
| | | getResponse: true, |
| | | responseType: 'blob', |
| | | }); |
| | | if (downRes?.data?.size) { |
| | | await Message.tipMessage('存在错误数据,是否导出?'); |
| | | downloadFile(downRes.data, `错误人员名单`, 'xlsx'); |
| | | } |
| | | queryClient.invalidateQueries({ |
| | | queryKey: ['insuranceOrderServices/getInsuranceOrderListByOrderRelevance'], |
| | | }); |
| | | getList(paginationState.pageIndex); |
| | | } |
| | | // 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> |
New file |
| | |
| | | <template> |
| | | <LoadingLayout> |
| | | <AppScrollContainer> |
| | | <ProTabs v-model="state.tabType" hasBorder> |
| | | <ProTabPane lazy label="保单信息" :name="InsureOrderTabType.InsureOrderInfo"> |
| | | <InsureOrderInfoView /> |
| | | </ProTabPane> |
| | | <ProTabPane lazy label="批改记录" :name="InsureOrderTabType.BatchOrder"> |
| | | <BatchChangeRecordView /> |
| | | </ProTabPane> |
| | | </ProTabs> |
| | | </AppScrollContainer> |
| | | </LoadingLayout> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { AppScrollContainer, ProTabs, ProTabPane } from '@bole-core/components'; |
| | | import InsureOrderInfoView from './components/InsureOrderInfoView.vue'; |
| | | import BatchChangeRecordView from './components/BatchChangeRecordView.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'InsuranceOrderDetail', |
| | | }); |
| | | |
| | | enum InsureOrderTabType { |
| | | InsureOrderInfo = 1, |
| | | BatchOrder = 2, |
| | | } |
| | | |
| | | const state = reactive({ |
| | | activeIndex: 1, |
| | | tabType: InsureOrderTabType.InsureOrderInfo, |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @use '@/style/common.scss' as *; |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <ProDialog title="批改信息" v-model="innerVisible" width="1200px" destroy-on-close> |
| | | <ProDialogTableWrapper :height="400"> |
| | | <ProTableV2 |
| | | :table-data="proTableProps.tableData" |
| | | :columns="column" |
| | | :show-operation-column="false" |
| | | > |
| | | </ProTableV2> |
| | | </ProDialogTableWrapper> |
| | | </ProDialog> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { ProDialog, ProTableV2, ProDialogTableWrapper, useTable } from '@bole-core/components'; |
| | | import * as insuranceOrderServices from '@/services/api/InsuranceOrder'; |
| | | import { OrderInputType } from '@bole-core/core'; |
| | | |
| | | defineOptions({ |
| | | name: 'BatchChangeRecordDetailDialog', |
| | | }); |
| | | |
| | | type Props = { |
| | | modelValue: boolean; |
| | | form?: { |
| | | id: string; |
| | | }; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), { |
| | | modelValue: false, |
| | | }); |
| | | |
| | | const emit = defineEmits<{ |
| | | (e: 'update:modelValue', value: boolean): void; |
| | | (e: 'onCancel'): void; |
| | | }>(); |
| | | |
| | | const column: API.CustomModuleColumnDto[] = [ |
| | | { |
| | | id: '1', |
| | | enCode: 'name', |
| | | name: '批改类型', |
| | | width: 120, |
| | | }, |
| | | { |
| | | id: '2', |
| | | enCode: 'name', |
| | | name: '姓名', |
| | | width: 120, |
| | | }, |
| | | { |
| | | id: '3', |
| | | enCode: 'name', |
| | | name: '身份证号', |
| | | width: 120, |
| | | }, |
| | | { |
| | | id: '4', |
| | | enCode: 'name', |
| | | name: '雇员工种', |
| | | width: 120, |
| | | }, |
| | | { |
| | | id: '5', |
| | | enCode: 'name', |
| | | name: '性别', |
| | | width: 120, |
| | | }, |
| | | { |
| | | id: '6', |
| | | enCode: 'name', |
| | | name: '年龄', |
| | | width: 120, |
| | | }, |
| | | { |
| | | id: '7', |
| | | enCode: 'name', |
| | | name: '出生日期', |
| | | width: 120, |
| | | }, |
| | | { |
| | | id: '8', |
| | | enCode: 'name', |
| | | name: '电话号码', |
| | | width: 120, |
| | | }, |
| | | { |
| | | id: '9', |
| | | enCode: 'name', |
| | | name: '修改内容', |
| | | width: 120, |
| | | }, |
| | | ]; |
| | | |
| | | const innerVisible = computed({ |
| | | get() { |
| | | return props.modelValue; |
| | | }, |
| | | set(val) { |
| | | emit('update:modelValue', val); |
| | | }, |
| | | }); |
| | | |
| | | watch( |
| | | () => props.modelValue, |
| | | (val) => { |
| | | if (val) { |
| | | getBatchRefundInfoDetail(); |
| | | } |
| | | }, |
| | | { |
| | | immediate: true, |
| | | } |
| | | ); |
| | | |
| | | const { |
| | | getDataSource: getBatchRefundInfoDetail, |
| | | proTableProps, |
| | | paginationState, |
| | | extraParamState, |
| | | reset, |
| | | } = useTable( |
| | | async ({ pageIndex, pageSize }, extraParamState) => { |
| | | try { |
| | | let params: API.QueryInsuranceOrderPageInput = { |
| | | pageModel: { |
| | | rows: pageSize, |
| | | page: pageIndex, |
| | | orderInput: extraParamState.orderInput, |
| | | }, |
| | | condition: extraParamState.keyWord, |
| | | // insurePolicyOperateHistoryId: id, |
| | | }; |
| | | let res = await insuranceOrderServices.getInsuranceOrderPage(params); |
| | | return res; |
| | | } catch (error) {} |
| | | }, |
| | | { |
| | | defaultExtraParams: { |
| | | keyWord: '', |
| | | orderInput: [{ property: 'id', order: OrderInputType.Asc }], |
| | | }, |
| | | columnsRenderProps: {}, |
| | | } |
| | | ); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @use '@/style/common.scss' as *; |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <AppContainer> |
| | | <ProTableV2 |
| | | v-bind="proTableProps" |
| | | :columns="column" |
| | | :operationBtns="operationBtns" |
| | | :autoHeight="false" |
| | | :tableProps="{ |
| | | maxHeight: '400px', |
| | | }" |
| | | > |
| | | </ProTableV2> |
| | | <BatchChangeRecordDetailDialog v-bind="dialogProps"></BatchChangeRecordDetailDialog> |
| | | </AppContainer> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { |
| | | AppContainer, |
| | | useTable, |
| | | ProTableV2, |
| | | defineOperationBtns, |
| | | useFormDialog, |
| | | } from '@bole-core/components'; |
| | | import * as insuranceOrderServices from '@/services/api/InsuranceOrder'; |
| | | import { OrderInputType } from '@bole-core/core'; |
| | | import BatchChangeRecordDetailDialog from './BatchChangeRecordDetailDialog.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'BatchChangeRecordView', |
| | | }); |
| | | |
| | | const column: API.CustomModuleColumnDto[] = [ |
| | | { |
| | | id: '1', |
| | | enCode: 'name', |
| | | name: '批单号', |
| | | }, |
| | | { |
| | | id: '2', |
| | | enCode: 'name', |
| | | name: '批改类型', |
| | | }, |
| | | { |
| | | id: '3', |
| | | enCode: 'name', |
| | | name: '申请日期', |
| | | }, |
| | | { |
| | | id: '4', |
| | | enCode: 'idNumber', |
| | | name: '批改生效日期', |
| | | }, |
| | | { |
| | | id: '5', |
| | | enCode: 'idNumber', |
| | | name: '在保人数', |
| | | }, |
| | | { |
| | | id: '6', |
| | | enCode: 'idNumber', |
| | | name: '原在保人数', |
| | | }, |
| | | { |
| | | id: '7', |
| | | enCode: 'idNumber', |
| | | name: '新增', |
| | | }, |
| | | { |
| | | id: '8', |
| | | enCode: 'idNumber', |
| | | name: '减少', |
| | | }, |
| | | { |
| | | id: '9', |
| | | enCode: 'idNumber', |
| | | name: '批单状态', |
| | | }, |
| | | ]; |
| | | |
| | | const operationBtns = defineOperationBtns([ |
| | | { |
| | | data: { |
| | | enCode: 'detailBtn', |
| | | name: '详情', |
| | | }, |
| | | emits: { |
| | | onClick: (role) => handleDetail(role), |
| | | }, |
| | | // extraProps: { |
| | | // hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile, |
| | | // }, |
| | | }, |
| | | ]); |
| | | |
| | | const route = useRoute(); |
| | | const id = route.params.id as string; |
| | | const BaseState = { |
| | | loading: true, |
| | | }; |
| | | |
| | | const state = reactive({ ...BaseState }); |
| | | |
| | | const { |
| | | getDataSource: getBatchRefundInfoDetail, |
| | | proTableProps, |
| | | paginationState, |
| | | extraParamState, |
| | | reset, |
| | | } = useTable( |
| | | async ({ pageIndex, pageSize }, extraParamState) => { |
| | | try { |
| | | let params: API.QueryInsuranceOrderPageInput = { |
| | | pageModel: { |
| | | rows: pageSize, |
| | | page: pageIndex, |
| | | orderInput: extraParamState.orderInput, |
| | | }, |
| | | condition: extraParamState.keyWord, |
| | | // insurePolicyOperateHistoryId: id, |
| | | }; |
| | | let res = await insuranceOrderServices.getInsuranceOrderPage(params, { |
| | | showLoading: !state.loading, |
| | | }); |
| | | return res; |
| | | } catch (error) {} |
| | | }, |
| | | { |
| | | defaultExtraParams: { |
| | | keyWord: '', |
| | | orderInput: [{ property: 'id', order: OrderInputType.Asc }], |
| | | }, |
| | | columnsRenderProps: {}, |
| | | } |
| | | ); |
| | | |
| | | const { dialogProps, handleEdit } = useFormDialog({ |
| | | defaultFormParams: { |
| | | id: '', |
| | | }, |
| | | }); |
| | | |
| | | function handleDetail(row: API.InsuranceOrderListOutput) { |
| | | handleEdit({ |
| | | id: row.id, |
| | | }); |
| | | } |
| | | |
| | | onMounted(() => { |
| | | getBatchRefundInfoDetail(); |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @use '@/style/common.scss' as *; |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <ProDialog |
| | | title="修改信息" |
| | | v-model="innerVisible" |
| | | destroy-on-close |
| | | draggable |
| | | bodyNoPaddingBottom |
| | | @close="onDialogClose" |
| | | width="700px" |
| | | > |
| | | <el-text type="danger" |
| | | >*身份证号与保险人姓名不能同时变更,只能修改其中一项,且仅能修改一次</el-text |
| | | > |
| | | <ProForm :model="innerForm" ref="dialogForm" label-width="100px" style="margin-top: 20px"> |
| | | <ProFormItemV2 label="姓名:" prop="name" :check-rules="[{ message: '请输入姓名' }]"> |
| | | <ProFormText |
| | | placeholder="请输入姓名" |
| | | v-model.trim="innerForm.name" |
| | | :maxlength="30" |
| | | ></ProFormText> |
| | | </ProFormItemV2> |
| | | <ProFormItemV2 label="身份证号:" prop="name" :check-rules="[{ message: '请输入身份证号' }]"> |
| | | <ProFormText |
| | | placeholder="请输入身份证号" |
| | | v-model.trim="innerForm.name" |
| | | :maxlength="30" |
| | | ></ProFormText> |
| | | </ProFormItemV2> |
| | | <ProFormItemV2 label="手机号:" prop="name" :check-rules="[{ message: '请输入手机号' }]"> |
| | | <ProFormText |
| | | placeholder="请输入手机号" |
| | | v-model.trim="innerForm.name" |
| | | :maxlength="30" |
| | | ></ProFormText> |
| | | </ProFormItemV2> |
| | | </ProForm> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="emit('onCancel')">取 消</el-button> |
| | | <el-button type="primary" @click="handleConfirm">确 定</el-button> |
| | | </span> |
| | | </template> |
| | | </ProDialog> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { ProDialog, ProForm, ProFormItemV2, ProFormText } from '@bole-core/components'; |
| | | import { FormInstance } from 'element-plus'; |
| | | |
| | | defineOptions({ |
| | | name: 'ChangePersonInfoDialog', |
| | | }); |
| | | |
| | | type Props = { |
| | | modelValue: boolean; |
| | | form?: { |
| | | name: string; |
| | | }; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), { |
| | | modelValue: false, |
| | | }); |
| | | |
| | | const emit = defineEmits<{ |
| | | (e: 'update:modelValue', value: boolean): void; |
| | | (e: 'update:form', value: Props['form']): void; |
| | | (e: 'onConfirm'): void; |
| | | (e: 'onCancel'): void; |
| | | }>(); |
| | | |
| | | const innerVisible = computed({ |
| | | get() { |
| | | return props.modelValue; |
| | | }, |
| | | set(val) { |
| | | emit('update:modelValue', val); |
| | | }, |
| | | }); |
| | | |
| | | const innerForm = computed({ |
| | | get() { |
| | | return props.form; |
| | | }, |
| | | set(val) { |
| | | emit('update:form', val); |
| | | }, |
| | | }); |
| | | |
| | | const dialogForm = ref<FormInstance>(); |
| | | |
| | | function onDialogClose() { |
| | | if (!dialogForm.value) return; |
| | | dialogForm.value.resetFields(); |
| | | } |
| | | |
| | | function handleConfirm() { |
| | | if (!dialogForm.value) return; |
| | | dialogForm.value.validate((valid) => { |
| | | if (valid) { |
| | | emit('onConfirm'); |
| | | } else { |
| | | return; |
| | | } |
| | | }); |
| | | } |
| | | </script> |
New file |
| | |
| | | <template> |
| | | <AppScrollContainer> |
| | | <ChunkCell title=""> |
| | | <ProForm :model="detail" ref="formRef" label-width="120px" :is-read="true"> |
| | | <ProFormCol> |
| | | <ProFormColItem :span="8"> |
| | | <ProFormItemV2 label="保单号:" prop="orderNo"> |
| | | <ProFormText v-model.trim="detail.orderNo" /> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="8"> |
| | | <ProFormItemV2 label="生效状态:" prop="insuranceTypeCode"> |
| | | <ProFormRadio v-model="detail.insuranceType" :value-enum="insuranceTypeText" /> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | </ProFormCol> |
| | | <ProFormCol> |
| | | <ProFormColItem :span="8"> |
| | | <ProFormItemV2 label="保险起期:" prop="applyTime"> |
| | | <ProFormDatePicker v-model.trim="detail.createTime" format="YYYY-MM-DD HH:mm" /> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="8"> |
| | | <ProFormItemV2 label="保险止期:" prop="insuranceTypeCode"> |
| | | <ProFormDatePicker v-model.trim="detail.createTime" format="YYYY-MM-DD HH:mm" /> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="8"> |
| | | <ProFormItemV2 label="投保方式:" prop="insureWay"> |
| | | <ProFormRadio v-model="detail.insuranceType" :value-enum="insuranceTypeText" /> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | </ProFormCol> |
| | | <ProFormCol> |
| | | <ProFormColItem :span="8"> |
| | | <ProFormItemV2 label="参保机构:" prop="applyTime"> |
| | | <ProFormText v-model.trim="detail.orderNo" /> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="8"> |
| | | <ProFormItemV2 label="投保方案:" prop="applyTime"> |
| | | <ProFormText v-model.trim="detail.orderNo" /> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="8"> |
| | | <ProFormItemV2 label="投保人数:" prop="numberOfFailed"> |
| | | <ProFormInputNumber v-model.trim="detail.incDecAmount" unit="人" /> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | </ProFormCol> |
| | | <ProFormCol> |
| | | <ProFormColItem :span="8"> |
| | | <ProFormItemV2 label="投保人:" prop="companyName"> |
| | | <ProFormText v-model.trim="detail.orderNo" /> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | <ProFormColItem :span="8"> |
| | | <ProFormItemV2 label="被保人:" prop="insuranceTypeCode"> |
| | | <ProFormText v-model.trim="detail.orderNo" /> |
| | | </ProFormItemV2> |
| | | </ProFormColItem> |
| | | </ProFormCol> |
| | | </ProForm> |
| | | </ChunkCell> |
| | | <ChunkCell title="人员信息"> |
| | | <template #titleRight> |
| | | <el-button type="primary" @click="handleBatchChange">批改申请</el-button> |
| | | </template> |
| | | <ProTableQueryFilterBar @on-reset="reset"> |
| | | <template #query> |
| | | <QueryFilterItem> |
| | | <SearchInput |
| | | v-model="extraParamState.keyWord" |
| | | style="width: 300px" |
| | | placeholder="人员姓名/身份证号/手机号" |
| | | @on-click-search="getBatchRefundInfoDetail" |
| | | > |
| | | </SearchInput> |
| | | </QueryFilterItem> |
| | | </template> |
| | | <template #btn> |
| | | <el-button @click="handleTemplateDownload()" icon="Download" type="primary" |
| | | >模板下载</el-button |
| | | > |
| | | <el-button @click="handleImport()" icon="Download" type="primary">导入</el-button> |
| | | <el-button @click="handleClear()" icon="Download" type="primary">清空数据</el-button> |
| | | <el-button @click="handleDownloadPerson()" icon="Download" type="primary" |
| | | >人员清单下载</el-button |
| | | > |
| | | <el-button @click="handleDownloadOrder()" icon="Download" type="primary" |
| | | >保单下载</el-button |
| | | > |
| | | </template> |
| | | </ProTableQueryFilterBar> |
| | | <ProTableV2 |
| | | v-bind="proTableProps" |
| | | :columns="column" |
| | | :operationBtns="operationBtns" |
| | | :auto-height="false" |
| | | ref="proTable" |
| | | :tableProps="{ |
| | | maxHeight: '400px', |
| | | }" |
| | | > |
| | | </ProTableV2> |
| | | </ChunkCell> |
| | | <ChangePersonInfoDialog v-bind="dialogProps"></ChangePersonInfoDialog> |
| | | </AppScrollContainer> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { |
| | | LoadingLayout, |
| | | AppScrollContainer, |
| | | ProForm, |
| | | ProFormItemV2, |
| | | ChunkCell, |
| | | ProFormText, |
| | | ProTableQueryFilterBar, |
| | | QueryFilterItem, |
| | | SearchInput, |
| | | ProFormCol, |
| | | ProFormColItem, |
| | | ProFormDatePicker, |
| | | ProFormInputNumber, |
| | | useTable, |
| | | ProTableV2, |
| | | ProFormRadio, |
| | | FieldSelect, |
| | | defineOperationBtns, |
| | | useFormDialog, |
| | | } from '@bole-core/components'; |
| | | import { insuranceTypeText } from '@/constants'; |
| | | import ChangePersonInfoDialog from './ChangePersonInfoDialog.vue'; |
| | | import * as insuranceOrderServices from '@/services/api/InsuranceOrder'; |
| | | import { useQuery, useQueryClient } from '@tanstack/vue-query'; |
| | | import { OrderInputType } from '@bole-core/core'; |
| | | |
| | | defineOptions({ |
| | | name: 'InsureOrderInfoView', |
| | | }); |
| | | |
| | | const column: API.CustomModuleColumnDto[] = [ |
| | | { |
| | | id: '1', |
| | | enCode: 'name', |
| | | name: '姓名', |
| | | }, |
| | | { |
| | | id: '2', |
| | | enCode: 'name', |
| | | name: '性别', |
| | | }, |
| | | { |
| | | id: '3', |
| | | enCode: 'name', |
| | | name: '证件类型', |
| | | }, |
| | | { |
| | | id: '4', |
| | | enCode: 'idNumber', |
| | | name: '证件号码', |
| | | }, |
| | | { |
| | | id: '5', |
| | | enCode: 'idNumber', |
| | | name: '雇员工种', |
| | | }, |
| | | { |
| | | id: '6', |
| | | enCode: 'idNumber', |
| | | name: '用工单位', |
| | | }, |
| | | { |
| | | id: '7', |
| | | enCode: 'idNumber', |
| | | name: '用工地点', |
| | | }, |
| | | { |
| | | id: '8', |
| | | enCode: 'idNumber', |
| | | name: '年龄', |
| | | }, |
| | | { |
| | | id: '9', |
| | | enCode: 'idNumber', |
| | | name: '出生日期', |
| | | }, |
| | | { |
| | | id: '10', |
| | | enCode: 'idNumber', |
| | | name: '手机号码', |
| | | }, |
| | | { |
| | | id: '11', |
| | | enCode: 'idNumber', |
| | | name: '理赔', |
| | | }, |
| | | ]; |
| | | |
| | | const operationBtns = defineOperationBtns([ |
| | | { |
| | | data: { |
| | | enCode: 'changeInfoBtn', |
| | | name: '修改信息', |
| | | }, |
| | | emits: { |
| | | onClick: (role) => handleChangeInfo(role), |
| | | }, |
| | | extraProps: { |
| | | hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile, |
| | | }, |
| | | }, |
| | | { |
| | | data: { |
| | | enCode: 'insureClaimDetailBtn', |
| | | name: '理赔详情', |
| | | }, |
| | | emits: { |
| | | onClick: (role) => handleInsureClaimDetail(), |
| | | }, |
| | | extraProps: { |
| | | hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile, |
| | | }, |
| | | }, |
| | | ]); |
| | | |
| | | const route = useRoute(); |
| | | const router = useRouter(); |
| | | const id = route.params.id as string; |
| | | const BaseState = { |
| | | loading: true, |
| | | }; |
| | | |
| | | const state = reactive({ ...BaseState }); |
| | | |
| | | const { data: detail, isLoading } = useQuery({ |
| | | queryKey: ['insuranceOrderServices/getInsuranceOrderDetail', id], |
| | | queryFn: async () => { |
| | | return await insuranceOrderServices.getInsuranceOrderDetail( |
| | | { id: id }, |
| | | { |
| | | showLoading: false, |
| | | } |
| | | ); |
| | | }, |
| | | placeholderData: () => ({} as API.InsuranceOrderListOutput), |
| | | enabled: !!id, |
| | | }); |
| | | |
| | | const queryClient = useQueryClient(); |
| | | |
| | | onMounted(async () => { |
| | | await queryClient.ensureQueryData({ |
| | | queryKey: ['insuranceOrderServices/getInsuranceOrderDetail', id], |
| | | }); |
| | | getBatchRefundInfoDetail(); |
| | | }); |
| | | |
| | | const { |
| | | getDataSource: getBatchRefundInfoDetail, |
| | | proTableProps, |
| | | paginationState, |
| | | extraParamState, |
| | | reset, |
| | | } = useTable( |
| | | async ({ pageIndex, pageSize }, extraParamState) => { |
| | | try { |
| | | let params: API.QueryInsuranceOrderPageInput = { |
| | | pageModel: { |
| | | rows: pageSize, |
| | | page: pageIndex, |
| | | orderInput: extraParamState.orderInput, |
| | | }, |
| | | condition: extraParamState.keyWord, |
| | | // insurePolicyOperateHistoryId: id, |
| | | }; |
| | | let res = await insuranceOrderServices.getInsuranceOrderPage(params, { |
| | | showLoading: !state.loading, |
| | | }); |
| | | return res; |
| | | } catch (error) {} |
| | | }, |
| | | { |
| | | defaultExtraParams: { |
| | | keyWord: '', |
| | | orderInput: [{ property: 'id', order: OrderInputType.Asc }], |
| | | }, |
| | | columnsRenderProps: {}, |
| | | } |
| | | ); |
| | | |
| | | function handleTemplateDownload() {} |
| | | function handleClear() {} |
| | | function handleImport() {} |
| | | |
| | | function handleDownloadPerson() {} |
| | | function handleDownloadOrder() {} |
| | | function handleBatchChange() { |
| | | router.push({ |
| | | name: 'BatchChange', |
| | | params: { |
| | | id: id, |
| | | }, |
| | | }); |
| | | } |
| | | |
| | | const { dialogProps, handleEdit, editForm } = useFormDialog({ |
| | | onConfirm: changeInfo, |
| | | defaultFormParams: { |
| | | name: '', |
| | | }, |
| | | }); |
| | | |
| | | function handleChangeInfo(row: API.InsuranceOrderListOutput) { |
| | | handleEdit({ |
| | | name: row.name, |
| | | }); |
| | | } |
| | | |
| | | async function changeInfo() {} |
| | | |
| | | function handleInsureClaimDetail() {} |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @use '@/style/common.scss' as *; |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <ProDialog |
| | | title="上传投保人员清单" |
| | | v-model="innerVisible" |
| | | destroy-on-close |
| | | draggable |
| | | bodyNoPaddingBottom |
| | | @close="onDialogClose" |
| | | > |
| | | <ProForm :model="innerForm" ref="dialogForm" label-width="120px"> |
| | | <ProFormItemV2 |
| | | label="批次号:" |
| | | prop="materialName" |
| | | :check-rules="[{ message: '请输入批次号' }]" |
| | | > |
| | | <ProFormText |
| | | placeholder="请输入批次号" |
| | | v-model.trim="innerForm.orderNo" |
| | | :maxlength="30" |
| | | ></ProFormText> |
| | | </ProFormItemV2> |
| | | <ProFormItemV2 |
| | | label="上传文件:" |
| | | prop="url" |
| | | :check-rules="[{ message: '请上传文件', type: 'upload' }]" |
| | | > |
| | | <ProFormUpload |
| | | v-model:file-url="innerForm.url" |
| | | :limit="1" |
| | | :limitFileSize="10" |
| | | accept="xlsx,xls" |
| | | ></ProFormUpload> |
| | | </ProFormItemV2> |
| | | </ProForm> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button type="primary" @click="handleConfirm">确 定</el-button> |
| | | </span> |
| | | </template> |
| | | </ProDialog> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { |
| | | ProDialog, |
| | | UploadUserFile, |
| | | ProForm, |
| | | ProFormItemV2, |
| | | ProFormText, |
| | | ProFormUpload, |
| | | } from '@bole-core/components'; |
| | | import { FormInstance } from 'element-plus'; |
| | | |
| | | defineOptions({ |
| | | name: 'UploadInsurePersonDialog', |
| | | }); |
| | | |
| | | type Props = { |
| | | modelValue: boolean; |
| | | form?: { |
| | | orderNo: string; |
| | | url: UploadUserFile[]; |
| | | }; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), { |
| | | modelValue: false, |
| | | }); |
| | | |
| | | const emit = defineEmits<{ |
| | | (e: 'update:modelValue', value: boolean): void; |
| | | (e: 'update:form', value: Props['form']): void; |
| | | (e: 'onConfirm'): void; |
| | | (e: 'onCancel'): void; |
| | | }>(); |
| | | |
| | | const innerVisible = computed({ |
| | | get() { |
| | | return props.modelValue; |
| | | }, |
| | | set(val) { |
| | | emit('update:modelValue', val); |
| | | }, |
| | | }); |
| | | |
| | | const innerForm = computed({ |
| | | get() { |
| | | return props.form; |
| | | }, |
| | | set(val) { |
| | | emit('update:form', val); |
| | | }, |
| | | }); |
| | | |
| | | const dialogForm = ref<FormInstance>(); |
| | | |
| | | function onDialogClose() { |
| | | if (!dialogForm.value) return; |
| | | dialogForm.value.resetFields(); |
| | | } |
| | | |
| | | function handleConfirm() { |
| | | if (!dialogForm.value) return; |
| | | dialogForm.value.validate((valid) => { |
| | | if (valid) { |
| | | emit('onConfirm'); |
| | | } else { |
| | | return; |
| | | } |
| | | }); |
| | | } |
| | | </script> |
New file |
| | |
| | | <template> |
| | | <ProDialog |
| | | title="上传盖章文件" |
| | | v-model="innerVisible" |
| | | destroy-on-close |
| | | draggable |
| | | bodyNoPaddingBottom |
| | | @close="onDialogClose" |
| | | > |
| | | <ProForm :model="innerForm" ref="dialogForm" label-width="120px"> |
| | | <ProFormItemV2 |
| | | label="上传文件:" |
| | | prop="url" |
| | | :check-rules="[{ message: '请上传文件', type: 'upload' }]" |
| | | > |
| | | <ProFormUpload v-model:file-url="innerForm.url" accept="pdf,jpg,jpeg,png"></ProFormUpload> |
| | | </ProFormItemV2> |
| | | </ProForm> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button type="primary" @click="handleConfirm">确 定</el-button> |
| | | </span> |
| | | </template> |
| | | </ProDialog> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { |
| | | ProDialog, |
| | | UploadUserFile, |
| | | ProForm, |
| | | ProFormItemV2, |
| | | ProFormUpload, |
| | | } from '@bole-core/components'; |
| | | import { FormInstance } from 'element-plus'; |
| | | |
| | | defineOptions({ |
| | | name: 'UploadStampFileDialog', |
| | | }); |
| | | |
| | | type Props = { |
| | | modelValue: boolean; |
| | | form?: { |
| | | id: string; |
| | | url: UploadUserFile[]; |
| | | }; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), { |
| | | modelValue: false, |
| | | }); |
| | | |
| | | const emit = defineEmits<{ |
| | | (e: 'update:modelValue', value: boolean): void; |
| | | (e: 'update:form', value: Props['form']): void; |
| | | (e: 'onConfirm'): void; |
| | | (e: 'onCancel'): void; |
| | | }>(); |
| | | |
| | | const innerVisible = computed({ |
| | | get() { |
| | | return props.modelValue; |
| | | }, |
| | | set(val) { |
| | | emit('update:modelValue', val); |
| | | }, |
| | | }); |
| | | |
| | | const innerForm = computed({ |
| | | get() { |
| | | return props.form; |
| | | }, |
| | | set(val) { |
| | | emit('update:form', val); |
| | | }, |
| | | }); |
| | | |
| | | const dialogForm = ref<FormInstance>(); |
| | | |
| | | function onDialogClose() { |
| | | if (!dialogForm.value) return; |
| | | dialogForm.value.resetFields(); |
| | | } |
| | | |
| | | function handleConfirm() { |
| | | if (!dialogForm.value) return; |
| | | dialogForm.value.validate((valid) => { |
| | | if (valid) { |
| | | emit('onConfirm'); |
| | | } else { |
| | | return; |
| | | } |
| | | }); |
| | | } |
| | | </script> |
| | |
| | | import { defineColumns } from '@bole-core/components'; |
| | | |
| | | export const HomeColumns = defineColumns([ |
| | | export const columns = defineColumns([ |
| | | { |
| | | id: '1', |
| | | enCode: 'channel', |
| | |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '2', |
| | | enCode: 'channel', |
| | | name: '批次号', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '3', |
| | | enCode: 'name', |
| | | name: '姓名', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '4', |
| | | enCode: 'idNumber', |
| | | name: '身份证号', |
| | | width: 200, |
| | | }, |
| | | { |
| | | id: '5', |
| | | enCode: 'workType', |
| | | name: '雇员工种', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '6', |
| | | enCode: 'laborContractEnterprise', |
| | | name: '劳动合同单位', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '7', |
| | | enCode: 'workEnterprise', |
| | | name: '实际工作单位', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '8', |
| | | enCode: 'workAddress', |
| | | name: '用工地点', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '9', |
| | | enCode: 'insuranceBeginTime', |
| | | name: '保险起期', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '10', |
| | | enCode: 'insuranceEndTime', |
| | | name: '保险止期', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '11', |
| | | enCode: 'insuredInstitution', |
| | | name: '参保机构', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '12', |
| | | enCode: 'insuranceScheme', |
| | | name: '投保方案', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '13', |
| | | enCode: 'insuranceType', |
| | | name: '投保方式', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '14', |
| | | enCode: 'orderNo', |
| | | name: '保单号', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '4', |
| | | enCode: 'orderNo', |
| | | name: '投保人', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '5', |
| | | enCode: 'orderNo', |
| | | name: '被保人', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '6', |
| | | enCode: 'insuranceBeginTime', |
| | | name: '保险起期', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '7', |
| | | enCode: 'insuranceEndTime', |
| | | name: '保险止期', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '8', |
| | | enCode: 'insuredInstitution', |
| | | name: '参保机构', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '9', |
| | | enCode: 'insuranceScheme', |
| | | name: '投保方案', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '10', |
| | | enCode: 'insuranceType', |
| | | name: '投保方式', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '11', |
| | | enCode: 'insuranceType', |
| | | name: '投保人数', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '12', |
| | | enCode: 'insuranceType', |
| | | name: '总保额(元)', |
| | | width: 200, |
| | | }, |
| | | { |
| | | id: '13', |
| | | enCode: 'insuranceType', |
| | | name: '总保费(元)', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '14', |
| | | enCode: 'createTime', |
| | | name: '最近导入日期', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '15', |
| | | enCode: 'onJobFlag', |
| | | name: '在职标识', |
| | | enCode: 'insuranceType', |
| | | name: '投保状态', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '16', |
| | | enCode: 'gender', |
| | | name: '性别', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '17', |
| | | enCode: 'age', |
| | | name: '年龄', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '20', |
| | | enCode: 'premiumAmount', |
| | | name: '保费', |
| | | width: 160, |
| | | }, |
| | | { |
| | | id: '21', |
| | | enCode: 'incDecAmount', |
| | | name: '增减费用', |
| | | width: 160, |
| | | }, |
| | | |
| | | { |
| | | id: '20', |
| | | enCode: 'createTime', |
| | | name: '导入日期', |
| | | enCode: 'insuranceType', |
| | | name: '理赔数量', |
| | | width: 160, |
| | | }, |
| | | ]).filter(Boolean); |