Commit 6efe1a3b2009479a6d82de9609c2d2ae6fb67963

Authored by 夏洋涛
1 parent de222c84
Exists in master

feat: 出行人新增性别,选家长时提示

1 <template> 1 <template>
2 <div id="app"> 2 <div id="app">
3 <keep-alive> 3 <keep-alive>
4 - <!--这里是会被缓存的组件-->  
5 <router-view v-if="this.$route.meta.keepAlive" /> 4 <router-view v-if="this.$route.meta.keepAlive" />
6 </keep-alive> 5 </keep-alive>
7 - <!--这里是不会被缓存的组件--> 6 +
8 <router-view v-if="!this.$route.meta.keepAlive" /> 7 <router-view v-if="!this.$route.meta.keepAlive" />
9 </div> 8 </div>
10 </template> 9 </template>
src/component/Tabbar.vue
@@ -1,102 +0,0 @@ @@ -1,102 +0,0 @@
1 -<template>  
2 - <div id="tabbar">  
3 - <div class="tab" :class="active=='lecture'?'active':''" @click="handleLecture">  
4 - <img v-if="active=='lecture'" src="../assets/tabbar1/tab1_on.png" alt="">  
5 - <img v-else src="../assets/tabbar1/tab1_off.png" alt="">  
6 - <p>公益讲座</p>  
7 - </div>  
8 - <div class="center">  
9 - <img class="tip" src="../assets/tabbar1/tab2.png" alt="">  
10 - <wx-open-launch-weapp id="launch-btn" username="gh_c0f904a5ee0c" path="pages/index/index?type=zkedt">  
11 - <script type="text/wxtag-template">  
12 - <style>.mini_btn { width:500px;height:500px;background:transparent;border:0; }</style>  
13 - <button class="mini_btn"></button>  
14 - </script>  
15 - </wx-open-launch-weapp>  
16 - </div>  
17 - <div class="tab">  
18 - <div class="block"></div>  
19 - <p>志愿填报</p>  
20 - </div>  
21 - <div class="tab" :class="active=='center'?'active':''" @click="handleCenter">  
22 - <img v-if="active=='center'" src="../assets/tabbar1/tab3_on.png" alt="">  
23 - <img v-else src="../assets/tabbar1/tab3_off.png" alt="">  
24 - <p>个人中心</p>  
25 - </div>  
26 - </div>  
27 -</template>  
28 -<script>  
29 -export default {  
30 - name:'Tabbar',  
31 - props:{  
32 - active:String  
33 - },  
34 - mounted(){  
35 - console.log(this.active)  
36 - },  
37 - methods:{  
38 - // 点击讲座  
39 - handleLecture(){  
40 - this.$router.push({name:'Lecture'})  
41 - },  
42 - // 点击个人中心  
43 - handleCenter(){  
44 - this.$router.push({name:'Home'})  
45 - }  
46 - }  
47 -}  
48 -</script>  
49 -<style lang="scss">  
50 -#tabbar {  
51 - position: fixed;  
52 - bottom: 0;  
53 - width: 100%;  
54 - height: 100px;  
55 - background: #fff;  
56 - display: flex;  
57 - justify-content: space-around;  
58 - padding-bottom: 40px;  
59 - .tab {  
60 -  
61 - padding: 18px;  
62 - img {  
63 - width: 52px;  
64 - display: block;  
65 - margin: 0 auto;  
66 - }  
67 - .block{  
68 - width: 52px;  
69 - height: 52px;  
70 - }  
71 - p {  
72 - font-size: 20px;  
73 - color: #999999;  
74 - text-align: center;  
75 - }  
76 - &.active{  
77 - p{  
78 - color: #5789FF;  
79 - }  
80 - }  
81 - }  
82 - .center {  
83 - width: 92px;  
84 - height: 92px;  
85 - padding: 30px;  
86 - background: transparent;  
87 - position: absolute;  
88 - top: -60px;  
89 - left: 299px;  
90 - overflow: hidden;  
91 - z-index: 1;  
92 - .tip {  
93 - width: 92px;  
94 - position: absolute;  
95 - top: 50%;  
96 - left: 50%;  
97 - transform: translate(-50%, -50%);  
98 - z-index: -1;  
99 - }  
100 - }  
101 -}  
102 -</style>  
103 \ No newline at end of file 0 \ No newline at end of file
src/component/Tabbar2.vue
@@ -1,109 +0,0 @@ @@ -1,109 +0,0 @@
1 -<template>  
2 - <div id="tabbar">  
3 - <div class="tab" :class="active=='databook'?'active':''" @click="handleDataBook">  
4 - <img v-if="active=='databook'" src="../assets/tabbar2/tab1_on.png" alt="">  
5 - <img v-else src="../assets/tabbar2/tab1_off.png" alt="">  
6 - <p>数据宝典</p>  
7 - </div>  
8 - <div class="tab" :class="active=='careerplan'?'active':''" @click="handleCareerPlan">  
9 - <img v-if="active=='careerplan'" src="../assets/tabbar2/tab2_on.png" alt="">  
10 - <img v-else src="../assets/tabbar2/tab2_off.png" alt="">  
11 - <p>生涯规划</p>  
12 - </div>  
13 - <!-- <div class="tab" :class="active=='community'?'active':''" @click="handleCommunity">  
14 - <img v-if="active=='community'" src="../assets/tabbar2/tab3_on.png" alt="">  
15 - <img v-else src="../assets/tabbar2/tab3_off.png" alt="">  
16 - <p>社区</p>  
17 - </div> -->  
18 - <div class="tab" :class="active=='service'?'active':''" @click="handleService">  
19 - <img v-if="active=='service'" src="../assets/tabbar2/tab3_on.png" alt="">  
20 - <img v-else src="../assets/tabbar2/tab3_off.png" alt="">  
21 - <p>服务活动</p>  
22 - </div>  
23 - <div class="tab" :class="active=='center'?'active':''" @click="handleCenter">  
24 - <img v-if="active=='center'" src="../assets/tabbar2/tab4_on.png" alt="">  
25 - <img v-else src="../assets/tabbar2/tab4_off.png" alt="">  
26 - <p>个人中心</p>  
27 - </div>  
28 - </div>  
29 -</template>  
30 -<script>  
31 -export default {  
32 - name: 'Tabbar2',  
33 - props: {  
34 - active: String  
35 - },  
36 - methods: {  
37 - handleDataBook () {  
38 - this.$router.push({ name: 'DataBook' })  
39 - },  
40 - handleCareerPlan () {  
41 - this.$router.push({ name: 'CareerPlan' })  
42 - },  
43 - handleCommunity () {  
44 - this.$router.push({ name: 'Community' })  
45 - },  
46 - handleService () {  
47 - this.$router.push({ name: 'Service' })  
48 - },  
49 - handleCenter(){  
50 - this.$router.push({ name: 'Home' })  
51 - }  
52 - }  
53 -}  
54 -</script>  
55 -<style lang="scss" scoped>  
56 -#tabbar {  
57 - position: fixed;  
58 - bottom: 0;  
59 - width: 100%;  
60 - height: 100px;  
61 - background: #fff;  
62 - display: flex;  
63 - justify-content: space-around;  
64 - padding-bottom: 40px;  
65 - z-index: 99;  
66 - .tab {  
67 - padding: 18px;  
68 - img {  
69 - width: 36px;  
70 - padding: 20px;  
71 - display: block;  
72 - margin: 0 auto;  
73 - }  
74 - .block {  
75 - width: 52px;  
76 - height: 52px;  
77 - }  
78 - p {  
79 - font-size: 20px;  
80 - color: #999999;  
81 - text-align: center;  
82 - }  
83 - &.active {  
84 - p {  
85 - color: #5789ff;  
86 - }  
87 - }  
88 - }  
89 - .center {  
90 - width: 92px;  
91 - height: 92px;  
92 - padding: 30px;  
93 - background: transparent;  
94 - position: absolute;  
95 - top: -60px;  
96 - left: 299px;  
97 - overflow: hidden;  
98 - z-index: 1;  
99 - .tip {  
100 - width: 92px;  
101 - position: absolute;  
102 - top: 50%;  
103 - left: 50%;  
104 - transform: translate(-50%, -50%);  
105 - z-index: -1;  
106 - }  
107 - }  
108 -}  
109 -</style>  
110 \ No newline at end of file 0 \ No newline at end of file
src/component/Tabbar3.vue
@@ -1,96 +0,0 @@ @@ -1,96 +0,0 @@
1 -<template>  
2 - <div id="tabbar">  
3 - <div class="tab" :class="active=='ZZY'?'active':''" @click="handZZY">  
4 - <img v-if="active=='ZZY'" src="../assets/tabbar2/tab2_on.png" alt="">  
5 - <img v-else src="../assets/tabbar2/tab2_off.png" alt="">  
6 - <p>周周营</p>  
7 - </div>  
8 - <div class="tab" :class="active=='QXY'?'active':''" @click="handleQYX">  
9 - <img v-if="active=='QXY'" src="../assets/tabbar2/tab3_on.png" alt="">  
10 - <img v-else src="../assets/tabbar2/tab3_off.png" alt="">  
11 - <p>趣学院</p>  
12 - </div>  
13 - <div class="tab" :class="active=='center'?'active':''" @click="handleCenter">  
14 - <img v-if="active=='center'" src="../assets/tabbar2/tab4_on.png" alt="">  
15 - <img v-else src="../assets/tabbar2/tab4_off.png" alt="">  
16 - <p>我的</p>  
17 - </div>  
18 - </div>  
19 -</template>  
20 -<script>  
21 -export default {  
22 - name: 'Tabbar3',  
23 - props: {  
24 - active: String  
25 - },  
26 - methods: {  
27 - handZZY () {  
28 - let publicName = sessionStorage.getItem('publicName');  
29 - this.$router.push({ name: 'Service' + publicName, query: { showTab: 'ZZY' } })  
30 - },  
31 - handleQYX () {  
32 - let publicName = sessionStorage.getItem('publicName');  
33 - this.$router.push({ name: 'Service' + publicName, query: { showTab: 'QXY' } })  
34 - },  
35 - handleCenter () {  
36 - let publicName = sessionStorage.getItem('publicName');  
37 - this.$router.push({ name: 'Home'+publicName })  
38 - }  
39 - }  
40 -}  
41 -</script>  
42 -<style lang="scss" scoped>  
43 -#tabbar {  
44 - position: fixed;  
45 - bottom: 0;  
46 - width: 100%;  
47 - height: 100px;  
48 - background: #fff;  
49 - display: flex;  
50 - justify-content: space-around;  
51 - padding-bottom: 40px;  
52 - z-index: 99;  
53 - .tab {  
54 - padding: 18px;  
55 - img {  
56 - width: 36px;  
57 - padding: 20px;  
58 - display: block;  
59 - margin: 0 auto;  
60 - }  
61 - .block {  
62 - width: 52px;  
63 - height: 52px;  
64 - }  
65 - p {  
66 - font-size: 20px;  
67 - color: #999999;  
68 - text-align: center;  
69 - }  
70 - &.active {  
71 - p {  
72 - color: #5789ff;  
73 - }  
74 - }  
75 - }  
76 - .center {  
77 - width: 92px;  
78 - height: 92px;  
79 - padding: 30px;  
80 - background: transparent;  
81 - position: absolute;  
82 - top: -60px;  
83 - left: 299px;  
84 - overflow: hidden;  
85 - z-index: 1;  
86 - .tip {  
87 - width: 92px;  
88 - position: absolute;  
89 - top: 50%;  
90 - left: 50%;  
91 - transform: translate(-50%, -50%);  
92 - z-index: -1;  
93 - }  
94 - }  
95 -}  
96 -</style>  
97 \ No newline at end of file 0 \ No newline at end of file
src/component/Tabbar4.vue
@@ -25,16 +25,13 @@ export default { @@ -25,16 +25,13 @@ export default {
25 }, 25 },
26 methods: { 26 methods: {
27 handZZY () { 27 handZZY () {
28 - let publicName = sessionStorage.getItem('publicName');  
29 - this.$router.push({ name: 'Service' + publicName, query: { showTab: 'ZZY' } }) 28 + this.$router.push({ name: 'ServiceKQ', query: { showTab: 'ZZY' } })
30 }, 29 },
31 handleKQ () { 30 handleKQ () {
32 - let publicName = sessionStorage.getItem('publicName');  
33 - this.$router.push({ name: 'Service' + publicName, query: { showTab: 'KQ' } }) 31 + this.$router.push({ name: 'ServiceKQ', query: { showTab: 'KQ' } })
34 }, 32 },
35 handleCenter () { 33 handleCenter () {
36 - let publicName = sessionStorage.getItem('publicName');  
37 - this.$router.push({ name: 'Home'+publicName }) 34 + this.$router.push({ name: 'HomeKQ' })
38 } 35 }
39 } 36 }
40 } 37 }
src/router/index.js
@@ -195,7 +195,7 @@ const routes = [{ @@ -195,7 +195,7 @@ const routes = [{
195 name: 'SelectContact', 195 name: 'SelectContact',
196 component: SelectContact, 196 component: SelectContact,
197 meta: { 197 meta: {
198 - title: '选择联系人' 198 + title: '选择出行人'
199 } 199 }
200 }, 200 },
201 { 201 {
@@ -203,7 +203,7 @@ const routes = [{ @@ -203,7 +203,7 @@ const routes = [{
203 name: 'EditContact', 203 name: 'EditContact',
204 component: EditContact, 204 component: EditContact,
205 meta: { 205 meta: {
206 - title: '修改联系人' 206 + title: '修改出行人'
207 } 207 }
208 }, 208 },
209 { 209 {
@@ -224,7 +224,7 @@ const routes = [{ @@ -224,7 +224,7 @@ const routes = [{
224 }, 224 },
225 ] 225 ]
226 const router = new VueRouter({ 226 const router = new VueRouter({
227 - mode: 'history', 227 + mode: 'hash',
228 // base: process.env.BASE_URL+'/center', 228 // base: process.env.BASE_URL+'/center',
229 base: process.env.BASE_URL, 229 base: process.env.BASE_URL,
230 routes 230 routes
src/views/PublicService/ServiceKQ.vue
@@ -24,13 +24,13 @@ export default { @@ -24,13 +24,13 @@ export default {
24 // sessionStorage.setItem('prePage', 'Service' + this.publicName); 24 // sessionStorage.setItem('prePage', 'Service' + this.publicName);
25 // sessionStorage.setItem('unionId', 'oJPmPuLaAx2x2DaRGfCFeYuLWzLU'); 25 // sessionStorage.setItem('unionId', 'oJPmPuLaAx2x2DaRGfCFeYuLWzLU');
26 const sUserAgent = window.navigator.userAgent.toLowerCase() 26 const sUserAgent = window.navigator.userAgent.toLowerCase()
27 - alert(sUserAgent) 27 + // alert(sUserAgent)
28 console.log(sUserAgent) 28 console.log(sUserAgent)
29 const dtdreamweb = sUserAgent.indexOf("dtdreamweb") > -1 29 const dtdreamweb = sUserAgent.indexOf("dtdreamweb") > -1
30 const miniprogram = sUserAgent.indexOf("miniprogram") > -1 && sUserAgent.indexOf("alipay") > -1 30 const miniprogram = sUserAgent.indexOf("miniprogram") > -1 && sUserAgent.indexOf("alipay") > -1
31 if (dtdreamweb) { 31 if (dtdreamweb) {
32 alert('浙里办') 32 alert('浙里办')
33 - // window.location.href = `https://puser.zjzwfw.gov.cn/sso/mobile.do?action=oauth&scope=1&servicecode=hswsy`; 33 + window.location.href = `https://puser.zjzwfw.gov.cn/sso/mobile.do?action=oauth&scope=1&servicecode=hswsy`;
34 } 34 }
35 35
36 if (miniprogram) { 36 if (miniprogram) {
src/views/Service/EditContact.vue
@@ -4,6 +4,14 @@ @@ -4,6 +4,14 @@
4 <van-cell-group> 4 <van-cell-group>
5 <van-field v-model="userTypeName" label="身份类型" readonly /> 5 <van-field v-model="userTypeName" label="身份类型" readonly />
6 <van-field v-model="travelerName" label="姓名" placeholder="需与证件姓名一致" /> 6 <van-field v-model="travelerName" label="姓名" placeholder="需与证件姓名一致" />
  7 + <van-cell title="性别">
  8 + <template #right-icon>
  9 + <van-radio-group v-model="gender" direction="horizontal" style="width:67%;">
  10 + <van-radio name="1">男</van-radio>
  11 + <van-radio name="2">女</van-radio>
  12 + </van-radio-group>
  13 + </template>
  14 + </van-cell>
7 <van-field v-model="phone" label="手机号码" maxlength="11" placeholder="请填写手机号码" /> 15 <van-field v-model="phone" label="手机号码" maxlength="11" placeholder="请填写手机号码" />
8 <van-field v-model="travelerIdCard" label="身份证" maxlength="18" placeholder="请填写证件号码" /> 16 <van-field v-model="travelerIdCard" label="身份证" maxlength="18" placeholder="请填写证件号码" />
9 </van-cell-group> 17 </van-cell-group>
@@ -18,9 +26,10 @@ export default { @@ -18,9 +26,10 @@ export default {
18 return { 26 return {
19 id: '', 27 id: '',
20 userType: '', 28 userType: '',
21 - userTypeName:'', 29 + userTypeName: '',
22 travelerName: '', 30 travelerName: '',
23 phone: '', 31 phone: '',
  32 + gender: '',
24 travelerIdCard: '', 33 travelerIdCard: '',
25 travelerNum: '' 34 travelerNum: ''
26 } 35 }
@@ -45,6 +54,10 @@ export default { @@ -45,6 +54,10 @@ export default {
45 methods: { 54 methods: {
46 // 确认 55 // 确认
47 addContact () { 56 addContact () {
  57 + if (!this.gender) {
  58 + this.$toast('请选择性别')
  59 + return;
  60 + }
48 if (!this.phone) { 61 if (!this.phone) {
49 this.$toast('请输入手机号') 62 this.$toast('请输入手机号')
50 return; 63 return;
@@ -66,7 +79,8 @@ export default { @@ -66,7 +79,8 @@ export default {
66 contactsName: this.travelerName, 79 contactsName: this.travelerName,
67 contactsMobile: this.phone, 80 contactsMobile: this.phone,
68 contactsIdCard: this.travelerIdCard, 81 contactsIdCard: this.travelerIdCard,
69 - contactsType: this.userType 82 + contactsType: this.userType,
  83 + gender:Number(this.gender)
70 } 84 }
71 this.$toast.loading({ 85 this.$toast.loading({
72 message: '加载中', 86 message: '加载中',
@@ -77,7 +91,7 @@ export default { @@ -77,7 +91,7 @@ export default {
77 this.$toast.clear() 91 this.$toast.clear()
78 if (res.data.code == 200) { 92 if (res.data.code == 200) {
79 this.$toast.success('完善成功') 93 this.$toast.success('完善成功')
80 - this.$router.back() 94 + this.$router.back()
81 } else { 95 } else {
82 this.$toast.fail(res.message) 96 this.$toast.fail(res.message)
83 } 97 }
src/views/Service/SelectContact.vue
@@ -2,18 +2,19 @@ @@ -2,18 +2,19 @@
2 <div id="selectContact"> 2 <div id="selectContact">
3 <div class="box"> 3 <div class="box">
4 <template v-for="(item,index) in contactList"> 4 <template v-for="(item,index) in contactList">
5 - <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)" />  
7 - <div class="info">  
8 - <p class="name">{{item.travelerName}}<span v-if="!item.travelerIdCard">需完善</span></p>  
9 - <p class="des">{{item.userType==1?'学生':'家长'}}·{{item.travelerMobile}}</p> 5 + <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)" />
  7 + <div class="info">
  8 + <p class="name">{{item.travelerName}}<span v-if="!item.travelerIdCard||!item.gender">需完善</span></p>
  9 + <p class="des">{{item.userType==1?'学生':'家长'}}·{{item.travelerMobile}}</p>
  10 + </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>
10 </div> 13 </div>
11 - <van-checkbox class="checkbox" v-model="item.checked" shape="square"></van-checkbox>  
12 - </div>  
13 </template> 14 </template>
14 <div class="add_btn" @click="showAddChildPopupGroup=true"> 15 <div class="add_btn" @click="showAddChildPopupGroup=true">
15 <van-icon name="add-o" /> 16 <van-icon name="add-o" />
16 - 新增联系人 17 + 新增出行学生
17 </div> 18 </div>
18 </div> 19 </div>
19 <van-button class="btn" type="primary" @click="selectContact">确定</van-button> 20 <van-button class="btn" type="primary" @click="selectContact">确定</van-button>
@@ -24,18 +25,19 @@ @@ -24,18 +25,19 @@
24 </template> 25 </template>
25 <script> 26 <script>
26 import AddChildPopupGroup from '@/views/PublicHome/component/AddChildPopupGroup' 27 import AddChildPopupGroup from '@/views/PublicHome/component/AddChildPopupGroup'
  28 +import { Dialog } from 'vant';
27 export default { 29 export default {
28 data () { 30 data () {
29 return { 31 return {
30 - limit:'',  
31 - hideParent:false, 32 + limit: '',
  33 + hideParent: false,
32 contactList: [], 34 contactList: [],
33 showAddChildPopupGroup: false 35 showAddChildPopupGroup: false
34 } 36 }
35 }, 37 },
36 mounted () { 38 mounted () {
37 this.limit = this.$route.query.limit; 39 this.limit = this.$route.query.limit;
38 - this.hideParent = this.$route.query.hideParent?true:false; 40 + this.hideParent = this.$route.query.hideParent ? true : false;
39 console.log(this.hideParent) 41 console.log(this.hideParent)
40 this.getContactList() 42 this.getContactList()
41 }, 43 },
@@ -58,7 +60,8 @@ export default { @@ -58,7 +60,8 @@ export default {
58 travelerNum: userInfo?.centerNo, 60 travelerNum: userInfo?.centerNo,
59 travelerIdCard: userInfo?.idCard, 61 travelerIdCard: userInfo?.idCard,
60 userType: 2, 62 userType: 2,
61 - travelerName: userInfo?.nickName 63 + travelerName: userInfo?.nickName,
  64 + gender: userInfo?.gender,
62 }) 65 })
63 this.contactList = contactList 66 this.contactList = contactList
64 } 67 }
@@ -87,7 +90,7 @@ export default { @@ -87,7 +90,7 @@ export default {
87 let selectedArr = []; 90 let selectedArr = [];
88 for (let i in contactList) { 91 for (let i in contactList) {
89 if (contactList[i]?.checked) { 92 if (contactList[i]?.checked) {
90 - if (!contactList[i].travelerIdCard&&!this.hideParent) { 93 + if ((!contactList[i].travelerIdCard||!contactList[i].gender) && !this.hideParent) {
91 this.$toast('请先完善您选择的联系人信息') 94 this.$toast('请先完善您选择的联系人信息')
92 return; 95 return;
93 } else { 96 } else {
@@ -99,7 +102,7 @@ export default { @@ -99,7 +102,7 @@ export default {
99 } 102 }
100 } 103 }
101 } 104 }
102 - console.log(this.limit,selectedArr.length) 105 + console.log(this.limit, selectedArr.length)
103 if (this.limit && this.limit != selectedArr.length) { 106 if (this.limit && this.limit != selectedArr.length) {
104 this.$toast(`请选择${this.limit}位联系人`) 107 this.$toast(`请选择${this.limit}位联系人`)
105 return; 108 return;
@@ -107,6 +110,15 @@ export default { @@ -107,6 +110,15 @@ export default {
107 // console.log(selectedArr) 110 // console.log(selectedArr)
108 sessionStorage.setItem('selectedContactArr', JSON.stringify(selectedArr)) 111 sessionStorage.setItem('selectedContactArr', JSON.stringify(selectedArr))
109 this.$router.back() 112 this.$router.back()
  113 + },
  114 + checkboxChange (e) {
  115 + if (e == true) {
  116 + Dialog.alert({
  117 + title: '温馨提示',
  118 + message: '活动参与主体为学生本人,请选择出行学生!未绑定学生,请新增出行学生进行添加。',
  119 + confirmButtonColor:'#3385FF'
  120 + })
  121 + }
110 } 122 }
111 }, 123 },
112 components: { 124 components: {