| | |
| | | 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 { |
| | |
| | | longTimePattern?: string; |
| | | } |
| | | |
| | | interface DownsizingInsuranceOrderData { |
| | | /** 导å
¥å°å */ |
| | | url?: string; |
| | | /** ä¿åå· */ |
| | | orderNo?: string; |
| | | /** ååä¿åid */ |
| | | downsizingInsuranceList?: string[]; |
| | | } |
| | | |
| | | interface EntityExtensionDto { |
| | | properties?: Record<string, any>; |
| | | configuration?: Record<string, any>; |
| | |
| | | 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[]; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <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 { |
| | | if (paginationState.total === 0) { |
| | |
| | | } |
| | | } |
| | | |
| | | 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> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <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); |