对图片进行压缩

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) { export function getCommentPoint(data) {
return request({ return request({
url: "/v1/singleEmotionAnalysis/", url: "/v1/singleEmotionAnalysis/",
baseURL: "http://192.168.2.14:8000", baseURL: "http://118.31.7.2:8000",
method: "post", method: "post",
data: data, 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

@ -2,29 +2,35 @@
p { p {
color: black !important; color: black !important;
} }
// img{
// max-width: 900px;
// max-height: 400px;
// }
// box-shadow: none !important;
// border: 1px solid #e5e5e5;
border-radius: 5px; border-radius: 5px;
.el-dialog__title {
font-weight: 600 !important;
font-size: 20px !important;
}
.el-dialog__headerbtn { .el-dialog__headerbtn {
top: 2px; top: 2px;
.el-dialog__close { .el-dialog__close {
color: #FFFFFF; color: #FFFFFF;
width: 1.5em;
height: 1.5em;
svg {
width: 1.5em;
height: 1.5em;
}
} }
} }
&:not(.is-fullscreen) { &:not(.is-fullscreen) {
// margin-top: 36vh !important; // margin-top: 36vh !important;
// margin-left: 26vh; // margin-left: 26vh;
} }
.el-dialog__header { .el-dialog__header {
background: linear-gradient(-90deg, #2c04c9 0%, #5197ff 100%); background: linear-gradient(-90deg, #2c04c9 0%, #5197ff 100%);
// border-radius: 5px 5px 0px 0px; // border-radius: 5px 5px 0px 0px;
margin-right: 0px; margin-right: 0px;
padding-bottom: 0px; padding-bottom: 0px;
padding: 15px 15px; padding: 15px 15px;
.el-dialog__title { .el-dialog__title {
font-size: 18px; font-size: 18px;
font-family: Source Han Sans CN; font-family: Source Han Sans CN;
@ -32,6 +38,7 @@
color: #ffffff !important; color: #ffffff !important;
} }
} }
.el-dialog__body { .el-dialog__body {
.Terminal { .Terminal {
display: flex; display: flex;
@ -43,6 +50,7 @@
font-family: Source Han Sans CN; font-family: Source Han Sans CN;
font-weight: 400; font-weight: 400;
color: #333333; color: #333333;
.Terminal-item { .Terminal-item {
position: relative; position: relative;
display: flex; display: flex;
@ -54,6 +62,7 @@
border-radius: 10px; border-radius: 10px;
// //
cursor: pointer; cursor: pointer;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
@ -61,16 +70,19 @@
} }
} }
} }
span:nth-child(3) { span:nth-child(3) {
display: block; display: block;
margin-: 20px; margin-: 20px;
} }
.lication { .lication {
margin-top: 27px; margin-top: 27px;
display: flex; display: flex;
align-items: center; align-items: center;
flex-wrap: wrap; flex-wrap: wrap;
gap: 78px; gap: 78px;
.lication-item { .lication-item {
display: flex; display: flex;
align-items: center; align-items: center;
@ -84,6 +96,7 @@
font-weight: 400; font-weight: 400;
color: #333333; color: #333333;
cursor: pointer; cursor: pointer;
img { img {
width: 100%; width: 100%;
height: 100%; height: 100%;
@ -93,6 +106,7 @@
} }
} }
.el-dialog__footer { .el-dialog__footer {
text-align: center; text-align: center;
.el-button:nth-child(1) { .el-button:nth-child(1) {
@ -106,6 +120,7 @@
.el-button--large.is-round { .el-button--large.is-round {
padding: 12px 20px 12px 40px !important; padding: 12px 20px 12px 40px !important;
} }
.el-button { .el-button {
width: 136px; width: 136px;
height: 40px; height: 40px;

@ -16,7 +16,7 @@
-webkit-transition: width .28s; -webkit-transition: width .28s;
transition: width 0.28s; transition: width 0.28s;
width: 239px !important; 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-color: $base-menu-background;
background-size: 100% 100%; background-size: 100% 100%;
height: 100%; height: 100%;

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

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

@ -23,7 +23,7 @@
</div> </div>
<div class="metrics"> <div class="metrics">
<el-select v-model="input" placeholder="请选择" style="width: 180px" @change="optionData"> <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> </el-select>
</div> </div>
<div class="metrics-table" style="margin-top: 10px"> <div class="metrics-table" style="margin-top: 10px">
@ -74,7 +74,6 @@
</div> </div>
</div> </div>
</el-scrollbar> </el-scrollbar>
</div> </div>
<div class="main-right"> <div class="main-right">
<el-scrollbar height="500px" ref="scrollbar" style="padding: 20px"> <el-scrollbar height="500px" ref="scrollbar" style="padding: 20px">
@ -156,10 +155,11 @@
<br /> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;聚类分析是一种探索性分析方法与判别分析不同聚类分析事先并不知道分类的标准甚至不知道应该分成几类而是会根据样本数据的特征自动进行分类 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;聚类分析是一种探索性分析方法与判别分析不同聚类分析事先并不知道分类的标准甚至不知道应该分成几类而是会根据样本数据的特征自动进行分类
</p> </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> <p>聚类与分类的不同在于聚类所要求划分的类是未知的</p>
<img src="@/assets/images/f1002.png" style="width: 600px;height: 300px;"/><br /> <img src="@/assets/images/f1002.png" style="width: 600px; height: 300px" />
<img src="@/assets/images/f1003.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;"/> --> <!-- <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>
@ -172,14 +172,14 @@
<br /> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一般的规则 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一般的规则
</p> </p>
<img src="@/assets/images/f10010.png" style="width: 600px;height: 300px;"/> <img src="@/assets/images/f10010.png" style="width: 600px; height: 300px" />
<br /> <br />
<img src="@/assets/images/f10011.png" /> <img src="@/assets/images/f10011.png" />
<br /> <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-weight: 700; font-size: 22px">聚类方法及其在SPSS中的实现</p>
<p style="font-size: 19px">1.主要的聚类方法</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: 19px">2.方法详解</p>
<p style="font-size: 17px">1K-means聚类</p> <p style="font-size: 17px">1K-means聚类</p>
<p> <p>
@ -187,13 +187,15 @@
<br /> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;具体步骤如下 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;具体步骤如下
</p> </p>
<img src="@/assets/images/f10014.png" style="width: 600px;height: 300px;"/><br /> <img src="@/assets/images/f10014.png" style="width: 600px; height: 300px" />
<img src="@/assets/images/f10015.png" style="width: 600px;height: 300px;"/> <br />
<img src="@/assets/images/f10015.png" style="width: 600px; height: 300px" />
<p>距离计算规则欧几里得距离公式</p> <p>距离计算规则欧几里得距离公式</p>
<img src="@/assets/images/f10016.png" /> <img src="@/assets/images/f10016.png" />
<p>图解</p> <p>图解</p>
<img src="@/assets/images/f10017.png" style="width: 600px;height: 300px;"/><br /> <img src="@/assets/images/f10017.png" style="width: 600px; height: 300px" />
<img src="@/assets/images/f10018.png" style="width: 600px;height: 300px;"/> <br />
<img src="@/assets/images/f10018.png" style="width: 600px; height: 300px" />
<p> <p>
K-means的优缺点 K-means的优缺点
<br /> <br />
@ -217,17 +219,19 @@
<br /> <br />
通过查询整理出了2018年我国各省份的20项基本情况根据这些指标把这31个省市或地区分成3类 通过查询整理出了2018年我国各省份的20项基本情况根据这些指标把这31个省市或地区分成3类
</p> </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> <p>分析步骤分析>>分类>>K-均值聚类>>迭代>>次数>>选项>>勾选统计>>确认</p>
<img src="@/assets/images/f10020.png" style="width: 600px;height: 400px;"/><br /> <img src="@/assets/images/f10020.png" style="width: 600px; height: 400px" />
<img src="@/assets/images/f10021.png" style="width: 600px;"/> <br />
<img src="@/assets/images/f10021.png" style="width: 600px" />
<p>结果分析</p> <p>结果分析</p>
<img src="@/assets/images/f10022.png" /><br /> <img src="@/assets/images/f10022.png" />
<br />
<img src="@/assets/images/f10023.png" /> <img src="@/assets/images/f10023.png" />
<p>若不收敛则调大迭代次数</p> <p>若不收敛则调大迭代次数</p>
<img src="@/assets/images/f10024.png" /> <img src="@/assets/images/f10024.png" />
<p>方差分析表</p> <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> <p>其中聚类均方对应组间均方差误差均方对应组内均方差显著性p&lt;0.05时说明此变量分类效果好由表可知大部分变量的p&lt;0.05,且组间均方差大于组内均方差说明各变量在三个类别中的差异大分类结果可信度高</p>
<img src="@/assets/images/f10026.png" /> <img src="@/assets/images/f10026.png" />
<br /> <br />
@ -273,6 +277,8 @@
<script setup> <script setup>
import * as portraitModel from "@/api/portraitModel"; import * as portraitModel from "@/api/portraitModel";
import useAlgorithmStore from "@/store/modules/algorithm.js";
const algorithmStore = useAlgorithmStore();
import popModel from "@/views/components/popModal.vue"; import popModel from "@/views/components/popModal.vue";
import { htmlPdf } from "@/utils/pdf.js"; import { htmlPdf } from "@/utils/pdf.js";
import * as echarts from "echarts"; import * as echarts from "echarts";
@ -281,9 +287,9 @@ import JSZip from "jszip";
import * as API from "@/api/AI.js"; import * as API from "@/api/AI.js";
import { getUserInfo } from "@/utils/auth"; import { getUserInfo } from "@/utils/auth";
import { onMounted, reactive } from "vue"; import { onMounted, reactive } from "vue";
const loading1=ref(false) const loading1 = ref(false);
const loading2=ref(false) const loading2 = ref(false);
const loading3=ref(false) const loading3 = ref(false);
const runResultShow = ref(false); const runResultShow = ref(false);
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const dialogVisible = ref(false); const dialogVisible = ref(false);
@ -297,18 +303,18 @@ const formInline2 = reactive({
value5: "", value5: "",
}); });
const task = () => { const task = () => {
let errorNumber=0 let errorNumber = 0;
for (let key in formInline2) { for (let key in formInline2) {
if (formInline2[key] == "") { if (formInline2[key] == "") {
proxy.$modal.msgError("请填写完整!"); proxy.$modal.msgError("请填写完整!");
return; return;
} }
} }
if(formInline2.value1!=='3'){ if (formInline2.value1 !== "3") {
errorNumber=1 errorNumber = 1;
} }
if (formInline2.value2 !== input6.value) { if (formInline2.value2 !== input6.value) {
errorNumber=1 errorNumber = 1;
} }
portraitModel portraitModel
.submit({ .submit({
@ -381,6 +387,7 @@ const addData = (myChart, newData, color) => {
onMounted(() => { onMounted(() => {
getList(); getList();
optionData()
var chartDom = document.getElementById("main"); var chartDom = document.getElementById("main");
var chartDom2 = document.getElementById("main2"); var chartDom2 = document.getElementById("main2");
myChart = echarts.init(chartDom); myChart = echarts.init(chartDom);
@ -415,47 +422,49 @@ onMounted(() => {
}); });
const optionData = () => { const optionData = () => {
loading1.value=true loading1.value = true;
API.viewingMetrics({userId:JSON.parse(getUserInfo()).userId,tableName:input.value,algorithmName:'聚类分析'}).then((res)=>{ API.viewingMetrics({ userId: JSON.parse(getUserInfo()).userId, tableName: input.value, algorithmName: "聚类分析" })
tableData.value=[] .then((res) => {
input3.value='' tableData.value = [];
res.data.forEach(element => { input3.value = "";
res.data.forEach((element) => {
tableData.value.push({ tableData.value.push({
text:element text: element,
}) });
}) });
loading1.value=false loading1.value = false;
}).catch(()=>{
loading1.value=false
}) })
} .catch(() => {
loading1.value = false;
});
};
const selectedRows = ref([]); const selectedRows = ref([]);
const handleSelectionChange = (selection) => { const handleSelectionChange = (selection) => {
selectedRows.value = selection; selectedRows.value = selection;
}; };
const tableData2=ref([]) const tableData2 = ref([]);
const tableData3=ref([]) const tableData3 = ref([]);
const resTable2=ref() const resTable2 = ref();
const taskZB = () => { const taskZB = () => {
flag.value=true flag.value = true;
if (selectedRows.value.length === 0) { if (selectedRows.value.length === 0) {
return return;
} }
const sendData = { const sendData = {
tableName: input.value, tableName: input.value,
userId: JSON.parse(getUserInfo()).userId, userId: JSON.parse(getUserInfo()).userId,
fieldList:selectedRows.value.map(item=>item.text) fieldList: selectedRows.value.map((item) => item.text),
} };
API.analysisDataDisplay(sendData).then((res) => { API.analysisDataDisplay(sendData).then((res) => {
tableLabel.length=0 tableLabel.length = 0;
for (const key in res.data[0]) { for (const key in res.data[0]) {
tableLabel.push({ tableLabel.push({
label: key, label: key,
prop:key prop: key,
}) });
} }
tableData2.value=res.data tableData2.value = res.data;
flag.value=true flag.value = true;
// proxy.$modal.msgSuccess("!"); // proxy.$modal.msgSuccess("!");
tableData2.value = res.data; tableData2.value = res.data;
flag.value = true; flag.value = true;
@ -465,7 +474,7 @@ const formInline = reactive({
user: "", user: "",
region: "", region: "",
}); });
const input = ref(); const input = ref(algorithmStore.userDataLabel[0]);
const options = ref([]); const options = ref([]);
const input2 = ref(); const input2 = ref();
const options2 = ref([ const options2 = ref([
@ -517,17 +526,19 @@ const optionData2 = () => {
method: input3.value, method: input3.value,
userId: JSON.parse(getUserInfo()).userId, userId: JSON.parse(getUserInfo()).userId,
}); });
loading2.value=true loading2.value = true;
API.dataPreprocessing(sendData.value).then((res) => { API.dataPreprocessing(sendData.value)
.then((res) => {
resTable2.value = res.data; resTable2.value = res.data;
tableData2.value = []; tableData2.value = [];
tableData2.value = res.data; tableData2.value = res.data;
proxy.$modal.msgSuccess("预处理成功!"); proxy.$modal.msgSuccess("预处理成功!");
setTimeout(() => { setTimeout(() => {
loading2.value=false loading2.value = false;
},500) }, 500);
}).catch(()=>{ })
loading2.value=false .catch(() => {
loading2.value = false;
}); });
} }
}; };
@ -540,7 +551,7 @@ const clusterAnalysisCalculation = () => {
return; return;
} }
if (input5.value && input6.value && input4.value) { if (input5.value && input6.value && input4.value) {
loading3.value=true loading3.value = true;
const sendData = { const sendData = {
k: input5.value, k: input5.value,
t: input6.value, t: input6.value,
@ -604,11 +615,12 @@ const clusterAnalysisCalculation = () => {
addData(myChart2, res.data.centroid[key], "red"); addData(myChart2, res.data.centroid[key], "red");
}); });
setTimeout(() => { setTimeout(() => {
loading3.value=false loading3.value = false;
},500) }, 500);
}); });
}).catch(()=>{ })
loading3.value=false .catch(() => {
loading3.value = false;
}); });
nextTick(() => { nextTick(() => {
setTimeout(() => { setTimeout(() => {

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

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

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

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

@ -1,5 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-scrollbar :height="height">
<div class="study_main"> <div class="study_main">
<div class="study_main_up"> <div class="study_main_up">
<div class="study_main_up_top"> <div class="study_main_up_top">
@ -71,26 +72,22 @@
</div> </div>
</div> </div>
</div> </div>
</el-scrollbar>
</div> </div>
<el-dialog v-model="dialogVisible" title="评语" width="30%" :before-close="handleClose"> <el-dialog v-model="dialogVisible" title="评语" width="30%" :before-close="handleClose">
<span>{{ comments }}</span> <span>{{ comments }}</span>
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
<el-button @click="dialogVisible = false">确定</el-button> <el-button @click="dialogVisible = false">确定</el-button>
<!-- <el-button type="primary" @click="dialogVisible = false">
Confirm
</el-button> -->
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script setup> <script setup>
import { Refresh } from "@element-plus/icons-vue"; 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 * as API from "@/api/prtrait/prtrait.js";
// import {Base64} from 'js-base64'
// import { useRouter } from "vue-router";
import { download } from "@/utils/request.js"; import { download } from "@/utils/request.js";
import { getToken, getUserInfo } from "@/utils/auth"; import { getToken, getUserInfo } from "@/utils/auth";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
@ -115,26 +112,21 @@ const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
} }
} }
}; };
const arraySpanMethod2=({ const arraySpanMethod2 = ({ row, column, rowIndex, columnIndex }) => {
row,
column,
rowIndex,
columnIndex,
})=>{
if (columnIndex === 0) { if (columnIndex === 0) {
if (rowIndex % 3 === 0) { if (rowIndex % 3 === 0) {
return { return {
rowspan: 3, rowspan: 3,
colspan: 1, colspan: 1,
} };
} else { } else {
return { return {
rowspan: 0, rowspan: 0,
colspan: 0, colspan: 0,
};
} }
} }
} };
}
const tableData2 = ref([ const tableData2 = ref([
{ {
module: "AI文生图", module: "AI文生图",
@ -145,8 +137,9 @@ const tableData2 = ref([
filePath: "", filePath: "",
tchScore: "", tchScore: "",
ascription: "1", ascription: "1",
tchComment:"" tchComment: "",
},{ },
{
module: "AI文生图", module: "AI文生图",
reportName: "", reportName: "",
updateTime: "", updateTime: "",
@ -156,7 +149,8 @@ const tableData2 = ref([
tchScore: "", tchScore: "",
tchComment: "", tchComment: "",
ascription: "2", ascription: "2",
},{ },
{
module: "AI文生图", module: "AI文生图",
reportName: "", reportName: "",
updateTime: "", updateTime: "",
@ -166,7 +160,8 @@ const tableData2 = ref([
tchScore: "", tchScore: "",
tchComment: "", tchComment: "",
ascription: "3", ascription: "3",
},{ },
{
module: "AI修图", module: "AI修图",
reportName: "", reportName: "",
updateTime: "", updateTime: "",
@ -176,7 +171,8 @@ const tableData2 = ref([
tchScore: "", tchScore: "",
tchComment: "", tchComment: "",
ascription: "1", ascription: "1",
},{ },
{
module: "AI修图", module: "AI修图",
reportName: "", reportName: "",
updateTime: "", updateTime: "",
@ -186,7 +182,8 @@ const tableData2 = ref([
tchScore: "", tchScore: "",
tchComment: "", tchComment: "",
ascription: "2", ascription: "2",
},{ },
{
module: "AI修图", module: "AI修图",
reportName: "", reportName: "",
updateTime: "", updateTime: "",
@ -196,7 +193,8 @@ const tableData2 = ref([
tchScore: "", tchScore: "",
tchComment: "", tchComment: "",
ascription: "3", ascription: "3",
},{ },
{
module: "AI视频", module: "AI视频",
reportName: "", reportName: "",
updateTime: "", updateTime: "",
@ -206,7 +204,8 @@ const tableData2 = ref([
tchScore: "", tchScore: "",
tchComment: "", tchComment: "",
ascription: "1", ascription: "1",
},{ },
{
module: "AI视频", module: "AI视频",
reportName: "", reportName: "",
updateTime: "", updateTime: "",
@ -216,7 +215,8 @@ const tableData2 = ref([
tchScore: "", tchScore: "",
tchComment: "", tchComment: "",
ascription: "2", ascription: "2",
},{ },
{
module: "AI视频", module: "AI视频",
reportName: "", reportName: "",
updateTime: "", updateTime: "",
@ -226,7 +226,8 @@ const tableData2 = ref([
tchScore: "", tchScore: "",
tchComment: "", tchComment: "",
ascription: "3", ascription: "3",
},{ },
{
module: "AI写作", module: "AI写作",
reportName: "", reportName: "",
updateTime: "", updateTime: "",
@ -236,7 +237,8 @@ const tableData2 = ref([
tchScore: "", tchScore: "",
tchComment: "", tchComment: "",
ascription: "1", ascription: "1",
},{ },
{
module: "AI写作", module: "AI写作",
reportName: "", reportName: "",
updateTime: "", updateTime: "",
@ -246,7 +248,8 @@ const tableData2 = ref([
tchScore: "", tchScore: "",
tchComment: "", tchComment: "",
ascription: "2", ascription: "2",
},{ },
{
module: "AI写作", module: "AI写作",
reportName: "", reportName: "",
updateTime: "", updateTime: "",
@ -256,7 +259,8 @@ const tableData2 = ref([
tchScore: "", tchScore: "",
tchComment: "", tchComment: "",
ascription: "3", ascription: "3",
},{ },
{
module: "AI数据分析", module: "AI数据分析",
reportName: "", reportName: "",
updateTime: "", updateTime: "",
@ -266,7 +270,8 @@ const tableData2 = ref([
tchScore: "", tchScore: "",
tchComment: "", tchComment: "",
ascription: "1", ascription: "1",
},{ },
{
module: "AI数据分析", module: "AI数据分析",
reportName: "", reportName: "",
updateTime: "", updateTime: "",
@ -276,7 +281,8 @@ const tableData2 = ref([
tchScore: "", tchScore: "",
tchComment: "", tchComment: "",
ascription: "2", ascription: "2",
},{ },
{
module: "AI数据分析", module: "AI数据分析",
reportName: "", reportName: "",
updateTime: "", updateTime: "",
@ -286,7 +292,8 @@ const tableData2 = ref([
tchScore: "", tchScore: "",
tchComment: "", tchComment: "",
ascription: "3", ascription: "3",
},{ },
{
module: "BI可视化分析", module: "BI可视化分析",
reportName: "", reportName: "",
updateTime: "", updateTime: "",
@ -296,7 +303,8 @@ const tableData2 = ref([
tchScore: "", tchScore: "",
tchComment: "", tchComment: "",
ascription: "1", ascription: "1",
},{ },
{
module: "BI可视化分析", module: "BI可视化分析",
reportName: "", reportName: "",
updateTime: "", updateTime: "",
@ -306,7 +314,8 @@ const tableData2 = ref([
tchScore: "", tchScore: "",
tchComment: "", tchComment: "",
ascription: "2", ascription: "2",
},{ },
{
module: "BI可视化分析", module: "BI可视化分析",
reportName: "", reportName: "",
updateTime: "", updateTime: "",
@ -408,12 +417,12 @@ const data = ref({
module: "", module: "",
userId: JSON.parse(getUserInfo()).userId, userId: JSON.parse(getUserInfo()).userId,
schoolId: JSON.parse(getUserInfo()).schoolId, schoolId: JSON.parse(getUserInfo()).schoolId,
count:"" count: "",
}); });
const handleChange = (info, rowData) => { const handleChange = (info, rowData) => {
fileList.value.push(info); fileList.value.push(info);
data.value.module=rowData.module data.value.module = rowData.module;
data.value.count=rowData.ascription data.value.count = rowData.ascription;
let formData2 = new FormData(); let formData2 = new FormData();
formData2.append("file", fileList.value[0].raw); formData2.append("file", fileList.value[0].raw);
formData2.append("stuBlockProduct", JSON.stringify(data.value)); formData2.append("stuBlockProduct", JSON.stringify(data.value));
@ -424,7 +433,7 @@ const handleChange = (info,rowData) => {
}; };
const uploadRef = ref(null); const uploadRef = ref(null);
function padZero(value) { 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 date = new Date(timestamp);
@ -437,23 +446,23 @@ const formt=(timestamp)=>{
const seconds = padZero(date.getSeconds()); const seconds = padZero(date.getSeconds());
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
} };
const getReports = () => { const getReports = () => {
API.getDetailsTrainingReport(data.value).then((res) => { API.getDetailsTrainingReport(data.value).then((res) => {
// tableData2.value.splice(0, tableData2.value.length); // tableData2.value.splice(0, tableData2.value.length);
if (res.data !== null) { if (res.data !== null) {
tableData2.value.forEach(item => { tableData2.value.forEach((item) => {
const match = res.data.find(dataItem => dataItem.module === item.module && dataItem.ascription === item.ascription); const match = res.data.find((dataItem) => dataItem.module === item.module && dataItem.ascription === item.ascription);
if (match) { if (match) {
item.reportName = match.reportName item.reportName = match.reportName;
item.uploadTime = formt(match.uploadTime); 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.filePath = match.url;
item.tchScore = match.rating; item.tchScore = match.rating;
item.tchComment = match.teacherComments; item.tchComment = match.teacherComments;
item.id=match.id item.id = match.id;
} }
}) });
} }
}); });
}; };
@ -465,15 +474,15 @@ const data2 = {
// //
const uploadReport = async (id) => { const uploadReport = async (id) => {
if (!id) { if (!id) {
return 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.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}`) // 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 isUpdate = ref(false);
// //
const comments=ref('') const comments = ref("");
const showComments = (item) => { const showComments = (item) => {
if (!item.tchComment) { if (!item.tchComment) {
ElMessage({ ElMessage({
@ -482,7 +491,7 @@ const showComments = (item) => {
}); });
return; return;
} }
comments.value=item.tchComment comments.value = item.tchComment;
dialogVisible.value = true; dialogVisible.value = true;
}; };
onMounted(() => { onMounted(() => {
@ -574,6 +583,9 @@ const updateReportGrade = () => {
getReports(); getReports();
cerateGrade(); cerateGrade();
}; };
const height=computed(()=>{
return window.innerHeight-150
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.study_main { .study_main {

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

@ -2,18 +2,28 @@
* @Author: qinzhenpen qzp1807@126.com * @Author: qinzhenpen qzp1807@126.com
* @Date: 2024-08-16 09:16:26 * @Date: 2024-08-16 09:16:26
* @LastEditors: qinzhenpen qzp1807@126.com * @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 * @FilePath: \vue3\src\views\visual-analysis\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
--> -->
<template> <template>
<div> <div class="el-Aitools">
<iframe src="http://118.31.7.2:96" width="100%" height="900" scrolling="no" frameborder="0"></iframe> <iframe id="iframe" src="http://118.31.7.2:96" width="100%" height="100%" frameborder="1"></iframe>
</div> </div>
</template> </template>
<script setup> <script setup></script>
<style lang="scss" scoped>
</script> .el-Aitools {
<style lang='scss' scoped> 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> </style>
Loading…
Cancel
Save