财务报表 员工工资部分

dev
qiuhongwu 3 months ago
parent 1d2fcb7799
commit 37a58d09b7

@ -53,9 +53,11 @@ public class SalaryMonthServiceImpl implements SalaryMonthService {
if(salaryMonth == null){
// 插入
updateReqVO.setId(null);
salaryMonthMapper.insert(BeanUtils.toBean(updateReqVO, SalaryMonthDO.class));
}else{
// 更新
updateReqVO.setId(salaryMonth.getId());
salaryMonthMapper.updateById(BeanUtils.toBean(updateReqVO, SalaryMonthDO.class));
}
}

@ -96,3 +96,7 @@ export const getUsersalaryPage = (params: PageParam) => {
export const exportsalaryexcel = (params) => {
return request.download({ url: '/system/user/export-salary-excel', params })
}
//列表增加明细编辑接口/biz/salary-month/save
export const updateUserSalaryMonth = async (data) => {
return await request.post({ url: `/biz/salary-month/save`, data })
}

@ -0,0 +1,480 @@
<template>
<el-card class="hl-card" style="position: relative">
<template #header>
<span>员工工资明细</span>
</template>
<el-form
ref="formRef"
label-width="160px"
:rules="formRules"
:model="formData"
v-loading="formLoading"
>
<!-- 基础信息 横向布局 -->
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">基础信息</span>
</template>
<el-row>
<!-- <el-col :span="8">
<el-form-item label="具体部门" prop="planNo">
<el-input class="!w-265px" placeholder="具体部门" v-model="formData" disabled />
</el-form-item>
</el-col> -->
<el-col :span="8">
<el-form-item label="姓名" prop="userId">
<!-- <UserSelect
:disabled="detailDisabled"
v-model="formData.userId"
@update:newValue="handleSelectedUser"
/> -->
<el-input class="!w-265px" placeholder="姓名" v-model="formData.nickname" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="部门" prop="planNo">
<el-input class="!w-265px" placeholder="部门" v-model="formData.deptName" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="岗位" prop="planNo">
<!-- <el-input class="!w-265px" placeholder="岗位" v-model="formData.postIds" disabled /> -->
<el-select
v-model="formData.postIds"
multiple
clearable
disabled
placeholder="请选择"
class="!w-250px"
>
<el-option
v-for="item in postList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="实际出勤天数" prop="attendanceDays">
<el-input
class="!w-265px"
placeholder="实际出勤天数"
:disabled="detailDisabled"
v-model="formData.attendanceDays"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="基本工资" prop="basicSalary">
<el-input
class="!w-265px"
placeholder="基本工资"
v-model="formData.basicSalary"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="职务津贴" prop="jobAllowance">
<el-input
class="!w-265px"
placeholder="职务津贴"
v-model="formData.jobAllowance"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="五险一金补贴" prop="fiveOneFund">
<el-input
class="!w-265px"
placeholder="五险一金补贴"
v-model="formData.fiveOneFund"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="敬业限制补贴" prop="nonCompeteSubsidy">
<el-input
class="!w-265px"
placeholder="敬业限制补贴"
v-model="formData.nonCompeteSubsidy"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="3天周末加班" prop="weekendWork">
<el-input
class="!w-265px"
placeholder="3天周末加班"
v-model="formData.weekendWork"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="加班小时" prop="weekendWorktime">
<el-input
class="!w-265px"
placeholder="加班小时"
v-model="formData.weekendWorktime"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="加班金额" prop="weekendWorkAmount">
<el-input
class="!w-265px"
placeholder="加班金额"
v-model="formData.weekendWorkAmount"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="事假小时" prop="absenceTime">
<el-input
class="!w-265px"
placeholder="事假小时"
v-model="formData.absenceTime"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="事假金额" prop="absenceAmount">
<el-input
class="!w-265px"
placeholder="事假金额"
v-model="formData.absenceAmount"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="全勤工资" prop="fullAttendanceSalary">
<el-input
class="!w-265px"
placeholder="全勤工资"
v-model="formData.fullAttendanceSalary"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="工龄奖补助" prop="serviceExperienceAward">
<el-input
class="!w-265px"
placeholder="工龄奖补助"
v-model="formData.serviceExperienceAward"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="夜班/其他补助" prop="otherAward">
<el-input
class="!w-265px"
placeholder="夜班/其他补助"
v-model="formData.otherAward"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="应发工资" prop="grossPay">
<el-input
class="!w-265px"
placeholder="应发工资"
v-model="formData.grossPay"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="扣养老" prop="retireDeduction">
<el-input
class="!w-265px"
placeholder="扣养老"
v-model="formData.retireDeduction"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="扣医疗" prop="medicalDeduction">
<el-input
class="!w-265px"
placeholder="扣医疗"
v-model="formData.medicalDeduction"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="扣失业" prop="unemploymentDeduction">
<el-input
class="!w-265px"
placeholder="扣失业"
v-model="formData.unemploymentDeduction"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="扣个税" prop="taxDeduction">
<el-input
class="!w-265px"
placeholder="扣个税"
v-model="formData.taxDeduction"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="扣水电费" prop="waterElectricityDeduction">
<el-input
class="!w-265px"
placeholder="扣水电费"
v-model="formData.waterElectricityDeduction"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="扣餐费" prop="foodDeduction">
<el-input
class="!w-265px"
placeholder="扣餐费"
v-model="formData.foodDeduction"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="扣住宿费" prop="lodgingDeduction">
<el-input
class="!w-265px"
placeholder="扣住宿费"
v-model="formData.lodgingDeduction"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="扣借款/其他" prop="loanDeduction">
<el-input
class="!w-265px"
placeholder="扣借款/其他"
v-model="formData.loanDeduction"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="补发" prop="reissue">
<el-input
class="!w-265px"
placeholder="补发"
v-model="formData.reissue"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="实发工资" prop="netSalary">
<el-input
class="!w-265px"
placeholder="实发工资"
v-model="formData.netSalary"
:disabled="detailDisabled"
/>
</el-form-item>
</el-col>
</el-row>
</el-card>
</el-form>
<div class="text-center hl-footer">
<el-button @click="goback" size="large"> </el-button>
<el-button
v-if="active != 'detail'"
type="primary"
@click="submitForm"
:disabled="formLoading"
size="large"
> </el-button
>
</div>
</el-card>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import * as UnqualifiedNotificationApi from '@/api/biz/unqualifiednotification'
import { inject } from 'vue'
import * as UserApi from '@/api/system/user'
import * as PostApi from '@/api/system/post'
import { useUserStore } from '@/store/modules/user'
import { useCommonStore } from '@/store/modules/common'
import { DICT_TYPE, getIntDictOptions, getStrDictOptions } from '@/utils/dict'
import UserSelect from '@/views/biz/hlvuestyle/userSelect.vue'
import { getAccessToken, getTenantId } from '@/utils/auth'
import { dateFormatter } from '@/utils/formatTime'
defineOptions({ name: 'UnqualifiedNotificationDetail' })
import { deleteFileLogic, downloadFile, getFilePage } from '@/api/infra/file'
import download from '@/utils/download'
const reload: any = inject('reload')
const { t } = useI18n() //
const message = useMessage() //
const commonStore = useCommonStore()
const userStore = useUserStore()
const router = useRouter()
const active = toRef(commonStore.getStore('active'))
const Month = toRef(commonStore.getStore('yearMonth'))
const usernickname = toRef(commonStore.getStore('username'))
const activeOpinionDialogVisible = ref(false) //
const formLoading = ref(false)
const dialogTitle = ref('')
const detailDisabled = ref(false)
const formData = ref({
id: undefined,
userId: undefined,
deptName: undefined,
postIds: undefined,
attendanceDays: undefined,
basicSalary: undefined,
jobAllowance: undefined,
fiveOneFund: undefined,
nonCompeteSubsidy: undefined,
weekendWork: undefined,
weekendWorktime: undefined,
weekendWorkAmount: undefined,
absenceTime: undefined,
absenceAmount: undefined,
fullAttendanceSalary: undefined,
serviceExperienceAward: undefined,
otherAward: undefined,
grossPay: undefined,
retireDeduction: undefined,
medicalDeduction: undefined,
unemploymentDeduction: undefined,
taxDeduction: undefined,
waterElectricityDeduction: undefined,
foodDeduction: undefined,
lodgingDeduction: undefined,
loanDeduction: undefined,
reissue: undefined,
netSalary: undefined,
month: undefined
})
const formRef = ref() // Ref
const subFormRef = ref()
const formRules = reactive({
code: [{ required: true, message: '品质异常单不能为空', trigger: 'blur' }]
})
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
userId: undefined,
deptName: undefined,
postIds: undefined,
attendanceDays: undefined,
basicSalary: undefined,
jobAllowance: undefined,
fiveOneFund: undefined,
nonCompeteSubsidy: undefined,
weekendWork: undefined,
weekendWorktime: undefined,
weekendWorkAmount: undefined,
absenceTime: undefined,
absenceAmount: undefined,
fullAttendanceSalary: undefined,
serviceExperienceAward: undefined,
otherAward: undefined,
grossPay: undefined,
retireDeduction: undefined,
medicalDeduction: undefined,
unemploymentDeduction: undefined,
taxDeduction: undefined,
waterElectricityDeduction: undefined,
foodDeduction: undefined,
lodgingDeduction: undefined,
loanDeduction: undefined,
reissue: undefined,
netSalary: undefined
}
formRef.value?.resetFields()
}
const subFormLoading = ref(false) //
const subFormRules = reactive({})
const postList = ref([] as PostApi.PostVO[]) //
const queryData = async (queryParams) => {
resetForm()
//
if (queryParams) {
formLoading.value = true
try {
const data = await UserApi.getUsersalaryPage(queryParams.value)
formData.value = data.list[0]
} finally {
formLoading.value = false
}
}
}
const submitForm = async (operate) => {
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as UnqualifiedNotificationApi.UnqualifiedNotificationVO
formData.value.userId = formData.value.id
formData.value.month = Month
await UserApi.updateUserSalaryMonth(data)
// message.success(t('common.operationSuccess'))
// commonStore.setStore('id', dataId)
// commonStore.setStore('active', 'detail')
reload()
} finally {
formLoading.value = false
}
}
const goback = () => {
router.back()
}
const queryParams: any = ref({
yearMonth: Month.value,
nickname: usernickname.value
})
onMounted(async () => {
dialogTitle.value = t('action.' + active.value)
if ('detail' == active.value) {
detailDisabled.value = true
}
queryData(queryParams)
postList.value = await PostApi.getSimplePostList()
})
//
const handleSelectedUser = (newValue: any) => {
console.log(newValue)
formData.value.userId = newValue?.id
formData.value.deptName = newValue?.deptName
formData.value.postIds = newValue?.postIds
}
</script>
<style scoped></style>

@ -76,13 +76,47 @@
class="hl-table"
>
<el-table-column fixed label="序号" type="index" width="60" align="center" />
<el-table-column label="工号" align="center" prop="username" />
<el-table-column label="姓名" align="center" prop="nickname" />
<el-table-column label="生产订单号" align="center" prop="projectCode" />
<el-table-column label="销售订单号" align="center" prop="externalCode" />
<el-table-column label="订单归属部门" align="center" prop="deptName" />
<el-table-column label="所属年月" align="center" prop="yearMonth" />
<el-table-column label="工资" align="center" prop="salary" />
<el-table-column label="工号" align="center" prop="username" min-width="120"/>
<el-table-column label="姓名" align="center" prop="nickname" min-width="120"/>
<el-table-column label="部门" align="center" prop="deptName" min-width="120"/>
<el-table-column label="实际出勤天数" align="center" prop="attendanceDays" min-width="120"/>
<el-table-column label="基本工资" align="center" prop="basicSalary" min-width="120"/>
<el-table-column label="职务津贴" align="center" prop="jobAllowance" min-width="120"/>
<el-table-column label="五险一金补贴" align="center" prop="fiveOneFund" min-width="120"/>
<el-table-column label="敬业限制补贴" align="center" prop="nonCompeteSubsidy" min-width="120"/>
<el-table-column label="3天周末加班" align="center" prop="weekendWork" min-width="120"/>
<el-table-column label="加班小时" align="center" prop="weekendWorktime" min-width="120"/>
<el-table-column label="加班金额" align="center" prop="weekendWorkAmount" min-width="120"/>
<el-table-column label="事假小时" align="center" prop="absenceTime" min-width="120"/>
<el-table-column label="事假金额" align="center" prop="absenceAmount" min-width="120"/>
<el-table-column label="全勤工资" align="center" prop="fullAttendanceSalary" min-width="120"/>
<el-table-column label="工龄奖补助" align="center" prop="serviceExperienceAward" min-width="120"/>
<el-table-column label="夜班/其他补助" align="center" prop="otherAward" min-width="120"/>
<el-table-column label="应发工资" align="center" prop="grossPay" min-width="120"/>
<el-table-column label="扣养老" align="center" prop="retireDeduction" min-width="120"/>
<el-table-column label="扣医疗" align="center" prop="medicalDeduction" min-width="120"/>
<el-table-column label="扣失业" align="center" prop="unemploymentDeduction" min-width="120"/>
<el-table-column label="扣个税" align="center" prop="taxDeduction" min-width="120"/>
<el-table-column label="扣水电费" align="center" prop="waterElectricityDeduction" min-width="120"/>
<el-table-column label="扣餐费" align="center" prop="foodDeduction" min-width="120"/>
<el-table-column label="扣住宿费" align="center" prop="lodgingDeduction" min-width="120"/>
<el-table-column label="扣借款/其他" align="center" prop="loanDeduction" min-width="120"/>
<el-table-column label="补发" align="center" prop="reissue" min-width="120"/>
<el-table-column label="实发工资" align="center" prop="netSalary" min-width="120"/>
<el-table-column fixed="right" label="操作" align="right" width="160">
<template #header>
<span style="margin-right:40%"> </span>
</template>
<template #default="scope">
<el-button link type="primary" @click="openDetail('updata', scope.row.yearMonth,scope.row.username)">
编辑
</el-button>
<el-button link type="primary" @click="openDetail('detail', scope.row.yearMonth,scope.row.username)">
查看详情
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
@ -129,10 +163,10 @@ const exportLoading = ref(false) // 导出的加载中
const getList = async () => {
loading.value = true
try {
console.log(queryParams);
const data = await UserApi.getUsersalaryPage(queryParams)
list.value = data.list
// console.log(list.value);
total.value = data.total
} finally {
loading.value = false
@ -157,6 +191,20 @@ const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
//
const openDetail = (type: string, yearMonth?: any, username?: number) => {
commonStore.setStore('active', type)
// commonStore.setStore('id', id)
commonStore.setStore('yearMonth', yearMonth)
commonStore.setStore('username', username)
router.push({
name: 'StatementDetail',
query: {
operateId: Math.random()
}
})
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {

@ -78,7 +78,7 @@
v-for="item in postList"
:key="item.id"
:label="item.name"
:value="item.id!"
:value="item.id"
/>
</el-select>
</el-form-item>

Loading…
Cancel
Save