许成详 6 년 전
부모
커밋
8e6adcc01c

+ 2
- 2
config/index.js 파일 보기

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

+ 1
- 2
src/module/user/mainPage/indexPage/index.vue 파일 보기

@@ -46,7 +46,7 @@
46 46
     </div>
47 47
     <div class="flex-h">
48 48
       <ul class="projectList flex-item">
49
-        <router-link tag="li" :to="{ name:'majorProjects', query:{ CmsCaseId: item.CmsCaseId } }" v-for="(item,index) in project" :key="index">
49
+        <router-link tag="li" :to="{ name:'majorProjects', query:{ id: item.CmsCaseId } }" v-for="(item,index) in project" :key="index">
50 50
           <img :src='item.CaseImageUrl' :key="indexs" class="centerLabel cover" alt="">
51 51
         </router-link>
52 52
       </ul>
@@ -142,7 +142,6 @@ export default {
142 142
     ...mapIndexActions(['getIndexInfo']),
143 143
     ...mapIndexActions(['getIndexLocation']),
144 144
     jump (item) {
145
-      console.log(item)
146 145
       item.ForwardType = item.ForwardType || ''
147 146
       if (item.ForwardType === 'url') {
148 147
         window.location.href = '//' + item.ForwardUrl

+ 9
- 7
src/module/user/mainPage/userCenter/index.vue 파일 보기

@@ -1,7 +1,8 @@
1 1
 <template>
2 2
   <div class="mainPage">
3 3
     <div class="loading" v-if="isLoading">
4
-      <img :src='loading' alt="">
4
+      <!-- <img :src='loading' alt=""> -->
5
+      <div @click="bindMobile">请绑定手机号</div>
5 6
     </div>
6 7
     <div v-else>
7 8
       <div class="userTop_view" >
@@ -82,15 +83,13 @@ export default {
82 83
 
83 84
   },
84 85
   created () {
85
-    this.getUserInfo({ org: this.org }).then(() => {
86
+    this.getUserInfo({ org: this.org }).then((res) => {
86 87
       this.user = this.userInfo.customer
87 88
       this.AccountInfo = JSON.parse(this.user.AccountInfo)
88 89
       this.headimgurl = this.AccountInfo.headimgurl
89
-      if (this.user.Phone) {
90
-        this.isLoading = false
91
-      } else {
92
-        this.$router.push({ name: 'bindMobile' })
93
-      }
90
+      this.isLoading = false
91
+    }).catch((err) => {
92
+      console.log(err)
94 93
     })
95 94
   },
96 95
   methods: {
@@ -106,6 +105,9 @@ export default {
106 105
     },
107 106
     toCoupons () {
108 107
       this.$router.push({ name: 'coupons' })
108
+    },
109
+    bindMobile () {
110
+      this.$router.push({ name: 'bindMobile' })
109 111
     }
110 112
   }
111 113
 }

+ 129
- 53
src/module/user/majorProjects/index.vue 파일 보기

@@ -1,15 +1,21 @@
1 1
 <template>
2 2
   <div class="mainPage">
3 3
     <div class="banner">
4
-      <img src="" class="centerLabel cover" alt="">
4
+      <div>
5
+        <swiper :options="swiperOption" ref="mySwiper">
6
+          <swiper-slide class="swiper-slide" v-for="(item,index) in projectInfo.CmsCaseImgs" :key="index">
7
+            <img :src='item.CaseImageUrl' class="cover" alt="">
8
+          </swiper-slide>
9
+        </swiper>
10
+      </div>
5 11
     </div>
6
-    <p>段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落段落</p>
12
+    <p>{{projectInfo.DetailContent}}</p>
7 13
     <div class="list flex-h">
8 14
       <div class="flex-item">
9 15
         <div v-for="(item,index) in courseList" :key="index">
10 16
           <span>{{item.month+1}}月</span>
11 17
           <ul>
12
-            <router-link tag="li" :to="{name: 'majorProjectsDetail', query: {}}" v-for="(subItem,subIndex) in item.list" :key="subIndex" class="flex-h">
18
+            <router-link tag="li" v-for="(subItem,subIndex) in item.list" :key="subIndex" :to="{name: 'majorProjectsDetail', query: {id: subItem.id}}" class="flex-h">
13 19
               <div class="flex-item">
14 20
                 <div>
15 21
                   <courseItem :data="subItem"></courseItem>
@@ -44,73 +50,143 @@
44 50
 </template>
45 51
 
46 52
 <script>
53
+import { swiper, swiperSlide } from 'vue-awesome-swiper'
54
+import 'swiper/dist/css/swiper.css'
55
+import { mapState, createNamespacedHelpers } from 'vuex'
56
+const { mapActions: mapProjectActions, mapState: mapProjectState } = createNamespacedHelpers('majorProjects')
47 57
 import courseItem from '../../../components/courseItem/index'
48 58
 
49 59
 export default {
50 60
   name: '',
51 61
   data () {
52 62
     return {
63
+      swiperOption: {
64
+        observer: true,
65
+        autoplay: {
66
+          disableOnInteraction: false,
67
+        }
68
+      },
53 69
       courseList: [], // 课程列表
54
-      initList: [{ // 初始化课程列表
55
-        id: '',
56
-        title: '课程名称',
57
-        img: '',
58
-        time: '2018.04.04 18:30-20:00',
59
-        address: '南京南',
60
-        tag: ['儿童教育', '小小外交官'],
61
-        courseType: '团体课',
62
-        defaultPrice: '168/节',
63
-        getWay: 'ticket',
64
-        startDate: 1514779200000,
65
-        endDate: 1514781600000,
66
-      }, {
67
-        id: '',
68
-        title: '课程名称',
69
-        img: '',
70
-        time: '2018.04.04 18:30-20:00',
71
-        address: '南京南',
72
-        tag: ['儿童教育', '小小外交官'],
73
-        courseType: '团体课',
74
-        defaultPrice: '168/节',
75
-        getWay: 'ticket',
76
-        startDate: 1514779200000,
77
-        endDate: 1514781600000,
78
-      }, {
79
-        id: '',
80
-        title: '课程名称',
81
-        img: '',
82
-        time: '2018.04.04 18:30-20:00',
83
-        address: '南京南',
84
-        tag: ['儿童教育', '小小外交官'],
85
-        courseType: '团体课',
86
-        defaultPrice: '168/节',
87
-        getWay: 'ticket',
88
-        startDate: 1517460000000,
89
-        endDate: 1517467200000,
90
-      }, {
91
-        id: '',
92
-        title: '课程名称',
93
-        img: '',
94
-        time: '2018.04.04 18:30-20:00',
95
-        address: '南京南',
96
-        tag: ['儿童教育', '小小外交官'],
97
-        courseType: '团体课',
98
-        defaultPrice: '168/节',
99
-        getWay: 'ticket',
100
-        startDate: 1517460000000,
101
-        endDate: 1517467200000,
102
-      }],
70
+      initList: [
71
+        // { // 初始化课程列表
72
+        //   id: '',
73
+        //   title: '课程名称',
74
+        //   img: '',
75
+        //   time: '2018.04.04 18:30-20:00',
76
+        //   address: '南京南',
77
+        //   tag: ['儿童教育', '小小外交官'],
78
+        //   courseType: '团体课',
79
+        //   defaultPrice: '168/节',
80
+        //   getWay: 'ticket',
81
+        //   startDate: 1514779200000,
82
+        //   endDate: 1514781600000,
83
+        // }, {
84
+        //   id: '',
85
+        //   title: '课程名称',
86
+        //   img: '',
87
+        //   time: '2018.04.04 18:30-20:00',
88
+        //   address: '南京南',
89
+        //   tag: ['儿童教育', '小小外交官'],
90
+        //   courseType: '团体课',
91
+        //   defaultPrice: '168/节',
92
+        //   getWay: 'ticket',
93
+        //   startDate: 1514779200000,
94
+        //   endDate: 1514781600000,
95
+        // }, {
96
+        //   id: '',
97
+        //   title: '课程名称',
98
+        //   img: '',
99
+        //   time: '2018.04.04 18:30-20:00',
100
+        //   address: '南京南',
101
+        //   tag: ['儿童教育', '小小外交官'],
102
+        //   courseType: '团体课',
103
+        //   defaultPrice: '168/节',
104
+        //   getWay: 'ticket',
105
+        //   startDate: 1517460000000,
106
+        //   endDate: 1517467200000,
107
+        // }, {
108
+        //   id: '',
109
+        //   title: '课程名称',
110
+        //   img: '',
111
+        //   time: '2018.04.04 18:30-20:00',
112
+        //   address: '南京南',
113
+        //   tag: ['儿童教育', '小小外交官'],
114
+        //   courseType: '团体课',
115
+        //   defaultPrice: '168/节',
116
+        //   getWay: 'ticket',
117
+        //   startDate: 1517460000000,
118
+        //   endDate: 1517467200000,
119
+        // }
120
+      ],
103 121
     }
104 122
   },
105
-  computed: {},
123
+  computed: {
124
+    ...mapState({
125
+      orgid: x => x.app.orgId,
126
+      fiveA: x => x.index.fiveA,
127
+      banner: x => x.index.banner,
128
+      message: x => x.index.message,
129
+      project: x => x.index.project,
130
+      cms: x => x.index.cms,
131
+    }),
132
+    ...mapProjectState({
133
+      projectInfo: x => x.projectInfo
134
+    }),
135
+    MySwiper () {
136
+      return this.$refs.mySwiper.swiper
137
+    },
138
+  },
106 139
   components: {
107 140
     courseItem,
141
+    swiper,
142
+    swiperSlide,
108 143
   },
109 144
   created () {
110 145
     this.initData()
111 146
   },
112 147
   methods: {
148
+    ...mapProjectActions([
149
+      'getProjectInfo',
150
+    ]),
151
+    returnTag (arr) {
152
+      var aArr = []
153
+      for (var n = 0; n < arr.length; n++) {
154
+        aArr.push(arr[n].TagName)
155
+      }
156
+      return aArr
157
+    },
158
+    returnNum (val) {
159
+      return val > 9 ? val : '0' + val
160
+    },
161
+    returnDate (val) {
162
+      val = new Date(val)
163
+      return val.getFullYear() + '.' + this.returnNum(val.getMonth()+1) + '.' + this.returnNum(val.getDate())
164
+    },
113 165
     initData () { // 初始化数据
166
+      this.getProjectInfo({ id: this.$route.query.id }).then((res) => {
167
+        // console.log(JSON.stringify(res))
168
+        // this.initList
169
+        var aArr = []
170
+        for (var n = 0; n < res.Courses.length; n++) {
171
+          aArr.push({
172
+            id: res.Courses[n].CourseId,
173
+            title: res.Courses[n].CourseName,
174
+            img: res.Courses[n].CourseImg,
175
+            time: this.returnDate(res.Courses[n].BeginDate) + '至' + this.returnDate(res.Courses[n].EndDate),
176
+            address: res.CaseAddress == undefined ? '暂无数据' : res.CaseAddress,
177
+            tag: this.returnTag(res.Courses[n].CourseTags),
178
+            courseType: '团体课',
179
+            defaultPrice: res.Courses[n].Price + '/节',
180
+            getWay: 'ticket',
181
+            startDate: new Date(res.Courses[n].BeginDate).getTime(),
182
+            endDate: new Date(res.Courses[n].EndDate).getTime(),
183
+          })
184
+        }
185
+        this.initList = aArr
186
+        this.calcArr()
187
+      })
188
+    },
189
+    calcArr () {
114 190
       let arr = []
115 191
       for (var n = 0; n < this.initList.length; n++) {
116 192
         arr.push(new Date(this.initList[n].startDate).getMonth())

+ 14
- 0
src/module/user/majorProjects/page.scss 파일 보기

@@ -11,6 +11,20 @@
11 11
     background: #eee;
12 12
     position: relative;
13 13
     overflow: hidden;
14
+    >div{
15
+      width: 100%;
16
+      position: absolute;
17
+      left: 0;
18
+      top: 0;
19
+      bottom: 0;
20
+      >div{
21
+        width: 100%;
22
+        position: absolute;
23
+        left: 0;
24
+        top: 0;
25
+        bottom: 0;
26
+      }
27
+    }
14 28
   }
15 29
   p{
16 30
     width: 100%;

+ 76
- 11
src/module/user/majorProjectsDetail/index.vue 파일 보기

@@ -3,22 +3,28 @@
3 3
     <div class="flex-item">
4 4
       <div class="content">
5 5
         <div class="banner">
6
-          <img src="" class="centerLabel cover" alt="">
6
+          <div class="scrollImg">
7
+            <swiper :options="swiperOption" ref="mySwiper">
8
+              <swiper-slide class="swiper-slide" v-for="(item,index) in courseDetail.CourseImgs" :key="index">
9
+                <img :src='item.ImgUrl' class="cover" alt="">
10
+              </swiper-slide>
11
+            </swiper>
12
+          </div>
7 13
           <div>
8
-            <span>课程名称</span>
14
+            <span>{{courseDetail.CourseName}}</span>
9 15
             <div>
10
-              <span>¥<em>199</em>.00起/课时</span>
11
-              <span>参与者<em>30</em>/40人</span>
16
+              <span>¥<em>{{courseDetail.Price}}</em>起/课时</span>
17
+              <span>参与者<em>{{courseDetail.SignupNum}}</em>/{{courseDetail.MaxNum}}人</span>
12 18
             </div>
13 19
           </div>
14 20
         </div>
15 21
         <div class="subContent time">
16 22
           <h5>时间</h5>
17
-          <span>2018年03月03日~2018年03月21日</span>
23
+          <span>{{returnDate(courseDetail.BeginDate)}}~{{returnDate(courseDetail.EndDate)}}</span>
18 24
           <div class="list flex-h">
19 25
             <div class="flex-item">
20 26
               <ul :class="{'show':showMoreCourse}">
21
-                <li v-for="(item,index) in 10" :key="index">03/21 周六 14:00~17:30</li>
27
+                <li v-for="(item,index) in courseTimeList" :key="index">{{returnCourseTime(item.BeginDate,item.EndDate)}}</li>
22 28
               </ul>
23 29
               <a class="moreCourse" @click="triggerCourseTime">
24 30
                 {{showMoreCourse ? '收起' : '更多'}}
@@ -35,7 +41,15 @@
35 41
             <div class="flex-item">
36 42
               <div class="img">
37 43
                 <router-link :to="{name: '', query: {}}">
38
-
44
+                  <img :src="courseDetail.CaseInfo.CaseIcon" class="centerLabel cover" alt="">
45
+                  <div class="flex-h">
46
+                    <i class="iconfont icon-dingwei"></i>
47
+                    <div class="flex-item">
48
+                      <div>
49
+                        <span>{{courseDetail.CaseInfo.CaseName}}({{courseDetail.CaseInfo.CaseAddress}})</span>
50
+                      </div>
51
+                    </div>
52
+                  </div>
39 53
                 </router-link>
40 54
               </div>
41 55
             </div>
@@ -46,27 +60,78 @@
46 60
     <div class="flex-h">
47 61
       <div class="flex-item">
48 62
         <div>
49
-          <span>总计¥<em>109</em>.00</span>
63
+          <span>总计¥<em>{{courseDetail.Price}}</em></span>
50 64
           <span>优惠券体验</span>
51 65
         </div>
52 66
       </div>
53
-      <router-link :to="{name: 'placeOrderForCourse', query: {}}">去购买</router-link>
67
+      <router-link :to="{name: 'placeOrderForCourse', query: {id: courseDetail.CourseId}}">去购买</router-link>
54 68
     </div>
55 69
   </div>
56 70
 </template>
57 71
 
58 72
 <script>
73
+import { swiper, swiperSlide } from 'vue-awesome-swiper'
74
+import 'swiper/dist/css/swiper.css'
75
+import { mapState, createNamespacedHelpers } from 'vuex'
76
+const { mapActions: mapProjectActions, mapState: mapProjectState } = createNamespacedHelpers('majorProjects')
59 77
 
60 78
 export default {
61 79
   name: '',
62 80
   data () {
63 81
     return {
82
+      swiperOption: {
83
+        observer: true,
84
+        autoplay: {
85
+          disableOnInteraction: false,
86
+        }
87
+      },
64 88
       showMoreCourse: false, // 显隐更多课程时间
89
+      courseTimeList: [], // 课程时间
65 90
     }
66 91
   },
67
-  computed: {},
68
-  created () { },
92
+  computed: {
93
+    ...mapState({
94
+      orgid: x => x.app.orgId,
95
+      fiveA: x => x.index.fiveA,
96
+      banner: x => x.index.banner,
97
+      message: x => x.index.message,
98
+      project: x => x.index.project,
99
+      cms: x => x.index.cms,
100
+    }),
101
+    ...mapProjectState({
102
+      courseDetail: x => x.courseDetail
103
+    }),
104
+    MySwiper () {
105
+      return this.$refs.mySwiper.swiper
106
+    },
107
+  },
108
+  components: {
109
+    swiper,
110
+    swiperSlide,
111
+  },
112
+  created () {
113
+    this.getCourseDetailInfo({ id: this.$route.query.id }).then((res) => {
114
+      var arr = res.CourseDetail
115
+      this.courseTimeList = arr.sort(function (a, b) { return new Date(a.BeginDate).getTime() > new Date(b.BeginDate).getTime() ? 1 : -1 })
116
+      console.log(JSON.stringify(this.courseTimeList))
117
+    })
118
+  },
69 119
   methods: {
120
+    ...mapProjectActions([
121
+      'getCourseDetailInfo',
122
+    ]),
123
+    returnCourseTime (val,endVal) { // 返回课时时间
124
+      val = new Date(val)
125
+      endVal = new Date(endVal)
126
+      return this.returnNum(val.getMonth() + 1) + '/' + this.returnNum(val.getDate()) + ' 周' + '日一二三四五六'.split('')[new Date(val).getDay()] + ' ' + this.returnNum(val.getHours()) + ':' + this.returnNum(val.getMinutes()) + '~' + this.returnNum(endVal.getHours()) + ':' + this.returnNum(endVal.getMinutes())
127
+    },
128
+    returnNum (val) {
129
+      return val > 9 ? val : '0' + val
130
+    },
131
+    returnDate (val) {
132
+      val = new Date(val)
133
+      return val.getFullYear() + '年' + this.returnNum(val.getMonth() + 1) + '月' + this.returnNum(val.getDate()) + '日'
134
+    },
70 135
     triggerCourseTime () { // 显隐更多课程时间
71 136
       this.showMoreCourse = !this.showMoreCourse
72 137
     },

+ 51
- 2
src/module/user/majorProjectsDetail/page.scss 파일 보기

@@ -18,10 +18,23 @@
18 18
         background: #eee;
19 19
         position: relative;
20 20
         overflow: hidden;
21
-        img{
21
+        &>div.scrollImg{
22
+          width: 100%;
23
+          position: absolute;
24
+          top: 0;
25
+          left: 0;
26
+          bottom: 0;
27
+          overflow: hidden;
22 28
           z-index: 1;
29
+          >div{
30
+            width: 100%;
31
+            position: absolute;
32
+            top: 0;
33
+            left: 0;
34
+            bottom: 0;
35
+          }
23 36
         }
24
-        &>div{
37
+        &>div.scrollImg+div{
25 38
           width: 100%;
26 39
           position: absolute;
27 40
           left: 0;
@@ -150,6 +163,42 @@
150 163
                 border-radius: .06rem;
151 164
                 position: relative;
152 165
                 overflow: hidden;
166
+                >div{
167
+                  width: 100%;
168
+                  position: absolute;
169
+                  left: 0;
170
+                  bottom: 0;
171
+                  overflow: hidden;
172
+                  background: rgba(0,0,0,.3);
173
+                  z-index: 2;
174
+                  *{
175
+                    font-size: .13rem;
176
+                    color: #fff;
177
+                  }
178
+                  i{
179
+                    margin-left: .1rem;
180
+                    line-height: .3rem;
181
+                  }
182
+                  >div{
183
+                    margin: 0 .1rem 0 .05rem;
184
+                    >div{
185
+                      width: 100%;
186
+                      position: relative;
187
+                      overflow: hidden;
188
+                      >span{
189
+                        width: 100%;
190
+                        display: block;
191
+                        line-height: .3rem;
192
+                        overflow: hidden;
193
+                        white-space: nowrap;
194
+                        text-overflow: ellipsis;
195
+                      }
196
+                    }
197
+                  }
198
+                }
199
+                img{
200
+                  z-index: 1;
201
+                }
153 202
               }
154 203
             }
155 204
           }

+ 119
- 38
src/module/user/placeOrderForCourse/index.vue 파일 보기

@@ -3,48 +3,89 @@
3 3
     <div class="flex-item">
4 4
       <div>
5 5
         <h4>订单信息</h4>
6
-        <ul>
7
-          <li class="flex-h">
8
-            <div class="flex-item">
9
-              <div>
10
-                <span>精品课程名称</span>
6
+        <div class="list flex-h">
7
+          <div class="flex-item">
8
+            <ul>
9
+              <li class="flex-h">
10
+                <div class="flex-item">
11
+                  <div>
12
+                    <span>精品课程名称</span>
13
+                  </div>
14
+                </div>
15
+                <span>满手</span>
16
+              </li>
17
+              <li class="flex-h">
18
+                <div class="flex-item">
19
+                  <div>
20
+                    <span>预计开班时间</span>
21
+                  </div>
22
+                </div>
23
+                <span>满手</span>
24
+              </li>
25
+              <li class="flex-h">
26
+                <div class="flex-item">
27
+                  <div>
28
+                    <span>时间描述</span>
29
+                  </div>
30
+                </div>
31
+                <span>满手</span>
32
+              </li>
33
+              <li class="flex-h">
34
+                <div class="flex-item">
35
+                  <div>
36
+                    <span>地点</span>
37
+                  </div>
38
+                </div>
39
+                <span>满手</span>
40
+              </li>
41
+              <li class="flex-h">
42
+                <div class="flex-item">
43
+                  <div>
44
+                    <span>价格</span>
45
+                  </div>
46
+                </div>
47
+                <span>满手</span>
48
+              </li>
49
+            </ul>
50
+            <div class="selectTicket">
51
+              <div class="flex-h" @click="showLayer = true">
52
+                <div class="flex-item">
53
+                  <div>
54
+                    <span>优惠信息</span>
55
+                  </div>
56
+                </div>
57
+                <span>{{postData.CouponId == '' ? '暂未选择优惠券' : postData.CouponName}}</span>
58
+                <i class="iconfont icon-jiantou-right"></i>
11 59
               </div>
12
-            </div>
13
-            <span>满手</span>
14
-          </li>
15
-          <li class="flex-h">
16
-            <div class="flex-item">
17
-              <div>
18
-                <span>预计开班时间</span>
19
-              </div>
20
-            </div>
21
-            <span>满手</span>
22
-          </li>
23
-          <li class="flex-h">
24
-            <div class="flex-item">
25
-              <div>
26
-                <span>时间描述</span>
60
+              <div class="flex-h">
61
+                <div class="flex-item">
62
+                  <div>
63
+                    <span>优惠券</span>
64
+                  </div>
65
+                </div>
66
+                <span>{{columns.length > 1 ? (columns.length-1) + '张可用优惠券' : '暂无优惠券'}}</span>
27 67
               </div>
28 68
             </div>
29
-            <span>满手</span>
30
-          </li>
31
-          <li class="flex-h">
32
-            <div class="flex-item">
33
-              <div>
34
-                <span>地点</span>
69
+            <div class="agreement">
70
+              <span>购前需知</span>
71
+              <div class="flex-h">
72
+                <div class="flex-item">
73
+                  <div>
74
+                    <span>同意《银城精品团课服务协议》</span>
75
+                  </div>
76
+                </div>
77
+                <i class="iconfont icon-gouxuan" :class="{'active': agreementOff}" @click="agreement"></i>
35 78
               </div>
36 79
             </div>
37
-            <span>满手</span>
38
-          </li>
39
-          <li class="flex-h">
40
-            <div class="flex-item">
41
-              <div>
42
-                <span>价格</span>
43
-              </div>
80
+            <div class="protocol">
81
+              <div>1、协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容</div>
82
+              <div>2、协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容</div>
83
+              <div>3、协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容</div>
84
+              <div>4、协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容</div>
85
+              <div>5、协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容协议内容</div>
44 86
             </div>
45
-            <span>满手</span>
46
-          </li>
47
-        </ul>
87
+          </div>
88
+        </div>
48 89
       </div>
49 90
     </div>
50 91
     <div class="flex-h">
@@ -55,6 +96,18 @@
55 96
       </div>
56 97
       <router-link :to="{name: '', query: {}}">确认订单</router-link>
57 98
     </div>
99
+    <div class="layer" :class="{'show': showLayer}"> 
100
+      <div>
101
+        <van-picker
102
+          show-toolbar
103
+          title="选择优惠券"
104
+          :columns="columns"
105
+          @cancel="onCancel"
106
+          @confirm="onConfirm"
107
+          value-key="value"
108
+        />
109
+      </div>
110
+    </div>
58 111
   </div>
59 112
 </template>
60 113
 
@@ -64,13 +117,41 @@ export default {
64 117
   name: '',
65 118
   data () {
66 119
     return {
67
-      
120
+      agreementOff: false, // 是否同意协议
121
+      postData: {
122
+        CouponId: '',
123
+        CouponName: '',
124
+      },
125
+      showLayer: false, // 显隐选择优惠券弹窗
126
+      columns: [{ // 优惠券列表
127
+        value: '不选择优惠券',
128
+        id: '',
129
+      }, {
130
+        value: '优惠券1',
131
+        id: '1',
132
+      }, {
133
+        value: '优惠券2',
134
+        id: '2',
135
+      }, {
136
+        value: '优惠券3',
137
+        id: '3',
138
+      }],
68 139
     }
69 140
   },
70 141
   computed: {},
71 142
   created () { },
72 143
   methods: {
73
-    
144
+    onConfirm (value, index) {
145
+      this.postData.CouponId = value.id
146
+      this.postData.CouponName = value.value
147
+      this.showLayer = false
148
+    },
149
+    onCancel () {
150
+      this.showLayer = false
151
+    },
152
+    agreement () { // 同意协议
153
+      this.agreementOff = !this.agreementOff
154
+    },
74 155
   }
75 156
 }
76 157
 </script>

+ 147
- 2
src/module/user/placeOrderForCourse/page.scss 파일 보기

@@ -11,7 +11,132 @@
11 11
       -webkit-overflow-scrolling: touch;
12 12
       transform: translateZ(0);
13 13
       -webkit-transform: translateZ(0);
14
-      
14
+      >h4{
15
+        width: 100%;
16
+        line-height: .3rem;
17
+        font-size: .16rem;
18
+        text-indent: .2rem;
19
+        margin-top: .15rem;
20
+      }
21
+      .list{
22
+        >div{
23
+          margin: 0 .2rem;
24
+          >ul{
25
+            width: 100%;
26
+            position: relative;
27
+            overflow: hidden;
28
+            >li{
29
+              padding: .09rem 0;
30
+              border-bottom: .01rem solid #eee;
31
+              span{
32
+                line-height: .24rem;
33
+                font-size: .14rem;
34
+              }
35
+              >div{
36
+                margin-right: .1rem;
37
+                >div{
38
+                  width: 100%;
39
+                  position: relative;
40
+                  overflow: hidden;
41
+                  span{
42
+                    width: 100%;
43
+                    display: block;
44
+                    overflow: hidden;
45
+                    white-space: nowrap;
46
+                    text-overflow: ellipsis;
47
+                  }
48
+                }
49
+              }
50
+            }
51
+          }
52
+        }
53
+      }
54
+      .selectTicket{
55
+        padding: .15rem 0;
56
+        border-bottom: .01rem solid #eee;
57
+        >div{
58
+          >div{
59
+            >div{
60
+              width: 100%;
61
+              position: relative;
62
+              overflow: hidden;
63
+              >span{
64
+                width: 100%;
65
+                display: block;
66
+                line-height: .32rem;
67
+                font-size: .16rem;
68
+                font-weight: bolder;
69
+              }
70
+            }
71
+          }
72
+          >*{
73
+            line-height: .32rem;
74
+            font-size: .13rem;
75
+            margin-left: .1rem;
76
+          }
77
+          >div{
78
+            margin-left: 0;
79
+          }
80
+        }
81
+        >div:nth-child(2){
82
+          >div{
83
+            >div{
84
+              >span{
85
+                line-height: .26rem;
86
+                font-size: .13rem;
87
+                color: #666;
88
+                font-weight: normal;
89
+              }
90
+            }
91
+          }
92
+          >span{
93
+            color: #ccc;
94
+          }
95
+        }
96
+      }
97
+      .agreement{
98
+        margin-top: .1rem;
99
+        padding: .1rem 0;
100
+        border-bottom: .01rem solid #eee;
101
+        >span{
102
+          font-weight: bolder;
103
+          line-height: .32rem;
104
+          font-size: .16rem;
105
+        }
106
+        >div{
107
+          >div{
108
+            >div{
109
+              width: 100%;
110
+              position: relative;
111
+              overflow: hidden;
112
+              >span{
113
+                width: 100%;
114
+                display: block;
115
+                line-height: .3rem;
116
+                font-size: .13rem;
117
+                color: #fb3f19;
118
+              }
119
+            }
120
+          }
121
+        }
122
+        i{
123
+          font-size: .2rem;
124
+          line-height: .3rem;
125
+          color: #ccc;
126
+          &.active{
127
+            color: #fb3f19;
128
+          }
129
+        }
130
+      }
131
+      .protocol{
132
+        padding: .1rem 0;
133
+        >*{
134
+          line-height: .2rem;
135
+          font-size: .12rem;
136
+          color: #666;
137
+          text-align: justify;
138
+        }
139
+      }
15 140
     }
16 141
   }
17 142
   &>div.flex-h{
@@ -25,7 +150,7 @@
25 150
       span{
26 151
         width: 100%;
27 152
         display: inline-block;
28
-        text-align: center;
153
+        text-indent: .2rem;
29 154
         text-decoration: line-through;
30 155
         font-size: .11rem;
31 156
         em{
@@ -52,4 +177,24 @@
52 177
       background: #fc6243;
53 178
     }
54 179
   }
180
+  .layer{
181
+    width: 100%;
182
+    position: absolute;
183
+    left: 0;
184
+    top: 0;
185
+    bottom: 0;
186
+    z-index: 100;
187
+    background: rgba(0,0,0,.5);
188
+    display: none;
189
+    &.show{
190
+      display: block;
191
+    }
192
+    >div{
193
+      width: 100%;
194
+      position: absolute;
195
+      left: 0;
196
+      bottom: 0;
197
+      overflow: hidden;
198
+    }
199
+  }
55 200
 }

+ 1
- 0
src/store/index.js 파일 보기

@@ -14,6 +14,7 @@ export const modules = {
14 14
   index: () => require('./index/index').default,
15 15
   fiveA: () => require('./fiveA/fiveA').default,
16 16
   userCenter: () => require('./userCenter/userCenter').default,
17
+  majorProjects: () => require('./majorProjects/majorProjects').default,
17 18
 }
18 19
 
19 20
 Object.keys(modules).forEach((modKey) => {

+ 51
- 0
src/store/majorProjects/majorProjects.js 파일 보기

@@ -0,0 +1,51 @@
1
+import Ajax from '../../util/ajax'
2
+import api from '../../util/api'
3
+
4
+// 请求数据
5
+export default {
6
+  namespaced: true,
7
+  state: {
8
+    projectInfo: {},
9
+    courseDetail: {},
10
+  },
11
+  mutations: {
12
+    setPageInfo (state, data) { // 设置页面信息
13
+      state.projectInfo = data
14
+    },
15
+    setCourseDetailInfo (state, data) { // 设置课程详情信息
16
+      state.courseDetail = data
17
+    }
18
+  },
19
+  actions: {
20
+    getProjectInfo (context, { id }) { // 获取课程列表
21
+      return new Promise((resolve) => {
22
+        Ajax(api.majorProjects.getCourseList.url, {
23
+          method: api.majorProjects.getCourseList.method,
24
+          urlData: {
25
+            id,
26
+          }
27
+        }).then(res => {
28
+          context.commit('setPageInfo', res)
29
+          resolve(res)
30
+        }).catch((err) => {
31
+          reject(err)
32
+        })
33
+      })
34
+    },
35
+    getCourseDetailInfo (context, { id }) { // 获取课程列表
36
+      return new Promise((resolve) => {
37
+        Ajax(api.majorProjects.getCourseDetail.url, {
38
+          method: api.majorProjects.getCourseDetail.method,
39
+          urlData: {
40
+            id,
41
+          }
42
+        }).then(res => {
43
+          context.commit('setCourseDetailInfo', res)
44
+          resolve(res)
45
+        }).catch((err) => {
46
+          reject(err)
47
+        })
48
+      })
49
+    },
50
+  }
51
+}

+ 5
- 5
src/util/ajax.js 파일 보기

@@ -15,6 +15,7 @@ const Axios = axios.create({
15 15
 
16 16
 Axios.interceptors.request.use((config) => {
17 17
   // 处理请求data,若为get请求,拼到url后面,若为post请求,直接添加到body中
18
+  config.urlData = {...config.urlData, org: 1}
18 19
   let urlData = qs.stringify(config.urlData)
19 20
   let queryData = qs.stringify(config.queryData)
20 21
   // 判断是通过斜杠传参还是通过query传参
@@ -25,10 +26,9 @@ Axios.interceptors.request.use((config) => {
25 26
         return url.replace(re, config.urlData[k])
26 27
       }, config.url)
27 28
     }
28
-  } else {
29
-    if (queryData) {
30
-      config.url += '?' + queryData
31
-    }
29
+  }
30
+  if (queryData) {
31
+    config.url += '?' + queryData
32 32
   }
33 33
   let fm = new FormData()
34 34
   for (let k in config.data) {
@@ -52,7 +52,7 @@ const ajax = (...args) => {
52 52
       if (code === 200) {
53 53
         resolve(result)
54 54
       } else if (code === 401) {
55
-        // router.push({ name: 'login' })
55
+        // reject(code)
56 56
       } else {
57 57
         Message({
58 58
           message: message,

+ 13
- 3
src/util/api.js 파일 보기

@@ -1,7 +1,7 @@
1 1
 const baseUrl = '/api'
2
-const wechat = '/wechat'
3
-const guest = '/guest'
4
-const common = '/common'
2
+const wechat = '/wechat/:org'
3
+const guest = '/guest/:org'
4
+const common = '/common/:org'
5 5
 
6 6
 const $api = {
7 7
   index: { // 首页
@@ -26,6 +26,16 @@ const $api = {
26 26
       url: `${baseUrl}${guest}/cms/news`
27 27
     }
28 28
   },
29
+  majorProjects: { // 项目专题
30
+    getCourseList: { // 获取课程列表
31
+      method: 'get',
32
+      url: `${baseUrl}${guest}/cms/case/:id`
33
+    },
34
+    getCourseDetail: { // 获取课程详情
35
+      method: 'get',
36
+      url: `${baseUrl}${guest}/course/:id`
37
+    },
38
+  },
29 39
   user: {
30 40
     info: { // 获取用户信息
31 41
       method: 'get',