This commit is contained in:
张 元山 2025-03-17 13:36:57 +08:00
parent 1361fa25c6
commit add2f4703e
8 changed files with 1587 additions and 668 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 286 KiB

After

Width:  |  Height:  |  Size: 260 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 347 KiB

After

Width:  |  Height:  |  Size: 320 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -102,7 +102,7 @@
<div class="w-full px-[158px] mb-[118px]">
<div
class="bg-[#fff] flex w-full text-[72px] pa-[13px] shadow-[0_15px_102px_5px_rgba(0,0,0,0.16)] rounded-[41px]"
class="bg-[#fff] flex w-full text-[72px] pa-[6px] shadow-[0_15px_102px_5px_rgba(0,0,0,0.16)] rounded-[41px]"
>
<div
class="w-4/10 text-[#10263E] font-semibold"
@ -179,8 +179,7 @@
"
>
<div v-if="!isAnimating">
{{ state.activeYear
}}{{
{{
t("investor.financial_data.years.year" + state.activeYear)
}}
</div>
@ -304,8 +303,7 @@
@click="handleYClick('Annual Report')"
>
<div>
{{ state.activeYear
}}{{
{{
t("investor.financial_data.years.year" + state.activeYear)
}}
</div>
@ -316,8 +314,7 @@
@click="handleYClick('Annual Meeting')"
>
<div>
{{ state.activeYear
}}{{
{{
t("investor.financial_data.years.year" + state.activeYear)
}}
</div>
@ -328,8 +325,7 @@
@click="handleYClick('Special Shareholder Meeting')"
>
<div>
{{ state.activeYear
}}{{
{{
t("investor.financial_data.years.year" + state.activeYear)
}}
</div>
@ -340,8 +336,7 @@
@click="handleYClick('Proxy Statement')"
>
<div>
{{ state.activeYear
}}{{
{{
t("investor.financial_data.years.year" + state.activeYear)
}}
</div>
@ -608,7 +603,8 @@ const state = reactive({
date: t("investor.latest_news.financial.date"),
link: t("investor.latest_news.financial.link"),
imgUrl: imageshow1,
linkUrl: "https://spaces.hightail.com/receive/RpIYgWf2p0",
linkUrl:
"https://hello.minim.co/hubfs/docs/MINM-Q4-FY22-Earnings-Results.pdf?__hstc=56173940.2f10611562d9d3c76f0809f1a47d2275.1680104200211.1680104200211.1680104200211.1&__hssc=56173940.1.1680104200211&__hsfp=1592164616&hsLang=en",
},
{
title: t("investor.latest_news.events.title"),
@ -1275,9 +1271,9 @@ const calcYLinkClass = (type) => {
will-change: transform, opacity;
}
.link-Q {
color: #036c85;
color: #8b59fa;
}
.link-Y {
color: #036c85;
color: #8b59fa;
}
</style>

View File

@ -46,7 +46,7 @@
<div>{{ t("investor.latest_news.title") }}</div>
</div>
<div
class="mt-[140px] mb-[230px] carousel-container px-[80px] py-[40px] z-6"
class="mt-[140px] mb-[230px] carousel-container px-[80px] py-[40px] z-8"
@mouseenter="pauseCarouselAnimation"
@mouseleave="resumeCarouselAnimation"
@touchstart="pauseCarouselAnimation"
@ -59,7 +59,7 @@
class="carousel-item"
>
<img class="carousel-image" :src="item.imgUrl" />
<div class="carousel-title flex justify-between">
<div class="carousel-title flex justify-between z-8">
<div>{{ item.title }}</div>
<div v-if="item.date" class="text-[#9F9F9F] text-[35px]">
{{ item.date }}
@ -179,8 +179,7 @@
"
>
<div v-if="!isAnimating">
{{ state.activeYear
}}{{
{{
t("investor.financial_data.years.year" + state.activeYear)
}}
</div>
@ -303,28 +302,44 @@
:class="calcYLinkClass('Annual Report')"
@click="handleYClick('Annual Report')"
>
<div>{{ state.activeYear }}</div>
<div>
{{
t("investor.financial_data.years.year" + state.activeYear)
}}
</div>
</div>
<div
class="bg-[#F8F9FF] ma-[6px] px-[25px] py-[30px]"
:class="calcYLinkClass('Annual Meeting')"
@click="handleYClick('Annual Meeting')"
>
<div>{{ state.activeYear }}</div>
<div>
{{
t("investor.financial_data.years.year" + state.activeYear)
}}
</div>
</div>
<div
class="bg-[#F8F9FF] ma-[6px] px-[25px] py-[30px]"
:class="calcYLinkClass('Special Shareholder Meeting')"
@click="handleYClick('Special Shareholder Meeting')"
>
<div>{{ state.activeYear }}</div>
<div>
{{
t("investor.financial_data.years.year" + state.activeYear)
}}
</div>
</div>
<div
class="bg-[#F8F9FF] ma-[6px] px-[25px] py-[30px]"
:class="calcYLinkClass('Proxy Statement')"
@click="handleYClick('Proxy Statement')"
>
<div>{{ state.activeYear }}</div>
<div>
{{
t("investor.financial_data.years.year" + state.activeYear)
}}
</div>
</div>
</div>
</div>
@ -578,7 +593,8 @@ const state = reactive({
date: t("investor.latest_news.financial.date"),
link: t("investor.latest_news.financial.link"),
imgUrl: imageshow1,
linkUrl: "https://spaces.hightail.com/receive/RpIYgWf2p0",
linkUrl:
"https://hello.minim.co/hubfs/docs/MINM-Q4-FY22-Earnings-Results.pdf?__hstc=56173940.2f10611562d9d3c76f0809f1a47d2275.1680104200211.1680104200211.1680104200211.1&__hssc=56173940.1.1680104200211&__hsfp=1592164616&hsLang=en",
},
{
title: t("investor.latest_news.events.title"),
@ -1244,9 +1260,9 @@ const calcYLinkClass = (type) => {
will-change: transform, opacity;
}
.link-Q {
color: #036c85;
color: #8b59fa;
}
.link-Y {
color: #036c85;
color: #8b59fa;
}
</style>

View File

@ -1,57 +1,121 @@
<template>
<div class="page-container">
<n-divider class="divider1" vertical />
<n-divider class="divider5" vertical />
<AppHeader />
<main>
<section className="section-first" style="background: #fff">
<header className="header">
<div class="logo">
<img src="@/assets/image/logo.png" alt="logo" />
</div>
<div class="tabs">
<div
class="flex flex-wrap justify-center tracking-[4px] leading-[75px]"
class="tab-item"
:class="{
active: currentTab === 'home',
}"
@click="handleTabClick('home')"
>
<div class="w-full title mt-[298px] px-[180px] text-center">
与投资者社区的最低沟通指南
{{ t("home.nav.home") }}
</div>
<div
class="tab-item"
:class="{
active: currentTab === 'companyprofil',
}"
@click="handleTabClick('companyprofil')"
>
{{ t("home.nav.company") }}
</div>
<div
class="tab-item"
:class="{
active: currentTab === 'businessintroduction',
}"
@click="handleTabClick('businessintroduction')"
>
{{ t("home.nav.businessintroduction") }}
</div>
<div
class="tab-item"
:class="{
active: currentTab === 'investor',
}"
@click="handleTabClick('investor')"
>
{{ t("home.nav.investor") }}
</div>
<div class="tab-item">
<n-popselect
v-model:value="currentLanguage"
:options="languageOptions"
@update:value="changeLanguage"
>
<div class="language-display">
{{ currentLanguageLabel }}
<span class="language-arrow"></span>
</div>
</n-popselect>
</div>
</div>
</header>
<main>
<section className="section-first relative" style="background: #fff">
<n-divider class="divider1" vertical />
<div class="divider2" style=""></div>
<div class="divider3" style=""></div>
<div class="divider4" style=""></div>
<n-divider class="divider5" vertical />
<div
class="flex flex-wrap justify-center tracking-[4px] leading-[40px]"
>
<div class="w-full title mt-[108px] px-[400px] text-center">
{{ t("investorhandbook.title") }}
</div>
<div
class="w-full flex flex-wrap px-[188px] text-[#455363] text-[40px] mb-[275px]"
class="w-full flex flex-wrap px-[363px] text-[#455363] text-[21px] mb-[275px]"
>
<div class="w-full font-semibold mt-[63px] text-[45px]">
<div class="w-full font-semibold mt-[63px] text-[24px]">
<img
class="w-[30px] h-[30px] mr-[4px]"
class="w-[16px] h-[16px] mr-[4px]"
src="@/assets/image/icon-c.png"
alt="logo"
/>
授权发言人
{{ t("investorhandbook.authorized_speakers.title") }}
</div>
<div class="w-full mt-[50px]">
以下Minim代表有权与分析师股票经纪人个人和机构股东的投资界进行沟通
<div class="w-full mt-[27px]">
{{ t("investorhandbook.authorized_speakers.desc") }}
</div>
<div class="w-full">· 总裁</div>
<div class="w-full">· 总裁兼首席营销官</div>
<div class="w-full">· 首席财务官</div>
<div class="w-full">在本指南中这些代表被称为授权IR联系人</div>
<div class="w-full font-semibold mt-[100px] text-[45px]">
<div class="w-full">
· {{ t("investorhandbook.authorized_speakers.items.0") }}
</div>
<div class="w-full">
· {{ t("investorhandbook.authorized_speakers.items.1") }}
</div>
<div class="w-full">
· {{ t("investorhandbook.authorized_speakers.items.2") }}
</div>
<div class="w-full">
{{ t("investorhandbook.authorized_speakers.note") }}
</div>
<div class="w-full font-semibold mt-[53px] text-[24px]">
<img
class="w-[30px] h-[30px] mr-[4px]"
class="w-[16px] h-[16px] mr-[4px]"
src="@/assets/image/icon-c.png"
alt="logo"
/>
季度末沟通和会议
{{ t("investorhandbook.quarterly_communications.title") }}
</div>
<div class="w-full mt-[50px]">
1.静默期公司遵守静默期从季度末日期开始到收益发布时结束在此期间企业管理层将不会与分析师或投资者进行1:1的会面然而根据要求可向投资者提供基于事实的公共信息并由授权投资者关系联系人进行分析
<div class="w-full mt-[27px]">
{{ t("investorhandbook.quarterly_communications.items.0") }}
</div>
<div class="w-full mt-[50px]">
2.分析师会议/电话会议所有讨论季度年度财务和业务信息的分析师会议或通话应通过互联网或电话会议同时向所有感兴趣的公众广播会议的适当提前通知和同步广播应通过新闻稿或符合FD条例的其他通信方式进行
<div class="w-full mt-[27px]">
{{ t("investorhandbook.quarterly_communications.items.1") }}
</div>
<div class="w-full mt-[50px]">
3.收益新闻稿收益新闻稿将在投资者关系部和首席财务官确定的会议或电话会议开始时或之前按照适用的美国证券交易委员会和纳斯达克规则在新闻专线上发布以8-K表格的形式提供给美国证券交易会并发布在公司网站上
<div class="w-full mt-[27px]">
{{ t("investorhandbook.quarterly_communications.items.2") }}
</div>
<div class="w-full mt-[50px]">
4.有关年度首次认购收入和每股收益范围的指导意见可在收益新闻稿中提供如有必要可在每个季度的收益新闻稿上提供对指导意见的修改一般来说公司不会在本季度更新本指南或提供额外指南除非财务副总裁/首席财务官认为有必要并且只能根据FD条例在公开论坛上提供
<div class="w-full mt-[27px]">
{{ t("investorhandbook.quarterly_communications.items.3") }}
</div>
<div class="w-full mt-[50px]">
收到媒体市场专业人士或股东任何询问的Minim代表授权发言人除外不得回复此类询问但应将提问者转介给授权发言人然而分配给Minim投资者关系和营销团队的Minim代表可以按照授权发言人不时制定的指导方针对公开信息的例行询问作出回应
<div class="w-full mt-[27px]">
{{ t("investorhandbook.quarterly_communications.note") }}
</div>
</div>
</div>
@ -62,7 +126,7 @@
className="flex flex-wrap justify-center"
>
<img
class="w-[580px] h-[55px] my-[85px]"
class="w-[309px] h-[29px] my-[85px]"
src="@/assets/image/image-footer.png"
alt="logo"
/>
@ -72,7 +136,6 @@
</template>
<script setup>
import { NDivider } from "naive-ui";
import {
onUnmounted,
ref,
@ -82,47 +145,189 @@ import {
watch,
onBeforeMount,
} from "vue";
import AppHeader from "@/components/AppHeader/index.vue";
import { NDivider, NPopselect, NGrid, NGi, NButton } from "naive-ui";
import { useTransitionComposable } from "@/composables/transition-composable";
import { useHome } from "@/store/home/index.js";
import { useLanguage } from "@/utils/changeLanguage.js";
import { useRoute, useRouter } from "vue-router";
import { useI18n } from "vue-i18n";
const { t } = useI18n();
const { currentTab } = useHome();
const router = useRouter();
const { transitionState } = useTransitionComposable();
const main = ref();
let ctx;
const {
languageOptions,
currentLanguage,
currentLanguageLabel,
changeLanguage,
initLanguage,
currentLang,
currentBannerImages,
t,
} = useLanguage();
const handleTabClick = (tab) => {
currentTab.value = tab;
router.push("/" + tab);
};
onBeforeMount(() => {});
onMounted(() => {});
onUnmounted(() => {});
</script>
<style scoped lang="scss">
.page-container {
.header {
width: 100%;
overflow-x: hidden;
position: relative;
height: 65px;
display: flex;
justify-content: space-between;
align-items: flex-end;
position: fixed;
z-index: 10;
top: 0;
left: 0;
right: 0;
padding: 0 10rem;
padding-bottom: 10px;
}
.title {
font-size: 85px;
font-weight: 600;
line-height: 110px;
color: #10253e;
.logo {
img {
width: 108px;
height: 33px;
}
}
.tabs {
display: flex;
gap: 32px;
margin-right: 32px;
}
.tab-item {
font-size: 16px;
color: #000000;
cursor: pointer;
transition: color 0.3s ease;
padding: 4px 8px;
&.active {
color: #8b59fa;
}
&:hover {
color: #8b59fa;
}
}
.head {
width: 100%;
background-color: #f8f9ff;
img {
width: 100%;
height: 100%;
object-fit: cover;
image-rendering: -webkit-optimize-contrast;
image-rendering: crisp-edges;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
transform: translateZ(0);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
}
.divider1 {
position: absolute;
z-index: 3;
background-color: rgba(230, 234, 238, 0.5) !important;
left: 116px;
width: 1px;
left: 482px;
width: 2px;
height: 100%;
background-color: rgba(230, 234, 238, 0.5) !important;
}
.divider2 {
position: absolute;
z-index: 3;
left: 720px;
width: 2px;
height: 100%;
background-image: linear-gradient(
to bottom,
rgb(150 165 181 / 50%),
transparent 50%
);
background-size: 1px 12px; // 线线+
background-repeat: repeat-y;
}
.divider3 {
position: absolute;
z-index: 3;
left: 952px;
width: 2px;
height: 100%;
background-image: linear-gradient(
to bottom,
rgb(150 165 181 / 50%),
transparent 50%
);
background-size: 1px 12px; // 线线+
background-repeat: repeat-y;
}
.divider4 {
position: absolute;
z-index: 3;
left: 1182px;
width: 2px;
height: 100%;
background-image: linear-gradient(
to bottom,
rgb(150 165 181 / 50%),
transparent 50%
);
background-size: 1px 15px; // 线线+
background-repeat: repeat-y;
}
.divider5 {
position: absolute;
z-index: 3;
background-color: rgba(230, 234, 238, 0.5) !important;
right: 116px;
width: 1px;
left: 1406px;
width: 2px;
height: 100%;
background-color: rgba(230, 234, 238, 0.5) !important;
}
.footer-content {
height: 90px;
display: flex;
justify-content: center;
align-items: center;
.copyright {
width: 232px;
height: 22pxpx;
}
}
.page-container {
width: 100%;
overflow: hidden;
position: relative;
}
.title {
font-size: 53px;
font-weight: 600;
line-height: 110px;
color: #10253e;
}
.page-container {
width: 100%;
overflow-x: hidden;
position: relative;
}
</style>

View File

@ -1,50 +1,52 @@
<template>
<div class="page-container">
<n-divider class="divider1" vertical />
<div class="divider3" style=""></div>
<n-divider class="divider5" vertical />
<header className="header">
<div class="logo">
<img src="@/assets/image/logo.png" alt="logo" />
</div>
<div class="tabs">
<div class="tab-item" :class="{
active: currentTab === 'home',
}" @click="handleTabClick('home')">
<div
class="tab-item"
:class="{
active: currentTab === 'home',
}"
@click="handleTabClick('home')"
>
{{ t("home.nav.home") }}
</div>
<div class="tab-item" :class="{
active:
currentTab ===
'companyprofil',
}" @click="
handleTabClick(
'companyprofil'
)
">
<div
class="tab-item"
:class="{
active: currentTab === 'companyprofil',
}"
@click="handleTabClick('companyprofil')"
>
{{ t("home.nav.company") }}
</div>
<div class="tab-item" :class="{
active:
currentTab === 'businessintroduction',
}" @click="
handleTabClick('businessintroduction')
">
<div
class="tab-item"
:class="{
active: currentTab === 'businessintroduction',
}"
@click="handleTabClick('businessintroduction')"
>
{{ t("home.nav.businessintroduction") }}
</div>
<div class="tab-item" :class="{
active:
currentTab === 'investor',
}" @click="
handleTabClick('investor')
">
<div
class="tab-item"
:class="{
active: currentTab === 'investor',
}"
@click="handleTabClick('investor')"
>
{{ t("home.nav.investor") }}
</div>
<div class="tab-item">
<n-popselect v-model:value="currentLanguage" :options="languageOptions" @update:value="changeLanguage">
<n-popselect
v-model:value="currentLanguage"
:options="languageOptions"
@update:value="changeLanguage"
>
<div class="language-display">
{{ currentLanguageLabel }}
<span class="language-arrow"></span>
@ -54,12 +56,15 @@
</div>
</header>
<main>
<section className="section-first" style="background: #fff">
<section className="section-first relative" style="background: #fff">
<n-divider class="divider1" vertical />
<div class="divider2" style=""></div>
<div class="divider3" style=""></div>
<div class="divider4" style=""></div>
<n-divider class="divider5" vertical />
<div
class="flex flex-wrap justify-center tracking-[4px] leading-[40px]"
>
<div class="w-full title mt-[108px] px-[180px] text-center">
{{ t("investorhandbook.title") }}
</div>
@ -77,10 +82,18 @@
<div class="w-full mt-[27px]">
{{ t("investorhandbook.authorized_speakers.desc") }}
</div>
<div class="w-full">· {{ t("investorhandbook.authorized_speakers.items.0") }}</div>
<div class="w-full">· {{ t("investorhandbook.authorized_speakers.items.1") }}</div>
<div class="w-full">· {{ t("investorhandbook.authorized_speakers.items.2") }}</div>
<div class="w-full">{{ t("investorhandbook.authorized_speakers.note") }}</div>
<div class="w-full">
· {{ t("investorhandbook.authorized_speakers.items.0") }}
</div>
<div class="w-full">
· {{ t("investorhandbook.authorized_speakers.items.1") }}
</div>
<div class="w-full">
· {{ t("investorhandbook.authorized_speakers.items.2") }}
</div>
<div class="w-full">
{{ t("investorhandbook.authorized_speakers.note") }}
</div>
<div class="w-full font-semibold mt-[53px] text-[24px]">
<img
class="w-[16px] h-[16px] mr-[4px]"
@ -123,7 +136,6 @@
</template>
<script setup>
import {
onUnmounted,
ref,
@ -142,8 +154,7 @@ import { useI18n } from "vue-i18n";
const { currentTab } = useHome();
const router = useRouter();
const { transitionState } =
useTransitionComposable();
const { transitionState } = useTransitionComposable();
const main = ref();
let ctx;
const {
@ -154,7 +165,7 @@ const {
initLanguage,
currentLang,
currentBannerImages,
t
t,
} = useLanguage();
const handleTabClick = (tab) => {
currentTab.value = tab;
@ -239,61 +250,72 @@ onUnmounted(() => {});
line-height: 110px;
color: #10253e;
}
.divider1 {
position: absolute;
left: 477px;
z-index: 3;
left: 482px;
width: 1px;
height: 100%;
background-color: rgba(230, 234, 238, 0.5) !important;
}
.divider2 {
position: absolute;
left: 715px;
z-index: 3;
left: 720px;
width: 1px;
height: 100%;
background-image: linear-gradient(to bottom, #E6EAEE 50%, transparent 50%);
background-size: 1px 15px; // 线线+
background-image: linear-gradient(
to bottom,
rgb(150 165 181 / 50%),
transparent 50%
);
background-size: 1px 12px; // 线线+
background-repeat: repeat-y;
}
.divider3 {
position: absolute;
left: 950px;
z-index: 3;
left: 952px;
width: 1px;
height: 100%;
background-image: linear-gradient(to bottom, #E6EAEE 50%, transparent 50%);
background-size: 1px 15px; // 线线+
background-image: linear-gradient(
to bottom,
rgb(150 165 181 / 50%),
transparent 50%
);
background-size: 1px 12px; // 线线+
background-repeat: repeat-y;
}
.divider4 {
position: absolute;
left: 1186px;
z-index: 3;
left: 1182px;
width: 1px;
height: 100%;
background-image: linear-gradient(to bottom, #E6EAEE 50%, transparent 50%);
background-image: linear-gradient(
to bottom,
rgb(150 165 181 / 50%),
transparent 50%
);
background-size: 1px 15px; // 线线+
background-repeat: repeat-y;
}
.divider5 {
position: absolute;
left: 1410px;
z-index: 3;
left: 1406px;
width: 1px;
height: 100%;
background-color: rgba(230, 234, 238, 0.5) !important;
}
.page-container {
width: 100%;
overflow-x: hidden;
position: relative;
}
</style>