organMemberList.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <template>
  2. <div>
  3. <el-card>
  4. <headers title="分部数据" @changeOrgan="changeOrgan" :special="true" />
  5. <div class="tableWrap">
  6. <el-table
  7. style="width: 100%"
  8. :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
  9. :data="tableList"
  10. @sort-change="sortChang"
  11. :default-sort="{
  12. prop: 'cloudStudyUseStudentDuty',
  13. order: 'descending',
  14. }"
  15. sortable="custom"
  16. >
  17. <el-table-column
  18. align="center"
  19. prop="organId"
  20. label="分部编号"
  21. ></el-table-column>
  22. <el-table-column
  23. align="center"
  24. prop="organName"
  25. label="分部名称"
  26. ></el-table-column>
  27. <el-table-column
  28. align="center"
  29. prop="totalStudentNum"
  30. label="分部学员总数"
  31. >
  32. <!-- <template slot="header" slot-scope="slot">
  33. <div class="titleCell">
  34. <span>学员总数</span>
  35. <el-tooltip placement="top" popper-class="mTooltip">
  36. <div slot="content">
  37. 乐团在读学员+有剩余VIP课或网管课学员去重之和
  38. </div>
  39. <i
  40. class="el-icon-question micon el-tooltip"
  41. style="
  42. font-size: 18px;
  43. color: #f56c6c;
  44. top: 2px;
  45. position: relative;
  46. "
  47. ></i>
  48. </el-tooltip>
  49. </div>
  50. </template> -->
  51. </el-table-column>
  52. <el-table-column align="center" prop="vipStudentNum" label="会员总数" >
  53. </el-table-column>
  54. <el-table-column
  55. align="center"
  56. prop="waitActivateVipStudentNum"
  57. label="待激活会员人数"
  58. ></el-table-column>
  59. <el-table-column
  60. align="center"
  61. prop="effectiveVipStudentNum"
  62. label="生效中会员人数"
  63. ></el-table-column>
  64. <el-table-column
  65. align="center"
  66. prop="activeStudentNum"
  67. label="活跃会员"
  68. >
  69. <template slot="header" slot-scope="slot">
  70. <div class="titleCell">
  71. <span>活跃人数</span>
  72. <el-tooltip placement="top" popper-class="mTooltip">
  73. <div slot="content">过去四周内有三周及以上每周训练时长超过60分钟为活跃学员</div>
  74. <i
  75. class="el-icon-question micon el-tooltip"
  76. style="
  77. font-size: 18px;
  78. color: #f56c6c;
  79. top: 2px;
  80. position: relative;
  81. "
  82. ></i>
  83. </el-tooltip>
  84. </div>
  85. </template>
  86. </el-table-column>
  87. </el-table>
  88. <!-- <pagination
  89. :autoScroll="false"
  90. :total.sync="rules.total"
  91. :page.sync="rules.page"
  92. :limit.sync="rules.limit"
  93. :page-sizes="rules.page_size"
  94. @pagination="getList"
  95. /> -->
  96. </div>
  97. </el-card>
  98. </div>
  99. </template>
  100. <script>
  101. import headers from "./modals/headers.vue";
  102. import pagination from "@/components/Pagination/index";
  103. import { getOrganMemberList } from "../api";
  104. import { Export } from "@/utils/downLoadFile";
  105. import qs from "qs";
  106. export default {
  107. components: {
  108. headers,
  109. pagination,
  110. },
  111. data() {
  112. return {
  113. tableList: [],
  114. organId: "",
  115. rules: {
  116. // 分页规则
  117. limit: 10, // 限制显示条数
  118. page: 1, // 当前页
  119. total: 0, // 总条数
  120. page_size: [10, 20, 40, 50], // 选择限制显示条数
  121. },
  122. searchList: {
  123. cloudStudyUseStudentDuty: "DESC",
  124. },
  125. tenantId:''
  126. };
  127. },
  128. mounted() {
  129. this.tenantId = this.$helpers.tenantId
  130. this.getList();
  131. },
  132. methods: {
  133. async getList() {
  134. try {
  135. const arr = [36,39,41,42,43,44,45,46,47,48,49,50,52,54,55,56]
  136. const res = await getOrganMemberList({
  137. page: 1,
  138. rows: 10,
  139. ...this.searchList,
  140. organIds: this.organId,
  141. });
  142. this.tableList = []
  143. res.data.forEach(ele => {
  144. if(arr.indexOf (ele.organId) == -1){
  145. this.tableList.push(ele)
  146. }
  147. });
  148. // this.tableList = res.data.rows;
  149. // this.rules.total = res.data.total;
  150. // console.log(this.tableList)
  151. } catch (e) {
  152. console.log(e);
  153. }
  154. },
  155. sortChang(val) {
  156. const dates = {
  157. ascending: "ASC",
  158. descending: "DESC",
  159. };
  160. this.searchList = {};
  161. if (val.prop && val.order) {
  162. this.searchList[val.prop] = dates[val.order];
  163. }
  164. this.rules.page = 1;
  165. this.getList();
  166. },
  167. gotoDetail(row) {
  168. // 跳转到分部数据详情 row.organId
  169. this.$router.push({
  170. name: "organDateDetail",
  171. params: { organId: row.organId },
  172. });
  173. },
  174. changeOrgan(val) {
  175. this.organId = val;
  176. this.rules.page = 1;
  177. this.getList();
  178. },
  179. organDateExport() {
  180. let params = { ...this.searchList, organIds: this.organId };
  181. Export(
  182. this,
  183. {
  184. url: "/api-web/export/organStudentOverView",
  185. fileName: "分部团练宝数据.xls",
  186. method: "post",
  187. params: qs.stringify(params),
  188. },
  189. "您确定导出分部团练宝数据列表?"
  190. );
  191. },
  192. gotoAll() {
  193. this.$router.push({
  194. name: "organRankDetail",
  195. });
  196. },
  197. },
  198. };
  199. </script>
  200. <style lang="scss" scoped>
  201. /deep/.el-card__body {
  202. padding-top: 0 !important;
  203. }
  204. .titleCell {
  205. display: inline-block;
  206. }
  207. .tableWrap {
  208. margin-top: 20px;
  209. }
  210. .btnList {
  211. display: flex;
  212. flex-direction: row;
  213. justify-content: space-between;
  214. }
  215. </style>