mirror of
https://github.com/hpware/news-analyze.git
synced 2025-06-23 21:14:23 +00:00
- Deleted unused `headlines.vue`, `admin.vue`, and `newsorg.vue` layouts. - Consolidated `newsOrgAbout` functionality into a single `newsOrgAbout.vue` component. - Added error handling page with dynamic error messages. - Updated navigation to include a new "Learn More" link. - Adjusted translations for "Learn More" in both English and Traditional Chinese. - Increased dimensions for the "Hot News" app window.
123 lines
3.2 KiB
Vue
123 lines
3.2 KiB
Vue
<script setup lang="ts">
|
|
import { gsap } from "gsap";
|
|
import { ScrambleTextPlugin } from "gsap/dist/ScrambleTextPlugin";
|
|
gsap.registerPlugin(ScrambleTextPlugin);
|
|
const loading = ref(true);
|
|
const route = useRoute();
|
|
const slug = route.params.slug;
|
|
const { t, locale } = useI18n();
|
|
|
|
definePageMeta({
|
|
layout: "newsorg",
|
|
});
|
|
|
|
const {
|
|
data: fetchNewsOrgInfo,
|
|
pending,
|
|
error,
|
|
} = useFetch("/api/getData/fetchNewsOrgInfo", {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
},
|
|
body: {
|
|
lang: locale,
|
|
requestPage: slug,
|
|
},
|
|
});
|
|
|
|
const {
|
|
data: fetchOtherData,
|
|
pending: fetchOtherDataPending,
|
|
error: fetchOtherDataError,
|
|
} = useFetch("/api/getData/fetchSidebarData", {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
},
|
|
body: {
|
|
lang: locale,
|
|
},
|
|
});
|
|
|
|
watchEffect(() => {
|
|
loading.value = pending.value;
|
|
});
|
|
useSeoMeta({
|
|
title: fetchNewsOrgInfo.value?.title,
|
|
});
|
|
|
|
const orgNameAnimation = ref(null);
|
|
|
|
onMounted(() => {
|
|
gsap.to(orgNameAnimation.value, {
|
|
duration: 1,
|
|
scrambleText: fetchNewsOrgInfo.value?.title,
|
|
});
|
|
});
|
|
|
|
// Import Icons
|
|
import { GlobeAltIcon } from "@heroicons/vue/24/outline";
|
|
</script>
|
|
<template>
|
|
<div class="flex flex-row flex-wrap w-full mt-2">
|
|
<div class="text-center align-center justify-center w-[70%]">
|
|
<div
|
|
class="flex flex-row bg-[#AAACAA61] rounded-3xl p-3 gap-3 m-3 scale-5"
|
|
>
|
|
<NuxtImg
|
|
:src="fetchNewsOrgInfo?.logoUrl"
|
|
class="w-48 h-48 rounded-[10px]"
|
|
/>
|
|
<div class="flex flex-col gap-3 text-left">
|
|
<h1 class="text-4xl font-bold m-3 text-left" ref="orgNameAnimation">
|
|
{{ fetchNewsOrgInfo?.title }}
|
|
</h1>
|
|
<span class="text-ms m-1 mt-5 text-left text-wrap">{{
|
|
fetchNewsOrgInfo?.description
|
|
}}</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div
|
|
class="gap-[3px] flex flex-row text-center align-center justify-center"
|
|
>
|
|
<a
|
|
:href="fetchNewsOrgInfo?.website"
|
|
target="_blank"
|
|
class="text-blue-200 hover:text-blue-300 transiton-all duration-100 flex flex-row"
|
|
><GlobeAltIcon class="w-6 h-6" />網站</a
|
|
>
|
|
</div>
|
|
</div>
|
|
<div
|
|
class="flex flex-col gap-3 text-left justify-right align-right bg-[#AAACAA61] w-[28%] rounded-3xl p-3 mt-3 h-screen"
|
|
>
|
|
<h3 class="text-2xl mt-2s">其他媒體</h3>
|
|
<hr />
|
|
<div v-for="data in fetchOtherData" :key="data.id" class="flex flex-col">
|
|
<NuxtImg :src="data.image"></NuxtImg>
|
|
<div class="flex flex-row">
|
|
<h1 class="text-xl text-bold">{{ data.title }}</h1>
|
|
<span class="text-ms ml-2 align-center justify-center text-center">
|
|
(
|
|
<span>{{ data.lean }}</span>
|
|
-
|
|
<span
|
|
>文章分數:
|
|
<span>{{ data.score }}</span>
|
|
</span>
|
|
)
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<NuxtLink class="justify-center align-center text-center">
|
|
<button
|
|
class="bg-red-500 text-black p-2 rounded-full justify-center align-center"
|
|
>
|
|
<span>查看更多</span>
|
|
</button>
|
|
</NuxtLink>
|
|
</div>
|
|
</div>
|
|
</template>
|