Преглед на файлове

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

魏熙美 преди 5 години
родител
ревизия
a15ce22919
променени са 7 файла, в които са добавени 346 реда и са изтрити 9 реда
  1. 6
    0
      src/config/api.js
  2. 1
    0
      src/store/index.js
  3. 128
    0
      src/store/modules/message.js
  4. 9
    3
      src/views/consultant/edit.vue
  5. 14
    5
      src/views/index.js
  6. 187
    0
      src/views/systemManagement/message.vue
  7. 1
    1
      vue.config.js

+ 6
- 0
src/config/api.js Целия файл

@@ -307,5 +307,11 @@ const apis = {
307 307
       url: `${commPrefix}/extendContent`
308 308
     }
309 309
   },
310
+  message:{
311
+    list:{
312
+      method:'get',
313
+      url: `${commPrefix}/taCustomerMessage`
314
+    }
315
+  },
310 316
 }
311 317
 export default apis

+ 1
- 0
src/store/index.js Целия файл

@@ -19,6 +19,7 @@ const store = new Vuex.Store({
19 19
     points: require('./modules/points').default,
20 20
     exchange: require('./modules/exchange').default,
21 21
     carouselFigure: require('./modules/carouselFigure').default,
22
+    message: require('./modules/message').default,
22 23
     news
23 24
 
24 25
   }

+ 128
- 0
src/store/modules/message.js Целия файл

@@ -0,0 +1,128 @@
1
+import request from '../../utils/request'
2
+import apis from '../../config/api'
3
+
4
+export default {
5
+  namespaced: true,
6
+  state: {
7
+    dynamics: {},
8
+    detail: {}
9
+  },
10
+  mutations: {
11
+    updateList (state, payload) {
12
+      state.dynamics = payload
13
+    },
14
+    updateDetail (state, payload) {
15
+      state.detail = payload
16
+    }
17
+  },
18
+  actions: {
19
+    setDetailNull ({ commit }) {
20
+      commit('updateDetail', {})
21
+    },
22
+    getMessage ({ commit }, payload) {
23
+      return new Promise((resolve, reject) => {
24
+        request({
25
+          ...apis.message.list,
26
+          params: payload,
27
+        }).then((data) => {
28
+          commit('updateList', data)
29
+          resolve(data)
30
+        }).catch((err) => {
31
+          resolve(err)
32
+        })
33
+      })
34
+    },
35
+    getGoodsDetail ({ commit }, payload) {
36
+      return new Promise((resolve, reject) => {
37
+        request({
38
+          ...apis.goods.detail,
39
+          urlData: payload,
40
+        }).then((data) => {
41
+          commit('updateDetail', data)
42
+          resolve(data)
43
+        }).catch((err) => {
44
+          const message = err.message || err.msg
45
+
46
+          if (typeof message === 'string') {
47
+            reject(message)
48
+          }
49
+        })
50
+      })
51
+    },
52
+    addGoods (_, payload) {
53
+      return new Promise((resolve, reject) => {
54
+        request({
55
+          ...apis.goods.add, 
56
+          data: payload,
57
+        }).then((data) => {
58
+          resolve(data)
59
+        }).catch((err) => {
60
+          const message = err.message || err.msg
61
+          if (typeof message === 'string') {
62
+            reject(message)
63
+          }
64
+        })
65
+      })
66
+    },
67
+    editGoods (_, payload) {
68
+      return new Promise((resolve, reject) => {
69
+        request({
70
+          ...apis.goods.edit,
71
+          data: payload,
72
+        }).then((data) => {
73
+          resolve(data)
74
+        }).catch((err) => {
75
+          const message = err.message || err.msg
76
+
77
+          if (typeof message === 'string') {
78
+            reject(message)
79
+          }
80
+        })
81
+      })
82
+    },
83
+    deleteDynamics (_, payload) {
84
+      return new Promise((resolve, reject) => {
85
+        request({
86
+          ...apis.dynamic.delete,
87
+          ...payload
88
+        }).then(() => {
89
+          resolve()
90
+        }).catch(() => {
91
+          reject()
92
+        })
93
+      })
94
+    },
95
+    changeGoodsStatus (_, payload) {
96
+      return new Promise((resolve, reject) => {
97
+        request({
98
+          ...apis.goods.change,
99
+          data: payload,
100
+        }).then((data) => {
101
+          resolve(data)
102
+        }).catch((err) => {
103
+          const message = err.message || err.msg
104
+
105
+          if (typeof message === 'string') {
106
+            reject(message)
107
+          }
108
+        })
109
+      })
110
+    },
111
+    cancelDynamic (_, payload) {
112
+      return new Promise((resolve, reject) => {
113
+        request({
114
+          ...apis.dynamic.cancel,
115
+          urlData: payload,
116
+        }).then((data) => {
117
+          resolve(data)
118
+        }).catch((err) => {
119
+          const message = err.message || err.msg
120
+
121
+          if (typeof message === 'string') {
122
+            reject(message)
123
+          }
124
+        })
125
+      })
126
+    }
127
+  }
128
+}

+ 9
- 3
src/views/consultant/edit.vue Целия файл

@@ -18,7 +18,7 @@
18 18
           <el-input v-model="detail.tel"></el-input>
19 19
         </el-form-item>
20 20
         <el-form-item label="标签:">
21
-          <el-input v-model="detail.tag"></el-input>
21
+          <editabel-tag v-model="detail.personTags"></editabel-tag>
22 22
         </el-form-item>
23 23
         <el-form-item label="地址:">
24 24
           <el-input v-model="detail.address"></el-input>
@@ -64,6 +64,9 @@ const {
64 64
 } = createNamespacedHelpers("building");
65 65
 export default {
66 66
   name: "consultantEdit",
67
+  components: {
68
+    EditabelTag: () => import('@/components/EditableTag.vue')
69
+  },
67 70
   data() {
68 71
     return {
69 72
       upFileUrl: apis.file.upload.url,
@@ -75,7 +78,7 @@ export default {
75 78
         tel: undefined,
76 79
         photo: undefined,
77 80
         status: 1,
78
-        buildings: []
81
+        buildings: undefined,
79 82
       }
80 83
     };
81 84
   },
@@ -93,7 +96,10 @@ export default {
93 96
     init() {
94 97
       if (this.$route.params.id) {
95 98
         this.getConsultant({ id: this.$route.params.id }).then(data => {
96
-          this.detail = data;
99
+          this.detail = {
100
+            ...data,
101
+            buildings: Array.isArray(data.projects) ? data.projects[0] : '',
102
+          };
97 103
         });
98 104
       }
99 105
     },

+ 14
- 5
src/views/index.js Целия файл

@@ -304,6 +304,15 @@ const pages = [
304 304
           title: '关键字维护',
305 305
         },
306 306
       },
307
+      {
308
+        path: 'message',
309
+        name: 'message',
310
+        component: () => import('./systemManagement/message.vue'),
311
+        meta: {
312
+          menuShow: true,
313
+          title: '客户留言',
314
+        },
315
+      },
307 316
     ]
308 317
   },
309 318
   {
@@ -312,7 +321,7 @@ const pages = [
312 321
     component: () => import('./index.vue'),
313 322
     meta: {
314 323
       menuShow: true,
315
-      title: '资管理',
324
+      title: '资管理',
316 325
     },
317 326
     children: [
318 327
       {
@@ -321,7 +330,7 @@ const pages = [
321 330
         component: () => import('./news/type/index.vue'),
322 331
         meta: {
323 332
           menuShow: true,
324
-          title: '资类型',
333
+          title: '资类型',
325 334
         },
326 335
       },
327 336
       {
@@ -330,7 +339,7 @@ const pages = [
330 339
         component: () => import('./news/type/edi/index.vue'),
331 340
         meta: {
332 341
           menuShow: false,
333
-          title: '编辑资类型',
342
+          title: '编辑资类型',
334 343
         },
335 344
       },
336 345
       {
@@ -339,7 +348,7 @@ const pages = [
339 348
         component: () => import('./news/index.vue'),
340 349
         meta: {
341 350
           menuShow: true,
342
-          title: '资列表',
351
+          title: '资列表',
343 352
         },
344 353
       },
345 354
       {
@@ -348,7 +357,7 @@ const pages = [
348 357
         component: () => import('./news/edi/index.vue'),
349 358
         meta: {
350 359
           menuShow: false,
351
-          title: '编辑资',
360
+          title: '编辑资',
352 361
         },
353 362
       },
354 363
     ]

+ 187
- 0
src/views/systemManagement/message.vue Целия файл

@@ -0,0 +1,187 @@
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='addGoods'>新增</el-button>
7
+        </div>
8
+        <ul>
9
+          <li>
10
+            <el-input v-model="filterData.goodsName" 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="phone"
25
+      label="电话号码">
26
+    </el-table-column>
27
+    <el-table-column
28
+      prop="message"
29
+      label="留言内容">
30
+    </el-table-column>
31
+    <el-table-column
32
+      label="创建时间">
33
+      <template slot-scope="scope">
34
+          <span>{{formateDate(scope.row.createDate)}}</span>
35
+      </template>
36
+    </el-table-column>
37
+  </el-table>
38
+  <el-pagination
39
+    small
40
+    style="margin-top:10px;"
41
+    layout="prev, pager, next"
42
+    :current-page.sync="pageNavi.current"
43
+    :pageSize="pageNavi.size"
44
+    :total="pageNavi.total || 0"
45
+    @current-change="getList"
46
+  >
47
+  </el-pagination>
48
+</div>
49
+</template>
50
+
51
+<script>
52
+import { createNamespacedHelpers } from "vuex";
53
+import dayjs from 'dayjs'
54
+
55
+const { mapActions: mapMessageActions } = createNamespacedHelpers("message");
56
+
57
+export default {
58
+  name: "goods-list",
59
+  data() {
60
+    return {
61
+      filterData: {
62
+        goodsName: ""
63
+      },
64
+      list: [],
65
+      pageNavi: {
66
+        current: 1,
67
+        size: 20,
68
+        total: 0
69
+      }
70
+    };
71
+  },
72
+  computed: {},
73
+  methods: {
74
+    ...mapMessageActions(["getMessage"]),
75
+    getList() {
76
+      const pageNumber = this.pageNavi.current || 1;
77
+      const pageSize = this.pageNavi.size;
78
+
79
+      this.getMessage({
80
+        ...this.filterData,
81
+        pageNumber,
82
+        pageSize
83
+      })
84
+        .then(res => {
85
+          const { records, ...pageNavi } = res;
86
+
87
+          this.list = records;
88
+          this.pageNavi = pageNavi;
89
+        })
90
+        .catch(err => {
91
+          this.$notify.error(err.msg || err.message);
92
+        });
93
+    },
94
+    addGoods() {
95
+      this.$router.push({ name: "goods.edit" });
96
+    },
97
+    toDetail(row) {
98
+      this.$router.push({
99
+        name: "goods.edit",
100
+        params: { id: row.goodsId }
101
+      });
102
+    },
103
+    changeStatus(row) {
104
+      this.showLoadding("保存中...");
105
+      this.changeGoodsStatus(row)
106
+        .then(res => {
107
+          this.hideLoadding();
108
+          this.$notify.info("保存成功");
109
+          this.search();
110
+        })
111
+        .catch(err => {
112
+          this.hideLoadding();
113
+          this.$notify.error(err.message);
114
+        });
115
+    },
116
+    showLoadding(text) {
117
+      this.loading = this.$loading({
118
+        text,
119
+        lock: true,
120
+        spinner: "el-icon-loading",
121
+        background: "rgba(255, 255, 255, 0.7)"
122
+      });
123
+    },
124
+    hideLoadding() {
125
+      if (this.loading) this.loading.close();
126
+    },
127
+    search() {
128
+      this.pageNavi.current = 1;
129
+      this.getList();
130
+    },
131
+    newPage(page) {
132
+      this.$router.replace({ name: "goods.list", query: { page } });
133
+    },
134
+    formateDate(dt) {
135
+      return !dt ? '' : dayjs(dt).format('YYYY-MM-DD HH:mm')
136
+    },
137
+  },
138
+  created() {
139
+    this.pageNavi.current = this.$route.query.page || 1;
140
+
141
+    this.getList();
142
+  }
143
+};
144
+</script>
145
+
146
+<style lang="scss" scoped>
147
+.list {
148
+  .header {
149
+    width: 50px;
150
+    height: 50px;
151
+    border-radius: 50%;
152
+  }
153
+  img {
154
+      width: 100%;
155
+      height: 100%;
156
+    }
157
+}
158
+.system-table-search {
159
+  width: calc(100% - 40px);
160
+  margin: 20px auto 0;
161
+}
162
+
163
+.system-table-search li {
164
+  margin-right: 20px;
165
+}
166
+
167
+.system-table-search ul {
168
+  font-size: 0;
169
+  white-space: nowrap;
170
+}
171
+
172
+.system-table-search ul > li {
173
+  display: inline-block;
174
+}
175
+
176
+.flex-h {
177
+  display: flex;
178
+  align-items: center;
179
+}
180
+
181
+.flex-item {
182
+  flex: 1;
183
+  -webkit-flex: 1;
184
+  position: relative;
185
+  overflow: hidden;
186
+}
187
+</style>

+ 1
- 1
vue.config.js Целия файл

@@ -5,7 +5,7 @@ module.exports = {
5 5
     proxy: {
6 6
       '/api': {
7 7
         // target: 'http://192.168.0.11:8080',
8
-        target: 'http://192.168.0.131:8080',
8
+        target: 'http://localhost:8080',
9 9
         changeOrigin: true,
10 10
         // pathRewrite: {
11 11
         //   '^/api': '/'