switchMemberDialog.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <template>
  2. <el-dialog
  3. class="common-dialog"
  4. title="关联会员"
  5. :visible="showDialog"
  6. @close="close"
  7. width="750px"
  8. destroy-on-close
  9. >
  10. <el-form ref="form" v-if="!memberInfo.id" class="form" :model="form" label-width="100px">
  11. <el-form-item label="会员关键字" class="form-item" prop="keyword">
  12. <el-input
  13. class="input-item"
  14. v-model="form.keyword"
  15. v-focus
  16. placeholder="请输入会员手机号码、会员名称或扫码会员二维码"
  17. clearable
  18. maxlength="200"
  19. />
  20. </el-form-item>
  21. </el-form>
  22. <div class="member-info" v-if="memberInfo.id">
  23. <div class="item">
  24. <img class="avatar" v-if="memberInfo.avatar" :src="memberInfo.avatar" />
  25. <img class="avatar" v-if="!memberInfo.avatar" src="@/assets/images/avatar.png" />
  26. <div class="value">会员名称:{{ memberInfo.name }}</div>
  27. <div class="value">会员性别:{{ memberInfo.sex == '1' ? '男' : '女' }}</div>
  28. </div>
  29. <div class="item">
  30. <div class="value">手机号码:{{ memberInfo.mobile ? memberInfo.mobile : '暂无' }}</div>
  31. <div class="value">会员号码:{{ memberInfo.userNo ? memberInfo.userNo : '暂无' }}</div>
  32. </div>
  33. <div class="item">
  34. <div class="value">
  35. 可用余额:{{ memberInfo.balance ? memberInfo.balance.toFixed(2) : '0.00' }}(元)
  36. </div>
  37. <div class="value">可用积分:{{ memberInfo.point ? memberInfo.point : '0' }}</div>
  38. </div>
  39. </div>
  40. <div slot="footer" class="dialog-footer">
  41. <el-button v-if="!memberInfo.id" @click="doSubmit()">切换游客</el-button>
  42. <el-button type="primary" class="main-button" v-if="!memberInfo.id" @click="doQuery()">
  43. 查询会员
  44. </el-button>
  45. <el-button v-if="memberInfo.id" @click="cancel()">重新查询</el-button>
  46. <el-button type="danger" v-if="memberInfo.id" @click="doSubmit()">确认会员</el-button>
  47. </div>
  48. </el-dialog>
  49. </template>
  50. <script>
  51. import { getMemberInfo } from '@/api/cashier'
  52. export default {
  53. props: {
  54. showDialog: {
  55. type: [Boolean],
  56. default: () => false,
  57. },
  58. },
  59. // 自动获取焦点
  60. directives: {
  61. focus: {
  62. inserted: function (el) {
  63. el.querySelector('input').focus()
  64. },
  65. },
  66. },
  67. watch: {
  68. showDialog(value) {
  69. if (value) {
  70. this.memberInfo = {}
  71. this.form.keyword = ''
  72. }
  73. },
  74. },
  75. data() {
  76. return {
  77. loading: false,
  78. form: { keyword: '' },
  79. memberInfo: {},
  80. }
  81. },
  82. methods: {
  83. doQuery() {
  84. const app = this
  85. const keyword = this.form.keyword.trim()
  86. if (keyword.length > 0) {
  87. getMemberInfo({ keyword: this.form.keyword.trim() })
  88. .then((response) => {
  89. if (response.data.memberInfo) {
  90. app.memberInfo = response.data.memberInfo
  91. } else {
  92. app.$alert('未查询到该会员信息,请确认!')
  93. return false
  94. }
  95. })
  96. .catch(() => {
  97. // empty
  98. })
  99. } else {
  100. app.$alert('请先输入会员关键字!')
  101. }
  102. },
  103. doSubmit() {
  104. const app = this
  105. if (app.memberInfo.id) {
  106. app.$emit('doSwitchMember', app.memberInfo)
  107. } else {
  108. app.$emit('doSwitchMember', null)
  109. }
  110. },
  111. cancel() {
  112. this.memberInfo = {}
  113. },
  114. close() {
  115. this.$emit('doSwitchMember', 0)
  116. },
  117. },
  118. }
  119. </script>
  120. <style scoped>
  121. .form {
  122. margin-top: 30px;
  123. }
  124. .input-item >>> .el-input__inner {
  125. border: #113a28 solid 2px;
  126. line-height: 50px;
  127. height: 50px;
  128. }
  129. .form-item >>> .el-form-item__label {
  130. line-height: 50px;
  131. height: 50px;
  132. }
  133. .member-info {
  134. border: solid 1px #cccccc;
  135. padding: 20px;
  136. border-radius: 4px;
  137. cursor: pointer;
  138. }
  139. .member-info .item {
  140. height: 20px;
  141. }
  142. .member-info .item .avatar {
  143. height: 60px;
  144. width: 60px;
  145. border-radius: 30px;
  146. border: solid 1px #cccccc;
  147. float: left;
  148. }
  149. .member-info .item .value {
  150. float: left;
  151. margin-left: 10px;
  152. width: 200px;
  153. }
  154. </style>