Browse Source

Merge branch 'master' of http://git.ycjcjy.com/zhiyuxing/pc-admin

魏熙美 5 years ago
parent
commit
2b701535e7

+ 30
- 1
src/config/api.js View File

@@ -127,6 +127,35 @@ const apis = {
127 127
       url: `${commPrefix}/customer/add`
128 128
     }
129 129
   },
130
+  activity:{
131
+    list:{
132
+      method:'get',
133
+      url: `${commPrefix}/iBuildingDynamicList`
134
+    },
135
+    buildingAll:{
136
+      method:'get',
137
+      url: `${commPrefix}/buildingAll`
138
+    },
139
+    activityAdd:{
140
+      method:'post',
141
+      url: `${commPrefix}/buildingDynamic/add`
142
+    },
143
+    activityDetails:{
144
+      method:'get',
145
+      url: `${commPrefix}/buildingDynamic/Details`
146
+    },
147
+    updateActivity:{
148
+      method:'PUT',
149
+      url: `${commPrefix}/buildingDynamic/update`
150
+    },
151
+    getSignList:{
152
+      method:'get',
153
+      url: `${commPrefix}/SignList`
154
+    },
155
+    finishActivity:{
156
+      method:'put',
157
+      url: `${commPrefix}/buildingDynamic/finish`
158
+  },
130 159
   recommendCustomer:{
131 160
     list:{
132 161
       method:'get',
@@ -188,6 +217,7 @@ const apis = {
188 217
       method: 'get',
189 218
       url: `${commPrefix}/taNewsType/:id`
190 219
     }
220
+  }
191 221
   },
192 222
   points:{
193 223
     list:{
@@ -244,5 +274,4 @@ const apis = {
244 274
     }
245 275
   },
246 276
 }
247
-
248 277
 export default apis

+ 2
- 0
src/store/index.js View File

@@ -14,10 +14,12 @@ const store = new Vuex.Store({
14 14
     customer: require('./modules/customer').default,
15 15
     building: require('./modules/building').default,
16 16
     img: require('./modules/img').default,
17
+    activity: require('./modules/activity').default,
17 18
     goods: require('./modules/goods').default,
18 19
     points: require('./modules/points').default,
19 20
     exchange: require('./modules/exchange').default,
20 21
     news
22
+
21 23
   }
22 24
 })
23 25
 

+ 81
- 0
src/store/modules/activity.js View File

@@ -0,0 +1,81 @@
1
+import apis from '../../config/api'
2
+import request from '../../utils/request'
3
+
4
+export default {
5
+  namespaced: true,
6
+  state: {
7
+    list: [],
8
+    detail: {},
9
+  },
10
+  mutations: {},
11
+  actions: {
12
+    getActivityList (context, payload) {
13
+      return request({
14
+        ...apis.activity.list,
15
+        params: payload,
16
+      })
17
+    },
18
+    addActivity({ commit }, payload) {
19
+      return new Promise((resolve, reject) => {
20
+        request({
21
+          ...apis.activity.activityAdd,
22
+          data: payload,
23
+        }).then((data) => {
24
+          window.console.log(data)
25
+          commit('updateList', { ...data, list: data.records})
26
+          resolve(data)
27
+        }).catch(({ message }) => {
28
+          if (typeof message === 'string') {
29
+            reject(message)
30
+          }
31
+        })
32
+      })
33
+    },
34
+    activityDetails (context, payload) {
35
+      return request({
36
+        ...apis.activity.activityDetails,
37
+        params: payload,
38
+      })
39
+    },
40
+    updateActivity({ commit }, payload) {
41
+      return new Promise((resolve, reject) => {
42
+        request({
43
+          ...apis.activity.updateActivity,
44
+          data: payload,
45
+        }).then((data) => {
46
+          window.console.log(data)
47
+          commit('updateList', { ...data, list: data.records})
48
+          resolve(data)
49
+        }).catch(({ message }) => {
50
+          if (typeof message === 'string') {
51
+            reject(message)
52
+          }
53
+        })
54
+      })
55
+    },
56
+    // 活动报名列表
57
+    getSignList (context, payload) {
58
+      return request({
59
+        ...apis.activity.getSignList,
60
+        params: payload,
61
+      })
62
+    },
63
+    // 结束报名
64
+    finishActivity({ commit }, payload) {
65
+      return new Promise((resolve, reject) => {
66
+        request({
67
+          ...apis.activity.finishActivity,
68
+          data: payload,
69
+        }).then((data) => {
70
+          window.console.log(data)
71
+          commit('updateList', { ...data, list: data.records})
72
+          resolve(data)
73
+        }).catch(({ message }) => {
74
+          if (typeof message === 'string') {
75
+            reject(message)
76
+          }
77
+        })
78
+      })
79
+    },
80
+  },
81
+}

+ 256
- 0
src/views/activity/add.vue View File

@@ -0,0 +1,256 @@
1
+<template>
2
+  <el-form ref="form" :model="dynamic" label-width="160px">
3
+    <el-form-item label="所属项目">
4
+      <el-select v-model="activityQuery.buildingId" placeholder="请选择">
5
+        <el-option v-for="(build,i) in buildings.list || []" :key="i" :label="build.buildingName" :value="build.buildingId"></el-option>
6
+      </el-select>
7
+    </el-form-item>
8
+    <el-form-item label="主图:">
9
+          <el-upload
10
+            :action="upFileUrl"
11
+            name='file'
12
+            list-type="picture-card"
13
+            :headers="uploadHeaders"
14
+            :file-list="imgList"
15
+            :show-file-list="true"
16
+            :before-upload="beforeImgUpload"
17
+            :on-success="handleAvatarSuccess"
18
+            :on-remove="handleRemove">
19
+            <i class="el-icon-plus"></i>
20
+          </el-upload>
21
+          <el-dialog :visible.sync="dialogVisible">
22
+            <img width="100%" :src="dialogImageUrl" alt="">
23
+          </el-dialog>
24
+    </el-form-item>
25
+    <el-form-item label="活动标题">
26
+      <el-input v-model="activityQuery.title"></el-input>
27
+    </el-form-item>
28
+    <el-form-item label="活动时间">
29
+       <el-date-picker v-model="activityQuery.startDate" type="date" placeholder="选择日期"/>
30
+        <span>-</span>
31
+       <el-date-picker v-model="activityQuery.endDate" type="date" placeholder="选择日期"/>   
32
+    </el-form-item>
33
+    <el-form-item label="活动地点">
34
+      <el-input  v-model="activityQuery.address"></el-input>
35
+    </el-form-item>
36
+    <el-form-item  label="活动人数">
37
+      <el-input v-model="activityQuery.personNum" ></el-input>
38
+    </el-form-item>
39
+    <!-- <el-form-item label="链接地址">
40
+      <el-input v-model="dynamic.url"></el-input>
41
+    </el-form-item> -->
42
+    <el-form-item label="活动详情">
43
+      <div id="websiteEditorElem" style="height: 400px"></div>
44
+    </el-form-item>
45
+    <el-form-item label="是否需要报名">
46
+       <el-radio v-model="activityQuery.isEnlist" label="1">是</el-radio>
47
+       <el-radio v-model="activityQuery.isEnlist" label="0">否</el-radio>
48
+    </el-form-item>
49
+    <el-form-item label="活动时间" v-if="activityQuery.isEnlist == '1'">
50
+       <el-date-picker v-model="activityQuery.enlistStart" type="date" placeholder="选择日期"/>
51
+        <span>-</span>
52
+       <el-date-picker v-model="activityQuery.enlistEnd" type="date" placeholder="选择日期"/>   
53
+    </el-form-item>
54
+    <el-form-item>
55
+      <el-button type="primary" @click="onSubmit">保存</el-button>
56
+
57
+    </el-form-item>
58
+  </el-form>
59
+</template>
60
+
61
+<script>
62
+import { createNamespacedHelpers } from 'vuex'
63
+import apis from '../../config/api'
64
+import E from 'wangeditor'
65
+
66
+const { mapState: mapDynamicState, mapActions: mapDynamicActions, mapMutations: mapDynamicMutations } = createNamespacedHelpers('building')
67
+const { mapState: mapActivityState, mapActions: mapActivityActions } = createNamespacedHelpers('activity')
68
+const { mapState: mapBuildingState, mapActions: mapBuildingActions } = createNamespacedHelpers('building')
69
+const { mapActions: mapImgActions } = createNamespacedHelpers('img')
70
+
71
+export default {
72
+  data () {
73
+    return {
74
+      url:'',
75
+      buildingId:'',
76
+      upFileUrl: apis.file.upload.url,
77
+      radio:'1',
78
+      imgList: [],
79
+      dialogVisible: false,
80
+      dialogImageUrl: "",
81
+      activityQuery: {
82
+       url:'',
83
+       startDate:'',
84
+       endDate:'',
85
+       buildingId:'',
86
+       title:'',
87
+       isEnlist:'1',
88
+       text:'',
89
+       enlistStart:'',
90
+       enlistEnd:'',
91
+       personNum:'',
92
+      }
93
+      
94
+    }
95
+  },
96
+  computed: {
97
+    ...mapDynamicState({
98
+      detail: x => x.detail,
99
+    }),
100
+    dynamic: {
101
+      get () {
102
+        return this.detail
103
+      },
104
+      set (val) {
105
+        return this.updateDetail(val)
106
+      }
107
+    },
108
+    ...mapBuildingState({
109
+      buildings: x => x.buildings
110
+    }),
111
+    uploadHeaders () {
112
+                const token = localStorage.getItem('x-token') || ''
113
+                return {
114
+                    Authorization: `Bearer ${token}`
115
+                }
116
+            }
117
+  },
118
+  methods: {
119
+    ...mapBuildingActions([
120
+      'getBuildings'
121
+    ]),
122
+    ...mapDynamicMutations([
123
+      'updateDetail'
124
+    ]),
125
+    ...mapDynamicActions([
126
+      'getDetail',
127
+      'editDynamics'
128
+    ]),
129
+        ...mapActivityActions([
130
+      'addActivity',
131
+    ]),
132
+    ...mapImgActions([
133
+      'uploadImg'
134
+    ]),
135
+    beforeImgUpload (file) {
136
+      if (file.type !== 'image/jpeg' && file.type !== 'image/png') {
137
+        this.$message.error('上传图片只能是 JPG 或 PNG 格式!')
138
+        return false
139
+      }
140
+      // if (file.size / 1024 > 300) {
141
+      //   this.$message.error('图片大小不允许超过300k!')
142
+      //   return false
143
+      // }
144
+      this.loading = this.$loading({
145
+        lock: true,
146
+        text: '上传中...',
147
+        spinner: 'el-icon-loading',
148
+        background: 'rgba(0, 0, 0, 0.7)'
149
+      })
150
+
151
+      return true
152
+    },
153
+    handleRemove(file, fileList) {
154
+      this.imgList = fileList;
155
+    },
156
+
157
+    handleAvatarSuccess (res) {
158
+      this.activityQuery.url = res.data
159
+      this.updateDetail({...this.dynamic, imgUrl: res.data})
160
+      this.loading.close()
161
+    },
162
+    onSubmit () {
163
+      // if (!this.detail.dynamicId) {
164
+        // 新增
165
+        console.log('this.imgList[0]',this.imgList[0])
166
+        // this.activityQuery.url = this.imgList[0]
167
+        this.addActivity(
168
+          JSON.stringify(this.activityQuery)
169
+        ).then(() => {
170
+          this.onCancel()
171
+          
172
+        })
173
+        this.$router.push({ name: "activity-list" });
174
+      // } else {
175
+      //   // 修改
176
+      //   this.editDynamics({
177
+      //     detail: JSON.stringify(this.detail)
178
+      //   }).then(() => {
179
+      //     this.onCancel()
180
+      //   })
181
+      // }
182
+    },
183
+    onCancel () {
184
+      this.$router.push({name: 'dynamiclist'})
185
+    }
186
+  },
187
+  mounted () {
188
+    const _that = this
189
+    const phoneEditor = new E('#websiteEditorElem')
190
+    phoneEditor.customConfig.zIndex = 1
191
+    phoneEditor.customConfig.onchange = function (html) {
192
+      _that.dynamic = {..._that.dynamic, url: html}
193
+        _that.activityQuery.text =_that.dynamic.url
194
+    }
195
+    // phoneEditor.customConfig.uploadImgServer = this.upFileUrl
196
+    // phoneEditor.customConfig.uploadFileName = 'uploadFiles'
197
+
198
+    phoneEditor.customConfig.customUploadImg = function (files, insert) {
199
+      _that.uploadImg(files[0]).then(data => {
200
+        insert(data)
201
+      })
202
+    }
203
+    phoneEditor.customConfig.menus = [
204
+      'head',  // 标题
205
+      'bold',  // 粗体
206
+      'fontSize',  // 字号
207
+      'fontName',  // 字体
208
+      'italic',  // 斜体
209
+      'underline',  // 下划线
210
+      'strikeThrough',  // 删除线
211
+      'foreColor',  // 文字颜色
212
+      'backColor',  // 背景颜色
213
+      'justify',  // 对齐方式
214
+      'image',  // 插入图片
215
+    ]
216
+    phoneEditor.create()
217
+    
218
+    this.getBuildings({
219
+      pageNum: 1,
220
+      pageSize: 100,
221
+    }).then(() => {
222
+      if ((this.$route.query.id || '') !== '') {
223
+        this.getDetail({id: this.$route.query.id}).then((data) => {
224
+          phoneEditor.txt.html(data.url)
225
+        })
226
+      }
227
+    })
228
+  }
229
+}
230
+</script>
231
+
232
+<style lang="scss">
233
+  .avatar-uploader .el-upload {
234
+    border: 1px dashed #d9d9d9;
235
+    border-radius: 6px;
236
+    cursor: pointer;
237
+    position: relative;
238
+    overflow: hidden;
239
+  }
240
+  .avatar-uploader .el-upload:hover {
241
+    border-color: #409EFF;
242
+  }
243
+  .avatar-uploader-icon {
244
+    font-size: 28px;
245
+    color: #8c939d;
246
+    width: 178px;
247
+    height: 178px;
248
+    line-height: 178px;
249
+    text-align: center;
250
+  }
251
+  .avatar {
252
+    width: 178px;
253
+    height: 178px;
254
+    display: block;
255
+  }
256
+</style>

+ 260
- 0
src/views/activity/edit.vue View File

@@ -0,0 +1,260 @@
1
+<template>
2
+  <el-form ref="form" label-width="160px">
3
+    <el-form-item label="所属项目">
4
+      <el-select v-model="activityQuery.buildingId" placeholder="请选择">
5
+        <el-option v-for="(build,i) in buildings.list || []" :key="i" :label="build.buildingName" :value="build.buildingId"></el-option>
6
+      </el-select>
7
+    </el-form-item>
8
+    <el-form-item label="主图:">
9
+          <el-upload
10
+                :headers="uploadHeaders"
11
+                :action="upFileUrl"
12
+                :show-file-list="false"
13
+                :on-success="handleAvatarSuccess">
14
+              <img v-if="imageUrl" :src="imageUrl" class="avatar">
15
+              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
16
+          </el-upload>
17
+    </el-form-item>
18
+    <el-form-item label="活动标题">
19
+      <el-input v-model="activityQuery.title"></el-input>
20
+    </el-form-item>
21
+    <el-form-item label="活动时间">
22
+       <el-date-picker v-model="activityQuery.startDate" type="date" placeholder="选择日期"/>
23
+        <span>-</span>
24
+       <el-date-picker v-model="activityQuery.endDate" type="date" placeholder="选择日期"/>   
25
+    </el-form-item>
26
+    <el-form-item label="活动地点">
27
+      <el-input  v-model="activityQuery.address"></el-input>
28
+    </el-form-item>
29
+    <el-form-item label="活动人数">
30
+      <el-input v-model="activityQuery.personNum"></el-input>
31
+    </el-form-item>
32
+    <!-- <el-form-item label="链接地址">
33
+      <el-input v-model="dynamic.url"></el-input>
34
+    </el-form-item> -->
35
+    <el-form-item label="活动详情">
36
+      <div id="websiteEditorElem" style="height: 400px"></div>
37
+    </el-form-item>
38
+    <el-form-item label="是否需要报名">
39
+       <el-radio v-model="activityQuery.isEnlist" label="1">是</el-radio>
40
+       <el-radio v-model="activityQuery.isEnlist" label="0">否</el-radio>
41
+    </el-form-item>
42
+    <el-form-item label="活动时间" v-if="activityQuery.isEnlist == '1'">
43
+       <el-date-picker v-model="activityQuery.enlistStart" type="date" placeholder="选择日期"/>
44
+        <span>-</span>
45
+       <el-date-picker v-model="activityQuery.enlistEnd" type="date" placeholder="选择日期"/>   
46
+    </el-form-item>
47
+    <el-form-item>
48
+      <el-button type="primary" @click="onSubmit">保存</el-button>
49
+      <el-button @click="onCancel">取消</el-button>
50
+    </el-form-item>
51
+  </el-form>
52
+</template>
53
+
54
+<script>
55
+import { createNamespacedHelpers } from 'vuex'
56
+import apis from '../../config/api'
57
+import E from 'wangeditor'
58
+
59
+const { mapState: mapDynamicState, mapActions: mapDynamicActions, mapMutations: mapDynamicMutations } = createNamespacedHelpers('building')
60
+const { mapState: mapActivityState, mapActions: mapActivityActions } = createNamespacedHelpers('activity')
61
+const { mapState: mapBuildingState, mapActions: mapBuildingActions } = createNamespacedHelpers('building')
62
+const { mapActions: mapImgActions } = createNamespacedHelpers('img')
63
+
64
+export default {
65
+  data () {
66
+    return {
67
+      url:'',
68
+      buildingId:'',
69
+      upFileUrl: apis.file.upload.url,
70
+      radio:'1',
71
+      imageUrl: '',
72
+      imgList: [],
73
+      dialogVisible: false,
74
+      dialogImageUrl: "",
75
+      activityQuery: {
76
+       dynamicId:'',
77
+       buildingId:'',
78
+       url:'',
79
+       startDate:'',
80
+       endDate:'',
81
+       buildingId:'',
82
+       title:'',
83
+       isEnlist:'1',
84
+       text:'',
85
+       enlistStart:'',
86
+       enlistEnd:'',
87
+       address:'',
88
+       personNum:''
89
+      }
90
+      
91
+    }
92
+  },
93
+  computed: {
94
+    ...mapDynamicState({
95
+      detail: x => x.detail,
96
+    }),
97
+    dynamic: {
98
+      get () {
99
+        return this.detail
100
+      },
101
+      set (val) {
102
+        return this.updateDetail(val)
103
+      }
104
+    },
105
+    ...mapBuildingState({
106
+      buildings: x => x.buildings
107
+    }),
108
+    uploadHeaders () {
109
+                const token = localStorage.getItem('x-token') || ''
110
+                return {
111
+                    Authorization: `Bearer ${token}`
112
+                }
113
+            }
114
+  },
115
+  methods: {
116
+    ...mapBuildingActions([
117
+      'getBuildings'
118
+    ]),
119
+    ...mapDynamicMutations([
120
+      'updateDetail'
121
+    ]),
122
+    ...mapDynamicActions([
123
+      'getDetail',
124
+      'editDynamics'
125
+    ]),
126
+        ...mapActivityActions([
127
+      'addActivity',
128
+      'activityDetails',
129
+      'updateActivity'
130
+    ]),
131
+    ...mapImgActions([
132
+      'uploadImg'
133
+    ]),
134
+    beforeImgUpload (file) {
135
+      if (file.type !== 'image/jpeg' && file.type !== 'image/png') {
136
+        this.$message.error('上传图片只能是 JPG 或 PNG 格式!')
137
+        return false
138
+      }
139
+      // if (file.size / 1024 > 300) {
140
+      //   this.$message.error('图片大小不允许超过300k!')
141
+      //   return false
142
+      // }
143
+      this.loading = this.$loading({
144
+        lock: true,
145
+        text: '上传中...',
146
+        spinner: 'el-icon-loading',
147
+        background: 'rgba(0, 0, 0, 0.7)'
148
+      })
149
+
150
+      return true
151
+    },
152
+    handleRemove(file, fileList) {
153
+      this.imgList = fileList;
154
+    },
155
+
156
+    handleAvatarSuccess (res) {
157
+      this.activityQuery.url = res.data
158
+      this.updateDetail({...this.dynamic, imgUrl: res.data})
159
+      this.loading.close()
160
+    },
161
+    onSubmit () {
162
+        // 新增
163
+        console.log('this.imgList[0]',this.imgList[0])
164
+        // this.activityQuery.url = this.imgList[0]
165
+        this.updateActivity(
166
+           JSON.stringify(this.activityQuery)
167
+        ).then(() => {
168
+          this.onCancel()
169
+          
170
+        })
171
+        this.$router.push({ name: "activity-list" });
172
+    },
173
+    onCancel () {
174
+      this.$router.push({name: 'dynamiclist'})
175
+    },
176
+    getDetails(){
177
+      this.activityQuery.dynamicId = this.$route.query.row
178
+        this.activityDetails(this.activityQuery).then((data) => {
179
+          console.log('55',data)
180
+        this.activityQuery.buildingId = data.buildingId
181
+        this.activityQuery.title = data.title
182
+        this.activityQuery.startDate = data.startDate
183
+        this.activityQuery.endDate = data.endDate
184
+        this.activityQuery.address = data.address
185
+        this.activityQuery.personNum = data.personNum
186
+        this.imageUrl = data.url
187
+       
188
+        })
189
+    }
190
+  },
191
+  mounted () {
192
+    const _that = this
193
+    const phoneEditor = new E('#websiteEditorElem')
194
+    phoneEditor.customConfig.zIndex = 1
195
+    phoneEditor.customConfig.onchange = function (html) {
196
+      _that.dynamic = {..._that.dynamic, url: html}
197
+        _that.activityQuery.text =_that.dynamic.url
198
+    }
199
+    // phoneEditor.customConfig.uploadImgServer = this.upFileUrl
200
+    // phoneEditor.customConfig.uploadFileName = 'uploadFiles'
201
+
202
+    phoneEditor.customConfig.customUploadImg = function (files, insert) {
203
+      _that.uploadImg(files[0]).then(data => {
204
+        insert(data)
205
+      })
206
+    }
207
+    phoneEditor.customConfig.menus = [
208
+      'head',  // 标题
209
+      'bold',  // 粗体
210
+      'fontSize',  // 字号
211
+      'fontName',  // 字体
212
+      'italic',  // 斜体
213
+      'underline',  // 下划线
214
+      'strikeThrough',  // 删除线
215
+      'foreColor',  // 文字颜色
216
+      'backColor',  // 背景颜色
217
+      'justify',  // 对齐方式
218
+      'image',  // 插入图片
219
+    ]
220
+    phoneEditor.create()
221
+    this.getDetails()
222
+    this.getBuildings({
223
+      pageNum: 1,
224
+      pageSize: 100,
225
+    }).then(() => {
226
+      if ((this.$route.query.id || '') !== '') {
227
+        this.getDetail({id: this.$route.query.id}).then((data) => {
228
+          phoneEditor.txt.html(data.url)
229
+        })
230
+      }
231
+    })
232
+  }
233
+}
234
+</script>
235
+
236
+<style lang="scss">
237
+  .avatar-uploader .el-upload {
238
+    border: 1px dashed #d9d9d9;
239
+    border-radius: 6px;
240
+    cursor: pointer;
241
+    position: relative;
242
+    overflow: hidden;
243
+  }
244
+  .avatar-uploader .el-upload:hover {
245
+    border-color: #409EFF;
246
+  }
247
+  .avatar-uploader-icon {
248
+    font-size: 28px;
249
+    color: #8c939d;
250
+    width: 178px;
251
+    height: 178px;
252
+    line-height: 178px;
253
+    text-align: center;
254
+  }
255
+  .avatar {
256
+    width: 178px;
257
+    height: 178px;
258
+    display: block;
259
+  }
260
+</style>

+ 229
- 0
src/views/activity/list.vue View File

@@ -0,0 +1,229 @@
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='addDynamic'>新增</el-button>
7
+        </div>
8
+        <ul>
9
+          <li>
10
+           <el-select v-model="filterData.buildingId"  placeholder="请选择">
11
+              <el-option v-for="site in buildings" :label="site.buildingName" :value="site.buildingId" :key="site.buildingId"></el-option>
12
+           </el-select>
13
+          </li>
14
+
15
+        </ul>
16
+        <el-button
17
+          size="mini"
18
+          type="primary" @click="search">查询</el-button>
19
+      </div>
20
+      <div class="moreFilter"></div>
21
+    </div>
22
+  <el-table
23
+    :data="list || []"
24
+    style="width: 100%">
25
+    <el-table-column
26
+      prop="title"
27
+      label="活动标题">
28
+    </el-table-column>
29
+    <el-table-column
30
+      prop="tel"
31
+      label="活动时间">
32
+     <template slot-scope="scope">
33
+        <span>{{scope.row.startDate}} ~ {{scope.row.startDate}}</span>
34
+      </template>
35
+    </el-table-column>
36
+    <el-table-column
37
+      prop="count"
38
+      label="已参加人数">
39
+    </el-table-column>
40
+    <el-table-column
41
+      prop="pvNum"
42
+      label="阅读量">
43
+      </el-table-column>
44
+      <el-table-column
45
+      prop="shareNum"
46
+      label="转发数">
47
+    </el-table-column>
48
+    <el-table-column
49
+      prop="favorNum"
50
+      label="点赞数">
51
+    </el-table-column>
52
+    <el-table-column
53
+      prop="saveNum"
54
+      label="收藏数">
55
+    </el-table-column>
56
+    <el-table-column   label="状态">
57
+      <template slot-scope="scope">
58
+        <span :style="{color:(scope.row.status == 1?'':'red')}" >{{scope.row.status == 1 ? '启用' : '禁用'}}</span>
59
+      </template>
60
+    </el-table-column>
61
+    <el-table-column
62
+      fixed="right"
63
+      label="操作">
64
+      <template slot-scope="scope">
65
+        <!-- <el-button type="text" @click="toDetail(scope.row)" size="small">{{scope.row.status == 1?'停用':'启用'}}</el-button> -->
66
+         <el-button type="text" @click="getSignList(scope.row.dynamicId)" size="small">报名记录</el-button>
67
+        <el-button type="text" @click="toDetail(scope.row.dynamicId)" size="small">编辑</el-button>
68
+        <el-button type="text" @click="finish(scope.row.dynamicId)" size="small">结束活动</el-button>
69
+        <el-button type="text" @click="top(scope.row.dynamicId)" size="small">置顶</el-button>
70
+      </template>
71
+    </el-table-column>
72
+  </el-table>
73
+  <el-pagination
74
+    small
75
+    style="margin-top:10px;"
76
+    layout="prev, pager, next"
77
+    :current-page.sync="filterData.pageNum"
78
+    :pageSize="filterData.pageSize"
79
+    :total="filterData.total || 0"
80
+    @current-change="getPageList"
81
+  >
82
+  </el-pagination>
83
+</div>
84
+</template>
85
+
86
+<script>
87
+import { createNamespacedHelpers } from "vuex";
88
+const { mapState: mapBuildingState, mapActions: mapBuildingActions } = createNamespacedHelpers('building')
89
+const { mapActions: mapActivity } = createNamespacedHelpers("activity");
90
+
91
+export default {
92
+  name: "consultant-list",
93
+  data() {
94
+    return {
95
+      filterData: {
96
+        dynamicId:'',
97
+        name: "",
98
+        phone: "",
99
+        buildingId:'',
100
+        pageNum:1,
101
+        pageSize:10,
102
+        total:0,
103
+        top:''
104
+      },
105
+      
106
+      buildingForm: {
107
+        pageNum: 1,
108
+        pageSize: 100
109
+      },
110
+      list: [],
111
+      buildings:[],
112
+      pageNavi: {
113
+        current: 1,
114
+        pageSize: 10,
115
+        total: 0
116
+      },
117
+      searchName: ""
118
+    };
119
+  },
120
+  computed: {},
121
+  methods: {
122
+        ...mapBuildingActions([
123
+      'getBuildings'
124
+    ]),
125
+    ...mapActivity([
126
+      "getActivityList",
127
+      'finishActivity'
128
+      ]),
129
+    getList() {
130
+      this.getActivityList(this.filterData,this.filterData.pageSize,this.filterData.pageNum).then(res => {
131
+          this.list = res.list;
132
+          this.filterData.pageSize =res.pageSize 
133
+          this.filterData.pageNum =res.pageNum
134
+          this.filterData.total =res.total
135
+        })
136
+        .catch(err => {
137
+          this.$notify.error(err.msg || err.message);
138
+        });
139
+    },
140
+    // 结束活动
141
+    finish(id){
142
+      this.filterData.dynamicId = id
143
+          this.finishActivity(
144
+          JSON.stringify(this.filterData)
145
+        ) 
146
+          this.getList();
147
+          this.getBuildList()   
148
+    },
149
+    top(id){
150
+          this.filterData.dynamicId = id
151
+          this.filterData.top = 1
152
+          this.finishActivity(
153
+          JSON.stringify(this.filterData)
154
+        ) 
155
+          this.getList();
156
+          this.getBuildList()   
157
+    },
158
+    addDynamic() {
159
+      this.$router.push({ name: "activity-add" });
160
+      console.log('11111')
161
+    },
162
+    toDetail(row) {
163
+      this.$router.push({ name: "activity-edit",query: { row }});
164
+      console.log('row',row)
165
+    },
166
+    search() {
167
+      this.filterData.current = 1;
168
+      this.getList();
169
+    },
170
+     getBuildList() {
171
+        this.$store.dispatch('building/getBuildings', this.buildingForm).then((res) => {
172
+            this.buildings = res.records  
173
+        }).catch(() => {
174
+             console.log('building/getBuildings err')
175
+        })
176
+    },
177
+    getPageList(){
178
+       this.getList();
179
+    },
180
+    getSignList(id){
181
+      this.$router.push({ name: "activity-signList",query: { id } }); 
182
+    }
183
+  },
184
+  created() {
185
+    this.pageNavi.current = this.$route.query.page || 1;
186
+    this.getList();
187
+    this.getBuildList()
188
+  }
189
+};
190
+</script>
191
+
192
+<style lang="scss" scoped>
193
+.list {
194
+  .header {
195
+    width: 50px;
196
+    height: 50px;
197
+    border-radius: 50%;
198
+  }
199
+}
200
+.system-table-search {
201
+  width: calc(100% - 40px);
202
+  margin: 20px auto 0;
203
+}
204
+
205
+.system-table-search li {
206
+  margin-right: 20px;
207
+}
208
+
209
+.system-table-search ul {
210
+  font-size: 0;
211
+  white-space: nowrap;
212
+}
213
+
214
+.system-table-search ul > li {
215
+  display: inline-block;
216
+}
217
+
218
+.flex-h {
219
+  display: flex;
220
+  align-items: center;
221
+}
222
+
223
+.flex-item {
224
+  flex: 1;
225
+  -webkit-flex: 1;
226
+  position: relative;
227
+  overflow: hidden;
228
+}
229
+</style>

+ 126
- 0
src/views/activity/signList.vue View File

@@ -0,0 +1,126 @@
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='activityLiest'>返回</el-button>
7
+        </div>
8
+      </div>
9
+      <div class="moreFilter"></div>
10
+    </div>
11
+  <el-table
12
+    :data="list || []"
13
+    style="width: 100%">
14
+    <el-table-column
15
+      prop="name"
16
+      label="姓名">
17
+    </el-table-column>
18
+    <el-table-column
19
+      prop="phone"
20
+      label="手机号">
21
+    </el-table-column>
22
+    <el-table-column
23
+      prop="createDate"
24
+      label="报名时间">
25
+    </el-table-column>
26
+  </el-table>
27
+  <el-pagination
28
+    small
29
+    style="margin-top:10px;"
30
+    layout="prev, pager, next"
31
+    :current-page.sync="filterData.pageNum"
32
+    :pageSize="filterData.pageSize"
33
+    :total="filterData.total || 0"
34
+    @current-change="getPageList" >
35
+  </el-pagination>
36
+</div>
37
+</template>
38
+
39
+<script>
40
+import { createNamespacedHelpers } from "vuex";
41
+const { mapActions: mapActivity } = createNamespacedHelpers("activity");
42
+
43
+export default {
44
+  name: "consultant-list",
45
+  data() {
46
+    return {
47
+      filterData: {
48
+        name: "",
49
+        phone: "",
50
+        buildingId:'',
51
+        pageNum:1,
52
+        pageSize:10,
53
+        total:0,
54
+        dynamicId:'',
55
+      },
56
+      list:[],
57
+    };
58
+  },
59
+  computed: {},
60
+  methods: {
61
+    ...mapActivity([
62
+        "getSignList"
63
+    ]),
64
+    getList() {
65
+      this.getSignList(this.filterData,this.filterData.pageSize,this.filterData.pageNum).then(res => {
66
+          this.list = res.list.data
67
+          this.filterData.pageSize =res.pageSize 
68
+          this.filterData.pageNum =res.pageNum
69
+          this.filterData.total =res.total
70
+        }).catch(err => {
71
+          this.$notify.error(err.msg || err.message);
72
+        });
73
+    },
74
+    // 活动列表
75
+    activityLiest(){
76
+     this.$router.push({ name: "activity-list" });
77
+    },
78
+    getPageList(){
79
+       this.getList();
80
+    }
81
+  },
82
+  created() {
83
+    this.filterData.dynamicId = this.$route.query.id
84
+    this.getList();
85
+  }
86
+};
87
+</script>
88
+
89
+<style lang="scss" scoped>
90
+.list {
91
+  .header {
92
+    width: 50px;
93
+    height: 50px;
94
+    border-radius: 50%;
95
+  }
96
+}
97
+.system-table-search {
98
+  width: calc(100% - 40px);
99
+  margin: 20px auto 0;
100
+}
101
+
102
+.system-table-search li {
103
+  margin-right: 20px;
104
+}
105
+
106
+.system-table-search ul {
107
+  font-size: 0;
108
+  white-space: nowrap;
109
+}
110
+
111
+.system-table-search ul > li {
112
+  display: inline-block;
113
+}
114
+
115
+.flex-h {
116
+  display: flex;
117
+  align-items: center;
118
+}
119
+
120
+.flex-item {
121
+  flex: 1;
122
+  -webkit-flex: 1;
123
+  position: relative;
124
+  overflow: hidden;
125
+}
126
+</style>

+ 3
- 1
src/views/goods/edit.vue View File

@@ -35,7 +35,7 @@
35 35
           <el-input v-model="detail.inventory"></el-input>
36 36
         </el-form-item>
37 37
         <el-form-item label="商品详情:">
38
-            <div id="websiteEditorElem" style="height: 400px"></div>
38
+            <rich-editor v-model="detail.goodsDescription" style="height: 400px" />
39 39
         </el-form-item>
40 40
         <el-form-item label="状态:">
41 41
           <el-select v-model="detail.status" clearable placeholder="请选择">
@@ -82,6 +82,7 @@ export default {
82 82
         totalNum: '',
83 83
         inventory: '',
84 84
         status: 0,
85
+        goodsDescription: '',
85 86
         address: '',
86 87
         goodsId: '',
87 88
       },
@@ -125,6 +126,7 @@ export default {
125 126
           this.detail.status = data.status
126 127
           this.detail.address = data.address
127 128
           this.detail.goodsId = data.goodsId
129
+          this.detail.goodsDescription = data.goodsDescription
128 130
         });
129 131
       }
130 132
     },

+ 47
- 0
src/views/index.js View File

@@ -68,6 +68,53 @@ const pages = [
68 68
       },
69 69
     ]
70 70
   },
71
+  {
72
+    path: 'activity',
73
+    name: 'activity',
74
+    component: () => import('./index.vue'),
75
+    meta: {
76
+      menuShow: true,
77
+      title: '活动管理',
78
+    },
79
+    children: [
80
+      {
81
+        path: 'activity',
82
+        name: 'activity-list',
83
+        component: () => import('./activity/list.vue'),
84
+        meta: {
85
+          menuShow: true,
86
+          title: '活动列表',
87
+        },
88
+      },
89
+      {
90
+        path: 'activity/add',
91
+        name: 'activity-add',
92
+        component: () => import('./activity/add.vue'),
93
+        meta: {
94
+          menuShow: false,
95
+          title: '活动添加',
96
+        }
97
+      },
98
+      {
99
+        path: 'activity/edit',
100
+        name: 'activity-edit',
101
+        component: () => import('./activity/edit.vue'),
102
+        meta: {
103
+          menuShow: false,
104
+          title: '编辑活动',
105
+        }
106
+      },
107
+      {
108
+        path: 'activity/signList',
109
+        name: 'activity-signList',
110
+        component: () => import('./activity/signList.vue'),
111
+        meta: {
112
+          menuShow: false,
113
+          title: '报名记录',
114
+        },
115
+      }
116
+    ]
117
+  },
71 118
   {
72 119
     path: 'building',
73 120
     name: 'building',