dev-QQq
qinzhenpen 2 years ago
commit 663511c644

Binary file not shown.

@ -15,12 +15,13 @@
"url": "https://gitee.com/y_project/RuoYi-Vue.git" "url": "https://gitee.com/y_project/RuoYi-Vue.git"
}, },
"dependencies": { "dependencies": {
"@antv/g2": "^5.2.3",
"echarts-stat": "^1.2.0",
"@element-plus/icons-vue": "2.0.10", "@element-plus/icons-vue": "2.0.10",
"@vueup/vue-quill": "1.1.0", "@vueup/vue-quill": "1.1.0",
"@vueuse/core": "9.5.0", "@vueuse/core": "9.5.0",
"axios": "0.27.2", "axios": "0.27.2",
"echarts": "5.4.0", "echarts": "5.4.0",
"echarts-stat": "^1.2.0",
"element-plus": "2.2.27", "element-plus": "2.2.27",
"file-saver": "2.0.5", "file-saver": "2.0.5",
"fuse.js": "6.6.2", "fuse.js": "6.6.2",

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

@ -1,15 +1,49 @@
import { parseTime } from "./ruoyi"; import { parseTime } from "./ruoyi";
/**
* 通用分页函数
* @param {Array} data - 需要分页的数据源
* @param {Number} page - 当前页码
* @param {Number} pageSize - 每页显示的条目数
* @returns {Object} 分页结果包含当前页的数据页码信息及总页数
*/
export function paginate(data, page = 1, pageSize = 10) {
// 计算总页数
const totalItems = data.length;
const totalPages = Math.ceil(totalItems / pageSize);
// 确保页码在有效范围内
const currentPage = Math.min(Math.max(page, 1), totalPages);
// 计算当前页的数据起始索引和结束索引
const startIndex = (currentPage - 1) * pageSize;
const endIndex = Math.min(startIndex + pageSize, totalItems);
// 获取当前页的数据片段
const pageData = data.slice(startIndex, endIndex);
return {
currentPage,
pageSize,
totalItems,
totalPages,
data: pageData,
};
}
export function getAssetsFile(url) { export function getAssetsFile(url) {
return new URL(`../assets/images/${url}`, import.meta.url).href; return new URL(`../assets/images/${url}`, import.meta.url).href;
} }
/** /**
* 表格时间格式化 * 表格时间格式化
*/ */
function isTimestamp(value) {
// 判断是否为数字类型且是否为整数
if (typeof value === "number" && Number.isInteger(value)) {
// 判断时间戳是否为13位
return value.toString().length === 13;
}
return false;
}
export function formatDate(cellValue) { export function formatDate(cellValue) {
// 判断是不是时间戳不是就返回 // 判断是不是时间戳不是就返回
let time; let time;
if (typeof cellValue === new Date()) { if (isTimestamp(cellValue)) {
var date = new Date(cellValue); var date = new Date(cellValue);
var year = date.getFullYear(); var year = date.getFullYear();
var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1; var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;

@ -16,8 +16,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.28:9868/', // baseURL:'http://192.168.2.28:9868/',
// 超时 // 超时
timeout: 100000 timeout: 100000
}) })

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

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

@ -1,47 +1,39 @@
<!--
* @Author: qinzhenpen qzp1807@126.com
* @Date: 2024-08-16 17:56:32
* @LastEditors: qinzhenpen qzp1807@126.com
* @LastEditTime: 2024-08-16 17:59:16
* @FilePath: \vue3\src\views\digitalMarketTech\AIGCLargeModel\index.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template> <template>
<div class="app-top"> <div class="app-top">
<el-button v-for="(item, index) in imgData" :key="index" :class="item.img" @click="clickIndx(index)">{{ item.text }}</el-button> <el-button v-for="(item, index) in imgData" :key="index" :class="item.img" @click="clickIndx(index)">{{ item.text }}</el-button>
</div> </div>
<component :is="page"></component> <component :is="page"></component>
</template> </template>
<script setup> <script setup>
import AIVenison from './components/AIVenisonDiagram.vue' import AIVenison from "./components/AIVenisonDiagram.vue";
import AIGC from './components/thirdPartyAIGC.vue' import AIGC from "./components/thirdPartyAIGC.vue";
const pageData=[AIVenison,null,null,null,null,AIGC] const pageData = [AIVenison, null, null, null, null, AIGC];
const page=ref(AIVenison) const page = ref(AIVenison);
const clickIndx = (index) => { const clickIndx = (index) => {
page.value=pageData[index] page.value = pageData[index];
} };
const imgData = [ const imgData = [
{ {
text:'AI文生图', text: "AI文生图",
img:'wst' img: "wst",
},{ },
text:'AI文章', {
img:'wz' text: "AI文章",
},{ img: "wz",
text:'AI标题', },
img:'bt' {
},{ text: "AI标题",
text:'AI修图', img: "bt",
img:'xt'
},{
text:'AI视频',
img:'sp'
},{
text:'第三方AIGC大模型',
img:'dmx'
}, },
] {
text: "AI修图",
img: "xt",
},
{
text: "AI视频",
img: "sp",
},
];
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -49,35 +41,34 @@ const imgData=[
color: #fff; color: #fff;
} }
.app-top { .app-top {
background: #041C49; background: #041c49;
padding: 10px; padding: 10px;
margin: 10px 0px -9px 10px;; margin: 10px 0px -9px 10px;
} }
.el-button { .el-button {
width: 160px; width: 160px;
height: 36px; height: 36px;
color: #FFFFFF; color: #ffffff;
border-color:#FFFFFF00; border-color: #ffffff00;
padding: 8px 0px 8px 32px; padding: 8px 0px 8px 32px;
background-size: 100% 100% !important; background-size: 100% 100% !important;
} }
.wst { .wst {
background: url('@/assets/images/1.png'); background: url("@/assets/images/1.png");
} }
.wz { .wz {
background: url('@/assets/images/2.png'); background: url("@/assets/images/2.png");
} }
.bt { .bt {
background: url('@/assets/images/3.png'); background: url("@/assets/images/3.png");
} }
.xt { .xt {
background: url('@/assets/images/4.png'); background: url("@/assets/images/4.png");
} }
.sp { .sp {
background: url('@/assets/images/5.png'); background: url("@/assets/images/5.png");
} }
.dmx { .dmx {
background: url('@/assets/images/6.png'); background: url("@/assets/images/6.png");
} }
</style> </style>

@ -30,7 +30,7 @@
<el-table :data="tableData" style="width: 100%" :header-cell-style="headerCellStyle"> <el-table :data="tableData" style="width: 100%" :header-cell-style="headerCellStyle">
<el-table-column v-for="column in tableLabel" :key="column" :prop="column.prop" :label="column.label" align="center"> <el-table-column v-for="column in tableLabel" :key="column" :prop="column.prop" :label="column.label" align="center">
<template #default="{ row }"> <template #default="{ row }">
{{ formatDate(row[column.prop]) }} {{ formatDate(row[column.prop])?? '...' }}
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

@ -1,12 +1,11 @@
<template> <template>
<el-scrollbar height="800px" v-loading="loading"> <!-- <el-scrollbar height="800px" v-loading="loading"> -->
<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">
<input type="file" ref="fileknowledge" style="display: none" @change="knowledgeImport" /> <el-button @click="knowledgeImport">
<el-button @click="$refs.fileknowledge.click()">
<img src="../../../assets/images/导入.png" alt="" /> <img src="../../../assets/images/导入.png" alt="" />
算法知识导入 算法知识导入
</el-button> </el-button>
@ -22,7 +21,7 @@
<span>选择指标</span> <span>选择指标</span>
</div> </div>
<div class="metrics"> <div class="metrics">
<el-select v-model="input" placeholder="请选择数据" style="width: 180px" @change="selectType"> <el-select v-model="n_dataTableQuery.tableName" placeholder="请选择数据" style="width: 180px" @change="selectType">
<el-option v-for="item in algorithmStore.userDataLabel" :key="item" :label="item" :value="item" /> <el-option v-for="item in algorithmStore.userDataLabel" :key="item" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
@ -71,7 +70,7 @@
<el-table :data="analysisData" style="width: 100%; margin-top: 10px" :header-cell-style="headerCellStyle"> <el-table :data="analysisData" style="width: 100%; margin-top: 10px" :header-cell-style="headerCellStyle">
<el-table-column v-for="column in analysisHanderKry" :key="column" :prop="column" :label="column" align="center" /> <el-table-column v-for="column in analysisHanderKry" :key="column" :prop="column" :label="column" align="center" />
</el-table> </el-table>
<!-- <pagination v-show="datatotal > 0" :total="datatotal" v-model:page="dataqueryParams.index" v-model:limit="dataqueryParams.size" @pagination="submit" style="margin-top: 10px" /> --> <pagination v-show="n_analyzeTheNumberOfDataItems > 0" :total="n_analyzeTheNumberOfDataItems" v-model:page="n_dataTableQuery.index" v-model:limit="n_dataTableQuery.size" @pagination="analyzeDataNext" />
</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>
@ -79,11 +78,11 @@
<el-table :data="tableData" style="width: 100%; margin-top: 10px" :header-cell-style="headerCellStyle" height="350"> <el-table :data="tableData" style="width: 100%; margin-top: 10px" :header-cell-style="headerCellStyle" height="350">
<el-table-column v-for="column in tableLabel" :key="column.label" :prop="column.prop" :label="column.label" align="center"></el-table-column> <el-table-column v-for="column in tableLabel" :key="column.label" :prop="column.prop" :label="column.label" align="center"></el-table-column>
</el-table> </el-table>
<el-pagination style="margin-top: 10px" background layout="prev, pager, next" :total="1000" /> <pagination v-show="nNumberOfAnalysisResults > 0" :total="nNumberOfAnalysisResults" v-model:page="gAnalysisResults.index" v-model:limit="gAnalysisResults.size" @pagination="updatePageAnalysisResults" />
</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">
@ -139,11 +138,29 @@
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<el-dialog v-model="b_introductionOfAlgorithmKnowledge" title="算法知识导入" width="60%" :show-close="false">
<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> </template>
<div class="from-item">
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="submitTask"></el-button>
<el-button type="primary" @click="dialogVisible = false">返回</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup> <script setup>
import * as portraitModel from "@/api/portraitModel"; import * as portraitModel from "@/api/portraitModel";
import {paginate} from '@/utils/index.js'
import * as API from "@/api/AI.js"; import * as API from "@/api/AI.js";
import * as marketingAlgorithmApi from "@/api/marketing-algorithm.js"; import * as marketingAlgorithmApi from "@/api/marketing-algorithm.js";
import useAlgorithmStore from "@/store/modules/algorithm.js"; import useAlgorithmStore from "@/store/modules/algorithm.js";
@ -154,14 +171,18 @@ const loading = ref(false);
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const userStore = useUserStore(); const userStore = useUserStore();
const algorithmStore = useAlgorithmStore(); const algorithmStore = useAlgorithmStore();
const multipleTableRef=ref(null) const multipleTableRef = ref(null);
const fileknowledge = ref(null); const b_introductionOfAlgorithmKnowledge = ref(false);
const n_dataTableQuery = ref({ const n_dataTableQuery = ref({
index: 1, index: 1,
size: 20, size: 5,
tableName: "用户属性表", tableName: "用户属性表",
userId: userInfo.userId, userId: userInfo.userId,
}); });
const gAnalysisResults=ref({
index: 1,
size: 5,
})
const dialogVisible = ref(false); const dialogVisible = ref(false);
// //
const modelParams = reactive([ const modelParams = reactive([
@ -238,6 +259,13 @@ const preProcessText = ref({
text1: "数据去重", text1: "数据去重",
text2: "", text2: "",
}); });
//
const n_analyzeTheNumberOfDataItems = ref(0);
const aAnalyzeTheRawData = ref([]);
//
const nNumberOfAnalysisResults=ref(0)
const aOriginalDataOfAnalysisResults=ref([])
// //
const g_modelParameter = ref([]); const g_modelParameter = ref([]);
// //
@ -251,6 +279,7 @@ const preProcess = (tetx) => {
method: preProcessText.value.text2, method: preProcessText.value.text2,
userId: n_dataTableQuery.value.userId, userId: n_dataTableQuery.value.userId,
}).then((res) => { }).then((res) => {
proxy.$modal.msgSuccess("预处理成功");
analysisData.value = res.data; analysisData.value = res.data;
}); });
}; };
@ -280,6 +309,11 @@ const submit = () => {
marketingAlgorithmApi.getMarketingAlgorithm({ userId: n_dataTableQuery.value.userId, tableName: n_dataTableQuery.value.tableName, fieldList: g_indicatorData.value }).then((res) => { marketingAlgorithmApi.getMarketingAlgorithm({ userId: n_dataTableQuery.value.userId, tableName: n_dataTableQuery.value.tableName, fieldList: g_indicatorData.value }).then((res) => {
analysisData.value = res.data; analysisData.value = res.data;
analysisHanderKry.value = Object.keys(res.data[0]); analysisHanderKry.value = Object.keys(res.data[0]);
if (res.data.length > 5) {
n_analyzeTheNumberOfDataItems.value = res.data.length;
aAnalyzeTheRawData.value = res.data;
analysisData.value = res.data.slice(0, 5);
}
proxy.$modal.msgSuccess("分析数据成功"); proxy.$modal.msgSuccess("分析数据成功");
}); });
}; };
@ -296,6 +330,11 @@ const modelCalculation = () => {
const processedData = processArrayData(analysisHanderKry.value, analysisData.value); const processedData = processArrayData(analysisHanderKry.value, analysisData.value);
marketingAlgorithmApi.getMarketingAlgorithmPreprocessing(JSON.stringify({ map: processedData, statistic: g_modelParameter.value, userId: n_dataTableQuery.value.userId })).then((res) => { marketingAlgorithmApi.getMarketingAlgorithmPreprocessing(JSON.stringify({ map: processedData, statistic: g_modelParameter.value, userId: n_dataTableQuery.value.userId })).then((res) => {
tableData.value = res.data.map((item) => item.statistics); tableData.value = res.data.map((item) => item.statistics);
if(res.data.length>5){
nNumberOfAnalysisResults.value=res.data.length
aOriginalDataOfAnalysisResults.value = res.data.map((item) => item.statistics)
tableData.value = res.data.map((item) => item.statistics).slice(0,5)
}
}); });
}; };
function processArrayData(keys, data) { function processArrayData(keys, data) {
@ -320,15 +359,8 @@ const getIndicator = () => {
algorithmStore.getUserDatabase({ userId: n_dataTableQuery.value.userId, tableName: n_dataTableQuery.value.tableName }); algorithmStore.getUserDatabase({ userId: n_dataTableQuery.value.userId, tableName: n_dataTableQuery.value.tableName });
}; };
// //
const knowledgeImport = (e) => { const knowledgeImport = () => {
loading.value = true; b_introductionOfAlgorithmKnowledge.value=true
const files = e.target.files[0];
const formdata = new FormData();
formdata.append("file", files);
marketingAlgorithmApi.getMarketingAlgorithmKnowledgeImport(formdata).then((res) => {
proxy.$modal.msgSuccess("导入成功");
loading.value = false;
});
}; };
// //
const submitTask = () => { const submitTask = () => {
@ -378,6 +410,13 @@ const restart = () => {
proxy.$modal.msgSuccess("重新开始成功"); proxy.$modal.msgSuccess("重新开始成功");
multipleTableRef.value.clearSelection(); multipleTableRef.value.clearSelection();
}; };
//
const analyzeDataNext = () => {
analysisData.value =paginate(aAnalyzeTheRawData.value,n_dataTableQuery.value.index,n_dataTableQuery.value.size).data
};
const updatePageAnalysisResults=()=>{
tableData.value =paginate(aOriginalDataOfAnalysisResults.value,gAnalysisResults.value.index,gAnalysisResults.value.size).data
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -392,14 +431,14 @@ const restart = () => {
.main-but { .main-but {
margin: 5px 20px 0; margin: 5px 20px 0;
display: flex; display: flex;
.el-button:nth-child(2) { .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(3) { .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");

@ -55,7 +55,6 @@
}) })
const showResource=async(i)=>{ const showResource=async(i)=>{
console.log(i);
// const newWindow=window.open(`http://192.168.2.4:8800/api/stu/concept/block/getResource?`+`module=${data2.module}`+`&name=${i}`) // const newWindow=window.open(`http://192.168.2.4:8800/api/stu/concept/block/getResource?`+`module=${data2.module}`+`&name=${i}`)
// window.open(`http://qkljr.sztzjy.com:90/api/stu/concept/block/getResource?`+`module=${data2.module}`+`&name=${i}`) // window.open(`http://qkljr.sztzjy.com:90/api/stu/concept/block/getResource?`+`module=${data2.module}`+`&name=${i}`)
if(i.includes('mp4')){ if(i.includes('mp4')){

File diff suppressed because one or more lines are too long

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

@ -1,11 +1,11 @@
<template> <template>
<div class="content"> <div class="content">
<div class="import" @click="knowledgeFlag = !knowledgeFlag"> <div class="import" @click="dialogVisible = true">
<img src="@/assets/images/导入.png" alt="" /> <img src="@/assets/images/导入.png" alt="" />
<span>任务知识导入</span> <span>任务知识导入</span>
</div> </div>
<div v-if="knowledgeFlag" v-html="knowledgeHtml"></div> <!-- <div v-if="knowledgeFlag" v-html="knowledgeHtml"></div> -->
<div v-if="!knowledgeFlag"> <div>
<div class="caseBack"> <div class="caseBack">
<div class="title"> <div class="title">
<img src="@/assets/images/caseIcon.png" alt="" /> <img src="@/assets/images/caseIcon.png" alt="" />
@ -277,10 +277,17 @@
</div> </div>
</div> </div>
</div> </div>
<pop-modal :showModel="dialogVisible" @closePop="dialogVisible = false">
<template v-slot:content>
<div v-html="knowledgeHtml"></div>
</template>
</pop-modal>
</div> </div>
</template> </template>
<script setup> <script setup>
import popModal from "@/views/components/popModal.vue";
import { getUserInfo } from "@/utils/auth";
import * as portraitModel from "@/api/portraitModel"; import * as portraitModel from "@/api/portraitModel";
import * as echarts from "echarts"; import * as echarts from "echarts";
import { downBlobFile } from "@/utils/index.js"; import { downBlobFile } from "@/utils/index.js";
@ -292,6 +299,7 @@ const knowledgeHtml = ref(
const list = ref(["-"]); const list = ref(["-"]);
const combinationValue1 = ref(""); const combinationValue1 = ref("");
const combinationValue2 = ref(""); const combinationValue2 = ref("");
const dialogVisible = ref(false);
const knowledgeFlag = ref(false); const knowledgeFlag = ref(false);
const combinationRight = ref(["A—B", "A—C", "A—D", "B—C", "B—D", "C—D"]); const combinationRight = ref(["A—B", "A—C", "A—D", "B—C", "B—D", "C—D"]);
const step1Data = ref([ const step1Data = ref([
@ -768,7 +776,7 @@ const saveData = () => {
}; };
portraitModel portraitModel
.saveData({ .saveData({
userId: 492, userId: JSON.parse(getUserInfo()).userId,
module: "购物篮分析", module: "购物篮分析",
...params, ...params,
}) })
@ -778,7 +786,7 @@ const saveData = () => {
const getData = () => { const getData = () => {
portraitModel portraitModel
.getData({ .getData({
userId: 492, userId: JSON.parse(getUserInfo()).userId,
module: "购物篮分析", module: "购物篮分析",
}) })
.then((res) => { .then((res) => {
@ -851,7 +859,7 @@ const submitData = () => {
console.log(errorNum.value, "总错误次数"); console.log(errorNum.value, "总错误次数");
portraitModel portraitModel
.submit({ .submit({
userId: 492, userId: JSON.parse(getUserInfo()).userId,
taskName: "购物篮分析", taskName: "购物篮分析",
numberOfErrors: errorNum.value, numberOfErrors: errorNum.value,
}) })
@ -864,7 +872,7 @@ const retrain = () => {
// console.log(66); // console.log(66);
portraitModel portraitModel
.retrain({ .retrain({
userId: 492, userId: JSON.parse(getUserInfo()).userId,
module: "购物篮分析", module: "购物篮分析",
}) })
.then((res) => { .then((res) => {
@ -912,7 +920,7 @@ defineExpose({
font-weight: bold; font-weight: bold;
width: 180px; width: 180px;
height: 56px; height: 56px;
background-image: url("@/assets/images/01.png"); background-image: url("@/assets/images/taskImport.png");
background-size: 180px 56px; background-size: 180px 56px;
text-align: center; text-align: center;
align-items: center; align-items: center;

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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

File diff suppressed because one or more lines are too long

@ -8,10 +8,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="btn" v-if="currentComponent">
<div class="submit" @click="submit"></div>
<div class="retrain" @click="retrain"></div>
</div>
<div class="container" v-if="menuIndex != 0"> <div class="container" v-if="menuIndex != 0">
<div class="leftContent"> <div class="leftContent">
<div class="title"> <div class="title">
@ -31,9 +28,9 @@
<el-menu-item index="4"> <el-menu-item index="4">
<span>用户行为表</span> <span>用户行为表</span>
</el-menu-item> </el-menu-item>
<el-menu-item index="5"> <!-- <el-menu-item index="5">
<span>用户评论表</span> <span>用户评论表</span>
</el-menu-item> </el-menu-item> -->
</el-menu> </el-menu>
</div> </div>
<div class="table"> <div class="table">
@ -47,18 +44,30 @@
background: `linear-gradient(0deg, #002651 0%, #0087F9 100%)`, background: `linear-gradient(0deg, #002651 0%, #0087F9 100%)`,
}" }"
> >
<el-table-column label="用户ID" align="center" prop="id"></el-table-column> <el-table-column label="用户ID" align="center" prop="userId">
<el-table-column label="登录名" align="center" prop="loginName"></el-table-column> </el-table-column>
<el-table-column label="用户姓名" align="center" prop="userName"></el-table-column> <el-table-column label="登录名" align="center" prop="loginName">
<el-table-column label="学号" align="center" prop="studentId"></el-table-column> </el-table-column>
<el-table-column label="班级" align="center" prop="stuClass"></el-table-column> <el-table-column label="用户姓名" align="center" prop="userName">
<el-table-column label="专业" align="center" prop="major"></el-table-column> </el-table-column>
<el-table-column label="学校" align="center" prop="school"></el-table-column> <el-table-column label="学号" align="center" prop="studentId">
<el-table-column label="角色名称" align="center" prop="roleName"></el-table-column> </el-table-column>
<el-table-column label="角色性别" align="center" prop="roleGender"></el-table-column> <el-table-column label="班级" align="center" prop="stuClass">
<el-table-column label="角色年龄" align="center" prop="roleAge"></el-table-column> </el-table-column>
<el-table-column label="注册时间" align="center" prop="updateTime"></el-table-column> <el-table-column label="专业" align="center" prop="major">
<el-table-column label="所在地" align="center" prop="location"></el-table-column> </el-table-column>
<el-table-column label="学校" align="center" prop="school">
</el-table-column>
<el-table-column label="角色名称" align="center" prop="roleName">
</el-table-column>
<el-table-column label="角色性别" align="center" prop="roleGender">
</el-table-column>
<el-table-column label="角色年龄" align="center" prop="roleAge">
</el-table-column>
<el-table-column label="注册时间" align="center" prop="updateTime">
</el-table-column>
<el-table-column label="所在地" align="center" prop="location">
</el-table-column>
</el-table> </el-table>
<el-table <el-table
v-if="menuIndex == 2" v-if="menuIndex == 2"
@ -70,18 +79,30 @@
background: `linear-gradient(0deg, #002651 0%, #0087F9 100%)`, background: `linear-gradient(0deg, #002651 0%, #0087F9 100%)`,
}" }"
> >
<el-table-column label="用户ID" align="center" prop="a1"></el-table-column> <el-table-column label="用户ID" align="center" prop="userId">
<el-table-column label="登录名" align="center" prop="a1"></el-table-column> </el-table-column>
<el-table-column label="用户姓名" align="center" prop="a1"></el-table-column> <el-table-column label="登录名" align="center" prop="loginName">
<el-table-column label="学号" align="center" prop="a1"></el-table-column> </el-table-column>
<el-table-column label="班级" align="center" prop="a1"></el-table-column> <el-table-column label="用户姓名" align="center" prop="userName">
<el-table-column label="专业" align="center" prop="a1"></el-table-column> </el-table-column>
<el-table-column label="学校" align="center" prop="a1"></el-table-column> <el-table-column label="学号" align="center" prop="studentId">
<el-table-column label="角色名称" align="center" prop="a1"></el-table-column> </el-table-column>
<el-table-column label="常登录地" align="center" prop="a1"></el-table-column> <el-table-column label="班级" align="center" prop="stuClass">
<el-table-column label="最近登录日期" align="center" prop="a1"></el-table-column> </el-table-column>
<el-table-column label="登录频次" align="center" prop="a1"></el-table-column> <el-table-column label="专业" align="center" prop="major">
<el-table-column label="登录时长" align="center" prop="a1"></el-table-column> </el-table-column>
<el-table-column label="学校" align="center" prop="school">
</el-table-column>
<el-table-column label="角色名称" align="center" prop="roleName">
</el-table-column>
<el-table-column label="常登录地" align="center" prop="frequentLoginLocation">
</el-table-column>
<el-table-column label="最近登录日期" align="center" prop="lastLoginDate">
</el-table-column>
<el-table-column label="登录频次" align="center" prop="loginFrequency">
</el-table-column>
<el-table-column label="登录时长" align="center" prop="loginDuration">
</el-table-column>
</el-table> </el-table>
<el-table <el-table
v-if="menuIndex == 3" v-if="menuIndex == 3"
@ -93,21 +114,71 @@
background: `linear-gradient(0deg, #002651 0%, #0087F9 100%)`, background: `linear-gradient(0deg, #002651 0%, #0087F9 100%)`,
}" }"
> >
<el-table-column label="用户ID" align="center" prop="a1"></el-table-column> <el-table-column label="用户ID" align="center" prop="a1">
<el-table-column label="登录名" align="center" prop="a1"></el-table-column> </el-table-column>
<el-table-column label="用户姓名" align="center" prop="a1"></el-table-column> <el-table-column label="登录名" align="center" prop="a1">
<el-table-column label="学号" align="center" prop="a1"></el-table-column> </el-table-column>
<el-table-column label="班级" align="center" prop="a1"></el-table-column> <el-table-column label="用户姓名" align="center" prop="a1">
<el-table-column label="专业" align="center" prop="a1"></el-table-column> </el-table-column>
<el-table-column label="学校" align="center" prop="a1"></el-table-column> <el-table-column label="学号" align="center" prop="a1">
<el-table-column label="角色名称" align="center" prop="a1"></el-table-column> </el-table-column>
<el-table-column label="消费商品小类" align="center" prop="a1" width="110"></el-table-column> <el-table-column label="班级" align="center" prop="a1">
<el-table-column label="消费商品类型" align="center" prop="a1" width="110"></el-table-column> </el-table-column>
<el-table-column label="累计消费金额" align="center" prop="a1" width="110"></el-table-column> <el-table-column label="专业" align="center" prop="a1">
<el-table-column label="累计消费次数" align="center" prop="a1" width="110"></el-table-column> </el-table-column>
<el-table-column label="近七天消费金额" align="center" prop="a1" width="130"></el-table-column> <el-table-column label="学校" align="center" prop="a1">
<el-table-column label="近七天消费次数" align="center" prop="a1" width="130"></el-table-column> </el-table-column>
<el-table-column label="最近消费时间" align="center" prop="a1" width="110"></el-table-column> <el-table-column label="角色名称" align="center" prop="a1">
</el-table-column>
<el-table-column
label="消费商品小类"
align="center"
prop="consumerGoods"
width="110"
>
</el-table-column>
<el-table-column
label="消费商品类型"
align="center"
prop="a1"
width="110"
>
</el-table-column>
<el-table-column
label="累计消费金额"
align="center"
prop="a1"
width="110"
>
</el-table-column>
<el-table-column
label="累计消费次数"
align="center"
prop="a1"
width="110"
>
</el-table-column>
<el-table-column
label="近七天消费金额"
align="center"
prop="a1"
width="130"
>
</el-table-column>
<el-table-column
label="近七天消费次数"
align="center"
prop="a1"
width="130"
>
</el-table-column>
<el-table-column
label="最近消费时间"
align="center"
prop="a1"
width="110"
>
</el-table-column>
</el-table> </el-table>
<el-table <el-table
v-if="menuIndex == 4" v-if="menuIndex == 4"
@ -119,23 +190,69 @@
background: `linear-gradient(0deg, #002651 0%, #0087F9 100%)`, background: `linear-gradient(0deg, #002651 0%, #0087F9 100%)`,
}" }"
> >
<el-table-column label="用户ID" align="center" prop="a1"></el-table-column> <el-table-column label="用户ID" align="center" prop="userId">
<el-table-column label="登录名" align="center" prop="a1"></el-table-column> </el-table-column>
<el-table-column label="用户姓名" align="center" prop="a1"></el-table-column> <el-table-column label="登录名" align="center" prop="loginName">
<el-table-column label="学号" align="center" prop="a1"></el-table-column> </el-table-column>
<el-table-column label="班级" align="center" prop="a1"></el-table-column> <el-table-column label="用户姓名" align="center" prop="userName">
<el-table-column label="专业" align="center" prop="a1"></el-table-column> </el-table-column>
<el-table-column label="学校" align="center" prop="a1"></el-table-column> <el-table-column label="学号" align="center" prop="studentId">
<el-table-column label="角色名称" align="center" prop="a1"></el-table-column> </el-table-column>
<el-table-column label="商品名称" align="center" prop="a1" width="110"></el-table-column> <el-table-column label="班级" align="center" prop="stuClass">
<el-table-column label="商品小类" align="center" prop="a1" width="110"></el-table-column> </el-table-column>
<el-table-column label="商品类型" align="center" prop="a1" width="110"></el-table-column> <el-table-column label="专业" align="center" prop="major">
<el-table-column label="用户行为类型" align="center" prop="a1" width="110"></el-table-column> </el-table-column>
<el-table-column label="行为日期" align="center" prop="a1" width="130"></el-table-column> <el-table-column label="学校" align="center" prop="school">
</el-table-column>
<el-table-column label="角色名称" align="center" prop="roleName">
</el-table-column>
<el-table-column
label="商品名称"
align="center"
prop="goodsName"
width="110"
>
</el-table-column>
<el-table-column
label="商品小类"
align="center"
prop="goodsSubcategories"
width="110"
>
</el-table-column>
<el-table-column
label="商品类型"
align="center"
prop="goodsType"
width="110"
>
</el-table-column>
<el-table-column
label="用户行为类型"
align="center"
prop="userBehaviorType"
width="110"
>
</el-table-column>
<el-table-column
label="行为日期"
align="center"
prop="behaviorDate"
width="130"
>
</el-table-column>
</el-table> </el-table>
</div> </div>
</div> </div>
<main-content v-if="menuIndex == 0" :currentComponent="currentComponent" ref="contentRef"></main-content> <main-content
v-if="menuIndex == 0"
:currentComponent="currentComponent"
ref="contentRef"
></main-content>
<div class="btn" v-if="currentComponent">
<div class="submit" @click="submit"></div>
<div class="retrain" @click="retrain"></div>
</div>
</div> </div>
</template> </template>
@ -279,29 +396,33 @@ const retrain = () => {
color: #fff; color: #fff;
.tabList { .tabList {
// display: flex; // display: flex;
width: 1060px; // width: 1060px;
.tabs { .tabs {
cursor: pointer; cursor: pointer;
font-size: 14px; font-size: 12px;
margin-right: 20px; margin-right: 4px;
margin-bottom: 20px; margin-bottom: 20px;
width: 188px; width: 159px;
height: 61px; height: 56px;
background-image: url("@/assets/images/itembg1.png"); background-image: url("@/assets/images/itembg1.png");
background-size: 159px 56px;
// display: flex; // display: flex;
// justify-content: center; // justify-content: center;
// align-items: center; // align-items: center;
padding-left: 30px; padding-left: 15px;
line-height: 60px; line-height: 56px;
display: inline-block; display: inline-block;
img { img {
margin-right: 15px; margin-right: 5px;
} }
} }
.tabs:nth-of-type(2), .tabs:nth-of-type(2),
.tabs:nth-of-type(9) { .tabs:nth-of-type(9) {
background-image: url("@/assets/images/itembg2.png"); background-image: url("@/assets/images/itembg2.png");
} }
.tabs:nth-of-type(9) {
font-size: 11px;
}
.tabs:nth-of-type(3), .tabs:nth-of-type(3),
.tabs:nth-of-type(10) { .tabs:nth-of-type(10) {
background-image: url("@/assets/images/itembg3.png"); background-image: url("@/assets/images/itembg3.png");
@ -326,10 +447,13 @@ const retrain = () => {
} }
} }
.btn { .btn {
width: 220px;
margin: 0 auto;
display: flex; display: flex;
position: absolute; // position: absolute;
right: 70px; // right: 140px;
top: 110px; // bottom: 0px;
margin-top: 10px;
.submit { .submit {
width: 99px; width: 99px;
height: 31px; height: 31px;

Loading…
Cancel
Save