riku
2025-06-20 a030cd7ebede3762fda4dcb6511f43712a417a58
src/components/inspection/TaskItem.vue
@@ -1,40 +1,59 @@
<template>
  <div class="demo-progress border-r-small f-b">
    <el-row>
      <el-col span="8">
        <el-progress :width="100" type="dashboard" :percentage="(finish / total) * 100">
  <div v-if="value">
    <el-row justify="start">
      <el-text>{{ value.name }}</el-text>
    </el-row>
    <div>
      <el-text>总量</el-text>
      <el-text v-if="value._totaltask > 0" size="default">{{
        value._completetask + '/' + value._totaltask
      }}</el-text>
      <el-text v-else size="default">{{ value.completetask + '/' + value.totaltask }}</el-text>
      <el-progress
        style="width: 300px"
        type="line"
        status="warning"
        :text-inside="true"
        :stroke-width="18"
        :striped="percentFormat(value.completetask, value.totaltask) < 100"
        striped-flow
        :percentage="percentFormat(value.completetask, value.totaltask)"
      >
        <template #default="{ percentage }">
          <span class="percentage-value">{{ percentage }}%</span>
        </template>
      </el-progress>
    </div>
    <!-- </el-col> -->
    <!-- <el-col span="12" class="flex-bottom"> -->
    <!-- <div>{{ name }}</div> -->
    <!-- <div>{{ planTime }}</div> -->
    <!-- <div>{{ userName }}</div> -->
    <el-row class="m-t-8">
      <div
        align="center"
        :style="'width: ' + 300 / value.count.length + 'px'"
        v-for="item in value.count"
        :key="item.sceneType"
      >
        <el-progress
          :stroke-width="18"
          status="exception"
          :text-inside="true"
          :striped="percentFormat(item.finish, item.total) < 100"
          striped-flow
          :percentage="percentFormat(item.finish, item.total)"
        >
          <template #default="{ percentage }">
            <span class="percentage-value">{{ percentage }}%</span>
            <span class="percentage-label">{{ finish + '/' + total }}</span>
            <span class="percentage-value-small">{{ percentage }}%</span>
          </template>
        </el-progress>
      </el-col>
      <el-col span="16">
        <div>{{ name }}</div>
        <!-- <div>{{ planTime }}</div> -->
        <div>{{ userName }}</div>
        <el-row style="gap: 10px">
          <div class="v-center" v-for="item in count" :key="item.sceneType">
            <el-progress
              :width="50"
              :stroke-width="3"
              type="dashboard"
              :percentage="(item.finish / item.total) * 100"
            >
              <template #default="{ percentage }">
                <span class="percentage-value-small">{{ percentage }}%</span>
              </template>
            </el-progress>
            <div>
              <el-text size="small">{{ item.sceneType }}</el-text>
              <el-text size="small">{{ item.finish + '/' + item.total }}</el-text>
            </div>
            <div></div>
            <!-- <div class="percentage-label-small">{{ item.sceneType }}</div> -->
            <!-- <span class="percentage-label-small">{{ item.finish + '/' + item.total }} </span> -->
          </div>
        </el-row>
      </el-col>
        <el-text size="small" truncated>{{ item.sceneType }}</el-text>
        <!-- <el-text size="small">{{ item.finish + '/' + item.total }}</el-text> -->
        <!-- <span class="percentage-value-small">{{ percentFormat(item.finish, item.total) }}%</span> -->
        <!-- <div class="percentage-label-small">{{ item.sceneType }}</div> -->
        <!-- <span class="percentage-label-small">{{ item.finish + '/' + item.total }} </span> -->
      </div>
    </el-row>
  </div>
</template>
@@ -45,37 +64,53 @@
 */
export default {
  props: {
    name: String,
    district: String,
    planTime: String,
    startTime: String,
    endTime: String,
    userName: String,
    status: String,
    // name: String,
    // province: String,
    // district: String,
    // planTime: String,
    // startTime: String,
    // endTime: String,
    // userName: String,
    // status: String,
    // totaltask: Number,
    // completetask: Number,
    // count: Array,
    count: Array
    value: Object
  },
  data() {
    return {}
  },
  watch: {},
  computed: {
    total() {
      let t = 0
      this.count.forEach((c) => {
        t += c.total
      })
      return t
    },
    finish() {
      let t = 0
      this.count.forEach((c) => {
        t += c.finish
      })
      return t
    }
    // total() {
    //   let t = 0
    //   this.count.forEach((c) => {
    //     t += c.total
    //   })
    //   return t
    // },
    // finish() {
    //   let t = 0
    //   this.count.forEach((c) => {
    //     t += c.finish
    //   })
    //   return t
    // }
  },
  methods: {}
  methods: {
    percentFormat(finish, total) {
      if (total == 0) {
        return 0
      } else {
        const per = finish / total > 1 ? 1 : finish / total
        return Math.round(per * 100)
      }
    },
    format(percentage) {
      percentage === 100 ? 'Full' : `${percentage}%`
    }
  }
}
</script>
@@ -85,10 +120,15 @@
  border-radius: var(--el-border-radius-base);
}
.flex-bottom {
  display: flex;
  flex-direction: column;
  justify-content: end;
}
.percentage-value {
  display: block;
  margin-top: 10px;
  font-size: var(--el-font-size-base);
  font-size: var(--el-font-size-small);
}
.percentage-value-small {
  display: block;