调整员工信息维护列表和个人资料校验

This commit is contained in:
wjj
2026-07-16 09:51:35 +08:00
parent ded07a2c33
commit 15aa9117c3
7 changed files with 137 additions and 25 deletions

View File

@@ -112,14 +112,17 @@
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="baseStaffList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table v-loading="loading" :data="baseStaffList" class="base-staff-table">
<el-table-column label="姓名" align="center" prop="name" :show-overflow-tooltip="true"/>
<el-table-column label="柜员号" align="center" prop="staffId" :show-overflow-tooltip="true"/>
<el-table-column label="身份证号" align="center" prop="idCard" :show-overflow-tooltip="true"/>
<el-table-column label="所属部门" align="center" prop="deptName" :show-overflow-tooltip="true"/>
<el-table-column label="身份证号" align="center" prop="idCard" min-width="190" :show-overflow-tooltip="true"/>
<el-table-column label="所属部门" align="center" prop="deptName" min-width="180" :show-overflow-tooltip="true"/>
<el-table-column label="电话" align="center" prop="phone" width="120"/>
<el-table-column label="年收入" align="center" prop="annualIncome" width="140"/>
<el-table-column label="年收入(万元)" align="center" prop="annualIncome" width="120">
<template slot-scope="scope">
<span>{{ formatAnnualIncomeWan(scope.row.annualIncome) }}</span>
</template>
</el-table-column>
<el-table-column label="是否党员" align="center" prop="partyMember" width="100">
<template slot-scope="scope">
<span>{{ formatPartyMember(scope.row.partyMember) }}</span>
@@ -131,9 +134,9 @@
<el-tag v-else type="danger">离职</el-tag>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<el-table-column label="入职时间" align="center" prop="hireDate" width="140">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
<span>{{ scope.row.hireDate ? parseTime(scope.row.hireDate, '{y}-{m}-{d}') : '-' }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200">
@@ -340,7 +343,7 @@
<el-descriptions-item label="身份证号">{{ employeeDetail.idCard || '-' }}</el-descriptions-item>
<el-descriptions-item label="电话">{{ employeeDetail.phone || '-' }}</el-descriptions-item>
<el-descriptions-item label="年收入">
{{ employeeDetail.annualIncome !== null && employeeDetail.annualIncome !== undefined && employeeDetail.annualIncome !== '' ? employeeDetail.annualIncome : '-' }}
{{ formatAnnualIncome(employeeDetail.annualIncome) }}
</el-descriptions-item>
<el-descriptions-item label="入职时间">
{{ employeeDetail.hireDate ? parseTime(employeeDetail.hireDate, '{y}-{m}-{d}') : '-' }}
@@ -967,6 +970,26 @@ export default {
maximumFractionDigits: 2
})} 万元`;
},
formatAnnualIncome(value) {
if (value === null || value === undefined || value === "") {
return "-";
}
const amount = Number(value);
if (!Number.isFinite(amount)) {
return "-";
}
return amount.toFixed(0);
},
formatAnnualIncomeWan(value) {
if (value === null || value === undefined || value === "") {
return "-";
}
const amount = Number(value);
if (!Number.isFinite(amount)) {
return "-";
}
return (amount / 10000).toFixed(2);
},
normalizeAnnualIncome(value) {
if (value === null || value === undefined) {
return null;
@@ -1511,6 +1534,11 @@ export default {
margin-bottom: 10px;
}
.base-staff-table ::v-deep .el-table__header-wrapper th:first-child .cell,
.base-staff-table ::v-deep .el-table__body-wrapper td:first-child .cell {
padding-left: 24px;
}
/* 详情弹窗样式 */
.employee-detail-dialog .detail-container {
padding: 10px 0;

View File

@@ -25,6 +25,32 @@
<script>
import { updateUserProfile } from "@/api/system/user"
const validateOptionalEmail = (rule, value, callback) => {
if (!value) {
callback()
return
}
const emailPattern = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/
if (!emailPattern.test(value)) {
callback(new Error("请输入正确的邮箱地址"))
return
}
callback()
}
const validateOptionalPhone = (rule, value, callback) => {
if (!value) {
callback()
return
}
const phonePattern = /^1[3|4|5|6|7|8|9][0-9]\d{8}$/
if (!phonePattern.test(value)) {
callback(new Error("请输入正确的手机号码"))
return
}
callback()
}
export default {
props: {
user: {
@@ -40,20 +66,10 @@ export default {
{ required: true, message: "用户昵称不能为空", trigger: "blur" }
],
email: [
{ required: true, message: "邮箱地址不能为空", trigger: "blur" },
{
type: "email",
message: "请输入正确的邮箱地址",
trigger: ["blur", "change"]
}
{ validator: validateOptionalEmail, trigger: ["blur", "change"] }
],
phonenumber: [
{ required: true, message: "手机号码不能为空", trigger: "blur" },
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur"
}
{ validator: validateOptionalPhone, trigger: "blur" }
]
}
}