feat(content): 短剧分类和标签支持多语言

This commit is contained in:
Zhou Weidong committed 2026-10-24 16:53:26 +08:00
1 parent 5c20cf1ab9
commit e60c47123c
34 files changed
+1071 -53

No files matched your search

+35
View File
@@ -0,0 +1,35 @@
-- Author: fruit.com.cn
-- 短剧类型名称改为勾选语言。中文仍在 name,英文和印尼语写入原列与 locales。
ALTER TABLE drama_category ADD COLUMN IF NOT EXISTS name_en VARCHAR(64) NOT NULL DEFAULT '';
ALTER TABLE drama_category ADD COLUMN IF NOT EXISTS name_id VARCHAR(64) NOT NULL DEFAULT '';
ALTER TABLE drama_category ADD COLUMN IF NOT EXISTS name_locales TEXT NOT NULL DEFAULT '{}';
UPDATE drama_category
SET name_locales = (
SELECT COALESCE(json_object_agg(k, v), '{}'::json)::text
FROM (
SELECT 'zh' AS k, name AS v WHERE name <> ''
UNION ALL SELECT 'en', name_en WHERE name_en <> ''
UNION ALL SELECT 'id', name_id WHERE name_id <> ''
) s
)
WHERE name_locales = '{}';
UPDATE drama_category AS c
SET name_en = v.name_en,
name_id = v.name_id,
name_locales = json_build_object('zh', c.name, 'en', v.name_en, 'id', v.name_id)::text
FROM (VALUES
(1::bigint, 'Urban Romance', 'Romansa Urban'),
(2, 'Rebirth Comeback', 'Kelahiran Kembali'),
(3, 'Sweet Romance', 'Romansa Manis'),
(4, 'Suspense Revenge', 'Balas Dendam'),
(2112443900437336065, 'Campus Action', 'Aksi Kampus'),
(2112443936592236545, 'Horror Mystery', 'Horor Misteri'),
(2112444003856289794, 'Infinite Travel', 'Perjalanan Tanpa Batas'),
(2112444050467590146, 'Thriller Horror', 'Thriller Horor'),
(2112444103433261057, 'Indonesia Exclusive', 'Eksklusif Indonesia')
) AS v(id, name_en, name_id)
WHERE c.id = v.id
AND (c.name_en = '' OR c.name_id = '');
@@ -0,0 +1,10 @@
-- Author: fruit.com.cn
-- 首页运营分类名称补英文、印尼语。原 name 继续表示中文。
ALTER TABLE drama_classification
ADD COLUMN IF NOT EXISTS name_en VARCHAR(64) NOT NULL DEFAULT '',
ADD COLUMN IF NOT EXISTS name_id VARCHAR(64) NOT NULL DEFAULT '';
COMMENT ON COLUMN drama_classification.name IS '中文名称';
COMMENT ON COLUMN drama_classification.name_en IS '英文名称';
COMMENT ON COLUMN drama_classification.name_id IS '印尼语名称';
+54
View File
@@ -0,0 +1,54 @@
-- Author: fruit.com.cn
-- 标签管理:三种语言名称。短剧单选一个标签。
CREATE TABLE IF NOT EXISTS content_tag (
id BIGINT PRIMARY KEY,
name VARCHAR(64) NOT NULL,
name_en VARCHAR(64) NOT NULL DEFAULT '',
name_id VARCHAR(64) NOT NULL DEFAULT '',
sort INTEGER NOT NULL DEFAULT 0,
status SMALLINT NOT NULL DEFAULT 1,
created_at TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE UNIQUE INDEX IF NOT EXISTS uk_content_tag_name ON content_tag (name);
DROP TRIGGER IF EXISTS trg_content_tag_updated_at ON content_tag;
CREATE TRIGGER trg_content_tag_updated_at
BEFORE UPDATE ON content_tag
FOR EACH ROW
EXECUTE FUNCTION set_updated_at();
ALTER TABLE drama ADD COLUMN IF NOT EXISTS tag_id BIGINT;
CREATE INDEX IF NOT EXISTS idx_drama_tag ON drama (tag_id);
INSERT INTO content_tag (id, name, name_en, name_id, sort, status)
VALUES
(2113500000000000001, '漫剧', 'Anime', 'Anime', 1, 1),
(2113500000000000002, '真人剧', 'Live Action', 'Live Action', 2, 1)
ON CONFLICT (id) DO NOTHING;
UPDATE drama SET tag_id = 2113500000000000001
WHERE drama_type = 'ANIME' AND tag_id IS NULL;
UPDATE drama SET tag_id = 2113500000000000002
WHERE (drama_type IS NULL OR drama_type = 'LIVE') AND tag_id IS NULL;
INSERT INTO sys_menu (
id, parent_id, title, route_path, route_name, component, icon,
permission_code, type, sort, visible, status, super_admin_visible
) VALUES (
45, 3, '标签管理', 'content-tags', 'content-tags',
'views/contentManagement/TagManagementView', 'ep:price-tag',
'drama:list', 'MENU', 7, 1, 1, 1
) ON CONFLICT (id) DO NOTHING;
INSERT INTO sys_role_menu (id, role_id, menu_id)
SELECT v.id, v.role_id, 45
FROM (VALUES
(2113600000000000001, 1),
(2113600000000000002, 2),
(2113600000000000003, 3),
(2113600000000000004, 4)
) AS v(id, role_id)
WHERE NOT EXISTS (
SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = v.role_id AND rm.menu_id = 45
);
@@ -0,0 +1,13 @@
-- Author: fruit.com.cn
-- 短剧标题和简介按勾选语言保存。中文仍写 title / synopsis。
ALTER TABLE drama ADD COLUMN IF NOT EXISTS title_locales TEXT NOT NULL DEFAULT '{}';
ALTER TABLE drama ADD COLUMN IF NOT EXISTS synopsis_locales TEXT NOT NULL DEFAULT '{}';
UPDATE drama
SET title_locales = json_build_object('zh', title)::text
WHERE title_locales = '{}' AND title <> '';
UPDATE drama
SET synopsis_locales = json_build_object('zh', synopsis)::text
WHERE synopsis_locales = '{}' AND synopsis IS NOT NULL AND synopsis <> '';
+51
View File
@@ -0,0 +1,51 @@
-- Author: fruit.com.cn
-- 名称语言改为勾选保存。中文、英文、印尼语仍写原列,勾选结果记在 locales 文本里。
ALTER TABLE content_tag ADD COLUMN IF NOT EXISTS name_locales TEXT NOT NULL DEFAULT '{}';
ALTER TABLE drama_classification ADD COLUMN IF NOT EXISTS name_locales TEXT NOT NULL DEFAULT '{}';
ALTER TABLE drama_playlist_category ADD COLUMN IF NOT EXISTS name_locales TEXT NOT NULL DEFAULT '{}';
ALTER TABLE drama_playlist_category ADD COLUMN IF NOT EXISTS description_locales TEXT NOT NULL DEFAULT '{}';
UPDATE content_tag
SET name_locales = (
SELECT COALESCE(json_object_agg(k, v), '{}'::json)::text
FROM (
SELECT 'zh' AS k, name AS v WHERE name <> ''
UNION ALL SELECT 'en', name_en WHERE name_en <> ''
UNION ALL SELECT 'id', name_id WHERE name_id <> ''
) s
)
WHERE name_locales = '{}';
UPDATE drama_classification
SET name_locales = (
SELECT COALESCE(json_object_agg(k, v), '{}'::json)::text
FROM (
SELECT 'zh' AS k, name AS v WHERE name <> ''
UNION ALL SELECT 'en', name_en WHERE name_en <> ''
UNION ALL SELECT 'id', name_id WHERE name_id <> ''
) s
)
WHERE name_locales = '{}';
UPDATE drama_playlist_category
SET name_locales = (
SELECT COALESCE(json_object_agg(k, v), '{}'::json)::text
FROM (
SELECT 'zh' AS k, name AS v WHERE name <> ''
UNION ALL SELECT 'en', name_en WHERE name_en <> ''
UNION ALL SELECT 'id', name_id WHERE name_id <> ''
) s
)
WHERE name_locales = '{}';
UPDATE drama_playlist_category
SET description_locales = (
SELECT COALESCE(json_object_agg(k, v), '{}'::json)::text
FROM (
SELECT 'zh' AS k, description AS v WHERE description <> ''
UNION ALL SELECT 'en', description_en WHERE description_en <> ''
UNION ALL SELECT 'id', description_id WHERE description_id <> ''
) s
)
WHERE description_locales = '{}';
+15
View File
@@ -0,0 +1,15 @@
-- Author: fruit.com.cn
-- 剧单分类名称和描述补英文、印尼语。原 name/description 继续表示中文。
ALTER TABLE drama_playlist_category
ADD COLUMN IF NOT EXISTS name_en VARCHAR(64) NOT NULL DEFAULT '',
ADD COLUMN IF NOT EXISTS name_id VARCHAR(64) NOT NULL DEFAULT '',
ADD COLUMN IF NOT EXISTS description_en VARCHAR(255) NOT NULL DEFAULT '',
ADD COLUMN IF NOT EXISTS description_id VARCHAR(255) NOT NULL DEFAULT '';
COMMENT ON COLUMN drama_playlist_category.name IS '中文名称';
COMMENT ON COLUMN drama_playlist_category.name_en IS '英文名称';
COMMENT ON COLUMN drama_playlist_category.name_id IS '印尼语名称';
COMMENT ON COLUMN drama_playlist_category.description IS '中文描述';
COMMENT ON COLUMN drama_playlist_category.description_en IS '英文描述';
COMMENT ON COLUMN drama_playlist_category.description_id IS '印尼语描述';
+7
View File
@@ -0,0 +1,7 @@
-- Author: fruit.com.cn
-- 标签角标背景色。客户端按 bg_color 绘制封面右上角标签。
ALTER TABLE content_tag ADD COLUMN IF NOT EXISTS bg_color VARCHAR(7) NOT NULL DEFAULT '#E5484D';
UPDATE content_tag SET bg_color = '#E5484D' WHERE name = '热剧' AND (bg_color = '' OR bg_color = '#E5484D');
UPDATE content_tag SET bg_color = '#3B82F6' WHERE name = '新剧';