Commit 6efe1a3b2009479a6d82de9609c2d2ae6fb67963

Authored by 夏洋涛
1 parent de222c84
Exists in master

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

src/App.vue
1 1 <template>
2 2 <div id="app">
3 3 <keep-alive>
4   - <!--这里是会被缓存的组件-->
5 4 <router-view v-if="this.$route.meta.keepAlive" />
6 5 </keep-alive>
7   - <!--这里是不会被缓存的组件-->
  6 +
8 7 <router-view v-if="!this.$route.meta.keepAlive" />
9 8 </div>
10 9 </template>
... ...
src/component/Tabbar.vue
... ... @@ -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 0 \ No newline at end of file
src/component/Tabbar2.vue
... ... @@ -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 0 \ No newline at end of file
src/component/Tabbar3.vue
... ... @@ -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 0 \ No newline at end of file
src/component/Tabbar4.vue
... ... @@ -25,16 +25,13 @@ export default {
25 25 },
26 26 methods: {
27 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 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 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 195 name: 'SelectContact',
196 196 component: SelectContact,
197 197 meta: {
198   - title: '选择联系人'
  198 + title: '选择出行人'
199 199 }
200 200 },
201 201 {
... ... @@ -203,7 +203,7 @@ const routes = [{
203 203 name: 'EditContact',
204 204 component: EditContact,
205 205 meta: {
206   - title: '修改联系人'
  206 + title: '修改出行人'
207 207 }
208 208 },
209 209 {
... ... @@ -224,7 +224,7 @@ const routes = [{
224 224 },
225 225 ]
226 226 const router = new VueRouter({
227   - mode: 'history',
  227 + mode: 'hash',
228 228 // base: process.env.BASE_URL+'/center',
229 229 base: process.env.BASE_URL,
230 230 routes
... ...
src/views/PublicService/ServiceKQ.vue
... ... @@ -24,13 +24,13 @@ export default {
24 24 // sessionStorage.setItem('prePage', 'Service' + this.publicName);
25 25 // sessionStorage.setItem('unionId', 'oJPmPuLaAx2x2DaRGfCFeYuLWzLU');
26 26 const sUserAgent = window.navigator.userAgent.toLowerCase()
27   - alert(sUserAgent)
  27 + // alert(sUserAgent)
28 28 console.log(sUserAgent)
29 29 const dtdreamweb = sUserAgent.indexOf("dtdreamweb") > -1
30 30 const miniprogram = sUserAgent.indexOf("miniprogram") > -1 && sUserAgent.indexOf("alipay") > -1
31 31 if (dtdreamweb) {
32 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 36 if (miniprogram) {
... ...
src/views/Service/EditContact.vue
... ... @@ -4,6 +4,14 @@
4 4 <van-cell-group>
5 5 <van-field v-model="userTypeName" label="身份类型" readonly />
6 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 15 <van-field v-model="phone" label="手机号码" maxlength="11" placeholder="请填写手机号码" />
8 16 <van-field v-model="travelerIdCard" label="身份证" maxlength="18" placeholder="请填写证件号码" />
9 17 </van-cell-group>
... ... @@ -18,9 +26,10 @@ export default {
18 26 return {
19 27 id: '',
20 28 userType: '',
21   - userTypeName:'',
  29 + userTypeName: '',
22 30 travelerName: '',
23 31 phone: '',
  32 + gender: '',
24 33 travelerIdCard: '',
25 34 travelerNum: ''
26 35 }
... ... @@ -45,6 +54,10 @@ export default {
45 54 methods: {
46 55 // 确认
47 56 addContact () {
  57 + if (!this.gender) {
  58 + this.$toast('请选择性别')
  59 + return;
  60 + }
48 61 if (!this.phone) {
49 62 this.$toast('请输入手机号')
50 63 return;
... ... @@ -66,7 +79,8 @@ export default {
66 79 contactsName: this.travelerName,
67 80 contactsMobile: this.phone,
68 81 contactsIdCard: this.travelerIdCard,
69   - contactsType: this.userType
  82 + contactsType: this.userType,
  83 + gender:Number(this.gender)
70 84 }
71 85 this.$toast.loading({
72 86 message: '加载中',
... ... @@ -77,7 +91,7 @@ export default {
77 91 this.$toast.clear()
78 92 if (res.data.code == 200) {
79 93 this.$toast.success('完善成功')
80   - this.$router.back()
  94 + this.$router.back()
81 95 } else {
82 96 this.$toast.fail(res.message)
83 97 }
... ...
src/views/Service/SelectContact.vue
... ... @@ -2,18 +2,19 @@
2 2 <div id="selectContact">
3 3 <div class="box">
4 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 13 </div>
11   - <van-checkbox class="checkbox" v-model="item.checked" shape="square"></van-checkbox>
12   - </div>
13 14 </template>
14 15 <div class="add_btn" @click="showAddChildPopupGroup=true">
15 16 <van-icon name="add-o" />
16   - 新增联系人
  17 + 新增出行学生
17 18 </div>
18 19 </div>
19 20 <van-button class="btn" type="primary" @click="selectContact">确定</van-button>
... ... @@ -24,18 +25,19 @@
24 25 </template>
25 26 <script>
26 27 import AddChildPopupGroup from '@/views/PublicHome/component/AddChildPopupGroup'
  28 +import { Dialog } from 'vant';
27 29 export default {
28 30 data () {
29 31 return {
30   - limit:'',
31   - hideParent:false,
  32 + limit: '',
  33 + hideParent: false,
32 34 contactList: [],
33 35 showAddChildPopupGroup: false
34 36 }
35 37 },
36 38 mounted () {
37 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 41 console.log(this.hideParent)
40 42 this.getContactList()
41 43 },
... ... @@ -58,7 +60,8 @@ export default {
58 60 travelerNum: userInfo?.centerNo,
59 61 travelerIdCard: userInfo?.idCard,
60 62 userType: 2,
61   - travelerName: userInfo?.nickName
  63 + travelerName: userInfo?.nickName,
  64 + gender: userInfo?.gender,
62 65 })
63 66 this.contactList = contactList
64 67 }
... ... @@ -87,7 +90,7 @@ export default {
87 90 let selectedArr = [];
88 91 for (let i in contactList) {
89 92 if (contactList[i]?.checked) {
90   - if (!contactList[i].travelerIdCard&&!this.hideParent) {
  93 + if ((!contactList[i].travelerIdCard||!contactList[i].gender) && !this.hideParent) {
91 94 this.$toast('请先完善您选择的联系人信息')
92 95 return;
93 96 } else {
... ... @@ -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 106 if (this.limit && this.limit != selectedArr.length) {
104 107 this.$toast(`请选择${this.limit}位联系人`)
105 108 return;
... ... @@ -107,6 +110,15 @@ export default {
107 110 // console.log(selectedArr)
108 111 sessionStorage.setItem('selectedContactArr', JSON.stringify(selectedArr))
109 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 124 components: {
... ...