第一轮bugfix

fix/non-blocking-route-navigation
HeHaonan 2 years ago
parent 52c39c9790
commit f781cba9d0

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

@ -83,9 +83,11 @@ function setLayout() {
.app-wrapper { .app-wrapper {
@include clearfix; @include clearfix;
position: relative; position: relative;
height: 100%; // height: 100%;
width: 100%; // width: 100%;
background: url("@/assets/images/背景.png"); background: url("@/assets/images/背景.png");
background-size: cover;
padding-bottom: 14px;
&.mobile.openSidebar { &.mobile.openSidebar {
position: fixed; position: fixed;

@ -1,6 +1,6 @@
<template> <template>
<div class="main-content"> <div class="main-content">
<el-scrollbar height="680px"> <el-scrollbar height="730px">
<component :is="currentComponent" ref="content"></component> <component :is="currentComponent" ref="content"></component>
</el-scrollbar> </el-scrollbar>
</div> </div>

@ -0,0 +1,113 @@
<template>
<div>
<el-dialog
title="任务知识导入"
style="width: 1108px; height: 798px"
custom-class="dialogClass"
:show-close="false"
class="dialog"
v-model="props.showModel"
:close-on-click-modal="false"
>
<template #header="{ titleId, titleClass }">
<div class="my-header">
<span :id="titleId" :class="titleClass">任务知识导入</span>
<img
class="gbImg"
src="@/assets/images/关闭.png"
@click="close"
alt=""
/>
</div>
<img class="xtImg" src="@/assets/images/线条.png" alt="" />
</template>
<div
style="
color: #fff;
margin-top: -35px;
padding: 10px;
padding-left: 20px;
"
>
<el-scrollbar height="650px">
<slot name="content"></slot>
</el-scrollbar>
</div>
<!-- <template #footer>
<div class="dialog-footer">
<el-button @click="dialogVisible = false">确定</el-button>
<el-button type="primary" @click="dialogVisible = false">
返回
</el-button>
</div>
</template> -->
</el-dialog>
</div>
</template>
<script setup>
const emits = defineEmits(["closePop", "submit"]);
const dialogVisible = ref(false);
const props = defineProps({
modelValue: [String, Object, Array],
//控制显隐
showModel: {
type: Boolean,
default: false,
},
title: {
type: String,
default: "任务知识导入",
},
width: {
type: String,
default: "673",
},
showOprBtn: {
type: Boolean,
default: true,
},
});
const close = () => {
emits("closePop");
};
const submit = () => {
emits("submit");
};
</script>
<style lang="scss" scoped>
::v-deep .el-dialog {
background: url("@/assets/images/弹框@2x.png") !important;
background-size: 1108px 798px !important;
.el-dialog__header {
padding: 5px 0px;
margin-right: 5px !important;
.gbImg {
cursor: pointer;
margin-top: 3px;
// margin-left: -30px;
width: 51px;
height: 35px;
background-size: 100% 100%;
}
}
.xtImg {
margin-left: 18px;
width: 530px;
}
}
.my-header {
display: flex;
flex-direction: row;
justify-content: space-between;
gap: 16px;
text-align: center;
margin-right: 9px;
margin-bottom: 0;
span {
color: #ffffff;
padding: 38px 20px 0;
margin-top: 10px;
margin-left: 20px;
}
}
</style>

File diff suppressed because one or more lines are too long

@ -1,10 +1,10 @@
<template> <template>
<div class="content"> <div class="content">
<div class="import" @click="knowledgeFlag = !knowledgeFlag"> <div class="import" @click="dialogVisible = true">
<img src="@/assets/images/导入.png" alt="" /> <img src="@/assets/images/导入.png" alt="" />
<span>任务知识导入</span> <span>任务知识导入</span>
</div> </div>
<div v-if="knowledgeFlag"> <!-- <div v-if="knowledgeFlag">
<p> <p>
帕累托分析法源于经典的二八法则。意大利经济学家维尔弗雷多·帕累托于1906年提出了著名的关于意大利社会财务分配的研究结论:20%的人口掌握了80%的社会财富。这个结论对大多数国家的社会财富分配情况都成立。因此帕累托法则又被称为80/20法则。<br /><br /> 帕累托分析法源于经典的二八法则。意大利经济学家维尔弗雷多·帕累托于1906年提出了著名的关于意大利社会财务分配的研究结论:20%的人口掌握了80%的社会财富。这个结论对大多数国家的社会财富分配情况都成立。因此帕累托法则又被称为80/20法则。<br /><br />
帕累托分析的核心观点是:在许多情况下,大部分的问题、效益或成本都来自于少数的要素。换句话说,少数关键要素占据了绝大多数的结果。这一规律在许多领域都具有普适性,例如:<br /><br /> 帕累托分析的核心观点是:在许多情况下,大部分的问题、效益或成本都来自于少数的要素。换句话说,少数关键要素占据了绝大多数的结果。这一规律在许多领域都具有普适性,例如:<br /><br />
@ -17,8 +17,8 @@
</p> </p>
<img src="@/assets/images/u3323.png" alt="" /><br /> <img src="@/assets/images/u3323.png" alt="" /><br />
<img src="@/assets/images/u3324.png" alt="" /> <img src="@/assets/images/u3324.png" alt="" />
</div> </div> -->
<div v-if="!knowledgeFlag"> <div>
<div class="caseBack"> <div class="caseBack">
<div class="title"> <div class="title">
<img src="@/assets/images/caseIcon.png" alt="" /> <img src="@/assets/images/caseIcon.png" alt="" />
@ -344,14 +344,32 @@
</div> </div>
</div> </div>
</div> </div>
<pop-modal :showModel="dialogVisible" @closePop="dialogVisible = false">
<template v-slot:content>
<p>
帕累托分析法源于经典的二八法则。意大利经济学家维尔弗雷多·帕累托于1906年提出了著名的关于意大利社会财务分配的研究结论:20%的人口掌握了80%的社会财富。这个结论对大多数国家的社会财富分配情况都成立。因此帕累托法则又被称为80/20法则。<br /><br />
帕累托分析的核心观点是:在许多情况下,大部分的问题、效益或成本都来自于少数的要素。换句话说,少数关键要素占据了绝大多数的结果。这一规律在许多领域都具有普适性,例如:<br /><br />
在企业中,80%的利润可能来自于20%的产品或客户。<br />
在销售中,80%的销售额可能来自于20%的销售员或产品。<br />
在质量控制中,80%的缺陷可能来自于20%的原因或工序。<br /><br />
ABC 分类法全称应为 ABC 分类库存控制法。
又称帕累托分析法或巴雷托分析法、柏拉图分析、主次因分析法
、ABC分析法、ABC 管理法,平常也称之为「80 对 20」规则。
</p>
<img src="@/assets/images/u3323.png" alt="" /><br />
<img src="@/assets/images/u3324.png" alt="" />
</template>
</pop-modal>
</div> </div>
</template> </template>
<script setup> <script setup>
import { getUserInfo } from '@/utils/auth' import popModal from "@/views/components/popModal.vue";
import { getUserInfo } from "@/utils/auth";
import * as portraitModel from "@/api/portraitModel"; import * as portraitModel from "@/api/portraitModel";
import { downBlobFile } from "@/utils/index.js"; import { downBlobFile } from "@/utils/index.js";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const dialogVisible = ref(false);
const knowledgeFlag = ref(false); const knowledgeFlag = ref(false);
const errorNum = ref(0); const errorNum = ref(0);
const step1Error = ref(0); const step1Error = ref(0);

@ -1,11 +1,11 @@
<template> <template>
<div class="content"> <div class="content">
<div class="import" @click="knowledgeFlag = !knowledgeFlag"> <div class="import" @click="dialogVisible = true">
<img src="@/assets/images/导入.png" alt="" /> <img src="@/assets/images/导入.png" alt="" />
<span>任务知识导入</span> <span>任务知识导入</span>
</div> </div>
<div v-if="knowledgeFlag" v-html="knowledgeHtml"></div> <!-- <div v-if="knowledgeFlag" v-html="knowledgeHtml"></div> -->
<div v-if="!knowledgeFlag"> <div>
<div class="caseBack"> <div class="caseBack">
<div class="title"> <div class="title">
<img src="@/assets/images/caseIcon.png" alt="" /> <img src="@/assets/images/caseIcon.png" alt="" />
@ -277,11 +277,17 @@
</div> </div>
</div> </div>
</div> </div>
<pop-modal :showModel="dialogVisible" @closePop="dialogVisible = false">
<template v-slot:content>
<div v-html="knowledgeHtml"></div>
</template>
</pop-modal>
</div> </div>
</template> </template>
<script setup> <script setup>
import { getUserInfo } from '@/utils/auth' import popModal from "@/views/components/popModal.vue";
import { getUserInfo } from "@/utils/auth";
import * as portraitModel from "@/api/portraitModel"; import * as portraitModel from "@/api/portraitModel";
import * as echarts from "echarts"; import * as echarts from "echarts";
import { downBlobFile } from "@/utils/index.js"; import { downBlobFile } from "@/utils/index.js";
@ -293,6 +299,7 @@ const knowledgeHtml = ref(
const list = ref(["-"]); const list = ref(["-"]);
const combinationValue1 = ref(""); const combinationValue1 = ref("");
const combinationValue2 = ref(""); const combinationValue2 = ref("");
const dialogVisible = ref(false);
const knowledgeFlag = ref(false); const knowledgeFlag = ref(false);
const combinationRight = ref(["A—B", "A—C", "A—D", "B—C", "B—D", "C—D"]); const combinationRight = ref(["A—B", "A—C", "A—D", "B—C", "B—D", "C—D"]);
const step1Data = ref([ const step1Data = ref([

@ -1,10 +1,10 @@
<template> <template>
<div class="content"> <div class="content">
<div class="import" @click="knowledgeFlag = !knowledgeFlag"> <div class="import" @click="dialogVisible = true">
<img src="@/assets/images/导入.png" alt="" /> <img src="@/assets/images/导入.png" alt="" />
<span>任务知识导入</span> <span>任务知识导入</span>
</div> </div>
<div v-if="knowledgeFlag"> <!-- <div v-if="knowledgeFlag">
<p style="line-height: 25px; font-size: 14px"> <p style="line-height: 25px; font-size: 14px">
波士顿矩阵(BCG 波士顿矩阵(BCG
Matrix),又称市场增长率-相对市场份额矩阵,由美国著名的管理学家、波士顿咨询公司创始人布鲁斯·亨德森于1970年首创,它是通过销售增长率(反应市场引力的指标)和市场占有率(反应企业实力的指标)来分析决定企业的产品结构。<br /> Matrix),又称市场增长率-相对市场份额矩阵,由美国著名的管理学家、波士顿咨询公司创始人布鲁斯·亨德森于1970年首创,它是通过销售增长率(反应市场引力的指标)和市场占有率(反应企业实力的指标)来分析决定企业的产品结构。<br />
@ -21,8 +21,8 @@
4,瘦狗类产品:低增长且低市占,理论率低甚至亏损,应采取撤退战略。 </span 4,瘦狗类产品:低增长且低市占,理论率低甚至亏损,应采取撤退战略。 </span
><br /> ><br />
<img src="@/assets/images/u3682.png" alt="" /> <img src="@/assets/images/u3682.png" alt="" />
</div> </div> -->
<div v-if="!knowledgeFlag"> <div>
<div class="caseBack"> <div class="caseBack">
<div class="title"> <div class="title">
<img src="@/assets/images/caseIcon.png" alt="" /> <img src="@/assets/images/caseIcon.png" alt="" />
@ -305,17 +305,46 @@
</div> </div>
</div> </div>
</div> </div>
<pop-modal :showModel="dialogVisible" @closePop="dialogVisible = false">
<template v-slot:content>
<p style="line-height: 25px; font-size: 14px">
波士顿矩阵(BCG
Matrix),又称市场增长率-相对市场份额矩阵,由美国著名的管理学家、波士顿咨询公司创始人布鲁斯·亨德森于1970年首创,它是通过销售增长率(反应市场引力的指标)和市场占有率(反应企业实力的指标)来分析决定企业的产品结构。<br />
市场吸引力包括企业销售量增长率、目标市场容量、竞争对手强弱、利润高低等。其中最重要的是反映市场引力的综合指标——销售增长率,这是决定企业产品结构是否合理的外在因素。<br />
企业实力包括市场占有率、技术、设备、资金利用能力等,其中市场占有率是决定企业产品结构的内在因素,他直接显示出企业的竞争实力。
</p>
<img src="@/assets/images/u3678.png" alt="" /><br />
<span style="line-height: 25px; font-size: 14px">
波士顿矩阵将产品类型分为四种:<br />
1,明星类产品:高增长且高市占,发展前景好,竞争力强,需加大投资以支持其发展;<br />
2,问题类产品:高增长但低市占,发展前景好但市场开拓不足,需谨慎投资;<br />
3,现金牛产品:低增长但高市占,成熟市场的领导者,应降低投资,维持市占并延缓衰退;<br />
4,瘦狗类产品:低增长且低市占,理论率低甚至亏损,应采取撤退战略。 </span
><br /><br />
<span style="line-height: 25px; font-size: 14px">
当波士顿矩阵应用于客户画像时候,可以大致分析出不同用户的客户画像:<br />
1、消费次数超过平均值,每次消费力度也超过平均水平的客户:判定为明星客户,这类客户需要重点关注,并给予最高的礼遇;<br />
2、消费次数超过平均值,但每次消费力度未达到平均水平的客户:被判定为现金流客户,这类客户通常消费频次比较频繁,能给企业带来较为稳定的现金流,这类客户是企业利润基石;<br />
3、消费未达到平均值,但每次消费力度超过平均水平的客户:是问题客户,这类客户最有希望转化为明星客户,但是因为客户存在一定的潜在问题,导致消费频次不高,这类客户需要利用客服进行重点跟进和长期跟踪;<br />
4、消费未达到平均值,消费力度也未达到平均水平的客户:属于瘦狗客户,这类客户通常占企业客户的大多数,只需要一般性维护,不需要投入重点维系。<br /> </span
><br />
<img src="@/assets/images/u3682.png" alt="" />
</template>
</pop-modal>
</div> </div>
</template> </template>
<script setup> <script setup>
import { getUserInfo } from '@/utils/auth' import popModal from "@/views/components/popModal.vue";
import { getUserInfo } from "@/utils/auth";
import * as echarts from "echarts"; import * as echarts from "echarts";
import { Chart } from "@antv/g2"; import { Chart } from "@antv/g2";
import * as portraitModel from "@/api/portraitModel"; import * as portraitModel from "@/api/portraitModel";
import { downBlobFile } from "@/utils/index.js"; import { downBlobFile } from "@/utils/index.js";
import { onMounted } from "vue"; import { onMounted } from "vue";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const dialogVisible = ref(false);
const knowledgeFlag = ref(false); const knowledgeFlag = ref(false);
const step1Data = ref([ const step1Data = ref([
{ {
@ -615,6 +644,10 @@ onMounted(() => {
step3EchartInit(); step3EchartInit();
step4EchartInit(); step4EchartInit();
step5EchartInit(); step5EchartInit();
getData();
});
onBeforeUnmount(() => {
saveData();
}); });
const drawPoint = (point, color) => { const drawPoint = (point, color) => {
// console.log(point); // console.log(point);
@ -1312,9 +1345,141 @@ const submitData = () => {
}) })
.catch((error) => {}); .catch((error) => {});
}; };
const saveData = () => {
const params = {
stepFiveA: step1Data.value[0].params1,
stepFiveB: step1Data.value[0].params2,
stepFiveC: step1Data.value[1].params1,
stepFiveD: step1Data.value[1].params2,
stepSixA: step1Data.value[2].params1,
stepSixB: step1Data.value[2].params2,
stepSixC: step1Data.value[3].params1,
stepSixD: step1Data.value[3].params2,
stepSevenA: step2Data.value[4].params1,
stepSevenB: step2Data.value[4].params2,
// stepSevenC: step2Data.value[4].params,
// stepSevenD: step2Data.value[5].params,
// stepEightA: step2Data.value[6].params,
// stepEightB: step2Data.value[7].params,
// stepEightC: step2Data.value[8].params,
// stepEightD: step2Data.value[9].params,
// stepNineA: step2Data.value[10].params,
// stepNineB: step2Data.value[11].params,
// stepNineC: step2Data.value[12].params,
// stepNineD: step2Data.value[13].params,
// stepTenA: step2Data.value[14].params,
// stepTenB: step2Data.value[15].params,
// stepTenC: step2Data.value[16].params,
// stepTenD: step2Data.value[17].params,
// stepElevenA: step2Data.value[18].params,
// stepOneA: step2Data.value[19].params,
// stepOneB: step2Data.value[20].params,
// stepOneC: step2Data.value[21].params,
// stepOneD: step2Data.value[22].params,
// stepTwoA: step2Data.value[23].params,
// stepTwoB: step2Data.value[24].params,
// stepTwoC: step2Data.value[25].params,
// stepThreeA: step2Data.value[26].params,
// stepThreeB: step2Data.value[27].params,
// stepThreeC: step2Data.value[28].params,
// stepThreeD: step2Data.value[29].params,
// stepFourA: step2Data.value[30].params,
// stepFourB: step2Data.value[31].params,
// stepFourC: step2Data.value[32].params,
// stepFourD: step2Data.value[33].params,
// stepNewOne: step2Data.value[34].params,
// stepNewTwo: step2Data.value[35].params,
// stepNewThree: step2Data.value[36].params,
// stepNewFive: step5DataTable3.value[3].params2,
// stepNewSix: step5DataTable3.value[4].params1,
// stepNewEight: step5DataTable3.value[4].params2,
};
portraitModel
.saveData({
userId: JSON.parse(getUserInfo()).userId,
module: "波士顿矩阵分析",
...params,
})
.then((res) => {})
.catch((error) => {});
};
const getData = () => {
portraitModel
.getData({
userId: JSON.parse(getUserInfo()).userId,
module: "波士顿矩阵分析",
})
.then((res) => {
step1Data.value[0].params1 = res.data.stepFiveA;
step1Data.value[0].params2 = res.data.stepFiveB;
step1Data.value[1].params1 = res.data.stepFiveC;
step1Data.value[1].params2 = res.data.stepFiveD;
step1Data.value[2].params1 = res.data.stepSixA;
step1Data.value[2].params2 = res.data.stepSixB;
step1Data.value[3].params1 = res.data.stepSixC;
step1Data.value[3].params2 = res.data.stepSixD;
step2Data.value[4].params1 = res.data.stepSevenA;
step2Data.value[4].params2 = res.data.stepSevenB;
// step2Data.value[4].params = res.data.stepSevenC;
// step2Data.value[5].params = res.data.stepSevenD;
// step2Data.value[6].params = res.data.stepEightA;
// step2Data.value[7].params = res.data.stepEightB;
// step2Data.value[8].params = res.data.stepEightC;
// step2Data.value[9].params = res.data.stepEightD;
// step2Data.value[10].params = res.data.stepNineA;
// step2Data.value[11].params = res.data.stepNineB;
// step2Data.value[12].params = res.data.stepNineC;
// step2Data.value[13].params = res.data.stepNineD;
// step2Data.value[14].params = res.data.stepTenA;
// step2Data.value[15].params = res.data.stepTenB;
// step2Data.value[16].params = res.data.stepTenC;
// step2Data.value[17].params = res.data.stepTenD;
// step2Data.value[18].params = res.data.stepElevenA;
// step2Data.value[19].params = res.data.stepOneA;
// step2Data.value[20].params = res.data.stepOneB;
// step2Data.value[21].params = res.data.stepOneC;
// step2Data.value[22].params = res.data.stepOneD;
// step2Data.value[23].params = res.data.stepTwoA;
// step2Data.value[24].params = res.data.stepTwoB;
// step2Data.value[25].params = res.data.stepTwoC;
// step2Data.value[26].params = res.data.stepThreeA;
// step2Data.value[27].params = res.data.stepThreeB;
// step2Data.value[28].params = res.data.stepThreeC;
// step2Data.value[29].params = res.data.stepThreeD;
// step2Data.value[30].params = res.data.stepFourA;
// step2Data.value[31].params = res.data.stepFourB;
// step2Data.value[32].params = res.data.stepFourC;
// step2Data.value[33].params = res.data.stepFourD;
// step2Data.value[34].params = res.data.stepNewOne;
// step2Data.value[35].params = res.data.stepNewTwo;
// step2Data.value[36].params = res.data.stepNewThree;
// step5DataTable3.value[3].params2 = res.data.stepNewFive;
// step5DataTable3.value[4].params1 = res.data.stepNewSix;
// step5DataTable3.value[4].params2 = res.data.stepNewEight;
})
.catch((error) => {});
};
const retrain = () => {
// console.log(666);
portraitModel
.retrain({
userId: JSON.parse(getUserInfo()).userId,
module: "波士顿矩阵分析",
})
.then((res) => {
proxy.$modal.msgSuccess("重新实训成功");
for (let i in step1Data.value) {
step1Data.value[i].params1 = "";
step1Data.value[i].params2 = "";
}
step2Data.value[4].params1 = "";
step2Data.value[4].params2 = "";
})
.catch((error) => {});
};
defineExpose({ defineExpose({
submitData, submitData,
// retrain, retrain,
// practicalTraining, // practicalTraining,
}); });
</script> </script>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,11 +1,11 @@
<template> <template>
<div class="content"> <div class="content">
<div class="import" @click="knowledgeFlag = !knowledgeFlag"> <div class="import" @click="dialogVisible = true">
<img src="@/assets/images/导入.png" alt="" /> <img src="@/assets/images/导入.png" alt="" />
<span>任务知识导入</span> <span>任务知识导入</span>
</div> </div>
<div v-html="knowledge" v-if="knowledgeFlag"></div> <!-- <div v-html="knowledge" v-if="knowledgeFlag"></div> -->
<div v-if="!knowledgeFlag"> <div>
<div class="caseBack"> <div class="caseBack">
<div class="title"> <div class="title">
<img src="@/assets/images/caseIcon.png" alt="" /> <img src="@/assets/images/caseIcon.png" alt="" />
@ -93,7 +93,7 @@
<div style="margin-top: 10px; display: flex"> <div style="margin-top: 10px; display: flex">
<el-table <el-table
:data="step2Data" :data="step2Data"
style="width: 650px" style="width: 720px"
border border
:header-cell-style="{ :header-cell-style="{
color: '#fff', color: '#fff',
@ -105,7 +105,7 @@
</el-table-column> </el-table-column>
<el-table-column label="用户名称" align="center" prop="userName"> <el-table-column label="用户名称" align="center" prop="userName">
</el-table-column> </el-table-column>
<el-table-column label="最近一次消费时间间隔(R)" align="center"> <el-table-column label="最近一次消费时间间隔(R)" align="center" width="210">
<template #default="scope"> <template #default="scope">
<el-input <el-input
v-model="scope.row.params1" v-model="scope.row.params1"
@ -168,6 +168,7 @@
label="最近一次消费时间间隔(R)" label="最近一次消费时间间隔(R)"
align="center" align="center"
prop="data2" prop="data2"
width="210"
> >
</el-table-column> </el-table-column>
<el-table-column label="消费频率(F)" align="center" prop="data3"> <el-table-column label="消费频率(F)" align="center" prop="data3">
@ -189,7 +190,7 @@
<div style="margin-top: 10px; display: flex"> <div style="margin-top: 10px; display: flex">
<el-table <el-table
:data="step4Data" :data="step4Data"
style="width: 980px" style="width: 1080px"
border border
:header-cell-style="{ :header-cell-style="{
color: '#fff', color: '#fff',
@ -210,7 +211,7 @@
label="最近一次消费时间间隔(R)" label="最近一次消费时间间隔(R)"
align="center" align="center"
prop="data3" prop="data3"
width="150" width="210"
> >
</el-table-column> </el-table-column>
<el-table-column label="消费频率(F)" align="center" prop="data4"> <el-table-column label="消费频率(F)" align="center" prop="data4">
@ -511,14 +512,51 @@
</div> </div>
</div> </div>
</div> </div>
<el-dialog
v-model="dialogVisible"
title="任务知识导入"
style="width: 1108px; height: 798px"
custom-class="dialogClass"
:show-close="false"
class="dialog"
>
<template #header="{ close, titleId, titleClass }">
<div class="my-header">
<span :id="titleId" :class="titleClass">任务知识导入</span>
<img
class="gbImg"
src="../../../assets/images/关闭.png"
@click="close"
alt=""
/>
</div>
<img class="xtImg" src="../../../assets/images/线条.png" alt="" />
</template>
<div style="color:#fff;margin-top:-35px;padding:10px;padding-left:20px">
<el-scrollbar height="650px">
<div v-html="knowledge">
</div>
</el-scrollbar>
</div>
<!-- <template #footer>
<div class="dialog-footer">
<el-button @click="dialogVisible = false">确定</el-button>
<el-button type="primary" @click="dialogVisible = false">
返回
</el-button>
</div>
</template> -->
</el-dialog>
</div> </div>
</template> </template>
<script setup> <script setup>
import { getUserInfo } from '@/utils/auth' import { getUserInfo } from "@/utils/auth";
import * as portraitModel from "@/api/portraitModel"; import * as portraitModel from "@/api/portraitModel";
import { downBlobFile } from "@/utils/index.js"; import { downBlobFile } from "@/utils/index.js";
import { onBeforeUnmount, onMounted } from "vue"; import { onBeforeUnmount, onMounted } from "vue";
const dialogVisible = ref(false);
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const errorNum = ref(0); //总错误次数 const errorNum = ref(0); //总错误次数
const stepError1 = ref(0); const stepError1 = ref(0);
@ -1318,4 +1356,40 @@ const tableSpanMethod = ({ row, column, rowIndex, columnIndex }) => {
background-color: #002652 !important; background-color: #002652 !important;
color: #fff; color: #fff;
} }
::v-deep .el-dialog {
background: url("../../../assets/images/弹框@2x.png") !important;
background-size: 1108px 798px !important;
.el-dialog__header {
padding: 5px 0px;
margin-right: 5px !important;
.gbImg {
cursor: pointer;
margin-top: 3px;
// margin-left: -30px;
width: 51px;
height: 35px;
background-size: 100% 100%;
}
}
.xtImg {
margin-left: 18px;
width: 530px;
}
}
.my-header {
display: flex;
flex-direction: row;
justify-content: space-between;
gap: 16px;
text-align: center;
margin-right: 9px;
margin-bottom: 0;
span {
color: #ffffff;
padding: 38px 20px 0;
margin-top: 10px;
margin-left: 20px;
}
}
</style> </style>

File diff suppressed because one or more lines are too long

@ -13,10 +13,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="btn" v-if="currentComponent">
<div class="submit" @click="submit">提交任务</div>
<div class="retrain" @click="retrain">重新实训</div>
</div>
<div class="container" v-if="menuIndex != 0"> <div class="container" v-if="menuIndex != 0">
<div class="leftContent"> <div class="leftContent">
<div class="title"> <div class="title">
@ -45,9 +42,9 @@
<el-menu-item index="4"> <el-menu-item index="4">
<span>用户行为表</span> <span>用户行为表</span>
</el-menu-item> </el-menu-item>
<el-menu-item index="5"> <!-- <el-menu-item index="5">
<span>用户评论表</span> <span>用户评论表</span>
</el-menu-item> </el-menu-item> -->
</el-menu> </el-menu>
</div> </div>
<div class="table"> <div class="table">
@ -61,7 +58,7 @@
background: `linear-gradient(0deg, #002651 0%, #0087F9 100%)`, background: `linear-gradient(0deg, #002651 0%, #0087F9 100%)`,
}" }"
> >
<el-table-column label="用户ID" align="center" prop="id"> <el-table-column label="用户ID" align="center" prop="userId">
</el-table-column> </el-table-column>
<el-table-column label="登录名" align="center" prop="loginName"> <el-table-column label="登录名" align="center" prop="loginName">
</el-table-column> </el-table-column>
@ -96,29 +93,29 @@
background: `linear-gradient(0deg, #002651 0%, #0087F9 100%)`, background: `linear-gradient(0deg, #002651 0%, #0087F9 100%)`,
}" }"
> >
<el-table-column label="用户ID" align="center" prop="a1"> <el-table-column label="用户ID" align="center" prop="userId">
</el-table-column> </el-table-column>
<el-table-column label="登录名" align="center" prop="a1"> <el-table-column label="登录名" align="center" prop="loginName">
</el-table-column> </el-table-column>
<el-table-column label="用户姓名" align="center" prop="a1"> <el-table-column label="用户姓名" align="center" prop="userName">
</el-table-column> </el-table-column>
<el-table-column label="学号" align="center" prop="a1"> <el-table-column label="学号" align="center" prop="studentId">
</el-table-column> </el-table-column>
<el-table-column label="班级" align="center" prop="a1"> <el-table-column label="班级" align="center" prop="stuClass">
</el-table-column> </el-table-column>
<el-table-column label="专业" align="center" prop="a1"> <el-table-column label="专业" align="center" prop="major">
</el-table-column> </el-table-column>
<el-table-column label="学校" align="center" prop="a1"> <el-table-column label="学校" align="center" prop="school">
</el-table-column> </el-table-column>
<el-table-column label="角色名称" align="center" prop="a1"> <el-table-column label="角色名称" align="center" prop="roleName">
</el-table-column> </el-table-column>
<el-table-column label="常登录地" align="center" prop="a1"> <el-table-column label="常登录地" align="center" prop="frequentLoginLocation">
</el-table-column> </el-table-column>
<el-table-column label="最近登录日期" align="center" prop="a1"> <el-table-column label="最近登录日期" align="center" prop="lastLoginDate">
</el-table-column> </el-table-column>
<el-table-column label="登录频次" align="center" prop="a1"> <el-table-column label="登录频次" align="center" prop="loginFrequency">
</el-table-column> </el-table-column>
<el-table-column label="登录时长" align="center" prop="a1"> <el-table-column label="登录时长" align="center" prop="loginDuration">
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-table <el-table
@ -150,7 +147,7 @@
<el-table-column <el-table-column
label="消费商品小类" label="消费商品小类"
align="center" align="center"
prop="a1" prop="consumerGoods"
width="110" width="110"
> >
</el-table-column> </el-table-column>
@ -207,54 +204,54 @@
background: `linear-gradient(0deg, #002651 0%, #0087F9 100%)`, background: `linear-gradient(0deg, #002651 0%, #0087F9 100%)`,
}" }"
> >
<el-table-column label="用户ID" align="center" prop="a1"> <el-table-column label="用户ID" align="center" prop="userId">
</el-table-column> </el-table-column>
<el-table-column label="登录名" align="center" prop="a1"> <el-table-column label="登录名" align="center" prop="loginName">
</el-table-column> </el-table-column>
<el-table-column label="用户姓名" align="center" prop="a1"> <el-table-column label="用户姓名" align="center" prop="userName">
</el-table-column> </el-table-column>
<el-table-column label="学号" align="center" prop="a1"> <el-table-column label="学号" align="center" prop="studentId">
</el-table-column> </el-table-column>
<el-table-column label="班级" align="center" prop="a1"> <el-table-column label="班级" align="center" prop="stuClass">
</el-table-column> </el-table-column>
<el-table-column label="专业" align="center" prop="a1"> <el-table-column label="专业" align="center" prop="major">
</el-table-column> </el-table-column>
<el-table-column label="学校" align="center" prop="a1"> <el-table-column label="学校" align="center" prop="school">
</el-table-column> </el-table-column>
<el-table-column label="角色名称" align="center" prop="a1"> <el-table-column label="角色名称" align="center" prop="roleName">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
label="商品名称" label="商品名称"
align="center" align="center"
prop="a1" prop="goodsName"
width="110" width="110"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
label="商品小类" label="商品小类"
align="center" align="center"
prop="a1" prop="goodsSubcategories"
width="110" width="110"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
label="商品类型" label="商品类型"
align="center" align="center"
prop="a1" prop="goodsType"
width="110" width="110"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
label="用户行为类型" label="用户行为类型"
align="center" align="center"
prop="a1" prop="userBehaviorType"
width="110" width="110"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
label="行为日期" label="行为日期"
align="center" align="center"
prop="a1" prop="behaviorDate"
width="130" width="130"
> >
</el-table-column> </el-table-column>
@ -266,6 +263,10 @@
:currentComponent="currentComponent" :currentComponent="currentComponent"
ref="contentRef" ref="contentRef"
></main-content> ></main-content>
<div class="btn" v-if="currentComponent">
<div class="submit" @click="submit">提交任务</div>
<div class="retrain" @click="retrain">重新实训</div>
</div>
</div> </div>
</template> </template>
@ -409,29 +410,33 @@ const retrain = () => {
color: #fff; color: #fff;
.tabList { .tabList {
// display: flex; // display: flex;
width: 1060px; // width: 1060px;
.tabs { .tabs {
cursor: pointer; cursor: pointer;
font-size: 14px; font-size: 12px;
margin-right: 20px; margin-right: 4px;
margin-bottom: 20px; margin-bottom: 20px;
width: 188px; width: 159px;
height: 61px; height: 56px;
background-image: url("@/assets/images/itembg1.png"); background-image: url("@/assets/images/itembg1.png");
background-size: 159px 56px;
// display: flex; // display: flex;
// justify-content: center; // justify-content: center;
// align-items: center; // align-items: center;
padding-left: 30px; padding-left: 15px;
line-height: 60px; line-height: 56px;
display: inline-block; display: inline-block;
img { img {
margin-right: 15px; margin-right: 5px;
} }
} }
.tabs:nth-of-type(2), .tabs:nth-of-type(2),
.tabs:nth-of-type(9) { .tabs:nth-of-type(9) {
background-image: url("@/assets/images/itembg2.png"); background-image: url("@/assets/images/itembg2.png");
} }
.tabs:nth-of-type(9) {
font-size: 11px;
}
.tabs:nth-of-type(3), .tabs:nth-of-type(3),
.tabs:nth-of-type(10) { .tabs:nth-of-type(10) {
background-image: url("@/assets/images/itembg3.png"); background-image: url("@/assets/images/itembg3.png");
@ -456,10 +461,13 @@ const retrain = () => {
} }
} }
.btn { .btn {
width: 220px;
margin: 0 auto;
display: flex; display: flex;
position: absolute; // position: absolute;
right: 70px; // right: 140px;
top: 110px; // bottom: 0px;
margin-top: 10px;
.submit { .submit {
width: 99px; width: 99px;
height: 31px; height: 31px;

Loading…
Cancel
Save