Skip to content

Commit ab424e0

Browse files
committed
feat: for checking visitors whether human or not
1 parent ad56307 commit ab424e0

File tree

3 files changed

+118
-5
lines changed

3 files changed

+118
-5
lines changed

package-lock.json

Lines changed: 39 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111
"dependencies": {
1212
"autoprefixer": "^10",
1313
"core-js": "^3.8.3",
14+
"dayjs": "^1.11.12",
1415
"postcss": "^8",
1516
"tailwindcss": "^3",
17+
"ua-parser-js": "^1.0.38",
1618
"vue": "^2.6.14",
1719
"vue-router": "^3.5.1"
1820
},

src/views/AdminJoinView.vue

Lines changed: 77 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,46 @@
2525
<p v-show="status" class="mt-2 text-red-600">{{ status }}</p>
2626
</div>
2727
<div v-show="application.code" class="max-w-md mx-3 my-5 py-4 px-8 bg-white shadow-lg rounded-lg">
28-
<h2 class="text-gray-800 text-3xl font-semibold">
28+
<h2 class="text-gray-800 text-3xl font-semibold mb-3">
2929
加入代碼:{{ application.code }}
3030
</h2>
3131
<p class="mt-2 text-gray-600">
32-
使用者代碼:{{ application.user_agent }}<br/>
33-
IP 位址:{{ application.ip_address }}<br/>
34-
申請時間:{{ new Date(application.created_at * 1000) }}
32+
<ul class="mb-3">
33+
<li>申請時間:{{ dateParsedCreatedAt }}</li>
34+
</ul>
35+
<ul class="mb-3">
36+
<li>IP 位址:{{ application.ip_address }}</li>
37+
<li>IP 地理資訊:
38+
<ul class="pl-3">
39+
<li>國家:{{ application.ip_geolocation.country }}</li>
40+
<li>城市:{{ application.ip_geolocation.city }}</li>
41+
<li>時區:{{ application.ip_geolocation.timezone }}</li>
42+
</ul>
43+
</li>
44+
</ul>
45+
<ul class="mb-3">
46+
<li>使用者裝置資訊:
47+
<ul class="pl-3">
48+
<li>作業系統:
49+
<ul class="pl-3">
50+
<li>名稱:{{ uaParsed.os.name }}</li>
51+
<li>版本:{{ uaParsed.os.version }}</li>
52+
</ul>
53+
</li>
54+
<li>瀏覽器:
55+
<ul class="pl-3">
56+
<li>名稱:{{ uaParsed.browser.name }}</li>
57+
<li>版本:{{ uaParsed.browser.version }}</li>
58+
<li>使用者代理:
59+
<p class="pl-3">
60+
<code>{{ uaParsed.ua }}</code>
61+
</p>
62+
</li>
63+
</ul>
64+
</li>
65+
</ul>
66+
</li>
67+
</ul>
3568
</p>
3669
<div v-if="!application.approval_by" class="flex justify-end mt-4">
3770
<button
@@ -46,14 +79,25 @@
4679
</button>
4780
</div>
4881
<p v-else class="mt-2 text-amber-600">
49-
已由 {{ application.approval_by }} 於 {{ new Date(application.approval_at * 1000) }} 許可
82+
已由 {{ application.approval_by }} 於 {{ dateParsedApprovalAt }} 許可
5083
</p>
5184
</div>
5285
</div>
5386
</div>
5487
</template>
5588

5689
<script>
90+
import uaParser from "ua-parser-js";
91+
92+
import dayjs from "dayjs";
93+
import dayjsUtc from "dayjs/plugin/utc";
94+
import dayjsTimezone from "dayjs/plugin/timezone";
95+
import dayjsLocalizedFormat from "dayjs/plugin/localizedFormat";
96+
97+
dayjs.extend(dayjsUtc);
98+
dayjs.extend(dayjsTimezone);
99+
dayjs.extend(dayjsLocalizedFormat);
100+
57101
export default {
58102
name: "AdminJoinView",
59103
data: () => ({
@@ -64,6 +108,10 @@ export default {
64108
application: {}
65109
}),
66110
methods: {
111+
dateToHuman(timestamp) {
112+
const userTimezone = dayjs.tz.guess();
113+
return dayjs.tz(timestamp, userTimezone).format("llll");
114+
},
67115
async submit() {
68116
this.status = '';
69117
if (!this.query) {
@@ -103,6 +151,30 @@ export default {
103151
}
104152
}
105153
},
154+
computed: {
155+
uaParsed() {
156+
const {
157+
user_agent: uaString,
158+
} = this.application;
159+
return uaParser(uaString);
160+
},
161+
dateParsedCreatedAt() {
162+
const {
163+
created_at: createdAt,
164+
} = this.application;
165+
return this.dateToHuman(
166+
createdAt * 1000,
167+
);
168+
},
169+
dateParsedApprovalAt() {
170+
const {
171+
approval_at: approvalAt,
172+
} = this.application;
173+
return this.dateToHuman(
174+
approvalAt * 1000,
175+
);
176+
},
177+
},
106178
async created() {
107179
this.profile = await this.$profile();
108180
if (!this.profile) {

0 commit comments

Comments
 (0)