Compare commits

...

4 Commits

Author SHA1 Message Date
tianyongbao
1088900edc fix:功能优化。 2025-12-12 08:11:00 +08:00
tianyongbao
002dfab973 fix: 网址优化。 2025-12-11 23:52:50 +08:00
tianyongbao
3823ea1178 更新工作台页面标题和描述 2025-12-11 23:41:30 +08:00
tianyongbao
f29ea20fa5 fix: 网址优化完善。 2025-12-11 23:37:22 +08:00
2 changed files with 394 additions and 444 deletions

View File

@@ -4,7 +4,7 @@
<meta charset="utf-8"/> <meta charset="utf-8"/>
<meta name="Keywords" content="记账平台,健康档案,茅台预约"/> <meta name="Keywords" content="记账平台,健康档案,茅台预约"/>
<meta name="Description" <meta name="Description"
content="智聪网络科技"/> content="智聪工作台"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
<meta name="apple-mobile-web-app-capable" content="yes"/> <meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"/> <meta name="apple-mobile-web-app-status-bar-style" content="black"/>
@@ -12,7 +12,7 @@
<meta http-equiv="x-dns-prefetch-control" content="on"/> <meta http-equiv="x-dns-prefetch-control" content="on"/>
<link rel="icon" href="/static/favicon.ico" /> <link rel="icon" href="/static/favicon.ico" />
<link rel="dns-prefetch" href="http://www.qdintc.com"/> <link rel="dns-prefetch" href="http://www.qdintc.com"/>
<title>智聪网络科技</title> <title>智聪工作台</title>
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>

View File

@@ -1,176 +1,31 @@
<template> <template>
<page class="home-page workbench-page"> <page class="home-page workbench-page">
<!-- 固定标题栏 -->
<div class="workbench-header"> <div class="workbench-header">
<h1>Qdintc - 统一工作平台</h1> <h1>海纳云 - 统一工作平台</h1>
</div> </div>
<!-- 主内容区 -->
<div class="workbench-container"> <div class="workbench-container">
<div class="tools-container"> <div class="tools-container">
<!-- 代码管理 --> <!-- 工具分类循环渲染 -->
<div class="tool-category" v-if="codeTools.length > 0"> <div
<h2 class="category-title">代码管理</h2> v-for="category in categories"
:key="category.key"
v-show="category.tools.length > 0"
class="tool-category"
>
<h2 class="category-title">{{ category.title }}</h2>
<div class="category-items"> <div class="category-items">
<div class="tool-card" v-for="tool in codeTools" :key="tool.name" @click="openTool(tool.url)"> <div
<div class="tool-icon" :style="{background: tool.color}"> v-for="tool in category.tools"
<span class="icon-text">{{ tool.icon }}</span> :key="tool.name"
</div> class="tool-card"
@click="openTool(tool.url)"
:title="tool.desc + ' - ' + tool.displayUrl"
>
<div class="tool-info"> <div class="tool-info">
<h4 class="tool-name">{{ tool.name }}</h4> <h4 class="tool-name">{{ tool.name }}</h4>
<p class="tool-desc">{{ tool.desc }}</p>
<p class="tool-url">{{ tool.displayUrl }}</p>
</div>
</div>
</div>
</div>
<!-- 持续集成 -->
<div class="tool-category" v-if="ciTools.length > 0">
<h2 class="category-title">持续集成</h2>
<div class="category-items">
<div class="tool-card" v-for="tool in ciTools" :key="tool.name" @click="openTool(tool.url)">
<div class="tool-icon" :style="{background: tool.color}">
<span class="icon-text">{{ tool.icon }}</span>
</div>
<div class="tool-info">
<h4 class="tool-name">{{ tool.name }}</h4>
<p class="tool-desc">{{ tool.desc }}</p>
<p class="tool-url">{{ tool.displayUrl }}</p>
</div>
</div>
</div>
</div>
<!-- 项目管理 -->
<div class="tool-category" v-if="projectTools.length > 0">
<h2 class="category-title">项目管理</h2>
<div class="category-items">
<div class="tool-card" v-for="tool in projectTools" :key="tool.name" @click="openTool(tool.url)">
<div class="tool-icon" :style="{background: tool.color}">
<span class="icon-text">{{ tool.icon }}</span>
</div>
<div class="tool-info">
<h4 class="tool-name">{{ tool.name }}</h4>
<p class="tool-desc">{{ tool.desc }}</p>
<p class="tool-url">{{ tool.displayUrl }}</p>
</div>
</div>
</div>
</div>
<!-- 数据库 -->
<div class="tool-category" v-if="databaseTools.length > 0">
<h2 class="category-title">数据库</h2>
<div class="category-items">
<div class="tool-card" v-for="tool in databaseTools" :key="tool.name" @click="openTool(tool.url)">
<div class="tool-icon" :style="{background: tool.color}">
<span class="icon-text">{{ tool.icon }}</span>
</div>
<div class="tool-info">
<h4 class="tool-name">{{ tool.name }}</h4>
<p class="tool-desc">{{ tool.desc }}</p>
<p class="tool-url">{{ tool.displayUrl }}</p>
</div>
</div>
</div>
</div>
<!-- 监控告警 -->
<div class="tool-category" v-if="monitorTools.length > 0">
<h2 class="category-title">监控告警</h2>
<div class="category-items">
<div class="tool-card" v-for="tool in monitorTools" :key="tool.name" @click="openTool(tool.url)">
<div class="tool-icon" :style="{background: tool.color}">
<span class="icon-text">{{ tool.icon }}</span>
</div>
<div class="tool-info">
<h4 class="tool-name">{{ tool.name }}</h4>
<p class="tool-desc">{{ tool.desc }}</p>
<p class="tool-url">{{ tool.displayUrl }}</p>
</div>
</div>
</div>
</div>
<!-- 文档知识 -->
<div class="tool-category" v-if="docTools.length > 0">
<h2 class="category-title">文档知识</h2>
<div class="category-items">
<div class="tool-card" v-for="tool in docTools" :key="tool.name" @click="openTool(tool.url)">
<div class="tool-icon" :style="{background: tool.color}">
<span class="icon-text">{{ tool.icon }}</span>
</div>
<div class="tool-info">
<h4 class="tool-name">{{ tool.name }}</h4>
<p class="tool-desc">{{ tool.desc }}</p>
<p class="tool-url">{{ tool.displayUrl }}</p>
</div>
</div>
</div>
</div>
<!-- 测试工具 -->
<div class="tool-category" v-if="testTools.length > 0">
<h2 class="category-title">测试工具</h2>
<div class="category-items">
<div class="tool-card" v-for="tool in testTools" :key="tool.name" @click="openTool(tool.url)">
<div class="tool-icon" :style="{background: tool.color}">
<span class="icon-text">{{ tool.icon }}</span>
</div>
<div class="tool-info">
<h4 class="tool-name">{{ tool.name }}</h4>
<p class="tool-desc">{{ tool.desc }}</p>
<p class="tool-url">{{ tool.displayUrl }}</p>
</div>
</div>
</div>
</div>
<!-- 安全扫描 -->
<div class="tool-category" v-if="securityTools.length > 0">
<h2 class="category-title">安全扫描</h2>
<div class="category-items">
<div class="tool-card" v-for="tool in securityTools" :key="tool.name" @click="openTool(tool.url)">
<div class="tool-icon" :style="{background: tool.color}">
<span class="icon-text">{{ tool.icon }}</span>
</div>
<div class="tool-info">
<h4 class="tool-name">{{ tool.name }}</h4>
<p class="tool-desc">{{ tool.desc }}</p>
<p class="tool-url">{{ tool.displayUrl }}</p>
</div>
</div>
</div>
</div>
<!-- 云平台 -->
<div class="tool-category" v-if="cloudTools.length > 0">
<h2 class="category-title">云平台</h2>
<div class="category-items">
<div class="tool-card" v-for="tool in cloudTools" :key="tool.name" @click="openTool(tool.url)">
<div class="tool-icon" :style="{background: tool.color}">
<span class="icon-text">{{ tool.icon }}</span>
</div>
<div class="tool-info">
<h4 class="tool-name">{{ tool.name }}</h4>
<p class="tool-desc">{{ tool.desc }}</p>
<p class="tool-url">{{ tool.displayUrl }}</p>
</div>
</div>
</div>
</div>
<!-- 其他工具 -->
<div class="tool-category" v-if="otherTools.length > 0">
<h2 class="category-title">其他工具</h2>
<div class="category-items">
<div class="tool-card" v-for="tool in otherTools" :key="tool.name" @click="openTool(tool.url)">
<div class="tool-icon" :style="{background: tool.color}">
<span class="icon-text">{{ tool.icon }}</span>
</div>
<div class="tool-info">
<h4 class="tool-name">{{ tool.name }}</h4>
<p class="tool-desc">{{ tool.desc }}</p>
<p class="tool-url">{{ tool.displayUrl }}</p>
</div> </div>
</div> </div>
</div> </div>
@@ -180,231 +35,377 @@
</page> </page>
</template> </template>
<script> <script>
import './less/home-page.less' import './less/home-page.less'
import Page from '../components/Page' import Page from '../components/Page'
export default{
components: {Page}, export default {
data () { name: 'HomePage',
return { components: { Page },
data() {
return {
// 代码管理工具 // 代码管理工具
codeTools: [ codeTools: [
{ {
name: 'Gitea',
desc: 'Git代码仓库管理',
url: 'http://your-gitea-url.com',
displayUrl: 'gitea.company.com',
icon: 'Git',
color: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)'
},
{
name: 'GitLab',
desc: 'DevOps生命周期工具',
url: 'http://your-gitlab-url.com',
displayUrl: 'gitlab.company.com',
icon: 'GL',
color: 'linear-gradient(135deg, #f093fb 0%, #f5576c 100%)'
}
],
// 持续集成工具
ciTools: [
{
name: 'Jenkins',
desc: '持续集成构建平台',
url: 'http://your-jenkins-url.com',
displayUrl: 'jenkins.company.com',
icon: 'JK',
color: 'linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)'
},
{
name: 'Harbor',
desc: 'Docker镜像仓库',
url: 'http://your-harbor-url.com',
displayUrl: 'harbor.company.com',
icon: 'HB',
color: 'linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)'
}
],
// 项目管理工具
projectTools: [
{
name: '禅道', name: '禅道',
desc: '项目管理与Bug追踪', desc: '项目管理与Bug追踪',
url: 'http://your-zentao-url.com', url: 'http://81.70.89.108:8088',
displayUrl: 'zentao.company.com', displayUrl: '81.70.89.108:8088',
icon: '禅', icon: '禅',
color: 'linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)' color: 'linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)'
}, },
{ {
name: 'Jira', name: 'Gitea',
desc: '敏捷项目管理工具', desc: 'Gitea代码仓库管理',
url: 'http://your-jira-url.com', url: 'http://81.70.89.108:81/user/login',
displayUrl: 'jira.company.com', displayUrl: '81.70.89.108:81',
icon: 'JR', icon: 'Git',
color: 'linear-gradient(135deg, #ff9a9e 0%, #fecfef 100%)' color: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)'
},
{
name: 'Gitee',
desc: 'Gitee代码仓库管理',
url: 'https://gitee.com/qdintc',
displayUrl: 'gitee.com/qdintc',
icon: 'GL',
color: 'linear-gradient(135deg, #f093fb 0%, #f5576c 100%)'
},
{
name: 'Minio',
desc: 'Minio对象存储',
url: 'http://81.70.89.108:9009',
displayUrl: '81.70.89.108:9009',
icon: 'MI',
color: 'linear-gradient(135deg, #84fab0 0%, #8fd3f4 100%)'
},
{
name: 'Harbor',
desc: 'Docker镜像仓库',
url: 'http://81.70.89.108:8081',
displayUrl: '81.70.89.108:8081',
icon: 'HB',
color: 'linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)'
} }
], ],
// 数据库工具 // 数据库工具
databaseTools: [ databaseTools: [
{
name: 'Nocos',
desc: 'Nocos配置管理',
url: 'http://117.72.197.29:8088/',
displayUrl: '117.72.197.29:8088',
icon: 'NC',
color: 'linear-gradient(135deg, #fbc2eb 0%, #a6c1ee 100%)'
},
{
name: 'Jenkins',
desc: '持续集成构建平台',
url: 'http://81.70.89.108:8080/login',
displayUrl: '81.70.89.108:8080',
icon: 'JK',
color: 'linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)'
},
{
name: 'Portainer',
desc: 'Docker容器管理',
url: 'https://8.140.22.151:9443',
displayUrl: '8.140.22.151:9443',
icon: 'PT',
color: 'linear-gradient(135deg, #89f7fe 0%, #66a6ff 100%)'
},
{ {
name: 'MySQL', name: 'NodeRed',
desc: 'MySQL数据库管理', desc: 'NodeRed物联数据接入',
url: 'http://your-mysql-url.com', url: 'http://8.140.22.151:1880/',
displayUrl: 'mysql.company.com', displayUrl: '8.140.22.151:1880',
icon: 'SQL', icon: 'NR',
color: 'linear-gradient(135deg, #f8b500 0%, #fceabb 100%)' color: 'linear-gradient(135deg, #f8b500 0%, #fceabb 100%)'
}, },
{ {
name: 'Redis', name: 'EMQX',
desc: '缓存数据库管理', desc: 'EMQX消息队列',
url: 'http://your-redis-url.com', url: 'http://8.140.22.151:28083',
displayUrl: 'redis.company.com', displayUrl: '8.140.22.151:28083',
icon: 'RD', icon: 'MQ',
color: 'linear-gradient(135deg, #e43a15 0%, #e65245 100%)' color: 'linear-gradient(135deg, #e43a15 0%, #e65245 100%)'
} }
], ],
// 监控告警工具 //
monitorTools: [ monitorTools: [
{
name: 'Grafana',
desc: '监控数据可视化',
url: 'http://your-grafana-url.com',
displayUrl: 'grafana.company.com',
icon: 'GF',
color: 'linear-gradient(135deg, #a1c4fd 0%, #c2e9fb 100%)'
},
{
name: 'Prometheus',
desc: '系统监控告警平台',
url: 'http://your-prometheus-url.com',
displayUrl: 'prometheus.company.com',
icon: 'PM',
color: 'linear-gradient(135deg, #d299c2 0%, #fef9d7 100%)'
}
], ],
// 文档知识工具 // 文档知识工具
docTools: [ docTools: [
{ {
name: 'Confluence', name: '智聪官网',
desc: '团队协作知识库', desc: '智聪官网',
url: 'http://your-confluence-url.com', url: 'https://www.qdintc.com',
displayUrl: 'wiki.company.com', displayUrl: 'www.qdintc.com',
icon: 'CF', icon: '',
color: 'linear-gradient(135deg, #fbc2eb 0%, #a6c1ee 100%)' color: 'linear-gradient(135deg, #ff9a9e 0%, #fecfef 100%)'
}, },
{ {
name: 'GitBook', name: '智聪记账Web',
desc: '文档编写平台', desc: '记账管理平台Web',
url: 'http://your-gitbook-url.com', url: 'http://152.136.151.187:8080/intc/#/login',
displayUrl: 'docs.company.com', displayUrl: '152.136.151.187:8080',
icon: 'GB', icon: 'A',
color: 'linear-gradient(135deg, #84fab0 0%, #8fd3f4 100%)' color: 'linear-gradient(135deg, #a1c4fd 0%, #c2e9fb 100%)'
} },
],
// 测试工具
testTools: [
{ {
name: 'Selenium', name: '智聪记账H5',
desc: '自动化测试平台', desc: '记账管理平台H5',
url: 'http://your-selenium-url.com', url: 'http://152.136.151.187:82/#/',
displayUrl: 'test.company.com', displayUrl: '152.136.151.187:82',
icon: 'SE', icon: 'A5',
color: 'linear-gradient(135deg, #d299c2 0%, #fef9d7 100%)'
},
{
name: '智聪健康Web',
desc: '健康档案平台Web',
url: 'http://152.136.151.187:81/hrms/login',
displayUrl: '152.136.151.187:81',
icon: 'H',
color: 'linear-gradient(135deg, #96fbc4 0%, #f9f586 100%)' color: 'linear-gradient(135deg, #96fbc4 0%, #f9f586 100%)'
}, },
{ {
name: 'Postman', name: '智聪健康H5',
desc: 'API测试工具', desc: '健康档案平台H5',
url: 'http://your-postman-url.com', url: 'http://152.136.151.187:89/#/',
displayUrl: 'api-test.company.com', displayUrl: '152.136.151.187:89',
icon: 'PM', icon: 'H5',
color: 'linear-gradient(135deg, #ff9966 0%, #ff5e62 100%)' color: 'linear-gradient(135deg, #ff9966 0%, #ff5e62 100%)'
},
{
name: '智聪物联网',
desc: '智聪物联网平台',
url: 'http://152.136.151.187:8086/login',
displayUrl: '152.136.151.187:8086',
icon: '物联',
color: 'linear-gradient(135deg, #fa709a 0%, #fee140 100%)'
},
{
name: '智聪物联网大屏',
desc: '智聪物联网大屏',
url: 'http://152.136.151.187:8088/login',
displayUrl: '152.136.151.187:8088',
icon: '大屏',
color: 'linear-gradient(135deg, #ff6b95 0%, #ffa44f 100%)'
},
// {
// name: '智聪茅台Web',
// desc: 'Imaotai预约平台Web',
// url: 'http://152.136.151.187:8081/imaotai/login',
// displayUrl: '152.136.151.187:8081',
// icon: '茅',
// color: 'linear-gradient(135deg, #fc6c85 0%, #f857a6 100%)'
// },
// {
// name: '智聪茅台H5',
// desc: 'Imaotai预约平台h5',
// url: 'http://152.136.151.187:90/#/',
// displayUrl: '152.136.151.187:90',
// icon: '茅5',
// color: 'linear-gradient(135deg, #30cfd0 0%, #330867 100%)'
// }
],
// 测试工具
testTools: [
{
name: '豆包',
desc: '豆包AI工具',
url: 'https://www.doubao.com/chat/',
displayUrl: 'www.doubao.com',
icon: '豆包',
color: 'linear-gradient(135deg, #0ba360 0%, #3cba92 100%)'
} ,
{
name: '微信公众号',
desc: '微信公众号',
url: 'https://mp.weixin.qq.com/cgi-bin/loginpage',
displayUrl: 'mp.weixin.qq.com',
icon: '微信',
color: 'linear-gradient(135deg, #38ef7d 0%, #11998e 100%)'
} ,
{
name: '腾讯云',
desc: '腾讯云',
url: 'https://cloud.tencent.com',
displayUrl: 'cloud.tencent.com',
icon: '腾讯',
color: 'linear-gradient(135deg, #2af598 0%, #009efd 100%)'
},
{
name: '阿里云',
desc: '阿里云',
url: 'https://www.aliyun.com',
displayUrl: 'www.aliyun.com',
icon: '阿里',
color: 'linear-gradient(135deg, #f77062 0%, #fe5196 100%)'
}
,
{
name: '京东云',
desc: '京东云',
url: 'https://www.jdcloud.com',
displayUrl: 'www.jdcloud.com',
icon: '京东',
color: 'linear-gradient(135deg, #ee0979 0%, #ff6a00 100%)'
} }
], ],
// 安全扫描工具 // 安全扫描工具
securityTools: [ securityTools: [
{
name: 'SonarQube',
desc: '代码质量检测平台',
url: 'http://your-sonar-url.com',
displayUrl: 'sonar.company.com',
icon: 'SQ',
color: 'linear-gradient(135deg, #fa709a 0%, #fee140 100%)'
},
{
name: 'Trivy',
desc: '容器安全扫描',
url: 'http://your-trivy-url.com',
displayUrl: 'security.company.com',
icon: 'TV',
color: 'linear-gradient(135deg, #30cfd0 0%, #330867 100%)'
}
],
// 云平台工具
cloudTools: [
{
name: 'Kubernetes',
desc: '容器编排平台',
url: 'http://your-k8s-url.com',
displayUrl: 'k8s.company.com',
icon: 'K8s',
color: 'linear-gradient(135deg, #2af598 0%, #009efd 100%)'
},
{
name: 'Rancher',
desc: 'K8s集群管理',
url: 'http://your-rancher-url.com',
displayUrl: 'rancher.company.com',
icon: 'RC',
color: 'linear-gradient(135deg, #0ba360 0%, #3cba92 100%)'
}
], ],
// 其他工具 // 其他工具
otherTools: [ otherTools: [
{ {
name: 'Nexus', name: '随机密码',
desc: 'Maven私服仓库', desc: '随机密码生成器',
url: 'http://your-nexus-url.com', url: 'https://suijimimashengcheng.bmcx.com',
displayUrl: 'nexus.company.com', displayUrl: 'bmcx.com',
icon: 'NX', icon: '',
color: 'linear-gradient(135deg, #fdcbf1 0%, #e6dee9 100%)' color: 'linear-gradient(135deg, #fdcbf1 0%, #e6dee9 100%)'
}, },
{ {
name: 'Portainer', name: '翻墙工具',
desc: 'Docker容器管理', desc: 'CordCloud',
url: 'http://your-portainer-url.com', url: 'https://cordc.xyz/auth/login',
displayUrl: 'portainer.company.com', displayUrl: 'cordc.xyz',
icon: 'PT', icon: 'COR',
color: 'linear-gradient(135deg, #89f7fe 0%, #66a6ff 100%)' color: 'linear-gradient(135deg, #a8c0ff 0%, #3f2b96 100%)'
},
{
name: '图片压缩',
desc: '图片压缩工具',
url: 'https://squoosh.app',
displayUrl: 'squoosh.app',
icon: 'SQ',
color: 'linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%)'
},
{
name: '2925邮箱',
desc: '无限邮',
url: 'https://www.2925.com/login/',
displayUrl: 'www.2925.com',
icon: '邮',
color: 'linear-gradient(135deg, #ff9a56 0%, #ff5e62 100%)'
},
{
name: '青岛人社',
desc: '青岛市人力资源保障局',
url: 'https://hrss.qingdao.gov.cn',
displayUrl: 'hrss.qingdao.gov.cn',
icon: '人社',
color: 'linear-gradient(135deg, #fddb92 0%, #d1fdff 100%)'
},
{
name: '青岛公积金',
desc: '青岛市住房公积金中心',
url: 'https://www.qdgjj.com/',
displayUrl: 'www.qdgjj.com',
icon: '住房',
color: 'linear-gradient(135deg, #9890e3 0%, #b1f4cf 100%)'
},
{
name: '软著登记系统',
desc: '中国版权保护中心',
url: 'https://register.ccopyright.com.cn/login.html',
displayUrl: 'ccopyright.com.cn',
icon: '软著',
color: 'linear-gradient(135deg, #ebc0fd 0%, #d9ded8 100%)'
},
{
name: '开源软件镜像站',
desc: '清华大学开源软件镜像站',
url: 'https://mirrors.tuna.tsinghua.edu.cn',
displayUrl: 'tsinghua.edu.cn',
icon: '镜像',
color: 'linear-gradient(135deg, #96e6a1 0%, #d4fc79 100%)'
},
{
name: 'IP地址查询',
desc: 'iP地址归属地查询',
url: 'https://www.ip138.com/',
displayUrl: 'www.ip138.com',
icon: 'IP',
color: 'linear-gradient(135deg, #accbee 0%, #e7f0fd 100%)'
} }
] ],
// 空分类占位
ciTools: [],
projectTools: [],
monitorTools: [],
securityTools: [],
cloudTools: []
} }
}, },
created() {
computed: {
// 分类配置(统一管理)
categories: function() {
return [
{ key: 'doc', title: '智聪科技', tools: this.docTools },
{ key: 'code', title: '管理工具', tools: this.codeTools },
{ key: 'database', title: '开发工具', tools: this.databaseTools },
{ key: 'test', title: '第三方服务', tools: this.testTools },
{ key: 'other', title: '其他工具', tools: this.otherTools }
]
}
},
created() {
this.init() this.init()
}, },
methods: {
openTool: function (url) { methods: {
if(url && url !== 'http://your-gitea-url.com') { /**
window.open(url, '_blank') * 打开工具链接
} else { * @param {string} url - 工具访问地址
alert('请先配置该工具的访问地址') */
} openTool: function(url) {
if (url && url !== 'http://your-gitea-url.com') {
window.open(url, '_blank')
} else {
alert('请先配置该工具的访问地址')
} }
} }
}
}; }
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
// 颜色变量
@primary-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
@white-color: #fff;
@text-primary: #333;
@text-secondary: #666;
@text-tertiary: #999;
// 尺寸变量
@header-height: 50px;
@card-width: 100px;
@border-radius-md: 6px;
// 间距变量
@spacing-sm: 6px;
@spacing-md: 12px;
@spacing-lg: 16px;
// 页面主体
.workbench-page { .workbench-page {
min-height: 100vh; min-height: 100vh;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); background: @primary-gradient;
padding: 0; padding: @header-height 0 0;
padding-top: 76px;
} }
.workbench-container { .workbench-container {
max-width: 1920px; max-width: 1920px;
margin: 0 auto; margin: 0 auto;
padding: 30px 20px; padding: 10px @spacing-md;
} }
.workbench-header { .workbench-header {
@@ -414,31 +415,23 @@
right: 0; right: 0;
width: 100%; width: 100%;
text-align: center; text-align: center;
padding: 20px 0; padding: 8px 0;
background: rgba(255,255,255,0.08); background: @primary-gradient;
z-index: 1000; z-index: 1000;
backdrop-filter: blur(15px);
border-bottom: 1px solid rgba(255,255,255,0.15);
h1 { h1 {
font-size: 32px; font-size: 20px;
font-weight: 700; font-weight: 600;
color: #fff; color: @white-color;
margin: 0; margin: 0;
text-shadow: 0 2px 10px rgba(0,0,0,0.3); text-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
}
p {
font-size: 16px;
color: rgba(255,255,255,0.85);
margin: 8px 0 0 0;
} }
} }
.tools-container { .tools-container {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
gap: 25px 20px; gap: 8px @spacing-md;
align-items: flex-start; align-items: flex-start;
} }
@@ -446,90 +439,63 @@
flex: 0 1 auto; flex: 0 1 auto;
.category-title { .category-title {
font-size: 20px; font-size: 14px;
font-weight: 600; font-weight: 600;
color: #fff; color: @white-color;
margin-bottom: 15px; margin-bottom: 4px;
padding-left: 12px; padding-left: 8px;
border-left: 4px solid rgba(255,255,255,0.8); border-left: 3px solid rgba(255, 255, 255, 0.8);
line-height: 1.5; line-height: 1.3;
} }
.category-items { .category-items {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
gap: 15px; gap: @spacing-sm;
} }
} }
.tool-card { .tool-card {
display: flex; display: flex;
align-items: center; align-items: center;
padding: 14px 18px; justify-content: center;
background: rgba(255,255,255,0.95); padding: 8px 6px;
border-radius: 10px; background: rgba(255, 255, 255, 0.95);
border-radius: @border-radius-md;
cursor: pointer; cursor: pointer;
transition: all 0.3s ease; transition: all 0.2s ease;
box-shadow: 0 4px 12px rgba(0,0,0,0.1); box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
width: 260px; width: @card-width;
min-height: 36px;
&:hover { &:hover {
transform: translateY(-4px); transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(0,0,0,0.2); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
background: #fff; background: @white-color;
}
}
.tool-icon {
width: 60px;
height: 60px;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
margin-right: 16px;
box-shadow: 0 4px 8px rgba(0,0,0,0.15);
.icon-text {
font-size: 24px;
font-weight: bold;
color: #fff;
text-shadow: 0 2px 4px rgba(0,0,0,0.2);
} }
} }
.tool-info { .tool-info {
flex: 1; flex: 1;
min-width: 0; min-width: 0;
text-align: center;
} }
.tool-name { .tool-name {
font-size: 18px;
font-weight: 600;
color: #333;
margin: 0 0 4px 0;
}
.tool-desc {
font-size: 13px; font-size: 13px;
color: #666; font-weight: 600;
margin: 0 0 4px 0; color: @text-primary;
}
.tool-url {
font-size: 12px;
color: #999;
font-family: 'Consolas', 'Monaco', monospace;
margin: 0; margin: 0;
line-height: 1.3;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
// 响应式布局 - 平板
@media (max-width: 1024px) { @media (max-width: 1024px) {
.tools-container { .tools-container {
gap: 25px 30px; gap: 8px @spacing-md;
} }
.tool-category { .tool-category {
@@ -539,7 +505,8 @@
.category-title { .category-title {
width: auto; width: auto;
text-align: left; text-align: left;
padding: 10px 12px; padding: 6px 8px;
font-size: 13px;
} }
.category-items { .category-items {
@@ -548,62 +515,45 @@
} }
.tool-card { .tool-card {
width: calc(50% - 8px); width: calc(33.333% - 6px);
} }
.workbench-header h1 { .workbench-header h1 {
font-size: 36px; font-size: 18px;
} }
} }
// 响应式布局 - 手机
@media (max-width: 600px) { @media (max-width: 600px) {
.workbench-container { .workbench-container {
padding: 30px 15px; padding: @spacing-md @spacing-sm;
} }
.workbench-header { .workbench-header {
margin-bottom: 30px; margin-bottom: @spacing-sm;
h1 { h1 {
font-size: 28px; font-size: 16px;
}
p {
font-size: 14px;
} }
} }
.tools-container { .tools-container {
gap: 20px; gap: @spacing-sm;
} }
.tool-category { .tool-category {
.category-title { .category-title {
font-size: 16px; font-size: 12px;
padding: 8px 10px; padding: 4px 6px;
} }
} }
.tool-card { .tool-card {
padding: 14px; padding: 6px 8px;
width: 100%; width: calc(50% - 4px);
}
.tool-icon {
width: 50px;
height: 50px;
margin-right: 12px;
.icon-text {
font-size: 20px;
}
} }
.tool-name { .tool-name {
font-size: 16px;
}
.tool-desc {
font-size: 12px; font-size: 12px;
} }
} }