+
工作日设置
@@ -68,18 +68,18 @@
-
+
- 说明:晚到时长在此时间范围之内不视为迟到
+ 说明:晚到时长超过xx分钟将视为迟到
-
+
- 说明:晚到时长超过此时间范围则将视为旷工
+ 说明:晚到时长超过xx分钟将视为旷工
@@ -97,7 +97,47 @@
export default {
name: 'AtdRules',
data() {
+ const valiDelay1 = (rule, value, callback) => {
+ if (value !== '') {
+ if (parseInt(value) < 0) {
+ callback(new Error('不能小于0'))
+ } else {
+ if (this.atdRulesForm.delayBegin2 !== '' && parseInt(value) > parseInt(this.atdRulesForm.delayBegin2)) {
+ callback(new Error('不能大于严重迟到时长'))
+ } else {
+ callback()
+ }
+ }
+ } else {
+ callback(new Error('迟到宽容时长不能为空'))
+ }
+ }
+ const valiDelay2 = (rule, value, callback) => {
+ if (value !== '') {
+ if (this.atdRulesForm.delayBegin1 !== '' && parseInt(value) < parseInt(this.atdRulesForm.delayBegin1)) {
+ callback(new Error('不能小于迟到宽容时长'))
+ } else {
+ if (this.atdRulesForm.workTimeBegin !== '' && this.atdRulesForm.breakTimeBegin !== '') {
+ debugger
+ var time1 = new Date('2020-01-01 ' + this.atdRulesForm.workTimeBegin)
+ var time2 = new Date('2020-01-01 ' + this.atdRulesForm.breakTimeBegin)
+ var diff = time2.getTime() - time1.getTime() // 时间差的毫秒数
+ var minutes = Math.floor(diff / (60 * 1000))// 计算相差分钟数
+ if (parseInt(value) > parseInt(minutes)) {
+ callback(new Error('不能大于上午上班时长'))
+ } else {
+ callback()
+ }
+ } else {
+ callback()
+ }
+ }
+ } else {
+ callback(new Error('严重迟到时长不能为空'))
+ }
+ }
return {
+ showPage: false,
weeks: [{ label: '星期一', value: '1' }, { label: '星期二', value: '2' }, { label: '星期三', value: '3' }, { label: '星期四', value: '4' }, { label: '星期五', value: '5' }, { label: '星期六', value: '6' }, { label: '星期日', value: '7' }],
// weeks: ['星期一','星期二','星期三','星期四','星期五','星期六','星期日'],
atdRulesForm: {
@@ -117,8 +157,8 @@
workTimeEnd: [{ type: 'string', required: true, message: '下班时间必填', trigger: ['blur', 'change'] }],
breakTimeBegin: [{ required: true, message: '休息开始时间必填', trigger: ['blur', 'change'] }],
breakTimeEnd: [{ required: true, message: '休息结束时间必填', trigger: ['blur', 'change'] }],
- delayBegin1: [{ type: 'number', required: true, message: '迟到宽容时长必填', trigger: 'blur' }],
- delayBegin2: [{ type: 'number', required: true, message: '严重迟到时长必填', trigger: 'blur' }]
+ delayBegin1: [{ validator: valiDelay1, type: 'number', required: true, trigger: 'blur', multiLine: false }],
+ delayBegin2: [{ validator: valiDelay2, type: 'number', required: true, trigger: 'blur' }]
}
}
},
@@ -154,6 +194,7 @@
this.atdRulesForm.delayBegin1 = response.data.delayBegin1
this.atdRulesForm.delayBegin2 = response.data.delayBegin2
}
+ this.showPage = true
})
},
// 放弃修改
diff --git a/src/views/attendance/editRemarks.vue b/src/views/attendance/editRemarks.vue
index 69f7ae6..c474ee1 100644
--- a/src/views/attendance/editRemarks.vue
+++ b/src/views/attendance/editRemarks.vue
@@ -6,7 +6,7 @@
- 添加备注
+ 添加备注
@@ -47,7 +47,7 @@
v-model="remarksForm.beginDate"
:picker-options="beginDateOptions"
type="date"
- format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd"
placeholder="开始日期"/>
@@ -57,7 +57,7 @@
v-model="remarksForm.endDate"
:picker-options="endDateOptions"
type="date"
- format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd"
placeholder="开始日期"/>
@@ -76,13 +76,13 @@
v-model="remarksForm.breastfeedBeginDate"
:picker-options="beginDateOptions"
type="date"
- format="yyyy-MM-dd"
- placeholder="默认截止日期为1年后"/>
+ value-format="yyyy-MM-dd"
+ placeholder="默认截止日期为一年后"/>
-
+
因公
@@ -90,7 +90,7 @@
@@ -115,18 +115,17 @@
value.indexOf('生育假') !== -1) {
callback(new Error('请在“备注信息”下拉框里选择请假类型'))
} else {
- if (value.indexOf('因公') !== -1 || value.indexOf('因私') !== -1) {
- callback(new Error('不能含有“因公”、“因私”字样,在下方选择即可'))
- } else {
- callback()
- }
+ callback()
}
}
} else {
- callback(new Error('请输入其他原因'))
+ callback(new Error('其他原因不能为空'))
}
}
return {
+ listLoading: true,
+ saveBtnDisabeld: false,
+ edited: false,
curDate: '',
beginDateOptions: {
disabledDate: this.disabledBeginDate
@@ -190,7 +189,6 @@
{ name: '其他原因', value: '12' }],
breastfeedTypeList: [{ name: '上午晚到', value: '1' }, { name: '下午早走', value: '2' }],
list: [],
- listLoading: false,
breastfeedTypeDisabled: false
}
},
@@ -199,13 +197,17 @@
methods: {
closeDialog() {
this.list = []
- this.$parent.fetchData(false)
+ this.listLoading = true
+ if (this.edited) {
+ this.edited = false
+ this.$parent.fetchData(true)
+ }
},
disabledBeginDate(time) {
return time.getTime() > new Date(this.curDate)
},
disabledEndDate(time) {
- return time.getTime() < new Date(this.curDate)
+ return time.getTime() < new Date(this.curDate + ' 00:00:00')
},
// 初始化对话框
initDialog: function(title = null, dialogFormVisible, row) {
@@ -229,7 +231,9 @@
this.remarksForm.breastfeedBeginDate = ''
this.remarksForm.other = ''
this.remarksForm.onBusiness = ''
-
+ this.remarksForm.beginDate = this.curDate
+ this.remarksForm.endDate = this.curDate
+ this.remarksForm.breastfeedBeginDate = this.curDate
this.$nextTick(() => {
this.$refs['dataForm'].clearValidate()
})
@@ -247,9 +251,6 @@
},
add() {
this.resetForm()
- this.remarksForm.beginDate = this.curDate
- this.remarksForm.endDate = this.curDate
- this.remarksForm.breastfeedBeginDate = this.curDate
this.addShow = true
},
// 保存数据
@@ -258,17 +259,30 @@
this.$refs['dataForm'].validate((valid) => {
if (valid) {
debugger
- console.log(this.remarksForm.personId)
+ this.saveBtnDisabeld = true
+ // 如果备注为哺乳假,则需要特别处理
+ if (this.remarksForm.remarks === '请假-哺乳假') {
+ this.remarksForm.remarks = this.remarksForm.remarks + this.remarksForm.breastfeedType
+ this.remarksForm.beginDate = this.remarksForm.breastfeedBeginDate
+ }
+ // 如果备注了其他原因
+ if (this.remarksForm.remarks === '其他原因') {
+ var v = '(私)'
+ if (this.remarksForm.onBusiness === '1') v = '(公)'
+ this.remarksForm.remarks = v + this.remarksForm.other
+ }
addRemarks(this.remarksForm).then(response => {
if (response.code === 200) {
this.fetchData()
this.fetchRemarksType()
this.addShow = false
this.$message.success('添加成功!')
- // this.$parent.fetchData(false)
+ this.edited = true
}
+ this.saveBtnDisabeld = false
}).catch(err => {
console.log(err)
+ this.saveBtnDisabeld = false
})
}
})
@@ -292,6 +306,7 @@
this.$message.success('删除成功')
this.fetchData()
this.fetchRemarksType()
+ this.edited = true
}
})
})
@@ -305,6 +320,7 @@
if (response.code === 200) {
this.list = response.data
}
+ this.listLoading = false
})
},
// 获取可添加的备注类型列表
diff --git a/src/api/attendance.js b/src/api/attendance.js
index 627de43..f0df672 100644
--- a/src/api/attendance.js
+++ b/src/api/attendance.js
@@ -142,3 +142,21 @@
})
}
+export function syncAndGenerate(params) {
+ return request({
+ url: 'sync/syncAndGenerate',
+ method: 'post',
+ params,
+ paramsSerializer: params => {
+ return qs.stringify(params, { indices: false })
+ }
+ })
+}
+
+export function initAnnualLeave() {
+ return request({
+ url: 'report/initAnnualLeave',
+ method: 'get'
+ })
+}
+
diff --git a/src/views/attendance/atdRules.vue b/src/views/attendance/atdRules.vue
index bb73a0e..3965d01 100644
--- a/src/views/attendance/atdRules.vue
+++ b/src/views/attendance/atdRules.vue
@@ -1,5 +1,5 @@
-
+
工作日设置
@@ -68,18 +68,18 @@
-
+
- 说明:晚到时长在此时间范围之内不视为迟到
+ 说明:晚到时长超过xx分钟将视为迟到
-
+
- 说明:晚到时长超过此时间范围则将视为旷工
+ 说明:晚到时长超过xx分钟将视为旷工
@@ -97,7 +97,47 @@
export default {
name: 'AtdRules',
data() {
+ const valiDelay1 = (rule, value, callback) => {
+ if (value !== '') {
+ if (parseInt(value) < 0) {
+ callback(new Error('不能小于0'))
+ } else {
+ if (this.atdRulesForm.delayBegin2 !== '' && parseInt(value) > parseInt(this.atdRulesForm.delayBegin2)) {
+ callback(new Error('不能大于严重迟到时长'))
+ } else {
+ callback()
+ }
+ }
+ } else {
+ callback(new Error('迟到宽容时长不能为空'))
+ }
+ }
+ const valiDelay2 = (rule, value, callback) => {
+ if (value !== '') {
+ if (this.atdRulesForm.delayBegin1 !== '' && parseInt(value) < parseInt(this.atdRulesForm.delayBegin1)) {
+ callback(new Error('不能小于迟到宽容时长'))
+ } else {
+ if (this.atdRulesForm.workTimeBegin !== '' && this.atdRulesForm.breakTimeBegin !== '') {
+ debugger
+ var time1 = new Date('2020-01-01 ' + this.atdRulesForm.workTimeBegin)
+ var time2 = new Date('2020-01-01 ' + this.atdRulesForm.breakTimeBegin)
+ var diff = time2.getTime() - time1.getTime() // 时间差的毫秒数
+ var minutes = Math.floor(diff / (60 * 1000))// 计算相差分钟数
+ if (parseInt(value) > parseInt(minutes)) {
+ callback(new Error('不能大于上午上班时长'))
+ } else {
+ callback()
+ }
+ } else {
+ callback()
+ }
+ }
+ } else {
+ callback(new Error('严重迟到时长不能为空'))
+ }
+ }
return {
+ showPage: false,
weeks: [{ label: '星期一', value: '1' }, { label: '星期二', value: '2' }, { label: '星期三', value: '3' }, { label: '星期四', value: '4' }, { label: '星期五', value: '5' }, { label: '星期六', value: '6' }, { label: '星期日', value: '7' }],
// weeks: ['星期一','星期二','星期三','星期四','星期五','星期六','星期日'],
atdRulesForm: {
@@ -117,8 +157,8 @@
workTimeEnd: [{ type: 'string', required: true, message: '下班时间必填', trigger: ['blur', 'change'] }],
breakTimeBegin: [{ required: true, message: '休息开始时间必填', trigger: ['blur', 'change'] }],
breakTimeEnd: [{ required: true, message: '休息结束时间必填', trigger: ['blur', 'change'] }],
- delayBegin1: [{ type: 'number', required: true, message: '迟到宽容时长必填', trigger: 'blur' }],
- delayBegin2: [{ type: 'number', required: true, message: '严重迟到时长必填', trigger: 'blur' }]
+ delayBegin1: [{ validator: valiDelay1, type: 'number', required: true, trigger: 'blur', multiLine: false }],
+ delayBegin2: [{ validator: valiDelay2, type: 'number', required: true, trigger: 'blur' }]
}
}
},
@@ -154,6 +194,7 @@
this.atdRulesForm.delayBegin1 = response.data.delayBegin1
this.atdRulesForm.delayBegin2 = response.data.delayBegin2
}
+ this.showPage = true
})
},
// 放弃修改
diff --git a/src/views/attendance/editRemarks.vue b/src/views/attendance/editRemarks.vue
index 69f7ae6..c474ee1 100644
--- a/src/views/attendance/editRemarks.vue
+++ b/src/views/attendance/editRemarks.vue
@@ -6,7 +6,7 @@
- 添加备注
+ 添加备注
@@ -47,7 +47,7 @@
v-model="remarksForm.beginDate"
:picker-options="beginDateOptions"
type="date"
- format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd"
placeholder="开始日期"/>
@@ -57,7 +57,7 @@
v-model="remarksForm.endDate"
:picker-options="endDateOptions"
type="date"
- format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd"
placeholder="开始日期"/>
@@ -76,13 +76,13 @@
v-model="remarksForm.breastfeedBeginDate"
:picker-options="beginDateOptions"
type="date"
- format="yyyy-MM-dd"
- placeholder="默认截止日期为1年后"/>
+ value-format="yyyy-MM-dd"
+ placeholder="默认截止日期为一年后"/>
-
+
因公
@@ -90,7 +90,7 @@
@@ -115,18 +115,17 @@
value.indexOf('生育假') !== -1) {
callback(new Error('请在“备注信息”下拉框里选择请假类型'))
} else {
- if (value.indexOf('因公') !== -1 || value.indexOf('因私') !== -1) {
- callback(new Error('不能含有“因公”、“因私”字样,在下方选择即可'))
- } else {
- callback()
- }
+ callback()
}
}
} else {
- callback(new Error('请输入其他原因'))
+ callback(new Error('其他原因不能为空'))
}
}
return {
+ listLoading: true,
+ saveBtnDisabeld: false,
+ edited: false,
curDate: '',
beginDateOptions: {
disabledDate: this.disabledBeginDate
@@ -190,7 +189,6 @@
{ name: '其他原因', value: '12' }],
breastfeedTypeList: [{ name: '上午晚到', value: '1' }, { name: '下午早走', value: '2' }],
list: [],
- listLoading: false,
breastfeedTypeDisabled: false
}
},
@@ -199,13 +197,17 @@
methods: {
closeDialog() {
this.list = []
- this.$parent.fetchData(false)
+ this.listLoading = true
+ if (this.edited) {
+ this.edited = false
+ this.$parent.fetchData(true)
+ }
},
disabledBeginDate(time) {
return time.getTime() > new Date(this.curDate)
},
disabledEndDate(time) {
- return time.getTime() < new Date(this.curDate)
+ return time.getTime() < new Date(this.curDate + ' 00:00:00')
},
// 初始化对话框
initDialog: function(title = null, dialogFormVisible, row) {
@@ -229,7 +231,9 @@
this.remarksForm.breastfeedBeginDate = ''
this.remarksForm.other = ''
this.remarksForm.onBusiness = ''
-
+ this.remarksForm.beginDate = this.curDate
+ this.remarksForm.endDate = this.curDate
+ this.remarksForm.breastfeedBeginDate = this.curDate
this.$nextTick(() => {
this.$refs['dataForm'].clearValidate()
})
@@ -247,9 +251,6 @@
},
add() {
this.resetForm()
- this.remarksForm.beginDate = this.curDate
- this.remarksForm.endDate = this.curDate
- this.remarksForm.breastfeedBeginDate = this.curDate
this.addShow = true
},
// 保存数据
@@ -258,17 +259,30 @@
this.$refs['dataForm'].validate((valid) => {
if (valid) {
debugger
- console.log(this.remarksForm.personId)
+ this.saveBtnDisabeld = true
+ // 如果备注为哺乳假,则需要特别处理
+ if (this.remarksForm.remarks === '请假-哺乳假') {
+ this.remarksForm.remarks = this.remarksForm.remarks + this.remarksForm.breastfeedType
+ this.remarksForm.beginDate = this.remarksForm.breastfeedBeginDate
+ }
+ // 如果备注了其他原因
+ if (this.remarksForm.remarks === '其他原因') {
+ var v = '(私)'
+ if (this.remarksForm.onBusiness === '1') v = '(公)'
+ this.remarksForm.remarks = v + this.remarksForm.other
+ }
addRemarks(this.remarksForm).then(response => {
if (response.code === 200) {
this.fetchData()
this.fetchRemarksType()
this.addShow = false
this.$message.success('添加成功!')
- // this.$parent.fetchData(false)
+ this.edited = true
}
+ this.saveBtnDisabeld = false
}).catch(err => {
console.log(err)
+ this.saveBtnDisabeld = false
})
}
})
@@ -292,6 +306,7 @@
this.$message.success('删除成功')
this.fetchData()
this.fetchRemarksType()
+ this.edited = true
}
})
})
@@ -305,6 +320,7 @@
if (response.code === 200) {
this.list = response.data
}
+ this.listLoading = false
})
},
// 获取可添加的备注类型列表
diff --git a/src/views/attendance/listReport.vue b/src/views/attendance/listReport.vue
index af7d432..0142700 100644
--- a/src/views/attendance/listReport.vue
+++ b/src/views/attendance/listReport.vue
@@ -22,7 +22,7 @@
@@ -30,7 +30,7 @@
@@ -83,17 +83,19 @@
@current-change="handleCurrentChange"/>
+