yuantianjiao 6 年 前
コミット
2683dce1ad
共有7 個のファイルを変更した243 個の追加71 個の削除を含む
  1. 2
    2
      config/index.js
  2. 144
    0
      src/components/myCard/myCard.vue
  3. 28
    4
      src/module/sales/coffeeIndex/index.vue
  4. 5
    0
      src/module/sales/coffeeIndex/page.scss
  5. 3
    65
      src/module/sales/login/index.vue
  6. 55
    0
      src/store/login/login.js
  7. 6
    0
      src/util/api.js

+ 2
- 2
config/index.js ファイルの表示

@@ -25,8 +25,8 @@ module.exports = {
25 25
       '/api': {
26 26
         // target: 'https://dp.huiju360.com.cn/hj_operations',
27 27
         // target: 'http://192.168.0.62:8080', //wf
28
-        target: 'http://192.168.0.11:8080', //ys
29
-        // target: 'http://dev.ycjcjy.com', //zys
28
+        // target: 'http://192.168.0.11:8080', //ys
29
+        target: 'http://dev.ycjcjy.com', //zys
30 30
         changeOrigin: true, // 如果接口跨域,需要进行这个参数配置
31 31
         // pathRewrite: {
32 32
         //   '^/api': '/api-v2/api'

+ 144
- 0
src/components/myCard/myCard.vue ファイルの表示

@@ -0,0 +1,144 @@
1
+<template>
2
+  <div class="card-content flex-l" :class="{invalid: data.invalid}">
3
+    <div class="card-top flex-h">
4
+      <div>
5
+        <img :src="logo" class="logo">
6
+        <span>¥ <span> 9999 </span> 元</span>
7
+        <img :src="line3" class="line3">
8
+      </div>
9
+      <div>
10
+        <h2>咖啡团课一次体验卡</h2>
11
+        <span>可在银城会所健身房体验私教课一次</span>
12
+        <span>2018年02月17日-2018年3月17日</span>
13
+      </div>
14
+    </div>
15
+    <div class="card-main flex-h">
16
+      <img :src="line">
17
+      <div class="flex-h">
18
+        <span>总数量</span>
19
+        <span>40</span>
20
+      </div>
21
+      <div>
22
+        <span>总剩余</span>
23
+        <span>40</span>
24
+      </div>
25
+      <div>
26
+        <span>用户领取</span>
27
+        <span>40</span>
28
+      </div>
29
+      <div>
30
+        <span>用户使用</span>
31
+        <span>40</span>
32
+      </div>
33
+    </div>
34
+    <div class="card-bottom" @click.stop="share">
35
+      分享卡券
36
+    </div>
37
+  </div>
38
+</template>
39
+
40
+<script>
41
+export default {
42
+  name: 'myCard',
43
+  props: {
44
+    data: {
45
+      type: Object,
46
+      default: () => { }
47
+    }
48
+  },
49
+  methods: {
50
+    share () {
51
+      this.$emit('share', this.data)
52
+    }
53
+  }
54
+}
55
+</script>
56
+
57
+<style lang="scss" scoped>
58
+.card-content {
59
+  box-shadow: 0px 2px 0.1rem 0px rgba(193, 204, 217, 0.5);
60
+  border-radius: 0.08rem;
61
+  overflow: hidden;
62
+  margin-bottom: 0.2rem;
63
+  &.invalid {
64
+    filter: grayscale(100%);
65
+  }
66
+  .card-top {
67
+    height: 0.88rem;
68
+    padding: 0.1rem;
69
+    box-sizing: border-box;
70
+    div:nth-of-type(1) {
71
+      width: 1.2rem;
72
+      position: relative;
73
+      .logo {
74
+        width: 85%;
75
+        position: absolute;
76
+      }
77
+      .line3 {
78
+        height: 80%;
79
+        position: absolute;
80
+        right: 0.15rem;
81
+        top: 10%;
82
+      }
83
+      > span {
84
+        color: #fc6243;
85
+        position: absolute;
86
+        top: 50%;
87
+        left: 40%;
88
+        transform: translate(-50%, -50%);
89
+        font-size: 0.14rem;
90
+        display: flex;
91
+        align-items: baseline;
92
+        span {
93
+          color: #fc6243;
94
+          font-size: 0.26rem;
95
+        }
96
+      }
97
+    }
98
+    div:nth-of-type(2) {
99
+      flex: 1;
100
+      h2 {
101
+        font-size: 0.16rem;
102
+      }
103
+      span {
104
+        display: block;
105
+        color: #323645;
106
+        font-size: 12px;
107
+        padding-top: 0.03rem;
108
+      }
109
+    }
110
+  }
111
+  .card-main {
112
+    position: relative;
113
+    img {
114
+      width: 100%;
115
+      position: absolute;
116
+      top: 0;
117
+      left: 0;
118
+    }
119
+    div {
120
+      flex: 1;
121
+      display: flex;
122
+      flex-flow: column nowrap;
123
+      justify-content: center;
124
+      align-items: center;
125
+      padding-top: 0.15rem;
126
+      span:nth-of-type(1) {
127
+        font-size: 0.12rem;
128
+        color: #323645;
129
+      }
130
+      span:nth-of-type(2) {
131
+        font-size: 0.12rem;
132
+        color: #fc6243;
133
+      }
134
+    }
135
+  }
136
+  .card-bottom {
137
+    padding: 0.1rem;
138
+    margin-top: 0.1rem;
139
+    background-color: #fc6243;
140
+    text-align: center;
141
+    color: #fff;
142
+  }
143
+}
144
+</style>

+ 28
- 4
src/module/sales/coffeeIndex/index.vue ファイルの表示

@@ -44,8 +44,10 @@
44 44
               </div>
45 45
             </div>
46 46
           </li>
47
-          <li :hidden="navActive !== 1">
48
-            2
47
+          <li :hidden="navActive !== 1" class="my-card">
48
+            <div class="list-box">
49
+              <myCard v-for="(item,index) in cardList" :key="index" :data='item' @share='share'></myCard>
50
+            </div>
49 51
           </li>
50 52
           <li :hidden="navActive !== 2">
51 53
             3
@@ -68,12 +70,19 @@
68 70
 <script>
69 71
 import caseTableItem from '../../../components/caseTableItem/index'
70 72
 import topCaseInfo from '../../../components/topCaseInfo/index'
73
+import myCard from '../../../components/myCard/myCard'
74
+import logo from '../../../common/icon/logo-t.png'
75
+import line from '../../../common/icon/cicyle.png'
76
+import line3 from '../../../common/icon/Line3.png'
71 77
 
72 78
 export default {
73 79
   name: '',
74 80
   data () {
75 81
     return {
76
-      navActive: 0,
82
+      logo,
83
+      line,
84
+      line3,
85
+      navActive: 1,
77 86
       cutNavList: [{
78 87
         value: '城咖啡',
79 88
         id: '1',
@@ -114,7 +123,18 @@ export default {
114 123
       }, {
115 124
         name: '案场名称2',
116 125
         list: [{}, {}, {}, {}, {}],
117
-      }]
126
+      }],
127
+      cardList: [
128
+        {
129
+          invalid: true
130
+        },
131
+        {
132
+          invalid: false
133
+        },
134
+        {
135
+          invalid: false
136
+        }
137
+      ]
118 138
     }
119 139
   },
120 140
   computed: {
@@ -123,6 +143,7 @@ export default {
123 143
   components: {
124 144
     topCaseInfo,
125 145
     caseTableItem,
146
+    myCard
126 147
   },
127 148
   created () {
128 149
 
@@ -137,6 +158,9 @@ export default {
137 158
       this.topCaseInfoData.caseId = val.id
138 159
       this.showSelect = false
139 160
     },
161
+    share (item) {
162
+      console.log(item)
163
+    }
140 164
   }
141 165
 }
142 166
 </script>

+ 5
- 0
src/module/sales/coffeeIndex/page.scss ファイルの表示

@@ -137,6 +137,11 @@
137 137
               }
138 138
             }
139 139
           }
140
+          &.my-card{
141
+            .list-box{
142
+              padding: .26rem .2rem;
143
+            }
144
+          }
140 145
         }
141 146
       }
142 147
     }

+ 3
- 65
src/module/sales/login/index.vue ファイルの表示

@@ -53,79 +53,25 @@
53 53
 
54 54
 <script>
55 55
 import logo from '../../../common/icon/logo.png'
56
-import { mapState, createNamespacedHelpers } from 'vuex'
56
+import { createNamespacedHelpers } from 'vuex'
57 57
 const { mapActions: actions } = createNamespacedHelpers('userCenter')
58
+const { mapActions: mapLoginActions } = createNamespacedHelpers('login')
58 59
 export default {
59 60
   data () {
60 61
     return {
61 62
       logo,
62 63
       showCase: false,
63 64
       showSales: false,
64
-      columns: [],
65
-      columnsS: [],
66
-      caseName: '选择案场',
67
-      salesName: '选择销售',
68 65
       seconds: 60,
69 66
       postData: {
70 67
         phone: '',
71
-        case: '',
72
-        sales: '',
73 68
         captcha: ''
74 69
       }
75 70
     }
76 71
   },
77
-  computed: {
78
-    ...mapState({
79
-      caseInfo: x => x.userCenter.caseInfo
80
-    })
81
-  },
82
-  created () {
83
-    this.getCaseInfo(1).then(() => {
84
-      this.columns = this.caseInfo.cases
85
-    })
86
-  },
87 72
   methods: {
88
-    ...actions(['getCaseInfo']),
89 73
     ...actions(['getCaptcha']),
90
-    ...actions(['submitData']),
91
-    onConfirmC (value, index) {
92
-      this.caseName = value.CaseName
93
-      this.postData.case = value.CaseId
94
-      this.columnsS = []
95
-      this.salesName = '选择销售'
96
-      if (this.caseInfo.sales) {
97
-        for (let i = 0; i < this.caseInfo.sales.length; i++) {
98
-          if (this.caseInfo.sales[i].CaseId === this.postData.case) {
99
-            this.columnsS.push(this.caseInfo.sales[i])
100
-          }
101
-        }
102
-      }
103
-      this.showCase = false
104
-    },
105
-    onCancelC () {
106
-      this.showCase = false
107
-    },
108
-    onConfirmS (value, index) {
109
-      this.salesName = value.UserName
110
-      this.postData.sales = value.UserId
111
-      this.showSales = false
112
-    },
113
-    onCancelS () {
114
-      this.showSales = false
115
-    },
116
-    selectCase () {
117
-      this.showCase = true
118
-    },
119
-    selectSales () {
120
-      if (!this.postData.case) {
121
-        this.$toast('请先选择案场')
122
-        return
123
-      } else if (this.columnsS.length <= 0) {
124
-        this.$toast('此案场无销售')
125
-        return
126
-      }
127
-      this.showSales = true
128
-    },
74
+    ...mapLoginActions(['submitData']),
129 75
     sandMsg () {
130 76
       if (!this.postData.phone) {
131 77
         this.$toast('请先填写手机号')
@@ -149,14 +95,6 @@ export default {
149 95
         this.$toast('请先获取验证码')
150 96
         return
151 97
       }
152
-      if (!this.postData.case) {
153
-        this.$toast('请选择案场')
154
-        return
155
-      }
156
-      if (!this.postData.sales) {
157
-        this.$toast('请选择销售')
158
-        return
159
-      }
160 98
       this.submitData(this.postData).then((res) => {
161 99
         this.$toast(res)
162 100
       })

+ 55
- 0
src/store/login/login.js ファイルの表示

@@ -0,0 +1,55 @@
1
+import Ajax from '../../util/ajax'
2
+import api from '../../util/api'
3
+const http = new Object
4
+
5
+http.getCaptcha = (data) => { // 获取验证码
6
+  console.log(data)
7
+  return new Promise((resolve, reject) => {
8
+    Ajax(api.user.captcha.url, {
9
+      method: api.user.captcha.method,
10
+      queryData: {
11
+        phone: data
12
+      }
13
+    }).then(res => {
14
+      resolve(res)
15
+    }).catch((err) => {
16
+      reject(err)
17
+    })
18
+  })
19
+}
20
+
21
+http.submitData = (data) => { // 登陆
22
+  console.log(data)
23
+  return new Promise((resolve, reject) => {
24
+    Ajax(api.login.login.url, {
25
+      method: api.login.login.method,
26
+      data: data
27
+    }).then(res => {
28
+      resolve(res)
29
+    }).catch((err) => {
30
+      reject(err)
31
+    })
32
+  })
33
+}
34
+
35
+export default {
36
+  namespaced: true,
37
+  state: {},
38
+  mutations: {},
39
+  actions: {
40
+    getCaptcha (data) {
41
+      return new Promise((resolve) => {
42
+        http.getCaptcha(data).then((res) => {
43
+          resolve(res)
44
+        })
45
+      })
46
+    },
47
+    submitData(data) {
48
+      return new Promise((resolve) => {
49
+        http.submitData(data).then((res) => {
50
+          resolve(res)
51
+        })
52
+      })
53
+    }
54
+  }
55
+}

+ 6
- 0
src/util/api.js ファイルの表示

@@ -43,6 +43,12 @@ const $api = {
43 43
       method: 'get',
44 44
       url: `${baseUrl}${guest}/captcha`
45 45
     }
46
+  },
47
+  login:{ // 主管、销售端登陆
48
+    login: {
49
+      method: 'post',
50
+      url: `${baseUrl}${guest}/wxsignin`
51
+    }
46 52
   }
47 53
 }
48 54
 export default $api