yuantianjiao 6 年前
父节点
当前提交
189471ee9f

+ 11
- 5
src/components/customerCard/customerCard.vue 查看文件

@@ -9,13 +9,13 @@
9 9
         </div>
10 10
       </div>
11 11
       <div>
12
-        <div>领取记录</div>
13
-        <div>历史备注</div>
12
+        <div @click="record">领取记录</div>
13
+        <div @click="history">历史备注</div>
14 14
       </div>
15 15
     </div>
16 16
     <div class="card-bottom">
17 17
       <span>备注:老客户,人非常好。</span>
18
-      <span>+ 添加备注</span>
18
+      <span @click="remark">+ 添加备注</span>
19 19
     </div>
20 20
   </div>
21 21
 </template>
@@ -36,8 +36,14 @@ export default {
36 36
     }
37 37
   },
38 38
   methods: {
39
-    share () {
40
-      this.$emit('share', this.data)
39
+    remark () {
40
+      this.$emit('remark', this.data)
41
+    },
42
+    record () {
43
+      this.$emit('record', this.data)
44
+    },
45
+    history () {
46
+      this.$emit('history', this.data)
41 47
     }
42 48
   }
43 49
 }

+ 36
- 11
src/pages/sales/coffeeIndex/index.vue 查看文件

@@ -69,12 +69,12 @@
69 69
                     slot="icon"
70 70
                     slot-scope="props"
71 71
                     :src="props.checked ? icon.active : icon.normal"
72
-                    style="width:.25rem;height:.25rem"
72
+                    style="width:.2rem;height:.2rem;bottom: .02rem;position: relative;"
73 73
                   >
74 74
                 </van-checkbox>
75 75
                 <i class="iconfont icon-sousuo search-icon" @click="searchMask"></i>
76 76
               </div>
77
-              <customerCard v-for="(item,index) in cardList" :key="index" :data='item' @share='share'></customerCard>
77
+              <customerCard v-for="(item,index) in cardList" :key="index" :data='item' @remark='remark' @history='history' @record='record'></customerCard>
78 78
             </div>
79 79
           </li>
80 80
         </ul>
@@ -89,13 +89,18 @@
89 89
       @confirm="selectCase"
90 90
       value-key="value"
91 91
     />
92
-    <div v-if="!mask" class="search-mask">
93
-      <div class="mask-top">
94
-        <input type="text">
95
-        <i class="iconfont icon-sousuo search-icon" @click="searchMask"></i>
96
-      </div>
97
-      <div class="mask-bottom"></div>
98
-    </div>
92
+    <van-dialog
93
+      v-model="showDialog"
94
+      show-cancel-button
95
+      title='添加备注'
96
+      :before-close="beforeClose">
97
+      <van-field
98
+        v-model="message"
99
+        type="textarea"
100
+        placeholder="请输入备注"
101
+        rows="3"
102
+        autosize/>
103
+    </van-dialog>
99 104
   </div>
100 105
 </template>
101 106
 
@@ -119,9 +124,10 @@ export default {
119 124
         active: active,
120 125
         normal: normal
121 126
       },
122
-      mask: false,
123 127
       navActive: 2,
124 128
       checked: true,
129
+      showDialog: false,
130
+      message: '',
125 131
       cutNavList: [{
126 132
         value: '城咖啡',
127 133
         id: '1',
@@ -228,8 +234,27 @@ export default {
228 234
     share (item) {
229 235
       console.log(item)
230 236
     },
237
+    remark (item) {
238
+      console.log(item)
239
+      this.showDialog = true
240
+    },
241
+    history (item) {
242
+      console.log(item)
243
+      this.$router.push({ name: 'history' })
244
+    },
245
+    record (item) {
246
+      console.log(item)
247
+      this.$router.push({ name: 'getRecord' })
248
+    },
231 249
     searchMask () {
232
-      this.mask = true
250
+      this.$router.push({ name: 'customerSearch' })
251
+    },
252
+    beforeClose (action, done) {
253
+      if (action === 'confirm') {
254
+        setTimeout(done, 1000)
255
+      } else {
256
+        done()
257
+      }
233 258
     }
234 259
   }
235 260
 }

+ 0
- 28
src/pages/sales/coffeeIndex/page.scss 查看文件

@@ -191,32 +191,4 @@
191 191
     background: rgba(0, 0, 0, .3);
192 192
     z-index: 100;
193 193
   }
194
-  .search-mask{
195
-    width: 100%;
196
-    height: 100%;
197
-    position: fixed;
198
-    top: 0;
199
-    left: 0;
200
-    background: #fff;
201
-    z-index: 999;
202
-    display: flex;
203
-    flex-flow: column nowrap;
204
-    .mask-bottom{
205
-      flex: 1
206
-    }
207
-    .mask-top{
208
-      display: flex;
209
-      justify-content: center;
210
-      align-items: center;
211
-      padding: .1rem .2rem;
212
-      input{
213
-        width: 100%;
214
-        height: .5rem;
215
-        background: #eee;
216
-      }
217
-      i{
218
-        font-size: .24rem;
219
-      }
220
-    }
221
-  }
222 194
 }

+ 124
- 0
src/pages/sales/customerSearch/index.vue 查看文件

@@ -0,0 +1,124 @@
1
+<template>
2
+  <div class="mainPage flex-v">
3
+    <div class="content flex-item">
4
+      <div>
5
+        <ul>
6
+          <li class="customer-card">
7
+            <div class="list-box">
8
+              <customerCard v-for="(item,index) in cardList" :key="index" :data='item' @remark='remark' @record='record' @history='history'></customerCard>
9
+            </div>
10
+          </li>
11
+        </ul>
12
+      </div>
13
+    </div>
14
+    <div v-if="mask" class="search-mask">
15
+      <div class="mask-top">
16
+        <input type="text">
17
+        <i class="iconfont icon-sousuo search-icon"></i>
18
+        <span @click="searchMask">搜索</span>
19
+      </div>
20
+      <div class="mask-bottom"></div>
21
+    </div>
22
+    <van-dialog
23
+      v-model="showDialog"
24
+      show-cancel-button
25
+      title='添加备注'
26
+      :before-close="beforeClose">
27
+      <van-field
28
+        v-model="message"
29
+        type="textarea"
30
+        placeholder="请输入备注"
31
+        rows="3"
32
+        autosize/>
33
+    </van-dialog>
34
+  </div>
35
+</template>
36
+
37
+<script>
38
+import customerCard from '../../../components/customerCard/customerCard'
39
+import active from '../../../common/icon/check-box-checked.png'
40
+import normal from '../../../common/icon/check-box-empty.png'
41
+import { mapState, createNamespacedHelpers } from 'vuex'
42
+const { mapActions: actions } = createNamespacedHelpers('app')
43
+const { mapActions: caseTableActions } = createNamespacedHelpers('placeOrderForCoffee')
44
+const { mapState: mapCaseState, mapActions: mapCaseActions } = createNamespacedHelpers('case')
45
+
46
+export default {
47
+  name: '',
48
+  data () {
49
+    return {
50
+      icon: {
51
+        active: active,
52
+        normal: normal
53
+      },
54
+      showDialog: false,
55
+      mask: true,
56
+      checked: true,
57
+      cardList: [
58
+        {
59
+          invalid: true
60
+        },
61
+        {
62
+          invalid: false
63
+        },
64
+        {
65
+          invalid: false
66
+        }
67
+      ],
68
+      message: ''
69
+    }
70
+  },
71
+  computed: {
72
+    ...mapState({
73
+      userInfo: x => x.userCenter.userInfo,
74
+      CaseList: x => x.app.CaseList,
75
+      CaseTableList: x => x.placeOrderForCoffee.CaseTableList,
76
+    }),
77
+    ...mapCaseState({
78
+      caseTotal: x => x.caseTotal,
79
+    })
80
+  },
81
+  components: {
82
+    customerCard
83
+  },
84
+  created () { },
85
+  methods: {
86
+    ...actions([
87
+      'getCaseList',
88
+    ]),
89
+    ...caseTableActions([
90
+      'getCaseTableList',
91
+    ]),
92
+    ...mapCaseActions([
93
+      'getCaseTotal',
94
+    ]),
95
+    remark (item) {
96
+      console.log(item)
97
+      this.showDialog = true
98
+    },
99
+    history (item) {
100
+      console.log(item)
101
+      this.$router.push({ name: 'history' })
102
+    },
103
+    record (item) {
104
+      console.log(item)
105
+      this.$router.push({ name: 'getRecord' })
106
+    },
107
+    searchMask () {
108
+      this.mask = false
109
+    },
110
+    beforeClose (action, done) {
111
+      if (action === 'confirm') {
112
+        setTimeout(done, 1000)
113
+      } else {
114
+        done()
115
+      }
116
+    }
117
+  }
118
+}
119
+</script>
120
+
121
+<!-- Add "scoped" attribute to limit CSS to this component only -->
122
+<style lang="scss" scoped>
123
+@import 'page.scss';
124
+</style>

+ 109
- 0
src/pages/sales/customerSearch/page.scss 查看文件

@@ -0,0 +1,109 @@
1
+.mainPage{
2
+  .content{
3
+    &>div{
4
+      width: 100%;
5
+      position: absolute;
6
+      left: 0;
7
+      top: 0;
8
+      bottom: 0;
9
+      overflow: hidden;
10
+      &>ul{
11
+        width: 100%;
12
+        height: 100%;
13
+        position: relative;
14
+        overflow: hidden;
15
+        &>li{
16
+          width: 100%;
17
+          height: 100%;
18
+          position: relative;
19
+          overflow-y: scroll;
20
+          -webkit-overflow-scrolling: touch;
21
+          transform: translateZ(0);
22
+          -webkit-transform: translateZ(0);
23
+          &.customer-card{
24
+            .cardAndCouponInfo{
25
+              align-items: center;
26
+              margin: .1rem 0 .15rem;
27
+              div{
28
+                font-size: 0;
29
+                white-space: nowrap;
30
+                span{
31
+                  line-height: .3rem;
32
+                  font-size: .13rem;
33
+                  display: inline-block;
34
+                  margin-right: .05rem;
35
+                  &:nth-child(2){
36
+                    font-size: .16rem;
37
+                    color: #fc6243;
38
+                  }
39
+                }
40
+              }
41
+              a{
42
+                line-height: .24rem;
43
+                padding: 0 .1rem;
44
+                box-sizing: border-box;
45
+                border: .01rem solid #333;
46
+                color: #333;
47
+                border-radius: .04rem;
48
+                font-size: .12rem;
49
+              }
50
+            }
51
+            .list-box{
52
+              padding: .1rem .2rem .2rem;
53
+            }
54
+          }
55
+        }
56
+      }
57
+    }
58
+  }
59
+  .selectCase{
60
+    width: 100%;
61
+    position: absolute;
62
+    left: 0;
63
+    top: 0;
64
+    bottom: 0;
65
+    background: rgba(0, 0, 0, .3);
66
+    z-index: 100;
67
+  }
68
+  .search-mask{
69
+    width: 100%;
70
+    height: 100%;
71
+    position: fixed;
72
+    top: 0;
73
+    left: 0;
74
+    background: #fff;
75
+    z-index: 999;
76
+    display: flex;
77
+    flex-flow: column nowrap;
78
+    .mask-bottom{
79
+      flex: 1
80
+    }
81
+    .mask-top{
82
+      display: flex;
83
+      justify-content: center;
84
+      align-items: center;
85
+      padding: .1rem 0 .1rem .2rem;
86
+      position: relative;
87
+      input{
88
+        width: 100%;
89
+        height: .3rem;
90
+        background: #eee;
91
+        border-radius: .08rem;
92
+        padding-left: .2rem;
93
+        line-height: .3rem;
94
+      }
95
+      i{
96
+        font-size: .16rem;
97
+        position: absolute;
98
+        top: .16rem;
99
+        left: .23rem;
100
+        color: #aaa;
101
+      }
102
+      span{
103
+        width: .6rem;
104
+        text-align: center;
105
+        font-size: .14rem;
106
+      }
107
+    }
108
+  }
109
+}

+ 54
- 0
src/pages/sales/getRecord/index.vue 查看文件

@@ -0,0 +1,54 @@
1
+<template>
2
+  <div class="mainPage flex-v">
3
+    <div class="top">
4
+      <topCaseInfo :data="topCaseInfoData" @selectCase="showSelect = true"></topCaseInfo>
5
+    </div>
6
+    <div class="info">
7
+      <span><em>姓名</em>:顶顶顶</span>
8
+      <span><em>手机号</em>:13888888888</span>
9
+    </div>
10
+    <div class="list-title">
11
+      <span>名称</span>
12
+      <span>领取时间</span>
13
+      <span>记录</span>
14
+    </div>
15
+    <div class="list-detail" v-for="(item,index) in list" :key="index">
16
+      <span>瑜伽体验卡lkjfklskd</span>
17
+      <span>06-27 12:20</span>
18
+      <span>已使用</span>
19
+    </div>
20
+  </div>
21
+</template>
22
+
23
+<script>
24
+import topCaseInfo from '../../../components/topCaseInfo/index'
25
+
26
+export default {
27
+  name: '',
28
+  data () {
29
+    return {
30
+      list: [1,1,1,1,1],
31
+      topCaseInfoData: {
32
+        caseName: '',
33
+        caseId: '',
34
+        showSelect: false,
35
+        userName: 'xxx'
36
+      },
37
+    }
38
+  },
39
+  components: {
40
+    topCaseInfo,
41
+  },
42
+  created () {
43
+
44
+  },
45
+  methods: {
46
+    
47
+  }
48
+}
49
+</script>
50
+
51
+<!-- Add "scoped" attribute to limit CSS to this component only -->
52
+<style lang="scss" scoped>
53
+@import 'page.scss';
54
+</style>

+ 44
- 0
src/pages/sales/getRecord/page.scss 查看文件

@@ -0,0 +1,44 @@
1
+.mainPage{
2
+  .info{
3
+    height: .5rem;
4
+    padding: 0 .2rem;
5
+    display: flex;
6
+    justify-content: space-between;
7
+    align-items: center;
8
+    em{
9
+      font-weight: bold;
10
+    }
11
+  }
12
+  .list-title{
13
+    height: .4rem;
14
+    display: flex;
15
+    padding: 0 .2rem;
16
+    justify-content: space-around;
17
+    align-items: center;
18
+    background:rgba(242,242,242,1);
19
+    span{
20
+      display: block;
21
+      width: 33.33%;
22
+      overflow:hidden;
23
+      text-overflow:ellipsis;
24
+      white-space:nowrap;
25
+      text-align: center;
26
+    }
27
+  }
28
+  .list-detail{
29
+    height: .4rem;
30
+    display: flex;
31
+    padding: 0 .2rem;
32
+    justify-content: space-around;
33
+    align-items: center;
34
+    border-bottom: 1px solid #eee;
35
+    span{
36
+      display: block;
37
+      width: 33.33%;
38
+      overflow:hidden;
39
+      text-overflow:ellipsis;
40
+      white-space:nowrap;
41
+      text-align: center;
42
+    }
43
+  }
44
+}

+ 53
- 0
src/pages/sales/history/index.vue 查看文件

@@ -0,0 +1,53 @@
1
+<template>
2
+  <div class="mainPage">
3
+    <div class="top">
4
+      <topCaseInfo :data="topCaseInfoData" @selectCase="showSelect = true"></topCaseInfo>
5
+    </div>
6
+    <div class="info">
7
+      <span><em>姓名</em>:顶顶顶</span>
8
+      <span><em>手机号</em>:13888888888</span>
9
+    </div>
10
+    <div class="list-content">
11
+      <div class="list-year">2018年备注记录</div>
12
+      <div class="list-card" v-for="(item,index) in list" :key="index">
13
+        <div class="point-top"></div>
14
+        <div class="point-bottom"></div>
15
+        <div class="card-time">7.29</div>
16
+        <div class="card-content">更多备注信息更多备注信息,更多备注信息更多备注信息更多备注信息更多备注信息。更多备注信息更多备注信息。</div>
17
+      </div>
18
+    </div>
19
+  </div>
20
+</template>
21
+
22
+<script>
23
+import topCaseInfo from '../../../components/topCaseInfo/index'
24
+
25
+export default {
26
+  name: '',
27
+  data () {
28
+    return {
29
+      list: [1,1,1,1,1],
30
+      topCaseInfoData: {
31
+        caseName: '',
32
+        caseId: '',
33
+        showSelect: false,
34
+        userName: 'xxx'
35
+      },
36
+    }
37
+  },
38
+  components: {
39
+    topCaseInfo,
40
+  },
41
+  created () {
42
+
43
+  },
44
+  methods: {
45
+    
46
+  }
47
+}
48
+</script>
49
+
50
+<!-- Add "scoped" attribute to limit CSS to this component only -->
51
+<style lang="scss" scoped>
52
+@import 'page.scss';
53
+</style>

+ 65
- 0
src/pages/sales/history/page.scss 查看文件

@@ -0,0 +1,65 @@
1
+.mainPage{
2
+  .info{
3
+    height: .5rem;
4
+    padding: 0 .2rem;
5
+    display: flex;
6
+    justify-content: space-between;
7
+    align-items: center;
8
+    background:rgba(242,242,242,1);
9
+    em{
10
+      font-weight: bold;
11
+    }
12
+  }
13
+  .list-content{
14
+    .list-year{
15
+      width: 1.1rem;
16
+      height: .24rem;
17
+      background:linear-gradient(54deg,rgba(255,105,0,1) 0%,rgba(255,136,0,0.76) 100%);
18
+      border-radius: 0 .15rem .15rem 0;
19
+      text-align: center;
20
+      line-height: .24rem;
21
+      color: #ffffff;
22
+      font-size: .12rem;
23
+      margin: .2rem 0 0 ;
24
+    }
25
+    .list-card{
26
+      margin: .35rem .2rem 0 .3rem;
27
+      padding: 0 0 .3rem .2rem;
28
+      border-left: 1px solid #C9C9C9;
29
+      position: relative;
30
+      .point-top{
31
+        position: absolute;
32
+        top: -.04rem;
33
+        left: -.04rem;
34
+        width: .08rem;
35
+        height: .08rem;
36
+        border-radius: 50%;
37
+        background: #C9C9C9;
38
+      }
39
+      .point-bottom{
40
+        position: absolute;
41
+        bottom: -.04rem;
42
+        left: -.04rem;
43
+        width: .08rem;
44
+        height: .08rem;
45
+        border-radius: 50%;
46
+        background: #C9C9C9;
47
+      }
48
+      .card-time{
49
+        position: absolute;
50
+        top: -.25rem;
51
+        left: 0rem;
52
+        transform: translateX(-50%);
53
+        font-size: .12rem;
54
+      }
55
+      .card-content{
56
+        box-shadow:0px 2px 10px 0px rgba(193,204,217,0.5);
57
+        border-radius:8px;
58
+        padding: .15rem;
59
+        width: 100%;
60
+        height: 100%;
61
+        box-sizing: border-box;
62
+      }
63
+    }
64
+  }
65
+}

+ 18
- 0
src/pages/sales/router.js 查看文件

@@ -7,6 +7,9 @@ import placeOrder from './placeOrder/index' // 城咖啡-点单
7 7
 import salesRecord from './salesRecord/index' // 销售记录
8 8
 import salesGiveOutDetail from './salesGiveOutDetail/index' // 销售发放详情
9 9
 import cardAndCouponNum from './cardAndCouponNum/index' // 卡券数量信息
10
+import customerSearch from './customerSearch/index' // 客户搜索
11
+import getRecord from './getRecord/index' // 发放详情
12
+import history from './history/index' // 备注历史记录
10 13
 
11 14
 Vue.use(Router)
12 15
 
@@ -41,6 +44,21 @@ const router = new Router({
41 44
     name: 'cardAndCouponNum',
42 45
     component: cardAndCouponNum,
43 46
     children: []
47
+  }, { // 客户搜索
48
+    path: '/customerSearch',
49
+    name: 'customerSearch',
50
+    component: customerSearch,
51
+    children: []
52
+  }, { // 发放详情
53
+    path: '/getRecord',
54
+    name: 'getRecord',
55
+    component: getRecord,
56
+    children: []
57
+  }, { // 备注历史记录
58
+    path: '/history',
59
+    name: 'history',
60
+    component: history,
61
+    children: []
44 62
   }],
45 63
 })
46 64
 

+ 1
- 0
src/pages/user/App.vue 查看文件

@@ -23,6 +23,7 @@ export default {
23 23
     })
24 24
   },
25 25
   created () {
26
+    console.log('creatde')
26 27
     if (location.search && this.toolClass.UrlSearch(location.search).code) {
27 28
       this.code = this.toolClass.UrlSearch(location.search).code
28 29
     } else {