feat(content): 新增运营分类与剧单分类管理
This commit is contained in:
1 parent
758c7521bb
commit
7b360ddccd
26 files changed
+1106
-3
No files matched your search
+12
-2
@@ -57,6 +57,8 @@ INSERT INTO sys_menu (id, parent_id, title, route_path, route_name, component, r
|
||||
(5, 3, '剧集管理', 'episodes', 'episodes', 'views/contentManagement/EpisodeManagementView', '', '', 'episode:list', 'MENU', 0, 0, 2),
|
||||
(12, 3, '轮播图管理', 'banners', 'banners', 'views/contentManagement/BannerManagementView', '', '', 'banner:list', 'MENU', 0, 0, 3),
|
||||
(13, 3, '类型管理', 'categories', 'categories', 'views/contentManagement/CategoryManagementView','', '', 'drama:list', 'MENU', 0, 0, 4),
|
||||
(36, 3, '分类管理', 'category-dramas','category-dramas','views/contentManagement/CategoryDramaView', '', '', 'drama:list', 'MENU', 0, 0, 5),
|
||||
(37, 3, '剧单管理', 'drama-playlists','drama-playlists','views/contentManagement/DramaPlaylistView', '', '', 'drama:list', 'MENU', 0, 0, 6),
|
||||
(6, 0, '后台管理', '/system', 'System', '#', '/system/access', 'material-symbols:settings-rounded', 'system:role', 'CATALOG', 1, 0, 3),
|
||||
(7, 6, '角色权限配置', 'access', 'access', 'views/permission/RoleManagementView', '', '', 'system:role', 'MENU', 0, 0, 1),
|
||||
(8, 6, '管理员用户列表','admin-users','admin-users', 'views/userManagement/AdminUsersView', '', '', 'system:admin-user','MENU', 0, 0, 2),
|
||||
@@ -77,9 +79,17 @@ ON CONFLICT (id) DO UPDATE SET parent_id = EXCLUDED.parent_id, title = EXCLUDED.
|
||||
redirect = EXCLUDED.redirect, icon = EXCLUDED.icon, permission_code = EXCLUDED.permission_code,
|
||||
type = EXCLUDED.type, always_show = EXCLUDED.always_show, affix = EXCLUDED.affix, sort = EXCLUDED.sort;
|
||||
|
||||
-- 转码设置菜单(挂在后台管理下,仅超级管理员可见)
|
||||
INSERT INTO sys_menu (id, parent_id, title, route_path, route_name, component, redirect, icon,
|
||||
permission_code, type, always_show, affix, sort) VALUES
|
||||
(35, 6, '转码设置', 'transcode-settings', 'transcode-settings', 'views/systemManagement/TranscodeSettingsView', '', '', 'episode:upload', 'MENU', 0, 0, 7)
|
||||
ON CONFLICT (id) DO UPDATE SET parent_id = EXCLUDED.parent_id, title = EXCLUDED.title,
|
||||
route_path = EXCLUDED.route_path, route_name = EXCLUDED.route_name, component = EXCLUDED.component,
|
||||
redirect = EXCLUDED.redirect, icon = EXCLUDED.icon, permission_code = EXCLUDED.permission_code,
|
||||
type = EXCLUDED.type, always_show = EXCLUDED.always_show, affix = EXCLUDED.affix, sort = EXCLUDED.sort;
|
||||
|
||||
-- K23:二级菜单统一只显示文字,历史图标值也一并清空。
|
||||
UPDATE sys_menu SET icon = '' WHERE type = 'MENU';
|
||||
|
||||
-- ---------- 角色-权限 ----------
|
||||
INSERT INTO sys_role_permission (id, role_id, permission_id)
|
||||
SELECT r.id * 1000000 + p.id, r.id, p.id FROM sys_role r CROSS JOIN sys_permission p WHERE r.code = 'super_admin'
|
||||
@@ -112,7 +122,7 @@ ON CONFLICT DO NOTHING;
|
||||
|
||||
INSERT INTO sys_role_menu (id, role_id, menu_id)
|
||||
SELECT r.id * 1000000 + m.id, r.id, m.id FROM sys_role r CROSS JOIN sys_menu m
|
||||
WHERE r.code IN ('content_operator','content_reviewer','data_analyst') AND m.id IN (1,2,3,4,5,12,13)
|
||||
WHERE r.code IN ('content_operator','content_reviewer','data_analyst') AND m.id IN (1,2,3,4,5,12,13,36,37)
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- ---------- 管理员(密码均为 admin123) ----------
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
-- Author: fruit.com.cn
|
||||
-- 后台「分类管理」菜单与分类-短剧关联页(幂等,仅提交文件,由发布流程执行)
|
||||
|
||||
INSERT INTO sys_menu (id, parent_id, title, route_path, route_name, component, redirect, icon,
|
||||
permission_code, type, always_show, affix, sort) VALUES
|
||||
(36, 3, '分类管理', 'category-dramas', 'category-dramas',
|
||||
'views/contentManagement/CategoryDramaView', '', '',
|
||||
'drama:list', 'MENU', 0, 0, 5)
|
||||
ON CONFLICT (id) DO UPDATE SET parent_id = EXCLUDED.parent_id, title = EXCLUDED.title,
|
||||
route_path = EXCLUDED.route_path, route_name = EXCLUDED.route_name,
|
||||
component = EXCLUDED.component, redirect = EXCLUDED.redirect, icon = EXCLUDED.icon,
|
||||
permission_code = EXCLUDED.permission_code, type = EXCLUDED.type,
|
||||
always_show = EXCLUDED.always_show, affix = EXCLUDED.affix, sort = EXCLUDED.sort;
|
||||
|
||||
INSERT INTO sys_role_menu (id, role_id, menu_id)
|
||||
SELECT r.id * 1000000 + m.id, r.id, m.id
|
||||
FROM sys_role r
|
||||
CROSS JOIN sys_menu m
|
||||
WHERE r.code IN ('super_admin', 'content_operator', 'content_reviewer', 'data_analyst')
|
||||
AND m.id = 36
|
||||
ON CONFLICT DO NOTHING;
|
||||
@@ -0,0 +1,31 @@
|
||||
-- Author: fruit.com.cn
|
||||
-- 运营分类(与「类型」drama_category 是两个概念):分类可自定义增删,并关联多部短剧
|
||||
-- 幂等,仅提交文件,由发布流程执行
|
||||
|
||||
CREATE TABLE IF NOT EXISTS drama_classification (
|
||||
id BIGINT PRIMARY KEY,
|
||||
name VARCHAR(64) NOT NULL,
|
||||
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_drama_classification_name ON drama_classification (name);
|
||||
COMMENT ON TABLE drama_classification IS '运营分类;与短剧类型(drama_category)相互独立';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS drama_classification_drama (
|
||||
id BIGINT PRIMARY KEY,
|
||||
classification_id BIGINT NOT NULL,
|
||||
drama_id BIGINT NOT NULL,
|
||||
created_at TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uk_classification_drama
|
||||
ON drama_classification_drama (classification_id, drama_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_classification_drama_drama
|
||||
ON drama_classification_drama (drama_id);
|
||||
COMMENT ON TABLE drama_classification_drama IS '分类与短剧的关联关系';
|
||||
|
||||
DROP TRIGGER IF EXISTS trg_drama_classification_updated_at ON drama_classification;
|
||||
CREATE TRIGGER trg_drama_classification_updated_at
|
||||
BEFORE UPDATE ON drama_classification
|
||||
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
|
||||
@@ -0,0 +1,21 @@
|
||||
-- Author: fruit.com.cn
|
||||
-- 后台「剧单管理」菜单(幂等,仅提交文件,由发布流程执行)
|
||||
|
||||
INSERT INTO sys_menu (id, parent_id, title, route_path, route_name, component, redirect, icon,
|
||||
permission_code, type, always_show, affix, sort) VALUES
|
||||
(37, 3, '剧单管理', 'drama-playlists', 'drama-playlists',
|
||||
'views/contentManagement/DramaPlaylistView', '', '',
|
||||
'drama:list', 'MENU', 0, 0, 6)
|
||||
ON CONFLICT (id) DO UPDATE SET parent_id = EXCLUDED.parent_id, title = EXCLUDED.title,
|
||||
route_path = EXCLUDED.route_path, route_name = EXCLUDED.route_name,
|
||||
component = EXCLUDED.component, redirect = EXCLUDED.redirect, icon = EXCLUDED.icon,
|
||||
permission_code = EXCLUDED.permission_code, type = EXCLUDED.type,
|
||||
always_show = EXCLUDED.always_show, affix = EXCLUDED.affix, sort = EXCLUDED.sort;
|
||||
|
||||
INSERT INTO sys_role_menu (id, role_id, menu_id)
|
||||
SELECT r.id * 1000000 + m.id, r.id, m.id
|
||||
FROM sys_role r
|
||||
CROSS JOIN sys_menu m
|
||||
WHERE r.code IN ('super_admin', 'content_operator', 'content_reviewer', 'data_analyst')
|
||||
AND m.id = 37
|
||||
ON CONFLICT DO NOTHING;
|
||||
@@ -0,0 +1,31 @@
|
||||
-- Author: fruit.com.cn
|
||||
-- 剧单:运营编排的短剧集合,归属某个分类,并可关联多部短剧
|
||||
-- 幂等,仅提交文件,由发布流程执行
|
||||
|
||||
CREATE TABLE IF NOT EXISTS drama_playlist (
|
||||
id BIGINT PRIMARY KEY,
|
||||
classification_id BIGINT NOT NULL DEFAULT 0,
|
||||
name VARCHAR(64) NOT NULL,
|
||||
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_drama_playlist_name ON drama_playlist (name);
|
||||
CREATE INDEX IF NOT EXISTS idx_drama_playlist_classification ON drama_playlist (classification_id);
|
||||
COMMENT ON TABLE drama_playlist IS '剧单;归属分类,可关联多部短剧';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS drama_playlist_drama (
|
||||
id BIGINT PRIMARY KEY,
|
||||
playlist_id BIGINT NOT NULL,
|
||||
drama_id BIGINT NOT NULL,
|
||||
created_at TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uk_playlist_drama ON drama_playlist_drama (playlist_id, drama_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_playlist_drama_drama ON drama_playlist_drama (drama_id);
|
||||
COMMENT ON TABLE drama_playlist_drama IS '剧单与短剧的关联关系';
|
||||
|
||||
DROP TRIGGER IF EXISTS trg_drama_playlist_updated_at ON drama_playlist;
|
||||
CREATE TRIGGER trg_drama_playlist_updated_at
|
||||
BEFORE UPDATE ON drama_playlist
|
||||
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
|
||||
@@ -0,0 +1,18 @@
|
||||
-- Author: fruit.com.cn
|
||||
-- 剧单分类直接关联短剧(不再有「剧单」这一层)
|
||||
-- 幂等,仅提交文件,由发布流程执行
|
||||
|
||||
CREATE TABLE IF NOT EXISTS drama_playlist_category_drama (
|
||||
id BIGINT PRIMARY KEY,
|
||||
category_id BIGINT NOT NULL,
|
||||
drama_id BIGINT NOT NULL,
|
||||
created_at TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uk_playlist_category_drama
|
||||
ON drama_playlist_category_drama (category_id, drama_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_playlist_category_drama_drama
|
||||
ON drama_playlist_category_drama (drama_id);
|
||||
COMMENT ON TABLE drama_playlist_category_drama IS '剧单分类与短剧的关联关系';
|
||||
|
||||
DROP TABLE IF EXISTS drama_playlist_drama;
|
||||
DROP TABLE IF EXISTS drama_playlist;
|
||||
@@ -0,0 +1,31 @@
|
||||
-- Author: fruit.com.cn
|
||||
-- 剧单专属分类(与「分类管理」的运营分类无关),并调整剧单归属字段
|
||||
-- 幂等,仅提交文件,由发布流程执行
|
||||
|
||||
CREATE TABLE IF NOT EXISTS drama_playlist_category (
|
||||
id BIGINT PRIMARY KEY,
|
||||
name VARCHAR(64) NOT NULL,
|
||||
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_drama_playlist_category_name
|
||||
ON drama_playlist_category (name);
|
||||
COMMENT ON TABLE drama_playlist_category IS '剧单专属分类;与运营分类(drama_classification)相互独立';
|
||||
|
||||
ALTER TABLE drama_playlist DROP COLUMN IF EXISTS classification_id;
|
||||
ALTER TABLE drama_playlist ADD COLUMN IF NOT EXISTS playlist_category_id BIGINT NOT NULL DEFAULT 0;
|
||||
CREATE INDEX IF NOT EXISTS idx_drama_playlist_category
|
||||
ON drama_playlist (playlist_category_id);
|
||||
COMMENT ON COLUMN drama_playlist.playlist_category_id IS '剧单分类;0 表示未分类';
|
||||
|
||||
DROP TRIGGER IF EXISTS trg_drama_playlist_category_updated_at ON drama_playlist_category;
|
||||
CREATE TRIGGER trg_drama_playlist_category_updated_at
|
||||
BEFORE UPDATE ON drama_playlist_category
|
||||
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
|
||||
-- Author: fruit.com.cn
|
||||
-- 剧单分类增加描述字段(幂等)
|
||||
|
||||
ALTER TABLE drama_playlist_category ADD COLUMN IF NOT EXISTS description VARCHAR(255) NOT NULL DEFAULT '';
|
||||
COMMENT ON COLUMN drama_playlist_category.description IS '分类描述';
|
||||
+58
-1
@@ -869,9 +869,64 @@ CREATE INDEX IF NOT EXISTS idx_audit_log_biz ON audit_log (biz_type, biz_id, cre
|
||||
COMMENT ON TABLE audit_log IS '业务对象变更审计(支付、权益、定价等敏感操作)';
|
||||
|
||||
-- ============================================================
|
||||
-- 九、updated_at 触发器(与已有表保持一致)
|
||||
-- 八之二、运营分类(与短剧类型 drama_category 相互独立)
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS drama_classification (
|
||||
id BIGINT PRIMARY KEY,
|
||||
name VARCHAR(64) NOT NULL,
|
||||
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_drama_classification_name ON drama_classification (name);
|
||||
COMMENT ON TABLE drama_classification IS '运营分类;与短剧类型(drama_category)相互独立';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS drama_classification_drama (
|
||||
id BIGINT PRIMARY KEY,
|
||||
classification_id BIGINT NOT NULL,
|
||||
drama_id BIGINT NOT NULL,
|
||||
created_at TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uk_classification_drama
|
||||
ON drama_classification_drama (classification_id, drama_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_classification_drama_drama
|
||||
ON drama_classification_drama (drama_id);
|
||||
COMMENT ON TABLE drama_classification_drama IS '分类与短剧的关联关系';
|
||||
|
||||
-- ============================================================
|
||||
-- 八之三、剧单(剧单有自己的一套分类,与运营分类无关)
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS drama_playlist_category (
|
||||
id BIGINT PRIMARY KEY,
|
||||
name VARCHAR(64) NOT NULL,
|
||||
description VARCHAR(255) 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_drama_playlist_category_name
|
||||
ON drama_playlist_category (name);
|
||||
COMMENT ON TABLE drama_playlist_category IS '剧单专属分类;与运营分类(drama_classification)相互独立';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS drama_playlist_category_drama (
|
||||
id BIGINT PRIMARY KEY,
|
||||
category_id BIGINT NOT NULL,
|
||||
drama_id BIGINT NOT NULL,
|
||||
created_at TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uk_playlist_category_drama
|
||||
ON drama_playlist_category_drama (category_id, drama_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_playlist_category_drama_drama
|
||||
ON drama_playlist_category_drama (drama_id);
|
||||
COMMENT ON TABLE drama_playlist_category_drama IS '剧单分类与短剧的关联关系';
|
||||
|
||||
-- ============================================================
|
||||
-- 九、updated_at 触发器(与已有表保持一致)
|
||||
-- ============================================================
|
||||
DO $$
|
||||
DECLARE
|
||||
t TEXT;
|
||||
@@ -885,6 +940,8 @@ BEGIN
|
||||
'reconcile_task', 'creator', 'creator_document', 'content_submission',
|
||||
'creator_stat_daily', 'creator_settlement',
|
||||
'transcode_task', 'media_rendition', 'media_thumbnail',
|
||||
'drama_classification',
|
||||
'drama_playlist_category',
|
||||
'ops_notice', 'ops_daily_stat'
|
||||
]
|
||||
LOOP
|
||||
|
||||
Reference in new issue
Block a user