311 lines
7.4 KiB
Markdown
311 lines
7.4 KiB
Markdown
# 统一内容系统使用指南
|
||
|
||
## 概述
|
||
|
||
现在 `comindex.uvue` 页面已经改用统一的 `ak_contents` 表来管理业务项目,不再需要单独的 `ak_business_items` 表。这样做的好处包括:
|
||
|
||
1. **统一管理**: 所有内容(文章、业务项目、产品等)使用同一套表结构
|
||
2. **多语言支持**: 利用现有的多语言翻译系统
|
||
3. **功能复用**: 共享评论、收藏、分享等功能
|
||
4. **维护简化**: 减少重复的表结构和逻辑
|
||
|
||
## 表结构说明
|
||
|
||
### ak_contents 表
|
||
业务项目作为一种特殊的内容类型存储在 `ak_contents` 表中:
|
||
|
||
```sql
|
||
-- 关键字段说明
|
||
content_type = 'business_item' -- 标识为业务项目
|
||
title -- 业务项目标题
|
||
content_summary -- 业务项目描述
|
||
featured_image_url -- 业务项目图片
|
||
category_id -- 分类ID(关联到业务分类)
|
||
original_language -- 原始语言
|
||
status = 'published' -- 发布状态
|
||
view_count -- 浏览次数
|
||
published_at -- 发布时间
|
||
tags -- 标签数组
|
||
```
|
||
|
||
## 数据获取逻辑
|
||
|
||
### 1. 查询优化
|
||
使用连接查询获取分类信息,避免多次查询:
|
||
|
||
```typescript
|
||
const result = await supa
|
||
.from('ak_contents')
|
||
.select(`
|
||
id,
|
||
title,
|
||
content_summary,
|
||
featured_image_url,
|
||
published_at,
|
||
view_count,
|
||
status,
|
||
tags,
|
||
ak_content_categories!inner(name_key)
|
||
`)
|
||
.eq('status', 'published')
|
||
.eq('content_type', 'business_item')
|
||
.eq('original_language', currentLanguageCode.value)
|
||
.order('published_at', { ascending: false })
|
||
```
|
||
|
||
### 2. 多语言支持
|
||
根据用户选择的语言自动筛选对应语言的业务项目:
|
||
- `original_language = 'zh-CN'` - 简体中文
|
||
- `original_language = 'en'` - 英文
|
||
- `original_language = 'zh-TW'` - 繁体中文
|
||
- `original_language = 'ja'` - 日文
|
||
|
||
### 3. 数据转换
|
||
将 `ak_contents` 的字段映射到 `BusinessItem` 类型:
|
||
|
||
```typescript
|
||
const businessItem: BusinessItem = {
|
||
id: item.id,
|
||
title: item.title,
|
||
description: item.content_summary,
|
||
imageUrl: item.featured_image_url,
|
||
categoryName: item.ak_content_categories?.name_key,
|
||
publishTime: new Date(item.published_at).toLocaleDateString(),
|
||
viewCount: item.view_count,
|
||
loading: false
|
||
}
|
||
```
|
||
|
||
## 部署步骤
|
||
|
||
### 1. 运行初始化脚本
|
||
```bash
|
||
# 运行业务项目初始化脚本
|
||
psql -d your_database -f init_business_items.sql
|
||
```
|
||
|
||
### 2. 验证数据
|
||
```sql
|
||
-- 查看业务项目
|
||
SELECT * FROM public.vw_business_items;
|
||
|
||
-- 检查分类
|
||
SELECT * FROM public.ak_content_categories
|
||
WHERE name_key LIKE 'business.%';
|
||
|
||
-- 验证内容类型
|
||
SELECT content_type, COUNT(*)
|
||
FROM public.ak_contents
|
||
GROUP BY content_type;
|
||
```
|
||
|
||
### 3. 测试功能
|
||
- 访问公司首页,查看业务项目展示
|
||
- 切换语言,验证多语言业务项目
|
||
- 点击业务项目,测试详情页导航
|
||
|
||
## 内容管理
|
||
|
||
### 1. 添加新业务项目
|
||
```sql
|
||
INSERT INTO public.ak_contents (
|
||
title,
|
||
content_summary,
|
||
content_type,
|
||
category_id,
|
||
original_language,
|
||
status,
|
||
featured_image_url,
|
||
tags
|
||
) VALUES (
|
||
'新业务项目',
|
||
'项目描述...',
|
||
'business_item',
|
||
(SELECT id FROM ak_content_categories WHERE name_key = 'business.ai'),
|
||
'zh-CN',
|
||
'published',
|
||
'https://example.com/image.jpg',
|
||
ARRAY['标签1', '标签2']
|
||
);
|
||
```
|
||
|
||
### 2. 添加多语言版本
|
||
```sql
|
||
-- 先插入英文版本
|
||
INSERT INTO public.ak_contents (
|
||
title,
|
||
content_summary,
|
||
content_type,
|
||
category_id,
|
||
original_language,
|
||
status
|
||
) VALUES (
|
||
'AI Solutions',
|
||
'Comprehensive AI technology support...',
|
||
'business_item',
|
||
(SELECT id FROM ak_content_categories WHERE name_key = 'business.ai'),
|
||
'en',
|
||
'published'
|
||
);
|
||
```
|
||
|
||
### 3. 管理业务分类
|
||
```sql
|
||
-- 添加新的业务分类
|
||
INSERT INTO public.ak_content_categories (
|
||
name_key,
|
||
level,
|
||
ai_keywords,
|
||
sort_order
|
||
) VALUES (
|
||
'business.cybersecurity',
|
||
0,
|
||
ARRAY['网络安全', 'cybersecurity', '信息安全'],
|
||
9
|
||
);
|
||
```
|
||
|
||
## 页面路由更新
|
||
|
||
### 详情页导航
|
||
现在业务项目详情使用通用的内容详情页:
|
||
```typescript
|
||
// 旧的路由
|
||
url: `/pages/business/detail?id=${item.id}`
|
||
|
||
// 新的路由
|
||
url: `/pages/content/detail?id=${item.id}&type=business_item`
|
||
```
|
||
|
||
### 建议的页面结构
|
||
```
|
||
pages/
|
||
content/
|
||
detail.uvue -- 统一的内容详情页
|
||
list.uvue -- 内容列表页
|
||
info/
|
||
comindex.uvue -- 公司首页(业务项目展示)
|
||
index.uvue -- 信息首页
|
||
```
|
||
|
||
## 性能优化
|
||
|
||
### 1. 索引优化
|
||
确保以下索引存在:
|
||
```sql
|
||
CREATE INDEX IF NOT EXISTS idx_ak_contents_content_type ON ak_contents(content_type);
|
||
CREATE INDEX IF NOT EXISTS idx_ak_contents_language ON ak_contents(original_language);
|
||
CREATE INDEX IF NOT EXISTS idx_ak_contents_status ON ak_contents(status);
|
||
CREATE INDEX IF NOT EXISTS idx_ak_contents_published ON ak_contents(published_at DESC);
|
||
```
|
||
|
||
### 2. 查询优化
|
||
- 使用连接查询减少数据库请求次数
|
||
- 按语言筛选减少数据传输量
|
||
- 分页加载避免一次性加载过多数据
|
||
|
||
### 3. 缓存策略
|
||
- 分类数据可以缓存,减少重复查询
|
||
- 公司配置信息可以缓存到本地存储
|
||
- 热门业务项目可以预加载
|
||
|
||
## 扩展功能
|
||
|
||
基于统一的内容系统,可以轻松扩展以下功能:
|
||
|
||
### 1. 内容翻译
|
||
利用现有的 `ak_content_translations` 表:
|
||
```sql
|
||
-- 为业务项目添加翻译
|
||
INSERT INTO public.ak_content_translations (
|
||
content_id,
|
||
language_id,
|
||
translated_title,
|
||
translated_content,
|
||
translation_method
|
||
) VALUES (
|
||
'business-item-id',
|
||
'language-id',
|
||
'Translated Title',
|
||
'Translated Content',
|
||
'human'
|
||
);
|
||
```
|
||
|
||
### 2. 业务项目评论
|
||
使用 `ak_comments` 表:
|
||
```sql
|
||
-- 为业务项目添加评论
|
||
INSERT INTO public.ak_comments (
|
||
target_type,
|
||
target_id,
|
||
author_id,
|
||
content
|
||
) VALUES (
|
||
'content',
|
||
'business-item-id',
|
||
'user-id',
|
||
'这个业务解决方案很棒!'
|
||
);
|
||
```
|
||
|
||
### 3. 业务项目收藏
|
||
使用 `ak_content_favorites` 表:
|
||
```sql
|
||
-- 收藏业务项目
|
||
INSERT INTO public.ak_content_favorites (
|
||
user_id,
|
||
target_type,
|
||
target_id
|
||
) VALUES (
|
||
'user-id',
|
||
'content',
|
||
'business-item-id'
|
||
);
|
||
```
|
||
|
||
## 迁移指南
|
||
|
||
### 从 ak_business_items 迁移
|
||
如果之前使用过独立的业务项目表,可以这样迁移:
|
||
|
||
```sql
|
||
-- 迁移数据
|
||
INSERT INTO public.ak_contents (
|
||
title,
|
||
content_summary,
|
||
content_type,
|
||
featured_image_url,
|
||
view_count,
|
||
status,
|
||
original_language,
|
||
published_at
|
||
)
|
||
SELECT
|
||
title,
|
||
description,
|
||
'business_item',
|
||
image_url,
|
||
view_count,
|
||
'published',
|
||
'zh-CN',
|
||
created_at
|
||
FROM old_ak_business_items
|
||
WHERE status = 'active';
|
||
|
||
-- 删除旧表(谨慎操作)
|
||
-- DROP TABLE IF EXISTS old_ak_business_items;
|
||
```
|
||
|
||
## 总结
|
||
|
||
通过使用统一的 `ak_contents` 表来管理业务项目,我们实现了:
|
||
|
||
1. ✅ **数据结构统一**: 所有内容使用相同的表结构
|
||
2. ✅ **多语言支持**: 自动根据用户语言筛选内容
|
||
3. ✅ **功能集成**: 共享评论、收藏、分享等功能
|
||
4. ✅ **维护简化**: 减少重复代码和表结构
|
||
5. ✅ **扩展性强**: 易于添加新的内容类型和功能
|
||
|
||
这种设计模式可以应用到其他内容类型(如产品介绍、案例研究等),形成统一的内容管理系统。
|