feat: 路由跳转重构 + 甲方报价单 + 物料分类 + 比价选择方案 + 规格型号拆分

- 比价页改为列表→路由跳转到 comparison/detail,支持勾选物料行生成采购方案PDF
- 新增甲方报价单模块(clientquote):列表+详情路由,含成本价/报价/毛利率,导出PDF
- 新增物料分类管理(category):树形结构,CRUD,物料页面关联分类筛选
- BizMaterial 拆分 spec(规格) + modelNo(型号) 两个字段
- Logo 修复:新PNG + 内联样式确保完整显示
- sys_menu 新增 2012(物料分类)、2013(甲方报价单)、2014(报价单详情)、2015(比价详情)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-23 13:49:11 +08:00
parent 608ee0ed61
commit 54a421aa36
25 changed files with 1614 additions and 502 deletions

View File

@@ -1,46 +1,48 @@
<template>
<div class="sidebar-logo-container" :class="{ collapse: collapse }" :style="{ backgroundColor: sideTheme === 'theme-dark' && navType !== 3 ? variables.menuBackground : variables.menuLightBackground }">
<div class="sidebar-logo-container" :class="{ collapse: collapse }"
:style="{ backgroundColor: sideTheme === 'theme-dark' && navType !== 3 ? variables.menuBackground : variables.menuLightBackground }">
<transition name="sidebarLogoFade">
<router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
<img v-if="logo" :src="logo" class="sidebar-logo" />
<h1 v-else class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' && navType !== 3 ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }}</h1>
<img v-if="logo" :src="logo"
style="width:32px;height:32px;object-fit:contain;flex-shrink:0;display:block" />
<h1 v-else class="sidebar-title"
:style="{ color: sideTheme === 'theme-dark' && navType !== 3 ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }}</h1>
</router-link>
<router-link v-else key="expand" class="sidebar-logo-link" to="/">
<img v-if="logo" :src="logo" class="sidebar-logo" />
<h1 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' && navType !== 3 ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }}</h1>
<img v-if="logo" :src="logo"
style="width:32px;height:32px;object-fit:contain;flex-shrink:0;margin-right:10px;display:block" />
<h1 class="sidebar-title"
:style="{ color: sideTheme === 'theme-dark' && navType !== 3 ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }}</h1>
</router-link>
</transition>
</div>
</template>
<script>
import logoImg from "@/assets/logo/logo.png"
import variables from "@/assets/styles/variables.scss"
export default {
name: "SidebarLogo",
props: { collapse: { type: Boolean, required: true } },
computed: {
variables() { return variables },
sideTheme() { return this.$store.state.settings.sideTheme },
navType() { return this.$store.state.settings.navType }
navType() { return this.$store.state.settings.navType }
},
data() { return { title: process.env.VUE_APP_TITLE, logo: logoImg } }
}
</script>
<style lang="scss" scoped>
.sidebarLogoFade-enter-active { transition: opacity 1.5s; }
.sidebarLogoFade-enter, .sidebarLogoFade-leave-to { opacity: 0; }
.sidebar-logo-container {
position: relative; height: 50px; line-height: 50px;
background: #2b2f3a; text-align: center; overflow: hidden;
height: 50px; background: #2b2f3a; text-align: center;
.sidebar-logo-link {
height: 100%; width: 100%; display: flex; align-items: center; justify-content: center; text-decoration: none;
.sidebar-logo { width: 34px; height: 34px; object-fit: contain; margin-right: 10px; flex-shrink: 0; }
.sidebar-title { display: inline-block; margin: 0; color: #fff; font-weight: 600; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
height: 100%; width: 100%; display: flex; align-items: center;
justify-content: center; text-decoration: none; padding: 0 12px;
.sidebar-title {
color: #fff; font-weight: 600; font-size: 14px; margin: 0;
white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
}
}
.sidebar-logo-container.collapse .sidebar-logo-link { justify-content: center; }
.sidebar-logo-container.collapse .sidebar-logo { margin-right: 0 !important; }
</style>