Commit bab6820f authored by dll's avatar dll

'考勤汇总图表描绘'

parents 26115a9e 805611b3
......@@ -284,6 +284,7 @@ export default {
return val
}
},
// geshu
// 格式化是否在政务中心
formatterSource(row, column, val){
const content = formatter(this.tableData, column, val);
......@@ -302,6 +303,7 @@ export default {
formattereErrorStatus(row,column,val){
const content = formatter(this.tableData, column, val)
if (content) {
return <el-tag size="mini" type="danger">{this.util_formatter('errorStatus', val)}</el-tag>
} else {
return val
......
......@@ -28,7 +28,7 @@ instance.interceptors.request.use(config => {
// const hostname = location.hostname;
const baseURL =config.baseURL;
//const port = location.port;
// const port =process.env.VUE_APP_PORTAL_PORT=='undefined'?'11072':process.env.VUE_APP_PORTAL_PORT;
// const port =process.env.VUE_APP_PORTAL_PORT=='undefined'?'11078':process.env.VUE_APP_PORTAL_PORT;
// 测试用
//http://192.168.0.98:11039
......@@ -38,11 +38,14 @@ instance.interceptors.request.use(config => {
// 代
// http://192.168.0.108/17500
// const hostname = '192.168.0.108'
// const port = '17500'
//const hostname = '192.168.0.116'
//const port = '17500'
const hostname = '192.168.0.108'
const port = '11039'
const hostname = '192.168.0.116'
const port = '17500'
// const hostname = '192.168.0.98'
// const port = '11039'
// 动态修改请求地址
if (config.url.startsWith('/')) {
......
export const timestampToTime = (timestamp) => {
export const timestampToTime = (timestamp,transLength) => {
// 时间戳为10位需*1000,时间戳为13位不需乘1000
var date = null
let date = null
if(timestamp.length<13){
date= new Date(timestamp * 1000);
}else{
date= new Date(timestamp);
}
var Y = date.getFullYear() + "-";
var M =
let Y = date.getFullYear() + "-";
let M =
(date.getMonth() + 1 < 10
? "0" + (date.getMonth() + 1)
: date.getMonth() + 1) + "-";
var D = (date.getDate() < 10 ? "0" + date.getDate() : date.getDate()) + " ";
var h = date.getHours() + ":";
var m = date.getMinutes() + ":";
var s = date.getSeconds();
return Y + M + D;
let D = (date.getDate() < 10 ? "0" + date.getDate() : date.getDate());
let h = " "+date.getHours() + ":";
let m = date.getMinutes() + ":";
let s = date.getSeconds();
switch(transLength){
case 3:
return Y + M + D;
case 6:
return Y + M + D + h + m + s;
}
}
// 小时:分钟 ==》 转分钟
......@@ -40,4 +47,62 @@ export const transFormTime = (num) => {
return "0:00";
}
}
// 时间戳 转 yyyy-MM-dd
\ No newline at end of file
//当前月第一天
export const getFirstDay = () => {
let y = new Date().getFullYear(); //获取年份
let m = new Date().getMonth() + 1; //获取月份
let d = '01';
m = m < 10 ? '0' + m : m; //月份补 0
return [y,m,d].join("-")
}
//当前月最后一天
export const getLastDay = () =>{
let y = new Date().getFullYear(); //获取年份
let m = new Date().getMonth() + 1; //获取月份
let d = new Date(y, m, 0).getDate(); //获取当月最后一日
m = m < 10 ? '0' + m : m; //月份补 0
d = d < 10 ? '0' + d : d; //日数补 0
return [y,m,d].join("-")
}
//获取两日期之间日期列表函数
export const getdiffdate = (stime,etime) =>{
//初始化日期列表,数组
let diffdate = new Array();
let i=0;
//开始日期小于等于结束日期,并循环
while(stime<=etime){
diffdate[i] = stime;
//获取开始日期时间戳
let stime_ts = new Date(stime).getTime();
//增加一天时间戳后的日期
let next_date = stime_ts + (24*60*60*1000);
//拼接年月日,这里的月份会返回(0-11),所以要+1
let next_dates_y = new Date(next_date).getFullYear()+'-';
let next_dates_m = (new Date(next_date).getMonth()+1 < 10)?'0'+(new Date(next_date).getMonth()+1)+'-':(new Date(next_date).getMonth()+1)+'-';
let next_dates_d = (new Date(next_date).getDate() < 10)?'0'+new Date(next_date).getDate():new Date(next_date).getDate();
stime = next_dates_y+next_dates_m+next_dates_d;
//增加数组key
i++;
}
return diffdate;
}
export const getMyDay = (date) => {
let week;
if (date.getDay() == 0) week = "周日"
if (date.getDay() == 1) week = "周一"
if (date.getDay() == 2) week = "周二"
if (date.getDay() == 3) week = "周三"
if (date.getDay() == 4) week = "周四"
if (date.getDay() == 5) week = "周五"
if (date.getDay() == 6) week = "周六"
return week;
}
\ No newline at end of file
......@@ -284,6 +284,17 @@ export default {
return false
}
}
if(this.form.startTime && this.form.endTime){
let startValue = Date.parse(this.form.startTime)
let endValue = Date.parse(this.form.endTime)
if(startValue>endValue){
this.$message.error('查询-结束的日期需大于开始日期')
this.form.endTime = ''
return false
}
}
let params = JSON.parse(JSON.stringify(this.form)) //不更改原始数据
// console.log(this.form,'form参数')
let data = this.decode(params);
......
......@@ -5,31 +5,38 @@
:visible.sync="open"
:direction="direction"
size="50%">
<div>
已选择6个:
</div>
<div class="staffList">
<div v-for="item in 5" :key="item" class="mt10">
<span>刘德华</span>
<span>的下班时间18:00打卡异常状态</span>
<span class="ml10">缺卡</span>
<span class="ml10">修改为</span>
</div>
<div>
<!-- 处理异常状态 -->
<el-select>
<el-option></el-option>
</el-select>
<!-- 早退/迟到 -->
<el-input style="width:220px" placeholder="请输入数字">
<template slot="append">分钟</template>
</el-input>
</div>
<div style="padding:20px;font-size:15px">
<div>
<span>备注:</span>
<el-input placeholder="请输入备注" v-model="dealParams.remark"></el-input>
已选择{{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-select>
<el-option></el-option>
</el-select>
<!-- 早退/迟到 -->
<el-input style="width:220px" placeholder="请输入数字" :maxlength="4"
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>
</el-drawer>
</template>
......@@ -46,10 +53,6 @@
},
data() {
return {
// 子表选中数据
checkedAttendanceRecordDetail: [],
// 考勤打卡记录详细信息表格数据
attendanceRecordDetailList: [],
// 遮罩层
loading: true,
// 弹出层标题
......@@ -57,11 +60,6 @@
// 是否显示弹出层
open: false,
direction:"rtl",
toString:[
],
toDate:[
"attendanceDate",
],
// 表单校验
rules: {
staffName: [
......@@ -75,58 +73,25 @@
dealParams:{
remark:'',
errorStatus:''
}
},
selection:[]
}
},
methods: {
/** 考勤打卡记录详细信息序号 */
rowAttendanceRecordDetailIndex({ row, rowIndex }) {
row.index = rowIndex + 1;
},
/** 考勤打卡记录详细信息添加按钮操作 */
handleAddAttendanceRecordDetail() {
let obj = {};
obj.shiftsId = "";
obj.shiftsName = "";
obj.goWorkDate = "";
obj.goWorkResult = "";
obj.offWorkDate = "";
obj.offWorkResult = "";
obj.remark = "";
obj.createUserId = "";
obj.createTime = "";
obj.updateUserId = "";
obj.updateTime = "";
this.attendanceRecordDetailList.push(obj);
},
/** 考勤打卡记录详细信息删除按钮操作 */
handleDeleteAttendanceRecordDetail() {
if (this.checkedAttendanceRecordDetail.length == 0) {
this.$alert("请先选择要删除的考勤打卡记录详细信息数据", "提示", { confirmButtonText: "确定", });
} else {
this.attendanceRecordDetailList.splice(this.checkedAttendanceRecordDetail[0].index - 1, 1);
}
},
/** 单选框选中数据 */
handleAttendanceRecordDetailSelectionChange(selection) {
if (selection.length > 1) {
this.$refs.attendanceRecordDetail.clearSelection();
this.$refs.attendanceRecordDetail.toggleRowSelection(selection.pop());
} else {
this.checkedAttendanceRecordDetail = selection;
}
},
// 渲染前置处理
beforeRender(data) {
if(data.entity.attendanceRecordDetailList) {
this.attendanceRecordDetailList = data.entity.attendanceRecordDetailList;
}
return data
},
/** 编辑 */
edit(row) {
this.reset()
edit(row,selection) {
console.log(row,selection)
if(this.selection.length<1){
this.selection = [row]
}else{
this.selection = selection
}
this.open = true
this.query = { id: row.id };
this.urls.currUrl ="attendance/record/error/edit";
this.getData();
......@@ -139,38 +104,14 @@
},
/**获取数据后弹框 */
afterRender(data) {
console.log(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,
remark : "",
};
this.resetForm("form");
},
resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
},
},
};
}
}
}
</script>
......@@ -47,17 +47,22 @@
// this.$refs.dialogform.view(row);
// },
morehandle(row){
morehandle(){
if(this.selection.length < 1){
this.$message.error('请至少选择一条处理')
return
}
this.$refs.drawerShow.edit(row);
let arr = this.tableData.data.filter(item => {
if(this.selection.includes(item.id)){
return item
}
})
this.$refs.drawerShow.edit('',arr);
},
// 处理
handle(err){
console.log(err)
this.$refs.drawerShow.edit(err);
this.$refs.drawerShow.edit(err,[]);
},
// 撤销
reCancle(err){
......@@ -143,27 +148,36 @@
{label: "班次", prop: "shiftsName"},
{label: "异常状态", prop: "errorStatus",formatter: this.formattereErrorStatus},
{label: "异常时间", prop: "errorDateTime", formatter: this.formatterDate},
{label: "处理结果", prop: "processResult", formatter: this.formatterDate},
{label: "上下班时间", prop: "goOffDateTime", 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: "operDateTime", formatter: this.formatters},
{label: "处理状态", prop: "processStatus",formatter: this.formattereDealStatus},
{label: "处理人", prop: "opertor"},
{label: "备注", prop: "remark"},
{label: "处理人", prop: "opertor",formatter:this.formatters},
{label: "备注", prop: "remark",formatter:this.formatters},
{
label: "操作",
width: 240,
formatter: (row) => {
return (
<span>
if(row.processStatus == 0 || !row.processStatus){
return(
<el-button type="text" size='mini' onClick={() => {
this.handle(row)
}} v-if={row.processStatus == 0}>处理</el-button>
<el-button type="text" size='mini' onClick={() => {
this.reCancle(row)
}} v-else>撤销</el-button>
</span>
)
}}>处理</el-button>
)
}else{
return (
<span>
<el-button type="text" size='mini' onClick={() => {
this.reCancle(row)
}}>撤销</el-button>
</span>
)
}
}
}
]
......
......@@ -152,7 +152,7 @@
if(res.code == 1){
let arr = res.data.data
this.exportList = arr.map(item => {
item.createTime = timestampToTime(item.createTime)
item.createTime = timestampToTime(item.createTime,6)
item.islook = false
return item
})
......
......@@ -179,7 +179,7 @@
if(res.code == 1){
let arr = res.data.data
this.exportList = arr.map(item => {
item.createTime = timestampToTime(item.createTime)
item.createTime = timestampToTime(item.createTime,6)
item.islook = false
return item
})
......
......@@ -63,15 +63,58 @@
/** 表单弹出框模式需引入 */
import dialogShow from "./dialogshow";
import table from "@/assets/mixins/table";
import {getFirstDay,getLastDay,getdiffdate,timestampToTime,getMyDay} from '@/assets/utils/dateFormat.js'
export default {
name: "AttendanceStatList",
components: {
dialogShow
},
},
mixins: [table],
created() {
this.query.startTime = getFirstDay()
this.query.endTime = getLastDay()
this.initalArr = this.config.columns
},
methods: {
// 处理
handleArr(arr,currentTime){
let timeArr = arr.map(item1 => item1.createTime)
let index = timeArr.findIndex(item => item === currentTime)
if(index > -1){
return arr[index].attendanceSummary
}else{
return '-'
}
},
afterRender(data) {
this.addColumn = getdiffdate(this.query.startTime,this.query.endTime)
// 动态处理
let addobjArr = []
this.addColumn.map((item,index) => {
let obj = {
label:item +'('+ getMyDay(new Date(item))+')',
prop:'attendanceStaffStatEntities',
formatter: (row) => {
if(row.attendanceStaffStatEntities.length>0){
return this.handleArr(row.attendanceStaffStatEntities,item)
}else{
return '-'
}
}
}
addobjArr.push(obj)
})
this.config.columns = [...this.initalArr,...addobjArr]
this.$forceUpdate()
},
beforeRender(row) {
row.data.forEach(element => {
element.attendanceStaffStatEntities.forEach(item1 => {
item1.createTime = timestampToTime(item1.createTime,3)
})
})
return row
},
/** 重写新增方法 */
toAdd(row) {
this.$refs.dialogform.add(row);
......@@ -135,13 +178,13 @@
fuzzy: false
},
{
name:'attendanceDateStart',
name:'startTime',
type: "date",
label: "考勤开始时间",
fuzzy: false
},
{
name:'attendanceDateEnd',
name:'endTime',
type: "date",
label: "考勤结束时间",
fuzzy: false
......@@ -166,7 +209,6 @@
{label: "窗口类别", prop: "windowCategory",fixed:'left',width:100},
{label: "员工姓名", prop: "staffName",fixed:'left',width:100},
{label:"部门",prop:"deptName"},
{label: "回单位(天)", prop: "backToUnit"},
......@@ -220,19 +262,7 @@
{label: "无故缺席会议(次)", prop: "unexcusedMeetingAbsence"},
{label: "会议早退", prop: "earlyLeaveMeeting"},
// {label: "创建用户", prop: "createUserId", formatter: this.formatter},
// {
// label: "操作",
// width: 240,
// formatter: row => {
// return (
// <table-buttons noAdd noEdit noView noDel row={row} onEdit={this.toEdit}
// onView={this.toView} onDel={this.toDel} />
// );
// }
// }
{label: "会议早退", prop: "earlyLeaveMeeting"}
]
},
setcolum:[],
......@@ -240,12 +270,11 @@
checkList:[],
drawerhistory:false,
// 动态新增列表
addColumn:[
]
};
addColumn:[],
initalArr:[]
}
}
};
}
</script>
<style scoped lang="less">
.hisList{
......
......@@ -147,7 +147,7 @@ export default {
this.open = true
let arr = res.data.data
this.recordList = arr.map(item => {
item.createTime = timestampToTime(item.createTime)
item.createTime = timestampToTime(item.createTime,6)
return item
})
......
......@@ -108,6 +108,7 @@
import table from "@/assets/mixins/table";
import TabPane from "@/components/tabPane.vue"
import drawerStaff from './drawershowStaff.vue'
import {timestampToTime} from '@/assets/utils/dateFormat.js'
export default {
name: "JobList",
components: {
......@@ -142,6 +143,9 @@
this.$post('/job/info?id='+this.currentId).then(res => {
if(res.code == 1){
this.staffList = res.data.staffEntities
this.staffList.forEach(item => {
item.createTime = timestampToTime(item.createTime,6)
})
}
})
},
......@@ -178,7 +182,7 @@
if(this.multipleSelection.length>0){
params['idList'] = this.multipleSelection
}
this.$download("/job/exportExcel", {
this.$download("/staff/exportExcel", {
...params
}, { type: "excel" }).then(() => this.isExport = false).catch(error => {
this.isExport = false;
......
......@@ -252,7 +252,7 @@
this.$refs.upload.submit();
},
afterRender(data){
this.tableData.staff.refreshDate = timestampToTime(this.tableData.staff.refreshDate)
this.tableData.staff.refreshDate = timestampToTime(this.tableData.staff.refreshDate,6)
}
},
data() {
......
......@@ -115,8 +115,8 @@
this.info = res.data.holidayLists[0]
this.dict = res.dict
this.allinfo = res.data//总
this.info.workBeginDay = this.info.workBeginDay?timestampToTime(Number(this.info.workBeginDay)):'-'
this.info.workFormalDay = this.info.workFormalDay?timestampToTime(Number(this.info.workFormalDay)):'-'
this.info.workBeginDay = this.info.workBeginDay?timestampToTime(Number(this.info.workBeginDay),3):'-'
this.info.workFormalDay = this.info.workFormalDay?timestampToTime(Number(this.info.workFormalDay),3):'-'
}
})
.catch(err => {
......
......@@ -37,12 +37,14 @@
label="用户名称"
prop="realName"
v-model="form.realName"
:maxLength="15"
/>
<Field
:span="20"
label="手机号码"
prop="mobile"
v-model="form.mobile"
:maxLength="11"
/>
<!-- <Field label="用户类型" prop="userType" v-model="form.userType" :enumData='dict.userType' type='select' />
<Field label="用户状态" prop="status" v-model="form.status" :enumData='dict.status' type='select' /> -->
......
<template>
<!-- 弹出框表单 -->
<el-dialog :title="title" :visible.sync="open" width="90%" append-to-body>
<el-dialog :title="title" :visible.sync="open" width="60%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<Field label="姓名" prop="name" v-model="form.name" placeholder="请输入姓名"/>
<Field label="电话号码" prop="phone" v-model="form.phone" placeholder="请输入电话号码"/>
<Field label="工号" prop="number" v-model="form.number" placeholder="请输入工号"/>
<Field label="姓名" prop="name" v-model="form.name" placeholder="请输入姓名" :maxLength="20"/>
<Field label="电话号码" prop="phone" v-model="form.phone" placeholder="请输入电话号码" :maxLength="11"/>
<Field label="工号" prop="number" v-model="form.number" placeholder="请输入工号" :maxLength="15"/>
</el-row>
<el-form-item label="所属部门" prop="deptId">
......
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