From d5998efd915dceb9d3c45b25077c9ed3ebcf1a45 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Mon, 12 Dec 2022 20:08:24 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E6=9F=A5=E7=9C=8B=E6=88=91=E8=87=AA?= =?UTF-8?q?=E5=B7=B1=E7=9A=84=E7=AD=BE=E5=88=B0=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/UsersController.php | 49 +++ .../manage/components/CheckinCalendar.vue | 407 ++++++++++++++++++ .../js/pages/manage/setting/checkin.vue | 48 ++- resources/assets/sass/pages/page-setting.scss | 8 + 4 files changed, 511 insertions(+), 1 deletion(-) create mode 100644 resources/assets/js/pages/manage/components/CheckinCalendar.vue diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index 4585aca11..fc4eed49e 100755 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -8,6 +8,7 @@ use App\Models\Project; use App\Models\UmengAlias; use App\Models\User; use App\Models\UserCheckinMac; +use App\Models\UserCheckinRecord; use App\Models\UserDelete; use App\Models\UserDepartment; use App\Models\UserEmailVerification; @@ -1388,4 +1389,52 @@ class UsersController extends AbstractController // return UserCheckinMac::saveMac($user->userid, $array); } + + /** + * @api {get} api/users/checkin/list 22. 获取签到数据 + * + * @apiDescription 需要token身份 + * @apiVersion 1.0.0 + * @apiGroup users + * @apiName checkin__list + * + * @apiParam {String} ym 年-月(如:2020-01) + * + * @apiSuccess {Number} ret 返回状态码(1正确、0错误) + * @apiSuccess {String} msg 返回信息(错误描述) + * @apiSuccess {Object} data 返回数据 + */ + public function checkin__list() + { + $user = User::auth(); + // + $ym = trim(Request::input('ym')); + $start = Carbon::parse(date("Y-m-01 00:00:00", strtotime($ym))); + $end = (clone $start)->addMonth()->subSecond(); + // + $records = UserCheckinRecord::whereUserid($user->userid)->whereBetween('created_at', [$start, $end])->orderBy('id')->get(); + $array = []; + $startT = $start->timestamp; + $endT = $end->timestamp; + while ($startT < $endT) { + $between = [Carbon::createFromTimestamp($startT), Carbon::createFromTimestamp($startT + 86400)]; + $firstRecord = $records->whereBetween("created_at", $between)->first(); + $lastRecord = $records->whereBetween("created_at", $between)->last(); + $firstTimestamp = $firstRecord ? Carbon::parse($firstRecord->created_at)->toDateTimeString() : ''; + $lastTimestamp = $lastRecord ? Carbon::parse($lastRecord->created_at)->toDateTimeString() : ''; + if ($firstTimestamp) { + $data = [ + 'time' => $firstTimestamp, + 'all' => [$firstTimestamp], + ]; + if ($lastTimestamp) { + $data['all'][] = $lastTimestamp; + } + $array[] = $data; + } + $startT += 86400; + } + // + return Base::retSuccess('success', $array); + } } diff --git a/resources/assets/js/pages/manage/components/CheckinCalendar.vue b/resources/assets/js/pages/manage/components/CheckinCalendar.vue new file mode 100644 index 000000000..9efa07842 --- /dev/null +++ b/resources/assets/js/pages/manage/components/CheckinCalendar.vue @@ -0,0 +1,407 @@ + + + diff --git a/resources/assets/js/pages/manage/setting/checkin.vue b/resources/assets/js/pages/manage/setting/checkin.vue index e8993e7f3..294db13da 100644 --- a/resources/assets/js/pages/manage/setting/checkin.vue +++ b/resources/assets/js/pages/manage/setting/checkin.vue @@ -1,9 +1,10 @@ diff --git a/resources/assets/sass/pages/page-setting.scss b/resources/assets/sass/pages/page-setting.scss index dd87289c8..5cae287cc 100755 --- a/resources/assets/sass/pages/page-setting.scss +++ b/resources/assets/sass/pages/page-setting.scss @@ -163,6 +163,14 @@ line-height: 32px; margin-bottom: -10px; } + .setting-checkin-button { + margin-bottom: 18px; + cursor: pointer; + color: #2b85e4; + &:hover { + text-decoration: underline; + } + } &.submit { position: absolute; top: 0;