Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master'

lihao16 6 mēneši atpakaļ
vecāks
revīzija
316536b723

+ 2 - 2
smsb-plus-ui/src/assets/styles/sidebar.scss

@@ -23,8 +23,8 @@
     left: 0;
     z-index: 1001;
     overflow: hidden;
-    -webkit-box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
-    box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
+    /* -webkit-box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35); */
+    /* box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35); */
 
     // reset element-ui css
     .horizontal-collapse-transition {

+ 8 - 8
smsb-plus-ui/src/assets/styles/variables.module.scss

@@ -1,14 +1,14 @@
 // 全局SCSS变量
 :root {
-  --menuBg: #304156;
-  --menuColor: #bfcbd9;
-  --menuActiveText: #f4f4f5;
-  --menuHover: #263445;
+  --menuBg: #ffffff;
+  --menuColor: #2f343a;
+  --menuActiveText: #404053;
+  --menuHover: #969696;
 
-  --subMenuBg: #1f2d3d;
+  --subMenuBg: #b3b3b3;
   --subMenuActiveText: #f4f4f5;
-  --subMenuHover: #001528;
-  --subMenuTitleHover: #293444;
+  --subMenuHover: #919191;
+  --subMenuTitleHover: #838383;
 
   --fixedHeaderBg: #ffffff;
   --tableHeaderBg: #f8f8f9;
@@ -43,7 +43,7 @@ html.dark {
   }
   // vxe-table 主题
   --vxe-font-color: #98989E;
-  --vxe-primary-color: #2C7ECF;
+  --vxe-primary-color: #5198e0;
   --vxe-icon-background-color: #98989E;
   --vxe-table-font-color: #98989E;
   --vxe-table-resizable-color: #95969a;

+ 15 - 7
smsb-plus-ui/src/components/TopNav/index.vue

@@ -112,10 +112,22 @@ const handleSelect = (key: string) => {
   currentIndex.value = key;
   const route = routers.value.find((item) => item.path === key);
   if (isHttp(key)) {
-    // http(s):// 路径新窗口打开
     window.open(key, '_blank');
-  } else if (!route || !route.children) {
-    // 没有子路由路径内部打开
+  } else if (route) {
+    // 一级菜单点击跳转
+    if (typeof route.redirect === 'string' && route.redirect !== 'noRedirect') {
+      router.push(route.redirect);
+    } else if (route.children && route.children.length > 0) {
+      const childPath = route.children[0].path;
+      router.push(childPath.startsWith('/') ? childPath : route.path + '/' + childPath);
+    } else {
+      router.push(route.path);
+    }
+    // 联动 sidebar
+    activeRoutes(key);
+    appStore.toggleSideBarHide(false);
+  } else {
+    // 其它情况保持原逻辑
     const routeMenu = childrenMenus.value.find((item) => item.path === key);
     if (routeMenu && routeMenu.query) {
       let query = JSON.parse(routeMenu.query);
@@ -124,10 +136,6 @@ const handleSelect = (key: string) => {
       router.push({ path: key });
     }
     appStore.toggleSideBarHide(true);
-  } else {
-    // 显示左侧联动菜单
-    activeRoutes(key);
-    appStore.toggleSideBarHide(false);
   }
 };
 

+ 2 - 2
smsb-plus-ui/src/lang/zh_CN.ts

@@ -13,11 +13,11 @@ export default {
     copyright: ''
   },
   navbar: {
-    full: '全屏',
+    // full: '全屏',
     language: '语言',
     dashboard: '首页',
     document: '项目文档',
-    message: '消息',
+    // message: '消息',
     layoutSize: '布局大小',
     selectTenant: '选择租户',
     layoutSetting: '布局设置',

+ 142 - 54
smsb-plus-ui/src/layout/components/Navbar.vue

@@ -1,35 +1,32 @@
 <template>
   <div class="navbar">
-    <hamburger id="hamburger-container" :is-active="appStore.sidebar.opened" class="hamburger-container" @toggle-click="toggleSideBar" />
-    <breadcrumb v-if="!settingsStore.topNav" id="breadcrumb-container" class="breadcrumb-container" />
-    <top-nav v-if="settingsStore.topNav" id="topmenu-container" class="topmenu-container" />
-
-    <div class="right-menu flex align-center">
-      <template v-if="appStore.device !== 'mobile'">
-        <el-select
-          v-if="userId === 1 && tenantEnabled"
-          v-model="companyName"
-          class="min-w-244px"
-          clearable
-          filterable
-          reserve-keyword
-          :placeholder="$t('navbar.selectTenant')"
-          @change="dynamicTenantEvent"
-          @clear="dynamicClearEvent"
-        >
-          <el-option v-for="item in tenantList" :key="item.tenantId" :label="item.companyName" :value="item.tenantId"> </el-option>
-          <template #prefix><svg-icon icon-class="company" class="el-input__icon input-icon" /></template>
-        </el-select>
-
-        <!-- <header-search id="header-search" class="right-menu-item" /> -->
-        <search-menu ref="searchMenuRef" />
-        <el-tooltip content="搜索" effect="dark" placement="bottom">
+    <div class="navbar-left">
+      <img class="navbar-logo-img" src="@/assets/logo/logo.png" alt="logo" height="30px" width="30px" />
+      <span class="navbar-title">浪潮屏幕安播云平台</span>
+    </div>
+    <div class="navbar-center">
+      <top-nav id="topmenu-container" class="topmenu-container" />
+    </div>
+    <div class="navbar-right">
+      <div class="right-menu flex align-center">
+        <template v-if="appStore.device !== 'mobile'">
+          <el-select v-if="userId === 1 && tenantEnabled" v-model="companyName" class="min-w-244px" clearable filterable
+            reserve-keyword :placeholder="$t('navbar.selectTenant')" @change="dynamicTenantEvent"
+            @clear="dynamicClearEvent">
+            <el-option v-for="item in tenantList" :key="item.tenantId" :label="item.companyName" :value="item.tenantId">
+            </el-option>
+            <template #prefix><svg-icon icon-class="company" class="el-input__icon input-icon" /></template>
+          </el-select>
+
+          <!-- <header-search id="header-search" class="right-menu-item" /> -->
+          <search-menu ref="searchMenuRef" />
+          <!-- <el-tooltip content="搜索" effect="dark" placement="bottom">
           <div class="right-menu-item hover-effect" @click="openSearchMenu">
             <svg-icon class-name="search-icon" icon-class="search" />
           </div>
-        </el-tooltip>
-        <!-- 消息 -->
-        <el-tooltip :content="$t('navbar.message')" effect="dark" placement="bottom">
+        </el-tooltip> -->
+          <!-- 消息 -->
+          <!-- <el-tooltip :content="$t('navbar.message')" effect="dark" placement="bottom">
           <div>
             <el-popover placement="bottom" trigger="click" transition="el-zoom-in-top" :width="300" :persistent="false">
               <template #reference>
@@ -42,8 +39,8 @@
               </template>
             </el-popover>
           </div>
-        </el-tooltip>
-<!--        <el-tooltip content="Github" effect="dark" placement="bottom">
+        </el-tooltip> -->
+          <!--        <el-tooltip content="Github" effect="dark" placement="bottom">
           <ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />
         </el-tooltip>
 
@@ -51,38 +48,39 @@
           <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />
         </el-tooltip>-->
 
-        <el-tooltip :content="$t('navbar.full')" effect="dark" placement="bottom">
+          <!-- <el-tooltip :content="$t('navbar.full')" effect="dark" placement="bottom">
           <screenfull id="screenfull" class="right-menu-item hover-effect" />
-        </el-tooltip>
+        </el-tooltip> -->
 
-<!--        <el-tooltip :content="$t('navbar.language')" effect="dark" placement="bottom">
+          <!--        <el-tooltip :content="$t('navbar.language')" effect="dark" placement="bottom">
           <lang-select id="lang-select" class="right-menu-item hover-effect" />
         </el-tooltip>-->
 
-<!--        <el-tooltip :content="$t('navbar.layoutSize')" effect="dark" placement="bottom">
+          <!--        <el-tooltip :content="$t('navbar.layoutSize')" effect="dark" placement="bottom">
           <size-select id="size-select" class="right-menu-item hover-effect" />
         </el-tooltip>-->
-      </template>
-      <div class="avatar-container">
-        <el-dropdown class="right-menu-item hover-effect" trigger="click" @command="handleCommand">
-          <div class="avatar-wrapper">
-            <img :src="userStore.avatar" class="user-avatar" />
-            <el-icon><caret-bottom /></el-icon>
-          </div>
-          <template #dropdown>
-            <el-dropdown-menu>
-              <router-link v-if="!dynamic" to="/user/profile">
-                <el-dropdown-item>{{ $t('navbar.personalCenter') }}</el-dropdown-item>
-              </router-link>
-              <el-dropdown-item v-if="settingsStore.showSettings" command="setLayout">
-                <span>{{ $t('navbar.layoutSetting') }}</span>
-              </el-dropdown-item>
-              <el-dropdown-item divided command="logout">
-                <span>{{ $t('navbar.logout') }}</span>
-              </el-dropdown-item>
-            </el-dropdown-menu>
-          </template>
-        </el-dropdown>
+        </template>
+        <div class="avatar-container">
+          <el-dropdown class="right-menu-item hover-effect" trigger="click" @command="handleCommand">
+            <div class="avatar-wrapper">
+              <img :src="userStore.avatar" class="user-avatar" />
+              <el-icon><caret-bottom /></el-icon>
+            </div>
+            <template #dropdown>
+              <el-dropdown-menu>
+                <router-link v-if="!dynamic" to="/user/profile">
+                  <el-dropdown-item>{{ $t('navbar.personalCenter') }}</el-dropdown-item>
+                </router-link>
+                <el-dropdown-item v-if="settingsStore.showSettings" command="setLayout">
+                  <span>{{ $t('navbar.layoutSetting') }}</span>
+                </el-dropdown-item>
+                <el-dropdown-item divided command="logout">
+                  <span>{{ $t('navbar.logout') }}</span>
+                </el-dropdown-item>
+              </el-dropdown-menu>
+            </template>
+          </el-dropdown>
+        </div>
       </div>
     </div>
   </div>
@@ -297,4 +295,94 @@ watch(
     }
   }
 }
+
+.navbar {
+  display: flex;
+  align-items: center;
+  height: 60px;
+  width: 100%;
+  background: #fff;
+  box-sizing: border-box;
+  padding: 0 20px;
+}
+
+.navbar-left {
+  display: flex;
+  align-items: center;
+  flex-shrink: 0;
+}
+
+.navbar-logo-img {
+  margin-right: 10px;
+}
+
+.navbar-title {
+  font-size: 18px;
+  font-weight: bold;
+  color: #222;
+  letter-spacing: 2px;
+}
+
+.navbar-center {
+  flex: 1;
+  display: flex;
+  justify-content: flex-start;
+  align-items: center;
+  min-width: 0;
+  position: relative;
+  z-index: 1;
+  margin-left: -35px;
+  /* 适当左移,可根据实际调整 */
+}
+
+.topmenu-container {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  width: auto;
+  max-width: 900px;
+  flex: 1;
+}
+
+.navbar-right {
+  display: flex;
+  align-items: center;
+  flex-shrink: 0;
+  margin-left: 20px;
+  min-width: 200px;
+  justify-content: flex-end;
+}
+
+
+
+.navbar-logo-title {
+  display: flex;
+  align-items: center;
+  height: 100%;
+  margin-right: 20px;
+}
+
+.navbar-logo-img {
+  display: block;
+  margin-right: 10px;
+}
+
+.navbar-title {
+  font-size: 18px;
+  font-weight: bold;
+  color: #222;
+  letter-spacing: 2px;
+}
+
+.navbar-main {
+  display: flex;
+  align-items: center;
+  flex: 1;
+  min-width: 0;
+}
+
+.topmenu-container {
+  flex: 1;
+  min-width: 0;
+}
 </style>

+ 14 - 13
smsb-plus-ui/src/layout/components/Sidebar/index.vue

@@ -1,18 +1,9 @@
 <template>
-  <div :class="{ 'has-logo': showLogo }" :style="{ backgroundColor: bgColor }">
-    <logo v-if="showLogo" :collapse="isCollapse" />
+  <div class="sidebar-no-logo" :style="{ backgroundColor: bgColor }">
     <el-scrollbar :class="sideTheme" wrap-class="scrollbar-wrapper">
       <transition :enter-active-class="proxy?.animate.menuSearchAnimate.enter" mode="out-in">
-        <el-menu
-          :default-active="activeMenu"
-          :collapse="isCollapse"
-          :background-color="bgColor"
-          :text-color="textColor"
-          :unique-opened="true"
-          :active-text-color="theme"
-          :collapse-transition="false"
-          mode="vertical"
-        >
+        <el-menu :default-active="activeMenu" :collapse="isCollapse" :background-color="bgColor" :text-color="textColor"
+          :unique-opened="true" :active-text-color="theme" :collapse-transition="false" mode="vertical">
           <sidebar-item v-for="(r, index) in sidebarRouters" :key="r.path + index" :item="r" :base-path="r.path" />
         </el-menu>
       </transition>
@@ -35,7 +26,17 @@ const route = useRoute();
 const appStore = useAppStore();
 const settingsStore = useSettingsStore();
 const permissionStore = usePermissionStore();
-const sidebarRouters = computed<RouteRecordRaw[]>(() => permissionStore.getSidebarRoutes());
+// 只显示当前一级菜单下的二级菜单
+const topMenus = computed(() => permissionStore.getTopbarRoutes().filter(menu => menu.hidden !== true));
+const currentTopMenuPath = computed(() => {
+  // 取当前路由的一级菜单 path
+  const matched = route.matched?.[0];
+  return matched && matched.path !== '/' ? matched.path : (topMenus.value[0]?.path || '/');
+});
+const sidebarRouters = computed<RouteRecordRaw[]>(() => {
+  const topMenu = topMenus.value.find(menu => menu.path === currentTopMenuPath.value);
+  return topMenu && topMenu.children ? topMenu.children.filter(item => item.hidden !== true) : [];
+});
 const showLogo = computed(() => settingsStore.sidebarLogo);
 const sideTheme = computed(() => settingsStore.sideTheme);
 const theme = computed(() => settingsStore.theme);

+ 58 - 10
smsb-plus-ui/src/layout/index.vue

@@ -1,9 +1,29 @@
 <template>
   <div :class="classObj" class="app-wrapper" :style="{ '--current-color': theme }">
     <div v-if="device === 'mobile' && sidebar.opened" class="drawer-bg" @click="handleClickOutside" />
-    <side-bar v-if="!sidebar.hide" class="sidebar-container" />
-    <div :class="{ hasTagsView: needTagsView, sidebarHide: sidebar.hide }" class="main-container">
-      <!-- <el-scrollbar>
+    <div class="navbar-fixed-full">
+      <navbar ref="navbarRef" @set-layout="setLayout" />
+    </div>
+    <div class="layout-body">
+      <side-bar v-if="!sidebar.hide" class="sidebar-container no-logo" />
+      <div :class="{ hasTagsView: needTagsView, sidebarHide: sidebar.hide }" class="main-container">
+        <!-- <el-scrollbar>
+          <div :class="{ 'fixed-header': fixedHeader }">
+            <navbar ref="navbarRef" @setLayout="setLayout" />
+            <tags-view v-if="needTagsView" />
+          </div>
+          <app-main />
+          <settings ref="settingRef" />
+        </el-scrollbar> -->
+        <div :class="{ 'fixed-header': fixedHeader }">
+          <!-- navbar 已移至全宽顶部 -->
+          <!-- <tags-view v-if="needTagsView" /> -->
+        </div>
+        <app-main />
+        <settings ref="settingRef" />
+      </div>
+    </div>
+    <!-- <el-scrollbar>
         <div :class="{ 'fixed-header': fixedHeader }">
           <navbar ref="navbarRef" @setLayout="setLayout" />
           <tags-view v-if="needTagsView" />
@@ -11,13 +31,6 @@
         <app-main />
         <settings ref="settingRef" />
       </el-scrollbar> -->
-      <div :class="{ 'fixed-header': fixedHeader }">
-        <navbar ref="navbarRef" @set-layout="setLayout" />
-        <tags-view v-if="needTagsView" />
-      </div>
-      <app-main />
-      <settings ref="settingRef" />
-    </div>
   </div>
 </template>
 
@@ -89,6 +102,41 @@ const setLayout = () => {
 @import '@/assets/styles/mixin.scss';
 @import '@/assets/styles/variables.module.scss';
 
+.navbar-fixed-full {
+  width: 100vw;
+  left: 0;
+  top: 0;
+  position: fixed;
+  z-index: 100;
+  background: $fixed-header-bg;
+}
+
+.layout-body {
+  display: flex;
+  flex-direction: row;
+  width: 100vw;
+  margin-top: 50px;
+  /* 必须等于.navbar-fixed-full的高度,保证sidebar/main-container都在navbar下方 */
+  height: calc(100vh - 50px);
+  position: relative;
+  z-index: 1;
+}
+
+.sidebar-container.no-logo,
+.sidebar-no-logo {
+  padding-top: 0;
+  height: 100%;
+  min-height: 100%;
+}
+
+.main-container {
+  flex: 1 1 0;
+  width: 0;
+  min-width: 0;
+  height: 100%;
+  overflow: auto;
+}
+
 .app-wrapper {
   @include clearfix;
   position: relative;

+ 2 - 2
smsb-plus-ui/src/settings.ts

@@ -15,7 +15,7 @@ const setting: DefaultSettings = {
   /**
    * 是否系统布局配置
    */
-  showSettings: true,
+  showSettings: false,
 
   /**
    * 是否显示顶部导航
@@ -35,7 +35,7 @@ const setting: DefaultSettings = {
   /**
    * 是否显示logo
    */
-  sidebarLogo: true,
+  sidebarLogo: false,
 
   /**
    * 是否显示动态标题

+ 15 - 17
smsb-plus-ui/src/store/modules/app.ts

@@ -4,9 +4,9 @@ import enUS from 'element-plus/es/locale/lang/en';
 export const useAppStore = defineStore('app', () => {
   const sidebarStatus = useStorage('sidebarStatus', '1');
   const sidebar = reactive({
-    opened: sidebarStatus.value ? !!+sidebarStatus.value : true,
+    opened: true, // 始终展开
     withoutAnimation: false,
-    hide: false
+    hide: false   // 始终显示
   });
   const device = ref<string>('desktop');
   const size = useStorage<'large' | 'default' | 'small'>('size', 'default');
@@ -21,24 +21,21 @@ export const useAppStore = defineStore('app', () => {
     return languageObj[language.value];
   });
 
+  // 禁用折叠/展开 sidebar
   const toggleSideBar = (withoutAnimation: boolean) => {
-    if (sidebar.hide) {
-      return false;
-    }
-
-    sidebar.opened = !sidebar.opened;
-    sidebar.withoutAnimation = withoutAnimation;
-    if (sidebar.opened) {
-      sidebarStatus.value = '1';
-    } else {
-      sidebarStatus.value = '0';
-    }
+    // 不做任何事,sidebar 始终展开
+    sidebar.opened = true;
+    sidebar.hide = false;
+    sidebarStatus.value = '1';
+    sidebar.withoutAnimation = false;
   };
 
+  // 禁用关闭 sidebar
   const closeSideBar = ({ withoutAnimation }: any): void => {
-    sidebarStatus.value = '0';
-    sidebar.opened = false;
-    sidebar.withoutAnimation = withoutAnimation;
+    sidebar.opened = true;
+    sidebar.hide = false;
+    sidebarStatus.value = '1';
+    sidebar.withoutAnimation = false;
   };
   const toggleDevice = (d: string): void => {
     device.value = d;
@@ -46,8 +43,9 @@ export const useAppStore = defineStore('app', () => {
   const setSize = (s: 'large' | 'default' | 'small'): void => {
     size.value = s;
   };
+  // 禁用隐藏 sidebar
   const toggleSideBarHide = (status: boolean): void => {
-    sidebar.hide = status;
+    sidebar.hide = false;
   };
 
   const changeLanguage = (val: string): void => {

+ 66 - 77
smsb-plus-ui/src/views/smsb/itemPush/index.vue

@@ -1,6 +1,7 @@
 <template>
   <div class="p-2">
-    <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
+    <transition :enter-active-class="proxy?.animate.searchAnimate.enter"
+      :leave-active-class="proxy?.animate.searchAnimate.leave">
       <div v-show="showSearch" class="mb-[10px]">
         <el-card shadow="hover" :style="{ height: '70px' }">
           <el-row :gutter="20" align="middle">
@@ -41,7 +42,8 @@
         <el-card shadow="hover" :style="{ marginTop: '10px', height: '60px' }">
           <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="50px">
             <el-form-item label="名称" prop="name">
-              <el-input v-model="queryParams.name" style="width: 150px" placeholder="请输入名称" clearable @keyup.enter="handleQuery" />
+              <el-input v-model="queryParams.name" style="width: 150px" placeholder="请输入名称" clearable
+                @keyup.enter="handleQuery" />
             </el-form-item>
             <el-form-item label="类型" prop="itemType">
               <el-select v-model="queryParams.itemType" style="width: 150px" placeholder="请选择类型" clearable>
@@ -49,27 +51,24 @@
               </el-select>
             </el-form-item>
             <el-form-item label="时间" style="width: 250px">
-              <el-date-picker
-                v-model="dateRangeCreateTime"
-                value-format="YYYY-MM-DD HH:mm:ss"
-                type="daterange"
-                range-separator="-"
-                start-placeholder="开始日期"
-                end-placeholder="结束日期"
-                :default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
-              />
+              <el-date-picker v-model="dateRangeCreateTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
+                range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"
+                :default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]" />
             </el-form-item>
             <el-form-item>
               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
               <el-button icon="Refresh" @click="resetQuery">重置</el-button>
-              <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['source:itemPush:add']">新增 </el-button>
-              <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['source:itemPush:edit']"
-                >修改
+              <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['source:itemPush:add']">新增
               </el-button>
-              <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['source:itemPush:remove']"
-                >删除
+              <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()"
+                v-hasPermi="['source:itemPush:edit']">修改
+              </el-button>
+              <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
+                v-hasPermi="['source:itemPush:remove']">删除
+              </el-button>
+              <el-button type="warning" plain icon="Download" @click="handleExport"
+                v-hasPermi="['source:itemPush:export']">导出
               </el-button>
-              <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['source:itemPush:export']">导出 </el-button>
             </el-form-item>
           </el-form>
         </el-card>
@@ -88,12 +87,12 @@
         </el-table-column>
         <el-table-column label="类型" align="center" width="100" prop="itemType">
           <template #default="scope">
-            <dict-tag :options="smsb_push_type" :value="scope.row.itemType"/>
+            <dict-tag :options="smsb_push_type" :value="scope.row.itemType" />
           </template>
         </el-table-column>
         <el-table-column label="审核状态" align="center" width="100" prop="status">
           <template #default="scope">
-            <dict-tag :options="smsb_push_state" :value="scope.row.status"/>
+            <dict-tag :options="smsb_push_state" :value="scope.row.status" />
           </template>
         </el-table-column>
         <el-table-column label="生效日期" align="left" prop="startDate" width="140">
@@ -106,39 +105,35 @@
             <span>{{ parseTime(scope.row.endDate, '{y}-{m}-{d}') }}</span>
           </template>
         </el-table-column>
-        <el-table-column label="发布时间" align="left" prop="createTime" width="160"/>
-        <el-table-column label="创建人" align="left" prop="createUser" width="120" :show-overflow-tooltip="true"/>
+        <el-table-column label="发布时间" align="left" prop="createTime" width="160" />
+        <el-table-column label="创建人" align="left" prop="createUser" width="120" :show-overflow-tooltip="true" />
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150">
           <template #default="scope">
-            <el-tooltip content="修改" placement="top">
+            <!-- <el-tooltip content="修改" placement="top">
               <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
-                         v-hasPermi="['source:itemPush:edit']"></el-button>
-            </el-tooltip>
+                v-hasPermi="['source:itemPush:edit']"></el-button>
+            </el-tooltip> -->
             <el-tooltip content="删除" placement="top">
               <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
-                         v-hasPermi="['source:itemPush:remove']"></el-button>
+                v-hasPermi="['source:itemPush:remove']"></el-button>
             </el-tooltip>
             <!--            <el-tooltip content="提交审核" placement="top">
                           <el-button link type="primary" icon="Top" @click="handleReview(scope.row)" v-hasPermi="['source:minioData:add']"></el-button>
                         </el-tooltip>-->
             <el-tooltip content="下发详情" placement="top">
-              <el-button link type="primary" icon="List" @click="handleDevice(scope.row)" v-hasPermi="['source:itemPush:edit']"></el-button>
+              <el-button link type="primary" icon="List" @click="handleDevice(scope.row)"
+                v-hasPermi="['source:itemPush:edit']"></el-button>
             </el-tooltip>
             <el-tooltip content="下架" placement="top">
-              <el-button
-                link
-                type="primary"
-                icon="Bottom"
-                v-if="scope.row.status == 'finish'"
-                @click="handleRemoveItem(scope.row)"
-                v-hasPermi="['source:itemPush:edit']"
-              ></el-button>
+              <el-button link type="primary" icon="Bottom" v-if="scope.row.status == 'finish'"
+                @click="handleRemoveItem(scope.row)" v-hasPermi="['source:itemPush:edit']"></el-button>
             </el-tooltip>
           </template>
         </el-table-column>
       </el-table>
 
-      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+        v-model:limit="queryParams.pageSize" @pagination="getList" />
     </el-card>
     <!-- 添加或修改内容发布对话框 -->
     <el-dialog :title="dialog.title" v-model="dialog.visible" width="1500px" style="height: 700px" append-to-body>
@@ -146,8 +141,8 @@
         <!--设备列表-->
         <el-col :span="6" style="height: 100%; overflow: auto; border-right: 1px solid #eee; padding-right: 10px">
           <el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectDevice" style="height: 520px">
-            <el-table-column type="selection" width="55" align="center"/>
-            <el-table-column label="设备名称" align="left" prop="name" :show-overflow-tooltip="true"/>
+            <el-table-column type="selection" width="55" align="center" />
+            <el-table-column label="设备名称" align="left" prop="name" :show-overflow-tooltip="true" />
           </el-table>
         </el-col>
         <!--发布名称-->
@@ -160,28 +155,24 @@
               <el-col :span="12">
                 <el-form-item label="类型" prop="itemType">
                   <el-select v-model="form.itemType" placeholder="请选择类型" @change="getItemList">
-                    <el-option v-for="dict in smsb_push_type" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)"></el-option>
+                    <el-option v-for="dict in smsb_push_type" :key="dict.value" :label="dict.label"
+                      :value="parseInt(dict.value)"></el-option>
                   </el-select>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
                 <el-form-item label="优先级" prop="level">
                   <el-select v-model="form.level" placeholder="请选择优先级">
-                    <el-option v-for="dict in smsb_push_level" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)"></el-option>
+                    <el-option v-for="dict in smsb_push_level" :key="dict.value" :label="dict.label"
+                      :value="parseInt(dict.value)"></el-option>
                   </el-select>
                 </el-form-item>
               </el-col>
             </el-row>
             <el-form-item label="日期" prop="dateRange">
-              <el-date-picker
-                v-model="form.dateRange"
-                value-format="YYYY-MM-DD"
-                type="daterange"
-                range-separator="-"
-                start-placeholder="开始日期"
-                end-placeholder="结束日期"
-                :default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
-              />
+              <el-date-picker v-model="form.dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
+                start-placeholder="开始日期" end-placeholder="结束日期"
+                :default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]" />
             </el-form-item>
             <!-- Days of the Week -->
             <el-form-item label="每周">
@@ -216,11 +207,11 @@
             <el-table v-loading="loading" :data="itemList" style="height: 520px">
               <el-table-column label="ID" width="200" align="left" :show-overflow-tooltip="true">
                 <template #default="{ row }">
-                  <el-radio v-model="selectedRowId" :label="row.id" @change="handleRadioChange(row)"/>
+                  <el-radio v-model="selectedRowId" :label="row.id" @change="handleRadioChange(row)" />
                 </template>
               </el-table-column>
-              <el-table-column label="名称" align="left" prop="itemName" :show-overflow-tooltip="true"/>
-              <el-table-column label="资源数量" align="center" prop="sourceNum" width="80"/>
+              <el-table-column label="名称" align="left" prop="itemName" :show-overflow-tooltip="true" />
+              <el-table-column label="资源数量" align="center" prop="sourceNum" width="80" />
               <!--
                             <el-table-column label="创建人" align="left" prop="createUser" width="100" :show-overflow-tooltip="true" />
               -->
@@ -248,14 +239,16 @@
             <el-col :span="12">
               <el-form-item label="发布类型" prop="itemType">
                 <el-select v-model="form.itemType" placeholder="请选择类型" @change="getItemList" :disabled="true">
-                  <el-option v-for="dict in smsb_push_type" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)"></el-option>
+                  <el-option v-for="dict in smsb_push_type" :key="dict.value" :label="dict.label"
+                    :value="parseInt(dict.value)"></el-option>
                 </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="优先级" prop="level">
                 <el-select v-model="form.level" placeholder="请选择优先级" :disabled="true">
-                  <el-option v-for="dict in smsb_push_level" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)"></el-option>
+                  <el-option v-for="dict in smsb_push_level" :key="dict.value" :label="dict.label"
+                    :value="parseInt(dict.value)"></el-option>
                 </el-select>
               </el-form-item>
             </el-col>
@@ -263,8 +256,10 @@
         </el-form>
       </div>
       <!--设备列表-->
-      <el-button type="primary" v-if="removeItemTag" icon="Bottom" :disabled="removeButtonTag" @click="handleDoRemoveItem()"> 下架 </el-button>
-      <el-table v-loading="deviceLoading" :data="pushDeviceList" style="height: 500px; margin-top: 10px" @selection-change="handleDeviceSelectionChange">
+      <el-button type="primary" v-if="removeItemTag" icon="Bottom" :disabled="removeButtonTag"
+        @click="handleDoRemoveItem()"> 下架 </el-button>
+      <el-table v-loading="deviceLoading" :data="pushDeviceList" style="height: 500px; margin-top: 10px"
+        @selection-change="handleDeviceSelectionChange">
         <el-table-column type="selection" v-if="removeItemTag" width="55" align="center" />
         <el-table-column label="设备名称" align="left" prop="deviceName" :show-overflow-tooltip="true" />
         <el-table-column label="发布排序" align="center" prop="sortNum" width="100" :show-overflow-tooltip="true" />
@@ -274,10 +269,12 @@
           </template>
         </el-table-column>
         <el-table-column label="发布时间" align="left" prop="createTime" width="170" :show-overflow-tooltip="true" />
-        <el-table-column label="操作" v-if="removeItemTag" align="center" class-name="small-padding fixed-width" width="150">
+        <el-table-column label="操作" v-if="removeItemTag" align="center" class-name="small-padding fixed-width"
+          width="150">
           <template #default="scope">
             <el-tooltip content="下架" placement="top">
-              <el-button link type="primary" icon="Bottom" @click="handleDoRemoveItem(scope.row)" v-hasPermi="['source:itemPush:edit']"></el-button>
+              <el-button link type="primary" icon="Bottom" @click="handleDoRemoveItem(scope.row)"
+                v-hasPermi="['source:itemPush:edit']"></el-button>
             </el-tooltip>
           </template>
         </el-table-column>
@@ -292,25 +289,17 @@
 </template>
 
 <script setup name="ItemPush" lang="ts">
-import {
-  addItemPush,
-  delItemPush,
-  getItemPush,
-  listItemPush,
-  pushStatistics,
-  reviewItemPush,
-  updateItemPush
-} from '@/api/smsb/source/item_push';
-import {ItemPushForm, ItemPushQuery, ItemPushVO} from '@/api/smsb/source/item_push_type';
-import {DeviceQuery, DeviceVO} from '@/api/smsb/device/device_type';
-import {listDevice} from '@/api/smsb/device/device';
-import {ItemQuery, ItemVO} from '@/api/smsb/source/item_type';
-import {listItem} from '@/api/smsb/source/item';
-import {ItemPushDeviceVO} from '@/api/smsb/source/item_push_device_type';
-import {listItemPushDeviceV2, removeItemPushDevice} from '@/api/smsb/source/item_push_device';
-
-const {proxy} = getCurrentInstance() as ComponentInternalInstance;
-const {smsb_push_state, smsb_push_device_state, smsb_push_type, smsb_push_level} = toRefs<any>(
+import { addItemPush, delItemPush, getItemPush, listItemPush, pushStatistics, reviewItemPush, updateItemPush } from '@/api/smsb/source/item_push';
+import { ItemPushForm, ItemPushQuery, ItemPushVO } from '@/api/smsb/source/item_push_type';
+import { DeviceQuery, DeviceVO } from '@/api/smsb/device/device_type';
+import { listDevice } from '@/api/smsb/device/device';
+import { ItemQuery, ItemVO } from '@/api/smsb/source/item_type';
+import { listItem } from '@/api/smsb/source/item';
+import { ItemPushDeviceVO } from '@/api/smsb/source/item_push_device_type';
+import { listItemPushDeviceV2, removeItemPushDevice } from '@/api/smsb/source/item_push_device';
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { smsb_push_state, smsb_push_device_state, smsb_push_type, smsb_push_level } = toRefs<any>(
   proxy?.useDict('smsb_push_state', 'smsb_push_device_state', 'smsb_push_type', 'smsb_push_level')
 );
 
@@ -357,7 +346,7 @@ const deviceDialog = reactive<DialogOption>({
 const initFormData: ItemPushForm = {
   name: undefined,
   level: undefined,
-  itemType: undefined,
+  itemType: 2, // "分屏组"类型
   deviceIds: undefined,
   itemIds: undefined,
   dateRange: undefined,