<template>
|
<div class="clear" v-loading="loading" :element-loading-text="loadingText">
|
<div class="clear-list">
|
<div class="cap">
|
<div class="cap-bar">
|
<!-- <div class="inner-bar" :style="`width: ${100-percent}%;`"></div> -->
|
<el-progress
|
v-if="percent > 25"
|
type="circle"
|
:percentage="100 - percent"
|
stroke-width="10"
|
></el-progress>
|
<el-progress
|
v-if="percent <= 25 && percent > 0"
|
type="circle"
|
:percentage="100 - percent"
|
status="warning"
|
stroke-width="10"
|
></el-progress>
|
<el-progress
|
v-if="percent == 0"
|
type="circle"
|
:percentage="100 - percent"
|
status="exception"
|
stroke-width="10"
|
></el-progress>
|
</div>
|
<div class="cap-text">
|
<span class="useable">磁盘可用: {{ percent }}%</span>
|
</div>
|
</div>
|
|
<el-button type="primary" @click="deleteData">数据清理</el-button>
|
</div>
|
|
<div class="clear-list">
|
<span class="t">请选择要清理的数据范围</span>
|
<el-date-picker
|
popper-class="clean-time-picker"
|
style="width: 100%"
|
v-model="dataRange"
|
value-format="yyyy-MM-dd"
|
type="daterange"
|
align="right"
|
size="small"
|
range-separator="至"
|
start-placeholder="开始日期"
|
end-placeholder="结束日期"
|
:picker-options="pickerOptions"
|
></el-date-picker>
|
</div>
|
|
<div class="warm">
|
<i class="iconfont icontishi-zhuyi"></i>
|
<span class="text"
|
>请注意,按以上日期范围删除的数据不可恢复,立即生效,请谨慎操作!</span
|
>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import { deleteData } from "@/api/system";
|
export default {
|
created() {
|
const end = new Date();
|
const start = new Date();
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
|
var year = end.getFullYear();
|
var month = end.getMonth() + 1;
|
var day = end.getDate();
|
month = month < 10 ? "0" + month : month;
|
day = day < 10 ? "0" + day : day;
|
const endTime = year + "-" + month + "-" + day;
|
|
var year2 = start.getFullYear();
|
var month2 = start.getMonth() + 1;
|
var day2 = start.getDate();
|
month2 = month2 < 10 ? "0" + month2 : month2;
|
day2 = day2 < 10 ? "0" + day2 : day2;
|
const startTime = year2 + "-" + month2 + "-" + day2;
|
this.dataRange = [startTime, endTime];
|
},
|
data() {
|
return {
|
pickerOptions: {
|
disabledDate(time) {
|
var day = new Date();
|
day.setTime(day.getTime() - 24 * 60 * 60 * 1000);
|
return time.getTime() > day;
|
},
|
shortcuts: [
|
{
|
text: "最近一周",
|
onClick(picker) {
|
const end = new Date();
|
const start = new Date();
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
|
picker.$emit("pick", [start, end]);
|
},
|
},
|
{
|
text: "最近一个月",
|
onClick(picker) {
|
const end = new Date();
|
const start = new Date();
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
|
picker.$emit("pick", [start, end]);
|
},
|
},
|
{
|
text: "最近三个月",
|
onClick(picker) {
|
const end = new Date();
|
const start = new Date();
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
|
picker.$emit("pick", [start, end]);
|
},
|
},
|
],
|
},
|
loading: false,
|
loadingText: "",
|
dataRange: [],
|
};
|
},
|
props: ["free", "full"],
|
computed: {
|
percent() {
|
return Math.round((this.free / this.full) * 100);
|
},
|
},
|
methods: {
|
deleteData() {
|
if (!this.dataRange || this.dataRange.length == 0) {
|
this.$message.warning("请先选择日期");
|
return;
|
}
|
const [showStartTime, showEndTime] = this.dataRange;
|
const h = this.$createElement;
|
const icon = this.$msgbox({
|
title: "",
|
message: h(
|
"div",
|
{
|
style:
|
"display: flex; flex-direction: column; justify-content: center; align-items: center;",
|
},
|
[
|
h("span", { class: "icon iconfont warn-icon" }, "\ue71c"),
|
h("span", { class: "warn-title" }, "提示 "),
|
h(
|
"span",
|
{ class: "warn-dec" },
|
`${showStartTime} 至 ${showEndTime} 产生的全部数据将被删除,此操作立即生效,不可恢复,是否删除?`
|
),
|
]
|
),
|
showCancelButton: true,
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
})
|
|
.then(() => {
|
this.loading = true;
|
this.loadingText = "正在删除数据,请稍候!";
|
deleteData({
|
startTime: showStartTime,
|
endTime: showEndTime,
|
})
|
.then((resp) => {
|
if (resp.success) {
|
this.loading = false;
|
this.$message.success(`清理成功,已清理 ${resp.data} 条数据`);
|
this.$emit("refreshPercent");
|
}
|
})
|
.catch((err) => {
|
this.$message.error("删除失败," + err.msg);
|
this.loading = false;
|
});
|
})
|
.catch(() => {});
|
},
|
},
|
};
|
</script>
|
<style lang="scss">
|
.all {
|
width: 100%;
|
background-color: #fbfaff;
|
}
|
.container {
|
background-color: #fbfaff;
|
}
|
|
.clear {
|
position: relative;
|
padding: 10px;
|
border-top: 4px solid #f2f2f7;
|
border-left: 4px solid #f2f2f7;
|
|
.clear-list {
|
background: #f2f2f7;
|
border-radius: 8px;
|
height: 114px;
|
display: flex;
|
align-items: center;
|
justify-content: space-between;
|
padding: 0 45px;
|
color: #333333;
|
font-weight: bold;
|
font-size: 16px;
|
|
&:first-child {
|
border-bottom: 1px solid #e1e0e6;
|
}
|
|
.cap {
|
display: flex;
|
align-items: center;
|
|
.cap-bar {
|
width: 70px;
|
height: 70px;
|
div {
|
width: 100%;
|
height: 100%;
|
.el-progress-circle {
|
width: 100% !important;
|
height: 100% !important;
|
}
|
&::after {
|
position: relative;
|
top: -77%;
|
background-image: url(/images/vindicate/内存.png);
|
width: 38px;
|
height: 35px;
|
background-size: cover;
|
display: inline-block;
|
margin: auto;
|
content: "";
|
}
|
}
|
svg {
|
width: 70px;
|
height: 70px;
|
}
|
.el-progress__text {
|
display: none !important;
|
}
|
}
|
|
.cap-text {
|
color: #333333;
|
font-weight: bold;
|
font-size: 16px;
|
.useable {
|
margin-left: 20px;
|
}
|
}
|
}
|
.el-button.el-button--primary {
|
width: 150px !important;
|
height: 30px !important;
|
line-height: 7px !important;
|
font-size: 14px !important;
|
color: #fff !important;
|
background: var(--colorCard) !important;
|
border-radius: 25px !important;
|
border: none !important;
|
}
|
|
.el-date-editor.el-range-editor {
|
height: 48px;
|
width: 361px !important;
|
border-radius: 8px;
|
.el-input__icon.el-range__icon.el-icon-date {
|
margin: 0 15px;
|
&::before {
|
line-height: 40px;
|
font-size: 20px;
|
color: #333;
|
}
|
}
|
.el-range-separator {
|
line-height: 41px;
|
}
|
input {
|
width: 127px;
|
height: 32px;
|
font-size: 12px;
|
background: #f2f2f7;
|
border-radius: 20px;
|
}
|
}
|
|
.t {
|
height: 22px;
|
width: 242px;
|
}
|
}
|
|
.warm {
|
position: absolute;
|
bottom: 60px;
|
left: 50%;
|
width: 420px;
|
transform: translateX(-50%);
|
.icontishi-zhuyi {
|
margin-right: 10px;
|
color: red;
|
}
|
}
|
}
|
</style>
|
|
<style scoped lang="scss">
|
.warn-icon {
|
color: var(--colorCard);
|
font-size: 40px;
|
margin-top: 11px;
|
}
|
.warn-title {
|
font-weight: bold;
|
font-size: 16px;
|
margin: 6px;
|
line-height: 22px;
|
}
|
.warn-dec {
|
font-weight: bold;
|
font-size: 14px;
|
color: #828282;
|
line-height: 20px;
|
}
|
.el-message-box__headerbtn {
|
top: 12px;
|
}
|
.el-message-box__headerbtn .el-message-box__close {
|
color: #333333;
|
font-weight: bold;
|
}
|
.el-message-box__btns {
|
display: flex;
|
justify-content: center;
|
margin: 20px;
|
.el-button:focus,
|
.el-button:hover {
|
background-color: none;
|
border: none;
|
}
|
button {
|
width: 175px;
|
height: 40px;
|
border-radius: 25px;
|
span {
|
font-size: 16px;
|
font-weight: 700;
|
}
|
&:hover {
|
border: 1px solid var(--colorCard) !important;
|
}
|
}
|
button:first-child {
|
background-color: #e0e0e0;
|
span {
|
color: #333333;
|
}
|
}
|
button:last-child {
|
background-color: var(--colorCard) !important;
|
border: 1px solid var(--colorCard) !important;
|
span {
|
color: #fff;
|
}
|
}
|
}
|
</style>
|
|
<style lang="scss">
|
.clean-time-picker {
|
top: 208px !important;
|
left: 343px !important;
|
width: 624px !important;
|
|
.el-picker-panel__sidebar {
|
background: #eef5ff;
|
button {
|
margin: 10px 0;
|
}
|
}
|
|
tbody {
|
tr:first-child {
|
background: #eef5ff;
|
}
|
}
|
}
|
</style>
|