evo-Financial-vue/src/views/finance/financeDetail/index.vue
2025-05-10 10:10:24 +08:00

590 lines
22 KiB
Vue

<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="88px">
<el-form-item label="员工姓名" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入员工姓名"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="工资月份" prop="month">
<el-date-picker clearable
v-model="queryParams.month"
type="month"
value-format="yyyy-MM"
placeholder="请选择工资月份">
</el-date-picker>
</el-form-item>
<el-form-item label="部门:" prop="deptId">
<treeselect v-model="form.deptId" :options="deptOptions" style="width: 240px" :show-count="true" placeholder="请选择归属部门" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['finance:financeDetail:add']"
>计算工资</el-button>
</el-col>
<el-col :span="1.5">
<!--handleExport-->
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="submitFormExport"
v-hasPermi="['finance:financeDetail:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="detailList">
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column label="员工姓名" align="center" prop="name" />
<el-table-column label="工资月份" align="center" prop="month" width="100">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.month, '{y}-{m}') }}</span>
</template>
</el-table-column>
<el-table-column label="所属公司" align="center" prop="wbFlag" />
<el-table-column label="部门名称" align="center" prop="deptName" />
<el-table-column label="基本工资" align="center" prop="basicSalary" />
<el-table-column label="岗位工资" align="center" prop="jobSalary" />
<el-table-column label="日薪" align="center" prop="dailyWage" />
<el-table-column label="时薪" align="center" prop="hoursSalary" />
<el-table-column label="加班工资" align="center" prop="overtimeSalary" />
<el-table-column label="学历补助" align="center" prop="levelSubsidies" />
<el-table-column label="合同补助" align="center" prop="contractSubsidies" />
<el-table-column label="工龄工资" align="center" prop="senioritySalary" />
<el-table-column label="社保补助" align="center" prop="socialSubsidies" />
<el-table-column label="全勤奖" align="center" prop="fullSubsidies" />
<el-table-column label="夜班补助" align="center" prop="nightSubsidies" />
<el-table-column label="夜餐补助" align="center" prop="dinnerSubsidies" />
<el-table-column label="其他补助" align="center" prop="subsidyOrBonus" />
<el-table-column label="缺勤扣款" align="center" prop="absenteeismSalary" />
<el-table-column label="补助扣款" align="center" prop="absenteeismSubsidies" />
<el-table-column label="餐费扣款" align="center" prop="mealFee" />
<el-table-column label="其他扣款" align="center" prop="deductions" />
<el-table-column label="应发工资" align="center" prop="salary" />
<el-table-column label="代缴保险" align="center" prop="payInsurance" />
<el-table-column label="养老保险" align="center" prop="endowmentInsurance" />
<el-table-column label="医疗保险" align="center" prop="medicalInsurance" />
<el-table-column label="工伤保险" align="center" prop="employmentInjuryInsurance" />
<el-table-column label="生育保险" align="center" prop="maternityInsurance" />
<el-table-column label="失业保险" align="center" prop="unemploymentInsurance" />
<el-table-column label="公积金" align="center" prop="accumulationFund" />
<el-table-column label="税前工资" align="center" prop="salaryBeforeTax" />
<el-table-column label="累计已发工资" align="center" prop="totalWages" />
<el-table-column label="累计已发" align="center" prop="totalWagesOther" />
<el-table-column label="年度免征额" align="center" prop="annualExemptionAmount" />
<el-table-column label="累计专项附加扣除" align="center" prop="specialDeduction" />
<el-table-column label="应纳税所得额" align="center" prop="taxableIncome" />
<el-table-column label="税率" align="center" prop="taxRate" />
<el-table-column label="速算扣除数" align="center" prop="slowDownTheDeduction" />
<el-table-column label="累计已缴税额" align="center" prop="aggregatePersonalIncomeTax" />
<el-table-column label="累计税额" align="center" prop="aggregateTax" />
<el-table-column label="本月应缴个税" align="center" prop="taxPayable" />
<el-table-column label="实发工资" align="center" prop="netPayroll" />
<el-table-column label="备注" align="center" prop="remarks" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['finance:financeDetail:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['finance:financeDetail:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 工资计算对话框 -->
<el-dialog :title="title" v-dialog-drag :visible.sync="openCount" width="400px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="88px">
<el-form-item label="工资月份" prop="month">
<el-date-picker clearable
v-model="form.month"
type="month"
value-format="yyyy-MM"
placeholder="请选择工资月份">
</el-date-picker>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitColuntForm">确 定</el-button>
<el-button @click="openCount = false">取 消</el-button>
</div>
</el-dialog>
<!-- 添加或修改工资详情对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="88px">
<el-row>
<el-col :span="12">
<el-form-item label="员工姓名" prop="name">
<el-input v-model="form.name" placeholder="请输入员工姓名" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工资月份" prop="month">
<el-date-picker clearable
v-model="form.month"
type="month"
value-format="yyyy-MM"
placeholder="请选择工资月份">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="部门:" prop="deptId">
<treeselect v-model="form.deptId" :options="deptOptions" style="width: 240px" :show-count="true" placeholder="请选择归属部门" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="基本工资" prop="basicSalary">
<el-input v-model="form.basicSalary" placeholder="请输入基本工资" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="岗位工资" prop="jobSalary">
<el-input v-model="form.jobSalary" placeholder="请输入岗位工资" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="日薪" prop="dailyWage">
<el-input v-model="form.dailyWage" placeholder="请输入日薪" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="时薪" prop="hoursSalary">
<el-input v-model="form.hoursSalary" placeholder="请输入时薪" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="加班工资" prop="overtimeSalary">
<el-input v-model="form.overtimeSalary" placeholder="请输入加班工资" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="学历补助" prop="levelSubsidies">
<el-input v-model="form.levelSubsidies" placeholder="请输入学历补助" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同补助" prop="contractSubsidies">
<el-input v-model="form.contractSubsidies" placeholder="请输入合同补助" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="工龄工资" prop="senioritySalary">
<el-input v-model="form.senioritySalary" placeholder="请输入工龄工资" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="社保补助" prop="socialSubsidies">
<el-input v-model="form.socialSubsidies" placeholder="请输入社保补助" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="全勤奖" prop="fullSubsidies">
<el-input v-model="form.fullSubsidies" placeholder="请输入全勤奖" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="夜班补助" prop="nightSubsidies">
<el-input v-model="form.nightSubsidies" placeholder="请输入夜班补助" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="夜餐补助" prop="dinnerSubsidies">
<el-input v-model="form.dinnerSubsidies" placeholder="请输入夜餐补助" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="其他补助" prop="subsidyOrBonus">
<el-input v-model="form.subsidyOrBonus" placeholder="请输入其他补助" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="缺勤扣款" prop="absenteeismSalary">
<el-input v-model="form.absenteeismSalary" placeholder="请输入缺勤扣款" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="补助扣款" prop="absenteeismSubsidies">
<el-input v-model="form.absenteeismSubsidies" placeholder="请输入补助扣款" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="餐费扣款" prop="mealFee">
<el-input v-model="form.mealFee" placeholder="请输入餐费扣款" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="其他扣款" prop="deductions">
<el-input v-model="form.deductions" placeholder="请输入其他扣款" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="应发工资" prop="salary">
<el-input v-model="form.salary" placeholder="请输入应发工资" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="代缴保险" prop="payInsurance">
<el-input v-model="form.payInsurance" placeholder="请输入代缴保险" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="税前工资" prop="salaryBeforeTax">
<el-input v-model="form.salaryBeforeTax" placeholder="请输入税前工资" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="累计已发工资" prop="totalWages">
<el-input v-model="form.totalWages" placeholder="请输入累计已发工资" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="年度免征额" prop="annualExemptionAmount">
<el-input v-model="form.annualExemptionAmount" placeholder="请输入年度免征额" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="累计专项附加扣除" prop="specialDeduction">
<el-input v-model="form.specialDeduction" placeholder="请输入累计专项附加扣除" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="应纳税所得额" prop="taxableIncome">
<el-input v-model="form.taxableIncome" placeholder="请输入应纳税所得额" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="税率" prop="taxRate">
<el-input v-model="form.taxRate" placeholder="请输入税率" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="速算扣除数" prop="slowDownTheDeduction">
<el-input v-model="form.slowDownTheDeduction" placeholder="请输入速算扣除数" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="累计已缴税额" prop="aggregatePersonalIncomeTax">
<el-input v-model="form.aggregatePersonalIncomeTax" placeholder="请输入累计已缴税额" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="本月应缴个税" prop="taxPayable">
<el-input v-model="form.taxPayable" placeholder="请输入本月应缴个税" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="实发工资" prop="netPayroll">
<el-input v-model="form.netPayroll" placeholder="请输入实发工资" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="remarks">
<el-input v-model="form.remarks" placeholder="请输入备注" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
<!-- 导出工资单管理对话框 -->
<el-dialog :title="title" :visible.sync="openExport" width="400px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="工资月份" prop="month">
<el-date-picker clearable
v-model="form.month"
type="month"
value-format="yyyy-MM"
placeholder="请选择工资月份">
</el-date-picker>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFormExport">确 定</el-button>
<el-button @click="openExport=false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listDetail, getDetail, delDetail, addDetail, updateDetail,exportgzd } from "@/api/finance/financeDetail";
import Treeselect from "@riophae/vue-treeselect";
import { listAllDepts } from '@/api/system/dept';
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
name: "FinanceDetail",
components: {Treeselect},
data() {
return {
// 遮罩层
loading: true,
// 显示搜索条件
showSearch: true,
openExport: false,
// 总条数
total: 0,
// 工资详情表格数据
detailList: [],
deptOptions: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
openCount: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
name: null,
month: null,
deptId: null,
},
// 表单参数
form: {},
// 表单校验
rules: {}
};
},
created() {
this.getList();
this.getDeptList();
},
methods: {
/** 获取部门 */
getDeptList(){
listAllDepts().then(response => {
this.deptOptions = response;
});
},
/** 查询工资详情列表 */
getList() {
this.loading = true;
listDetail(this.queryParams).then(response => {
this.detailList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
name: null,
month: null,
wbFlag: null,
deptId: null,
basicSalary: null,
jobSalary: null,
dailyWage: null,
hoursSalary: null,
overtimeSalary: null,
levelSubsidies: null,
contractSubsidies: null,
senioritySalary: null,
socialSubsidies: null,
fullSubsidies: null,
nightSubsidies: null,
dinnerSubsidies: null,
subsidyOrBonus: null,
absenteeismSalary: null,
absenteeismSubsidies: null,
mealFee: null,
deductions: null,
salary: null,
payInsurance: null,
endowmentInsurance: null,
medicalInsurance: null,
employmentInjuryInsurance: null,
maternityInsurance: null,
unemploymentInsurance: null,
accumulationFund: null,
salaryBeforeTax: null,
totalWages: null,
totalWagesOther: null,
annualExemptionAmount: null,
specialDeduction: null,
taxableIncome: null,
taxRate: null,
slowDownTheDeduction: null,
aggregatePersonalIncomeTax: null,
aggregateTax: null,
taxPayable: null,
netPayroll: null,
remarks: null,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.openCount = true;
this.title = "计算工资";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
getDetail(row.id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改工资详情";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateDetail(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除姓名为"' + row.name + '"的数据项?').then(function() {
return delDetail(row.id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 计算工资 */
submitColuntForm(){
this.$refs["form"].validate(valid => {
if (valid) {
addDetail(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.openCount = false;
this.getList();
});
}
});
},
/** 导出按钮操作 */
handleExport() {
this.openExport = true;
this.title = "工资汇总单";
},
submitFormExport(){
let param = this.form;
// exportPayroll(param).then(response => {
// this.downloadExcel(response.msg);
// this.openExport = false;
// })
console.log(1)
if(this.queryParams.month == '' || this.queryParams.month == null){
this.$message({
message: '请选择月份',
type: 'warning'
});
}else{
exportgzd({
month:this.queryParams.month
}).then(response => {
this.downloadExcel(response.msg);
this.openExport = false;
})
}
},
}
};
</script>