7/30 限制前端输入字数
This commit is contained in:
@@ -24,7 +24,7 @@
|
||||
</div>
|
||||
<div class="userinfo_item">
|
||||
<div class="title_item">证件类型:</div>
|
||||
<span> 身份证 </span>
|
||||
<DictTag :options="com_id_card_type" :value="userInfo.idCardType"></DictTag>
|
||||
</div>
|
||||
<div class="userinfo_item">
|
||||
<div class="title_item">住户类型:</div>
|
||||
@@ -145,7 +145,7 @@ import { ResidentVO } from '@/api/system/residentReviewProcess/resident/type';
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { com_review } = toRefs<any>(proxy?.useDict('com_review'));
|
||||
const { com_sub_status } = toRefs<any>(proxy?.useDict('com_sub_status'));
|
||||
const { com_resident_relationship } = toRefs<any>(proxy?.useDict('com_resident_relationship'));
|
||||
const { com_resident_relationship, com_id_card_type } = toRefs<any>(proxy?.useDict('com_resident_relationship', 'com_id_card_type'));
|
||||
const { com_certification_status } = toRefs<any>(proxy?.useDict('com_certification_status'));
|
||||
|
||||
const userInfo = ref<ResidentVO>({
|
||||
@@ -155,6 +155,7 @@ const userInfo = ref<ResidentVO>({
|
||||
userId: null,
|
||||
nickName: '',
|
||||
unitNoId: '',
|
||||
idCardType: '0',
|
||||
'id': null,
|
||||
'name': '',
|
||||
'type': '0',
|
||||
|
||||
@@ -8,13 +8,13 @@
|
||||
<el-row>
|
||||
<el-col :span="11">
|
||||
<el-form-item label="楼栋房屋" prop="houseId">
|
||||
<el-cascader v-model="userHousepath" :options="treedata" @change="handleChange" />
|
||||
<el-cascader v-model="userHousePath" :options="treeData" @change="handleChange" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="2"></el-col>
|
||||
<el-col :span="11">
|
||||
<el-form-item label="住户姓名" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入住户姓名" />
|
||||
<el-input maxlength="15" show-word-limit v-model.trim="form.name" placeholder="请输入住户姓名" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -28,9 +28,26 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="2"></el-col>
|
||||
<el-col :span="11"> </el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="11">
|
||||
<el-form-item label="身份证号码" prop="idCard">
|
||||
<el-input v-model="form.idCard" placeholder="请输入证件号码" />
|
||||
<el-form-item label="证件类型" prop="idCardType">
|
||||
<el-select @change="handleChangeIdCardType" v-model="form.idCardType" placeholder="请选择证件">
|
||||
<el-option v-for="item in com_id_card_type" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="2"></el-col>
|
||||
<el-col :span="11">
|
||||
<el-form-item label="身份证号码" prop="idCard" v-if="form.idCardType === '0'">
|
||||
<el-input maxlength="20" v-model="form.idCard" placeholder="请输入证件号码" />
|
||||
</el-form-item>
|
||||
<el-form-item label="护照号码" prop="idCard" v-if="form.idCardType === '1'">
|
||||
<el-input maxlength="30" v-model="form.idCard" placeholder="请输入证件号码" />
|
||||
</el-form-item>
|
||||
<el-form-item label="港澳通行证号码" prop="idCard" v-if="form.idCardType === '2'">
|
||||
<el-input maxlength="20" v-model="form.idCard" placeholder="请输入证件号码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -62,7 +79,7 @@
|
||||
:on-success="handleAvatarSuccess"
|
||||
:on-exceed="handleExceed"
|
||||
:on-error="handleError"
|
||||
:before-upload="handleBeforUpload"
|
||||
:before-upload="handleBeforeUpload"
|
||||
:limit="1"
|
||||
>
|
||||
<img alt="身份证正面照" v-if="form.cardImageFront" :src="form.cardImageFront" class="avatar" />
|
||||
@@ -82,7 +99,7 @@
|
||||
:on-exceed="handleExceed2"
|
||||
:on-success="handleAvatar2Success"
|
||||
:on-error="handleError2"
|
||||
:before-upload="handleBeforUpload"
|
||||
:before-upload="handleBeforeUpload"
|
||||
>
|
||||
<img alt="身份证背面照" v-if="form.cardImageBack" :src="form.cardImageBack" class="avatar" />
|
||||
<el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
|
||||
@@ -92,7 +109,7 @@
|
||||
</el-row>
|
||||
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input type="textarea" :row="5" v-model.number="form.remark" placeholder="请输入备注" />
|
||||
<el-input type="textarea" maxlength="200" show-word-limit :row="5" v-model.trim="form.remark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
<el-form-item style="margin-top: 30px">
|
||||
<el-button type="primary" @click="submitForm">确定</el-button>
|
||||
@@ -106,9 +123,8 @@
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue';
|
||||
import PageHeader from '@/components/Pageheader/index.vue';
|
||||
import { getHousePathById } from '@/utils/house';
|
||||
import { ResidentForm } from '@/api/system/residentReviewProcess/resident/type';
|
||||
import { CascaderValue, UploadFiles, UploadInstance, UploadProps, UploadRawFile } from 'element-plus';
|
||||
import { CascaderValue, UploadInstance, UploadProps, UploadRawFile } from 'element-plus';
|
||||
import { genFileId } from 'element-plus';
|
||||
import { addResident, getResident, updateResident } from '@/api/system/residentReviewProcess/resident';
|
||||
import { validator } from '@/utils/Reg';
|
||||
@@ -120,7 +136,7 @@ const uploadUrl = import.meta.env.VITE_APP_BASE_API + '/resident/uploadImage';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { sys_user_sex } = toRefs<any>(proxy?.useDict('sys_user_sex'));
|
||||
const { com_resident_relationship } = toRefs<any>(proxy?.useDict('com_resident_relationship'));
|
||||
const { com_resident_relationship, com_id_card_type } = toRefs<any>(proxy?.useDict('com_resident_relationship', 'com_id_card_type'));
|
||||
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
@@ -134,21 +150,31 @@ const form = ref<ResidentForm>({
|
||||
ownerRelationship: '0', // 与业主关系
|
||||
phone: null, //手机号
|
||||
cardImageFront: '',
|
||||
idCardType: '0', // 证件类型
|
||||
cardImageBack: '',
|
||||
remark: '' //备注
|
||||
remark: '' //备注╬╬╬.╬╬╬╬╬
|
||||
});
|
||||
const userHousepath = ref<CascaderValue>([]);
|
||||
const userHousePath = ref<CascaderValue>([]);
|
||||
const rules = ref({
|
||||
houseId: [{ required: true, message: '请选择房屋', trigger: 'blur' }],
|
||||
name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
|
||||
gender: [{ required: true, message: '请选择性别', trigger: 'blur' }],
|
||||
cardImageFront: [{ required: true, message: '请上传身份证照片', trigger: 'blur' }],
|
||||
cardImageBack: [{ required: true, message: '请上传身份证照片', trigger: 'blur' }],
|
||||
idCardType: [{ required: true, message: '请选择证件类型', trigger: 'blur' }],
|
||||
idCard: [
|
||||
{ required: true, message: '请输入身份证号', trigger: 'blur' },
|
||||
{
|
||||
validator: (_, value) => validator(value, 'idCard'),
|
||||
message: '请输入正确的18位身份证号码',
|
||||
validator: (_: any, value: string | number, callback: (arg0?: Error) => void) => {
|
||||
if (form.value.idCardType === '0') {
|
||||
return validator(value, 'idCard') ? callback() : callback(new Error('请输入正确的18位身份证号码'));
|
||||
} else if (form.value.idCardType === '1') {
|
||||
return validator(value, 'passport') ? callback() : callback(new Error('请输入正确的护照号码'));
|
||||
} else if (form.value.idCardType === '2') {
|
||||
return validator(value, 'hongkongPassport') ? callback() : callback(new Error('请输入正确的港澳通行证号码'));
|
||||
}
|
||||
return callback();
|
||||
},
|
||||
required: true,
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
@@ -156,24 +182,29 @@ const rules = ref({
|
||||
phone: [
|
||||
{ required: true, message: '请输入手机号', trigger: 'blur' },
|
||||
{
|
||||
validator: (_, value) => validator(value, 'phone'),
|
||||
message: '请输入正确的手机号码',
|
||||
validator: (_: any, value: string | number, callback: (arg0?: Error) => void) => {
|
||||
return validator(value, 'phone') ? callback() : callback(new Error('请输入正确的手机号码'));
|
||||
},
|
||||
trigger: 'blur'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
const treedata = ref([]);
|
||||
// 切换证件类型
|
||||
function handleChangeIdCardType() {
|
||||
form.value.idCard = '';
|
||||
}
|
||||
// 总房屋 树状结构
|
||||
const treeData = ref([]);
|
||||
function getTree() {
|
||||
houseStore.getCurrentVilageTreeHouse().then((res) => {
|
||||
treedata.value = res;
|
||||
gettreedata();
|
||||
treeData.value = res;
|
||||
getTreeData();
|
||||
});
|
||||
}
|
||||
getTree();
|
||||
// !== 楼栋房屋 =============================================================================
|
||||
const userid = ref(null);
|
||||
function gettreedata() {
|
||||
function getTreeData() {
|
||||
// !== 编辑用户 =============================================================================
|
||||
if (route.query.id) {
|
||||
userid.value = route.query.id;
|
||||
@@ -181,13 +212,13 @@ function gettreedata() {
|
||||
form.value = {
|
||||
...res.data
|
||||
};
|
||||
userHousepath.value = [form.value.buildingId, form.value.unitNoId, form.value.houseId];
|
||||
userHousePath.value = [form.value.buildingId, form.value.unitNoId, form.value.houseId];
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function handleChange(val: CascaderValue) {
|
||||
userHousepath.value = val;
|
||||
userHousePath.value = val;
|
||||
form.value.buildingId = val[0];
|
||||
form.value.houseId = val[2];
|
||||
}
|
||||
@@ -196,12 +227,12 @@ function handleChange(val: CascaderValue) {
|
||||
// 上传文件成功
|
||||
const upload = ref<UploadInstance>();
|
||||
const upload2 = ref<UploadInstance>();
|
||||
const handleAvatarSuccess: UploadProps['onSuccess'] = (response, uploadFile) => {
|
||||
const handleAvatarSuccess: UploadProps['onSuccess'] = (response) => {
|
||||
if (response.data && response.data.url) {
|
||||
form.value.cardImageFront = response.data.url;
|
||||
}
|
||||
};
|
||||
const handleAvatar2Success: UploadProps['onSuccess'] = (response, uploadFile) => {
|
||||
const handleAvatar2Success: UploadProps['onSuccess'] = (response) => {
|
||||
if (response.code === 500 && response.msg == '不允许重复提交,请稍候再试') {
|
||||
ElMessage.error('上传频率过快,稍后再试');
|
||||
return;
|
||||
@@ -224,16 +255,12 @@ const handleExceed2: UploadProps['onExceed'] = (files) => {
|
||||
upload2.value!.handleStart(file);
|
||||
upload2.value?.submit();
|
||||
};
|
||||
const handleError: UploadProps['onError'] = (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
|
||||
console.log(error);
|
||||
};
|
||||
const handleError2: UploadProps['onError'] = (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
|
||||
console.log(error);
|
||||
};
|
||||
const blockedExts = ['.exe', '.bat', '.cmd', '.msi'];
|
||||
const handleBeforUpload = (uploadFile: UploadRawFile) => {
|
||||
const handleError: UploadProps['onError'] = () => {};
|
||||
const handleError2: UploadProps['onError'] = () => {};
|
||||
const blockedExits = ['.exe', '.bat', '.cmd', '.msi'];
|
||||
const handleBeforeUpload = (uploadFile: UploadRawFile) => {
|
||||
const ext = uploadFile.name.toLowerCase().slice(uploadFile.name.lastIndexOf('.'));
|
||||
if (blockedExts.includes(ext)) {
|
||||
if (blockedExits.includes(ext)) {
|
||||
ElMessage.warning(`禁止上传 ${ext} 文件`);
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user