Initial commit of akmon project
This commit is contained in:
310
UNIFIED_CONTENT_SYSTEM_GUIDE.md
Normal file
310
UNIFIED_CONTENT_SYSTEM_GUIDE.md
Normal file
@@ -0,0 +1,310 @@
|
||||
# 统一内容系统使用指南
|
||||
|
||||
## 概述
|
||||
|
||||
现在 `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. ✅ **扩展性强**: 易于添加新的内容类型和功能
|
||||
|
||||
这种设计模式可以应用到其他内容类型(如产品介绍、案例研究等),形成统一的内容管理系统。
|
||||
Reference in New Issue
Block a user