新增员工党员字段

This commit is contained in:
wkc
2026-04-17 11:04:52 +08:00
parent 3286795f98
commit 03a4acb63a
23 changed files with 453 additions and 68 deletions

View File

@@ -116,6 +116,11 @@
<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="partyMember" width="100">
<template slot-scope="scope">
<span>{{ formatPartyMember(scope.row.partyMember) }}</span>
</template>
</el-table-column>
<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>
@@ -217,7 +222,14 @@
<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-col :span="12">
<el-form-item label="是否党员" prop="partyMember">
<el-radio-group v-model="form.partyMember">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status">
@@ -229,10 +241,6 @@
<span>资产信息</span>
<el-button type="primary" plain size="mini" icon="el-icon-plus" @click="handleAddAsset">新增资产</el-button>
</div>
<div class="assets-helper">
<div>新增编辑时无需填写实际持有人身份证号</div>
<div>系统会默认带入并保留已有归属信息</div>
</div>
<el-form-item label-width="0" prop="assetInfoList">
<div v-if="!form.assetInfoList || !form.assetInfoList.length" class="empty-assets">
<i class="el-icon-office-building"></i>
@@ -333,6 +341,9 @@
<el-descriptions-item label="入职时间">
{{ employeeDetail.hireDate ? parseTime(employeeDetail.hireDate, '{y}-{m}-{d}') : '-' }}
</el-descriptions-item>
<el-descriptions-item label="是否党员">
{{ formatPartyMember(employeeDetail.partyMember) }}
</el-descriptions-item>
<el-descriptions-item label="状态">
<el-tag v-if="employeeDetail.status === '0'" type="success" size="small">在职</el-tag>
<el-tag v-else type="danger" size="small">离职</el-tag>
@@ -351,12 +362,6 @@
暂无资产信息
</div>
<el-table v-else :data="employeeDetail.assetInfoList" border class="detail-assets-table">
<el-table-column label="资产实际持有人身份证号" prop="personId" min-width="220" />
<el-table-column label="归属类型" prop="ownerType" min-width="100">
<template slot-scope="scope">
<span>{{ formatAssetOwnerType(scope.row) }}</span>
</template>
</el-table-column>
<el-table-column label="资产大类" prop="assetMainType" min-width="120" />
<el-table-column label="资产小类" prop="assetSubType" min-width="120" />
<el-table-column label="资产名称" prop="assetName" min-width="140" />
@@ -429,7 +434,7 @@
<el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline;" @click="importAssetTemplate">下载员工资产模板</el-link>
</div>
<div class="el-upload__tip" slot="tip">
<span>仅支持导入员工本人资产数据文件需为"xls""xlsx"格式系统将根据 personId/person_id 自动识别归属员工</span>
<span>仅支持导入员工本人资产数据文件需为"xls""xlsx"格式导入身份证号需与员工本人一致</span>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
@@ -460,12 +465,17 @@
style="margin-bottom: 15px"
/>
<el-table :data="failureList" v-loading="failureLoading">
<el-table :data="failureList" v-loading="failureLoading">
<el-table-column label="姓名" prop="name" align="center" />
<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="partyMember" align="center" width="100">
<template slot-scope="scope">
<span>{{ formatPartyMember(scope.row.partyMember) }}</span>
</template>
</el-table-column>
<el-table-column label="失败原因" prop="errorMessage" align="center" min-width="200" :show-overflow-tooltip="true" />
</el-table>
@@ -622,6 +632,9 @@ export default {
annualIncome: [
{ validator: (rule, value, callback) => this.validateAnnualIncomeRule(value, callback, "年收入"), trigger: "blur" }
],
partyMember: [
{ required: true, message: "请选择是否党员", trigger: "change" }
],
status: [
{ required: true, message: "请选择状态", trigger: "change" }
]
@@ -701,8 +714,14 @@ export default {
}
},
watch: {
'form.idCard'(newIdCard, oldIdCard) {
this.syncAssetPersonIds(newIdCard, oldIdCard);
'form.idCard'(newIdCard) {
if (!Array.isArray(this.form.assetInfoList)) {
return;
}
this.form.assetInfoList = this.form.assetInfoList.map(asset => ({
...asset,
personId: newIdCard || ""
}));
}
},
created() {
@@ -956,6 +975,7 @@ export default {
phone: null,
annualIncome: null,
hireDate: null,
partyMember: 0,
status: "0",
relatives: [],
assetInfoList: []
@@ -1008,7 +1028,6 @@ export default {
},
validateAssetInfoList(assetInfoList) {
const requiredFields = [
{ key: "personId", label: "资产实际持有人身份证号" },
{ key: "assetMainType", label: "资产大类" },
{ key: "assetSubType", label: "资产小类" },
{ key: "assetName", label: "资产名称" },
@@ -1033,11 +1052,6 @@ export default {
}
}
if (!idCardPattern.test(asset.personId)) {
this.$modal.msgError(`${rowNo}条资产的资产实际持有人身份证号格式不正确`);
return false;
}
for (const field of numericFields) {
const value = asset[field.key];
if (value !== null && value !== undefined && String(value).trim() !== "") {
@@ -1056,9 +1070,9 @@ export default {
return true;
},
createEmptyAssetRow(defaultPersonId = "") {
createEmptyAssetRow() {
return {
personId: defaultPersonId || "",
personId: this.form.idCard || "",
assetMainType: "",
assetSubType: "",
assetName: "",
@@ -1080,29 +1094,11 @@ export default {
return value !== null && value !== undefined && String(value).trim() !== "";
});
},
syncAssetPersonIds(newIdCard, oldIdCard) {
if (!Array.isArray(this.form.assetInfoList)) {
return;
}
this.form.assetInfoList = this.form.assetInfoList.map(asset => {
if (!asset || typeof asset !== "object") {
return asset;
}
const shouldSync = !asset.personId || asset.personId === oldIdCard;
if (!shouldSync) {
return asset;
}
return {
...asset,
personId: newIdCard || ""
};
});
},
handleAddAsset() {
if (!Array.isArray(this.form.assetInfoList)) {
this.form.assetInfoList = [];
}
this.form.assetInfoList.push(this.createEmptyAssetRow(this.form.idCard));
this.form.assetInfoList.push(this.createEmptyAssetRow());
},
handleRemoveAsset(index) {
if (!Array.isArray(this.form.assetInfoList)) {
@@ -1110,11 +1106,14 @@ export default {
}
this.form.assetInfoList.splice(index, 1);
},
formatAssetOwnerType(asset) {
if (!asset) {
return "-";
formatPartyMember(value) {
if (value === 1 || value === "1") {
return "";
}
return asset.personId && asset.personId === this.employeeDetail.idCard ? "本人" : "亲属";
if (value === 0 || value === "0") {
return "否";
}
return "-";
},
/** 搜索按钮操作 */
handleQuery() {
@@ -1159,6 +1158,7 @@ export default {
getBaseStaff(staffId).then(response => {
this.form = {
...response.data,
partyMember: response.data.partyMember !== null && response.data.partyMember !== undefined ? response.data.partyMember : 0,
assetInfoList: response.data.assetInfoList || []
};
this.form.annualIncome = response.data.annualIncome;
@@ -1673,16 +1673,6 @@ export default {
margin-right: 20px;
}
.employee-edit-dialog .assets-helper {
margin: -4px 0 12px;
padding: 10px 12px;
background: #f4f8ff;
border: 1px solid #d9ecff;
border-radius: 6px;
color: #606266;
line-height: 1.8;
}
.employee-edit-dialog .assets-table-wrapper {
width: 100%;
overflow-x: auto;