dingxin 5 anos atrás
pai
commit
db8d762e44

+ 7
- 0
src/config/api.js Ver arquivo

@@ -126,7 +126,14 @@ const apis = {
126 126
       method: 'post',
127 127
       url: `${commPrefix}/customer/add`
128 128
     }
129
+  },
130
+  activity:{
131
+    list:{
132
+      method:'get',
133
+      url: `${commPrefix}/iBuildingDynamicList`
134
+    },
129 135
   }
136
+
130 137
 }
131 138
 
132 139
 export default apis

+ 1
- 0
src/store/index.js Ver arquivo

@@ -13,6 +13,7 @@ const store = new Vuex.Store({
13 13
     customer: require('./modules/customer').default,
14 14
     building: require('./modules/building').default,
15 15
     img: require('./modules/img').default,
16
+    activity: require('./modules/activity').default,
16 17
   }
17 18
 })
18 19
 

+ 41
- 0
src/store/modules/activity.js Ver arquivo

@@ -0,0 +1,41 @@
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
+    // getConsultant (context, payload) {
19
+    //   return request({
20
+    //     ...apis.consultant.detail,
21
+    //     urlData: payload,
22
+    //   })
23
+    // },
24
+    // editConsultant (context, payload) {
25
+    //   window.console.log(payload)
26
+
27
+    //   const config = payload.personId ?
28
+    //     {
29
+    //       ...apis.consultant.edit,
30
+    //       urlData: { id: payload.personId },
31
+    //       data: payload,
32
+    //     } :
33
+    //     {
34
+    //       ...apis.consultant.add,
35
+    //       data: payload,
36
+    //     }
37
+
38
+    //   return request(config)
39
+    // },
40
+  },
41
+}

+ 208
- 0
src/views/activity/add.vue Ver arquivo

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

+ 188
- 0
src/views/activity/list.vue Ver arquivo

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

+ 29
- 0
src/views/index.js Ver arquivo

@@ -68,6 +68,35 @@ 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
+  },
71 100
   {
72 101
     path: 'building',
73 102
     name: 'building',