|
@@ -2,14 +2,23 @@
|
|
<div class="second">
|
|
<div class="second">
|
|
<el-form ref="ruleFormRef" :model="form" :rules="rules" label-width="auto" label-position="top"
|
|
<el-form ref="ruleFormRef" :model="form" :rules="rules" label-width="auto" label-position="top"
|
|
style="max-width: 600px; margin: 0 auto;">
|
|
style="max-width: 600px; margin: 0 auto;">
|
|
- <el-form-item label="ID picture" required>
|
|
|
|
|
|
+ <el-form-item label="Document Type" prop="documentType">
|
|
|
|
+ <el-select v-model="form.documentType" placeholder="Please select" clearable>
|
|
|
|
+ <el-option label="IDCARD" value="0" />
|
|
|
|
+ <el-option label="PASSPORT" value="1" />
|
|
|
|
+ <el-option label="DRIVINGLICENCE" value="2" />
|
|
|
|
+ </el-select>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="Document Number" prop="documentNumber">
|
|
|
|
+ <el-input v-model="form.documentNumber" placeholder="Please enter" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="Front And Back Photos Of Identification Documents" required>
|
|
<el-col :span="11">
|
|
<el-col :span="11">
|
|
<el-form-item prop="frontSideDocument">
|
|
<el-form-item prop="frontSideDocument">
|
|
- <el-upload class="avatar-uploader" :action="action" :show-file-list="false"
|
|
|
|
- accept=".jpg,.jpeg,.png"
|
|
|
|
- :on-success="(response, uploadFile, uploadFiles) => { handleAvatarSuccess(response, uploadFile, uploadFiles, 'frontSideDocument') }"
|
|
|
|
- :before-upload="beforeAvatarUpload">
|
|
|
|
- <img v-if="form.frontSideDocument" :src="form.frontSideDocument" class="avatar" />
|
|
|
|
|
|
+ <el-upload class="avatar-uploader" :auto-upload="false" :show-file-list="false"
|
|
|
|
+ accept=".jpg,.jpeg,.png" :before-upload="beforeAvatarUpload"
|
|
|
|
+ :on-change="(file, fileList) => { handleChange(file, fileList, 'frontSideDocument') }">
|
|
|
|
+ <img v-if="fileObj.frontSideDocument" :src="fileObj.frontSideDocument" class="avatar" />
|
|
<el-icon v-else class="avatar-uploader-icon">
|
|
<el-icon v-else class="avatar-uploader-icon">
|
|
<UserFilled />
|
|
<UserFilled />
|
|
</el-icon>
|
|
</el-icon>
|
|
@@ -19,11 +28,10 @@
|
|
<el-col :span="2"></el-col>
|
|
<el-col :span="2"></el-col>
|
|
<el-col :span="11">
|
|
<el-col :span="11">
|
|
<el-form-item prop="backSideDocument">
|
|
<el-form-item prop="backSideDocument">
|
|
- <el-upload class="avatar-uploader" :action="action" :show-file-list="false"
|
|
|
|
- accept=".jpg,.jpeg,.png"
|
|
|
|
- :on-success="(response, uploadFile, uploadFiles) => { handleAvatarSuccess(response, uploadFile, uploadFiles, 'backSideDocument') }"
|
|
|
|
- :before-upload="beforeAvatarUpload">
|
|
|
|
- <img v-if="form.backSideDocument" :src="form.backSideDocument" class="avatar" />
|
|
|
|
|
|
+ <el-upload class="avatar-uploader" :show-file-list="false" accept=".jpg,.jpeg,.png"
|
|
|
|
+ :before-upload="beforeAvatarUpload" :auto-upload="false"
|
|
|
|
+ :on-change="(file, fileList) => { handleChange(file, fileList, 'backSideDocument') }">
|
|
|
|
+ <img v-if="fileObj.backSideDocument" :src="fileObj.backSideDocument" class="avatar" />
|
|
<el-icon v-else class="avatar-uploader-icon">
|
|
<el-icon v-else class="avatar-uploader-icon">
|
|
<UserFilled />
|
|
<UserFilled />
|
|
</el-icon>
|
|
</el-icon>
|
|
@@ -31,59 +39,53 @@
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item label="Customer photo" prop="customerPhoto">
|
|
|
|
|
|
+ <el-form-item label="Customer Photo" prop="customerPhoto">
|
|
<el-col :span="11">
|
|
<el-col :span="11">
|
|
- <el-upload class="avatar-uploader" :action="action" :show-file-list="false"
|
|
|
|
- accept=".jpg,.jpeg,.png"
|
|
|
|
- :on-success="(response, uploadFile, uploadFiles) => { handleAvatarSuccess(response, uploadFile, uploadFiles, 'customerPhoto') }"
|
|
|
|
- :before-upload="beforeAvatarUpload">
|
|
|
|
- <img v-if="form.customerPhoto" :src="form.customerPhoto" class="avatar" />
|
|
|
|
|
|
+ <el-upload class="avatar-uploader" :auto-upload="false" :show-file-list="false"
|
|
|
|
+ accept=".jpg,.jpeg,.png" :before-upload="beforeAvatarUpload"
|
|
|
|
+ :on-change="(file, fileList) => { handleChange(file, fileList, 'customerPhoto') }">
|
|
|
|
+ <img v-if="fileObj.customerPhoto" :src="fileObj.customerPhoto" class="avatar" />
|
|
<el-icon v-else class="avatar-uploader-icon">
|
|
<el-icon v-else class="avatar-uploader-icon">
|
|
<Avatar />
|
|
<Avatar />
|
|
</el-icon>
|
|
</el-icon>
|
|
</el-upload>
|
|
</el-upload>
|
|
</el-col>
|
|
</el-col>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item label="Customer id" prop="customerId">
|
|
|
|
- <el-input v-model="form.customerId" placeholder="Please enter" />
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="Document type" prop="documentType">
|
|
|
|
- <el-select v-model="form.documentType" placeholder="Please select" clearable>
|
|
|
|
- <el-option label="IDCARD" value="0" />
|
|
|
|
- <el-option label="PASSPORT" value="1" />
|
|
|
|
- <el-option label="DRIVINGLICENCE" value="2" />
|
|
|
|
- </el-select>
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="Document number" prop="documentNumber">
|
|
|
|
- <el-input v-model="form.documentNumber" placeholder="Please enter" />
|
|
|
|
- </el-form-item>
|
|
|
|
|
|
+
|
|
<el-form-item style="padding-top: 50px;">
|
|
<el-form-item style="padding-top: 50px;">
|
|
- <el-button type="primary" @click="handleSubmit" size="large"
|
|
|
|
- style="width: 60%; margin: 0 auto;">next</el-button>
|
|
|
|
|
|
+ <el-button type="primary" @click="handleSubmit" size="large" :loading="loading"
|
|
|
|
+ style="width: 60%; margin: 0 auto;">Next</el-button>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-form>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
<script setup>
|
|
-import { reactive, ref } from 'vue'
|
|
|
|
-import { useRouter } from 'vue-router'
|
|
|
|
|
|
+import { reactive, ref, defineProps, defineEmits } from 'vue'
|
|
import { submitAdvanced } from '@/api'
|
|
import { submitAdvanced } from '@/api'
|
|
import { UserFilled, Avatar } from '@element-plus/icons-vue'
|
|
import { UserFilled, Avatar } from '@element-plus/icons-vue'
|
|
import { ElMessage } from 'element-plus';
|
|
import { ElMessage } from 'element-plus';
|
|
|
|
|
|
-const $router = useRouter()
|
|
|
|
|
|
+const loading = ref(false)
|
|
|
|
|
|
-const action = ref('https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15')
|
|
|
|
|
|
+const emits = defineEmits(['updateCustomerId'])
|
|
|
|
+
|
|
|
|
+const props = defineProps({
|
|
|
|
+ customerId: String,
|
|
|
|
+})
|
|
|
|
|
|
const form = reactive({
|
|
const form = reactive({
|
|
frontSideDocument: '',
|
|
frontSideDocument: '',
|
|
backSideDocument: '',
|
|
backSideDocument: '',
|
|
customerPhoto: '',
|
|
customerPhoto: '',
|
|
- customerId: '',
|
|
|
|
documentType: '',
|
|
documentType: '',
|
|
documentNumber: ''
|
|
documentNumber: ''
|
|
})
|
|
})
|
|
|
|
+const fileObj = reactive({
|
|
|
|
+ frontSideDocument: '',
|
|
|
|
+ backSideDocument: '',
|
|
|
|
+ customerPhoto: ''
|
|
|
|
+})
|
|
|
|
|
|
const rules = reactive({
|
|
const rules = reactive({
|
|
frontSideDocument: [
|
|
frontSideDocument: [
|
|
@@ -95,9 +97,6 @@ const rules = reactive({
|
|
customerPhoto: [
|
|
customerPhoto: [
|
|
{ required: true, message: 'Please upload the Customer photo', trigger: 'blur' }
|
|
{ required: true, message: 'Please upload the Customer photo', trigger: 'blur' }
|
|
],
|
|
],
|
|
- customerId: [
|
|
|
|
- { required: true, message: 'Please enter the Customer id', trigger: 'blur' }
|
|
|
|
- ],
|
|
|
|
documentType: [
|
|
documentType: [
|
|
{ required: true, message: 'Please select the Document type', trigger: 'change' }
|
|
{ required: true, message: 'Please select the Document type', trigger: 'change' }
|
|
],
|
|
],
|
|
@@ -106,13 +105,14 @@ const rules = reactive({
|
|
]
|
|
]
|
|
})
|
|
})
|
|
|
|
|
|
-const handleAvatarSuccess = (response, uploadFile, uploadFiles, type) => {
|
|
|
|
- form[type].value = URL.createObjectURL(uploadFile.raw)
|
|
|
|
|
|
+const handleChange = (file, fileList, type) => {
|
|
|
|
+ form[type] = file.raw
|
|
|
|
+ fileObj[type] = URL.createObjectURL(file.raw)
|
|
}
|
|
}
|
|
|
|
|
|
const beforeAvatarUpload = (rawFile) => {
|
|
const beforeAvatarUpload = (rawFile) => {
|
|
if (!['image/jpeg', 'image/png', 'image/jpg'].includes(rawFile.type)) {
|
|
if (!['image/jpeg', 'image/png', 'image/jpg'].includes(rawFile.type)) {
|
|
- ElMessage.error('Picture format is incorrect, please reselect!')
|
|
|
|
|
|
+ ElMessage.error('The image format is limited to ". jpg", ". jpg", ". png", with a size of 1KB~5MB!')
|
|
return false
|
|
return false
|
|
} else if (rawFile.size / 1024 / 1024 > 5) {
|
|
} else if (rawFile.size / 1024 / 1024 > 5) {
|
|
ElMessage.error('Picture size can not exceed 5MB!')
|
|
ElMessage.error('Picture size can not exceed 5MB!')
|
|
@@ -125,18 +125,20 @@ const ruleFormRef = ref()
|
|
const handleSubmit = async () => {
|
|
const handleSubmit = async () => {
|
|
await ruleFormRef.value.validate(async (valid) => {
|
|
await ruleFormRef.value.validate(async (valid) => {
|
|
if (valid) {
|
|
if (valid) {
|
|
- await submitAdvanced({
|
|
|
|
- front_side_document: form.frontSideDocument,
|
|
|
|
- back_side_document: form.backSideDocument,
|
|
|
|
- customer_photo: form.customerPhoto,
|
|
|
|
- customer_id: form.customerId,
|
|
|
|
- document_type: form.documentType,
|
|
|
|
- document_number: form.documentNumber
|
|
|
|
- })
|
|
|
|
- ElMessage({ message: 'success', type: 'success' })
|
|
|
|
- setTimeout(() => {
|
|
|
|
- $router.push('/third')
|
|
|
|
- }, 800)
|
|
|
|
|
|
+ loading.value = true;
|
|
|
|
+ try {
|
|
|
|
+ const data = await submitAdvanced({
|
|
|
|
+ ...form,
|
|
|
|
+ customerId: props.customerId
|
|
|
|
+ })
|
|
|
|
+ loading.value = false;
|
|
|
|
+ ElMessage({ message: 'Submit Success', type: 'success' })
|
|
|
|
+ setTimeout(() => {
|
|
|
|
+ emits("updateCustomerId", data.customerId)
|
|
|
|
+ }, 800)
|
|
|
|
+ } catch (e) {
|
|
|
|
+ loading.value = false;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
})
|
|
})
|
|
}
|
|
}
|
|
@@ -151,8 +153,15 @@ const handleSubmit = async () => {
|
|
margin-bottom: 25px;
|
|
margin-bottom: 25px;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+.avatar-uploader .avatar {
|
|
|
|
+ width: 100%;
|
|
|
|
+ height: 100px;
|
|
|
|
+ display: block;
|
|
|
|
+}
|
|
|
|
+
|
|
.avatar-uploader {
|
|
.avatar-uploader {
|
|
width: 100%;
|
|
width: 100%;
|
|
|
|
+ height: 100px;
|
|
}
|
|
}
|
|
|
|
|
|
.avatar-uploader .el-upload {
|
|
.avatar-uploader .el-upload {
|