| | |
| | | <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> |
| | |
| | | */ |
| | | 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> |
| | | |
| | |
| | | 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; |