You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

298 lines
7.5 KiB

1 year ago
<template>
<view class="container">
1 year ago
<image class="cbg" :src="base.imgHost('common_bg.png')"></image>
1 year ago
<view class="wrap">
1 year ago
<u-form :model="form" :label-width="140" ref="uForm" :label-align="'left'" :error-type="['message']">
1 year ago
<u-form-item label="姓名" prop="username">
{{form.username}}
1 year ago
</u-form-item>
1 year ago
<u-form-item label="性别" prop="sex">
{{form.sex}}
</u-form-item>
1 year ago
<u-form-item label="联系方式" prop="mobile">
<u-input type="number" border placeholder="请输入联系方式" v-model="form.mobile" />
</u-form-item>
1 year ago
<u-form-item label="身份证号" prop="idcard">
1 year ago
<u-input type="idcard" border placeholder="请输入身份证号" v-model="form.idcard" />
1 year ago
</u-form-item>
<u-form-item label="出生日期" prop="birthday">
1 year ago
<u-input @click="dateShow=true" placeholder="请选择出生日期" v-model="form.birthday"
type="select" /></u-form-item>
1 year ago
</u-form-item>
<u-form-item label="邮箱" prop="email">
<u-input v-model="form.email" border placeholder="请输入邮箱" /></u-form-item>
<u-form-item label="公司名称" prop="company_name">
<u-input v-model="form.company_name" border placeholder="请输入公司名称" />
</u-form-item>
<u-form-item label="职务" prop="company_position">
<u-input border @click="showPosition = true" v-model="form.company_position" type="select"
placeholder="请选择职务" />
1 year ago
</u-form-item>
1 year ago
<u-form-item label="车牌" prop="plate">
<view style="display: flex;align-items: center;justify-content: space-between;">
<view v-if="plateList.length>0">
<view v-for="item in plateList">
{{item}}
<u-icon color="red" style="margin-left:20rpx" @click="delPlate(index)"
name="close"></u-icon>
</view>
</view>
<u-button size="mini" type="primary" v-if="plateList.length<2" @click="addPlate"></u-button>
1 year ago
</view>
1 year ago
1 year ago
</u-form-item>
</u-form>
<view class="form-btn">
<view @click="saveUser" type="primary">提交</view>
1 year ago
</view>
</view>
1 year ago
<u-picker @confirm="selectPosition" v-model="showPosition" :range="positionList" range-key="value"
mode="selector"></u-picker>
1 year ago
<view class="modal">
<u-popup v-model="showPark" mode="bottom">
<view class="modal-tip">绑定车牌号</view>
1 year ago
<view class="modal-content" style="height:400rpx">
1 year ago
<view>
1 year ago
<plate ref="plates" @listenPlateChange="plateChange" :defaultPlate="plateNumber" />
1 year ago
</view>
</view>
1 year ago
<view class="form-btn">
<view @click="saveUser('add')" type="primary">确定</view>
1 year ago
</view>
</u-popup>
</view>
</view>
</template>
<script>
import tabbar from '@/components/tabbar/tabbar.vue';
1 year ago
import {
plate
} from '@/components/plate/index.vue'
1 year ago
export default {
components: {
1 year ago
plate
1 year ago
},
data() {
return {
1 year ago
showPosition: false,
positionList: [],
1 year ago
form: {
1 year ago
},
1 year ago
plateList: [],
showPark: false,
plate1: '',
1 year ago
plateNumber: ['苏', 'E', '', '', '', '', ''],
rules: {
mobile: [{
required: true,
message: '请输入联系方式',
trigger: ['blur'],
}, {
validator: (rule, value, callback) => {
return this.$u.test.mobile(value);
},
message: '手机号码不正确',
trigger: ['blur'],
}],
1 year ago
idcard: [{
validator: (rule, value, callback) => {
console.log("value", value, this.base.isNull(value))
if (!this.base.isNull(value)) {
return this.$u.test.idCard(value);
} else {
return true
}
},
message: '身份证号不正确',
1 year ago
trigger: ['blur'],
1 year ago
}],
email: [{
1 year ago
validator: (rule, value, callback) => {
return this.$u.test.email(value);
},
message: '邮箱不正确',
trigger: ['blur'],
}],
}
1 year ago
}
},
1 year ago
onReady() {
this.$refs.uForm.setRules(this.rules);
},
1 year ago
onShow() {
this.getUserInfo()
},
onLoad() {
1 year ago
this.getPosition()
1 year ago
},
methods: {
1 year ago
selectPosition(e) {
this.form.company_position = this.positionList[e[0]]['value']
},
getPosition() {
this.$u.api.getparameter({
number: 'company_position'
}).then(res => {
this.positionList = res.detail
})
},
1 year ago
getUserInfo() {
this.$u.api.user().then(res => {
console.log("res", res)
1 year ago
// this.form = this.base.requestToForm(res.user, this.form)
1 year ago
this.form = this.base.deepCopy(res.user)
1 year ago
if (res.user.plate) {
this.plateList = res.user.plate.split(',')
this.plateList.map((item, index) => {
if (this.base.isNull(item)) {
this.plateList.splice(index, 1)
}
})
}
this.$u.vuex('vuex_user', res.user)
})
},
addPlate() {
if (this.plateList.length == 2) {
this.base.toast("每人最多只能添加两个车牌")
return
}
// this.plateList.push('')
this.showPark = true
1 year ago
},
delPlate(index) {
this.plateList.splice(index, 1)
this.saveUser('del')
1 year ago
},
changeMobile() {
1 year ago
},
plateChange(val) {
this.plate1 = val.join('')
1 year ago
},
saveUser(type) {
1 year ago
if (type == 'add') {
console.log("this.plate1", this.plate1)
if (this.base.isNull(this.plate1) || this.plate1.length < 7) {
this.base.toast("车牌号不正确")
return
}
if (this.plateList.indexOf(this.plate1) !== -1) {
this.base.toast("车牌号不能重复")
return
1 year ago
}
1 year ago
this.plateList.push(this.plate1)
this.form.plate = this.plateList.join(",")
1 year ago
}
if (type == 'del') {
this.form.plate = this.plateList.join(",")
1 year ago
}
console.log("plateList", this.plateList)
1 year ago
let that = this
this.$refs.uForm.validate(valid => {
if (valid) {
this.$u.api.saveUser(this.form).then(res => {
this.showPark = false
1 year ago
this.plate1 = ''
let toastTitle = "更新用户信息成功"
if (type === 'add') {
toastTitle = "新增车牌成功"
} else if (type === 'del') {
toastTitle = "删除车牌成功"
} else {
toastTitle = "更新用户信息成功"
1 year ago
}
1 year ago
this.$refs.plates.panelReset()
1 year ago
this.base.toast(toastTitle, 2000, function() {
1 year ago
if (type === 'add' || type === 'del') {
1 year ago
that.getUserInfo()
1 year ago
} else {
setTimeout(function() {
uni.switchTab({
url: '/pages/me/index'
})
}, 2000)
1 year ago
}
})
})
} else {
console.log('验证失败');
// this.base.toast("注册失败")
}
});
1 year ago
},
}
}
</script>
1 year ago
<style scoped lang="scss">
.container {
padding: 30rpx;
height: 100vh;
overflow: scroll;
.cbg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100vh;
}
.wrap {
background: #fff;
position: relative;
padding: 35rpx;
border-radius: 30rpx;
padding-top: 0;
}
.form-btn {
width: 100%;
position: relative;
padding: 60rpx 0;
1 year ago
1 year ago
&>view {
width: 70%;
text-align: center;
margin: 0 auto;
color: #fff;
background: linear-gradient(to right, #5e5fbc, #0d0398);
border-radius: 30rpx;
padding: 20rpx;
}
}
.modal {
::v-deep .u-drawer-bottom {
border-radius: 40rpx;
}
&-tip {
text-align: center;
padding: 30rpx;
font-size: 32rpx;
}
&-content {
// height: 400rpx;
padding: 0 30rpx;
}
}
}
1 year ago
</style>