organMemberList.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  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 = res.data;
  143. // this.tableList = res.data.rows;
  144. // this.rules.total = res.data.total;
  145. // console.log(this.tableList)
  146. } catch (e) {
  147. console.log(e);
  148. }
  149. },
  150. sortChang(val) {
  151. const dates = {
  152. ascending: "ASC",
  153. descending: "DESC",
  154. };
  155. this.searchList = {};
  156. if (val.prop && val.order) {
  157. this.searchList[val.prop] = dates[val.order];
  158. }
  159. this.rules.page = 1;
  160. this.getList();
  161. },
  162. gotoDetail(row) {
  163. // 跳转到分部数据详情 row.organId
  164. this.$router.push({
  165. name: "organDateDetail",
  166. params: { organId: row.organId },
  167. });
  168. },
  169. changeOrgan(val) {
  170. this.organId = val;
  171. this.rules.page = 1;
  172. this.getList();
  173. },
  174. organDateExport() {
  175. let params = { ...this.searchList, organIds: this.organId };
  176. Export(
  177. this,
  178. {
  179. url: "/api-web/export/organStudentOverView",
  180. fileName: "分部团练宝数据.xls",
  181. method: "post",
  182. params: qs.stringify(params),
  183. },
  184. "您确定导出分部团练宝数据列表?"
  185. );
  186. },
  187. gotoAll() {
  188. this.$router.push({
  189. name: "organRankDetail",
  190. });
  191. },
  192. },
  193. };
  194. </script>
  195. <style lang="scss" scoped>
  196. /deep/.el-card__body {
  197. padding-top: 0 !important;
  198. }
  199. .titleCell {
  200. display: inline-block;
  201. }
  202. .tableWrap {
  203. margin-top: 20px;
  204. }
  205. .btnList {
  206. display: flex;
  207. flex-direction: row;
  208. justify-content: space-between;
  209. }
  210. </style>