|
@@ -1,7 +1,7 @@
|
|
|
<template>
|
|
<template>
|
|
|
<div class="maintenance-apply-container">
|
|
<div class="maintenance-apply-container">
|
|
|
<div class="page-header">
|
|
<div class="page-header">
|
|
|
- <div class="header-left">维保申请</div>
|
|
|
|
|
|
|
+ <div class="header-left">{{ pageTitle }}</div>
|
|
|
<div class="header-right" @click="handleBack">返回</div>
|
|
<div class="header-right" @click="handleBack">返回</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
@@ -25,24 +25,29 @@
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="form-container">
|
|
<div class="form-container">
|
|
|
- <el-form :model="form" :rules="rules" ref="formRef" label-width="120px" class="apply-form" hide-required-asterisk>
|
|
|
|
|
|
|
+ <el-form :model="form" :rules="mode === 'view' ? {} : rules" ref="formRef" label-width="120px" class="apply-form" hide-required-asterisk>
|
|
|
<el-form-item label="申请人名称:" prop="applicantName">
|
|
<el-form-item label="申请人名称:" prop="applicantName">
|
|
|
- <el-input v-model="form.applicantName" placeholder="请输入申请人名称" clearable />
|
|
|
|
|
|
|
+ <el-input v-model="form.applicantName" placeholder="请输入申请人名称" clearable :disabled="mode === 'view'" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <!-- The mockup shows a validation error explicitly for phone -->
|
|
|
|
|
- <el-form-item label="手机号码:" prop="phone" class="phone-item">
|
|
|
|
|
- <el-input v-model="form.phone" placeholder="请输入申请人手机号码" clearable />
|
|
|
|
|
|
|
+ <!-- The mockup shows a validation error explicitly for applicantPhone -->
|
|
|
|
|
+ <el-form-item label="手机号码:" prop="applicantPhone" class="applicantPhone-item">
|
|
|
|
|
+ <el-input v-model="form.applicantPhone" placeholder="请输入申请人手机号码" clearable :disabled="mode === 'view'" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item label="验证码:" prop="verifyCode">
|
|
|
|
|
|
|
+ <el-form-item label="验证码:" prop="verifyCode" v-if="mode !== 'view'">
|
|
|
<div class="verify-code-wrapper">
|
|
<div class="verify-code-wrapper">
|
|
|
- <el-input v-model="form.verifyCode" placeholder="短信验证码" class="code-input" clearable />
|
|
|
|
|
- <div class="send-btn" @click="handleSendCode">发送验证码</div>
|
|
|
|
|
|
|
+ <el-input v-model="form.verifyCode" placeholder="短信验证码" class="code-input" clearable>
|
|
|
|
|
+ <template #suffix>
|
|
|
|
|
+ <span @click="handleSendCode" :class="['code', countdown > 0 ? 'disabled' : '']">
|
|
|
|
|
+ {{ codeText }}
|
|
|
|
|
+ </span>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-input>
|
|
|
</div>
|
|
</div>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item label="">
|
|
|
|
|
|
|
+ <!-- <el-form-item label="">
|
|
|
<div class="drag-verify-bar" @click="handleVerify">
|
|
<div class="drag-verify-bar" @click="handleVerify">
|
|
|
<div class="verify-btn" :class="{ verified: isVerified }">
|
|
<div class="verify-btn" :class="{ verified: isVerified }">
|
|
|
<div class="inner-dot" v-if="!isVerified"></div>
|
|
<div class="inner-dot" v-if="!isVerified"></div>
|
|
@@ -50,43 +55,44 @@
|
|
|
</div>
|
|
</div>
|
|
|
<div class="verify-text">{{ isVerified ? '验证通过' : '点击验证' }}</div>
|
|
<div class="verify-text">{{ isVerified ? '验证通过' : '点击验证' }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
- </el-form-item>
|
|
|
|
|
|
|
+ </el-form-item> -->
|
|
|
|
|
|
|
|
<el-form-item label="服务时间:" prop="serviceTime">
|
|
<el-form-item label="服务时间:" prop="serviceTime">
|
|
|
- <el-select v-model="form.serviceTime" placeholder="请选择服务时间" class="w-full" filterable>
|
|
|
|
|
|
|
+ <el-select v-model="form.serviceTime" placeholder="请选择服务时间" class="w-full" filterable :disabled="mode === 'view'">
|
|
|
<el-option v-for="dict in service_time_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
<el-option v-for="dict in service_time_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item label="月度维保次数:" prop="monthlyTimes">
|
|
|
|
|
- <el-input v-model="form.monthlyTimes" placeholder="请输入月度维保次数" clearable />
|
|
|
|
|
|
|
+ <el-form-item label="月度维保次数:" prop="monthMainten">
|
|
|
|
|
+ <el-input v-model="form.monthMainten" placeholder="请输入月度维保次数" clearable :disabled="mode === 'view'" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="维保类型:" prop="maintainType">
|
|
<el-form-item label="维保类型:" prop="maintainType">
|
|
|
- <el-select v-model="form.maintainType" placeholder="请选择" class="w-full" filterable>
|
|
|
|
|
|
|
+ <el-select v-model="form.maintainType" placeholder="请选择" class="w-full" filterable :disabled="mode === 'view'">
|
|
|
<el-option v-for="dict in maintenance_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
<el-option v-for="dict in maintenance_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item label="服务内容:" prop="serviceContent">
|
|
|
|
|
|
|
+ <el-form-item label="服务内容:" prop="serviceContentArr">
|
|
|
<div class="service-content-wrapper">
|
|
<div class="service-content-wrapper">
|
|
|
<div class="service-tags">
|
|
<div class="service-tags">
|
|
|
- <div class="tag-item" :class="{ active: form.serviceContent.includes('express') }" @click="toggleServiceContent('express')">
|
|
|
|
|
- 急速快递
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="tag-item" :class="{ active: form.serviceContent.includes('repair') }" @click="toggleServiceContent('repair')">
|
|
|
|
|
- 售后维修
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="tag-item" :class="{ active: form.serviceContent.includes('warranty') }" @click="toggleServiceContent('warranty')">
|
|
|
|
|
- 产品质保
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ <el-checkbox-group v-model="form.serviceContentArr" :disabled="mode === 'view'">
|
|
|
|
|
+ <el-checkbox v-for="item in serviceContentList" :key="item.id" :label="item.id">{{ item.itemName }}</el-checkbox>
|
|
|
|
|
+ </el-checkbox-group>
|
|
|
</div>
|
|
</div>
|
|
|
- <el-input v-model="form.otherService" type="textarea" :rows="4" placeholder="请输入其他服务" class="other-service-input" />
|
|
|
|
|
|
|
+ <el-input
|
|
|
|
|
+ v-model="form.otherService"
|
|
|
|
|
+ type="textarea"
|
|
|
|
|
+ :rows="4"
|
|
|
|
|
+ placeholder="请输入其他服务"
|
|
|
|
|
+ class="other-service-input"
|
|
|
|
|
+ :disabled="mode === 'view'"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item>
|
|
|
|
|
- <el-button type="primary" class="next-btn" @click="handleNext">下一步</el-button>
|
|
|
|
|
|
|
+ <el-form-item v-if="mode !== 'view'">
|
|
|
|
|
+ <el-button type="primary" class="next-btn" @click="handleNext">{{ mode === 'edit' ? '保存修改' : '下一步' }}</el-button>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-form>
|
|
</el-form>
|
|
|
</div>
|
|
</div>
|
|
@@ -95,30 +101,53 @@
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
|
-import { ref, reactive, onMounted } from 'vue';
|
|
|
|
|
-import { useRouter } from 'vue-router';
|
|
|
|
|
|
|
+import { smsCode } from '@/api/breg/index';
|
|
|
|
|
+import { addMaintainInfo, updateMaintainInfo, listServerItem, getMaintainInfo } from '@/api/pc/valueAdded';
|
|
|
|
|
+import { ref, reactive, onMounted, computed } from 'vue';
|
|
|
|
|
+import { useRouter, useRoute } from 'vue-router';
|
|
|
import { Check } from '@element-plus/icons-vue';
|
|
import { Check } from '@element-plus/icons-vue';
|
|
|
import { ElMessage } from 'element-plus';
|
|
import { ElMessage } from 'element-plus';
|
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
|
const { service_time_type, maintenance_type } = toRefs<any>(proxy?.useDict('service_time_type', 'maintenance_type'));
|
|
const { service_time_type, maintenance_type } = toRefs<any>(proxy?.useDict('service_time_type', 'maintenance_type'));
|
|
|
|
|
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
|
|
|
+const route = useRoute();
|
|
|
const formRef = ref();
|
|
const formRef = ref();
|
|
|
|
|
|
|
|
-const isVerified = ref(false);
|
|
|
|
|
|
|
+// 模式:add-新增,view-查看,edit-修改
|
|
|
|
|
+const mode = ref<'add' | 'view' | 'edit'>('add');
|
|
|
|
|
+
|
|
|
|
|
+// 根据模式显示不同的页面标题
|
|
|
|
|
+const pageTitle = computed(() => {
|
|
|
|
|
+ switch (mode.value) {
|
|
|
|
|
+ case 'view':
|
|
|
|
|
+ return '查看维保';
|
|
|
|
|
+ case 'edit':
|
|
|
|
|
+ return '修改维保';
|
|
|
|
|
+ default:
|
|
|
|
|
+ return '维保申请';
|
|
|
|
|
+ }
|
|
|
|
|
+});
|
|
|
|
|
|
|
|
|
|
+const isVerified = ref(false);
|
|
|
|
|
+const codeText = ref<string>('发送验证码');
|
|
|
|
|
+const countdown = ref<number>(0);
|
|
|
|
|
+const timer = ref<any>(null);
|
|
|
|
|
+const serviceContentList = ref<any[]>([]);
|
|
|
const form = reactive({
|
|
const form = reactive({
|
|
|
|
|
+ id: null,
|
|
|
applicantName: '',
|
|
applicantName: '',
|
|
|
- phone: '',
|
|
|
|
|
|
|
+ applicantPhone: '',
|
|
|
verifyCode: '',
|
|
verifyCode: '',
|
|
|
serviceTime: '',
|
|
serviceTime: '',
|
|
|
- monthlyTimes: '',
|
|
|
|
|
|
|
+ monthMainten: '',
|
|
|
maintainType: '',
|
|
maintainType: '',
|
|
|
- serviceContent: [] as string[],
|
|
|
|
|
|
|
+ serviceContentArr: [],
|
|
|
|
|
+ serviceContent: '',
|
|
|
otherService: ''
|
|
otherService: ''
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
-// To perfectly match the mockup which shows a persistent validation error on phone
|
|
|
|
|
|
|
+// To perfectly match the mockup which shows a persistent validation error on applicantPhone
|
|
|
const validatePhone = (rule: any, value: string, callback: any) => {
|
|
const validatePhone = (rule: any, value: string, callback: any) => {
|
|
|
if (!value) {
|
|
if (!value) {
|
|
|
callback(new Error('请输入手机号码'));
|
|
callback(new Error('请输入手机号码'));
|
|
@@ -131,59 +160,152 @@ const validatePhone = (rule: any, value: string, callback: any) => {
|
|
|
|
|
|
|
|
const rules = {
|
|
const rules = {
|
|
|
applicantName: [{ required: true, message: '请输入申请人名称', trigger: 'blur' }],
|
|
applicantName: [{ required: true, message: '请输入申请人名称', trigger: 'blur' }],
|
|
|
- phone: [{ required: true, validator: validatePhone, trigger: 'blur' }],
|
|
|
|
|
|
|
+ applicantPhone: [{ required: true, validator: validatePhone, trigger: 'blur' }],
|
|
|
verifyCode: [{ required: true, message: '请输入短信验证码', trigger: 'blur' }],
|
|
verifyCode: [{ required: true, message: '请输入短信验证码', trigger: 'blur' }],
|
|
|
serviceTime: [{ required: true, message: '请选择服务时间', trigger: 'change' }],
|
|
serviceTime: [{ required: true, message: '请选择服务时间', trigger: 'change' }],
|
|
|
- monthlyTimes: [{ required: true, message: '请输入月度维保次数', trigger: 'blur' }],
|
|
|
|
|
|
|
+ monthMainten: [{ required: true, message: '请输入月度维保次数', trigger: 'blur' }],
|
|
|
maintainType: [{ required: true, message: '请选择维保类型', trigger: 'change' }]
|
|
maintainType: [{ required: true, message: '请选择维保类型', trigger: 'change' }]
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const handleBack = () => {
|
|
const handleBack = () => {
|
|
|
router.back();
|
|
router.back();
|
|
|
};
|
|
};
|
|
|
-
|
|
|
|
|
|
|
+// 启动倒计时
|
|
|
|
|
+const startCountdown = () => {
|
|
|
|
|
+ countdown.value = 60;
|
|
|
|
|
+ codeText.value = `${countdown.value}s 后重新发送`;
|
|
|
|
|
+
|
|
|
|
|
+ timer.value = setInterval(() => {
|
|
|
|
|
+ countdown.value--;
|
|
|
|
|
+ if (countdown.value > 0) {
|
|
|
|
|
+ codeText.value = `${countdown.value}s 后重新发送`;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ clearInterval(timer.value);
|
|
|
|
|
+ timer.value = null;
|
|
|
|
|
+ codeText.value = '发送验证码';
|
|
|
|
|
+ }
|
|
|
|
|
+ }, 1000);
|
|
|
|
|
+};
|
|
|
const handleSendCode = () => {
|
|
const handleSendCode = () => {
|
|
|
- if (!form.phone) {
|
|
|
|
|
- ElMessage.warning('请先输入手机号码');
|
|
|
|
|
|
|
+ // 防止倒计时期间重复点击
|
|
|
|
|
+ if (countdown.value > 0) return;
|
|
|
|
|
+
|
|
|
|
|
+ const applicantPhone = form.applicantPhone;
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 基础格式校验
|
|
|
|
|
+ if (!validateMobile(applicantPhone)) {
|
|
|
|
|
+ ElMessage({
|
|
|
|
|
+ message: '请输入正确的手机号码',
|
|
|
|
|
+ type: 'warning'
|
|
|
|
|
+ });
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
- ElMessage.success('验证码已发送');
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 【新增】先调用接口查询用户是否存在
|
|
|
|
|
+
|
|
|
|
|
+ smsCode({ phonenumber: applicantPhone })
|
|
|
|
|
+ .then((smsRes: any) => {
|
|
|
|
|
+ if (smsRes.code === 200) {
|
|
|
|
|
+ ElMessage({
|
|
|
|
|
+ message: '验证码已发送',
|
|
|
|
|
+ type: 'success'
|
|
|
|
|
+ });
|
|
|
|
|
+ startCountdown(); // 开始倒计时
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 发送短信接口业务失败
|
|
|
|
|
+ ElMessage.error(smsRes.msg || '发送验证码失败');
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch((err: any) => {
|
|
|
|
|
+ // 发送短信接口网络错误或异常
|
|
|
|
|
+ ElMessage.error(err.msg || '发送验证码请求异常');
|
|
|
|
|
+ });
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+// 验证手机号
|
|
|
|
|
+const validateMobile = (applicantPhone: any) => {
|
|
|
|
|
+ const reg = /^1[3-9]\d{9}$/;
|
|
|
|
|
+ return reg.test(applicantPhone);
|
|
|
|
|
+};
|
|
|
const handleVerify = () => {
|
|
const handleVerify = () => {
|
|
|
isVerified.value = true;
|
|
isVerified.value = true;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const toggleServiceContent = (type: string) => {
|
|
|
|
|
- const index = form.serviceContent.indexOf(type);
|
|
|
|
|
- if (index > -1) {
|
|
|
|
|
- form.serviceContent.splice(index, 1);
|
|
|
|
|
- } else {
|
|
|
|
|
- form.serviceContent.push(type);
|
|
|
|
|
|
|
+const handleNext = async () => {
|
|
|
|
|
+ const valid = await formRef.value?.validate();
|
|
|
|
|
+ if (!valid) return;
|
|
|
|
|
+ if (valid) {
|
|
|
|
|
+ // 将服务内容字符串(ID列表)转换为数组
|
|
|
|
|
+ form.serviceContent = Array.isArray(form.serviceContentArr) ? form.serviceContentArr.join(',') : form.serviceContentArr;
|
|
|
|
|
+ if (form.id) {
|
|
|
|
|
+ await updateMaintainInfo(form);
|
|
|
|
|
+ ElMessage.success('修改成功');
|
|
|
|
|
+ } else {
|
|
|
|
|
+ await addMaintainInfo(form);
|
|
|
|
|
+ ElMessage.success('提交成功');
|
|
|
|
|
+ }
|
|
|
|
|
+ router.back();
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const handleNext = async () => {
|
|
|
|
|
- if (!formRef.value) return;
|
|
|
|
|
- await formRef.value.validate((valid: boolean) => {
|
|
|
|
|
- if (valid) {
|
|
|
|
|
- if (!isVerified.value) {
|
|
|
|
|
- ElMessage.warning('请先点击验证');
|
|
|
|
|
- return;
|
|
|
|
|
|
|
+// 加载维保详情
|
|
|
|
|
+const loadMaintainInfo = async (id: string) => {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const res = await getMaintainInfo(id as any);
|
|
|
|
|
+ if (res.code === 200 && res.data) {
|
|
|
|
|
+ const data = res.data;
|
|
|
|
|
+ form.id = data.id;
|
|
|
|
|
+ form.applicantName = data.applicantName || '';
|
|
|
|
|
+ form.applicantPhone = data.applicantPhone || '';
|
|
|
|
|
+ form.serviceTime = data.serviceTime || '';
|
|
|
|
|
+ form.monthMainten = data.monthMainten || '';
|
|
|
|
|
+ form.maintainType = data.maintainType || '';
|
|
|
|
|
+ form.otherService = data.otherService || '';
|
|
|
|
|
+
|
|
|
|
|
+ // 将服务内容字符串(逗号拼接的id)转换为数字数组
|
|
|
|
|
+ if (data.serviceContent) {
|
|
|
|
|
+ const serviceIds = data.serviceContent.split(',');
|
|
|
|
|
+ form.serviceContentArr = serviceIds;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ form.serviceContentArr = [];
|
|
|
}
|
|
}
|
|
|
- ElMessage.success('提交成功');
|
|
|
|
|
- // router.push('...');
|
|
|
|
|
}
|
|
}
|
|
|
- });
|
|
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ ElMessage.error('加载维保详情失败');
|
|
|
|
|
+ }
|
|
|
};
|
|
};
|
|
|
|
|
+// 加载服务内容列表
|
|
|
|
|
+const loadServiceContentList = async () => {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const res = await listServerItem({});
|
|
|
|
|
+ serviceContentList.value = res.rows || [];
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ ElMessage.error('加载服务内容列表失败');
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+onMounted(async () => {
|
|
|
|
|
+ // 先加载服务内容列表,确保复选框选项可用
|
|
|
|
|
+ await loadServiceContentList();
|
|
|
|
|
|
|
|
-onMounted(() => {
|
|
|
|
|
- // To trigger the phone error message immediately as shown in the mockup
|
|
|
|
|
- setTimeout(() => {
|
|
|
|
|
- if (formRef.value) {
|
|
|
|
|
- formRef.value.validateField('phone').catch(() => {});
|
|
|
|
|
- }
|
|
|
|
|
- }, 500);
|
|
|
|
|
|
|
+ // 从路由参数获取模式和ID
|
|
|
|
|
+ const queryMode = route.query.mode as string;
|
|
|
|
|
+ const queryId = route.query.id as string;
|
|
|
|
|
+
|
|
|
|
|
+ if (queryMode && (queryMode === 'view' || queryMode === 'edit')) {
|
|
|
|
|
+ mode.value = queryMode;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 如果有ID,加载维保详情
|
|
|
|
|
+ if (queryId) {
|
|
|
|
|
+ await loadMaintainInfo(queryId);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // To trigger the applicantPhone error message immediately as shown in the mockup
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ if (formRef.value) {
|
|
|
|
|
+ formRef.value.validateField('applicantPhone').catch(() => {});
|
|
|
|
|
+ }
|
|
|
|
|
+ }, 500);
|
|
|
|
|
+ }
|
|
|
});
|
|
});
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
@@ -445,7 +567,16 @@ onMounted(() => {
|
|
|
width: 100%;
|
|
width: 100%;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+.code {
|
|
|
|
|
+ font-size: 14px;
|
|
|
|
|
+ color: #e7000b;
|
|
|
|
|
+ cursor: pointer;
|
|
|
|
|
|
|
|
|
|
+ &.disabled {
|
|
|
|
|
+ color: #999;
|
|
|
|
|
+ cursor: not-allowed;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
.next-btn {
|
|
.next-btn {
|
|
|
// background-color: #0fb881;
|
|
// background-color: #0fb881;
|
|
|
// border-color: #0fb881;
|
|
// border-color: #0fb881;
|
|
@@ -463,7 +594,7 @@ onMounted(() => {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/* Override error styles to match exactly the mockup */
|
|
/* Override error styles to match exactly the mockup */
|
|
|
-:deep(.phone-item.is-error) {
|
|
|
|
|
|
|
+:deep(.applicantPhone-item.is-error) {
|
|
|
.el-input__wrapper {
|
|
.el-input__wrapper {
|
|
|
box-shadow: 0 0 0 1px #f56c6c inset !important;
|
|
box-shadow: 0 0 0 1px #f56c6c inset !important;
|
|
|
}
|
|
}
|