2022-03-08 17:02:42 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<div class="AttendanceFiexdTime">
|
|
|
|
|
|
<div class="form-group">
|
|
|
|
|
|
<div class="form-group__item">
|
|
|
|
|
|
<div class="left">
|
|
|
|
|
|
<label>*</label>
|
|
|
|
|
|
<span>最早允许打卡时间</span>
|
|
|
|
|
|
</div>
|
2022-06-01 16:53:30 +08:00
|
|
|
|
<picker mode="time" @change="e => onTimeChange(e, 'workInFrom')">
|
2022-05-23 15:23:10 +08:00
|
|
|
|
<div class="right">
|
|
|
|
|
|
<span>{{ form.workInFrom || '请设置时间' }}</span>
|
|
|
|
|
|
<image src="./images/right.png" />
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</picker>
|
2022-03-08 17:02:42 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
<div class="form-group__item">
|
|
|
|
|
|
<div class="left">
|
|
|
|
|
|
<label>*</label>
|
|
|
|
|
|
<span>最晚允许打卡时间</span>
|
|
|
|
|
|
</div>
|
2022-06-01 16:53:30 +08:00
|
|
|
|
<picker mode="time" @change="e => onTimeChange(e, 'workOutEnd')">
|
2022-05-23 15:23:10 +08:00
|
|
|
|
<div class="right">
|
|
|
|
|
|
<span>{{ form.workOutEnd || '请设置时间' }}</span>
|
|
|
|
|
|
<image src="./images/right.png" />
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</picker>
|
2022-03-08 17:02:42 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="form-group">
|
|
|
|
|
|
<div class="form-group__item form-group__checked">
|
|
|
|
|
|
<div class="left">
|
|
|
|
|
|
<h2>是否开启休息时间</h2>
|
|
|
|
|
|
<p>若开启休息时间,则休息时间不计入工作时长</p>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="right">
|
2022-05-23 15:23:10 +08:00
|
|
|
|
<switch color="#1088F9" :checked="form.openRestTime === '1'" @change="onOpenRestChange" />
|
2022-03-08 17:02:42 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2022-05-23 15:23:10 +08:00
|
|
|
|
<div class="form-group__item" v-if="form.openRestTime === '1'">
|
2022-03-08 17:02:42 +08:00
|
|
|
|
<div class="left">
|
|
|
|
|
|
<label>*</label>
|
|
|
|
|
|
<span>休息开始</span>
|
|
|
|
|
|
</div>
|
2022-06-01 16:53:30 +08:00
|
|
|
|
<picker mode="time" @change="e => onTimeChange(e, 'restTimeBegin')">
|
2022-05-23 15:23:10 +08:00
|
|
|
|
<div class="right">
|
|
|
|
|
|
<span>{{ form.restTimeBegin || '请设置时间' }}</span>
|
|
|
|
|
|
<image src="./images/right.png" />
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</picker>
|
2022-03-08 17:02:42 +08:00
|
|
|
|
</div>
|
2022-05-23 15:23:10 +08:00
|
|
|
|
<div class="form-group__item" v-if="form.openRestTime === '1'">
|
2022-03-08 17:02:42 +08:00
|
|
|
|
<div class="left">
|
|
|
|
|
|
<label>*</label>
|
|
|
|
|
|
<span>休息结束</span>
|
|
|
|
|
|
</div>
|
2022-06-01 16:53:30 +08:00
|
|
|
|
<picker mode="time" @change="e => onTimeChange(e, 'restTimeEnd')">
|
2022-05-23 15:23:10 +08:00
|
|
|
|
<div class="right">
|
|
|
|
|
|
<span>{{ form.restTimeEnd || '请设置时间' }}</span>
|
|
|
|
|
|
<image src="./images/right.png" />
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</picker>
|
2022-03-08 17:02:42 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="form-group">
|
|
|
|
|
|
<div class="form-group__item form-group__checked">
|
|
|
|
|
|
<div class="left">
|
|
|
|
|
|
<h2>工作时长要求</h2>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="form-group__item">
|
|
|
|
|
|
<div class="left">
|
|
|
|
|
|
<label>*</label>
|
|
|
|
|
|
<span>时长要求</span>
|
|
|
|
|
|
</div>
|
2022-05-23 15:23:10 +08:00
|
|
|
|
<picker :range="hours" mode="selector" @change="e => form.workHoursLimit = hours[e.detail.value]">
|
|
|
|
|
|
<div class="right">
|
|
|
|
|
|
<span>{{ form.workHoursLimit ? form.workHoursLimit + '小时' : '请选择工作时长' }}</span>
|
|
|
|
|
|
<image src="./images/right.png" />
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</picker>
|
2022-03-08 17:02:42 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="form-group">
|
|
|
|
|
|
<div class="form-group__item form-group__checked">
|
|
|
|
|
|
<div class="left">
|
|
|
|
|
|
<h2>是否开启固定打卡点</h2>
|
|
|
|
|
|
<p>若开启,不在固定范围内打卡将不计入考勤</p>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="right">
|
2022-05-23 15:23:10 +08:00
|
|
|
|
<switch color="#1088F9" :checked="form.openWorkPoint === '1'" @change="onWorkPointChange" />
|
2022-03-08 17:02:42 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2022-05-25 13:59:13 +08:00
|
|
|
|
<div class="form-group__item form-group__checked form-item__address" v-if="form.openWorkPoint === '1' && address.address">
|
2022-03-08 17:02:42 +08:00
|
|
|
|
<div class="left">
|
2022-05-23 15:23:10 +08:00
|
|
|
|
<h2>{{ address.title }}</h2>
|
|
|
|
|
|
<p>{{ address.address }}</p>
|
|
|
|
|
|
<p style="margin-top: 8px;">允许打卡范围{{ address.distance }}米</p>
|
2022-03-08 17:02:42 +08:00
|
|
|
|
</div>
|
2022-05-23 15:23:10 +08:00
|
|
|
|
<div class="right" @click="address = {}">
|
2022-05-25 13:59:13 +08:00
|
|
|
|
<image src="./images/remove.png" />
|
2022-03-08 17:02:42 +08:00
|
|
|
|
<span>删除</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2022-05-23 15:23:10 +08:00
|
|
|
|
<div class="form-group__item form-group__checked" v-if="form.openWorkPoint === '1' && !address.address">
|
2022-05-27 15:07:53 +08:00
|
|
|
|
<div class="left left-add" @click="linkTo('./ChooseAddess')">
|
2022-03-08 17:02:42 +08:00
|
|
|
|
<div class="add-btn"></div>
|
|
|
|
|
|
<h2 style="color: #1088F9;">添加打卡点</h2>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2022-05-23 15:23:10 +08:00
|
|
|
|
<div class="form-btn" hover-class="text-hover" @click="save">保存</div>
|
2022-03-08 17:02:42 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
|
|
|
export default {
|
|
|
|
|
|
name: 'AttendanceFlexibleTime',
|
|
|
|
|
|
|
|
|
|
|
|
appName: '灵活时间打卡设置',
|
|
|
|
|
|
data () {
|
|
|
|
|
|
return {
|
2022-05-23 15:23:10 +08:00
|
|
|
|
hours: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17'],
|
|
|
|
|
|
form: {
|
|
|
|
|
|
openRestTime: '1',
|
|
|
|
|
|
openWorkPoint: '0',
|
|
|
|
|
|
workHoursLimit: '',
|
|
|
|
|
|
restTimeBegin: '',
|
|
|
|
|
|
restTimeEnd: '',
|
|
|
|
|
|
workInFrom: '',
|
|
|
|
|
|
workOutEnd: ''
|
|
|
|
|
|
},
|
|
|
|
|
|
address: {},
|
|
|
|
|
|
id: ''
|
2022-03-08 17:02:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
|
2022-05-23 15:23:10 +08:00
|
|
|
|
onLoad (query) {
|
|
|
|
|
|
uni.$on('address', e => {
|
|
|
|
|
|
this.address = e
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
if (query.id) {
|
|
|
|
|
|
this.id = query.id
|
2022-03-08 17:02:42 +08:00
|
|
|
|
|
2022-05-23 15:23:10 +08:00
|
|
|
|
this.getInfo(query.id)
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
onUnload () {
|
|
|
|
|
|
uni.$off('address')
|
2022-03-08 17:02:42 +08:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
methods: {
|
2022-05-23 15:23:10 +08:00
|
|
|
|
linkTo (url) {
|
|
|
|
|
|
uni.navigateTo({
|
|
|
|
|
|
url
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
getInfo (id) {
|
|
|
|
|
|
this.$http.post(`/api/appattendanceconfig/queryDetailById?id=${id}`).then(res => {
|
|
|
|
|
|
if (res.code === 0) {
|
|
|
|
|
|
this.address = JSON.parse(res.data.workPointDesc)
|
|
|
|
|
|
this.form = {
|
|
|
|
|
|
...this.form,
|
|
|
|
|
|
...res.data
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
onTimeChange (e, type) {
|
|
|
|
|
|
this.form[type] = e.detail.value + ':00'
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
onOpenRestChange (e) {
|
|
|
|
|
|
this.form.restTimeBegin = ''
|
|
|
|
|
|
this.form.restTimeEnd = ''
|
|
|
|
|
|
this.form.openRestTime = e.detail.value ? '1' : '0'
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
onWorkPointChange (e) {
|
|
|
|
|
|
this.form.openWorkPoint = e.detail.value ? '1' : '0'
|
2022-05-23 18:00:28 +08:00
|
|
|
|
this.form.workPointDesc = {}
|
|
|
|
|
|
this.address = {}
|
2022-05-23 15:23:10 +08:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
save () {
|
|
|
|
|
|
if (!this.form.workInFrom) {
|
|
|
|
|
|
return this.$u.toast('请选择最早打卡时间')
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!this.form.workOutEnd) {
|
|
|
|
|
|
return this.$u.toast('请选择最晚打卡时间')
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-05-30 17:00:54 +08:00
|
|
|
|
if (this.$dayjs('2020-06-01 ' + this.form.workOutEnd).valueOf() <= this.$dayjs('2020-06-01 ' + this.form.workInFrom).valueOf()) {
|
|
|
|
|
|
return this.$u.toast('最晚打卡时间不能最早打卡时间')
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-05-23 15:23:10 +08:00
|
|
|
|
if (this.form.openRestTime === '1') {
|
|
|
|
|
|
if (!this.form.restTimeBegin) {
|
|
|
|
|
|
return this.$u.toast('请选择休息时间')
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!this.form.restTimeEnd) {
|
|
|
|
|
|
return this.$u.toast('请选择休息结束时间')
|
|
|
|
|
|
}
|
2022-05-30 17:00:54 +08:00
|
|
|
|
|
|
|
|
|
|
if (this.$dayjs('2020-06-01 ' + this.form.restTimeEnd).valueOf() <= this.$dayjs('2020-06-01 ' + this.form.restTimeBegin).valueOf()) {
|
|
|
|
|
|
return this.$u.toast('休息结束时间不能早于休息开始时间')
|
|
|
|
|
|
}
|
2022-05-23 15:23:10 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!this.form.workHoursLimit) {
|
|
|
|
|
|
return this.$u.toast('请选择工作时长')
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (this.form.openWorkPoint === '1' && !this.address.address) {
|
|
|
|
|
|
return this.$u.toast('请选择固定打卡点')
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
this.$loading()
|
|
|
|
|
|
this.$http.post('/api/appattendanceconfig/addOrUpdate', {
|
|
|
|
|
|
openRestTime: this.form.openRestTime,
|
|
|
|
|
|
workHoursLimit: this.form.workHoursLimit,
|
|
|
|
|
|
openWorkPoint: this.form.openWorkPoint,
|
|
|
|
|
|
workInFrom: `${this.form.workInFrom}`,
|
|
|
|
|
|
workOutEnd: `${this.form.workOutEnd}`,
|
|
|
|
|
|
restTimeBegin: `${this.form.restTimeBegin}`,
|
|
|
|
|
|
restTimeEnd: `${this.form.restTimeEnd}`,
|
|
|
|
|
|
type: 1,
|
|
|
|
|
|
workPointDesc: JSON.stringify(this.address),
|
|
|
|
|
|
id: this.id || ''
|
|
|
|
|
|
}).then(res => {
|
|
|
|
|
|
if (res.code === 0) {
|
|
|
|
|
|
this.$u.toast('提交成功')
|
|
|
|
|
|
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
uni.$emit('update')
|
|
|
|
|
|
uni.navigateBack({
|
|
|
|
|
|
delta: 1
|
|
|
|
|
|
})
|
|
|
|
|
|
}, 500)
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
2022-03-08 17:02:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
|
.AttendanceFiexdTime {
|
|
|
|
|
|
padding-bottom: 130px;
|
|
|
|
|
|
|
|
|
|
|
|
* {
|
|
|
|
|
|
line-height: 1;
|
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.form-btn {
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
bottom: 0;
|
|
|
|
|
|
left: 0;
|
|
|
|
|
|
z-index: 1;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
height: 112px;
|
|
|
|
|
|
line-height: 112px;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
color: #fff;
|
|
|
|
|
|
font-size: 32px;
|
|
|
|
|
|
background: #1365DD;
|
|
|
|
|
|
|
|
|
|
|
|
&:active {
|
|
|
|
|
|
opacity: 0.8;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.form-group {
|
|
|
|
|
|
margin-bottom: 16px;
|
|
|
|
|
|
padding: 0 32px;
|
|
|
|
|
|
background: #fff;
|
|
|
|
|
|
|
|
|
|
|
|
.form-group__item {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
height: 112px;
|
|
|
|
|
|
font-size: 32px;
|
|
|
|
|
|
color: #333333;
|
|
|
|
|
|
border-bottom: 1px solid #DDDDDD;
|
|
|
|
|
|
|
|
|
|
|
|
&.form-group__checked {
|
|
|
|
|
|
height: auto;
|
|
|
|
|
|
padding: 32px 0;
|
|
|
|
|
|
|
|
|
|
|
|
.left {
|
2022-05-23 15:23:10 +08:00
|
|
|
|
flex: 1;
|
|
|
|
|
|
margin-right: 10px;
|
|
|
|
|
|
|
2022-03-08 17:02:42 +08:00
|
|
|
|
h2 {
|
|
|
|
|
|
margin-bottom: 12px;
|
|
|
|
|
|
color: #333333;
|
|
|
|
|
|
font-size: 32px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-05-23 15:23:10 +08:00
|
|
|
|
p {
|
|
|
|
|
|
line-height: 1.2;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-03-08 17:02:42 +08:00
|
|
|
|
&.left-add {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
|
|
h2 {
|
|
|
|
|
|
margin-bottom: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.add-btn {
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
width: 48px;
|
|
|
|
|
|
height: 48px;
|
|
|
|
|
|
margin-right: 16px;
|
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
|
background: #1088F9;
|
|
|
|
|
|
|
|
|
|
|
|
&::after {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
top: 50%;
|
|
|
|
|
|
left: 50%;
|
|
|
|
|
|
z-index: 1;
|
|
|
|
|
|
width: 4px;
|
|
|
|
|
|
height: 24px;
|
|
|
|
|
|
background: #fff;
|
|
|
|
|
|
content: ' ';
|
|
|
|
|
|
transform: translate(-50%, -50%);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
&::before {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
top: 50%;
|
|
|
|
|
|
left: 50%;
|
|
|
|
|
|
z-index: 1;
|
|
|
|
|
|
width: 24px;
|
|
|
|
|
|
height: 4px;
|
|
|
|
|
|
background: #fff;
|
|
|
|
|
|
content: ' ';
|
|
|
|
|
|
transform: translate(-50%, -50%);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
p {
|
|
|
|
|
|
color: #999999;
|
|
|
|
|
|
font-size: 28px;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
label {
|
|
|
|
|
|
color: #FF4466;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
&:last-child {
|
|
|
|
|
|
border: none;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.right {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
color: #999999;
|
|
|
|
|
|
image {
|
|
|
|
|
|
width: 32px;
|
|
|
|
|
|
height: 32px;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2022-05-25 13:59:13 +08:00
|
|
|
|
|
|
|
|
|
|
.form-item__address {
|
|
|
|
|
|
.left {
|
|
|
|
|
|
flex: 1;
|
|
|
|
|
|
margin-right: 10px;
|
|
|
|
|
|
|
|
|
|
|
|
p {
|
|
|
|
|
|
line-height: 1.3;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.right {
|
|
|
|
|
|
span {
|
|
|
|
|
|
margin-left: 10px;
|
|
|
|
|
|
color: #1088F9;
|
|
|
|
|
|
font-size: 28px;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2022-03-08 17:02:42 +08:00
|
|
|
|
}
|
2022-05-23 15:23:10 +08:00
|
|
|
|
</style>
|