Explorar el Código

会员管理-列表

zhengchengwu hace 5 años
padre
commit
f0e71e94aa

+ 21 - 7
package-lock.json Ver fichero

@@ -4727,12 +4727,14 @@
4727 4727
         "balanced-match": {
4728 4728
           "version": "1.0.0",
4729 4729
           "bundled": true,
4730
-          "dev": true
4730
+          "dev": true,
4731
+          "optional": true
4731 4732
         },
4732 4733
         "brace-expansion": {
4733 4734
           "version": "1.1.11",
4734 4735
           "bundled": true,
4735 4736
           "dev": true,
4737
+          "optional": true,
4736 4738
           "requires": {
4737 4739
             "balanced-match": "^1.0.0",
4738 4740
             "concat-map": "0.0.1"
@@ -4747,17 +4749,20 @@
4747 4749
         "code-point-at": {
4748 4750
           "version": "1.1.0",
4749 4751
           "bundled": true,
4750
-          "dev": true
4752
+          "dev": true,
4753
+          "optional": true
4751 4754
         },
4752 4755
         "concat-map": {
4753 4756
           "version": "0.0.1",
4754 4757
           "bundled": true,
4755
-          "dev": true
4758
+          "dev": true,
4759
+          "optional": true
4756 4760
         },
4757 4761
         "console-control-strings": {
4758 4762
           "version": "1.1.0",
4759 4763
           "bundled": true,
4760
-          "dev": true
4764
+          "dev": true,
4765
+          "optional": true
4761 4766
         },
4762 4767
         "core-util-is": {
4763 4768
           "version": "1.0.2",
@@ -4874,7 +4879,8 @@
4874 4879
         "inherits": {
4875 4880
           "version": "2.0.3",
4876 4881
           "bundled": true,
4877
-          "dev": true
4882
+          "dev": true,
4883
+          "optional": true
4878 4884
         },
4879 4885
         "ini": {
4880 4886
           "version": "1.3.5",
@@ -4886,6 +4892,7 @@
4886 4892
           "version": "1.0.0",
4887 4893
           "bundled": true,
4888 4894
           "dev": true,
4895
+          "optional": true,
4889 4896
           "requires": {
4890 4897
             "number-is-nan": "^1.0.0"
4891 4898
           }
@@ -4900,6 +4907,7 @@
4900 4907
           "version": "3.0.4",
4901 4908
           "bundled": true,
4902 4909
           "dev": true,
4910
+          "optional": true,
4903 4911
           "requires": {
4904 4912
             "brace-expansion": "^1.1.7"
4905 4913
           }
@@ -4907,12 +4915,14 @@
4907 4915
         "minimist": {
4908 4916
           "version": "0.0.8",
4909 4917
           "bundled": true,
4910
-          "dev": true
4918
+          "dev": true,
4919
+          "optional": true
4911 4920
         },
4912 4921
         "minipass": {
4913 4922
           "version": "2.3.5",
4914 4923
           "bundled": true,
4915 4924
           "dev": true,
4925
+          "optional": true,
4916 4926
           "requires": {
4917 4927
             "safe-buffer": "^5.1.2",
4918 4928
             "yallist": "^3.0.0"
@@ -4931,6 +4941,7 @@
4931 4941
           "version": "0.5.1",
4932 4942
           "bundled": true,
4933 4943
           "dev": true,
4944
+          "optional": true,
4934 4945
           "requires": {
4935 4946
             "minimist": "0.0.8"
4936 4947
           }
@@ -5011,7 +5022,8 @@
5011 5022
         "number-is-nan": {
5012 5023
           "version": "1.0.1",
5013 5024
           "bundled": true,
5014
-          "dev": true
5025
+          "dev": true,
5026
+          "optional": true
5015 5027
         },
5016 5028
         "object-assign": {
5017 5029
           "version": "4.1.1",
@@ -5023,6 +5035,7 @@
5023 5035
           "version": "1.4.0",
5024 5036
           "bundled": true,
5025 5037
           "dev": true,
5038
+          "optional": true,
5026 5039
           "requires": {
5027 5040
             "wrappy": "1"
5028 5041
           }
@@ -5144,6 +5157,7 @@
5144 5157
           "version": "1.0.2",
5145 5158
           "bundled": true,
5146 5159
           "dev": true,
5160
+          "optional": true,
5147 5161
           "requires": {
5148 5162
             "code-point-at": "^1.0.0",
5149 5163
             "is-fullwidth-code-point": "^1.0.0",

+ 9 - 0
src/api/member/member.js Ver fichero

@@ -0,0 +1,9 @@
1
+import request from '@/utils/request'
2
+
3
+export function GetMembers(params) {
4
+  return request({
5
+    url: '/api/members',
6
+    method: 'get',
7
+    params: params
8
+  })
9
+}

+ 2 - 0
src/router/index.js Ver fichero

@@ -8,6 +8,7 @@ import Layout from '@/views/layout/Layout'
8 8
 
9 9
 import role from './modules/role'
10 10
 import article from './modules/article'
11
+import member from './modules/member'
11 12
 
12 13
 /** note: submenu only apppear when children.length>=1
13 14
  *   detail see  https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
@@ -68,6 +69,7 @@ var _constant_router_map = [{
68 69
 ]
69 70
 
70 71
 var _asy_router_map = [
72
+  member,
71 73
   article,
72 74
   role
73 75
 ]

+ 22 - 0
src/router/modules/member.js Ver fichero

@@ -0,0 +1,22 @@
1
+import Layout from '@/views/layout/Layout'
2
+//会员管理模块
3
+
4
+export default {
5
+  alwaysShow: true,
6
+  path: '/members',
7
+  component: Layout,
8
+  redirect: 'noredirect',
9
+  name: 'members',
10
+  meta: {
11
+    title: '会员管理',
12
+    icon: 'peoples'
13
+  },
14
+  children: [
15
+    {
16
+      path: '/members',
17
+      component: () => import('@/scrm_pages/members/members'),
18
+      name: 'memberslist',
19
+      meta: { title: '会员管理', noCache: true }
20
+    },
21
+  ]
22
+}

+ 245 - 0
src/scrm_pages/members/members.vue Ver fichero

@@ -0,0 +1,245 @@
1
+<template>
2
+  <div class="main-contain">
3
+    <div class="position">
4
+      <bread-crumb :crumbs='crumbs'></bread-crumb>
5
+      <el-button  style="float:right;" type="primary" size="small" icon="el-icon-circle-plus-outline">添加会员</el-button>
6
+    </div>
7
+    <div class="app-container">
8
+          <div style="margin-bottom: 10px">
9
+            <el-row :gutter="24">
10
+              <el-col :span="8">
11
+                  <el-input style="width: 300px" v-model="listQuery.search" placeholder="请输入您需要搜索的内容"></el-input>
12
+                  <el-button type="primary"  icon="el-icon-search" @click="changeKey">搜索</el-button>
13
+              </el-col>
14
+            </el-row>
15
+          </div>
16
+          <div class="cell clearfix">
17
+            <label class="title"> <span class="name">创建时间</span>: </label>
18
+            <el-date-picker v-model="listQuery.start_time" prefix-icon="el-icon-date"  @change="changeTime" :editable="false" style="width: 196px;" type="date" placeholder="选择日期时间"
19
+            align="right" format="yyyy-MM-dd" value-format="yyyy-MM-dd" ></el-date-picker>
20
+            <span class>-</span>
21
+            <el-date-picker v-model="listQuery.end_time" prefix-icon="el-icon-date" @change="changeTime" :editable="false" style="width: 196px;" type="date" placeholder="选择日期时间"
22
+            align="right" format="yyyy-MM-dd" value-format="yyyy-MM-dd" ></el-date-picker>
23
+        </div>
24
+          <div class="cell clearfix">
25
+            <label class="title"><span class="name">等级</span>:</label>
26
+             <div class="time">
27
+                <ul class="">
28
+                  <li :class="0==levelType?'active':''"  @click="selectLevel(0)">全部</li>
29
+                  <li :class="item.id==levelType?'active':''"  v-for="item in levelCards" :key="item.id"  @click="selectLevel(item.id)">{{item.card_name}}</li>
30
+                </ul>
31
+             </div>
32
+          </div>
33
+          <div class="cell clearfix">
34
+            <label class="title"><span class="name">来源方式</span>:</label>
35
+             <div class="time">
36
+                <ul class="">
37
+                  <li :class="0==sourceType?'active':''"  @click="selectSource(0)">全部</li>
38
+                  <li :class="item.id==sourceType?'active':''"  v-for="item in sourceOptions" :key="item.id"  @click="selectSource(item.id)">{{item.name}}</li>
39
+                </ul>
40
+             </div>
41
+          </div>
42
+          <div class="cell clearfix">
43
+            <label class="title"><span class="name">标签</span>:</label>
44
+             <div class="time">
45
+                <ul class="">
46
+                  <li :class="0==tagType?'active':''"  @click="selectTag(0)">全部</li>
47
+                  <li :class="item.id==tagType?'active':''"  v-for="item in tagOptions" :key="item.id"  @click="selectTag(item.id)">{{item.tag_name}}</li>
48
+                </ul>
49
+             </div>
50
+          </div>
51
+          <div class="filter-container" style="margin-top: 10px;margin-left: 5px">
52
+            <el-checkbox style="width: 30px"  >全选</el-checkbox>
53
+            <el-button size="small" icon="el-icon-delete" >删除</el-button>
54
+            <el-button size="small" icon="el-icon-delete" >删除</el-button>
55
+          </div>
56
+          <el-table ref="multipleTable" :cell-class-name="cellStyleName" :header-cell-style="{ backgroundColor: 'rgb(245, 247, 250)'}" :data="membersData" border fit highlight-current-row  style="width: 100%;margin-top: 10px;">
57
+             <el-table-column
58
+                align="center"
59
+                type="selection"
60
+                width="55">
61
+             </el-table-column>
62
+             <el-table-column label="会员" align="center">
63
+               <template slot-scope="scope">
64
+                   <img :src="memberAvatar(scope.row)" alt="" srcset="" style="width:50px;height:50px; border-radius:50%" >
65
+                   <span>{{scope.row.name}}</span>
66
+               </template>
67
+             </el-table-column>
68
+            <el-table-column label="文章标题" align="center">
69
+              <template slot-scope="scope">
70
+
71
+              </template>
72
+            </el-table-column>
73
+            <el-table-column label="阅读量" align="center">
74
+              <template slot-scope="scope">
75
+
76
+              </template>
77
+            </el-table-column>
78
+            <el-table-column label="评论数" align="center">
79
+              <template slot-scope="scope">
80
+
81
+              </template>
82
+            </el-table-column>
83
+            <el-table-column label="点赞数" align="center">
84
+              <template slot-scope="scope">
85
+
86
+              </template>
87
+            </el-table-column>
88
+            <el-table-column label="操作" align="center">
89
+              <template slot-scope="scope">
90
+                <el-tooltip class="item" effect="dark" content="编辑" placement="top">
91
+                  <el-button
92
+                    size="mini"
93
+                    type="primary"
94
+                    icon="el-icon-edit-outline"
95
+                    >
96
+                  </el-button>
97
+                </el-tooltip>
98
+              </template>
99
+            </el-table-column>
100
+          </el-table>
101
+          <el-pagination
102
+            @size-change="handleSizeChange"
103
+            @current-change="handleCurrentChange"
104
+            :page-sizes="[10,20,50,100]"
105
+            :page-size="10"
106
+            background
107
+            style="margin-top:20px;float: right"
108
+            layout="total, sizes, prev, pager, next, jumper"
109
+            :total="total">
110
+          </el-pagination>
111
+    </div>
112
+  </div>
113
+</template>
114
+
115
+<script>
116
+  import {GetMembers} from "@/api/member/member";
117
+  import BreadCrumb from '../components/bread-crumb'
118
+  export default {
119
+    name: 'commentList',
120
+    components:{
121
+      BreadCrumb
122
+    },
123
+    data(){
124
+      return{
125
+        crumbs: [
126
+          { path: false, name: '会员管理' },
127
+          { path: false, name: '会员列表' }
128
+        ],
129
+        time: '',
130
+        active: true,
131
+        levelType: 0,
132
+        levelCards:[],
133
+        sourceType: 0,
134
+        sourceOptions:{},
135
+        tagType: 0,
136
+        tagOptions:[],
137
+        membersData:[],
138
+        total:0,
139
+        listQuery:{
140
+            page:1,
141
+            limit:10,
142
+            search:'',
143
+            start_time:'',
144
+            end_time:'',
145
+            source:0,
146
+            tag:0,
147
+            level:0,
148
+            init:1,
149
+        },
150
+      }
151
+    },
152
+    methods:{
153
+        GetMembers(){
154
+            GetMembers(this.listQuery).then(response=>{
155
+                var res = response.data;
156
+                if(res.state == 1) {
157
+                    this.membersData = res.data.members;
158
+                    this.total = res.data.total;
159
+                    if(typeof(res.data.cards) != 'undefined') {
160
+                        this.levelCards = res.data.cards;
161
+                    }
162
+                    if(typeof(res.data.tags) != 'undefined') {
163
+                        this.tagOptions = res.data.tags;
164
+                    }
165
+                    this.listQuery.init = 0;
166
+                }else {
167
+                    this.$message.error(res.msg);
168
+                }
169
+            }).catch(e=>{});
170
+        },
171
+        memberAvatar(row) {
172
+            if(typeof(row.avatar) == "undefined" || !row.avatar || row.avatar.length==0) {
173
+                if(row.gender == 2) {
174
+                    return 'https://images.shengws.com/201809182128222.png';
175
+                }else {
176
+                    return 'https://images.shengws.com/201809182128111.png';
177
+                }
178
+            }else {
179
+                return row.avatar
180
+            }
181
+        },
182
+        cellStyleName({row, column, rowIndex, columnIndex}){
183
+            if (columnIndex===1) {
184
+                return 'member-name-box';
185
+            }
186
+            return '';
187
+        },
188
+        selectSource(id) {
189
+            this.listQuery.source = id;
190
+            this.sourceType = id;
191
+            this.GetMembers();
192
+        },
193
+        selectLevel(id) {
194
+            this.listQuery.level = id;
195
+            this.levelType = id;
196
+            this.GetMembers();
197
+        },
198
+        selectTag(id) {
199
+            this.listQuery.tag = id;
200
+            this.tagType = id;
201
+            this.GetMembers();
202
+        },
203
+        changeKey(){
204
+            this.GetMembers();
205
+        },
206
+        changeTime(){
207
+            this.GetMembers();
208
+        },
209
+        handleSizeChange(limit) {
210
+            this.listQuery.limit = limit;
211
+            this.GetMembers();
212
+        },
213
+        handleCurrentChange(page) {
214
+            this.listQuery.page = page;
215
+            this.GetMembers();
216
+        }
217
+    },
218
+    created(){
219
+        this.sourceOptions = this.$store.getters.sources;
220
+        this.GetMembers();
221
+    }
222
+  }
223
+</script>
224
+
225
+<style scoped>
226
+  /*.app-container .cell.clearfix .time ul li {*/
227
+    /*float: left;*/
228
+    /*list-style: none;*/
229
+    /*cursor: pointer;*/
230
+    /*padding: 6px 20px;*/
231
+    /*color: #606266;*/
232
+    /*border-radius: 4px;*/
233
+    /*margin: 0 8px 0 0;*/
234
+    /*font-size: 14px;*/
235
+    /*text-align: center;*/
236
+  /*}*/
237
+</style>
238
+
239
+<style>
240
+
241
+.member-name-box .cell{
242
+    float: left;
243
+    text-align: left;
244
+};
245
+</style>

+ 3 - 0
src/store/getters.js Ver fichero

@@ -8,6 +8,9 @@ const getters = {
8 8
   addRouters: state => state.xt_permission.addRouters,
9 9
   errorLogs: state => state.errorLog.logs,
10 10
 
11
+  
12
+  sources: state => state.members.sources,
13
+
11 14
   xt_permission: state => state.xt_permission,
12 15
   xt_user: state => state.xt_user
13 16
 }

+ 2 - 0
src/store/index.js Ver fichero

@@ -5,6 +5,7 @@ import errorLog from './modules/errorLog'
5 5
 import tagsView from './modules/tagsView'
6 6
 import xt_user from './modules/xt_user'
7 7
 import xt_permission from './modules/xt_permission'
8
+import members from './modules/members'
8 9
 
9 10
 import getters from './getters'
10 11
 
@@ -16,6 +17,7 @@ const store = new Vuex.Store({
16 17
     errorLog,
17 18
     tagsView,
18 19
     xt_user,
20
+    members,
19 21
     xt_permission
20 22
   },
21 23
   getters

+ 25 - 0
src/store/modules/members.js Ver fichero

@@ -0,0 +1,25 @@
1
+const members = {
2
+    state: {
3
+        sources:{
4
+            1:{id:1, name:"关注公众号"},
5
+            2:{id:2, name:"关注机构"},
6
+            4:{id:4, name:"申请会员"},
7
+            5:{id:5, name:"普通下单"},
8
+            6:{id:6, name:"外部导入"},
9
+            7:{id:7, name:"手动录入"},
10
+            8:{id:8, name:"有赞同步"},
11
+            9:{id:9, name:"肾友杯"},
12
+            10:{id:10, name:"圣卫士"},
13
+            11:{id:11, name:"血透"},
14
+        },
15
+    },
16
+    mutations: {
17
+      
18
+    },
19
+    action: {
20
+  
21
+    }
22
+  }
23
+  
24
+  export default members
25
+  

+ 1 - 1
static/neditor/neditor.config.js Ver fichero

@@ -40,7 +40,7 @@
40 40
         scrawlUrlPrefix: "https://images.shengws.com/",
41 41
         videoUrlPrefix: "https://images.shengws.com/",
42 42
         fileUrlPrefix: "https://images.shengws.com/",
43
-        uptokenUrl:"http://api.xt.test.sgjyun.com/api/qiniu/uptoken",
43
+        uptokenUrl:"http://api.test1.sgjyun.com/api/qiniu/uptoken",
44 44
         catcherLocalDomain: "",
45 45
         //工具栏上的所有的功能按钮和下拉框,可以在new编辑器的实例时选择自己需要的重新定义
46 46
         toolbars: [