傅行帆 5 lat temu
rodzic
commit
c8774eba9e

+ 4
- 0
src/config/api.js Wyświetl plik

@@ -219,6 +219,10 @@ const apis = {
219 219
     list:{
220 220
       method:'get',
221 221
       url: `${commPrefix}/taPointsExchange`
222
+    },
223
+    change: {
224
+      method: 'put',
225
+      url: `${commPrefix}/taPointsExchange/change`
222 226
     }
223 227
   },
224 228
 }

+ 2
- 2
src/store/modules/exchange.js Wyświetl plik

@@ -96,10 +96,10 @@ export default {
96 96
         })
97 97
       })
98 98
     },
99
-    changeGoodsStatus (_, payload) {
99
+    changeExchangeStatus (_, payload) {
100 100
       return new Promise((resolve, reject) => {
101 101
         request({
102
-          ...apis.goods.change,
102
+          ...apis.exchange.change,
103 103
           data: payload,
104 104
         }).then((data) => {
105 105
           resolve(data)

+ 8
- 8
src/views/exchange/list.vue Wyświetl plik

@@ -2,15 +2,15 @@
2 2
 <div class="list">
3 3
         <div class="system-table-search">
4 4
       <div class="flex-h">
5
-        <div class="flex-item flex-h">
5
+        <!-- <div class="flex-item flex-h">
6 6
           <el-button size="mini" type="success" @click='addGoods'>新增</el-button>
7
-        </div>
7
+        </div> -->
8 8
         <el-form :inline="true">
9
-          <el-form-item v-model="filterData.personName" label="用户姓名">
10
-            <el-input placeholder="用户姓名"></el-input>
9
+          <el-form-item label="用户姓名">
10
+            <el-input v-model="filterData.personName" placeholder="用户姓名"></el-input>
11 11
           </el-form-item>
12
-          <el-form-item v-model="filterData.phone" label="手机号">
13
-            <el-input placeholder="手机号"></el-input>
12
+          <el-form-item label="手机号">
13
+            <el-input v-model="filterData.phone" placeholder="手机号"></el-input>
14 14
           </el-form-item>
15 15
           <el-form-item label="用户类型">
16 16
             <el-select v-model="filterData.personType" placeholder="用户类型">
@@ -19,8 +19,8 @@
19 19
               <el-option label="经纪人" value="estate agent"></el-option>
20 20
             </el-select>
21 21
           </el-form-item>
22
-          <el-form-item v-model="filterData.targetName" label="商品名称">
23
-            <el-input placeholder="商品名称"></el-input>
22
+          <el-form-item label="商品名称">
23
+            <el-input v-model="filterData.targetName" placeholder="商品名称"></el-input>
24 24
           </el-form-item>
25 25
           <el-form-item label="兑换时间">
26 26
             <el-date-picker

+ 165
- 0
src/views/exchange/verify.vue Wyświetl plik

@@ -0,0 +1,165 @@
1
+<template>
2
+<el-tabs type="border-card">
3
+  <el-tab-pane label="扫码核销">用户管理</el-tab-pane>
4
+  <el-tab-pane label="手机号核销">
5
+   <el-form :inline="true">
6
+      <el-form-item label="">
7
+        <el-input v-model="verifyPhone" placeholder="请输入手机号"></el-input>
8
+      </el-form-item>
9
+      <el-form-item>
10
+        <el-button type="primary" @click="verifyTel">立即核销</el-button>
11
+      </el-form-item>
12
+    </el-form>
13
+  </el-tab-pane>
14
+</el-tabs>
15
+</template>
16
+
17
+<script>
18
+import { createNamespacedHelpers } from "vuex";
19
+import dayjs from 'dayjs'
20
+
21
+const { mapActions: mapExchangeActions } = createNamespacedHelpers("exchange");
22
+
23
+export default {
24
+  name: "goods-list",
25
+  data() {
26
+    return {
27
+      filterData: {
28
+        personName: "",
29
+        phone: "",
30
+        personType: "",
31
+        targetName: "",
32
+        startCreateDate: "",
33
+        endCreateDate: "",
34
+        startVerifyDate: "",
35
+        endVerifyDate: "",
36
+        status: "",
37
+      },
38
+      verifyPhone: "",
39
+      list: [],
40
+      pageNavi: {
41
+        current: 1,
42
+        size: 20,
43
+        total: 0
44
+      }
45
+    };
46
+  },
47
+  computed: {},
48
+  methods: {
49
+    ...mapExchangeActions(["getExchanges"]),
50
+    getList() {
51
+      const pageNumber = this.pageNavi.current || 1;
52
+      const pageSize = this.pageNavi.size;
53
+
54
+      this.getExchanges({
55
+        ...this.filterData,
56
+        pageNumber,
57
+        pageSize
58
+      })
59
+        .then(res => {
60
+          const { records, ...pageNavi } = res;
61
+
62
+          this.list = records;
63
+          this.pageNavi = pageNavi;
64
+        })
65
+        .catch(err => {
66
+          this.$notify.error(err.msg || err.message);
67
+        });
68
+    },
69
+    addGoods() {
70
+      this.$router.push({ name: "goods.edit" });
71
+    },
72
+    verifyTel() {
73
+      this.$router.push({ name: "verify.list" , params: { tel: this.verifyPhone } });
74
+    },
75
+    toDetail(row) {
76
+      this.$router.push({
77
+        name: "goods.edit",
78
+        params: { id: row.goodsId }
79
+      });
80
+    },
81
+    changeStatus(row) {
82
+      this.showLoadding("保存中...");
83
+      this.changeGoodsStatus(row)
84
+        .then(res => {
85
+          this.hideLoadding();
86
+          this.$notify.info("保存成功");
87
+          this.search();
88
+        })
89
+        .catch(err => {
90
+          this.hideLoadding();
91
+          this.$notify.error(err.message);
92
+        });
93
+    },
94
+    showLoadding(text) {
95
+      this.loading = this.$loading({
96
+        text,
97
+        lock: true,
98
+        spinner: "el-icon-loading",
99
+        background: "rgba(255, 255, 255, 0.7)"
100
+      });
101
+    },
102
+    hideLoadding() {
103
+      if (this.loading) this.loading.close();
104
+    },
105
+    search() {
106
+      this.pageNavi.current = 1;
107
+      this.getList();
108
+    },
109
+    newPage(page) {
110
+      this.$router.replace({ name: "goods.list", query: { page } });
111
+    },
112
+    formateDate(dt) {
113
+      return !dt ? '' : dayjs(dt).format('YYYY-MM-DD HH:mm')
114
+    },
115
+  },
116
+  created() {
117
+    this.pageNavi.current = this.$route.query.page || 1;
118
+
119
+    this.getList();
120
+  }
121
+};
122
+</script>
123
+
124
+<style lang="scss" scoped>
125
+.list {
126
+  .header {
127
+    width: 50px;
128
+    height: 50px;
129
+    border-radius: 50%;
130
+  }
131
+  img {
132
+      width: 100%;
133
+      height: 100%;
134
+    }
135
+}
136
+.system-table-search {
137
+  width: calc(100% - 40px);
138
+  margin: 20px auto 0;
139
+}
140
+
141
+.system-table-search li {
142
+  margin-right: 20px;
143
+}
144
+
145
+.system-table-search ul {
146
+  font-size: 0;
147
+  white-space: nowrap;
148
+}
149
+
150
+.system-table-search ul > li {
151
+  display: inline-block;
152
+}
153
+
154
+.flex-h {
155
+  display: flex;
156
+  align-items: center;
157
+}
158
+
159
+.flex-item {
160
+  flex: 1;
161
+  -webkit-flex: 1;
162
+  position: relative;
163
+  overflow: hidden;
164
+}
165
+</style>

+ 270
- 0
src/views/exchange/verifyList.vue Wyświetl plik

@@ -0,0 +1,270 @@
1
+<template>
2
+<div class="list">
3
+        <div class="system-table-search">
4
+      <div class="flex-h">
5
+        <div class="flex-item flex-h">
6
+          <el-button size="mini" type="success" @click='goBacke'>返回</el-button>
7
+        </div>
8
+        <!-- <el-form :inline="true">
9
+          <el-form-item label="用户姓名">
10
+            <el-input v-model="filterData.personName" placeholder="用户姓名"></el-input>
11
+          </el-form-item>
12
+          <el-form-item label="手机号">
13
+            <el-input v-model="filterData.phone" placeholder="手机号"></el-input>
14
+          </el-form-item>
15
+          <el-form-item label="用户类型">
16
+            <el-select v-model="filterData.personType" placeholder="用户类型">
17
+              <el-option label="置业顾问" value="Realty Consultant"></el-option>
18
+              <el-option label="销售主管" value="Sales Executive"></el-option>
19
+              <el-option label="经纪人" value="estate agent"></el-option>
20
+            </el-select>
21
+          </el-form-item>
22
+          <el-form-item label="商品名称">
23
+            <el-input v-model="filterData.targetName" placeholder="商品名称"></el-input>
24
+          </el-form-item>
25
+          <el-form-item label="兑换时间">
26
+            <el-date-picker
27
+                      v-model="filterData.startCreateDate"
28
+                      type="date"
29
+                      placeholder="开始时间">
30
+                    </el-date-picker>
31
+                    <el-date-picker
32
+                      v-model="filterData.endCreateDate"
33
+                      type="date"
34
+                      placeholder="结束时间">
35
+                    </el-date-picker>
36
+          </el-form-item>
37
+          <el-form-item label="领取时间">
38
+          <el-date-picker
39
+                      v-model="filterData.startVerifyDate"
40
+                      type="date"
41
+                      placeholder="开始时间">
42
+                    </el-date-picker>
43
+                    <el-date-picker
44
+                      v-model="filterData.endVerifyDate"
45
+                      type="date"
46
+                      placeholder="结束时间">
47
+                    </el-date-picker>
48
+          </el-form-item>
49
+          <el-form-item label="状态">
50
+            <el-select v-model="filterData.status" placeholder="状态">
51
+              <el-option label="已领取" value="1"></el-option>
52
+              <el-option label="未领取" value="0"></el-option>
53
+            </el-select>
54
+          </el-form-item>
55
+      <el-form-item>
56
+      <el-button type="primary" @click="search">查询</el-button>
57
+  </el-form-item>
58
+</el-form>     -->
59
+      </div>
60
+      <div class="moreFilter"></div>
61
+    </div>
62
+  <el-table
63
+    :data="list || []"
64
+    style="width: 100%">
65
+    <el-table-column
66
+      prop="personName"
67
+      label="用户姓名">
68
+    </el-table-column>
69
+    <!-- <el-table-column
70
+      label="用户类型">
71
+      <template slot-scope="scope">
72
+          <span v-if="scope.row.personType === 'Realty Consultant'">置业顾问</span>
73
+          <span v-if="scope.row.personType === 'Sales Executive'">销售主管</span>
74
+          <span v-if="scope.row.personType === 'estate agent'">经纪人</span>
75
+      </template>
76
+    </el-table-column> -->
77
+    <el-table-column
78
+      prop="phone"
79
+      label="手机号">
80
+    </el-table-column>
81
+    <el-table-column
82
+      label="商品图片">
83
+      <template slot-scope="scope">
84
+          <div class="header">
85
+            <img :src="scope.row.image" alt="" />
86
+          </div>
87
+        </template>
88
+    </el-table-column>
89
+    <el-table-column
90
+      prop="targetName"
91
+      label="兑换商品">
92
+    </el-table-column>
93
+    <el-table-column
94
+      label="兑换时间">
95
+      <template slot-scope="scope">
96
+          <span>{{formateDate(scope.row.createDate)}}</span>
97
+      </template>
98
+    </el-table-column>
99
+    <!-- <el-table-column
100
+      label="领取时间">
101
+      <template slot-scope="scope">
102
+          <span>{{formateDate(scope.row.verifyDate)}}</span>
103
+      </template>
104
+    </el-table-column> -->
105
+    <el-table-column   label="状态">
106
+      <template slot-scope="scope">
107
+        <span :style="{color:(scope.row.status == 1?'':'red')}" >{{scope.row.status == 1 ? '已领取' : '未领取'}}</span>
108
+      </template>
109
+    </el-table-column>
110
+    <el-table-column
111
+      fixed="right"
112
+      label="操作">
113
+      <template slot-scope="scope">
114
+        <el-button type="text" @click="changeStatus(scope.row)" size="small">{{scope.row.status == 1?'':'核销'}}</el-button>
115
+      </template>
116
+    </el-table-column>
117
+  </el-table>
118
+  <el-pagination
119
+    small
120
+    style="margin-top:10px;"
121
+    layout="prev, pager, next"
122
+    :current-page.sync="pageNavi.current"
123
+    :pageSize="pageNavi.size"
124
+    :total="pageNavi.total || 0"
125
+    @current-change="getList"
126
+  >
127
+  </el-pagination>
128
+</div>
129
+</template>
130
+
131
+<script>
132
+import { createNamespacedHelpers } from "vuex";
133
+import dayjs from 'dayjs'
134
+
135
+const { mapActions: mapExchangeActions } = createNamespacedHelpers("exchange");
136
+
137
+export default {
138
+  name: "goods-list",
139
+  data() {
140
+    return {
141
+      filterData: {
142
+        tel: "",
143
+      },
144
+      list: [],
145
+      pageNavi: {
146
+        current: 1,
147
+        size: 20,
148
+        total: 0
149
+      }
150
+    };
151
+  },
152
+  computed: {},
153
+  methods: {
154
+    ...mapExchangeActions(["getExchanges", "changeExchangeStatus"]),
155
+    getList() {
156
+      const pageNumber = this.pageNavi.current || 1;
157
+      const pageSize = this.pageNavi.size;
158
+
159
+      this.getExchanges({
160
+        ...this.filterData,
161
+        pageNumber,
162
+        pageSize
163
+      })
164
+        .then(res => {
165
+          const { records, ...pageNavi } = res;
166
+
167
+          this.list = records;
168
+          this.pageNavi = pageNavi;
169
+        })
170
+        .catch(err => {
171
+          this.$notify.error(err.msg || err.message);
172
+        });
173
+    },
174
+    addGoods() {
175
+      this.$router.push({ name: "goods.edit" });
176
+    },
177
+    goBacke() {
178
+      this.$router.go(-1)
179
+    },
180
+    toDetail(row) {
181
+      this.$router.push({
182
+        name: "goods.edit",
183
+        params: { id: row.goodsId }
184
+      });
185
+    },
186
+    changeStatus(row) {
187
+      this.showLoadding("保存中...");
188
+      this.changeExchangeStatus(row)
189
+        .then(res => {
190
+          this.hideLoadding();
191
+          this.$notify.info("核销成功");
192
+          this.search();
193
+        })
194
+        .catch(err => {
195
+          this.hideLoadding();
196
+          this.$notify.error(err.message);
197
+        });
198
+    },
199
+    showLoadding(text) {
200
+      this.loading = this.$loading({
201
+        text,
202
+        lock: true,
203
+        spinner: "el-icon-loading",
204
+        background: "rgba(255, 255, 255, 0.7)"
205
+      });
206
+    },
207
+    hideLoadding() {
208
+      if (this.loading) this.loading.close();
209
+    },
210
+    search() {
211
+      this.pageNavi.current = 1;
212
+      this.getList();
213
+    },
214
+    newPage(page) {
215
+      this.$router.replace({ name: "goods.list", query: { page } });
216
+    },
217
+    formateDate(dt) {
218
+      return !dt ? '' : dayjs(dt).format('YYYY-MM-DD HH:mm')
219
+    },
220
+  },
221
+  created() {
222
+    this.pageNavi.current = this.$route.query.page || 1;
223
+    this.filterData.tel = this.$route.params.tel
224
+    this.getList();
225
+  }
226
+};
227
+</script>
228
+
229
+<style lang="scss" scoped>
230
+.list {
231
+  .header {
232
+    width: 50px;
233
+    height: 50px;
234
+    border-radius: 50%;
235
+  }
236
+  img {
237
+      width: 100%;
238
+      height: 100%;
239
+    }
240
+}
241
+.system-table-search {
242
+  width: calc(100% - 40px);
243
+  margin: 20px auto 0;
244
+}
245
+
246
+.system-table-search li {
247
+  margin-right: 20px;
248
+}
249
+
250
+.system-table-search ul {
251
+  font-size: 0;
252
+  white-space: nowrap;
253
+}
254
+
255
+.system-table-search ul > li {
256
+  display: inline-block;
257
+}
258
+
259
+.flex-h {
260
+  display: flex;
261
+  align-items: center;
262
+}
263
+
264
+.flex-item {
265
+  flex: 1;
266
+  -webkit-flex: 1;
267
+  position: relative;
268
+  overflow: hidden;
269
+}
270
+</style>

+ 12
- 3
src/views/index.js Wyświetl plik

@@ -344,14 +344,23 @@ const pages = [
344 344
         },
345 345
       },
346 346
       {
347
-        path: 'edit/:id?',
348
-        name: 'consultant.edit',
349
-        component: () => import('./consultant/edit.vue'),
347
+        path: 'exchange/verify',
348
+        name: 'exchange.verify',
349
+        component: () => import('./exchange/verify.vue'),
350 350
         meta: {
351 351
           menuShow: true,
352 352
           title: '商品核销',
353 353
         },
354 354
       },
355
+      {
356
+        path: 'verify/list',
357
+        name: 'verify.list',
358
+        component: () => import('./exchange/verifyList.vue'),
359
+        meta: {
360
+          menuShow: false,
361
+          title: '商品展示',
362
+        },
363
+      },
355 364
       {
356 365
         path: 'exchange/list',
357 366
         name: 'exchange.list',