Files
STP/docs/architecture/详细设计/供应商工作台详细设计.md

435 lines
21 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# STP 智慧招标平台 —— 供应商工作台详细设计说明书
| 文档名称 | 供应商工作台详细设计 |
| :------- | :---------- |
| **文档版本** | V1.0 |
| **编制日期** | 2026-07-02 |
| **关联文档** | [[需求分析说明书]] |
## 1. 概述
### 1.1 设计目标
供应商工作台是供应商登录后默认进入的页面,作为其日常操作的核心枢纽。设计目标包括:
- **任务驱动**:集中展示待办事项(报名、缴费、上传投标文件等),引导供应商快速完成关键动作。
- **信息整合**:汇总投标项目进展、通知消息、企业信息状态,减少页面跳转。
- **个性化推荐**:根据供应商关注的品类推送最新招标公告,提升参与效率。
- **快捷入口**:提供企业信息维护、资质文件管理、安全设置等常用功能的快速通道。
### 1.2 适用角色
- 已注册并激活的供应商(包括新注册供应商和 SRM 存量绑定供应商)。
- 不同供应商看到的内容根据其投标记录、关注品类差异化展示。
### 1.3 设计原则
| 原则 | 说明 |
| :--- | :--- |
| **一目了然** | 核心数据(待办数量、项目进度)以卡片/数字突出显示。 |
| **操作便捷** | 主要操作(报名、上传文件)入口直接放在工作台,缩短路径。 |
| **实时同步** | 待办事项、项目状态、通知均从后端实时获取,保持最新。 |
| **角色聚焦** | 只展示与供应商相关的功能,不显示招标方或专家内容。 |
## 2. 页面布局总览
```svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 900" font-family="'Microsoft YaHei', sans-serif">
<defs>
<filter id="shadow" x="-2%" y="-2%" width="104%" height="104%">
<feDropShadow dx="0" dy="4" stdDeviation="8" flood-color="#000" flood-opacity="0.06"/>
</filter>
<filter id="shadowDeep" x="-2%" y="-2%" width="104%" height="104%">
<feDropShadow dx="0" dy="6" stdDeviation="12" flood-color="#000" flood-opacity="0.10"/>
</filter>
<linearGradient id="headerBg" x1="0" y1="0" x2="1" y2="0">
<stop offset="0%" stop-color="#c2185b"/>
<stop offset="100%" stop-color="#e91e63"/>
</linearGradient>
<linearGradient id="brandGrad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#c2185b"/><stop offset="100%" stop-color="#e91e63"/>
</linearGradient>
<linearGradient id="cardGrad1" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#e8f5e9"/><stop offset="100%" stop-color="#c8e6c9"/>
</linearGradient>
<linearGradient id="cardGrad2" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#e3f2fd"/><stop offset="100%" stop-color="#bbdefb"/>
</linearGradient>
<linearGradient id="cardGrad3" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#fff3e0"/><stop offset="100%" stop-color="#ffe0b2"/>
</linearGradient>
</defs>
<!-- 背景 -->
<rect width="1200" height="900" fill="#f5f7fa"/>
<!-- ===== 顶部导航栏(与首页一致,但用户区显示已登录) ===== -->
<rect width="1200" height="64" fill="url(#headerBg)"/>
<text x="40" y="42" font-size="22" font-weight="bold" fill="#fff">智慧招标平台</text>
<text x="190" y="42" font-size="13" fill="rgba(255,255,255,0.8)">Smart Tendering Platform</text>
<!-- 导航菜单(保留首页菜单,但“首页”高亮) -->
<text x="440" y="42" font-size="15" fill="#fff" font-weight="bold">首页</text>
<text x="520" y="42" font-size="15" fill="rgba(255,255,255,0.8)">招标公告</text>
<text x="620" y="42" font-size="15" fill="rgba(255,255,255,0.8)">定标公告</text>
<text x="720" y="42" font-size="15" fill="rgba(255,255,255,0.8)">企业新闻</text>
<!-- 已登录用户 -->
<circle cx="1030" cy="32" r="16" fill="rgba(255,255,255,0.3)"/>
<text x="1030" y="37" text-anchor="middle" font-size="12" fill="#fff"></text>
<text x="1060" y="37" font-size="14" fill="#fff">李强</text>
<text x="1110" y="37" font-size="12" fill="rgba(255,255,255,0.7)"></text>
<!-- ===== 内容区:两栏布局 ===== -->
<!-- 左侧:主内容区(宽度 780px -->
<!-- 右侧:侧边栏(宽度 300px,间距 20px) -->
<!-- 左侧主内容 -->
<rect x="40" y="90" width="780" height="770" rx="12" fill="#fff" filter="url(#shadow)"/>
<!-- 欢迎语 + 日期 -->
<text x="70" y="125" font-size="20" font-weight="bold" fill="#1a2332">👋 欢迎回来,李强</text>
<text x="70" y="150" font-size="14" fill="#8895aa">今天是 2026年7月2日,星期四</text>
<!-- ===== 待办事项卡片(横向滚动或图标) ===== -->
<rect x="70" y="180" width="720" height="100" rx="10" fill="#fafbfc" stroke="#e0e4ec"/>
<text x="90" y="210" font-size="15" font-weight="bold" fill="#4a5568">📋 待办事项</text>
<!-- 待办项1 -->
<rect x="100" y="225" width="150" height="40" rx="8" fill="#ffebee" stroke="#ef9a9a"/>
<text x="175" y="250" text-anchor="middle" font-size="13" fill="#c62828">保证金缴纳(2</text>
<!-- 待办项2 -->
<rect x="270" y="225" width="150" height="40" rx="8" fill="#fff3e0" stroke="#ffcc80"/>
<text x="345" y="250" text-anchor="middle" font-size="13" fill="#e65100">投标报名(1</text>
<!-- 待办项3 -->
<rect x="440" y="225" width="150" height="40" rx="8" fill="#e3f2fd" stroke="#90caf9"/>
<text x="515" y="250" text-anchor="middle" font-size="13" fill="#0d47a1">待上传投标文件(3</text>
<!-- 待办项4 -->
<rect x="610" y="225" width="150" height="40" rx="8" fill="#e8f5e9" stroke="#a5d6a7"/>
<text x="685" y="250" text-anchor="middle" font-size="13" fill="#2e7d32">待查看结果(2</text>
<!-- ===== 我的投标项目 ===== -->
<text x="70" y="320" font-size="15" font-weight="bold" fill="#4a5568">📂 我的投标项目</text>
<!-- 项目列表 -->
<rect x="70" y="335" width="720" height="160" rx="8" fill="#fafbfc" stroke="#e0e4ec"/>
<!-- 表头 -->
<rect x="70" y="335" width="720" height="32" rx="8" fill="#f0f2f7"/>
<text x="90" y="356" font-size="13" font-weight="bold" fill="#4a5568">项目名称</text>
<text x="260" y="356" font-size="13" font-weight="bold" fill="#4a5568">公告日期</text>
<text x="380" y="356" font-size="13" font-weight="bold" fill="#4a5568">状态</text>
<text x="500" y="356" font-size="13" font-weight="bold" fill="#4a5568">截止日期</text>
<text x="650" y="356" font-size="13" font-weight="bold" fill="#4a5568">操作</text>
<!-- 行1 -->
<rect x="80" y="375" width="700" height="36" rx="4" fill="#fff"/>
<text x="90" y="398" font-size="13" fill="#1a2332">年产5万吨聚丙烯项目设备采购</text>
<text x="260" y="398" font-size="13" fill="#666">2026-07-01</text>
<rect x="380" y="385" width="60" height="18" rx="4" fill="#ff9800"/>
<text x="410" y="398" text-anchor="middle" font-size="11" fill="#fff">报名中</text>
<text x="500" y="398" font-size="13" fill="#666">2026-07-15</text>
<text x="650" y="398" font-size="13" fill="#1565c0" text-decoration="underline">继续报名</text>
<!-- 行2 -->
<rect x="80" y="415" width="700" height="36" rx="4" fill="#fff"/>
<text x="90" y="438" font-size="13" fill="#1a2332">数字化交付平台开发服务</text>
<text x="260" y="438" font-size="13" fill="#666">2026-06-29</text>
<rect x="380" y="425" width="60" height="18" rx="4" fill="#4caf50"/>
<text x="410" y="438" text-anchor="middle" font-size="11" fill="#fff">已投标</text>
<text x="500" y="438" font-size="13" fill="#666">2026-07-10</text>
<text x="650" y="438" font-size="13" fill="#9e9e9e">等待开标</text>
<!-- 行3 -->
<rect x="80" y="455" width="700" height="36" rx="4" fill="#fff"/>
<text x="90" y="478" font-size="13" fill="#1a2332">2026年度防腐保温工程框架</text>
<text x="260" y="478" font-size="13" fill="#666">2026-06-28</text>
<rect x="380" y="465" width="60" height="18" rx="4" fill="#9e9e9e"/>
<text x="410" y="478" text-anchor="middle" font-size="11" fill="#fff">已截止</text>
<text x="500" y="478" font-size="13" fill="#666">已过期</text>
<text x="650" y="478" font-size="13" fill="#9e9e9e">-</text>
<!-- 查看更多 -->
<text x="700" y="515" font-size="13" fill="#c2185b" text-decoration="underline">查看全部投标项目 →</text>
<!-- ===== 最新通知 ===== -->
<text x="70" y="555" font-size="15" font-weight="bold" fill="#4a5568">🔔 最新通知</text>
<rect x="70" y="570" width="720" height="95" rx="8" fill="#fafbfc" stroke="#e0e4ec"/>
<rect x="80" y="580" width="700" height="28" rx="4" fill="#fff"/>
<circle cx="95" cy="594" r="4" fill="#c2185b"/>
<text x="110" y="600" font-size="13" fill="#1a2332">【系统通知】您的“数字化交付平台”项目已完成开标,请查看结果。</text>
<rect x="80" y="612" width="700" height="28" rx="4" fill="#fff"/>
<circle cx="95" cy="626" r="4" fill="#c2185b"/>
<text x="110" y="632" font-size="13" fill="#1a2332">【报名提醒】“年产5万吨聚丙烯项目”报名即将截止(7月15日)。</text>
<text x="700" y="680" font-size="13" fill="#c2185b" text-decoration="underline">查看所有通知 →</text>
<!-- ===== 右侧边栏 ===== -->
<!-- 企业信息概览 -->
<rect x="840" y="90" width="320" height="170" rx="12" fill="#fff" filter="url(#shadow)"/>
<text x="870" y="125" font-size="15" font-weight="bold" fill="#4a5568">🏢 企业信息</text>
<text x="870" y="155" font-size="14" fill="#1a2332">滨化新材料有限公司</text>
<text x="870" y="180" font-size="13" fill="#8895aa">统一社会信用代码:91370100MA3XXXXXXX</text>
<text x="870" y="205" font-size="13" fill="#8895aa">联系人:李强 手机:138****8001</text>
<text x="870" y="230" font-size="13" fill="#4caf50">账户状态:✅ 已激活</text>
<rect x="870" y="245" width="90" height="28" rx="6" fill="#e3f2fd" stroke="#1565c0"/>
<text x="915" y="264" text-anchor="middle" font-size="12" fill="#1565c0">完善资料</text>
<!-- 快速入口 -->
<rect x="840" y="280" width="320" height="200" rx="12" fill="#fff" filter="url(#shadow)"/>
<text x="870" y="315" font-size="15" font-weight="bold" fill="#4a5568">⚡ 快捷入口</text>
<rect x="870" y="335" width="120" height="60" rx="8" fill="#fafbfc" stroke="#e0e4ec"/>
<text x="930" y="360" text-anchor="middle" font-size="20">📄</text>
<text x="930" y="382" text-anchor="middle" font-size="12" fill="#4a5568">资质文件</text>
<rect x="1000" y="335" width="120" height="60" rx="8" fill="#fafbfc" stroke="#e0e4ec"/>
<text x="1060" y="360" text-anchor="middle" font-size="20">🔐</text>
<text x="1060" y="382" text-anchor="middle" font-size="12" fill="#4a5568">安全设置</text>
<rect x="870" y="405" width="120" height="60" rx="8" fill="#fafbfc" stroke="#e0e4ec"/>
<text x="930" y="430" text-anchor="middle" font-size="20">📊</text>
<text x="930" y="452" text-anchor="middle" font-size="12" fill="#4a5568">我的投标</text>
<rect x="1000" y="405" width="120" height="60" rx="8" fill="#fafbfc" stroke="#e0e4ec"/>
<text x="1060" y="430" text-anchor="middle" font-size="20">💬</text>
<text x="1060" y="452" text-anchor="middle" font-size="12" fill="#4a5568">联系客服</text>
<!-- 推荐招标公告 -->
<rect x="840" y="500" width="320" height="200" rx="12" fill="#fff" filter="url(#shadow)"/>
<text x="870" y="535" font-size="15" font-weight="bold" fill="#4a5568">📌 推荐招标</text>
<rect x="870" y="555" width="270" height="32" rx="6" fill="#fafafa"/>
<text x="885" y="575" font-size="13" fill="#1a2332">• 催化剂原料采购项目</text>
<rect x="870" y="595" width="270" height="32" rx="6" fill="#fafafa"/>
<text x="885" y="615" font-size="13" fill="#1a2332">• 智能仓储系统建设</text>
<rect x="870" y="635" width="270" height="32" rx="6" fill="#fafafa"/>
<text x="885" y="655" font-size="13" fill="#1a2332">• 污水处理工程(二期)</text>
<text x="1050" y="685" font-size="13" fill="#c2185b" text-decoration="underline">更多推荐 →</text>
<!-- ===== AI 助手浮动入口(同首页) ===== -->
<circle cx="1110" cy="840" r="42" fill="url(#brandGrad)" filter="url(#shadowDeep)"/>
<text x="1110" y="835" text-anchor="middle" font-size="16" fill="#fff" font-weight="bold">小滨</text>
<text x="1110" y="855" text-anchor="middle" font-size="10" fill="rgba(255,255,255,0.9)">AI 助手</text>
<circle cx="1110" cy="840" r="50" fill="none" stroke="#e91e63" stroke-width="2" opacity="0.3">
<animate attributeName="r" from="42" to="55" dur="2s" repeatCount="indefinite"/>
<animate attributeName="opacity" from="0.6" to="0" dur="2s" repeatCount="indefinite"/>
</circle>
</svg>
```
## 3. 各模块详细说明
### 3.1 顶部导航栏
- **与首页保持一致**,品牌区 + 导航菜单(首页、招标公告、定标公告、企业新闻)。
- **用户区**:显示供应商头像(首字母),名称,下拉菜单(个人中心、我的投标、安全设置、退出)。
- **导航高亮**:当前“首页”高亮。
### 3.2 欢迎区
- **位置**:左上角,距顶部 90px。
- **内容**:供应商名称 + 当前日期。
- **数据来源**:从用户登录信息中获取姓名,日期从服务器时间获取。
- **交互**:无,纯展示。
### 3.3 待办事项卡片
| 属性 | 说明 |
| :--- | :--- |
| **位置** | 紧接欢迎区下方 |
| **尺寸** | 720 × 100px,浅灰背景,圆角 10px |
| **标题** | “📋 待办事项” |
| **待办项** | 以标签形式横向排列(可滚动),每个标签显示分类名称 + 数字,点击跳转至对应列表 |
| **分类** | 保证金缴纳、投标报名、待上传投标文件、待查看结果、待签合同等 |
| **数据来源** | 实时查询后端 API,统计各状态下的数量 |
| **交互** | 点击标签跳转至对应功能模块(如“保证金缴纳”跳转至保证金管理页) |
**待办项标签样式**
- 保证金缴纳:红色背景(#ffebee),文字 #c62828
- 投标报名:橙色背景(#fff3e0),文字 #e65100
- 待上传投标文件:蓝色背景(#e3f2fd),文字 #0d47a1
- 待查看结果:绿色背景(#e8f5e9),文字 #2e7d32
### 3.4 我的投标项目
| 属性 | 说明 |
| :--- | :--- |
| **位置** | 待办卡片下方 |
| **尺寸** | 720 × 约 200px,带表格 |
| **标题** | “📂 我的投标项目” |
| **表格列** | 项目名称、公告日期、状态、截止日期、操作 |
| **数据范围** | 显示最新的 3 条投标记录(按状态排序:进行中 > 即将截止 > 已截止) |
| **状态标签** | 报名中(橙色)、已投标(绿色)、待开标(蓝色)、已截止(灰色)、已中标(金色)等 |
| **操作列** | 根据状态显示不同操作按钮:继续报名、查看详情、上传投标文件、查看结果等 |
| **数据来源** | 查询供应商参与的投标项目列表,实时获取状态 |
| **查看更多** | 底部“查看全部投标项目 →”链接至完整投标列表 |
**状态与操作映射**
| 状态 | 标签颜色 | 操作按钮文字 | 跳转目标 |
| :--- | :--- | :--- | :--- |
| 报名中 | 橙色 | 继续报名 | 报名详情页 |
| 待上传投标文件 | 蓝色 | 上传文件 | 投标文件上传页 |
| 已投标 | 绿色 | 查看详情 | 投标详情页 |
| 待开标 | 蓝色(浅) | 等待开标 | —(只读) |
| 已截止 | 灰色 | — | — |
| 已中标 | 金色 | 查看合同 | 合同详情页 |
| 未中标 | 灰色 | 查看结果 | 结果公示页 |
### 3.5 最新通知
| 属性 | 说明 |
| :--- | :--- |
| **位置** | 我的投标项目下方 |
| **尺寸** | 720 × 约 110px |
| **标题** | “🔔 最新通知” |
| **通知数量** | 展示 2 条最新通知(按时间倒序) |
| **每条通知** | 红色圆点 + 通知内容(截取前 30 字) |
| **通知类型** | 系统通知(开标结果、报名提醒、审核通知等) |
| **数据来源** | 通知中心 API,只取未读或最近 5 条 |
| **查看全部** | “查看所有通知 →”跳转至通知列表页 |
| **交互** | 点击通知可标记为已读并跳转至详情 |
### 3.6 右侧边栏
#### 3.6.1 企业信息概览
| 属性 | 说明 |
| :--- | :--- |
| **尺寸** | 320 × 170px |
| **标题** | “🏢 企业信息” |
| **内容** | 企业全称、统一社会信用代码、联系人姓名、手机号、账户状态 |
| **账户状态** | 已激活(绿色)、待完善(橙色)、已锁定(红色) |
| **按钮** | “完善资料”跳转至企业信息管理页面 |
| **数据来源** | 从供应商档案中读取 |
#### 3.6.2 快捷入口
| 属性 | 说明 |
| :------- | :-------------------------- |
| **尺寸** | 320 × 200px |
| **标题** | “⚡ 快捷入口” |
| **入口图标** | 4 个图标按钮,2×2 网格排列 |
| **入口列表** | 资质文件、安全设置、我的投标、联系客服 |
| **交互** | 点击跳转至对应页面;联系客服打开 AI 助手或客服通道 |
#### 3.6.3 推荐招标
| 属性 | 说明 |
| :--- | :--- |
| **尺寸** | 320 × 200px |
| **标题** | “📌 推荐招标” |
| **内容** | 根据供应商历史浏览或关注的品类,推荐 3 条招标公告 |
| **展示** | 仅显示项目名称(点击跳转至公告详情) |
| **更多** | “更多推荐 →”跳转至招标公告列表(筛选条件为关注品类) |
| **推荐算法** | 基于供应商主产品、历史投标记录、浏览行为等进行协同过滤或标签匹配 |
### 3.7 AI 助手浮动入口
- **位置**:页面右下角固定。
- **功能**:与首页一致,提供智能问答、操作引导、待办提醒等。
- **主动显示内容**:主动提醒用户紧急待办事项,含链接,直接跳转到待办页面。(不要太多,最多三项)
### 3.8 页面滚动与响应
- 左侧主内容可滚动,右侧边栏固定(或跟随滚动,取决于设计)。
- 推荐采用 **左侧内容滚动 + 右侧边栏 sticky** 的方式,便于同时查看待办和快捷入口。
### 3.9 空状态处理
- 若无待办事项,显示“🎉 暂无待办,继续保持!”。
- 若无投标项目,显示“您还未参与任何投标,去浏览招标公告吧 →”。
- 若无通知,显示“暂无新通知”。
## 4. 交互流程
### 4.1 待办事项点击
- 点击“保证金缴纳(2)”→ 跳转至保证金管理页面,列出需要缴纳保证金的项目。
- 点击“投标报名(1)”→ 跳转至报名页面,直接进入待报名项目。
- 点击“待上传投标文件(3)”→ 跳转至“我的投标”列表,筛选出“待上传”状态的项目。
### 4.2 投标项目操作
- 点击“继续报名”→ 进入报名详情页,可修改报名信息或提交补充材料。
- 点击“上传文件”→ 跳转至投标文件上传页,支持加密上传。
- 点击“查看结果”→ 跳转至结果公示页。
- 点击项目名称 → 跳转至项目详情页,查看完整招标信息。
### 4.3 通知交互
- 点击通知 → 标记为已读,跳转至详情(如结果通知跳转至评标报告)。
- 支持批量标记已读。
### 4.4 快捷入口
- 资质文件 → 跳转至“企业信息管理”的“资质文件”Tab。
- 安全设置 → 跳转至“企业信息管理”的“安全设置”Tab。
- 我的投标 → 跳转至完整的投标列表。
- 联系客服 → 弹窗提示 AI 助手或人工客服联系方式。
## 5. 数据模型
### 5.1 待办统计 API
```
GET /api/v1/supplier/todo/count
响应:
{
"pendingPayment": 2, // 待缴纳保证金
"pendingBid": 1, // 待报名
"pendingUpload": 3, // 待上传投标文件
"pendingResult": 2 // 待查看结果
}
```
### 5.2 投标项目列表(工作台用)
```
GET /api/v1/supplier/bids/dashboard
参数:limit=3
响应:[
{
"projectId": "P20260701",
"projectName": "年产5万吨聚丙烯项目设备采购",
"announceDate": "2026-07-01",
"status": "BIDDING", // BIDDING, BID_SUBMITTED, WAITING_OPEN, CLOSED, WIN, LOSE
"deadline": "2026-07-15",
"action": "CONTINUE_BID" // CONTINUE_BID, UPLOAD_FILE, VIEW_RESULT, NONE
}
]
```
### 5.3 通知列表
```
GET /api/v1/supplier/notifications/latest
响应:[{ id, title, content, createTime, isRead, link }]
```
### 5.4 推荐招标
```
GET /api/v1/supplier/recommended-bids
参数:limit=3
响应:[{ projectId, projectName, category, publishDate }]
```
## 6. 权限与状态
| 功能 | 访问条件 |
| :--- | :--- |
| 工作台展示 | 任何已登录供应商 |
| 待办事项 | 实时计算,所有供应商可见 |
| 投标项目 | 仅显示当前供应商参与的 |
| 推荐招标 | 根据供应商信息个性化推荐 |
| 企业信息 | 显示当前供应商自己的信息 |
**状态变化**:当供应商完成某项操作(如缴纳保证金),工作台待办计数自动更新(通过 WebSocket 或定时刷新)。
## 7. 性能与实现建议
- **刷新机制**:工作台数据通过 WebSocket 或轮询(每 30 秒)更新待办数量。
- **缓存**:企业信息可缓存 5 分钟,投标列表缓存 1 分钟。
- **懒加载**:通知和推荐招标在滚动至可视区域时加载。
- **前端框架**Vue 3 / React,使用 Composition API 或 Hooks 管理状态。