| | |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="月份:" prop="payDate"> |
| | | <el-date-picker |
| | | v-model="form.payDate" |
| | | type="month" |
| | | value-format="YYYY-MM-DD" |
| | | format="YYYY-MM" |
| | | placeholder="请选择月份" |
| | | clearable |
| | | :disabled="operationType === 'edit'" |
| | | style="width: 100%" |
| | | /> |
| | | <el-date-picker |
| | | v-model="form.payDate" |
| | | type="month" |
| | | value-format="YYYY-MM-DD" |
| | | format="YYYY-MM" |
| | | placeholder="请选择月份" |
| | | clearable |
| | | :disabled="operationType === 'edit'" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="姓名:" prop="staffId"> |
| | | <el-select v-model="form.staffId" placeholder="请选择人员" style="width: 100%" @change="handleSelect" :disabled="operationType === 'edit'"> |
| | | <el-option |
| | | v-for="item in personList" |
| | | :key="item.id" |
| | | :label="item.staffName" |
| | | :value="item.id" |
| | | /> |
| | | </el-select> |
| | | <el-select v-model="form.staffId" placeholder="请选择人员" style="width: 100%" @change="handleSelect" :disabled="operationType === 'edit'"> |
| | | <el-option |
| | | v-for="item in personList" |
| | | :key="item.id" |
| | | :label="item.staffName" |
| | | :value="item.id" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="应出勤天数:" prop="shouldAttendedNum"> |
| | | <el-input v-model="form.shouldAttendedNum" placeholder="请输入" clearable type="number"/> |
| | | <el-input v-model="form.shouldAttendedNum" placeholder="请输入" clearable type="number"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="社保公司:" prop="socialSecurityCompanies"> |
| | | <el-input v-model="form.socialSecurityCompanies" :precision="0" :step="1" style="width: 100%" type="number"/> |
| | | <el-input v-model="form.socialSecurityCompanies" :precision="0" :step="1" style="width: 100%" type="number"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="社保合计:" prop="socialSecurityTotal"> |
| | | <el-input v-model="form.socialSecurityTotal" :precision="0" :step="1" style="width: 100%" type="number"/> |
| | | <el-input v-model="form.socialSecurityTotal" :precision="0" :step="1" style="width: 100%" type="number"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="公积金个人:" prop="providentFundIndividuals"> |
| | | <el-input v-model="form.providentFundIndividuals" :precision="0" :step="1" style="width: 100%" type="number"/> |
| | | <el-input v-model="form.providentFundIndividuals" :precision="0" :step="1" style="width: 100%" type="number"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="公积金公司:" prop="providentFundCompany"> |
| | | <el-input v-model="form.providentFundCompany" :precision="0" :step="1" style="width: 100%" type="number"/> |
| | | <el-input v-model="form.providentFundCompany" :precision="0" :step="1" style="width: 100%" type="number"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="公积金合计:" prop="providentFundTotal"> |
| | | <el-input v-model="form.providentFundTotal" :precision="0" :step="1" style="width: 100%" type="number"/> |
| | | <el-input v-model="form.providentFundTotal" :precision="0" :step="1" style="width: 100%" type="number"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="应税工资:" prop="taxableWaget"> |
| | | <el-input v-model="form.taxableWaget" :precision="0" :step="1" style="width: 100%" type="number"/> |
| | | <el-input v-model="form.taxableWaget" :precision="0" :step="1" style="width: 100%" type="number"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="个人所得税:" prop="personalIncomeTax"> |
| | | <el-input v-model="form.personalIncomeTax" :step="0.1" style="width: 100%" type="number"/> |
| | | <el-input v-model="form.personalIncomeTax" :step="0.1" style="width: 100%" type="number"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="实发工资:" prop="actualWages"> |
| | | <el-input v-model="form.actualWages" style="width: 100%" type="number"/> |
| | | <el-input v-model="form.actualWages" style="width: 100%" type="number"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | |
| | | <script setup> |
| | | import {ref} from "vue"; |
| | | import {getStaffJoinInfo, getStaffOnJob, staffJoinAdd, staffJoinUpdate} from "@/api/personnelManagement/onboarding.js"; |
| | | import {compensationAdd, compensationUpdate} from "@/api/personnelManagement/payrollManagement.js"; |
| | | import {staffOnJobInfo, staffOnJobListPage} from "@/api/personnelManagement/staffOnJob.js"; |
| | | const { proxy } = getCurrentInstance() |
| | | const emit = defineEmits(['close']) |
| | | |
| | |
| | | const operationType = ref('') |
| | | const data = reactive({ |
| | | form: { |
| | | payDate: "", |
| | | payDate: "", |
| | | staffId: "", |
| | | name: "", |
| | | shouldAttendedNum: "", |
| | | actualAttendedNum: "", |
| | | basicSalary: "", |
| | | postSalary: "", |
| | | deductionAbsenteeism: "", |
| | | sickLeaveDeductions: "", |
| | | deductionPersonalLeave: "", |
| | | forgetClockDeduct: "", |
| | | performanceScore: "", |
| | | performancePay: "", |
| | | payableWages: "", |
| | | socialSecurityIndividuals: "", |
| | | socialSecurityCompanies: "", |
| | | socialSecurityTotal: "", |
| | | providentFundIndividuals: "", |
| | | providentFundCompany: "", |
| | | providentFundTotal: "", |
| | | taxableWaget: "", |
| | | personalIncomeTax: "", |
| | | actualWages: "", |
| | | name: "", |
| | | shouldAttendedNum: "", |
| | | actualAttendedNum: "", |
| | | basicSalary: "", |
| | | postSalary: "", |
| | | deductionAbsenteeism: "", |
| | | sickLeaveDeductions: "", |
| | | deductionPersonalLeave: "", |
| | | forgetClockDeduct: "", |
| | | performanceScore: "", |
| | | performancePay: "", |
| | | payableWages: "", |
| | | socialSecurityIndividuals: "", |
| | | socialSecurityCompanies: "", |
| | | socialSecurityTotal: "", |
| | | providentFundIndividuals: "", |
| | | providentFundCompany: "", |
| | | providentFundTotal: "", |
| | | taxableWaget: "", |
| | | personalIncomeTax: "", |
| | | actualWages: "", |
| | | }, |
| | | rules: { |
| | | payDate: [{ required: true, message: "请选择", trigger: "change" },], |
| | | staffId: [{ required: true, message: "请选择", trigger: "change" },], |
| | | payDate: [{ required: true, message: "请选择", trigger: "change" },], |
| | | staffId: [{ required: true, message: "请选择", trigger: "change" },], |
| | | staffName: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | shouldAttendedNum: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | actualAttendedNum: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | basicSalary: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | postSalary: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | deductionAbsenteeism: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | sickLeaveDeductions: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | deductionPersonalLeave: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | forgetClockDeduct: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | performanceScore: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | performancePay: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | payableWages: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | socialSecurityIndividuals: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | socialSecurityCompanies: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | socialSecurityTotal: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | providentFundIndividuals: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | providentFundCompany: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | providentFundTotal: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | taxableWaget: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | personalIncomeTax: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | actualWages: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | shouldAttendedNum: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | actualAttendedNum: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | basicSalary: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | postSalary: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | deductionAbsenteeism: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | sickLeaveDeductions: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | deductionPersonalLeave: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | forgetClockDeduct: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | performanceScore: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | performancePay: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | payableWages: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | socialSecurityIndividuals: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | socialSecurityCompanies: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | socialSecurityTotal: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | providentFundIndividuals: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | providentFundCompany: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | providentFundTotal: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | taxableWaget: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | personalIncomeTax: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | actualWages: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | }, |
| | | }); |
| | | const { form, rules } = toRefs(data); |
| | |
| | | const openDialog = (type, row) => { |
| | | operationType.value = type; |
| | | dialogFormVisible.value = true; |
| | | staffOnJobListPage({ |
| | | current: -1, |
| | | size: -1, |
| | | staffState: 1 |
| | | }).then(res => { |
| | | personList.value = res.data.records || [] |
| | | getStaffOnJob().then(res => { |
| | | personList.value = res.data |
| | | }) |
| | | form.value = {} |
| | | form.value = {} |
| | | if (operationType.value === 'edit') { |
| | | staffOnJobInfo(row.staffId).then(res => { |
| | | form.value = {...row} |
| | | form.value.payDate = form.value.payDate + '-01' |
| | | getStaffJoinInfo(row.id).then(res => { |
| | | form.value = {...row} |
| | | form.value.payDate = form.value.payDate + '-01' |
| | | }) |
| | | } |
| | | } |
| | | const handleSelect = (value) => { |
| | | console.log('value', value) |
| | | const index = personList.value.findIndex(row => row.id === value) |
| | | if (index > -1) { |
| | | form.value.name = personList.value[index].staffName |
| | | } |
| | | console.log('value', value) |
| | | const index = personList.value.findIndex(row => row.id === value) |
| | | if (index > -1) { |
| | | form.value.name = personList.value[index].staffName |
| | | } |
| | | } |
| | | // 提交产品表单 |
| | | const submitForm = () => { |
| | |
| | | if (valid) { |
| | | form.value.staffState = 1 |
| | | if (operationType.value === "add") { |
| | | compensationAdd(form.value).then(res => { |
| | | compensationAdd(form.value).then(res => { |
| | | proxy.$modal.msgSuccess("提交成功"); |
| | | closeDia(); |
| | | }) |
| | | } else { |
| | | compensationUpdate(form.value).then(res => { |
| | | compensationUpdate(form.value).then(res => { |
| | | proxy.$modal.msgSuccess("提交成功"); |
| | | closeDia(); |
| | | }) |
| | |
| | | if (form.value.contractStartTime && form.value.contractEndTime) { |
| | | const startDate = new Date(form.value.contractStartTime); |
| | | const endDate = new Date(form.value.contractEndTime); |
| | | |
| | | |
| | | if (endDate > startDate) { |
| | | // 计算年份差 |
| | | const yearDiff = endDate.getFullYear() - startDate.getFullYear(); |
| | | const monthDiff = endDate.getMonth() - startDate.getMonth(); |
| | | const dayDiff = endDate.getDate() - startDate.getDate(); |
| | | |
| | | |
| | | let years = yearDiff; |
| | | |
| | | |
| | | // 如果结束日期的月日小于开始日期的月日,则减去1年 |
| | | if (monthDiff < 0 || (monthDiff === 0 && dayDiff < 0)) { |
| | | years = yearDiff - 1; |
| | | } |
| | | |
| | | |
| | | form.value.contractTerm = Math.max(0, years); |
| | | } else { |
| | | form.value.contractTerm = 0; |
| | |
| | | |
| | | <style scoped> |
| | | |
| | | </style> |
| | | </style> |