兼职凭证优化
This commit is contained in:
@ -64,3 +64,11 @@ export function generateVoucherSubmit(data: any) {
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteVoucherSubmit(data: any) {
|
||||
return request({
|
||||
url: '/employee/salary/delete-voucher',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
@ -211,7 +211,7 @@
|
||||
{{ formatAmount(scope.row.businessExpenditureCosts) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="收票凭证" align="center" width="60"
|
||||
<el-table-column label="收票凭证" align="center" width="100"
|
||||
:show-overflow-tooltip="true" fixed="right">
|
||||
<template #default="scope">
|
||||
<el-button v-if="scope.row.employeeType === 'PARTTIME' && (scope.row.accrualVoucherId === null ||scope.row.accrualVoucherId ==='')"
|
||||
@ -224,9 +224,14 @@
|
||||
@click="viewVoucher(scope.row.accrualVoucherId)">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button v-if="scope.row.employeeType === 'PARTTIME' && scope.row.accrualVoucherId !== null &&scope.row.accrualVoucherId !==''"
|
||||
type="text"
|
||||
@click="deleteVoucher(scope.row,2)">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="发放凭证" align="center" width="60"
|
||||
<el-table-column label="发放凭证" align="center" width="100"
|
||||
:show-overflow-tooltip="true" fixed="right">
|
||||
<template #default="scope">
|
||||
<el-button v-if="scope.row.employeeType === 'PARTTIME' && (scope.row.salaryVoucherId === null ||scope.row.salaryVoucherId ==='')"
|
||||
@ -239,6 +244,11 @@
|
||||
@click="viewVoucher(scope.row.salaryVoucherId)">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button v-if="scope.row.employeeType === 'PARTTIME' && scope.row.salaryVoucherId !== null &&scope.row.salaryVoucherId !==''"
|
||||
type="text"
|
||||
@click="deleteVoucher(scope.row,3)">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="操作" align="center" fixed="right" width="180">
|
||||
@ -296,7 +306,7 @@
|
||||
<script setup lang="ts">
|
||||
import {reactive, ref, toRefs, getCurrentInstance} from "vue";
|
||||
import {useI18n} from "vue-i18n";
|
||||
import {delSalary, exportSalary, fetchPage, salarySummary, generateVoucherSubmit} from "@/api/system/hr/employee-salary";
|
||||
import {delSalary, exportSalary, fetchPage, salarySummary, generateVoucherSubmit,deleteVoucherSubmit} from "@/api/system/hr/employee-salary";
|
||||
import {ElForm} from "element-plus";
|
||||
import modal from "@/plugins/modal";
|
||||
import {formatAmount} from "@/utils";
|
||||
@ -589,6 +599,15 @@ function generateVoucher(row: any, voucherType: number) {
|
||||
});
|
||||
}
|
||||
|
||||
function deleteVoucher(row: any, voucherType: number) {
|
||||
deleteVoucherSubmit({id: row.id, voucherType: voucherType}).then((res: any) => {
|
||||
if (res.code === 0) {
|
||||
getList();
|
||||
modal.msgSuccess("操作成功");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/** 查看操作 */
|
||||
function viewVoucher(voucherId: any) {
|
||||
voucherApis.getOneVoucher(voucherId).then((response: any) => {
|
||||
|
||||
@ -1,307 +0,0 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-card class="common-card query-box">
|
||||
<div class="queryForm">
|
||||
<el-form :model="queryParams" ref="queryRef" :inline="true" label-width="68px">
|
||||
<el-form-item label="凭证类型">
|
||||
<el-select v-model="queryParams.voucherType" placeholder="" clearable style="width: 200px">
|
||||
<el-option
|
||||
v-for="dict in voucherTypes"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery">{{ t('org.button.query') }}</el-button>
|
||||
<el-button @click="resetQuery">{{ t('org.button.reset') }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="common-card">
|
||||
<div class="btn-form">
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="handleAdd"
|
||||
>{{ t('org.button.add') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
@click="onDelete"
|
||||
:disabled="ids.length === 0"
|
||||
>{{ t('org.button.deleteBatch') }}
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange" border>
|
||||
<el-table-column type="selection" width="55" align="center"/>
|
||||
<el-table-column prop="voucherType" label="凭证类型" align="left" min-width="50"
|
||||
:show-overflow-tooltip="true">
|
||||
<template #default="scope">
|
||||
<dict-tag-number :options="voucherTypes" :value="scope.row.voucherType"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="wordHead" label="凭证字" align="left" min-width="50"
|
||||
:show-overflow-tooltip="true">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="wordHeads" :value="scope.row.wordHead"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column prop="summary" label="摘要" align="left" min-width="100"
|
||||
:show-overflow-tooltip="true"></el-table-column>
|
||||
<el-table-column prop="direction" label="借/贷" align="left" min-width="50">
|
||||
<template #default="scope">
|
||||
<el-tag type="warning" v-if="scope.row.direction == 0">{{ t('subjectDirectionNone') }}</el-tag>
|
||||
<el-tag type="warning" v-if="scope.row.direction == 1">{{ t('subjectDebit') }}</el-tag>
|
||||
<el-tag type="success" v-if="scope.row.direction == 2">{{ t('subjectCredit') }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="subjectName" label="科目" align="left" min-width="100"
|
||||
:show-overflow-tooltip="true">
|
||||
<template #default="scope">
|
||||
{{ scope.row.subjectCode+" "+scope.row.subjectName }}
|
||||
</template>
|
||||
</el-table-column>-->
|
||||
<!-- <el-table-column prop="status" :label="t('org.status')" align="center" min-width="40">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.status === 1"><el-icon color="green"><SuccessFilled
|
||||
class="success"/></el-icon></span>
|
||||
<span v-if="scope.row.status === 0"><el-icon color="#808080"><CircleCloseFilled/></el-icon></span>
|
||||
</template>
|
||||
</el-table-column>-->
|
||||
<el-table-column prop="status" label="状态" align="center" min-width="20">
|
||||
<template #default="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.status"
|
||||
inline-prompt
|
||||
active-text="启用"
|
||||
inactive-text="禁用"
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
style="--el-switch-on-color: #13ce66;"
|
||||
@change="handleStatusChange(scope.row, $event)"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="$t('jbx.text.action')" width="80" align="center">
|
||||
<template #default="scope">
|
||||
<el-tooltip content="编辑">
|
||||
<el-button link icon="Edit" @click="handleUpdate(scope.row)"></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="移除">
|
||||
<el-button link icon="Delete" type="danger" @click="onDelete(scope.row)"></el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNumber"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
:page-sizes="queryParams.pageSizeOptions"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</el-card>
|
||||
<!-- <edit-form :title="title" :open="open"
|
||||
:form-id="id"
|
||||
:dept-options="deptOptions"
|
||||
:voucher-types="voucherTypes"
|
||||
:word-heads="wordHeads"
|
||||
@dialogOfClosedMethods="dialogOfClosedMethods"></edit-form>-->
|
||||
<template-form :title="title" :open="open"
|
||||
:dept-options="deptOptions"
|
||||
:form-id="id"
|
||||
:word-heads="wordHeads"
|
||||
:voucher-types="voucherTypes"
|
||||
@dialogOfClosedMethods="dialogOfClosedMethods">
|
||||
</template-form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {ElForm} from "element-plus";
|
||||
import {useI18n} from "vue-i18n";
|
||||
import {getCurrentInstance, reactive, ref, toRefs} from "vue";
|
||||
import {delRule, pageList, changeStatus} from "@/api/system/hr/voucher-rule";
|
||||
import editForm from "./salary-voucher-rules/edit.vue"
|
||||
import templateForm from "./salary-voucher-rules/template.vue"
|
||||
import {getTree} from "@/api/system/standard/standard-subject";
|
||||
import bookStore from "@/store/modules/bookStore";
|
||||
import DictTagNumber from "@/components/DIctTagNumber/index.vue";
|
||||
import modal from "@/plugins/modal";
|
||||
import * as GendersEnum from "@/utils/enums/GendersEnum";
|
||||
|
||||
|
||||
const {proxy} = getCurrentInstance()!;
|
||||
const {voucherTypes, wordHeads}
|
||||
= proxy?.useDict( "voucherTypes", "wordHeads");
|
||||
const currBookStore = bookStore()
|
||||
|
||||
const {t} = useI18n()
|
||||
const data: any = reactive({
|
||||
queryParams: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
pageSizeOptions: [10, 20, 50]
|
||||
},
|
||||
rules: {
|
||||
},
|
||||
});
|
||||
|
||||
const {queryParams, rules} = toRefs(data);
|
||||
const dataList = ref([]);
|
||||
const loading = ref(true);
|
||||
const total = ref(0);
|
||||
const title = ref("");
|
||||
const open = ref(false);
|
||||
const id: any = ref(undefined);
|
||||
const ids = ref([]);
|
||||
const selectionlist: any = ref<any>([]);
|
||||
const deptOptions: any = ref<any[]>([]);
|
||||
const subjectKeyItem = ref<any>({})
|
||||
const subjectKeyIdItem = ref<any>({})
|
||||
|
||||
function getList() {
|
||||
pageList(queryParams.value).then((response: any) => {
|
||||
dataList.value = response.data.records;
|
||||
total.value = response.data.total;
|
||||
loading.value = false;
|
||||
})
|
||||
}
|
||||
|
||||
/** 新增按钮操作 */
|
||||
function handleAdd() {
|
||||
title.value = "新增凭证模板";
|
||||
id.value = undefined;
|
||||
open.value = true;
|
||||
}
|
||||
|
||||
/*关闭抽屉*/
|
||||
function dialogOfClosedMethods(val: any): any {
|
||||
open.value = false;
|
||||
id.value = undefined;
|
||||
if (val) {
|
||||
getList();
|
||||
}
|
||||
}
|
||||
|
||||
interface TreeNode {
|
||||
id: string | number; // 根据你的数据实际情况调整类型
|
||||
children?: TreeNode[]; // 子节点可能不存在
|
||||
}
|
||||
|
||||
function getSubjectTree(): any {
|
||||
getTree({bookId: currBookStore.bookId}).then((response: { data: TreeNode[] }) => {
|
||||
deptOptions.value = response.data;
|
||||
});
|
||||
}
|
||||
|
||||
// 多选框选中数据
|
||||
function handleSelectionChange(selection: any) {
|
||||
selectionlist.value = selection;
|
||||
ids.value = selectionlist.value.map((item: any) => item.id);
|
||||
}
|
||||
|
||||
function handleUpdate(row: any) {
|
||||
id.value = row.id;
|
||||
title.value = "编辑凭证规则"
|
||||
open.value = true;
|
||||
}
|
||||
|
||||
function onDelete(row: any) {
|
||||
const _ids = row.id ? [row.id] : ids.value;
|
||||
modal.confirm('是否确认删除?').then(function () {
|
||||
return delRule({listIds: _ids});
|
||||
}).then((res: any) => {
|
||||
if (res.code === 0) {
|
||||
getList();
|
||||
modal.msgSuccess(t('jbx.alert.delete.success'));
|
||||
} else {
|
||||
modal.msgError(res.message);
|
||||
}
|
||||
}).catch(() => {
|
||||
});
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
function handleQuery() {
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
function resetQuery() {
|
||||
queryParams.value.voucherType = undefined;
|
||||
handleQuery();
|
||||
}
|
||||
|
||||
/* 处理状态变更 */
|
||||
function handleStatusChange(row: any, newStatus: number) {
|
||||
// 保存之前的状态用于恢复
|
||||
const oldStatus = newStatus === 1 ? 0 : 1;
|
||||
|
||||
// 根据新状态决定要执行的操作
|
||||
if (newStatus === 1) {
|
||||
// 用户正在尝试启用
|
||||
modal
|
||||
.confirm("是否启用该模板?")
|
||||
.then(function () {
|
||||
return changeStatus({id: row.id, status: newStatus});
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
// 成功,保持当前状态
|
||||
} else {
|
||||
// 失败,回退状态
|
||||
row.status = oldStatus;
|
||||
modal.msgError(res.message);
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
// 用户取消,回退状态
|
||||
row.status = oldStatus;
|
||||
});
|
||||
} else {
|
||||
// 用户正在尝试禁用
|
||||
modal
|
||||
.confirm("是否确认禁用该模板?")
|
||||
.then(function () {
|
||||
return changeStatus({id: row.id, status: newStatus});
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
// 成功,保持当前状态
|
||||
} else {
|
||||
// 失败,回退状态
|
||||
row.status = oldStatus;
|
||||
modal.msgError(res.message);
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
// 用户取消,回退状态
|
||||
row.status = oldStatus;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
getList();
|
||||
getSubjectTree();
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.btn-form {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.common-card {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.app-container {
|
||||
padding: 0;
|
||||
background-color: #f5f7fa;
|
||||
}
|
||||
</style>
|
||||
@ -48,4 +48,6 @@ public interface EmployeeSalaryService extends IService<EmployeeSalary> {
|
||||
Message<String> exportTaxItems(SalaryDetailPageDto dto, HttpServletResponse response);
|
||||
|
||||
Message<String> generateVoucher(GenerateVoucherDto dto);
|
||||
|
||||
Message<String> deleteVoucher(GenerateVoucherDto dto);
|
||||
}
|
||||
|
||||
@ -440,4 +440,24 @@ public class EmployeeSalaryServiceImpl extends ServiceImpl<EmployeeSalaryMapper,
|
||||
|
||||
return dto;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Message<String> deleteVoucher(GenerateVoucherDto dto) {
|
||||
Integer voucherType = dto.getVoucherType();
|
||||
EmployeeSalary salary = super.getById(dto.getId());
|
||||
LambdaUpdateWrapper<EmployeeSalary> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(EmployeeSalary::getId, dto.getId());
|
||||
List<String> ids = new ArrayList<>();
|
||||
if(voucherType.equals(2)) {
|
||||
updateWrapper.set(EmployeeSalary::getAccrualVoucherId, null);
|
||||
ids.add(salary.getAccrualVoucherId());
|
||||
}else if(voucherType.equals(3)) {
|
||||
updateWrapper.set(EmployeeSalary::getSalaryVoucherId, null);
|
||||
ids.add(salary.getSalaryVoucherId());
|
||||
}
|
||||
voucherService.delete(ids, salary.getBookId());
|
||||
super.update(updateWrapper);
|
||||
|
||||
return Message.ok("删除成功!");
|
||||
}
|
||||
}
|
||||
|
||||
@ -116,4 +116,10 @@ public class EmployeeSalaryController {
|
||||
dto.setBookId(currentUser.getBookId());
|
||||
return employeeSalaryService.generateVoucher(dto);
|
||||
}
|
||||
|
||||
@PostMapping("/delete-voucher")
|
||||
public Message<String> deleteVoucher(@Validated @RequestBody GenerateVoucherDto dto, @CurrentUser UserInfo currentUser) {
|
||||
dto.setBookId(currentUser.getBookId());
|
||||
return employeeSalaryService.deleteVoucher(dto);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user