<template>
<el-form :model="form" :rules="rules" ref="form">
<el-row>
<el-col :span="12">
<el-form-item label="性别" prop="FSEX">
<el-radio-group v-model="form.FSEX">
<el-radio :label="1">男</el-radio>
<el-radio :label="0">女</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="出生年月" prop="FBIRTHDAY">
<el-date-picker format="yyyy-MM-dd" type="date" v-model="form.FBIRTHDAY" style="width: 100%;"></el-date-picker>
</el-form-item>
<el-form-item label="手机号码" prop="FMBPHONHE">
<el-input v-model="form.FMBPHONHE"></el-input>
</el-form-item>
<el-form-item label="邮箱" prop="FEMAIL">
<el-input v-model="form.FEMAIL"></el-input>
</el-form-item>
<el-form-item label="QQ" prop="FQQ">
<el-input v-model="form.FQQ"></el-input>
</el-form-item>
<el-form-item label="微信" prop="FWEIXIN">
<el-input v-model="form.FWEIXIN"></el-input>
</el-form-item>
<el-form-item label="身份证号" prop="FUSERSFZ">
<el-input v-model="form.FUSERSFZ"></el-input>
</el-form-item>
<el-form-item label="地址" prop="FADDRESS">
<el-input type="textarea" v-model="form.FADDRESS"></el-input>
</el-form-item>
</el-col>
<el-col :span="12" style="padding-left: 20px;text-align:center;">
<el-form-item label="用户头像" prop="FUSERPHOTO">
<el-upload
class="avatar-uploader"
:http-request="uploadUserPhoto"
:show-file-list="false">
<div v-if="userPhotoUrl">
<img :src="userPhotoUrl" class="avatar">
<span ref="showActions" class="el-upload-list__item-actions">
<span
class="el-upload-list__item-preview"
@click.stop="handlePictureCardPreview(file)"
>
<i class="el-icon-zoom-in"></i>
</span>
<span
v-if="!download"
class="el-upload-list__item-delete"
@click.stop="handleDownload(file)"
>
<i class="el-icon-download"></i>
</span>
<span
v-if="!disabled"
class="el-upload-list__item-delete"
@click.stop="handleRemove(file)"
>
<i class="el-icon-delete"></i>
</span>
</span>
</div>
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
<el-form-item label="身份证正面" prop="FUSERSFZPIC1">
<el-upload
class="avatar-uploader"
:http-request="uploadSfzPic1"
:show-file-list="false">
<div v-if="sfzPic1Url">
<img :src="sfzPic1Url" class="avatar">
<span ref="showActions" class="el-upload-list__item-actions">
<span
class="el-upload-list__item-preview"
@click.stop="handlePictureCardPreview(file)"
>
<i class="el-icon-zoom-in"></i>
</span>
<span
v-if="!download"
class="el-upload-list__item-delete"
@click.stop="handleDownload(file)"
>
<i class="el-icon-download"></i>
</span>
<span
v-if="!disabled"
class="el-upload-list__item-delete"
@click.stop="handleRemove(file)"
>
<i class="el-icon-delete"></i>
</span>
</span>
</div>
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
<el-form-item label="身份证反面" prop="FUSERSFZPIC2">
<el-upload
class="avatar-uploader"
:http-request="uploadSfzPic2"
:show-file-list="false">
<div v-if="sfzPic2Url">
<img :src="sfzPic2Url" class="avatar">
<span ref="showActions" class="el-upload-list__item-actions">
<span
class="el-upload-list__item-preview"
@click.stop="handlePictureCardPreview(file)"
>
<i class="el-icon-zoom-in"></i>
</span>
<span
v-if="!download"
class="el-upload-list__item-delete"
@click.stop="handleDownload(file)"
>
<i class="el-icon-download"></i>
</span>
<span
v-if="!disabled"
class="el-upload-list__item-delete"
@click.stop="handleRemove(file)"
>
<i class="el-icon-delete"></i>
</span>
</span>
</div>
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
</el-col>
</el-row>
<el-form-item style="text-align: center;">
<el-button type="primary" @click="submitForm('form')">{{ $t("hivuiMain_des_save")}}</el-button>
<el-button @click="resetForm('form')">{{ $t("hivuiMain_des_cancel")}}</el-button>
</el-form-item>
</el-form>
</template>
<script>
import { update, upload } from '@main/api/user.js'
import { getToken } from '@main/utils/auth'
export default {
data(){
return {
form:{
FSEX: "",
FBIRTHDAY: "",
FMBPHONHE: "",
FEMAIL: "",
FQQ: "",
FWEIXIN: "",
FUSERSFZ: "",
FADDRESS: [],
FUSERPHOTO: '',
FUSERSFZPIC1: '',
FUSERSFZPIC2: '',
},
userPhotoUrl: '',
sfzPic1Url: '',
sfzPic2Url: '',
rules: {
FMBPHONHE: [
{
validator: this.isPhone,
trigger: 'blur'
}
],
FEMAIL: [
{
validator: this.isEmail,
trigger: 'blur'
}
],
FUSERSFZ: [
{
validator: this.isIdCard,
trigger: 'blur'
}
],
}
}
},
mounted(){
debugger
},
methods: {
uploadUserPhoto(param){
this.handleUpload(param, 'userPhoto')
},
uploadSfzPic1(param){
this.handleUpload(param, 'sfzPic1')
},
uploadSfzPic2(param){
this.handleUpload(param, 'sfzPic2')
},
/* 手动上传附件 */
handleUpload(param, type) {
let formData = new FormData();
formData.append("files", param.file);
let _this = this
upload(formData).then(res => {
if(type == 'userPhoto'){
let path = res.dataPack[0].nname;
_this.form.FUSERPHOTO = path
_this.userPhotoUrl = _this._getImageUrl(path);
}else if(type == 'sfzPic1'){
let path = res.dataPack[0].nname;
_this.form.FUSERSFZPIC1 = path
_this.sfzPic1Url = _this._getImageUrl(path);
}else if(type == 'sfzPic2'){
let path = res.dataPack[0].nname;
_this.form.FUSERSFZPIC2 = path
_this.sfzPic2Url = _this._getImageUrl(path);
}
});
},
_getImageUrl(path) {
let token = getToken();
if (typeof path == "string") {
path = path.replace(/\\/g, "/");
}
return `${this.$HI.review}?relativePath=${path}&access_token=${token}`;
},
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
let form = {...this.form}
if(form.FBIRTHDAY && typeof(form.FBIRTHDAY) == 'object'){
form.FBIRTHDAY = this.formatDate(form.FBIRTHDAY)
}
let data = {...form}
data.$old = {...form}
data.$m = '/platf/user-info/entity/SysUserInfoBizEntity.xml'
update(data).then(res =>{
this.$message({
type: 'success',
message: '修改成功'
})
})
} else {
console.log('error submit!!');
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
},
isPhone(rule, value, callback){
const reg = /^[1][3,4,5,7,8,9][0-9]{9}$/;
if (value == '' || value == undefined || value == null) {
callback();
} else {
if ((!reg.test(value)) && value != '') {
callback(new Error(this.$t("hivuiBirt_validate_FMBPHONE") || '电话号码格式有误'));
} else {
callback();
}
}
},
isEmail(rule, value, callback){
const reg = /^([a-zA-Z0-9]+[-_\.]?)+@[a-zA-Z0-9]+\.[a-z]+$/;
if (value == '' || value == undefined || value == null) {
callback();
} else {
if (!reg.test(value)) {
callback(new Error(this.$t("hivuiBirt_validate_FEMAIL") || '邮箱地址格式有误'));
} else {
callback();
}
}
},
isIdCard(rule, value, callback) {
const reg = /^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
if (value == '' || value == undefined || value == null) {
callback();
} else {
if (!reg.test(value)) {
callback(new Error(this.$t("hivuiBirt_validate_FIDCARD") || '身份证号格式有误'));
} else {
callback();
}
}
},
formatDate(date) {
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const day = date.getDate().toString().padStart(2, '0');
return `${year}-${month}-${day}`;
}
}
}
</script>
<style lang="less">
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload:hover {
border-color: #409eff;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 178px;
height: 178px;
line-height: 178px;
text-align: center;
}
.avatar {
width: 178px;
height: 178px;
display: block;
}
.el-upload-list__item-actions {
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
cursor: default;
text-align: center;
color: #fff;
opacity: 0;
font-size: 20px;
background-color: rgba(0, 0, 0, 0.5);
transition: opacity 0.3s;
display: flex;
align-items: center;
justify-content: center;
}
.showImg:hover {
.el-upload-list__item-actions {
opacity: 1;
}
}
.el-upload-list__item-delete {
display: block;
position: static;
font-size: inherit;
color: inherit;
.el-icon-delete {
font-family: element-icons !important;
speak: none;
font-style: normal;
font-weight: 400;
font-variant: normal;
text-transform: none;
line-height: 1;
vertical-align: baseline;
display: inline-block;
-webkit-font-smoothing: antialiased;
}
}
.el-upload-list__item-actions span + span {
margin-left: 15px;
}
.el-upload-list__item-name i:hover,.el-upload-list__item-name a:hover{
color: #409eff;
}
</style>