feat: 提交

This commit is contained in:
owen 2025-02-16 22:37:26 +08:00
parent bdd05ce340
commit 56aaafc423
37 changed files with 175 additions and 59 deletions

19
package-lock.json generated
View File

@ -15,7 +15,8 @@
"@vitejs/plugin-vue": "^5.2.1", "@vitejs/plugin-vue": "^5.2.1",
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"daisyui": "^4.12.23", "daisyui": "^4.12.23",
"postcss": "^8.5.1", "postcss": "^8.5.2",
"postcss-pxtorem": "^6.1.0",
"tailwindcss": "^3.4.17", "tailwindcss": "^3.4.17",
"vite": "^6.0.5" "vite": "^6.0.5"
} }
@ -1974,9 +1975,9 @@
} }
}, },
"node_modules/postcss": { "node_modules/postcss": {
"version": "8.5.1", "version": "8.5.2",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.1.tgz", "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.2.tgz",
"integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", "integrity": "sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@ -2101,6 +2102,16 @@
"postcss": "^8.2.14" "postcss": "^8.2.14"
} }
}, },
"node_modules/postcss-pxtorem": {
"version": "6.1.0",
"resolved": "https://registry.npmmirror.com/postcss-pxtorem/-/postcss-pxtorem-6.1.0.tgz",
"integrity": "sha512-ROODSNci9ADal3zUcPHOF/K83TiCgNSPXQFSbwyPHNV8ioHIE4SaC+FPOufd8jsr5jV2uIz29v1Uqy1c4ov42g==",
"dev": true,
"license": "MIT",
"peerDependencies": {
"postcss": "^8.0.0"
}
},
"node_modules/postcss-selector-parser": { "node_modules/postcss-selector-parser": {
"version": "6.1.2", "version": "6.1.2",
"resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",

View File

@ -16,7 +16,8 @@
"@vitejs/plugin-vue": "^5.2.1", "@vitejs/plugin-vue": "^5.2.1",
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"daisyui": "^4.12.23", "daisyui": "^4.12.23",
"postcss": "^8.5.1", "postcss": "^8.5.2",
"postcss-pxtorem": "^6.1.0",
"tailwindcss": "^3.4.17", "tailwindcss": "^3.4.17",
"vite": "^6.0.5" "vite": "^6.0.5"
} }

View File

@ -1,3 +1,16 @@
// postcss.config.js
module.exports = { module.exports = {
plugins: [require('tailwindcss'), require('autoprefixer')], plugins: [
require('tailwindcss'),
require('autoprefixer'),
require('postcss-pxtorem')({
rootValue: 16, // 设置根字体大小,通常为 16px你可以根据设计稿的基准修改
unitPrecision: 5, // 设置转换后的 rem 单位的精度
propList: ['*'], // 可以设置哪些属性需要转换,*表示所有属性
selectorBlackList: [], // 不需要转换的类名数组,可以为空
replace: true, // 是否直接替换原有的 px 单位
mediaQuery: false, // 是否转换媒体查询中的 px 单位
minPixelValue: 0, // 小于该值的 px 单位不进行转换
})
]
}; };

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
src/assets/Frame 50.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 825 KiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
src/assets/image 101.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
src/assets/image 122.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
src/assets/image 123.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
src/assets/image 124.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
src/assets/image 125.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

BIN
src/assets/image 48.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

@ -1,6 +1,19 @@
import { createApp } from 'vue' import { createApp } from "vue";
import './style.css' import "./style.css";
import App from './App.vue' import App from "./App.vue";
import router from './router' import router from "./router";
createApp(App).use(router).mount('#app') function setRootFontSize() {
const baseWidth = 1920; // 假设设计稿宽度为 1920px可以根据实际设计稿调整
const clientWidth = document.documentElement.clientWidth || window.innerWidth;
const rootFontSize = (clientWidth / baseWidth) * 16; // 基准字体大小为 16px
document.documentElement.style.fontSize = rootFontSize + "px";
}
// 页面加载时设置
setRootFontSize();
// 当窗口大小变化时重新设置
window.addEventListener("resize", setRootFontSize);
createApp(App).use(router).mount("#app");

View File

@ -100,22 +100,24 @@
</div> </div>
</div> </div>
</div> </div>
<div class="w-full custom-bgc-introduce py-[100px]"> <div class="w-full custom-bgc-introduce py-[100px] relative">
<div class="max-w-screen-xl mx-auto introduce-content"> <img class="absolute right-[20px] top-[25px] w-[284px]" src="../assets/Mask group (1).png" alt="" />
<div class="max-w-screen-xl mx-auto introduce-content flex items-center flex-col justify-center">
<div class="flex items-center mb-[82px]"> <div class="flex items-center mb-[82px]">
<div class="flex flex-col text-introduce-text mr-[100px]"> <div class="flex flex-col text-introduce-text mr-[100px]">
<h1 class="text-3xl font-bold">灵活自定义</h1> <h1 class="text-3xl font-bold leading-[68px]">灵活自定义可完美适配</h1>
<h1 class="text-3xl font-bold">可完美适配</h1> <h1 class="text-3xl font-bold leading-[68px]">您独特的样品管理场景</h1>
<h1 class="text-3xl font-bold">您独特的样品管理场景</h1>
</div> </div>
<div class="flex-1 text-[18px] leading-[28px] text-white"> <div class="flex-1 text-[16px] leading-[36px] text-white">
鉴于公司业务的差异各实验室均有自己样本管理上的独特性 <div>鉴于公司业务的差异各实验室均有自己样本管理上的独特性</div>
<div>
因此为了能够充分适配具体的管理特点系统在管理要素上提供足够的自定义空间包括但不限于样本类型样本属性容器结构冻存架结构编码方式标签模板等等... 因此为了能够充分适配具体的管理特点系统在管理要素上提供足够的自定义空间包括但不限于样本类型样本属性容器结构冻存架结构编码方式标签模板等等...
以此系统可确保与具体样本管理场景的灵活适配 </div>
<div>以此系统可确保与具体样本管理场景的灵活适配</div>
</div> </div>
</div> </div>
<div class="flex gap-[20px] justify-between"> <div class="w-full flex gap-[20px] justify-between">
<div class="flex flex-col items-center"> <div class="flex flex-col items-center">
<img src="../assets/image 83.png" class="w-[170px] h-[170px] mb-[20px]" /> <img src="../assets/image 83.png" class="w-[170px] h-[170px] mb-[20px]" />
<div class="text-[14px] leading-[28px] text-white">样本类型</div> <div class="text-[14px] leading-[28px] text-white">样本类型</div>
@ -141,9 +143,9 @@
</div> </div>
</div> </div>
<div class="max-w-screen-xl mx-auto py-[100px]"> <div class="max-w-screen-xl mx-auto py-[100px] text-white">
<div class="text-center text-[32px] font-bold mb-[40px]">面向生物药场景而设计适合各细分领域</div> <div class="text-center text-[32px] font-bold mb-[40px]">面向生物药场景而设计适合各细分领域</div>
<div class="flex-1 text-[18px] leading-[28px] mb-[40px]"> <div class="flex-1 text-[16px] leading-[36px] mb-[40px] text-content-spec">
药企样品管理场景在业务流程操作方式数据管理实施落地方面均有其特殊性这也是通用型或者医院型样本管理软件无法完全胜任的原因三优云试剂管家 药企样品管理场景在业务流程操作方式数据管理实施落地方面均有其特殊性这也是通用型或者医院型样本管理软件无法完全胜任的原因三优云试剂管家
专门面向生物药企的样本管理场景而设计如果您的实验室属于生物药及相关范畴那么本产品将是您样本管理的不二之选 专门面向生物药企的样本管理场景而设计如果您的实验室属于生物药及相关范畴那么本产品将是您样本管理的不二之选
</div> </div>
@ -182,21 +184,21 @@
<div class="text-left text-[32px] font-bold">可供多研发项目/多部门</div> <div class="text-left text-[32px] font-bold">可供多研发项目/多部门</div>
<div class="text-left text-[32px] font-bold mb-[40px]">共同管理样本</div> <div class="text-left text-[32px] font-bold mb-[40px]">共同管理样本</div>
<div class="flex mb-[40px]"> <div class="flex mb-[40px]">
<div class="text-[16px] w-[500px]"> <div class="text-[16px] w-[500px] text-content-spec">
系统通过样本数据的灵活授权数据分级等方式可确保各个项目/各个部门单独管理自己的容器与样本而不会相互干扰 系统通过样本数据的灵活授权数据分级等方式可确保各个项目/各个部门单独管理自己的容器与样本而不会相互干扰
</div> </div>
<div class="flex-1 flex gap-[10px] justify-end"> <div class="flex-1 flex gap-[10px] justify-end">
<div class="custom-btn-bg"> <div class="custom-btn-bg">
<img class="w-[56px]" src="../assets/Frame 43.png" /> <img class="w-[56px]" src="../assets/Frame 43.png" />
<span class="text-[12px] leading-3">RESEARCH AND DEVELOPMENT</span> <span class="text-[12px] leading-3 text-icon-spec">RESEARCH AND DEVELOPMENT</span>
</div> </div>
<div class="custom-btn-bg"> <div class="custom-btn-bg">
<img class="w-[56px]" src="../assets/Frame 45.png" /> <img class="w-[56px]" src="../assets/Frame 45.png" />
<span class="text-[12px] leading-3">CONDUCT PRODUCTION</span> <span class="text-[12px] leading-3 text-icon-spec">CONDUCT PRODUCTION</span>
</div> </div>
<div class="custom-btn-bg"> <div class="custom-btn-bg">
<img class="w-[56px]" src="../assets/Frame 47.png" /> <img class="w-[56px]" src="../assets/Frame 47.png" />
<span class="text-[12px] leading-3">CONDUCT QUALITY CHECK</span> <span class="text-[12px] leading-3 text-icon-spec">CONDUCT QUALITY CHECK</span>
</div> </div>
<!-- <img src="../assets/image 29.png" class="w-[154px] h-[154px] mb-[20px]" /> --> <!-- <img src="../assets/image 29.png" class="w-[154px] h-[154px] mb-[20px]" /> -->
</div> </div>
@ -209,62 +211,121 @@
<a role="tab" :class="{ tab: true, 'tab-active': tabActive === 'tab2' }" @click="tabActive = 'tab2'">可对接软件</a> <a role="tab" :class="{ tab: true, 'tab-active': tabActive === 'tab2' }" @click="tabActive = 'tab2'">可对接软件</a>
</div> </div>
</div> </div>
<div class="flex flex-wrap mt-[47px]"> <div class="flex flex-wrap mt-[47px] gap-x-[140px] gap-y-[48px]">
<div <div v-for="item in hardwareList" class="custom-boder-wrap">
v-for="(item, num) in hardwareList"
class="bg-white w-[214px] custom-boder-wrap"
:style="{ 'margin-right': num !== 0 && num % 3 === 0 ? '0px' : '140px', 'margin-bottom': '48px' }"
>
<img class="w-full" :src="item" alt="" /> <img class="w-full" :src="item" alt="" />
</div> </div>
</div> </div>
</div> </div>
<div class="w-full custom-bgc-cooperation py-[100px]">
<div class="max-w-screen-xl mx-auto cooperation-content text-white">
<div class="text-center text-[32px] font-bold mb-[40px]">合作客户</div>
<div class="w-full grid grid-cols-5 gap-4">
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-1.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-2.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-3.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-4.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-5.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-6.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-7.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-8.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-9.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-10.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-11.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-12.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-13.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-14.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-15.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-16.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-17.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-18.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-19.png" alt="">
</div>
<div class="w-[229px] h-[124px]">
<img src="../assets/company/image-20.png" alt="">
</div>
</div>
<!-- <img src="../assets/image 20.png" class="w-full" alt="Tailwind CSS Carousel component" /> -->
</div>
</div>
<div class="w-full"> <div class="w-full">
<div class="max-w-screen-xl mx-auto py-[74px]"> <div class="max-w-screen-xl mx-auto py-[74px] text-white">
<div class="text-center text-[32px] font-bold mb-[117px]">功能简述</div> <div class="text-center text-[32px] font-bold mb-[40px]">功能简述</div>
<div class="flex justify-between flex-wrap"> <div class="flex justify-between flex-wrap">
<div class="flex-custom-item relative flex justify-center flex-col mb-[80px]"> <div class="flex-custom-item relative flex justify-center flex-col mb-[24px]">
<img class="w-[86px] absolute left-[50%] translate-x-[-50%] top-[0px] translate-y-[-70%]" src="../assets/image 53.png" alt="" />
<div class="text-center text-[24px] font-bold mt-[32px]">出入库</div> <div class="text-center text-[24px] font-bold mt-[32px]">出入库</div>
<div class="flex-1 text-center text-custom-content flex items-center"> <div class="flex-1 text-center text-custom-content flex items-center">
入库出库样品盘点及存储功能支持对样 品进行分类编码登记和存储位置管理等 入库出库样品盘点及存储功能支持对样 品进行分类编码登记和存储位置管理等
</div> </div>
</div> </div>
<div class="flex-custom-item relative flex justify-center flex-col mb-[80px]"> <div class="flex-custom-item relative flex justify-center flex-col mb-[24px]">
<img class="w-[86px] absolute left-[50%] translate-x-[-50%] top-[0px] translate-y-[-70%]" src="../assets/image 53.png" alt="" />
<div class="text-center text-[24px] font-bold mt-[32px]">容器管理</div> <div class="text-center text-[24px] font-bold mt-[32px]">容器管理</div>
<div class="text-center text-custom-content flex-1 flex items-center"> <div class="text-center text-custom-content flex-1 flex items-center">
多维度自定义设备容器结构层级可视化样品 定位入库出库移库等快速精准查找样品 位置和状态 多维度自定义设备容器结构层级可视化样品 定位入库出库移库等快速精准查找样品 位置和状态
</div> </div>
</div> </div>
<div class="flex-custom-item relative flex justify-center flex-col mb-[80px]"> <div class="flex-custom-item relative flex justify-center flex-col mb-[24px]">
<img class="w-[86px] absolute left-[50%] translate-x-[-50%] top-[0px] translate-y-[-70%]" src="../assets/image 53.png" alt="" />
<div class="text-center text-[24px] font-bold mt-[32px]">用户管理</div> <div class="text-center text-[24px] font-bold mt-[32px]">用户管理</div>
<div class="text-center text-custom-content flex-1 flex items-center"> <div class="text-center text-custom-content flex-1 flex items-center">
多用户多角色权限明确划分配置审批流 和数据安全严格遵循标准执行灵活自定义 可完美匹配 多用户多角色权限明确划分配置审批流 和数据安全严格遵循标准执行灵活自定义 可完美匹配
</div> </div>
</div> </div>
<div class="flex-custom-item relative flex justify-center flex-col mb-[80px]"> <div class="flex-custom-item relative flex justify-center flex-col mb-[24px]">
<img class="w-[86px] absolute left-[50%] translate-x-[-50%] top-[0px] translate-y-[-70%]" src="../assets/image 66.png" alt="" />
<div class="text-center text-[24px] font-bold mt-[32px]">检索追踪</div> <div class="text-center text-[24px] font-bold mt-[32px]">检索追踪</div>
<div class="text-center text-custom-content flex-1 flex items-center"> <div class="text-center text-custom-content flex-1 flex items-center">
通过样品编号名称类型等多种方式快速定 位样品信息实时记录样品的流通和 使用情况综合查询 通过样品编号名称类型等多种方式快速定 位样品信息实时记录样品的流通和 使用情况综合查询
</div> </div>
</div> </div>
<div class="flex-custom-item relative flex justify-center flex-col mb-[80px]"> <div class="flex-custom-item relative flex justify-center flex-col mb-[24px]">
<img class="w-[86px] absolute left-[50%] translate-x-[-50%] top-[0px] translate-y-[-70%]" src="../assets/image 57.png" alt="" />
<div class="text-center text-[24px] font-bold mt-[32px]">库存库位</div> <div class="text-center text-[24px] font-bold mt-[32px]">库存库位</div>
<div class="text-center text-custom-content flex-1 flex items-center"> <div class="text-center text-custom-content flex-1 flex items-center">
分类编码库位规划布局以及智能化推荐库位 过标识迅速追踪定位支持可视化自定义创建库 实现了通过库位查样品或通过样品查库位 分类编码库位规划布局以及智能化推荐库位 过标识迅速追踪定位支持可视化自定义创建库 实现了通过库位查样品或通过样品查库位
</div> </div>
</div> </div>
<div class="flex-custom-item relative flex justify-center flex-col mb-[80px]"> <div class="flex-custom-item relative flex justify-center flex-col mb-[24px]">
<img class="w-[86px] absolute left-[50%] translate-x-[-50%] top-[0px] translate-y-[-70%]" src="../assets/image 67.png" alt="" />
<div class="text-center text-[24px] font-bold mt-[32px]">系统管理</div> <div class="text-center text-[24px] font-bold mt-[32px]">系统管理</div>
<div class="text-center text-custom-content flex-1 flex items-center"> <div class="text-center text-custom-content flex-1 flex items-center">
菜单按钮公告附件基础数据消息通知 配置全局字典等系统配置 菜单按钮公告附件基础数据消息通知 配置全局字典等系统配置
@ -272,7 +333,6 @@
</div> </div>
<div class="flex-custom-item relative flex justify-center flex-col"> <div class="flex-custom-item relative flex justify-center flex-col">
<img class="w-[86px] absolute left-[50%] translate-x-[-50%] top-[0px] translate-y-[-70%]" src="../assets/image 59.png" alt="" />
<div class="text-center text-[24px] font-bold mt-[32px]">库存预警</div> <div class="text-center text-[24px] font-bold mt-[32px]">库存预警</div>
<div class="text-center text-custom-content flex-1 flex items-center"> <div class="text-center text-custom-content flex-1 flex items-center">
动态监控样品库存状态库存量查询与统计 根据阈值实时检测库存量低于阈值企微 邮件短信等渠道即刻发出预警通知 动态监控样品库存状态库存量查询与统计 根据阈值实时检测库存量低于阈值企微 邮件短信等渠道即刻发出预警通知
@ -280,7 +340,6 @@
</div> </div>
<div class="flex-custom-item relative flex justify-center flex-col"> <div class="flex-custom-item relative flex justify-center flex-col">
<img class="w-[86px] absolute left-[50%] translate-x-[-50%] top-[0px] translate-y-[-70%]" src="../assets/image 68.png" alt="" />
<div class="text-center text-[24px] font-bold mt-[32px]">可视化页面</div> <div class="text-center text-[24px] font-bold mt-[32px]">可视化页面</div>
<div class="text-center text-custom-content flex-1 flex items-center"> <div class="text-center text-custom-content flex-1 flex items-center">
直观展示设备使用情况和库存库位信息具备实时 更新交互查询全局可观等功能支持快速了 解使用率预警情况及库位布局 直观展示设备使用情况和库存库位信息具备实时 更新交互查询全局可观等功能支持快速了 解使用率预警情况及库位布局
@ -288,7 +347,6 @@
</div> </div>
<div class="flex-custom-item relative flex justify-center flex-col"> <div class="flex-custom-item relative flex justify-center flex-col">
<img class="w-[86px] absolute left-[50%] translate-x-[-50%] top-[0px] translate-y-[-70%]" src="../assets/image 61.png" alt="" />
<div class="text-center text-[24px] font-bold mt-[32px]">自由扩展</div> <div class="text-center text-[24px] font-bold mt-[32px]">自由扩展</div>
<div class="text-center text-custom-content flex-1 flex items-center"> <div class="text-center text-custom-content flex-1 flex items-center">
支持接入智能化监控设备如温感烟感温湿 器等设备提供REST API接口衔接各种 LIMS系统 支持接入智能化监控设备如温感烟感温湿 器等设备提供REST API接口衔接各种 LIMS系统
@ -297,7 +355,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="w-full service-custom-bg py-[60px]"> <div class="w-full py-[60px] text-white">
<div class="max-w-screen-xl mx-auto"> <div class="max-w-screen-xl mx-auto">
<div class="text-center text-[32px] font-bold mb-[40px]">服务与价格</div> <div class="text-center text-[32px] font-bold mb-[40px]">服务与价格</div>
<div class="flex gap-[28px]"> <div class="flex gap-[28px]">
@ -334,7 +392,13 @@
import { computed, ref } from "vue"; import { computed, ref } from "vue";
import Header from "../components/Header.vue"; import Header from "../components/Header.vue";
import Footer from "../components/Footer.vue"; import Footer from "../components/Footer.vue";
import Image222 from "../assets/image 222.png"; import Image101 from "../assets/image 101.png";
import Image48 from "../assets/image 48.png";
import Frame50 from "../assets/Frame 50.png";
import Image122 from "../assets/image 122.png";
import Image123 from "../assets/image 123.png";
import Image124 from "../assets/image 124.png";
import Image125 from "../assets/image 125.png";
const handleClick = (index) => { const handleClick = (index) => {
btnList.value.forEach((item) => { btnList.value.forEach((item) => {
@ -349,9 +413,9 @@ const showAllList = computed(() => {
return tabActive.value === "tab1" ? hardwareList.value : softwareList.value; return tabActive.value === "tab1" ? hardwareList.value : softwareList.value;
}); });
const hardwareList = ref([Image222, Image222, Image222, Image222, Image222]); const hardwareList = ref([Image101, Image48, Frame50, Image122, Image123, Image124, Image125]);
const softwareList = ref([Image222, Image222, Image222, Image222, Image222]); const softwareList = ref([]);
const btnList = ref([ const btnList = ref([
{ {
@ -393,7 +457,15 @@ const btnList = ref([
.custom-bgc-introduce { .custom-bgc-introduce {
/* height: 568px; */ /* height: 568px; */
background-image: url("../assets/Rectangle 83.png"); background-image: url("../assets/Rectangle 83.png");
background-size: calc(100% - 40px) 100%; /* 宽度是100%去掉左右各20px */ background-size: calc(100% - 40px) auto; /* 宽度是100%去掉左右各20px */
background-position: 20px center; /* 背景图片左右各20px垂直居中 */
background-repeat: no-repeat; /* 防止图片重复 */
margin: 0; /* 去除默认的边距 */
}
.custom-bgc-cooperation {
background-image: url("../assets/Mask group (2).png");
background-size: calc(100% - 40px) auto; /* 宽度是100%去掉左右各20px */
background-position: 20px center; /* 背景图片左右各20px垂直居中 */ background-position: 20px center; /* 背景图片左右各20px垂直居中 */
background-repeat: no-repeat; /* 防止图片重复 */ background-repeat: no-repeat; /* 防止图片重复 */
margin: 0; /* 去除默认的边距 */ margin: 0; /* 去除默认的边距 */
@ -415,7 +487,8 @@ const btnList = ref([
width: 214px; width: 214px;
height: 214px; height: 214px;
border-radius: 8px; border-radius: 8px;
border: 1px solid #d9d9d9; border: 1px solid rgba(217, 250, 255, 0.3);
padding: 20px;
} }
.flex-custom-item { .flex-custom-item {
@ -426,14 +499,13 @@ const btnList = ref([
} }
.text-custom-content { .text-custom-content {
font-family: PingFang SC;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
line-height: 24px; line-height: 24px;
color: rgba(255, 255, 255, 0.8);
text-align: center; text-align: center;
text-underline-position: from-font; text-underline-position: from-font;
text-decoration-skip-ink: none; text-decoration-skip-ink: none;
color: #666666;
padding: 0px 16px; padding: 0px 16px;
} }
@ -530,6 +602,12 @@ const btnList = ref([
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
} }
.introduce-content { .introduce-content {
min-height: 568px; height: 568px;
}
.cooperation-content {
height: 675px;
}
.text-icon-spec {
color: rgba(255, 255, 255, 0.7);
} }
</style> </style>