Răsfoiți Sursa

删除不必要的文件

移除了`docs/assets.index.6eb9cc5c.js`文件,因为它已不再需要。

Signed-off-by: 宋子桓🌈 <songzihuan@song-zh.com>
SongZihuan 1 lună în urmă
părinte
comite
8c7637262f

Fișier diff suprimat deoarece este prea mare
+ 0 - 0
docs/assets.index.00f23160.js


Fișier diff suprimat deoarece este prea mare
+ 0 - 0
docs/assets.index.62b3175c.js


Fișier diff suprimat deoarece este prea mare
+ 0 - 0
docs/assets.index.66e3c020.css


Fișier diff suprimat deoarece este prea mare
+ 0 - 0
docs/assets.index.9ee4db60.css


Fișier diff suprimat deoarece este prea mare
+ 0 - 0
docs/assets.index.a4137c4c.js


Fișier diff suprimat deoarece este prea mare
+ 0 - 0
docs/assets.message.3958c8ff.js


Fișier diff suprimat deoarece este prea mare
+ 0 - 0
docs/assets.message.935fe58c.css


+ 0 - 1
docs/assets.notfound.1b9324d3.js

@@ -1 +0,0 @@
-import{P as e}from"./assets.index.6eb9cc5c.js";import{X as s,v as t,x as a,A as o,Y as l,O as n,H as r,I as u,Z as i,_ as d}from"./assets.vue.33cd34e1.js";const p={},c=e=>(i("data-v-cf7e57e5"),e=e(),d(),e),h=c((()=>o("h1",null,"404",-1))),f=c((()=>o("h2",null,"Oops! The page you're looking for isn't here.",-1))),m=c((()=>o("p",null,"We can't seem to find the page you were trying to reach. This might be because of:",-1))),g=c((()=>o("ul",null,[o("li",null,"An outdated link"),o("li",null,"A mistyped address"),o("li",null,"Or the page has been moved")],-1)));const b=e(p,[["render",function(e,i){const d=s("router-link");return t(),a(u,null,[h,f,m,g,o("p",null,[l("Try going back to the "),n(d,{to:"/"},{default:r((()=>[l("homepage")])),_:1}),l(" or contact us if the problem persists.")])],64)}],["__scopeId","data-v-cf7e57e5"]]);export{b as default};

+ 1 - 0
docs/assets.notfound.25162a26.js

@@ -0,0 +1 @@
+import{P as e}from"./assets.index.00f23160.js";import{X as s,v as a,x as t,A as o,Y as n,O as l,H as r,I as u,Z as i,_ as h}from"./assets.vue.33cd34e1.js";const c={},d=e=>(i("data-v-13f7ab63"),e=e(),h(),e),p=d((()=>o("h1",null,"404",-1))),f=d((()=>o("h2",null,"Oops! The page you're looking for isn't here.",-1))),m=d((()=>o("p",null,"We can't seem to find the page you were trying to reach. This might be because of:",-1))),g=d((()=>o("ul",null,[o("li",null,"An outdated link"),o("li",null,"A mistyped address"),o("li",null,"Or the page has been moved")],-1))),b=d((()=>o("a",{href:"mailto://contact@song-zh.com"},"contact us",-1)));const v=e(c,[["render",function(e,i){const h=s("router-link");return a(),t(u,null,[p,f,m,g,o("p",null,[n(" Try going back to the "),l(h,{to:"/"},{default:r((()=>[n("homepage")])),_:1}),n(" or "),b,n(" if the problem persists. ")])],64)}],["__scopeId","data-v-13f7ab63"]]);export{v as default};

+ 1 - 0
docs/assets.notfound.45f5f700.css

@@ -0,0 +1 @@
+h1[data-v-13f7ab63]{font-size:7em;margin-bottom:.5em;color:#c00}h2[data-v-13f7ab63]{font-size:2em;color:#666}p[data-v-13f7ab63]{font-size:1.2em;color:#333}a[data-v-13f7ab63]{color:#007bff;text-decoration:none}a[data-v-13f7ab63]:hover{text-decoration:underline}

+ 0 - 1
docs/assets.notfound.a8758bb1.css

@@ -1 +0,0 @@
-h1[data-v-cf7e57e5]{font-size:7em;margin-bottom:.5em;color:#c00}h2[data-v-cf7e57e5]{font-size:2em;color:#666}p[data-v-cf7e57e5]{font-size:1.2em;color:#333}a[data-v-cf7e57e5]{color:#007bff;text-decoration:none}a[data-v-cf7e57e5]:hover{text-decoration:underline}

BIN
docs/assets.songzihuan.fa2b1fc5.png


Fișier diff suprimat deoarece este prea mare
+ 0 - 0
docs/assets.str.f48fda23.js


+ 1 - 1
docs/index.html

@@ -12,7 +12,7 @@
             overflow: auto;
         }
     </style>
-  <script type="module" crossorigin src="/assets.index.6eb9cc5c.js"></script>
+  <script type="module" crossorigin src="/assets.index.00f23160.js"></script>
   <link rel="modulepreload" crossorigin href="/assets.vue.33cd34e1.js">
   <link rel="stylesheet" href="/assets.index.1c341960.css">
 </head>

+ 2 - 0
package.json

@@ -34,12 +34,14 @@
     "normalize.css": "^8.0.1",
     "path": "^0.12.7",
     "pinia": "^2.0.35",
+    "spark-md5": "^3.0.2",
     "vant": "^4.2.0",
     "vite-svg-loader": "^4.0.0",
     "vue": "^3.2.47",
     "vue-router": "^4.1.6"
   },
   "devDependencies": {
+    "@types/spark-md5": "^3.0.5",
     "@typescript-eslint/eslint-plugin": "^5.59.0",
     "@typescript-eslint/parser": "^5.59.0",
     "@vitejs/plugin-vue": "^4.1.0",

+ 14 - 0
pnpm-lock.yaml

@@ -41,6 +41,9 @@ dependencies:
   pinia:
     specifier: ^2.0.35
     version: 2.0.35(typescript@4.9.5)(vue@3.2.47)
+  spark-md5:
+    specifier: ^3.0.2
+    version: 3.0.2
   vant:
     specifier: ^4.2.0
     version: 4.2.0(vue@3.2.47)
@@ -55,6 +58,9 @@ dependencies:
     version: 4.1.6(vue@3.2.47)
 
 devDependencies:
+  '@types/spark-md5':
+    specifier: ^3.0.5
+    version: 3.0.5
   '@typescript-eslint/eslint-plugin':
     specifier: ^5.59.0
     version: 5.59.0(@typescript-eslint/parser@5.59.0)(eslint@8.38.0)(typescript@4.9.5)
@@ -594,6 +600,10 @@ packages:
     resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
     dev: true
 
+  /@types/spark-md5@3.0.5:
+    resolution: {integrity: sha512-lWf05dnD42DLVKQJZrDHtWFidcLrHuip01CtnC2/S6AMhX4t9ZlEUj4iuRlAnts0PQk7KESOqKxeGE/b6sIPGg==}
+    dev: true
+
   /@types/web-bluetooth@0.0.16:
     resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
     dev: false
@@ -3181,6 +3191,10 @@ packages:
     resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
     deprecated: Please use @jridgewell/sourcemap-codec instead
 
+  /spark-md5@3.0.2:
+    resolution: {integrity: sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==}
+    dev: false
+
   /statuses@1.5.0:
     resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
     engines: {node: '>= 0.6'}

BIN
src/assets/images/songzihuan.jpg


BIN
src/assets/images/songzihuan.png


+ 1 - 1
src/utils/build_time.json

@@ -1 +1 @@
-{"compile_time":1739101836340,"time_zone":"Asia/Shanghai"}
+{"compile_time":1743091332776,"time_zone":"Asia/Shanghai"}

+ 74 - 27
src/views/index.vue

@@ -5,9 +5,11 @@
   import ToGithub from '@/components/togithub.vue'
   import { extractNumbersFromString } from '@/utils/str'
   import WangAnLogo from '@/assets/images/wangan.png'
-  import SongZihuan from '@/assets/images/songzihuan.jpg'
+  import SongZihuan from '@/assets/images/songzihuan.png'
   import ORCiD_ICON from '@/assets/images/ORCIDiD_icon16x16.png'
 
+  import SparkMD5 from 'spark-md5'
+
   const build_time = ref(formatDate(get_build_time()))
   const build_time_zone = ref(get_build_time_zone())
 
@@ -30,6 +32,17 @@
     currentTime.value = formatDate(new Date())
   }
 
+  const personalEmail = ref('contact@song-zh.com')
+  const personalEmailBackup = ref('contact@hmail.song-zh.com')
+
+  const emailHeader = computed(() => {
+    const emailHash = SparkMD5.hash(personalEmail.value.trim().toLowerCase())
+    return `https://www.gravatar.com/avatar/${emailHash}?s=200&d=identicon`
+  })
+
+  const imgLoadEmail = ref(0)
+  const imgLoadBackup = ref(false)
+
   // 使用onMounted钩子在组件挂载后开始定时更新时间
   onMounted(() => {
     updateTime()
@@ -52,60 +65,89 @@
 </script>
 
 <template>
+  <div v-show="false">
+    <el-image class="szh-img" :src="emailHeader" @load="imgLoadEmail = 1" @error="imgLoadEmail = 2"></el-image>
+    <el-image class="szh-img" :src="SongZihuan" @load="imgLoadBackup = true"></el-image>
+  </div>
   <div v-if="show" class="outside_box">
     <div class="inner_box">
       <div class="title_a">
-        Hello, 我是
-        <el-tooltip effect="dark" placement="bottom" :hide-after="3000">
+        Hello,我是
+        <el-tooltip
+          v-if="imgLoadEmail == 1 || (imgLoadEmail == 2 && imgLoadBackup)"
+          effect="dark"
+          placement="bottom"
+          :hide-after="3000"
+        >
           宋子桓🌈
           <template #content>
             <div style="display: flex; justify-content: center">
               <div>
-                <div style="margin-top: 10px">
-                  <el-text class="no-wrap" style="color: white; font-size: 1.5rem"> Song Zihuan </el-text>
-                </div>
                 <div style="display: flex; justify-content: center; width: 100%; margin-top: 10px; text-align: center">
                   <div class="szh-img-box">
-                    <el-image class="szh-img" :src="SongZihuan"> </el-image>
+                    <el-image class="szh-img" :src="imgLoadEmail == 1 ? emailHeader : SongZihuan"></el-image>
                   </div>
                 </div>
               </div>
             </div>
           </template>
         </el-tooltip>
+        <span v-else> 宋子桓🌈 </span>
       </div>
 
       <el-divider direction="horizontal" class="divider_horizontal"></el-divider>
 
       <div>
         <p class="text more_line_text">
-          <span class="no-wrap">Hello,我是宋子桓(Song Zihuan)。</span>
-          <span class="bold_span">我是一名出生于2004年6月的码农。</span>
+          <span class="no-wrap">大家好,我是宋子桓,字桓枢,号云楩散人!</span>
           <br />
 
-          <span
-            >曾就职于广州桓创信息科技有限公司,时任技术总监和总经理。您可以称呼我为
-            <span class="no-wrap"> 子桓 </span> 或 <span class="no-wrap"> 桓总 </span>;亦或是我的英文名
+          <span class="no-warp">
+            在英语语境下,一般采用
             <el-tooltip effect="dark" placement="bottom">
               <span class="no-wrap"> Song Zihuan </span>
               <template #content>
                 <el-text style="color: white"> 为了强调个性和地域特征,我的英文名一般将姓氏(Song)放在首位。 </el-text>
               </template>
             </el-tooltip>
-
-            或者
-
+            作为我的英文名,在特殊场合下可能采用
             <el-tooltip effect="dark" placement="bottom">
-              <span class="no-wrap"> Cr. Huan </span>
+              <span class="no-wrap"> Zihuan Song </span>
               <template #content>
-                <el-text style="color: white">
-                  Cr.和Dr.类似,都是一种缩写。在此,Cr.是Coder的缩写,不过这不是一个常见且标准的缩写。
-                </el-text>
+                <el-text style="color: white"> 正常英文语境下,一般将姓氏(Song)放在后面。 </el-text>
               </template>
             </el-tooltip>
+            。
+          </span>
 
-            。</span
-          >
+          <br />
+          <span class="bold_span">我是一名出生于2004年6月的码农。</span>
+          <br />
+
+          您可以称呼我为
+          <span class="no-wrap"> 子桓 </span>
+          或
+          <span class="no-wrap"> 小桓 </span>
+          ;亦或是我的英文名
+          <span class="no-wrap"> Huan </span>
+          或者
+          <el-tooltip effect="dark" placement="bottom">
+            <span class="no-wrap"> Cr. Huan </span>
+            <template #content>
+              <el-text style="color: white">
+                Cr.和Dr.类似,都是一种缩写。在此,Cr.是Coder的缩写,不过这不是一个常见且标准的缩写。
+              </el-text>
+            </template>
+          </el-tooltip>
+          。
+          <br />
+
+          曾就职于广州桓创信息科技有限公司,时任技术总监和总经理。我个人在习惯上比较喜欢他人称呼我为
+          <span class="no-wrap"> 桓工 </span>
+          或
+          <span class="no-wrap"> 换总监 </span>
+          亦或是
+          <span class="no-wrap"> 桓经理 </span>
           <br />
 
           我主要活跃于<span class="bold_span">中国广州地区</span>,但我通常以互联网身份参与活动。
@@ -116,7 +158,16 @@
           <br />
 
           您可以通过我主页的个人公开邮箱
-          <a href="mailto://contact@song-zh.com" target="_blank">contact@song-zh.com</a> 联系我。
+          <el-tooltip effect="dark" placement="bottom">
+            <a href="mailto://{{ personalEmail }}" target="_blank">{{ personalEmail }}</a> 联系我。
+            <template #content>
+              <el-text style="color: white">
+                或者备用邮箱:<a style="color: white" href="mailto://{{ personalEmailBackup }}" target="_blank">{{
+                  personalEmailBackup
+                }}</a>
+              </el-text>
+            </template>
+          </el-tooltip>
           <br />
 
           您可以通过我主页的
@@ -131,7 +182,7 @@
           <a href="https://github.com/SongZihuan" target="_blank"> github.com/SongZihuan </a>。
           <br />
 
-          还要,我的个人Git仓库拖货站点:
+          还有,我的个人Git仓库站点:
           <a href="https://code-git.song-zh.com" target="_blank"> code-git.song-zh.com </a>。
           <br />
 
@@ -663,8 +714,4 @@
   .szh-img-box {
     max-width: calc(min(90vw, 170px));
   }
-
-  .szh-img {
-    border-radius: 20px;
-  }
 </style>

+ 17 - 13
src/views/message.vue

@@ -13,12 +13,15 @@
     message: ''
   })
 
-  const checkMessage = computed(() => form.value.message.length >= 1 && form.value.message.length <= 150)
+  const checkMessageShort = computed(() => form.value.message.length >= 1)
+  const checkMessageLong = computed(() => form.value.message.length <= 50000)
   const checkName = computed(() => form.value.name.length <= 25)
   const checkEmail = computed(
     () => form.value.email == '' || (form.value.email.length < 40 && isEmail(form.value.email))
   )
-  const checkAll = computed(() => checkMessage.value && checkName.value && checkEmail.value)
+  const checkAll = computed(
+    () => checkMessageShort.value && checkMessageLong.value && checkName.value && checkEmail.value
+  )
 
   function handleWindowResize() {
     show.value = window.innerWidth >= 240
@@ -79,15 +82,7 @@
             </el-form-item>
 
             <el-form-item label="你的留言(Your message)">
-              <el-input
-                v-model="form.message"
-                type="textarea"
-                :minlength="1"
-                :maxlength="150"
-                :rows="10"
-                clearable
-                show-word-limit
-              />
+              <el-input v-model="form.message" type="textarea" :minlength="1" :rows="10" clearable show-word-limit />
             </el-form-item>
           </el-form>
           <div class="center_btn_box">
@@ -114,10 +109,19 @@
                 >
                 </el-alert>
               </div>
-              <div v-if="!checkMessage" class="tip_box" style="display: flex; justify-content: center">
-                <el-alert title="消息的长度要在1-150个字符!" :closable="false" type="warning" center show-icon>
+              <div v-if="!checkMessageLong" class="tip_box" style="display: flex; justify-content: center">
+                <el-alert
+                  title="消息的长度太长,可采用邮件形式发送!"
+                  :closable="false"
+                  type="warning"
+                  center
+                  show-icon
+                >
                 </el-alert>
               </div>
+              <div v-if="!checkMessageShort" class="tip_box" style="display: flex; justify-content: center">
+                <el-alert title="消息不能为空!" :closable="false" type="warning" center show-icon> </el-alert>
+              </div>
             </div>
           </div>
         </el-card>

+ 4 - 1
src/views/notfound.vue

@@ -9,7 +9,10 @@
     <li>A mistyped address</li>
     <li>Or the page has been moved</li>
   </ul>
-  <p>Try going back to the <router-link to="/">homepage</router-link> or contact us if the problem persists.</p>
+  <p>
+    Try going back to the <router-link to="/">homepage</router-link> or
+    <a href="mailto://contact@song-zh.com">contact us</a> if the problem persists.
+  </p>
 </template>
 
 <style scoped lang="scss">

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff