From 32c69839e3658c81e1ac7bf66ef207215c22a4a9 Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期三, 02 四月 2025 11:03:46 +0800 Subject: [PATCH] feat: init --- src/views/Home/Home.vue | 298 ++--------------------------------------------------------- 1 files changed, 12 insertions(+), 286 deletions(-) diff --git a/src/views/Home/Home.vue b/src/views/Home/Home.vue index 5b201e5..743c705 100644 --- a/src/views/Home/Home.vue +++ b/src/views/Home/Home.vue @@ -1,308 +1,34 @@ <template> - <LoadingLayout :loading="state.loading"> + <LoadingLayout :loading="isLoading"> <AppContainer> - <div class="home-top-view"> - <ProForm :mode="form"> - <ProFormItemV2 label="鎶ユ骞翠唤:"> - <ProFormDatePicker - v-model="form.year" - type="year" - format="YYYY" - value-format="YYYY" - placeholder="鎶ユ骞翠唤" - :disabled-date="disabledYear" - ></ProFormDatePicker> - </ProFormItemV2> - <ProFormItemV2 label="鎶ユ鏈堜唤:"> - <ProFormDatePicker - v-model="form.month" - type="month" - format="M" - value-format="M" - placeholder="鎶ユ鏈堜唤" - ></ProFormDatePicker> - </ProFormItemV2> - <ProFormItemV2 label="鐞嗚禂娓犻亾:"> - <ProFormSelect - v-model="form.claimChannel" - placeholder="鐞嗚禂娓犻亾" - :value-enum="insuranceClaimChannelListForSelect" - clearable - style="width: 100%" - /> - </ProFormItemV2> - <ProFormItemV2 label="鎶ユ鏁伴噺:"> - <div class="home-top-view-count">{{ claimCount ?? 0 }}浜�</div> - </ProFormItemV2> - </ProForm> - <Chart /> - </div> - <ProTableQueryFilterBar @on-reset="reset"> - <template #query> - <QueryFilterItem> - <FieldSelect - v-model="extraParamState.claimChannel" - placeholder="鐞嗚禂娓犻亾" - :value-enum="insuranceClaimChannelListForSelect" - clearable - @change="getList()" - /> - </QueryFilterItem> - <QueryFilterItem> - <FieldSelect - v-model="extraParamState.claimResult" - placeholder="鐞嗚禂缁撴灉" - :value-enum="InsuranceClaimResultEnumText" - clearable - @change="getList()" - /> - </QueryFilterItem> - <QueryFilterItem> - <SearchInput - v-model="extraParamState.idNumber" - style="width: 260px" - placeholder="韬唤璇佸彿鐮�" - :showSearchBtn="false" - > - </SearchInput> - </QueryFilterItem> - <QueryFilterItem> - <SearchInput - v-model="extraParamState.laborContractEnterprise" - style="width: 260px" - placeholder="鍔冲姩鍚堝悓鍏徃" - :showSearchBtn="false" - > - </SearchInput> - </QueryFilterItem> - <QueryFilterItem> - <SearchInput - v-model="extraParamState.workEnterprise" - style="width: 260px" - placeholder="鐢ㄥ伐浼佷笟" - @on-click-search="getList" - > - </SearchInput> - </QueryFilterItem> - </template> - <template #btn> - <el-button @click="handleExport()" icon="Download" type="primary">瀵煎嚭</el-button> - <el-button @click="handleExportPic()" icon="Download" type="primary">瀵煎嚭鍥剧墖</el-button> - </template> - </ProTableQueryFilterBar> - <ProTableV2 v-bind="proTableProps" :columns="HomeColumns" :operationBtns="operationBtns"> - </ProTableV2> + <ChunkCell title="寰呭鐞�"> </ChunkCell> + <ChunkCell title="鏁版嵁鐪嬫澘"> </ChunkCell> </AppContainer> </LoadingLayout> </template> <script setup lang="ts"> import { - ProTableQueryFilterBar, - OperationBtnType, - ProTableV2, - SearchInput, - LoadingLayout, - AppContainer, - QueryFilterItem, - useTable, - defineOperationBtns, - FieldSelect, ProForm, ProFormItemV2, ProFormSelect, - ProFormDatePicker, + ProFormText, + ProFormCol, + ProFormColItem, + ProFormInputNumber, + ProFormTextArea, + ProFormRadio, + ChunkCell, + AppScrollContainer, } from '@bole-core/components'; -import { useInsuranceClaimChannelList, useGlobalEventContext } from '@/hooks'; -import * as insuranceClaimServices from '@/services/api/InsuranceClaim'; -import { Message, OrderInputType, downloadWithZip } from '@bole-core/core'; -import { HomeColumns } from './constants'; -import { downloadFile, setOSSLink, toThousand } from '@/utils'; -import dayjs from 'dayjs'; -import { useQuery } from '@tanstack/vue-query'; -import { useInsuranceClaimCount } from './hooks'; -import Chart from './components/Chart.vue'; -import { InsuranceClaimResultEnumText, InsuranceClaimResultEnum } from '@/constants'; defineOptions({ name: 'Home', }); -const operationBtns = defineOperationBtns([ - { - data: { - enCode: 'checkBtn', - name: '璇︽儏', - }, - emits: { - onClick: (role) => goDetail(role), - }, - }, -]); - -const { insuranceClaimChannelListForSelect } = useInsuranceClaimChannelList(); - -const eventContext = useGlobalEventContext(); - -const BaseState = { - loading: true, -}; - -const state = reactive({ ...BaseState }); - -eventContext.addEvent('updateInsuranceClaim', () => { - getList(paginationState.pageIndex); -}); - -onMounted(async () => { - await getList(); - state.loading = false; -}); - -const { - getDataSource: getList, - proTableProps, - paginationState, - extraParamState, - reset, -} = useTable( - async ({ pageIndex, pageSize }, extraParamState) => { - try { - let params = createParams(pageIndex, pageSize); - let res = await insuranceClaimServices.getInsuranceClaimPage(params, { - showLoading: !state.loading, - }); - return res; - } catch (error) {} - }, - { - defaultExtraParams: { - orderInput: [{ property: 'createTime', order: OrderInputType.Desc }], - claimChannel: '', - laborContractEnterprise: '', - workEnterprise: '', - idNumber: '', - claimResult: '' as any as InsuranceClaimResultEnum, - }, - columnsRenderProps: { - insuranceBeginTime: { - type: 'date', - format: 'YYYY/MM/DD', - }, - insuranceEndTime: { - type: 'date', - format: 'YYYY/MM/DD', - }, - reportedTime: { - type: 'date', - format: 'YYYY/MM/DD HH:mm:ss', - }, - accidentTime: { - type: 'date', - format: 'YYYY/MM/DD HH:mm:ss', - }, - lastModificationTime: { - type: 'date', - format: 'YYYY-MM-DD HH:mm:ss', - }, - disabilityRatio: { - formatter: (row: API.InsuranceClaimListOutput) => - row.disabilityRatio == null ? '' : row.disabilityRatio + '%', - }, - downPaymentAmount: { - type: 'money', - formatter: (row: API.InsuranceClaimListOutput) => - row.downPaymentAmount == null ? '' : toThousand(row.downPaymentAmount), - }, - claimResultTime: { type: 'date', format: 'YYYY-MM-DD' }, - claimResult: { type: 'enum', valueEnum: InsuranceClaimResultEnumText }, - }, - } -); - -function createParams(pageIndex: number, pageSize: number) { - let params: API.QueryInsuranceClaimPageInput = { - pageModel: { - rows: pageSize, - page: pageIndex, - orderInput: extraParamState.orderInput, - }, - claimChannel: extraParamState.claimChannel, - laborContractEnterprise: extraParamState.laborContractEnterprise, - workEnterprise: extraParamState.workEnterprise, - idNumber: extraParamState.idNumber, - claimResult: extraParamState.claimResult, - }; - return params; -} - -const router = useRouter(); -function goDetail(row: API.InsuranceClaimListOutput) { - router.push({ - name: 'InsuranceClaimDetail', - params: { - id: row.insuranceOrderId, - }, - query: { - backRouteName: 'Home', - insuranceClaimId: row.id, - }, - }); -} - -async function handleExport() { - try { - if (paginationState.total === 0) { - Message.warnMessage('娌℃湁鏁版嵁鍙互瀵煎嚭鍝'); - return; - } - let params = createParams(paginationState.pageIndex, paginationState.pageSize); - let res = await insuranceClaimServices.exportInsuranceClaimList(params, { - responseType: 'blob', - getResponse: true, - }); - if (res) { - downloadFile(res.data, `鐞嗚禂瀵煎嚭`, 'xlsx'); - } - } catch (error) {} -} - -async function handleExportPic() { - try { - if (paginationState.total === 0) { - Message.warnMessage('娌℃湁鏁版嵁鍙互瀵煎嚭鍝'); - return; - } - let params = createParams(paginationState.pageIndex, paginationState.pageSize); - let res = await insuranceClaimServices.getInsuranceClaimAttachmentUrlList(params); - if (res) { - if (res.length && res.length > 0) { - downloadWithZip( - res.map((item) => ({ data: setOSSLink(item) })), - '鐞嗚禂鍥剧墖瀵煎嚭' - ); - } else { - Message.errorMessage('鎶ユ鏁版嵁涓湭涓婁紶鍥剧墖锛�'); - } - } - } catch (error) {} -} - -const { form, claimCount, disabledYear } = useInsuranceClaimCount(); +const isLoading = ref(false); </script> <style lang="scss" scoped> @use '@/style/common.scss' as *; - -.home-top-view { - display: flex; - padding: 20px boleGetCssVar('proTable', 'filter-bar-horizontal-padding') 0; - border-bottom: 1px var(--el-border-color) var(--el-border-style); - background-color: #ffffff; - - .home-top-view-count { - font-size: 30px; - font-weight: bold; - } -} </style> -- Gitblit v1.9.1