From 75d473492fc9d818de85eaa0e934cdb5d309f441 Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期三, 30 七月 2025 17:37:08 +0800 Subject: [PATCH] feat: 页面 --- src/views/ServiceChargeManage/constants/columns.ts | 86 ++++++++++ src/views/ServiceChargeManage/ServiceChargeDetail.vue | 46 +++++ src/views/ServiceChargeManage/ServiceChargeManage.vue | 224 ++++++++++++++++++++++++++++ src/router/index.ts | 54 ++++++ src/views/ServiceChargeManage/constants/index.ts | 1 src/views/ServiceChargeManage/ServiceChargeSettle.vue | 46 +++++ 6 files changed, 457 insertions(+), 0 deletions(-) diff --git a/src/router/index.ts b/src/router/index.ts index a3b5f8b..0ee970d 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -218,6 +218,60 @@ ], }, { + path: '/ServiceChargeManage', + redirect: 'noRedirect', + component: Layout, + hidden: false, + alwaysShow: true, + meta: { + rank: 10040, + title: '鏈嶅姟璐圭鐞�', + rootMenu: true, + icon: 'home', + }, + children: [ + { + path: '/ServiceChargeManageList', + name: 'ServiceChargeManageList', + hidden: false, + alwaysShow: true, + component: () => import('@/views/ServiceChargeManage/ServiceChargeManage.vue'), + meta: { + rank: 10041, + title: '鏈嶅姟璐圭鐞�', + // rootMenu: true, + icon: 'home', + }, + }, + { + path: '/ServiceChargeSettle', + name: 'ServiceChargeSettle', + hidden: false, + alwaysShow: true, + component: () => import('@/views/ServiceChargeManage/ServiceChargeSettle.vue'), + meta: { + rank: 10042, + title: '缁撶畻', + // rootMenu: true, + icon: 'home', + }, + }, + { + path: '/ServiceChargeDetail', + name: 'ServiceChargeDetail', + hidden: false, + alwaysShow: true, + component: () => import('@/views/ServiceChargeManage/ServiceChargeDetail.vue'), + meta: { + rank: 10042, + title: '璇︽儏', + // rootMenu: true, + icon: 'home', + }, + }, + ], + }, + { path: '/Login', name: 'Login', hidden: true, diff --git a/src/views/ServiceChargeManage/ServiceChargeDetail.vue b/src/views/ServiceChargeManage/ServiceChargeDetail.vue new file mode 100644 index 0000000..5d19a9e --- /dev/null +++ b/src/views/ServiceChargeManage/ServiceChargeDetail.vue @@ -0,0 +1,46 @@ +<template> + <LoadingLayout :loading="isLoading"> + <AppScrollContainer> + <ChunkCell title="缁撶畻鍗曡鎯�"> </ChunkCell> + <ChunkCell title="缁撶畻娴佺▼"> </ChunkCell> + <ChunkCell title="缁撶畻鍚嶅崟"> </ChunkCell> + </AppScrollContainer> + </LoadingLayout> +</template> +<script setup lang="ts"> +import { LoadingLayout, AppScrollContainer, ChunkCell } from '@bole-core/components'; +import {} from '@/constants'; +import * as flexTaskServices from '@/services/api/FlexTask'; +import { useQuery } from '@tanstack/vue-query'; + +defineOptions({ + name: 'ServiceChargeDetail', +}); + +const route = useRoute(); +const id = (route.params.id as string) ?? ''; + +const state = reactive({ + loading: true, +}); + +const { isLoading } = useQuery({ + queryKey: ['flexTaskServices/getFlexTaskDetail', id], + queryFn: async () => { + return await flexTaskServices.getFlexTaskDetail( + { id: id }, + { + showLoading: false, + } + ); + }, + onSuccess(data) {}, + enabled: !!id, +}); + +onMounted(() => {}); +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; +</style> diff --git a/src/views/ServiceChargeManage/ServiceChargeManage.vue b/src/views/ServiceChargeManage/ServiceChargeManage.vue new file mode 100644 index 0000000..5041efb --- /dev/null +++ b/src/views/ServiceChargeManage/ServiceChargeManage.vue @@ -0,0 +1,224 @@ +<template> + <LoadingLayout :loading="state.loading"> + <AppContainer> + <ProTableQueryFilterBar @on-reset="reset"> + <template #query> + <QueryFilterItem tip-content="缁撶畻鍗曠姸鎬�"> + <FieldRadio + v-model="extraParamState.flexEnterpriseSettingStatus" + :value-enum="[ + { label: '宸插畨鎺�', value: 1 }, + { label: '寰呭畨鎺�', value: 0 }, + ]" + buttonStyle + showAllBtn + @change="getList()" + /> + </QueryFilterItem> + <QueryFilterItem tip-content="缁撶畻鐘舵��"> + <FieldRadio + v-model="extraParamState.flexEnterpriseSettingStatus" + :value-enum="[ + { label: '宸插畨鎺�', value: 1 }, + { label: '寰呭畨鎺�', value: 0 }, + ]" + buttonStyle + showAllBtn + @change="getList()" + /> + </QueryFilterItem> + <QueryFilterItem> + <FieldDatePicker + v-model="extraParamState.flexEnterpriseSettingStatus" + type="daterange" + range-separator="~" + start-placeholder="璧峰鏃ユ湡" + end-placeholder="鎴鏃ユ湡" + clearable + @change="getList()" + tooltipContent="鍒涘缓鏃堕棿" + ></FieldDatePicker> + </QueryFilterItem> + <QueryFilterItem> + <SearchInput + v-model="extraParamState.searchWord" + style="width: 250px" + placeholder="浠诲姟鍚嶇О" + @on-click-search="getList" + @keyup.enter="getList()" + > + </SearchInput> + </QueryFilterItem> + </template> + <template #btn> + <el-button type="primary" link @click="handleDownloadTemplate()">缁撶畻鍗曟ā鏉�</el-button> + <el-button type="primary" @click="handleDownloadTemplate()">涓婁紶缁撶畻鍗�</el-button> + <el-button type="primary" @click="handleDownloadTemplate()">瀵煎嚭</el-button> + </template> + </ProTableQueryFilterBar> + <ProTableV2 + v-bind="proTableProps" + :columns="ServiceChargeManageColumns" + :operationBtns="operationBtns" + > + <template #operationBtn-uploadBtn="{ data, row }"> + <BlFileUpload + v-model:file-url="row.fileUrl" + :limitFileSize="2" + :limit="1" + accept="doc,docx" + ref="uploadRef" + :showTip="false" + :on-success="(response) => handleUpload(response, row)" + :show-file-list="false" + class="pro-table-operation-btn upload-style-btn" + > + <el-button link type="primary">涓婁紶</el-button> + </BlFileUpload> + </template> + </ProTableV2> + </AppContainer> + </LoadingLayout> +</template> + +<script setup lang="ts"> +import { + ProTableQueryFilterBar, + ProTableV2, + SearchInput, + LoadingLayout, + AppContainer, + QueryFilterItem, + useTable, + FieldDatePicker, + FieldRadio, + defineOperationBtns, + BlFileUpload, +} from '@bole-core/components'; +import * as flexEnterpriseServices from '@/services/api/FlexEnterprise'; +import { ServiceChargeManageColumns } from './constants'; +import { FlexEnterpriseSettingStatus, Gender } from '@/constants'; +import { OrderInputType } from '@bole-core/core'; +import { downloadFileByUrl } from '@/utils'; + +defineOptions({ + name: 'ServiceChargeManage', +}); + +const operationBtns = defineOperationBtns([ + { + data: { + enCode: 'uploadBtn', + name: '涓婁紶', + }, + }, + { + data: { + enCode: 'settleBtn', + name: '缁撶畻', + }, + emits: { + onClick: (role) => goSettle(role), + }, + }, + { + data: { + enCode: 'detailBtn', + name: '璇︽儏', + }, + emits: { + onClick: (role) => goDetail(role), + }, + }, + { + data: { + enCode: 'exportBtn', + name: '瀵煎嚭', + }, + emits: { + onClick: (role) => handleExport(role), + }, + }, +]); + +const router = useRouter(); + +const BaseState = { + loading: true, +}; + +const state = reactive({ ...BaseState }); + +onMounted(async () => { + await getList(); + state.loading = false; +}); + +const { + getDataSource: getList, + proTableProps, + paginationState, + extraParamState, + reset, +} = useTable( + async ({ pageIndex, pageSize }, extraParamState) => { + try { + let params: API.GetFlexEnterpriseInput = { + pageModel: { + rows: pageSize, + page: pageIndex, + orderInput: extraParamState.orderInput, + }, + flexEnterpriseSettingStatus: extraParamState.flexEnterpriseSettingStatus, + searchWord: extraParamState.searchWord, + }; + + let res = await flexEnterpriseServices.getFlexEnterpriseList(params, { + showLoading: !state.loading, + }); + return res; + } catch (error) { + console.log('error: ', error); + } + }, + { + defaultExtraParams: { + searchWord: '', + orderInput: [{ property: 'id', order: OrderInputType.Desc }], + flexEnterpriseSettingStatus: '' as any as FlexEnterpriseSettingStatus, + }, + queryKey: ['flexEnterpriseServices/getFlexEnterpriseList'], + columnsRenderProps: {}, + } +); + +function goSettle(row) { + router.push({ + name: 'ServiceChargeSettle', + query: { + id: row.id, + }, + }); +} + +function goDetail(row) { + router.push({ + name: 'ServiceChargeDetail', + query: { + id: row.id, + }, + }); +} + +function handleUpload(val, row) { + console.log('val: ', val); +} + +function handleExport(val) { + console.log('val: ', val); +} + +function handleDownloadTemplate() { + downloadFileByUrl('', '缁撶畻鍗曟ā鏉�'); +} +</script> diff --git a/src/views/ServiceChargeManage/ServiceChargeSettle.vue b/src/views/ServiceChargeManage/ServiceChargeSettle.vue new file mode 100644 index 0000000..0a4bf99 --- /dev/null +++ b/src/views/ServiceChargeManage/ServiceChargeSettle.vue @@ -0,0 +1,46 @@ +<template> + <LoadingLayout :loading="isLoading"> + <AppScrollContainer> + <ChunkCell title="浠樻鏂逛俊鎭�"> </ChunkCell> + <ChunkCell title="鏀舵鏂逛俊鎭�"> </ChunkCell> + <ChunkCell title="杞处淇℃伅"> </ChunkCell> + </AppScrollContainer> + </LoadingLayout> +</template> +<script setup lang="ts"> +import { LoadingLayout, AppScrollContainer, ChunkCell } from '@bole-core/components'; +import {} from '@/constants'; +import * as flexTaskServices from '@/services/api/FlexTask'; +import { useQuery } from '@tanstack/vue-query'; + +defineOptions({ + name: 'ServiceChargeSettle', +}); + +const route = useRoute(); +const id = (route.params.id as string) ?? ''; + +const state = reactive({ + loading: true, +}); + +const { isLoading } = useQuery({ + queryKey: ['flexTaskServices/getFlexTaskDetail', id], + queryFn: async () => { + return await flexTaskServices.getFlexTaskDetail( + { id: id }, + { + showLoading: false, + } + ); + }, + onSuccess(data) {}, + enabled: !!id, +}); + +onMounted(() => {}); +</script> + +<style lang="scss" scoped> +@use '@/style/common.scss' as *; +</style> diff --git a/src/views/ServiceChargeManage/constants/columns.ts b/src/views/ServiceChargeManage/constants/columns.ts new file mode 100644 index 0000000..de27a3a --- /dev/null +++ b/src/views/ServiceChargeManage/constants/columns.ts @@ -0,0 +1,86 @@ +import { defineColumns } from '@bole-core/components'; + +export const ServiceChargeManageColumns = defineColumns([ + { + id: '1', + enCode: 'name', + name: '鎵�灞炰换鍔�', + width: 180, + }, + { + id: '2', + enCode: 'name', + name: '鍙戞斁鏂瑰紡', + width: 180, + }, + { + id: '3', + enCode: 'name', + name: '鏀舵浜�', + }, + { + id: '4', + enCode: 'name', + name: '鏀舵璐﹀彿', + }, + { + id: '5', + enCode: 'name', + name: '缁撶畻鍗曠姸鎬�', + width: 140, + }, + { + id: '6', + enCode: 'name', + name: '缁撶畻鍗曞悕绉�', + width: 140, + }, + { + id: '7', + enCode: 'signNum', + name: '涓婁紶鏃堕棿', + width: 140, + }, + { + id: '8', + enCode: 'name', + name: '缁撶畻鐘舵��', + width: 140, + }, + { + id: '9', + enCode: 'name', + name: '瀹炲彂閲戦', + width: 160, + }, + { + id: '10', + enCode: 'name', + name: '缁撶畻閲戦', + width: 160, + }, + { + id: '11', + enCode: 'name', + name: '澶辫触閲戦', + width: 160, + }, + { + id: '12', + enCode: 'name', + name: '閫�娆鹃噾棰�', + width: 160, + }, + { + id: '13', + enCode: 'name', + name: '缁撶畻鏃堕棿', + width: 160, + }, + { + id: '14', + enCode: 'name', + name: '澶囨敞', + width: 160, + }, +]); diff --git a/src/views/ServiceChargeManage/constants/index.ts b/src/views/ServiceChargeManage/constants/index.ts new file mode 100644 index 0000000..a7f066b --- /dev/null +++ b/src/views/ServiceChargeManage/constants/index.ts @@ -0,0 +1 @@ +export * from './columns'; -- Gitblit v1.9.1