|
|
|
|
@ -24,7 +24,7 @@ |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="act_box"> |
|
|
|
|
<div class="act_btn" @click="confirmProject">确认</div> |
|
|
|
|
<div class="act_btn" @click="isShowCon = true">确认</div> |
|
|
|
|
</div> |
|
|
|
|
<van-overlay :show="isShow"> |
|
|
|
|
<div class="wrapper" @click.stop v-show="isSuccess"> |
|
|
|
|
@ -33,11 +33,10 @@ |
|
|
|
|
</div> |
|
|
|
|
<div class="tips">预约成功</div> |
|
|
|
|
<div class="tip_txt" style="text-align: left;padding:0 0.5rem;"> |
|
|
|
|
<!-- <div>预约成功后若不能按时体检请在开始时间</div> |
|
|
|
|
<div>前30分钟取消该预约</div> |
|
|
|
|
<div>未按期体检{{blacklistOutDate}}次后将被拉黑</div> |
|
|
|
|
<div>被拉黑的用户请于{{blacklistOutDate}}日后再次预约</div> --> |
|
|
|
|
<div> 预约成功后若不能按时体检请在开始时间前30分钟取消该预约。未按期体检{{timesToBlacklist}}次后将被拉黑,被拉黑的用户请于{{blacklistOutDate}}日后再次预约。</div> |
|
|
|
|
<div> |
|
|
|
|
预约成功后若不能按时体检请在开始时间前30分钟取消该预约。未按期体检{{ |
|
|
|
|
timesToBlacklist }}次后将被拉黑,被拉黑的用户请于{{ blacklistOutDate }}日后再次预约。 |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="btn" @click="clickSucc">知道了</div> |
|
|
|
|
</div> |
|
|
|
|
@ -51,18 +50,77 @@ |
|
|
|
|
</div> |
|
|
|
|
<div class="btn" @click="clickFail">知道了</div> |
|
|
|
|
</div> |
|
|
|
|
<div v-show="isShowCon" @click.stop class="wrapper"> |
|
|
|
|
<div class="tips">请确认您了解以下情况</div> |
|
|
|
|
<div class="btn" @click="confirm">已了解</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="close_box" @click="clickClose"><img src="~@/assets/image/close.png" alt=""></div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</van-overlay> |
|
|
|
|
<!-- 预约须知 --> |
|
|
|
|
<van-overlay :show="isShowCon" :lock-scroll="false"> |
|
|
|
|
<div @click.stop class="confirm_box"> |
|
|
|
|
<div class="confirm_txt"> |
|
|
|
|
<div style="color:#f00;">请确认您符合以下身体条件:</div> |
|
|
|
|
<div> |
|
|
|
|
1.身高:申请大型客车、重型牵引挂车、城市公交车、大型货车、无轨电车准驾车型的,身高为155厘米以上。申请中型客车准驾车型的,身高为150厘米以上; |
|
|
|
|
</div> |
|
|
|
|
<div> |
|
|
|
|
2.视力:申请大型客车、重型牵引挂车、城市公交车、中型客车、大型货车、无轨电车或者有轨电车准驾车型的,两眼裸视力或者矫正视力达到对数视力表5.0以上。申请其他准驾车型的,两眼裸视力或者矫正视力达到对数视力表4.9以上。单眼视力障碍,优眼裸视力或者矫正视力达到对数视力表5.0以上,且水平视野达到150度的,可以申请小型汽车、小型自动挡汽车、低速载货汽车、三轮汽车、残疾人专用小型自动挡载客汽车准驾车型的机动车驾驶证; |
|
|
|
|
</div> |
|
|
|
|
<div> 3.辨色力:无红绿色盲;</div> |
|
|
|
|
<div> |
|
|
|
|
4.听力:两耳分别距音叉50厘米能辨别声源方向。有听力障碍但佩戴助听设备能够达到以上条件的,可以申请小型汽车、小型自动挡汽车准驾车型的机动车驾驶证; |
|
|
|
|
</div> |
|
|
|
|
<div> |
|
|
|
|
5.上肢:双手拇指健全,每只手其他手指必须有三指健全,肢体和手指运动功能正常。但手指末节残缺或者左手有三指健全,且双手手掌完整的,可以申请小型汽车、小型自动挡汽车、低速载货汽车、三轮汽车准驾车型的机动车驾驶证; |
|
|
|
|
</div> |
|
|
|
|
<div> |
|
|
|
|
6.下肢:双下肢健全且运动功能正常,不等长度不得大于5厘米。单独左下肢缺失或者丧失运动功能,但右下肢正常的,可以申请小型自动挡汽车准驾车型的机动车驾驶证; |
|
|
|
|
</div> |
|
|
|
|
<div> 7.躯干、颈部:无运动功能障碍;</div> |
|
|
|
|
<div> |
|
|
|
|
8.右下肢、双下肢缺失或者丧失运动功能但能够自主坐立,且上肢符合本项第5目规定的,可以申请残疾人专用小型自动挡载客汽车准驾车型的机动车驾驶证。一只手掌缺失,另一只手拇指健全,其他手指有两指健全,上肢和手指运动功能正常,且下肢符合本项第6目规定的,可以申请残疾人专用小型自动挡载客汽车准驾车型的机动车驾驶证; |
|
|
|
|
</div> |
|
|
|
|
<div> 9. |
|
|
|
|
年龄在70周岁以上能够通过记忆力、判断力、反应力等能力测试的,可以申请小型汽车、小型自动挡汽车、残疾人专用小型自动挡载客汽车、轻便摩托车准驾车型的机动车驾驶证。</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="confirm_btn"> |
|
|
|
|
<div class="confirm_actBtn" @click="isShowCon = false">上一步</div> |
|
|
|
|
<div class="confirm_actBtn blue" @click="isShowCon = false; isShowAvatar = true">确认</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</van-overlay> |
|
|
|
|
<!-- 采集头像弹框 --> |
|
|
|
|
<van-overlay :show="isShowAvatar"> |
|
|
|
|
<div class="confirm_box avatar" @click.stop> |
|
|
|
|
<div class="img_box" |
|
|
|
|
:style="{ backgroundImage: `${avatar.length > 0 ? 'url(' + avatar + ')' : 'url(' + require('@/assets/image/avatar.png') + ')'}` }"> |
|
|
|
|
</div> |
|
|
|
|
<div class="img_txt">请上传近期半身本人照片</div> |
|
|
|
|
<div class="img_btn" @click="chooseAvatar">开始上传</div> |
|
|
|
|
<div class="img_tips"> |
|
|
|
|
<div> |
|
|
|
|
<img src="@/assets/image/avatar_icon01.png" /> |
|
|
|
|
<div>人脸置于轮廓内</div> |
|
|
|
|
</div> |
|
|
|
|
<div> |
|
|
|
|
<img src="@/assets/image/avatar_icon02.png" /> |
|
|
|
|
<div>请保持无表情</div> |
|
|
|
|
</div> |
|
|
|
|
<div> |
|
|
|
|
<img src="@/assets/image/avatar_icon03.png" /> |
|
|
|
|
<div>保持光线充足</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="confirm_btn"> |
|
|
|
|
<div class="confirm_actBtn" @click="isShowCon = true; isShowAvatar = false">上一步</div> |
|
|
|
|
<div class="confirm_actBtn blue" @click="doConfirmSubmit">确认</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</van-overlay> |
|
|
|
|
</div> |
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
<script> |
|
|
|
|
import { postExam } from "@/api/examination"; |
|
|
|
|
import { saveCupImg } from "@/api/hospital"; |
|
|
|
|
export default { |
|
|
|
|
data() { |
|
|
|
|
return { |
|
|
|
|
@ -70,36 +128,139 @@ export default { |
|
|
|
|
proArr: [], |
|
|
|
|
isShow: false, |
|
|
|
|
isSuccess: false, |
|
|
|
|
isShowCon:false, |
|
|
|
|
isFail:false, |
|
|
|
|
isShowCon: false, |
|
|
|
|
isFail: false, |
|
|
|
|
userInfo: {}, |
|
|
|
|
failTips: '', |
|
|
|
|
blacklistOutDate:'', |
|
|
|
|
timesToBlacklist:'',//拉黑限制次数 |
|
|
|
|
blacklistOutDate: '', |
|
|
|
|
timesToBlacklist: '',//拉黑限制次数 |
|
|
|
|
isShowAvatar: false,//采集头像弹框 |
|
|
|
|
avatar: '',//头像 |
|
|
|
|
}; |
|
|
|
|
}, |
|
|
|
|
mounted() { |
|
|
|
|
console.log('query', this.$route.query); |
|
|
|
|
this.userInfo = JSON.parse(sessionStorage.getItem('userInfo')) |
|
|
|
|
console.log(this.userInfo); |
|
|
|
|
this.proData = this.$route.query; |
|
|
|
|
let selectArr = JSON.parse(this.proData.selectArr); |
|
|
|
|
selectArr.map(item => { |
|
|
|
|
this.proArr.push({ |
|
|
|
|
apmDay: this.proData.time.replace(/\//g, '-'), |
|
|
|
|
createDept: this.proData.createDept, |
|
|
|
|
project: item.name, |
|
|
|
|
cuAddr: item.posi, |
|
|
|
|
period: item.time.substr(0, 2), |
|
|
|
|
timeFrame: item.time.substr(3), |
|
|
|
|
cupName: this.Base64.encode(this.userInfo.name), |
|
|
|
|
cupPhone: this.Base64.encode(this.userInfo.mobile), |
|
|
|
|
cupCardNo: this.Base64.encode(this.userInfo.papersnumber) |
|
|
|
|
if (this.userInfo) { |
|
|
|
|
this.proData = this.$route.query; |
|
|
|
|
let selectArr = JSON.parse(this.proData.selectArr); |
|
|
|
|
selectArr.map(item => { |
|
|
|
|
this.proArr.push({ |
|
|
|
|
apmDay: this.proData.time.replace(/\//g, '-'), |
|
|
|
|
createDept: this.proData.createDept, |
|
|
|
|
project: item.name, |
|
|
|
|
cuAddr: item.posi, |
|
|
|
|
period: item.time.substr(0, 2), |
|
|
|
|
timeFrame: item.time.substr(3), |
|
|
|
|
cupName: this.Base64.encode(this.userInfo.name), |
|
|
|
|
cupPhone: this.Base64.encode(this.userInfo.mobile), |
|
|
|
|
cupCardNo: this.Base64.encode(this.userInfo.papersnumber) |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
// console.log("proArr",this.proArr) |
|
|
|
|
}, |
|
|
|
|
methods: { |
|
|
|
|
//须知 - 头像采集完成之后提交预约 |
|
|
|
|
doConfirmSubmit() { |
|
|
|
|
if (this.avatar) { |
|
|
|
|
this.confirm(); |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
//头像选择 |
|
|
|
|
chooseAvatar() { |
|
|
|
|
lightAppJssdk.media.chooseImage({ |
|
|
|
|
arg: '200', |
|
|
|
|
type: '1', |
|
|
|
|
success: (data) => { |
|
|
|
|
//成功回调 |
|
|
|
|
if (data.picPath.length > 1) { |
|
|
|
|
this.$toast('头像只能选择一张'); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
// this.compress(data.picPath[0]); |
|
|
|
|
// //保存采集头像 |
|
|
|
|
let avatar = 'data:image/jpg;base64,' + data.picPath[0]; |
|
|
|
|
this.saveCupImg(avatar.replace(/\s/g, encodeURIComponent(' '))); |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
fail: (data) => { |
|
|
|
|
alert(data) |
|
|
|
|
console.log('fail img',data) |
|
|
|
|
//错误返回 |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
}, |
|
|
|
|
//保存采集头像 |
|
|
|
|
saveCupImg(avatar) { |
|
|
|
|
let param = { data: { cupCardNo: this.Base64.encode(this.userInfo.papersnumber), cupImg: avatar } }; |
|
|
|
|
this.$toast.loading({ |
|
|
|
|
message: '请求中', |
|
|
|
|
duration: 0, |
|
|
|
|
}) |
|
|
|
|
try { |
|
|
|
|
if (this.GlobalConfig.appMode) { |
|
|
|
|
vaildInterfacefn("cgstjyyxuwxt", "qdsgajjtjczdhqwzxq", JSON.stringify(param), "2", "https://" + this.GlobalConfig.urlCreatesign, "https://" + this.GlobalConfig.urlGateway).then((value) => { |
|
|
|
|
this.$toast.clear(); |
|
|
|
|
let retData = JSON.parse(value); |
|
|
|
|
if (retData.code == 200) { |
|
|
|
|
this.$toast('采集成功'); |
|
|
|
|
this.avatar = avatar; |
|
|
|
|
} else { |
|
|
|
|
this.$toast(retData.msg); |
|
|
|
|
} |
|
|
|
|
}, err => { |
|
|
|
|
this.$toast.clear(); |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
saveCupImg(JSON.stringify(param)).then(res => { |
|
|
|
|
this.$toast.clear(); |
|
|
|
|
if (res.code == 200) { |
|
|
|
|
this.$toast('采集成功'); |
|
|
|
|
this.avatar = avatar; |
|
|
|
|
console.log(this.avatar) |
|
|
|
|
} else { |
|
|
|
|
this.$toast(res.msg); |
|
|
|
|
} |
|
|
|
|
}, err => { |
|
|
|
|
this.$toast.clear(); |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
} catch (error) { |
|
|
|
|
this.$toast.clear(); |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
//图片压缩 |
|
|
|
|
compress(base64) { |
|
|
|
|
var newImage = new Image(); |
|
|
|
|
var quality = 0.6; //压缩系数0-1之间 |
|
|
|
|
newImage.src = 'data:image/jpg;base64,' + base64; |
|
|
|
|
newImage.setAttribute("crossOrigin", 'Anonymous'); //url为外域时需要 |
|
|
|
|
newImage.onload = () => { |
|
|
|
|
var canvas = document.createElement("canvas"); |
|
|
|
|
var ctx = canvas.getContext("2d"); |
|
|
|
|
canvas.width = 700; |
|
|
|
|
canvas.height = 920; |
|
|
|
|
quality = 0.7; |
|
|
|
|
ctx.clearRect(0, 0, canvas.width, canvas.height); |
|
|
|
|
ctx.drawImage(newImage, 0, 0, canvas.width, canvas.height); |
|
|
|
|
var compressBase64 = canvas.toDataURL("image/jpeg", quality); //压缩语句 |
|
|
|
|
// 如想确保图片压缩到自己想要的尺寸,如要求在50-150kb之间,请加以下语句,quality初始值根据情况自定 |
|
|
|
|
// while (base64.length / 1024 > 150) { |
|
|
|
|
// quality -= 0.01; |
|
|
|
|
// base64 = canvas.toDataURL("image/jpeg", quality); |
|
|
|
|
// } |
|
|
|
|
// 防止最后一次压缩低于最低尺寸,只要quality递减合理,无需考虑 |
|
|
|
|
// while (base64.length / 1024 < 50) { |
|
|
|
|
// quality += 0.001; |
|
|
|
|
// base64 = canvas.toDataURL("image/jpeg", quality); |
|
|
|
|
// } |
|
|
|
|
//保存采集头像 |
|
|
|
|
this.saveCupImg(compressBase64); |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
cancelButton(idx) { |
|
|
|
|
this.proArr.splice(idx, 1); |
|
|
|
|
// this.proArr = this.proArr.filter(item => item.name != val.name) |
|
|
|
|
@ -123,16 +284,10 @@ export default { |
|
|
|
|
// }); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
confirmProject(){ |
|
|
|
|
console.log('ces') |
|
|
|
|
this.isShow = true |
|
|
|
|
this.isShowCon = true |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
confirm() { |
|
|
|
|
let param = this.proArr; |
|
|
|
|
console.log(param) |
|
|
|
|
this.isShowCon = false |
|
|
|
|
this.isShowAvatar = false |
|
|
|
|
this.$toast.loading({ |
|
|
|
|
message: '请求中', |
|
|
|
|
duration: 0, |
|
|
|
|
@ -398,6 +553,119 @@ export default { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//预约须知 |
|
|
|
|
.confirm_box { |
|
|
|
|
position: absolute; |
|
|
|
|
left: 0; |
|
|
|
|
top: 0; |
|
|
|
|
right: 0; |
|
|
|
|
bottom: 0; |
|
|
|
|
background-color: #fff; |
|
|
|
|
|
|
|
|
|
.tips { |
|
|
|
|
font-size: 0.34rem; |
|
|
|
|
color: #000; |
|
|
|
|
font-weight: bold; |
|
|
|
|
font-family: PingFang SC-Regular, PingFang SC; |
|
|
|
|
text-align: center; |
|
|
|
|
padding-top: 0.24rem; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.confirm_txt { |
|
|
|
|
position: absolute; |
|
|
|
|
left: 0.24rem; |
|
|
|
|
top: 0.24rem; |
|
|
|
|
right: 0.24rem; |
|
|
|
|
bottom: 2rem; |
|
|
|
|
font-size: 0.24rem; |
|
|
|
|
color: #666; |
|
|
|
|
font-family: PingFang SC-Regular, PingFang SC; |
|
|
|
|
text-align: left; |
|
|
|
|
line-height: 0.42rem; |
|
|
|
|
overflow: scroll; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.confirm_btn { |
|
|
|
|
position: absolute; |
|
|
|
|
left: 0.4rem; |
|
|
|
|
right: 0.4rem; |
|
|
|
|
bottom: calc(20px + 0.24rem); |
|
|
|
|
|
|
|
|
|
.confirm_actBtn { |
|
|
|
|
float: left; |
|
|
|
|
display: inline-block; |
|
|
|
|
width: 3rem; |
|
|
|
|
color: #999999; |
|
|
|
|
font-size: 0.3rem; |
|
|
|
|
font-family: PingFang SC-Bold, PingFang SC; |
|
|
|
|
font-weight: bold; |
|
|
|
|
line-height: 0.98rem; |
|
|
|
|
text-align: center; |
|
|
|
|
background: #FFFFFF; |
|
|
|
|
border-radius: 0.08rem; |
|
|
|
|
border: 0.02rem solid #E1E1E1; |
|
|
|
|
|
|
|
|
|
&.blue { |
|
|
|
|
float: right; |
|
|
|
|
color: #fff; |
|
|
|
|
background: #1677FF; |
|
|
|
|
border-color: #1677FF; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//头像采集 |
|
|
|
|
&.avatar { |
|
|
|
|
.img_box { |
|
|
|
|
width: 3.6rem; |
|
|
|
|
height: 3.6rem; |
|
|
|
|
background: url('../assets/image/avatar.png') no-repeat; |
|
|
|
|
background-size: cover; |
|
|
|
|
margin: 1.42rem auto 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.img_txt { |
|
|
|
|
font-family: PingFang SC-Regular, PingFang SC; |
|
|
|
|
font-weight: 400; |
|
|
|
|
color: #666666; |
|
|
|
|
font-size: 0.26rem; |
|
|
|
|
line-height: 0.45rem; |
|
|
|
|
text-align: center; |
|
|
|
|
margin: 0.3rem auto 0.46rem; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.img_btn { |
|
|
|
|
width: 3rem; |
|
|
|
|
line-height: 0.8rem; |
|
|
|
|
background: #1677FF; |
|
|
|
|
border-radius: 0.4rem; |
|
|
|
|
margin: 0 auto 1.46rem; |
|
|
|
|
font-size: 0.3rem; |
|
|
|
|
font-family: PingFang SC-Bold, PingFang SC; |
|
|
|
|
font-weight: bold; |
|
|
|
|
color: #fff; |
|
|
|
|
text-align: center; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.img_tips { |
|
|
|
|
display: flex; |
|
|
|
|
justify-content: space-around; |
|
|
|
|
font-size: 0.24rem; |
|
|
|
|
font-family: PingFang SC-Regular, PingFang SC; |
|
|
|
|
font-weight: 400; |
|
|
|
|
color: #999999; |
|
|
|
|
line-height: 0.34rem; |
|
|
|
|
text-align: center; |
|
|
|
|
|
|
|
|
|
img { |
|
|
|
|
width: 0.82rem; |
|
|
|
|
height: 0.82rem; |
|
|
|
|
margin-bottom: 0.24rem; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.close_box { |
|
|
|
|
display: flex; |
|
|
|
|
justify-content: center; |
|
|
|
|
|