29 changed files with 2108 additions and 2087 deletions
-
BINsrc/assets/design/header/logo.png
-
BINsrc/assets/medical/1.png
-
0src/components/Medical copy/Ability/index.vue
-
0src/components/Medical copy/Bottom/Blue.vue
-
0src/components/Medical copy/Bottom/Tag.vue
-
0src/components/Medical copy/Bottom/index.vue
-
0src/components/Medical copy/Case/index.vue
-
0src/components/Medical copy/Company/index.vue
-
265src/components/Medical copy/Header/index.vue
-
22src/components/Medical copy/HomeScreen/index.vue
-
0src/components/Medical copy/ImgModal/index.vue
-
0src/components/Medical copy/MedicalService/index.vue
-
0src/components/Medical copy/OneStep/index.vue
-
7src/components/Medical/Header/index.vue
-
14src/components/Medical/HomeScreen/index.vue
-
5src/router/index.js
-
49src/views/Medical copy/index.vue
-
27src/views/Medical/index.vue
-
138src/views/Recruit/SoftRecruit.vue
-
138src/views/Recruit/index.vue
Before Width: 140 | Height: 32 | Size: 1.5 KiB After Width: 140 | Height: 32 | Size: 1.7 KiB |
After Width: 1920 | Height: 620 | Size: 873 KiB |
@ -0,0 +1,265 @@ |
|||
<template> |
|||
<div |
|||
:class=" |
|||
isChange || active ? 'header_container active_header' : 'header_container' |
|||
" |
|||
id="header_container" |
|||
> |
|||
<img :src="Logo1" class="logo" alt="" @click="toPage('/')" /> |
|||
<div class="right_oper_wrap"> |
|||
<div class="btns"> |
|||
<div class="btn" @click="toPage('/')"> |
|||
<p class="text">首页</p> |
|||
<div class="line" v-if="route.path == '/'"></div> |
|||
</div> |
|||
<div class="btn service" @click="toPage('/medical-detail')"> |
|||
<p class="text">设计案例</p> |
|||
<div class="line" v-if="route.path == '/medical-detail'"></div> |
|||
</div> |
|||
<div class="btn service"> |
|||
<p class="text">不止于此</p> |
|||
<div class="select_modal"> |
|||
<p class="b" @click="toHomePage('/softhard')">软硬件开发</p> |
|||
<p class="b" @click="toHomePage('/design')">工业设计</p> |
|||
<p class="b" @click="toHomePage('/')">整机开发</p> |
|||
</div> |
|||
</div> |
|||
<div class="btn" @click="toPage('/medicalabout')"> |
|||
<p class="text">关于我们</p> |
|||
<div class="line" v-if="route.path == '/medicalabout'"></div> |
|||
</div> |
|||
<div |
|||
class="btn" |
|||
style="margin-right: 20px" |
|||
@click="toPage('/medicalrecruit')" |
|||
> |
|||
<p class="text">招聘</p> |
|||
<div class="line" v-if="route.path == '/medicalrecruit'"></div> |
|||
</div> |
|||
</div> |
|||
<div class="phone_wrap"> |
|||
<img |
|||
:src="isChange || active ? Phone2 : Phone1" |
|||
class="phone_icon" |
|||
alt="" |
|||
/> |
|||
<p class="phone_text">137-1789-2018</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script setup> |
|||
import Logo1 from '@/assets/design/header/logo.png' |
|||
import Phone1 from '@/assets/design/header/phone.png' |
|||
import Logo2 from '@/assets/design/header/logo1.png' |
|||
import Phone2 from '@/assets/design/header/phone1.png' |
|||
import { onMounted, ref } from 'vue' |
|||
import { useRoute, useRouter } from 'vue-router' |
|||
import { useCountStore } from '@/store' |
|||
const countStore = useCountStore() |
|||
|
|||
const route = useRoute() |
|||
const router = useRouter() |
|||
|
|||
const isChange = ref(false) |
|||
|
|||
const props = defineProps({ |
|||
active: { |
|||
type: Boolean, |
|||
}, |
|||
}) |
|||
|
|||
const toHomePage = (path, p) => { |
|||
if (p) { |
|||
window.location.href = window.location.origin + '?p=' + p |
|||
} else { |
|||
router.push({ |
|||
path, |
|||
}) |
|||
} |
|||
} |
|||
const toDetail = t => { |
|||
document.body.scrollTop = document.documentElement.scrollTop = 0 |
|||
window.location.href = `${window.location.origin}/design-detail?t=${t}` |
|||
} |
|||
|
|||
const toPage = page => { |
|||
if (page != route.path) { |
|||
document.body.scrollTop = document.documentElement.scrollTop = 0 |
|||
const rootTag = document.getElementById('iflytop') |
|||
rootTag.style['overflow-y'] = 'scroll' |
|||
rootTag.style['overflow-x'] = 'hidden' |
|||
rootTag.style.height = 'auto' |
|||
router.push(page) |
|||
} |
|||
} |
|||
|
|||
const isFirstShow = ref(true) |
|||
|
|||
onMounted(() => { |
|||
window.onscroll = () => { |
|||
const screenHeight = document.documentElement.clientHeight |
|||
const scrollTop = |
|||
window.scrollTop || |
|||
document.documentElement.scrollTop || |
|||
document.body.scrollTop |
|||
const headerContainer = document.getElementById('header_container') |
|||
const headerHeight = headerContainer.offsetHeight |
|||
// 当下方real_container与顶部header接触时激活 |
|||
if (screenHeight - headerHeight <= scrollTop) { |
|||
isChange.value = true |
|||
} else { |
|||
isChange.value = false |
|||
} |
|||
|
|||
// 这里需要对数字滚动进行判断 |
|||
const fourCardTop = document |
|||
.getElementById('four_card_container') |
|||
?.getBoundingClientRect()?.top |
|||
if (screenHeight - 80 >= fourCardTop) { |
|||
// 当数字滚动到达页面中时进行滚动,仅需要执行一次 |
|||
if (isFirstShow.value) { |
|||
countStore.countAdd() |
|||
isFirstShow.value = false |
|||
} |
|||
} |
|||
} |
|||
}) |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.header_container { |
|||
padding: 18px 50px; |
|||
position: fixed; |
|||
top: 0; |
|||
left: 0; |
|||
right: 0; |
|||
z-index: 5; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: space-between; |
|||
transition-property: all; |
|||
z-index: 202; |
|||
transition-duration: 0.7s; |
|||
animation-fill-mode: forwards; |
|||
.logo { |
|||
width: 140px; |
|||
height: 32px; |
|||
cursor: pointer; |
|||
} |
|||
.right_oper_wrap { |
|||
display: flex; |
|||
align-items: center; |
|||
.btns { |
|||
display: flex; |
|||
align-items: center; |
|||
.btn { |
|||
cursor: pointer; |
|||
padding: 4px 0; |
|||
position: relative; |
|||
transition-property: all; |
|||
transition-duration: 0.3s; |
|||
animation-fill-mode: forwards; |
|||
.text { |
|||
width: 100px; |
|||
font-family: Source Han Sans CN; |
|||
font-size: 16px; |
|||
font-weight: normal; |
|||
line-height: normal; |
|||
padding: 4px 0; |
|||
letter-spacing: 0em; |
|||
font-feature-settings: 'kern' on; |
|||
color: #ffffff; |
|||
text-align: center; |
|||
&:hover { |
|||
font-weight: bold; |
|||
} |
|||
} |
|||
.select_modal { |
|||
position: absolute; |
|||
top: 36px; |
|||
left: 50%; |
|||
transform: translateX(-50%); |
|||
padding: 6px; |
|||
color: #000000; |
|||
white-space: nowrap; |
|||
border-radius: 8px; |
|||
background: #fff; |
|||
display: none; |
|||
box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.1); |
|||
.b { |
|||
padding: 12px 16px; |
|||
border-radius: 6px; |
|||
width: 100px; |
|||
display: flex; |
|||
font-size: 14px; |
|||
align-items: center; |
|||
justify-content: flex-start; |
|||
margin-bottom: 8px; |
|||
&:last-child { |
|||
margin-bottom: 0; |
|||
} |
|||
&:hover { |
|||
background: $theme-color; |
|||
color: #fff; |
|||
} |
|||
} |
|||
} |
|||
.line { |
|||
position: absolute; |
|||
bottom: 0; |
|||
left: 50%; |
|||
transform: translate(-50%); |
|||
width: 16px; |
|||
height: 2px; |
|||
border-radius: 276px; |
|||
background: #2a4ee1; |
|||
} |
|||
} |
|||
.service { |
|||
&:hover { |
|||
.select_modal { |
|||
display: block; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
.phone_wrap { |
|||
display: flex; |
|||
align-items: center; |
|||
.phone_icon { |
|||
width: 28px; |
|||
height: 28px; |
|||
margin-right: 12px; |
|||
} |
|||
.phone_text { |
|||
font-family: Poppins; |
|||
font-size: 16px; |
|||
font-weight: bold; |
|||
line-height: normal; |
|||
letter-spacing: 0.02em; |
|||
color: #ffffff; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
.active_header { |
|||
background: #fff; |
|||
|
|||
.right_oper_wrap { |
|||
.btns { |
|||
.btn { |
|||
.text { |
|||
color: #000000; |
|||
} |
|||
} |
|||
} |
|||
.phone_wrap { |
|||
.phone_text { |
|||
color: #000000; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,22 @@ |
|||
<template> |
|||
<div class="home_screen_container"> |
|||
<img :src="Bg" class="swiper_img" alt="" /> |
|||
</div> |
|||
</template> |
|||
|
|||
<script setup> |
|||
import Bg from '@/assets/img/medical/swiper/bg.png' |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.home_screen_container { |
|||
padding-top: 74px; |
|||
box-sizing: border-box; |
|||
position: relative; |
|||
.swiper_img { |
|||
width: 100vw; |
|||
height: auto; |
|||
object-fit: cover; |
|||
} |
|||
} |
|||
</style> |
@ -1,22 +1,20 @@ |
|||
<template> |
|||
<div class="home_screen_container"> |
|||
<img :src="Bg" class="swiper_img" alt="" /> |
|||
<img :src="HomeBG" class="img" alt="" /> |
|||
</div> |
|||
</template> |
|||
|
|||
<script setup> |
|||
import Bg from '@/assets/img/medical/swiper/bg.png' |
|||
import HomeBG from '@/assets/medical/1.png' |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.home_screen_container { |
|||
padding-top: 74px; |
|||
box-sizing: border-box; |
|||
position: relative; |
|||
.swiper_img { |
|||
width: 100vw; |
|||
padding-top: 68px; |
|||
background: #0937b3; |
|||
.img { |
|||
width: 100%; |
|||
height: auto; |
|||
object-fit: cover; |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,49 @@ |
|||
<template> |
|||
<div class="medical_container"> |
|||
<Header :active="true" /> |
|||
<HomeScreen /> |
|||
<div class="content_container"> |
|||
<HeaderLine |
|||
title="公司简介" |
|||
line1="梦工厂是一家医疗产品研发公司,成立于2010年,具有强大的研发实力和丰富的技术储备。公司秉持对医疗产品的热爱和敬畏之心,专注于研发高质量、可靠和美观的医疗产品" |
|||
line2="现有工程师50多人,办公面积2000多㎡,拥有三条SMT产线、三十余台机加工设备,服务客户300+" |
|||
/> |
|||
<Company /> |
|||
<HeaderLine title="优势服务领域" /> |
|||
<MedicalService /> |
|||
<HeaderLine title="医疗器械一站式研发量产服务" /> |
|||
<OneStep /> |
|||
<HeaderLine title="案例展示" /> |
|||
<Case /> |
|||
<HeaderLine title="能力储备" /> |
|||
<Ability /> |
|||
</div> |
|||
<Bottom /> |
|||
</div> |
|||
</template> |
|||
|
|||
<script setup> |
|||
import Header from 'cpns/Medical/Header' |
|||
import HomeScreen from 'cpns/Medical/HomeScreen' |
|||
import HeaderLine from 'cpns/design/HeaderLine' |
|||
import Company from 'cpns/Medical/Company' |
|||
import MedicalService from 'cpns/Medical/MedicalService' |
|||
import OneStep from 'cpns/Medical/OneStep' |
|||
import Case from 'cpns/Medical/Case' |
|||
import Ability from 'cpns/Medical/Ability' |
|||
import Bottom from 'cpns/NewBottom.vue' |
|||
import { onMounted } from 'vue' |
|||
|
|||
onMounted(() => { |
|||
document.body.scrollTop = document.documentElement.scrollTop = 0 |
|||
}) |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.medical_container { |
|||
background: #fff; |
|||
.content_container { |
|||
padding: 0 100px; |
|||
} |
|||
} |
|||
</style> |
@ -1,138 +0,0 @@ |
|||
<template> |
|||
<div class="recruit_container"> |
|||
<Header :active="true" /> |
|||
<div |
|||
class="card" |
|||
@click="showModal(item.id)" |
|||
v-for="item in postList" |
|||
:key="item.id" |
|||
> |
|||
<div class="title">{{ item.postName }}</div> |
|||
<div class="desc_box"> |
|||
<p class="desc"> |
|||
{{ item.postIntroduce }} |
|||
</p> |
|||
<div class="btn"> |
|||
<p class="text">查看详情</p> |
|||
<svg |
|||
xmlns="http://www.w3.org/2000/svg" |
|||
xmlns:xlink="http://www.w3.org/1999/xlink" |
|||
fill="none" |
|||
version="1.1" |
|||
width="20" |
|||
height="4" |
|||
viewBox="0 0 20 4" |
|||
> |
|||
<g> |
|||
<path |
|||
d="M19.9922,3.41357C20.0475,3.71869,19.8013,3.998,19.4754,4L0.524717,4C0.234187,4.00028,-0.00116205,3.77604,0.00000432898,3.50006C0.00000432898,3.2236,0.238414,2.99963,0.524717,2.99963L18.3818,2.99963L16.1219,0.851393C15.9164,0.656325,15.9171,0.339718,16.1235,0.145482C16.3287,-0.0494938,16.6655,-0.0469936,16.8661,0.143982L19.8464,2.97713C19.9717,3.09611,20.0201,3.25959,19.9922,3.41357Z" |
|||
fill="#FFFFFF" |
|||
fill-opacity="1" |
|||
/> |
|||
</g> |
|||
</svg> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<PostModal |
|||
:postInfo="postInfo" |
|||
v-if="modalVisible" |
|||
:hiddenDetailModal="hiddenDetailModal" |
|||
/> |
|||
</div> |
|||
<Bottom /> |
|||
</template> |
|||
|
|||
<script setup> |
|||
import Header from 'cpns/SoftHardware/Header' |
|||
import { postList, postDetail } from '@/mock/post' |
|||
import { ref } from 'vue' |
|||
import PostModal from 'cpns/post/PostModal' |
|||
import Bottom from 'cpns/NewBottomWhite.vue' |
|||
|
|||
const modalVisible = ref(false) |
|||
const postInfo = ref({}) |
|||
|
|||
const hiddenDetailModal = () => { |
|||
const rootTag = document.getElementById('iflytop') |
|||
rootTag.style['overflow-y'] = 'scroll' |
|||
rootTag.style['overflow-x'] = 'hidden' |
|||
rootTag.style.height = 'auto' |
|||
postInfo.value = {} |
|||
modalVisible.value = false |
|||
} |
|||
|
|||
const showModal = id => { |
|||
const rootTag = document.getElementById('iflytop') |
|||
rootTag.style.overflow = 'hidden' |
|||
rootTag.style.height = '100%' |
|||
postInfo.value = postDetail[id] |
|||
modalVisible.value = true |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.recruit_container { |
|||
background: #f6f6f6; |
|||
min-height: 100vh; |
|||
display: flex; |
|||
flex-direction: column; |
|||
align-items: center; |
|||
padding: 100px; |
|||
.card { |
|||
width: 80vw; |
|||
cursor: pointer; |
|||
margin-bottom: 40px; |
|||
background: #fff; |
|||
padding: 32px 42px 52px 32px; |
|||
border-radius: 10px; |
|||
.title { |
|||
font-family: Source Han Sans; |
|||
font-size: 36px; |
|||
font-weight: bold; |
|||
line-height: normal; |
|||
letter-spacing: 0.02em; |
|||
font-feature-settings: 'kern' on; |
|||
color: #000000; |
|||
padding-bottom: 32px; |
|||
border-bottom: 1px solid #d3d3d3; |
|||
} |
|||
.desc_box { |
|||
padding-top: 32px; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: space-between; |
|||
.desc { |
|||
font-family: Source Han Sans; |
|||
font-size: 18px; |
|||
font-weight: normal; |
|||
line-height: normal; |
|||
letter-spacing: 0.04em; |
|||
width: 70%; |
|||
font-feature-settings: 'kern' on; |
|||
color: #d3d3d3; |
|||
} |
|||
.btn { |
|||
padding: 10px 21px; |
|||
display: flex; |
|||
align-items: center; |
|||
border-radius: 383px; |
|||
background: linear-gradient(90deg, #16ddfa 0%, #305efc 100%); |
|||
.text { |
|||
margin-right: 11px; |
|||
font-family: Source Han Sans; |
|||
font-size: 16px; |
|||
font-weight: normal; |
|||
line-height: normal; |
|||
letter-spacing: 0.04em; |
|||
font-feature-settings: 'kern' on; |
|||
color: #ffffff; |
|||
} |
|||
} |
|||
} |
|||
&:hover { |
|||
box-shadow: 0px 4px 16px 0px rgba(0, 0, 0, 0.06); |
|||
} |
|||
} |
|||
} |
|||
</style> |
@ -1,138 +0,0 @@ |
|||
<template> |
|||
<div class="recruit_container"> |
|||
<Header :active="true" /> |
|||
<div |
|||
class="card" |
|||
@click="showModal(item.id)" |
|||
v-for="item in postList" |
|||
:key="item.id" |
|||
> |
|||
<div class="title">{{ item.postName }}</div> |
|||
<div class="desc_box"> |
|||
<p class="desc"> |
|||
{{ item.postIntroduce }} |
|||
</p> |
|||
<div class="btn"> |
|||
<p class="text">查看详情</p> |
|||
<svg |
|||
xmlns="http://www.w3.org/2000/svg" |
|||
xmlns:xlink="http://www.w3.org/1999/xlink" |
|||
fill="none" |
|||
version="1.1" |
|||
width="20" |
|||
height="4" |
|||
viewBox="0 0 20 4" |
|||
> |
|||
<g> |
|||
<path |
|||
d="M19.9922,3.41357C20.0475,3.71869,19.8013,3.998,19.4754,4L0.524717,4C0.234187,4.00028,-0.00116205,3.77604,0.00000432898,3.50006C0.00000432898,3.2236,0.238414,2.99963,0.524717,2.99963L18.3818,2.99963L16.1219,0.851393C15.9164,0.656325,15.9171,0.339718,16.1235,0.145482C16.3287,-0.0494938,16.6655,-0.0469936,16.8661,0.143982L19.8464,2.97713C19.9717,3.09611,20.0201,3.25959,19.9922,3.41357Z" |
|||
fill="#FFFFFF" |
|||
fill-opacity="1" |
|||
/> |
|||
</g> |
|||
</svg> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<PostModal |
|||
:postInfo="postInfo" |
|||
v-if="modalVisible" |
|||
:hiddenDetailModal="hiddenDetailModal" |
|||
/> |
|||
</div> |
|||
<Bottom /> |
|||
</template> |
|||
|
|||
<script setup> |
|||
import Header from 'cpns/design/Header' |
|||
import Bottom from 'cpns/NewBottomWhite.vue' |
|||
import { postList, postDetail } from '@/mock/post' |
|||
import { ref } from 'vue' |
|||
import PostModal from 'cpns/post/PostModal' |
|||
|
|||
const modalVisible = ref(false) |
|||
const postInfo = ref({}) |
|||
|
|||
const hiddenDetailModal = () => { |
|||
const rootTag = document.getElementById('iflytop') |
|||
rootTag.style['overflow-y'] = 'scroll' |
|||
rootTag.style['overflow-x'] = 'hidden' |
|||
rootTag.style.height = 'auto' |
|||
postInfo.value = {} |
|||
modalVisible.value = false |
|||
} |
|||
|
|||
const showModal = id => { |
|||
const rootTag = document.getElementById('iflytop') |
|||
rootTag.style.overflow = 'hidden' |
|||
rootTag.style.height = '100%' |
|||
postInfo.value = postDetail[id] |
|||
modalVisible.value = true |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.recruit_container { |
|||
background: #f6f6f6; |
|||
min-height: 100vh; |
|||
display: flex; |
|||
flex-direction: column; |
|||
align-items: center; |
|||
padding: 100px; |
|||
.card { |
|||
width: 80vw; |
|||
cursor: pointer; |
|||
margin-bottom: 40px; |
|||
background: #fff; |
|||
padding: 32px 42px 52px 32px; |
|||
border-radius: 10px; |
|||
.title { |
|||
font-family: Source Han Sans; |
|||
font-size: 36px; |
|||
font-weight: bold; |
|||
line-height: normal; |
|||
letter-spacing: 0.02em; |
|||
font-feature-settings: 'kern' on; |
|||
color: #000000; |
|||
padding-bottom: 32px; |
|||
border-bottom: 1px solid #d3d3d3; |
|||
} |
|||
.desc_box { |
|||
padding-top: 32px; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: space-between; |
|||
.desc { |
|||
font-family: Source Han Sans; |
|||
font-size: 18px; |
|||
font-weight: normal; |
|||
line-height: normal; |
|||
letter-spacing: 0.04em; |
|||
width: 70%; |
|||
font-feature-settings: 'kern' on; |
|||
color: #d3d3d3; |
|||
} |
|||
.btn { |
|||
padding: 10px 21px; |
|||
display: flex; |
|||
align-items: center; |
|||
border-radius: 383px; |
|||
background: linear-gradient(90deg, #16ddfa 0%, #305efc 100%); |
|||
.text { |
|||
margin-right: 11px; |
|||
font-family: Source Han Sans; |
|||
font-size: 16px; |
|||
font-weight: normal; |
|||
line-height: normal; |
|||
letter-spacing: 0.04em; |
|||
font-feature-settings: 'kern' on; |
|||
color: #ffffff; |
|||
} |
|||
} |
|||
} |
|||
&:hover { |
|||
box-shadow: 0px 4px 16px 0px rgba(0, 0, 0, 0.06); |
|||
} |
|||
} |
|||
} |
|||
</style> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue