Commit 87216c4f authored by 廖旭伟's avatar 廖旭伟

Merge remote-tracking branch 'origin/master'

parents 69ebf551 47ca8729
<template>
<!-- 弹出框表单 -->
<el-drawer
title="批量处理"
:visible.sync="open"
:direction="direction"
size="50%">
<div style="padding:20px;font-size:15px">
<div>
已选择{{selection.length}}个:
</div>
<div class="staffList mt20">
<div v-for="item in selection" :key="item" class="mt10">
<span> {{item.staffName}} </span>
<span>{{item.goOrOff}} 时间 {{item.goOffDateTime}} 打卡异常状态</span>
<span class="ml10" style="color:#f56c6c">
{{dict['errorStatus'][item.errorStatus]}}
</span>
<span class="ml10">修改为</span>
</div>
<div class="mt10">
<!--
<!-- 弹出框表单 -->
<el-drawer
title="批量处理"
:visible.sync="open"
:direction="direction"
size="50%"
>
<div style="padding:20px;font-size:15px">
<div>已选择{{ selection.length }}个:</div>
<div class="staffList mt20">
<div v-for="item in selection" :key="item" class="mt10">
<span> {{ item.staffName }} </span>
<span
>{{ item.goOrOff }} 时间
{{ item.goOffDateTime }} 打卡异常状态</span
>
<span class="ml10" style="color:#f56c6c">
{{ dict["errorStatus"][item.errorStatus] }}
</span>
<span class="ml10">修改为</span>
</div>
<div class="mt10">
<!--
<Field label="" v-model="dealParams.processResult" type="select" :enumData="dict.errorStatus"/>
-->
<!-- 处理异常状态 -->
<el-select v-model="dealParams.processResult">
<el-option
v-for='($label, $value) in dict.errorStatus'
:key="$value"
:label="$label"
:value="$value">
</el-option>
</el-select>
<!-- 早退/迟到 -->
<el-input style="width:220px" placeholder="请输入数字" :maxlength="4" v-model="duration"
v-if="dealParams.processResult == '1'|| dealParams.processResult == '2'"
class="ml20" type="number">
<template slot="append">分钟</template>
</el-input>
</div>
<div class="mt10">
<span>备注:</span>
<el-input placeholder="请输入备注" type="textarea" show-word-limit class="mt10"
:maxlength="50" v-model="dealParams.remark"></el-input>
</div>
</div>
<div class="mt20">
<el-button type="primary" @click="saveForm">确定</el-button>
<el-button @click="cancleFn">取消</el-button>
</div>
<!-- 处理异常状态 -->
<el-select v-model="dealParams.errorStatus">
<el-option
v-for="($label, $value) in dict.errorStatus"
:key="$value"
:label="$label"
:value="$value"
>
</el-option>
</el-select>
<!-- 早退/迟到 -->
<el-input
style="width:220px"
placeholder="请输入数字"
:maxlength="4"
v-model="duration"
v-if="
dealParams.errorStatus == '1' || dealParams.errorStatus == '2'
"
class="ml20"
type="number"
>
<template slot="append">分钟</template>
</el-input>
</div>
</el-drawer>
<div class="mt10">
<span>处理结果:</span>
<el-input
placeholder="请输入处理结果"
type="textarea"
show-word-limit
class="mt10"
:maxlength="50"
v-model="dealParams.processResult"
></el-input>
</div>
</div>
<div class="mt20">
<el-button type="primary" @click="saveForm">确定</el-button>
<el-button @click="cancleFn">取消</el-button>
</div>
</div>
</el-drawer>
</template>
<script>
export default {
name: "AttendanceRecordDetail",
created() {
},
data() {
return {
// 遮罩层
loading: true,
// 弹出层标题
title: "考勤打卡记录信息",
// 是否显示弹出层
open: false,
direction:"rtl",
toString: ["processResult"],
// 表单校验
rules: {
staffName: [
{required: true,message: "请输入员工姓名", trigger: "blur" },
{max: 64,message: "最多只能录入64个字符",trigger: "blur",},
],
createTime: [
{required: true,message: "请选择创建时间" },
],
},
dealParams:{
remark:'',
errorStatus:null,
durtion:0,
processResult:'',
recordErrorEntities:[],//处理员工
processStatus:1//处理状态
},
selection:[],
query:{},
urls:{
currUrl:'',
saveUrl:'attendance/record/error/save'
},
dict:{
errorStatus:''
},
duration:''
}
},
export default {
name: "AttendanceRecordDetail",
created() {},
data() {
return {
// 遮罩层
loading: true,
// 弹出层标题
title: "考勤打卡记录信息",
// 是否显示弹出层
open: false,
direction: "rtl",
toString: ["processResult", "errorStatus"],
// 表单校验
rules: {
staffName: [
{ required: true, message: "请输入员工姓名", trigger: "blur" },
{ max: 64, message: "最多只能录入64个字符", trigger: "blur" },
],
createTime: [{ required: true, message: "请选择创建时间" }],
},
dealParams: {
remark: "",
errorStatus: null,
durtion: 0,
processResult: "",
recordErrorEntities: [], //处理员工
processStatus: 1, //处理状态
},
selection: [],
query: {},
urls: {
currUrl: "",
saveUrl: "attendance/record/error/save",
},
dict: {
errorStatus: "",
},
duration: "",
};
},
methods: {
// 渲染前置处理
beforeRender(data) {
return data
},
/** 编辑 */
edit(row,selection) {
if(selection.length<1){
this.selection = [row]
this.query = { id: row.id };
}else{
this.selection = selection
this.query = {id:this.selection[0].id}
}
this.dealParams.recordErrorEntities = this.selection
this.urls.currUrl ="attendance/record/error/edit";
this.getInital(this.query.id)
},
/**获取数据后弹框 */
afterRender(data) {
this.open = true;
},
methods: {
// 渲染前置处理
beforeRender(data) {
return data;
},
/** 编辑 */
edit(row, selection) {
if (selection.length < 1) {
this.selection = [row];
this.query = { id: row.id };
} else {
this.selection = selection;
this.query = { id: this.selection[0].id };
}
this.dealParams.recordErrorEntities = this.selection;
this.urls.currUrl = "attendance/record/error/edit";
this.getInital(this.query.id);
},
/**获取数据后弹框 */
afterRender(data) {
this.open = true;
},
getInital(id){
this.$post(this.urls.currUrl+'?id='+id).then(res => {
if(res.code == 1){
this.afterRender()
this.dict = res.data.dict
}
})
},
// 保存
saveForm(){
if(this.dealParams.processResult == ''){
this.$message.error('请选择处理结果')
return
}
this.dealParams.errorStatus=this.dealParams.processResult
if(this.duration && (this.dealParams.processResult == '1' || this.dealParams.processResult == '2')){
this.dealParams.processResult =this.dict.errorStatus[this.dealParams.processResult] + this.duration +'分钟'
this.dealParams.durtion=this.duration
}
// 保存结果处理
this.$post(this.urls.saveUrl,this.dealParams).then(res => {
if(res.code == 1){
this.cancleFn()
}
})
},
cancleFn(){
this.open = false
this.dealParams = {
remark:'',
errorStatus:null,
durtion:0,
processResult:'',
recordErrorEntities:[],//处理员工
processStatus:1//处理状态
}
this.$emit("ok")
}
getInital(id) {
this.$post(this.urls.currUrl + "?id=" + id).then((res) => {
if (res.code == 1) {
this.afterRender();
this.dict = res.data.dict;
}
});
},
// 保存
saveForm() {
if (this.dealParams.errorStatus == "") {
this.$message.error("请选择处理结果");
return;
}
this.dealParams.errorStatus = this.dealParams.errorStatus;
if (
this.duration &&
(this.dealParams.errorStatus == "1" ||
this.dealParams.errorStatus == "2")
) {
this.dealParams.errorStatus =
this.dict.errorStatus[this.dealParams.errorStatus] +
this.duration +
"分钟";
this.dealParams.durtion = this.duration;
}
// 保存结果处理
this.$post(this.urls.saveUrl, this.dealParams).then((res) => {
if (res.code == 1) {
this.cancleFn();
}
}
});
},
cancleFn() {
this.open = false;
this.dealParams = {
remark: "",
errorStatus: null,
durtion: 0,
processResult: "",
recordErrorEntities: [], //处理员工
processStatus: 1, //处理状态
};
this.$emit("ok");
},
},
};
</script>
<template>
<div class="page">
<LayoutTable :data="tableData" :config="tableConfig" notDel notAdd>
<el-button
slot="table-head-left2"
style="margin-left: 10px"
size="mini"
type="primary"
@click="morehandle"
>批量处理</el-button>
</LayoutTable>
<drawer-show ref="drawerShow" @ok="getData" />
<!-- 撤销提示 -->
<el-dialog :visible.sync="dialogVisible" title="提示" width="40%">
<div>撤销异常处理结果后,当天的考勤结果将会重新计算,系统需要花费一点时间。</div>
<div class="flex flex_end">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="resetError">确定</el-button>
</div>
</el-dialog>
</div>
<div class="page">
<LayoutTable :data="tableData" :config="tableConfig" notDel notAdd>
<el-button
slot="table-head-left2"
style="margin-left: 10px"
size="mini"
type="primary"
@click="morehandle"
>批量处理</el-button
>
</LayoutTable>
<drawer-show ref="drawerShow" @ok="getData" />
<!-- 撤销提示 -->
<el-dialog :visible.sync="dialogVisible" title="提示" width="40%">
<div>
撤销异常处理结果后,当天的考勤结果将会重新计算,系统需要花费一点时间。
</div>
<div class="flex flex_end">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="resetError">确定</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
/** 表单弹出框模式需引入 */
import drawerShow from "./drawershow";
import table from "@/assets/mixins/table";
export default {
name: "AttendanceRecordErrorList",
components: {
drawerShow
},
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);
// },
/** 表单弹出框模式需引入 */
import drawerShow from "./drawershow";
import table from "@/assets/mixins/table";
export default {
name: "AttendanceRecordErrorList",
components: {
drawerShow,
},
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);
// },
morehandle(){
let arr = this.tableData.data.filter(item => {
if(this.selection.includes(item.id) && item.processStatus == 0){
return item
}
})
this.$nextTick(() => {
this.selection = arr.map(item => item.id)
})
if(arr.length < 1){
this.$message.error('请至少选择一条处理')
return
}
morehandle() {
let arr = this.tableData.data.filter((item) => {
if (this.selection.includes(item.id) && item.processStatus == 0) {
return item;
}
});
this.$nextTick(() => {
this.selection = arr.map((item) => item.id);
});
if (arr.length < 1) {
this.$message.error("请至少选择一条处理");
return;
}
this.$refs.drawerShow.edit(arr[0],arr);
},
// 处理
handle(err){
console.log(err)
this.$refs.drawerShow.edit(err,[]);
},
// 撤销
reCancle(err){
console.log(err)
this.currentParams = err
this.dialogVisible = true
},
resetError(){
this.$post('attendance/record/error/revokeError',{...this.currentParams}).then(res => {
if(res.code == 1){
this.dialogVisible = false
this.getData()
}
})
}
},
data() {
return {
config: {
isshowTabPane:true,
search: [
{
name: "deptId",
type: "select",
label: "全部部门"
},
{
name: "groupId",
type: "select",
label: "全部考勤组"
},
/* {
this.$refs.drawerShow.edit(arr[0], arr);
},
// 处理
handle(err) {
console.log(err);
this.$refs.drawerShow.edit(err, []);
},
// 撤销
reCancle(err) {
console.log(err);
this.currentParams = err;
this.dialogVisible = true;
},
resetError() {
this.$post("attendance/record/error/revokeError", {
...this.currentParams,
}).then((res) => {
if (res.code == 1) {
this.dialogVisible = false;
this.getData();
}
});
},
},
data() {
return {
config: {
isshowTabPane: true,
search: [
{
name: "deptId",
type: "select",
label: "全部部门",
},
{
name: "groupId",
type: "select",
label: "全部考勤组",
},
/* {
name: "classId",
type: "select",
label: "全部班次",
fuzzy: false
},*/
{
name: "errorStatus",
type: "select",
label: "全部异常状态"
},
{
name: "processStatus",
type: "select",
label: "全部处理状态"
},
{
name:'errorDateTimeStart',
type: "date",
label: "异常开始时间"
},
{
name:'attendanceDateEnd',
type: "date",
label: "errorDateTimeEnd"
},
{
name: "staffName",
type: "text",
label: "员工姓名",
fuzzy: true
},
{
name: "phoneNumber",
type: "text",
label: "手机号",
fuzzy: true
},
],
columns: [
{type: "selection", width: 60,fixed:'left'},
{type: "index",label: "序号",width: 50,fixed:'left'},
{label: "员工姓名", prop: "staffName",fixed:'left',width:100},
{label: "工号", prop: "workNum"},
{label: "部门", prop: "deptName"},
{label: "考勤组", prop: "attendanceGroupName"},
/* {label: "班次", prop: "shiftsName"},*/
{label: "异常状态", prop: "errorStatus",formatter: this.formattereErrorStatus},
{label: "异常时间", prop: "errorDateTime", formatter: this.formatterDate},
{label: "处理结果", prop: "processResult", formatter: this.formatters},
{label: "上下班时间", prop: "goOffDateTime",formatter:(row) => {
return row.goOrOff+" "+row.goOffDateTime
}},
{label: "实际打卡时间", prop: "actualAttendanceDateTime", formatter: this.formatterDate},
{label: "处理时间", prop: "operDateTime", formatter: this.formatterDate},
{label: "处理状态", prop: "processStatus",formatter: this.formattereDealStatus},
{label: "处理人", prop: "opertor",formatter:this.formatters},
{label: "备注", prop: "remark",formatter:this.formatters},
{
label: "操作",
width: 240,
formatter: (row) => {
if(row.processStatus == 0 || !row.processStatus){
return(
<el-button type="text" size='mini' onClick={() => {
this.handle(row)
}}>处理</el-button>
)
}else{
return (
<span>
<el-button type="text" size='mini' onClick={() => {
this.reCancle(row)
}}>撤销</el-button>
</span>
)
}
}
}
]
},
dialogVisible:false,
currentParams:{}
}
}
}
{
name: "errorStatus",
type: "select",
label: "全部异常状态",
},
{
name: "processStatus",
type: "select",
label: "全部处理状态",
},
{
name: "errorDateTimeStart",
type: "date",
label: "异常开始时间",
},
{
name: "attendanceDateEnd",
type: "date",
label: "errorDateTimeEnd",
},
{
name: "staffName",
type: "text",
label: "员工姓名",
fuzzy: true,
},
{
name: "phoneNumber",
type: "text",
label: "手机号",
fuzzy: true,
},
],
columns: [
{ type: "selection", width: 60, fixed: "left" },
{ type: "index", label: "序号", width: 50, fixed: "left" },
{ label: "员工姓名", prop: "staffName", fixed: "left", width: 100 },
{ label: "工号", prop: "workNum" },
{ label: "部门", prop: "deptName" },
{ label: "考勤组", prop: "attendanceGroupName" },
/* {label: "班次", prop: "shiftsName"},*/
{
label: "异常状态",
prop: "errorStatus",
formatter: this.formattereErrorStatus,
},
{
label: "异常时间",
prop: "errorDateTime",
formatter: this.formatterDate,
},
{
label: "处理结果",
prop: "processResult",
formatter: this.formatters,
},
{
label: "上下班时间",
prop: "goOffDateTime",
formatter: (row) => {
return row.goOrOff + " " + row.goOffDateTime;
},
},
{
label: "实际打卡时间",
prop: "actualAttendanceDateTime",
formatter: this.formatterDate,
},
{
label: "处理时间",
prop: "operDateTime",
formatter: this.formatterDate,
},
{
label: "处理状态",
prop: "processStatus",
formatter: this.formattereDealStatus,
},
{ label: "处理人", prop: "opertor", formatter: this.formatters },
{ label: "备注", prop: "remark", formatter: this.formatters },
{
label: "操作",
width: 240,
formatter: (row) => {
if (row.processStatus == 0 || !row.processStatus) {
return (
<el-button
type="text"
size="mini"
onClick={() => {
this.handle(row);
}}
>
处理
</el-button>
);
} else {
return (
<span>
<el-button
type="text"
size="mini"
onClick={() => {
this.reCancle(row);
}}
>
撤销
</el-button>
</span>
);
}
},
},
],
},
dialogVisible: false,
currentParams: {},
};
},
};
</script>
......@@ -102,8 +102,11 @@ export default {
methods: {
// 处理
handleArr(arr, currentTime) {
let index = arr.findIndex((item) => item.createTime === currentTime);
console.log(currentTime);
console.log(arr);
let index = arr.findIndex((item) => item.createTime == currentTime);
if (index > -1) {
console.log(arr[index].attendanceSummary);
return arr[index].attendanceSummary;
} else {
return "-";
......@@ -263,16 +266,21 @@ export default {
{ label: "出勤天数", prop: "goTimes", formatter: this.formatter },
{
label: "上午缺卡次数",
label: "缺卡次数",
prop: "morningTimes",
formatter: this.formatter,
},
// {
// label: "上午缺卡次数",
// prop: "morningTimes",
// formatter: this.formatter,
// },
{
label: "下午缺卡次数",
prop: "afternoonTimes",
formatter: this.formatter,
},
// {
// label: "下午缺卡次数",
// prop: "afternoonTimes",
// formatter: this.formatter,
// },
{ label: "回单位(天)", prop: "backToUnit" },
{ label: "因公请假(天)", prop: "onDutyLeave" },
......
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