Prechádzať zdrojové kódy

会员看客添加合计

xgb 2 dní pred
rodič
commit
3ee9023cb5

+ 84 - 1
src/views/course/courseUserStatistics/statistics.vue

@@ -61,7 +61,10 @@
       </el-form-item>
     </el-form>
 
-    <el-table border v-loading="loading" :data="courseWatchLogList" @selection-change="handleSelectionChange"  show-summary height="600">
+    <el-table border v-loading="loading" :data="courseWatchLogList" @selection-change="handleSelectionChange"  show-summary
+              :summary-method="getSummaries"
+              max-height="500"
+              highlight-current-row>
       <el-table-column type="selection" width="55" align="center" />
 <!--        <el-table-column label="会员名称" align="center" prop="fsUserName" />-->
       <el-table-column label="销售名称" align="center" prop="qwUserName" />
@@ -577,6 +580,74 @@ export default {
     })
   },
   methods: {
+    // 合计
+    getSummaries(param) {
+      const { columns, data } = param;
+      const sums = [];
+
+      columns.forEach((column, index) => {
+        if (index === 0) {
+          sums[index] = '合计';
+          return;
+        }
+
+        // 获取列的真实属性名
+        const prop = column.property;
+
+        // 定义需要合计的字段
+        const summaryFields = [
+          'line', 'firstOnline', 'firstOver',
+          'd1Online', 'd1Over', 'd2Online', 'd2Over',
+          'd3Online', 'd3Over', 'd4Online', 'd4Over',
+          'd5Online', 'd5Over', 'd6Online', 'd6Over',
+          'd7Online', 'd7Over', 'd8Online', 'd8Over',
+          'd9Online', 'd9Over', 'd10Online', 'd10Over',
+          'd11Online', 'd11Over', 'd12Online', 'd12Over',
+          'd13Online', 'd13Over', 'd14Online', 'd14Over',
+          'd15Online', 'd15Over', 'd16Online', 'd16Over',
+          'd17Online', 'd17Over', 'd18Online', 'd18Over',
+          'd19Online', 'd19Over', 'd20Online', 'd20Over',
+          'd21Online', 'd21Over', 'd22Online', 'd22Over',
+          'd23Online', 'd23Over', 'd24Online', 'd24Over',
+          'd25Online', 'd25Over', 'd26Online', 'd26Over',
+          'd27Online', 'd27Over', 'd28Online', 'd28Over',
+          'd29Online', 'd29Over', 'd30Online', 'd30Over'
+        ];
+
+        if (prop && summaryFields.includes(prop)) {
+          const values = data.map(item => {
+            const value = Number(item[prop]);
+            return isNaN(value) ? 0 : value;
+          });
+          const sum = values.reduce((prev, curr) => prev + curr, 0);
+
+          // 如果是line字段,直接显示合计值
+          if (prop === 'line') {
+            sums[index] = sum;
+          } else if (prop.endsWith('Online') || prop.endsWith('Over')) {
+            // 对于上线和完课字段,显示合计值和百分比
+            const lineValues = data.map(item => {
+              const value = Number(item.line);
+              return isNaN(value) ? 0 : value;
+            });
+            const totalLine = lineValues.reduce((prev, curr) => prev + curr, 0);
+
+            if (totalLine > 0) {
+              const percentage = ((sum / totalLine) * 100).toFixed(2);
+              sums[index] = `${sum} (${percentage}%)`;
+            } else {
+              sums[index] = `${sum} (0.00%)`;
+            }
+          } else {
+            sums[index] = sum;
+          }
+        } else {
+          sums[index] = '';
+        }
+      });
+
+      return sums;
+    },
     handleSeller(){
       if(this.queryParams.companyId != null) {
         getUserList(this.queryParams.companyId).then(res=>{
@@ -620,6 +691,7 @@ export default {
       qwWatchLogAllStatisticsList(this.queryParams).then(response => {
         this.courseWatchLogList = response.rows;
         this.total = response.total;
+        console.log('数据列表:', this.courseWatchLogList);
       }).finally(()=>{
         this.loading = false;
       })
@@ -750,3 +822,14 @@ export default {
   }
 };
 </script>
+
+<style scoped>
+::v-deep .el-table__footer td {
+  font-size: 12px;
+  color: #606266;
+}
+
+::v-deep .el-table__footer td .cell {
+  font-weight: 500;
+}
+</style>