Rorschach 4 years ago
parent
commit
3c5a457766

+ 1 - 1
index.html

@@ -4,7 +4,7 @@
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <meta http-equiv="X-UA-Compatible" content="ie=edge">
-  <title>资源管理平台</title>
+  <title>数据统计平台</title>
 </head>
 <body>
   <div id="app"></div>

+ 2 - 1
src/api/skill.js

@@ -51,10 +51,11 @@ service.interceptors.response.use(
 )
 
 
-export function getSkillList () {
+export function getSkillList (params) {
   return service({
     url: '/skillInfo',
     method: 'get',
+    code:params
   })
 }
 export function getSkillData (params) {

+ 2 - 2
src/pages/layout/Layout.vue

@@ -27,8 +27,8 @@ export default {
     height: 100%;
     display: flex;
     .right-con {
-      width: calc(100% - 150px);
-      margin-left: 150px;
+      width: calc(100% - 120px);
+      margin-left: 120px;
       display: flex;
       flex-direction: column;
     }

+ 2 - 2
src/pages/layout/leftnav/LeftNav.vue

@@ -17,7 +17,7 @@
           <span slot="title">渠道课程管理</span>
       </el-menu-item> -->
       <el-menu-item index="/order/index" route="/order/index">
-          <span slot="title">资源API</span>
+          <span slot="title">联运项目</span>
       </el-menu-item>
       <el-menu-item index="/skill/index" route="/skill/index">
         <span slot="title">智能语音</span>
@@ -30,7 +30,7 @@
 </template>
 <style lang="less">
   .left-nav {
-    width: 150px;
+    width: 120px;
     height: 100%;
     position: fixed;
     background-color: #324157;

+ 5 - 4
src/pages/order/Order.vue

@@ -8,6 +8,7 @@
             <el-select
               v-model="orderParams.channelCode"
               @change="channelChange"
+              style="width:160px"
               placeholder="请选择渠道"
             >
               <el-option
@@ -20,7 +21,7 @@
           </div>
           <div class="pruductForm" v-if="orderParams.channelCode">
             产品包选择:
-            <el-select v-model="orderParams.packageId" placeholder="请选择产品包">
+            <el-select style="width:160px" v-model="orderParams.packageId" placeholder="请选择产品包">
               <el-option
                 v-for="item in productList"
                 :key="item.id"
@@ -31,8 +32,8 @@
           </div>
           <div class="dateForm">
             查询日期:
-            <el-date-picker v-model="orderParams.startDate" type="date" placeholder="起"></el-date-picker>
-            <el-date-picker v-model="orderParams.endDate" type="date" placeholder="止"></el-date-picker>
+            <el-date-picker style="width:140px" v-model="orderParams.startDate" type="date" placeholder="起"></el-date-picker>
+            <el-date-picker style="width:140px" v-model="orderParams.endDate" type="date" placeholder="止"></el-date-picker>
           </div>
         </div>
 
@@ -297,7 +298,7 @@ export default {
   }
 };
 </script>
-<style lang="less">
+<style lang="less" scoped>
 .el-pagination {
   text-align: center;
   margin-top: 20px;

+ 141 - 41
src/pages/skill/Skill.vue

@@ -1,11 +1,31 @@
 <template>
-  <div class="course">
-    <el-card class="box-card">
-      <div slot="header" class="clearfix topForm">
-        <div class="leftForm">
-          <div class="channelForm">
-            技能选择:
-            <el-select v-model="orderParams.skillId" placeholder="请选择技能">
+  <div >
+    <el-card  >
+      <el-form :model="skillParams" ref="skillParams"  class="clearfix topForm">
+        <div class="leftForm-skill">
+          <el-form-item  style="display:flex;" prop="channel" name="channel" :rules="[{ required: true, message: '请选择渠道', trigger: 'blur' }]" label="渠道选择">
+            <el-select
+              v-model="skillParams.channel"
+              @change="channelChange"
+              style="width:160px"
+              placeholder="请选择渠道"
+            >
+              <el-option
+                v-for="item in skillChanneList"
+                :key="item.code"
+                :label="item.title"
+                :value="item.code"
+                
+
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item class="pruductForm-skill" prop="skillId"  label="技能选择" :rules="[{ required: true, message: '请选择技能', trigger: 'blur' }]">
+            <el-select
+              v-model="skillParams.skillId"
+              placeholder="请选择技能"
+              style="width:160px"
+            >
               <el-option
                 v-for="item in skillList"
                 :key="item.skillId"
@@ -13,17 +33,17 @@
                 :value="item.skillId"
               ></el-option>
             </el-select>
-          </div>
+          </el-form-item>
 
-          <div class="dateForm">
-            查询日期:
-            <el-date-picker v-model="orderParams.startDate" type="date" placeholder="起"></el-date-picker>
-            <el-date-picker v-model="orderParams.endDate" type="date" placeholder="止"></el-date-picker>
-          </div>
+          <el-form-item class="dateForm-skill" name="data" label="查询日期" style="display:flex">
+            <el-date-picker style="width:140px" v-model="skillParams.startDate" type="date" placeholder="起"></el-date-picker>
+            <el-date-picker style="width:140px" v-model="skillParams.endDate" type="date" placeholder="止"></el-date-picker>
+          </el-form-item>
         </div>
-
-        <el-button type="primary" style="float: right;" @click="search">搜索</el-button>
-      </div>
+        <el-form-item>
+        <el-button type="primary"  @click="submitForm('skillParams')">搜索</el-button>
+        </el-form-item>
+      </el-form>
       <el-table :data="skillData" border style="width: 100%" :height="tableHeight">
         <el-table-column
           label="日期"
@@ -67,15 +87,15 @@
             prop="vipProportion"
             min-width="140px"
           ></el-table-column>
-          <el-table-column
+          <!-- <el-table-column
             label="VV"
             prop="vv"
             align="right"
             header-align="center"
             min-width="100px"
-          ></el-table-column>
+          ></el-table-column>-->
           <el-table-column
-            label="总播放量 | -TP"
+            label="VV"
             align="right"
             header-align="center"
             :render-header="renderheader"
@@ -83,7 +103,7 @@
             min-width="140px"
           ></el-table-column>
           <el-table-column
-            label="人均播放 | =TP/UV"
+            label="人均播放 | =VV/UV"
             align="right"
             header-align="center"
             :render-header="renderheader"
@@ -94,15 +114,68 @@
 
         <el-table-column label="拉新,付费与转换率" header-align="center">
           <el-table-column
+            label="连续包月 | -Qm1"
+            align="right"
+            header-align="center"
+            :render-header="renderheader"
+            prop="consecutiveMonthly"
+            min-width="100px"
+            :formatter="columnZero"
+          ></el-table-column>
+          <el-table-column
+            label="月包 | -Qm2"
+            align="right"
+            header-align="center"
+            :render-header="renderheader"
+            prop="monthlyPayment"
+            min-width="90px"
+            :formatter="columnZero"
+          ></el-table-column>
+          <el-table-column
             label="年包 | -Qy"
             align="right"
             header-align="center"
             :render-header="renderheader"
             prop="totalPayment"
+            min-width="130px"
+          ></el-table-column>
+          <el-table-column
+            label="付费订单数量| Q=Qm1+Qm2+Qy"
+            align="right"
+            header-align="center"
+            :render-header="renderheader"
+            prop="totalPayment"
             min-width="160px"
           ></el-table-column>
           <el-table-column
-            label="R | =Qy/UV2"
+            label="r1 | =Qm1/Q"
+            align="right"
+            header-align="center"
+            :render-header="renderheader"
+            prop="consecutiveConversion"
+            min-width="130px"
+            :formatter="columnZeroPercent"
+          ></el-table-column>// 月包占比
+          <el-table-column
+            label="r2 | =Qm2/Q"
+            align="right"
+            header-align="center"
+            :render-header="renderheader"
+            prop="monthlyConversion"
+            min-width="130px"
+            :formatter="columnZeroPercent"
+          ></el-table-column>// 年包占比
+          <el-table-column
+            label="r3 | =Qy/Q"
+            align="right"
+            header-align="center"
+            :render-header="renderheader"
+            prop="yearlyConversion"
+            min-width="130px"
+            :formatter="columnZeroPercent"
+          ></el-table-column>
+          <el-table-column
+            label="R | =(Qm1+Qm2+Qy)/UV2"
             align="right"
             header-align="center"
             :render-header="renderheader"
@@ -129,12 +202,18 @@ export default {
     return {
       tableHeight: 500,
       dateValue: "",
-      orderParams: {
+      skillParams: {
         skillId: "",
         startDate: "",
-        endDate: ""
+        endDate: "",
+        channel: ""
+      },
+      channelList: "",
+      skillChanneList: [{ title: "百度-小度在家", code: "BAIDU" }],
+      rules: {
+        channel: [{ required: true, trigger: "blur" }],
+        skillId: [{ required: true, trigger: "blur" }]
       }
-      // orderList:[]
     };
   },
   computed: {
@@ -142,34 +221,39 @@ export default {
       skillList: "skillList",
       orderList: "orderList",
       productList: "productList",
-      channeList: "channeList",
       skillData: "skillData"
     })
   },
   created() {
-    this.$store.dispatch("getSkillList");
     console.log(1111, this.skillList);
-    // this.$store.dispatch("getOrderList", this.orderParams);
-    this.orderParams.startDate = this.getYesterDay();
-    this.orderParams.endDate = this.getYesterDay();
+    // this.$store.dispatch("getOrderList", this.skillParams);
+    this.skillParams.startDate = this.getYesterDay();
+    this.skillParams.endDate = this.getYesterDay();
 
     this.tableHeight = document.documentElement.clientHeight * 0.75;
   },
   methods: {
     // 搜索
-    search() {
-      this.orderParams.startDate = this.orderParams.startDate
-        ? formatDate(this.orderParams.startDate, 2)
+    submitForm(formName) {
+      this.skillParams.startDate = this.skillParams.startDate
+        ? formatDate(this.skillParams.startDate, 2)
         : "";
-      this.orderParams.endDate = this.orderParams.endDate
-        ? formatDate(this.orderParams.endDate, 2)
+      this.skillParams.endDate = this.skillParams.endDate
+        ? formatDate(this.skillParams.endDate, 2)
         : "";
-      this.$store.dispatch("getSkillData", this.orderParams);
+      this.$refs[formName].validate(valid => {
+        if (valid) {
+          this.$store.dispatch("getSkillData", this.skillParams);
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
     },
     // 渠道下课程分页
     changePage(e) {
-      this.orderParams.pageNo = e;
-      this.$store.dispatch("getSkillData", this.orderParams);
+      this.skillParams.pageNo = e;
+      this.$store.dispatch("getSkillData", this.skillParams);
     },
 
     // 表头折行
@@ -183,27 +267,43 @@ export default {
     getYesterDay() {
       let yesterday = new Date().getTime() - 86400000;
       return formatDate(yesterday, 2);
+    },
+    channelChange(val) {
+      this.$store.dispatch("getSkillList", val);
+    },
+    columnZero() {
+      return "0";
+    },
+    columnZeroPercent(row, column, index) {
+      if (row.totalPayment && column.property === "yearlyConversion") {
+        return "100.00%";
+      } else {
+        return "0.00%";
+      }
+      // if(row.)
     }
   }
 };
 </script>
-<style lang="less">
-.pruductForm {
+<style lang="less" scoped>
+.pruductForm-skill {
   margin-left: 10px;
+  display: flex;
 }
 .topForm {
   display: flex;
   align-items: center;
   flex-direction: row;
+  flex-shrink: 0;
   justify-content: space-between;
 }
-.leftForm {
+.leftForm-skill {
   display: flex;
   align-items: center;
   flex-direction: row;
   justify-content: space-between;
 }
-.dateForm {
+.dateForm-skill {
   margin-left: 18px;
 }
 </style>

+ 2 - 2
src/store/modules/skill.js

@@ -15,9 +15,9 @@ const skill = {
   },
   actions: {
       // 获取技能信息
-    getSkillList({dispatch, commit }) {
+    getSkillList({dispatch, commit },code) {
       return new Promise((resolve, reject) => {
-        getSkillList().then(res => {
+        getSkillList(code).then(res => {
           console.log(res.data)
           if(res.code == 200) {
             resolve(res.data);