增加二级目录

dev-QQq
qinzhenpen 2 years ago
parent bdb5138036
commit 6307998938

@ -72,29 +72,59 @@
height: 100%; height: 100%;
width: 100% !important; width: 100% !important;
background-color: transparent !important; background-color: transparent !important;
padding-top: 20px; padding: 25px 18px;
padding-left: 10px;
.el-sub-menu {
margin-bottom: 20px;
.el-sub-menu__title {
height: 37px;
background: url('../images/sidebar-normal.png') no-repeat;
background-size: 100% 100% !important;
}
.el-menu {
padding: 1px 18px !important;
.el-menu-item {
min-width: 100% !important;
height: 37px;
color: #fff;
padding-left: 4px;
background: transparent !important;
margin-bottom: 0px;
&:hover {
background: transparent !important;
}
}
}
}
.el-menu-item { .el-menu-item {
position: relative;
display: flex; display: flex;
align-items: center; align-items: center;
// margin: 15px 0px;
margin-bottom: 20px; margin-bottom: 20px;
height: 37px; height: 37px;
width: 213px;
// margin-left: -8px;
color: #fff; color: #fff;
background: url('../images/sidebar-normal.png') no-repeat; background: url('../images/sidebar-normal.png') no-repeat;
background-size: 100% 100% !important; background-size: 100% 100% !important;
} }
.is-active { .is-active {
background: url('../images/sidebar-active.png') no-repeat !important; background: url('../images/sidebar-active.png') no-repeat !important;
background-size:100% 100%; // background-size: 100% 100% !important;
.el-sub-menu__title {
background: url('../images/sidebar-active.png') no-repeat !important;
background-size: 100% 100% !important;
}
} }
} }
.el-menu-item, .menu-title { .el-menu-item,
.menu-title {
// overflow: hidden !important; // overflow: hidden !important;
// text-overflow: ellipsis !important; // text-overflow: ellipsis !important;
// white-space: nowrap !important; // white-space: nowrap !important;
@ -180,6 +210,7 @@
visibility: hidden; visibility: hidden;
display: inline-block; display: inline-block;
} }
&>i { &>i {
height: 0; height: 0;
width: 0; width: 0;

@ -10,6 +10,7 @@
</template> </template>
<el-sub-menu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body> <el-sub-menu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body>
{{ resolvePath(item.path)}}
<template v-if="item.meta" #title> <template v-if="item.meta" #title>
<svg-icon :icon-class="item.meta && item.meta.icon" /> <svg-icon :icon-class="item.meta && item.meta.icon" />
<span class="menu-title" :title="hasTitle(item.meta.title)">{{ item.meta.title }}</span> <span class="menu-title" :title="hasTitle(item.meta.title)">{{ item.meta.title }}</span>

@ -2,7 +2,7 @@
* @Author: qinzhenpen qzp1807@126.com * @Author: qinzhenpen qzp1807@126.com
* @Date: 2024-08-09 17:36:23 * @Date: 2024-08-09 17:36:23
* @LastEditors: qinzhenpen qzp1807@126.com * @LastEditors: qinzhenpen qzp1807@126.com
* @LastEditTime: 2024-08-16 17:00:39 * @LastEditTime: 2024-08-30 16:07:47
* @FilePath: \vue3\src\layout\components\Sidebar\index.vue * @FilePath: \vue3\src\layout\components\Sidebar\index.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
--> -->
@ -15,7 +15,8 @@
:collapse="isCollapse" :collapse="isCollapse"
:background-color="sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground" :background-color="sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground"
:text-color="sideTheme === 'theme-dark' ? variables.menuColor : variables.menuLightColor" :text-color="sideTheme === 'theme-dark' ? variables.menuColor : variables.menuLightColor"
:unique-opened="true" :default-openeds="['/userProfile/userProfile','/','/technology/technology']"
:unique-opened="false"
:active-text-color="theme" :active-text-color="theme"
:collapse-transition="false" :collapse-transition="false"
mode="vertical" mode="vertical"

@ -88,42 +88,182 @@ export const dynamicRoutes = [
], ],
}, },
{ {
path: "", path: "/technology",
component: Layout, component: Layout,
redirect: "/digitalMarketTech", redirect: "/technology/digitalMarketTech",
alwaysShow: true,
meta: { title: "数字营销技术", icon: "数据浏览", affix: true },
children: [ children: [
{ {
path: "/digitalMarketTech", path: "digitalMarketTech",
component: () => import("@/views/digitalMarketTech/index"), component: () => import("@/views/digitalMarketTech/index"),
name: "digitalMarketTech", name: "digitalMarketTech",
hidden: true,
meta: { title: "数字营销技术", icon: "数据浏览", affix: true }, meta: { title: "数字营销技术", icon: "数据浏览", affix: true },
}, },
{
path: "bigData",
name: "bigData",
component: () => import("@/views/digitalMarketTech/index"),
meta: { title: "大数据", affix: true },
},
// 人工智能
{
path: "artificialIntelligence",
name: "artificialIntelligence",
component: () => import("@/views/digitalMarketTech/index"),
meta: { title: "人工智能", affix: true },
},
//AIGC大模型
{
path: "aigcModel",
name: "aigcModel",
component: () => import("@/views/digitalMarketTech/index"),
meta: { title: "AIGC大模型", affix: true },
},
], ],
}, },
{ {
path: "", path: "/",
component: Layout, component: Layout,
redirect: "/digitalMarketingAlgorithms", redirect: "/digitalMarketingAlgorithms",
alwaysShow: true,
meta: { title: "数字营销算法", icon: "tongxunlu_B", affix: true },
children: [ children: [
{ {
path: "/digitalMarketingAlgorithms", path: "digitalMarketingAlgorithms",
hidden: true,
component: () => import("@/views/digitalMarketingAlgorithms/index"), component: () => import("@/views/digitalMarketingAlgorithms/index"),
name: "digitalMarketingAlgorithms", name: "digitalMarketingAlgorithms",
meta: { title: "数字营销算法", icon: "tongxunlu_B", affix: true }, meta: { title: "数字营销算法", icon: "tongxunlu_B", affix: true },
}, },
// 用户数据库
{
path: "userDatabase",
name: "userDatabase",
component: () => import("@/views/digitalMarketingAlgorithms/index"),
meta: { title: "用户数据库", affix: true },
},
// 描述性统计
{
path: "descriptiveStatistics",
name: "descriptiveStatistics",
component: () => import("@/views/digitalMarketingAlgorithms/index"),
meta: { title: "描述性统计", affix: true },
},
// 聚类分析
{
path: "clusteringAnalysis",
name: "clusteringAnalysis",
component: () => import("@/views/digitalMarketingAlgorithms/index"),
meta: { title: "聚类分析", affix: true },
},
// 关联规则挖掘
{
path: "associationRuleMining",
name: "associationRuleMining",
component: () => import("@/views/digitalMarketingAlgorithms/index"),
meta: { title: "关联规则挖掘", affix: true },
},
// 回归分析
{
path: "regressionAnalysis",
name: "regressionAnalysis",
component: () => import("@/views/digitalMarketingAlgorithms/index"),
meta: { title: "回归分析", affix: true },
},
// 情感分析
{
path: "sentimentAnalysis",
name: "sentimentAnalysis",
component: () => import("@/views/digitalMarketingAlgorithms/index"),
meta: { title: "情感分析", affix: true },
},
], ],
}, },
{ {
path: "", path: "/userProfile",
component: Layout, component: Layout,
redirect: "/portraitModel", redirect: "/userProfile/portraitModel",
alwaysShow: true,
meta: { title: "用户画像模型", icon: "智能算法", affix: true },
children: [ children: [
{ {
path: "/portraitModel", path: "portraitModel",
hidden: true,
component: () => import("@/views/portraitModel/index"), component: () => import("@/views/portraitModel/index"),
name: "portraitModel", name: "portraitModel",
meta: { title: "用户画像模型", icon: "智能算法", affix: true },
}, },
// RFM分析
{
path: "rfmAnalysis",
name: "rfmAnalysis",
component: () => import("@/views/portraitModel/index"),
meta: { title: "RFM分析", affix: true },
},
// 帕累托
{
path: "pareto",
name: "pareto",
component: () => import("@/views/portraitModel/index"),
meta: { title: "帕累托", affix: true },
},
// 波士顿矩阵分析
{
path: "bostonMatrixAnalysis",
name: "bostonMatrixAnalysis",
component: () => import("@/views/portraitModel/index"),
meta: { title: "波士顿矩阵分析", affix: true },
},
// 转化分析
{
path: "conversionAnalysis",
name: "conversionAnalysis",
component: () => import("@/views/portraitModel/index"),
meta: { title: "转化分析", affix: true },
},
// 购物篮分析
{
path: "shoppingBasketAnalysis",
name: "shoppingBasketAnalysis",
component: () => import("@/views/portraitModel/index"),
meta: { title: "购物篮分析", affix: true },
},
// 复购分析
{
path: "repeatPurchaseAnalysis",
name: "repeatPurchaseAnalysis",
component: () => import("@/views/portraitModel/index"),
meta: { title: "复购分析", affix: true },
},
// /留存分析
{
path: "retentionAnalysis",
name: "retentionAnalysis",
component: () => import("@/views/portraitModel/index"),
meta: { title: "留存分析", affix: true },
},
// 用户粘性分析
{
path: "userStickinessAnalysis",
name: "userStickinessAnalysis",
component: () => import("@/views/portraitModel/index"),
meta: { title: "用户粘性分析", affix: true },
},
//AARRR用户运营分析
{
path: "aarrrUserOperationAnalysis",
name: "aarrrUserOperationAnalysis",
component: () => import("@/views/portraitModel/index"),
meta: { title: "AARRR用户运营分析", affix: true },
},
// 用户画像分析
{
path: "userPortraitAnalysis",
name: "userPortraitAnalysis",
component: () => import("@/views/portraitModel/index"),
meta: { title: "用户画像分析", affix: true },
}
], ],
}, },
// Bi可视化分析 // Bi可视化分析

@ -2,7 +2,7 @@
* @Author: qinzhenpen qzp1807@126.com * @Author: qinzhenpen qzp1807@126.com
* @Date: 2024-08-20 17:50:08 * @Date: 2024-08-20 17:50:08
* @LastEditors: qinzhenpen qzp1807@126.com * @LastEditors: qinzhenpen qzp1807@126.com
* @LastEditTime: 2024-08-22 17:12:34 * @LastEditTime: 2024-08-30 15:00:50
* @FilePath: \vue3\src\views\digitalMarketTech\index.vue * @FilePath: \vue3\src\views\digitalMarketTech\index.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
--> -->
@ -28,14 +28,25 @@
</div> </div>
</template> </template>
<script setup> <script setup>
const route = useRoute();
const router = useRouter();
const pageData = [defineAsyncComponent(() => import("./bigData/index.vue")), defineAsyncComponent(() => import("./artificialIntelligence/index.vue")), defineAsyncComponent(() => import("./AIGCLargeModel/index.vue"))]; const pageData = [defineAsyncComponent(() => import("./bigData/index.vue")), defineAsyncComponent(() => import("./artificialIntelligence/index.vue")), defineAsyncComponent(() => import("./AIGCLargeModel/index.vue"))];
const component = ref(pageData[0]); const component = ref(pageData[0]);
// map
const map = {
'大数据': 1,
'人工智能': 2,
'AIGC大模型': 3,
};
const isActive = ref(1); const isActive = ref(1);
const activeIndex = (index) => { const activeIndex = (index) => {
isActive.value = index; isActive.value = index;
component.value = pageData[index - 1]; component.value = pageData[index - 1];
}; };
onMounted(()=>{
isActive.value= map[route.meta.title];
component.value= pageData[map[route.meta.title]-1];
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

@ -168,14 +168,14 @@
<el-input style="width: 140px" v-model="formInline.frequency" clearable /> <el-input style="width: 140px" v-model="formInline.frequency" clearable />
</el-form-item> </el-form-item>
</el-form-item> </el-form-item>
<el-form-item label="评论观点抽取: " label-width="120px"> <!-- <el-form-item label="评论观点抽取: " label-width="120px">
<el-form-item label="前两位词语:" label-width="120px" label-position="left"> <el-form-item label="前两位词语:" label-width="120px" label-position="left">
<el-input style="width: 140px" v-model="formInline.text1" clearable /> <el-input style="width: 140px" v-model="formInline.text1" clearable />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-input style="width: 140px" v-model="formInline.text2" clearable /> <el-input style="width: 140px" v-model="formInline.text2" clearable />
</el-form-item> </el-form-item>
</el-form-item> </el-form-item> -->
<el-form-item label="情感倾向分析: " label-width="120px"> <el-form-item label="情感倾向分析: " label-width="120px">
<el-radio-group v-model="formInline.emotional" style="margin-left: 31px" fill="red" text-color="#ffffff"> <el-radio-group v-model="formInline.emotional" style="margin-left: 31px" fill="red" text-color="#ffffff">
<el-radio value="1" label="正向" size="large"></el-radio> <el-radio value="1" label="正向" size="large"></el-radio>
@ -483,8 +483,8 @@ const tableLabel = reactive([
const formInline = ref({ const formInline = ref({
max: "", max: "",
frequency: "", frequency: "",
text1: "", // text1: "",
text2: "", // text2: "",
emotional: "", emotional: "",
prominent: "", prominent: "",
}); });
@ -517,8 +517,8 @@ const flat = ref(false);
const g_submitVerification = ref({ const g_submitVerification = ref({
max: "安装", max: "安装",
frequency: "6", frequency: "6",
text1: "", // text1: "",
text2: "", // text2: "",
emotional: "负向", emotional: "负向",
prominent: "安装", prominent: "安装",
}); });

@ -14,6 +14,7 @@
</div> </div>
</template> </template>
<script setup> <script setup>
const route = useRoute();
const pageData = [defineAsyncComponent(() => import("./components/bigData.vue")), defineAsyncComponent(() => import("./components/descriptiveStatistics.vue")), defineAsyncComponent(() => import("./components/clusterAnalysis.vue")), defineAsyncComponent(() => import("./components/associationRuleMining.vue")), defineAsyncComponent(() => import("./components/regressionAnalysis.vue")), defineAsyncComponent(() => import("./components/emotion-analysis.vue"))]; const pageData = [defineAsyncComponent(() => import("./components/bigData.vue")), defineAsyncComponent(() => import("./components/descriptiveStatistics.vue")), defineAsyncComponent(() => import("./components/clusterAnalysis.vue")), defineAsyncComponent(() => import("./components/associationRuleMining.vue")), defineAsyncComponent(() => import("./components/regressionAnalysis.vue")), defineAsyncComponent(() => import("./components/emotion-analysis.vue"))];
const component = ref(pageData[0]); const component = ref(pageData[0]);
const isActive = ref(1); const isActive = ref(1);
@ -21,6 +22,18 @@ const activeIndex = (index) => {
isActive.value = index; isActive.value = index;
component.value = pageData[index - 1]; component.value = pageData[index - 1];
}; };
const map = {
'用户数据库': 1,
'描述性统计': 2,
'关联规则挖掘': 3,
'聚类分析': 4,
'回归分析': 5,
'情感分析': 6,
};
onMounted(()=>{
isActive.value= map[route.meta.title];
component.value= pageData[map[route.meta.title]-1];
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

@ -1,7 +1,7 @@
<template> <template>
<div class="content app-container"> <div class="content app-container">
<div class="tabList"> <div class="tabList">
<div class="tabs" v-for="item in tabList" :key="item.id" @click="changeTab(item)"> <div class="tabs" :class="{'tabs-active':tabIndex == item.id}" v-for="item in tabList" :key="item.id" @click="changeTab(item)">
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<img :src="getAssetsFile(item.backImg)" alt="" /> <img :src="getAssetsFile(item.backImg)" alt="" />
<span>{{ item.title }}</span> <span>{{ item.title }}</span>
@ -141,10 +141,10 @@
</template> </template>
<script setup> <script setup>
const route = useRoute();
import * as portraitModel from "@/api/portraitModel"; import * as portraitModel from "@/api/portraitModel";
import mainContent from "@/views/components/mainContent.vue"; import mainContent from "@/views/components/mainContent.vue";
import {getAssetsFile} from '@/utils/index.js' import {getAssetsFile} from '@/utils/index.js'
import { onMounted } from "vue";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const currentComponent = ref(null); const currentComponent = ref(null);
const contentRef = ref(null); const contentRef = ref(null);
@ -214,9 +214,21 @@ const tabList = ref([
}, },
]); ]);
// defineExpose({ submitMethod }); // defineExpose({ submitMethod });
const map = {
'RFM分析': 1,
'帕累托': 2,
'波士顿矩阵分析': 3,
'转化分析': 4,
'购物篮分析': 5,
'复购分析': 6,
'留存分析': 7,
'用户粘性分析': 8,
'AARRR用户运营分析': 9,
'用户画像分析': 10,
}
onMounted(() => { onMounted(() => {
// getTableData(""); tabIndex.value=map[route.meta.title]
currentComponent.value = defineAsyncComponent(tabList.value[0].key); currentComponent.value = defineAsyncComponent(tabList.value[map[route.meta.title]-1].key);
}); });
const getTableData = (name) => { const getTableData = (name) => {
fileTable.value = []; fileTable.value = [];
@ -252,7 +264,7 @@ const handleChange = (index) => {
const changeTab = (item) => { const changeTab = (item) => {
currentComponent.value = defineAsyncComponent(item.key); currentComponent.value = defineAsyncComponent(item.key);
menuIndex.value = 0; menuIndex.value = 0;
// tabIndex = item.id; tabIndex.value = item.id;
}; };
const submit = () => { const submit = () => {
contentRef.value.submitMethod(); contentRef.value.submitMethod();
@ -271,6 +283,12 @@ const retrain = () => {
.tabList { .tabList {
// display: flex; // display: flex;
// width: 1060px; // width: 1060px;
.tabs-active{
//
transform: scale(1.1);
//
transition: all 0.3s;
}
.tabs { .tabs {
cursor: pointer; cursor: pointer;
font-size: 13px; font-size: 13px;

Loading…
Cancel
Save