diff --git a/frontend/web/.stylelintrc.cjs b/frontend/web/.stylelintrc.cjs index 222b3619..c387dad7 100644 --- a/frontend/web/.stylelintrc.cjs +++ b/frontend/web/.stylelintrc.cjs @@ -21,6 +21,13 @@ module.exports = { files: ["**/*.{css,scss}"], customSyntax: "postcss-scss", }, + // Markdown 预览样式由多段合并,存在有意重复的限定选择器 + { + files: ["**/src/styles/core/md.scss"], + rules: { + "no-duplicate-selectors": null, + }, + }, ], // 自定义规则 rules: { @@ -30,7 +37,8 @@ module.exports = { "scss/at-rule-no-unknown": [ true, { - ignoreAtRules: ["reference"], + // Tailwind CSS v4:@custom-variant、@theme、@utility、@layer 等 + ignoreAtRules: ["reference", "custom-variant", "theme", "utility", "layer"], }, ], "import-notation": "string", // 指定导入CSS文件的方式("string"|"url") @@ -40,6 +48,8 @@ module.exports = { "no-descending-specificity": null, // 允许无降序特异性 "no-empty-source": null, // 允许空样式 "property-no-vendor-prefix": null, // 允许属性前缀 + // SCSS @if/@else 链与 Prettier 易冲突,关闭「at-rule 前空行」检查 + "at-rule-empty-line-before": null, // 允许 global 、export 、deep伪类 "selector-pseudo-class-no-unknown": [ true, @@ -47,6 +57,13 @@ module.exports = { ignorePseudoClasses: ["global", "export", "deep"], }, ], + // 允许 Vue 3 的 ::deep 伪元素选择器 + "selector-pseudo-element-no-unknown": [ + true, + { + ignorePseudoElements: ["deep"], + }, + ], // 允许未知属性 "property-no-unknown": [ true, diff --git a/frontend/web/CHANGELOG.md b/frontend/web/CHANGELOG.md index fe19e031..f30194c3 100644 --- a/frontend/web/CHANGELOG.md +++ b/frontend/web/CHANGELOG.md @@ -371,7 +371,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), #### Removed -- Removed CountTo plugin, replaced with ArtCountTo component +- Removed CountTo plugin, replaced with FaCountTo component #### Fixed @@ -431,7 +431,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), #### Fixed -- Fixed login page drag component ArtDragVerify width and color abnormal bug +- Fixed login page drag component FaDragVerify width and color abnormal bug - Fixed iframe page mixed mode and double column mode abnormal bug - Optimized lock screen page being penetrated by el-loading bug @@ -441,7 +441,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), #### Refactored -- Refactored form-related components in components/forms folder, improved maintainability and consistency +- Refactored form-related components in components/core/forms folder, improved maintainability and consistency - Refactored ArtBreadcrumb breadcrumb navigation component, optimized logic structure and styles - Refactored ArtFireworksEffect fireworks effect component, significantly improved rendering performance and animation smoothness @@ -468,8 +468,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), #### Refactored -- ArtMenuRight component refactored -- Components under components/cards refactored, code optimized +- FaMenuRight component refactored +- Components under components/core/cards refactored, code optimized #### Optimized @@ -481,14 +481,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), #### Refactored -- ArtResultPage component refactored +- FaResultPage component refactored #### Optimized - ArtTextScroll component code optimization -- ArtException component added type hints -- ArtCutterImg component style optimization, added type definitions -- ArtVideoPlayer component added type definitions +- FaException component added type hints +- FaCutterImg component style optimization, added type definitions +- FaVideoPlayer component added type definitions --- diff --git a/frontend/web/CHANGELOG.zh-CN.md b/frontend/web/CHANGELOG.zh-CN.md index 90613c5b..1bc5aa90 100644 --- a/frontend/web/CHANGELOG.zh-CN.md +++ b/frontend/web/CHANGELOG.zh-CN.md @@ -371,7 +371,7 @@ #### 移除 -- 移除 CountTo 插件,替换为 ArtCountTo 组件 +- 移除 CountTo 插件,替换为 FaCountTo 组件 #### 修复 @@ -431,7 +431,7 @@ #### 修复 -- 修复登录页面拖拽组件 ArtDragVerify 宽度、颜色异常bug +- 修复登录页面拖拽组件 FaDragVerify 宽度、颜色异常bug - 修复 iframe 页面混合模式、双列模式异常bug - 优化锁屏页面被 el-loading 穿透bug @@ -441,7 +441,7 @@ #### 重构 -- 重构 components/forms 文件夹下的表单相关组件,提升可维护性与一致性 +- 重构 components/core/forms 文件夹下的表单相关组件,提升可维护性与一致性 - 重构 ArtBreadcrumb 面包屑导航组件,优化逻辑结构与样式 - 重构 ArtFireworksEffect 烟花效果组件,显著提升渲染性能与动画流畅度 @@ -468,8 +468,8 @@ #### 重构 -- ArtMenuRight 组件重构 -- components/cards 下面的组件重构,代码优化 +- FaMenuRight 组件重构 +- components/core/cards 下面的组件重构,代码优化 #### 优化 @@ -481,14 +481,14 @@ #### 重构 -- ArtResultPage 组件重构 +- FaResultPage 组件重构 #### 优化 - ArtTextScroll 组件代码优化 -- ArtException 组件增加类型提示 -- ArtCutterImg 组件样式优化、增加类型定义 -- ArtVideoPlayer 组件增加类型定义 +- FaException 组件增加类型提示 +- FaCutterImg 组件样式优化、增加类型定义 +- FaVideoPlayer 组件增加类型定义 --- diff --git a/frontend/web/eslint.config.mjs b/frontend/web/eslint.config.mjs index ce0be97e..87c36094 100644 --- a/frontend/web/eslint.config.mjs +++ b/frontend/web/eslint.config.mjs @@ -130,7 +130,6 @@ export default [ CommonType: 'readonly', updatorType: 'readonly', creatorType: 'readonly', - TagView: 'readonly', AppSettings: 'readonly', __APP_INFO__: 'readonly', UploadFilePath: 'readonly', @@ -183,11 +182,24 @@ export default [ }, }, + // Pin TypeScript project root so @typescript-eslint/parser resolves tsconfig consistently. + { + files: ['**/*.{ts,tsx,mts,cts}'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname, + }, + }, + }, + // Vue 文件特定配置 { files: ['**/*.vue'], languageOptions: { - parserOptions: { parser: tseslint.parser }, + parserOptions: { + parser: tseslint.parser, + tsconfigRootDir: __dirname, + }, }, }, diff --git a/frontend/web/scripts/clean-dev.ts b/frontend/web/scripts/clean-dev.ts index c7df7ee6..8ef02eb7 100644 --- a/frontend/web/scripts/clean-dev.ts +++ b/frontend/web/scripts/clean-dev.ts @@ -165,7 +165,7 @@ const targets = [ "src/assets/images/cover", "src/assets/images/safeguard", "src/assets/images/3d", - "src/components/charts/fa-map-chart", + "src/components/charts/art-map-chart", "src/components/business/comment-widget", ]; diff --git a/frontend/web/src/App.vue b/frontend/web/src/App.vue index 856fbfa9..16ad192b 100755 --- a/frontend/web/src/App.vue +++ b/frontend/web/src/App.vue @@ -16,7 +16,7 @@ - + @@ -27,7 +27,7 @@ import { useAppStore, useUserStore } from "./store"; import { useSettingsStore } from "./store/modules/setting.store"; import { defaultSettings } from "./config/setting"; import { ComponentSize } from "./enums/settings/layout.enum"; -import FaAiAssistant from "./components/others/fa-ai-assistant/index.vue"; +import AiAssistant from "./components/others/fa-ai-assistant/index.vue"; import { hexToRgba, toggleTransition } from "./utils/ui"; import { checkStorageCompatibility } from "./utils/storage"; import { initializeTheme } from "./hooks/core/useTheme"; diff --git a/frontend/web/src/assets/svg/loading.ts b/frontend/web/src/assets/svg/loading.ts index fdfb0780..f30e3947 100644 --- a/frontend/web/src/assets/svg/loading.ts +++ b/frontend/web/src/assets/svg/loading.ts @@ -29,4 +29,4 @@ export const fourDotsSpinnerSvg = ` -` +`; diff --git a/frontend/web/src/components/forms/fa-wang-editor/style.scss b/frontend/web/src/components/forms/fa-wang-editor/style.scss index 7f22e98b..0b1599df 100644 --- a/frontend/web/src/components/forms/fa-wang-editor/style.scss +++ b/frontend/web/src/components/forms/fa-wang-editor/style.scss @@ -9,7 +9,7 @@ $box-radius: calc(var(--custom-radius) / 3 + 2px); .editor-wrapper { width: 100%; height: 100%; - border: 1px solid var(--art-gray-300); + border: 1px solid var(--fa-gray-300); border-radius: $box-radius !important; .w-e-bar { @@ -53,12 +53,12 @@ $box-radius: calc(var(--custom-radius) / 3 + 2px); /* 下拉选择框 hover 样式调整 */ .w-e-select-list ul li:hover { - background-color: var(--art-gray-200); + background-color: var(--fa-gray-200); } :root { /* 激活颜色 */ - --w-e-toolbar-active-bg-color: var(--art-gray-200); + --w-e-toolbar-active-bg-color: var(--fa-gray-200); /* toolbar 图标和文字颜色 */ --w-e-toolbar-color: #000; @@ -67,22 +67,22 @@ $box-radius: calc(var(--custom-radius) / 3 + 2px); --w-e-textarea-selected-border-color: #ddd; /* 表格头背景颜色 */ - --w-e-textarea-slight-bg-color: var(--art-gray-200); + --w-e-textarea-slight-bg-color: var(--fa-gray-200); } /* 工具栏按钮样式 */ .w-e-bar-item svg { - fill: var(--art-gray-800); + fill: var(--fa-gray-800); } .w-e-bar-item button { - color: var(--art-gray-800); + color: var(--fa-gray-800); border-radius: $box-radius; } /* 工具栏 hover 按钮背景颜色 */ .w-e-bar-item button:hover { - background-color: var(--art-gray-200); + background-color: var(--fa-gray-200); } /* 工具栏分割线 */ @@ -110,7 +110,7 @@ $box-radius: calc(var(--custom-radius) / 3 + 2px); /* 代码块 */ .w-e-text-container [data-slate-editor] pre > code { padding: 0.6rem 1rem; - background-color: var(--art-gray-50); + background-color: var(--fa-gray-50); border-radius: $box-radius; } @@ -210,8 +210,8 @@ $box-radius: calc(var(--custom-radius) / 3 + 2px); /* 引用 */ .w-e-text-container [data-slate-editor] blockquote { - background-color: var(--art-gray-200); - border-left: 4px solid var(--art-gray-300); + background-color: var(--fa-gray-200); + border-left: 4px solid var(--fa-gray-300); } /* 输入区域弹出 bar */ diff --git a/frontend/web/src/components/layouts/fa-global-search/index.vue b/frontend/web/src/components/layouts/fa-global-search/index.vue index 482907f1..876c514d 100644 --- a/frontend/web/src/components/layouts/fa-global-search/index.vue +++ b/frontend/web/src/components/layouts/fa-global-search/index.vue @@ -367,27 +367,27 @@ const highlightOnHoverHistory = (index: number) => { diff --git a/frontend/web/src/components/layouts/fa-menus/fa-mixed-menu/index.vue b/frontend/web/src/components/layouts/fa-menus/fa-mixed-menu/index.vue index 43982a00..9092a096 100644 --- a/frontend/web/src/components/layouts/fa-menus/fa-mixed-menu/index.vue +++ b/frontend/web/src/components/layouts/fa-menus/fa-mixed-menu/index.vue @@ -59,6 +59,7 @@ import { useThrottleFn } from "@vueuse/core"; import { formatMenuTitle } from "@utils/navigation"; import { handleMenuJump } from "@utils/navigation"; import type { AppRouteRecord } from "@/types/router"; +import FaMenuRouteIcon from "@/components/others/fa-menu-routeIcon/index.vue"; defineOptions({ name: "FaMixedMenu" }); @@ -247,13 +248,13 @@ onMounted(initScrollState); diff --git a/frontend/web/src/components/others/fa-icon-select/index.vue b/frontend/web/src/components/others/fa-icon-select/index.vue index a27f94dd..8ab9aea0 100644 --- a/frontend/web/src/components/others/fa-icon-select/index.vue +++ b/frontend/web/src/components/others/fa-icon-select/index.vue @@ -181,8 +181,8 @@ onMounted(() => { + diff --git a/frontend/web/src/components/others/fa-table-select/index.vue b/frontend/web/src/components/others/fa-table-select/index.vue index a38782e9..af008326 100644 --- a/frontend/web/src/components/others/fa-table-select/index.vue +++ b/frontend/web/src/components/others/fa-table-select/index.vue @@ -352,8 +352,8 @@ const popoverContentRef = ref(); diff --git a/frontend/web/src/components/others/fa-upload/index.vue b/frontend/web/src/components/others/fa-upload/index.vue index 85648b88..108ddcf7 100644 --- a/frontend/web/src/components/others/fa-upload/index.vue +++ b/frontend/web/src/components/others/fa-upload/index.vue @@ -464,7 +464,7 @@ const onError = (error: any) => { } } -:deep(.el-upload--picture-card) { +::deep(.el-upload--picture-card) { position: relative; width: v-bind("props.style.width ?? '150px'"); height: v-bind("props.style.height ?? '150px'"); diff --git a/frontend/web/src/components/tables/fa-table/index.vue b/frontend/web/src/components/tables/fa-table/index.vue index b18b6a16..a6c4e513 100644 --- a/frontend/web/src/components/tables/fa-table/index.vue +++ b/frontend/web/src/components/tables/fa-table/index.vue @@ -16,59 +16,51 @@ > - - - - - - + + + + + + + + + + + + +