Skip to content

Commit c97dd57

Browse files
committed
feat: revision date and hash
1 parent be3618f commit c97dd57

File tree

3 files changed

+116
-2
lines changed

3 files changed

+116
-2
lines changed

src/App.vue

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<InsiderBanner />
88
</div>
99
<div>
10-
<ActivityBanner :Enable="true">
10+
<ActivityBanner :Enable="false">
1111
OhMyGPA 论坛试运营! 访问 <a
1212
href="https://ohmygpa.icu/"
1313
target="_blank"
@@ -18,6 +18,7 @@
1818
</div>
1919

2020
<router-view :key="$route.path" class="mt-15 sm:mt-0" />
21+
<Footer />
2122
<v-snackbar
2223
v-model="snackbar.show"
2324
:color="snackbar.color"
@@ -40,6 +41,7 @@
4041
import Header from '@/components/global/Header';
4142
import InsiderBanner from '@/components/global/InsiderBanner';
4243
import ActivityBanner from '@/components/global/ActivityBanner';
44+
import Footer from '@/components/global/Footer';
4345
import useSnackbar from '@/composables/global/useSnackbar';
4446
import { getPreset } from '@/composables/global/useCookie';
4547
import { provide, reactive } from 'vue';
@@ -48,7 +50,7 @@ import MenuSideBar from '@/components/global/MenuSideBar.vue';
4850
4951
export default {
5052
name: 'App',
51-
components: { Header, InsiderBanner, ActivityBanner, MenuSideBar },
53+
components: { Header, InsiderBanner, ActivityBanner, MenuSideBar, Footer },
5254
setup() {
5355
const { snackbar } = useSnackbar();
5456
const global = reactive({

src/components/global/Footer.vue

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
<template>
2+
<footer class="footer-container">
3+
<v-divider></v-divider>
4+
<div class="footer-content pt-5">
5+
<div class="footer-text">
6+
<span class="copyright">
7+
&copy; {{ currentYear }} CourseBench. All rights reserved.
8+
</span>
9+
<span class="version-info">
10+
v{{ version }}
11+
<span v-if="buildHash" class="build-hash">
12+
(Build: {{ buildHash }})
13+
</span>
14+
<span v-if="buildDate" class="build-date">
15+
Last build at: {{ buildDate }}
16+
</span>
17+
</span>
18+
</div>
19+
</div>
20+
</footer>
21+
</template>
22+
23+
<script>
24+
export default {
25+
name: 'Footer',
26+
setup() {
27+
const currentYear = new Date().getFullYear();
28+
const version = process.env.VUE_APP_VERSION || '0.1.0';
29+
const buildHash = process.env.VUE_APP_BUILD_HASH || '';
30+
const buildDate = process.env.VUE_APP_BUILD_DATE || '';
31+
32+
return {
33+
currentYear,
34+
version,
35+
buildHash,
36+
buildDate,
37+
};
38+
},
39+
};
40+
</script>
41+
42+
<style scoped>
43+
.footer-container {
44+
padding: 30px 20px;
45+
background-color: #f8f8f9;
46+
text-align: center;
47+
}
48+
49+
.footer-content {
50+
max-width: 1200px;
51+
margin: 0 auto;
52+
}
53+
54+
.footer-text {
55+
display: flex;
56+
flex-direction: column;
57+
gap: 8px;
58+
font-size: 0.875rem;
59+
color: rgba(0, 0, 0, 0.6);
60+
}
61+
62+
.copyright {
63+
font-weight: 500;
64+
}
65+
66+
.version-info {
67+
font-size: 0.8125rem;
68+
color: rgba(0, 0, 0, 0.5);
69+
}
70+
71+
.build-hash {
72+
font-family: monospace;
73+
margin-left: 4px;
74+
}
75+
76+
.build-date {
77+
margin-left: 8px;
78+
}
79+
80+
/* Dark mode support */
81+
@media (prefers-color-scheme: dark) {
82+
.footer-container {
83+
background-color: #222222;
84+
}
85+
86+
.footer-text {
87+
color: rgba(255, 255, 255, 0.7);
88+
}
89+
90+
.version-info {
91+
color: rgba(255, 255, 255, 0.5);
92+
}
93+
}
94+
</style>

vue.config.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,24 @@ const productionGzipExtensions = /\.(js|css|json|md|html|ico)(\?.*)?$/i;
33
const path = require('path');
44
const process = require('process');
55
const fs = require('fs');
6+
const { execSync } = require('child_process');
7+
const packageJson = require('./package.json');
8+
9+
// Generate build hash (first 8 characters of git commit hash)
10+
let buildHash = '';
11+
try {
12+
buildHash = execSync('git rev-parse --short HEAD', { encoding: 'utf-8' }).trim().substring(0, 8);
13+
} catch (e) {
14+
buildHash = 'unknown';
15+
}
16+
17+
// Generate build date
18+
const buildDate = new Date().toISOString().split('T')[0];
19+
20+
// Set environment variables
21+
process.env.VUE_APP_VERSION = packageJson.version;
22+
process.env.VUE_APP_BUILD_HASH = buildHash;
23+
process.env.VUE_APP_BUILD_DATE = buildDate;
624

725
module.exports = {
826
productionSourceMap: false,

0 commit comments

Comments
 (0)