将组件数据参数化

This commit is contained in:
Kane Wang 2023-03-08 10:29:35 +08:00
parent 3313414c70
commit 18d4620729
3 changed files with 53 additions and 36 deletions

View File

@ -2,8 +2,8 @@
* @Author: Kane
* @Date: 2023-03-04 16:09:31
* @LastEditors: Kane
* @FilePath: /task_schedule/src/components/ArchievementComponent.vue
* @Description:
* @FilePath: /task_schedule/src/components/ArchievementChartComponent.vue
* @Description: 业绩图表组件
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
@ -20,11 +20,22 @@ import { reactive, computed, onMounted } from "vue";
import * as echarts from "echarts";
export default {
name: "ArchievementComponent",
setup()
name: "ArchievementChartComponent",
props: {
total_archievement: {
type: String,
require: true,
},
chart_data: {
type: Array,
require: true,
},
},
setup(props)
{
const ui = reactive({
total_archievement: 435220,
total_archievement: props.total_archievement,
chart_data: props.chart_data,
});
const archivement_count = computed(() =>
@ -49,7 +60,7 @@ export default {
},
series: [
{
data: [200, 230, 224, 218, 135, 147, 260,],
data: props.chart_data,
type: "line",
},
],

View File

@ -9,15 +9,9 @@
-->
<template>
<div class="complete-rate-wrapper">
<el-progress type="circle" :percentage="72">
<el-progress type="circle" :percentage="ui.percentage">
<template #default="{ percentage }">
<span class="percentage-label">续保完成率</span>
<span class="percentage-value">{{ percentage }}%</span>
</template>
</el-progress>
<el-progress type="circle" :percentage="93">
<template #default="{ percentage }">
<span class="percentage-label">车非完成率</span>
<span class="percentage-label">{{ ui.indicator }}</span>
<span class="percentage-value">{{ percentage }}%</span>
</template>
</el-progress>
@ -25,31 +19,39 @@
</template>
<script lang="ts">
import { onMounted } from "vue";
import { reactive } from "vue";
export default {
name: "ArchievementCompleteRateComponent",
setup()
props: {
percentage: {
type: String,
require: true,
},
indicator: {
type: String,
default: "",
},
},
setup(props)
{
const percentage = Number(props.percentage).valueOf();
onMounted(() =>
{
const ui = reactive({
percentage: percentage,
indicator: props.indicator,
});
return {};
return { ui, };
},
};
</script>
<style lang="scss">
.complete-rate-wrapper {
// width: 150px;
// height: 150px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
// display: flex;
// flex-direction: column;
// justify-content: center;
// align-items: center;
span {
display: block;
@ -57,6 +59,10 @@ export default {
color: #fff;
}
.el-progress {
margin: 8px;
}
.percentage-value {
display: block;
margin-top: 10px;
@ -69,8 +75,6 @@ export default {
font-size: 12px;
}
.el-progress {
margin-bottom: 15px;
}
}
</style>

View File

@ -13,10 +13,11 @@
<span class="slogan">对标先进&nbsp;比学赶超</span>
<div class="total-archievement-wrapper">
<div class="total-archievement-rate-wrapper">
<ArchievementCompleteRateComponent />
<ArchievementCompleteRateComponent indicator="续保完成率" percentage=65 />
<ArchievementCompleteRateComponent indicator="车非完成率" percentage=66 />
</div>
<div class="total-archievement-charts-wrapper">
<Archievement />
<ArchievementChart total_archievement="435220" :chart_data="[200, 230, 224, 218, 135, 147, 260, 800]" />
</div>
</div>
<div class="reward-wrapper"></div>
@ -31,12 +32,12 @@
import { useRouter } from "vue-router";
import { loadStaffInfo } from "@/utils/api/localStorage.js";
import { ElMessage } from "element-plus";
import Archievement from "@/components/ArchievementComponent.vue";
import ArchievementChart from "@/components/ArchievementChartComponent.vue";
import ArchievementCompleteRateComponent from "@/components/ArchievementCompleteRateComponent.vue";
export default {
name: "DesktopArchievement",
components: { Archievement, ArchievementCompleteRateComponent, },
components: { ArchievementChart, ArchievementCompleteRateComponent, },
setup()
{
const router = useRouter();
@ -123,8 +124,9 @@ export default {
width: 25%;
min-width: 180px;
display: flex;
justify-content: center;
align-items: end;
flex-direction: column;
justify-content: end;
align-items: center;
}
.total-archievement-charts-wrapper {