|
|
|
@ -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>
|