Compare commits

...

4 Commits

Author SHA1 Message Date
qsh
d80be0d7f1 上传 2024-07-19 16:05:50 +08:00
qsh
274fc2f435 上传 2024-07-19 16:03:07 +08:00
qsh
ab2da33ebc 上传 2024-07-19 11:36:14 +08:00
qsh
72a049b7b8 上传 2024-07-19 10:45:50 +08:00
8 changed files with 136 additions and 75 deletions

View File

@@ -27,7 +27,10 @@ export const getSalarySimpleList = (params) => {
// 详情
export const getSalaryDetail = (id) => {
return request.get({ url: '/admin-api/oa/user-salary/get', params: { id } })
return request.get({
url: '/admin-api/oa/user-salary/getByEmployeeId',
params: { employeeId: id }
})
}
// 删除

View File

@@ -22,13 +22,16 @@
class="upload-file-uploader"
>
<el-button type="primary"><Icon icon="ep:upload-filled" />选取文件</el-button>
<template v-if="isShowTip" #tip>
<div style="font-size: 12px">
大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
</div>
<div style="font-size: 12px">
格式为 <b style="color: #f56c6c">{{ fileType.join('/') }}</b> 的文件
</div>
<template #tip>
<template v-if="isShowTip">
<div style="font-size: 12px">
大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
</div>
<div style="font-size: 12px">
格式为 <b style="color: #f56c6c">{{ fileType.join('/') }}</b> 的文件
</div>
</template>
<slot name="tip"></slot>
</template>
</el-upload>
</div>
@@ -47,7 +50,7 @@ const props = defineProps({
// fileType: propTypes.array.def(['doc', 'xls', 'ppt', 'txt', 'pdf']), // 文件类型, 例如['png', 'jpg', 'jpeg']
fileType: propTypes.array.def([]),
accept: propTypes.string.def('*'),
fileSize: propTypes.number.def(5), // 大小限制(MB)
fileSize: propTypes.number.def(10), // 大小限制(MB)
limit: propTypes.number.def(5), // 数量限制
autoUpload: propTypes.bool.def(true), // 自动上传
drag: propTypes.bool.def(false), // 拖拽上传

View File

@@ -149,20 +149,18 @@
</el-row>
<el-row :gutter="20">
<el-col :span="12" :offset="0">
<el-form-item label="关联规则" v-if="formData.isRelateSignRate == 'true'">
<el-form-item label="关联规则" v-if="formData.isRelateSignRate">
<div>
<el-button @click="formData.saleCommissionRelateRulesConfig.push({})">
新增规则
</el-button>
<el-button @click="formData.rateRules.push({})"> 新增规则 </el-button>
<div
v-for="(item, index) in formData.saleCommissionRelateRulesConfig"
v-for="(item, index) in formData.rateRules"
:key="index"
class="mt-10px flex justify-center items-center"
>
<span>成交率达</span>
<el-input
class="ml-10px"
v-model="item.successRate"
v-model="item.signRate"
placeholder="成交率"
style="width: 100px"
type="number"
@@ -173,7 +171,7 @@
<span>可结算</span>
<el-input
class="ml-10px"
v-model="item.comissionRate"
v-model="item.percentageRate"
placeholder="提成率"
style="width: 100px"
type="number"
@@ -260,7 +258,7 @@ const resetForm = () => {
}
],
isRelateSignRate: false,
saleCommissionRelateRulesConfig: [],
rateRules: [],
isDeductExtraPay: true,
isDeductAfterSale: true,
calculateType: 1

View File

@@ -1,9 +1,9 @@
<template>
<Dialog v-model="dialogVisible" :title="dialogTitle" style="width: 600px">
<el-form :model="formData" ref="formRef" :rules="rules" label-width="80px">
<el-form-item label="生效日期" prop="validTime">
<el-form-item label="生效日期" prop="startDate">
<el-date-picker
v-model="formData.validTime"
v-model="formData.startDate"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
@@ -29,9 +29,10 @@
<el-select v-model="formData.planId" placeholder="请选择" filterable>
<el-option
v-for="item in planOptions"
:key="item.value"
:label="item.label"
:value="item.value"
:key="item.percentageId"
:label="item.percentageName"
:disabled="item.status == 1"
:value="item.percentageId"
/>
</el-select>
</el-form-item>
@@ -104,6 +105,8 @@
<script setup name="DialogSalarySetting">
import * as SalaryApi from '@/api/finance/salary'
import { getPlanSimpleList } from '@/api/finance/plan'
const message = useMessage() // 消息弹窗
const dialogVisible = ref(false) // 弹窗的是否展示
@@ -113,6 +116,7 @@ const formLoading = ref(false) // 表单的加载中1修改时的数据加
const formData = ref({})
const rules = {
startDate: { required: true, message: '生效日期不可为空', trigger: 'blur, change' },
baseSalary: { required: true, message: '基本工资不可为空', trigger: 'blur' }
}
@@ -120,11 +124,13 @@ const rules = {
const open = async (row) => {
dialogVisible.value = true
dialogTitle.value = `工资条设置-【${row.name}`
resetForm()
getOptions()
formLoading.value = true
try {
formData.value = await SalaryApi.getSalaryDetail(id)
formData.value = await SalaryApi.getSalaryDetail(row.id)
if (!formData.value) {
resetForm()
}
} finally {
formLoading.value = false
}
@@ -133,7 +139,9 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
const planOptions = ref([])
function getOptions() {
planOptions.value = []
getPlanSimpleList().then((data) => {
planOptions.value = data
})
}
/** 重置表单 */

View File

@@ -21,10 +21,14 @@
<el-table v-loading="loading" :data="tableList" border stripe>
<el-table-column type="index" width="50" />
<el-table-column label="员工姓名" prop="nickname" />
<el-table-column label="部门" key="deptName" prop="deptName" />
<el-table-column label="手机号码" prop="mobile" width="120" />
<el-table-column label="在职状态" prop="status" />
<el-table-column label="员工姓名" prop="name" />
<el-table-column label="职位" prop="post" />
<el-table-column label="手机号码" prop="mobile" />
<el-table-column label="在职状态">
<template #default="{ row }">
{{ ['在职', '离职'][row.status] }}
</template>
</el-table-column>
<el-table-column label="操作">
<template #default="scope">
<el-button
@@ -50,7 +54,8 @@
<script name="EmployeeList" setup>
import DialogSalary from './Comp/DialogSalary.vue'
import * as SalaryApi from '@/api/finance/salary'
// import * as SalaryApi from '@/api/finance/salary'
import { getEmployeePage } from '@/api/pers/employee'
import { removeNullField } from '@/utils'
const searchForm = ref({
@@ -77,7 +82,7 @@ const total = ref(0)
const getList = async () => {
loading.value = true
try {
const data = await SalaryApi.getSalaryPage(removeNullField(searchForm.value))
const data = await getEmployeePage(removeNullField(searchForm.value))
tableList.value = data.list
total.value = data.total
} finally {

View File

@@ -10,13 +10,51 @@
</el-row>
<el-row :gutter="20">
<el-col :span="12" :offset="0">
<el-form-item label="导入奖金" size="normal">
<UploadFile v-model="formData.files1" :limit="1" :isShowTip="false" />
<el-form-item label="导入奖金">
<UploadFile
v-model="formData.files1"
:limit="1"
:fileType="['xls', 'xlsx']"
accept=".xls,.xlsx"
:isShowTip="false"
>
<template #tip>
<div>
<el-link
type="primary"
:underline="false"
href="https://ss-cloud.ahduima.com/1011/1808052748575576064.pdf"
target="_blank"
>
点击下载模板文件
</el-link>
</div>
</template>
</UploadFile>
</el-form-item>
</el-col>
<el-col :span="12" :offset="0">
<el-form-item label="导入考勤" size="normal">
<UploadFile v-model="formData.files2" :limit="1" :isShowTip="false" />
<el-form-item label="导入考勤" prop="files2">
<UploadFile
v-model="formData.files2"
:limit="1"
:fileType="['xls', 'xlsx']"
accept=".xls,.xlsx"
:isShowTip="false"
>
<template #tip>
<div>
<el-link
type="primary"
:underline="false"
href="https://ss-cloud.ahduima.com/1011/1808052748575576064.pdf"
target="_blank"
>
点击下载模板文件
</el-link>
</div>
</template>
</UploadFile>
</el-form-item>
</el-col>
</el-row>
@@ -24,9 +62,7 @@
<template #footer>
<span>
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" :disabled="formLoading" @click="handleSave">
</el-button>
<el-button type="primary" :disabled="formLoading" @click="handleSave"> 确认生成 </el-button>
</span>
</template>
</Dialog>
@@ -39,10 +75,22 @@ const formData = ref({})
const formLoading = ref(false)
const rules = {}
const rules = {
yearmonth: { required: true, message: '年月不可为空', trigger: 'blur,change' },
files2: { required: true, message: '考勤文件不可为空', trigger: 'blur,change' }
}
function open() {
dialogVisible.value = true
resetForm()
}
function resetForm() {
formData.value = {
yearmonth: new Date().getFullYear(),
files1: '',
files2: ''
}
}
defineExpose({ open })

View File

@@ -47,19 +47,19 @@
</template>
</el-table-column>
<el-table-column prop="dept" label="部门" min-width="90px" />
<el-table-column prop="job" label="职位" min-width="90px" />
<el-table-column prop="post" label="职位" min-width="90px" />
<el-table-column label="应发工资" align="center">
<el-table-column label="基本工资" min-width="90px">
<template #default="{ row }">
<el-input-number
v-if="row.edit"
v-model="row.jbgz"
v-model="row.baseSalary"
:min="0"
:controls="false"
size="small"
style="width: 65px"
/>
<span v-else> {{ row.jbgz }}</span>
<span v-else> {{ row.baseSalary }}</span>
</template>
</el-table-column>
<el-table-column label="补贴" min-width="90px">
@@ -92,13 +92,13 @@
<template #default="{ row }">
<el-input-number
v-if="row.edit"
v-model="row.jiangjin"
v-model="row.rewardSalary"
:min="0"
:controls="false"
size="small"
style="width: 65px"
/>
<span v-else> {{ row.jiangjin }}</span>
<span v-else> {{ row.rewardSalary }}</span>
</template>
</el-table-column>
<el-table-column label="满勤" min-width="90px">
@@ -118,13 +118,13 @@
<template #default="{ row }">
<el-input-number
v-if="row.edit"
v-model="row.jbgz"
v-model="row.extraSalary"
:min="0"
:controls="false"
size="small"
style="width: 65px"
/>
<span v-else> {{ row.jbgz }}</span>
<span v-else> {{ row.extraSalary }}</span>
</template>
</el-table-column>
<el-table-column label="小计" min-width="90px" />
@@ -134,13 +134,13 @@
<template #default="{ row }">
<el-input-number
v-if="row.edit"
v-model="row.jbgz"
v-model="row.meritsSalary"
:min="0"
:controls="false"
size="small"
style="width: 65px"
/>
<span v-else> {{ row.jbgz }}</span>
<span v-else> {{ row.meritsSalary }}</span>
</template>
</el-table-column>
<el-table-column label="请假" min-width="90px">
@@ -202,26 +202,26 @@
<template #default="{ row }">
<el-input-number
v-if="row.edit"
v-model="row.jbgz"
v-model="row.accumulationFundDeduct"
:min="0"
:controls="false"
size="small"
style="width: 65px"
/>
<span v-else> {{ row.jbgz }}</span>
<span v-else> {{ row.accumulationFundDeduct }}</span>
</template>
</el-table-column>
<el-table-column label="社保" min-width="90px">
<template #default="{ row }">
<el-input-number
v-if="row.edit"
v-model="row.jbgz"
v-model="row.socialDeduct"
:min="0"
:controls="false"
size="small"
style="width: 65px"
/>
<span v-else> {{ row.jbgz }}</span>
<span v-else> {{ row.socialDeduct }}</span>
</template>
</el-table-column>
<el-table-column label="所得税" min-width="90px">
@@ -252,7 +252,7 @@
</el-table-column>
<el-table-column label="小计" min-width="90px" />
</el-table-column>
<el-table-column label="实发工资" fixed="right" />
<el-table-column label="实发工资" fixed="right" width="90" />
<el-table-column label="操作" fixed="right" width="200">
<template #default="{ row }">
<el-button

View File

@@ -24,14 +24,8 @@
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="入职日期" prop="hireDate">
<el-date-picker
v-model="formData.hireDate"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择日期时间"
/>
<el-form-item label="组织部门" prop="dept">
<el-input v-model="formData.dept" placeholder="请输入部门" />
</el-form-item>
</el-col>
<el-col :span="12">
@@ -108,6 +102,19 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="入职日期" prop="hireDate">
<el-date-picker
v-model="formData.hireDate"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择日期时间"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="备注">
@@ -137,20 +144,7 @@ const dialogVisible = ref(false) // 弹窗的是否展示
const dialogTitle = ref('') // 弹窗的标题
const formLoading = ref(false) // 表单的加载中1修改时的数据加载2提交的按钮禁用
const formType = ref('') // 表单的类型create - 新增update - 修改
const formData = ref({
name: '',
mobile: '',
email: '',
id: undefined,
username: '',
password: '',
sex: 1,
remark: '',
status: CommonStatusEnum.ENABLE,
hireDate: '',
attendanceSettingId: undefined,
instanceIds: []
})
const formData = ref({})
const formRules = ref({
name: [{ required: true, message: '员工姓名不能为空', trigger: 'blur' }],
post: { required: true, message: '职位不能为空', trigger: 'blur' },
@@ -230,6 +224,8 @@ const resetForm = () => {
id: undefined,
username: '',
password: '',
post: undefined,
dept: undefined,
sex: 1,
remark: '',
status: CommonStatusEnum.ENABLE,