# lab-portal **Repository Path**: dahogn/lab-portal ## Basic Information - **Project Name**: lab-portal - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-05-20 - **Last Updated**: 2026-05-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 实验室门户 实验室内部网站统一入口。第一版是 Vue 静态应用,通过 `public/data/portal-data.json` 维护分类、网站列表和扩展字段,并使用 Docker + Nginx 部署。 ## 本地开发 ```bash npm install npm run dev ``` ## 数据维护 网站数据在: ```text public/data/portal-data.json ``` 配置文件包含三部分: ```json { "categories": [], "fields": [], "sites": [] } ``` ### 分类配置 分类必须先在 `categories` 中声明。网站不会再自动生成分类。 ```json { "key": "research", "label": "科研工具", "description": "论文、成果和科研流程相关系统", "order": 20 } ``` 字段说明: - `key`: 稳定标识,网站通过 `categoryKey` 引用。 - `label`: 页面显示名称。 - `description`: 分类说明,也会参与搜索。 - `order`: 显示顺序,数值越小越靠前。 ### 网站配置 核心字段: ```json { "id": "paper-archive", "name": "论文成果库", "url": "https://papers.example-lab.edu.cn", "description": "归档论文、专利、软著和项目成果。", "categoryKey": "research", "extra": {} } ``` `categoryKey` 必须引用 `categories` 中存在的 `key`。如果引用了不存在的分类,页面会显示配置错误。 ### 扩展字段 扩展字段通过 `fields` 配置。页面会根据字段配置决定是否搜索、筛选、在卡片展示或在详情展示。 ```json { "key": "status", "label": "状态", "type": "select", "filterable": true, "showInCard": true, "showInDetail": true, "options": [ { "label": "正常", "value": "active" }, { "label": "维护中", "value": "maintenance" } ] } ``` 新增字段时: 1. 在 `fields` 中增加字段配置。 2. 在需要展示该字段的网站 `extra` 中增加同名字段值。 ## 生产构建 ```bash npm run build ``` ## Docker 部署 ```bash docker compose up -d --build ``` 默认访问: ```text http://localhost:8080 ``` 生产环境可以挂载自己的数据文件覆盖镜像内置配置: ```yaml volumes: - ./data/portal-data.json:/usr/share/nginx/html/data/portal-data.json:ro ``` `/data/` 路径在 Nginx 中设置为 `no-cache`,更新 JSON 后刷新页面即可读取新数据。