diff --git a/backend/migrations/000067_seed_test_distribution_site.sql b/backend/migrations/000067_seed_test_distribution_site.sql new file mode 100644 index 0000000..2d273f5 --- /dev/null +++ b/backend/migrations/000067_seed_test_distribution_site.sql @@ -0,0 +1,101 @@ +-- +goose Up + +-- 初始化本地测试分销站点 test_1、分销管理员 test_fx1 (密码 admin123456) 以及对应的金库钱包与商品货架 + +-- 1. 插入或激活测试分销站点 test_1 +INSERT INTO distribution_sites ( + site_code, site_name, domain, status, display_account_enabled, tax_enabled, tax_rate_bps, created_at, updated_at +) VALUES ( + 'test_1', '测试分销商1', 'test_1.localhost', 'active', 1, 0, 100, NOW(), NOW() +) ON DUPLICATE KEY UPDATE + site_name = VALUES(site_name), + domain = VALUES(domain), + status = 'active', + display_account_enabled = 1, + updated_at = NOW(); + +-- 2. 插入或激活测试分销管理员 test_fx1 (初始密码: admin123456) +INSERT INTO admin_users ( + username, password_hash, nickname, status, created_at, updated_at +) VALUES ( + 'test_fx1', + '$2a$10$zj3KqZJArsYVKVjA7uHDbeP7sWML20xjxRfb3a100xBx.f20Gu.8O', + '分销操作员1', + 'active', + NOW(), + NOW() +) ON DUPLICATE KEY UPDATE + status = 'active', + password_hash = VALUES(password_hash), + updated_at = NOW(); + +-- 3. 关联分销商成员 (operator 角色) +INSERT INTO distribution_site_members ( + site_id, admin_user_id, member_type, status, data_scope, created_at, updated_at +) +SELECT s.id, u.id, 'operator', 'active', 'site', NOW(), NOW() +FROM distribution_sites s +JOIN admin_users u ON u.username = 'test_fx1' +WHERE s.site_code = 'test_1' +ON DUPLICATE KEY UPDATE + status = 'active', + member_type = 'operator', + updated_at = NOW(); + +-- 4. 初始化 test_1 分销站金库钱包账户 (user_id = 0, distribution_site_id = site.id) +INSERT INTO wallet_accounts ( + user_id, distribution_site_id, available_balance_cent, frozen_balance_cent, total_income_amount_cent, total_payout_amount_cent, status, created_at, updated_at +) +SELECT 0, s.id, 0, 0, 0, 0, 'active', NOW(), NOW() +FROM distribution_sites s +WHERE s.site_code = 'test_1' +ON DUPLICATE KEY UPDATE status = 'active'; + +-- 5. 初始化 test_1 分销站点专属规则版本 (两方-分销卖出,收号 35%、卖出 40%、服务费 25%) +INSERT INTO distribution_rule_versions ( + site_id, mode, version, status, + platform_receive_ratio, distributor_sell_ratio, service_fee_value, service_fee_unit, payment_fee_bps, + effective_from, created_at +) +SELECT s.id, 'two_party_platform_receive', 1, 'active', + 35, 40, 25, 'percent', 50, + NOW(), NOW() +FROM distribution_sites s +WHERE s.site_code = 'test_1' +ON DUPLICATE KEY UPDATE + status = 'active', + platform_receive_ratio = 35, + distributor_sell_ratio = 40, + service_fee_value = 25; + +-- 6. 默认将当前已发布的合规商品直接铺入 test_1 货架 +INSERT IGNORE INTO distribution_site_accounts ( + site_id, account_id, listing_id, display_status, markup_amount_cent, shelf_ratio_delta, created_at, updated_at +) +SELECT s.id, l.account_id, l.id, 'enabled', 0, 0, NOW(), NOW() +FROM distribution_sites s +CROSS JOIN rental_listings l +WHERE s.site_code = 'test_1' + AND l.status = 'published' + AND l.review_status = 'approved'; + +-- +goose Down + +DELETE dsa FROM distribution_site_accounts dsa +JOIN distribution_sites s ON s.id = dsa.site_id +WHERE s.site_code = 'test_1'; + +DELETE drv FROM distribution_rule_versions drv +JOIN distribution_sites s ON s.id = drv.site_id +WHERE s.site_code = 'test_1'; + +DELETE wa FROM wallet_accounts wa +JOIN distribution_sites s ON s.id = wa.distribution_site_id +WHERE s.site_code = 'test_1' AND wa.user_id = 0; + +DELETE dsm FROM distribution_site_members dsm +JOIN distribution_sites s ON s.id = dsm.site_id +WHERE s.site_code = 'test_1'; + +DELETE FROM admin_users WHERE username = 'test_fx1'; +DELETE FROM distribution_sites WHERE site_code = 'test_1'; diff --git a/frontend/src/layouts/AdminLayout.vue b/frontend/src/layouts/AdminLayout.vue index 747f3b6..b9c760f 100644 --- a/frontend/src/layouts/AdminLayout.vue +++ b/frontend/src/layouts/AdminLayout.vue @@ -138,7 +138,7 @@ const allNavGroups: NavGroup[] = [ icon: Share, children: [ { - label: '分销站点', + label: '分销站点管理', to: adminPath('distribution/sites'), icon: Shop, permission: 'distribution:site_view',