浏览代码

style: 格式调整

zhanghaijun 1 年之前
父节点
当前提交
bbccef4a01

+ 3 - 13
src/components/business/EasyProcess/index.vue

@@ -9,21 +9,11 @@
     </div>
     </div>
     <!-- 缩放 -->
     <!-- 缩放 -->
     <div class="ep-zoom">
     <div class="ep-zoom">
-      <el-icon
-        class="ep-zoom-icon"
-        color="#ffffff"
-        :class="zoom == 50 && 'disabled'"
-        @click="setZoom(-10)"
-      >
+      <el-icon class="ep-zoom-icon" color="#ffffff" :class="zoom == 50 && 'disabled'" @click="setZoom(-10)">
         <Minus />
         <Minus />
       </el-icon>
       </el-icon>
       <span>{{ zoom }}%</span>
       <span>{{ zoom }}%</span>
-      <el-icon
-        class="ep-zoom-icon"
-        color="#ffffff"
-        :class="zoom == 300 && 'disabled'"
-        @click="setZoom(10)"
-      >
+      <el-icon class="ep-zoom-icon" color="#ffffff" :class="zoom == 300 && 'disabled'" @click="setZoom(10)">
         <Plus />
         <Plus />
       </el-icon>
       </el-icon>
     </div>
     </div>
@@ -62,7 +52,7 @@
 
 
   watchEffect(() => {
   watchEffect(() => {
     // processData.value = copy(props.data?.process ? props.data : blankProcessData)
     // processData.value = copy(props.data?.process ? props.data : blankProcessData)
-    processData.value = copy({process:blankProcessData})
+    processData.value = copy({ process: blankProcessData })
     nextTick(() => validate())
     nextTick(() => validate())
   })
   })
 
 

+ 2 - 11
src/components/core/forms/art-button-more/index.vue

@@ -6,18 +6,9 @@
       <template #dropdown>
       <template #dropdown>
         <ElDropdownMenu>
         <ElDropdownMenu>
           <template v-for="item in list" :key="item.key">
           <template v-for="item in list" :key="item.key">
-            <ElDropdownItem
-              v-if="!item.auth || hasAuth(item.auth)"
-              :disabled="item.disabled"
-              @click="handleClick(item)"
-              class="custom-dropdown-item"
-            >
+            <ElDropdownItem v-if="!item.auth || hasAuth(item.auth)" :disabled="item.disabled" @click="handleClick(item)" class="custom-dropdown-item">
               <div class="dropdown-item-content">
               <div class="dropdown-item-content">
-                <ElIcon
-                  v-if="item.icon"
-                  :size="15"
-                  :style="{ color: item.iconColor || item.color, margin: 0 }"
-                >
+                <ElIcon v-if="item.icon" :size="15" :style="{ color: item.iconColor || item.color, margin: 0 }">
                   <component :is="item.icon" />
                   <component :is="item.icon" />
                 </ElIcon>
                 </ElIcon>
                 <span :style="{ color: item.color }">{{ item.label }}</span>
                 <span :style="{ color: item.color }">{{ item.label }}</span>

+ 1 - 5
src/components/core/forms/art-button-table/index.vue

@@ -1,10 +1,6 @@
 <!-- 表格按钮 -->
 <!-- 表格按钮 -->
 <template>
 <template>
-  <div
-    :class="['btn-text', buttonClass]"
-    :style="{ backgroundColor: buttonBgColor, color: iconColor }"
-    @click="handleClick"
-  >
+  <div :class="['btn-text', buttonClass]" :style="{ backgroundColor: buttonBgColor, color: iconColor }" @click="handleClick">
     <i v-if="iconContent" class="iconfont-sys" v-html="iconContent"></i>
     <i v-if="iconContent" class="iconfont-sys" v-html="iconContent"></i>
   </div>
   </div>
 </template>
 </template>

+ 4 - 23
src/components/core/forms/art-excel-export/index.vue

@@ -1,13 +1,6 @@
 <!-- 导出 Excel 文件 -->
 <!-- 导出 Excel 文件 -->
 <template>
 <template>
-  <ElButton
-    :type="type"
-    :size="size"
-    :loading="isExporting"
-    :disabled="disabled || !hasData"
-    v-ripple
-    @click="handleExport"
-  >
+  <ElButton :type="type" :size="size" :loading="isExporting" :disabled="disabled || !hasData" v-ripple @click="handleExport">
     <template #loading>
     <template #loading>
       <ElIcon class="is-loading">
       <ElIcon class="is-loading">
         <Loading />
         <Loading />
@@ -152,12 +145,7 @@
   }
   }
 
 
   /** 格式化单元格值 */
   /** 格式化单元格值 */
-  const formatCellValue = (
-    value: ExportValue,
-    key: string,
-    row: ExportData,
-    index: number
-  ): string => {
+  const formatCellValue = (value: ExportValue, key: string, row: ExportData, index: number): string => {
     // 使用列配置的格式化函数
     // 使用列配置的格式化函数
     const column = props.columns[key]
     const column = props.columns[key]
     if (column?.formatter) {
     if (column?.formatter) {
@@ -238,11 +226,7 @@
   }
   }
 
 
   /** 导出到 Excel */
   /** 导出到 Excel */
-  const exportToExcel = async (
-    data: ExportData[],
-    filename: string,
-    sheetName: string
-  ): Promise<void> => {
+  const exportToExcel = async (data: ExportData[], filename: string, sheetName: string): Promise<void> => {
     try {
     try {
       emit('export-progress', 10)
       emit('export-progress', 10)
 
 
@@ -342,10 +326,7 @@
         })
         })
       }
       }
     } catch (error) {
     } catch (error) {
-      const exportError =
-        error instanceof ExportError
-          ? error
-          : new ExportError(`导出失败: ${(error as Error).message}`, 'UNKNOWN_ERROR', error)
+      const exportError = error instanceof ExportError ? error : new ExportError(`导出失败: ${(error as Error).message}`, 'UNKNOWN_ERROR', error)
 
 
       // 触发错误事件
       // 触发错误事件
       emit('export-error', exportError)
       emit('export-error', exportError)

+ 1 - 6
src/components/core/forms/art-excel-import/index.vue

@@ -1,12 +1,7 @@
 <!-- 导入 Excel 文件 -->
 <!-- 导入 Excel 文件 -->
 <template>
 <template>
   <div class="excel-uploader">
   <div class="excel-uploader">
-    <ElUpload
-      :auto-upload="false"
-      accept=".xlsx, .xls"
-      :show-file-list="false"
-      @change="handleFileChange"
-    >
+    <ElUpload :auto-upload="false" accept=".xlsx, .xls" :show-file-list="false" @change="handleFileChange">
       <ElButton type="primary" v-ripple>
       <ElButton type="primary" v-ripple>
         <slot>导入 Excel</slot>
         <slot>导入 Excel</slot>
       </ElButton>
       </ElButton>

+ 10 - 57
src/components/core/forms/art-form/index.vue

@@ -3,58 +3,25 @@
 <!-- 写法同 ElementPlus 官方文档组件,把属性写在 props 里面就可以了 -->
 <!-- 写法同 ElementPlus 官方文档组件,把属性写在 props 里面就可以了 -->
 <template>
 <template>
   <section class="art-form">
   <section class="art-form">
-    <ElForm
-      ref="formRef"
-      :model="modelValue"
-      :label-position="labelPosition"
-      v-bind="{ ...$attrs }"
-    >
+    <ElForm ref="formRef" :model="modelValue" :label-position="labelPosition" v-bind="{ ...$attrs }">
       <ElRow class="form-row" :gutter="gutter">
       <ElRow class="form-row" :gutter="gutter">
-        <ElCol
-          v-for="item in visibleFormItems"
-          :key="item.key"
-          :xs="24"
-          :sm="12"
-          :md="8"
-          :lg="item.span || span"
-          :xl="item.span || span"
-        >
-          <ElFormItem
-            :label="item.label"
-            :prop="item.key"
-            :label-width="item.label ? item.labelWidth || labelWidth : undefined"
-          >
+        <ElCol v-for="item in visibleFormItems" :key="item.key" :xs="24" :sm="12" :md="8" :lg="item.span || span" :xl="item.span || span">
+          <ElFormItem :label="item.label" :prop="item.key" :label-width="item.label ? item.labelWidth || labelWidth : undefined">
             <slot :name="item.key" :item="item" :modelValue="modelValue">
             <slot :name="item.key" :item="item" :modelValue="modelValue">
-              <component
-                :is="getComponent(item)"
-                v-model="modelValue[item.key]"
-                v-bind="getProps(item)"
-              >
+              <component :is="getComponent(item)" v-model="modelValue[item.key]" v-bind="getProps(item)">
                 <!-- 下拉选择 -->
                 <!-- 下拉选择 -->
                 <template v-if="item.type === 'select' && getProps(item)?.options">
                 <template v-if="item.type === 'select' && getProps(item)?.options">
-                  <ElOption
-                    v-for="option in getProps(item).options"
-                    v-bind="option"
-                    :key="option.value"
-                  />
+                  <ElOption v-for="option in getProps(item).options" v-bind="option" :key="option.value" />
                 </template>
                 </template>
 
 
                 <!-- 复选框组 -->
                 <!-- 复选框组 -->
                 <template v-if="item.type === 'checkboxgroup' && getProps(item)?.options">
                 <template v-if="item.type === 'checkboxgroup' && getProps(item)?.options">
-                  <ElCheckbox
-                    v-for="option in getProps(item).options"
-                    v-bind="option"
-                    :key="option.value"
-                  />
+                  <ElCheckbox v-for="option in getProps(item).options" v-bind="option" :key="option.value" />
                 </template>
                 </template>
 
 
                 <!-- 单选框组 -->
                 <!-- 单选框组 -->
                 <template v-if="item.type === 'radiogroup' && getProps(item)?.options">
                 <template v-if="item.type === 'radiogroup' && getProps(item)?.options">
-                  <ElRadio
-                    v-for="option in getProps(item).options"
-                    v-bind="option"
-                    :key="option.value"
-                  />
+                  <ElRadio v-for="option in getProps(item).options" v-bind="option" :key="option.value" />
                 </template>
                 </template>
 
 
                 <!-- 动态插槽支持 -->
                 <!-- 动态插槽支持 -->
@@ -71,14 +38,7 @@
               <ElButton v-if="showReset" class="reset-button" @click="handleReset" v-ripple>
               <ElButton v-if="showReset" class="reset-button" @click="handleReset" v-ripple>
                 {{ t('table.form.reset') }}
                 {{ t('table.form.reset') }}
               </ElButton>
               </ElButton>
-              <ElButton
-                v-if="showSubmit"
-                type="primary"
-                class="submit-button"
-                @click="handleSubmit"
-                v-ripple
-                :disabled="disabledSubmit"
-              >
+              <ElButton v-if="showSubmit" type="primary" class="submit-button" @click="handleSubmit" v-ripple :disabled="disabledSubmit">
                 {{ t('table.form.submit') }}
                 {{ t('table.form.submit') }}
               </ElButton>
               </ElButton>
             </div>
             </div>
@@ -252,11 +212,7 @@
    * 操作按钮样式
    * 操作按钮样式
    */
    */
   const actionButtonsStyle = computed(() => ({
   const actionButtonsStyle = computed(() => ({
-    'justify-content': isMobile.value
-      ? 'flex-end'
-      : props.items.filter((item) => !item.hidden).length <= props.buttonLeftLimit
-        ? 'flex-start'
-        : 'flex-end'
+    'justify-content': isMobile.value ? 'flex-end' : props.items.filter((item) => !item.hidden).length <= props.buttonLeftLimit ? 'flex-start' : 'flex-end'
   }))
   }))
 
 
   /**
   /**
@@ -267,10 +223,7 @@
     formInstance.value?.resetFields()
     formInstance.value?.resetFields()
 
 
     // 清空所有表单项值(包含隐藏项)
     // 清空所有表单项值(包含隐藏项)
-    Object.assign(
-      modelValue.value,
-      Object.fromEntries(props.items.map(({ key }) => [key, undefined]))
-    )
+    Object.assign(modelValue.value, Object.fromEntries(props.items.map(({ key }) => [key, undefined])))
 
 
     // 触发 reset 事件
     // 触发 reset 事件
     emit('reset')
     emit('reset')

+ 3 - 17
src/components/core/forms/art-wang-editor/index.vue

@@ -1,19 +1,8 @@
 <!-- WangEditor 富文本编辑器 插件地址:https://www.wangeditor.com/ -->
 <!-- WangEditor 富文本编辑器 插件地址:https://www.wangeditor.com/ -->
 <template>
 <template>
   <div class="editor-wrapper">
   <div class="editor-wrapper">
-    <Toolbar
-      class="editor-toolbar"
-      :editor="editorRef"
-      :mode="mode"
-      :defaultConfig="toolbarConfig"
-    />
-    <Editor
-      :style="{ height: height, overflowY: 'hidden' }"
-      v-model="modelValue"
-      :mode="mode"
-      :defaultConfig="editorConfig"
-      @onCreated="onCreateEditor"
-    />
+    <Toolbar class="editor-toolbar" :editor="editorRef" :mode="mode" :defaultConfig="toolbarConfig" />
+    <Editor :style="{ height: height, overflowY: 'hidden' }" v-model="modelValue" :mode="mode" :defaultConfig="editorConfig" @onCreated="onCreateEditor" />
   </div>
   </div>
 </template>
 </template>
 
 
@@ -98,10 +87,7 @@
   } as const
   } as const
 
 
   // 计算属性:上传服务器地址
   // 计算属性:上传服务器地址
-  const uploadServer = computed(
-    () =>
-      props.uploadConfig?.server || `${import.meta.env.VITE_API_URL}/api/common/upload/wangeditor`
-  )
+  const uploadServer = computed(() => props.uploadConfig?.server || `${import.meta.env.VITE_API_URL}/api/common/upload/wangeditor`)
 
 
   // 合并上传配置
   // 合并上传配置
   const mergedUploadConfig = computed(() => ({
   const mergedUploadConfig = computed(() => ({

+ 6 - 20
src/components/core/layouts/art-breadcrumb/index.vue

@@ -3,19 +3,10 @@
   <nav class="breadcrumb" aria-label="breadcrumb">
   <nav class="breadcrumb" aria-label="breadcrumb">
     <ul>
     <ul>
       <li v-for="(item, index) in breadcrumbItems" :key="item.path">
       <li v-for="(item, index) in breadcrumbItems" :key="item.path">
-        <div
-          :class="{ clickable: isClickable(item, index) }"
-          @click="handleBreadcrumbClick(item, index)"
-        >
+        <div :class="{ clickable: isClickable(item, index) }" @click="handleBreadcrumbClick(item, index)">
           <span>{{ formatMenuTitle(item.meta?.title as string) }}</span>
           <span>{{ formatMenuTitle(item.meta?.title as string) }}</span>
         </div>
         </div>
-        <div
-          v-if="!isLastItem(index) && item.meta?.title"
-          class="breadcrumb-separator"
-          aria-hidden="true"
-        >
-          /
-        </div>
+        <div v-if="!isLastItem(index) && item.meta?.title" class="breadcrumb-separator" aria-hidden="true"> / </div>
       </li>
       </li>
     </ul>
     </ul>
   </nav>
   </nav>
@@ -54,9 +45,7 @@
     const currentRoute = matched[lastIndex]
     const currentRoute = matched[lastIndex]
     const currentRouteMeta = currentRoute.meta
     const currentRouteMeta = currentRoute.meta
 
 
-    let items = isFirstLevel
-      ? [createBreadcrumbItem(currentRoute)]
-      : matched.map(createBreadcrumbItem)
+    let items = isFirstLevel ? [createBreadcrumbItem(currentRoute)] : matched.map(createBreadcrumbItem)
 
 
     // 过滤包裹容器:如果有多个项目且第一个是容器路由(如 /outside),则移除它
     // 过滤包裹容器:如果有多个项目且第一个是容器路由(如 /outside),则移除它
     if (items.length > 1 && isWrapperContainer(items[0])) {
     if (items.length > 1 && isWrapperContainer(items[0])) {
@@ -72,8 +61,7 @@
   })
   })
 
 
   // 辅助函数:判断是否为包裹容器路由
   // 辅助函数:判断是否为包裹容器路由
-  const isWrapperContainer = (item: BreadcrumbItem): boolean =>
-    item.path === '/outside' && !!item.meta?.isIframe
+  const isWrapperContainer = (item: BreadcrumbItem): boolean => item.path === '/outside' && !!item.meta?.isIframe
 
 
   // 辅助函数:创建面包屑项目
   // 辅助函数:创建面包屑项目
   const createBreadcrumbItem = (route: RouteLocationMatched): BreadcrumbItem => ({
   const createBreadcrumbItem = (route: RouteLocationMatched): BreadcrumbItem => ({
@@ -91,12 +79,10 @@
   }
   }
 
 
   // 辅助函数:判断是否可点击
   // 辅助函数:判断是否可点击
-  const isClickable = (item: BreadcrumbItem, index: number): boolean =>
-    item.path !== '/outside' && !isLastItem(index)
+  const isClickable = (item: BreadcrumbItem, index: number): boolean => item.path !== '/outside' && !isLastItem(index)
 
 
   // 辅助函数:查找路由的第一个有效子路由
   // 辅助函数:查找路由的第一个有效子路由
-  const findFirstValidChild = (route: RouteRecordRaw) =>
-    route.children?.find((child) => !child.redirect && !child.meta?.isHide)
+  const findFirstValidChild = (route: RouteRecordRaw) => route.children?.find((child) => !child.redirect && !child.meta?.isHide)
 
 
   // 辅助函数:构建完整路径
   // 辅助函数:构建完整路径
   const buildFullPath = (childPath: string): string => `/${childPath}`.replace('//', '/')
   const buildFullPath = (childPath: string): string => `/${childPath}`.replace('//', '/')

+ 1 - 8
src/components/core/layouts/art-chat-window/index.vue

@@ -34,14 +34,7 @@
 
 
         <!-- 聊天输入区域 -->
         <!-- 聊天输入区域 -->
         <div class="chat-input">
         <div class="chat-input">
-          <ElInput
-            v-model="messageText"
-            type="textarea"
-            :rows="3"
-            placeholder="输入消息"
-            resize="none"
-            @keyup.enter.prevent="sendMessage"
-          >
+          <ElInput v-model="messageText" type="textarea" :rows="3" placeholder="输入消息" resize="none" @keyup.enter.prevent="sendMessage">
             <template #append>
             <template #append>
               <div class="input-actions">
               <div class="input-actions">
                 <ElButton :icon="Paperclip" circle plain />
                 <ElButton :icon="Paperclip" circle plain />

+ 3 - 16
src/components/core/layouts/art-fast-enter/index.vue

@@ -25,18 +25,9 @@
       <div class="apps-section">
       <div class="apps-section">
         <div class="apps-grid">
         <div class="apps-grid">
           <!-- 应用列表 -->
           <!-- 应用列表 -->
-          <div
-            v-for="application in enabledApplications"
-            :key="application.name"
-            class="app-item"
-            @click="handleNavigate(application.path)"
-          >
+          <div v-for="application in enabledApplications" :key="application.name" class="app-item" @click="handleNavigate(application.path)">
             <div class="app-icon">
             <div class="app-icon">
-              <i
-                class="iconfont-sys"
-                v-html="application.icon"
-                :style="{ color: application.iconColor }"
-              />
+              <i class="iconfont-sys" v-html="application.icon" :style="{ color: application.iconColor }" />
             </div>
             </div>
             <div class="app-info">
             <div class="app-info">
               <h3>{{ application.name }}</h3>
               <h3>{{ application.name }}</h3>
@@ -49,11 +40,7 @@
       <div class="quick-links">
       <div class="quick-links">
         <h3>快速链接</h3>
         <h3>快速链接</h3>
         <ul>
         <ul>
-          <li
-            v-for="quickLink in enabledQuickLinks"
-            :key="quickLink.name"
-            @click="handleNavigate(quickLink.path)"
-          >
+          <li v-for="quickLink in enabledQuickLinks" :key="quickLink.name" @click="handleNavigate(quickLink.path)">
             <span>{{ quickLink.name }}</span>
             <span>{{ quickLink.name }}</span>
           </li>
           </li>
         </ul>
         </ul>

+ 7 - 32
src/components/core/layouts/art-global-search/index.vue

@@ -1,22 +1,8 @@
 <!-- 全局搜索组件 -->
 <!-- 全局搜索组件 -->
 <template>
 <template>
   <div class="layout-search">
   <div class="layout-search">
-    <ElDialog
-      v-model="showSearchDialog"
-      width="600"
-      :show-close="false"
-      :lock-scroll="false"
-      modal-class="search-modal"
-      @close="closeSearchDialog"
-    >
-      <ElInput
-        v-model.trim="searchVal"
-        :placeholder="$t('search.placeholder')"
-        @input="search"
-        @blur="searchBlur"
-        ref="searchInput"
-        :prefix-icon="Search"
-      >
+    <ElDialog v-model="showSearchDialog" width="600" :show-close="false" :lock-scroll="false" modal-class="search-modal" @close="closeSearchDialog">
+      <ElInput v-model.trim="searchVal" :placeholder="$t('search.placeholder')" @input="search" @blur="searchBlur" ref="searchInput" :prefix-icon="Search">
         <template #suffix>
         <template #suffix>
           <div class="search-keydown">
           <div class="search-keydown">
             <i class="iconfont-sys">&#xe6e6;</i>
             <i class="iconfont-sys">&#xe6e6;</i>
@@ -26,21 +12,14 @@
       <ElScrollbar class="search-scrollbar" max-height="370px" ref="searchResultScrollbar" always>
       <ElScrollbar class="search-scrollbar" max-height="370px" ref="searchResultScrollbar" always>
         <div class="result" v-show="searchResult.length">
         <div class="result" v-show="searchResult.length">
           <div class="box" v-for="(item, index) in searchResult" :key="index">
           <div class="box" v-for="(item, index) in searchResult" :key="index">
-            <div
-              :class="{ highlighted: isHighlighted(index) }"
-              @click="searchGoPage(item)"
-              @mouseenter="highlightOnHover(index)"
-            >
+            <div :class="{ highlighted: isHighlighted(index) }" @click="searchGoPage(item)" @mouseenter="highlightOnHover(index)">
               {{ formatMenuTitle(item.meta.title) }}
               {{ formatMenuTitle(item.meta.title) }}
               <i class="selected-icon iconfont-sys" v-show="isHighlighted(index)">&#xe6e6;</i>
               <i class="selected-icon iconfont-sys" v-show="isHighlighted(index)">&#xe6e6;</i>
             </div>
             </div>
           </div>
           </div>
         </div>
         </div>
 
 
-        <div
-          class="history-box"
-          v-show="!searchVal && searchResult.length === 0 && historyResult.length > 0"
-        >
+        <div class="history-box" v-show="!searchVal && searchResult.length === 0 && historyResult.length > 0">
           <p class="title">{{ $t('search.historyTitle') }}</p>
           <p class="title">{{ $t('search.historyTitle') }}</p>
           <div class="history-result">
           <div class="history-result">
             <div
             <div
@@ -188,12 +167,10 @@
   const highlightPrevious = () => {
   const highlightPrevious = () => {
     isKeyboardNavigating.value = true
     isKeyboardNavigating.value = true
     if (searchVal.value) {
     if (searchVal.value) {
-      highlightedIndex.value =
-        (highlightedIndex.value - 1 + searchResult.value.length) % searchResult.value.length
+      highlightedIndex.value = (highlightedIndex.value - 1 + searchResult.value.length) % searchResult.value.length
       scrollToHighlightedItem()
       scrollToHighlightedItem()
     } else {
     } else {
-      historyHIndex.value =
-        (historyHIndex.value - 1 + historyResult.value.length) % historyResult.value.length
+      historyHIndex.value = (historyHIndex.value - 1 + historyResult.value.length) % historyResult.value.length
       scrollToHighlightedHistoryItem()
       scrollToHighlightedHistoryItem()
     }
     }
     // 延迟重置键盘导航状态,防止立即被 hover 覆盖
     // 延迟重置键盘导航状态,防止立即被 hover 覆盖
@@ -298,9 +275,7 @@
   }
   }
 
 
   const addHistory = (item: AppRouteRecord) => {
   const addHistory = (item: AppRouteRecord) => {
-    const hasItemIndex = historyResult.value.findIndex(
-      (historyItem: AppRouteRecord) => historyItem.path === item.path
-    )
+    const hasItemIndex = historyResult.value.findIndex((historyItem: AppRouteRecord) => historyItem.path === item.path)
 
 
     if (hasItemIndex !== -1) {
     if (hasItemIndex !== -1) {
       historyResult.value.splice(hasItemIndex, 1)
       historyResult.value.splice(hasItemIndex, 1)

+ 7 - 36
src/components/core/layouts/art-header-bar/index.vue

@@ -28,13 +28,13 @@
         <!-- <ArtFastEnter v-if="shouldShowFastEnter && width >= headerBarFastEnterMinWidth" /> -->
         <!-- <ArtFastEnter v-if="shouldShowFastEnter && width >= headerBarFastEnterMinWidth" /> -->
 
 
         <!-- 面包屑 -->
         <!-- 面包屑 -->
-        <ArtBreadcrumb v-if="(shouldShowBreadcrumb && isLeftMenu) || (shouldShowBreadcrumb && isDualMenu)" />
+        <!-- <ArtBreadcrumb v-if="(shouldShowBreadcrumb && isLeftMenu) || (shouldShowBreadcrumb && isDualMenu)" /> -->
 
 
         <!-- 顶部菜单 -->
         <!-- 顶部菜单 -->
-        <ArtHorizontalMenu v-if="isTopMenu" :list="menuList" />
+        <!-- <ArtHorizontalMenu v-if="isTopMenu" :list="menuList" /> -->
 
 
         <!-- 混合菜单-顶部 -->
         <!-- 混合菜单-顶部 -->
-        <ArtMixedMenu v-if="isTopLeftMenu" :list="menuList" />
+        <!-- <ArtMixedMenu v-if="isTopLeftMenu" :list="menuList" /> -->
       </div>
       </div>
 
 
       <div class="right">
       <div class="right">
@@ -168,7 +168,6 @@
   import { LanguageEnum, MenuTypeEnum } from '@/enums/appEnum'
   import { LanguageEnum, MenuTypeEnum } from '@/enums/appEnum'
   import { useSettingStore } from '@/store/modules/setting'
   import { useSettingStore } from '@/store/modules/setting'
   import { useUserStore } from '@/store/modules/user'
   import { useUserStore } from '@/store/modules/user'
-  import { useMenuStore } from '@/store/modules/menu'
   import AppConfig from '@/config'
   import AppConfig from '@/config'
   import { languageOptions } from '@/locales'
   import { languageOptions } from '@/locales'
   import { mittBus } from '@/utils/sys'
   import { mittBus } from '@/utils/sys'
@@ -187,28 +186,14 @@
 
 
   const settingStore = useSettingStore()
   const settingStore = useSettingStore()
   const userStore = useUserStore()
   const userStore = useUserStore()
-  const menuStore = useMenuStore()
 
 
   // 顶部栏功能配置
   // 顶部栏功能配置
-  const {
-    shouldShowMenuButton,
-    shouldShowRefreshButton,
-    shouldShowFastEnter,
-    shouldShowBreadcrumb,
-    shouldShowGlobalSearch,
-    shouldShowFullscreen,
-    shouldShowNotification,
-    shouldShowChat,
-    shouldShowLanguage,
-    shouldShowSettings,
-    shouldShowThemeToggle,
-    fastEnterMinWidth: headerBarFastEnterMinWidth
-  } = useHeaderBar()
+  const { shouldShowMenuButton, shouldShowRefreshButton, shouldShowGlobalSearch, shouldShowFullscreen, shouldShowLanguage, shouldShowSettings, shouldShowThemeToggle } = useHeaderBar()
 
 
   const { menuOpen, systemThemeColor, showSettingGuide, menuType, isDark, tabStyle } = storeToRefs(settingStore)
   const { menuOpen, systemThemeColor, showSettingGuide, menuType, isDark, tabStyle } = storeToRefs(settingStore)
 
 
   const { language, getUserInfo: userInfo } = storeToRefs(userStore)
   const { language, getUserInfo: userInfo } = storeToRefs(userStore)
-  const { menuList } = storeToRefs(menuStore)
+  // const { menuList } = storeToRefs(menuStore)
 
 
   const showNotice = ref(false)
   const showNotice = ref(false)
   const notice = ref(null)
   const notice = ref(null)
@@ -216,9 +201,9 @@
 
 
   // 菜单类型判断
   // 菜单类型判断
   const isLeftMenu = computed(() => menuType.value === MenuTypeEnum.LEFT)
   const isLeftMenu = computed(() => menuType.value === MenuTypeEnum.LEFT)
-  const isDualMenu = computed(() => menuType.value === MenuTypeEnum.DUAL_MENU)
+  // const isDualMenu = computed(() => menuType.value === MenuTypeEnum.DUAL_MENU)
   const isTopMenu = computed(() => menuType.value === MenuTypeEnum.TOP)
   const isTopMenu = computed(() => menuType.value === MenuTypeEnum.TOP)
-  const isTopLeftMenu = computed(() => menuType.value === MenuTypeEnum.TOP_LEFT)
+  // const isTopLeftMenu = computed(() => menuType.value === MenuTypeEnum.TOP_LEFT)
 
 
   const { isFullscreen, toggle: toggleFullscreen } = useFullscreen()
   const { isFullscreen, toggle: toggleFullscreen } = useFullscreen()
 
 
@@ -341,20 +326,6 @@
     }
     }
   }
   }
 
 
-  /**
-   * 切换通知面板显示状态
-   */
-  const visibleNotice = (): void => {
-    showNotice.value = !showNotice.value
-  }
-
-  /**
-   * 打开聊天窗口
-   */
-  const openChat = (): void => {
-    mittBus.emit('openChat')
-  }
-
   /**
   /**
    * 打开锁屏功能
    * 打开锁屏功能
    */
    */

+ 6 - 6
src/components/core/layouts/art-settings-panel/index.vue

@@ -7,15 +7,15 @@
       <!-- 主题风格 -->
       <!-- 主题风格 -->
       <ThemeSettings />
       <ThemeSettings />
       <!-- 菜单布局 -->
       <!-- 菜单布局 -->
-      <MenuLayoutSettings />
+      <!-- <MenuLayoutSettings /> -->
       <!-- 菜单风格 -->
       <!-- 菜单风格 -->
-      <MenuStyleSettings />
+      <!-- <MenuStyleSettings /> -->
       <!-- 系统主题色 -->
       <!-- 系统主题色 -->
       <ColorSettings />
       <ColorSettings />
       <!-- 盒子样式 -->
       <!-- 盒子样式 -->
       <BoxStyleSettings />
       <BoxStyleSettings />
       <!-- 容器宽度 -->
       <!-- 容器宽度 -->
-      <ContainerSettings />
+      <!-- <ContainerSettings /> -->
       <!-- 基础配置 -->
       <!-- 基础配置 -->
       <BasicSettings />
       <BasicSettings />
     </SettingDrawer>
     </SettingDrawer>
@@ -28,11 +28,11 @@
   import SettingDrawer from './widget/SettingDrawer.vue'
   import SettingDrawer from './widget/SettingDrawer.vue'
   import SettingHeader from './widget/SettingHeader.vue'
   import SettingHeader from './widget/SettingHeader.vue'
   import ThemeSettings from './widget/ThemeSettings.vue'
   import ThemeSettings from './widget/ThemeSettings.vue'
-  import MenuLayoutSettings from './widget/MenuLayoutSettings.vue'
-  import MenuStyleSettings from './widget/MenuStyleSettings.vue'
+  // import MenuLayoutSettings from './widget/MenuLayoutSettings.vue'
+  // import MenuStyleSettings from './widget/MenuStyleSettings.vue'
   import ColorSettings from './widget/ColorSettings.vue'
   import ColorSettings from './widget/ColorSettings.vue'
   import BoxStyleSettings from './widget/BoxStyleSettings.vue'
   import BoxStyleSettings from './widget/BoxStyleSettings.vue'
-  import ContainerSettings from './widget/ContainerSettings.vue'
+  // import ContainerSettings from './widget/ContainerSettings.vue'
   import BasicSettings from './widget/BasicSettings.vue'
   import BasicSettings from './widget/BasicSettings.vue'
 
 
   defineOptions({ name: 'ArtSettingsPanel' })
   defineOptions({ name: 'ArtSettingsPanel' })

+ 1 - 21
src/config/fastEnter.ts

@@ -2,33 +2,13 @@
  * 快速入口配置
  * 快速入口配置
  * 包含:应用列表、快速链接等配置
  * 包含:应用列表、快速链接等配置
  */
  */
-import { RoutesAlias } from '@/router/routesAlias'
 import type { FastEnterConfig } from '@/types/config'
 import type { FastEnterConfig } from '@/types/config'
 
 
 const fastEnterConfig: FastEnterConfig = {
 const fastEnterConfig: FastEnterConfig = {
   // 显示条件(屏幕宽度)
   // 显示条件(屏幕宽度)
   minWidth: 1200,
   minWidth: 1200,
   // 应用列表
   // 应用列表
-  applications: [
-    {
-      name: '工作台',
-      description: '系统概览与数据统计',
-      icon: '&#xe721;',
-      iconColor: '#377dff',
-      path: RoutesAlias.Dashboard,
-      enabled: true,
-      order: 1
-    },
-    {
-      name: '分析页',
-      description: '数据分析与可视化',
-      icon: '&#xe812;',
-      iconColor: '#ff3b30',
-      path: RoutesAlias.Analysis,
-      enabled: true,
-      order: 2
-    }
-  ],
+  applications: [],
   // 快速链接
   // 快速链接
   quickLinks: []
   quickLinks: []
 }
 }

+ 13 - 43
src/router/guards/beforeEach.ts

@@ -30,20 +30,14 @@ const pendingLoading = ref(false)
  * 设置路由全局前置守卫
  * 设置路由全局前置守卫
  */
  */
 export function setupBeforeEachGuard(router: Router): void {
 export function setupBeforeEachGuard(router: Router): void {
-  router.beforeEach(
-    async (
-      to: RouteLocationNormalized,
-      from: RouteLocationNormalized,
-      next: NavigationGuardNext
-    ) => {
-      try {
-        await handleRouteGuard(to, from, next, router)
-      } catch (error) {
-        console.error('路由守卫处理失败:', error)
-        next('/exception/500')
-      }
+  router.beforeEach(async (to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => {
+    try {
+      await handleRouteGuard(to, from, next, router)
+    } catch (error) {
+      console.error('路由守卫处理失败:', error)
+      next('/exception/500')
     }
     }
-  )
+  })
 
 
   // 设置后置守卫以关闭 loading 和进度条
   // 设置后置守卫以关闭 loading 和进度条
   setupAfterEachGuard(router)
   setupAfterEachGuard(router)
@@ -73,12 +67,7 @@ function setupAfterEachGuard(router: Router): void {
 /**
 /**
  * 处理路由守卫逻辑
  * 处理路由守卫逻辑
  */
  */
-async function handleRouteGuard(
-  to: RouteLocationNormalized,
-  from: RouteLocationNormalized,
-  next: NavigationGuardNext,
-  router: Router
-): Promise<void> {
+async function handleRouteGuard(to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext, router: Router): Promise<void> {
   const settingStore = useSettingStore()
   const settingStore = useSettingStore()
   const userStore = useUserStore()
   const userStore = useUserStore()
 
 
@@ -127,11 +116,7 @@ async function handleRouteGuard(
 /**
 /**
  * 处理登录状态
  * 处理登录状态
  */
  */
-async function handleLoginStatus(
-  to: RouteLocationNormalized,
-  userStore: ReturnType<typeof useUserStore>,
-  next: NavigationGuardNext
-): Promise<boolean> {
+async function handleLoginStatus(to: RouteLocationNormalized, userStore: ReturnType<typeof useUserStore>, next: NavigationGuardNext): Promise<boolean> {
   if (!userStore.isLogin && to.path !== RoutesAlias.Login && !to.meta.noLogin) {
   if (!userStore.isLogin && to.path !== RoutesAlias.Login && !to.meta.noLogin) {
     userStore.logOut()
     userStore.logOut()
     next(RoutesAlias.Login)
     next(RoutesAlias.Login)
@@ -143,12 +128,7 @@ async function handleLoginStatus(
 /**
 /**
  * 处理动态路由注册
  * 处理动态路由注册
  */
  */
-async function handleDynamicRoutes(
-  to: RouteLocationNormalized,
-  from: RouteLocationNormalized,
-  next: NavigationGuardNext,
-  router: Router
-): Promise<void> {
+async function handleDynamicRoutes(to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext, router: Router): Promise<void> {
   try {
   try {
     // 显示 loading 并标记 pending
     // 显示 loading 并标记 pending
     pendingLoading.value = true
     pendingLoading.value = true
@@ -177,12 +157,7 @@ async function handleDynamicRoutes(
       return
       return
     }
     }
 
 
-    next({
-      path: to.path,
-      query: to.query,
-      hash: to.hash,
-      replace: true
-    })
+    next({ path: to.path, query: to.query, hash: to.hash, replace: true })
   } catch (error) {
   } catch (error) {
     console.error('动态路由注册失败:', error)
     console.error('动态路由注册失败:', error)
     next('/exception/500')
     next('/exception/500')
@@ -251,15 +226,10 @@ function filterEmptyMenus(menuList: AppRouteRecord[]): AppRouteRecord[] {
     })
     })
     .filter((item) => {
     .filter((item) => {
       // 过滤掉布局组件且没有子菜单的项
       // 过滤掉布局组件且没有子菜单的项
-      const isEmptyLayoutMenu =
-        item.component === RoutesAlias.Layout && (!item.children || item.children.length === 0)
+      const isEmptyLayoutMenu = item.component === RoutesAlias.Layout && (!item.children || item.children.length === 0)
 
 
       // 过滤掉组件为空字符串且没有子菜单的项,但保留有外链的菜单项
       // 过滤掉组件为空字符串且没有子菜单的项,但保留有外链的菜单项
-      const isEmptyComponentMenu =
-        item.component === '' &&
-        (!item.children || item.children.length === 0) &&
-        item.meta.isIframe !== true &&
-        !item.meta.link
+      const isEmptyComponentMenu = item.component === '' && (!item.children || item.children.length === 0) && item.meta.isIframe !== true && !item.meta.link
 
 
       return !(isEmptyLayoutMenu || isEmptyComponentMenu)
       return !(isEmptyLayoutMenu || isEmptyComponentMenu)
     })
     })

+ 1 - 8
src/router/routesAlias.ts

@@ -25,11 +25,9 @@ export enum RoutesAlias {
   WangEditor = '/widgets/wang-editor', // 富文本编辑器
   WangEditor = '/widgets/wang-editor', // 富文本编辑器
   Watermark = '/widgets/watermark', // 水印
   Watermark = '/widgets/watermark', // 水印
   ContextMenu = '/widgets/context-menu', // 上下文菜单
   ContextMenu = '/widgets/context-menu', // 上下文菜单
-  Qrcode = '/widgets/qrcode', // 二维码
   Drag = '/widgets/drag', // 拖拽
   Drag = '/widgets/drag', // 拖拽
   TextScroll = '/widgets/text-scroll', // 文字滚动
   TextScroll = '/widgets/text-scroll', // 文字滚动
   Fireworks = '/widgets/fireworks', // 礼花效果
   Fireworks = '/widgets/fireworks', // 礼花效果
-  Chat = '/template/chat', // 聊天
   Cards = '/template/cards', // 卡片
   Cards = '/template/cards', // 卡片
   Banners = '/template/banners', // 横幅
   Banners = '/template/banners', // 横幅
   Charts = '/template/charts', // 图表
   Charts = '/template/charts', // 图表
@@ -44,15 +42,10 @@ export enum RoutesAlias {
   Role = '/system/role', // 角色
   Role = '/system/role', // 角色
   UserCenter = '/system/user-center', // 用户中心
   UserCenter = '/system/user-center', // 用户中心
   Menu = '/system/menu', // 菜单
   Menu = '/system/menu', // 菜单
-  Server = '/safeguard/server', // 服务器
   ExamplesTabs = '/examples/tabs', // 标签页
   ExamplesTabs = '/examples/tabs', // 标签页
   ExamplesTablesBasic = '/examples/tables/basic', // 基础表格示例
   ExamplesTablesBasic = '/examples/tables/basic', // 基础表格示例
   ExamplesTables = '/examples/tables', // 高级表格示例
   ExamplesTables = '/examples/tables', // 高级表格示例
   ExamplesTablesTree = '/examples/tables/tree', // 左右布局表格示例
   ExamplesTablesTree = '/examples/tables/tree', // 左右布局表格示例
   ExamplesSearchBar = '/examples/forms/search-bar', // 搜索表单示例
   ExamplesSearchBar = '/examples/forms/search-bar', // 搜索表单示例
-  ExamplesForms = '/examples/forms', // 表单示例
-  // 权限演示页面
-  PermissionSwitchRole = '/examples/permission/switch-role', // 切换权限页面
-  PermissionButtonAuth = '/examples/permission/button-auth', // 按钮权限演示页面
-  PermissionPageVisibility = '/examples/permission/page-visibility' // 页面可见性演示页面
+  ExamplesForms = '/examples/forms' // 表单示例
 }
 }

+ 1 - 8
src/views/exception/404/index.vue

@@ -1,12 +1,5 @@
 <template>
 <template>
-  <ArtException
-    :data="{
-      title: '404',
-      desc: $t('exceptionPage.404'),
-      btnText: $t('exceptionPage.gohome'),
-      imgUrl
-    }"
-  />
+  <ArtException :data="{ title: '404', desc: $t('exceptionPage.404'), btnText: $t('exceptionPage.gohome'), imgUrl }" />
 </template>
 </template>
 
 
 <script setup lang="ts">
 <script setup lang="ts">

+ 3 - 1
src/views/index/index.vue

@@ -1,8 +1,10 @@
 <template>
 <template>
   <div class="app-layout">
   <div class="app-layout">
+    <!--
     <aside class="app-sidebar">
     <aside class="app-sidebar">
       <ArtSidebarMenu />
       <ArtSidebarMenu />
-    </aside>
+    </aside> 
+    -->
 
 
     <main id="app-main">
     <main id="app-main">
       <div class="app-header">
       <div class="app-header">

+ 13 - 0
src/views/train/home/index.vue

@@ -0,0 +1,13 @@
+<!--
+@description: train_home
+@creationTime: 2025-09-28
+-->
+<template>
+  <div>首页</div>
+</template>
+
+<script lang="ts" setup>
+  defineOptions({ name: 'train_home' })
+</script>
+
+<style lang="scss" scoped></style>