提交 9d9bb0dc authored 作者: huhuiqing's avatar huhuiqing

企业主页接口对接

上级 2b311cdd
// 企业主页接口信息
import request from "@/api/request.js";
// 企业基本信息:基本信息
export function getEnterprisePageInfo(params) {
return request({
method: 'GET',
url: `/api/enterprisePage/info/${params}`,
})
}
// 企业基本信息:主要人员
export function getEnterpriseKeyPerson(params) {
return request({
method: 'GET',
url: `/api/enterprisePage/keyPerson/${params}`,
})
}
...@@ -4,7 +4,7 @@ import companyPages from "@/views/companyPages/index.vue"; ...@@ -4,7 +4,7 @@ import companyPages from "@/views/companyPages/index.vue";
const companyPagesRoutes = [ const companyPagesRoutes = [
// 智库系统的主要路由 // 智库系统的主要路由
{ {
path: "/companyPages", path: "/companyPages/:id",
name: "companyPages", name: "companyPages",
component: companyPages, component: companyPages,
meta: { meta: {
......
...@@ -3,19 +3,15 @@ ...@@ -3,19 +3,15 @@
<!-- 公司导航栏 --> <!-- 公司导航栏 -->
<div class="company-nav"> <div class="company-nav">
<div class="company-logo-title"> <div class="company-logo-title">
<img :src="data.company.logo" alt="华为logo" class="logo-img" /> <img :src="infoData.logoUrl" class="logo-img" />
<div class="title-group"> <div class="title-group">
<h1 class="company-name">{{ data.company.name }}</h1> <h1 class="company-name">{{ infoData.orgName }}</h1>
<p class="company-english">{{ data.company.englishName }}</p> <p class="company-english">{{ infoData.orgNameEn }}</p>
</div> </div>
</div> </div>
<div class="main-tabs"> <div class="main-tabs">
<div <div v-for="(tab, index) in tabList" :key="index" :class="activeTab === tab.title ? 'tab-active' : 'tab'"
v-for="(tab, index) in tabList" @click="activeTab = tab.title">
:key="index"
:class="activeTab === tab.title ? 'tab-active' : 'tab'"
@click="activeTab = tab.title"
>
<img :src="activeTab === tab.title ? tab.activeIcon : tab.icon" alt="" /> <img :src="activeTab === tab.title ? tab.activeIcon : tab.icon" alt="" />
{{ tab.title }} {{ tab.title }}
</div> </div>
...@@ -25,28 +21,28 @@ ...@@ -25,28 +21,28 @@
<div class="main-content" v-if="activeTab === '基础信息'"> <div class="main-content" v-if="activeTab === '基础信息'">
<!-- 左侧信息栏 --> <!-- 左侧信息栏 -->
<div class="left-sidebar"> <div class="left-sidebar">
<img :src="data.company.logo" alt="华为logo" class="sidebar-logo" /> <img :src="infoData.logoUrl" class="sidebar-logo" />
<h2 class="sidebar-company-name">{{ data.company.name }}</h2> <h2 class="sidebar-company-name">{{ infoData.orgName }}</h2>
<div class="contact-list"> <div class="contact-list">
<div class="contact-item"> <div class="contact-item">
<img src="../../assets/icons/shutter.svg" alt="网址" class="contact-icon" /> <img src="../../assets/icons/shutter.svg" alt="网址" class="contact-icon" />
<span>{{ data.contactInfo.website }}</span> <span>{{ infoData.url }}</span>
</div> </div>
<div class="contact-item"> <div class="contact-item">
<img src="../../assets/icons/location.svg" alt="地址" class="contact-icon" /> <img src="../../assets/icons/location.svg" alt="地址" class="contact-icon" />
<span>{{ data.contactInfo.address }}</span> <span>{{ infoData.address }}</span>
</div> </div>
<div class="contact-item"> <div class="contact-item">
<img src="../../assets/icons/call.svg" alt="电话" class="contact-icon" /> <img src="../../assets/icons/call.svg" alt="电话" class="contact-icon" />
<span>{{ data.contactInfo.phone }}</span> <span>{{ infoData.telephone }}</span>
</div> </div>
<div class="contact-item"> <div class="contact-item">
<img src="../../assets/icons/mail.svg" alt="邮箱" class="contact-icon" /> <img src="../../assets/icons/mail.svg" alt="邮箱" class="contact-icon" />
<span>{{ data.contactInfo.email }}</span> <span>{{ infoData.email }}</span>
</div> </div>
</div> </div>
<!--接口未对接-->
<div class="financial-list"> <div class="financial-list">
<div class="financial-item" v-for="(item, idx) in data.financialData" :key="idx"> <div class="financial-item" v-for="(item, idx) in data.financialData" :key="idx">
<p class="financial-value">{{ item.value }}</p> <p class="financial-value">{{ item.value }}</p>
...@@ -59,12 +55,8 @@ ...@@ -59,12 +55,8 @@
<div class="right-content"> <div class="right-content">
<!-- 子标签栏 --> <!-- 子标签栏 -->
<div class="sub-tabs"> <div class="sub-tabs">
<span <span v-for="(tab, idx) in tabListSmall" :key="idx"
v-for="(tab, idx) in tabListSmall" :class="['sub-tab', activeTabSmall === tab ? 'active' : '']" @click="activeTabSmall = tab">
:key="idx"
:class="['sub-tab', activeTabSmall === tab ? 'active' : '']"
@click="activeTabSmall = tab"
>
{{ tab }} {{ tab }}
</span> </span>
<div class="action-icons"> <div class="action-icons">
...@@ -80,27 +72,49 @@ ...@@ -80,27 +72,49 @@
<div class="info-card"> <div class="info-card">
<h3 class="section-title">类别分布</h3> <h3 class="section-title">类别分布</h3>
<ul class="info-list"> <ul class="info-list">
<li <li style="display: flex; align-items: center">
v-for="(value, key) in data.categoryDist"
:key="key"
style="display: flex; align-items: center"
>
<div class="li-icon"></div> <div class="li-icon"></div>
<span class="info-key">{{ key }}</span> <span class="info-key">企业类型</span>
<span class="info-value">{{ value }}</span> <span class="info-value">{{ infoData.nsIndustryCategory }}</span>
</li>
<li style="display: flex; align-items: center">
<div class="li-icon"></div>
<span class="info-key">机构代码</span>
<span class="info-value">{{ infoData.uscc }}</span>
</li>
<li style="display: flex; align-items: center">
<div class="li-icon"></div>
<span class="info-key">成立时间</span>
<span class="info-value">{{ infoData.createTime }}</span>
</li>
<li style="display: flex; align-items: center">
<div class="li-icon"></div>
<span class="info-key">创办人</span>
<span class="info-value">{{ infoData.legalRepresentative }}</span>
</li> </li>
</ul> </ul>
</div> </div>
<div class="info-card"> <div class="info-card">
<h3 class="section-title">经营信息</h3> <h3 class="section-title">经营信息</h3>
<ul class="info-list"> <ul class="info-list">
<li <li style="display: flex; align-items: center">
v-for="(value, key) in data.businessInfo" <div class="li-icon"></div>
:key="key" <span class="info-key">总部地点</span>
style="display: flex; align-items: center" <span class="info-value">{{ infoData.address }}</span>
> </li>
<li style="display: flex; align-items: center">
<div class="li-icon"></div>
<span class="info-key">标语口号</span>
<span class="info-value">{{ value }}</span>
</li>
<li style="display: flex; align-items: center">
<div class="li-icon"></div>
<span class="info-key">业务范围</span>
<span class="info-value">{{ infoData.businessScope }}</span>
</li>
<li style="display: flex; align-items: center">
<div class="li-icon"></div> <div class="li-icon"></div>
<span class="info-key">{{ key }}</span> <span class="info-key">所有权者</span>
<span class="info-value">{{ value }}</span> <span class="info-value">{{ value }}</span>
</li> </li>
</ul> </ul>
...@@ -115,15 +129,15 @@ ...@@ -115,15 +129,15 @@
</div> </div>
<div class="personnel-grid"> <div class="personnel-grid">
<div class="personnel-card" v-for="(person, idx) in data.mainPersonnel" :key="idx"> <div class="personnel-card" v-for="(person, idx) in mainPersonnel" :key="idx">
<div class="personnel-card-header"> <div class="personnel-card-header">
<img :src="person.avatar" alt="头像" class="person-avatar" /> <img :src="person.avatarUrl" class="person-avatar" />
<div class="person-info"> <div class="person-info">
<h4 class="person-name">{{ person.name }}</h4> <h4 class="person-name">{{ person.name }}</h4>
<p class="person-position">{{ person.position }}</p> <p class="person-position">{{ person.position }}</p>
</div> </div>
</div> </div>
<p class="person-desc">{{ person.desc }}</p> <div class="person-desc">{{ person.introduction }}</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -158,14 +172,16 @@ ...@@ -158,14 +172,16 @@
</template> </template>
<script setup> <script setup>
import { ref } from "vue"; import { ref, onMounted } from "vue";
import data from "./data/huaweiData.json"; import data from "./data/huaweiData.json";
import movementData from "./data/movement.json"; import movementData from "./data/movement.json";
import Timeline from "./component/Timeline.vue"; import Timeline from "./component/Timeline.vue";
import Capability from "./component/Capability.vue"; import Capability from "./component/Capability.vue";
import SanctionsSituation from "./component/SanctionsSituation‌.vue"; import SanctionsSituation from "./component/SanctionsSituation‌.vue";
import SupplyChain from "./component/SupplyChain.vue"; import SupplyChain from "./component/SupplyChain.vue";
import { useRouter } from "vue-router";
import { getEnterprisePageInfo, getEnterpriseKeyPerson } from "@/api/companyPages/index.js";
import TabIcon1 from "./images/tab-icon1.png"; import TabIcon1 from "./images/tab-icon1.png";
import TabIcon2 from "./images/tab-icon2.png"; import TabIcon2 from "./images/tab-icon2.png";
import TabIcon3 from "./images/tab-icon3.png"; import TabIcon3 from "./images/tab-icon3.png";
...@@ -175,6 +191,7 @@ import TabIcon2Active from "./images/tab-icon2-active.png"; ...@@ -175,6 +191,7 @@ import TabIcon2Active from "./images/tab-icon2-active.png";
import TabIcon3Active from "./images/tab-icon3-active.png"; import TabIcon3Active from "./images/tab-icon3-active.png";
import TabIcon4Active from "./images/tab-icon4-active.png"; import TabIcon4Active from "./images/tab-icon4-active.png";
const router = useRouter();
const tabList = ref([ const tabList = ref([
{ {
title: "基础信息", title: "基础信息",
...@@ -200,6 +217,39 @@ const tabList = ref([ ...@@ -200,6 +217,39 @@ const tabList = ref([
const activeTab = ref("基础信息"); const activeTab = ref("基础信息");
const tabListSmall = ref(["企业概况", "企业动态"]); const tabListSmall = ref(["企业概况", "企业动态"]);
const activeTabSmall = ref("企业概况"); const activeTabSmall = ref("企业概况");
const infoData = ref({})//基本信息
const mainPersonnel = ref([])//主要人员
// 获取企业基本信息
const handleGetEnterprisePageInfo = async () => {
try {
const res = await getEnterprisePageInfo(router.currentRoute._value.params.id);
console.log("企业基本信息", res);
if (res.code === 200 && res.data) {
infoData.value = res.data
}
} catch (error) {
console.error("获取企业基本信息error", error);
}
};
const handleGetEnterpriseKeyPerson = async () => {
try {
const res = await getEnterpriseKeyPerson(router.currentRoute._value.params.id);
console.log("主要人员", res);
if (res.code === 200 && res.data) {
mainPersonnel.value = res.data
}
} catch (error) {
console.error("获取主要人员error", error);
}
};
onMounted(async () => {
handleGetEnterprisePageInfo()
handleGetEnterpriseKeyPerson()
});
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -258,11 +308,13 @@ const activeTabSmall = ref("企业概况"); ...@@ -258,11 +308,13 @@ const activeTabSmall = ref("企业概况");
align-items: flex-start; align-items: flex-start;
gap: 32; gap: 32;
padding: 0px 16px 0px 0px; padding: 0px 16px 0px 0px;
img { img {
width: 16px; width: 16px;
height: 16px; height: 16px;
margin-right: 4px; margin-right: 4px;
} }
.tab { .tab {
color: rgba(59, 65, 75, 1); color: rgba(59, 65, 75, 1);
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
...@@ -517,6 +569,13 @@ const activeTabSmall = ref("企业概况"); ...@@ -517,6 +569,13 @@ const activeTabSmall = ref("企业概况");
line-height: 24px; line-height: 24px;
letter-spacing: 0px; letter-spacing: 0px;
text-align: justify; text-align: justify;
/* overflow: hidden; */
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
overflow: hidden;
-webkit-box-orient: vertical;
width: 313px;
} }
/* 主要人员 */ /* 主要人员 */
...@@ -606,14 +665,22 @@ const activeTabSmall = ref("企业概况"); ...@@ -606,14 +665,22 @@ const activeTabSmall = ref("企业概况");
} }
.person-desc { .person-desc {
padding: 16px 8px; // padding: 16px 8px;
margin: 0; margin: 16px 8px;
color: rgba(95, 101, 108, 1); color: rgba(95, 101, 108, 1);
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
line-height: 24px; line-height: 24px;
letter-spacing: 0px; letter-spacing: 0px;
text-align: left; text-align: left;
/* overflow: hidden; */
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
overflow: hidden;
-webkit-box-orient: vertical;
} }
/* 分支机构 */ /* 分支机构 */
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论