zhangzengfei
2023-09-06 c0c034b3ef0fdf0fd9c802d5984dbd717db6817a
src/pages/vindicate/views/systemClean.vue
@@ -1,29 +1,46 @@
<template>
  <div class="clear" v-loading="loading" :element-loading-text="loadingText">
    <div class="clear-list">
        <div class="cap">
          <div class="cap-bar">
      <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>
          <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>
          <span class="useable">磁盘可用: {{ percent }}%</span>
        </div>
      </div>
    <el-button type="primary" @click="deleteData">数据清理</el-button>
      <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"
      <el-date-picker
        popper-class="clean-time-picker"
        style="width: 100%"
        v-model="dataRange"
        value-format="yyyy-MM-dd"
        type="daterange"
        type="daterange"
        align="right"
        size="small"
        range-separator="至"
@@ -31,11 +48,13 @@
        end-placeholder="结束日期"
        :picker-options="pickerOptions"
      ></el-date-picker>
    </div>
    </div>
    <div class="warm">
        <i class="iconfont icontishi-zhuyi"></i>
        <span class="text">请注意,按以上日期范围删除的数据不可恢复,立即生效,请谨慎操作!</span>
      <i class="iconfont icontishi-zhuyi"></i>
      <span class="text"
        >请注意,按以上日期范围删除的数据不可恢复,立即生效,请谨慎操作!</span
      >
    </div>
  </div>
</template>
@@ -43,6 +62,25 @@
<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: {
@@ -51,51 +89,98 @@
          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: []
      loadingText: "",
      dataRange: [],
    };
  },
  props:["free","full"],
  props: ["free", "full"],
  computed: {
    percent(){
      return Math.round(this.free/this.full *100)
    }
    percent() {
      return Math.round((this.free / this.full) * 100);
    },
  },
  methods: {
    deleteData() {
      if (this.dataRange.length==0) {
        this.$message.warning("请先选择日期")
        return
      if (!this.dataRange || this.dataRange.length == 0) {
        this.$message.warning("请先选择日期");
        return;
      }
      const [showStartTime, showEndTime] = this.dataRange
      this.$confirm(`${showStartTime} 至 ${showEndTime} 产生的全部数据将被删除,此操作立即生效,不可恢复,是否删除?`, "提示",{
          type:"warning",
          cancelButtonClass: "comfirm-class-cancle",
          confirmButtonClass: "comfirm-class-sure",
        }
      )
      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 = "正在删除数据,请稍候!"
          this.loading = true;
          this.loadingText = "正在删除数据,请稍候!";
          deleteData({
            startTime: showStartTime,
            endTime: showEndTime,
          })
            .then((resp) => {
              if (resp.success) {
                this.loading = false
                this.loading = false;
                this.$message.success(`清理成功,已清理 ${resp.data} 条数据`);
                this.$emit("refreshPercent")
                this.$emit("refreshPercent");
              }
            })
            .catch((err) => {
              this.$message.error("删除失败,"+err.msg);
              this.loading = false
              this.$message.error("删除失败," + err.msg);
              this.loading = false;
            });
        })
        .catch(() => { });
        .catch(() => {});
    },
  },
};
@@ -103,83 +188,79 @@
<style lang="scss">
.all {
  width: 100%;
  background-color: #FBFAFF;
  background-color: #fbfaff;
}
.container {
 background-color: #FBFAFF;
  background-color: #fbfaff;
}
.clear {
  position: relative;
  padding: 10px;
  border-top:2px solid #E1E0E6 ;
  border-left:2px solid #E1E0E6 ;
  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 {
    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;
    .cap-bar {
    width: 70px;
    height: 70px;
    div {
      width: 100%;
      height: 100%;
      .el-progress-circle {
       width: 100% !important;
       height: 100% !important;
      }
      &::after {
        position: relative;
        top: -68%;
        content: '\e6e8';
        width: 25px;
        height: 25px;
        display: inline-block;
        margin: auto;
        font-family: "iconfont" !important;
        font-size: 25px;
        font-style: normal;
        -webkit-font-smoothing: antialiased;
        -moz-osx-font-smoothing: grayscale;
      }
    }
    svg {
      width: 70px;
      height: 70px;
    }
    .el-progress__text {
      display: none !important;
    }
    &:first-child {
      border-bottom: 1px solid #e1e0e6;
    }
    .cap-text {
      color: #333333;
      font-weight: bold;
      font-size: 16px;
      .useable {
      margin-left:20px ;
    .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 {
    .el-button.el-button--primary {
      width: 150px !important;
      height: 30px !important;
      line-height: 7px !important;
@@ -189,49 +270,130 @@
      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;
        margin: 0 15px;
        &::before {
          line-height: 40px;
          font-size: 20px;
          color: #333;
        }
      }
      }
      .el-range-separator{
      .el-range-separator {
        line-height: 41px;
      }
      input {
        width: 127px;
        height: 32px;
        font-size: 12px;
        background: #F2F2F7;
        background: #f2f2f7;
        border-radius: 20px;
      }
    }
  .t {
    height: 22px;
    width: 242px;
    .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>
.warm {
  position: absolute;
  bottom: 60px;
  left: 50%;
  width: 420px;
  transform:translateX(-50%) ;
  .icontishi-zhuyi {
    margin-right:10px ;
    color: red;
<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>