Parcourir la source

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

魏熙美 il y a 5 ans
Parent
révision
2409d79e0e

+ 4
- 0
src/config/api.js Voir le fichier

@@ -275,6 +275,10 @@ const apis = {
275 275
     change: {
276 276
       method: 'put',
277 277
       url: `${commPrefix}/taPointsExchange/change`
278
+    },
279
+    update: {
280
+      method: 'put',
281
+      url: `${commPrefix}/taPointsExchange/:id`
278 282
     }
279 283
   },
280 284
   carouselFigure:{ // 轮播图列表查询

+ 0
- 2
src/store/modules/activity.js Voir le fichier

@@ -43,8 +43,6 @@ export default {
43 43
           ...apis.activity.updateActivity,
44 44
           data: payload,
45 45
         }).then((data) => {
46
-          window.console.log(data)
47
-          commit('updateList', { ...data, list: data.records})
48 46
           resolve(data)
49 47
         }).catch(({ message }) => {
50 48
           if (typeof message === 'string') {

+ 3
- 7
src/store/modules/exchange.js Voir le fichier

@@ -112,19 +112,15 @@ export default {
112 112
         })
113 113
       })
114 114
     },
115
-    cancelDynamic (_, payload) {
115
+    verifyById (_, payload) {
116 116
       return new Promise((resolve, reject) => {
117 117
         request({
118
-          ...apis.dynamic.cancel,
118
+          ...apis.exchange.update,
119 119
           urlData: payload,
120 120
         }).then((data) => {
121 121
           resolve(data)
122 122
         }).catch((err) => {
123
-          const message = err.message || err.msg
124
-
125
-          if (typeof message === 'string') {
126
-            reject(message)
127
-          }
123
+          reject(err)
128 124
         })
129 125
       })
130 126
     }

+ 78
- 38
src/views/activity/add.vue Voir le fichier

@@ -1,6 +1,6 @@
1 1
 <template>
2
-  <el-form ref="form" :model="dynamic" label-width="160px">
3
-    <el-form-item label="所属项目">
2
+  <el-form ref="activityQuery" :model="activityQuery" :rules="rules"  label-width="160px">
3
+    <el-form-item label="所属项目" prop="buildingId">
4 4
       <el-select v-model="activityQuery.buildingId" placeholder="请选择">
5 5
         <el-option v-for="(build,i) in buildings.list || []" :key="i" :label="build.buildingName" :value="build.buildingId"></el-option>
6 6
       </el-select>
@@ -22,24 +22,19 @@
22 22
             <img width="100%" :src="dialogImageUrl" alt="">
23 23
           </el-dialog>
24 24
     </el-form-item>
25
-    <el-form-item label="活动标题">
25
+    <el-form-item label="活动标题" prop="title">
26 26
       <el-input v-model="activityQuery.title"></el-input>
27 27
     </el-form-item>
28
-    <el-form-item label="活动时间">
29
-       <el-date-picker v-model="activityQuery.startDate"  type="datetime" placeholder="选择日期"/>
30
-       <!-- <el-date-picker
31
-                  v-model="detail.reportDate"
32
-                  type="datetime"
33
-                  placeholder="选择日期时间">
34
-          </el-date-picker> -->
28
+    <el-form-item label="活动时间" prop="startDate">
29
+       <el-date-picker v-model="activityQuery.startDate" type="datetime" placeholder="选择日期"/>
35 30
         <span>-</span>
36
-       <el-date-picker v-model="activityQuery.endDate"  type="datetime" placeholder="选择日期"/>   
31
+       <el-date-picker v-model="activityQuery.endDate" type="datetime" placeholder="选择日期"/>   
37 32
     </el-form-item>
38
-    <el-form-item label="活动地点">
33
+    <el-form-item label="活动地点" prop="address">
39 34
       <el-input  v-model="activityQuery.address"></el-input>
40 35
     </el-form-item>
41
-    <el-form-item  label="活动人数">
42
-      <el-input v-model="activityQuery.personNum" ></el-input>
36
+    <el-form-item  label="活动人数" prop="personNum">
37
+      <el-input v-model="activityQuery.personNum" type="number"></el-input>
43 38
     </el-form-item>
44 39
     <!-- <el-form-item label="链接地址">
45 40
       <el-input v-model="dynamic.url"></el-input>
@@ -51,13 +46,13 @@
51 46
        <el-radio v-model="activityQuery.isEnlist" label="1">是</el-radio>
52 47
        <el-radio v-model="activityQuery.isEnlist" label="0">否</el-radio>
53 48
     </el-form-item>
54
-    <el-form-item label="活动时间" v-if="activityQuery.isEnlist == '1'">
55
-       <el-date-picker v-model="activityQuery.enlistStart" type="date" placeholder="选择日期"/>
49
+    <el-form-item label="报名时间" v-if="activityQuery.isEnlist == '1'" prop="enlistStart">
50
+       <el-date-picker v-model="activityQuery.enlistStart" type="datetime" placeholder="选择日期"/>
56 51
         <span>-</span>
57
-       <el-date-picker v-model="activityQuery.enlistEnd" type="date" placeholder="选择日期"/>   
52
+       <el-date-picker v-model="activityQuery.enlistEnd" type="datetime" placeholder="选择日期"/>   
58 53
     </el-form-item>
59 54
     <el-form-item>
60
-      <el-button type="primary" @click="onSubmit">保存</el-button>
55
+      <el-button type="primary" @click="onSubmit('activityQuery')">保存</el-button>
61 56
 
62 57
     </el-form-item>
63 58
   </el-form>
@@ -77,7 +72,6 @@ export default {
77 72
   data () {
78 73
     return {
79 74
       url:'',
80
-      buildingId:'',
81 75
       upFileUrl: apis.file.upload.url,
82 76
       radio:'1',
83 77
       imgList: [],
@@ -90,12 +84,40 @@ export default {
90 84
        buildingId:'',
91 85
        title:'',
92 86
        isEnlist:'1',
93
-       text:'',
87
+       desc:'',
94 88
        enlistStart:'',
95 89
        enlistEnd:'',
96 90
        personNum:'',
97
-      }
98
-      
91
+      },
92
+      rules: {
93
+          buildingId: [
94
+            { required: true, message: '请选择所属项目', trigger: 'change' }
95
+          ],
96
+          url: [
97
+            { required: true, message: ' ', trigger: 'change' }
98
+          ],
99
+          title: [
100
+            { required: true, message: '请输入标题', trigger: 'blur' },
101
+          ],
102
+          startDate: [
103
+            { type: 'date', required: true, message: '请选择日期', trigger: 'change' }
104
+          ],
105
+          endDate: [
106
+            { type: 'date', required: true, message: '请选择时间', trigger: 'change' }
107
+          ],
108
+          address: [
109
+            {  required: true, message: '请至少输入活动地点', trigger: 'change' }
110
+          ],
111
+          personNum: [
112
+            { required: true, message: '请输入活动人数', trigger: 'change' }
113
+          ],
114
+          desc: [
115
+            { required: true, message: ' ', trigger: 'blur' }
116
+          ],
117
+          enlistStart:[
118
+            { type: 'date', required: true, message: '请选报名日期', trigger: 'change' }
119
+          ]
120
+        }
99 121
     }
100 122
   },
101 123
   computed: {
@@ -164,11 +186,32 @@ export default {
164 186
       this.updateDetail({...this.dynamic, imgUrl: res.data})
165 187
       this.loading.close()
166 188
     },
167
-    onSubmit () {
168
-      // if (!this.detail.dynamicId) {
169
-        // 新增
170
-        console.log('this.imgList[0]',this.imgList[0])
171
-        // this.activityQuery.url = this.imgList[0]
189
+    onSubmit (formName) {
190
+      this.$refs[formName].validate((valid) => {
191
+      if (valid) {
192
+        // 主图不可为空
193
+        if(this.activityQuery.url ===''){
194
+          this.$message({ showClose: true, message: '请选择主图!',type: 'error'});
195
+        return false
196
+        }
197
+      console.log('this.activityQuery.desc',this.activityQuery.desc)
198
+      const endDate=this.activityQuery.endDate
199
+      const startDate=this.activityQuery.startDate
200
+      if( endDate <= startDate){
201
+        this.$message({ showClose: true, message: '活动结束时间不能小于活动开始时间',type: 'error'});
202
+        return false
203
+      }
204
+      if( this.activityQuery.desc === '' || this.activityQuery.desc === null){
205
+        this.$message({ showClose: true, message: '活动详情不能为空',type: 'error'});
206
+        return false
207
+      }
208
+
209
+      const enlistStart= this.activityQuery.enlistStart
210
+      const enlistEnd= this.activityQuery.enlistEnd
211
+      if(this.activityQuery.isEnlist ==='1' && enlistEnd<= enlistStart ){
212
+        this.$message({ showClose: true, message: '报名结束时间不能小于报名开始时间',type: 'error'});
213
+        return false
214
+      }
172 215
         this.addActivity(
173 216
           JSON.stringify(this.activityQuery)
174 217
         ).then(() => {
@@ -176,26 +219,23 @@ export default {
176 219
           
177 220
         })
178 221
         this.$router.push({ name: "activity-list" });
179
-      // } else {
180
-      //   // 修改
181
-      //   this.editDynamics({
182
-      //     detail: JSON.stringify(this.detail)
183
-      //   }).then(() => {
184
-      //     this.onCancel()
185
-      //   })
186
-      // }
222
+          } else {
223
+            console.log('error submit!!');
224
+            return false;
225
+          }
226
+        })
187 227
     },
188 228
     onCancel () {
189 229
       this.$router.push({name: 'dynamiclist'})
190
-    }
230
+    },
191 231
   },
192 232
   mounted () {
193 233
     const _that = this
194 234
     const phoneEditor = new E('#websiteEditorElem')
195 235
     phoneEditor.customConfig.zIndex = 1
196 236
     phoneEditor.customConfig.onchange = function (html) {
197
-      _that.dynamic = {..._that.dynamic, url: html}
198
-        _that.activityQuery.text =_that.dynamic.url
237
+      _that.activityQuery = {..._that.activityQuery, desc: html}
238
+       console.log('that.dynamic.url',_that.activityQuery.desc)
199 239
     }
200 240
     // phoneEditor.customConfig.uploadImgServer = this.upFileUrl
201 241
     // phoneEditor.customConfig.uploadFileName = 'uploadFiles'

+ 97
- 75
src/views/activity/edit.vue Voir le fichier

@@ -1,11 +1,11 @@
1 1
 <template>
2
-  <el-form ref="form" label-width="160px">
3
-    <el-form-item label="所属项目">
4
-      <el-select v-model="activityQuery.buildingId" placeholder="请选择">
2
+  <el-form ref="activityQuery" label-width="160px" :rules="rules" :model="activityQuery">
3
+    <el-form-item label="所属项目" prop="buildingId">
4
+      <el-select v-model="activityQuery.buildingId"  placeholder="请选择">
5 5
         <el-option v-for="(build,i) in buildings.list || []" :key="i" :label="build.buildingName" :value="build.buildingId"></el-option>
6 6
       </el-select>
7 7
     </el-form-item>
8
-    <el-form-item label="主图:">
8
+    <el-form-item label="主图:" prop="buildingId">
9 9
           <el-upload
10 10
                 :headers="uploadHeaders"
11 11
                 :action="upFileUrl"
@@ -15,37 +15,39 @@
15 15
               <i v-else class="el-icon-plus avatar-uploader-icon"></i>
16 16
           </el-upload>
17 17
     </el-form-item>
18
-    <el-form-item label="活动标题">
18
+    <el-form-item label="活动标题" prop="title">
19 19
       <el-input v-model="activityQuery.title"></el-input>
20 20
     </el-form-item>
21
-    <el-form-item label="活动时间">
22
-       <el-date-picker v-model="activityQuery.startDate" type="date" placeholder="选择日期"/>
21
+    <el-form-item label="活动时间" prop="startDate">
22
+       <el-date-picker v-model="activityQuery.startDate" type="datetime" placeholder="选择日期"/>
23 23
         <span>-</span>
24
-       <el-date-picker v-model="activityQuery.endDate" type="date" placeholder="选择日期"/>   
24
+       <el-date-picker v-model="activityQuery.endDate" type="datetime" placeholder="选择日期"/>   
25 25
     </el-form-item>
26
-    <el-form-item label="活动地点">
26
+    <el-form-item label="活动地点"  prop="address">
27 27
       <el-input  v-model="activityQuery.address"></el-input>
28 28
     </el-form-item>
29
-    <el-form-item label="活动人数">
30
-      <el-input v-model="activityQuery.personNum"></el-input>
29
+    <el-form-item label="活动人数" prop="personNum">
30
+      <el-input v-model="activityQuery.personNum" type="number"></el-input>
31 31
     </el-form-item>
32 32
     <!-- <el-form-item label="链接地址">
33 33
       <el-input v-model="dynamic.url"></el-input>
34 34
     </el-form-item> -->
35 35
     <el-form-item label="活动详情">
36
-      <div id="websiteEditorElem" style="height: 400px"></div>
36
+      <div id="desc">
37
+        <rich-editor v-model="activityQuery.desc" style="height: 400px"/>
38
+      </div>   
37 39
     </el-form-item>
38 40
     <el-form-item label="是否需要报名">
39 41
        <el-radio v-model="activityQuery.isEnlist" label="1">是</el-radio>
40 42
        <el-radio v-model="activityQuery.isEnlist" label="0">否</el-radio>
41 43
     </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
+    <el-form-item label="报名时间" v-if="activityQuery.isEnlist == '1'"  prop="enlistStart">
45
+       <el-date-picker v-model="activityQuery.enlistStart" type="datetime" placeholder="选择日期"/>
44 46
         <span>-</span>
45
-       <el-date-picker v-model="activityQuery.enlistEnd" type="date" placeholder="选择日期"/>   
47
+       <el-date-picker v-model="activityQuery.enlistEnd" type="datetime" placeholder="选择日期"/>   
46 48
     </el-form-item>
47 49
     <el-form-item>
48
-      <el-button type="primary" @click="onSubmit">保存</el-button>
50
+      <el-button type="primary" @click="onSubmit('activityQuery')">保存</el-button>
49 51
       <el-button @click="onCancel">取消</el-button>
50 52
     </el-form-item>
51 53
   </el-form>
@@ -55,7 +57,7 @@
55 57
 import { createNamespacedHelpers } from 'vuex'
56 58
 import apis from '../../config/api'
57 59
 import E from 'wangeditor'
58
-
60
+import dayjs from 'dayjs'
59 61
 const { mapState: mapDynamicState, mapActions: mapDynamicActions, mapMutations: mapDynamicMutations } = createNamespacedHelpers('building')
60 62
 const { mapState: mapActivityState, mapActions: mapActivityActions } = createNamespacedHelpers('activity')
61 63
 const { mapState: mapBuildingState, mapActions: mapBuildingActions } = createNamespacedHelpers('building')
@@ -74,19 +76,50 @@ export default {
74 76
       dialogImageUrl: "",
75 77
       activityQuery: {
76 78
        dynamicId:'',
77
-       buildingId:'',
78 79
        url:'',
79 80
        startDate:'',
80 81
        endDate:'',
81 82
        buildingId:'',
82 83
        title:'',
83 84
        isEnlist:'',
84
-       text:'',
85
+       desc:'',
85 86
        enlistStart:'',
86 87
        enlistEnd:'',
87 88
        address:'',
88 89
        personNum:''
89
-      }
90
+      },
91
+      rules: {
92
+          buildingId: [
93
+            { required: true, message: '请选择活动区域', trigger: 'change' }
94
+          ],
95
+          url: [
96
+            { required: true, message: ' ', trigger: 'change' }
97
+          ],
98
+          title: [
99
+            { required: true, message: '请输入活动标题', trigger: 'blur' },
100
+          ],
101
+          startDate: [
102
+            { required: true, message: '请选择日期', trigger: 'change' }
103
+          ],
104
+          endDate: [
105
+            { type: 'date', required: true, message: '请选择时间', trigger: 'change' }
106
+          ],
107
+          address: [
108
+            {  required: true, message: '请输入活动地点', trigger: 'change' }
109
+          ],
110
+          personNum: [
111
+            { required: true, message: '请输入活动人数', trigger: 'change' }
112
+          ],
113
+          desc: [
114
+            { required: true, message: ' ', trigger: 'blur' }
115
+          ],
116
+          // img: [
117
+          //   { required: true, message: ' '}
118
+          // ],
119
+          enlistStart:[
120
+            { type: 'date', required: true, message: '请选择日期', trigger: 'change' }
121
+          ]
122
+        }
90 123
       
91 124
     }
92 125
   },
@@ -154,83 +187,72 @@ export default {
154 187
     },
155 188
 
156 189
     handleAvatarSuccess (res) {
157
-      this.activityQuery.url = res.data
158
-      this.updateDetail({...this.dynamic, imgUrl: res.data})
159
-      this.loading.close()
190
+      this.imageUrl = res.data
160 191
     },
161
-    onSubmit () {
162
-        // 新增
163
-        console.log('this.imgList[0]',this.imgList[0])
164
-        // this.activityQuery.url = this.imgList[0]
165
-        this.updateActivity(
192
+    onSubmit (formName) {
193
+      this.$refs[formName].validate((valid) => {
194
+      if (valid) {
195
+        // 活动时间校验
196
+      const endDate = this.formateDate(this.activityQuery.endDate); 
197
+      const startDate = this.formateDate(this.activityQuery.startDate);           
198
+      if( endDate <= startDate){
199
+        this.$message({ showClose: true, message: '活动结束时间不能小于活动开始时间',type: 'error'});
200
+        return 
201
+      }
202
+      // 富文本校验
203
+      if( this.activityQuery.desc === '' || this.activityQuery.desc === null|| this.activityQuery.desc ==='<p><br></p>'){
204
+        this.$message({ showClose: true, message: '活动详情不能为空',type: 'error'});
205
+        return 
206
+      }
207
+      // 报名时间校验
208
+      const enlistStart = this.formateDate(this.activityQuery.enlistStart); 
209
+      const enlistEnd = this.formateDate(this.activityQuery.enlistEnd);           
210
+      if(this.activityQuery.isEnlist ==='1' && enlistEnd<= enlistStart ){
211
+        this.$message({ showClose: true, message: '报名结束时间不能小于报名开始时间',type: 'error'});
212
+        return 
213
+      }
214
+      this.activityQuery.url = this.imageUrl 
215
+        this.updateActivity(    
166 216
            JSON.stringify(this.activityQuery)
167
-        ).then(() => {
168
-          this.onCancel()
169
-          
217
+        ).then((res) => {
218
+      this.$router.push({ name: "activity-list" });
219
+        })
220
+     
221
+        } else {
222
+            console.log('error submit!!');
223
+            return false;
224
+          }
170 225
         })
171
-        this.$router.push({ name: "activity-list" });
172 226
     },
173 227
     onCancel () {
174
-      this.$router.push({name: 'dynamiclist'})
228
+      this.$router.push({name: 'activity-list'})
175 229
     },
176 230
     getDetails(){
177 231
       this.activityQuery.dynamicId = this.$route.query.row
178 232
         this.activityDetails(this.activityQuery).then((data) => {
179
-          console.log('55',data)
180 233
         this.activityQuery.buildingId = data.buildingId
181 234
         this.activityQuery.title = data.title
182
-        this.activityQuery.startDate = data.startDate
235
+        this.activityQuery.startDate = data.startDate 
183 236
         this.activityQuery.endDate = data.endDate
184 237
         this.activityQuery.address = data.address
185 238
         this.activityQuery.personNum = data.personNum
186 239
         this.imageUrl = data.url
187 240
         this.activityQuery.isEnlist = data.isEnlist
241
+        this.activityQuery.desc = data.desc
188 242
         
189 243
        
190 244
         })
191
-    }
245
+    },
246
+    formateDate(dt) {
247
+      return !dt ? '' : dayjs(dt).format('YYYY-MM-DD HH:mm')
248
+    },
192 249
   },
193 250
   mounted () {
194
-    const _that = this
195
-    const phoneEditor = new E('#websiteEditorElem')
196
-    phoneEditor.customConfig.zIndex = 1
197
-    phoneEditor.customConfig.onchange = function (html) {
198
-      _that.dynamic = {..._that.dynamic, url: html}
199
-        _that.activityQuery.text =_that.dynamic.url
200
-    }
201
-    // phoneEditor.customConfig.uploadImgServer = this.upFileUrl
202
-    // phoneEditor.customConfig.uploadFileName = 'uploadFiles'
203
-
204
-    phoneEditor.customConfig.customUploadImg = function (files, insert) {
205
-      _that.uploadImg(files[0]).then(data => {
206
-        insert(data)
207
-      })
208
-    }
209
-    phoneEditor.customConfig.menus = [
210
-      'head',  // 标题
211
-      'bold',  // 粗体
212
-      'fontSize',  // 字号
213
-      'fontName',  // 字体
214
-      'italic',  // 斜体
215
-      'underline',  // 下划线
216
-      'strikeThrough',  // 删除线
217
-      'foreColor',  // 文字颜色
218
-      'backColor',  // 背景颜色
219
-      'justify',  // 对齐方式
220
-      'image',  // 插入图片
221
-    ]
222
-    phoneEditor.create()
251
+    // const editor = new E('#desc')
252
+    // editor.customConfig.zIndex = 1
253
+    // editor.create()
223 254
     this.getDetails()
224
-    this.getBuildings({
225
-      pageNum: 1,
226
-      pageSize: 100,
227
-    }).then(() => {
228
-      if ((this.$route.query.id || '') !== '') {
229
-        this.getDetail({id: this.$route.query.id}).then((data) => {
230
-          phoneEditor.txt.html(data.url)
231
-        })
232
-      }
233
-    })
255
+    
234 256
   }
235 257
 }
236 258
 </script>

+ 16
- 5
src/views/activity/list.vue Voir le fichier

@@ -28,9 +28,10 @@
28 28
     </el-table-column>
29 29
     <el-table-column
30 30
       prop="tel"
31
-      label="活动时间">
31
+      label="活动时间"
32
+      width="340">
32 33
      <template slot-scope="scope">
33
-        <span>{{ formateDate(scope.row.startDate)}} ~ {{ formateDate(scope.row.startDate)}}</span>
34
+        <span>{{ formateDate(scope.row.startDate)}}——{{ formateDate(scope.row.endDate)}}</span>
34 35
       </template>
35 36
     </el-table-column>
36 37
     <el-table-column
@@ -142,14 +143,24 @@ export default {
142 143
     },
143 144
     // 结束活动
144 145
     finish(id){
145
-      this.filterData.dynamicId = id
146
+        this.$confirm('结束以后将无法编辑, 是否继续?', '提示', {
147
+          confirmButtonText: '确定',
148
+          cancelButtonText: '取消',
149
+          type: 'warning'
150
+        }).then(() => {
151
+           this.filterData.dynamicId = id
146 152
           this.finishActivity(
147 153
           JSON.stringify(this.filterData)
148 154
         ).then((res) => {
149 155
            this.getList();
150 156
           this.getBuildList()   
151
-        })
152
-       
157
+        })    
158
+          this.$message({
159
+            type: 'success',
160
+            message: '成功!'
161
+          });
162
+        }).catch(() => {       
163
+        });
153 164
     },
154 165
     top(id){
155 166
           this.filterData.dynamicId = id

+ 198
- 0
src/views/customer/customerDetails.vue Voir le fichier

@@ -0,0 +1,198 @@
1
+<template>
2
+  <div class="detail-box">
3
+    <el-row :gutter="24">
4
+      <el-col :span="9">
5
+        <div class="grid-content">
6
+          <p class="title">置业顾问信息</p>
7
+          <img class="touxiang" src="http://img1.imgtn.bdimg.com/it/u=1022041283,4133755956&fm=26&gp=0.jpg" alt="">
8
+          <p class="name">曹玉文</p>
9
+          <p class="phone">13706842514</p>
10
+          <div class="info">
11
+            <p>部门:营销部</p>
12
+            <p>岗位:置业经理</p>
13
+            <p>公司:南京知与行网络科技有限公司</p>
14
+          </div>
15
+          <p class="project">所属项目:香颂.蔚澜半岛</p>
16
+        </div>
17
+      </el-col>
18
+      <el-col :span="15">
19
+        <div class="grid-content">
20
+          <p class="title">客户信息</p>
21
+          <div style="display:flex">
22
+            <img class="touxiang" src="http://img1.imgtn.bdimg.com/it/u=1022041283,4133755956&fm=26&gp=0.jpg" alt="">
23
+            <div style="width:100%">
24
+              <p class="info-box">用户名称:<span>曹建芳</span></p>
25
+              <p class="info-box">国家:<span>中国</span></p>
26
+              <p class="info-box">手机号:<span>184521462130</span></p>
27
+              <p class="info-box">省份:<span>江苏</span></p>
28
+            </div>       
29
+          </div>
30
+          <div class="other-info">
31
+              <p class="info-box">访问时长:<span>20分30秒 在线</span></p>
32
+              <p class="info-box">城市:<span>苏州</span></p>
33
+              <p class="info-box">访问次数:<span>20次</span></p>
34
+              <p class="info-box">来访渠道:<span>活动分享</span></p>
35
+              <p class="info-box">首次访问时间:<span>2019-07-23 12:23:49</span></p>
36
+          </div>
37
+          <p style="line-height:1.8">详细信息:</p>
38
+          <div class="flex-box" style="display:flex;justify-content: space-between;">
39
+            <p>意向项目:<span>香颂.蔚澜半岛、碧桂园</span></p>
40
+            <p>需求类型:<span>高层</span></p>
41
+            <p>物业类型:<span>物业</span></p>
42
+          </div>
43
+          <div class="flex-box" style="display:flex;justify-content: space-between;">
44
+            <p>价格区间:<span>100-200万</span></p>
45
+            <p>预约到访时间:<span>2019-07-23 12:59:14</span></p>
46
+            <p>预约人数:<span>2</span></p>
47
+          </div>
48
+          <p class="flex-box">客户说明:<span>客户说明展示处</span></p>
49
+          <p class="flex-box">客户描述:<span>客户描述展示处</span></p>
50
+          
51
+        </div>
52
+      </el-col>
53
+    </el-row>
54
+    <div class="access-records">
55
+      <p class="title">访问记录</p>
56
+      <el-table
57
+      :data="tableData"
58
+      class="table-box"
59
+      style="width: 100%;">
60
+      <el-table-column
61
+        prop="name"
62
+        label="访问事件">
63
+      </el-table-column>
64
+      <el-table-column
65
+        prop="date"
66
+        label="访问时间">
67
+      </el-table-column>
68
+      <el-table-column
69
+        prop="time"
70
+        label="停留时间">
71
+      </el-table-column>
72
+    </el-table>
73
+    </div>
74
+  
75
+  </div>
76
+</template>
77
+
78
+<script>
79
+import { createNamespacedHelpers } from "vuex";
80
+
81
+export default {
82
+  data() {
83
+    return {
84
+      tableData: [
85
+        {
86
+          date: "2016-05-02",
87
+          name: "王小虎",
88
+          time: "10分30秒"
89
+        },
90
+        {
91
+          date: "2016-05-04",
92
+          name: "王小虎",
93
+          time: "17分43秒"
94
+        },
95
+        {
96
+          date: "2016-05-01",
97
+          name: "王小虎",
98
+          time: "05分26秒"
99
+        },
100
+        {
101
+          date: "2016-05-03",
102
+          name: "王小虎",
103
+          time: "1时24分27秒"
104
+        }
105
+      ]
106
+    };
107
+  },
108
+  computed: {},
109
+  created() {}
110
+};
111
+</script>
112
+<style lang="scss">
113
+.detail-box {
114
+  .el-table th.is-leaf,
115
+  .el-table td {
116
+    border-bottom: 0px !important;
117
+    text-align: center;
118
+  }
119
+  .el-table::before {
120
+    background-color: #fff;
121
+  }
122
+}
123
+</style>
124
+
125
+
126
+<style lang="scss" scoped>
127
+.detail-box {
128
+  .access-records{
129
+    border: 1px solid #dcdcdc;
130
+    border-radius: 5px;
131
+    padding: 12px 15px;
132
+    margin-bottom: 26px;
133
+  }
134
+  .grid-content {
135
+    border: 1px solid #dcdcdc;
136
+    border-radius: 5px;
137
+    height: 400px;
138
+    overflow: hidden;
139
+    padding: 12px 15px;
140
+    position: relative;
141
+    margin-bottom: 26px;
142
+    p {
143
+      margin: 0;
144
+      font-size: 15px;
145
+    }
146
+    .title {
147
+      font-size: 18px;
148
+      font-weight: 600;
149
+      margin-bottom: 30px;
150
+    }
151
+    .touxiang {
152
+      width: 90px;
153
+      height: 80px;
154
+      display: inline-block;
155
+      margin-right: 26px;
156
+    }
157
+    .name {
158
+      position: absolute;
159
+      top: 80px;
160
+      left: 130px;
161
+      font-weight: 600;
162
+    }
163
+    .phone {
164
+      position: absolute;
165
+      top: 116px;
166
+      left: 130px;
167
+    }
168
+    .info {
169
+      margin: 20px 0;
170
+      p {
171
+        color: #666;
172
+        line-height: 1.8;
173
+      }
174
+    }
175
+    .info-box {
176
+      display: inline-block;
177
+      width: 50%;
178
+      line-height: 2.4;
179
+      span {
180
+        color: #555;
181
+      }
182
+    }
183
+    .other-info {
184
+      margin-left: 96px;
185
+      width: 100%;
186
+      span {
187
+        color: #555;
188
+      }
189
+    }
190
+    .flex-box {
191
+      line-height: 2.2;
192
+      span {
193
+        color: #555;
194
+      }
195
+    }
196
+  }
197
+}
198
+</style>

+ 1
- 7
src/views/customer/list.vue Voir le fichier

@@ -19,12 +19,6 @@
19 19
             <span>推荐人电话</span>
20 20
             <el-input v-model="form.consultTel" ></el-input>
21 21
           </li>
22
-          <!--          <li>-->
23
-          <!--            <span>状态</span>-->
24
-          <!--            <el-select v-model="form.status" placeholder="请选择">-->
25
-          <!--              <el-option v-for="(item,i) in gridData || []" :key="i" :label="item.name" :value="item.value"></el-option>-->
26
-          <!--            </el-select>-->
27
-          <!--          </li>-->
28 22
         </ul>
29 23
         <el-button
30 24
                 size="mini"
@@ -75,7 +69,7 @@
75 69
           &nbsp;
76 70
           <a href="javascript: void(0);" @click="showRecommendCustomerList(scope.row)" v-if="scope.row.phone !== '' && scope.row.phone !== undefined && scope.row.phone !== null">推荐客户</a>
77 71
           &nbsp;
78
-          <router-link :to="{ name:'editCustomer', query: { id: scope.row.customerId } }">查看详情</router-link>
72
+          <router-link :to="{ name:'customerDetails', query: { id: scope.row.customerId } }">查看详情</router-link>
79 73
         </template>
80 74
       </el-table-column>
81 75
     </el-table>

+ 27
- 3
src/views/exchange/verify.vue Voir le fichier

@@ -27,8 +27,14 @@
27 27
         </div>
28 28
       </el-col>
29 29
     </el-row>
30
-    <el-button type="danger" style="margin:20px auto 0 auto;display:block" round>立即核销</el-button>
31
-    
30
+    <el-button type="danger" @click="showVerifyDialog = true" style="margin:20px auto 0 auto;display:block" round>立即核销</el-button>
31
+    <el-dialog title="核销数据" :visible.sync="showVerifyDialog">
32
+      <el-form>
33
+        <el-form-item label="扫描二维码数据">
34
+          <el-input v-model="verifyId" @keyup.enter.native="verifyEnter" placeholder="请用扫码枪扫描二维码"></el-input>
35
+        </el-form-item>
36
+      </el-form>
37
+    </el-dialog>
32 38
   </el-tab-pane>
33 39
   <el-tab-pane label="手机号核销">
34 40
     <el-row>
@@ -81,6 +87,8 @@ export default {
81 87
         status: ""
82 88
       },
83 89
       verifyPhone: "",
90
+      verifyId: "",
91
+      showVerifyDialog: false,
84 92
       list: [],
85 93
       pageNavi: {
86 94
         current: 1,
@@ -91,7 +99,7 @@ export default {
91 99
   },
92 100
   computed: {},
93 101
   methods: {
94
-    ...mapExchangeActions(["getExchanges"]),
102
+    ...mapExchangeActions(["getExchanges", "verifyById"]),
95 103
     getList() {
96 104
       const pageNumber = this.pageNavi.current || 1;
97 105
       const pageSize = this.pageNavi.size;
@@ -114,7 +122,23 @@ export default {
114 122
     addGoods() {
115 123
       this.$router.push({ name: "goods.edit" });
116 124
     },
125
+    verifyEnter() {
126
+      this.verifyById({
127
+        id: this.verifyId
128
+      })
129
+        .then(res => {
130
+         this.$notify.info("核销成功");
131
+         this.showVerifyDialog = false;
132
+        })
133
+        .catch(err => {
134
+          this.$notify.error(err.msg || err.message);
135
+        });
136
+    },
117 137
     verifyTel() {
138
+      if(this.verifyPhone === ""){
139
+        this.$notify.error("请输入手机号");
140
+        return;
141
+      }
118 142
       this.$router.push({
119 143
         name: "verify.list",
120 144
         params: { tel: this.verifyPhone }

+ 9
- 0
src/views/index.js Voir le fichier

@@ -197,6 +197,15 @@ const pages = [
197 197
           title: '审核',
198 198
         },
199 199
       },
200
+      {
201
+        path: 'customerDetails',
202
+        name: 'customerDetails',
203
+        component: () => import('./customer/customerDetails.vue'),
204
+        meta: {
205
+          menuShow: false,
206
+          title: '客户详情',
207
+        },
208
+      },
200 209
       {
201 210
         path: 'integralRecord',
202 211
         name: 'integralRecord',