Commit 9e82c2672cf1623f654f0f47f3eb6c548308261d

Authored by 夏洋涛
1 parent 36ed0d31
Exists in master

feat: 个人中心更新

1 <template> 1 <template>
2 <div id="app" :class="isElder?'elder':''"> 2 <div id="app" :class="isElder?'elder':''">
3 - <keep-alive>  
4 - <router-view v-if="this.$route.meta.keepAlive" @setElder="setElder" />  
5 - </keep-alive>  
6 3
7 - <router-view v-if="!this.$route.meta.keepAlive" @setElder="setElder" /> 4 + <router-view @setElder="setElder" />
8 </div> 5 </div>
9 </template> 6 </template>
10 <script> 7 <script>
src/assets/Travel/change.png 0 → 100644

2.46 KB

src/assets/Travel/noSchool.png 0 → 100644

46.3 KB

src/router/index.js
@@ -28,6 +28,10 @@ import payneed from &#39;@/views/Service/payneed.vue&#39; //购买须知 @@ -28,6 +28,10 @@ import payneed from &#39;@/views/Service/payneed.vue&#39; //购买须知
28 import protocol from '@/views/Service/protocol.vue' //用户协议 28 import protocol from '@/views/Service/protocol.vue' //用户协议
29 29
30 30
  31 +import schoolFollow from '@/views/Travel/schoolFollow.vue' //已关注学校列表
  32 +import schoolAttestation from '@/views/Travel/schoolAttestation.vue' //已认证学校列表
  33 +import classAttestation from '@/views/Travel/classAttestation.vue' //已集团权限年级班级列表
  34 +
31 Vue.use(VueRouter) 35 Vue.use(VueRouter)
32 const [routerPush, routerReplace] = [VueRouter.prototype.push, VueRouter.prototype.replace]; 36 const [routerPush, routerReplace] = [VueRouter.prototype.push, VueRouter.prototype.replace];
33 VueRouter.prototype.push = function push(to) { 37 VueRouter.prototype.push = function push(to) {
@@ -212,6 +216,31 @@ const routes = [{ @@ -212,6 +216,31 @@ const routes = [{
212 title: '用户协议' 216 title: '用户协议'
213 } 217 }
214 }, 218 },
  219 + {
  220 + path: '/schoolFollow',
  221 + name: 'schoolFollow',
  222 + component: schoolFollow,
  223 + meta: {
  224 + title: '关注学校'
  225 + }
  226 + },
  227 + {
  228 + path: '/schoolAttestation',
  229 + name: 'schoolAttestation',
  230 + component: schoolAttestation,
  231 + meta: {
  232 + title: '已认证学校'
  233 + }
  234 + },
  235 + {
  236 + path: '/classAttestation',
  237 + name: 'classAttestation',
  238 + component: classAttestation,
  239 + meta: {
  240 + title: '集团认领'
  241 + }
  242 + },
  243 +
215 ] 244 ]
216 const router = new VueRouter({ 245 const router = new VueRouter({
217 mode: 'hash', 246 mode: 'hash',
src/store/index.js
@@ -4,12 +4,15 @@ import Vuex from &#39;vuex&#39; @@ -4,12 +4,15 @@ import Vuex from &#39;vuex&#39;
4 Vue.use(Vuex) 4 Vue.use(Vuex)
5 5
6 export default new Vuex.Store({ 6 export default new Vuex.Store({
7 - state: {  
8 - },  
9 - mutations: {  
10 - },  
11 - actions: {  
12 - },  
13 - modules: {  
14 - }  
15 -}) 7 + state: {
  8 + schoolName: []
  9 +
  10 + },
  11 + mutations: {
  12 + changeSchool(state, params) {
  13 + state.schoolName = params
  14 + }
  15 + },
  16 + actions: {},
  17 + modules: {}
  18 +})
16 \ No newline at end of file 19 \ No newline at end of file
src/views/Home/Home.vue
@@ -5,7 +5,10 @@ @@ -5,7 +5,10 @@
5 <div> 5 <div>
6 <img class="head" :src="headImgUrl?headImgUrl:defaultHead" alt=""> 6 <img class="head" :src="headImgUrl?headImgUrl:defaultHead" alt="">
7 <div class="right"> 7 <div class="right">
8 - <p class="name">{{userInfo.nickName}}</p> 8 + <!-- <p class="name">{{nicknameUser}}</p> -->
  9 + <div class="name"><span>{{nicknameUser}}</span>
  10 + <div class="school" v-show="schoolNamesChoose" @click="changeSchool">{{schoolNamesChoose}}<img src="@/assets/Travel/change.png" /></div>
  11 + </div>
9 <p class="phone">{{userInfo.phone}}</p> 12 <p class="phone">{{userInfo.phone}}</p>
10 </div> 13 </div>
11 </div> 14 </div>
@@ -19,6 +22,11 @@ @@ -19,6 +22,11 @@
19 <van-icon class="icon" name="orders-o" /> 22 <van-icon class="icon" name="orders-o" />
20 <span>集团权限</span> 23 <span>集团权限</span>
21 </div> 24 </div>
  25 + <!-- <div class="pic">
  26 + <img src="@/assets/home/bg2.png"/>
  27 + <span>已认证</span>
  28 + <van-icon name="arrow" />
  29 + </div> -->
22 <van-icon name="arrow" /> 30 <van-icon name="arrow" />
23 </div> 31 </div>
24 <div class="item" @click="handleMyCard"> 32 <div class="item" @click="handleMyCard">
@@ -55,7 +63,6 @@ import HomeChildList from &#39;@/views/Home/component/HomeChildList&#39; @@ -55,7 +63,6 @@ import HomeChildList from &#39;@/views/Home/component/HomeChildList&#39;
55 import HomeOrder from '@/views/Home/component/HomeOrder' 63 import HomeOrder from '@/views/Home/component/HomeOrder'
56 import HomeScan from '@/views/Home/component/HomeScan' 64 import HomeScan from '@/views/Home/component/HomeScan'
57 import Tabbar4 from '@/component/Tabbar4' 65 import Tabbar4 from '@/component/Tabbar4'
58 -import { Dialog } from 'vant'  
59 export default { 66 export default {
60 data () { 67 data () {
61 return { 68 return {
@@ -75,8 +82,10 @@ export default { @@ -75,8 +82,10 @@ export default {
75 headImgUrl: '', 82 headImgUrl: '',
76 defaultHead: require('@/assets/head.png'), 83 defaultHead: require('@/assets/head.png'),
77 isShow: false, 84 isShow: false,
  85 + isElder: false,
78 showChildList: false, 86 showChildList: false,
79 - isElder: false 87 + showSchool: false,
  88 + schoolNamesChoose: ''
80 } 89 }
81 }, 90 },
82 91
@@ -85,10 +94,17 @@ export default { @@ -85,10 +94,17 @@ export default {
85 if (isElder) { 94 if (isElder) {
86 this.isElder = true 95 this.isElder = true
87 } 96 }
  97 + this.schoolNamesChoose = localStorage.getItem('schoolNamesChoose') ? localStorage.getItem('schoolNamesChoose') : ''
88 this.centerNo = localStorage.getItem('centerNo'); 98 this.centerNo = localStorage.getItem('centerNo');
89 this.getUserInfo() 99 this.getUserInfo()
  100 + this.againRZ()
90 101
91 }, 102 },
  103 + computed: {
  104 + schoolNames () {
  105 + return this.$store.state.schoolName
  106 + }
  107 + },
92 methods: { 108 methods: {
93 // 研学码 109 // 研学码
94 handleYanxue () { 110 handleYanxue () {
@@ -114,7 +130,7 @@ export default { @@ -114,7 +130,7 @@ export default {
114 // 点击长辈版 130 // 点击长辈版
115 handelElder () { 131 handelElder () {
116 if (this.isElder) { 132 if (this.isElder) {
117 - Dialog.confirm({ 133 + this.$dialog.confirm({
118 title: '长辈版', 134 title: '长辈版',
119 message: '超大字号,看的更清楚,长辈版,专为长辈设计', 135 message: '超大字号,看的更清楚,长辈版,专为长辈设计',
120 confirmButtonColor: '#ee0a24', 136 confirmButtonColor: '#ee0a24',
@@ -130,7 +146,7 @@ export default { @@ -130,7 +146,7 @@ export default {
130 // on cancel 146 // on cancel
131 }); 147 });
132 } else { 148 } else {
133 - Dialog.confirm({ 149 + this.$dialog.confirm({
134 title: '长辈版', 150 title: '长辈版',
135 message: '超大字号,看的更清楚,长辈版,专为长辈设计', 151 message: '超大字号,看的更清楚,长辈版,专为长辈设计',
136 confirmButtonColor: '#3385FF', 152 confirmButtonColor: '#3385FF',
@@ -164,9 +180,20 @@ export default { @@ -164,9 +180,20 @@ export default {
164 onSuccess: res => { 180 onSuccess: res => {
165 console.log('getUserInfo', res) 181 console.log('getUserInfo', res)
166 if (res.data.code == 200) { 182 if (res.data.code == 200) {
167 - let userInfo = res.data.data.userInfo  
168 - this.userInfo = userInfo 183 + let userInfo = res.data.data.userInfo;
  184 + this.userInfo = userInfo;
169 localStorage.setItem('userInfo', JSON.stringify(userInfo)) 185 localStorage.setItem('userInfo', JSON.stringify(userInfo))
  186 + if (userInfo.schoolNames || userInfo.schoolNames == [] || userInfo.schoolNames == 'null') {
  187 + localStorage.setItem('schoolNames', JSON.stringify(userInfo.schoolNames))
  188 + this.$store.commit('changeSchool', userInfo.schoolNames)
  189 + if (!localStorage.getItem('schoolNamesChoose')) {
  190 + localStorage.setItem('schoolNamesChoose', userInfo.schoolNames[0])
  191 + this.schoolNamesChoose = userInfo.schoolNames[0]
  192 + }
  193 + } else {
  194 + localStorage.setItem('schoolNames', [])
  195 + this.$store.commit('changeSchool', [])
  196 + }
170 } 197 }
171 this.showChildList = true 198 this.showChildList = true
172 199
@@ -185,6 +212,27 @@ export default { @@ -185,6 +212,27 @@ export default {
185 }, 212 },
186 complete () { 213 complete () {
187 this.getUserInfo() 214 this.getUserInfo()
  215 + },
  216 + //切换学校
  217 + changeSchool () {
  218 + this.$router.push({ name: 'schoolFollow' })
  219 + },
  220 + //集团回调关闭页面
  221 + closeJT () {
  222 + this.showSchool = false
  223 + },
  224 + //查看是否有集团认证
  225 + getRZ () {
  226 + // this.showSchool = true
  227 + this.$router.push({ name: 'schoolAttestation' })
  228 + },
  229 + //回跳重新认证
  230 + againRZ () {
  231 + let backRZ = localStorage.getItem('backRZ')
  232 + if (backRZ == 'true') {
  233 + this.showSchool = true
  234 + localStorage.setItem('backRZ', false)
  235 + }
188 } 236 }
189 }, 237 },
190 components: { 238 components: {
@@ -209,7 +257,6 @@ export default { @@ -209,7 +257,6 @@ export default {
209 background-position: center; 257 background-position: center;
210 .top { 258 .top {
211 display: flex; 259 display: flex;
212 - flex-wrap: wrap;  
213 align-items: center; 260 align-items: center;
214 justify-content: space-between; 261 justify-content: space-between;
215 padding: 40px 28px; 262 padding: 40px 28px;
@@ -225,14 +272,31 @@ export default { @@ -225,14 +272,31 @@ export default {
225 .right { 272 .right {
226 height: 96px; 273 height: 96px;
227 margin-left: 24px; 274 margin-left: 24px;
228 - display: flex;  
229 - align-content: space-around;  
230 - flex-wrap: wrap;  
231 color: #fff; 275 color: #fff;
232 .name { 276 .name {
233 - font-size: 34px; 277 + font-size: 33px;
234 font-weight: bold; 278 font-weight: bold;
235 width: 100%; 279 width: 100%;
  280 + margin-bottom: 15px;
  281 + display: flex;
  282 + .school {
  283 + max-width: 400px;
  284 + border-radius: 30px;
  285 + font-size: 26px;
  286 + font-weight: normal;
  287 + margin-left: 20px;
  288 + padding: 0 20px;
  289 + box-sizing: border-box;
  290 + background-color: #d82b2b;
  291 + display: flex;
  292 + align-items: center;
  293 +
  294 + img {
  295 + width: 30px;
  296 + height: 30px;
  297 + margin-left: 5px;
  298 + }
  299 + }
236 } 300 }
237 .phone { 301 .phone {
238 font-size: 26px; 302 font-size: 26px;
@@ -266,6 +330,21 @@ export default { @@ -266,6 +330,21 @@ export default {
266 font-size: 30px; 330 font-size: 30px;
267 } 331 }
268 } 332 }
  333 + .pic {
  334 + display: flex;
  335 + align-items: center;
  336 + margin-right: 5px;
  337 +
  338 + span {
  339 + font-size: 27px;
  340 + color: #333333;
  341 + }
  342 + img {
  343 + width: 30px;
  344 + height: 30px;
  345 + margin-right: 5px;
  346 + }
  347 + }
269 } 348 }
270 } 349 }
271 } 350 }
src/views/Home/component/AddChildPopupGroup.vue
1 <template> 1 <template>
2 <div> 2 <div>
3 - <div class="addchild_group" v-if="step==1"> 3 + <div class="addchild_group" v-if="step==2">
4 <img class="bg" src="@/assets/home/bg2.png" alt=""> 4 <img class="bg" src="@/assets/home/bg2.png" alt="">
5 - <p class="title">添加学生</p>  
6 - <p class="des">完善相关信息可帮助获得最佳使用体验 </p> 5 + <p class="title">激活认证</p>
  6 + <p class="des">完善认证信息可帮助获得最佳使用体验</p>
7 <div class="phone_content"> 7 <div class="phone_content">
8 <div class="item"> 8 <div class="item">
9 <p class="phone_title">手机号</p> 9 <p class="phone_title">手机号</p>
@@ -16,44 +16,31 @@ @@ -16,44 +16,31 @@
16 <p class="phone_title">验证码</p> 16 <p class="phone_title">验证码</p>
17 <input class="code" type="text" v-model="code" placeholder="请输入验证码"> 17 <input class="code" type="text" v-model="code" placeholder="请输入验证码">
18 </div> 18 </div>
19 - <button class="submit" @click="checkPhoneAndCode">下一步(1/2)</button>  
20 - </div>  
21 - </div>  
22 - <div class="addchild_group" v-if="step==2">  
23 - <img class="bg" src="@/assets/home/bg2.png" alt="">  
24 - <p class="title">已查询到{{claimChildList.length}}位学生信息</p>  
25 - <p class="des">请仔细确认学生信息后再认领</p>  
26 - <div class="child_content">  
27 - <div class="child_box">  
28 - <div class="child_item" v-for="(item,index) in claimChildList" :key="index">  
29 - <p><span>姓名</span>{{item.travelerName}}</p>  
30 - <p><span>阶段</span>{{item.travelerType==1?'小学':item.travelerType==2?'初中':'高中'}}</p>  
31 - <p><span>所在地区</span>{{item.province+item.city+item.area}}</p>  
32 - <p><span>学校</span>{{item.schoolName}}</p>  
33 - <p><span>入学年份</span>{{item.enrollYear}}</p>  
34 - <van-checkbox class="checkbox" v-model="item.checked" shape="square"></van-checkbox>  
35 - </div>  
36 - </div>  
37 - <button class="submit" @click="claimChild">认领</button> 19 + <button class="submit" @click="checkPhoneAndCode">完成</button>
38 </div> 20 </div>
39 </div> 21 </div>
40 - <div class="addchild_group" v-if="step==3"> 22 + <div class="addchild_group" v-if="step==1">
41 <img class="bg" src="@/assets/home/bg2.png" alt=""> 23 <img class="bg" src="@/assets/home/bg2.png" alt="">
42 <p class="title">添加学生信息</p> 24 <p class="title">添加学生信息</p>
43 - <p class="des">如验证号码非学校预留号码,请按步骤自行添加完善学生信息。</p> 25 + <p class="des">完善相关信息可帮助获得最佳使用体验</p>
44 <div class="content"> 26 <div class="content">
45 <div class="name">学生信息</div> 27 <div class="name">学生信息</div>
46 - <div class="item"> 28 + <div class="item" style="width:48%;display:inline-flex;margin-right:4%;">
47 <input type="text" placeholder="请输入学生姓名" v-model="studentName"> 29 <input type="text" placeholder="请输入学生姓名" v-model="studentName">
48 </div> 30 </div>
  31 + <div class="item" @click="handleYear" style="width:48%;display:inline-flex;">
  32 + <p :class="!year||yearDisable?'nodata':''">{{year?year:'入学年份'}}</p>
  33 + <img src="@/assets/more.png" alt="">
  34 + </div>
49 <div class="item" @click="showUserTypeSelect=true" style="width:48%;display:inline-flex;margin-right:4%;"> 35 <div class="item" @click="showUserTypeSelect=true" style="width:48%;display:inline-flex;margin-right:4%;">
50 <p :class="!userType?'nodata':''">{{userType?userType:'当前阶段'}}</p> 36 <p :class="!userType?'nodata':''">{{userType?userType:'当前阶段'}}</p>
51 <img src="@/assets/more.png" alt=""> 37 <img src="@/assets/more.png" alt="">
52 </div> 38 </div>
53 - <div class="item" @click="handleYear" style="width:48%;display:inline-flex;">  
54 - <p :class="!year||yearDisable?'nodata':''">{{year?year:'入学年份'}}</p> 39 + <div class="item" @click="showUserClassSelect=true" style="width:48%;display:inline-flex;">
  40 + <p :class="!classType?'nodata':''">{{classType?classType:'班级'}}</p>
55 <img src="@/assets/more.png" alt=""> 41 <img src="@/assets/more.png" alt="">
56 </div> 42 </div>
  43 +
57 <div class="item" @click="showAreaSelect=true"> 44 <div class="item" @click="showAreaSelect=true">
58 <p :class="!area?'nodata':''">{{area?area:'请选择地区'}}</p> 45 <p :class="!area?'nodata':''">{{area?area:'请选择地区'}}</p>
59 <img src="@/assets/more.png" alt=""> 46 <img src="@/assets/more.png" alt="">
@@ -74,6 +61,9 @@ @@ -74,6 +61,9 @@
74 <van-popup v-model="showAreaSelect" round position="bottom" get-container="body" :safe-area-inset-bottom="true"> 61 <van-popup v-model="showAreaSelect" round position="bottom" get-container="body" :safe-area-inset-bottom="true">
75 <van-area title="地区" :area-list="areaList" @cancel="showAreaSelect = false" @confirm="selectAreaOver" /> 62 <van-area title="地区" :area-list="areaList" @cancel="showAreaSelect = false" @confirm="selectAreaOver" />
76 </van-popup> 63 </van-popup>
  64 + <van-popup v-model="showUserClassSelect" round position="bottom" get-container="body" :safe-area-inset-bottom="true">
  65 + <van-picker title="班级" show-toolbar :columns="classTypeArr" value-key="label" @cancel="showUserClassSelect = false" @confirm="selectClassTypeOver" />
  66 + </van-popup>
77 67
78 <van-popup v-model="chooseSchoolisShow" round get-container="body" :safe-area-inset-bottom="true"> 68 <van-popup v-model="chooseSchoolisShow" round get-container="body" :safe-area-inset-bottom="true">
79 <div v-if="chooseSchoolisShow"> 69 <div v-if="chooseSchoolisShow">
@@ -89,17 +79,15 @@ import chooseSchool from &#39;@/views/Service/component/chooseSchool&#39; @@ -89,17 +79,15 @@ import chooseSchool from &#39;@/views/Service/component/chooseSchool&#39;
89 var codeInterval; 79 var codeInterval;
90 export default { 80 export default {
91 components: { chooseSchool }, 81 components: { chooseSchool },
  82 + props: ['step', 'travelerNum'],
92 data () { 83 data () {
93 return { 84 return {
94 - step: 1,  
95 phone: '', 85 phone: '',
96 codeText: '获取验证码',//获取验证码按钮文字 86 codeText: '获取验证码',//获取验证码按钮文字
97 code: '',//验证码 87 code: '',//验证码
98 studentName: '', 88 studentName: '',
99 showDialog: true, 89 showDialog: true,
100 90
101 - claimChildList: [],  
102 -  
103 year: '',//入学年份 91 year: '',//入学年份
104 yearDisable: false, 92 yearDisable: false,
105 showYearSelect: false, 93 showYearSelect: false,
@@ -108,16 +96,176 @@ export default { @@ -108,16 +96,176 @@ export default {
108 userType: '', 96 userType: '',
109 userTypeVal: '',//所处阶段1-小学 2-初中 3-高中 97 userTypeVal: '',//所处阶段1-小学 2-初中 3-高中
110 showUserTypeSelect: false, 98 showUserTypeSelect: false,
111 - userTypeArr: [{  
112 - label: '小学',  
113 - value: 1 99 + userTypeArr: [
  100 + {
  101 + label: '幼儿园',
  102 + value: 0
  103 + }, {
  104 + label: '小学',
  105 + value: 1
  106 + }, {
  107 + label: '初中',
  108 + value: 2
  109 + }, {
  110 + label: '高中',
  111 + value: 3
  112 + }],
  113 +
  114 + classType: '',
  115 + classTypeVal: '',//班级
  116 + showUserClassSelect: false,
  117 + classTypeArr: [{
  118 + label: '1班',
  119 + value: '1班'
  120 + }, {
  121 + label: '2班',
  122 + value: '2班'
  123 + }, {
  124 + label: '3班',
  125 + value: '3班'
  126 + }, {
  127 + label: '4班',
  128 + value: '4班'
  129 + }, {
  130 + label: '5班',
  131 + value: '5班'
  132 + }, {
  133 + label: '6班',
  134 + value: '6班'
  135 + }, {
  136 + label: '7班',
  137 + value: '7班'
  138 + }, {
  139 + label: '8班',
  140 + value: '8班'
  141 + }, {
  142 + label: '9班',
  143 + value: '9班'
  144 + }, {
  145 + label: '10班',
  146 + value: '10班'
  147 + }, {
  148 + label: '11班',
  149 + value: '11班'
  150 + }, {
  151 + label: '12班',
  152 + value: '12班'
  153 + }, {
  154 + label: '13班',
  155 + value: '13班'
  156 + }, {
  157 + label: '14班',
  158 + value: '14班'
  159 + }, {
  160 + label: '15班',
  161 + value: '15班'
  162 + }, {
  163 + label: '16班',
  164 + value: '16班'
  165 + }, {
  166 + label: '17班',
  167 + value: '17班'
  168 + }, {
  169 + label: '18班',
  170 + value: '18班'
  171 + }, {
  172 + label: '19班',
  173 + value: '19班'
  174 + }, {
  175 + label: '20班',
  176 + value: '20班'
  177 + }, {
  178 + label: '21班',
  179 + value: '21班'
  180 + }, {
  181 + label: '22班',
  182 + value: '22班'
  183 + }, {
  184 + label: '23班',
  185 + value: '23班'
  186 + }, {
  187 + label: '24班',
  188 + value: '24班'
  189 + }, {
  190 + label: '25班',
  191 + value: '25班'
  192 + }, {
  193 + label: '26班',
  194 + value: '26班'
  195 + }, {
  196 + label: '27班',
  197 + value: '27班'
  198 + }, {
  199 + label: '28班',
  200 + value: '28班'
  201 + }, {
  202 + label: '29班',
  203 + value: '29班'
  204 + }, {
  205 + label: '30班',
  206 + value: '30班'
  207 + }, {
  208 + label: '31班',
  209 + value: '31班'
  210 + }, {
  211 + label: '32班',
  212 + value: '32班'
  213 + }, {
  214 + label: '33班',
  215 + value: '33班'
  216 + }, {
  217 + label: '34班',
  218 + value: '34班'
  219 + }, {
  220 + label: '35班',
  221 + value: '35班'
  222 + }, {
  223 + label: '36班',
  224 + value: '36班'
  225 + }, {
  226 + label: '37班',
  227 + value: '37班'
114 }, { 228 }, {
115 - label: '初中',  
116 - value: 2 229 + label: '38班',
  230 + value: '38班'
117 }, { 231 }, {
118 - label: '高中',  
119 - value: 3  
120 - }], 232 + label: '39班',
  233 + value: '39班'
  234 + }, {
  235 + label: '40班',
  236 + value: '40班'
  237 + }, {
  238 + label: '41班',
  239 + value: '41班'
  240 + }, {
  241 + label: '42班',
  242 + value: '42班'
  243 + }, {
  244 + label: '43班',
  245 + value: '43班'
  246 + }, {
  247 + label: '44班',
  248 + value: '44班'
  249 + }, {
  250 + label: '45班',
  251 + value: '45班'
  252 + }, {
  253 + label: '46班',
  254 + value: '46班'
  255 + }, {
  256 + label: '47班',
  257 + value: '47班'
  258 + }, {
  259 + label: '48班',
  260 + value: '48班'
  261 + }, {
  262 + label: '49班',
  263 + value: '49班'
  264 + }, {
  265 + label: '50班',
  266 + value: '50班'
  267 + }
  268 + ],
121 269
122 area: '', 270 area: '',
123 areaCode: '', 271 areaCode: '',
@@ -169,20 +317,20 @@ export default { @@ -169,20 +317,20 @@ export default {
169 }, 317 },
170 onSuccess: res => { 318 onSuccess: res => {
171 this.$toast.clear() 319 this.$toast.clear()
172 - if (res.success) {  
173 - let i = 60;  
174 - codeInterval = setInterval(() => {  
175 - if (i == 0) {  
176 - this.codeText = `获取验证码`;  
177 - clearInterval(codeInterval);  
178 - return;  
179 - }  
180 - this.codeText = `重试(${i})`;  
181 - i--  
182 - }, 1000)  
183 - } else {  
184 - this.$toast.fail(res.message)  
185 - } 320 + if (res.success) {
  321 + let i = 60;
  322 + codeInterval = setInterval(() => {
  323 + if (i == 0) {
  324 + this.codeText = `获取验证码`;
  325 + clearInterval(codeInterval);
  326 + return;
  327 + }
  328 + this.codeText = `重试(${i})`;
  329 + i--
  330 + }, 1000)
  331 + } else {
  332 + this.$toast.fail(res.message)
  333 + }
186 }, 334 },
187 onFail: err => { 335 onFail: err => {
188 console.log('err', err) 336 console.log('err', err)
@@ -209,7 +357,7 @@ export default { @@ -209,7 +357,7 @@ export default {
209 forbidClick: true 357 forbidClick: true
210 }) 358 })
211 this.mgop({ 359 this.mgop({
212 - api: 'mgop.sz.hswsy.checkPhoneAndCode', // 必须 360 + api: 'mgop.sz.hswsy.checkPhone', // 必须
213 host: 'https://mapi.zjzwfw.gov.cn/', 361 host: 'https://mapi.zjzwfw.gov.cn/',
214 dataType: 'JSON', 362 dataType: 'JSON',
215 type: 'POST', 363 type: 'POST',
@@ -220,69 +368,12 @@ export default { @@ -220,69 +368,12 @@ export default {
220 data: { 368 data: {
221 "code": this.code, 369 "code": this.code,
222 "phone": this.phone, 370 "phone": this.phone,
223 - "unionId": localStorage.getItem('centerNo')  
224 - },  
225 - onSuccess: res => {  
226 - this.$toast.clear()  
227 - if (res.data.code == 200) {  
228 - if (res.data.data.length == 0) {  
229 - // 白名单无用户  
230 - this.step = 3;  
231 - } else {  
232 - // 白名单有用户  
233 - let claimChildList = res.data.data  
234 - for (let i in claimChildList) {  
235 - claimChildList[i].checked = false  
236 - }  
237 - this.claimChildList = claimChildList  
238 - this.step = 2;  
239 - }  
240 - } else {  
241 - this.$toast.fail(res.data?.message)  
242 - }  
243 - },  
244 - onFail: err => {  
245 - console.log('err', err)  
246 - }  
247 - });  
248 - },  
249 -  
250 -  
251 - // 认领孩子  
252 - claimChild () {  
253 - const claimChildList = this.claimChildList;  
254 - let claimChildId = ''  
255 - for (let i in claimChildList) {  
256 - if (claimChildList[i].checked) {  
257 - if (claimChildId == '') {  
258 - claimChildId = claimChildList[i].travelerNum  
259 - } else {  
260 - claimChildId = claimChildId + ',' + claimChildList[i].travelerNum  
261 - }  
262 - }  
263 - }  
264 - this.$toast.loading({  
265 - message: '加载中...',  
266 - duration: 0,  
267 - forbidClick: true  
268 - })  
269 - this.mgop({  
270 - api: 'mgop.sz.hswsy.claimChildren', // 必须  
271 - host: 'https://mapi.zjzwfw.gov.cn/',  
272 - dataType: 'JSON',  
273 - type: 'POST',  
274 - appKey: 'fuxgnukl+2001895516+edccpx', // 必须  
275 - headers: {  
276 - // 'isTestUrl': '1'  
277 - },  
278 - data: {  
279 - "loginMobile": this.phone,  
280 - "subUserNums": claimChildId 371 + "travelerNum": this.travelerNum
281 }, 372 },
282 onSuccess: res => { 373 onSuccess: res => {
283 this.$toast.clear() 374 this.$toast.clear()
284 if (res.data.code == 200) { 375 if (res.data.code == 200) {
285 - this.$toast.success('认成功') 376 + this.$toast.success('认成功')
286 this.$emit('complete') 377 this.$emit('complete')
287 } else { 378 } else {
288 this.$toast.fail(res.data?.message) 379 this.$toast.fail(res.data?.message)
@@ -294,7 +385,6 @@ export default { @@ -294,7 +385,6 @@ export default {
294 }); 385 });
295 }, 386 },
296 387
297 -  
298 // 初始化入学年份选项 388 // 初始化入学年份选项
299 initYearArr () { 389 initYearArr () {
300 // 页面创建时执行 390 // 页面创建时执行
@@ -324,6 +414,12 @@ export default { @@ -324,6 +414,12 @@ export default {
324 this.userTypeVal = value.value; 414 this.userTypeVal = value.value;
325 this.showUserTypeSelect = false; 415 this.showUserTypeSelect = false;
326 }, 416 },
  417 + //班级选择
  418 + selectClassTypeOver (value) {
  419 + this.classType = value.label;
  420 + this.classTypeVal = value.value;
  421 + this.showUserClassSelect = false;
  422 + },
327 // 获取地区列表 423 // 获取地区列表
328 GetSysAreaList () { 424 GetSysAreaList () {
329 this.mgop({ 425 this.mgop({
@@ -389,6 +485,9 @@ export default { @@ -389,6 +485,9 @@ export default {
389 else if (!this.userType) { 485 else if (!this.userType) {
390 this.$toast('请选择阶段'); 486 this.$toast('请选择阶段');
391 } 487 }
  488 + else if (!this.classType) {
  489 + this.$toast('请选择班级');
  490 + }
392 else if (!this.year) { 491 else if (!this.year) {
393 this.$toast('请选择入学年份'); 492 this.$toast('请选择入学年份');
394 } 493 }
@@ -400,7 +499,7 @@ export default { @@ -400,7 +499,7 @@ export default {
400 } else { 499 } else {
401 let postData = { 500 let postData = {
402 contactsName: this.studentName, 501 contactsName: this.studentName,
403 - contactsMobile: this.phone, 502 + contactsMobile: this.userInfo?.phone,
404 contactsType: 1, 503 contactsType: 1,
405 province: this.area.split(',')[0],//省份 504 province: this.area.split(',')[0],//省份
406 city: this.area.split(',')[1],//城市 505 city: this.area.split(',')[1],//城市
@@ -408,7 +507,8 @@ export default { @@ -408,7 +507,8 @@ export default {
408 schoolName: this.school,//学校名称 507 schoolName: this.school,//学校名称
409 enrollYear: this.year,//入学年份 508 enrollYear: this.year,//入学年份
410 travelerType: this.userTypeVal,//1-小学 2-初中 3-高中 509 travelerType: this.userTypeVal,//1-小学 2-初中 3-高中
411 - loginMobile: this.userInfo?.phone 510 + loginMobile: this.userInfo?.phone,
  511 + className: this.classType //班级
412 } 512 }
413 this.$toast.loading({ 513 this.$toast.loading({
414 message: '加载中', 514 message: '加载中',
src/views/Home/component/HomeChildList.vue
@@ -3,9 +3,9 @@ @@ -3,9 +3,9 @@
3 <div class="stu_info" v-for="(item,index) in childList" :key="index" @click="handleStudentDetail(index)"> 3 <div class="stu_info" v-for="(item,index) in childList" :key="index" @click="handleStudentDetail(index)">
4 <div class="title"> 4 <div class="title">
5 <p>学生信息</p> 5 <p>学生信息</p>
6 - <!-- <button @click="handleYanxue(index)">出示研学码</button> --> 6 + <button v-if="item.whiteFlag!=1||item.isBing!=1" @click.stop="Certification(index)">激活认证</button>
7 </div> 7 </div>
8 - <img v-if="item.whiteFlag" class="img_auth" src="@/assets/home/auth.png" alt=""> 8 + <img v-if="item.whiteFlag==1&&item.isBing==1" class="img_auth" src="@/assets/home/auth.png" alt="">
9 <div class="item"> 9 <div class="item">
10 <van-icon name="manager" /><span>{{item.travelerName}}</span> 10 <van-icon name="manager" /><span>{{item.travelerName}}</span>
11 </div> 11 </div>
@@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
21 添加学生信息 21 添加学生信息
22 </div> 22 </div>
23 <van-popup style="background: transparent;" get-container="body" v-model="showAddChildPopupGroup"> 23 <van-popup style="background: transparent;" get-container="body" v-model="showAddChildPopupGroup">
24 - <AddChildPopupGroup @complete="complete"></AddChildPopupGroup> 24 + <AddChildPopupGroup @complete="complete" :step="step" :travelerNum="travelerNum"></AddChildPopupGroup>
25 </van-popup> 25 </van-popup>
26 </div> 26 </div>
27 </template> 27 </template>
@@ -39,17 +39,20 @@ export default { @@ -39,17 +39,20 @@ export default {
39 return { 39 return {
40 showAddChildPopupGroup: false,//新增孩子弹出框 40 showAddChildPopupGroup: false,//新增孩子弹出框
41 childList: [],//孩子列表 41 childList: [],//孩子列表
  42 + step: 1,
  43 + travelerNum: ''
42 } 44 }
43 }, 45 },
44 mounted () { 46 mounted () {
45 this.getChildList() 47 this.getChildList()
46 }, 48 },
47 methods: { 49 methods: {
48 - // 研学码  
49 - // handleYanxue (index) {  
50 - // localStorage.setItem('bindYanxueCodeChildInfo',JSON.stringify(this.childList[index]))  
51 - // this.$router.push({ name: 'YanxueCode' })  
52 - // }, 50 + // 激活认证
  51 + Certification (index) {
  52 + this.step = 2
  53 + this.travelerNum = this.childList[index].travelerNum
  54 + this.showAddChildPopupGroup = true
  55 + },
53 // 进入学生详情页 56 // 进入学生详情页
54 handleStudentDetail (index) { 57 handleStudentDetail (index) {
55 localStorage.setItem('StudentDetialInfo', JSON.stringify(this.childList[index])) 58 localStorage.setItem('StudentDetialInfo', JSON.stringify(this.childList[index]))
@@ -78,7 +81,18 @@ export default { @@ -78,7 +81,18 @@ export default {
78 console.log('getUserInfo', res) 81 console.log('getUserInfo', res)
79 this.$toast.clear() 82 this.$toast.clear()
80 if (res.data.code == 200) { 83 if (res.data.code == 200) {
81 - this.childList = res.data.data.userInfo.subUsers 84 + const userInfo = res.data.data.userInfo
  85 + this.childList = userInfo.subUsers
  86 + if (userInfo.schoolNames || userInfo.schoolNames == [] || userInfo.schoolNames == 'null') {
  87 + localStorage.setItem('schoolNames', JSON.stringify(userInfo.schoolNames))
  88 + this.$store.commit('changeSchool', userInfo.schoolNames)
  89 + if (localStorage.getItem('schoolNamesChoose')) {
  90 + localStorage.setItem('schoolNamesChoose', userInfo.schoolNames[0])
  91 + }
  92 + } else {
  93 + localStorage.setItem('schoolNames', [])
  94 + this.$store.commit('changeSchool', [])
  95 + }
82 } 96 }
83 }, 97 },
84 onFail: err => { 98 onFail: err => {
@@ -86,8 +100,9 @@ export default { @@ -86,8 +100,9 @@ export default {
86 } 100 }
87 }); 101 });
88 }, 102 },
89 - addStudent(){  
90 - this.showAddChildPopupGroup=true 103 + addStudent () {
  104 + this.step = 1
  105 + this.showAddChildPopupGroup = true
91 }, 106 },
92 complete () { 107 complete () {
93 this.showAddChildPopupGroup = false; 108 this.showAddChildPopupGroup = false;
@@ -201,12 +216,12 @@ export default { @@ -201,12 +216,12 @@ export default {
201 </style> 216 </style>
202 <style lang="scss"> 217 <style lang="scss">
203 .elder { 218 .elder {
204 - .home_child_list .stu_info{ 219 + .home_child_list .stu_info {
205 height: auto; 220 height: auto;
206 - .title p{ 221 + .title p {
207 font-size: 40px; 222 font-size: 40px;
208 } 223 }
209 - .item{ 224 + .item {
210 font-size: 38px; 225 font-size: 38px;
211 } 226 }
212 } 227 }
src/views/Service/AbroadDetail.vue
@@ -95,13 +95,13 @@ @@ -95,13 +95,13 @@
95 <img class="notime" v-if="packageArr.length==0" src="@/assets/service/notime.png" alt=""> 95 <img class="notime" v-if="packageArr.length==0" src="@/assets/service/notime.png" alt="">
96 96
97 <van-tabs class="tabs top_border" v-model="active" swipeable :ellipsis="false" color="#4092FF" scrollspy sticky> 97 <van-tabs class="tabs top_border" v-model="active" swipeable :ellipsis="false" color="#4092FF" scrollspy sticky>
98 - <van-tab title="品详情"> 98 + <van-tab title="品详情">
99 <div class="tag_item" v-if="detailData.productFeatures"> 99 <div class="tag_item" v-if="detailData.productFeatures">
100 - <p class="tag_title">品特色</p> 100 + <p class="tag_title">品特色</p>
101 <p class="tag_text" v-html="detailData.productFeatures"></p> 101 <p class="tag_text" v-html="detailData.productFeatures"></p>
102 </div> 102 </div>
103 <div class="tag_item" v-if="detailData.productDescription"> 103 <div class="tag_item" v-if="detailData.productDescription">
104 - <p class="tag_title">品描述</p> 104 + <p class="tag_title">品描述</p>
105 <div class="content_box"> 105 <div class="content_box">
106 <div class="content_all" :class="isOpen ? 'open' : ''"> 106 <div class="content_all" :class="isOpen ? 'open' : ''">
107 <p v-html="detailData.productDescription"></p> 107 <p v-html="detailData.productDescription"></p>
@@ -347,7 +347,7 @@ export default { @@ -347,7 +347,7 @@ export default {
347 } else { 347 } else {
348 let message = res.data.message; 348 let message = res.data.message;
349 if (!message) { 349 if (!message) {
350 - message = '品不存在' 350 + message = '品不存在'
351 } 351 }
352 this.$toast.fail(message) 352 this.$toast.fail(message)
353 } 353 }
src/views/Service/EditContact.vue
@@ -31,25 +31,35 @@ export default { @@ -31,25 +31,35 @@ export default {
31 phone: '', 31 phone: '',
32 gender: '', 32 gender: '',
33 travelerIdCard: '', 33 travelerIdCard: '',
34 - travelerNum: '' 34 + travelerNum: '',
  35 + isAdd: false,//是否为新增家长(新增学生不在此页面)
35 } 36 }
36 }, 37 },
37 mounted () { 38 mounted () {
38 let editContact = JSON.parse(localStorage.getItem('editContact')) 39 let editContact = JSON.parse(localStorage.getItem('editContact'))
39 -  
40 - this.userType = editContact?.userType  
41 - this.userTypeName = editContact?.userType == 1 ? '学生' : '家长'  
42 - if (editContact?.travelerIdCard) {  
43 - this.travelerIdCard = editContact?.travelerIdCard  
44 - }  
45 - if (editContact?.travelerMobile) {  
46 - this.phone = editContact?.travelerMobile  
47 - }  
48 - if (editContact?.travelerName) {  
49 - this.travelerName = editContact?.travelerName 40 + if (this.$route.query.add) {
  41 + console.log('新增家长')
  42 + this.userType = 2;
  43 + this.userTypeName = '家长'
  44 + this.isAdd = true;
  45 + } else {
  46 + this.userType = editContact?.userType
  47 + this.userTypeName = editContact?.userType == 1 ? '学生' : '家长'
  48 + if (editContact?.travelerIdCard) {
  49 + this.travelerIdCard = editContact?.travelerIdCard
  50 + }
  51 + if (editContact?.travelerMobile) {
  52 + this.phone = editContact?.travelerMobile
  53 + }
  54 + if (editContact?.travelerName) {
  55 + this.travelerName = editContact?.travelerName
  56 + }
  57 + if (editContact?.gender) {
  58 + this.gender = String(editContact?.gender)
  59 + }
  60 + this.userType = editContact?.userType
  61 + this.travelerNum = editContact?.travelerNum
50 } 62 }
51 - this.userType = editContact?.userType  
52 - this.travelerNum = editContact?.travelerNum  
53 }, 63 },
54 methods: { 64 methods: {
55 // 确认 65 // 确认
@@ -77,13 +87,15 @@ export default { @@ -77,13 +87,15 @@ export default {
77 let userInfo = localStorage.getItem('userInfo') 87 let userInfo = localStorage.getItem('userInfo')
78 userInfo = userInfo ? JSON.parse(userInfo) : userInfo; 88 userInfo = userInfo ? JSON.parse(userInfo) : userInfo;
79 let postData = { 89 let postData = {
80 - userNum: this.travelerNum,  
81 contactsName: this.travelerName, 90 contactsName: this.travelerName,
82 contactsMobile: this.phone, 91 contactsMobile: this.phone,
83 contactsIdCard: this.travelerIdCard, 92 contactsIdCard: this.travelerIdCard,
84 contactsType: this.userType, 93 contactsType: this.userType,
85 gender: Number(this.gender), 94 gender: Number(this.gender),
86 loginMobile: userInfo?.phone 95 loginMobile: userInfo?.phone
  96 + };
  97 + if (!this.isAdd) {//新增学生或家长
  98 + postData.userNum = this.travelerNum;
87 } 99 }
88 this.$toast.loading({ 100 this.$toast.loading({
89 message: '加载中', 101 message: '加载中',
src/views/Service/SelectContact.vue
1 <template> 1 <template>
2 <div id="selectContact"> 2 <div id="selectContact">
  3 + <div class="control">
  4 + <div class="add_btn" @click="showAddChildPopupGroup=true">
  5 + <van-icon name="add-o" />
  6 + 新增学生
  7 + </div>
  8 + <div class="add_btn" @click="addContact">
  9 + <van-icon name="add-o" />
  10 + 新增家长
  11 + </div>
  12 + </div>
3 <div class="box"> 13 <div class="box">
4 <template v-for="(item,index) in contactList"> 14 <template v-for="(item,index) in contactList">
5 <div class="contact_item" v-if="!hideParent&&item.userType!=1||item.userType==1" :key="index"> 15 <div class="contact_item" v-if="!hideParent&&item.userType!=1||item.userType==1" :key="index">
6 - <van-icon class="edit" name="edit" @click="editContact(index)" /> 16 + <van-checkbox class="checkbox" v-model="item.checked" shape="square"></van-checkbox>
7 <div class="info"> 17 <div class="info">
8 <p class="name">{{item.travelerName}}<span v-if="!item.travelerIdCard||!item.gender">需完善</span></p> 18 <p class="name">{{item.travelerName}}<span v-if="!item.travelerIdCard||!item.gender">需完善</span></p>
9 <p class="des">{{item.userType==1?'学生':'家长'}}·{{item.travelerMobile}}</p> 19 <p class="des">{{item.userType==1?'学生':'家长'}}·{{item.travelerMobile}}</p>
10 </div> 20 </div>
11 - <van-checkbox v-if="item.userType==1" class="checkbox" v-model="item.checked" shape="square"></van-checkbox>  
12 - <van-checkbox v-else class="checkbox" v-model="item.checked" @change="checkboxChange" shape="square"></van-checkbox> 21 + <van-icon class="edit" name="edit" @click="editContact(index)" />
13 </div> 22 </div>
14 </template> 23 </template>
15 - <div class="add_btn" @click="showAddChildPopupGroup=true">  
16 - <van-icon name="add-o" />  
17 - 新增出行学生  
18 - </div> 24 +
19 </div> 25 </div>
20 <van-button class="btn" type="primary" @click="selectContact">确定</van-button> 26 <van-button class="btn" type="primary" @click="selectContact">确定</van-button>
21 <van-popup style="background: transparent;" get-container="body" v-model="showAddChildPopupGroup"> 27 <van-popup style="background: transparent;" get-container="body" v-model="showAddChildPopupGroup">
22 - <AddChildPopupGroup @complete="complete"></AddChildPopupGroup> 28 + <AddChildPopupGroup @complete="complete" step='1'></AddChildPopupGroup>
23 </van-popup> 29 </van-popup>
24 </div> 30 </div>
25 </template> 31 </template>
26 <script> 32 <script>
27 import AddChildPopupGroup from '@/views/Home/component/AddChildPopupGroup' 33 import AddChildPopupGroup from '@/views/Home/component/AddChildPopupGroup'
28 -import { Dialog } from 'vant';  
29 export default { 34 export default {
30 data () { 35 data () {
31 return { 36 return {
@@ -92,11 +97,16 @@ export default { @@ -92,11 +97,16 @@ export default {
92 userType: contactItem.userType, 97 userType: contactItem.userType,
93 travelerIdCard: contactItem.travelerIdCard, 98 travelerIdCard: contactItem.travelerIdCard,
94 travelerNum: contactItem.travelerNum, 99 travelerNum: contactItem.travelerNum,
95 - travelerName: contactItem.travelerName 100 + travelerName: contactItem.travelerName,
  101 + gender: contactItem.gender,
96 } 102 }
97 localStorage.setItem('editContact', JSON.stringify(editContact)) 103 localStorage.setItem('editContact', JSON.stringify(editContact))
98 this.$router.push({ name: 'EditContact' }) 104 this.$router.push({ name: 'EditContact' })
99 }, 105 },
  106 + // 添加家长
  107 + addContact () {
  108 + this.$router.push({ name: 'EditContact', query: { add: 1 } })
  109 + },
100 complete () { 110 complete () {
101 this.showAddChildPopupGroup = false; 111 this.showAddChildPopupGroup = false;
102 this.getContactList() 112 this.getContactList()
@@ -114,28 +124,36 @@ export default { @@ -114,28 +124,36 @@ export default {
114 selectedArr.push({ 124 selectedArr.push({
115 travelerName: contactList[i].travelerName, 125 travelerName: contactList[i].travelerName,
116 travelerMobile: contactList[i].travelerMobile, 126 travelerMobile: contactList[i].travelerMobile,
117 - travelerNum: contactList[i].travelerNum 127 + travelerNum: contactList[i].travelerNum,
  128 + userType: contactList[i].userType,
118 }) 129 })
119 } 130 }
120 } 131 }
121 } 132 }
122 console.log(this.limit, selectedArr.length) 133 console.log(this.limit, selectedArr.length)
  134 + // 判断出行人数是否符合
123 if (this.limit && this.limit != selectedArr.length) { 135 if (this.limit && this.limit != selectedArr.length) {
124 this.$toast(`请选择${this.limit}位出行人`) 136 this.$toast(`请选择${this.limit}位出行人`)
125 return; 137 return;
126 } 138 }
127 - // console.log(selectedArr)  
128 - localStorage.setItem('selectedContactArr', JSON.stringify(selectedArr))  
129 - this.$router.back()  
130 - },  
131 - checkboxChange (e) {  
132 - if (e == true) {  
133 - Dialog.alert({ 139 + // 判断是否选择学生
  140 + let hasStudent = false;
  141 + for (let i in selectedArr) {
  142 + if (selectedArr[i].userType == 1) {
  143 + hasStudent = true
  144 + }
  145 + }
  146 + if (!hasStudent) {
  147 + this.$dialog.alert({
134 title: '温馨提示', 148 title: '温馨提示',
135 message: '活动参与主体为学生本人,请选择出行学生!未绑定学生,请新增出行学生进行添加。', 149 message: '活动参与主体为学生本人,请选择出行学生!未绑定学生,请新增出行学生进行添加。',
136 confirmButtonColor: '#3385FF' 150 confirmButtonColor: '#3385FF'
137 }) 151 })
  152 + return;
138 } 153 }
  154 + // console.log(selectedArr)
  155 + localStorage.setItem('selectedContactArr', JSON.stringify(selectedArr))
  156 + this.$router.back()
139 } 157 }
140 }, 158 },
141 components: { 159 components: {
@@ -150,26 +168,38 @@ export default { @@ -150,26 +168,38 @@ export default {
150 box-sizing: border-box; 168 box-sizing: border-box;
151 padding: 16px 0; 169 padding: 16px 0;
152 background: #f6f7fa; 170 background: #f6f7fa;
153 - .box { 171 + .control {
154 width: 702px; 172 width: 702px;
155 margin: 0 auto; 173 margin: 0 auto;
156 padding: 0 24px; 174 padding: 0 24px;
157 - padding-bottom: 200px;  
158 box-sizing: border-box; 175 box-sizing: border-box;
159 background: #fff; 176 background: #fff;
160 border-radius: 16px; 177 border-radius: 16px;
  178 + margin-bottom: 24px;
161 .add_btn { 179 .add_btn {
  180 + display: inline-block;
  181 + width: 50%;
162 line-height: 104px; 182 line-height: 104px;
163 font-size: 28px; 183 font-size: 28px;
164 color: #4092ff; 184 color: #4092ff;
165 text-align: center; 185 text-align: center;
166 } 186 }
  187 + }
  188 + .box {
  189 + width: 702px;
  190 + margin: 0 auto;
  191 + padding: 0 24px;
  192 + padding-bottom: 200px;
  193 + box-sizing: border-box;
  194 + background: #fff;
  195 + border-radius: 16px;
  196 +
167 .contact_item { 197 .contact_item {
168 display: flex; 198 display: flex;
169 align-items: center; 199 align-items: center;
170 justify-content: space-between; 200 justify-content: space-between;
171 .edit { 201 .edit {
172 - padding: 20px 20px 20px 0; 202 + padding: 20px 0px 20px 20px;
173 font-size: 40px; 203 font-size: 40px;
174 color: #4092ff; 204 color: #4092ff;
175 } 205 }
@@ -196,7 +226,7 @@ export default { @@ -196,7 +226,7 @@ export default {
196 } 226 }
197 } 227 }
198 .checkbox { 228 .checkbox {
199 - padding: 20px 0 20px 20px; 229 + padding: 20px 20px 20px 0px;
200 } 230 }
201 } 231 }
202 } 232 }
@@ -229,10 +259,9 @@ export default { @@ -229,10 +259,9 @@ export default {
229 font-size: 40px; 259 font-size: 40px;
230 } 260 }
231 } 261 }
232 - .btn{ 262 + .btn {
233 font-size: 40px; 263 font-size: 40px;
234 } 264 }
235 -  
236 } 265 }
237 } 266 }
238 </style> 267 </style>
239 \ No newline at end of file 268 \ No newline at end of file
src/views/Service/ServiceBaseKQ.vue
@@ -112,7 +112,6 @@ export default { @@ -112,7 +112,6 @@ export default {
112 mounted () { 112 mounted () {
113 console.log('base mounted') 113 console.log('base mounted')
114 this.initService() 114 this.initService()
115 -  
116 }, 115 },
117 activated () { 116 activated () {
118 console.log('base activated') 117 console.log('base activated')
@@ -133,7 +132,6 @@ export default { @@ -133,7 +132,6 @@ export default {
133 }else if(list=='riverList'){ 132 }else if(list=='riverList'){
134 this.getRiverList() 133 this.getRiverList()
135 } 134 }
136 -  
137 }, 135 },
138 initService () { 136 initService () {
139 this.getUniList() 137 this.getUniList()
@@ -415,7 +413,6 @@ export default { @@ -415,7 +413,6 @@ export default {
415 }, 413 },
416 handleRedLink () { 414 handleRedLink () {
417 location.href = 'https://720yun.com/t/89vkzwd7pfw?scene_id=80780201' 415 location.href = 'https://720yun.com/t/89vkzwd7pfw?scene_id=80780201'
418 -  
419 } 416 }
420 }, 417 },
421 components: { 418 components: {
src/views/Travel/classAttestation.vue 0 → 100644
@@ -0,0 +1,124 @@ @@ -0,0 +1,124 @@
  1 +/* 集团认领 年级班级*/
  2 +<template>
  3 + <div>
  4 + <div class="fontBox">已认领</div>
  5 + <div class="card">
  6 + <div class="cardItem" v-for="(v,i) in schoolList" :key="i">
  7 + <div>2021级01班</div>
  8 + <div class="cardItem_grey" @click="switchSchool">取消认领</div>
  9 + </div>
  10 + </div>
  11 + <div class="fontBox">未认领</div>
  12 + <div class="treeCard">
  13 + <van-collapse v-model="activeNames" v-for="(v,i) in treeList" :key='i'>
  14 + <van-collapse-item title="标题1" :name="i">内容</van-collapse-item>
  15 + </van-collapse>
  16 + </div>
  17 +
  18 + <van-popup style="background: transparent;" get-container="body" v-model="showSchool">
  19 + <!-- <school-add></school-add> -->
  20 + <group-penson></group-penson>
  21 + </van-popup>
  22 + </div>
  23 +</template>
  24 +
  25 +<script>
  26 +import schoolAdd from '@/views/Travel/component/schoolAdd'
  27 +import groupPenson from '@/views/Travel/component/groupPenson'
  28 +export default {
  29 + components: { schoolAdd , groupPenson},
  30 + data() {
  31 + return {
  32 + schoolList: [
  33 + {},
  34 + {},
  35 + {},
  36 + ],
  37 + showSchool: false,
  38 + //
  39 + treeList: [
  40 + {
  41 + children: [
  42 + {},
  43 + {},
  44 + ]
  45 + },
  46 + {},
  47 + {},
  48 + ],
  49 + isShow: false,
  50 + activeNames: ['1'],
  51 + }
  52 + },
  53 + methods: {
  54 + //切换学校
  55 + switchSchool() {
  56 + // this.showSchool = true
  57 + },
  58 + //
  59 + childrenClick() {
  60 + if(this.isShow) {this.isShow = false}
  61 + else {
  62 + this.isShow = true
  63 + }
  64 + },
  65 + //
  66 + getClass() {
  67 + let phone = '18267566730'
  68 + let dataList = '绍兴市鲁迅小学'
  69 + // this.yxAxios.post(`${this.proxyUrl}/prod/user/info/claimSchool?loginMobile=${phone}&schoolNames=${dataList}`).then((res) => {
  70 + // this.$toast.clear()
  71 + // console.log(res.data)
  72 + // if (res.data.code == 200) {
  73 + // this.$toast.success('认证成功')
  74 + // this.$emit('closeJT')
  75 + // } else {
  76 + // this.$toast.fail(res.data?.message)
  77 + // }
  78 + // })
  79 + }
  80 + }
  81 +}
  82 +</script>
  83 +
  84 +<style lang="scss" scoped>
  85 +.fontBox {
  86 + width: 100vw;
  87 + height: 8vw;
  88 + display: flex;
  89 + align-items: center;
  90 + padding: 0 4vw;
  91 + box-sizing: border-box;
  92 + background-color: #F5F6FA;
  93 + font-size: 3.7vw;
  94 + font-weight: bold;
  95 + color: #0F1826;
  96 +}
  97 +.card {
  98 + padding: 7vw 5vw 0;
  99 + box-sizing: border-box;
  100 +
  101 + .cardItem {
  102 + display: flex;
  103 + justify-content: space-between;
  104 + margin-bottom: 9vw;
  105 + font-size: 3.8vw;
  106 +
  107 + .cardItem_blue {
  108 + color:#4092FF
  109 + }
  110 + .cardItem_grey {
  111 + color:#999999
  112 + }
  113 + }
  114 +
  115 + .treeIem {
  116 + margin-bottom: 9vw;
  117 + font-size: 3.8vw;
  118 + }
  119 +}
  120 +.treeCard {
  121 + padding: 2vw 1vw 0;
  122 + box-sizing: border-box;
  123 +}
  124 +</style>
0 \ No newline at end of file 125 \ No newline at end of file
src/views/Travel/component/groupPenson.vue 0 → 100644
@@ -0,0 +1,476 @@ @@ -0,0 +1,476 @@
  1 +<template>
  2 + <div>
  3 + <div class="addchild_group" v-if="step==1">
  4 + <img class="bg" src="@/assets/home/bg2.png" alt="">
  5 + <p class="title">集团管理人员认证</p>
  6 + <p class="des">认证完成后可发起集团定制研学活动</p>
  7 + <div class="phone_content">
  8 + <div class="item">
  9 + <p class="phone_title">手机号</p>
  10 + <div class="flex">
  11 + <input class="code phone" type="tel" maxlength="11" v-model="phone" placeholder="请输入您的手机号">
  12 + <span class="getcode" @click="getCode">{{codeText}}</span>
  13 + </div>
  14 + </div>
  15 + <div class="item">
  16 + <p class="phone_title">验证码</p>
  17 + <input class="code" type="text" v-model="code" placeholder="请输入验证码">
  18 + </div>
  19 + <button class="submit" @click="checkPhoneAndCode">下一步(1/2)</button>
  20 + </div>
  21 + </div>
  22 +
  23 + <div class="addchild_group" v-if="step==2">
  24 + <img class="bg" src="@/assets/home/bg2.png" alt="">
  25 + <p class="title">已查询到相关信息</p>
  26 + <p class="des">请仔细确认个人信息后再认领</p>
  27 + <div class="child_content">
  28 + <div class="school_box">
  29 + <div class="box" v-for="(v,i) in schoolList" :key="i">
  30 + <div class="box_list">
  31 + <div class="box_name" style="margin:0 0 20px">
  32 + <div class="greyFont">学校:</div>
  33 + <div>{{v.schoolName}}</div>
  34 + </div>
  35 + <!-- <div class="box_name" style="margin:12px 0 40px">
  36 + <div class="greyFont">所在地区:</div>
  37 + <div>浙江绍兴 越城区</div>
  38 + </div> -->
  39 + </div>
  40 + <div class="box_check">
  41 + <van-checkbox v-model="v.isAuth" shape="square"></van-checkbox>
  42 + </div>
  43 + </div>
  44 + </div>
  45 + <button class="submit" @click="claimChild">完成</button>
  46 + </div>
  47 + </div>
  48 +
  49 + <div class="addchild_group" v-if="step==3">
  50 + <img class="bg" src="@/assets/home/bg2.png" alt="">
  51 + <p class="title">暂无相关信息</p>
  52 + <p class="des">请确认预留手机号码是否正确</p>
  53 + <div class="content">
  54 + <div class="pic">
  55 + <img style="width:100%;height:100%" src="@/assets/Travel/noSchool.png" alt="">
  56 + </div>
  57 + <button class="submit" style="margin-top:50px" @click="handleClose">完成</button>
  58 + </div>
  59 + </div>
  60 +
  61 + </div>
  62 +</template>
  63 +
  64 +<script>
  65 +
  66 +import chooseSchool from '@/views/Service/component/chooseSchool'
  67 +var codeInterval;
  68 +export default {
  69 + components: { chooseSchool },
  70 + data () {
  71 + return {
  72 + step: 1,
  73 + publicName: '',
  74 + phone: '',
  75 + codeText: '获取验证码',//获取验证码按钮文字
  76 + code: '',//验证码
  77 + studentName: '',
  78 + showDialog: true,
  79 +
  80 + claimChildList: [],
  81 +
  82 + appId: '',
  83 + chooseSchoolisShow: false,
  84 +
  85 + checked: '',
  86 + schoolList: [
  87 +
  88 + ]
  89 + }
  90 + },
  91 +
  92 + mounted () {
  93 + let publicName = localStorage.getItem('publicName')
  94 + this.publicName = publicName
  95 + let userInfo = localStorage.getItem('userInfo')
  96 + this.userInfo = JSON.parse(userInfo);
  97 + },
  98 + methods: {
  99 + // 获取验证码
  100 + getCode () {
  101 + if (this.codeText != '获取验证码') return;
  102 + if (!this.phone) {
  103 + this.$toast('请输入手机号')
  104 + return;
  105 + }
  106 + if (!this.checkPhone(this.phone)) {
  107 + this.$toast('请输入正确的手机号')
  108 + return;
  109 + }
  110 + this.$toast.loading({
  111 + message: '加载中',
  112 + duration: 0,
  113 + forbidClick: true
  114 + })
  115 + this.http.getMsg({
  116 + phone: this.phone
  117 + }).then((res) => {
  118 + this.$toast.clear()
  119 + if (res.success) {
  120 + let i = 60;
  121 + codeInterval = setInterval(() => {
  122 + if (i == 0) {
  123 + this.codeText = `获取验证码`;
  124 + clearInterval(codeInterval);
  125 + return;
  126 + }
  127 + this.codeText = `重试(${i})`;
  128 + i--
  129 + }, 1000)
  130 + } else {
  131 + this.$toast.fail(res.message)
  132 + }
  133 + })
  134 + },
  135 + // 获取手机号白名单信息
  136 + checkPhoneAndCode () {
  137 + if (!this.phone) {
  138 + this.$toast('请输入手机号')
  139 + return;
  140 + }
  141 + if (!this.checkPhone(this.phone)) {
  142 + this.$toast('请输入正确的手机号')
  143 + return;
  144 + }
  145 + if (!this.code) {
  146 + this.$toast('请输入验证码')
  147 + return;
  148 + }
  149 + this.$toast.loading({
  150 + message: '加载中',
  151 + duration: 0,
  152 + forbidClick: true
  153 + })
  154 + const userInfo = JSON.parse(localStorage.getItem('userInfo'))
  155 +
  156 + // this.yxAxios.post(`${this.proxyUrl}/prod/user/info/checkPhoneAndCode`, {
  157 + // "code": this.code,
  158 + // "phone": this.phone,
  159 + // "unionId": userInfo.unionId,
  160 + // 'requestFlag': 2
  161 + // }).then((res) => {
  162 + // this.$toast.clear()
  163 + // if (res.data.code == 200) {
  164 + // if (res.data.data.length == 0) {
  165 + // // 白名单无用户
  166 + // this.step = 3;
  167 + // } else {
  168 + // // 白名单有用户
  169 + // this.schoolList = res.data.data
  170 + // this.step = 2;
  171 + // }
  172 + // } else {
  173 + // this.$toast.fail(res.data?.message)
  174 + // }
  175 + // })
  176 + },
  177 +
  178 + // 完成
  179 + claimChild () {
  180 + const schoolList = this.schoolList
  181 + let dataList = ''
  182 + schoolList.forEach(item => {
  183 + if(item.isAuth) {
  184 + dataList = dataList + item.schoolName + ','
  185 + }
  186 + })
  187 + if(dataList) {
  188 + dataList = dataList.substring(0 , dataList.length-1);
  189 + }
  190 + console.log(dataList )
  191 + this.$toast.loading({
  192 + message: '加载中...',
  193 + duration: 0,
  194 + forbidClick: true
  195 + })
  196 + // this.yxAxios.post(`${this.proxyUrl}/prod/user/info/claimSchool?loginMobile=${this.phone}&schoolNames=${dataList}`).then((res) => {
  197 + // this.$toast.clear()
  198 + // console.log(res.data)
  199 + // if (res.data.code == 200) {
  200 + // this.$toast.success('认证成功')
  201 + // this.$emit('closeJT')
  202 + // } else {
  203 + // this.$toast.fail(res.data?.message)
  204 + // }
  205 + // })
  206 + },
  207 +
  208 + handleClose () {
  209 + this.$emit('closeJT')
  210 + },
  211 + checkPhone (phone) {
  212 + if ((/^1[3456789]\d{9}$/.test(phone))) {
  213 + return true
  214 + } else {
  215 + return false
  216 + }
  217 + },
  218 + },
  219 + destroyed () {
  220 + clearInterval(codeInterval);
  221 + },
  222 +}
  223 +</script>
  224 +<style lang="scss" scoped>
  225 +.addchild_group {
  226 + width: 638px;
  227 + height: 836px;
  228 + background: #ffffff;
  229 + border-radius: 24px;
  230 + position: relative;
  231 + .bg {
  232 + width: 100%;
  233 + position: absolute;
  234 + top: 0;
  235 + left: 0;
  236 + }
  237 + .title {
  238 + position: relative;
  239 + width: 100%;
  240 + padding-top: 70px;
  241 + padding-bottom: 8px;
  242 + text-align: center;
  243 + font-size: 34px;
  244 + font-weight: bold;
  245 + color: #0857ff;
  246 + }
  247 + .des {
  248 + position: relative;
  249 + width: 100%;
  250 + box-sizing: border-box;
  251 + padding: 0 15%;
  252 + text-align: center;
  253 + font-size: 24px;
  254 + color: #6596ff;
  255 + }
  256 + .content {
  257 + width: 100%;
  258 + box-sizing: border-box;
  259 + padding: 0 40px;
  260 + position: absolute;
  261 + top: 236px;
  262 + left: 0;
  263 + .name {
  264 + width: 558px;
  265 + height: 50px;
  266 + font-size: 28px;
  267 + color: #000;
  268 + padding-left: 20px;
  269 + box-sizing: border-box;
  270 + }
  271 + .item {
  272 + width: 558px;
  273 + height: 72px;
  274 + border-radius: 36px;
  275 + background: #f7f7f7;
  276 + box-sizing: border-box;
  277 + font-size: 28px;
  278 + padding: 0 32px;
  279 + display: flex;
  280 + justify-content: space-between;
  281 + align-items: center;
  282 + margin-bottom: 28px;
  283 + p {
  284 + color: #333333;
  285 + &.nodata {
  286 + color: #999999;
  287 + }
  288 + }
  289 + img {
  290 + width: 40px;
  291 + }
  292 + input {
  293 + width: 100%;
  294 + background: transparent;
  295 + border: 0;
  296 + color: #333333;
  297 + padding: 0;
  298 + &::-webkit-input-placeholder {
  299 + color: #999999;
  300 + }
  301 + }
  302 + .btn {
  303 + width: 240px;
  304 + height: 55px;
  305 + float: right;
  306 + font-size: 28px;
  307 + background: linear-gradient(135deg, #cdf8cf 0%, #8af36f 100%);
  308 + box-shadow: 0px 4px 8px 0px rgba(189, 189, 189, 0.5),
  309 + 0px 8px 12px 0px rgba(89, 199, 171, 0.5);
  310 + border-radius: 34px;
  311 + border: transparent;
  312 + color: #333333;
  313 + }
  314 + }
  315 + .school_select {
  316 + font-size: 28px;
  317 + padding: 0 32px;
  318 + margin-bottom: 28px;
  319 + }
  320 + .submit {
  321 + width: 294px;
  322 + height: 72px;
  323 + border: 0;
  324 + background: linear-gradient(135deg, #99c2ff 0%, #1f59ff 100%);
  325 + box-shadow: 0px 4px 8px 0px rgba(189, 189, 189, 0.5),
  326 + 0px 8px 12px 0px rgba(87, 137, 255, 0.5);
  327 + border-radius: 34px;
  328 + font-size: 34px;
  329 + color: #ffffff;
  330 + margin: 0 auto;
  331 + display: block;
  332 + }
  333 + .pic {
  334 + width: 350px;
  335 + height: 350px;
  336 + margin: auto
  337 + }
  338 + }
  339 + .child_content {
  340 + position: relative;
  341 + margin-top: 40px;
  342 + .child_box {
  343 + height: 500px;
  344 + overflow: auto;
  345 + padding-left: 100px;
  346 + .child_item {
  347 + position: relative;
  348 + margin-bottom: 50px;
  349 + p {
  350 + font-size: 28px;
  351 + padding: 8px 0;
  352 + span {
  353 + display: inline-block;
  354 + width: 140px;
  355 + margin-right: 28px;
  356 + color: #999;
  357 + }
  358 + }
  359 + .checkbox {
  360 + position: absolute;
  361 + top: 115px;
  362 + right: 20px;
  363 + }
  364 + }
  365 + }
  366 + .school_box {
  367 + width: 100%;
  368 + height: 500px;
  369 + overflow: auto;
  370 + font-size: 3.7vw;
  371 + padding: 20px 60px 20px 90px ;
  372 + box-sizing: border-box;
  373 +
  374 + .box {
  375 + display: flex;
  376 + justify-content: space-between;
  377 +
  378 + .box_list {
  379 + .box_name {
  380 + display: flex;
  381 +
  382 + .greyFont {
  383 + // width: 160px;
  384 + width: 110px;
  385 + color: #999999;
  386 + }
  387 + }
  388 + }
  389 + .box_check {
  390 +
  391 + }
  392 + }
  393 + }
  394 + .submit {
  395 + width: 438px;
  396 + height: 78px;
  397 + background: #3385ff;
  398 + border-radius: 37px;
  399 + border-radius: 39px;
  400 + border: 0;
  401 + font-size: 34px;
  402 + color: #ffffff;
  403 + margin: 0 auto;
  404 + display: block;
  405 + }
  406 + }
  407 + .phone_content {
  408 + width: 100%;
  409 + position: absolute;
  410 + top: 180px;
  411 + left: 0;
  412 + box-sizing: border-box;
  413 + padding: 40px;
  414 + .item {
  415 + border-bottom: 1px solid #e2e2e2;
  416 + margin-bottom: 30px;
  417 + }
  418 + .phone_title {
  419 + font-size: 34px;
  420 + font-weight: bold;
  421 + margin-bottom: 28px;
  422 + }
  423 + .flex {
  424 + display: flex;
  425 + align-items: center;
  426 + justify-content: space-between;
  427 + margin-bottom: 22px;
  428 + }
  429 + .code {
  430 + border: 0;
  431 + background: transparent;
  432 + font-size: 28px;
  433 + margin-bottom: 32px;
  434 + width: 100%;
  435 + }
  436 + .phone {
  437 + width: 50%;
  438 + margin: 0;
  439 + }
  440 + .getcode {
  441 + color: #5789ff;
  442 + font-size: 28px;
  443 + padding: 10px;
  444 + }
  445 + .submit {
  446 + width: 438px;
  447 + height: 78px;
  448 + background: #3385ff;
  449 + border-radius: 37px;
  450 + border-radius: 39px;
  451 + border: 0;
  452 + font-size: 34px;
  453 + color: #ffffff;
  454 + margin: 0 auto;
  455 + margin-top: 120px;
  456 + display: block;
  457 + }
  458 + }
  459 +}
  460 + ::v-deep .van-search {
  461 + background: transparent;
  462 + padding: 0;
  463 + width: 100%;
  464 +}
  465 + ::v-deep .van-search__content {
  466 + padding: 0;
  467 +}
  468 +.schoolBoxF {
  469 + width: 100vw;
  470 + height: 100vh;
  471 + position: absolute;
  472 + top: 0;
  473 + left: 0;
  474 + background-color: #fff;
  475 +}
  476 +</style>
src/views/Travel/component/schoolAdd.vue 0 → 100644
@@ -0,0 +1,351 @@ @@ -0,0 +1,351 @@
  1 +<template>
  2 + <div>
  3 + <div class="addchild_group" v-if="step==1">
  4 + <img class="bg" src="@/assets/home/bg2.png" alt="">
  5 + <p class="title">选择学校</p>
  6 + <p class="des">请选择你关注的学校</p>
  7 + <div class="content">
  8 + <!-- <div class="name">选择学校</div> -->
  9 + <div class="item">
  10 + <input type="text" placeholder="请选择学校" readonly v-model="school">
  11 + <button type="info" class="btn" @click="chooseSchool">选择学校</button>
  12 + </div>
  13 + <button class="submit" @click="submit">确定</button>
  14 + </div>
  15 + </div>
  16 +
  17 + <van-popup v-model="chooseSchoolisShow" round get-container="body" :safe-area-inset-bottom="true">
  18 + <div v-if="chooseSchoolisShow">
  19 + <chooseSchool v-model="chooseSchoolisShow" @schoolData='schoolData'></chooseSchool>
  20 + </div>
  21 + </van-popup>
  22 + </div>
  23 +</template>
  24 +
  25 +<script>
  26 +
  27 +import chooseSchool from '@/views/Service/component/chooseSchool'
  28 +export default {
  29 + components: { chooseSchool },
  30 + data () {
  31 + return {
  32 + step: 1,
  33 + phone: '',
  34 + codeText: '获取验证码',//获取验证码按钮文字
  35 + code: '',//验证码
  36 + studentName: '',
  37 + userInfo: {},
  38 +
  39 + searchSchool: '',
  40 + school: '',
  41 + schoolId: '',
  42 +
  43 + chooseSchoolisShow: false
  44 + }
  45 + },
  46 +
  47 + mounted () {
  48 + let userInfo = localStorage.getItem('userInfo')
  49 + this.userInfo = JSON.parse(userInfo);
  50 + },
  51 + methods: {
  52 + submit () {
  53 + if (!this.school) {
  54 + this.$toast('请选择学校');
  55 + } else {
  56 + let postData = {
  57 + userNum: this.userInfo.centerNo,
  58 + contactsName: this.userInfo.nickName,
  59 + contactsMobile: this.userInfo.phone,
  60 + loginMobile: this.userInfo.phone,
  61 + schoolName: this.school,
  62 + contactsType: this.userInfo.userType,
  63 + }
  64 + this.$toast.loading({
  65 + message: '加载中',
  66 + duration: 0,
  67 + forbidClick: true
  68 + })
  69 + console.log(postData)
  70 + this.yxAxios.post(`${this.proxyUrl}/prod/user/info/addContacts`, postData).then((res) => {
  71 + this.$toast.clear()
  72 + if (res.data.code == 200) {
  73 + this.$toast.success('关注成功')
  74 + this.$emit('closeAdd')
  75 + this.getUserInfoXST()
  76 + } else {
  77 + this.$toast.fail(res.message)
  78 + }
  79 + })
  80 + }
  81 + },
  82 + //选择学校
  83 + chooseSchool () {
  84 + // this.$router.push({name: 'chooseSchool'})
  85 + this.chooseSchoolisShow = true
  86 + },
  87 + schoolData (val) {
  88 + this.school = val.text;
  89 + this.schoolId = val.id;
  90 + },
  91 + // 获取用户信息
  92 + getUserInfoXST () {
  93 + this.$toast.loading({
  94 + message: '加载中...',
  95 + duration: 0,
  96 + forbidClick: true
  97 + })
  98 + let appid = ''
  99 + let publicName = localStorage.getItem('publicName')
  100 + if( publicName == 'XST'){
  101 + appid = 'wx1c630c8773c482f1'
  102 + }else if (publicName == 'SXYX') {
  103 + appId = 'wx1305e88d2bc74073'
  104 + } else if (publicName == 'XST') {
  105 + appId = 'wx1c630c8773c482f1'
  106 + } else if (publicName == 'KQ') {
  107 + appId = 'wx1305e88d2bc74073'
  108 + }
  109 +
  110 + this.yxAxios.get(`${this.proxyUrl}/prod/api/wx/${appid}/getUserInfo?unionId=${localStorage.getItem('unionId')}`).then((res) => {
  111 + this.$toast.clear()
  112 + if (res.data.code == 200) {
  113 + localStorage.setItem('userInfo', JSON.stringify(res.data.data))
  114 +
  115 + if(res.data.data.schoolNames || res.data.data.schoolNames == [] || res.data.data.schoolNames == 'null') {
  116 + localStorage.setItem('schoolNames',JSON.stringify(res.data.data.schoolNames))
  117 + this.$store.commit('changeSchool', res.data.data.schoolNames)
  118 + if(!localStorage.getItem('schoolNamesChoose')) {
  119 + localStorage.setItem('schoolNamesChoose',res.data.data.schoolNames[0])
  120 + }
  121 + }else {
  122 + localStorage.setItem('schoolNames',[])
  123 + this.$store.commit('changeSchool', [])
  124 + }
  125 + }
  126 + })
  127 + },
  128 + },
  129 +}
  130 +</script>
  131 +<style lang="scss" scoped>
  132 +.addchild_group {
  133 + width: 638px;
  134 + // height: 836px;
  135 + height: 496px;
  136 + background: #ffffff;
  137 + border-radius: 24px;
  138 + position: relative;
  139 + .bg {
  140 + width: 100%;
  141 + position: absolute;
  142 + top: 0;
  143 + left: 0;
  144 + }
  145 + .title {
  146 + position: relative;
  147 + width: 100%;
  148 + padding-top: 70px;
  149 + padding-bottom: 8px;
  150 + text-align: center;
  151 + font-size: 34px;
  152 + font-weight: bold;
  153 + color: #0857ff;
  154 + }
  155 + .des {
  156 + position: relative;
  157 + width: 100%;
  158 + box-sizing: border-box;
  159 + padding: 0 15%;
  160 + text-align: center;
  161 + font-size: 24px;
  162 + color: #6596ff;
  163 + }
  164 + .content {
  165 + width: 100%;
  166 + box-sizing: border-box;
  167 + padding: 0 40px;
  168 + position: absolute;
  169 + top: 236px;
  170 + left: 0;
  171 + .name {
  172 + width: 558px;
  173 + height: 50px;
  174 + font-size: 28px;
  175 + color: #000;
  176 + padding-left: 20px;
  177 + box-sizing: border-box;
  178 + }
  179 + .item {
  180 + width: 558px;
  181 + height: 72px;
  182 + border-radius: 36px;
  183 + background: #f7f7f7;
  184 + box-sizing: border-box;
  185 + font-size: 28px;
  186 + padding: 0 32px;
  187 + display: flex;
  188 + justify-content: space-between;
  189 + align-items: center;
  190 + margin-bottom: 28px;
  191 + p {
  192 + color: #333333;
  193 + &.nodata {
  194 + color: #999999;
  195 + }
  196 + }
  197 + img {
  198 + width: 40px;
  199 + }
  200 + input {
  201 + width: 100%;
  202 + background: transparent;
  203 + border: 0;
  204 + color: #333333;
  205 + padding: 0;
  206 + &::-webkit-input-placeholder {
  207 + color: #999999;
  208 + }
  209 + }
  210 + .btn {
  211 + width: 240px;
  212 + height: 55px;
  213 + float: right;
  214 + font-size: 28px;
  215 + background: linear-gradient(135deg, #cdf8cf 0%, #8af36f 100%);
  216 + box-shadow: 0px 4px 8px 0px rgba(189, 189, 189, 0.5),
  217 + 0px 8px 12px 0px rgba(89, 199, 171, 0.5);
  218 + border-radius: 34px;
  219 + border: transparent;
  220 + color: #333333;
  221 + }
  222 + }
  223 + .school_select {
  224 + font-size: 28px;
  225 + padding: 0 32px;
  226 + margin-bottom: 28px;
  227 + }
  228 + .submit {
  229 + width: 294px;
  230 + height: 72px;
  231 + border: 0;
  232 + background: linear-gradient(135deg, #99c2ff 0%, #1f59ff 100%);
  233 + box-shadow: 0px 4px 8px 0px rgba(189, 189, 189, 0.5),
  234 + 0px 8px 12px 0px rgba(87, 137, 255, 0.5);
  235 + border-radius: 34px;
  236 + font-size: 34px;
  237 + color: #ffffff;
  238 + margin: 55px auto 0;
  239 + display: block;
  240 + }
  241 + }
  242 + .child_content {
  243 + position: relative;
  244 + margin-top: 40px;
  245 + .child_box {
  246 + height: 500px;
  247 + overflow: auto;
  248 + padding-left: 100px;
  249 + .child_item {
  250 + position: relative;
  251 + margin-bottom: 50px;
  252 + p {
  253 + font-size: 28px;
  254 + padding: 8px 0;
  255 + span {
  256 + display: inline-block;
  257 + width: 140px;
  258 + margin-right: 28px;
  259 + color: #999;
  260 + }
  261 + }
  262 + .checkbox {
  263 + position: absolute;
  264 + top: 115px;
  265 + right: 20px;
  266 + }
  267 + }
  268 + }
  269 + .submit {
  270 + width: 438px;
  271 + height: 78px;
  272 + background: #3385ff;
  273 + border-radius: 37px;
  274 + border-radius: 39px;
  275 + border: 0;
  276 + font-size: 34px;
  277 + color: #ffffff;
  278 + margin: 0 auto;
  279 + display: block;
  280 + }
  281 + }
  282 + .phone_content {
  283 + width: 100%;
  284 + position: absolute;
  285 + top: 180px;
  286 + left: 0;
  287 + box-sizing: border-box;
  288 + padding: 40px;
  289 + .item {
  290 + border-bottom: 1px solid #e2e2e2;
  291 + margin-bottom: 30px;
  292 + }
  293 + .phone_title {
  294 + font-size: 34px;
  295 + font-weight: bold;
  296 + margin-bottom: 28px;
  297 + }
  298 + .flex {
  299 + display: flex;
  300 + align-items: center;
  301 + justify-content: space-between;
  302 + margin-bottom: 22px;
  303 + }
  304 + .code {
  305 + border: 0;
  306 + background: transparent;
  307 + font-size: 28px;
  308 + margin-bottom: 32px;
  309 + width: 100%;
  310 + }
  311 + .phone {
  312 + width: 50%;
  313 + margin: 0;
  314 + }
  315 + .getcode {
  316 + color: #5789ff;
  317 + font-size: 28px;
  318 + padding: 10px;
  319 + }
  320 + .submit {
  321 + width: 438px;
  322 + height: 78px;
  323 + background: #3385ff;
  324 + border-radius: 37px;
  325 + border-radius: 39px;
  326 + border: 0;
  327 + font-size: 34px;
  328 + color: #ffffff;
  329 + margin: 0 auto;
  330 + margin-top: 120px;
  331 + display: block;
  332 + }
  333 + }
  334 +}
  335 + ::v-deep .van-search {
  336 + background: transparent;
  337 + padding: 0;
  338 + width: 100%;
  339 +}
  340 + ::v-deep .van-search__content {
  341 + padding: 0;
  342 +}
  343 +.schoolBoxF {
  344 + width: 100vw;
  345 + height: 100vh;
  346 + position: absolute;
  347 + top: 0;
  348 + left: 0;
  349 + background-color: #fff;
  350 +}
  351 +</style>
src/views/Travel/schoolAttestation.vue 0 → 100644
@@ -0,0 +1,74 @@ @@ -0,0 +1,74 @@
  1 +/* 认证学校*/
  2 +<template>
  3 + <div>
  4 + <div class="fontBox"></div>
  5 + <div class="card">
  6 + <div class="cardItem" v-for="(v,i) in schoolList" :key="i">
  7 + <div @click="switchClass">{{v.schoolName}}</div>
  8 + <div class="cardItem_blue" @click="switchSchool">重新认证</div>
  9 + </div>
  10 + </div>
  11 +
  12 + <!-- <van-popup style="background: transparent;" get-container="body" v-model="showSchool">
  13 + <group-penson></group-penson>
  14 + </van-popup> -->
  15 + </div>
  16 +</template>
  17 +
  18 +<script>
  19 +import schoolAdd from '@/views/Travel/component/schoolAdd'
  20 +import groupPenson from '@/views/Travel/component/groupPenson'
  21 +export default {
  22 + components: { schoolAdd , groupPenson},
  23 + data() {
  24 + return {
  25 + schoolList: [
  26 + {isAuth: true, schoolName: "绍兴市鲁迅小学"},
  27 + // {isAuth: false, schoolName: "测试学校"},
  28 + {isAuth: true, schoolName: "柯桥学校"},
  29 + ],
  30 + showSchool: false
  31 + }
  32 + },
  33 + methods: {
  34 + //切换学校
  35 + switchSchool() {
  36 + localStorage.setItem('backRZ',true)
  37 + this.$router.push({name: localStorage.getItem('prePage') })
  38 + },
  39 + //选择班级
  40 + switchClass() {
  41 + this.$router.push({name: 'classAttestation'})
  42 + }
  43 + }
  44 +}
  45 +</script>
  46 +
  47 +<style lang="scss" scoped>
  48 +.fontBox {
  49 + width: 100vw;
  50 + height: 3vw;
  51 + display: flex;
  52 + align-items: center;
  53 + padding: 0 4vw;
  54 + box-sizing: border-box;
  55 + background-color: #F5F6FA;
  56 + font-size: 3.5vw;
  57 + color: #999999;
  58 +}
  59 +.card {
  60 + padding: 7vw 5vw 0;
  61 + box-sizing: border-box;
  62 +
  63 + .cardItem {
  64 + display: flex;
  65 + justify-content: space-between;
  66 + margin-bottom: 10vw;
  67 + font-size: 3.8vw;
  68 +
  69 + .cardItem_blue {
  70 + color:#3074FF
  71 + }
  72 + }
  73 +}
  74 +</style>
0 \ No newline at end of file 75 \ No newline at end of file
src/views/Travel/schoolFollow.vue 0 → 100644
@@ -0,0 +1,73 @@ @@ -0,0 +1,73 @@
  1 +/* 关注学校*/
  2 +<template>
  3 + <div>
  4 + <div class="fontBox">请选择关注学校</div>
  5 + <div class="card">
  6 + <div class="cardItem" v-for="(v,i) in schoolList" :key="i">
  7 + <div>{{v}}</div>
  8 + <div class="cardItem_blue" @click="switchSchool(v)">切换</div>
  9 + </div>
  10 + </div>
  11 +
  12 + <van-popup style="background: transparent;" get-container="body" v-model="showSchool">
  13 + <!-- <school-add></school-add> -->
  14 + <group-penson></group-penson>
  15 + </van-popup>
  16 + </div>
  17 +</template>
  18 +
  19 +<script>
  20 +import schoolAdd from '@/views/Travel/component/schoolAdd'
  21 +import groupPenson from '@/views/Travel/component/groupPenson'
  22 +export default {
  23 + components: { schoolAdd , groupPenson},
  24 + data() {
  25 + return {
  26 + schoolList: [],
  27 + showSchool: false
  28 + }
  29 + },
  30 + mounted() {
  31 + this.getList()
  32 + },
  33 + methods: {
  34 + //切换学校
  35 + switchSchool(v) {
  36 + localStorage.setItem('schoolNamesChoose',v)
  37 + this.$router.push({name : localStorage.getItem('prePage')})
  38 + },
  39 + getList() {
  40 + this.schoolList = JSON.parse(localStorage.getItem('schoolNames'))
  41 + }
  42 + }
  43 +}
  44 +</script>
  45 +
  46 +<style lang="scss" scoped>
  47 +.fontBox {
  48 + width: 100vw;
  49 + height: 8vw;
  50 + display: flex;
  51 + align-items: center;
  52 + padding: 0 4vw;
  53 + box-sizing: border-box;
  54 + background-color: #F5F6FA;
  55 + font-size: 3.5vw;
  56 + color: #999999;
  57 +}
  58 +.card {
  59 + padding: 7vw 5vw 0;
  60 + box-sizing: border-box;
  61 +
  62 + .cardItem {
  63 + display: flex;
  64 + justify-content: space-between;
  65 + margin-bottom: 10vw;
  66 + font-size: 3.8vw;
  67 +
  68 + .cardItem_blue {
  69 + color:#3074FF
  70 + }
  71 + }
  72 +}
  73 +</style>
0 \ No newline at end of file 74 \ No newline at end of file