mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-11 18:42:54 +00:00
perf: 优化人脸签到设置
This commit is contained in:
parent
287b6b396d
commit
d6ddc5ff88
@ -65,7 +65,9 @@ class PublicController extends AbstractController
|
||||
}
|
||||
|
||||
/**
|
||||
* {post} 签到 - 路由器(openwrt)上报
|
||||
* {post} 签到 - 上报
|
||||
* - 1、路由器(openwrt)签到上报
|
||||
* - 2、考勤机签到上报
|
||||
*
|
||||
* @apiParam {String} key
|
||||
* @apiParam {String} mac 使用逗号分割多个
|
||||
@ -84,6 +86,7 @@ class PublicController extends AbstractController
|
||||
if ($setting['open'] !== 'open') {
|
||||
return 'function off';
|
||||
}
|
||||
$alreadyTip = false;
|
||||
if ($type === 'face') {
|
||||
if (!in_array('face', $setting['modes'])) {
|
||||
return 'mode off';
|
||||
@ -91,6 +94,7 @@ class PublicController extends AbstractController
|
||||
if ($key != $setting['face_key']) {
|
||||
return 'key error';
|
||||
}
|
||||
$alreadyTip = $setting['face_retip'] === 'open';
|
||||
} else {
|
||||
if (!in_array('auto', $setting['modes'])) {
|
||||
return 'mode off';
|
||||
@ -99,8 +103,7 @@ class PublicController extends AbstractController
|
||||
return 'key error';
|
||||
}
|
||||
}
|
||||
|
||||
if ($error = UserBot::checkinBotCheckin($mac, $time)) {
|
||||
if ($error = UserBot::checkinBotCheckin($mac, $time, $alreadyTip)) {
|
||||
return $error;
|
||||
}
|
||||
return 'success';
|
||||
|
||||
@ -399,7 +399,10 @@ class SystemController extends AbstractController
|
||||
'remindin',
|
||||
'remindexceed',
|
||||
'edit',
|
||||
'faceupload',
|
||||
'face_upload',
|
||||
'face_remark',
|
||||
'face_retip',
|
||||
'manual_remark',
|
||||
'modes',
|
||||
'key',
|
||||
])) {
|
||||
@ -433,7 +436,10 @@ class SystemController extends AbstractController
|
||||
}
|
||||
//
|
||||
$setting['open'] = $setting['open'] ?: 'close';
|
||||
$setting['faceupload'] = $setting['faceupload'] ?: 'close';
|
||||
$setting['face_upload'] = $setting['face_upload'] ?: 'close';
|
||||
$setting['face_remark'] = $setting['face_remark'] ?: Doo::translate('考勤机');
|
||||
$setting['face_retip'] = $setting['face_retip'] ?: 'open';
|
||||
$setting['manual_remark'] = $setting['manual_remark'] ?: Doo::translate('手动签到');
|
||||
$setting['time'] = $setting['time'] ? Base::json2array($setting['time']) : ['09:00', '18:00'];
|
||||
$setting['advance'] = intval($setting['advance']) ?: 120;
|
||||
$setting['delay'] = intval($setting['delay']) ?: 120;
|
||||
|
||||
@ -1680,7 +1680,11 @@ class UsersController extends AbstractController
|
||||
* @apiGroup users
|
||||
* @apiName checkin__save
|
||||
*
|
||||
* @apiParam {Array} list 优先级数据,格式:[{mac,remark}]
|
||||
* @apiParam {String} type 类型
|
||||
* - face: 人脸识别设置
|
||||
* - mac: MAC设置
|
||||
* @apiParam {String} faceimg 人脸图片地址
|
||||
* @apiParam {Array} list 优先级数据,格式:[{mac,remark}]
|
||||
*
|
||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||
@ -1694,52 +1698,52 @@ class UsersController extends AbstractController
|
||||
if ($setting['open'] !== 'open') {
|
||||
return Base::retError('此功能未开启,请联系管理员开启');
|
||||
}
|
||||
if ($setting['edit'] !== 'open' && $setting['faceupload'] !== 'open') {
|
||||
return Base::retError('未开放修改权限,请联系管理员');
|
||||
}
|
||||
//
|
||||
$type = Request::input('type');
|
||||
$list = Request::input('list');
|
||||
$faceimg = Request::input('faceimg');
|
||||
// 默认返回值,使用用户传递数据
|
||||
//
|
||||
$data = [
|
||||
'list' => $list,
|
||||
'faceimg' => $faceimg
|
||||
];
|
||||
// 当mac允许修改
|
||||
if ($setting['edit' === 'open']) {
|
||||
$array = [];
|
||||
if (empty($list) || !is_array($list)) {
|
||||
return Base::retError('参数错误');
|
||||
}
|
||||
foreach ($list AS $item) {
|
||||
$item = Base::newTrim($item);
|
||||
if (Base::isMac($item['mac'])) {
|
||||
$mac = strtoupper($item['mac']);
|
||||
$array[$mac] = [
|
||||
'mac' => $mac,
|
||||
'remark' => substr($item['remark'], 0, 50),
|
||||
];
|
||||
switch ($type) {
|
||||
case 'face':
|
||||
if ($setting['face_upload'] !== 'open') {
|
||||
return Base::retError('未开放修改权限,请联系管理员');
|
||||
}
|
||||
}
|
||||
if (count($array) > 3) {
|
||||
return Base::retError('最多只能添加3个MAC地址');
|
||||
}
|
||||
$saveMacRes = UserCheckinMac::saveMac($user->userid, $array);
|
||||
$data['list'] = $saveMacRes['data'];
|
||||
} else {
|
||||
$list = UserCheckinMac::whereUserid($user->userid)->orderBy('id')->get();
|
||||
$data['list'] = $list;
|
||||
UserCheckinFace::saveFace($user->userid, $user->nickname(), $faceimg, "用户上传");
|
||||
break;
|
||||
|
||||
case 'mac':
|
||||
if ($setting['edit'] !== 'open') {
|
||||
return Base::retError('未开放修改权限,请联系管理员');
|
||||
}
|
||||
$array = [];
|
||||
if (empty($list) || !is_array($list)) {
|
||||
return Base::retError('参数错误');
|
||||
}
|
||||
foreach ($list as $item) {
|
||||
$item = Base::newTrim($item);
|
||||
if (Base::isMac($item['mac'])) {
|
||||
$mac = strtoupper($item['mac']);
|
||||
$array[$mac] = [
|
||||
'mac' => $mac,
|
||||
'remark' => substr($item['remark'], 0, 50),
|
||||
];
|
||||
}
|
||||
}
|
||||
if (count($array) > 3) {
|
||||
return Base::retError('最多只能添加3个MAC地址');
|
||||
}
|
||||
$saveMacRes = UserCheckinMac::saveMac($user->userid, $array);
|
||||
$data['list'] = $saveMacRes['data'];
|
||||
break;
|
||||
|
||||
default:
|
||||
return Base::retError('参数错误');
|
||||
}
|
||||
|
||||
|
||||
// 当图片允许修改
|
||||
if ($setting['faceupload'] === 'open') {
|
||||
UserCheckinFace::saveFace($user->userid, $user->nickname(), $faceimg, "用户上传");
|
||||
} else {
|
||||
$userface = UserCheckinFace::whereUserid($user->userid)->first();
|
||||
$data['faceimg'] = $userface;
|
||||
}
|
||||
|
||||
//
|
||||
return Base::retSuccess('修改成功', $data);
|
||||
}
|
||||
|
||||
|
||||
@ -231,7 +231,7 @@ class UserBot extends AbstractModel
|
||||
];
|
||||
$checkins[] = [
|
||||
'userid' => $UserInfo->userid,
|
||||
'remark' => '手动签到',
|
||||
'remark' => $setting['manual_remark'] ?: 'Manual',
|
||||
];
|
||||
}
|
||||
} elseif (Base::leftExists($mac, "checkin-", true)) {
|
||||
@ -244,7 +244,7 @@ class UserBot extends AbstractModel
|
||||
];
|
||||
$checkins[] = [
|
||||
'userid' => $UserInfo->userid,
|
||||
'remark' => '考勤机',
|
||||
'remark' => $setting['face_remark'] ?: 'Machine',
|
||||
];
|
||||
}
|
||||
}
|
||||
@ -278,6 +278,7 @@ class UserBot extends AbstractModel
|
||||
if (Cache::get($cacheKey) === "yes") {
|
||||
if ($alreadyTip && $dialog = WebSocketDialog::checkUserDialog($botUser, $checkin['userid'])) {
|
||||
$text = "今日已{$typeContent}打卡,无需重复打卡。";
|
||||
$text .= $checkin['remark'] ? " ({$checkin['remark']})": "";
|
||||
WebSocketDialogMsg::sendMsg(null, $dialog->id, 'template', [
|
||||
'type' => 'content',
|
||||
'content' => $text,
|
||||
|
||||
@ -1147,7 +1147,7 @@ export default {
|
||||
type: data.type,
|
||||
userid: data.userid,
|
||||
nickname: data.nickname,
|
||||
checkin_face: data.faceimg[0] ? data.faceimg[0].url : ''
|
||||
checkin_face: $A.arrayLength(data.faceimg) > 0 ? data.faceimg[0].url : ''
|
||||
}
|
||||
} else if (data.type == 'department') {
|
||||
this.departmentEditLoading++;
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
<Divider orientation="left">{{ $L('签到设置') }}</Divider>
|
||||
<div class="setting-checkin-row">
|
||||
<Tabs v-model="checkinTabs" style="margin: 0;">
|
||||
<TabPane :label="$L('人脸签到')" name="receive">
|
||||
<TabPane :label="$L('人脸签到')" name="face">
|
||||
<Row class="setting-template">
|
||||
<Col span="24">{{ $L('人脸图片') }}</Col>
|
||||
</Row>
|
||||
@ -84,14 +84,13 @@ export default {
|
||||
loadIng: 0,
|
||||
|
||||
formData: [],
|
||||
|
||||
faceimgs: [],
|
||||
|
||||
nullDatum: {
|
||||
'mac': '',
|
||||
'remark': '',
|
||||
},
|
||||
checkinTabs: "receive",
|
||||
checkinTabs: "face",
|
||||
|
||||
latelyLoad: 0,
|
||||
latelyData: [],
|
||||
@ -144,12 +143,16 @@ export default {
|
||||
remark: item.remark.trim()
|
||||
}
|
||||
});
|
||||
const faceimg = this.faceimgs ? this.faceimgs[0].url : ''
|
||||
const faceimg = $A.arrayLength(this.faceimgs) > 0 ? this.faceimgs[0].url : ''
|
||||
//
|
||||
this.loadIng++;
|
||||
this.$store.dispatch("call", {
|
||||
url: 'users/checkin/save',
|
||||
data: {list, faceimg},
|
||||
data: {
|
||||
type: this.checkinTabs,
|
||||
list,
|
||||
faceimg,
|
||||
},
|
||||
method: 'post',
|
||||
}).then(({data}) => {
|
||||
this.formData = data.list;
|
||||
|
||||
@ -56,7 +56,7 @@
|
||||
</Form>
|
||||
</FormItem>
|
||||
<FormItem :label="$L('允许修改')" prop="edit">
|
||||
<RadioGroup v-model="formData.faceupload">
|
||||
<RadioGroup v-model="formData.face_upload">
|
||||
<Radio label="open">{{ $L('允许') }}</Radio>
|
||||
<Radio label="close">{{ $L('禁止') }}</Radio>
|
||||
</RadioGroup>
|
||||
@ -69,13 +69,13 @@
|
||||
</FormItem>
|
||||
<FormItem :label="$L('签到方式')" prop="modes">
|
||||
<CheckboxGroup v-model="formData.modes">
|
||||
<Checkbox label="auto">{{$L('WiFi签到')}}</Checkbox>
|
||||
<Checkbox label="face">{{$L('人脸签到')}}</Checkbox>
|
||||
<Checkbox label="auto">{{$L('WiFi签到')}}</Checkbox>
|
||||
<Checkbox label="manual">{{$L('手动签到')}}</Checkbox>
|
||||
<Checkbox v-if="false" label="location">{{$L('定位签到')}}</Checkbox>
|
||||
</CheckboxGroup>
|
||||
<div v-if="formData.modes.includes('auto')" class="form-tip">{{$L('WiFi签到')}}: {{$L('详情看下文安装说明')}}</div>
|
||||
<div v-if="formData.modes.includes('face')" class="form-tip">{{$L('人脸签到')}}: {{$L('通过人脸识别机签到')}}</div>
|
||||
<div v-if="formData.modes.includes('auto')" class="form-tip">{{$L('WiFi签到')}}: {{$L('详情看下文安装说明')}}</div>
|
||||
<div v-if="formData.modes.includes('manual')" class="form-tip">{{$L('手动签到')}}: {{$L('通过在签到打卡机器人发送指令签到')}}</div>
|
||||
<div v-if="formData.modes.includes('location')" class="form-tip">{{$L('定位签到')}}: {{$L('通过在签到打卡机器人发送位置签到')}}</div>
|
||||
</FormItem>
|
||||
@ -83,21 +83,51 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<template v-if="formData.open === 'open' && formData.modes.includes('auto')">
|
||||
<div class="block-setting-space"></div>
|
||||
<div class="block-setting-box">
|
||||
<h3>{{ $L('WiFi签到') }}</h3>
|
||||
<div class="form-box">
|
||||
<FormItem :label="$L('安装说明')" prop="explain">
|
||||
<p>1. {{ $L('WiFi签到延迟时长为±1分钟。') }}</p>
|
||||
<p>2. {{ $L('设备连接上指定路由器(WiFi)后自动签到。') }}</p>
|
||||
<p>3. {{ $L('仅支持Openwrt系统的路由器。') }}</p>
|
||||
<p>4. {{ $L('关闭签到功能再开启需要重新安装。') }}</p>
|
||||
<p>5. {{ $L('进入路由器终端执行以下命令即可完成安装') }}:</p>
|
||||
<Input ref="cmd" @on-focus="clickCmd" style="margin-top:6px" type="textarea" readonly :value="formData.cmd"/>
|
||||
</FormItem>
|
||||
<template v-if="formData.open === 'open'">
|
||||
<template v-if="formData.modes.includes('face')">
|
||||
<div class="block-setting-space"></div>
|
||||
<div class="block-setting-box">
|
||||
<h3>{{ $L('人脸签到') }}</h3>
|
||||
<div class="form-box">
|
||||
<FormItem :label="$L('签到备注')" prop="face_remark">
|
||||
<Input :maxlength="30" v-model="formData.face_remark"/>
|
||||
</FormItem>
|
||||
<FormItem :label="$L('重复打卡提醒')" prop="face_retip">
|
||||
<RadioGroup v-model="formData.face_retip">
|
||||
<Radio label="open">{{ $L('开启') }}</Radio>
|
||||
<Radio label="close">{{ $L('关闭') }}</Radio>
|
||||
</RadioGroup>
|
||||
</FormItem>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="formData.modes.includes('auto')">
|
||||
<div class="block-setting-space"></div>
|
||||
<div class="block-setting-box">
|
||||
<h3>{{ $L('WiFi签到') }}</h3>
|
||||
<div class="form-box">
|
||||
<FormItem :label="$L('安装说明')" prop="explain">
|
||||
<p>1. {{ $L('WiFi签到延迟时长为±1分钟。') }}</p>
|
||||
<p>2. {{ $L('设备连接上指定路由器(WiFi)后自动签到。') }}</p>
|
||||
<p>3. {{ $L('仅支持Openwrt系统的路由器。') }}</p>
|
||||
<p>4. {{ $L('关闭签到功能再开启需要重新安装。') }}</p>
|
||||
<p>5. {{ $L('进入路由器终端执行以下命令即可完成安装') }}:</p>
|
||||
<Input ref="cmd" @on-focus="clickCmd" style="margin-top:6px" type="textarea" readonly :value="formData.cmd"/>
|
||||
</FormItem>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="formData.modes.includes('manual')">
|
||||
<div class="block-setting-space"></div>
|
||||
<div class="block-setting-box">
|
||||
<h3>{{ $L('手动签到') }}</h3>
|
||||
<div class="form-box">
|
||||
<FormItem :label="$L('签到备注')" prop="manual_remark">
|
||||
<Input :maxlength="30" v-model="formData.manual_remark"/>
|
||||
</FormItem>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</template>
|
||||
</Form>
|
||||
<div class="setting-footer">
|
||||
@ -132,10 +162,13 @@ export default {
|
||||
|
||||
formData: {
|
||||
open: '',
|
||||
faceupload: '',
|
||||
edit: '',
|
||||
cmd: '',
|
||||
modes: [],
|
||||
face_upload: '',
|
||||
face_remark: '',
|
||||
face_retip: '',
|
||||
manual_remark: '',
|
||||
},
|
||||
ruleData: {},
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user