Przeglądaj źródła

Add Multiselect

Unknown 7 lat temu
rodzic
commit
3b1d7e3c67

+ 1 - 0
package.json

21
     "normalize.css": "7.0.0",
21
     "normalize.css": "7.0.0",
22
     "nprogress": "0.2.0",
22
     "nprogress": "0.2.0",
23
     "vue": "2.5.9",
23
     "vue": "2.5.9",
24
+    "vue-multiselect": "^2.0.8",
24
     "vue-router": "3.0.1",
25
     "vue-router": "3.0.1",
25
     "vuex": "3.0.1"
26
     "vuex": "3.0.1"
26
   },
27
   },

+ 6 - 6
src/api/agnetManagement.js

3
 export function fetchList(query) {
3
 export function fetchList(query) {
4
   return request({
4
   return request({
5
     url: '/agents',
5
     url: '/agents',
6
-    method: 'get'
7
-    // params: {
8
-    //   limit: query.limit,
9
-    //   offset: (query.page - 1) * query.limit,
10
-    //   name: query.name,
6
+    method: 'get',
7
+    params: {
8
+      limit: query.limit,
9
+      offset: (query.page - 1) * query.limit,
10
+      name: query.name
11
     //   chipsSort: query.chipsSort,
11
     //   chipsSort: query.chipsSort,
12
     //   updatedSort: query.updatedSort
12
     //   updatedSort: query.updatedSort
13
-    // }
13
+    }
14
   })
14
   })
15
 }
15
 }
16
 
16
 

+ 22 - 0
src/api/gambleMember.js

77
     method: 'get'
77
     method: 'get'
78
   })
78
   })
79
 }
79
 }
80
+
81
+export function fetchAgentList(name) {
82
+  return request({
83
+    url: '/agents',
84
+    method: 'get',
85
+    params: {
86
+      limit: 20,
87
+      offset: 0,
88
+      name
89
+    }
90
+  })
91
+}
92
+
93
+export function updateBelongAgent(member, agent) {
94
+  return request({
95
+    url: `/gambleMembers/${member.id}/belong_agent`,
96
+    method: 'put',
97
+    data: {
98
+      agent: agent.id
99
+    }
100
+  })
101
+}

+ 78 - 2
src/views/room/gambleMember/index.vue

31
           <span>{{scope.row.chips}}</span>
31
           <span>{{scope.row.chips}}</span>
32
         </template>
32
         </template>
33
       </el-table-column>
33
       </el-table-column>
34
-      <el-table-column align="center" label="操作" width="350">
34
+      <el-table-column label="代理商" align="center">
35
+        <template slot-scope="scope">
36
+          {{!scope.row.GambleAgent ? 'N/A': scope.row.GambleAgent.name}}
37
+        </template>
38
+      </el-table-column>
39
+      <el-table-column align="center" label="操作" width="450">
35
         <template slot-scope="scope">
40
         <template slot-scope="scope">
36
             <el-button type="primary" size="mini" icon="el-icon-edit" @click="handleChipsMangement(scope.row)">分數管理</el-button>
41
             <el-button type="primary" size="mini" icon="el-icon-edit" @click="handleChipsMangement(scope.row)">分數管理</el-button>
37
             <router-link to="/room/index/gambleMember/index/chipsHistory">
42
             <router-link to="/room/index/gambleMember/index/chipsHistory">
38
               <el-button type="primary" size="mini" icon="el-icon-tickets" @click="handleLog(scope.row)">分數紀錄</el-button>            
43
               <el-button type="primary" size="mini" icon="el-icon-tickets" @click="handleLog(scope.row)">分數紀錄</el-button>            
39
             </router-link>
44
             </router-link>
45
+            <el-button type="primary" size="mini" icon="el-icon-edit" @click="handleAgentUpdate(scope.row)">代理商設定</el-button>            
40
             <router-link to="/room/index/gambleMember/index/gameHistory">
46
             <router-link to="/room/index/gambleMember/index/gameHistory">
41
               <el-button type="primary" size="mini" icon="el-icon-tickets" @click="handlePage(scope.row)">歷史查詢</el-button>
47
               <el-button type="primary" size="mini" icon="el-icon-tickets" @click="handlePage(scope.row)">歷史查詢</el-button>
42
             </router-link>       
48
             </router-link>       
92
         <el-button v-if="dialogStatus=='deposit'" type="primary" @click="depositChips">確 定</el-button>
98
         <el-button v-if="dialogStatus=='deposit'" type="primary" @click="depositChips">確 定</el-button>
93
       </div>
99
       </div>
94
     </el-dialog>
100
     </el-dialog>
101
+
102
+
103
+    <el-dialog title="所屬代理商" :visible.sync="dialogUpdateFormVisible" :before-close="handleDialogClose" center>
104
+      <el-form :rules="rules" :model="temp" ref="updateForm" label-position="left" label-width="100px" style='width: 400px; margin-left:50px;'>
105
+          <el-form-item label="使用者" prop="id">
106
+              <el-input v-model="temp.name" :disabled="true"></el-input>
107
+        </el-form-item>
108
+        <el-form-item label="代理商" prop="name">
109
+          <multiselect v-model="updateFormData" :options="agentLIstOptions" @search-change="getRemoteAgentList" placeholder="代理商搜尋" selectLabel="選擇"
110
+            deselectLabel="删除" track-by="key" :internalSearch="false" label="key">
111
+              <span slot='noResult'>無結果</span>
112
+          </multiselect>
113
+         </el-form-item>
114
+        </el-form>          
115
+        <div slot="footer" class="dialog-footer">
116
+          <el-button @click="handleDialogClose">取 消</el-button>
117
+          <el-button type="primary" @click="updateData">確 定</el-button>
118
+        </div>
119
+    </el-dialog>
120
+
95
   </div>
121
   </div>
96
     <router-view :member="member"></router-view>
122
     <router-view :member="member"></router-view>
97
   </div>
123
   </div>
101
 
127
 
102
 import { mapGetters, mapActions } from 'vuex'
128
 import { mapGetters, mapActions } from 'vuex'
103
 // TODO 需更改抓取此房間人員
129
 // TODO 需更改抓取此房間人員
104
-import { fetchList, chipsDeposit, chipsReward, createGambleMember } from '@/api/gambleMember'
130
+import { fetchList, chipsDeposit, chipsReward, createGambleMember, fetchAgentList, updateBelongAgent } from '@/api/gambleMember'
105
 import waves from '@/directive/waves' // 水波纹指令
131
 import waves from '@/directive/waves' // 水波纹指令
132
+import Multiselect from 'vue-multiselect'// 使用的一个多选框组件,element-ui的select不能满足所有需求
133
+import 'vue-multiselect/dist/vue-multiselect.min.css'// 多选框组件css
106
 
134
 
107
 export default {
135
 export default {
108
   name: 'gambleMemberTable',
136
   name: 'gambleMemberTable',
137
+  components: { Multiselect },
109
   directives: {
138
   directives: {
110
     waves
139
     waves
111
   },
140
   },
143
         // name: [{ type: 'string', required: true, message: '必填', trigger: 'change' }]
172
         // name: [{ type: 'string', required: true, message: '必填', trigger: 'change' }]
144
       },
173
       },
145
       activeName: 'deposit',
174
       activeName: 'deposit',
175
+      dialogUpdateFormVisible: false,
176
+      updateFormData: {},
177
+      agentLIstOptions: [],
146
     }
178
     }
147
   },
179
   },
148
   created() {
180
   created() {
164
     getList() {
196
     getList() {
165
       this.listLoading = true
197
       this.listLoading = true
166
       fetchList(this.listQuery).then(response => {
198
       fetchList(this.listQuery).then(response => {
199
+        console.log('list',response.data.rows)
167
         this.list = response.data.rows
200
         this.list = response.data.rows
168
         this.total = response.data.count
201
         this.total = response.data.count
169
         this.listLoading = false
202
         this.listLoading = false
238
     handleDialogClose() {
271
     handleDialogClose() {
239
       this.activeName = 'deposit';
272
       this.activeName = 'deposit';
240
       this.dialogFormVisible = false;
273
       this.dialogFormVisible = false;
274
+      this.dialogUpdateFormVisible = false;
241
     },
275
     },
242
     rewardChips() {
276
     rewardChips() {
243
       this.$refs['rewardForm'].validate((valid) => {
277
       this.$refs['rewardForm'].validate((valid) => {
262
           })
296
           })
263
         }
297
         }
264
       })
298
       })
299
+    },
300
+    handleAgentUpdate(row) {
301
+      this.temp = Object.assign({}, row) // copy obj      
302
+      this.dialogUpdateFormVisible = true;
303
+      this.$nextTick(() => {
304
+        this.$refs['updateForm'].clearValidate()
305
+      })
306
+    },
307
+    updateData() {
308
+      this.$refs['updateForm'].validate((valid) => {
309
+        if (valid) {
310
+          const tempMember = Object.assign({}, this.temp)
311
+          const tempAgent = Object.assign({}, this.updateFormData.value)
312
+          console.log('aaaaa',tempAgent)
313
+          updateBelongAgent(tempMember, tempAgent).then(() => {
314
+            for (const v of this.list) {
315
+              if (v.id === this.temp.id) {
316
+                const index = this.list.indexOf(v)
317
+                this.list.splice(index, 1, this.temp)
318
+                break
319
+              }
320
+            }
321
+            this.dialogUpdateFormVisible = false
322
+            this.$notify({
323
+              title: '成功',
324
+              message: '操作成功',
325
+              type: 'success',
326
+              duration: 2000
327
+            })
328
+            this.getList()
329
+          })
330
+        }
331
+      })
332
+    },
333
+    getRemoteAgentList(query) {
334
+      fetchAgentList(query).then(response => {
335
+        if (!response.data.rows) return
336
+        this.agentLIstOptions = response.data.rows.map(v => ({
337
+          key: v.GambleMember.name,
338
+          value: v.GambleMember
339
+        }))
340
+      })
265
     }
341
     }
266
   },
342
   },
267
   // watch: {
343
   // watch: {

+ 4 - 0
yarn.lock

5787
     vue-style-loader "^3.0.0"
5787
     vue-style-loader "^3.0.0"
5788
     vue-template-es2015-compiler "^1.6.0"
5788
     vue-template-es2015-compiler "^1.6.0"
5789
 
5789
 
5790
+vue-multiselect@^2.0.8:
5791
+  version "2.0.8"
5792
+  resolved "http://registry.npm.taobao.org/vue-multiselect/download/vue-multiselect-2.0.8.tgz#8933c667723b7310d3516b381b834a3da8ca26be"
5793
+
5790
 vue-router@3.0.1:
5794
 vue-router@3.0.1:
5791
   version "3.0.1"
5795
   version "3.0.1"
5792
   resolved "http://registry.npm.taobao.org/vue-router/download/vue-router-3.0.1.tgz#d9b05ad9c7420ba0f626d6500d693e60092cc1e9"
5796
   resolved "http://registry.npm.taobao.org/vue-router/download/vue-router-3.0.1.tgz#d9b05ad9c7420ba0f626d6500d693e60092cc1e9"