You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dianshang-qianduan/src/views/portraitModel/components/viscosityAnalysis.vue

2091 lines
1.5 MiB
Vue

2 years ago
<template>
<div class="content">
2 years ago
<div class="import" @click="dialogVisible = true">
2 years ago
<img src="@/assets/images/导入.png" alt="" />
<span>任务知识导入</span>
</div>
2 years ago
<!-- <div v-if="knowledgeFlag">
2 years ago
<a
2 years ago
href="
https://blog.csdn.net/kevin1993best/article/details/106329573"
2 years ago
target="_blank"
rel="noopener noreferrer"
2 years ago
>
https://blog.csdn.net/kevin1993best/article/details/106329573</a
2 years ago
>
<br />
2 years ago
</div> -->
<div>
2 years ago
<div class="caseBack">
<div class="title">
<img src="@/assets/images/caseIcon.png" alt="" />
<span>案例背景:</span>
</div>
<span style="line-height: 25px; font-size: 14px">
用户粘性分析是一种衡量用户对产品或服务的忠诚度和黏性程度的分析方法。它帮助企业了解用户的行为习惯、使用频率和留存率,以评估用户对产品或服务的依赖程度和忠诚度。用户粘性分析模型通常包括以下指标:活跃用户数、留存率、使用频率、用户转化率、用户流失率。<br />
留存率、用户转化率、用户流失率,前面模型已经单独分析过,本实验项目重点分析用户活跃情况。<br />
常见的用户活跃度统计一段时间内活跃用户的分布情况,如使用了几次、使用了几天、使用了多长时间等。比如一周内用户使用产品的天数分布,使用了
2 天以上的用户占比,连续使用 7 天的用户人数等。<br />
在用户粘性分析的指标中,DAU/MAU就是最频繁使用的指标。日活跃用户占月活跃用户的比例越高,表明用户对App的使用粘性越高。<br />
日活跃用户(DAU):每天使用产品或服务的独立用户数量。这个指标可以反映产品的日常使用情况。<br />
周活跃用户(WAU):每周使用产品或服务的独立用户数量。这个指标可以反映产品的周活跃情况。<br />
月活跃用户(MAU):每月使用产品或服务的独立用户数量。这个指标可以反映产品的长期使用情况。<br />
用户粘性通常用DAU/MAU的公式来计算,还有一个公式是每月用户平均活跃天数。DAU即日活跃用户数,MAU即月活跃用户数。<br />
比值越趋近于1表明用户活跃度越高,在比值低于0.2时,应用的传播性和互动性将会很弱。<br />
下表为某APP用户的登录日志,假设所有用户共计10名。
</span>
<div style="margin-top: 10px; display: flex">
<el-table
:data="fileTable1"
style="width: 1000px"
2 years ago
border
:header-cell-style="{
color: '#fff',
fontSize: '14px',
backgroundColor: '#6A7DE9!important',
}"
>
<el-table-column label="用户ID" align="center" prop="id1">
2 years ago
</el-table-column>
<el-table-column label="登录时间" align="center" prop="time1">
2 years ago
</el-table-column>
<el-table-column
label="登录时长(分钟)"
align="center"
prop="duration1"
>
</el-table-column>
<el-table-column label="用户ID" align="center" prop="id2">
</el-table-column>
<el-table-column label="登录时间" align="center" prop="time2">
</el-table-column>
<el-table-column
label="登录时长(分钟)"
align="center"
prop="duration2"
2 years ago
>
</el-table-column>
</el-table>
<div class="download" @click="downloadData">下载数据</div>
2 years ago
</div>
</div>
<div class="line"></div>
<div class="caseBack">
<div class="title">
<img src="@/assets/images/步骤.png" alt="" />
<span>第一步,日活跃用户分析</span>
</div>
<span style="line-height: 25px; font-size: 14px">
2 years ago
日活跃用户(DAU):每天使用产品或服务的独立用户数量。这个指标可以反映产品的日常使用情况。分析近一个月日活跃用户变动情况,包括变动率。这个时候统计活跃用户需要进行去重,一天活跃多次的只保留一条记录。<br />
日活跃率 = 去重后的日活跃用户数量 / 历史累计去重后的用户数量*100%
<br />
日活跃平均时长=登录时长/活跃用户数,计算结果保留小数点后两位 <br />
2 years ago
</span>
<div style="margin-top: 10px; display: flex">
<el-table
:data="step1Data"
2 years ago
style="width: 600px"
2 years ago
border
:header-cell-style="{
color: '#fff',
fontSize: '14px',
backgroundColor: '#6A7DE9!important',
}"
>
<el-table-column label="登录时间" align="center" prop="date">
</el-table-column>
2 years ago
<el-table-column
label="日活跃用户(个)"
align="center"
prop="addNum"
>
<template #default="scope">
2 years ago
<el-input
v-model="scope.row.params1"
placeholder="请输入"
style="width: 90px"
size="small"
>
</el-input>
</template>
</el-table-column>
<el-table-column label="日活跃率(%)" align="center" prop="day2">
<template #default="scope">
<el-input
v-model="scope.row.params2"
placeholder="请输入"
style="width: 90px"
2 years ago
size="small"
2 years ago
>
2 years ago
</el-input
>%
2 years ago
</template>
</el-table-column>
2 years ago
<el-table-column
label="日活跃平均时长(分钟)"
align="center"
prop="day3"
2 years ago
width="180"
2 years ago
>
2 years ago
<template #default="scope">
<el-input
v-model="scope.row.params3"
placeholder="请输入"
style="width: 90px"
2 years ago
size="small"
2 years ago
>
</el-input>
</template>
</el-table-column>
</el-table>
2 years ago
<div>
<div
class="draw"
style="padding-left: 15px; margin-left: 20px"
@click="drawEcharts"
>
绘制图表
</div>
<div id="echartsDom" style="width: 750px; height: 500px"></div>
<div class="analysisConclusion">分析结论</div>
<el-input
v-model="analysisConclusionStep1"
2 years ago
style="margin-left: 20px; margin-top: 20px; margin-bottom: 20px"
:rows="12"
type="textarea"
placeholder="请输入"
/>
<div class="submit" @click="step1Submit">提交</div>
2 years ago
</div>
2 years ago
</div>
</div>
<div class="line"></div>
<div class="caseBack">
<div class="title">
<img src="@/assets/images/步骤.png" alt="" />
2 years ago
<span>第二步,周活跃用户分析</span>
2 years ago
</div>
<span style="line-height: 25px; font-size: 14px">
2 years ago
周活跃用户(WAU):每周使用产品或服务的独立用户数量。这个指标可以反映产品的周活跃情况。<br />
周活跃率 = 去重后的周活跃用户数量 / 历史累计去重后的用户数量*100%
2 years ago
</span>
<div style="margin-top: 10px; display: flex">
<el-table
:data="step2Data"
style="width: 650px"
border
:header-cell-style="{
color: '#fff',
fontSize: '14px',
backgroundColor: '#6A7DE9!important',
}"
>
2 years ago
<el-table-column label="周数" align="center" prop="week">
</el-table-column>
<el-table-column label="日期间隔" align="center" prop="interval">
2 years ago
</el-table-column>
2 years ago
<el-table-column
label="周活跃用户(个)"
align="center"
prop="description"
>
2 years ago
<template #default="scope">
<el-input
v-model="scope.row.params1"
placeholder="请输入"
2 years ago
style="width: 90px"
2 years ago
>
</el-input>
</template>
</el-table-column>
2 years ago
<el-table-column
label="周活跃率(%)"
align="center"
prop="description"
>
2 years ago
<template #default="scope">
<el-input
v-model="scope.row.params2"
placeholder="请输入"
2 years ago
style="width: 90px"
2 years ago
>
2 years ago
</el-input
>%
2 years ago
</template>
</el-table-column>
2 years ago
</el-table>
<div style="width: 650px">
<div class="analysisConclusion">分析结论</div>
<el-input
v-model="analysisConclusionStep2"
2 years ago
style="margin-left: 20px; margin-top: 20px; margin-bottom: 20px"
:rows="8"
type="textarea"
placeholder="请输入"
/>
<div class="submit" @click="step2Submit">提交</div>
2 years ago
</div>
</div>
</div>
<div class="line"></div>
<div class="caseBack">
<div class="title">
<img src="@/assets/images/步骤.png" alt="" />
<span>第三步,月活跃用户分析</span>
</div>
<span style="line-height: 25px; font-size: 14px">
月活跃用户(MAU):每月使用产品或服务的独立用户数量。这个指标可以反映产品的长期使用情况。
</span>
<div style="margin-top: 10px; display: flex">
<el-table
:data="step3Data"
style="width: 650px"
border
:header-cell-style="{
color: '#fff',
fontSize: '14px',
backgroundColor: '#6A7DE9!important',
}"
>
<el-table-column label="月份" align="center" prop="month">
</el-table-column>
<el-table-column
label="月活跃用户(个)"
align="center"
prop="description"
>
2 years ago
<template #default="scope">
<el-input
2 years ago
v-model="scope.row.params1"
2 years ago
placeholder="请输入"
2 years ago
style="width: 90px"
2 years ago
>
</el-input>
</template>
</el-table-column>
2 years ago
<el-table-column
label="月活跃率(%)"
align="center"
prop="description"
>
2 years ago
<template #default="scope">
<el-input
2 years ago
v-model="scope.row.params2"
2 years ago
placeholder="请输入"
2 years ago
style="width: 90px"
2 years ago
>
2 years ago
</el-input
>%
2 years ago
</template>
</el-table-column>
</el-table>
2 years ago
<div style="width: 650px">
<div class="analysisConclusion">分析结论</div>
<el-input
v-model="analysisConclusionStep3"
2 years ago
style="margin-left: 20px; margin-top: 20px; margin-bottom: 20px"
:rows="8"
type="textarea"
placeholder="请输入"
/>
<div class="submit" @click="step3Submit">提交</div>
2 years ago
</div>
2 years ago
</div>
</div>
<div class="line"></div>
<div class="caseBack">
<div class="title">
<img src="@/assets/images/步骤.png" alt="" />
2 years ago
<span>第四步,用户活跃综合分析</span>
2 years ago
</div>
2 years ago
<div style="font-size: 14px">
<div style="margin-bottom: 10px">用户粘性的比率指标</div>
<div>比率指标1- DAU/MAU</div>
<div style="display: flex; align-items: center">
<span>通过用户粘性指标定义为过去一天的比过去30天的</span>
<img
src="@/assets/images/u5627.png"
alt=""
style="margin-left: 10px"
/>
2 years ago
</div>
</div>
2 years ago
<div style="font-size: 14px">
<div>比率指标2 - 月平均活跃天数</div>
<div style="display: flex; align-items: center">
<span
>分子可理解为过去30天用户的总活跃天数,分母为过去30天活跃用户数
,分子/分母 即为 过去30天的人均活跃天数</span
>
<img
src="@/assets/images/u5626.png"
alt=""
style="margin-left: 10px"
/>
</div>
2 years ago
</div>
<div style="margin-top: 10px; display: flex">
<el-table
:data="step4Data"
2 years ago
style="width: 300px"
2 years ago
border
:header-cell-style="{
color: '#fff',
fontSize: '14px',
backgroundColor: '#6A7DE9!important',
}"
>
2 years ago
<el-table-column label="用户ID" align="center" prop="id">
2 years ago
</el-table-column>
2 years ago
<el-table-column label="活跃天数" align="center" prop="data1">
<template #default="scope">
<el-input
v-model="scope.row.params1"
placeholder="请输入"
style="width: 90px"
>
</el-input>
</template>
2 years ago
</el-table-column>
2 years ago
</el-table>
<el-table
:data="step4DataTable2"
style="width: 400px; margin-left: 20px"
border
:header-cell-style="{
color: '#fff',
fontSize: '14px',
backgroundColor: '#6A7DE9!important',
}"
>
<el-table-column label="比率指标" align="center" prop="id">
2 years ago
</el-table-column>
2 years ago
<el-table-column label="数值" align="center" prop="data1">
<template #default="scope">
<el-input
v-model="scope.row.params1"
placeholder="请输入"
style="width: 90px"
>
</el-input>
</template>
2 years ago
</el-table-column>
</el-table>
2 years ago
<div style="width: 650px">
<div class="analysisConclusion">分析结论</div>
<el-input
v-model="analysisConclusionStep4"
2 years ago
style="margin-left: 20px; margin-top: 20px; margin-bottom: 20px"
:rows="8"
type="textarea"
placeholder="请输入"
/>
<div class="submit" @click="step4Submit">提交</div>
2 years ago
</div>
2 years ago
</div>
</div>
<div class="line"></div>
</div>
2 years ago
<pop-modal :showModel="dialogVisible" @closePop="dialogVisible = false">
<template v-slot:content>
<div v-html="knowledgeHtml">
</div>
</template>
</pop-modal>
2 years ago
</div>
</template>
<script setup>
2 years ago
import popModal from "@/views/components/popModal.vue";
import { getUserInfo } from "@/utils/auth";
import * as portraitModel from "@/api/portraitModel";
import { downBlobFile } from "@/utils/index.js";
2 years ago
import * as echarts from "echarts";
const { proxy } = getCurrentInstance();
2 years ago
const baseUrl = import.meta.env.VITE_APP_BASE_API;
2 years ago
const knowledgeHtml = ref(
2 years ago
`<p style="text-align: start;">对于常见的App,用户粘性的取值范围就是3%~100%,</p><p style="text-align: start;">不同领域的App也会有不同的基准值,</p><p style="text-align: start;">例如移动游戏会以20%为基线,</p><p style="text-align: start;">而工具类App会以40%为基线。</p><h2 style="text-align: start;"><strong>用户粘性的两个计算指标:</strong></h2><h2 style="text-align: start;"><strong>1、DAU/MAU &nbsp; &nbsp;2、月平均活跃人数</strong></h2><p style="text-align: start;">这里其实还想看一个指标,那就是一周内使用1天、2天、3天、3天以上的人数,对比周使用人数去看,相当于周平均活跃人数。</p><p style="text-align: start;"> 用户粘性通常用DAU/MAU的公式来计算,还有一个公式是每月用户平均活跃天数。</p><p style="text-align: start;">DAU即日活跃用户数,MAU即月活跃用户数。</p><p style="text-align: start;">比值越趋近于1表明用户活跃度越高,在比值低于0.2时,应用的传播性和互动性将会很弱。</p><p style="text-align: start;">DAU/MAU是社交游戏类和在线类应用常用的一项评估指标,用于分析用户粘度。</p><p style="text-align: start;"><img src="data:image/png;base64,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
2 years ago
);
2 years ago
const dialogVisible = ref(false);
2 years ago
const list = ref(["-"]);
const dayValue = ref("");
const combinationValue1 = ref("");
const combinationValue2 = ref("");
2 years ago
const analysisConclusion = ref("");
const analysisConclusionStep1 = ref("");
const analysisConclusionStep2 = ref("");
const analysisConclusionStep3 = ref("");
const analysisConclusionStep4 = ref("");
const step1AnswerFlag = ref(false);
const step2AnswerFlag = ref(false);
const step3AnswerFlag = ref(false);
const step4AnswerFlag = ref(false);
const errorNum = ref(0);
const step1Error = ref(0);
const step2Error = ref(0);
const step3Error = ref(0);
const step4Error = ref(0);
2 years ago
const knowledgeFlag = ref(false);
//时间间隔分组数-7天内
const sevenNum = ref(0);
//时间间隔分组数-15天内
const fiftyNum = ref(0);
//时间间隔分组数-30天内
const thirtyNumIn = ref(0);
//时间间隔分组数-30天以上
const thirtyNumOut = ref(0);
const step1Data = ref([
{
date: "2024-03-01",
},
{
date: "2024-03-02",
},
{
date: "2024-03-03",
},
{
date: "2024-03-04",
},
{
date: "2024-03-05",
},
{
date: "2024-03-06",
},
{
date: "2024-03-07",
},
{
date: "2024-03-08",
},
{
date: "2024-03-09",
},
{
date: "2024-03-10",
},
{
date: "2024-03-11",
},
{
date: "2024-03-12",
},
{
date: "2024-03-13",
},
{
date: "2024-03-14",
},
{
date: "2024-03-15",
},
{
date: "2024-03-16",
},
{
date: "2024-03-17",
},
{
date: "2024-03-18",
},
{
date: "2024-03-19",
},
{
date: "2024-03-20",
},
{
date: "2024-03-21",
},
{
date: "2024-03-22",
},
{
date: "2024-03-23",
},
{
date: "2024-03-24",
},
{
date: "2024-03-25",
},
{
date: "2024-03-26",
},
{
date: "2024-03-27",
},
{
date: "2024-03-28",
},
{
date: "2024-03-29",
},
{
date: "2024-03-30",
},
]);
const fileTable1 = ref([
{
id1: "A",
time1: "2024-03-01",
duration1: "35",
id2: "F",
time2: "2024-03-11",
duration2: "11",
},
{
id1: "E",
time1: "2024-03-01",
duration1: "22",
id2: "C",
time2: "2024-03-12",
duration2: "33",
},
{
id1: "B",
time1: "2024-03-01",
duration1: "11",
id2: "D",
time2: "2024-03-12",
duration2: "22",
},
{
id1: "H",
time1: "2024-03-01",
duration1: "27",
id2: "H",
time2: "2024-03-13",
duration2: "25",
},
{
id1: "F",
time1: "2024-03-02",
duration1: "35",
id2: "D",
time2: "2024-03-14",
duration2: "19",
},
{
id1: "C",
time1: "2024-03-02",
duration1: "16",
id2: "B",
time2: "2024-03-15",
duration2: "38",
},
{
id1: "D",
time1: "2024-03-03",
duration1: "16",
id2: "D",
time2: "2024-03-17",
duration2: "35",
},
{
id1: "B",
time1: "2024-03-03",
duration1: "25",
id2: "C",
time2: "2024-03-17",
duration2: "43",
},
{
id1: "G",
time1: "2024-03-03",
duration1: "30",
id2: "C",
time2: "2024-03-18",
duration2: "36",
},
{
id1: "D",
time1: "2024-03-03",
duration1: "43",
id2: "K",
time2: "2024-03-19",
duration2: "31",
},
{
id1: "C",
time1: "2024-03-04",
duration1: "32",
id2: "A",
time2: "2024-03-20",
duration2: "5",
},
{
id1: "D",
time1: "2024-03-04",
duration1: "43",
id2: "D",
time2: "2024-03-20",
duration2: "8",
},
{
id1: "B",
time1: "2024-03-05",
duration1: "8",
id2: "C",
time2: "2024-03-21",
duration2: "29",
},
{
id1: "D",
time1: "2024-03-06",
duration1: "4",
id2: "D",
time2: "2024-03-22",
duration2: "35",
},
{
id1: "C",
time1: "2024-03-06",
duration1: "25",
id2: "C",
time2: "2024-03-23",
duration2: "35",
},
{
id1: "K",
time1: "2024-03-06",
duration1: "36",
id2: "K",
time2: "2024-03-23",
duration2: "40",
},
{
id1: "A",
time1: "2024-03-06",
duration1: "12",
id2: "A",
time2: "2024-03-24",
duration2: "27",
},
{
id1: "D",
time1: "2024-03-07",
duration1: "38",
id2: "D",
time2: "2024-03-25",
duration2: "4",
},
{
id1: "C",
time1: "2024-03-07",
duration1: "35",
id2: "B",
time2: "2024-03-25",
duration2: "16",
},
{
id1: "J",
time1: "2024-03-07",
duration1: "6",
id2: "G",
time2: "2024-03-25",
duration2: "16",
},
{
id1: "B",
time1: "2024-03-08",
duration1: "39",
id2: "B",
time2: "2024-03-25",
duration2: "29",
},
{
id1: "A",
time1: "2024-03-08",
duration1: "4",
id2: "D",
time2: "2024-03-26",
duration2: "17",
},
{
id1: "E",
time1: "2024-03-08",
duration1: "3",
id2: "C",
time2: "2024-03-27",
duration2: "32",
},
{
id1: "B",
time1: "2024-03-08",
duration1: "10",
id2: "K",
time2: "2024-03-28",
duration2: "8",
},
{
id1: "H",
time1: "2024-03-08",
duration1: "18",
id2: "H",
time2: "2024-03-29",
duration2: "20",
},
{
id1: "F",
time1: "2024-03-09",
duration1: "20",
id2: "B",
time2: "2024-03-29",
duration2: "20",
},
{
id1: "F",
time1: "2024-03-09",
duration1: "24",
id2: "G",
time2: "2024-03-29",
duration2: "40",
},
{
id1: "B",
time1: "2024-03-10",
duration1: "21",
id2: "D",
time2: "2024-03-29",
duration2: "29",
},
{
id1: "H",
time1: "2024-03-11",
duration1: "10",
id2: "A",
time2: "2024-03-30",
duration2: "4",
},
{
id1: "F",
time1: "2024-03-11",
duration1: "34",
id2: "C",
time2: "2024-03-30",
duration2: "45",
2 years ago
},
]);
const step2Data = ref([
{
2 years ago
week: "第一周",
interval: "2024/3/1-2024/3/7",
},
{
week: "第二周",
interval: "2024/3/8-2024/3/14",
},
{
week: "第三周",
interval: "2024/3/15-2024/3/21",
},
{
week: "第四周",
interval: "2024/3/22-2024/3/28",
2 years ago
},
]);
const step3Data = ref([
{
2 years ago
month: "2024年3月",
},
]);
const step4Data = ref([
{
id: "A",
2 years ago
},
{
2 years ago
id: "B",
2 years ago
},
{
2 years ago
id: "C",
},
{
id: "D",
2 years ago
},
{
2 years ago
id: "E",
},
{
id: "F",
2 years ago
},
{
2 years ago
id: "G",
2 years ago
},
{
2 years ago
id: "H",
},
{
id: "J",
},
{
id: "K",
2 years ago
},
]);
2 years ago
const step4DataTable2 = ref([
2 years ago
{
2 years ago
id: "过去30天平均DAU/MAU",
},
{
id: "月平均活跃天数(天)",
2 years ago
},
]);
const step5Data = ref([
{
data1: "dd003",
data2: "B",
data3: "99",
data4: "裤子",
data5: "2024-02-04",
data6: "1",
},
{
data1: "dd007",
data2: "D",
data3: "138",
data4: "裤子",
data5: "2024-02-14",
data6: "2",
},
{
data1: "dd010",
data2: "D",
data3: "150",
data4: "裤子",
data5: "2024-02-16",
data6: "3",
},
{
data1: "dd012",
data2: "D",
data3: "137",
data4: "裤子",
data5: "2024-02-20",
data6: "4",
},
{
data1: "dd017",
data2: "A",
data3: "39",
data4: "睡衣",
data5: "2024-02-24",
data6: "1",
},
{
data1: "dd015",
data2: "C",
data3: "94",
data4: "睡衣",
data5: "2024-02-23",
data6: "2",
},
{
data1: "dd019",
data2: "C",
data3: "186",
data4: "睡衣",
data5: "2024-02-28",
data6: "3",
},
{
data1: "dd008",
data2: "B",
data3: "143",
data4: "外套",
data5: "2024-02-14",
data6: "1",
},
{
data1: "dd011",
data2: "C",
data3: "191",
data4: "外套",
data5: "2024-02-16",
data6: "2",
},
{
data1: "dd018",
data2: "D",
data3: "99",
data4: "外套",
data5: "2024-02-26",
data6: "3",
},
{
data1: "dd005",
data2: "F",
data3: "111",
data4: "外套",
data5: "2024-02-10",
data6: "4",
},
{
data1: "dd001",
data2: "A",
data3: "189",
data4: "衬衫",
data5: "2024-02-02",
data6: "1",
},
{
data1: "dd013",
data2: "B",
data3: "59",
data4: "衬衫",
data5: "2024-02-22",
data6: "2",
},
{
data1: "dd014",
data2: "D",
data3: "173",
data4: "衬衫",
data5: "2024-02-22",
data6: "3",
},
{
data1: "dd002",
data2: "E",
data3: "101",
data4: "短袖",
data5: "2024-02-02",
data6: "1",
},
{
data1: "dd020",
data2: "J",
data3: "52",
data4: "短袖",
data5: "2024-02-28",
data6: "2",
},
{
data1: "dd016",
data2: "K",
data3: "82",
data4: "短袖",
data5: "2024-02-24",
data6: "3",
},
{
data1: "dd009",
data2: "G",
data3: "171",
data4: "帽子",
data5: "2024-02-15",
data6: "1",
},
{
data1: "dd006",
data2: "C",
data3: "141",
data4: "皮鞋",
data5: "2024-02-12",
data6: "1",
},
{
data1: "dd004",
data2: "H",
data3: "176",
data4: "内衣",
data5: "2024-02-07",
data6: "1",
},
]);
const step6Data = ref([
{
data1: "1",
data2: "小明",
data3: "4",
data4: "2",
data5: "4",
},
{
data1: "2",
data2: "小红",
data3: "5",
data4: "2",
data5: "2",
},
{
data1: "3",
data2: "小李",
data3: "5",
data4: "1",
data5: "1",
},
]);
const rulesTable = ref([
{
data1: "1.重要价值用户",
data2: "高",
data3: "高",
data4: "高",
},
{
data1: "2.重要发展用户",
data2: "高",
data3: "低",
data4: "高",
},
{
data1: "3.重要保持用户",
data2: "低",
data3: "高",
data4: "高",
},
{
data1: "4.重要挽留用户",
data2: "低",
data3: "低",
data4: "高",
},
{
data1: "5.一般价值用户",
data2: "高",
data3: "高",
data4: "低",
},
{
data1: "6.一般发展用户",
data2: "高",
data3: "低",
data4: "低",
},
{
data1: "7.一般保持用户",
data2: "低",
data3: "高",
data4: "低",
},
{
data1: "6.一般挽留用户",
data2: "低",
data3: "低",
data4: "低",
},
]);
const typeData = ref([
{
data1: "A类商品",
data2: "占总销售额的80%,需要重点关注",
},
{
data1: "B类商品",
data2: "占总销售额的10%,给予次要关注",
},
{
data1: "C类商品",
data2: "占总销售额的10%,给予一般关注",
},
]);
const dayOptions = ref([
{
value: "1日",
label: "1日",
},
{
value: "2日",
label: "2日",
},
{
value: "3日",
label: "3日",
},
{
value: "4日",
label: "4日",
},
{
value: "5日",
label: "5日",
},
{
value: "6日",
label: "6日",
},
{
value: "7日",
label: "7日",
},
{
value: "8日",
label: "8日",
},
{
value: "9日",
label: "9日",
},
{
value: "10日",
label: "10日",
},
{
value: "11日",
label: "11日",
},
{
value: "12日",
label: "12日",
},
{
value: "13日",
label: "13日",
},
{
value: "14日",
label: "14日",
},
]);
const step1RightAnswer = ref([
{
activeNum: "4",
activeRate: "40",
activeTime: "23.75",
},
{
activeNum: "2",
activeRate: "20",
activeTime: "25.50",
},
{
activeNum: "4",
activeRate: "40",
activeTime: "28.50",
},
{
activeNum: "2",
activeRate: "20",
activeTime: "37.50",
},
{
activeNum: "1",
activeRate: "10",
activeTime: "8.00",
},
{
activeNum: "4",
activeRate: "40",
activeTime: "19.25",
},
{
activeNum: "3",
activeRate: "30",
activeTime: "26.33",
},
{
activeNum: "5",
activeRate: "50",
activeTime: "14.80",
},
{
activeNum: "2",
activeRate: "20",
activeTime: "22.00",
},
{
activeNum: "1",
activeRate: "10",
activeTime: "21.00",
},
{
activeNum: "3",
activeRate: "30",
activeTime: "18.33",
},
{
activeNum: "2",
activeRate: "20",
activeTime: "27.50",
},
{
activeNum: "1",
activeRate: "10",
activeTime: "25.00",
},
{
activeNum: "1",
activeRate: "10",
activeTime: "19.00",
},
{
activeNum: "1",
activeRate: "10",
activeTime: "38.00",
},
{
activeNum: "0",
activeRate: "0",
activeTime: "0.00",
},
{
activeNum: "2",
activeRate: "20",
activeTime: "39.00",
},
{
activeNum: "1",
activeRate: "10",
activeTime: "36.00",
},
{
activeNum: "1",
activeRate: "10",
activeTime: "31.00",
},
{
activeNum: "2",
activeRate: "20",
activeTime: "6.50",
},
{
activeNum: "1",
activeRate: "10",
activeTime: "29.00",
},
{
activeNum: "1",
activeRate: "10",
activeTime: "35.00",
},
{
activeNum: "2",
activeRate: "20",
activeTime: "37.50",
},
{
activeNum: "1",
activeRate: "10",
activeTime: "27.00",
},
{
activeNum: "4",
activeRate: "40",
activeTime: "16.25",
},
{
activeNum: "1",
activeRate: "10",
activeTime: "17.00",
},
{
activeNum: "1",
activeRate: "10",
activeTime: "32.00",
},
{
activeNum: "1",
activeRate: "10",
activeTime: "8.00",
},
{
activeNum: "4",
activeRate: "40",
activeTime: "27.25",
},
{
activeNum: "2",
activeRate: "20",
activeTime: "24.50",
},
]);
const step2RightAnswer = ref([
{
num: "10",
ratio: "100",
},
{
num: "7",
ratio: "70",
},
{
num: "5",
ratio: "50",
},
{
num: "6",
ratio: "60",
},
]);
const step4RightAnswer = ref([
"6",
"10",
"11",
"13",
"2",
"5",
"3",
"5",
"1",
"4",
]);
onMounted(() => {
getData();
});
onBeforeUnmount(() => {
saveData();
});
2 years ago
const moveUp = (index, row) => {
console.log("上移", index, row);
if (index > 0) {
const upDate = step2Data.value[index - 1];
step2Data.value.splice(index - 1, 1);
step2Data.value.splice(index, 0, upDate);
} else {
alert("已经是第一条,不可上移");
}
};
const moveDown = (index, row) => {
console.log("下移", index, row);
if (index + 1 === step2Data.value.length) {
alert("已经是最后一条,不可下移");
} else {
const downDate = step2Data.value[index + 1];
step2Data.value.splice(index + 1, 1);
step2Data.value.splice(index, 0, downDate);
}
};
const addCombination = () => {
if (list.value[0] == "-") {
list.value = [];
}
// list.value = [];
if (combinationValue1.value == "" || combinationValue2.vlaue == "") {
proxy.$modal.msgError("请选择组合");
return;
}
list.value.push(combinationValue1.value + "—" + combinationValue2.value);
};
const tableSpanMethod = ({ row, column, rowIndex, columnIndex }) => {
if (rowIndex === 0) {
if (columnIndex === 6) {
return [2, 1];
}
}
if (rowIndex === 0) {
if (columnIndex === 7) {
return [2, 1];
}
}
if (rowIndex === 2) {
if (columnIndex === 6) {
return [2, 1];
}
}
if (rowIndex === 2) {
if (columnIndex === 7) {
return [2, 1];
}
}
if (rowIndex === 4) {
if (columnIndex === 6) {
return [2, 1];
}
}
if (rowIndex === 4) {
if (columnIndex === 7) {
return [2, 1];
}
}
if (rowIndex === 6) {
if (columnIndex === 6) {
return [2, 1];
}
}
if (rowIndex === 6) {
if (columnIndex === 7) {
return [2, 1];
}
}
};
const handleChangeDay = (e) => {
console.log(e);
};
const draw = () => {
var chartDom = document.getElementById("echarts");
var myChart = echarts.init(chartDom, "dark");
var option;
option = {
title: {
text: "2021/8/1",
left: "center",
top: "10",
},
tooltip: {
trigger: "axis",
formatter: "{c}%",
},
xAxis: {
type: "category",
data: [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
],
},
yAxis: {
type: "value",
axisLabel: {
formatter: "{value}%",
},
},
series: [
{
data: [100, 88, 73, 60, 54, 38, 33, 25, 18, 12, 10, 9, 6, 4],
type: "line",
},
],
};
option && myChart.setOption(option);
};
2 years ago
const drawEcharts = () => {
for (let i in step1Data.value) {
console.log(step1Data.value[i]);
if (
!step1Data.value[i].params1 ||
!step1Data.value[i].params2 ||
!step1Data.value[i].params3
) {
proxy.$modal.msgError("请完成所有填空数据");
return;
}
}
const xAxisData = [];
const data1 = [];
const data2 = [];
for (let item in step1Data.value) {
// console.log(step1Data.value[item].date);
xAxisData.push(step1Data.value[item].date);
data1.push(step1Data.value[item].params2);
data2.push(step1Data.value[item].params3);
}
var chartDom = document.getElementById("echartsDom");
var myChart = echarts.init(chartDom, "dark");
var option;
option = {
title: {
text: "日活跃分析图",
left: "center",
top: "25",
},
tooltip: {
trigger: "axis",
axisPointer: {
type: "cross",
crossStyle: {
color: "#999",
},
},
},
legend: {
data: ["日活跃平均时长(分钟)", "日活跃率"],
top: 5,
},
xAxis: [
{
type: "category",
data: xAxisData,
// offset:'10',
axisLabel: {
interval: 0,
rotate: 90, //代表逆时针旋转45度
fontSize: "0.6rem",
},
axisPointer: {
type: "shadow",
},
},
],
yAxis: [
{
type: "value",
name: "日活跃平均时长",
min: 0,
// max: 250,
interval: 10,
axisLabel: {
formatter: "{value}",
},
},
{
type: "value",
name: "日活跃率",
min: 0,
max: 100,
interval: 10,
axisLabel: {
formatter: "{value}%",
},
},
],
series: [
{
name: "日活跃平均时长(分钟)",
type: "bar",
itemStyle: {
color: "#F4DAA6",
},
tooltip: {
valueFormatter: function (value) {
return value + "分钟";
},
},
data: data2,
},
{
name: "日活跃率",
type: "line",
itemStyle: {
color: "#D052E5",
},
yAxisIndex: 1,
tooltip: {
valueFormatter: function (value) {
return value + "%";
},
},
data: data1,
},
],
};
option && myChart.setOption(option);
};
const step1Submit = () => {
step1Error.value = 0;
for (let i in step1Data.value) {
// console.log(fileTable1.value[i]);
if (
!step1Data.value[i].params1 ||
!step1Data.value[i].params2 ||
!step1Data.value[i].params3
) {
proxy.$modal.msgError("请先完成所有填空");
return;
}
}
for (let i in step1Data.value) {
if (step1Data.value[i].params1 != step1RightAnswer.value[i].activeNum) {
step1Error.value++;
}
if (step1Data.value[i].params2 != step1RightAnswer.value[i].activeRate) {
step1Error.value++;
}
if (step1Data.value[i].params3 != step1RightAnswer.value[i].activeTime) {
step1Error.value++;
}
}
console.log(step1Error.value, "错误数");
proxy.$modal.msgSuccess("提交成功");
step1AnswerFlag.value = true;
};
const step2Submit = () => {
step2Error.value = 0;
for (let i in step2Data.value) {
// console.log(fileTable1.value[i]);
if (!step2Data.value[i].params1 || !step2Data.value[i].params2) {
proxy.$modal.msgError("请先完成所有填空");
return;
}
}
for (let i in step2Data.value) {
if (step2Data.value[i].params1 != step2RightAnswer.value[i].num) {
step2Error.value++;
}
if (step2Data.value[i].params2 != step2RightAnswer.value[i].ratio) {
step2Error.value++;
}
}
console.log(step2Error.value, "错误数");
proxy.$modal.msgSuccess("提交成功");
step2AnswerFlag.value = true;
};
const step3Submit = () => {
step3Error.value = 0;
for (let i in step3Data.value) {
// console.log(fileTable1.value[i]);
if (!step3Data.value[i].params1 || !step3Data.value[i].params2) {
proxy.$modal.msgError("请先完成所有填空");
return;
}
}
if (step3Data.value[0].params1 != "10") {
step3Error.value++;
}
if (step3Data.value[0].params2 != "100") {
step3Error.value++;
}
// console.log(89);
console.log(step3Error.value, "错误数");
proxy.$modal.msgSuccess("提交成功");
step3AnswerFlag.value = true;
};
const step4Submit = () => {
step4Error.value = 0;
for (let i in step4Data.value) {
// console.log(fileTable1.value[i]);
if (!step4Data.value[i].params1) {
proxy.$modal.msgError("请先完成所有填空");
return;
}
}
for (let i in step4DataTable2.value) {
// console.log(fileTable1.value[i]);
if (!step4DataTable2.value[i].params1) {
proxy.$modal.msgError("请先完成所有填空");
return;
}
}
for (let i in step4Data.value) {
if (step4Data.value[i].params1 != step4RightAnswer.value[i]) {
step4Error.value++;
}
}
if (step4DataTable2.value[0].params1 != "20") {
step4Error.value++;
}
if (step4DataTable2.value[1].params1 != "3") {
step4Error.value++;
}
console.log(step4Error.value, "错误数");
proxy.$modal.msgSuccess("提交成功");
step4AnswerFlag.value = true;
};
const saveData = () => {
let infoList = [];
for (let i in step1Data.value) {
infoList.push({
loginTime: step1Data.value[i].date,
activeUser: parseInt(step1Data.value[i].params1),
activeUserRate: parseFloat(step1Data.value[i].params2),
activeUserTime: parseFloat(step1Data.value[i].params3),
});
}
const params = {
stepFiveA: step2Data.value[0].params1,
stepFiveB: step2Data.value[0].params2,
stepFiveC: step2Data.value[1].params1,
stepFiveD: step2Data.value[1].params2,
stepSixA: step2Data.value[2].params1,
stepSixB: step2Data.value[2].params2,
stepSixC: step2Data.value[3].params1,
stepSixD: step2Data.value[3].params2,
stepSevenA: step3Data.value[0].params1,
stepSevenB: step3Data.value[0].params2,
stepSevenC: step4Data.value[0].params1,
stepSevenD: step4Data.value[1].params1,
stepEightA: step4Data.value[2].params1,
stepEightB: step4Data.value[3].params1,
stepEightC: step4Data.value[4].params1,
stepEightD: step4Data.value[5].params1,
stepNineA: step4Data.value[6].params1,
stepNineB: step4Data.value[7].params1,
stepNineC: step4Data.value[8].params1,
stepNineD: step4Data.value[9].params1,
stepTenA: step4DataTable2.value[0].params1,
stepTenB: step4DataTable2.value[1].params1,
stepTenC: analysisConclusionStep1.value,
stepTenD: analysisConclusionStep2.value,
stepElevenA: analysisConclusionStep3.value,
stepOneA: analysisConclusionStep4.value,
// stepOneB: step1Data.value[8].params3,
// stepOneC: step1Data.value[9].params1,
// stepOneD: step1Data.value[9].params2,
// stepTwoA: step1Data.value[9].params3,
// stepTwoB: step4Data.value[6].params2,
// stepTwoC: step5DataTable2.value[0].params,
// stepThreeA: step5DataTable2.value[1].params,
// stepThreeB: step5DataTable2.value[2].params,
// stepThreeC: step5DataTable2.value[3].params,
// stepThreeD: step5DataTable2.value[4].params,
// stepFourA: step5DataTable3.value[0].params1,
// stepFourB: step5DataTable3.value[0].params2,
// stepFourC: step5DataTable3.value[1].params1,
// stepFourD: step5DataTable3.value[1].params2,
// stepNewOne: step5DataTable3.value[2].params1,
// stepNewTwo: step5DataTable3.value[2].params2,
// stepNewThree: step5DataTable3.value[3].params1,
// stepNewFive: step5DataTable3.value[3].params2,
// stepNewSix: step5DataTable3.value[4].params1,
// stepNewEight: step5DataTable3.value[4].params2,
stuMachineLearningInfoDTOList: infoList,
};
portraitModel
.saveData({
userId: JSON.parse(getUserInfo()).userId,
module: "用户粘性分析",
...params,
})
.then((res) => {})
.catch((error) => {});
};
const getData = () => {
portraitModel
.getData({
userId: JSON.parse(getUserInfo()).userId,
module: "用户粘性分析",
})
.then((res) => {
for (let i in res.data.stuMachineLearningInfoDTOList) {
if (
res.data.stuMachineLearningInfoDTOList[i].loginTime ==
step1Data.value[i].date
) {
step1Data.value[i].params1 =
res.data.stuMachineLearningInfoDTOList[i].activeUser;
step1Data.value[i].params2 =
res.data.stuMachineLearningInfoDTOList[i].activeUserRate;
step1Data.value[i].params3 =
res.data.stuMachineLearningInfoDTOList[i].activeUserTime;
}
}
step2Data.value[0].params1 = res.data.stepFiveA;
step2Data.value[0].params2 = res.data.stepFiveB;
step2Data.value[1].params1 = res.data.stepFiveC;
step2Data.value[1].params2 = res.data.stepFiveD;
step2Data.value[2].params1 = res.data.stepSixA;
step2Data.value[2].params2 = res.data.stepSixB;
step2Data.value[3].params1 = res.data.stepSixC;
step2Data.value[3].params2 = res.data.stepSixD;
step3Data.value[0].params1 = res.data.stepSevenA;
step3Data.value[0].params2 = res.data.stepSevenB;
step4Data.value[0].params1 = res.data.stepSevenC;
step4Data.value[1].params1 = res.data.stepSevenD;
step4Data.value[2].params1 = res.data.stepEightA;
step4Data.value[3].params1 = res.data.stepEightB;
step4Data.value[4].params1 = res.data.stepEightC;
step4Data.value[5].params1 = res.data.stepEightD;
step4Data.value[6].params1 = res.data.stepNineA;
step4Data.value[7].params1 = res.data.stepNineB;
step4Data.value[8].params1 = res.data.stepNineC;
step4Data.value[9].params1 = res.data.stepNineD;
step4DataTable2.value[0].params1 = res.data.stepTenA;
step4DataTable2.value[1].params1 = res.data.stepTenB;
analysisConclusionStep1.value = res.data.stepTenC;
analysisConclusionStep2.value = res.data.stepTenD;
analysisConclusionStep3.value = res.data.stepElevenA;
analysisConclusionStep4.value = res.data.stepOneA;
// step1Data.value[8].params3 = res.data.stepOneB;
// step1Data.value[9].params1 = res.data.stepOneC;
// step1Data.value[9].params2 = res.data.stepOneD;
// step1Data.value[9].params3 = res.data.stepTwoA;
// step4Data.value[6].params2 = res.data.stepTwoB;
// step5DataTable2.value[0].params = res.data.stepTwoC;
// step5DataTable2.value[1].params = res.data.stepThreeA;
// step5DataTable2.value[2].params = res.data.stepThreeB;
// step5DataTable2.value[3].params = res.data.stepThreeC;
// step5DataTable2.value[4].params = res.data.stepThreeD;
// step5DataTable3.value[0].params1 = res.data.stepFourA;
// step5DataTable3.value[0].params2 = res.data.stepFourB;
// step5DataTable3.value[1].params1 = res.data.stepFourC;
// step5DataTable3.value[1].params2 = res.data.stepFourD;
// step5DataTable3.value[2].params1 = res.data.stepNewOne;
// step5DataTable3.value[2].params2 = res.data.stepNewTwo;
// step5DataTable3.value[3].params1 = res.data.stepNewThree;
// step5DataTable3.value[3].params2 = res.data.stepNewFive;
// step5DataTable3.value[4].params1 = res.data.stepNewSix;
// step5DataTable3.value[4].params2 = res.data.stepNewEight;
})
.catch((error) => {});
};
const downloadData = () => {
2 years ago
// portraitModel
// .downloadDataByViscosity({})
// .then((res) => {
// // console.log(res,'--');
// const blob = new Blob([res], { type: "application/vnd.ms-excel" });
// downBlobFile(`案例数据-用户粘性分析`, blob);
// })
// .catch((error) => {});
window.open(baseUrl + "/api/downDataByUserPortrait/analysisByStickiness");
};
const submitData = () => {
if (
!step1AnswerFlag.value ||
!step2AnswerFlag.value ||
!step3AnswerFlag.value ||
!step4AnswerFlag.value
) {
proxy.$modal.msgError("请先完成所有步骤!");
return;
}
errorNum.value =
step1Error.value + step2Error.value + step3Error.value + step4Error.value;
console.log(errorNum.value, "总错误次数");
portraitModel
.submit({
userId: JSON.parse(getUserInfo()).userId,
taskName: "用户粘性分析",
numberOfErrors: errorNum.value,
})
.then((res) => {
proxy.$modal.msgSuccess("提交成功");
})
.catch((error) => {});
};
2 years ago
const retrain = () => {
portraitModel
.retrain({
userId: JSON.parse(getUserInfo()).userId,
2 years ago
module: "用户粘性分析",
})
.then((res) => {
proxy.$modal.msgSuccess("重新实训成功");
for (let i in step1Data.value) {
step1Data.value[i].params1 = "";
step1Data.value[i].params2 = "";
step1Data.value[i].params3 = "";
}
for (let i in step2Data.value) {
step2Data.value[i].params1 = "";
step2Data.value[i].params2 = "";
}
for (let i in step3Data.value) {
step3Data.value[i].params1 = "";
step3Data.value[i].params2 = "";
}
for (let i in step4Data.value) {
step4Data.value[i].params1 = "";
}
for (let i in step4DataTable2.value) {
step4DataTable2.value[i].params1 = "";
}
analysisConclusionStep1.value = "";
analysisConclusionStep2.value = "";
analysisConclusionStep3.value = "";
analysisConclusionStep4.value = "";
// dayValue.value = "";
})
.catch((error) => {});
};
defineExpose({
submitData,
2 years ago
retrain,
// practicalTraining,
});
2 years ago
</script>
<style scoped lang="scss">
.content {
width: 100%;
// background: rgba(0, 29, 64, 0.5);
background: #fff;
2 years ago
border: 1px solid #0452c6;
padding: 10px;
// opacity: 0.5;
a:hover {
text-decoration: underline;
}
.import {
display: flex;
font-size: 15px;
font-weight: bold;
2 years ago
width: 150px;
height: 50px;
background-image: url("@/assets/images/taskImport.png");
2 years ago
background-size: 150px 50px;
2 years ago
text-align: center;
align-items: center;
2 years ago
line-height: 50px;
2 years ago
cursor: pointer;
img {
margin-left: 20px;
2 years ago
margin-right: 8px;
2 years ago
}
}
.caseBack {
color: #000;
2 years ago
.title {
font-weight: bold;
margin-top: 10px;
display: flex;
align-items: center;
span {
margin-left: 10px;
}
}
.download {
cursor: pointer;
margin-left: 20px;
color: #000;
padding-left: 10px;
font-size: 14px;
text-align: center;
line-height: 31px;
width: 89px;
height: 31px;
background: url("@/assets/images/downloadIcon.png");
}
.submit {
cursor: pointer;
margin-left: 20px;
color: #000;
padding-left: 10px;
font-size: 14px;
text-align: center;
line-height: 31px;
width: 99px;
height: 31px;
background: url("@/assets/images/提交任务.png");
}
.customerType {
padding-left: 10px;
display: flex;
align-items: center;
width: 945px;
height: 26px;
background: #003b75;
border-radius: 10px;
border: 1px solid #0052a3;
font-size: 12px;
margin-top: 10px;
img {
margin-right: 10px;
}
}
.secondTitle {
margin-top: 10px;
display: flex;
align-items: center;
img {
margin-right: 10px;
}
}
}
.line {
width: 1400px;
height: 1px;
border: 1px solid #0452c6;
opacity: 0.5;
margin-top: 20px;
margin-bottom: 20px;
}
.addBtn {
background-color: #6af5fb;
color: #080138;
height: 31px;
border: 1px solid #6af5fb;
margin-left: 10px;
}
.comList {
ul {
text-align: center;
list-style-type: none;
border: 1px solid #7190d4;
border-bottom: none;
width: 124px;
padding: 0;
// padding: 0;
margin: 0;
p {
width: 122px;
height: 40px;
line-height: 40px;
background: #6e70f0;
margin: 0;
}
li {
padding: 0;
margin: 0;
line-height: 30px;
width: 122px;
height: 30px;
background: #003b75;
border-bottom: 1px solid #7190d4;
font-size: 14px;
}
}
}
.draw {
width: 89px;
height: 31px;
background: url("@/assets/images/绘制.png");
text-align: center;
line-height: 31px;
color: #000;
font-size: 14px;
cursor: pointer;
}
.analysis {
width: 577px;
height: 117px;
background: #005b55;
border-radius: 10px;
margin-top: 20px;
font-size: 14px;
padding-left: 20px;
padding-top: 12px;
.conclusion {
// display: block;
margin-bottom: 10px;
font-size: 16px;
}
}
.generateBtn {
width: 185px;
height: 31px;
background: url("@/assets/images/生成统计.png");
text-align: center;
line-height: 31px;
color: #000;
font-size: 14px;
cursor: pointer;
}
2 years ago
.analysisConclusion {
background: url("@/assets/images/分析.png");
width: 89px;
height: 31px;
text-align: center;
line-height: 31px;
color: #000;
font-size: 14px;
// cursor: pointer;
margin-left: 20px;
padding-left: 10px;
}
2 years ago
}
// ::v-deep .el-table tr {
// background-color: #002652 !important;
// color: #fff;
// }
2 years ago
::v-deep .el-table tr {
background-color: #fff !important;
color: #000;
}
/* 将悬停背景色改为红色 */
::v-deep .el-table--enable-row-hover .el-table__body tr:hover > td {
background-color: #f5f7fa !important;
2 years ago
}
2 years ago
::v-deep .el-textarea__inner {
// background: #002652;
color: #000;
2 years ago
// color: #5397C3;
}
2 years ago
::v-deep .el-table td {
padding-top: 4px;
padding-bottom: 4px;
}
2 years ago
</style>