新增信息维护年收入字段全链路支持

This commit is contained in:
wkc
2026-03-17 18:07:57 +08:00
parent 82cb751b8f
commit 8f9fc09338
33 changed files with 542 additions and 23 deletions

View File

@@ -115,6 +115,7 @@
<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="phone" width="120"/>
<el-table-column label="年收入" align="center" prop="annualIncome" width="140"/>
<el-table-column label="状态" align="center" prop="status" width="100">
<template slot-scope="scope">
<el-tag v-if="scope.row.status === '0'" type="success">在职</el-tag>
@@ -204,11 +205,19 @@
<el-input v-model="form.phone" placeholder="请输入电话" maxlength="11" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="年收入" prop="annualIncome">
<el-input v-model="form.annualIncome" placeholder="请输入年收入(元/年)" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="入职时间" prop="hireDate">
<el-date-picker v-model="form.hireDate" type="date" placeholder="选择入职时间" value-format="yyyy-MM-dd" style="width: 100%" />
</el-form-item>
</el-col>
<el-col :span="12" />
</el-row>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status">
@@ -318,6 +327,9 @@
<el-descriptions-item label="所属部门">{{ employeeDetail.deptName || '-' }}</el-descriptions-item>
<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 : '-' }}
</el-descriptions-item>
<el-descriptions-item label="入职时间">
{{ employeeDetail.hireDate ? parseTime(employeeDetail.hireDate, '{y}-{m}-{d}') : '-' }}
</el-descriptions-item>
@@ -453,6 +465,7 @@
<el-table-column label="柜员号" prop="staffId" align="center" />
<el-table-column label="身份证号" prop="idCard" align="center" />
<el-table-column label="电话" prop="phone" align="center" />
<el-table-column label="年收入" prop="annualIncome" align="center" width="140" />
<el-table-column label="失败原因" prop="errorMessage" align="center" min-width="200" :show-overflow-tooltip="true" />
</el-table>
@@ -606,6 +619,9 @@ export default {
{ required: true, message: "电话不能为空", trigger: "blur" },
{ pattern: phonePattern, message: "请输入正确的11位手机号", trigger: "blur" }
],
annualIncome: [
{ validator: (rule, value, callback) => this.validateAnnualIncomeRule(value, callback, "年收入"), trigger: "blur" }
],
status: [
{ required: true, message: "请选择状态", trigger: "change" }
]
@@ -938,6 +954,7 @@ export default {
deptId: null,
idCard: null,
phone: null,
annualIncome: null,
hireDate: null,
status: "0",
relatives: [],
@@ -945,6 +962,36 @@ export default {
};
this.resetForm("form");
},
normalizeAnnualIncome(value) {
if (value === null || value === undefined) {
return null;
}
const normalized = String(value).trim();
return normalized === "" ? null : normalized;
},
validateAnnualIncome(value, fieldLabel = "年收入") {
const normalized = this.normalizeAnnualIncome(value);
if (normalized === null) {
return true;
}
if (!/^\d+(\.\d{1,2})?$/.test(normalized)) {
this.$modal.msgError(`${fieldLabel}格式不正确需为非负金额且最多保留2位小数`);
return false;
}
return true;
},
validateAnnualIncomeRule(value, callback, fieldLabel = "年收入") {
const normalized = this.normalizeAnnualIncome(value);
if (normalized === null) {
callback();
return;
}
if (!/^\d+(\.\d{1,2})?$/.test(normalized)) {
callback(new Error(`${fieldLabel}格式不正确需为非负金额且最多保留2位小数`));
return;
}
callback();
},
normalizeAssetInfoList() {
const assetInfoList = Array.isArray(this.form.assetInfoList)
? this.form.assetInfoList
@@ -1114,6 +1161,7 @@ export default {
...response.data,
assetInfoList: response.data.assetInfoList || []
};
this.form.annualIncome = response.data.annualIncome;
this.open = true;
this.title = "编辑员工";
});
@@ -1123,18 +1171,27 @@ export default {
this.$refs["form"].validate(valid => {
if (valid) {
this.form.assetInfoList = this.normalizeAssetInfoList();
if (!this.validateAssetInfoList(this.form.assetInfoList)) {
const payload = {
...this.form,
assetInfoList: this.form.assetInfoList
};
payload.annualIncome = this.normalizeAnnualIncome(payload.annualIncome);
this.form.assetInfoList = payload.assetInfoList;
if (!this.validateAnnualIncome(payload.annualIncome, "年收入")) {
return;
}
if (!this.validateAssetInfoList(payload.assetInfoList)) {
return;
}
if (this.isAdd) {
addBaseStaff(this.form).then(response => {
addBaseStaff(payload).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.isAdd = false;
this.getList();
});
} else {
updateBaseStaff(this.form).then(response => {
updateBaseStaff(payload).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();

View File

@@ -123,6 +123,7 @@
</template>
</el-table-column>
<el-table-column label="关系人姓名" align="center" prop="relationName" :show-overflow-tooltip="true"/>
<el-table-column label="家庭成员年收入" align="center" prop="annualIncome" width="160"/>
<el-table-column label="性别" align="center" prop="gender" width="80">
<template slot-scope="scope">
<dict-tag :options="dict.type.ccdi_indiv_gender" :value="scope.row.gender"/>
@@ -282,6 +283,13 @@
<el-input v-model="form.mobilePhone2" placeholder="请输入手机号码2" maxlength="20" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="家庭成员年收入" prop="annualIncome">
<el-input v-model="form.annualIncome" placeholder="请输入家庭成员年收入(元/年)" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="微信名称1" prop="wechatNo1">
<el-input v-model="form.wechatNo1" placeholder="请输入微信名称1" maxlength="50" />
@@ -466,6 +474,9 @@
<el-descriptions-item label="出生日期">{{ relationDetail.birthDate || '-' }}</el-descriptions-item>
<el-descriptions-item label="手机号码1">{{ relationDetail.mobilePhone1 || '-' }}</el-descriptions-item>
<el-descriptions-item label="手机号码2">{{ relationDetail.mobilePhone2 || '-' }}</el-descriptions-item>
<el-descriptions-item label="家庭成员年收入">
{{ relationDetail.annualIncome !== null && relationDetail.annualIncome !== undefined && relationDetail.annualIncome !== '' ? relationDetail.annualIncome : '-' }}
</el-descriptions-item>
<el-descriptions-item label="微信名称1">{{ relationDetail.wechatNo1 || '-' }}</el-descriptions-item>
<el-descriptions-item label="微信名称2">{{ relationDetail.wechatNo2 || '-' }}</el-descriptions-item>
<el-descriptions-item label="微信名称3">{{ relationDetail.wechatNo3 || '-' }}</el-descriptions-item>
@@ -616,6 +627,7 @@
<el-table-column label="员工身份证号" prop="personId" align="center" width="180"/>
<el-table-column label="关系类型" prop="relationType" align="center" width="100"/>
<el-table-column label="关系人姓名" prop="relationName" align="center" width="120"/>
<el-table-column label="家庭成员年收入" prop="annualIncome" align="center" width="160"/>
<el-table-column label="失败原因" prop="errorMessage" align="center" min-width="200" :show-overflow-tooltip="true" />
</el-table>
@@ -766,6 +778,9 @@ export default {
],
mobilePhone2: [
{ pattern: /^1[3-9]\d{9}$/, message: "请输入正确的手机号码", trigger: "blur" }
],
annualIncome: [
{ validator: (rule, value, callback) => this.validateAnnualIncomeRule(value, callback, "家庭成员年收入"), trigger: "blur" }
]
},
// 导入参数
@@ -963,6 +978,7 @@ export default {
relationCertNo: null,
mobilePhone1: null,
mobilePhone2: null,
annualIncome: null,
wechatNo1: null,
wechatNo2: null,
wechatNo3: null,
@@ -977,6 +993,36 @@ export default {
this.staffOptions = [];
this.resetForm("form");
},
normalizeAnnualIncome(value) {
if (value === null || value === undefined) {
return null;
}
const normalized = String(value).trim();
return normalized === "" ? null : normalized;
},
validateAnnualIncome(value, fieldLabel = "家庭成员年收入") {
const normalized = this.normalizeAnnualIncome(value);
if (normalized === null) {
return true;
}
if (!/^\d+(\.\d{1,2})?$/.test(normalized)) {
this.$modal.msgError(`${fieldLabel}格式不正确需为非负金额且最多保留2位小数`);
return false;
}
return true;
},
validateAnnualIncomeRule(value, callback, fieldLabel = "家庭成员年收入") {
const normalized = this.normalizeAnnualIncome(value);
if (normalized === null) {
callback();
return;
}
if (!/^\d+(\.\d{1,2})?$/.test(normalized)) {
callback(new Error(`${fieldLabel}格式不正确需为非负金额且最多保留2位小数`));
return;
}
callback();
},
createEmptyAssetRow() {
return {
assetMainType: "",
@@ -1098,6 +1144,7 @@ export default {
...response.data,
assetInfoList: response.data.assetInfoList || []
};
this.form.annualIncome = response.data.annualIncome;
// 加载员工信息以支持下拉显示
if (this.form.personId) {
this.searchStaff(this.form.personId);
@@ -1131,6 +1178,10 @@ export default {
...this.form,
assetInfoList: this.form.assetInfoList.map(item => ({ ...item }))
};
payload.annualIncome = this.normalizeAnnualIncome(payload.annualIncome);
if (!this.validateAnnualIncome(payload.annualIncome, "家庭成员年收入")) {
return;
}
payload.assetInfoList.forEach((asset, index) => {
delete payload.assetInfoList[index].familyId;
delete payload.assetInfoList[index].personId;