project init

This commit is contained in:
zxy
2024-02-02 10:24:54 +08:00
commit 21a84c3035
253 changed files with 25212 additions and 0 deletions

View File

@@ -0,0 +1,504 @@
<template>
<view v-if="showDetail">
<view class="head">
<view class="proname">
{{info.missionTitle}}
</view>
<view class="prolist">
任务编码{{info.missionNo}}
</view>
<view class="prolist">
任务日期{{dateFormat((info.stime))}}{{dateFormat((info.etime))}}
</view>
<view class="prolist">
报名截止{{dateFormat((info.etimePub))}}
</view>
<view class="prolist">
行业类型{{info.tradeNames}}
</view>
<view class="prolist">
工种类型{{info.worktypeNames}}
</view>
<view class="fee">
{{info.wage}}{{wageUnit[info.wageUnitCategory]}}
</view>
</view>
<view class="head">
<view class="proname proneed">
任务要求
</view>
<view class="prolist">
<view class="protype">
年龄要求{{age[info.ageDesc]}}
</view>
</view>
<view class="prolist">
<view class="protype">
学历要求{{education[info.education]}}
</view>
<view class="protype">
经验要求{{experience[info.experienceDesc]}}
</view>
</view>
<view class="prolist proint">
任务描述
</view>
<view class="prolist description">
{{info.missionDesc}}
</view>
<!-- 技能标签 start -->
<view class="ask">
<view class="askList" v-for="(item,index) in skillNames" :key="index">
{{item}}
</view>
</view>
<!-- 技能标签 end -->
</view>
<view class="head">
<view class="proname proneed">
公司信息
</view>
<view class="prolist">
{{info.companyName}}
</view>
<view class="prolist">
公司地址{{info.companyAddress}}
</view>
</view>
<view class="head">
<view class="proname proneed">
联系方式
</view>
<view class="prolist">
<view class="protype">
联系人{{info.callName}}
</view>
<view class="protype">
联系方式{{info.callTel}}
</view>
</view>
<view class="prolist" v-if="info.callNumber">
座机号{{info.callNumber}}
</view>
<view class="prolist">
任务地址{{info.address}}
</view>
<map class="map" :latitude="latitude" :longitude="longitude" :markers="covers"></map>
</view>
<view class="" style="height:200rpx;background-color: #f6f6f6;" v-if="isShow!=='0'"></view>
<view class="btn" @click="submit" v-if="isShow!=='0'&&status===0">
<view class="bottombtn flexbtn">
抢任务
</view>
</view>
<view class="btn" v-if="isShow!=='0'&&status!==0">
<!-- <view class="bottombtn lookContract" @click="lookMask">查看合同</view> -->
<view class="bottombtn disabledBtn flexbtn">已抢任务</view>
</view>
<uniMask :maskShow="maskShow">
<view class="contractMask">
<!-- #ifdef H5 || APP-PLUS -->
<view class="close" @click="close" style="top: 124rpx;">+</view>
<!-- #endif -->
<!-- #ifdef MP-WEIXIN -->
<view class="close" @click="close">+</view>
<!-- #endif -->
<view style="height: 30px;"></view>
<img :src="src" alt="" style="width:100%;height: 1000px;">
<view v-if="nextBtn" class="down" @click="next">下一步</view>
</view>
</uniMask>
</view>
<view v-else-if="showCode" class="codeSealBox">
<!-- #ifdef H5 || APP-PLUS -->
<view class="closeCode" @click="closeShowCode" style="top: 124rpx;">+</view>
<!-- #endif -->
<!-- #ifdef MP-WEIXIN -->
<view class="closeCode" @click="closeShowCode">+</view>
<!-- #endif -->
<view class="title">
<view class="name">签名密码</view>
<view class="tip">6位数字签名密码</view>
</view>
<view style="height: 36px;"></view>
<valid-code ref="validCode" @finish="getInpCode" :maxlength="maxlength"></valid-code>
<view style="height: 36px;"></view>
<view class="forget" @click="forget">忘记密码</view>
</view>
</template>
<script>
import {mapGetters} from 'vuex'
import {missionDetail,submit} from '@/api/mission.js';
import {GoLogin} from '@/untils/AxiosUtils.js';
import {setRead} from '@/api/news.js';
import {checkPass} from '@/api/auth.js';
import dictionary from '@/common/textdata.js';
import {dateFormat} from "../../untils/format.js";
import uniMask from '@/components/uni-mask/mask.vue'
import validCode from '@/components/p-valid-code/p-valid-code.vue'
export default {
data() {
return {
...dictionary,
info: {},
status: null,
showDetail: false,
showCode: false,
maskShow: false,
nextBtn: false,
loading: false,
latitude: 39.909, //中心点
longitude: 116.39742,
covers: [{ //marker标记位置
id: 0,
latitude: 0,
longitude: 0,
// width:30,
// height:30,
iconPath: '../../static/img/location.png'
}],
missionNo: "",
isShow: '',
type: '',
id: '',
src: 'https://jlfiles.oss-cn-zhangjiakou.aliyuncs.com/jobslink-api/doc/%E7%94%B5%E5%AD%90%E5%90%88%E5%90%8C%E9%A2%84%E8%A7%88%E5%9B%BE%E7%89%87.png',
maxlength: 6
}
},
components: {uniMask,validCode},
onLoad: function(option) { //option为object类型会序列化上个页面传递的参数
this.$store.dispatch('setAutograph')
if (option.missionNo) {
this.missionNo = decodeURIComponent(option.missionNo);
}
if (option.isCan) {
this.isShow = option.isCan; //isShow为'0'则为我的任务、我的评价过来的,需要隐藏抢任务按钮
}
if (option.type) {
this.type = option.type; //type为1则为消息邀请过来的,需要设置消息已读;
}
if (option.id) {
this.id = option.id; //消息id
}
},
onShow: function() {
this.showDetail = true
this.getData();
},
onShareAppMessage(obj) {
return {
title: this.info.missionTitle,
path: `/pages/projectInfo/projectInfo?missionNo=${this.info.missionNo}`
}
},
methods: {
dateFormat,
getData: function() {
const self = this;
missionDetail(self.missionNo).then(res => {
self.info = res.data.data;
self.status = res.data.data.detailStatus;
self.latitude = self.info.lat;
self.longitude = self.info.lon;
self.covers[0].latitude = self.info.lat;
self.covers[0].longitude = self.info.lon;
self.showDetail = true;
if (self.type === 1) {
// 设置已读
setRead(self.id).then(res => {
self.$store.commit("SET_READ");
})
}
}, error => {
console.log(error);
});
},
submit: function() {
if (!this.$store.state.user.token) {
GoLogin()
return
}
if(this.loading) return
const auth = this.auth
const contractOn = this.info.contractOn
const sealOk = this.autograph && this.autograph.data && this.autograph.data.signSrcUrl
// if (sealOk) {
// console.log('直接抢任务')
// this.submitTask()
// } else
// if (!auth.realNameState || !auth.laborState || !auth.insureState) {
// this.goSign(0)
// } else if (!auth.bankCardState){
// this.goSign(1)
// } else
if (contractOn && !sealOk) {
this.goSign(2)
} else if (sealOk && contractOn){
this.nextBtn = true
this.lookMask()
} else {
this.submitTask()
}
},
// 查看合同
lookMask(){
this.maskShow = true
},
// 抢任务
submitTask(){
submit(this.missionNo).then(res => {
uni.hideLoading()
uni.showToast({
title: '操作成功',
icon: 'none'
});
this.status = null;
this.loading = false
}, error => {
this.loading = false
});
},
// 步骤
goSign(active){
uni.navigateTo({
url: `/pages/projectInfo/signContract?active=${active}`
})
},
// 关闭弹窗
close(){
this.maskShow = false
},
// 合同下一步
next(){
this.maskShow = false
this.showDetail = false
this.showCode = true
},
// 输入签名密码
getInpCode(password){
uni.showLoading({
title:"请求中..."
})
this.loading = true
var obj = {
pass: password
}
checkPass(obj).then(res => {
this.submitTask()
this.closeShowCode()
}).catch(err => {
this.loading = false
})
},
// 关闭签名密码弹窗
closeShowCode(){
this.showCode = false
this.showDetail = true
},
// 忘记密码
forget(){
uni.navigateTo({
url: `/pageMy/setUserBase/seal/forget?forget=true`
})
}
},
computed: {
...mapGetters(['auth', 'autograph']),
skillNames() {
if (this.info.skillNames) {
return this.info.skillNames.split(',')
}
}
}
}
</script>
<style lang="scss">
.codeSealBox{
padding: 285rpx 72rpx 0 72rpx;
.closeCode{
position: absolute;
right: 36rpx;
top: 120rpx;
color: #1B66FF;
transform: rotate(45deg);
font-size: 40px;
}
.title{
display: flex;
align-items: center;
}
.name{
height: 46rpx;
font-size: 46rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #333333;
line-height: 46rpx;
margin-right: 28rpx;
}
.tip{
height: 38rpx;
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #999999;
line-height: 38rpx;
}
.forget{
height: 38rpx;
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #5AA0FA;
line-height: 38rpx;
text-align: right;
}
}
.contractMask{
background-color: #FFFFFF;
margin: 30rpx;
position: relative;
border-radius: 4px;
height: 96%;
overflow: auto;
.close{
width: 23px;
height: 23px;
color: #1B66FF;
position: fixed;
right: 60rpx;
top: 60rpx;
transform: rotate(45deg);
font-size: 40px;
}
.down{
position:fixed;
bottom: 30px;
left:14%;
width: 545rpx;
height: 90rpx;
line-height: 90rpx;
text-align: center;
background: #1B66FF;
font-size: 36rpx;
font-weight: 400;
color: #FFFFFF;
}
}
.lookContract{
width: 30%;
margin-right: 30rpx;
}
.flexbtn{
flex:1;
}
.bottombtn {
background-color: #1B66FF;
color: #fff;
text-align: center;
border-radius: 10rpx;
font-family: PingFangSC-Medium;
font-size: 32rpx;
height: 90rpx;
line-height: 90rpx;
}
.btn {
background-color: #fefefe;
width: 690rpx;
padding: 30rpx;
padding-bottom: 80rpx;
position: fixed;
bottom: 0;
left: 0;
display:flex;
}
.disabledBtn {
background-color: #c8c9cc;
}
.map {
width: 100%;
height: 350rpx;
margin-top: 30rpx;
}
.askList {
font-family: PingFangSC-Regular;
font-size: 24rpx;
color: #666666;
background-color: #f6f6f6;
padding: 5rpx 15rpx;
margin-right: 10rpx;
margin-top: 15rpx;
}
.ask {
overflow: hidden;
width: 100%;
display: flex;
align-items: center;
flex-wrap: wrap;
justify-content: flex-start;
margin: 20rpx 0;
}
.proint {
margin-top: 30rpx;
font-size: 30rpx !important;
}
.proneed {
font-size: 32rpx !important;
}
.fee {
font-family: PingFangSC-Medium;
font-size: 32rpx;
color: #F46161;
margin-top: 30rpx;
}
.protype {
width: 50%;
}
.prolist {
font-family: PingFangSC-Regular;
font-size: 28rpx;
color: #666666;
display: flex;
align-items: center;
justify-content: space-between;
text-align: left;
padding: 5rpx 0;
}
.proname {
font-weight: bold;
font-family: PingFangSC-Medium;
font-size: 40rpx;
color: #333333;
width: 90%;
overflow: hidden;
padding-bottom: 20rpx;
}
.head {
padding: 30rpx;
background: #fefefe;
border-bottom: 20rpx solid #f6f6f6;
}
.description {
word-break: break-all;
white-space: pre-line;
}
</style>

View File

@@ -0,0 +1,90 @@
<template>
<view>
<view class="tips">为了更方便的为您服务请先完善认证信息</view>
<!--<step-bar :stepList="stepList" :active="active"></step-bar>-->
<first v-if="active === '0' || active === 0" ref="first" @firstSubmit="backSubmit"></first>
<second v-if="active === '1' || active === 1" ref="second" @secondSubmit="backSubmit" :stepLength="stepLength"></second>
<three v-if="active === '2' || active === 2"></three>
<view class="backLogin" @click="logout">
退出登录
</view>
</view>
</template>
<script>
import stepBar from '@/components/step-bar/index.vue'
import first from './step/first.vue'
import second from './step/second.vue'
import three from './step/three.vue'
export default{
data() {
return {
stepList: ['实名认证','银行卡认证'],
active: 0,
stepLength: 2
}
},
onLoad(options){
if (Number(options.active) === 2) {
this.stepList.push('个人签名')
this.stepLength = 3
}
this.active = options.active
},
components: {stepBar,first, second, three},
methods: {
logout() {
this.$store.dispatch('LogOut').then(() => {
uni.reLaunch({
url: '/pages/login/login'
})
this.$store.dispatch('clearAuthState')
this.$store.dispatch('endRefreshNewsTimer')
})
},
backSubmit(){
this.sign()
},
sign(){
this.loading = false
if (Number(this.active)+1 === this.stepList.length) {
if (this.stepList.length === 2) {
uni.switchTab({
url: '/pages/index/index'
})
} else if (this.stepList.length === 3) {
uni.navigateBack({
delta: 1
})
}
} else {
this.active++
}
}
}
}
</script>
<style>
page{
background-color: #FFFFFF;
}
.tips{
font-size: 28rpx;
font-weight: 400;
color: #999999;
line-height: 28rpx;
margin: 45rpx 0 50rpx 30rpx;
}
.backLogin{
width: 128rpx;
height: 45rpx;
font-size: 32rpx;
font-weight: 400;
color: #1C66FF;
line-height: 45rpx;
position: absolute;
bottom: 100rpx;
left: 40%;
}
</style>

View File

@@ -0,0 +1,358 @@
<template>
<view>
<!--<view style="height: 70rpx;"></view>-->
<view class="list border" style="padding-right: 32rpx;">
<view class="name">
姓名
</view>
<text v-if="auth.realNameState" style="color: #1B66FF;">{{auth.authInfo.realName}}</text>
<input v-else type="text" :value="name" placeholder="请输入" @input="setName" placeholder-style="color:#cccccc;" />
</view>
<view class="border" style="padding-right: 32rpx;">
<view class="list">
<view class="name">
身份证号
</view>
<text v-if="auth.realNameState" style="color: #1B66FF;">{{idNumberFilter(auth.authInfo.idNumber)}}</text>
<input v-else type="idcard" :value="card" placeholder="请输入" @input="setCard" style="text-transform:uppercase"
placeholder-style="color:#cccccc;" />
</view>
<view v-if="error" class="error">身份证号格式不正确</view>
</view>
<view class="list border">
<view class="listLeft">
开户银行
</view>
<view v-if="auth.bankCardState" class="listRight" style="margin-right:32rpx;">
{{auth.authInfo.bankName}}
</view>
<view v-else class="listRight" @click="goBankList">
{{bankName}}
<image src="@/static/img/right.svg" mode=""></image>
</view>
</view>
<view class="list border">
<view class="name">
银行卡号
</view>
<text v-if="auth.bankCardState" style="color: #1B66FF;">{{auth.authInfo.cardNumber}}</text>
<input v-else type="number" v-model="cardNumber" placeholder="请输入银行卡号" placeholder-style="color:#cccccc;" @input="blur" />
</view>
<picker @change="bindPickerChange" :value="index" :range="laborType" class="border">
<view class="list">
<view class="listLeft">
<view class="listTitle">身份信息</view>
</view>
<view class="listRight">
<view class="rightContent nochoose">
<view v-if="auth.laborState" class="uni-input">{{ laborType[0] }}</view>
<view v-else class="uni-input">请选择</view>
</view>
<image src="@/static/img/right.svg" mode=""></image>
</view>
</view>
</picker>
<picker @change="bindPickerChangeBao" :value="indexbao" :range="insureType" class="border">
<view class="list">
<view class="listLeft">
<view class="listTitle">社保信息</view>
</view>
<view class="listRight">
<view class="rightContent nochoose">
<view v-if="auth.insureState" class="uni-input">{{ insureType[indexbao] }}</view>
<view v-else class="uni-input">请选择</view>
</view>
<image src="@/static/img/right.svg" mode=""></image>
</view>
</view>
</picker>
<view class="btn">
<view v-if="auth.realNameState && auth.bankCardState" @click="next" class="bottombtn">
完成
</view>
<view v-if="!loading && !status && !auth.bankCardState" class="bottombtn nocheck">
完成
</view>
<view v-if="!loading && status && !auth.bankCardState" @click="next" class="bottombtn">
完成
</view>
<view v-if="loading" class="bottombtn nocheck">
提交中
</view>
</view>
</view>
</template>
<script>
import textdata from '@/common/textdata.js'
import {
mapGetters
} from 'vuex'
import {
idNumberFilter
} from '@/untils/format.js'
import {
check18IdCardNo,
validatenull
} from '@/untils/validate.js'
import {
getStore
} from '@/untils/store.js'
import {
newCertification,findAuth
} from '@/api/auth.js'
export default {
data() {
return {
laborType: textdata.laborType,
insureType: textdata.insureType,
name: '',
card: '',
error: false,
loading: false,
index: 0,
bankName: "选择银行",
cardNumber: "",
bankId: "",
clickable: false,
def: true, //银行卡是否为默认
defCount: 5, //默认每日允许认证次数
realCount:0,//已经认证的次数
}
},
mounted() {
const realName = getStore({
name: 'realName'
})
const bankCard = getStore({
name: 'bankCard'
})
if (bankCard && bankCard.bankName) {
this.bankName = bankCard.bankName
this.bankId = bankCard.bankId
this.cardNumber = bankCard.cardNumber
}
if (realName && realName.name) {
this.name = realName.name
this.card = realName.card
}
},
methods: {
idNumberFilter,
next() {
var auth = this.auth
console.log(auth.realNameState,auth.laborState , auth.insureState)
if (auth.realNameState && auth.laborState && auth.insureState && auth.bankCardState) {
this.$emit('firstSubmit')
} else {
this.submit()
}
},
setName: function(e) {
this.name = e.detail.value;
this.setFirstObj()
},
setCard: function(e) {
this.card = e.detail.value.toUpperCase();
this.error = !check18IdCardNo(this.card)
this.setFirstObj()
return e.detail.value.toUpperCase()
},
bindPickerChange: function(e) {
uni.showLoading()
this.$store.dispatch('authLabor').then(resp => {
this.index = e.target.value;
uni.hideLoading()
}).catch(() => {
uni.hideLoading()
})
},
bindPickerChangeBao: function(e) {
uni.showLoading()
this.$store.dispatch('authInsure', e.target.value * 1 + 1).then(resp => {
uni.hideLoading()
}).catch(() => {
uni.hideLoading()
})
},
setFirstObj() {
var obj = {
name: this.name,
card: this.card
}
this.$store.dispatch('setRealName', obj)
},
submit() {
findAuth().then(res=>{
let count = res.data.data.authCount; //每次点“提交”都先查询已经认证了几次
let diffCount = this.defCount - count; //剩余认证机会
this.loading = true;
if (count <= this.defCount) {
let name=this.auth.realNameState?this.auth.authInfo.realName:this.name;
let card=this.auth.realNameState?this.auth.authInfo.idNumber:this.card;
newCertification(this.indexbao + 1, name, card, this.cardNumber, this.bankId, this.def ? 1 : 0, this.bankName)
.then( //认证成功则跳转到首页面
res => {
uni.showToast({
title: res.data.msg,
icon: 'none'
})
this.$store.commit('SET_AUTH_REALNAME', true)
this.$store.dispatch('setRealName', {})
this.$store.commit('SET_AUTH_BANKCARD', true)
this.loading = false
uni.switchTab({
url: '/pages/index/index'
})
}).catch((err) => { //认证失败会提示还有几次认证机会
if (count > 1 && count <= 5) {
//uni.hideToast();
setTimeout(() => {
uni.showToast({
title: `今日已认证${count}次,还有${diffCount}次认证机会`,
icon: 'none',
duration: 3000
})
}, 1000)
}
this.loading = false;
})
} else {
if (count >= this.defCount) {
uni.showToast({
title: `今日已认证${this.defCount}次,请明日再来认证`,
icon: 'none',
duration: 3000
})
this.loading = false;
}
}
})
},
goBankList: function() {
uni.$once('icCardSetBank', (data) => {
this.bankId = data.id;
this.bankName = data.name;
this.setBankName()
})
uni.navigateTo({
url: '/pages/bankList/bankList'
})
},
setBankName() {
const obj = {
bankName: this.bankName,
bankId: this.bankId,
cardNumber: this.cardNumber
}
this.$store.dispatch('setBankCard', obj)
},
blur() {
this.setBankName();
}
},
computed: {
...mapGetters(['auth', 'authInfo']),
indexbao() {
if (this.auth.insureState) {
return this.authInfo.bakValue - 1
} else {
return 0
}
},
status() {
if (this.auth.authInfo.realName && this.auth.authInfo.idNumber) {
if (!this.cardNumber || !this.bankId || !this.auth.laborState || !this.auth.insureState) {
return false
} else {
return true
}
} else {
if (!this.name || !this.card || !this.cardNumber || !this.bankId || !this.auth.laborState || !this.auth.insureState) {
return false
} else {
return true
}
}
}
}
}
</script>
<style scoped>
.nocheck {
opacity: 0.3;
}
.bottombtn {
background-color: #1B66FF;
color: #fff;
text-align: center;
border-radius: 10rpx;
font-family: PingFangSC-Medium;
font-size: 32rpx;
height: 90rpx;
line-height: 90rpx;
}
.btn {
background-color: #fefefe;
padding: 70rpx 80rpx;
}
.error {
font-family: PingFangSC-Regular;
font-size: 24rpx;
color: red;
position: absolute;
right: 15px;
top: 14px;
height: 1px;
}
input {
text-align: right;
}
.border {
border-bottom: 1px solid #DDDDDD;
height: 88rpx;
line-height: 88rpx;
position: relative;
margin: 0 30rpx;
}
.listRight {
display: flex;
align-items: center;
justify-content: space-between;
font-family: PingFangSC-Regular;
font-size: 28rpx;
color: #999999;
}
.listRight image {
width: 19rpx;
height: 32rpx;
margin-left: 15rpx;
}
.list .name {
width: 200rpx;
}
.list {
display: flex;
align-items: center;
justify-content: space-between;
font-family: PingFangSC-Regular;
font-size: 32rpx;
color: #333333;
}
</style>

View File

@@ -0,0 +1,224 @@
<template>
<view style="margin-top: 70rpx;">
<view class="list">
<view class="listName">
开户银行
</view>
<view v-if="auth.bankCardState" class="listContent" style="margin-right:32rpx;">
{{auth.authInfo.bankName}}
</view>
<view v-else class="listContent" @click="goBankList">
{{bankName}}
<image src="@/static/img/right.svg" mode=""></image>
</view>
</view>
<view class="list">
<view class="listName">
银行卡号
</view>
<text v-if="auth.bankCardState" style="color: #999999;font-size: 14px;margin-right:32rpx;">{{auth.authInfo.cardNumber}}</text>
<input v-else type="number" v-model="cardNumber" placeholder="请输入银行卡号" placeholder-style="color:#cccccc;" @input="blur"/>
</view>
<view class="cardTips">
此银行卡信息仅作为发放工资使用银行卡持卡人信息与基本信息一致
</view>
<view v-if="stepLength === 2" class="btn">
<view v-if="auth.bankCardState" @click="next" class="bottombtn">
完成
</view>
<view v-if="!loading && !status && !auth.bankCardState" class="bottombtn nocheck">
完成
</view>
<view v-if="!loading && status && !auth.bankCardState" @click="next" class="bottombtn">
完成
</view>
<view v-if="loading" class="bottombtn nocheck">
提交中
</view>
</view>
<view v-if="stepLength === 3" class="btn">
<view v-if="auth.bankCardState" @click="next" class="bottombtn">
下一步
</view>
<view v-if="!loading && !status && !auth.bankCardState" class="bottombtn nocheck">
下一步
</view>
<view v-if="!loading && status && !auth.bankCardState" @click="next" class="bottombtn">
下一步
</view>
<view v-if="loading" class="bottombtn nocheck">
提交中
</view>
</view>
</view>
</template>
<script>
import {bank} from '@/api/auth.js'
import {mapGetters} from 'vuex'
import {getStore} from '@/untils/store.js'
export default{
data () {
return {
loading: false,
edit: false,
def: true,
bankId: '',
bankName: '选择银行',
cardNumber: '',
}
},
props:{
stepLength: {
type: Number,
default: 2
}
},
mounted(){
const bankCard = getStore({
name: 'bankCard'
})
if (bankCard && bankCard.bankName) {
this.bankName = bankCard.bankName
this.bankId = bankCard.bankId
this.cardNumber = bankCard.cardNumber
}
},
methods: {
next(){
var auth = this.auth
if (auth.bankCardState){
this.$emit('secondSubmit')
}else {
this.submit()
}
},
goBankList: function() {
uni.$once('icCardSetBank', (data) => {
this.bankId = data.id;
this.bankName = data.name;
this.setBankName()
})
uni.navigateTo({
url: '/pages/bankList/bankList'
})
},
submit() {
this.loading = true
bank(this.bankName, this.auth.authInfo.realName, this.cardNumber, this.def ? 1 : 0).then(resp => {
uni.showToast({
title: resp.data.msg,
icon: 'none'
});
this.loading = false
this.$store.commit('SET_AUTH_BANKCARD', true)
this.$emit('secondSubmit')
}).catch(err => {
this.loading = false
// this.$emit('secondSubmit',false)
})
},
blur(){
this.setBankName()
},
setBankName(){
const obj = {
bankName: this.bankName,
bankId: this.bankId,
cardNumber: this.cardNumber
}
this.$store.dispatch('setBankCard', obj)
}
},
computed: {
...mapGetters(['auth']),
status(){
if (!this.cardNumber || !this.bankName) {
return false
} else {
return true
}
}
}
}
</script>
<style>
.cardTips{
width: 590rpx;
height: 68rpx;
font-size: 24rpx;
font-weight: 400;
color: #999999;
line-height: 34rpx;
margin:71rpx 0 0 71rpx;
}
.nocheck {
opacity: 0.3;
}
.bottombtn {
background-color: #1B66FF;
color: #fff;
text-align: center;
border-radius: 10rpx;
font-family: PingFangSC-Medium;
font-size: 32rpx;
height: 90rpx;
line-height: 90rpx;
}
.btn {
background-color: #fefefe;
padding: 70rpx 80rpx;
}
.list switch {
margin-left: auto;
}
.nocheck {
opacity: 0.3;
}
.listName {
font-family: PingFangSC-Regular;
font-size: 32rpx;
color: #333333;
width: 200rpx;
}
.listContent image {
width: 19rpx;
height: 32rpx;
margin-left: 15rpx;
}
.listContent {
display: flex;
align-items: center;
justify-content: center;
font-family: PingFangSC-Regular;
font-size: 28rpx;
color: #999999;
margin-left: auto;
}
.list input,
.list text {
margin-left: auto;
text-align: right;
}
.list input{
flex:1;
}
.list {
display: flex;
align-items: center;
justify-content: flex-start;
padding: 30rpx 0;
padding-left: 0;
border-bottom: 1rpx solid #f2f2f2;
margin: 0 15px;
}
</style>

View File

@@ -0,0 +1,174 @@
<template>
<view>
<view class="sealBox">
<view style="height: 70rpx;"></view>
<view class="name">签名</view>
<view v-if="src" class="sealContent">
<image class="img" mode="aspectFit" :src="src"></image>
</view>
<view v-else class="sealContent" @click="go">
<view class="contentFont">点击输入手写签名</view>
</view>
<view class="list" v-if="src">
<view class="listLeft">
<view class="listTitle">签名密码</view>
</view>
<view class="listRight">
<view class="rightContent nochoose">
<view v-if="src" class="uni-input">已设置</view>
<view v-else class="uni-input">未设置</view>
</view>
<image src="@/static/img/right.svg" mode=""></image>
</view>
</view>
</view>
<view v-if="!src" class="sealAgreement">
<checkbox :checked="status" @click="checkClick"/>
<view>我已阅读并同意</view>
<view class="agreement" @click="goAgreement('/pages/user/sealAgreement')">申请证书协议</view>
</view>
<view class="btn">
<view v-if="src" @click="next" class="bottombtn">完成</view>
<view v-if="!src" class="bottombtn nocheck">完成</view>
</view>
</view>
</template>
<script>
import {mapGetters} from 'vuex'
export default {
data() {
return {
status:false
}
},
mounted() {
this.$store.dispatch('setAutograph')
},
methods: {
goAgreement (url) {
uni.navigateTo({
url
})
},
checkClick(){
this.status = !this.status
},
next () {
uni.navigateBack()
// uni.switchTab({
// url: '/pages/index/index'
// })
},
go(url){
if (!this.status){
uni.showToast({
title: '请先阅读并同意《申请证书协议》',
icon: 'none'
})
return
}
uni.navigateTo({
url: `/pageMy/setUserBase/seal/sealCanvas?path=/pageMy/setUserBase/seal/sealCanvas`
})
},
getInpCode: function(e) {
console.log(e)
}
},
computed: {
...mapGetters(['autograph']),
src(){
if (this.autograph.data && this.autograph.data.signSrcUrl){
return this.autograph.data.signSrcUrl
}
}
}
}
</script>
<style lang="scss">
.sealAgreement{
display: flex;
align-items: center;
margin: 30rpx;
font-size: 32rpx;
.agreement{
color: #007AFF;
}
/deep/ .uni-checkbox-input{
border-radius: 22px!important;
}
}
.nocheck {
opacity: 0.3;
}
.bottombtn {
background-color: #1B66FF;
color: #fff;
text-align: center;
border-radius: 10rpx;
font-family: PingFangSC-Medium;
font-size: 32rpx;
height: 90rpx;
line-height: 90rpx;
}
.btn {
background-color: #fefefe;
padding: 70rpx 80rpx;
}
.sealBox{
background-color: #FFFFFF;
padding: 0 15px 0 15px;
.name{
font-size: 32rpx;
font-weight: 400;
color: #333333;
line-height: 45rpx;
}
.listRight {
display: flex;
align-items: center;
justify-content: space-between;
font-family: PingFangSC-Regular;
font-size: 28rpx;
color: #999999;
}
.listRight image {
width: 40rpx;
height: 40rpx;
margin-left: 15rpx;
}
.list {
display: flex;
align-items: center;
justify-content: space-between;
font-family: PingFangSC-Regular;
font-size: 32rpx;
color: #333333;
height: 88rpx;
}
.sealContent{
background: #F6F6F6;
padding: 16rpx;
margin-top: 14rpx;
position:relative;
.img{
width: 100%;
height: 312rpx;
background-color: #FFFFFF;
}
.contentFont{
height: 312rpx;
line-height: 312rpx;
font-size: 30rpx;
color: #999999;
background: #FFFFFF;
text-align: center;
}
}
}
</style>