Hanye官网
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

about.vue 9.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. <template>
  2. <div>
  3. <div class="w-full h-[55px] sm:h-[72px]"></div>
  4. <ErrorBoundary :error="error">
  5. <div v-if="isLoading" class="flex justify-center py-12">
  6. <!-- 加载中 -->
  7. <div
  8. class="animate-spin h-8 w-8 border-4 border-blue-500 rounded-full border-t-transparent"
  9. ></div>
  10. </div>
  11. <div v-else>
  12. <!-- 面包屑导航 -->
  13. <div class="max-w-full mb-6 xl:px-2 lg:px-2 md:px-4 px-4 mt-6">
  14. <div class="max-w-screen-2xl mx-auto">
  15. <nuxt-link
  16. to="/"
  17. class="justify-start text-white/60 text-base font-normal hover:text-white transition-colors duration-300"
  18. >{{ $t("common.home") }}</nuxt-link
  19. >
  20. <span class="text-white/60 text-base font-normal px-2"> / </span>
  21. <span class="text-white text-base font-normal">{{
  22. $t("about.overview.title")
  23. }}</span>
  24. </div>
  25. </div>
  26. <!-- 顶部大标题 -->
  27. <div class="flex flex-col items-center justify-center px-2 mb-10">
  28. <h1
  29. class="text-white text-5xl font-bold mb-4 tracking-tight text-center"
  30. >
  31. {{ $t("about.companyInfo.name") }}
  32. </h1>
  33. <div
  34. class="text-stone-400 text-xl leading-relaxed text-center max-w-2xl break-words whitespace-pre-wrap"
  35. >
  36. {{ $t("about.companyInfo.description") }}
  37. </div>
  38. </div>
  39. <!-- 横向三栏分区卡片 -->
  40. <div
  41. class="w-full flex flex-col lg:flex-row gap-8 justify-center items-stretch max-w-screen-2xl mx-auto px-2 mb-20"
  42. >
  43. <!-- 公司信息卡片 -->
  44. <div
  45. class="flex-1 bg-zinc-900/95 backdrop-blur-sm rounded-xl p-8 border border-zinc-800/50 shadow-lg flex flex-col gap-6 min-w-[260px]"
  46. >
  47. <h2
  48. class="text-white text-2xl font-semibold mb-2 tracking-tight relative"
  49. >
  50. {{ $t("about.overview.companyInfo") }}
  51. <span
  52. class="absolute -bottom-2 left-0 w-12 h-1 bg-gradient-to-r from-blue-500 to-blue-300 rounded-full"
  53. ></span>
  54. </h2>
  55. <div class="flex flex-col gap-3">
  56. <div class="flex flex-col gap-1">
  57. <span class="text-stone-400 text-base">{{
  58. $t("about.overview.companyName")
  59. }}</span>
  60. <span class="text-white text-lg font-bold">{{
  61. $t("about.companyInfo.name")
  62. }}</span>
  63. </div>
  64. <div class="flex flex-col gap-1">
  65. <span class="text-stone-400 text-base">{{
  66. $t("about.overview.englishName")
  67. }}</span>
  68. <span class="text-white text-lg font-bold">{{
  69. $t("about.companyInfo.englishName")
  70. }}</span>
  71. </div>
  72. <div class="flex flex-col gap-1">
  73. <span class="text-stone-400 text-base">{{
  74. $t("about.overview.established")
  75. }}</span>
  76. <span class="text-white text-lg font-bold">{{
  77. $t("about.companyInfo.established")
  78. }}</span>
  79. </div>
  80. <div class="flex flex-col gap-1">
  81. <span class="text-stone-400 text-base">{{
  82. $t("about.overview.ceo")
  83. }}</span>
  84. <span class="text-white text-lg font-bold">{{
  85. $t("about.companyInfo.ceo")
  86. }}</span>
  87. </div>
  88. <div class="flex flex-col gap-1">
  89. <span class="text-stone-400 text-base">{{
  90. $t("about.overview.employees")
  91. }}</span>
  92. <span class="text-white text-lg font-bold">{{
  93. $t("about.companyInfo.employees")
  94. }}</span>
  95. </div>
  96. <div class="flex flex-col gap-1">
  97. <span class="text-stone-400 text-base">{{
  98. $t("about.overview.location")
  99. }}</span>
  100. <span class="text-white text-lg font-bold">{{
  101. $t("about.companyInfo.location")
  102. }}</span>
  103. </div>
  104. </div>
  105. </div>
  106. <!-- 经营理念卡片 -->
  107. <div
  108. class="flex-1 bg-zinc-900/95 backdrop-blur-sm rounded-xl p-8 border border-zinc-800/50 shadow-lg flex flex-col gap-6 min-w-[260px]"
  109. >
  110. <h2
  111. class="text-white text-2xl font-semibold mb-2 tracking-tight relative"
  112. >
  113. {{ $t("about.overview.philosophy") }}
  114. <span
  115. class="absolute -bottom-2 left-0 w-12 h-1 bg-gradient-to-r from-blue-500 to-blue-300 rounded-full"
  116. ></span>
  117. </h2>
  118. <div class="text-stone-400 text-lg leading-relaxed">
  119. {{ $t("about.companyInfo.philosophy") }}
  120. </div>
  121. </div>
  122. <!-- 联系方式卡片 -->
  123. <div
  124. class="flex-1 bg-zinc-900/95 backdrop-blur-sm rounded-xl p-8 border border-zinc-800/50 shadow-lg flex flex-col gap-6 min-w-[260px]"
  125. >
  126. <h2
  127. class="text-white text-2xl font-semibold mb-2 tracking-tight relative"
  128. >
  129. {{ $t("about.overview.contact") }}
  130. <span
  131. class="absolute -bottom-2 left-0 w-12 h-1 bg-gradient-to-r from-blue-500 to-blue-300 rounded-full"
  132. ></span>
  133. </h2>
  134. <div class="flex flex-col gap-3">
  135. <div class="flex flex-col gap-1">
  136. <span class="text-stone-400 text-base">{{
  137. $t("about.overview.email")
  138. }}</span>
  139. <a
  140. :href="'mailto:' + companyInfo.email"
  141. class="text-white text-lg font-bold hover:text-blue-400 transition-colors"
  142. >{{ companyInfo.email }}</a
  143. >
  144. </div>
  145. <div class="flex flex-col gap-1">
  146. <span class="text-stone-400 text-base">{{
  147. $t("about.overview.tel")
  148. }}</span>
  149. <a
  150. :href="'tel:' + companyInfo.tel.replace(/[^0-9]/g, '')"
  151. class="text-white text-lg font-bold hover:text-blue-400 transition-colors"
  152. >{{ companyInfo.tel }}</a
  153. >
  154. </div>
  155. <div class="flex flex-col gap-1">
  156. <span class="text-stone-400 text-base">{{
  157. $t("about.overview.fax")
  158. }}</span>
  159. <span class="text-white text-lg font-bold">{{
  160. companyInfo.fax
  161. }}</span>
  162. </div>
  163. <div class="flex flex-col gap-1">
  164. <span class="text-stone-400 text-base">{{
  165. $t("about.overview.businessHours")
  166. }}</span>
  167. <span class="text-white text-lg font-bold">{{
  168. $t("about.companyInfo.businessHours")
  169. }}</span>
  170. </div>
  171. </div>
  172. <div class="flex flex-col gap-1 mt-2">
  173. <span class="text-stone-400 text-base">{{
  174. $t("about.overview.businessActivities")
  175. }}</span>
  176. <div class="text-white text-base font-bold space-y-1">
  177. <p>
  178. {{ $t("about.companyInfo.businessActivities") }}
  179. </p>
  180. </div>
  181. </div>
  182. </div>
  183. </div>
  184. </div>
  185. </ErrorBoundary>
  186. </div>
  187. </template>
  188. <script setup lang="ts">
  189. /**
  190. * 公司简介页面
  191. * 展示公司基本信息、理念等
  192. */
  193. import { useErrorHandler } from "~/composables/useErrorHandler";
  194. import { useI18n } from "vue-i18n";
  195. const { t, locale } = useI18n();
  196. // 公司信息接口定义
  197. interface CompanyInfo {
  198. email: string;
  199. tel: string;
  200. fax: string;
  201. }
  202. const { error, isLoading, wrapAsync } = useErrorHandler();
  203. const companyInfo = ref<CompanyInfo>({
  204. email: "hanye@hanye.cn",
  205. tel: "86)024-8399-0696",
  206. fax: "86)024-8399-0696",
  207. });
  208. // SEO优化
  209. useHead({
  210. title: t("about.title"),
  211. meta: [
  212. {
  213. name: "description",
  214. content: t("about.description"),
  215. },
  216. {
  217. name: "keywords",
  218. content: t("about.keywords"),
  219. },
  220. ],
  221. });
  222. </script>
  223. <style scoped>
  224. /* 信息卡片效果 */
  225. .info-card {
  226. transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  227. }
  228. .info-card:hover {
  229. transform: translateY(-2px);
  230. box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1),
  231. 0 2px 4px -1px rgba(0, 0, 0, 0.06);
  232. }
  233. /* 动画效果 */
  234. @keyframes float {
  235. 0%,
  236. 100% {
  237. transform: translateY(0) scale(1);
  238. opacity: 0.9;
  239. }
  240. 50% {
  241. transform: translateY(-5px) scale(1.2);
  242. opacity: 1;
  243. }
  244. }
  245. .animate-float {
  246. animation: float 3s ease-in-out infinite;
  247. }
  248. @keyframes spin-slow {
  249. from {
  250. transform: rotate(0deg);
  251. }
  252. to {
  253. transform: rotate(360deg);
  254. }
  255. }
  256. @keyframes spin-slow-reverse {
  257. from {
  258. transform: rotate(360deg);
  259. }
  260. to {
  261. transform: rotate(0deg);
  262. }
  263. }
  264. .animate-spin-slow {
  265. animation: spin-slow 120s linear infinite;
  266. transform-origin: center;
  267. }
  268. .animate-spin-slow-reverse {
  269. animation: spin-slow-reverse 100s linear infinite;
  270. transform-origin: center;
  271. }
  272. @keyframes dash {
  273. from {
  274. stroke-dashoffset: 500;
  275. }
  276. to {
  277. stroke-dashoffset: 0;
  278. }
  279. }
  280. .animate-dash {
  281. stroke-dasharray: 5, 5;
  282. animation: dash 10s linear infinite;
  283. }
  284. .animate-dash-delay {
  285. stroke-dasharray: 5, 5;
  286. animation: dash 10s linear infinite;
  287. animation-delay: 3s;
  288. }
  289. .animate-pulse {
  290. animation: pulse 2s ease-in-out infinite;
  291. }
  292. @keyframes pulse {
  293. 0%,
  294. 100% {
  295. opacity: 1;
  296. filter: drop-shadow(0 0 2px rgba(59, 130, 246, 0.6));
  297. }
  298. 50% {
  299. opacity: 0.7;
  300. filter: drop-shadow(0 0 5px rgba(59, 130, 246, 0.9));
  301. }
  302. }
  303. /* 其他样式保持不变 */
  304. </style>