selectMember.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <template>
  2. <el-dialog title="选择会员" :visible.sync="show" :show-close="false" width="1000px" :close-on-click-modal="false">
  3. <div class="dialog-container2 clearfix">
  4. <el-form ref="screenForm" :model="member_screenForm" size="small" label-position="left">
  5. <el-row :gutter="20">
  6. <el-col :xs="7" :sm="7" :lg="7">
  7. <el-form-item label="关键词" prop="keyword" label-width="55px">
  8. <el-input v-model="member_screenForm.keyword" placeholder="请输入会员名称/电话"></el-input>
  9. </el-form-item>
  10. </el-col>
  11. <el-col :xs="8" :sm="8" :lg="8">
  12. <el-form-item label="注册日期" prop="registerDate" label-width="70px">
  13. <el-date-picker style="width: 100%" v-model="member_screenForm.registerDate" type="daterange"
  14. value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
  15. </el-date-picker>
  16. </el-form-item>
  17. </el-col>
  18. <el-col :xs="6" :sm="6" :lg="6">
  19. <el-form-item label="" prop="type" label-width="20px">
  20. <el-radio-group v-model="member_screenForm.type" :disabled="memberList.length > 0 ? true : false">
  21. <el-radio :label="'SERVICE'">业务员</el-radio>
  22. <el-radio :label="'GENERAL'">普通用户</el-radio>
  23. </el-radio-group>
  24. </el-form-item>
  25. </el-col>
  26. <el-col :xs="2" :sm="2" :lg="2" class="tr">
  27. <el-button size="small" type="primary" @click="getMemberListByScreen">搜索</el-button>
  28. </el-col>
  29. </el-row>
  30. </el-form>
  31. <div class="table memberTable" style="margin: 10px 0 20px;">
  32. <el-table v-loading="memberTable_listLoading" :data="memberTable_dataList" element-loading-text="Loading"
  33. tooltip-effect="dark" style="width: 100%" max-height="360" @selection-change="handleChooseMember">
  34. <el-table-column align="center" type="selection" :selectable='checkboxSelect' width="45"></el-table-column>
  35. <el-table-column align="center" prop="nickName" label="会员名称" min-width="150"></el-table-column>
  36. <el-table-column align="center" prop="sex" label="性别" min-width="100"></el-table-column>
  37. <el-table-column align="center" prop="mobile" label="注册手机" min-width="100"></el-table-column>
  38. <el-table-column align="center" prop="memberName" label="角色" min-width="100">
  39. <template slot-scope="scope">
  40. {{ scope.row.type | MEMBER_CURRENT_TYPE_FILTER }}
  41. </template>
  42. </el-table-column>
  43. <el-table-column align="center" prop="memberName" label="状态" min-width="100">
  44. <template slot-scope="scope">
  45. <el-tag :type="scope.row.status ? 'success' : 'danger'">{{ scope.row.status | MEMBER_CURRENT_STATUS_FILTER
  46. }}</el-tag>
  47. </template>
  48. </el-table-column>
  49. </el-table>
  50. </div>
  51. <div class="pagination clearfix">
  52. <div class="fr">
  53. <el-pagination @current-change="memberTableCurrentChange" :current-page="memberTable_currentPage"
  54. :page-size="memberTable_pageSize" background layout="prev, pager, next" :total="memberTable_listTotal">
  55. </el-pagination>
  56. </div>
  57. </div>
  58. </div>
  59. <div slot="footer" class="dialog-footer">
  60. <el-button type="primary" @click="submitAddMember">保 存</el-button>
  61. <el-button @click="cancelAddMember">取 消</el-button>
  62. </div>
  63. </el-dialog>
  64. </template>
  65. <script>
  66. import { getMemberList } from "@/api/coupon";
  67. export default {
  68. props: {
  69. memberList: {
  70. type: Array,
  71. default: () => []
  72. }
  73. },
  74. data() {
  75. return {
  76. show:true,
  77. member_screenForm: { // 筛选表单数据
  78. keyword: '', // 名称
  79. registerDate: [],
  80. type: 'SERVICE',
  81. },
  82. memberTable_dataList: [], // 列表数据
  83. memberTable_listLoading: true, // 列表加载loading
  84. memberTable_currentPage: 1, // 当前页码
  85. memberTable_pageSize: 10, // 每页数量
  86. memberTable_listTotal: 0, // 列表总数
  87. memberTable_choose: [], // table中 当前选择会员
  88. }
  89. },
  90. created() {
  91. this.getMemberList()
  92. },
  93. methods: {
  94. // 搜索
  95. getMemberListByScreen() {
  96. if (this.memberTable_choose.length > 0) {
  97. return this.$errorMsg('当前已选择会员,不可搜索');
  98. }
  99. this.memberTable_currentPage = 1;
  100. this.getMemberList();
  101. },
  102. // 查询重复值并禁选
  103. checkboxSelect(row, rowIndex) {
  104. if (row.selected) {
  105. return false // 禁用
  106. } else {
  107. return true // 不禁用
  108. }
  109. },
  110. // 获取会员列表
  111. getMemberList() {
  112. getMemberList({
  113. pageNum: this.memberTable_currentPage,
  114. pageSize: this.memberTable_pageSize,
  115. keyword: this.member_screenForm.keyword,
  116. type: this.member_screenForm.type,
  117. startTime: this.member_screenForm.registerDate && this.member_screenForm.registerDate[0] ? this.member_screenForm.registerDate[0] + ' 00:00:00' : null,
  118. endTime: this.member_screenForm.registerDate && this.member_screenForm.registerDate[1] ? this.member_screenForm.registerDate[1] + ' 23:59:59' : null,
  119. }).then(res => {
  120. let oldMemberList = this.memberList;
  121. let newMemberList = res.data.records;
  122. for (let i = 0; i < oldMemberList.length; i++) {
  123. let oldItem = oldMemberList[i]
  124. for (let j = 0; j < newMemberList.length; j++) {
  125. let newItem = newMemberList[j]
  126. if (newItem.userId === oldItem.userId) {
  127. newMemberList[j].selected = true;
  128. break;
  129. }
  130. }
  131. }
  132. this.memberTable_dataList = newMemberList;
  133. this.memberTable_listTotal = res.data.total;
  134. this.memberTable_listLoading = false;
  135. })
  136. },
  137. // 更改列表当前页
  138. memberTableCurrentChange(val) {
  139. if (this.memberTable_choose.length > 0) {
  140. return this.$errorMsg('当前已选择会员,不可切换分页');
  141. }
  142. this.memberTable_currentPage = val;
  143. this.getMemberList();
  144. },
  145. // table点击选择会员
  146. handleChooseMember(val) {
  147. this.memberTable_choose = val;
  148. },
  149. // 取消 选择会员
  150. cancelAddMember() {
  151. this.$emit("cancelSelectMember")
  152. },
  153. // 提交 选择会员
  154. submitAddMember() {
  155. this.$emit("selectMemberPass", [...this.memberList, ...this.memberTable_choose])
  156. this.$nextTick(() => {
  157. this.$emit("cancelSelectMember")
  158. })
  159. },
  160. }
  161. }
  162. </script>
  163. <style scoped lang="scss">
  164. </style>