对图片进行压缩

dev-QQq
qinzhenpen 2 years ago
parent 7223186619
commit b5c1182431

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -133,7 +133,7 @@ export function uploadFile(data) {
export function getCommentPoint(data) {
return request({
url: "/v1/singleEmotionAnalysis/",
baseURL: "http://192.168.2.14:8000",
baseURL: "http://118.31.7.2:8000",
method: "post",
data: data,
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 658 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 902 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 902 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 742 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 890 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 890 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 742 B

@ -1,118 +1,133 @@
.gdialog{
p{
color:black !important;
.gdialog {
p {
color: black !important;
}
// img{
// max-width: 900px;
// max-height: 400px;
// }
// box-shadow: none !important;
// border: 1px solid #e5e5e5;
border-radius: 5px;
.el-dialog__headerbtn{
top:2px;
.el-dialog__close{
color: #FFFFFF;
border-radius: 5px;
.el-dialog__title {
font-weight: 600 !important;
font-size: 20px !important;
}
.el-dialog__headerbtn {
top: 2px;
.el-dialog__close {
color: #FFFFFF;
width: 1.5em;
height: 1.5em;
svg {
width: 1.5em;
height: 1.5em;
}
}
&:not(.is-fullscreen) {
// margin-top: 36vh !important;
// margin-left: 26vh;
}
&:not(.is-fullscreen) {
// margin-top: 36vh !important;
// margin-left: 26vh;
}
.el-dialog__header {
background: linear-gradient(-90deg, #2c04c9 0%, #5197ff 100%);
// border-radius: 5px 5px 0px 0px;
margin-right: 0px;
padding-bottom: 0px;
padding: 15px 15px;
.el-dialog__title {
font-size: 18px;
font-family: Source Han Sans CN;
font-weight: 500;
color: #ffffff !important;
}
.el-dialog__header {
background: linear-gradient(-90deg, #2c04c9 0%, #5197ff 100%);
// border-radius: 5px 5px 0px 0px;
margin-right: 0px;
padding-bottom:0px;
padding: 15px 15px;
.el-dialog__title {
font-size: 18px;
font-family: Source Han Sans CN;
font-weight: 500;
color: #ffffff !important;
}
.el-dialog__body {
.Terminal {
display: flex;
align-items: center;
gap: 78px;
padding-bottom: 40px;
border-bottom: 2px dashed #e5e5e5;
font-size: 12px;
font-family: Source Han Sans CN;
font-weight: 400;
color: #333333;
.Terminal-item {
position: relative;
display: flex;
align-items: center;
flex-direction: column;
width: 110px;
height: 110px;
border: 1px solid #cdcdcd;
border-radius: 10px;
//
cursor: pointer;
img {
width: 100%;
height: 100%;
margin-bottom: 11px;
}
}
}
.el-dialog__body {
.Terminal {
span:nth-child(3) {
display: block;
margin-: 20px;
}
.lication {
margin-top: 27px;
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 78px;
.lication-item {
display: flex;
align-items: center;
gap: 78px;
padding-bottom: 40px;
border-bottom: 2px dashed #e5e5e5;
flex-direction: column;
width: 110px;
height: 110px;
border: 1px solid #cdcdcd;
border-radius: 10px;
font-size: 12px;
font-family: Source Han Sans CN;
font-weight: 400;
color: #333333;
.Terminal-item {
position: relative;
display: flex;
align-items: center;
flex-direction: column;
width: 110px;
height: 110px;
border: 1px solid #cdcdcd;
border-radius: 10px;
//
cursor: pointer;
img {
width: 100%;
height: 100%;
margin-bottom: 11px;
}
}
}
span:nth-child(3) {
display: block;
margin-: 20px;
}
.lication {
margin-top: 27px;
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 78px;
.lication-item {
display: flex;
align-items: center;
flex-direction: column;
width: 110px;
height: 110px;
border: 1px solid #cdcdcd;
border-radius: 10px;
font-size: 12px;
font-family: Source Han Sans CN;
font-weight: 400;
color: #333333;
cursor: pointer;
img {
width: 100%;
height: 100%;
margin-bottom: 11px;
}
cursor: pointer;
img {
width: 100%;
height: 100%;
margin-bottom: 11px;
}
}
}
}
.el-dialog__footer {
text-align: center;
.el-button:nth-child(1) {
background: url("@/assets/images/szjj/提交任务.png") no-repeat;
background-size: 100% 100%;
}
.el-dialog__footer {
text-align: center;
.el-button:nth-child(1) {
background: url("@/assets/images/szjj/提交任务.png") no-repeat;
background-size: 100% 100%;
}
.el-button:nth-child(2) {
background: url("@/assets/images/szjj/重新开始.png") no-repeat;
background-size: 100% 100%;
}
.el-button--large.is-round {
padding: 12px 20px 12px 40px !important;
}
.el-button{
width: 136px;
height: 40px;
padding: 12px 20px 12px 40px !important;
font-size: 15px;
border: none;
color: #ffffff;
}
.el-button:nth-child(2) {
background: url("@/assets/images/szjj/重新开始.png") no-repeat;
background-size: 100% 100%;
}
.el-button--large.is-round {
padding: 12px 20px 12px 40px !important;
}
.el-button {
width: 136px;
height: 40px;
padding: 12px 20px 12px 40px !important;
font-size: 15px;
border: none;
color: #ffffff;
}
}
}

@ -16,7 +16,7 @@
-webkit-transition: width .28s;
transition: width 0.28s;
width: 239px !important;
background:url('../images/sidebar-background.png') no-repeat center;
background:url('../images/sidebar-background.webp') no-repeat center;
// background-color: $base-menu-background;
background-size: 100% 100%;
height: 100%;

@ -17,8 +17,8 @@ axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
const service = axios.create({
// axios中请求配置有baseURL选项表示请求URL公共部分
// baseURL: import.meta.env.VITE_APP_BASE_API,
// baseURL: "http://118.31.7.2:9868/",
baseURL:'http://192.168.2.14:9868/',
baseURL: "http://118.31.7.2:9868/",
// baseURL:'http://192.168.2.14:9868/',
// 超时
timeout: 100000,
});

@ -24,7 +24,7 @@
</div>
<div class="metrics">
<el-select v-model="input" placeholder="请选择" style="width: 180px" @change="optionData">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
<el-option v-for="item in algorithmStore.userDataLabel" :key="item" :label="item" :value="item" />
</el-select>
</div>
<div class="metrics-table" style="margin-top: 10px">
@ -325,6 +325,8 @@
</template>
<script setup>
import useAlgorithmStore from "@/store/modules/algorithm.js";
const algorithmStore = useAlgorithmStore();
import * as portraitModel from "@/api/portraitModel";
import * as echarts from "echarts";
import * as XLSX from "XLSX";
@ -458,6 +460,7 @@ const flag = ref(false);
onMounted(() => {
getList();
optionData()
});
const optionData = () => {
API.viewingMetrics({ userId: JSON.parse(getUserInfo()).userId, tableName: input.value, algorithmName: "关联规则挖掘" }).then((res) => {
@ -503,7 +506,7 @@ const formInline = reactive({
user: "",
region: "",
});
const input = ref();
const input = ref(algorithmStore.userDataLabel[0]);
const options = ref([]);
const input2 = ref();
const options2 = ref([

@ -1,29 +1,29 @@
<template>
<!-- <el-scrollbar ref="scrollbar" height="800px"> -->
<div class="main-top">
<span style="font-weight: bold; font-size: 18px; color: #3596eb">任务描述</span>
<p style="font-weight: 400; font-size: 12px; color: #e6e6e6">使用客户细分数据对客户进行聚类分析并提交实训任务</p>
</div>
<div class="main-but">
<el-button @click="algorithmicKnowledge()">
<img src="../../../assets/images/导入.png" alt="" />
算法知识导入
</el-button>
<el-button @click="taskSubmit">
<img src="../../../assets/images/提交.png" alt="" />
实训任务提交
</el-button>
</div>
<div class="app-main">
<div class="main-left">
<el-scrollbar height="640px" style="padding: 0 10px" min-size="5">
<div class="main-top">
<span style="font-weight: bold; font-size: 18px; color: #3596eb">任务描述</span>
<p style="font-weight: 400; font-size: 12px; color: #e6e6e6">使用客户细分数据对客户进行聚类分析并提交实训任务</p>
</div>
<div class="main-but">
<el-button @click="algorithmicKnowledge()">
<img src="../../../assets/images/导入.png" alt="" />
算法知识导入
</el-button>
<el-button @click="taskSubmit">
<img src="../../../assets/images/提交.png" alt="" />
实训任务提交
</el-button>
</div>
<div class="app-main">
<div class="main-left">
<el-scrollbar height="640px" style="padding: 0 10px" min-size="5">
<div>
<div class="left-top">
<span>选择指标</span>
</div>
<div class="metrics">
<el-select v-model="input" placeholder="请选择" style="width: 180px" @change="optionData">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
<el-option v-for="item in algorithmStore.userDataLabel" :key="item" :label="item" :value="item" />
</el-select>
</div>
<div class="metrics-table" style="margin-top: 10px">
@ -68,13 +68,12 @@
</div>
</div>
<div style="margin-top: auto">
<div class="startOver" @click="startOver()">
<img src="../../../assets/images/重新开始.png" alt="" />
<span>重新开始</span>
<div class="startOver" @click="startOver()">
<img src="../../../assets/images/重新开始.png" alt="" />
<span>重新开始</span>
</div>
</div>
</div>
</el-scrollbar>
</div>
<div class="main-right">
<el-scrollbar height="500px" ref="scrollbar" style="padding: 20px">
@ -156,14 +155,15 @@
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;聚类分析是一种探索性分析方法与判别分析不同聚类分析事先并不知道分类的标准甚至不知道应该分成几类而是会根据样本数据的特征自动进行分类
</p>
<img src="@/assets/images/f1001.png" style="width: 600px;height: 400px;"/>
<img src="@/assets/images/f1001.png" style="width: 600px; height: 400px" />
<p>聚类与分类的不同在于聚类所要求划分的类是未知的</p>
<img src="@/assets/images/f1002.png" style="width: 600px;height: 300px;"/><br />
<img src="@/assets/images/f1003.png" style="width: 600px;height: 300px;"/>
<img src="@/assets/images/f1002.png" style="width: 600px; height: 300px" />
<br />
<img src="@/assets/images/f1003.png" style="width: 600px; height: 300px" />
<!-- <img src="@/assets/images/f1005.png" style="width: 1100px;height: 400px;"/> -->
<li style="font-size:18px">从统计学的观点看聚类分析是通过数据建模简化数据的一种方法</li>
<li style="font-size:18px">从机器学习的角度看簇相当于隐藏模式聚类是搜索簇的无监督学习过程</li>
<li style="font-size:18px">从实际应用的角度看聚类分析是数据预处理(降维)和信息挖掘的主要任务之一</li>
<li style="font-size: 18px">从统计学的观点看聚类分析是通过数据建模简化数据的一种方法</li>
<li style="font-size: 18px">从机器学习的角度看簇相当于隐藏模式聚类是搜索簇的无监督学习过程</li>
<li style="font-size: 18px">从实际应用的角度看聚类分析是数据预处理(降维)和信息挖掘的主要任务之一</li>
<p style="font-size: 19px">2.原理</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;假定研究对象均用所谓的来表示
@ -172,14 +172,14 @@
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一般的规则
</p>
<img src="@/assets/images/f10010.png" style="width: 600px;height: 300px;"/>
<img src="@/assets/images/f10010.png" style="width: 600px; height: 300px" />
<br />
<img src="@/assets/images/f10011.png" />
<br />
<img src="@/assets/images/f10012.png" style="width: 600px;height: 300px;"/>
<img src="@/assets/images/f10012.png" style="width: 600px; height: 300px" />
<p style="font-weight: 700; font-size: 22px">聚类方法及其在SPSS中的实现</p>
<p style="font-size: 19px">1.主要的聚类方法</p>
<img src="@/assets/images/f10013.png" style="width: 600px;height: 300px;"/>
<img src="@/assets/images/f10013.png" style="width: 600px; height: 300px" />
<p style="font-size: 19px">2.方法详解</p>
<p style="font-size: 17px">1K-means聚类</p>
<p>
@ -187,13 +187,15 @@
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;具体步骤如下
</p>
<img src="@/assets/images/f10014.png" style="width: 600px;height: 300px;"/><br />
<img src="@/assets/images/f10015.png" style="width: 600px;height: 300px;"/>
<img src="@/assets/images/f10014.png" style="width: 600px; height: 300px" />
<br />
<img src="@/assets/images/f10015.png" style="width: 600px; height: 300px" />
<p>距离计算规则欧几里得距离公式</p>
<img src="@/assets/images/f10016.png" />
<p>图解</p>
<img src="@/assets/images/f10017.png" style="width: 600px;height: 300px;"/><br />
<img src="@/assets/images/f10018.png" style="width: 600px;height: 300px;"/>
<img src="@/assets/images/f10017.png" style="width: 600px; height: 300px" />
<br />
<img src="@/assets/images/f10018.png" style="width: 600px; height: 300px" />
<p>
K-means的优缺点
<br />
@ -217,17 +219,19 @@
<br />
通过查询整理出了2018年我国各省份的20项基本情况根据这些指标把这31个省市或地区分成3类
</p>
<img src="@/assets/images/f10019.png" style="width: 600px;height: 300px;"/>
<img src="@/assets/images/f10019.png" style="width: 600px; height: 300px" />
<p>分析步骤分析>>分类>>K-均值聚类>>迭代>>次数>>选项>>勾选统计>>确认</p>
<img src="@/assets/images/f10020.png" style="width: 600px;height: 400px;"/><br />
<img src="@/assets/images/f10021.png" style="width: 600px;"/>
<img src="@/assets/images/f10020.png" style="width: 600px; height: 400px" />
<br />
<img src="@/assets/images/f10021.png" style="width: 600px" />
<p>结果分析</p>
<img src="@/assets/images/f10022.png" /><br />
<img src="@/assets/images/f10022.png" />
<br />
<img src="@/assets/images/f10023.png" />
<p>若不收敛则调大迭代次数</p>
<img src="@/assets/images/f10024.png" />
<p>方差分析表</p>
<img src="@/assets/images/f10025.png" style="width: 600px;height: 400px;"/>
<img src="@/assets/images/f10025.png" style="width: 600px; height: 400px" />
<p>其中聚类均方对应组间均方差误差均方对应组内均方差显著性p&lt;0.05时说明此变量分类效果好由表可知大部分变量的p&lt;0.05,且组间均方差大于组内均方差说明各变量在三个类别中的差异大分类结果可信度高</p>
<img src="@/assets/images/f10026.png" />
<br />
@ -273,6 +277,8 @@
<script setup>
import * as portraitModel from "@/api/portraitModel";
import useAlgorithmStore from "@/store/modules/algorithm.js";
const algorithmStore = useAlgorithmStore();
import popModel from "@/views/components/popModal.vue";
import { htmlPdf } from "@/utils/pdf.js";
import * as echarts from "echarts";
@ -281,9 +287,9 @@ import JSZip from "jszip";
import * as API from "@/api/AI.js";
import { getUserInfo } from "@/utils/auth";
import { onMounted, reactive } from "vue";
const loading1=ref(false)
const loading2=ref(false)
const loading3=ref(false)
const loading1 = ref(false);
const loading2 = ref(false);
const loading3 = ref(false);
const runResultShow = ref(false);
const { proxy } = getCurrentInstance();
const dialogVisible = ref(false);
@ -297,18 +303,18 @@ const formInline2 = reactive({
value5: "",
});
const task = () => {
let errorNumber=0
let errorNumber = 0;
for (let key in formInline2) {
if (formInline2[key] == "") {
proxy.$modal.msgError("请填写完整!");
return;
}
}
if(formInline2.value1!=='3'){
errorNumber=1
if (formInline2.value1 !== "3") {
errorNumber = 1;
}
if(formInline2.value2!==input6.value){
errorNumber=1
if (formInline2.value2 !== input6.value) {
errorNumber = 1;
}
portraitModel
.submit({
@ -381,6 +387,7 @@ const addData = (myChart, newData, color) => {
onMounted(() => {
getList();
optionData()
var chartDom = document.getElementById("main");
var chartDom2 = document.getElementById("main2");
myChart = echarts.init(chartDom);
@ -414,48 +421,50 @@ onMounted(() => {
myChart2.setOption(option);
});
const optionData=()=>{
loading1.value=true
API.viewingMetrics({userId:JSON.parse(getUserInfo()).userId,tableName:input.value,algorithmName:'聚类分析'}).then((res)=>{
tableData.value=[]
input3.value=''
res.data.forEach(element => {
tableData.value.push({
text:element
})
})
loading1.value=false
}).catch(()=>{
loading1.value=false
const optionData = () => {
loading1.value = true;
API.viewingMetrics({ userId: JSON.parse(getUserInfo()).userId, tableName: input.value, algorithmName: "聚类分析" })
.then((res) => {
tableData.value = [];
input3.value = "";
res.data.forEach((element) => {
tableData.value.push({
text: element,
});
});
loading1.value = false;
})
.catch(() => {
loading1.value = false;
});
};
const selectedRows = ref([]);
const handleSelectionChange = (selection) => {
selectedRows.value = selection;
};
const tableData2 = ref([]);
const tableData3 = ref([]);
const resTable2 = ref();
const taskZB = () => {
flag.value = true;
if (selectedRows.value.length === 0) {
return;
}
const selectedRows = ref([]);
const handleSelectionChange = (selection) => {
selectedRows.value = selection;
};
const tableData2=ref([])
const tableData3=ref([])
const resTable2=ref()
const taskZB=()=>{
flag.value=true
if(selectedRows.value.length===0){
return
}
const sendData={
tableName:input.value,
userId:JSON.parse(getUserInfo()).userId,
fieldList:selectedRows.value.map(item=>item.text)
}
API.analysisDataDisplay(sendData).then((res)=>{
tableLabel.length=0
for (const key in res.data[0]) {
tableLabel.push({
label:key,
prop:key
})
}
tableData2.value=res.data
flag.value=true
const sendData = {
tableName: input.value,
userId: JSON.parse(getUserInfo()).userId,
fieldList: selectedRows.value.map((item) => item.text),
};
API.analysisDataDisplay(sendData).then((res) => {
tableLabel.length = 0;
for (const key in res.data[0]) {
tableLabel.push({
label: key,
prop: key,
});
}
tableData2.value = res.data;
flag.value = true;
// proxy.$modal.msgSuccess("!");
tableData2.value = res.data;
flag.value = true;
@ -465,7 +474,7 @@ const formInline = reactive({
user: "",
region: "",
});
const input = ref();
const input = ref(algorithmStore.userDataLabel[0]);
const options = ref([]);
const input2 = ref();
const options2 = ref([
@ -517,18 +526,20 @@ const optionData2 = () => {
method: input3.value,
userId: JSON.parse(getUserInfo()).userId,
});
loading2.value=true
API.dataPreprocessing(sendData.value).then((res) => {
resTable2.value = res.data;
tableData2.value = [];
tableData2.value = res.data;
proxy.$modal.msgSuccess("预处理成功!");
setTimeout(() => {
loading2.value=false
},500)
}).catch(()=>{
loading2.value=false
});
loading2.value = true;
API.dataPreprocessing(sendData.value)
.then((res) => {
resTable2.value = res.data;
tableData2.value = [];
tableData2.value = res.data;
proxy.$modal.msgSuccess("预处理成功!");
setTimeout(() => {
loading2.value = false;
}, 500);
})
.catch(() => {
loading2.value = false;
});
}
};
const showChart = ref(false);
@ -540,7 +551,7 @@ const clusterAnalysisCalculation = () => {
return;
}
if (input5.value && input6.value && input4.value) {
loading3.value=true
loading3.value = true;
const sendData = {
k: input5.value,
t: input6.value,
@ -604,11 +615,12 @@ const clusterAnalysisCalculation = () => {
addData(myChart2, res.data.centroid[key], "red");
});
setTimeout(() => {
loading3.value=false
},500)
loading3.value = false;
}, 500);
});
}).catch(()=>{
loading3.value=false
})
.catch(() => {
loading3.value = false;
});
nextTick(() => {
setTimeout(() => {

@ -482,7 +482,6 @@ const submitTask = () => {
const label = tableLabel.find((item) => item.prop == key);
flat.value = true;
proxy.$modal.msgWarning(`${label.label}错误`);
return;
}
}
}

@ -601,7 +601,6 @@ const submitTask = () => {
const label = tableLabel.find((item) => item.prop == key);
proxy.$modal.msgWarning(`${label.label}错误`);
flat.value = true;
return;
}
}
}
@ -618,6 +617,7 @@ const submitTask = () => {
};
//
const restart = () => {
downloadStatus.value = false;
//
formInline.value = {
max: "",
@ -792,6 +792,7 @@ const clear = () => {
g_analyzeTheNumberOfDataItems.value = "";
aWordFrequency.value = [];
loading.value = false;
downloadStatus.value = false;
proxy.$modal.msgSuccess("清空成功");
};
const initChart = () => {
@ -916,7 +917,7 @@ const switchingModels = () => {
width: 205px;
height: 100%;
background: #041c49;
padding: 0px 10px;
padding: 11px 10px;
.left-top {
padding: 10px;
span {

@ -23,7 +23,7 @@
</div>
<div class="metrics">
<el-select v-model="input" placeholder="请选择" style="width: 180px" @change="optionData">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
<el-option v-for="item in algorithmStore.userDataLabel" :key="item" :label="item" :value="item" />
</el-select>
</div>
<div class="metrics-table" style="margin-top: 10px">
@ -74,13 +74,12 @@
</div>
</div>
<div style="margin-top: auto">
<div class="startOver" @click="startOver()">
<img src="../../../assets/images/重新开始.png" alt="" />
<span>重新开始</span>
<div class="startOver" @click="startOver()">
<img src="../../../assets/images/重新开始.png" alt="" />
<span>重新开始</span>
</div>
</div>
</div>
</el-scrollbar>
</div>
<div class="main-right">
<el-scrollbar height="500px" ref="scrollbar" style="padding: 20px">
@ -176,7 +175,7 @@
</p>
<p style="font-size: 19px; font-weight: 600">相关关系的描述与测量</p>
<li>散点图可以通过散点图判断两个变量之间有无相关关系并对变量间的关系形态做出大致的描述</li>
<img src="@/assets/images/f3001.png" alt="" style="height:500px"/>
<img src="@/assets/images/f3001.png" alt="" style="height: 500px" />
<li>相关系数是度量变量之间线性关系强度的一个统计量</li>
<p>
若相关系数是根据总体全部数据计算的称为总体相关系数记为ρ
@ -262,7 +261,7 @@
<p style="font-size: 19px; font-weight: 600">参数的最小二乘估计</p>
<img src="@/assets/images/f3012.png" alt="" />
<br />
<img src="@/assets/images/f3013.png" alt="" style="height: 400px;width: 400px;"/>
<img src="@/assets/images/f3013.png" alt="" style="height: 400px; width: 400px" />
<br />
<img src="@/assets/images/f3014.png" alt="" />
<p style="font-size: 19px; font-weight: 600">回归直线的拟合优度</p>
@ -293,12 +292,13 @@
求出因变量y yy的平均值的估计区间这一估计区间称为置信区间
</li>
<p>比平均值的公式根号内多了个1而已</p>
<img src="@/assets/images/f3023.png" alt="" style="width: 600px;"/>
<img src="@/assets/images/f3023.png" alt="" style="width: 600px" />
<p style="font-size: 19px; font-weight: 600">残差分析</p>
<p style="font-size: 16px; font-weight: 600">残差与残差图检验方差齐性</p>
<li>残差因变量的观测值与根据估计的回归方程求出的预测值之差用e表示反映了用估计的回归方程去预测而引起的误差</li>
<img src="@/assets/images/f3024.png" alt="" /><br />
<img src="@/assets/images/f3025.png" alt="" style="width: 600px;height: 400px;"/>
<img src="@/assets/images/f3024.png" alt="" />
<br />
<img src="@/assets/images/f3025.png" alt="" style="width: 600px; height: 400px" />
<p style="font-size: 19px; font-weight: 600">标准化残差检验正态性</p>
<li>标准化残差也称为Pearson 残差或半学生化残差(semistudentized residuals)</li>
<img src="@/assets/images/f3026.png" alt="" />
@ -309,7 +309,8 @@
<script setup>
import * as portraitModel from "@/api/portraitModel";
import useAlgorithmStore from "@/store/modules/algorithm.js";
const algorithmStore = useAlgorithmStore();
import popModel from "@/views/components/popModal.vue";
import * as echarts from "echarts";
import * as API from "@/api/AI.js";
@ -325,35 +326,35 @@ const formInline3 = reactive({
});
const loading1 = ref(false);
const task = () => {
let errorNumber=0
let errorNumber = 0;
for (let key in formInline3) {
if (formInline3[key] == "") {
proxy.$modal.msgWarning("请填写完整!");
return;
}
}
if(input4.value==="线性回归"){
if(formInline3.value1!==tableData3.value[0].intercept.toString()){
errorNumber=1
if (input4.value === "线性回归") {
if (formInline3.value1 !== tableData3.value[0].intercept.toString()) {
errorNumber = 1;
}
if(formInline3.value2!==tableData3.value[0].slopes){
errorNumber=1
if (formInline3.value2 !== tableData3.value[0].slopes) {
errorNumber = 1;
}
if(parseFloat(formInline3.value3)!==parseFloat(predictionResults.value)){
errorNumber=1
if (parseFloat(formInline3.value3) !== parseFloat(predictionResults.value)) {
errorNumber = 1;
}
}else if(input4.value==="Logistic逻辑回归"){
if(formInline3.value1!==tableData3.value[0].intercept.toString()){
errorNumber=1
} else if (input4.value === "Logistic逻辑回归") {
if (formInline3.value1 !== tableData3.value[0].intercept.toString()) {
errorNumber = 1;
}
if(formInline3.value2!==tableData3.value[0].slope){
errorNumber=1
if (formInline3.value2 !== tableData3.value[0].slope) {
errorNumber = 1;
}
if(parseFloat(formInline3.value3)!==parseFloat(predictionResults.value)){
errorNumber=1
if (parseFloat(formInline3.value3) !== parseFloat(predictionResults.value)) {
errorNumber = 1;
}
}else{
errorNumber=1
} else {
errorNumber = 1;
}
portraitModel
.submit({
@ -397,14 +398,15 @@ const flag = ref(false);
onMounted(() => {
getList();
optionData();
});
const optionData = () => {
API.viewingMetrics({ userId: JSON.parse(getUserInfo()).userId, tableName: input.value, algorithmName: "回归分析" }).then((res) => {
tableData.value = [];
input5.value=[]
input6.value=[]
input3.value=""
input5.value = [];
input6.value = [];
input3.value = "";
res.data.forEach((element) => {
tableData.value.push({
text: element,
@ -451,7 +453,7 @@ const formInline = reactive({
user: "",
region: "",
});
const input = ref();
const input = ref(algorithmStore.userDataLabel[0]);
const options = ref([]);
const input2 = ref("");
const options2 = ref([

@ -8,46 +8,42 @@
<div class="title1"></div>
<div class="mainBox">
<div class="busyApp">
<img src="@/assets/images/101.png" alt="" />
<img src="@/assets/images/101.webp" alt="" />
<div class="list">
<li v-for="item in businessList" :key="item">{{ item }}</li>
</div>
</div>
<div style="width: 100%; text-align: center; margin-top: 0px">
<img
src="@/assets/images/1箭头-上.png"
alt=""
style="width: 46px; height: 22px"
/>
<img src="@/assets/images/1箭头-上.png" alt="" style="width: 46px; height: 22px" />
</div>
<div class="title2"></div>
<div class="bottomView">
<div class="left">
<div class="busyApp">
<img src="@/assets/images/102.png" alt="" />
<img src="@/assets/images/102.webp" alt="" />
<div class="listBlue">
<li v-for="item in previewTags" :key="item">{{ item }}</li>
</div>
</div>
<img src="@/assets/images/2箭头-上.png" alt="" class="arrow" />
<img src="@/assets/images/2箭头-上.webp" alt="" class="arrow" />
<div class="busyApp" style="margin-top: -15px">
<img src="@/assets/images/103.png" alt="" />
<img src="@/assets/images/103.webp" alt="" />
<div class="listBlue">
<li v-for="item in modelTags" :key="item">{{ item }}</li>
</div>
</div>
<img src="@/assets/images/3箭头-上.png" alt="" class="arrow" />
<img src="@/assets/images/3箭头-上.webp" alt="" class="arrow" />
<div class="busyApp" style="margin-top: -15px">
<img src="@/assets/images/102.png" alt="" />
<img src="@/assets/images/102.webp" alt="" />
<div class="listBlue">
<li v-for="item in previewTags" :key="item">{{ item }}</li>
</div>
</div>
<img src="@/assets/images/4箭头-上.png" alt="" class="arrow" />
<img src="@/assets/images/4箭头-上.webp" alt="" class="arrow" />
<div class="busyApp" style="margin-top: -15px">
<img src="@/assets/images/102.png" alt="" />
<img src="@/assets/images/102.webp" alt="" />
<div class="listBlue">
<li v-for="item in previewTags" :key="item">{{ item }}</li>
</div>
@ -56,81 +52,27 @@
<div class="right">
<div class="item">
<span>预测算法</span>
<div
style="
text-align: left;
padding-left: 8px;
padding-right: 5px;
padding-top: 6px;
"
>
时间序列逻辑回归流失预警RFM...
</div>
<div style="text-align: left; padding-left: 8px; padding-right: 5px; padding-top: 6px">时间序列逻辑回归流失预警RFM...</div>
</div>
<div class="item">
<span>机器学习</span>
<div
style="
text-align: left;
padding-left: 8px;
padding-right: 5px;
padding-top: 6px;
"
>
特征提取特征选择预测优化...
</div>
<div style="text-align: left; padding-left: 8px; padding-right: 5px; padding-top: 6px">特征提取特征选择预测优化...</div>
</div>
<div class="item">
<span>推荐算法</span>
<div
style="
text-align: left;
padding-left: 8px;
padding-right: 5px;
padding-top: 6px;
"
>
APRIORI协同过滤基于内容的过滤...
</div>
<div style="text-align: left; padding-left: 8px; padding-right: 5px; padding-top: 6px">APRIORI协同过滤基于内容的过滤...</div>
</div>
<div class="item">
<span>相似度技术</span>
<div
style="
text-align: left;
padding-left: 8px;
padding-right: 5px;
padding-top: 6px;
"
>
欧式距离皮尔逊相似度余弦相似度...
</div>
<div style="text-align: left; padding-left: 8px; padding-right: 5px; padding-top: 6px">欧式距离皮尔逊相似度余弦相似度...</div>
</div>
<div class="item">
<span>聚类分类算法</span>
<div
style="
text-align: left;
padding-left: 8px;
padding-right: 5px;
padding-top: 6px;
"
>
KNN贝叶斯网络神经网络...
</div>
<div style="text-align: left; padding-left: 8px; padding-right: 5px; padding-top: 6px">KNN贝叶斯网络神经网络...</div>
</div>
<div class="item">
<span>文本挖掘算法</span>
<div
style="
text-align: left;
padding-left: 8px;
padding-right: 5px;
padding-top: 6px;
"
>
TF-IDFVSMTEXTRANK...
</div>
<div style="text-align: left; padding-left: 8px; padding-right: 5px; padding-top: 6px">TF-IDFVSMTEXTRANK...</div>
</div>
</div>
</div>
@ -142,12 +84,12 @@
<div class="marketJob">
<div class="title"></div>
<div class="content">
<img src="@/assets/images/001.png" alt="" />
<img src="@/assets/images/002.png" alt="" />
<img src="@/assets/images/003.png" alt="" />
<img src="@/assets/images/004.png" alt="" />
<img src="@/assets/images/005.png" alt="" />
<img src="@/assets/images/006.png" alt="" />
<img src="@/assets/images/001.webp" alt="" />
<img src="@/assets/images/002.webp" alt="" />
<img src="@/assets/images/003.webp" alt="" />
<img src="@/assets/images/004.webp" alt="" />
<img src="@/assets/images/005.webp" alt="" />
<img src="@/assets/images/006.webp" alt="" />
</div>
</div>
<div class="portrait">
@ -176,43 +118,23 @@
<div class="content">
<div class="item">
<span class="skillTitle">基础知识</span>
<div
style="padding-left: 25px; padding-right: 8px; padding-top: 6px"
>
经济学原理管理学原理微观经济学数字经济概论
</div>
<div style="padding-left: 25px; padding-right: 8px; padding-top: 6px">经济学原理管理学原理微观经济学数字经济概论</div>
</div>
<div class="item">
<span class="skillTitle">营销专业知识</span>
<div
style="padding-left: 25px; padding-right: 8px; padding-top: 6px"
>
市场营销学市场营销策划市场调查与预测消费者行为网络营销商务沟通与谈判新媒体营销
</div>
<div style="padding-left: 25px; padding-right: 8px; padding-top: 6px">市场营销学市场营销策划市场调查与预测消费者行为网络营销商务沟通与谈判新媒体营销</div>
</div>
<div class="item">
<span class="skillTitle">技术基础知识</span>
<div
style="padding-left: 25px; padding-right: 8px; padding-top: 6px"
>
计算机SQL数据库PYTHON程序设计高等数学统计学线性代数大数据导论新媒体技术
</div>
<div style="padding-left: 25px; padding-right: 8px; padding-top: 6px">计算机SQL数据库PYTHON程序设计高等数学统计学线性代数大数据导论新媒体技术</div>
</div>
<div class="item">
<span class="skillTitle">数字技术应用能力</span>
<div
style="padding-left: 25px; padding-right: 8px; padding-top: 6px"
>
人工智能AIGC大模型大数据区块链物联网虚拟现实
</div>
<div style="padding-left: 25px; padding-right: 8px; padding-top: 6px">人工智能AIGC大模型大数据区块链物联网虚拟现实</div>
</div>
<div class="item">
<span class="skillTitle">数据处理分析技能</span>
<div
style="padding-left: 25px; padding-right: 20px; padding-top: 6px"
>
数据采集数据预处理特征工程数据挖掘数据可视化商务智能BI
</div>
<div style="padding-left: 25px; padding-right: 20px; padding-top: 6px">数据采集数据预处理特征工程数据挖掘数据可视化商务智能BI</div>
</div>
</div>
</div>
@ -221,35 +143,9 @@
</template>
<script setup>
const businessList = ref([
"业务推送",
"个性化推荐",
"用户流失预警",
"销售预测",
"广告优化",
"群体/个体画像分析",
"精细化运营",
"商品配置优化",
]);
const previewTags = ref([
"人口属性",
"人群属性",
"用户流失",
"消费能力",
"违约概率",
"用户近期需求",
]);
const modelTags = ref([
"人口属性",
"用户价值",
"用户兴趣爱好",
"产品购买偏好",
"渠道使用偏好",
"用户活跃度",
"用户关联关系",
"用户满意度",
"用户风险评分",
]);
const businessList = ref(["业务推送", "个性化推荐", "用户流失预警", "销售预测", "广告优化", "群体/个体画像分析", "精细化运营", "商品配置优化"]);
const previewTags = ref(["人口属性", "人群属性", "用户流失", "消费能力", "违约概率", "用户近期需求"]);
const modelTags = ref(["人口属性", "用户价值", "用户兴趣爱好", "产品购买偏好", "渠道使用偏好", "用户活跃度", "用户关联关系", "用户满意度", "用户风险评分"]);
</script>
<style scoped lang="scss">
@ -405,7 +301,7 @@ const modelTags = ref([
.marketJob {
margin-left: 5px;
.title {
background-image: url("@/assets/images/2-1.png");
background-image: url("@/assets/images/2-1.webp");
width: 204px;
height: 43px;
margin-bottom: 10px;
@ -413,7 +309,7 @@ const modelTags = ref([
.content {
width: 206px;
height: 736px;
background-image: url("@/assets/images/2篮框.png");
background-image: url("@/assets/images/2篮框.webp");
background-size: 205px 735px;
padding: 0;
padding-left: 13px;
@ -426,7 +322,7 @@ const modelTags = ref([
.portrait {
margin-left: 40px;
.title {
background-image: url("@/assets/images/3-1.png");
background-image: url("@/assets/images/3-1.webp");
width: 204px;
height: 43px;
margin-bottom: 10px;
@ -452,7 +348,7 @@ const modelTags = ref([
margin-left: 10px;
width: 159px;
height: 185px;
background-image: url("@/assets/images/3-02.png");
background-image: url("@/assets/images/3-02.webp");
background-size: 159px 185px;
padding-top: 140px;
text-align: center;
@ -462,7 +358,7 @@ const modelTags = ref([
margin-left: 10px;
width: 159px;
height: 185px;
background-image: url("@/assets/images/3-03.png");
background-image: url("@/assets/images/3-03.webp");
background-size: 159px 185px;
padding-top: 140px;
text-align: center;
@ -472,7 +368,7 @@ const modelTags = ref([
margin-left: 10px;
width: 159px;
height: 185px;
background-image: url("@/assets/images/3-04.png");
background-image: url("@/assets/images/3-04.webp");
background-size: 159px 185px;
padding-top: 140px;
text-align: center;
@ -500,7 +396,7 @@ const modelTags = ref([
font-size: 14px;
width: 283px;
height: 145px;
background-image: url("@/assets/images/4-01.png");
background-image: url("@/assets/images/4-01.webp");
background-size: 283px 145px;
padding-top: 16px;
.skillTitle {

@ -1,96 +1,93 @@
<template>
<div class="app-container">
<div class="study_main">
<div class="study_main_up">
<div class="study_main_up_top">
<div class="study_main_up_left">
<img src="../../assets/icons/svg/score.svg" />
<span style="color: #ffffff">得分情况</span>
<el-scrollbar :height="height">
<div class="study_main">
<div class="study_main_up">
<div class="study_main_up_top">
<div class="study_main_up_left">
<img src="../../assets/icons/svg/score.svg" />
<span style="color: #ffffff">得分情况</span>
</div>
<el-button type="primary" :icon="Refresh" round @click="updateReportGrade"></el-button>
</div>
<div class="study_main_up_foot">
<el-table :data="tableData4" :span-method="tableSpanMethod" stripe border :header-cell-style="{ background: '#A2C9FF' }" style="width: 100%">
<el-table-column prop="sid" label="序号" width="80" align="center" />
<el-table-column prop="learningProjects" label="学习项目" align="center" />
<el-table-column prop="assessmentItems" label="考核项目" width="150" align="center" />
<el-table-column prop="scoringCriteria" label="计分标准" width="314" align="center" />
<el-table-column prop="totalScore" label="总分" width="129" align="center" />
<el-table-column prop="scoreWeight" label="成绩权重" width="129" align="center" />
<el-table-column prop="completionStatus" label="完成情况" width="225" align="center" />
<el-table-column prop="schedule" label="进度" align="center" />
<el-table-column prop="scoreProject" label="得分" width="131" align="center" />
</el-table>
</div>
<el-button type="primary" :icon="Refresh" round @click="updateReportGrade"></el-button>
</div>
<div class="study_main_up_foot">
<el-table :data="tableData4" :span-method="tableSpanMethod" stripe border :header-cell-style="{ background: '#A2C9FF' }" style="width: 100%">
<el-table-column prop="sid" label="序号" width="80" align="center" />
<el-table-column prop="learningProjects" label="学习项目" align="center" />
<el-table-column prop="assessmentItems" label="考核项目" width="150" align="center" />
<el-table-column prop="scoringCriteria" label="计分标准" width="314" align="center" />
<el-table-column prop="totalScore" label="总分" width="129" align="center" />
<el-table-column prop="scoreWeight" label="成绩权重" width="129" align="center" />
<el-table-column prop="completionStatus" label="完成情况" width="225" align="center" />
<el-table-column prop="schedule" label="进度" align="center" />
<el-table-column prop="scoreProject" label="得分" width="131" align="center" />
</el-table>
</div>
</div>
<div class="study_main_but">
<div class="study_main_but_left">
<img src="../../assets/icons/svg/sxbg.svg" />
<span style="color: #ffffff">实训报告</span>
</div>
<!-- action="http://qkljr.sztzjy.com:90/api/stu/concept/block/upload" -->
<div class="study_main_but">
<div class="study_main_but_left">
<img src="../../assets/icons/svg/sxbg.svg" />
<span style="color: #ffffff">实训报告</span>
</div>
<!-- action="http://qkljr.sztzjy.com:90/api/stu/concept/block/upload" -->
<!-- <el-upload ref="uploadRef" class="upload-demo" :file-list="fileList" :auto-upload="false" :on-change="handleChange" :show-file-list="false" multiple="multiple">
<template #trigger>
<el-button color="#626aef" round>
<el-icon><UploadFilled /></el-icon>
点击上传
</el-button>
</template>
</el-upload> -->
<div class="study_main_but_foot">
<el-table :data="tableData2" :span-method="arraySpanMethod2" stripe style="width: 100%" border :header-cell-style="{ background: '#A2C9FF' }">
<el-table-column prop="module" label="模块" width="289" align="center" />
<el-table-column prop="reportName" label="报告名称" width="289" align="center" />
<el-table-column prop="uploadTime" label="上传时间" width="289" align="center" />
<el-table-column prop="fileSize" label="文件大小" width="150" align="center" />
<el-table-column prop="tchScoreuploadTime" label="评分" width="150" align="center" />
<el-table-column label="操作" class="controls" align="center">
<template #default="scope">
<div style="display:flex;margin-left:10px">
<el-upload class="upload-item" ref="uploadRef" :file-list="fileList" :auto-upload="false" :on-change="(info) => handleChange(info, scope.row)" :show-file-list="false" multiple="multiple">
<template #trigger>
<el-link type="primary">
<el-icon><Plus /></el-icon>
上传
</el-link>
<!-- <el-upload ref="uploadRef" class="upload-demo" :file-list="fileList" :auto-upload="false" :on-change="handleChange" :show-file-list="false" multiple="multiple">
<template #trigger>
<el-button color="#626aef" round>
<el-icon><UploadFilled /></el-icon>
点击上传
</el-button>
</template>
</el-upload> -->
<div class="study_main_but_foot">
<el-table :data="tableData2" :span-method="arraySpanMethod2" stripe style="width: 100%" border :header-cell-style="{ background: '#A2C9FF' }">
<el-table-column prop="module" label="模块" width="289" align="center" />
<el-table-column prop="reportName" label="报告名称" width="289" align="center" />
<el-table-column prop="uploadTime" label="上传时间" width="289" align="center" />
<el-table-column prop="fileSize" label="文件大小" width="150" align="center" />
<el-table-column prop="tchScoreuploadTime" label="评分" width="150" align="center" />
<el-table-column label="操作" class="controls" align="center">
<template #default="scope">
<div style="display: flex; margin-left: 10px">
<el-upload class="upload-item" ref="uploadRef" :file-list="fileList" :auto-upload="false" :on-change="(info) => handleChange(info, scope.row)" :show-file-list="false" multiple="multiple">
<template #trigger>
<el-link type="primary">
<el-icon><Plus /></el-icon>
上传
</el-link>
</template>
</el-upload>
<el-link type="success" @click="uploadReport(scope.row.id)">
<el-icon><Download /></el-icon>
下载
</el-link>
<el-link type="warning" @click="showComments(scope.row)">
<el-icon><Tickets /></el-icon>
查看评语
</el-link>
</div>
</template>
</el-upload>
<el-link type="success" @click="uploadReport(scope.row.id)">
<el-icon><Download /></el-icon>
下载
</el-link>
<el-link type="warning" @click="showComments(scope.row)">
<el-icon><Tickets /></el-icon>
查看评语
</el-link>
</div>
</template>
</el-table-column>
</el-table>
</el-table-column>
</el-table>
</div>
</div>
</div>
</div>
</el-scrollbar>
</div>
<el-dialog v-model="dialogVisible" title="评语" width="30%" :before-close="handleClose">
<span>{{ comments }}</span>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false">确定</el-button>
<!-- <el-button type="primary" @click="dialogVisible = false">
Confirm
</el-button> -->
</span>
</template>
</el-dialog>
</template>
<script setup>
import { Refresh } from "@element-plus/icons-vue";
import { onMounted, ref } from "vue";
import { computed, onMounted, ref } from "vue";
import * as API from "@/api/prtrait/prtrait.js";
// import {Base64} from 'js-base64'
// import { useRouter } from "vue-router";
import { download } from "@/utils/request.js";
import { getToken, getUserInfo } from "@/utils/auth";
import { ElMessage } from "element-plus";
@ -115,207 +112,219 @@ const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
}
}
};
const arraySpanMethod2=({
row,
column,
rowIndex,
columnIndex,
})=>{
const arraySpanMethod2 = ({ row, column, rowIndex, columnIndex }) => {
if (columnIndex === 0) {
if (rowIndex % 3 === 0) {
return {
rowspan: 3,
colspan: 1,
}
};
} else {
return {
rowspan: 0,
colspan: 0,
}
};
}
}
}
};
const tableData2 = ref([
{
module:"AI文生图",
reportName:"",
updateTime:"",
fileSize:"",
id:"",
filePath:"",
tchScore:"",
ascription:"1",
tchComment:""
},{
module:"AI文生图",
reportName:"",
updateTime:"",
fileSize:"",
id:"",
filePath:"",
tchScore:"",
tchComment:"",
ascription:"2",
},{
module:"AI文生图",
reportName:"",
updateTime:"",
fileSize:"",
id:"",
filePath:"",
tchScore:"",
tchComment:"",
ascription:"3",
},{
module:"AI修图",
reportName:"",
updateTime:"",
fileSize:"",
id:"",
filePath:"",
tchScore:"",
tchComment:"",
ascription:"1",
},{
module:"AI修图",
reportName:"",
updateTime:"",
fileSize:"",
id:"",
filePath:"",
tchScore:"",
tchComment:"",
ascription:"2",
},{
module:"AI修图",
reportName:"",
updateTime:"",
fileSize:"",
id:"",
filePath:"",
tchScore:"",
tchComment:"",
ascription:"3",
},{
module:"AI视频",
reportName:"",
updateTime:"",
fileSize:"",
id:"",
filePath:"",
tchScore:"",
tchComment:"",
ascription:"1",
},{
module:"AI视频",
reportName:"",
updateTime:"",
fileSize:"",
id:"",
filePath:"",
tchScore:"",
tchComment:"",
ascription:"2",
},{
module:"AI视频",
reportName:"",
updateTime:"",
fileSize:"",
id:"",
filePath:"",
tchScore:"",
tchComment:"",
ascription:"3",
},{
module:"AI写作",
reportName:"",
updateTime:"",
fileSize:"",
id:"",
filePath:"",
tchScore:"",
tchComment:"",
ascription:"1",
},{
module:"AI写作",
reportName:"",
updateTime:"",
fileSize:"",
id:"",
filePath:"",
tchScore:"",
tchComment:"",
ascription:"2",
},{
module:"AI写作",
reportName:"",
updateTime:"",
fileSize:"",
id:"",
filePath:"",
tchScore:"",
tchComment:"",
ascription:"3",
},{
module:"AI数据分析",
reportName:"",
updateTime:"",
fileSize:"",
id:"",
filePath:"",
tchScore:"",
tchComment:"",
ascription:"1",
},{
module:"AI数据分析",
reportName:"",
updateTime:"",
fileSize:"",
id:"",
filePath:"",
tchScore:"",
tchComment:"",
ascription:"2",
},{
module:"AI数据分析",
reportName:"",
updateTime:"",
fileSize:"",
id:"",
filePath:"",
tchScore:"",
tchComment:"",
ascription:"3",
},{
module:"BI可视化分析",
reportName:"",
updateTime:"",
fileSize:"",
id:"",
filePath:"",
tchScore:"",
tchComment:"",
ascription:"1",
},{
module:"BI可视化分析",
reportName:"",
updateTime:"",
fileSize:"",
id:"",
filePath:"",
tchScore:"",
tchComment:"",
ascription:"2",
},{
module:"BI可视化分析",
reportName:"",
updateTime:"",
fileSize:"",
id:"",
filePath:"",
tchScore:"",
tchComment:"",
ascription:"3",
module: "AI文生图",
reportName: "",
updateTime: "",
fileSize: "",
id: "",
filePath: "",
tchScore: "",
ascription: "1",
tchComment: "",
},
{
module: "AI文生图",
reportName: "",
updateTime: "",
fileSize: "",
id: "",
filePath: "",
tchScore: "",
tchComment: "",
ascription: "2",
},
{
module: "AI文生图",
reportName: "",
updateTime: "",
fileSize: "",
id: "",
filePath: "",
tchScore: "",
tchComment: "",
ascription: "3",
},
{
module: "AI修图",
reportName: "",
updateTime: "",
fileSize: "",
id: "",
filePath: "",
tchScore: "",
tchComment: "",
ascription: "1",
},
{
module: "AI修图",
reportName: "",
updateTime: "",
fileSize: "",
id: "",
filePath: "",
tchScore: "",
tchComment: "",
ascription: "2",
},
{
module: "AI修图",
reportName: "",
updateTime: "",
fileSize: "",
id: "",
filePath: "",
tchScore: "",
tchComment: "",
ascription: "3",
},
{
module: "AI视频",
reportName: "",
updateTime: "",
fileSize: "",
id: "",
filePath: "",
tchScore: "",
tchComment: "",
ascription: "1",
},
{
module: "AI视频",
reportName: "",
updateTime: "",
fileSize: "",
id: "",
filePath: "",
tchScore: "",
tchComment: "",
ascription: "2",
},
{
module: "AI视频",
reportName: "",
updateTime: "",
fileSize: "",
id: "",
filePath: "",
tchScore: "",
tchComment: "",
ascription: "3",
},
{
module: "AI写作",
reportName: "",
updateTime: "",
fileSize: "",
id: "",
filePath: "",
tchScore: "",
tchComment: "",
ascription: "1",
},
{
module: "AI写作",
reportName: "",
updateTime: "",
fileSize: "",
id: "",
filePath: "",
tchScore: "",
tchComment: "",
ascription: "2",
},
{
module: "AI写作",
reportName: "",
updateTime: "",
fileSize: "",
id: "",
filePath: "",
tchScore: "",
tchComment: "",
ascription: "3",
},
{
module: "AI数据分析",
reportName: "",
updateTime: "",
fileSize: "",
id: "",
filePath: "",
tchScore: "",
tchComment: "",
ascription: "1",
},
{
module: "AI数据分析",
reportName: "",
updateTime: "",
fileSize: "",
id: "",
filePath: "",
tchScore: "",
tchComment: "",
ascription: "2",
},
{
module: "AI数据分析",
reportName: "",
updateTime: "",
fileSize: "",
id: "",
filePath: "",
tchScore: "",
tchComment: "",
ascription: "3",
},
{
module: "BI可视化分析",
reportName: "",
updateTime: "",
fileSize: "",
id: "",
filePath: "",
tchScore: "",
tchComment: "",
ascription: "1",
},
{
module: "BI可视化分析",
reportName: "",
updateTime: "",
fileSize: "",
id: "",
filePath: "",
tchScore: "",
tchComment: "",
ascription: "2",
},
{
module: "BI可视化分析",
reportName: "",
updateTime: "",
fileSize: "",
id: "",
filePath: "",
tchScore: "",
tchComment: "",
ascription: "3",
},
]);
const tableData = ref([]);
@ -408,12 +417,12 @@ const data = ref({
module: "",
userId: JSON.parse(getUserInfo()).userId,
schoolId: JSON.parse(getUserInfo()).schoolId,
count:""
count: "",
});
const handleChange = (info,rowData) => {
const handleChange = (info, rowData) => {
fileList.value.push(info);
data.value.module=rowData.module
data.value.count=rowData.ascription
data.value.module = rowData.module;
data.value.count = rowData.ascription;
let formData2 = new FormData();
formData2.append("file", fileList.value[0].raw);
formData2.append("stuBlockProduct", JSON.stringify(data.value));
@ -424,9 +433,9 @@ const handleChange = (info,rowData) => {
};
const uploadRef = ref(null);
function padZero(value) {
return value.toString().padStart(2, '0');
return value.toString().padStart(2, "0");
}
const formt=(timestamp)=>{
const formt = (timestamp) => {
const date = new Date(timestamp);
const year = date.getFullYear();
@ -436,25 +445,25 @@ const formt=(timestamp)=>{
const minutes = padZero(date.getMinutes());
const seconds = padZero(date.getSeconds());
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
};
const getReports = () => {
API.getDetailsTrainingReport(data.value).then((res) => {
// tableData2.value.splice(0, tableData2.value.length);
if (res.data !== null) {
tableData2.value.forEach(item => {
const match = res.data.find(dataItem => dataItem.module === item.module && dataItem.ascription === item.ascription);
tableData2.value.forEach((item) => {
const match = res.data.find((dataItem) => dataItem.module === item.module && dataItem.ascription === item.ascription);
if (match) {
item.reportName = match.reportName
item.reportName = match.reportName;
item.uploadTime = formt(match.uploadTime);
item.fileSize = (match.size/1024).toFixed(2)+'KB';
item.fileSize = (match.size / 1024).toFixed(2) + "KB";
item.filePath = match.url;
item.tchScore = match.rating;
item.tchComment = match.teacherComments;
item.id=match.id
item.id = match.id;
}
})
}
});
}
});
};
@ -464,16 +473,16 @@ const data2 = {
};
//
const uploadReport = async (id) => {
if(!id){
return
if (!id) {
return;
}
window.open(`http://118.31.7.2:9868/api/stu/concept/block/download?TOKEN=${'Bearer '+getToken()}&id=${id}`);
window.open(`http://118.31.7.2:9868/api/stu/concept/block/download?TOKEN=${"Bearer " + getToken()}&id=${id}`);
// window.open(`http://202.97.179.126:8800/api/stu/concept/block/download?reportName=${tableData2.value[0].reportName}&TOKEN= ${'Bearer '+getToken()}&module=${data2.module}&userId=${data.userId}`)
// window.open(`http://202.199.90.115:8800/api/stu/concept/block/download?reportName=${tableData2.value[0].reportName}&TOKEN= ${'Bearer '+getToken()}&module=${data2.module}&userId=${data.userId}`)
};
const isUpdate = ref(false);
//
const comments=ref('')
const comments = ref("");
const showComments = (item) => {
if (!item.tchComment) {
ElMessage({
@ -482,7 +491,7 @@ const showComments = (item) => {
});
return;
}
comments.value=item.tchComment
comments.value = item.tchComment;
dialogVisible.value = true;
};
onMounted(() => {
@ -574,6 +583,9 @@ const updateReportGrade = () => {
getReports();
cerateGrade();
};
const height=computed(()=>{
return window.innerHeight-150
})
</script>
<style lang="scss" scoped>
.study_main {
@ -672,11 +684,11 @@ const updateReportGrade = () => {
font-family: "微软雅黑";
font-weight: 300;
}
.upload-item{
.upload-item {
display: inline;
height: 23px !important;
:deep(.el-upload){
align-items:flex-end !important;
:deep(.el-upload) {
align-items: flex-end !important;
}
}
</style>

@ -451,14 +451,7 @@
</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>
<el-dialog v-model="dialogVisible" title="任务知识导入" style="width: 1108px; height: 798px" custom-class="gdialog" >
<div style="color: #fff; margin-top: -35px; padding: 10px; padding-left: 20px">
<el-scrollbar height="650px">
<div v-html="knowledge"></div>
@ -1378,41 +1371,7 @@ const tableSpanMethod = ({ row, column, rowIndex, columnIndex }) => {
background-color: #f5f7fa !important;
}
::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;
}
}
::v-deep .el-table td {
padding-top: 4px;
padding-bottom: 4px;

@ -2,18 +2,28 @@
* @Author: qinzhenpen qzp1807@126.com
* @Date: 2024-08-16 09:16:26
* @LastEditors: qinzhenpen qzp1807@126.com
* @LastEditTime: 2024-08-16 09:18:05
* @LastEditTime: 2024-08-27 10:15:10
* @FilePath: \vue3\src\views\visual-analysis\index.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template>
<div>
<iframe src="http://118.31.7.2:96" width="100%" height="900" scrolling="no" frameborder="0"></iframe>
</div>
<div class="el-Aitools">
<iframe id="iframe" src="http://118.31.7.2:96" width="100%" height="100%" frameborder="1"></iframe>
</div>
</template>
<script setup>
</script>
<style lang='scss' scoped>
</style>
<script setup></script>
<style lang="scss" scoped>
.el-Aitools {
position: relative;
padding: 20px 20px 0;
min-height: calc(100vh - 58px);
#iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: none;
}
}
</style>

Loading…
Cancel
Save