|
|
|
@ -1,12 +1,18 @@
|
|
|
|
<template>
|
|
|
|
<template>
|
|
|
|
<el-scrollbar height="800px">
|
|
|
|
<el-scrollbar height="800px">
|
|
|
|
<div class="main-top">
|
|
|
|
<div class="main-top">
|
|
|
|
<span style="font-weight: bold;font-size: 18px;color: #3596EB;">任务描述</span>
|
|
|
|
<span style="font-weight: bold; font-size: 18px; color: #3596eb">任务描述</span>
|
|
|
|
<p style="font-weight: 400;font-size: 12px;color: #E6E6E6;">(给出任务清单参考,做哪些数据的统计分析)Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar sic tempor. Sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci, sed rhoncus pronin sapien nunc accuan eget.</p>
|
|
|
|
<p style="font-weight: 400; font-size: 12px; color: #e6e6e6">(给出任务清单参考,做哪些数据的统计分析)Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar sic tempor. Sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci, sed rhoncus pronin sapien nunc accuan eget.</p>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="main-but">
|
|
|
|
<div class="main-but">
|
|
|
|
<el-button><img src="../../../assets/images/导入.png" alt="">算法知识导入</el-button>
|
|
|
|
<el-button>
|
|
|
|
<el-button @click="taskSubmit"><img src="../../../assets/images/提交.png" alt="">实训任务提交</el-button>
|
|
|
|
<img src="../../../assets/images/导入.png" alt="" />
|
|
|
|
|
|
|
|
算法知识导入
|
|
|
|
|
|
|
|
</el-button>
|
|
|
|
|
|
|
|
<el-button @click="taskSubmit">
|
|
|
|
|
|
|
|
<img src="../../../assets/images/提交.png" alt="" />
|
|
|
|
|
|
|
|
实训任务提交
|
|
|
|
|
|
|
|
</el-button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="app-main">
|
|
|
|
<div class="app-main">
|
|
|
|
<div class="main-left">
|
|
|
|
<div class="main-left">
|
|
|
|
@ -15,255 +21,294 @@
|
|
|
|
<span>一、选择指标</span>
|
|
|
|
<span>一、选择指标</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="metrics">
|
|
|
|
<div class="metrics">
|
|
|
|
<el-select v-model="input" placeholder="请选择数据" style="width: 180px">
|
|
|
|
<el-select v-model="input" placeholder="请选择数据" style="width: 180px" @change="selectType">
|
|
|
|
<el-option
|
|
|
|
<el-option v-for="item in algorithmStore.userDataLabel" :key="item" :label="item" :value="item" />
|
|
|
|
v-for="item in options"
|
|
|
|
|
|
|
|
:key="item.value"
|
|
|
|
|
|
|
|
:label="item.label"
|
|
|
|
|
|
|
|
:value="item.value"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</el-select>
|
|
|
|
</el-select>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="metrics-table" style="margin-top: 10px">
|
|
|
|
<div class="metrics-table" style="margin-top: 10px">
|
|
|
|
<el-table border :data="tableData" style="width: 100%" :header-cell-style="headerCellStyle">
|
|
|
|
<el-table border :data="algorithmStore.indexLibrary" style="width: 100%" :header-cell-style="headerCellStyle" @selection-change="handleSelectionChange">
|
|
|
|
<el-table-column type="selection" prop="date" label="Date" align="center" />
|
|
|
|
<el-table-column type="selection" prop="date" label="Date" align="center" />
|
|
|
|
<el-table-column prop="name" label="指标" align="center"/>
|
|
|
|
<el-table-column label="指标" align="center" prop="label" />
|
|
|
|
</el-table>
|
|
|
|
</el-table>
|
|
|
|
<el-button>确定</el-button>
|
|
|
|
<el-button @click="submit">确定</el-button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="left-top">
|
|
|
|
<div class="left-top">
|
|
|
|
<span>二、数据预处理</span>
|
|
|
|
<span>二、数据预处理</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="metrics">
|
|
|
|
<div class="metrics">
|
|
|
|
<el-select v-model="input" placeholder="请选择数据" style="width: 180px">
|
|
|
|
<el-select v-model="preProcessText.text1" placeholder="请选择数据" style="width: 180px">
|
|
|
|
<el-option
|
|
|
|
<el-option label="数据去重" value="数据去重" />
|
|
|
|
v-for="item in options"
|
|
|
|
|
|
|
|
:key="item.value"
|
|
|
|
|
|
|
|
:label="item.label"
|
|
|
|
|
|
|
|
:value="item.value"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</el-select>
|
|
|
|
</el-select>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="metrics" style="margin-top: 15px">
|
|
|
|
<div class="metrics" style="margin-top: 15px">
|
|
|
|
<el-select v-model="input" placeholder="请选择数据" style="width: 180px">
|
|
|
|
<el-select v-model="preProcessText.text2" placeholder="请选择数据" style="width: 180px" @change="preProcess">
|
|
|
|
<el-option
|
|
|
|
<el-option label="缺失值处理-剔除数据" value="缺失值处理-剔除数据" />
|
|
|
|
v-for="item in options"
|
|
|
|
<el-option label="缺失值处理一均值替代" value="缺失值处理一均值替代" />
|
|
|
|
:key="item.value"
|
|
|
|
|
|
|
|
:label="item.label"
|
|
|
|
|
|
|
|
:value="item.value"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</el-select>
|
|
|
|
</el-select>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="left-top" style="margin-top: 10px">
|
|
|
|
<div class="left-top" style="margin-top: 10px">
|
|
|
|
<span>三、模型参数设置</span>
|
|
|
|
<span>三、模型参数设置</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="metrics-table" style="margin-top: 10px">
|
|
|
|
<div class="metrics-table" style="margin-top: 10px">
|
|
|
|
<el-table border :data="tableData" style="width: 100%" :header-cell-style="headerCellStyle">
|
|
|
|
<el-table border :data="modelParams" style="width: 100%" :header-cell-style="headerCellStyle" @selection-change="handlemodelSelectionChange">
|
|
|
|
<el-table-column type="selection" prop="date" label="Date" align="center" />
|
|
|
|
<el-table-column type="selection" prop="date" label="Date" align="center" />
|
|
|
|
<el-table-column prop="name" label="指标" align="center"/>
|
|
|
|
<el-table-column prop="name" label="统计量" align="center" />
|
|
|
|
</el-table>
|
|
|
|
</el-table>
|
|
|
|
<el-button>计算</el-button>
|
|
|
|
<el-button @click="modelCalculation">计算</el-button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div style="margin-top: auto;">
|
|
|
|
<div style="margin-top: auto">
|
|
|
|
<div class="startOver">
|
|
|
|
<div class="startOver">
|
|
|
|
<img src="../../../assets/images/重新开始.png" alt="">
|
|
|
|
<img src="../../../assets/images/重新开始.png" alt="" />
|
|
|
|
<span>重新开始</span>
|
|
|
|
<span>重新开始</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="main-right">
|
|
|
|
<div class="main-right">
|
|
|
|
<div>
|
|
|
|
<div>
|
|
|
|
<span style="font-weight: bold;font-size: 18px;color: #3596EB;">分析数据:</span>
|
|
|
|
<span style="font-weight: bold; font-size: 18px; color: #3596eb">分析数据:</span>
|
|
|
|
<el-table :data="tableData" style="width: 94%;margin-top:10px" :header-cell-style="headerCellStyle" height="350">
|
|
|
|
<el-table :data="analysisData" style="width: 100%; margin-top: 10px" :header-cell-style="headerCellStyle">
|
|
|
|
<el-table-column v-for="column in tableLabel" :key="column.prop" :prop="column.prop" :label="column.label" align="center"/>
|
|
|
|
<el-table-column v-for="column in analysisHanderKry" :key="column" :prop="column" :label="column" align="center" />
|
|
|
|
</el-table>
|
|
|
|
</el-table>
|
|
|
|
<el-pagination style="margin-top:10px" background layout="prev, pager, next" :total="1000" />
|
|
|
|
<!-- <pagination v-show="datatotal > 0" :total="datatotal" v-model:page="dataqueryParams.index" v-model:limit="dataqueryParams.size" @pagination="submit" style="margin-top: 10px" /> -->
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="analysisResults" style="margin-top: 20px">
|
|
|
|
<div class="analysisResults" style="margin-top: 20px">
|
|
|
|
<span style="font-weight: bold;font-size: 18px;color: #3596EB;display: block;">分析结果:</span>
|
|
|
|
<span style="font-weight: bold; font-size: 18px; color: #3596eb; display: block">分析结果:</span>
|
|
|
|
<el-button>下载</el-button>
|
|
|
|
<el-button>下载</el-button>
|
|
|
|
<el-table :data="tableData" style="width: 94%; margin-top: 10px" :header-cell-style="headerCellStyle" height="350">
|
|
|
|
<el-table :data="tableData" style="width: 94%; margin-top: 10px" :header-cell-style="headerCellStyle" height="350">
|
|
|
|
<el-table-column v-for="column in tableLabel" :key="column.prop" :prop="column.prop" :label="column.label" align="center"/>
|
|
|
|
<el-table-column v-for="column in tableLabel" :key="column.label" :prop="column.label" :label="column.label" align="center"></el-table-column>
|
|
|
|
|
|
|
|
<p v-for="column in tableLabel" :key="column.label">{{ column.label }}</p>
|
|
|
|
</el-table>
|
|
|
|
</el-table>
|
|
|
|
<el-pagination style="margin-top: 10px" background layout="prev, pager, next" :total="1000" />
|
|
|
|
<el-pagination style="margin-top: 10px" background layout="prev, pager, next" :total="1000" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</el-scrollbar>
|
|
|
|
</el-scrollbar>
|
|
|
|
|
|
|
|
<el-dialog v-model="dialogVisible" title="实训任务提交" width="565" custom-class="dialogClass" :show-close="false">
|
|
|
|
<el-dialog
|
|
|
|
|
|
|
|
v-model="dialogVisible"
|
|
|
|
|
|
|
|
title="实训任务提交"
|
|
|
|
|
|
|
|
width="565"
|
|
|
|
|
|
|
|
custom-class="dialogClass"
|
|
|
|
|
|
|
|
:show-close="false"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<template #header="{ close, titleId, titleClass }">
|
|
|
|
<template #header="{ close, titleId, titleClass }">
|
|
|
|
<div class="my-header">
|
|
|
|
<div class="my-header">
|
|
|
|
<span :id="titleId" :class="titleClass">实训任务提交</span>
|
|
|
|
<span :id="titleId" :class="titleClass">实训任务提交</span>
|
|
|
|
<img class="gbImg" src="../../../assets/images/关闭.png" @click="close" alt="">
|
|
|
|
<img class="gbImg" src="../../../assets/images/关闭.png" @click="close" alt="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<img class="xtImg" src="../../../assets/images/线条.png" alt="">
|
|
|
|
<img class="xtImg" src="../../../assets/images/线条.png" alt="" />
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
<div class="from-item">
|
|
|
|
<div class="from-item">
|
|
|
|
<el-form :inline="true" label-position="right" label-width="84px" :model="form" class="demo-form-inline">
|
|
|
|
<el-form :inline="true" label-position="right" label-width="84px" :model="form" class="demo-form-inline">
|
|
|
|
<el-form-item label="平均数:">
|
|
|
|
<el-form-item label="平均数:">
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
<el-input style="width: 120px" v-model="formInline.user" clearable />
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="众数:">
|
|
|
|
<el-form-item label="众数:">
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
<el-input style="width: 120px" v-model="formInline.user" clearable />
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="中位数:">
|
|
|
|
<el-form-item label="中位数:">
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
<el-input style="width: 120px" v-model="formInline.user" clearable />
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="标准差:">
|
|
|
|
<el-form-item label="标准差:">
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
<el-input style="width: 120px" v-model="formInline.user" clearable />
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="方差:">
|
|
|
|
<el-form-item label="方差:">
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
<el-input style="width: 120px" v-model="formInline.user" clearable />
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="峰度:">
|
|
|
|
<el-form-item label="峰度:">
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
<el-input style="width: 120px" v-model="formInline.user" clearable />
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="标准误差:">
|
|
|
|
<el-form-item label="标准误差:">
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
<el-input style="width: 120px" v-model="formInline.user" clearable />
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="偏度:">
|
|
|
|
<el-form-item label="偏度:">
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
<el-input style="width: 120px" v-model="formInline.user" clearable />
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="最大值:">
|
|
|
|
<el-form-item label="最大值:">
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
<el-input style="width: 120px" v-model="formInline.user" clearable />
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="最小值:">
|
|
|
|
<el-form-item label="最小值:">
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
<el-input style="width: 120px" v-model="formInline.user" clearable />
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="求和:">
|
|
|
|
<el-form-item label="求和:">
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
<el-input style="width: 120px" v-model="formInline.user" clearable />
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="观测数:">
|
|
|
|
<el-form-item label="观测数:">
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
<el-input style="width: 120px" v-model="formInline.user" clearable />
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
</el-form>
|
|
|
|
</el-form>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<template #footer>
|
|
|
|
<template #footer>
|
|
|
|
<div class="dialog-footer">
|
|
|
|
<div class="dialog-footer">
|
|
|
|
<el-button @click="dialogVisible = false">确定</el-button>
|
|
|
|
<el-button @click="dialogVisible = false">确定</el-button>
|
|
|
|
<el-button type="primary" @click="dialogVisible = false">
|
|
|
|
<el-button type="primary" @click="dialogVisible = false">返回</el-button>
|
|
|
|
返回
|
|
|
|
|
|
|
|
</el-button>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</el-dialog>
|
|
|
|
</el-dialog>
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script setup>
|
|
|
|
<script setup>
|
|
|
|
const dialogVisible=ref(false)
|
|
|
|
import * as API from "@/api/AI.js";
|
|
|
|
const tableLabel=reactive([
|
|
|
|
|
|
|
|
{prop:'date',label:'用户ID'},
|
|
|
|
import * as marketingAlgorithmApi from "@/api/marketing-algorithm.js";
|
|
|
|
{prop:'name',label:'登录名'},
|
|
|
|
import useAlgorithmStore from "@/store/modules/algorithm.js";
|
|
|
|
{prop:'name',label:'用户姓名'},
|
|
|
|
import useUserStore from "@/store/modules/user";
|
|
|
|
{prop:'name',label:'学号'},
|
|
|
|
import { onMounted, ref } from "vue";
|
|
|
|
{prop:'name',label:'班级'},
|
|
|
|
const userStore = useUserStore();
|
|
|
|
{prop:'name',label:'专业'},
|
|
|
|
const algorithmStore = useAlgorithmStore();
|
|
|
|
{prop:'name',label:'学校'},
|
|
|
|
const n_dataTableQuery = ref({
|
|
|
|
{prop:'name',label:'角色名称'},
|
|
|
|
index: 1,
|
|
|
|
{prop:'name',label:'角色性别'},
|
|
|
|
size: 20,
|
|
|
|
{prop:'name',label:'角色年龄'},
|
|
|
|
tableName: "用户属性表",
|
|
|
|
{prop:'name',label:'注册时间'},
|
|
|
|
userId: userStore.userInfo.userId,
|
|
|
|
{prop:'name',label:'所在地'}
|
|
|
|
});
|
|
|
|
])
|
|
|
|
const dialogVisible = ref(false);
|
|
|
|
const formInline=reactive({
|
|
|
|
// 模型参数
|
|
|
|
user:'',
|
|
|
|
const modelParams = reactive([
|
|
|
|
region:''
|
|
|
|
{
|
|
|
|
})
|
|
|
|
name: "平均数",
|
|
|
|
const input=ref()
|
|
|
|
},
|
|
|
|
const options = [
|
|
|
|
{
|
|
|
|
|
|
|
|
name: "中位数",
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
name: "众数",
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
name: "标准差",
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
name: "方差",
|
|
|
|
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
value: 'Option1',
|
|
|
|
name: "标准误差",
|
|
|
|
label: 'Option1',
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
value: 'Option2',
|
|
|
|
name: "峰度;",
|
|
|
|
label: 'Option2',
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
value: 'Option3',
|
|
|
|
name: "偏度",
|
|
|
|
label: 'Option3',
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
value: 'Option4',
|
|
|
|
name: "最大值",
|
|
|
|
label: 'Option4',
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
value: 'Option5',
|
|
|
|
name: "最小值",
|
|
|
|
label: 'Option5',
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
]
|
|
|
|
{
|
|
|
|
|
|
|
|
name: "求和",
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
name: "观测数",
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
const analysisData = ref([]);
|
|
|
|
|
|
|
|
const analysisHanderKry = ref([]);
|
|
|
|
|
|
|
|
const tableLabel = reactive([
|
|
|
|
|
|
|
|
{ prop: "date", label: "用户ID" },
|
|
|
|
|
|
|
|
{ prop: "name", label: "登录名" },
|
|
|
|
|
|
|
|
{ prop: "name", label: "用户姓名" },
|
|
|
|
|
|
|
|
{ prop: "name", label: "学号" },
|
|
|
|
|
|
|
|
{ prop: "name", label: "班级" },
|
|
|
|
|
|
|
|
{ prop: "name", label: "专业" },
|
|
|
|
|
|
|
|
{ prop: "name", label: "学校" },
|
|
|
|
|
|
|
|
{ prop: "name", label: "角色名称" },
|
|
|
|
|
|
|
|
{ prop: "name", label: "角色性别" },
|
|
|
|
|
|
|
|
{ prop: "name", label: "角色年龄" },
|
|
|
|
|
|
|
|
{ prop: "name", label: "注册时间" },
|
|
|
|
|
|
|
|
{ prop: "name", label: "所在地" },
|
|
|
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
const formInline = ref({});
|
|
|
|
|
|
|
|
const input = ref();
|
|
|
|
|
|
|
|
const g_indicatorData = ref([]);
|
|
|
|
|
|
|
|
const preProcessText = ref({
|
|
|
|
|
|
|
|
text1: "数据去重",
|
|
|
|
|
|
|
|
text2: "",
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
// 模型参数
|
|
|
|
|
|
|
|
const g_modelParameter = ref([]);
|
|
|
|
|
|
|
|
// 预处理
|
|
|
|
|
|
|
|
const preProcess = (tetx) => {
|
|
|
|
|
|
|
|
API.dataPreprocessing({
|
|
|
|
|
|
|
|
mapList: analysisData.value,
|
|
|
|
|
|
|
|
method: preProcessText.value.text2,
|
|
|
|
|
|
|
|
userId: n_dataTableQuery.value.userId,
|
|
|
|
|
|
|
|
}).then((res) => {
|
|
|
|
|
|
|
|
analysisData.value = res.data;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
// 提交
|
|
|
|
const taskSubmit = () => {
|
|
|
|
const taskSubmit = () => {
|
|
|
|
dialogVisible.value=true
|
|
|
|
dialogVisible.value = true;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
const tableData = [
|
|
|
|
const tableData = [
|
|
|
|
{
|
|
|
|
{
|
|
|
|
date: '2016-05-03',
|
|
|
|
date: "2016-05-03",
|
|
|
|
name: 'Tom',
|
|
|
|
name: "Tom",
|
|
|
|
address: 'No. 189, Grove St, Los Angeles',
|
|
|
|
address: "No. 189, Grove St, Los Angeles",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
date: '2016-05-02',
|
|
|
|
date: "2016-05-02",
|
|
|
|
name: 'Tom',
|
|
|
|
name: "Tom",
|
|
|
|
address: 'No. 189, Grove St, Los Angeles',
|
|
|
|
address: "No. 189, Grove St, Los Angeles",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
date: '2016-05-04',
|
|
|
|
date: "2016-05-04",
|
|
|
|
name: 'Tom',
|
|
|
|
name: "Tom",
|
|
|
|
address: 'No. 189, Grove St, Los Angeles',
|
|
|
|
address: "No. 189, Grove St, Los Angeles",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
date: '2016-05-04',
|
|
|
|
date: "2016-05-01",
|
|
|
|
name: 'Tom',
|
|
|
|
name: "Tom",
|
|
|
|
address: 'No. 189, Grove St, Los Angeles',
|
|
|
|
address: "No. 189, Grove St, Los Angeles",
|
|
|
|
},{
|
|
|
|
|
|
|
|
date: '2016-05-04',
|
|
|
|
|
|
|
|
name: 'Tom',
|
|
|
|
|
|
|
|
address: 'No. 189, Grove St, Los Angeles',
|
|
|
|
|
|
|
|
},{
|
|
|
|
|
|
|
|
date: '2016-05-04',
|
|
|
|
|
|
|
|
name: 'Tom',
|
|
|
|
|
|
|
|
address: 'No. 189, Grove St, Los Angeles',
|
|
|
|
|
|
|
|
},{
|
|
|
|
|
|
|
|
date: '2016-05-04',
|
|
|
|
|
|
|
|
name: 'Tom',
|
|
|
|
|
|
|
|
address: 'No. 189, Grove St, Los Angeles',
|
|
|
|
|
|
|
|
},{
|
|
|
|
|
|
|
|
date: '2016-05-04',
|
|
|
|
|
|
|
|
name: 'Tom',
|
|
|
|
|
|
|
|
address: 'No. 189, Grove St, Los Angeles',
|
|
|
|
|
|
|
|
},{
|
|
|
|
|
|
|
|
date: '2016-05-04',
|
|
|
|
|
|
|
|
name: 'Tom',
|
|
|
|
|
|
|
|
address: 'No. 189, Grove St, Los Angeles',
|
|
|
|
|
|
|
|
},{
|
|
|
|
|
|
|
|
date: '2016-05-04',
|
|
|
|
|
|
|
|
name: 'Tom',
|
|
|
|
|
|
|
|
address: 'No. 189, Grove St, Los Angeles',
|
|
|
|
|
|
|
|
},{
|
|
|
|
|
|
|
|
date: '2016-05-04',
|
|
|
|
|
|
|
|
name: 'Tom',
|
|
|
|
|
|
|
|
address: 'No. 189, Grove St, Los Angeles',
|
|
|
|
|
|
|
|
},{
|
|
|
|
|
|
|
|
date: '2016-05-04',
|
|
|
|
|
|
|
|
name: 'Tom',
|
|
|
|
|
|
|
|
address: 'No. 189, Grove St, Los Angeles',
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
]
|
|
|
|
];
|
|
|
|
const headerCellStyle = () => {
|
|
|
|
const headerCellStyle = () => {
|
|
|
|
return {
|
|
|
|
return {
|
|
|
|
backgroundColor: "#1882DE !important", // 设置表头背景颜色
|
|
|
|
backgroundColor: "#1882DE !important", // 设置表头背景颜色
|
|
|
|
color: "#ffffff !important",
|
|
|
|
color: "#ffffff !important",
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
// 选择指标
|
|
|
|
|
|
|
|
const selectType = (type) => {
|
|
|
|
|
|
|
|
n_dataTableQuery.value.tableName = type;
|
|
|
|
|
|
|
|
getIndicator();
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
// 选择数据
|
|
|
|
|
|
|
|
const handleSelectionChange = (type) => {
|
|
|
|
|
|
|
|
g_indicatorData.value = type.map((item) => item.label);
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
// 提交指標
|
|
|
|
|
|
|
|
const submit = () => {
|
|
|
|
|
|
|
|
marketingAlgorithmApi.getMarketingAlgorithm({ userId: n_dataTableQuery.value.userId, tableName: n_dataTableQuery.value.tableName, fieldList: g_indicatorData.value }).then((res) => {
|
|
|
|
|
|
|
|
analysisData.value = res.data;
|
|
|
|
|
|
|
|
analysisHanderKry.value = Object.keys(res.data[0]);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
// 选择模型
|
|
|
|
|
|
|
|
const handlemodelSelectionChange = (type) => {
|
|
|
|
|
|
|
|
g_modelParameter.value = type.map((item) => item.name);
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
//计算
|
|
|
|
|
|
|
|
const modelCalculation = () => {
|
|
|
|
|
|
|
|
const processedData = processArrayData(analysisHanderKry.value, analysisData.value);
|
|
|
|
|
|
|
|
marketingAlgorithmApi.getMarketingAlgorithmPreprocessing(JSON.stringify({ map: processedData, statistic: g_modelParameter.value, userId: n_dataTableQuery.value.userId }));
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
function processArrayData(keys, data) {
|
|
|
|
|
|
|
|
// 创建结果对象
|
|
|
|
|
|
|
|
const result = {};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 遍历每个键
|
|
|
|
|
|
|
|
keys.forEach((key) => {
|
|
|
|
|
|
|
|
// 为每个键创建一个数组,包含 data 数组中该键的所有值
|
|
|
|
|
|
|
|
const values = data.map((item) => item[key]);
|
|
|
|
|
|
|
|
// 将键和对应的值数组添加到结果对象中
|
|
|
|
|
|
|
|
result[key] = values;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
|
|
|
getIndicator();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
// 获取指标
|
|
|
|
|
|
|
|
const getIndicator = () => {
|
|
|
|
|
|
|
|
algorithmStore.getUserDatabase({ userId: n_dataTableQuery.value.userId, tableName: n_dataTableQuery.value.tableName });
|
|
|
|
|
|
|
|
};
|
|
|
|
</script>
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
@ -281,16 +326,16 @@ margin: 20px 20px 0;
|
|
|
|
.el-button:nth-child(1) {
|
|
|
|
.el-button:nth-child(1) {
|
|
|
|
width: 180px;
|
|
|
|
width: 180px;
|
|
|
|
height: 56px;
|
|
|
|
height: 56px;
|
|
|
|
background: url('../../../assets/images/011.png');
|
|
|
|
background: url("../../../assets/images/011.png");
|
|
|
|
color:#FFFFFF;
|
|
|
|
color: #ffffff;
|
|
|
|
border-color:#FFFFFF00;
|
|
|
|
border-color: #ffffff00;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.el-button:nth-child(2) {
|
|
|
|
.el-button:nth-child(2) {
|
|
|
|
width: 180px;
|
|
|
|
width: 180px;
|
|
|
|
height: 56px;
|
|
|
|
height: 56px;
|
|
|
|
background: url('../../../assets/images/022.png');
|
|
|
|
background: url("../../../assets/images/022.png");
|
|
|
|
color:#FFFFFF;
|
|
|
|
color: #ffffff;
|
|
|
|
border-color:#FFFFFF00;
|
|
|
|
border-color: #ffffff00;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.app-main {
|
|
|
|
.app-main {
|
|
|
|
@ -321,9 +366,9 @@ margin: 20px 20px 0;
|
|
|
|
.el-button {
|
|
|
|
.el-button {
|
|
|
|
width: 149px;
|
|
|
|
width: 149px;
|
|
|
|
height: 48px;
|
|
|
|
height: 48px;
|
|
|
|
background: url('../../../assets/images/确定.png');
|
|
|
|
background: url("../../../assets/images/确定.png");
|
|
|
|
color:#FFFFFF;
|
|
|
|
color: #ffffff;
|
|
|
|
border-color:#FFFFFF00;
|
|
|
|
border-color: #ffffff00;
|
|
|
|
background-size: 100% 100%;
|
|
|
|
background-size: 100% 100%;
|
|
|
|
margin: 15px;
|
|
|
|
margin: 15px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -332,7 +377,7 @@ margin: 20px 20px 0;
|
|
|
|
margin-left: -10px;
|
|
|
|
margin-left: -10px;
|
|
|
|
width: 205px;
|
|
|
|
width: 205px;
|
|
|
|
height: 55px;
|
|
|
|
height: 55px;
|
|
|
|
background: #00F4FF;
|
|
|
|
background: #00f4ff;
|
|
|
|
//水平居中
|
|
|
|
//水平居中
|
|
|
|
display: flex;
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
|
|
align-items: center;
|
|
|
|
@ -341,10 +386,10 @@ margin: 20px 20px 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
:deep(.el-table) {
|
|
|
|
:deep(.el-table) {
|
|
|
|
--el-table-row-hover-bg-color: #002651 !important;
|
|
|
|
--el-table-row-hover-bg-color: #002651 !important;
|
|
|
|
--el-table-border-color: #7AC1FF;
|
|
|
|
--el-table-border-color: #7ac1ff;
|
|
|
|
.el-table__row {
|
|
|
|
.el-table__row {
|
|
|
|
background-color: #002652 !important;
|
|
|
|
background-color: #002652 !important;
|
|
|
|
color: #E6E6E6;
|
|
|
|
color: #e6e6e6;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -355,35 +400,35 @@ margin: 20px 20px 0;
|
|
|
|
border: 1px solid #0452c6;
|
|
|
|
border: 1px solid #0452c6;
|
|
|
|
:deep(.el-table__header) {
|
|
|
|
:deep(.el-table__header) {
|
|
|
|
.el-table__cell {
|
|
|
|
.el-table__cell {
|
|
|
|
background:linear-gradient(0deg, #5304BE 0%, #9126FE 100%) !important;
|
|
|
|
background: linear-gradient(0deg, #5304be 0%, #9126fe 100%) !important;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
:deep(.el-table) {
|
|
|
|
:deep(.el-table) {
|
|
|
|
--el-table-row-hover-bg-color: #002651 !important;
|
|
|
|
--el-table-row-hover-bg-color: #002651 !important;
|
|
|
|
--el-table-border-color: #002651;
|
|
|
|
--el-table-border-color: #002651;
|
|
|
|
--el-table-bg-color:#FFFFFF00;
|
|
|
|
--el-table-bg-color: #ffffff00;
|
|
|
|
.el-table__row {
|
|
|
|
.el-table__row {
|
|
|
|
background-color: #002652 !important;
|
|
|
|
background-color: #002652 !important;
|
|
|
|
color: #E6E6E6;
|
|
|
|
color: #e6e6e6;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.metrics {
|
|
|
|
.metrics {
|
|
|
|
:deep(.el-input) {
|
|
|
|
:deep(.el-input) {
|
|
|
|
.el-input__wrapper {
|
|
|
|
.el-input__wrapper {
|
|
|
|
background-color:#FFFFFF00;
|
|
|
|
background-color: #ffffff00;
|
|
|
|
background-image:url('../../../assets/images/下拉框.png');
|
|
|
|
background-image: url("../../../assets/images/下拉框.png");
|
|
|
|
background-size: 100% 100%;
|
|
|
|
background-size: 100% 100%;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
--el-input-text-color:#FFFFFF;
|
|
|
|
--el-input-text-color: #ffffff;
|
|
|
|
--el-input-border-color:#FFFFFF00;
|
|
|
|
--el-input-border-color: #ffffff00;
|
|
|
|
--el-input-hover-border-color:#FFFFFF00;
|
|
|
|
--el-input-hover-border-color: #ffffff00;
|
|
|
|
--el-input-hover-border:#FFFFFF00;
|
|
|
|
--el-input-hover-border: #ffffff00;
|
|
|
|
--el-select-border-color-hover:#FFFFFF00;
|
|
|
|
--el-select-border-color-hover: #ffffff00;
|
|
|
|
--el-select-input-focus-border-color:#FFFFFF00;
|
|
|
|
--el-select-input-focus-border-color: #ffffff00;
|
|
|
|
--el-input-placeholder-color:#FFFFFF;
|
|
|
|
--el-input-placeholder-color: #ffffff;
|
|
|
|
.el-input__inner {
|
|
|
|
.el-input__inner {
|
|
|
|
color:#FFFFFF;
|
|
|
|
color: #ffffff;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -392,22 +437,22 @@ margin: 20px 20px 0;
|
|
|
|
.el-button {
|
|
|
|
.el-button {
|
|
|
|
width: 89px;
|
|
|
|
width: 89px;
|
|
|
|
height: 31px;
|
|
|
|
height: 31px;
|
|
|
|
background: url('../../../assets/images/下载.png');
|
|
|
|
background: url("../../../assets/images/下载.png");
|
|
|
|
color: black;
|
|
|
|
color: black;
|
|
|
|
border-color:#FFFFFF00;
|
|
|
|
border-color: #ffffff00;
|
|
|
|
// background-size: 100% 100%;
|
|
|
|
// background-size: 100% 100%;
|
|
|
|
margin: 15px 0px 5px;
|
|
|
|
margin: 15px 0px 5px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
:deep(.el-form-item__label) {
|
|
|
|
:deep(.el-form-item__label) {
|
|
|
|
color: #FFFFFF;;
|
|
|
|
color: #ffffff;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.from-item {
|
|
|
|
.from-item {
|
|
|
|
padding: 20px;
|
|
|
|
padding: 20px;
|
|
|
|
.el-input {
|
|
|
|
.el-input {
|
|
|
|
--el-input-text-color:#FFFFFF;
|
|
|
|
--el-input-text-color: #ffffff;
|
|
|
|
--el-input-bg-color: #002651;
|
|
|
|
--el-input-bg-color: #002651;
|
|
|
|
--el-input-border-color:#67B3D6;
|
|
|
|
--el-input-border-color: #67b3d6;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.dialog-footer {
|
|
|
|
.dialog-footer {
|
|
|
|
@ -415,8 +460,8 @@ margin: 20px 20px 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
</style>
|
|
|
|
<style lang="scss">
|
|
|
|
<style lang="scss">
|
|
|
|
.dialogClass{
|
|
|
|
.el-dialog {
|
|
|
|
background:url('../../../assets/images/弹框.png') !important;
|
|
|
|
background: url("../../../assets/images/弹框.png") !important;
|
|
|
|
background-size: 100% 100% !important;
|
|
|
|
background-size: 100% 100% !important;
|
|
|
|
.el-dialog__header {
|
|
|
|
.el-dialog__header {
|
|
|
|
padding: 5px 0px;
|
|
|
|
padding: 5px 0px;
|
|
|
|
@ -440,8 +485,11 @@ margin: 20px 20px 0;
|
|
|
|
gap: 16px;
|
|
|
|
gap: 16px;
|
|
|
|
text-align: center;
|
|
|
|
text-align: center;
|
|
|
|
span {
|
|
|
|
span {
|
|
|
|
color: #FFFFFF;
|
|
|
|
color: #ffffff;
|
|
|
|
padding: 38px 20px 0;
|
|
|
|
padding: 38px 20px 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.el-table__body-wrapper {
|
|
|
|
|
|
|
|
// background: #020620 !important;
|
|
|
|
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
</style>
|