| 230 | } |
| 231 | |
| 232 | async initializeLabelCategories() { |
| 233 | // 预定义的标签分类和描述 |
| 234 | const labelDescriptions = { |
| 235 | // 核心技术类 |
| 236 | 'CSS Layout': 'CSS 布局技术和方法', |
| 237 | 'CSS Function': 'CSS 函数使用和技巧', |
| 238 | 'CSS-Houdini': 'CSS Houdini API 相关技术', |
| 239 | 'CSS Variable': 'CSS 变量使用和应用', |
| 240 | 'CSS 新特性': '最新的 CSS 特性和用法', |
| 241 | 'Modern CSS': '现代 CSS 技术和方法', |
| 242 | 'CSS-doodle': 'CSS-doodle 绘图技术', |
| 243 | |
| 244 | // 视觉效果类 |
| 245 | 'Background': '背景相关的效果和技巧', |
| 246 | 'Border': '边框相关的效果和技巧', |
| 247 | 'Shadow': '阴影效果实现方法', |
| 248 | 'Shape': '图形形状相关技术', |
| 249 | '混合模式': '混合模式效果实现', |
| 250 | '滤镜': '滤镜效果实现和应用', |
| 251 | 'clip-path': '裁剪路径技术和应用', |
| 252 | 'Mask': '遮罩效果实现方法', |
| 253 | '3D 效果': '3D 效果实现技术', |
| 254 | '图片效果': '图片处理和效果实现', |
| 255 | '文字效果': '文字特效和排版技巧', |
| 256 | '边框效果': '特殊边框效果实现', |
| 257 | |
| 258 | // 动画类 |
| 259 | '动效': '动态效果实现方法', |
| 260 | '动画': '动画效果实现技术', |
| 261 | '特殊交互': '特殊交互效果实现', |
| 262 | |
| 263 | // 技术实现类 |
| 264 | 'SVG': 'SVG 图形和动画技术', |
| 265 | '伪类': 'CSS 伪类使用技巧', |
| 266 | '性能': 'CSS 性能优化方法', |
| 267 | '技巧': 'CSS 使用技巧和方法', |
| 268 | '奇技淫巧': '特殊效果实现技巧', |
| 269 | '浏览器特性': '浏览器特性和兼容性', |
| 270 | |
| 271 | // 用户体验类 |
| 272 | '可访问性': '可访问性优化方法', |
| 273 | '用户体验': '用户体验优化技巧', |
| 274 | '设计': 'CSS 设计相关技术' |
| 275 | }; |
| 276 | |
| 277 | // 插入预定义的标签分类 |
| 278 | const insertSQL = ` |
| 279 | INSERT OR REPLACE INTO label_categories (label, category, description) |
| 280 | VALUES (?, ?, ?) |
| 281 | `; |
| 282 | |
| 283 | for (const [category, labels] of Object.entries(this.labelCategories)) { |
| 284 | for (const label of labels) { |
| 285 | await new Promise((resolve, reject) => { |
| 286 | this.db.run( |
| 287 | insertSQL, |
| 288 | [label, category, labelDescriptions[label] || `${category}类标签`], |
| 289 | (err) => { |