|
|
@@ -170,13 +170,13 @@
|
|
|
<el-col :span="6">
|
|
|
<div class="stat-item">
|
|
|
<div class="stat-label">人均看课时长</div>
|
|
|
- <div class="stat-value">{{ (detailDialog.data.avgWatchDurationMinutes || 0) + '分' }}</div>
|
|
|
+ <div class="stat-value">{{ formatDuration(detailDialog.data.avgWatchDurationMinutes)}}</div>
|
|
|
</div>
|
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
|
<div class="stat-item">
|
|
|
<div class="stat-label">人均完课时长</div>
|
|
|
- <div class="stat-value">{{ (detailDialog.data.avgCompletedDuration || 0) + '分' }}</div>
|
|
|
+ <div class="stat-value">{{ formatDuration(detailDialog.data.avgCompletedDuration)}}</div>
|
|
|
</div>
|
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
|
@@ -573,17 +573,20 @@ export default {
|
|
|
},
|
|
|
/** 格式化时长 */
|
|
|
formatDuration(seconds) {
|
|
|
- if (!seconds) return '0秒';
|
|
|
- const hours = Math.floor(seconds / 3600);
|
|
|
- const minutes = Math.floor((seconds % 3600) / 60);
|
|
|
- const secs = seconds % 60;
|
|
|
- if (hours > 0) {
|
|
|
- return `${hours}小时${minutes}分钟${secs}秒`;
|
|
|
- } else if (minutes > 0) {
|
|
|
- return `${minutes}分钟${secs}秒`;
|
|
|
- } else {
|
|
|
- return `${secs}秒`;
|
|
|
+ if (seconds == null || isNaN(seconds)) return '0秒';
|
|
|
+ let total = Math.abs(seconds);
|
|
|
+ const hours = Math.floor(total / 3600);
|
|
|
+ const minutes = Math.floor((total % 3600) / 60);
|
|
|
+ const secs = Math.floor(total % 60);
|
|
|
+
|
|
|
+ const parts = [];
|
|
|
+ if (hours > 0) parts.push(`${hours}小时`);
|
|
|
+ if (minutes > 0) parts.push(`${minutes}分`);
|
|
|
+ if (secs > 0 || parts.length === 0) {
|
|
|
+ parts.push(`${secs}秒`);
|
|
|
}
|
|
|
+
|
|
|
+ return parts.join('');
|
|
|
}
|
|
|
}
|
|
|
};
|