{/* 动态背景 */}
diff --git a/life-script/src/pages/OnboardingPage.jsx b/life-script/src/pages/OnboardingPage.jsx
index 949db21..70e74e8 100644
--- a/life-script/src/pages/OnboardingPage.jsx
+++ b/life-script/src/pages/OnboardingPage.jsx
@@ -1,10 +1,11 @@
import { useState, useEffect } from 'react';
import { useNavigate } from 'react-router-dom';
import { ArrowRight, Check } from 'lucide-react';
-import { GlassCard, GlassInput, GlassTextarea, GlassButton } from '../components/ui';
+import { GlassCard, GlassInput, GlassTextarea, GlassButton, GlassSelect } from '../components/ui';
import { PromptTagGroup } from '../components/PromptTag';
import useStore from '../store/useStore';
import { inspirationClusters } from '../utils/constants';
+import * as dictionaryService from '../services/dictionary';
/**
* OnboardingPage 组件
@@ -24,11 +25,39 @@ const OnboardingPage = () => {
const [formData, setFormData] = useState(registrationData);
const [isSaving, setIsSaving] = useState(false);
+
+ // 字典数据状态
+ const [zodiacOptions, setZodiacOptions] = useState([]);
+ const [mbtiOptions, setMbtiOptions] = useState([]);
+ const [genderOptions, setGenderOptions] = useState([]);
useEffect(() => {
setFormData(registrationData);
}, [registrationData]);
+ // 加载字典数据
+ useEffect(() => {
+ const loadDictionaries = async () => {
+ try {
+ const [zodiacList, mbtiList, genderList] = await Promise.all([
+ dictionaryService.getZodiacList(),
+ dictionaryService.getMbtiList(),
+ dictionaryService.getGenderList()
+ ]);
+ setZodiacOptions([{ value: '', label: '请选择星座' }, ...dictionaryService.transformToOptions(zodiacList)]);
+ setMbtiOptions([{ value: '', label: '请选择MBTI' }, ...dictionaryService.transformToOptions(mbtiList)]);
+ setGenderOptions([{ value: '', label: '请选择性别' }, ...dictionaryService.transformToOptions(genderList)]);
+ } catch (error) {
+ console.error('加载字典数据失败:', error);
+ // 使用默认选项
+ setZodiacOptions([{ value: '', label: '请选择星座' }]);
+ setMbtiOptions([{ value: '', label: '请选择MBTI' }]);
+ setGenderOptions([{ value: '', label: '请选择性别' }]);
+ }
+ };
+ loadDictionaries();
+ }, []);
+
const updateField = (field, value) => {
setFormData(prev => ({ ...prev, [field]: value }));
};
@@ -46,7 +75,12 @@ const OnboardingPage = () => {
};
const saveStepData = () => {
- updateRegistration(formData);
+ // 保存时将兴趣爱好字符串转换为数组
+ const dataToSave = { ...formData };
+ if (typeof dataToSave.hobbies === 'string') {
+ dataToSave.hobbies = dataToSave.hobbies.split(/[,,]/).map(s => s.trim()).filter(s => s);
+ }
+ updateRegistration(dataToSave);
};
const handleNext = async () => {
@@ -82,15 +116,15 @@ const OnboardingPage = () => {
updateField('nickname', v)} />
- updateField('gender', v)} />
- updateField('mbti', v)} />
- updateField('zodiac', v)} />
+ updateField('gender', v)} />
+ updateField('mbti', v)} />
+ updateField('zodiac', v)} />
updateField('hobbies', v.split(',').map(s => s.trim()).filter(s => s))}
+ placeholder="用逗号分隔你的热爱,如:阅读,旅行,摄影"
+ value={Array.isArray(formData.hobbies) ? formData.hobbies.join(',') : (formData.hobbies || '')}
+ onChange={(v) => updateField('hobbies', v)}
/>
);
diff --git a/life-script/src/services/dictionary.js b/life-script/src/services/dictionary.js
new file mode 100644
index 0000000..c6f8fb8
--- /dev/null
+++ b/life-script/src/services/dictionary.js
@@ -0,0 +1,63 @@
+import api from './api';
+
+/**
+ * 字典服务
+ * 处理字典数据的获取
+ */
+
+/**
+ * 根据字典类型获取启用的字典列表
+ * @param {string} dictType - 字典类型
+ * @returns {Promise} 字典列表
+ */
+export const getEnabledDictionariesByType = async (dictType) => {
+ const response = await api.get('/dictionary/enabledByType', {
+ params: { dictType }
+ });
+ return response.data || [];
+};
+
+/**
+ * 获取星座字典
+ * @returns {Promise} 星座列表
+ */
+export const getZodiacList = async () => {
+ return getEnabledDictionariesByType('constellation');
+};
+
+/**
+ * 获取MBTI字典
+ * @returns {Promise} MBTI列表
+ */
+export const getMbtiList = async () => {
+ return getEnabledDictionariesByType('mbti');
+};
+
+/**
+ * 获取性别字典
+ * @returns {Promise} 性别列表
+ */
+export const getGenderList = async () => {
+ return getEnabledDictionariesByType('gender');
+};
+
+/**
+ * 将字典数据转换为下拉选项格式
+ * @param {Array} dictList - 字典列表
+ * @returns {Array<{value: string, label: string}>} 选项列表
+ */
+export const transformToOptions = (dictList) => {
+ if (!Array.isArray(dictList)) return [];
+ return dictList.map(item => ({
+ value: item.dictValue || item.dictCode || '',
+ label: item.dictName || item.dictValue || ''
+ }));
+};
+
+export default {
+ getEnabledDictionariesByType,
+ getZodiacList,
+ getMbtiList,
+ getGenderList,
+ transformToOptions
+};
diff --git a/life-script/src/services/userProfile.js b/life-script/src/services/userProfile.js
index 40f1aa8..32c796c 100644
--- a/life-script/src/services/userProfile.js
+++ b/life-script/src/services/userProfile.js
@@ -72,6 +72,7 @@ const transformToBackendFormat = (frontendData) => {
nickname,
gender,
zodiac,
+ profession,
mbti,
hobbies,
childhood,
@@ -85,6 +86,7 @@ const transformToBackendFormat = (frontendData) => {
nickname,
gender,
zodiac,
+ profession,
mbti,
// 兴趣爱好转为 JSON 字符串
hobbies: Array.isArray(hobbies) ? JSON.stringify(hobbies) : hobbies,
@@ -118,6 +120,7 @@ export const transformToFrontendFormat = (backendData) => {
nickname,
gender,
zodiac,
+ profession,
mbti,
hobbies,
childhoodDate,
@@ -136,6 +139,7 @@ export const transformToFrontendFormat = (backendData) => {
nickname: nickname || '',
gender: gender || '',
zodiac: zodiac || '',
+ profession: profession || '',
mbti: mbti || '',
// 兴趣爱好从 JSON 字符串解析
hobbies: hobbies ? (typeof hobbies === 'string' ? JSON.parse(hobbies) : hobbies) : [],
diff --git a/life-script/src/views/ProfileModal.jsx b/life-script/src/views/ProfileModal.jsx
index 832d24d..a3bf7b7 100644
--- a/life-script/src/views/ProfileModal.jsx
+++ b/life-script/src/views/ProfileModal.jsx
@@ -1,8 +1,9 @@
import { useState, useEffect } from 'react';
import { Settings, Settings2 } from 'lucide-react';
import Modal from '../components/Modal';
-import { GlassButton, GlassInput } from '../components/ui';
+import { GlassButton, GlassInput, GlassSelect } from '../components/ui';
import useStore from '../store/useStore';
+import * as dictionaryService from '../services/dictionary';
/**
* ProfileModal 组件
@@ -18,13 +19,19 @@ const ProfileModal = ({ isOpen, onClose }) => {
const [isEditing, setIsEditing] = useState(false);
const [isSaving, setIsSaving] = useState(false);
+ // 字典数据状态
+ const [zodiacOptions, setZodiacOptions] = useState([]);
+ const [mbtiOptions, setMbtiOptions] = useState([]);
+ const [genderOptions, setGenderOptions] = useState([]);
+
// 编辑表单状态
const [editForm, setEditForm] = useState({
nickname: registrationData.nickname,
profession: registrationData.profession || '',
+ gender: registrationData.gender || '',
mbti: registrationData.mbti,
zodiac: registrationData.zodiac,
- hobbies: registrationData.hobbies?.join(', ') || ''
+ hobbies: registrationData.hobbies?.join(',') || ''
});
// 同步 registrationData 到 editForm
@@ -32,12 +39,37 @@ const ProfileModal = ({ isOpen, onClose }) => {
setEditForm({
nickname: registrationData.nickname,
profession: registrationData.profession || '',
+ gender: registrationData.gender || '',
mbti: registrationData.mbti,
zodiac: registrationData.zodiac,
- hobbies: registrationData.hobbies?.join(', ') || ''
+ hobbies: registrationData.hobbies?.join(',') || ''
});
}, [registrationData]);
+ // 加载字典数据
+ useEffect(() => {
+ const loadDictionaries = async () => {
+ try {
+ const [zodiacList, mbtiList, genderList] = await Promise.all([
+ dictionaryService.getZodiacList(),
+ dictionaryService.getMbtiList(),
+ dictionaryService.getGenderList()
+ ]);
+ setZodiacOptions([{ value: '', label: '请选择星座' }, ...dictionaryService.transformToOptions(zodiacList)]);
+ setMbtiOptions([{ value: '', label: '请选择MBTI' }, ...dictionaryService.transformToOptions(mbtiList)]);
+ setGenderOptions([{ value: '', label: '请选择性别' }, ...dictionaryService.transformToOptions(genderList)]);
+ } catch (error) {
+ console.error('加载字典数据失败:', error);
+ setZodiacOptions([{ value: '', label: '请选择星座' }]);
+ setMbtiOptions([{ value: '', label: '请选择MBTI' }]);
+ setGenderOptions([{ value: '', label: '请选择性别' }]);
+ }
+ };
+ if (isOpen) {
+ loadDictionaries();
+ }
+ }, [isOpen]);
+
/**
* 处理保存
*/
@@ -47,9 +79,10 @@ const ProfileModal = ({ isOpen, onClose }) => {
updateRegistration({
nickname: editForm.nickname,
profession: editForm.profession,
+ gender: editForm.gender,
mbti: editForm.mbti,
zodiac: editForm.zodiac,
- hobbies: editForm.hobbies.split(',').map(s => s.trim()).filter(s => s)
+ hobbies: editForm.hobbies.split(/[,,]/).map(s => s.trim()).filter(s => s)
});
await saveUserProfile();
setIsEditing(false);
@@ -69,9 +102,10 @@ const ProfileModal = ({ isOpen, onClose }) => {
setEditForm({
nickname: registrationData.nickname,
profession: registrationData.profession || '',
+ gender: registrationData.gender || '',
mbti: registrationData.mbti,
zodiac: registrationData.zodiac,
- hobbies: registrationData.hobbies?.join(', ') || ''
+ hobbies: registrationData.hobbies?.join(',') || ''
});
setIsEditing(false);
};
@@ -165,22 +199,28 @@ const ProfileModal = ({ isOpen, onClose }) => {
value={editForm.profession}
onChange={(v) => setEditForm(prev => ({ ...prev, profession: v }))}
/>
- setEditForm(prev => ({ ...prev, gender: v }))}
+ />
+ setEditForm(prev => ({ ...prev, mbti: v }))}
/>
- setEditForm(prev => ({ ...prev, zodiac: v }))}
/>
setEditForm(prev => ({ ...prev, hobbies: v }))}
/>
diff --git a/life-script/vite.config.js b/life-script/vite.config.js
index eba555f..79441b1 100644
--- a/life-script/vite.config.js
+++ b/life-script/vite.config.js
@@ -5,6 +5,8 @@ import tailwindcss from '@tailwindcss/vite'
// https://vite.dev/config/
export default defineConfig({
plugins: [react(), tailwindcss()],
+ // 生产环境使用 /course-of-life/ 路径
+ base: '/course-of-life/',
server: {
port: 3000
}
diff --git a/sql/emotion_museum.sql b/sql/emotion_museum.sql
index a3777fd..8b7c5cf 100644
--- a/sql/emotion_museum.sql
+++ b/sql/emotion_museum.sql
@@ -1189,6 +1189,7 @@ CREATE TABLE t_user_profile (
user_id VARCHAR(64) COMMENT '用户ID (关联t_user.id)',
nickname VARCHAR(50) NOT NULL COMMENT '昵称 (必填)',
gender VARCHAR(20) DEFAULT 'secret' COMMENT '性别',
+ profession VARCHAR(100) COMMENT '职业',
zodiac VARCHAR(20) COMMENT '星座',
mbti VARCHAR(20) NOT NULL COMMENT 'MBTI人格类型 (必填)',
hobbies JSON COMMENT '兴趣爱好列表',
@@ -1384,6 +1385,36 @@ CREATE INDEX idx_life_path_step_order ON t_life_path_step (path_id, step_order);
CREATE INDEX idx_life_path_step_status ON t_life_path_step (status);
CREATE INDEX idx_life_path_step_is_deleted ON t_life_path_step (is_deleted);
+-- ============================================================================
+-- 24. 字典表 (t_dictionary)
+-- 用途:存储基础字段数据,如城市、星座、MBTI人格类型等
+-- ============================================================================
+DROP TABLE IF EXISTS t_dictionary;
+CREATE TABLE t_dictionary (
+ id VARCHAR(64) PRIMARY KEY COMMENT 'UUID主键', -- UUID主键
+ dict_type VARCHAR(50) NOT NULL COMMENT '字典类型 (如: city, constellation, mbti)', -- 字典类型
+ dict_code VARCHAR(100) NOT NULL COMMENT '字典编码', -- 字典编码
+ dict_name VARCHAR(100) NOT NULL COMMENT '字典名称', -- 字典名称
+ dict_value VARCHAR(200) COMMENT '字典值', -- 字典值
+ sort_order INT DEFAULT 0 COMMENT '排序顺序', -- 排序顺序
+ status TINYINT DEFAULT 1 COMMENT '状态: 0-禁用, 1-启用', -- 状态
+ -- 公共字段
+ create_by VARCHAR(64) COMMENT '创建人ID', -- 创建人ID
+ create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', -- 创建时间
+ update_by VARCHAR(64) COMMENT '更新人ID', -- 更新人ID
+ update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', -- 更新时间
+ is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-未删除, 1-已删除', -- 是否删除: 0-未删除, 1-已删除
+ remarks VARCHAR(500) COMMENT '备注' -- 备注
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT '字典表 (t_dictionary)';
--- 提交事务
+-- t_dictionary表索引
+CREATE INDEX idx_dictionary_dict_type ON t_dictionary (dict_type);
+CREATE INDEX idx_dictionary_dict_code ON t_dictionary (dict_code);
+CREATE INDEX idx_dictionary_dict_type_status ON t_dictionary (dict_type, status);
+CREATE INDEX idx_dictionary_dict_type_sort_order ON t_dictionary (dict_type, sort_order);
+CREATE INDEX idx_dictionary_create_time ON t_dictionary (create_time);
+CREATE INDEX idx_dictionary_is_deleted ON t_dictionary (is_deleted);
+
+
+-- 鎻愪氦浜嬪姟
COMMIT;
diff --git a/sql/emotion_museum_ddl.sql b/sql/emotion_museum_ddl.sql
new file mode 100644
index 0000000..4fc40e2
--- /dev/null
+++ b/sql/emotion_museum_ddl.sql
@@ -0,0 +1,8 @@
+-- 理想生活状态
+alter table emotion_museum.t_user_profile
+ add ideal_life varchar(100) null comment '理想生活状态';
+
+-- 职业
+alter table emotion_museum.t_user_profile
+ add profession varchar(100) null comment '职业';
+
diff --git a/sql/emotion_museum_init.sql b/sql/emotion_museum_init.sql
new file mode 100644
index 0000000..e84b1ea
--- /dev/null
+++ b/sql/emotion_museum_init.sql
@@ -0,0 +1,73 @@
+-- ============================================================================
+-- 初始化字典数据
+-- 包括:星座数据、MBTI人格类型数据
+-- ============================================================================
+
+-- 使用emotion_museum数据库
+USE emotion_museum;
+
+-- 设置时间格式
+SET time_zone = '+00:00';
+
+-- ============================================================================
+-- 1. 星座数据初始化
+-- ============================================================================
+INSERT INTO t_dictionary (
+ id, dict_type, dict_code, dict_name, dict_value, sort_order, status,
+ create_by, create_time, update_by, update_time, is_deleted, remarks
+) VALUES
+ (REPLACE(UUID(), '-', ''), 'constellation', 'aries', '白羊座', '白羊座', 1, 1, 'system', NOW(), 'system', NOW(), 0, '白羊座 (3月21日-4月19日)'),
+ (REPLACE(UUID(), '-', ''), 'constellation', 'taurus', '金牛座', '金牛座', 2, 1, 'system', NOW(), 'system', NOW(), 0, '金牛座 (4月20日-5月20日)'),
+ (REPLACE(UUID(), '-', ''), 'constellation', 'gemini', '双子座', '双子座', 3, 1, 'system', NOW(), 'system', NOW(), 0, '双子座 (5月21日-6月21日)'),
+ (REPLACE(UUID(), '-', ''), 'constellation', 'cancer', '巨蟹座', '巨蟹座', 4, 1, 'system', NOW(), 'system', NOW(), 0, '巨蟹座 (6月22日-7月22日)'),
+ (REPLACE(UUID(), '-', ''), 'constellation', 'leo', '狮子座', '狮子座', 5, 1, 'system', NOW(), 'system', NOW(), 0, '狮子座 (7月23日-8月22日)'),
+ (REPLACE(UUID(), '-', ''), 'constellation', 'virgo', '处女座', '处女座', 6, 1, 'system', NOW(), 'system', NOW(), 0, '处女座 (8月23日-9月22日)'),
+ (REPLACE(UUID(), '-', ''), 'constellation', 'libra', '天秤座', '天秤座', 7, 1, 'system', NOW(), 'system', NOW(), 0, '天秤座 (9月23日-10月23日)'),
+ (REPLACE(UUID(), '-', ''), 'constellation', 'scorpio', '天蝎座', '天蝎座', 8, 1, 'system', NOW(), 'system', NOW(), 0, '天蝎座 (10月24日-11月22日)'),
+ (REPLACE(UUID(), '-', ''), 'constellation', 'sagittarius', '射手座', '射手座', 9, 1, 'system', NOW(), 'system', NOW(), 0, '射手座 (11月23日-12月21日)'),
+ (REPLACE(UUID(), '-', ''), 'constellation', 'capricorn', '摩羯座', '摩羯座', 10, 1, 'system', NOW(), 'system', NOW(), 0, '摩羯座 (12月22日-1月19日)'),
+ (REPLACE(UUID(), '-', ''), 'constellation', 'aquarius', '水瓶座', '水瓶座', 11, 1, 'system', NOW(), 'system', NOW(), 0, '水瓶座 (1月20日-2月18日)'),
+ (REPLACE(UUID(), '-', ''), 'constellation', 'pisces', '双鱼座', '双鱼座', 12, 1, 'system', NOW(), 'system', NOW(), 0, '双鱼座 (2月19日-3月20日)');
+
+-- ============================================================================
+-- 2. MBTI人格类型数据初始化
+-- ============================================================================
+INSERT INTO t_dictionary (
+ id, dict_type, dict_code, dict_name, dict_value, sort_order, status,
+ create_by, create_time, update_by, update_time, is_deleted, remarks
+) VALUES
+ (REPLACE(UUID(), '-', ''), 'mbti', 'istj', 'ISTJ', 'ISTJ-检查员型', 1, 1, 'system', NOW(), 'system', NOW(), 0, '内倾感觉思维判断 - 一丝不苟的检查者'),
+ (REPLACE(UUID(), '-', ''), 'mbti', 'isfj', 'ISFJ', 'ISFJ-照顾者型', 2, 1, 'system', NOW(), 'system', NOW(), 0, '内倾感觉情感判断 - 忠诚的照顾者'),
+ (REPLACE(UUID(), '-', ''), 'mbti', 'infj', 'INFJ', 'INFJ-博爱型', 3, 1, 'system', NOW(), 'system', NOW(), 0, '内倾直觉情感判断 - 富有洞察力的博爱者'),
+ (REPLACE(UUID(), '-', ''), 'mbti', 'intj', 'INTJ', 'INTJ-专家型', 4, 1, 'system', NOW(), 'system', NOW(), 0, '内倾直觉思维判断 - 独立的战略家'),
+ (REPLACE(UUID(), '-', ''), 'mbti', 'istp', 'ISTP', 'ISTP-冒险家型', 5, 1, 'system', NOW(), 'system', NOW(), 0, '内倾感觉思维知觉 - 灵活的问题解决者'),
+ (REPLACE(UUID(), '-', ''), 'mbti', 'isfp', 'ISFP', 'ISFP-艺术家型', 6, 1, 'system', NOW(), 'system', NOW(), 0, '内倾感觉情感知觉 - 敏感的艺术家'),
+ (REPLACE(UUID(), '-', ''), 'mbti', 'infp', 'INFP', 'INFP-哲学家型', 7, 1, 'system', NOW(), 'system', NOW(), 0, '内倾直觉情感知觉 - 理想主义的哲学家'),
+ (REPLACE(UUID(), '-', ''), 'mbti', 'intp', 'INTP', 'INTP-学者型', 8, 1, 'system', NOW(), 'system', NOW(), 0, '内倾直觉思维知觉 - 好奇的分析师'),
+ (REPLACE(UUID(), '-', ''), 'mbti', 'estp', 'ESTP', 'ESTP-挑战者型', 9, 1, 'system', NOW(), 'system', NOW(), 0, '外倾感觉思维知觉 - 大胆的冒险者'),
+ (REPLACE(UUID(), '-', ''), 'mbti', 'esfp', 'ESFP', 'ESFP-表演者型', 10, 1, 'system', NOW(), 'system', NOW(), 0, '外倾感觉情感知觉 - 热情的表演者'),
+ (REPLACE(UUID(), '-', ''), 'mbti', 'enfp', 'ENFP', 'ENFP-公关型', 11, 1, 'system', NOW(), 'system', NOW(), 0, '外倾直觉情感知觉 - 充满热情的社交家'),
+ (REPLACE(UUID(), '-', ''), 'mbti', 'entp', 'ENTP', 'ENTP-智多星型', 12, 1, 'system', NOW(), 'system', NOW(), 0, '外倾直觉思维知觉 - 机智的辩论家'),
+ (REPLACE(UUID(), '-', ''), 'mbti', 'estj', 'ESTJ', 'ESTJ-管家型', 13, 1, 'system', NOW(), 'system', NOW(), 0, '外倾感觉思维判断 - 高效的组织者'),
+ (REPLACE(UUID(), '-', ''), 'mbti', 'esfj', 'ESFJ', 'ESFJ-主人型', 14, 1, 'system', NOW(), 'system', NOW(), 0, '外倾感觉情感判断 - 热情的主人'),
+ (REPLACE(UUID(), '-', ''), 'mbti', 'enfj', 'ENFJ', 'ENFJ-教导型', 15, 1, 'system', NOW(), 'system', NOW(), 0, '外倾直觉情感判断 - 鼓舞人心的领导者'),
+ (REPLACE(UUID(), '-', ''), 'mbti', 'entj', 'ENTJ', 'ENTJ-统帅型', 16, 1, 'system', NOW(), 'system', NOW(), 0, '外倾直觉思维判断 - 果断的指挥官');
+
+-- ============================================================================
+-- 3. 性别数据初始化
+-- ============================================================================
+INSERT INTO t_dictionary (
+ id, dict_type, dict_code, dict_name, dict_value, sort_order, status,
+ create_by, create_time, update_by, update_time, is_deleted, remarks
+) VALUES
+ (REPLACE(UUID(), '-', ''), 'gender', 'male', '男', '男', 1, 1, 'system', NOW(), 'system', NOW(), 0, '性别:男'),
+ (REPLACE(UUID(), '-', ''), 'gender', 'female', '女', '女', 2, 1, 'system', NOW(), 'system', NOW(), 0, '性别:女'),
+ (REPLACE(UUID(), '-', ''), 'gender', 'secret', '保密', '保密', 3, 1, 'system', NOW(), 'system', NOW(), 0, '性别:保密'),
+ (REPLACE(UUID(), '-', ''), 'gender', 'other', '其他', '其他', 4, 1, 'system', NOW(), 'system', NOW(), 0, '性别:其他');
+
+-- ============================================================================
+-- 初始化完成
+-- ============================================================================
+COMMIT;
+
+SELECT '字典数据初始化完成' AS result;
\ No newline at end of file
diff --git a/sql/migrations/V20251222_add_ideal_life_column.sql b/sql/migrations/V20251222_add_ideal_life_column.sql
deleted file mode 100644
index de07c2c..0000000
--- a/sql/migrations/V20251222_add_ideal_life_column.sql
+++ /dev/null
@@ -1,24 +0,0 @@
--- ============================================================================
--- 迁移脚本: 添加 ideal_life 字段到 t_user_profile 表
--- 日期: 2025-12-22
--- 描述: 为用户档案表添加理想生活状态字段
--- ============================================================================
-
--- 检查字段是否存在,不存在则添加
-SET @dbname = DATABASE();
-SET @tablename = 't_user_profile';
-SET @columnname = 'ideal_life';
-SET @preparedStatement = (SELECT IF(
- (
- SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
- WHERE TABLE_SCHEMA = @dbname
- AND TABLE_NAME = @tablename
- AND COLUMN_NAME = @columnname
- ) > 0,
- 'SELECT 1',
- CONCAT('ALTER TABLE ', @tablename, ' ADD COLUMN ', @columnname, ' TEXT COMMENT ''理想生活状态'' AFTER future_vision')
-));
-
-PREPARE alterIfNotExists FROM @preparedStatement;
-EXECUTE alterIfNotExists;
-DEALLOCATE PREPARE alterIfNotExists;