chooseMember.vue 7.81 KB
Newer Older
1
<template>
2
  <el-dialog :title="$t('选择会员')" :visible.sync="dialogVisible" width="80%" :before-close="dialogBeforeClose">
3
    <div class="app-container">
4
      <el-form :model="queryParams" ref="queryForm" size="small" v-show="showSearch" :inline="true" label-width="120px">
5 6 7
        <el-form-item :label="$t('当前积分')">
          <el-row :gutter="10">
            <el-col :span="8">
8
              <dict-selector clearable :type="DICT_TYPE.QUANTITATIVE_RELATION_SYMBOL" v-model="queryParams.holdScoreOperate" @change="handleQuery"> </dict-selector>
9 10
            </el-col>
            <el-col :span="16">
11
              <el-input v-model.trim="queryParams.holdScore" :placeholder="$t('请输入数字')" clearable @keyup.enter.native="handleQuery" onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" />
12 13 14 15
            </el-col>
          </el-row>
        </el-form-item>
        <el-form-item :label="$t('关键词')">
16
          <el-input style="width: 300px" v-model.trim="queryParams.key" :placeholder="$t('请输入会员名称/会员编号/手机号')" clearable @keyup.enter.native="handleQuery" onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" />
17 18
        </el-form-item>
        <el-form-item :label="$t('国家')">
19 20
          <el-select v-model="queryParams.country" :placeholder="$t('请选择国家')" clearable @change="handleGetCityList($event)" size="small">
            <el-option v-for="nodeItem in countryList" :key="nodeItem.id" :label="isChinese ? nodeItem.titleZh : nodeItem.titleEn" :value="nodeItem.id" />
21 22 23
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('城市')">
24 25
          <el-select v-model="queryParams.city" :placeholder="$t('请选择城市')" clearable size="small">
            <el-option v-for="nodeItem in cityList" :key="nodeItem.id" :label="isChinese ? nodeItem.titleZh : nodeItem.titleEn" :value="nodeItem.id" />
26 27 28
          </el-select>
        </el-form-item>
        <el-form-item>
29 30
          <el-button type="primary" icon="el-icon-search" @click="handleQuery">{{ $t("搜索") }}</el-button>
          <el-button icon="el-icon-refresh" @click="resetQuery">{{ $t("重置") }}</el-button>
31 32
        </el-form-item>
      </el-form>
33
      <el-row class="mb8">
34
        <right-toolbar :showSearch.sync="showSearch" @queryTable="handleQueryPagination"></right-toolbar>
35
      </el-row>
36 37 38 39 40 41 42 43
      <el-table ref="multipleTable" v-loading="loading" @selection-change="handleSelectionChange" :data="memberList">
        <el-table-column type="selection" width="55" :selectable="selectable"> </el-table-column>
        <el-table-column :label="$t('会员名称')" align="center" :prop="isChinese ? 'memberNameZh' : 'memberNameEn'"></el-table-column>
        <el-table-column width="140" :label="$t('会员编号')" align="center" prop="id"></el-table-column>
        <el-table-column width="140" :label="$t('手机号')" align="center" prop="mobile"></el-table-column>
        <el-table-column width="140" align="center" :label="$t('国家')" :prop="isChinese ? 'countryNameZh' : 'countryNameEn'"></el-table-column>
        <el-table-column :label="$t('城市')" align="center" :prop="isChinese ? 'cityNameZh' : 'cityNameEn'"></el-table-column>
        <el-table-column :label="$t('当前积分')" align="center" prop="holdScore"></el-table-column>
44 45 46 47 48 49 50
      </el-table>
      <!-- //分页列表 -->
      <span v-show="selectedMember.memberList.length > 0"
        >{{ $t("已选择:") }} {{ selectedMember.memberName }} {{ $t("") }}
        <span style="color: red"> {{ selectedMember.memberList.length }} </span>
        {{ $t("") }}</span
      >
51
      <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" @pagination="handleQueryPagination" />
52 53 54 55 56 57 58 59
    </div>
    <div slot="footer">
      <el-button @click="dialogBeforeClose">取 消</el-button>
      <el-button type="primary" @click="transferSelectMember">确 定</el-button>
    </div>
  </el-dialog>
</template>
<script>
60 61 62
import { getDictDatas, DICT_TYPE } from "@/utils/dict"
import { getCityList, getTradeCountryList, getMemberList } from "@/api/ecw/giftManagement"
import { color } from "echarts/lib/export"
63 64

export default {
65
  name: "chooseMember",
66 67 68
  props: {
    dialogVisible: {
      type: Boolean,
69
      default: false
70 71 72
    },
    memberSelectList: {
      type: Array,
73
      default: () => []
74
    },
75 76 77 78
    giftScore: {
      type: Number | String,
      default: 0
    }
79 80 81 82
  },
  watch: {
    dialogVisible(val) {
      if (val == true) {
83
        this.handleQuery()
84 85 86
      }
    },
    memberSelectList(val) {
87 88
      this.selectedMember.memberList = val
    }
89 90 91 92 93 94 95 96 97
  },
  data() {
    return {
      selectedMember: { memberList: [], memberName: "" },
      countryList: [],
      cityList: [],
      total: 0,
      loading: true,
      memberList: [],
98 99
      // 显示搜索条件
      showSearch: true,
100 101 102 103 104 105 106 107 108 109
      queryParams: {
        country: null,
        city: null,
        endTime: "",
        holdScore: null,
        holdScoreOperate: null,
        key: "",
        pageNo: 1,
        pageSize: 10,
        startTime: "",
110
        usedScore: null,
111 112 113
        usedScoreOperate: null
      }
    }
114 115 116
  },
  computed: {
    isChinese() {
117 118
      return this.$i18n.locale === "zh_CN"
    }
119 120
  },
  created() {
121 122
    this.handleQuery()
    this.getCountryList()
123 124
  },
  activated() {
125
    this.handleQuery()
126 127 128
  },
  methods: {
    selectable(row, index) {
129 130 131
      if (this.giftScore > row.holdScore) {
        return false
      }
132 133
      if (this.memberSelectList.length > 0) {
        return this.memberSelectList.some((item) => {
134 135
          return item.id != row.id
        })
136
      } else {
137
        return true
138 139 140
      }
    },
    handleSelectionChange(val) {
141 142
      this.selectedMember.memberList = val
      let arraryMemberName = []
143 144 145
      if (val) {
        this.selectedMember.memberList.forEach((element) => {
          if (this.isChinese) {
146
            arraryMemberName.push(element.memberNameZh)
147
          } else {
148
            arraryMemberName.push(element.memberNameEn)
149
          }
150
        })
151
      }
152
      this.selectedMember.memberName = arraryMemberName.join("")
153 154
    },
    transferSelectMember() {
155 156
      this.dialogBeforeClose()
      this.$emit("transferSelectMemberInfo", this.selectedMember.memberList)
157 158
    },
    dialogBeforeClose() {
159
      this.loading = true
160 161 162 163 164 165 166 167 168 169 170
      this.queryParams = {
        country: null,
        city: null,
        endTime: null,
        holdScore: null,
        holdScoreOperate: null,
        key: null,
        pageNo: 1,
        pageSize: 10,
        startTime: null,
        usedScore: null,
171 172
        usedScoreOperate: null
      }
173
      // this.dialogVisible = false;
174
      this.$emit("update:dialogVisible", false)
175 176 177
    },
    getCountryList() {
      getTradeCountryList().then((res) => {
178 179
        this.countryList = res.data
      })
180 181
    },
    handleGetCityList(id) {
chenwei's avatar
chenwei committed
182 183
      if (id) {
        let params = {
184 185
          id: id
        }
chenwei's avatar
chenwei committed
186
        getCityList(params).then((res) => {
187 188
          this.cityList = res.data
        })
chenwei's avatar
chenwei committed
189
      } else {
190
        this.cityList = []
chenwei's avatar
chenwei committed
191
      }
192 193
    },
    handleQuery() {
194 195
      this.queryParams.pageNo = 1
      let params = { ...this.queryParams }
196
      getMemberList(params).then((res) => {
197 198 199 200
        this.loading = false
        this.memberList = res.data.list
        this.total = res.data.total
      })
201 202
    },
    handleQueryPagination() {
203
      let params = { ...this.queryParams }
204
      getMemberList(params).then((res) => {
205 206 207 208
        this.loading = false
        this.memberList = res.data.list
        this.total = res.data.total
      })
209 210
    },
    resetQuery() {
211
      this.loading = true
212 213 214 215 216 217 218 219 220 221 222
      this.queryParams = {
        country: null,
        city: null,
        endTime: null,
        holdScore: null,
        holdScoreOperate: null,
        key: null,
        pageNo: 1,
        pageSize: 10,
        startTime: null,
        usedScore: null,
223 224 225 226 227 228
        usedScoreOperate: null
      }
      this.handleQuery()
    }
  }
}
229
</script>