增加补卡申请页面以及接口调试

This commit is contained in:
BianLzhaoMin 2026-01-30 10:45:52 +08:00
parent 0e600de855
commit 87fa1ae5cf
5 changed files with 1940 additions and 1326 deletions

View File

@ -0,0 +1,47 @@
// 补卡申请页面接口
import request from '@/utils/request'
// 获取补卡申请列表
export function getCardReplenishmentManageListAPI(data) {
return request({
url: '/system/repairCard/getAllList',
method: 'GET',
params: data
})
}
// 新增补卡申请
export function addCardReplenishmentManageAPI(data) {
return request({
url: '/system/repairCard/addRepairCard',
method: 'post',
data
})
}
// 修改补卡申请
export function updateCardReplenishmentManageAPI(data) {
return request({
url: '/system/repairCard/update',
method: 'post',
data
})
}
// 删除补卡申请
export function deleteCardReplenishmentManageAPI(data) {
return request({
url: '/system/repairCard/delRepairCard',
method: 'post',
data
})
}
// 判断是否已经补过卡
export function isCardReplenishmentManageAPI(data) {
return request({
url: '/system/repairCard/getAttCardStatus',
method: 'post',
data
})
}

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,503 @@
<template> <template>
<div>补卡管理</div> <!-- 补卡申请管理 -->
<div class="app-container">
<el-form
size="small"
:inline="true"
ref="queryFormRef"
label-width="auto"
:model="queryParams"
>
<el-form-item label="人员姓名" prop="userName">
<el-input
clearable
style="width: 240px"
placeholder="请输入人员姓名"
v-model.trim="queryParams.userName"
@keyup.enter.native="getCardReplenishmentManageList"
/>
</el-form-item>
<el-form-item label="部门" prop="orgId">
<treeselect
placeholder="选择部门"
style="width: 240px"
:options="deptOptions"
:normalizer="normalizer"
v-model="queryParams.orgId"
/>
</el-form-item>
<el-form-item>
<el-button
type="primary"
size="mini"
icon="el-icon-search"
@click="getCardReplenishmentManageList"
>
查询
</el-button>
<el-button
size="mini"
type="warning"
icon="el-icon-refresh"
@click="onHandleReset"
>
重置
</el-button>
<el-button
plain
size="mini"
type="primary"
@click="onHandleAdd"
icon="el-icon-plus"
>
新增
</el-button>
</el-form-item>
</el-form>
<!-- 列表 -->
<el-table v-loading="loading" :data="applyList" border>
<el-table-column
label="序号"
align="center"
width="80"
type="index"
>
<template slot-scope="scope">
<span>{{
(queryParams.pageNum - 1) * queryParams.pageSize +
scope.$index +
1
}}</span>
</template>
</el-table-column>
<el-table-column
v-for="item in tableColumns"
:key="item.prop"
:label="item.label"
:prop="item.prop"
align="center"
>
<template slot-scope="scope">
<template v-if="item.slot === 'attType'">
<el-tag
:type="
scope.row.attType == 1 ? 'primary' : 'success'
"
>
{{ scope.row.attType === 1 ? '上午' : '下午' }}
</el-tag>
</template>
<template v-else>
<span>{{ scope.row[item.prop] }}</span>
</template>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="100">
<template slot-scope="scope">
<el-button
type="danger"
size="mini"
@click="onHandleDelete(scope.row)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 新增编辑弹框 -->
<el-dialog
width="60%"
append-to-body
:title="dialogTitle"
@close="onHandleCloseDialog"
:visible.sync="dialogVisible"
>
<el-form
label-width="120px"
ref="addAndEditFormRef"
:model="addAndEditForm"
:rules="addAndEditFormRules"
>
<el-row :gutter="10">
<el-col :span="12">
<el-form-item label="人员姓名" prop="userId">
<el-select
filterable
clearable
disabled
style="width: 100%"
placeholder="请选择人员姓名"
v-model="addAndEditForm.userId"
>
<el-option
:key="item.id"
:value="item.id"
:label="item.userName"
v-for="item in personSelectList"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="身份证号码" prop="idNumber">
<el-input
disabled
style="width: 100%"
placeholder="请选择人员姓名后获取"
v-model="addAndEditForm.idNumber"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="所属部门" prop="orgName">
<el-input
disabled
style="width: 100%"
placeholder="请选择人员姓名后获取"
v-model="addAndEditForm.orgName"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="补卡日期" prop="currentDay">
<el-date-picker
type="date"
style="width: 100%"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
placeholder="请选择补卡日期"
:picker-options="pickerOptions"
v-model="addAndEditForm.currentDay"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="补卡类型" prop="attType">
<el-radio-group
size="small"
v-model="addAndEditForm.attType"
>
<el-radio-button :label="1">
上午
</el-radio-button>
<el-radio-button :label="2">
下午
</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row
style="
padding-top: 10px;
text-align: right;
border-top: 1px solid #e6e6e6;
"
>
<el-button
size="medium"
type="primary"
@click="onHandleSubmit"
>
提交
</el-button>
<el-button
size="medium"
type="info"
@click="onHandleCloseDialog"
>
取消
</el-button>
</el-row>
</el-form>
</el-dialog>
</div>
</template> </template>
<script> <script>
export default {}; import {
</script> getCardReplenishmentManageListAPI,
addCardReplenishmentManageAPI,
deleteCardReplenishmentManageAPI,
isCardReplenishmentManageAPI,
} from '@/api/report/cardReplenishmentManage'
<style> //
</style> import { getPersonSelect } from '@/api/system/userInfo'
import { getOldData } from '@/api/setting/change'
import { listDeptTree } from '@/api/system/userInfo'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
export default {
name: 'CardReplenishmentManage',
components: { Treeselect },
data() {
return {
total: 0,
loading: false,
deptOptions: [],
personSelectList: [], //
addAndEditForm: {
userId: '', // id
userName: '', //
idNumber: '', //
orgId: '', // ID
orgName: '', //
currentDay: '', //
attType: '', // 1 2
},
applyList: [],
dialogVisible: false,
dialogTitle: '新增',
tableColumns: [
{
label: '姓名',
prop: 'userName',
},
{
label: '所属部门',
prop: 'orgName',
},
{
label: '补卡时间',
prop: 'currentDay',
},
{
label: '补卡类型',
prop: 'attType',
slot: 'attType',
},
],
queryParams: {
pageNum: 1,
pageSize: 10,
userName: '',
orgId: undefined,
},
//
addAndEditFormRules: {
userId: [
{
required: true,
trigger: 'change',
message: '请选择人员姓名',
},
],
currentDay: [
{
required: true,
trigger: 'change',
message: '请选择补卡日期',
},
],
attType: [
{
required: true,
trigger: 'change',
message: '请选择补卡类型',
},
],
},
//
pickerOptions: {
disabledDate: (time) => {
const today = new Date()
const currentDay = today.getDate()
const currentMonth = today.getMonth()
const currentYear = today.getFullYear()
// 3
if (currentDay > 3) {
// 3
const minDate = new Date(currentYear, currentMonth, 3)
const maxDate = new Date(today)
maxDate.setHours(23, 59, 59, 999)
return (
time.getTime() < minDate.getTime() ||
time.getTime() > maxDate.getTime()
)
} else {
// 31
const lastMonth =
currentMonth === 0 ? 11 : currentMonth - 1
const lastMonthYear =
currentMonth === 0 ? currentYear - 1 : currentYear
const minDate = new Date(lastMonthYear, lastMonth, 1)
const maxDate = new Date(today)
maxDate.setHours(23, 59, 59, 999)
return (
time.getTime() < minDate.getTime() ||
time.getTime() > maxDate.getTime()
)
}
},
},
}
},
methods: {
//
onHandleAdd() {
this.getPersonSelect()
this.dialogTitle = '新增'
this.dialogVisible = true
},
//
onHandleDelete(row) {
this.$confirm('确定删除该补卡申请吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(async () => {
const res = await deleteCardReplenishmentManageAPI({
id: row.id,
})
if (res.code === 200) {
this.$modal.msgSuccess('删除成功!')
this.getCardReplenishmentManageList()
}
})
},
//
onHandleReset() {
this.$refs.queryFormRef.resetFields()
this.queryParams.pageNum = 1
this.queryParams.pageSize = 10
this.getCardReplenishmentManageList()
},
//
async getCardReplenishmentManageList() {
const res = await getCardReplenishmentManageListAPI(
this.queryParams,
)
this.applyList = res?.rows || []
this.total = res?.total || 0
},
//
async getPersonSelect() {
const res = await getPersonSelect()
this.personSelectList = res?.data?.map((item) => {
return {
id: item.userIds,
userName: item.userName,
idNumber: item.idNumber,
}
})
// storeId
this.addAndEditForm.userId = this.$store.state.user.id.toString()
this.handleChangeUserId(this.addAndEditForm.userId)
},
// change
async handleChangeUserId(value) {
if (!value) {
this.addAndEditForm.idNumber = ''
this.addAndEditForm.userName = ''
this.addAndEditForm.orgId = ''
this.addAndEditForm.orgName = ''
return
}
const userInfo = this.personSelectList.find(
(item) => item.id === value,
)
if (userInfo) {
this.addAndEditForm.idNumber = userInfo.idNumber
this.addAndEditForm.userName = userInfo.userName
}
// userId
const res = await getOldData({
userId: value,
userIds: value,
})
this.addAndEditForm.orgId = res?.data?.oldOrgId
this.addAndEditForm.orgName = res?.data?.oldOrgName
},
//
onHandleSubmit() {
this.$refs.addAndEditFormRef.validate(async (valid) => {
if (valid) {
//
const { idNumber, userName, currentDay, attType } =
this.addAndEditForm
const res = await isCardReplenishmentManageAPI({
idNumber,
userName,
currentDay,
attType,
})
if (res.msg === '未打卡') {
const result = await addCardReplenishmentManageAPI(
this.addAndEditForm,
)
if (result.code === 200) {
this.$modal.msgSuccess('补卡申请提交成功!')
this.onHandleCloseDialog()
this.getCardReplenishmentManageList()
}
return
}
this.$modal.msgError(res.msg)
}
})
},
//
onHandleCloseDialog() {
this.dialogVisible = false
this.addAndEditForm = {
userId: '',
userName: '',
idNumber: '',
}
this.$refs.addAndEditFormRef.resetFields()
},
//
getDeptList() {
listDeptTree().then((response) => {
this.deptOptions = this.handleTree(response.data, 'id')
})
},
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children
}
return {
id: node.id,
label: node.orgName,
children: node.children,
}
},
},
mounted() {
this.getDeptList()
this.getCardReplenishmentManageList()
},
}
</script>

View File

@ -46,11 +46,12 @@
icon="el-icon-search" icon="el-icon-search"
size="mini" size="mini"
@click="handleQuery" @click="handleQuery"
>搜索</el-button
>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button
> >
搜索
</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">
重置
</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">

View File

@ -208,10 +208,11 @@
<el-form-item label="考勤变更时间" prop="updateTime"> <el-form-item label="考勤变更时间" prop="updateTime">
<el-date-picker <el-date-picker
type="date" type="date"
placeholder="选择日期"
v-model="form.updateTime"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd" format="yyyy-MM-dd"
style="width: 100%"
placeholder="选择日期"
value-format="yyyy-MM-dd"
v-model="form.updateTime"
:picker-options="pickerOptions" :picker-options="pickerOptions"
/> />
</el-form-item> </el-form-item>