| | |
| | | </ProFormCol> |
| | | </ProForm> |
| | | </ChunkCell> |
| | | <!-- <ChunkCell title="结算流程"> |
| | | <div class="step-wrapper"> |
| | | <el-steps :active="1" align-center finish-status="process"> |
| | | <el-step title="结算单上传" :icon="Edit"> |
| | | <template #description> |
| | | <div>创建人:{{ form.name }}</div> |
| | | <div>时间:{{ form.name }}</div> |
| | | <TextOverTooltip>备注:{{ form.name }}</TextOverTooltip> |
| | | </template> |
| | | </el-step> |
| | | <el-step title="结算付款" :icon="Upload"> |
| | | <template #description> |
| | | <div>创建人:{{ form.name }}</div> |
| | | <div>时间:{{ form.name }}</div> |
| | | <TextOverTooltip |
| | | >备注:{{ 'form.nameform.nameform.eform.nameform.nameform.name' }}</TextOverTooltip |
| | | > |
| | | </template> |
| | | </el-step> |
| | | </el-steps> |
| | | </div> |
| | | </ChunkCell> --> |
| | | <ChunkCell title="结算名单" style="flex: 1" class="settlement-user-list-chunk"> |
| | | <ProTableQueryFilterBar @on-reset="reset"> |
| | | <template #query> |
| | |
| | | </SearchInput> |
| | | </QueryFilterItem> |
| | | </template> |
| | | <template #btn> |
| | | <template #btn v-if="isSettlement"> |
| | | <BlFileUpload |
| | | v-model:file-url="form.settlementUrl" |
| | | ref="uploadRef" |
| | |
| | | :limit="1" |
| | | accept="xlsx,xls" |
| | | > |
| | | <el-button text type="primary" class="pro-table-operation-btn">上传</el-button> |
| | | <el-button text type="primary" class="pro-table-operation-btn">导入</el-button> |
| | | </BlFileUpload> |
| | | <el-button type="primary" link @click="handleAdd()">导出</el-button> |
| | | <el-button type="primary" link @click="handleExport()">导出</el-button> |
| | | </template> |
| | | </ProTableQueryFilterBar> |
| | | <ProTableV2 |
| | | v-bind="proTableProps" |
| | | :columns="SettlementListColumns" |
| | | :show-operation-column="false" |
| | | :operationBtns="operationBtns" |
| | | :auto-height="false" |
| | | ref="proTable" |
| | | :tableProps="{ |
| | |
| | | v-if="isSettlement" |
| | | class="chuck-add-or-edit-actions" |
| | | type="primary" |
| | | @click="handleSubmit" |
| | | @click="handleSubmit()" |
| | | >结算</el-button |
| | | > |
| | | </div> |
| | | </ChunkCell> |
| | | </AppContainer> |
| | | <EditAccountInfoDialog v-bind="dialogProps"></EditAccountInfoDialog> |
| | | <SettleDetailDialog v-bind="dialogSettleProps" /> |
| | | </LoadingLayout> |
| | | </template> |
| | | <script setup lang="ts"> |
| | |
| | | import * as taskServices from '@/services/api/task'; |
| | | import * as taskUserServices from '@/services/api/taskUser'; |
| | | import EditAccountInfoDialog from './components/EditAccountInfoDialog.vue'; |
| | | import SettleDetailDialog from './components/SettleDetailDialog.vue'; |
| | | import { Message } from '@bole-core/core'; |
| | | import { paginateList, setOssFileName, toThousand } from '@/utils'; |
| | | import { SettlementReceiveStatusText } from '@/constants'; |
| | | import { |
| | | downloadFile, |
| | | downloadFileByUrl, |
| | | paginateList, |
| | | setOssFileName, |
| | | setOSSLink, |
| | | toThousand, |
| | | } from '@/utils'; |
| | | import _ from 'lodash'; |
| | | |
| | | defineOptions({ |
| | | name: 'ServiceChargeDetail', |
| | |
| | | emits: { |
| | | onClick: (role) => openDialog(role), |
| | | }, |
| | | extraProps: { |
| | | hide: () => !isSettlement.value, |
| | | }, |
| | | }, |
| | | ]); |
| | | |
| | | const route = useRoute(); |
| | | const id = (route.params.id as string) ?? ''; |
| | | const url = (route.query.url as string) ?? ''; |
| | | const settlement = (route.query.settlement as string) ?? ''; |
| | | |
| | | const isSettlement = computed(() => !!url || !!settlement); |
| | | const isSettlement = computed(() => !!settlement); |
| | | |
| | | const form = reactive({ |
| | | name: '', |
| | |
| | | |
| | | const state = reactive({ ...BaseState }); |
| | | |
| | | const { isLoading } = useQuery({ |
| | | queryKey: ['taskUserServices/getSettlementTaskUsers', id, url], |
| | | const { isLoading, refetch } = useQuery({ |
| | | queryKey: ['taskUserServices/getSettlementTaskUsers', id], |
| | | queryFn: async () => { |
| | | return await taskUserServices.getSettlementTaskUsers( |
| | | { taskInfoId: id, settlementOrderUrl: url }, |
| | | { id: id }, |
| | | { |
| | | showLoading: false, |
| | | } |
| | |
| | | form.settlementAmount = res?.detail?.settlementAmount ?? 0; |
| | | form.actualSettlementAmount = res?.detail?.actualSettlementAmount ?? 0; |
| | | form.code = res?.detail?.code; |
| | | form.settlementOrderName = setOssFileName(res?.detail?.settlementOrderName); |
| | | form.settlementOrderTime = res?.detail?.settlementOrderTime ?? ''; |
| | | // form.settlementOrderName = setOssFileName(res?.detail?.settlementOrderName); |
| | | // form.settlementOrderTime = res?.detail?.settlementOrderTime ?? ''; |
| | | } |
| | | if (res?.errors?.length > 0) { |
| | | Message.tipMessage('存在导入错误的数据,是否导出?').then(() => { |
| | | XLSXUtils.exportToXLSX({ |
| | | workbookDataList: res.errors, |
| | | fileName: '结算导入-错误数据', |
| | | workbookHeaderMap: { |
| | | name: '姓名', |
| | | identity: '身份证号', |
| | | taskName: '任务名称', |
| | | settlementAmount: '结算金额', |
| | | actualSettlementAmount: '实发金额', |
| | | receiveAccount: '收款账户', |
| | | bank: '所属银行', |
| | | bankBranch: '开户支行名称', |
| | | errorMessage: '错误信息', |
| | | }, |
| | | }); |
| | | }); |
| | | } |
| | | // if (res?.errors?.length > 0) { |
| | | // Message.tipMessage('存在导入错误的数据,是否导出?').then(() => { |
| | | // XLSXUtils.exportToXLSX({ |
| | | // workbookDataList: res.errors, |
| | | // fileName: '结算导入-错误数据', |
| | | // workbookHeaderMap: { |
| | | // name: '姓名', |
| | | // identity: '身份证号', |
| | | // taskName: '任务名称', |
| | | // settlementAmount: '结算金额', |
| | | // actualSettlementAmount: '实发金额', |
| | | // receiveAccount: '收款账户', |
| | | // bank: '所属银行', |
| | | // bankBranch: '开户支行名称', |
| | | // errorMessage: '错误信息', |
| | | // }, |
| | | // }); |
| | | // }); |
| | | // } |
| | | getList(); |
| | | }, |
| | | enabled: !!id, |
| | |
| | | settlementTime: { type: 'date' }, |
| | | settlementAmount: { type: 'money' }, |
| | | actualSettlementAmount: { type: 'money' }, |
| | | settlementReceiveStatus: { type: 'enum', valueEnum: SettlementReceiveStatusText }, |
| | | }, |
| | | } |
| | | ); |
| | |
| | | onConfirm: handleAddOrEdit, |
| | | defaultFormParams: { |
| | | id: '', |
| | | name: '', |
| | | settlementAmount: null as number, |
| | | actualSettlementAmount: null as number, |
| | | receiveAccount: '', |
| | | bank: '', |
| | | bankBranch: '', |
| | | }, |
| | | }); |
| | | |
| | | function openDialog(row?) { |
| | | function openDialog(row?: API.GetSettlementTaskUsersQueryResultItem) { |
| | | if (row) { |
| | | handleEdit({ |
| | | id: row?.id, |
| | | name: row?.name, |
| | | settlementAmount: row?.settlementAmount ?? null, |
| | | actualSettlementAmount: row?.actualSettlementAmount ?? null, |
| | | receiveAccount: row?.receiveAccount ?? '', |
| | | bank: row?.bank ?? '', |
| | | bankBranch: row?.bankBranch ?? '', |
| | | }); |
| | | } |
| | | } |
| | | |
| | | async function handleAddOrEdit() {} |
| | | |
| | | async function handleSubmit() { |
| | | async function handleAddOrEdit() { |
| | | try { |
| | | let params: API.SureTaskSettlementOrderCommand = { |
| | | taskInfoId: id, |
| | | settlementOrderUrl: url, |
| | | taskInfoUsers: |
| | | proTableProps.value.tableData?.length > 0 |
| | | ? proTableProps.value.tableData.map( |
| | | (x) => ({ ...x } as API.SureTaskSettlementOrderCommandUser) |
| | | ) |
| | | : [], |
| | | let params: API.EditTaskSettlementOrderRosterCommand = { |
| | | id: editForm.id, |
| | | settlementAmount: editForm.settlementAmount, |
| | | actualSettlementAmount: editForm.actualSettlementAmount, |
| | | receiveAccount: editForm.receiveAccount, |
| | | bank: editForm.bank, |
| | | bankBranch: editForm.bankBranch, |
| | | }; |
| | | let res = await taskServices.sureTaskSettlementOrder(params); |
| | | let res = await taskServices.editTaskSettlementOrderRoster(params); |
| | | if (res) { |
| | | Message.successMessage('操作成功'); |
| | | refetch(); |
| | | getList(paginationState.pageIndex); |
| | | } |
| | | } catch (error) {} |
| | | } |
| | | |
| | | function handleUploadSuccess(response: UploadUserFile & { file: File & { uid: number } }) { |
| | | if (response.path) { |
| | | importTaskSettlementOrderRosters(response.path); |
| | | } |
| | | } |
| | | |
| | | async function importTaskSettlementOrderRosters(url: string) { |
| | | try { |
| | | let params: API.ImportTaskSettlementOrderRostersCommand = { |
| | | id: id, |
| | | url: url, |
| | | }; |
| | | let res = await taskServices.importTaskSettlementOrderRosters(params); |
| | | if (res) { |
| | | Message.successMessage('操作成功'); |
| | | refetch(); |
| | | getList(paginationState.pageIndex); |
| | | if (res?.errors?.length > 0) { |
| | | Message.tipMessage('存在导入错误的数据,是否导出?').then(() => { |
| | | XLSXUtils.exportToXLSX({ |
| | | workbookDataList: res.errors, |
| | | fileName: '结算导入-错误数据', |
| | | workbookHeaderMap: { |
| | | name: '姓名', |
| | | identity: '身份证号', |
| | | taskName: '任务名称', |
| | | settlementAmount: '结算金额', |
| | | actualSettlementAmount: '实发金额', |
| | | receiveAccount: '收款账户', |
| | | bank: '所属银行', |
| | | bankBranch: '开户支行名称', |
| | | errorMessage: '错误信息', |
| | | }, |
| | | }); |
| | | }); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | } finally { |
| | | form.settlementUrl = [] as UploadUserFile[]; |
| | | } |
| | | } |
| | | |
| | | function handleSubmit() { |
| | | handleSettleEdit({ |
| | | id: id, |
| | | name: form.name, |
| | | code: form.code, |
| | | settlementUserCount: form.settlementTaskUsers.length, |
| | | actualSettlementAmount: form.actualSettlementAmount, |
| | | }); |
| | | } |
| | | |
| | | const { |
| | | dialogProps: dialogSettleProps, |
| | | handleEdit: handleSettleEdit, |
| | | editForm: settleEditForm, |
| | | } = useFormDialog({ |
| | | onConfirm: handleSettle, |
| | | defaultFormParams: { |
| | | id: '', |
| | | name: '', |
| | | code: '', |
| | | settlementUserCount: 0, |
| | | actualSettlementAmount: 0, |
| | | }, |
| | | }); |
| | | |
| | | async function handleSettle() { |
| | | sureTaskSettlementOrder(); |
| | | } |
| | | |
| | | async function sureTaskSettlementOrder() { |
| | | try { |
| | | let params: API.SureTaskSettlementCommand = { |
| | | taskInfoId: id, |
| | | }; |
| | | let res = await taskServices.sureTaskSettlement(params); |
| | | if (res) { |
| | | Message.successMessage('操作成功'); |
| | | eventContext.emit('sureTaskSettlementOrder'); |
| | |
| | | } catch (error) {} |
| | | } |
| | | |
| | | function handleUploadSuccess(response: UploadUserFile & { file: File & { uid: number } }) { |
| | | if (response.path) { |
| | | // |
| | | } |
| | | } |
| | | const handleExport = _.debounce( |
| | | async () => { |
| | | if (paginationState.total === 0) { |
| | | Message.warnMessage('没有数据可以导出哦~'); |
| | | return; |
| | | } |
| | | try { |
| | | let params: API.ExportTaskSettlementOrderRostersCommand = { |
| | | id: id, |
| | | }; |
| | | let res = await taskServices.exportTaskSettlementOrderRosters(params); |
| | | if (res) { |
| | | downloadFileByUrl(setOSSLink(res), `${form.name}-${form.code}`); |
| | | } |
| | | } catch (error) {} |
| | | }, |
| | | 1000, |
| | | { leading: true, trailing: false } |
| | | ); |
| | | |
| | | function handleBack() { |
| | | closeViewPush(route, { |