|  |  |  | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </ProFormCol> | 
|---|
|  |  |  | <ProFormCol> | 
|---|
|  |  |  | <!-- <ProFormCol> | 
|---|
|  |  |  | <ProFormColItem :span="8"> | 
|---|
|  |  |  | <ProFormItemV2 label="结算单名称:" prop="settlementOrderName"> | 
|---|
|  |  |  | <ProFormText v-model="form.settlementOrderName"> </ProFormText> | 
|---|
|  |  |  | 
|---|
|  |  |  | ></ProFormDatePicker> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </ProFormCol> | 
|---|
|  |  |  | </ProFormCol> --> | 
|---|
|  |  |  | <ProFormCol> | 
|---|
|  |  |  | <ProFormColItem :span="8"> | 
|---|
|  |  |  | <ProFormItemV2 label="结算金额:" prop="settlementAmount"> | 
|---|
|  |  |  | <ProFormText v-model="form.settlementAmount"> </ProFormText> | 
|---|
|  |  |  | <ProFormInputNumber v-model="form.settlementAmount" format-value="money"> | 
|---|
|  |  |  | </ProFormInputNumber> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | <ProFormColItem :span="8"> | 
|---|
|  |  |  | <ProFormItemV2 label="实发金额:" prop="actualSettlementAmount"> | 
|---|
|  |  |  | <ProFormText v-model="form.actualSettlementAmount"> </ProFormText> | 
|---|
|  |  |  | <ProFormInputNumber v-model="form.actualSettlementAmount" format-value="money"> | 
|---|
|  |  |  | </ProFormInputNumber> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </ProFormColItem> | 
|---|
|  |  |  | </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"> | 
|---|
|  |  |  | <ChunkCell title="结算名单" style="flex: 1" class="settlement-user-list-chunk"> | 
|---|
|  |  |  | <ProTableQueryFilterBar @on-reset="reset"> | 
|---|
|  |  |  | <template #query> | 
|---|
|  |  |  | <QueryFilterItem> | 
|---|
|  |  |  | 
|---|
|  |  |  | </SearchInput> | 
|---|
|  |  |  | </QueryFilterItem> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | <template #btn v-if="isSettlement"> | 
|---|
|  |  |  | <BlFileUpload | 
|---|
|  |  |  | v-model:file-url="form.settlementUrl" | 
|---|
|  |  |  | ref="uploadRef" | 
|---|
|  |  |  | :showTip="false" | 
|---|
|  |  |  | :show-file-list="false" | 
|---|
|  |  |  | class="pro-table-operation-btn upload-style-btn" | 
|---|
|  |  |  | :on-success="(event) => handleUploadSuccess(event)" | 
|---|
|  |  |  | :limitFileSize="null" | 
|---|
|  |  |  | :limit="1" | 
|---|
|  |  |  | accept="xlsx,xls" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <el-button text type="primary" class="pro-table-operation-btn">导入</el-button> | 
|---|
|  |  |  | </BlFileUpload> | 
|---|
|  |  |  | <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="{ | 
|---|
|  |  |  | maxHeight: '400px', | 
|---|
|  |  |  | maxHeight: '250px', | 
|---|
|  |  |  | }" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | </ProTableV2> | 
|---|
|  |  |  | <div class="chuck-add-or-edit-actions"> | 
|---|
|  |  |  | <el-button class="chuck-add-or-edit-actions" @click="handleBack">取消</el-button> | 
|---|
|  |  |  | <el-button class="chuck-add-or-edit-actions" type="primary" @click="handleSubmit" | 
|---|
|  |  |  | >确认</el-button | 
|---|
|  |  |  | <el-button | 
|---|
|  |  |  | v-if=" | 
|---|
|  |  |  | isSettlement && | 
|---|
|  |  |  | (!!form.auditStatus || form.auditStatus === EnumTaskSettlementAuditStatus.Fail) | 
|---|
|  |  |  | " | 
|---|
|  |  |  | class="chuck-add-or-edit-actions" | 
|---|
|  |  |  | type="primary" | 
|---|
|  |  |  | @click="handleSubmit()" | 
|---|
|  |  |  | >结算申请</el-button | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <el-button | 
|---|
|  |  |  | v-if="isSettlement && form.auditStatus === EnumTaskSettlementAuditStatus.Pass" | 
|---|
|  |  |  | class="chuck-add-or-edit-actions" | 
|---|
|  |  |  | type="primary" | 
|---|
|  |  |  | @click="handleSubmit()" | 
|---|
|  |  |  | >提交结算</el-button | 
|---|
|  |  |  | > | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </ChunkCell> | 
|---|
|  |  |  | </AppContainer> | 
|---|
|  |  |  | <EditAccountInfoDialog v-bind="dialogProps"></EditAccountInfoDialog> | 
|---|
|  |  |  | <SettleDetailDialog v-bind="dialogSettleProps" /> | 
|---|
|  |  |  | </LoadingLayout> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | <script setup lang="ts"> | 
|---|
|  |  |  | import { | 
|---|
|  |  |  | LoadingLayout, | 
|---|
|  |  |  | AppContainer, | 
|---|
|  |  |  | AppScrollContainer, | 
|---|
|  |  |  | ChunkCell, | 
|---|
|  |  |  | ProForm, | 
|---|
|  |  |  | ProFormItemV2, | 
|---|
|  |  |  | 
|---|
|  |  |  | QueryFilterItem, | 
|---|
|  |  |  | ProTableQueryFilterBar, | 
|---|
|  |  |  | useFormDialog, | 
|---|
|  |  |  | XLSXUtils, | 
|---|
|  |  |  | BlFileUpload, | 
|---|
|  |  |  | UploadUserFile, | 
|---|
|  |  |  | } from '@bole-core/components'; | 
|---|
|  |  |  | import { SettlementListColumns } from './constants'; | 
|---|
|  |  |  | import { useQuery } from '@tanstack/vue-query'; | 
|---|
|  |  |  | 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, EnumTaskSettlementAuditStatus } 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 settlementAccess = route.query.settlementAccess ?? ''; | 
|---|
|  |  |  | const isSettlement = computed(() => !!settlement); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const form = reactive({ | 
|---|
|  |  |  | name: '', | 
|---|
|  |  |  | settlementAmount: '', | 
|---|
|  |  |  | actualSettlementAmount: '', | 
|---|
|  |  |  | settlementAmount: 0, | 
|---|
|  |  |  | actualSettlementAmount: 0, | 
|---|
|  |  |  | code: '', | 
|---|
|  |  |  | settlementOrderName: '', | 
|---|
|  |  |  | settlementOrderTime: '', | 
|---|
|  |  |  | settlementTaskUsers: [] as API.GetSettlementTaskUsersQueryResultItem[], | 
|---|
|  |  |  |  | 
|---|
|  |  |  | settlementUrl: [] as UploadUserFile[], | 
|---|
|  |  |  |  | 
|---|
|  |  |  | settlementAccess: '' as any as EnumEnterpriseWalletAccess, | 
|---|
|  |  |  | isSettlement: isSettlement.value, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | auditStatus: '' as any as EnumTaskSettlementAuditStatus, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { isLoading } = useQuery({ | 
|---|
|  |  |  | queryKey: ['taskServices/getSettlementTask', id], | 
|---|
|  |  |  | const BaseState = { | 
|---|
|  |  |  | loading: true, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const state = reactive({ ...BaseState }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { isLoading, refetch } = useQuery({ | 
|---|
|  |  |  | queryKey: ['taskUserServices/getSettlementTaskUsers', id, toRef(form, 'isSettlement')], | 
|---|
|  |  |  | queryFn: async () => { | 
|---|
|  |  |  | return await taskServices.getSettlementTask( | 
|---|
|  |  |  | { id: id }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | showLoading: false, | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | let params: API.APIgetSettlementTaskUsersParams = { | 
|---|
|  |  |  | id: id, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | // if (form.settlementAccess) { | 
|---|
|  |  |  | //   params.settlementAccess = Number(form.settlementAccess); | 
|---|
|  |  |  | // } | 
|---|
|  |  |  | if (form.isSettlement) { | 
|---|
|  |  |  | params.isImport = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return await taskUserServices.getSettlementTaskUsers(params, { | 
|---|
|  |  |  | showLoading: false, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | placeholderData: () => ({} as API.GetSettlementTaskQueryResult), | 
|---|
|  |  |  | onSuccess(data) { | 
|---|
|  |  |  | form.name = data.name; | 
|---|
|  |  |  | form.settlementAmount = toThousand(data.settlementAmount); | 
|---|
|  |  |  | form.actualSettlementAmount = toThousand(data.actualSettlementAmount); | 
|---|
|  |  |  | form.code = data.code; | 
|---|
|  |  |  | form.settlementOrderName = setOssFileName(data.settlementOrderName); | 
|---|
|  |  |  | form.settlementOrderTime = data.settlementOrderTime; | 
|---|
|  |  |  | placeholderData: () => ({} as API.GetSettlementTaskUsersQueryResult), | 
|---|
|  |  |  | onSuccess(res) { | 
|---|
|  |  |  | form.settlementTaskUsers = res?.data ?? []; | 
|---|
|  |  |  | if (res?.detail) { | 
|---|
|  |  |  | form.name = res?.detail?.name; | 
|---|
|  |  |  | form.settlementAmount = res?.detail?.settlementAmount ?? 0; | 
|---|
|  |  |  | form.actualSettlementAmount = res?.detail?.actualSettlementAmount ?? 0; | 
|---|
|  |  |  | form.code = res?.detail?.code; | 
|---|
|  |  |  | form.settlementAccess = res?.detail?.settlementAccess; | 
|---|
|  |  |  | form.auditStatus = res?.detail?.auditStatus; | 
|---|
|  |  |  | // 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: '错误信息', | 
|---|
|  |  |  | //       }, | 
|---|
|  |  |  | //     }); | 
|---|
|  |  |  | //   }); | 
|---|
|  |  |  | // } | 
|---|
|  |  |  | getList(); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | enabled: !!id, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | 
|---|
|  |  |  | } = useTable( | 
|---|
|  |  |  | async ({ pageIndex, pageSize }, extraParamState) => { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | let params: API.APIgetSettlementTaskUsersParams = { | 
|---|
|  |  |  | taskInfoId: id, | 
|---|
|  |  |  | settlementOrderUrl: url, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | let res = await taskUserServices.getSettlementTaskUsers(params); | 
|---|
|  |  |  | let list = [...form.settlementTaskUsers]; | 
|---|
|  |  |  | if (extraParamState.keywords) { | 
|---|
|  |  |  | res.data = res.data?.filter((item) => { | 
|---|
|  |  |  | list = list?.filter((item) => { | 
|---|
|  |  |  | return ( | 
|---|
|  |  |  | item.name.includes(extraParamState.keywords) || | 
|---|
|  |  |  | item.contactPhoneNumber.includes(extraParamState.keywords) || | 
|---|
|  |  |  | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return Promise.resolve({ | 
|---|
|  |  |  | pageModel: { | 
|---|
|  |  |  | rows: pageSize, | 
|---|
|  |  |  | page: pageIndex, | 
|---|
|  |  |  | totalCount: res.data.length, | 
|---|
|  |  |  | totalCount: list.length, | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | data: paginateList(res.data, pageIndex, pageSize), | 
|---|
|  |  |  | data: paginateList(list, pageIndex, pageSize), | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } catch (error) { | 
|---|
|  |  |  | console.log('error: ', error); | 
|---|
|  |  |  | 
|---|
|  |  |  | 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: '', | 
|---|
|  |  |  | totalWorkHours: null as number, | 
|---|
|  |  |  | settlementAccess: form.settlementAccess, | 
|---|
|  |  |  | // 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 ?? '', | 
|---|
|  |  |  | totalWorkHours: null as number, | 
|---|
|  |  |  | settlementAccess: form.settlementAccess, | 
|---|
|  |  |  | // 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.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, | 
|---|
|  |  |  | totalWorkHours: editForm.totalWorkHours, | 
|---|
|  |  |  | // bankBranch: editForm.bankBranch, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | let res = await taskServices.sureTaskSettlementOrder(params); | 
|---|
|  |  |  | let res = await taskServices.editTaskSettlementOrderRoster(params); | 
|---|
|  |  |  | if (res) { | 
|---|
|  |  |  | Message.successMessage('操作成功'); | 
|---|
|  |  |  | form.isSettlement = false; | 
|---|
|  |  |  | 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('操作成功'); | 
|---|
|  |  |  | form.isSettlement = false; | 
|---|
|  |  |  | refetch(); | 
|---|
|  |  |  | getList(paginationState.pageIndex); | 
|---|
|  |  |  | if (res?.errors?.length > 0) { | 
|---|
|  |  |  | Message.tipMessage('存在导入错误的数据,是否导出?').then(() => { | 
|---|
|  |  |  | XLSXUtils.exportToXLSX({ | 
|---|
|  |  |  | workbookDataList: res.errors, | 
|---|
|  |  |  | fileName: '结算导入-错误数据', | 
|---|
|  |  |  | workbookHeaderMap: { | 
|---|
|  |  |  | name: '姓名', | 
|---|
|  |  |  | identity: '身份证号', | 
|---|
|  |  |  | contactPhoneNumber: '手机号', | 
|---|
|  |  |  | bank: '所属银行', | 
|---|
|  |  |  | bankBranch: '所属支行', | 
|---|
|  |  |  | receiveAccount: '收款账户', | 
|---|
|  |  |  | settlementAmount: '结算金额', | 
|---|
|  |  |  | actualSettlementAmount: '实发金额', | 
|---|
|  |  |  | 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, | 
|---|
|  |  |  | settlementAccess: form.settlementAccess, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { | 
|---|
|  |  |  | dialogProps: dialogSettleProps, | 
|---|
|  |  |  | handleEdit: handleSettleEdit, | 
|---|
|  |  |  | editForm: settleEditForm, | 
|---|
|  |  |  | } = useFormDialog({ | 
|---|
|  |  |  | onConfirm: handleSettle, | 
|---|
|  |  |  | defaultFormParams: { | 
|---|
|  |  |  | id: '', | 
|---|
|  |  |  | name: '', | 
|---|
|  |  |  | code: '', | 
|---|
|  |  |  | settlementUserCount: 0, | 
|---|
|  |  |  | actualSettlementAmount: 0, | 
|---|
|  |  |  | settlementAccess: '' as any as EnumEnterpriseWalletAccess, | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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) {} | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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, { | 
|---|
|  |  |  | name: 'ServiceChargeManageList', | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | onMounted(() => { | 
|---|
|  |  |  | getList(); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style lang="scss" scoped> | 
|---|
|  |  |  | 
|---|
|  |  |  | margin: 0 auto; | 
|---|
|  |  |  | padding: 24px 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .settlement-user-list-chunk { | 
|---|
|  |  |  | :deep() { | 
|---|
|  |  |  | .no-data img { | 
|---|
|  |  |  | width: 280px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </style> | 
|---|
|  |  |  | <style lang="scss"> | 
|---|
|  |  |  | .text-over-tooltip-content { | 
|---|