فهرست منبع

Merge branch 'cheney' into dev

WanGxC 7 ماه پیش
والد
کامیت
54b32fb032

+ 2 - 2
.env.development

@@ -3,9 +3,9 @@ ENV='development'
 
 # 本地环境接口地址
 # VITE_API_URL = 'http://127.0.0.1:8000'
-VITE_API_URL='http://192.168.1.225:9090/'
+ VITE_API_URL='http://192.168.1.225:9090/'
 # VITE_API_URL = 'http://192.168.1.22:8080/'
-# VITE_API_URL = 'http://amzads.zositechc.cn'
+# VITE_API_URL='http://asset.zositechc.cn'
 
 # 是否启用按钮权限
 VITE_PM_ENABLED=true

+ 105 - 92
src/layout/navBars/breadcrumb/breadcrumb.vue

@@ -1,29 +1,35 @@
 <template>
-	<div v-if="isShowBreadcrumb" class="layout-navbars-breadcrumb">
-		<SvgIcon
-			class="layout-navbars-breadcrumb-icon"
-			:name="themeConfig.isCollapse ? 'ele-Expand' : 'ele-Fold'"
-			:size="16"
-			@click="onThemeConfigChange"
-		/>
-		<el-breadcrumb class="layout-navbars-breadcrumb-hide">
-			<transition-group name="breadcrumb">
-				<el-breadcrumb-item v-for="(v, k) in state.breadcrumbList" :key="!v.meta.tagsViewName ? v.meta.title : v.meta.tagsViewName">
+  <div v-if="isShowBreadcrumb" class="layout-navbars-breadcrumb">
+    <SvgIcon
+        :name="themeConfig.isCollapse ? 'ele-Expand' : 'ele-Fold'"
+        :size="16"
+        class="layout-navbars-breadcrumb-icon"
+        @click="onThemeConfigChange"
+    />
+    <el-breadcrumb class="layout-navbars-breadcrumb-hide">
+      <transition-group name="breadcrumb">
+        <el-breadcrumb-item v-for="(v, k) in state.breadcrumbList"
+                            :key="!v.meta.tagsViewName ? v.meta.title : v.meta.tagsViewName">
 					<span v-if="k === state.breadcrumbList.length - 1" class="layout-navbars-breadcrumb-span">
-						<SvgIcon :name="v.meta.icon" class="layout-navbars-breadcrumb-iconfont" v-if="themeConfig.isBreadcrumbIcon" />
+						<SvgIcon v-if="themeConfig.isBreadcrumbIcon" :name="v.meta.icon"
+                     class="layout-navbars-breadcrumb-iconfont"/>
 						<div v-if="!v.meta.tagsViewName">{{ $t(v.meta.title) }}</div>
 						<div v-else>{{ v.meta.tagsViewName }}</div>
 					</span>
-					<a v-else @click.prevent="onBreadcrumbClick(v)">
-						<SvgIcon :name="v.meta.icon" class="layout-navbars-breadcrumb-iconfont" v-if="themeConfig.isBreadcrumbIcon" />{{ $t(v.meta.title) }}
-					</a>
-				</el-breadcrumb-item>
-			</transition-group>
-		</el-breadcrumb>
-	</div>
+          <a v-else @click.prevent="onBreadcrumbClick(v)" class="flex">
+            <SvgIcon v-if="themeConfig.isBreadcrumbIcon" :name="v.meta.icon"
+                     class="layout-navbars-breadcrumb-iconfont"/>
+            <span >
+              {{ $t(v.meta.title) }}
+            </span>
+          </a>
+        </el-breadcrumb-item>
+      </transition-group>
+    </el-breadcrumb>
+  </div>
 </template>
 
-<script setup lang="ts" name="layoutBreadcrumb">
+<script lang="ts" name="layoutBreadcrumb" setup>
 import { reactive, computed, onMounted } from 'vue';
 import { onBeforeRouteUpdate, useRoute, useRouter } from 'vue-router';
 import { Local } from '/@/utils/storage';
@@ -40,107 +46,114 @@ const { routesList } = storeToRefs(stores);
 const route = useRoute();
 const router = useRouter();
 const state = reactive<BreadcrumbState>({
-	breadcrumbList: [],
-	routeSplit: [],
-	routeSplitFirst: '',
-	routeSplitIndex: 1,
+  breadcrumbList: [],
+  routeSplit: [],
+  routeSplitFirst: '',
+  routeSplitIndex: 1
 });
 
 // 动态设置经典、横向布局不显示
 const isShowBreadcrumb = computed(() => {
-	initRouteSplit(route.path);
-	const { layout, isBreadcrumb } = themeConfig.value;
-	if (layout === 'classic' || layout === 'transverse') return false;
-	else return isBreadcrumb ? true : false;
+  initRouteSplit(route.path);
+  const { layout, isBreadcrumb } = themeConfig.value;
+  if (layout === 'classic' || layout === 'transverse') return false;
+  else return isBreadcrumb ? true : false;
 });
 // 面包屑点击时
 const onBreadcrumbClick = (v: RouteItem) => {
-	const { redirect, path } = v;
-	if (redirect) router.push(redirect);
-	else router.push(path);
+  const { redirect, path } = v;
+  if (redirect) router.push(redirect);
+  else router.push(path);
 };
 // 展开/收起左侧菜单点击
 const onThemeConfigChange = () => {
-	themeConfig.value.isCollapse = !themeConfig.value.isCollapse;
-	setLocalThemeConfig();
+  themeConfig.value.isCollapse = !themeConfig.value.isCollapse;
+  setLocalThemeConfig();
 };
 // 存储布局配置
 const setLocalThemeConfig = () => {
-	Local.remove('themeConfig');
-	Local.set('themeConfig', themeConfig.value);
+  Local.remove('themeConfig');
+  Local.set('themeConfig', themeConfig.value);
 };
 // 处理面包屑数据
 const getBreadcrumbList = (arr: RouteItems) => {
-	arr.forEach((item: RouteItem) => {
-		state.routeSplit.forEach((v: string, k: number, arrs: string[]) => {
-			if (state.routeSplitFirst === item.path) {
-				state.routeSplitFirst += `/${arrs[state.routeSplitIndex]}`;
-				state.breadcrumbList.push(item);
-				state.routeSplitIndex++;
-				if (item.children) getBreadcrumbList(item.children);
-			}
-		});
-	});
+  arr.forEach((item: RouteItem) => {
+    state.routeSplit.forEach((v: string, k: number, arrs: string[]) => {
+      if (state.routeSplitFirst === item.path) {
+        state.routeSplitFirst += `/${ arrs[state.routeSplitIndex] }`;
+        state.breadcrumbList.push(item);
+        state.routeSplitIndex++;
+        if (item.children) getBreadcrumbList(item.children);
+      }
+    });
+  });
 };
 // 当前路由字符串切割成数组,并删除第一项空内容
 const initRouteSplit = (path: string) => {
-	if (!themeConfig.value.isBreadcrumb) return false;
-	state.breadcrumbList = [routesList.value[0]];
-	state.routeSplit = path.split('/');
-	state.routeSplit.shift();
-	state.routeSplitFirst = `/${state.routeSplit[0]}`;
-	state.routeSplitIndex = 1;
-	getBreadcrumbList(routesList.value);
-	if (route.name === 'home' || (route.name === 'notFound' && state.breadcrumbList.length > 1)) state.breadcrumbList.shift();
-	if (state.breadcrumbList.length > 0)
-		state.breadcrumbList[state.breadcrumbList.length - 1].meta.tagsViewName = other.setTagsViewNameI18n(<RouteToFrom>route);
+  if (!themeConfig.value.isBreadcrumb) return false;
+  state.breadcrumbList = [ routesList.value[0] ];
+  state.routeSplit = path.split('/');
+  state.routeSplit.shift();
+  state.routeSplitFirst = `/${ state.routeSplit[0] }`;
+  state.routeSplitIndex = 1;
+  getBreadcrumbList(routesList.value);
+  if (route.name === 'home' || (route.name === 'notFound' && state.breadcrumbList.length > 1)) state.breadcrumbList.shift();
+  if (state.breadcrumbList.length > 0)
+    state.breadcrumbList[state.breadcrumbList.length - 1].meta.tagsViewName = other.setTagsViewNameI18n(<RouteToFrom>route);
 };
 // 页面加载时
 onMounted(() => {
-	initRouteSplit(route.path);
+  initRouteSplit(route.path);
 });
 // 路由更新时
 onBeforeRouteUpdate((to) => {
-	initRouteSplit(to.path);
+  initRouteSplit(to.path);
 });
 </script>
 
-<style scoped lang="scss">
+<style lang="scss" scoped>
 .layout-navbars-breadcrumb {
-	flex: 1;
-	height: inherit;
-	display: flex;
-	align-items: center;
-	.layout-navbars-breadcrumb-icon {
-		cursor: pointer;
-		font-size: 18px;
-		color: var(--next-bg-topBarColor);
-		height: 100%;
-		width: 40px;
-		opacity: 0.8;
-		&:hover {
-			opacity: 1;
-		}
-	}
-	.layout-navbars-breadcrumb-span {
-		display: flex;
-		opacity: 0.7;
-		color: var(--next-bg-topBarColor);
-	}
-	.layout-navbars-breadcrumb-iconfont {
-		font-size: 14px;
-		margin-right: 5px;
-	}
-	:deep(.el-breadcrumb__separator) {
-		opacity: 0.7;
-		color: var(--next-bg-topBarColor);
-	}
-	:deep(.el-breadcrumb__inner a, .el-breadcrumb__inner.is-link) {
-		font-weight: unset !important;
-		color: var(--next-bg-topBarColor);
-		&:hover {
-			color: var(--el-color-primary) !important;
-		}
-	}
+  flex: 1;
+  height: inherit;
+  display: flex;
+  align-items: center;
+
+  .layout-navbars-breadcrumb-icon {
+    cursor: pointer;
+    font-size: 18px;
+    color: var(--next-bg-topBarColor);
+    height: 100%;
+    width: 40px;
+    opacity: 0.8;
+
+    &:hover {
+      opacity: 1;
+    }
+  }
+
+  .layout-navbars-breadcrumb-span {
+    display: flex;
+    opacity: 0.7;
+    color: var(--next-bg-topBarColor);
+  }
+
+  .layout-navbars-breadcrumb-iconfont {
+    font-size: 14px;
+    margin-right: 5px;
+  }
+
+  :deep(.el-breadcrumb__separator) {
+    opacity: 0.7;
+    color: var(--next-bg-topBarColor);
+  }
+
+  :deep(.el-breadcrumb__inner a, .el-breadcrumb__inner.is-link) {
+    font-weight: unset !important;
+    color: var(--next-bg-topBarColor);
+
+    &:hover {
+      color: var(--el-color-primary) !important;
+    }
+  }
 }
 </style>

+ 2 - 2
src/stores/themeConfig.ts

@@ -68,7 +68,7 @@ export const useThemeConfig = defineStore('themeConfig', {
 			// 是否开启菜单手风琴效果
 			isUniqueOpened: true,
 			// 是否开启固定 Header
-			isFixedHeader: false,
+			isFixedHeader: true,
 			// 初始化变量,用于更新菜单 el-scrollbar 的高度,请勿删除
 			isFixedHeaderChange: false,
 			// 是否开启经典布局分割菜单(仅经典布局生效)
@@ -88,7 +88,7 @@ export const useThemeConfig = defineStore('themeConfig', {
 			// 是否开启 Breadcrumb,强制经典、横向布局不显示
 			isBreadcrumb: true,
 			// 是否开启 Tagsview
-			isTagsview: true,
+			isTagsview: false,
 			// 是否开启 Breadcrumb 图标
 			isBreadcrumbIcon: true,
 			// 是否开启 Tagsview 图标

+ 3 - 3
src/views/company-information/index.vue

@@ -38,8 +38,8 @@ function handleRefresh() {
 </script>
 
 <template>
-  <div class="px-2.5">
-    <el-card class="my-2.5" shadow="never" style="border: none;">
+  <div class="flex flex-col p-5">
+    <el-card class="mb-5" style="border: none;">
       <div class="flex justify-between items-baseline">
         <div>
           <span class="font-bold text-xl">公司信息概览</span>
@@ -50,7 +50,7 @@ function handleRefresh() {
         </span>
       </div>
     </el-card>
-    <el-card v-loading="loading" shadow="never" style="border: none; min-height: 692px;">
+    <el-card v-loading="loading" class="flex-grow" style="border: none;">
       <InfoCard></InfoCard>
     </el-card>
     <CompanyCreate v-model="isOpen" @refresh="handleRefresh"/>

+ 4 - 2
src/views/shop-information/index.vue

@@ -26,11 +26,13 @@ async function initData() {
 </script>
 
 <template>
-  <div class="px-2.5">
+  <div class="flex flex-col px-5">
     <el-divider content-position="left">
       <div class="font-bold text-xl">店铺信息概览</div>
     </el-divider>
-    <el-card v-loading="loading" shadow="never" style="border: none; min-height: 692px;">
+
+    <!-- 添加 flex-grow 类,确保 el-card 占据剩余空间 -->
+    <el-card v-loading="loading" class="flex-grow" shadow="never">
       <InfoCard></InfoCard>
     </el-card>
   </div>

+ 5 - 1
src/views/system/menu/components/MenuTreeCom/index.vue

@@ -31,7 +31,11 @@
 			<template #default="{ node, data }">
 				<element-tree-line :node="node" :showLabelLine="false" :indent="32">
 					<span v-if="data.status" class="text-center font-black font-normal">
-						<SvgIcon :name="node.data.icon" color="var(--el-color-primary)" />
+						<SvgIcon :name="node.data.icon" color="var(--el-color-primary)" :style="[
+                  node.data.icon.startsWith('el') ? {
+                    'top': '2px',
+                  } : {}
+                ]" />
 						&nbsp;{{ node.label }}
 					</span>
 					<span v-else class="text-center font-black text-red-700 font-normal"> <SvgIcon :name="node.data.icon" />&nbsp;{{ node.label }} </span>