organDate.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. <template>
  2. <div>
  3. <el-card>
  4. <headers title="分部数据" @changeOrgan="changeOrgan" :special="true" />
  5. <el-button
  6. type="primary"
  7. v-permission="'export/organStudentOverView'"
  8. @click="organDateExport"
  9. size="mini"
  10. >导出</el-button
  11. >
  12. <div class="tableWrap">
  13. <el-table
  14. style="width: 100%"
  15. :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
  16. :data="tableList"
  17. @sort-change="sortChang"
  18. sortable="custom"
  19. >
  20. <el-table-column
  21. align="center"
  22. prop="organName"
  23. label="分部"
  24. ></el-table-column>
  25. <el-table-column
  26. align="center"
  27. prop="totalStudentNum"
  28. label="学员总数"
  29. >
  30. <template slot="header" slot-scope="slot">
  31. <div class="titleCell">
  32. <span>学员总数</span>
  33. <el-tooltip placement="top" popper-class="mTooltip">
  34. <div slot="content">
  35. 乐团在读学员+有剩余VIP课或网管课学员去重之和
  36. </div>
  37. <i
  38. class="el-icon-question micon el-tooltip"
  39. style="
  40. font-size: 18px;
  41. color: #f56c6c;
  42. top: 2px;
  43. position: relative;
  44. "
  45. ></i>
  46. </el-tooltip>
  47. </div>
  48. </template>
  49. </el-table-column>
  50. <el-table-column
  51. align="center"
  52. prop="cloudStudyLivelyStudentNum"
  53. label="活跃人数"
  54. >
  55. <template slot="header" slot-scope="slot">
  56. <div class="titleCell">
  57. <span>活跃人数</span>
  58. <el-tooltip placement="top" popper-class="mTooltip">
  59. <div slot="content">近15天内使用达到5天及以上的用户数</div>
  60. <i
  61. class="el-icon-question micon el-tooltip"
  62. style="
  63. font-size: 18px;
  64. color: #f56c6c;
  65. top: 2px;
  66. position: relative;
  67. "
  68. ></i>
  69. </el-tooltip>
  70. </div>
  71. </template>
  72. </el-table-column>
  73. <el-table-column
  74. align="center"
  75. prop="cloudStudyUseStudentNum"
  76. label="使用人数"
  77. >
  78. <template slot="header" slot-scope="slot">
  79. <div class="titleCell">
  80. <span>使用人数</span>
  81. <el-tooltip placement="top" popper-class="mTooltip">
  82. <div slot="content">截止目前使用云教练的总人数</div>
  83. <i
  84. class="el-icon-question micon el-tooltip"
  85. style="
  86. font-size: 18px;
  87. color: #f56c6c;
  88. top: 2px;
  89. position: relative;
  90. "
  91. ></i>
  92. </el-tooltip>
  93. </div>
  94. </template>
  95. </el-table-column>
  96. <el-table-column
  97. align="center"
  98. prop="newCloudStudyStudentNum"
  99. label="新增使用人数"
  100. width="130px"
  101. >
  102. <template slot="header" slot-scope="slot">
  103. <div class="titleCell">
  104. <span>新增使用人数</span>
  105. <el-tooltip placement="top" popper-class="mTooltip">
  106. <div slot="content">当日第一次使用云教练的人数</div>
  107. <i
  108. class="el-icon-question micon el-tooltip"
  109. style="
  110. font-size: 18px;
  111. color: #f56c6c;
  112. top: 2px;
  113. position: relative;
  114. "
  115. ></i>
  116. </el-tooltip>
  117. </div>
  118. </template>
  119. </el-table-column>
  120. <el-table-column
  121. align="center"
  122. prop="cloudStudyUseStudentDuty"
  123. label="使用比例"
  124. sortable="custom"
  125. width="140px"
  126. >
  127. <template slot="header" slot-scope="slot">
  128. <div class="titleCell">
  129. <span>使用比例</span>
  130. <el-tooltip placement="top" popper-class="mTooltip">
  131. <div slot="content">使用人数 / 学员总数</div>
  132. <i
  133. class="el-icon-question micon el-tooltip"
  134. style="
  135. font-size: 18px;
  136. color: #f56c6c;
  137. top: 2px;
  138. position: relative;
  139. "
  140. ></i>
  141. </el-tooltip>
  142. </div>
  143. </template>
  144. <template slot-scope="scope">
  145. <div>{{ scope.row.cloudStudyUseStudentDuty }}%</div>
  146. </template>
  147. </el-table-column>
  148. <el-table-column
  149. align="center"
  150. prop="vipStudentNum"
  151. label="付费会员数"
  152. >
  153. <template slot="header" slot-scope="slot">
  154. <div class="titleCell">
  155. <span>付费会员数</span>
  156. <el-tooltip placement="top" popper-class="mTooltip">
  157. <div slot="content">该分部生效中、待生效付费会员总数</div>
  158. <i
  159. class="el-icon-question micon el-tooltip"
  160. style="
  161. font-size: 18px;
  162. color: #f56c6c;
  163. top: 2px;
  164. position: relative;
  165. "
  166. ></i>
  167. </el-tooltip>
  168. </div>
  169. </template>
  170. </el-table-column>
  171. <el-table-column
  172. sortable="custom"
  173. align="center"
  174. prop="vipStudentDuty"
  175. label="付费会员占比"
  176. width="150px"
  177. >
  178. <template slot="header" slot-scope="slot">
  179. <div class="titleCell">
  180. <span>付费会员占比</span>
  181. <el-tooltip placement="top" popper-class="mTooltip">
  182. <div slot="content">付费会员数 / 学员总数</div>
  183. <i
  184. class="el-icon-question micon el-tooltip"
  185. style="
  186. font-size: 18px;
  187. color: #f56c6c;
  188. top: 2px;
  189. position: relative;
  190. "
  191. ></i>
  192. </el-tooltip>
  193. </div>
  194. </template>
  195. <template slot-scope="scope">
  196. <div>{{ scope.row.vipStudentDuty }}%</div>
  197. </template>
  198. </el-table-column>
  199. <!-- <el-table-column
  200. sortable="custom"
  201. align="center"
  202. prop="eVipStudentNum"
  203. label="试用会员"
  204. >
  205. <template slot="header" slot-scope="slot">
  206. <div class="titleCell">
  207. <span>试用会员</span>
  208. <el-tooltip placement="top" popper-class="mTooltip">
  209. <div slot="content">
  210. 有生效中或待生效的付费会员,不统计在内
  211. </div>
  212. <i
  213. class="el-icon-question micon el-tooltip"
  214. style="
  215. font-size: 18px;
  216. color: #f56c6c;
  217. top: 2px;
  218. position: relative;
  219. "
  220. ></i>
  221. </el-tooltip>
  222. </div>
  223. </template>
  224. </el-table-column> -->
  225. <el-table-column align="center" prop="studentId" label="操作">
  226. <template slot-scope="scope">
  227. <div>
  228. <auth auths="/organDateDetail">
  229. <el-button type="text" @click="gotoDetail(scope.row)"
  230. >详情</el-button
  231. >
  232. </auth>
  233. </div>
  234. </template>
  235. </el-table-column>
  236. </el-table>
  237. <pagination
  238. :autoScroll="false"
  239. :total.sync="rules.total"
  240. :page.sync="rules.page"
  241. :limit.sync="rules.limit"
  242. :page-sizes="rules.page_size"
  243. @pagination="getList"
  244. />
  245. </div>
  246. </el-card>
  247. </div>
  248. </template>
  249. <script>
  250. import headers from "./modals/headers.vue";
  251. import pagination from "@/components/Pagination/index";
  252. import { organStudentOverView } from "../api";
  253. import { Export } from "@/utils/downLoadFile";
  254. import qs from "qs";
  255. export default {
  256. components: {
  257. headers,
  258. pagination,
  259. },
  260. data() {
  261. return {
  262. tableList: [],
  263. organId: "",
  264. rules: {
  265. // 分页规则
  266. limit: 10, // 限制显示条数
  267. page: 1, // 当前页
  268. total: 0, // 总条数
  269. page_size: [10, 20, 40, 50], // 选择限制显示条数
  270. },
  271. searchList: {},
  272. };
  273. },
  274. mounted() {
  275. this.getList();
  276. },
  277. methods: {
  278. async getList() {
  279. try {
  280. // const arr = [36,39,41,42,43,44,45,46,47,48,49,50,52,54,55,56]
  281. const res = await organStudentOverView({
  282. page: this.rules.page,
  283. rows: this.rules.limit,
  284. ...this.searchList,
  285. organIds: this.organId,
  286. });
  287. this.tableList = res.data.rows;
  288. this.rules.total = res.data.total;
  289. // console.log(this.tableList)
  290. } catch (e) {
  291. console.log(e);
  292. }
  293. },
  294. sortChang(val) {
  295. const dates = {
  296. ascending: "ASC",
  297. descending: "DESC",
  298. };
  299. this.searchList = {};
  300. if (val.prop && val.order) {
  301. this.searchList[val.prop] = dates[val.order];
  302. }
  303. this.rules.page = 1;
  304. this.getList();
  305. },
  306. gotoDetail(row) {
  307. // 跳转到分部数据详情 row.organId
  308. this.$router.push({
  309. name: "organDateDetail",
  310. params: { organId: row.organId },
  311. });
  312. },
  313. changeOrgan(val) {
  314. this.organId = val;
  315. this.rules.page = 1;
  316. this.getList();
  317. },
  318. organDateExport() {
  319. let params = { ...this.searchList, organIds: this.organId };
  320. Export(
  321. this,
  322. {
  323. url: "/api-web/export/organStudentOverView",
  324. fileName: "分部云教练数据.xls",
  325. method: "post",
  326. params: qs.stringify(params),
  327. },
  328. "您确定导出分部云教练数据列表?"
  329. );
  330. },
  331. },
  332. };
  333. </script>
  334. <style lang="scss" scoped>
  335. /deep/.el-card__body {
  336. padding-top: 0 !important;
  337. }
  338. .titleCell {
  339. display: inline-block;
  340. }
  341. .tableWrap {
  342. margin-top: 20px;
  343. }
  344. </style>