setMemberList.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. <template>
  2. <div>
  3. <save-form
  4. :inline="true"
  5. class="searchForm"
  6. @submit="onSearch"
  7. @reset="onReSet"
  8. ref="saveForm"
  9. save-key="studentLit-memberChange"
  10. :model.sync="searchForm"
  11. >
  12. <el-form-item prop="memberRankSettingId">
  13. <el-cascader
  14. v-model.trim="searchForm.memberRankSettingId"
  15. :options="memberRankList"
  16. :props="{ value: 'id', label: 'name' }"
  17. :show-all-levels="false"
  18. collapse-tags
  19. clearable
  20. placeholder="请选择学练宝版本"
  21. ></el-cascader>
  22. </el-form-item>
  23. <el-form-item prop="buyType">
  24. <el-select
  25. class="multiple"
  26. v-model.trim="searchForm.buyType"
  27. clearable
  28. placeholder="请选择变更方式"
  29. >
  30. <el-option label="自行购买" value="1"></el-option>
  31. <el-option label="后台添加" value="2"></el-option>
  32. <el-option label="后台扣减" value="3"></el-option>
  33. </el-select>
  34. </el-form-item>
  35. <el-form-item prop="operatorName">
  36. <el-input
  37. clearable
  38. placeholder="请输入操作人"
  39. @keydown.enter.native="
  40. e => {
  41. e.target.blur();
  42. $refs.saveForm.save();
  43. onSearch();
  44. }
  45. "
  46. v-model.trim="searchForm.operatorName"
  47. ></el-input>
  48. </el-form-item>
  49. <el-form-item prop="timer">
  50. <el-date-picker
  51. :clearable="false"
  52. v-model.trim="searchForm.timer"
  53. style="width: 420px"
  54. type="daterange"
  55. value-format="yyyy-MM-dd"
  56. range-separator="至"
  57. start-placeholder="开始日期"
  58. end-placeholder="结束日期"
  59. :picker-options="{
  60. firstDayOfWeek: 1
  61. }"
  62. >
  63. </el-date-picker>
  64. </el-form-item>
  65. <el-form-item>
  66. <el-button native-type="submit" type="primary">搜索</el-button>
  67. <el-button native-type="reset" type="danger">重置</el-button>
  68. </el-form-item>
  69. </save-form>
  70. <el-button
  71. @click="operationTimer('add')"
  72. type="primary"
  73. style="margin-bottom: 20px"
  74. v-if="$helpers.permission('studentManage/updateStudentMember')"
  75. >
  76. 添加时长
  77. </el-button>
  78. <el-button
  79. @click="operationTimer('plus')"
  80. type="default"
  81. style="margin-bottom: 20px"
  82. v-if="$helpers.permission('studentManage/updateStudentMember')"
  83. >
  84. 扣减时长
  85. </el-button>
  86. <div class="tableWrap">
  87. <el-table
  88. style="width: 100%"
  89. :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
  90. :data="tableList"
  91. >
  92. <el-table-column
  93. align="center"
  94. prop="buyType"
  95. label="变更方式"
  96. >
  97. <template slot-scope="scope">
  98. {{ scope.row.buyType | filterBuyType }}
  99. </template>
  100. </el-table-column>
  101. <el-table-column
  102. align="center"
  103. prop="memberRankSettingName"
  104. label="学练宝版本"
  105. ></el-table-column>
  106. <el-table-column
  107. align="center"
  108. prop="type"
  109. label="周期"
  110. >
  111. <template slot-scope="scope">
  112. {{ scope.row.type | memberEnumType }}
  113. </template>
  114. </el-table-column>
  115. <el-table-column
  116. align="center"
  117. prop="time"
  118. label="数量"
  119. ></el-table-column>
  120. <el-table-column
  121. align="center"
  122. prop="operatorName"
  123. label="操作人"
  124. ></el-table-column>
  125. <el-table-column
  126. align="center"
  127. prop="createTime"
  128. label="添加时间"
  129. ></el-table-column>
  130. <el-table-column align="center" prop="activeDate" label="添加原因">
  131. <template slot-scope="scope">
  132. <Tooltip
  133. :content="
  134. scope.row.memo
  135. ? scope.row.memo
  136. : '--'
  137. "
  138. />
  139. </template>
  140. </el-table-column>
  141. </el-table>
  142. <pagination
  143. sync
  144. save-key="studentLit-memberChange"
  145. :total.sync="pageInfo.total"
  146. :page.sync="pageInfo.page"
  147. :limit.sync="pageInfo.limit"
  148. :page-sizes="pageInfo.page_size"
  149. @pagination="getList"
  150. />
  151. </div>
  152. <el-dialog
  153. :title="`${operationType === 'add' ? '添加': '扣减'}学练宝`"
  154. width="600px"
  155. :visible.sync="cloudDateVisible"
  156. append-to-body
  157. @close="() => {
  158. getList()
  159. getUserInfo()
  160. }"
  161. >
  162. <setMemberDate
  163. v-if="cloudDateVisible"
  164. :memberRankList="memberRankList"
  165. :type="operationType"
  166. :row="userDetail"
  167. @close="cloudDateVisible = false"
  168. @confirm="() => {
  169. getList()
  170. getUserInfo()
  171. }"
  172. ></setMemberDate>
  173. </el-dialog>
  174. </div>
  175. </template>
  176. <script>
  177. import setMemberDate from "./setMemberDate";
  178. import pagination from "@/components/Pagination/index";
  179. import Tooltip from "@/components/Tooltip";
  180. import { api_studentMemberUpdateLog, api_studentManageUserInfo } from "../api";
  181. import { getTimes } from "@/utils";
  182. export default {
  183. props: ["row", "type", "memberRankList"],
  184. components: {
  185. pagination,
  186. Tooltip,
  187. setMemberDate
  188. },
  189. data() {
  190. return {
  191. userDetail: {},
  192. cloudDateVisible: false,
  193. searchForm: {
  194. memberRankSettingId: null,
  195. buyType: null,
  196. operatorName: null,
  197. timer: null,
  198. },
  199. tableList: [],
  200. pageInfo: {
  201. // 分页规则
  202. limit: 10, // 限制显示条数
  203. page: 1, // 当前页
  204. total: 0, // 总条数
  205. page_size: [10, 20, 40, 50] // 选择限制显示条数
  206. },
  207. operationType: 'add',
  208. };
  209. },
  210. mounted() {
  211. this.getUserInfo()
  212. this.getList()
  213. },
  214. methods: {
  215. async getUserInfo() {
  216. try {
  217. const { data } = await api_studentManageUserInfo({ userId: this.row.userId })
  218. this.userDetail = data;
  219. console.log(data, 'data----')
  220. } catch {}
  221. },
  222. async getList() {
  223. try {
  224. const { timer, memberRankSettingId, ...more } = this.searchForm
  225. let rankId = null;
  226. if(memberRankSettingId && memberRankSettingId.length > 0) {
  227. rankId = memberRankSettingId[memberRankSettingId.length - 1]
  228. }
  229. let params = { ...more, ...getTimes(timer, ["startTime", "endTime"]), userId: this.row.userId, memberRankSettingId: rankId };
  230. const { data } = await api_studentMemberUpdateLog(params)
  231. this.tableList = data.rows || []
  232. this.pageInfo.total = data.total || 0
  233. } catch {}
  234. },
  235. onSearch() {
  236. this.pageInfo.page = 1;
  237. this.getList();
  238. },
  239. onReSet() {
  240. this.$nextTick(() => {
  241. this.onSearch();
  242. });
  243. },
  244. operationTimer(type) {
  245. this.operationType = type
  246. this.cloudDateVisible = true
  247. }
  248. },
  249. filters: {
  250. filterBuyType(type) {
  251. const template = {
  252. 1: '自行购买',
  253. 2: '后台添加',
  254. 3: '后台扣减',
  255. }
  256. return template[type]
  257. }
  258. }
  259. };
  260. </script>
  261. <style lang="scss" scoped>
  262. .title {
  263. margin-bottom: 30px;
  264. font-size: 16px;
  265. color: #000;
  266. }
  267. </style>