PRD Folder Created. 报价流程:前端信息收集、SmartOps报价评估、发送保司、回收比较、前端呈现。

This commit is contained in:
william.wan 2026-02-15 21:58:54 +08:00
parent 863a8a6d9a
commit 830b8ccb45
25 changed files with 559 additions and 44 deletions

View File

@ -0,0 +1,119 @@
# 临床试验责任保险报价流程
> 基于 ProcessOn 流程图RMO保险报价.pos整理
## 一、泳道角色
| 泳道 | 说明 |
|------|------|
| **申办者** | 投保人(采购、项目经理等) |
| **系统** | RMO 网站及 Smart-Ops 系统 |
| **临研安/华泰** | 服务方TPA 经纪) |
| **保司** | 太保/大地、其他保险公司 |
## 二、流程阶段
### 阶段一:信息收集与 AI 报价
1. **登录**(申办者)
- 申办者登录系统
2. **填写项目信息**(申办者)
- 上传项目方案、知情同意书或手动填写报价必备资料
- 可通过邮件/小程序通知进入此步骤
3. **标准报价材料**(系统)
- 系统生成标准报价材料
4. **AI 报价**(系统)
- 基于标准材料进行 AI 报价
5. **报价任务创建**(系统)
- 生成报价任务文档
- 通过 **API Smart-Ops** 与 Smart-Ops 系统对接
6. **报价任务**(临研安/华泰)
- 每保司报价生成一条任务
- 跟踪每一任务的完成状态
7. **报价**(临研安/华泰)
- 发件人RMO@vdano.com
- 向各保司发起报价请求
8. **初步评估**(保司)
- 太保/大地、其他保司分别进行初步评估
9. **核保通过**(保司)
- 保司核保通过后,生成正式报价
10. **正式报价**(保司)
- 输出正式报价文档
### 阶段二:全保司报价
11. **报价任务完成**(临研安/华泰)
- 汇总各保司报价结果
12. **页面对比呈现**(临研安/华泰)
- 保司回复到RMO@vdano.com
- 整理形成可对比的报价方式,呈现给申办者
13. **价格确定**(保司)
- 确定最终报价
### 阶段三:议价
14. **是否含报价?**(判断)
- **否**:邮件/小程序通知 → 返回「填写项目信息」
- **是**:进入「再次登录」流程
15. **再次登录?**(申办者)
- 申办者再次登录系统
16. **在线议价**(临研安/华泰)
- 申办者与经纪人在线沟通、调整报价
17. **主动人工跟进**(临研安/华泰)
- 经纪人对未完成报价的保司进行主动跟进
## 三、流程示意Mermaid
```mermaid
flowchart TB
subgraph 信息收集与AI报价
A[登录] --> B[填写项目信息]
B --> C[标准报价材料]
C --> D[AI报价]
D --> E[报价任务创建]
E --> F[报价任务]
F --> G[报价]
G --> H[初步评估]
H --> I[太保/大地]
H --> J[其他保司]
I --> K[核保通过]
J --> K
K --> L[正式报价]
end
subgraph 全保司报价
L --> M[报价任务完成]
M --> N[页面对比呈现]
N --> O[价格确定]
end
subgraph 议价
O --> P{是否含报价?}
P -->|否| Q[邮件/小程序通知]
Q --> B
P -->|是| R[再次登录]
R --> S[在线议价]
S --> T[主动人工跟进]
end
```
## 四、关键说明
- **API Smart-Ops**:报价信息通过 API 传输到 Smart-Ops 系统,用于后续报价、投保、理赔等流程
- **任务跟踪**:每保司报价生成一条任务,系统跟踪每一任务的完成状态
- **回复渠道**:保司报价回复至 RMO@vdano.com
- **数据归属**:所有报价数据属于申办者,在投保人租户下呈现

View File

@ -3,8 +3,11 @@
## 一、项目概述
### 1.1 项目背景
- **RMO定义**RMORisk Management Organization风险管理组织是一个"一站式的、涉及到患者/受试者安全责任的保险与保障方案"。
- **项目目的**我们需要做一个网站用以介绍RMO的模式介绍申办者、研究机构、SMO、CRO在临床试验中各自应承担的职责。从首页延伸出各角色的职责、以及保险的方法如何进行保证保证方式如何进行保障。最终确保受试者在临床试验过程中的安全。
- **RMO定义**RMORisk Management Organization风险管理组织是一个"一站式的患者/受试者安全责任的保险与保障方案平台"。
- **项目目的**
构建一站式临床试验、持有人责任保险知识/资源、报价、理赔平台;
- RMO的模式、申办者、研究机构在临床试验中各自应承担的职责
- 保险的方法、保证(金)方式如何进行保障。
- **该网站所有内容围绕受试者安全保障与患者安全保障**
- **法律依据**:在临床试验中,申办者需要承担受试者保护的责任依据是《临床试验质量管理规范》第三十九条,
(一)申办者应当向研究者和临床试验机构提供与临床试验相关的法律上、经济上的保险或者保证,并与临床试验的风险性质和风险程度相适应。但不包括研究者和临床试验机构自身的过失所致的损害。
@ -13,20 +16,26 @@
### 1.2 网站目标
- 协助药企(申办者、持有人)规划患者、受试者安全责任保障的方式、方法;
- 清晰展示申办者、持有人、研究机构、SMO、CRO在临床试验中各自应承担的职责
- 说明保险和保证方式如何保障受试者安全,帮助申办者承担其职责
- 为不同角色(申办方、持有人、试验机构、受试者、服务方)提供针对性的信息和服务
- **登录后系统**:为已登录用户提供工作台、项目管理、保障评估、智能工具等功能,根据用户角色呈现有权限的内容
- 清晰展示申办者、持有人、研究机构、SMO、CRO在临床试验中各自应承担的职责
- 说明保险和保证方式如何保障受试者安全,帮助申办者承担其职责
- 为不同角色(申办方、持有人、试验机构、受试者、服务方)提供针对性的信息和服务
- **登录后系统**:为已登录用户提供保险报价、保险管理。
### 1.3 目标用户
- **主要用户**:申办者(制药企业、生物技术公司等)、持有人
- **次要用户**研究机构、研究者、伦理委员会
- **其他用户**CRO、CDMO、SMO、受试者
- **主要用户**投保人(申办者、持有人、临床试验研究机构)
- **次要用户**华泰经纪、保险公司
- **其他用户**CXO、受试者
- **登录后系统用户角色**
- **投保人**:可以是申办者、持有人;如果为研究者发起的试验,需要将其同时标记为申办者。可申请保障、查看自己的项目和保障、使用智能工具等
- **保险人**:保险公司,可查看分配给自己的项目、进行保障评估、处理报价和理赔、使用智能工具
- **投保人**:申办者、持有人;研究者发起的试验:将其同时标记为申办者。
- **服务方**:华泰经纪,与客户进行在线的项目沟通,报价。
### 1.4 目标用户
| 角色 | 名称 | 对应岗位 |
|-----------|-----------------|-----------------------------------|
| 投保人 | Policyholder | - 申办者采购、项目经理<br>- 上市后质量团队 |
| 保险人 | Insurer | - 保司核保人员 |
| 服务方 | TPA | - 临研安/华泰经纪 |
---
## 二、网站架构与页面结构

View File

@ -0,0 +1,105 @@
临床试验责任保险报价流程:
# 目的:
- 收集保险报价必须的信息;
- 根据不同的报价用途:确定后续跟进频率(预算目的报价、申请试验开展);
- 第一时间占据所有保司的报价渠道,规避后续业务冲突;
- 返回保司报价的结果,方便投保人对比、选择。
# 角色
| 角色 | 名称 | 对应岗位 |
|----------|-----------------|----------------------------------|
| 投保人 | Policyholder | - 申办者采购、项目经理<br>- 上市后质量团队 |
| 保险人 | Insurer | - 保司核保人员 |
| 服务方 | TPA | - 临研安/华泰经纪 |
# 流程
- 投保人填写报价资料;
- 服务方生成保险报价;
- 服务方发送保险报价到保险公司,进行确认;
- 根据保司报价,整理形成可对比的报价方式,回复申办者;
# 报价资料
## 报价必备资料
- 项目方案编号(必填)
- 项目标题(必填)
- 申办者名称(必填)
- 受试药物名称(必填)
- 项目分期I、II、III、IV期、其他___必填
- 试验受试者人数(必填)
- 报价用途:制定项目预算;申请试验开展;
- 每人责任限额万元选项≤10、15、20、30、≥50[非必填可以AI推荐]
- 累计责任限额[非必填可以AI推荐]
- 每次事故免赔额[非必填可以AI推荐]
## 申请报价页面
1. 简洁页面:
由AI自动识别提取报价必备资料上传
- 项目方案文件上传(必填)
- 知情同意书上传
- 生成报价按钮
或,手动填写。
可以从简洁页面点击按钮跳转到详细页面。
2. 详细页面:
除上述简洁页面需要的字段,补充以下西信息:
- 疾病类型(选项:癌症、心脏类疾病、生育类疾病、疫苗试验、其他)
- 每一试验受试者的试验期限选项6、612]、1224]、2436]、3648]、4860]、6072]、7284]、84
- 质量管理水平选项通过GMP、ISO等认证质量标准要求高管理先进、通过必要的认证质量标准要求较高管理较先进、其他情况
- 历史理赔赔付情况(选项:极少、较少、较多、极多)
- 试验受试者类型(选项:儿童、老年人、孕妇、其他成年人)
- 试验受试者健康状况(选项:良好、一般、较差)
- 安全性监测措施(选项:完善、较完善、不完善)
# 报价流程
- 投保人填写报价资料;
- 服务方生成保险报价;
- 服务方发送保险报价到保险公司,进行确认;
- 根据保司报价,整理形成可对比的报价方式,回复投保人;
- 投保人如需要调整报价,可以联系经纪人,线下沟通、调整报价;
# 报价记录状态
```mermaid
flowchart TB
subgraph 信息收集与AI报价
A[登录] --> B[填写项目信息]
B --> C[标准报价材料]
C --> D[AI报价]
D --> E[报价任务创建]
E --> F[报价任务]
F --> G[报价]
G --> H[初步评估]
H --> I[太保/大地]
H --> J[其他保司]
I --> K[核保通过]
J --> K
K --> L[正式报价]
end
subgraph 全保司报价
L --> M[报价任务完成]
M --> N[页面对比呈现]
N --> O[价格确定]
end
subgraph 议价
O --> P{是否含报价?}
P -->|否| Q[邮件/小程序通知]
Q --> B
P -->|是| R[再次登录]
R --> S[在线议价]
S --> T[主动人工跟进]
end
```
- **API Smart-Ops**:报价信息通过 API 传输到 Smart-Ops 系统,用于后续报价、投保、理赔等流程
- **任务跟踪**:每保司报价生成一条任务,系统跟踪每一任务的完成状态
- **回复渠道**:保司报价回复至 RMO@vdano.com
- **数据归属**:所有报价数据属于申办者,在投保人租户下呈现
# 与Smart-OPS的衔接
- 收集到的报价信息报价信息将传输到Smart-OPS系统工作台进行后续的报价、投保、理赔等流程
- 临研安人员登录Smart-OPS系统进行报价所有报价数据属于申办者所有该数据将在投保人租户下呈现
- 临研安人员在工作台页面处理所有报价的评估、整理。
-

BIN
pic/RMO保险报价.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 444 KiB

1
pic/RMO保险报价.pos Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -0,0 +1,232 @@
<template>
<nav class="breadcrumb" aria-label="面包屑导航">
<ol class="breadcrumb-list">
<li v-for="(item, index) in items" :key="item.path" class="breadcrumb-item">
<template v-if="index < items.length - 1">
<RouterLink :to="item.path" class="breadcrumb-link">{{ item.label }}</RouterLink>
<span class="breadcrumb-sep">/</span>
</template>
<span v-else class="breadcrumb-current" aria-current="page">{{ item.label }}</span>
</li>
</ol>
</nav>
</template>
<script setup lang="ts">
import { computed } from 'vue'
import { useRoute } from 'vue-router'
const route = useRoute()
//
const pathLabels: Record<string, string> = {
// RMO
'/about/overview': 'RMO概述',
'/about/insurers': '合作保司',
'/about/brokers': '专家经纪',
'/about/third-party': '第三方机构',
'/about': '关于RMO',
//
'/concern': '风险职责',
'/sponsor': '申办者',
'/holder': '持有人',
'/institution': '研究中心',
'/service-provider': 'CXO',
'/participant': '参与者',
//
'/solutions/pharmacovigilance': '药物警戒',
'/solutions/clinical-insurance': '临床保险',
'/solutions/product-insurance': '产品保险',
'/solutions/fund-payment': '资金支付',
'/solutions': '解决方案',
//
'/risk-data/smart-acquisition': '智能采集',
'/risk-data/pv-report': 'PV报告',
'/risk-data/drug-safety-dict': '药安词典',
'/risk-data/pv-service': 'PV服务',
'/risk-data/ai-tools': 'AI工具',
'/risk-data': '风险数据',
//
'/rmo-mode/insurance': '保险方案',
'/rmo-mode/guarantee': '保证方案',
'/rmo-mode/insurance-guarantee': '保险保证',
'/rmo-mode': '临床试验',
//
'/post-market/insurance': '保险方案',
'/post-market/guarantee': '保证设计',
'/post-market': '上市应用',
//
'/knowledge/PVknowledge': 'PV知识',
'/knowledge/ai-app': 'AI应用',
'/knowledge/insurance/PVknowledge': '基础知识',
'/knowledge/insurance/overseas': '国外比较',
'/knowledge/insurance/group-standard': '条款标准',
'/knowledge/insurance': '保险知识',
'/knowledge/pv-insurance': 'PV保险知识',
'/knowledge/learning-center/cases': '案例学习',
'/knowledge/learning-center/videos': '培训视频',
'/knowledge/learning-center/exam': '考试中心',
'/knowledge/learning-center': '学习中心',
'/knowledge': '知识资源',
//
'/system-management/laws': '法律法规',
'/system-management/practice-guide': '实践指南',
'/system-management/training': '培训材料',
'/system-management/faq': '常见问题',
'/system-management': '资源中心',
// FAQ
'/faq/duty-logic': '职责逻辑',
'/faq/coverage': '保障范围',
'/faq/pv-insurance': 'PV与保险',
'/faq': '常见问题',
//
'/contact': '联系我们',
'/privacy-policy': '隐私政策',
'/overseas': '海外风险',
'/login': '登录',
// Dashboard
'/dashboard': '工作台',
'/dashboard/project-quotes': '项目报价',
'/dashboard/projects': '项目列表',
'/dashboard/projects/:id': '项目详情',
'/dashboard/inquiries': '询价列表',
'/dashboard/inquiries/:id': '询价详情',
'/dashboard/claims': '理赔进度',
'/dashboard/claims/:id': '理赔详情',
'/dashboard/tools': '智能工具',
'/dashboard/tools/premium-calculator': '保费测算工具',
'/dashboard/tools/icf-editor': 'ICF智能修改',
'/dashboard/tools/risk-scoring': '方案风险评分',
'/dashboard/tools/protocol-risk': '方案风险评估',
'/dashboard/tools/drug-safety': '药安查',
}
function getLabel(path: string): string {
//
if (pathLabels[path]) return pathLabels[path]
//
const idMatch = path.match(/^(\/dashboard\/projects\/)[^/]+$/)
if (idMatch) return '项目详情'
const inquiryMatch = path.match(/^(\/dashboard\/inquiries\/)[^/]+$/)
if (inquiryMatch) return '询价详情'
const claimMatch = path.match(/^(\/dashboard\/claims\/)[^/]+$/)
if (claimMatch) return '理赔详情'
//
const segments = path.split('/').filter(Boolean)
const lastSegment = segments[segments.length - 1]
const segmentLabels: Record<string, string> = {
overview: 'RMO概述',
insurers: '合作保司',
brokers: '专家经纪',
'third-party': '第三方机构',
pharmacovigilance: '药物警戒',
'clinical-insurance': '临床保险',
'product-insurance': '产品保险',
'fund-payment': '资金支付',
'smart-acquisition': '智能采集',
'pv-report': 'PV报告',
'drug-safety-dict': '药安词典',
'pv-service': 'PV服务',
'ai-tools': 'AI工具',
insurance: '保险方案',
guarantee: '保证方案',
'insurance-guarantee': '保险保证',
PVknowledge: 'PV知识',
'ai-app': 'AI应用',
overseas: '国外比较',
'group-standard': '条款标准',
'pv-insurance': 'PV保险知识',
cases: '案例学习',
videos: '培训视频',
exam: '考试中心',
laws: '法律法规',
'practice-guide': '实践指南',
training: '培训材料',
'duty-logic': '职责逻辑',
coverage: '保障范围',
'privacy-policy': '隐私政策',
'project-quotes': '项目报价',
projects: '项目列表',
inquiries: '询价列表',
claims: '理赔进度',
tools: '智能工具',
'premium-calculator': '保费测算工具',
'icf-editor': 'ICF智能修改',
'risk-scoring': '方案风险评分',
'protocol-risk': '方案风险评估',
'drug-safety': '药安查',
}
return segmentLabels[lastSegment] || lastSegment || '页面'
}
function buildBreadcrumbItems(): { path: string; label: string }[] {
const path = route.path
if (!path || path === '/') return []
const items: { path: string; label: string }[] = [{ path: '/', label: '首页' }]
const segments = path.split('/').filter(Boolean)
let currentPath = ''
for (let i = 0; i < segments.length; i++) {
const seg = segments[i]
// 使
if (seg === ':id' || /^\d+$/.test(seg) || /^[a-f0-9-]{36}$/i.test(seg)) {
currentPath += '/' + seg
items.push({ path: currentPath, label: getLabel(currentPath) })
continue
}
currentPath += (currentPath ? '/' : '/') + seg
items.push({ path: currentPath, label: getLabel(currentPath) })
}
return items
}
const items = computed(() => buildBreadcrumbItems())
</script>
<style scoped>
.breadcrumb {
background: var(--breadcrumb-bg, #f8f9fa);
border-bottom: 1px solid var(--breadcrumb-border, #e9ecef);
padding: 0.5rem 0;
}
.breadcrumb-list {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.25rem;
margin: 0;
padding: 0 1rem;
max-width: 1200px;
margin-inline: auto;
list-style: none;
font-size: 0.875rem;
}
.breadcrumb-item {
display: flex;
align-items: center;
gap: 0.25rem;
}
.breadcrumb-link {
color: var(--breadcrumb-link, #0d6efd);
text-decoration: none;
}
.breadcrumb-link:hover {
text-decoration: underline;
}
.breadcrumb-sep {
color: var(--breadcrumb-sep, #6c757d);
user-select: none;
}
.breadcrumb-current {
color: var(--breadcrumb-current, #212529);
font-weight: 500;
}
</style>

View File

@ -350,6 +350,12 @@
overflow-y: auto;
}
.dashboard-content > :deep(.breadcrumb) {
margin: calc(-1 * var(--padding-xl, 24px)) calc(-1 * var(--padding-xl, 24px)) var(--padding-xl, 24px);
padding-left: var(--padding-xl, 24px);
padding-right: var(--padding-xl, 24px);
}
/* 响应式设计 */
@media (max-width: 1200px) {
.header-nav {

View File

@ -104,6 +104,7 @@
</div>
</header>
<main class="dashboard-content">
<Breadcrumb />
<RouterView />
</main>
</div>
@ -114,6 +115,7 @@
import { ref, computed } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { useAuthStore } from '@/stores/auth'
import Breadcrumb from './Breadcrumb.vue'
const route = useRoute()
const router = useRouter()

View File

@ -107,7 +107,7 @@ function Header() {
onMouseLeave={() => setKnowledgeOpen(false)}
>
<Link
to="/knowledge/regulations"
to="/knowledge/PVknowledge"
className={isActiveParent(['/knowledge', '/system-management', '/faq']) ? 'active' : ''}
>
@ -115,10 +115,10 @@ function Header() {
</Link>
{knowledgeOpen && (
<div className="dropdown-menu dropdown-menu-level2">
<Link to="/knowledge/regulations"></Link>
<Link to="/knowledge/insurance"></Link>
<Link to="/knowledge/pv-insurance">PV与保险</Link>
<Link to="/knowledge/PVknowledge">PV知识</Link>
<Link to="/knowledge/pv-insurance"></Link>
<Link to="/faq"></Link>
<Link to="/knowledge/insurance"></Link>
</div>
)}
</div>

View File

@ -73,7 +73,7 @@
@mouseleave="knowledgeOpen = false"
>
<RouterLink
to="/knowledge/regulations"
to="/knowledge/PVknowledge"
:class="{ active: isActiveParent(knowledgePaths) }"
>
知识资源
@ -81,13 +81,13 @@
</RouterLink>
<div v-show="knowledgeOpen" class="dropdown-menu dropdown-menu-level2 dropdown-menu-level3-wrapper dropdown-menu-knowledge">
<div class="dropdown-submenu">
<RouterLink to="/knowledge/regulations" class="dropdown-submenu-title-link">PV知识</RouterLink>
<RouterLink to="/knowledge/regulations">法规指南</RouterLink>
<RouterLink to="/knowledge/PVknowledge" class="dropdown-submenu-title-link">PV知识</RouterLink>
<RouterLink to="/knowledge/PVknowledge">法规指南</RouterLink>
<RouterLink to="/knowledge/ai-app">AI应用</RouterLink>
</div>
<div class="dropdown-submenu">
<RouterLink to="/knowledge/insurance" class="dropdown-submenu-title-link">保险知识</RouterLink>
<RouterLink to="/knowledge/insurance/regulations">基础知识</RouterLink>
<RouterLink to="/knowledge/insurance/PVknowledge">基础知识</RouterLink>
<RouterLink to="/knowledge/insurance/overseas">国外比较</RouterLink>
<RouterLink to="/knowledge/insurance/group-standard">条款标准</RouterLink>
</div>

View File

@ -2,6 +2,7 @@
<div class="layout">
<Header />
<main class="main-content">
<Breadcrumb v-if="route.path !== '/'" />
<RouterView />
</main>
<Footer />
@ -10,9 +11,13 @@
</template>
<script setup lang="ts">
import { useRoute } from 'vue-router'
import Header from './Header.vue'
import Footer from './Footer.vue'
import Breadcrumb from './Breadcrumb.vue'
import CookieConsent from './CookieConsent.vue'
const route = useRoute()
</script>
<style scoped>

View File

@ -45,7 +45,7 @@ const flowSteps = [
{
title: 'RMO解决方案',
points: [
'基于风险管理科学识别风险,采取措施',
'基于风险管理科学识别风险,设置保障方案',
'专业评估、24小时响应一站式理赔支持',
'积极解纷,服务研究者与试验参与者'
]

View File

@ -129,20 +129,20 @@ function Home() {
<h2 className="section-title"></h2>
<div className="capabilities-grid">
<div className="capability-item">
<div className="capability-number">10,000+</div>
<div className="capability-label"></div>
<div className="capability-number">10+</div>
<div className="capability-label"></div>
</div>
<div className="capability-item">
<div className="capability-number">3,600+</div>
<div className="capability-label"></div>
<div className="capability-number">50+</div>
<div className="capability-label"></div>
</div>
<div className="capability-item">
<div className="capability-number">180+</div>
<div className="capability-label"></div>
<div className="capability-number">Top 5</div>
<div className="capability-label"></div>
</div>
<div className="capability-item">
<div className="capability-number">130+</div>
<div className="capability-label"></div>
<div className="capability-number">7/15</div>
<div className="capability-label"></div>
</div>
</div>
</div>
@ -155,9 +155,9 @@ function Home() {
>
<div className="section-content">
<h2 className="section-title"></h2>
<p className="section-subtitle"></p>
<p className="section-subtitle"></p>
<div className="knowledge-grid">
<Link to="/knowledge/regulations" className="knowledge-card">
<Link to="/knowledge/PVknowledge" className="knowledge-card">
<h3></h3>
<p></p>
</Link>

View File

@ -2,7 +2,7 @@ import PageContainer from '../components/PageContainer'
import PageHeader from '../components/PageHeader'
import './KnowledgeBase.css'
function KnowledgeRegulations() {
function KnowledgePVknowledge() {
return (
<PageContainer>
<div className="knowledge-page">
@ -35,4 +35,4 @@ function KnowledgeRegulations() {
)
}
export default KnowledgeRegulations
export default KnowledgePVknowledge

View File

@ -5,7 +5,7 @@ import PageHeader from '../components/PageHeader'
import './ResourceCenter.css'
// 法律法规页面
function LawsRegulations() {
function LawsPVknowledge() {
return (
<PageContainer>
<div className="resource-center">
@ -189,7 +189,7 @@ function ResourceCenter() {
// 根据路径显示不同内容
if (location.pathname.includes('/laws')) {
return <LawsRegulations />
return <LawsPVknowledge />
} else if (location.pathname.includes('/practice-guide')) {
return <PracticeGuide />
} else if (location.pathname.includes('/training')) {

View File

@ -25,7 +25,7 @@ import PVReport from '@/views/PVReport.vue'
import DrugSafetyDict from '@/views/DrugSafetyDict.vue'
import RmoMode from '@/views/RmoMode.vue'
import PostMarket from '@/views/PostMarket.vue'
import KnowledgeRegulations from '@/views/KnowledgeRegulations.vue'
import KnowledgePVknowledge from '@/views/KnowledgePVknowledge.vue'
import KnowledgeInsurance from '@/views/KnowledgeInsurance.vue'
import KnowledgePvInsurance from '@/views/KnowledgePvInsurance.vue'
import ResourceCenter from '@/views/ResourceCenter.vue'
@ -86,10 +86,10 @@ const router = createRouter({
{ path: 'post-market', component: PostMarket },
{ path: 'post-market/insurance', component: PostMarket },
{ path: 'post-market/guarantee', component: PostMarket },
{ path: 'knowledge/regulations', component: KnowledgeRegulations },
{ path: 'knowledge/PVknowledge', component: KnowledgePVknowledge },
{ path: 'knowledge/ai-app', component: SmartAcquisition },
{ path: 'knowledge/insurance', component: KnowledgeInsurance },
{ path: 'knowledge/insurance/regulations', component: KnowledgeRegulations },
{ path: 'knowledge/insurance/PVknowledge', component: KnowledgePVknowledge },
{ path: 'knowledge/insurance/overseas', component: Overseas },
{ path: 'knowledge/insurance/group-standard', component: KnowledgeInsurance },
{ path: 'knowledge/pv-insurance', component: KnowledgePvInsurance },

View File

@ -37,7 +37,7 @@
</div>
</div>
<div v-else-if="i === 3" class="knowledge-grid">
<RouterLink to="/knowledge/regulations" class="knowledge-card">
<RouterLink to="/knowledge/PVknowledge" class="knowledge-card">
<h3>法规指南</h3>
<p>最新的法律法规与实践指南</p>
</RouterLink>
@ -97,15 +97,15 @@ const sections = [
{ class: 'hero-section', title: '', subtitle: '' },
{ class: 'solutions-section', title: '', subtitle: '' },
{ class: 'capabilities-section', title: '核心能力', subtitle: '' },
{ class: 'knowledge-section', title: '知识资源', subtitle: '分享我们的行业洞见和研发咨询' },
{ class: 'knowledge-section', title: '知识资源', subtitle: '分享我们对行业的洞见和风险资讯' },
{ class: 'contact-section', title: '联系我们', subtitle: '获取RMO最新资讯第一时间了解我们的企业动态' }
]
const capabilities = [
{ number: '10,000+', label: '服务项目' },
{ number: '3,600+', label: '合作客户' },
{ number: '180+', label: '服务网络' },
{ number: '130+', label: '创新药项目' }
{ number: '100+', label: '患者安全专家' },
{ number: '10+', label: '合作保司' },
{ number: '1st', label: '第一个团标与数字化系统' },
{ number: '7/15', label: '服务时限承诺' }
]
function goToSection(index: number) {

View File

@ -0,0 +1,36 @@
<template>
<PageContainer>
<div class="knowledge-page">
<PageHeader title="PV知识" description="药物警戒与风险管理相关知识" />
<div class="page-body">
<section class="section">
<div class="container">
<div class="knowledge-content">
<div class="knowledge-card">
<h3>药物警戒法规</h3>
<p>药物警戒相关的法律法规要求包括GVP药物管理法等</p>
</div>
<div class="knowledge-card">
<h3>实践指南</h3>
<p>药物警戒行业最佳实践指南协助风险管理保障受试者安全</p>
</div>
<div class="knowledge-card">
<h3>行业动态</h3>
<p>最新的药物警戒风险提示与行业信息及时了解行业变化</p>
</div>
</div>
</div>
</section>
</div>
</div>
</PageContainer>
</template>
<script setup lang="ts">
import PageContainer from '@/components/PageContainer.vue'
import PageHeader from '@/components/PageHeader.vue'
</script>
<style scoped>
@import '@/pages/KnowledgeBase.css';
</style>