diff --git a/lesingle-creation-backend/src/main/resources/db/migration/V20__drop_biz_contest_contest_name_unique.sql b/lesingle-creation-backend/src/main/resources/db/migration/V20__drop_biz_contest_contest_name_unique.sql new file mode 100644 index 0000000..9ce5abb --- /dev/null +++ b/lesingle-creation-backend/src/main/resources/db/migration/V20__drop_biz_contest_contest_name_unique.sql @@ -0,0 +1,43 @@ +-- V20: 去除活动名称唯一约束 — 删除 t_biz_contest 上包含 contest_name 的唯一索引(保留主键) +-- 背景: 允许同一租户/系统内创建同名活动,不再强制活动名称全局或联合唯一 + +DROP PROCEDURE IF EXISTS tmp_drop_biz_contest_name_uniques; + +DELIMITER // +CREATE PROCEDURE tmp_drop_biz_contest_name_uniques() +BEGIN + DECLARE done INT DEFAULT FALSE; + DECLARE ix VARCHAR(128); + DECLARE cur CURSOR FOR + SELECT DISTINCT s.INDEX_NAME + FROM information_schema.STATISTICS s + WHERE s.TABLE_SCHEMA = DATABASE() + AND s.TABLE_NAME = 't_biz_contest' + AND s.NON_UNIQUE = 0 + AND s.INDEX_NAME <> 'PRIMARY' + AND EXISTS ( + SELECT 1 FROM information_schema.STATISTICS s2 + WHERE s2.TABLE_SCHEMA = DATABASE() + AND s2.TABLE_NAME = 't_biz_contest' + AND s2.INDEX_NAME = s.INDEX_NAME + AND s2.COLUMN_NAME = 'contest_name' + ); + DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; + + OPEN cur; + ix_loop: LOOP + FETCH cur INTO ix; + IF done THEN + LEAVE ix_loop; + END IF; + SET @dsql = CONCAT('ALTER TABLE t_biz_contest DROP INDEX `', REPLACE(ix, '`', '``'), '`'); + PREPARE ps FROM @dsql; + EXECUTE ps; + DEALLOCATE PREPARE ps; + END LOOP; + CLOSE cur; +END // +DELIMITER ; + +CALL tmp_drop_biz_contest_name_uniques(); +DROP PROCEDURE IF EXISTS tmp_drop_biz_contest_name_uniques; diff --git a/lesingle-creation-frontend/tsconfig.json b/lesingle-creation-frontend/tsconfig.json index c0175cc..5a02498 100644 --- a/lesingle-creation-frontend/tsconfig.json +++ b/lesingle-creation-frontend/tsconfig.json @@ -20,10 +20,10 @@ "noUnusedParameters": true, "noFallthroughCasesInSwitch": true, - /* Path alias */ + /* paths 需配合 baseUrl,否则 IDE 无法稳定解析 @/ 与「查找引用」「转到定义」 */ "baseUrl": ".", "paths": { - "@/*": ["src/*"] + "@/*": ["./src/*"] } }, "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],