organMemberList.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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. <!-- <template slot="header" slot-scope="slot">
  54. <div class="titleCell">
  55. <span>目标人数</span>
  56. <el-tooltip placement="top" popper-class="mTooltip">
  57. <div slot="content">
  58. 进行中非会员乐团-已上乐团课小于等于4节学员-非本活动购买会员-弦乐声部学员
  59. </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="activeStudentNum"
  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">每周训练时长超过60分钟,每个月有三个周以上达标的为活跃学员</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>
  97. <pagination
  98. :autoScroll="false"
  99. :total.sync="rules.total"
  100. :page.sync="rules.page"
  101. :limit.sync="rules.limit"
  102. :page-sizes="rules.page_size"
  103. @pagination="getList"
  104. />
  105. </div>
  106. </el-card>
  107. </div>
  108. </template>
  109. <script>
  110. import headers from "./modals/headers.vue";
  111. import pagination from "@/components/Pagination/index";
  112. import { getOrganMemberList } from "../api";
  113. import { Export } from "@/utils/downLoadFile";
  114. import qs from "qs";
  115. export default {
  116. components: {
  117. headers,
  118. pagination,
  119. },
  120. data() {
  121. return {
  122. tableList: [],
  123. organId: "",
  124. rules: {
  125. // 分页规则
  126. limit: 10, // 限制显示条数
  127. page: 1, // 当前页
  128. total: 0, // 总条数
  129. page_size: [10, 20, 40, 50], // 选择限制显示条数
  130. },
  131. searchList: {
  132. cloudStudyUseStudentDuty: "DESC",
  133. },
  134. tenantId:''
  135. };
  136. },
  137. mounted() {
  138. this.tenantId = this.$helpers.tenantId
  139. this.getList();
  140. },
  141. methods: {
  142. async getList() {
  143. try {
  144. // const arr = [36,39,41,42,43,44,45,46,47,48,49,50,52,54,55,56]
  145. const res = await getOrganMemberList({
  146. page: 1,
  147. rows: 10,
  148. ...this.searchList,
  149. organIds: this.organId,
  150. });
  151. this.tableList = res.data.rows;
  152. this.rules.total = res.data.total;
  153. // console.log(this.tableList)
  154. } catch (e) {
  155. console.log(e);
  156. }
  157. },
  158. sortChang(val) {
  159. const dates = {
  160. ascending: "ASC",
  161. descending: "DESC",
  162. };
  163. this.searchList = {};
  164. if (val.prop && val.order) {
  165. this.searchList[val.prop] = dates[val.order];
  166. }
  167. this.rules.page = 1;
  168. this.getList();
  169. },
  170. gotoDetail(row) {
  171. // 跳转到分部数据详情 row.organId
  172. this.$router.push({
  173. name: "organDateDetail",
  174. params: { organId: row.organId },
  175. });
  176. },
  177. changeOrgan(val) {
  178. this.organId = val;
  179. this.rules.page = 1;
  180. this.getList();
  181. },
  182. organDateExport() {
  183. let params = { ...this.searchList, organIds: this.organId };
  184. Export(
  185. this,
  186. {
  187. url: "/api-web/export/organStudentOverView",
  188. fileName: "分部团练宝数据.xls",
  189. method: "post",
  190. params: qs.stringify(params),
  191. },
  192. "您确定导出分部团练宝数据列表?"
  193. );
  194. },
  195. gotoAll() {
  196. this.$router.push({
  197. name: "organRankDetail",
  198. });
  199. },
  200. },
  201. };
  202. </script>
  203. <style lang="scss" scoped>
  204. /deep/.el-card__body {
  205. padding-top: 0 !important;
  206. }
  207. .titleCell {
  208. display: inline-block;
  209. }
  210. .tableWrap {
  211. margin-top: 20px;
  212. }
  213. .btnList {
  214. display: flex;
  215. flex-direction: row;
  216. justify-content: space-between;
  217. }
  218. </style>