Commit 6867b551 authored by 赵啸非's avatar 赵啸非

添加考勤汇总前后端等数据

parent 8303489a
......@@ -49,6 +49,14 @@ const router = new Router({
...restBuilder('staff/regular', 'staff/regular'),// 员工转正信息
...restBuilder('staff/leave', 'staff/leave'),// 员工离职信息
...restBuilder('staff/contract', 'staff/contract'),// 员工合同信息
...restBuilder('attendance/record/hik', 'attendance/record/hik'),// 海康考勤
...restBuilder('attendance/record/error', 'attendance/record/error'),// 考勤打卡记录异常信息
...restBuilder('attendance/stat', 'attendance/stat'),// 考勤汇总信息
...restBuilder('attendance/staff/stat', 'attendance/staff/stat'),// 考勤人员汇总信息
...restBuilder('attendance/record', 'attendance/record'),// 考勤打卡记录信息
...restBuilder('attendance/record/detail', 'attendance/record/detail'),// 考勤打卡记录详细信息
...restBuilder('attendance/group', 'attendance/group'),// 考勤组信息
......
<template>
<!-- 弹出框表单 -->
<el-dialog :title="title" :visible.sync="open" width="90%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<Field label="员工ID" prop="staffId" v-model="form.staffId" placeholder="请输入员工ID"/>
<Field label="员工姓名" prop="staffName" v-model="form.staffName" placeholder="请输入员工姓名"/>
<Field label="工号" prop="workNum" v-model="form.workNum" placeholder="请输入工号"/>
<Field label="所属部门" prop="deptId" v-model="form.deptId" placeholder="请输入所属部门"/>
<Field label="所属部门名称" prop="deptName" v-model="form.deptName" placeholder="请输入所属部门名称"/>
<Field label="职位ID" prop="positionId" v-model="form.positionId" placeholder="请输入职位ID"/>
<Field label="职位名称" prop="positionName" v-model="form.positionName" placeholder="请输入职位名称"/>
<Field label="所属考勤组ID" prop="attendanceGroupId" v-model="form.attendanceGroupId" placeholder="请输入所属考勤组ID"/>
<Field label="所属考勤组名称" prop="attendanceGroupName" v-model="form.attendanceGroupName" placeholder="请输入所属考勤组名称"/>
<Field label="班次ID" prop="shiftsId" v-model="form.shiftsId" placeholder="请输入班次ID"/>
<Field label="班次名称" prop="shiftsName" v-model="form.shiftsName" placeholder="请输入班次名称"/>
<Field label="上下班时间" prop="goOffDateTime" v-model="form.goOffDateTime" type="date" />
<Field label="异常时间" prop="errorDateTime" v-model="form.errorDateTime" type="date" />
<Field label="实际打卡时间" prop="actualAttendanceDateTime" v-model="form.actualAttendanceDateTime" type="date" />
<Field label="处理时间" prop="operDateTime" v-model="form.operDateTime" type="date" />
<Field label="处理人" prop="opertor" v-model="form.opertor" placeholder="请输入处理人"/>
<Field label="异常状态" prop="errorStatus" v-model="form.errorStatus" type="select" :enumData="dict.errorStatus" placeholder="请选择异常状态"/>
<Field label="处理状态" prop="processStatus" v-model="form.processStatus" type="select" :enumData="dict.processStatus" placeholder="请选择处理状态"/>
<Field label="处理结果" prop="processResult" v-model="form.processResult" placeholder="请输入处理结果"/>
<Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" v-if="pageInfo.type !== 'view'" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</template>
<script>
import form from "@/assets/mixins/formdialog";
import dialogShow from "./dialogshow";
export default {
mixins: [form],
components: {
dialogShow ,
},
data() {
return {
// 遮罩层
loading: true,
// 弹出层标题
title: "考勤打卡记录异常信息",
// 是否显示弹出层
open: false,
toString:[
"errorStatus",
"processStatus",
],
// 表单校验
rules: {
staffName: [
{required: true,message: "请输入员工姓名", trigger: "blur" },
{max: 64,message: "最多只能录入64个字符",trigger: "blur",},
],
createTime: [
{required: true,message: "请选择创建时间" },
],
}
};
},
methods: {
/** 编辑 */
edit(row) {
this.reset()
this.query = { id: row.id };
this.urls.currUrl ="attendance/record/error/edit";
this.getData();
this.pageInfo.type="edit"
this.title = "修改考勤打卡记录异常信息";
},
/** 新增 */
add(row) {
this.reset()
this.urls.currUrl = "attendance/record/error/add";
this.getData();
this.pageInfo.type="add"
this.title = "新增考勤打卡记录异常信息";
},
/** 查看*/
view(row) {
this.reset()
this.query = { id: row.id };
this.urls.currUrl ="attendance/record/error/view";
this.getData();
this.pageInfo.type="view"
this.title = "考勤打卡记录异常信息详细";
},
/**取消按钮 */
cancel() {
this.open = false;
},
/**获取数据后弹框 */
afterRender(data) {
this.open = true;
},
afterSubmit(data) {
this.open = false;
this.$emit("ok");
},
// 表单重置
reset() {
this.form = {
staffId : null,
staffName : "",
workNum : "",
deptId : null,
deptName : "",
positionId : null,
positionName : "",
attendanceGroupId : null,
attendanceGroupName : "",
shiftsId : null,
shiftsName : "",
goOffDateTime : null,
errorDateTime : null,
actualAttendanceDateTime : null,
operDateTime : null,
opertor : "",
errorStatus : 0,
processStatus : 0,
processResult : "",
remark : "",
};
this.resetForm("form");
},
resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
},
},
};
</script>
<template>
<div class="page">
<LayoutTable :data="tableData" :config="tableConfig">
</LayoutTable>
<dialog-show ref="dialogform" @ok="getData" />
</div>
</template>
<script>
/** 表单弹出框模式需引入 */
import dialogShow from "./dialogshow";
import table from "@/assets/mixins/table";
export default {
name: "AttendanceRecordErrorList",
components: {
dialogShow
},
mixins: [table],
created() {
},
methods: {
/** 重写新增方法 */
toAdd(row) {
this.$refs.dialogform.add(row);
},
/** 重写编辑方法 */
toEdit(row) {
this.$refs.dialogform.edit(row);
},
/** 重写查看方法 */
toView(row) {
this.$refs.dialogform.view(row);
},
},
data() {
return {
config: {
search: [
{
name: "staffName",
type: "text",
label: "员工姓名",
fuzzy: true
},
{
name: "deptId",
type: "text",
label: "所属部门",
fuzzy: true
},
{
name: "errorStatus",
type: "select",
label: "异常状态",
fuzzy: true
},
],
columns: [
{type: "selection", width: 60},
{type: "index",label: "序号",width: 50},
{label: "员工姓名", prop: "staffName"},
{label: "上下班时间", prop: "goOffDateTime", formatter: this.formatterDate},
{label: "异常时间", prop: "errorDateTime", formatter: this.formatterDate},
{label: "实际打卡时间", prop: "actualAttendanceDateTime", formatter: this.formatterDate},
{label: "处理时间", prop: "operDateTime", formatter: this.formatterDate},
{label: "异常状态", prop: "errorStatus",formatter: this.formatter},
{label: "处理状态", prop: "processStatus",formatter: this.formatter},
{label: "创建用户", prop: "createUserId", formatter: this.formatter},
{
label: "操作",
width: 240,
formatter: row => {
return (
<table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
);
}
}
]
}
};
}
};
</script>
\ No newline at end of file
<template>
<layout-view>
<el-descriptions :title="title" :column="column" :size="size" :colon="false" border>
<template slot="title">
<i class="el-icon-tickets"></i>
基本详细信息
</template>
<template slot="extra">
<el-button type="primary" @click="$router.go(-1)" size="small">返回</el-button>
</template>
<el-descriptions-item label="员工ID" label-class-name="labelClass" content-class-name="contentClass">
{{form.staffId}}
</el-descriptions-item>
<el-descriptions-item label="员工姓名" label-class-name="labelClass" content-class-name="contentClass">
{{form.staffName}}
</el-descriptions-item>
<el-descriptions-item label="工号" label-class-name="labelClass" content-class-name="contentClass">
{{form.workNum}}
</el-descriptions-item>
<el-descriptions-item label="所属部门" label-class-name="labelClass" content-class-name="contentClass">
{{form.deptId}}
</el-descriptions-item>
<el-descriptions-item label="所属部门名称" label-class-name="labelClass" content-class-name="contentClass">
{{form.deptName}}
</el-descriptions-item>
<el-descriptions-item label="职位ID" label-class-name="labelClass" content-class-name="contentClass">
{{form.positionId}}
</el-descriptions-item>
<el-descriptions-item label="职位名称" label-class-name="labelClass" content-class-name="contentClass">
{{form.positionName}}
</el-descriptions-item>
<el-descriptions-item label="所属考勤组ID" label-class-name="labelClass" content-class-name="contentClass">
{{form.attendanceGroupId}}
</el-descriptions-item>
<el-descriptions-item label="所属考勤组名称" label-class-name="labelClass" content-class-name="contentClass">
{{form.attendanceGroupName}}
</el-descriptions-item>
<el-descriptions-item label="班次ID" label-class-name="labelClass" content-class-name="contentClass">
{{form.shiftsId}}
</el-descriptions-item>
<el-descriptions-item label="班次名称" label-class-name="labelClass" content-class-name="contentClass">
{{form.shiftsName}}
</el-descriptions-item>
<el-descriptions-item label="上下班时间" label-class-name="labelClass" content-class-name="contentClass">
{{ util_formatterDate(form.goOffDateTime)}}
</el-descriptions-item>
<el-descriptions-item label="异常时间" label-class-name="labelClass" content-class-name="contentClass">
{{ util_formatterDate(form.errorDateTime)}}
</el-descriptions-item>
<el-descriptions-item label="实际打卡时间" label-class-name="labelClass" content-class-name="contentClass">
{{ util_formatterDate(form.actualAttendanceDateTime)}}
</el-descriptions-item>
<el-descriptions-item label="处理时间" label-class-name="labelClass" content-class-name="contentClass">
{{ util_formatterDate(form.operDateTime)}}
</el-descriptions-item>
<el-descriptions-item label="处理人" label-class-name="labelClass" content-class-name="contentClass">
{{form.opertor}}
</el-descriptions-item>
<el-descriptions-item label="异常状态" label-class-name="labelClass" content-class-name="contentClass">
{{ util_formatters("errorStatus", form.errorStatus) }}
</el-descriptions-item>
<el-descriptions-item label="处理状态" label-class-name="labelClass" content-class-name="contentClass">
{{ util_formatters("processStatus", form.processStatus) }}
</el-descriptions-item>
<el-descriptions-item label="处理结果" label-class-name="labelClass" content-class-name="contentClass">
{{form.processResult}}
</el-descriptions-item>
<el-descriptions-item label="备注" label-class-name="labelClass" content-class-name="contentClass">
{{form.remark}}
</el-descriptions-item>
</el-descriptions>
</layout-view>
</template>
<script>
import view from "@/assets/mixins/view";
export default {
mixins: [view],
components: {
},
methods: {
},
data() {
return {
size:"small",
column:2,
toString:[
"errorStatus",
"processStatus",
],
toArrays: [
],
toDate: [
]
}
}
}
</script>
<style lang="less">
.labelClass{
width: 200px;
}
.el-descriptions__body{
margin-left: 5px;
margin-right: 5px;
color: #606266;
background-color: #FFF;
}
.contentClass{
width: 600px;
}
</style>
\ No newline at end of file
<template>
<!-- 弹出框表单 -->
<el-dialog :title="title" :visible.sync="open" width="90%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<Field label="员工ID" prop="staffId" v-model="form.staffId" placeholder="请输入员工ID"/>
<Field label="员工姓名" prop="staffName" v-model="form.staffName" placeholder="请输入员工姓名"/>
<Field label="工号" prop="workNum" v-model="form.workNum" placeholder="请输入工号"/>
<Field label="所属部门" prop="deptId" v-model="form.deptId" placeholder="请输入所属部门"/>
<Field label="所属部门名称" prop="deptName" v-model="form.deptName" placeholder="请输入所属部门名称"/>
<Field label="职位ID" prop="positionId" v-model="form.positionId" placeholder="请输入职位ID"/>
<Field label="职位名称" prop="positionName" v-model="form.positionName" placeholder="请输入职位名称"/>
<Field label="所属考勤组ID" prop="attendanceGroupId" v-model="form.attendanceGroupId" placeholder="请输入所属考勤组ID"/>
<Field label="所属考勤组名称" prop="attendanceGroupName" v-model="form.attendanceGroupName" placeholder="请输入所属考勤组名称"/>
<Field label="班次ID" prop="shiftsId" v-model="form.shiftsId" placeholder="请输入班次ID"/>
<Field label="班次名称" prop="shiftsName" v-model="form.shiftsName" placeholder="请输入班次名称"/>
<Field label="考勤日期" prop="attendanceDate" v-model="form.attendanceDate" type="date" />
<Field label="考勤点名称" prop="attendanceAddress" v-model="form.attendanceAddress" placeholder="请输入考勤点名称"/>
<Field label="事件源" prop="eventSource" v-model="form.eventSource" placeholder="请输入事件源"/>
<Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" v-if="pageInfo.type !== 'view'" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</template>
<script>
import form from "@/assets/mixins/formdialog";
import dialogShow from "./dialogshow";
export default {
mixins: [form],
components: {
dialogShow ,
},
data() {
return {
// 遮罩层
loading: true,
// 弹出层标题
title: "海康考勤打卡记录汇总信息",
// 是否显示弹出层
open: false,
toString:[
],
// 表单校验
rules: {
staffName: [
{required: true,message: "请输入员工姓名", trigger: "blur" },
{max: 64,message: "最多只能录入64个字符",trigger: "blur",},
],
createTime: [
{required: true,message: "请选择创建时间" },
],
}
};
},
methods: {
/** 编辑 */
edit(row) {
this.reset()
this.query = { id: row.id };
this.urls.currUrl ="attendance/record/hik/edit";
this.getData();
this.pageInfo.type="edit"
this.title = "修改海康考勤打卡记录汇总信息";
},
/** 新增 */
add(row) {
this.reset()
this.urls.currUrl = "attendance/record/hik/add";
this.getData();
this.pageInfo.type="add"
this.title = "新增海康考勤打卡记录汇总信息";
},
/** 查看*/
view(row) {
this.reset()
this.query = { id: row.id };
this.urls.currUrl ="attendance/record/hik/view";
this.getData();
this.pageInfo.type="view"
this.title = "海康考勤打卡记录汇总信息详细";
},
/**取消按钮 */
cancel() {
this.open = false;
},
/**获取数据后弹框 */
afterRender(data) {
this.open = true;
},
afterSubmit(data) {
this.open = false;
this.$emit("ok");
},
// 表单重置
reset() {
this.form = {
staffId : null,
staffName : "",
workNum : "",
deptId : null,
deptName : "",
positionId : null,
positionName : "",
attendanceGroupId : null,
attendanceGroupName : "",
shiftsId : null,
shiftsName : "",
attendanceDate : null,
attendanceAddress : "",
eventSource : "",
remark : "",
};
this.resetForm("form");
},
resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
},
},
};
</script>
<template>
<div class="page">
<LayoutTable :data="tableData" :config="tableConfig">
</LayoutTable>
<dialog-show ref="dialogform" @ok="getData" />
</div>
</template>
<script>
/** 表单弹出框模式需引入 */
import dialogShow from "./dialogshow";
import table from "@/assets/mixins/table";
export default {
name: "AttendanceRecordHikList",
components: {
dialogShow
},
mixins: [table],
created() {
},
methods: {
/** 重写新增方法 */
toAdd(row) {
this.$refs.dialogform.add(row);
},
/** 重写编辑方法 */
toEdit(row) {
this.$refs.dialogform.edit(row);
},
/** 重写查看方法 */
toView(row) {
this.$refs.dialogform.view(row);
},
},
data() {
return {
config: {
search: [
{
name: "staffName",
type: "text",
label: "员工姓名",
fuzzy: true
},
{
name: "deptId",
type: "text",
label: "所属部门",
fuzzy: true
},
{
name: "attendanceGroupId",
type: "text",
label: "所属考勤组ID",
fuzzy: true
},
{
name: "shiftsId",
type: "text",
label: "班次ID",
fuzzy: true
},
],
columns: [
{type: "selection", width: 60},
{type: "index",label: "序号",width: 50},
{label: "员工姓名", prop: "staffName"},
{label: "考勤日期", prop: "attendanceDate", formatter: this.formatterDate},
{label: "创建用户", prop: "createUserId", formatter: this.formatter},
{
label: "操作",
width: 240,
formatter: row => {
return (
<table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
);
}
}
]
}
};
}
};
</script>
\ No newline at end of file
<template>
<layout-view>
<el-descriptions :title="title" :column="column" :size="size" :colon="false" border>
<template slot="title">
<i class="el-icon-tickets"></i>
基本详细信息
</template>
<template slot="extra">
<el-button type="primary" @click="$router.go(-1)" size="small">返回</el-button>
</template>
<el-descriptions-item label="员工ID" label-class-name="labelClass" content-class-name="contentClass">
{{form.staffId}}
</el-descriptions-item>
<el-descriptions-item label="员工姓名" label-class-name="labelClass" content-class-name="contentClass">
{{form.staffName}}
</el-descriptions-item>
<el-descriptions-item label="工号" label-class-name="labelClass" content-class-name="contentClass">
{{form.workNum}}
</el-descriptions-item>
<el-descriptions-item label="所属部门" label-class-name="labelClass" content-class-name="contentClass">
{{form.deptId}}
</el-descriptions-item>
<el-descriptions-item label="所属部门名称" label-class-name="labelClass" content-class-name="contentClass">
{{form.deptName}}
</el-descriptions-item>
<el-descriptions-item label="职位ID" label-class-name="labelClass" content-class-name="contentClass">
{{form.positionId}}
</el-descriptions-item>
<el-descriptions-item label="职位名称" label-class-name="labelClass" content-class-name="contentClass">
{{form.positionName}}
</el-descriptions-item>
<el-descriptions-item label="所属考勤组ID" label-class-name="labelClass" content-class-name="contentClass">
{{form.attendanceGroupId}}
</el-descriptions-item>
<el-descriptions-item label="所属考勤组名称" label-class-name="labelClass" content-class-name="contentClass">
{{form.attendanceGroupName}}
</el-descriptions-item>
<el-descriptions-item label="班次ID" label-class-name="labelClass" content-class-name="contentClass">
{{form.shiftsId}}
</el-descriptions-item>
<el-descriptions-item label="班次名称" label-class-name="labelClass" content-class-name="contentClass">
{{form.shiftsName}}
</el-descriptions-item>
<el-descriptions-item label="考勤日期" label-class-name="labelClass" content-class-name="contentClass">
{{ util_formatterDate(form.attendanceDate)}}
</el-descriptions-item>
<el-descriptions-item label="考勤点名称" label-class-name="labelClass" content-class-name="contentClass">
{{form.attendanceAddress}}
</el-descriptions-item>
<el-descriptions-item label="事件源" label-class-name="labelClass" content-class-name="contentClass">
{{form.eventSource}}
</el-descriptions-item>
<el-descriptions-item label="备注" label-class-name="labelClass" content-class-name="contentClass">
{{form.remark}}
</el-descriptions-item>
</el-descriptions>
</layout-view>
</template>
<script>
import view from "@/assets/mixins/view";
export default {
mixins: [view],
components: {
},
methods: {
},
data() {
return {
size:"small",
column:2,
toString:[
],
toArrays: [
],
toDate: [
]
}
}
}
</script>
<style lang="less">
.labelClass{
width: 200px;
}
.el-descriptions__body{
margin-left: 5px;
margin-right: 5px;
color: #606266;
background-color: #FFF;
}
.contentClass{
width: 600px;
}
</style>
\ No newline at end of file
<template>
<!-- 弹出框表单 -->
<el-dialog :title="title" :visible.sync="open" width="90%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<Field label="员工ID" prop="staffId" v-model="form.staffId" placeholder="请输入员工ID"/>
<Field label="员工姓名" prop="staffName" v-model="form.staffName" placeholder="请输入员工姓名"/>
<Field label="考勤汇总信息,如迟到*1,旷工*2等" prop="attendanceSummary" v-model="form.attendanceSummary" type="textarea" placeholder="请输入考勤汇总信息,如迟到*1,旷工*2等"/>
<Field label="年" prop="year" v-model="form.year" placeholder="请输入年"/>
<Field label="月" prop="month" v-model="form.month" placeholder="请输入月"/>
<Field label="日" prop="day" v-model="form.day" placeholder="请输入日"/>
<Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" v-if="pageInfo.type !== 'view'" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</template>
<script>
import form from "@/assets/mixins/formdialog";
import dialogShow from "./dialogshow";
export default {
mixins: [form],
components: {
dialogShow ,
},
data() {
return {
// 遮罩层
loading: true,
// 弹出层标题
title: "考勤人员汇总信息",
// 是否显示弹出层
open: false,
toString:[
],
// 表单校验
rules: {
staffName: [
{required: true,message: "请输入员工姓名", trigger: "blur" },
{max: 64,message: "最多只能录入64个字符",trigger: "blur",},
],
attendanceSummary: [
{required: true,message: "请输入考勤汇总信息,如迟到*1,旷工*2等", trigger: "blur" },
{max: 512,message: "最多只能录入512个字符",trigger: "blur",},
],
year: [
{required: true,message: "请输入年", trigger: "blur" },
],
month: [
{required: true,message: "请输入月", trigger: "blur" },
],
day: [
{required: true,message: "请输入日", trigger: "blur" },
],
createTime: [
{required: true,message: "请选择创建时间" },
],
}
};
},
methods: {
/** 编辑 */
edit(row) {
this.reset()
this.query = { id: row.id };
this.urls.currUrl ="attendance/staff/stat/edit";
this.getData();
this.pageInfo.type="edit"
this.title = "修改考勤人员汇总信息";
},
/** 新增 */
add(row) {
this.reset()
this.urls.currUrl = "attendance/staff/stat/add";
this.getData();
this.pageInfo.type="add"
this.title = "新增考勤人员汇总信息";
},
/** 查看*/
view(row) {
this.reset()
this.query = { id: row.id };
this.urls.currUrl ="attendance/staff/stat/view";
this.getData();
this.pageInfo.type="view"
this.title = "考勤人员汇总信息详细";
},
/**取消按钮 */
cancel() {
this.open = false;
},
/**获取数据后弹框 */
afterRender(data) {
this.open = true;
},
afterSubmit(data) {
this.open = false;
this.$emit("ok");
},
// 表单重置
reset() {
this.form = {
staffId : null,
staffName : "",
attendanceSummary : "",
year : null,
month : null,
day : null,
remark : "",
};
this.resetForm("form");
},
resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
},
},
};
</script>
<template>
<div class="page">
<LayoutTable :data="tableData" :config="tableConfig">
</LayoutTable>
<dialog-show ref="dialogform" @ok="getData" />
</div>
</template>
<script>
/** 表单弹出框模式需引入 */
import dialogShow from "./dialogshow";
import table from "@/assets/mixins/table";
export default {
name: "AttendanceStaffStatList",
components: {
dialogShow
},
mixins: [table],
created() {
},
methods: {
/** 重写新增方法 */
toAdd(row) {
this.$refs.dialogform.add(row);
},
/** 重写编辑方法 */
toEdit(row) {
this.$refs.dialogform.edit(row);
},
/** 重写查看方法 */
toView(row) {
this.$refs.dialogform.view(row);
},
},
data() {
return {
config: {
search: [
{
name: "staffName",
type: "text",
label: "员工姓名",
fuzzy: true
},
],
columns: [
{type: "selection", width: 60},
{type: "index",label: "序号",width: 50},
{label: "员工姓名", prop: "staffName"},
{label: "考勤汇总信息,如迟到*1,旷工*2等", prop: "attendanceSummary"},
{label: "创建用户", prop: "createUserId", formatter: this.formatter},
{
label: "操作",
width: 240,
formatter: row => {
return (
<table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
);
}
}
]
}
};
}
};
</script>
\ No newline at end of file
<template>
<layout-view>
<el-descriptions :title="title" :column="column" :size="size" :colon="false" border>
<template slot="title">
<i class="el-icon-tickets"></i>
基本详细信息
</template>
<template slot="extra">
<el-button type="primary" @click="$router.go(-1)" size="small">返回</el-button>
</template>
<el-descriptions-item label="员工ID" label-class-name="labelClass" content-class-name="contentClass">
{{form.staffId}}
</el-descriptions-item>
<el-descriptions-item label="员工姓名" label-class-name="labelClass" content-class-name="contentClass">
{{form.staffName}}
</el-descriptions-item>
<el-descriptions-item label="考勤汇总信息,如迟到*1,旷工*2等" label-class-name="labelClass" content-class-name="contentClass">
{{form.attendanceSummary}}
</el-descriptions-item>
<el-descriptions-item label="年" label-class-name="labelClass" content-class-name="contentClass">
{{form.year}}
</el-descriptions-item>
<el-descriptions-item label="月" label-class-name="labelClass" content-class-name="contentClass">
{{form.month}}
</el-descriptions-item>
<el-descriptions-item label="日" label-class-name="labelClass" content-class-name="contentClass">
{{form.day}}
</el-descriptions-item>
<el-descriptions-item label="备注" label-class-name="labelClass" content-class-name="contentClass">
{{form.remark}}
</el-descriptions-item>
</el-descriptions>
</layout-view>
</template>
<script>
import view from "@/assets/mixins/view";
export default {
mixins: [view],
components: {
},
methods: {
},
data() {
return {
size:"small",
column:2,
toString:[
],
toArrays: [
],
toDate: [
]
}
}
}
</script>
<style lang="less">
.labelClass{
width: 200px;
}
.el-descriptions__body{
margin-left: 5px;
margin-right: 5px;
color: #606266;
background-color: #FFF;
}
.contentClass{
width: 600px;
}
</style>
\ No newline at end of file
<template>
<layout-view>
<el-descriptions :title="title" :column="column" :size="size" :colon="false" border>
<template slot="title">
<i class="el-icon-tickets"></i>
基本详细信息
</template>
<template slot="extra">
<el-button type="primary" @click="$router.go(-1)" size="small">返回</el-button>
</template>
<el-descriptions-item label="窗口类别" label-class-name="labelClass" content-class-name="contentClass">
{{form.windowCategory}}
</el-descriptions-item>
<el-descriptions-item label="员工ID" label-class-name="labelClass" content-class-name="contentClass">
{{form.staffId}}
</el-descriptions-item>
<el-descriptions-item label="员工姓名" label-class-name="labelClass" content-class-name="contentClass">
{{form.staffName}}
</el-descriptions-item>
<el-descriptions-item label="所属部门" label-class-name="labelClass" content-class-name="contentClass">
{{form.deptId}}
</el-descriptions-item>
<el-descriptions-item label="所属部门名称" label-class-name="labelClass" content-class-name="contentClass">
{{form.deptName}}
</el-descriptions-item>
<el-descriptions-item label="回单位" label-class-name="labelClass" content-class-name="contentClass">
{{form.backToUnit}}
</el-descriptions-item>
<el-descriptions-item label="因公请假" label-class-name="labelClass" content-class-name="contentClass">
{{form.onDutyLeave}}
</el-descriptions-item>
<el-descriptions-item label="外出勘验" label-class-name="labelClass" content-class-name="contentClass">
{{form.outOfOffice}}
</el-descriptions-item>
<el-descriptions-item label="值班补班" label-class-name="labelClass" content-class-name="contentClass">
{{form.shiftCompensation}}
</el-descriptions-item>
<el-descriptions-item label="体检" label-class-name="labelClass" content-class-name="contentClass">
{{form.physicalExamination}}
</el-descriptions-item>
<el-descriptions-item label="隔离" label-class-name="labelClass" content-class-name="contentClass">
{{form.quarantine}}
</el-descriptions-item>
<el-descriptions-item label="因公外出" label-class-name="labelClass" content-class-name="contentClass">
{{form.businessTrip}}
</el-descriptions-item>
<el-descriptions-item label="公休" label-class-name="labelClass" content-class-name="contentClass">
{{form.publicHoliday}}
</el-descriptions-item>
<el-descriptions-item label="病假" label-class-name="labelClass" content-class-name="contentClass">
{{form.sickLeave}}
</el-descriptions-item>
<el-descriptions-item label="丧假" label-class-name="labelClass" content-class-name="contentClass">
{{form.funeralLeave}}
</el-descriptions-item>
<el-descriptions-item label="婚假" label-class-name="labelClass" content-class-name="contentClass">
{{form.marriageLeave}}
</el-descriptions-item>
<el-descriptions-item label="育儿假" label-class-name="labelClass" content-class-name="contentClass">
{{form.childRearingLeave}}
</el-descriptions-item>
<el-descriptions-item label="产假" label-class-name="labelClass" content-class-name="contentClass">
{{form.maternityLeave}}
</el-descriptions-item>
<el-descriptions-item label="调回单位" label-class-name="labelClass" content-class-name="contentClass">
{{form.transferBack}}
</el-descriptions-item>
<el-descriptions-item label="探亲假" label-class-name="labelClass" content-class-name="contentClass">
{{form.homeLeave}}
</el-descriptions-item>
<el-descriptions-item label="事假" label-class-name="labelClass" content-class-name="contentClass">
{{form.personalLeave}}
</el-descriptions-item>
<el-descriptions-item label="考勤汇总-旷工" label-class-name="labelClass" content-class-name="contentClass">
{{form.absenteeismDays}}
</el-descriptions-item>
<el-descriptions-item label="考勤汇总-其他" label-class-name="labelClass" content-class-name="contentClass">
{{form.otherDays}}
</el-descriptions-item>
<el-descriptions-item label="考勤汇总-出勤率" label-class-name="labelClass" content-class-name="contentClass">
{{form.attendanceRate}}
</el-descriptions-item>
<el-descriptions-item label="考勤汇总-未按规定打卡" label-class-name="labelClass" content-class-name="contentClass">
{{form.nonCompliancePunch}}
</el-descriptions-item>
<el-descriptions-item label="考勤汇总-迟到" label-class-name="labelClass" content-class-name="contentClass">
{{form.lateTimes}}
</el-descriptions-item>
<el-descriptions-item label="考勤汇总-上网耍手机" label-class-name="labelClass" content-class-name="contentClass">
{{form.surfingMobileTimes}}
</el-descriptions-item>
<el-descriptions-item label="考勤汇总-溜班" label-class-name="labelClass" content-class-name="contentClass">
{{form.overtimeTimes}}
</el-descriptions-item>
<el-descriptions-item label="考勤汇总-空岗" label-class-name="labelClass" content-class-name="contentClass">
{{form.vacancy}}
</el-descriptions-item>
<el-descriptions-item label="考勤汇总-未规范着装" label-class-name="labelClass" content-class-name="contentClass">
{{form.nonStandardDressTimes}}
</el-descriptions-item>
<el-descriptions-item label="考勤汇总-无故缺席会议" label-class-name="labelClass" content-class-name="contentClass">
{{form.unexcusedMeetingAbsence}}
</el-descriptions-item>
<el-descriptions-item label="考勤汇总-会议早退" label-class-name="labelClass" content-class-name="contentClass">
{{form.earlyLeaveMeeting}}
</el-descriptions-item>
<el-descriptions-item label="年" label-class-name="labelClass" content-class-name="contentClass">
{{form.year}}
</el-descriptions-item>
<el-descriptions-item label="月" label-class-name="labelClass" content-class-name="contentClass">
{{form.month}}
</el-descriptions-item>
<el-descriptions-item label="日" label-class-name="labelClass" content-class-name="contentClass">
{{form.day}}
</el-descriptions-item>
<el-descriptions-item label="备注" label-class-name="labelClass" content-class-name="contentClass">
{{form.remark}}
</el-descriptions-item>
</el-descriptions>
</layout-view>
</template>
<script>
import view from "@/assets/mixins/view";
export default {
mixins: [view],
components: {
},
methods: {
},
data() {
return {
size:"small",
column:2,
toString:[
],
toArrays: [
],
toDate: [
]
}
}
}
</script>
<style lang="less">
.labelClass{
width: 200px;
}
.el-descriptions__body{
margin-left: 5px;
margin-right: 5px;
color: #606266;
background-color: #FFF;
}
.contentClass{
width: 600px;
}
</style>
\ No newline at end of file
package com.mortals.xhx.common.code;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* 异常状态(0.缺卡,1.早退,2.缺卡)枚举类
*
* @author zxfei
*/
public enum ErrorStatusEnum {
缺卡(0, "缺卡"),
早退(1, "早退"),
缺卡(2, "缺卡");
private Integer value;
private String desc;
ErrorStatusEnum(Integer value, String desc) {
this.value = value;
this.desc = desc;
}
public Integer getValue() {
return this.value;
}
public String getDesc() {
return this.desc;
}
public static ErrorStatusEnum getByValue(Integer value) {
for (ErrorStatusEnum errorStatusEnum : ErrorStatusEnum.values()) {
if (errorStatusEnum.getValue() == value) {
return errorStatusEnum;
}
}
return null;
}
/**
* 获取Map集合
*
* @param eItem 不包含项
* @return
*/
public static Map<String, String> getEnumMap(Integer... eItem) {
Map<String, String> resultMap = new LinkedHashMap<>();
for (ErrorStatusEnum item : ErrorStatusEnum.values()) {
try {
boolean hasE = false;
for (Integer e : eItem) {
if (item.getValue() == e) {
hasE = true;
break;
}
}
if (!hasE) {
resultMap.put(item.getValue() + "", item.getDesc());
}
} catch (Exception ex) {
}
}
return resultMap;
}
}
\ No newline at end of file
package com.mortals.xhx.common.code;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* 政治面貌 (1.中共党员,2.中共预备党员,3.共青团员,4.群众,5.其它)枚举类
*
* @author zxfei
*/
public enum PoliticalstatusEnum {
中共党员(1, "中共党员"),
中共预备党员(2, "中共预备党员"),
共青团员(3, "共青团员"),
群众(4, "群众"),
其它(5, "其它");
private Integer value;
private String desc;
PoliticalstatusEnum(Integer value, String desc) {
this.value = value;
this.desc = desc;
}
public Integer getValue() {
return this.value;
}
public String getDesc() {
return this.desc;
}
public static PoliticalstatusEnum getByValue(Integer value) {
for (PoliticalstatusEnum politicalstatusEnum : PoliticalstatusEnum.values()) {
if (politicalstatusEnum.getValue() == value) {
return politicalstatusEnum;
}
}
return null;
}
/**
* 获取Map集合
*
* @param eItem 不包含项
* @return
*/
public static Map<String, String> getEnumMap(Integer... eItem) {
Map<String, String> resultMap = new LinkedHashMap<>();
for (PoliticalstatusEnum item : PoliticalstatusEnum.values()) {
try {
boolean hasE = false;
for (Integer e : eItem) {
if (item.getValue() == e) {
hasE = true;
break;
}
}
if (!hasE) {
resultMap.put(item.getValue() + "", item.getDesc());
}
} catch (Exception ex) {
}
}
return resultMap;
}
}
\ No newline at end of file
package com.mortals.xhx.common.code;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* 处理状态(0.未处理,1.已处理)枚举类
*
* @author zxfei
*/
public enum ProcessStatusEnum {
未处理(0, "未处理"),
已处理(1, "已处理");
private Integer value;
private String desc;
ProcessStatusEnum(Integer value, String desc) {
this.value = value;
this.desc = desc;
}
public Integer getValue() {
return this.value;
}
public String getDesc() {
return this.desc;
}
public static ProcessStatusEnum getByValue(Integer value) {
for (ProcessStatusEnum processStatusEnum : ProcessStatusEnum.values()) {
if (processStatusEnum.getValue() == value) {
return processStatusEnum;
}
}
return null;
}
/**
* 获取Map集合
*
* @param eItem 不包含项
* @return
*/
public static Map<String, String> getEnumMap(Integer... eItem) {
Map<String, String> resultMap = new LinkedHashMap<>();
for (ProcessStatusEnum item : ProcessStatusEnum.values()) {
try {
boolean hasE = false;
for (Integer e : eItem) {
if (item.getValue() == e) {
hasE = true;
break;
}
}
if (!hasE) {
resultMap.put(item.getValue() + "", item.getDesc());
}
} catch (Exception ex) {
}
}
return resultMap;
}
}
\ No newline at end of file
package com.mortals.xhx.common.code;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* 员工来源(1.外部,2.内部)枚举类
*
* @author zxfei
*/
public enum SourceEnum {
外部(1, "外部"),
内部(2, "内部");
private Integer value;
private String desc;
SourceEnum(Integer value, String desc) {
this.value = value;
this.desc = desc;
}
public Integer getValue() {
return this.value;
}
public String getDesc() {
return this.desc;
}
public static SourceEnum getByValue(Integer value) {
for (SourceEnum sourceEnum : SourceEnum.values()) {
if (sourceEnum.getValue() == value) {
return sourceEnum;
}
}
return null;
}
/**
* 获取Map集合
*
* @param eItem 不包含项
* @return
*/
public static Map<String, String> getEnumMap(Integer... eItem) {
Map<String, String> resultMap = new LinkedHashMap<>();
for (SourceEnum item : SourceEnum.values()) {
try {
boolean hasE = false;
for (Integer e : eItem) {
if (item.getValue() == e) {
hasE = true;
break;
}
}
if (!hasE) {
resultMap.put(item.getValue() + "", item.getDesc());
}
} catch (Exception ex) {
}
}
return resultMap;
}
}
\ No newline at end of file
package com.mortals.xhx.module.attendance.dao;
import com.mortals.framework.dao.ICRUDDao;
import com.mortals.xhx.module.attendance.model.AttendanceRecordErrorEntity;
import java.util.List;
/**
* 考勤打卡记录异常信息Dao
* 考勤打卡记录异常信息 DAO接口
*
* @author zxfei
* @date 2023-04-08
*/
public interface AttendanceRecordErrorDao extends ICRUDDao<AttendanceRecordErrorEntity,Long>{
}
package com.mortals.xhx.module.attendance.dao;
import com.mortals.framework.dao.ICRUDDao;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
import java.util.List;
/**
* 海康考勤打卡记录汇总信息Dao
* 海康考勤打卡记录汇总信息 DAO接口
*
* @author zxfei
* @date 2023-04-08
*/
public interface AttendanceRecordHikDao extends ICRUDDao<AttendanceRecordHikEntity,Long>{
}
package com.mortals.xhx.module.attendance.dao;
import com.mortals.framework.dao.ICRUDDao;
import com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity;
import java.util.List;
/**
* 考勤人员汇总信息Dao
* 考勤人员汇总信息 DAO接口
*
* @author zxfei
* @date 2023-04-08
*/
public interface AttendanceStaffStatDao extends ICRUDDao<AttendanceStaffStatEntity,Long>{
}
package com.mortals.xhx.module.attendance.dao;
import com.mortals.framework.dao.ICRUDDao;
import com.mortals.xhx.module.attendance.model.AttendanceStatEntity;
import java.util.List;
/**
* 考勤汇总信息Dao
* 考勤汇总信息 DAO接口
*
* @author zxfei
* @date 2023-04-08
*/
public interface AttendanceStatDao extends ICRUDDao<AttendanceStatEntity,Long>{
}
package com.mortals.xhx.module.attendance.dao.ibatis;
import org.springframework.stereotype.Repository;
import com.mortals.xhx.module.attendance.dao.AttendanceRecordErrorDao;
import com.mortals.xhx.module.attendance.model.AttendanceRecordErrorEntity;
import java.util.Date;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import java.util.List;
/**
* 考勤打卡记录异常信息DaoImpl DAO接口
*
* @author zxfei
* @date 2023-04-08
*/
@Repository("attendanceRecordErrorDao")
public class AttendanceRecordErrorDaoImpl extends BaseCRUDDaoMybatis<AttendanceRecordErrorEntity,Long> implements AttendanceRecordErrorDao {
}
package com.mortals.xhx.module.attendance.dao.ibatis;
import org.springframework.stereotype.Repository;
import com.mortals.xhx.module.attendance.dao.AttendanceRecordHikDao;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
import java.util.Date;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import java.util.List;
/**
* 海康考勤打卡记录汇总信息DaoImpl DAO接口
*
* @author zxfei
* @date 2023-04-08
*/
@Repository("attendanceRecordHikDao")
public class AttendanceRecordHikDaoImpl extends BaseCRUDDaoMybatis<AttendanceRecordHikEntity,Long> implements AttendanceRecordHikDao {
}
package com.mortals.xhx.module.attendance.dao.ibatis;
import org.springframework.stereotype.Repository;
import com.mortals.xhx.module.attendance.dao.AttendanceStaffStatDao;
import com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity;
import java.util.Date;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import java.util.List;
/**
* 考勤人员汇总信息DaoImpl DAO接口
*
* @author zxfei
* @date 2023-04-08
*/
@Repository("attendanceStaffStatDao")
public class AttendanceStaffStatDaoImpl extends BaseCRUDDaoMybatis<AttendanceStaffStatEntity,Long> implements AttendanceStaffStatDao {
}
package com.mortals.xhx.module.attendance.dao.ibatis;
import org.springframework.stereotype.Repository;
import com.mortals.xhx.module.attendance.dao.AttendanceStatDao;
import com.mortals.xhx.module.attendance.model.AttendanceStatEntity;
import java.util.Date;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import java.util.List;
/**
* 考勤汇总信息DaoImpl DAO接口
*
* @author zxfei
* @date 2023-04-08
*/
@Repository("attendanceStatDao")
public class AttendanceStatDaoImpl extends BaseCRUDDaoMybatis<AttendanceStatEntity,Long> implements AttendanceStatDao {
}
package com.mortals.xhx.module.attendance.model.vo;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.attendance.model.AttendanceRecordErrorEntity;
import java.util.ArrayList;
import java.util.List;
/**
* 考勤打卡记录异常信息视图对象
*
* @author zxfei
* @date 2023-04-08
*/
public class AttendanceRecordErrorVo extends BaseEntityLong {
}
\ No newline at end of file
package com.mortals.xhx.module.attendance.model.vo;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
import java.util.ArrayList;
import java.util.List;
/**
* 海康考勤打卡记录汇总信息视图对象
*
* @author zxfei
* @date 2023-04-08
*/
public class AttendanceRecordHikVo extends BaseEntityLong {
}
\ No newline at end of file
package com.mortals.xhx.module.attendance.model.vo;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity;
import java.util.ArrayList;
import java.util.List;
/**
* 考勤人员汇总信息视图对象
*
* @author zxfei
* @date 2023-04-08
*/
public class AttendanceStaffStatVo extends BaseEntityLong {
}
\ No newline at end of file
package com.mortals.xhx.module.attendance.model.vo;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.attendance.model.AttendanceStatEntity;
import java.util.ArrayList;
import java.util.List;
/**
* 考勤汇总信息视图对象
*
* @author zxfei
* @date 2023-04-08
*/
public class AttendanceStatVo extends BaseEntityLong {
}
\ No newline at end of file
package com.mortals.xhx.module.attendance.service;
import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.attendance.model.AttendanceRecordErrorEntity;
/**
* AttendanceRecordErrorService
*
* 考勤打卡记录异常信息 service接口
*
* @author zxfei
* @date 2023-04-08
*/
public interface AttendanceRecordErrorService extends ICRUDService<AttendanceRecordErrorEntity,Long>{
}
\ No newline at end of file
package com.mortals.xhx.module.attendance.service;
import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
/**
* AttendanceRecordHikService
*
* 海康考勤打卡记录汇总信息 service接口
*
* @author zxfei
* @date 2023-04-08
*/
public interface AttendanceRecordHikService extends ICRUDService<AttendanceRecordHikEntity,Long>{
}
\ No newline at end of file
package com.mortals.xhx.module.attendance.service;
import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity;
/**
* AttendanceStaffStatService
*
* 考勤人员汇总信息 service接口
*
* @author zxfei
* @date 2023-04-08
*/
public interface AttendanceStaffStatService extends ICRUDService<AttendanceStaffStatEntity,Long>{
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment