| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493 | <template>  <div class="m-container">    <el-page-header      @back="goback"      style="padding-bottom: 30px"      content="分部云练习数据"    >    </el-page-header>    <save-form      :inline="true"      :model="searchForm"      @submit="search"      ref="saveForm"    >      <el-form-item prop="organId">        <el-select          class="multiple"          v-model.trim="searchForm.organId"          clearable          filterable          placeholder="请选择分部"          @change="search"        >          <el-option            v-for="(item, index) in specialList"            :key="index"            :label="item.name"            :value="item.id"          ></el-option>        </el-select>      </el-form-item>    </save-form>    <p style="margin-bottom: 20px; font-size: 14px">      共{{ tableList.length }}个分部    </p>    <div class="tableWrap">      <el-table        style="width: 100%"        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"        :data="tableList"        @sort-change="sortChang"        :default-sort="{          prop: 'cloudStudyUseStudentDuty',          order: 'descending'        }"        sortable="custom"      >        <el-table-column          align="center"          prop="index"          label="排名"        ></el-table-column>        <el-table-column          align="center"          prop="organName"          label="分部"        ></el-table-column>        <el-table-column align="center" prop="totalStudentNum" label="学员总数">          <template slot="header" slot-scope="slot">            <div class="titleCell">              <span>学员总数</span>              <el-tooltip placement="top" popper-class="mTooltip">                <div slot="content">                  乐团在读学员+有剩余VIP课或网管课学员去重之和                </div>                <i                  class="el-icon-question micon el-tooltip"                  style="                    font-size: 18px;                    color: #f56c6c;                    top: 2px;                    position: relative;                  "                ></i>              </el-tooltip>            </div>          </template>        </el-table-column>        <el-table-column          align="center"          prop="targetNum"          label="目标人数"          v-if="tenantId == 1"        >          <template slot="header" slot-scope="slot">            <div class="titleCell">              <span>目标人数</span>              <el-tooltip placement="top" popper-class="mTooltip">                <div slot="content">                  进行中非会员乐团-已上乐团课小于等于4节学员-非本活动购买会员-弦乐声部学员                </div>                <i                  class="el-icon-question micon el-tooltip"                  style="                    font-size: 18px;                    color: #f56c6c;                    top: 2px;                    position: relative;                  "                ></i>              </el-tooltip>            </div>          </template>        </el-table-column>        <el-table-column          align="center"          prop="cloudStudyLivelyStudentNum"          label="活跃人数"        >          <template slot="header" slot-scope="slot">            <div class="titleCell">              <span>活跃人数</span>              <el-tooltip placement="top" popper-class="mTooltip">                <div slot="content">近15天内使用达到5天及以上的用户数</div>                <i                  class="el-icon-question micon el-tooltip"                  style="                    font-size: 18px;                    color: #f56c6c;                    top: 2px;                    position: relative;                  "                ></i>              </el-tooltip>            </div>          </template>        </el-table-column>        <el-table-column          align="center"          prop="cloudStudyUseStudentNum"          label="使用人数"        >          <template slot="header" slot-scope="slot">            <div class="titleCell">              <span>使用人数</span>              <el-tooltip placement="top" popper-class="mTooltip">                <div slot="content">截止目前使用云练习的总人数</div>                <i                  class="el-icon-question micon el-tooltip"                  style="                    font-size: 18px;                    color: #f56c6c;                    top: 2px;                    position: relative;                  "                ></i>              </el-tooltip>            </div>          </template>        </el-table-column>        <el-table-column align="center" prop="newStudentNum" label="新用户人数">          <template slot="header">            <div class="titleCell">              <span>新用户人数</span>              <el-tooltip placement="top" popper-class="mTooltip">                <div slot="content">乐团在读学员已上课程≤4节</div>                <i                  class="el-icon-question micon el-tooltip"                  style="                    font-size: 18px;                    color: #f56c6c;                    top: 2px;                    position: relative;                  "                ></i>              </el-tooltip>            </div>          </template>        </el-table-column>        <el-table-column          sortable="custom"          align="center"          prop="newStudentDuty"          label="新用户占比"        >          <template slot-scope="scope">            {{ scope.row.newStudentDuty }}%          </template>        </el-table-column>        <el-table-column          align="center"          prop="newCloudStudyStudentNum"          label="新增使用人数"          width="130px"        >          <template slot="header" slot-scope="slot">            <div class="titleCell">              <span>新增使用人数</span>              <el-tooltip placement="top" popper-class="mTooltip">                <div slot="content">当日第一次使用云练习的人数</div>                <i                  class="el-icon-question micon el-tooltip"                  style="                    font-size: 18px;                    color: #f56c6c;                    top: 2px;                    position: relative;                  "                ></i>              </el-tooltip>            </div>          </template>        </el-table-column>        <el-table-column          align="center"          prop="cloudStudyUseStudentDuty"          label="使用比例"          sortable="custom"          width="140px"        >          <template slot="header" slot-scope="slot">            <div class="titleCell">              <span>使用比例</span>              <el-tooltip placement="top" popper-class="mTooltip">                <div slot="content">使用人数 / 学员总数</div>                <i                  class="el-icon-question micon el-tooltip"                  style="                    font-size: 18px;                    color: #f56c6c;                    top: 2px;                    position: relative;                  "                ></i>              </el-tooltip>            </div>          </template>          <template slot-scope="scope">            <div>{{ scope.row.cloudStudyUseStudentDuty }}%</div>          </template>        </el-table-column>        <el-table-column align="center" prop="vipStudentNum" label="付费会员数">          <template slot="header" slot-scope="slot">            <div class="titleCell">              <span>付费会员数</span>              <el-tooltip placement="top" popper-class="mTooltip">                <div slot="content">该分部生效中、待生效付费会员总数</div>                <i                  class="el-icon-question micon el-tooltip"                  style="                    font-size: 18px;                    color: #f56c6c;                    top: 2px;                    position: relative;                  "                ></i>              </el-tooltip>            </div>          </template>        </el-table-column>        <el-table-column          sortable="custom"          align="center"          prop="vipStudentDuty"          label="付费会员占比"          width="150px"        >          <template slot="header" slot-scope="slot">            <div class="titleCell">              <span>付费会员占比</span>              <el-tooltip placement="top" popper-class="mTooltip">                <div slot="content">付费会员数 / 学员总数</div>                <i                  class="el-icon-question micon el-tooltip"                  style="                    font-size: 18px;                    color: #f56c6c;                    top: 2px;                    position: relative;                  "                ></i>              </el-tooltip>            </div>          </template>          <template slot-scope="scope">            <div>{{ scope.row.vipStudentDuty }}%</div>          </template>        </el-table-column>        <!-- <el-table-column               sortable="custom"            align="center"            prop="eVipStudentNum"            label="试用会员"          >            <template slot="header" slot-scope="slot">              <div class="titleCell">                <span>试用会员</span>                <el-tooltip placement="top" popper-class="mTooltip">                  <div slot="content">                    有生效中或待生效的付费会员,不统计在内                  </div>                  <i                    class="el-icon-question micon el-tooltip"                    style="                      font-size: 18px;                      color: #f56c6c;                      top: 2px;                      position: relative;                    "                  ></i>                </el-tooltip>              </div>            </template>          </el-table-column> -->        <el-table-column align="center" prop="studentId" label="操作">          <template slot-scope="scope">            <div>              <auth auths="/organDateDetail">                <el-button type="text" @click="gotoDetail(scope.row)"                  >详情</el-button                >              </auth>            </div>          </template>        </el-table-column>      </el-table>      <!-- <pagination          :autoScroll="false"          :total.sync="rules.total"          :page.sync="rules.page"          :limit.sync="rules.limit"          :page-sizes="rules.page_size"          @pagination="getList"        /> -->    </div>  </div></template><script>import headers from "./modals/headers.vue";import pagination from "@/components/Pagination/index";import { Export } from "@/utils/downLoadFile";import dayjs from "dayjs";import qs from "qs";import { organStudentOverView } from "../api";export default {  components: {    headers,    pagination  },  data() {    return {      tableList: [],      searchList: {        cloudStudyUseStudentDuty: "DESC"      },      searchForm: {},      rules: {        // 分页规则        limit: 10, // 限制显示条数        page: 1, // 当前页        total: 0, // 总条数        page_size: [10, 20, 40, 50] // 选择限制显示条数      },      date: "",      specialList: [],      tenantId: ""    };  },  async mounted() {    this.date = dayjs(new Date())      .subtract(1, "day")      .format("YYYY-MM-DD");    await this.$store.dispatch("setBranchs");    const arr = [      36,      39,      41,      42,      43,      44,      45,      46,      47,      48,      49,      50,      52,      54,      55,      56    ];    this.specialList = this.selects.branchs.filter(item => {      return arr.indexOf(item.id) == -1;    });    if (this.$route.params?.organId) {      this.searchForm.organId = this.$route.params.organId;    }    this.getList();    this.tenantId = this.$helpers.tenantId;  },  methods: {    async getList() {      try {        const res = await organStudentOverView({          ...this.searchList,          rows: 999,          page: 1,          organIds: this.searchForm.organId        });        this.tableList = res.data.rows;        this.rules.total = res.data.total;      } catch (e) {        console.log(e);      }    },    search() {      this.getList();    },    bigin() {      let self = this;      return {        firstDayOfWeek: 1,        disabledDate(time) {          if (self.endDate) {            let endTime = self.$helpers.dayjs(self.endDate).valueOf();            return time.getTime() > endTime;          } else {            return time.getTime() >= Date.now() - 24 * 60 * 60 * 1000;          }        }      };    },    changeValue(val) {      this.date = val;      this.rules.page = 1;      this.getList();    },    sortChang(val) {      const dates = {        ascending: "ASC",        descending: "DESC"      };      this.searchList = {};      if (val.prop && val.order) {        this.searchList[val.prop] = dates[val.order];      }      this.rules.page = 1;      this.getList();    },    rankingExport() {      let params = { ...this.searchForm, date: this.date };      Export(        this,        {          url: "/api-web/export/cloudStudyStudentOverView",          fileName: "分部云练习数据排行.xls",          method: "post",          params: qs.stringify(params)        },        "您确定导出分部云练习数据排行?"      );    },    goback() {      this.$store.dispatch("delVisitedViews", this.$route);      this.$router.push({ path: "/workbench?tabrouter=cloudDate" });    },    gotoDetail(row) {      // 跳转到分部数据详情 row.organId      this.$router.push({        name: "organDateDetail",        params: { organId: row.organId }      });    }  }};</script><style lang="scss" scoped>::v-deep .el-card__body {  padding-top: 0 !important;}.titleCell {  display: inline-block;}.chioseBox {  display: flex;  flex-direction: row;  align-items: center;  justify-content: flex-start;  margin-bottom: 30px;  .lookOrgan {    margin-left: 10px;  }}.wrap {  position: relative;  display: flex;  flex-direction: row;  align-items: center;  justify-content: space-between;  margin-bottom: 20px;}</style>
 |