meta 정리

This commit is contained in:
2025-06-11 10:43:32 +09:00
parent e500024154
commit 0c22584d39
5 changed files with 158 additions and 4 deletions
+8 -1
View File
@@ -4,7 +4,14 @@
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>LaneBow - 볼링 클럽 매니저</title>
<meta name="description" content="볼링 클럽 관리 프로그램으로 회원 관리, 경기 일정, 점수 기록, 통계 분석 등 클럽 운영을 쉽고 효율적으로 관리하세요.">
<meta name="keywords" content="볼링 클럽 매니저, 레인보우, 볼링클럽, 볼링동호회">
<meta property="og:title" content="LaneBow-레인보우">
<meta property="og:description" content="볼링 클럽 관리 프로그램으로 회원 관리, 경기 일정, 점수 기록, 통계 분석 등 클럽 운영을 쉽고 효율적으로 관리하세요.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://lanebow.com">
<meta property="og:image" content="/LaneBowLogo.png">
<title>LaneBow-레인보우</title>
</head>
<body>
<div id="app"></div>
+119
View File
@@ -18,6 +18,7 @@
"@tosspayments/payment-sdk": "^1.9.1",
"@vuelidate/core": "^2.0.3",
"@vuelidate/validators": "^2.0.4",
"@vueuse/head": "^2.0.0",
"axios": "^1.8.2",
"chart.js": "^4.4.8",
"dayjs": "^1.11.10",
@@ -1507,6 +1508,76 @@
"dev": true,
"license": "MIT"
},
"node_modules/@unhead/dom": {
"version": "1.11.20",
"resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.11.20.tgz",
"integrity": "sha512-jgfGYdOH+xHJF/j8gudjsYu3oIjFyXhCWcgKaw3vQnT616gSqyqnGQGOItL+BQtQZACKNISwIfx5PuOtztMKLA==",
"license": "MIT",
"dependencies": {
"@unhead/schema": "1.11.20",
"@unhead/shared": "1.11.20"
},
"funding": {
"url": "https://github.com/sponsors/harlan-zw"
}
},
"node_modules/@unhead/schema": {
"version": "1.11.20",
"resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.11.20.tgz",
"integrity": "sha512-0zWykKAaJdm+/Y7yi/Yds20PrUK7XabLe9c3IRcjnwYmSWY6z0Cr19VIs3ozCj8P+GhR+/TI2mwtGlueCEYouA==",
"license": "MIT",
"dependencies": {
"hookable": "^5.5.3",
"zhead": "^2.2.4"
},
"funding": {
"url": "https://github.com/sponsors/harlan-zw"
}
},
"node_modules/@unhead/shared": {
"version": "1.11.20",
"resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.11.20.tgz",
"integrity": "sha512-1MOrBkGgkUXS+sOKz/DBh4U20DNoITlJwpmvSInxEUNhghSNb56S0RnaHRq0iHkhrO/cDgz2zvfdlRpoPLGI3w==",
"license": "MIT",
"dependencies": {
"@unhead/schema": "1.11.20",
"packrup": "^0.1.2"
},
"funding": {
"url": "https://github.com/sponsors/harlan-zw"
}
},
"node_modules/@unhead/ssr": {
"version": "1.11.20",
"resolved": "https://registry.npmjs.org/@unhead/ssr/-/ssr-1.11.20.tgz",
"integrity": "sha512-j6ehzmdWGAvv0TEZyLE3WBnG1ULnsbKQcLqBDh3fvKS6b3xutcVZB7mjvrVE7ckSZt6WwOtG0ED3NJDS7IjzBA==",
"license": "MIT",
"dependencies": {
"@unhead/schema": "1.11.20",
"@unhead/shared": "1.11.20"
},
"funding": {
"url": "https://github.com/sponsors/harlan-zw"
}
},
"node_modules/@unhead/vue": {
"version": "1.11.20",
"resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.11.20.tgz",
"integrity": "sha512-sqQaLbwqY9TvLEGeq8Fd7+F2TIuV3nZ5ihVISHjWpAM3y7DwNWRU7NmT9+yYT+2/jw1Vjwdkv5/HvDnvCLrgmg==",
"license": "MIT",
"dependencies": {
"@unhead/schema": "1.11.20",
"@unhead/shared": "1.11.20",
"hookable": "^5.5.3",
"unhead": "1.11.20"
},
"funding": {
"url": "https://github.com/sponsors/harlan-zw"
},
"peerDependencies": {
"vue": ">=2.7 || >=3"
}
},
"node_modules/@vitejs/plugin-vue": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.3.tgz",
@@ -1829,6 +1900,21 @@
}
}
},
"node_modules/@vueuse/head": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@vueuse/head/-/head-2.0.0.tgz",
"integrity": "sha512-ykdOxTGs95xjD4WXE4na/umxZea2Itl0GWBILas+O4oqS7eXIods38INvk3XkJKjqMdWPcpCyLX/DioLQxU1KA==",
"license": "MIT",
"dependencies": {
"@unhead/dom": "^1.7.0",
"@unhead/schema": "^1.7.0",
"@unhead/ssr": "^1.7.0",
"@unhead/vue": "^1.7.0"
},
"peerDependencies": {
"vue": ">=2.7 || >=3"
}
},
"node_modules/adler-32": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz",
@@ -2901,6 +2987,15 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/packrup": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/packrup/-/packrup-0.1.2.tgz",
"integrity": "sha512-ZcKU7zrr5GlonoS9cxxrb5HVswGnyj6jQvwFBa6p5VFw7G71VAHcUKL5wyZSU/ECtPM/9gacWxy2KFQKt1gMNA==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/harlan-zw"
}
},
"node_modules/parse-ms": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz",
@@ -3342,6 +3437,21 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/unhead": {
"version": "1.11.20",
"resolved": "https://registry.npmjs.org/unhead/-/unhead-1.11.20.tgz",
"integrity": "sha512-3AsNQC0pjwlLqEYHLjtichGWankK8yqmocReITecmpB1H0aOabeESueyy+8X1gyJx4ftZVwo9hqQ4O3fPWffCA==",
"license": "MIT",
"dependencies": {
"@unhead/dom": "1.11.20",
"@unhead/schema": "1.11.20",
"@unhead/shared": "1.11.20",
"hookable": "^5.5.3"
},
"funding": {
"url": "https://github.com/sponsors/harlan-zw"
}
},
"node_modules/unicorn-magic": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
@@ -3792,6 +3902,15 @@
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/zhead": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/zhead/-/zhead-2.2.4.tgz",
"integrity": "sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/harlan-zw"
}
}
}
}
+1
View File
@@ -20,6 +20,7 @@
"@tosspayments/payment-sdk": "^1.9.1",
"@vuelidate/core": "^2.0.3",
"@vuelidate/validators": "^2.0.4",
"@vueuse/head": "^2.0.0",
"axios": "^1.8.2",
"chart.js": "^4.4.8",
"dayjs": "^1.11.10",
+3 -2
View File
@@ -59,10 +59,11 @@ import TabPanel from 'primevue/tabpanel';
import TabList from 'primevue/tablist';
import Tab from 'primevue/tab';
import {ko} from 'primelocale/js/ko.js';
import { createHead } from '@vueuse/head'
import AppHeader from './components/AppHeader.vue';
const app = createApp(App)
const head = createHead()
app.use(head)
// Register PrimeVue
app.use(PrimeVue, {
theme: {
+27 -1
View File
@@ -259,7 +259,7 @@ import MemberListCard from '@/components/public/MemberListCard.vue';
import JoinDialog from '@/components/public/JoinDialog.vue';
import dayjs from 'dayjs';
import PublicEventService from '@/services/PublicEventService';
import Panel from 'primevue/panel';
import { useHead } from '@vueuse/head';
const route = useRoute();
const publicHash = route.params.publicHash;
@@ -282,6 +282,32 @@ const isReady = computed(() => event.value.status === 'ready');
const isActive = computed(() => event.value.status === 'active');
const isFinished = computed(() => event.value.status === 'completed');
// description
const eventDescriptionText = computed(() => {
const e = event.value || {};
let summary = '';
if (e.startDate) {
summary += `[기간] ${formatDate(e.startDate)}`;
if (e.endDate) summary += ` ~ ${formatDate(e.endDate)}`;
summary += '.\n';
}
if (e.description) summary += `[이벤트 내용] ${e.description}`;
if (e.location) summary += `[장소] ${e.location}.\n`;
if (e.registrationDeadline) summary += `[신청마감] ${formatDate(e.registrationDeadline)}.\n`;
if (e.maxParticipants) summary += `[참가인원] ${e.maxParticipants}\n`;
return summary || '이벤트 정보가 없습니다.';
});
useHead({
meta: [
{ title: event.value.title },
{ property: 'og:title', content: event.value.title },
{ name: 'description', content: eventDescriptionText },
{ property: 'og:description', content: eventDescriptionText }
]
});
//
const isRegistrationClosed = computed(() => {
if (!event.value.registrationDeadline) return false;