新增基本工资档级管理功能

pull/653/head
syy 2024-12-25 17:05:49 +08:00
parent dfb4ce965e
commit 7813cb2100
4 changed files with 602 additions and 0 deletions

View File

@ -0,0 +1,176 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="职级" prop="level">
<el-input v-model="formData.level" placeholder="请输入职级" />
</el-form-item>
<el-form-item label="档位1" prop="gear1">
<el-input v-model="formData.gear1" placeholder="请输入档位1" />
</el-form-item>
<el-form-item label="档位2" prop="gear2">
<el-input v-model="formData.gear2" placeholder="请输入档位2" />
</el-form-item>
<el-form-item label="档位3" prop="gear3">
<el-input v-model="formData.gear3" placeholder="请输入档位3" />
</el-form-item>
<el-form-item label="档位4" prop="gear4">
<el-input v-model="formData.gear4" placeholder="请输入档位4" />
</el-form-item>
<el-form-item label="档位5" prop="gear5">
<el-input v-model="formData.gear5" placeholder="请输入档位5" />
</el-form-item>
<el-form-item label="档位6" prop="gear6">
<el-input v-model="formData.gear6" placeholder="请输入档位6" />
</el-form-item>
<el-form-item label="档位7" prop="gear7">
<el-input v-model="formData.gear7" placeholder="请输入档位7" />
</el-form-item>
<el-form-item label="档位8" prop="gear8">
<el-input v-model="formData.gear8" placeholder="请输入档位8" />
</el-form-item>
<el-form-item label="档位9" prop="gear9">
<el-input v-model="formData.gear9" placeholder="请输入档位9" />
</el-form-item>
<el-form-item label="档位10" prop="gear10">
<el-input v-model="formData.gear10" placeholder="请输入档位10" />
</el-form-item>
<el-form-item label="档位11" prop="gear11">
<el-input v-model="formData.gear11" placeholder="请输入档位11" />
</el-form-item>
<el-form-item label="档位12" prop="gear12">
<el-input v-model="formData.gear12" placeholder="请输入档位12" />
</el-form-item>
<el-form-item label="档位13" prop="gear13">
<el-input v-model="formData.gear13" placeholder="请输入档位13" />
</el-form-item>
<el-form-item label="档差" prop="gearDiff">
<el-input v-model="formData.gearDiff" placeholder="请输入档差" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { LevelSalaryApi, LevelSalaryVO } from '@/api/arcb/levelsalary'
/** 基本工资档级 表单 */
defineOptions({ name: 'LevelSalaryForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
level: undefined,
gear1: undefined,
gear2: undefined,
gear3: undefined,
gear4: undefined,
gear5: undefined,
gear6: undefined,
gear7: undefined,
gear8: undefined,
gear9: undefined,
gear10: undefined,
gear11: undefined,
gear12: undefined,
gear13: undefined,
gearDiff: undefined,
})
const formRules = reactive({
level: [{ required: true, message: '职级不能为空', trigger: 'blur' }],
gear1: [{ required: true, message: '档位1不能为空', trigger: 'blur' }],
gear2: [{ required: true, message: '档位2不能为空', trigger: 'blur' }],
gear3: [{ required: true, message: '档位3不能为空', trigger: 'blur' }],
gear4: [{ required: true, message: '档位4不能为空', trigger: 'blur' }],
gear5: [{ required: true, message: '档位5不能为空', trigger: 'blur' }],
gear6: [{ required: true, message: '档位6不能为空', trigger: 'blur' }],
gear7: [{ required: true, message: '档位7不能为空', trigger: 'blur' }],
gear8: [{ required: true, message: '档位8不能为空', trigger: 'blur' }],
gear9: [{ required: true, message: '档位9不能为空', trigger: 'blur' }],
gear10: [{ required: true, message: '档位10不能为空', trigger: 'blur' }],
gear11: [{ required: true, message: '档位11不能为空', trigger: 'blur' }],
gear12: [{ required: true, message: '档位12不能为空', trigger: 'blur' }],
gear13: [{ required: true, message: '档位13不能为空', trigger: 'blur' }],
gearDiff: [{ required: true, message: '档差不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await LevelSalaryApi.getLevelSalary(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as LevelSalaryVO
if (formType.value === 'create') {
await LevelSalaryApi.createLevelSalary(data)
message.success(t('common.createSuccess'))
} else {
await LevelSalaryApi.updateLevelSalary(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
level: undefined,
gear1: undefined,
gear2: undefined,
gear3: undefined,
gear4: undefined,
gear5: undefined,
gear6: undefined,
gear7: undefined,
gear8: undefined,
gear9: undefined,
gear10: undefined,
gear11: undefined,
gear12: undefined,
gear13: undefined,
gearDiff: undefined,
}
formRef.value?.resetFields()
}
</script>

View File

@ -0,0 +1,54 @@
import request from '@/config/axios'
// 基本工资档级 VO
export interface LevelSalaryVO {
id: string // 唯一标识符
level: number // 职级
gear1: number // 档位1
gear2: number // 档位2
gear3: number // 档位3
gear4: number // 档位4
gear5: number // 档位5
gear6: number // 档位6
gear7: number // 档位7
gear8: number // 档位8
gear9: number // 档位9
gear10: number // 档位10
gear11: number // 档位11
gear12: number // 档位12
gear13: number // 档位13
gearDiff: number // 档差
}
// 基本工资档级 API
export const LevelSalaryApi = {
// 查询基本工资档级分页
getLevelSalaryPage: async (params: any) => {
return await request.get({ url: `/arcb/level-salary/page`, params })
},
// 查询基本工资档级详情
getLevelSalary: async (id: number) => {
return await request.get({ url: `/arcb/level-salary/get?id=` + id })
},
// 新增基本工资档级
createLevelSalary: async (data: LevelSalaryVO) => {
return await request.post({ url: `/arcb/level-salary/create`, data })
},
// 修改基本工资档级
updateLevelSalary: async (data: LevelSalaryVO) => {
return await request.put({ url: `/arcb/level-salary/update`, data })
},
// 删除基本工资档级
deleteLevelSalary: async (id: number) => {
return await request.delete({ url: `/arcb/level-salary/delete?id=` + id })
},
// 导出基本工资档级 Excel
exportLevelSalary: async (params) => {
return await request.download({ url: `/arcb/level-salary/export-excel`, params })
},
}

View File

@ -0,0 +1,176 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="职级" prop="level">
<el-input v-model="formData.level" placeholder="请输入职级" />
</el-form-item>
<el-form-item label="档位1" prop="gear1">
<el-input v-model="formData.gear1" placeholder="请输入档位1" />
</el-form-item>
<el-form-item label="档位2" prop="gear2">
<el-input v-model="formData.gear2" placeholder="请输入档位2" />
</el-form-item>
<el-form-item label="档位3" prop="gear3">
<el-input v-model="formData.gear3" placeholder="请输入档位3" />
</el-form-item>
<el-form-item label="档位4" prop="gear4">
<el-input v-model="formData.gear4" placeholder="请输入档位4" />
</el-form-item>
<el-form-item label="档位5" prop="gear5">
<el-input v-model="formData.gear5" placeholder="请输入档位5" />
</el-form-item>
<el-form-item label="档位6" prop="gear6">
<el-input v-model="formData.gear6" placeholder="请输入档位6" />
</el-form-item>
<el-form-item label="档位7" prop="gear7">
<el-input v-model="formData.gear7" placeholder="请输入档位7" />
</el-form-item>
<el-form-item label="档位8" prop="gear8">
<el-input v-model="formData.gear8" placeholder="请输入档位8" />
</el-form-item>
<el-form-item label="档位9" prop="gear9">
<el-input v-model="formData.gear9" placeholder="请输入档位9" />
</el-form-item>
<el-form-item label="档位10" prop="gear10">
<el-input v-model="formData.gear10" placeholder="请输入档位10" />
</el-form-item>
<el-form-item label="档位11" prop="gear11">
<el-input v-model="formData.gear11" placeholder="请输入档位11" />
</el-form-item>
<el-form-item label="档位12" prop="gear12">
<el-input v-model="formData.gear12" placeholder="请输入档位12" />
</el-form-item>
<el-form-item label="档位13" prop="gear13">
<el-input v-model="formData.gear13" placeholder="请输入档位13" />
</el-form-item>
<el-form-item label="档差" prop="gearDiff">
<el-input v-model="formData.gearDiff" placeholder="请输入档差" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { LevelSalaryApi, LevelSalaryVO } from '@/api/arcb/salary/levelsalary'
/** 基本工资档级 表单 */
defineOptions({ name: 'LevelSalaryForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
level: undefined,
gear1: undefined,
gear2: undefined,
gear3: undefined,
gear4: undefined,
gear5: undefined,
gear6: undefined,
gear7: undefined,
gear8: undefined,
gear9: undefined,
gear10: undefined,
gear11: undefined,
gear12: undefined,
gear13: undefined,
gearDiff: undefined,
})
const formRules = reactive({
level: [{ required: true, message: '职级不能为空', trigger: 'blur' }],
gear1: [{ required: true, message: '档位1不能为空', trigger: 'blur' }],
gear2: [{ required: true, message: '档位2不能为空', trigger: 'blur' }],
gear3: [{ required: true, message: '档位3不能为空', trigger: 'blur' }],
gear4: [{ required: true, message: '档位4不能为空', trigger: 'blur' }],
gear5: [{ required: true, message: '档位5不能为空', trigger: 'blur' }],
gear6: [{ required: true, message: '档位6不能为空', trigger: 'blur' }],
gear7: [{ required: true, message: '档位7不能为空', trigger: 'blur' }],
gear8: [{ required: true, message: '档位8不能为空', trigger: 'blur' }],
gear9: [{ required: true, message: '档位9不能为空', trigger: 'blur' }],
gear10: [{ required: true, message: '档位10不能为空', trigger: 'blur' }],
gear11: [{ required: true, message: '档位11不能为空', trigger: 'blur' }],
gear12: [{ required: true, message: '档位12不能为空', trigger: 'blur' }],
gear13: [{ required: true, message: '档位13不能为空', trigger: 'blur' }],
gearDiff: [{ required: true, message: '档差不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await LevelSalaryApi.getLevelSalary(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as LevelSalaryVO
if (formType.value === 'create') {
await LevelSalaryApi.createLevelSalary(data)
message.success(t('common.createSuccess'))
} else {
await LevelSalaryApi.updateLevelSalary(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
level: undefined,
gear1: undefined,
gear2: undefined,
gear3: undefined,
gear4: undefined,
gear5: undefined,
gear6: undefined,
gear7: undefined,
gear8: undefined,
gear9: undefined,
gear10: undefined,
gear11: undefined,
gear12: undefined,
gear13: undefined,
gearDiff: undefined,
}
formRef.value?.resetFields()
}
</script>

View File

@ -0,0 +1,196 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="职级" prop="level">
<el-input
v-model="queryParams.level"
placeholder="请输入职级"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['arcb:level-salary:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['arcb:level-salary:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="职级" align="center" prop="level" />
<el-table-column label="档位1" align="center" prop="gear1" />
<el-table-column label="档位2" align="center" prop="gear2" />
<el-table-column label="档位3" align="center" prop="gear3" />
<el-table-column label="档位4" align="center" prop="gear4" />
<el-table-column label="档位5" align="center" prop="gear5" />
<el-table-column label="档位6" align="center" prop="gear6" />
<el-table-column label="档位7" align="center" prop="gear7" />
<el-table-column label="档位8" align="center" prop="gear8" />
<el-table-column label="档位9" align="center" prop="gear9" />
<el-table-column label="档位10" align="center" prop="gear10" />
<el-table-column label="档位11" align="center" prop="gear11" />
<el-table-column label="档位12" align="center" prop="gear12" />
<el-table-column label="档位13" align="center" prop="gear13" />
<el-table-column label="档差" align="center" prop="gearDiff" />
<el-table-column label="操作" align="center" min-width="120px">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['arcb:level-salary:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['arcb:level-salary:delete']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<LevelSalaryForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import download from '@/utils/download'
import { LevelSalaryApi, LevelSalaryVO } from '@/api/arcb/salary/levelsalary'
import LevelSalaryForm from './LevelSalaryForm.vue'
/** 基本工资档级 列表 */
defineOptions({ name: 'LevelSalary' })
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref<LevelSalaryVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
level: undefined,
gear1: undefined,
gear2: undefined,
gear3: undefined,
gear4: undefined,
gear5: undefined,
gear6: undefined,
gear7: undefined,
gear8: undefined,
gear9: undefined,
gear10: undefined,
gear11: undefined,
gear12: undefined,
gear13: undefined,
gearDiff: undefined,
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await LevelSalaryApi.getLevelSalaryPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await LevelSalaryApi.deleteLevelSalary(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await LevelSalaryApi.exportLevelSalary(queryParams)
download.excel(data, '基本工资档级.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>