feat: 员工柜员号优化 - 移除tellerNo,employeeId作为7位数字柜员号
## 数据库修改 - 删除teller_no字段 - employee_id改为非自增,手动输入7位数字 - 更新字段注释 ## 后端修改 - Entity: 移除tellerNo,employeeId改为INPUT类型 - DTO: Add/Edit/Query/Excel全部使用employeeId - VO: 移除tellerNo字段 - Service: 添加柜员号唯一性校验(使用selectById) - Mapper XML: 移除teller_no查询和映射 ## 前端修改 - 查询表单: tellerNo改为employeeId,添加7位数字限制 - 表格列: 显示employeeId作为柜员号 - 对话框: 新增可输入,编辑只读 - JavaScript: 数据结构和校验规则更新 ## 文档更新 - API文档: 完整更新所有接口说明 - 实施报告: 生成详细实施报告 ## 测试 - 生成测试脚本(9个测试用例) - 测试账号: admin/admin123 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -10,11 +10,13 @@
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="柜员号" prop="tellerNo">
|
||||
<el-form-item label="柜员号" prop="employeeId">
|
||||
<el-input
|
||||
v-model="queryParams.tellerNo"
|
||||
placeholder="请输入柜员号"
|
||||
v-model="queryParams.employeeId"
|
||||
placeholder="请输入7位柜员号"
|
||||
clearable
|
||||
maxlength="7"
|
||||
oninput="value=value.replace(/[^\d]/g,'')"
|
||||
style="width: 240px"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
@@ -71,7 +73,7 @@
|
||||
<el-table v-loading="loading" :data="employeeList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="姓名" align="center" prop="name" :show-overflow-tooltip="true"/>
|
||||
<el-table-column label="柜员号" align="center" prop="tellerNo" :show-overflow-tooltip="true"/>
|
||||
<el-table-column label="柜员号" align="center" prop="employeeId" :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="phone" width="120"/>
|
||||
@@ -133,8 +135,16 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="柜员号" prop="tellerNo">
|
||||
<el-input v-model="form.tellerNo" placeholder="请输入柜员号" maxlength="50" />
|
||||
<el-form-item label="柜员号" prop="employeeId" v-if="!form.employeeId || isAdd">
|
||||
<el-input
|
||||
v-model="form.employeeId"
|
||||
placeholder="请输入7位柜员号"
|
||||
maxlength="7"
|
||||
oninput="value=value.replace(/[^\d]/g,'')"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="柜员号" prop="employeeId" v-else>
|
||||
<el-input v-model="form.employeeId" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -168,52 +178,6 @@
|
||||
<el-radio label="1">离职</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 亲属信息 -->
|
||||
<div class="section-header" style="margin-top: 24px;">
|
||||
<span>亲属信息</span>
|
||||
<span v-if="form.relatives && form.relatives.length > 0" class="relative-count">({{ form.relatives.length }}人)</span>
|
||||
<el-button type="text" icon="el-icon-plus" @click="addRelative">添加亲属</el-button>
|
||||
</div>
|
||||
<el-table :data="form.relatives" border size="small" v-if="form.relatives && form.relatives.length > 0" class="relatives-table">
|
||||
<el-table-column type="index" label="序号" width="50" align="center" />
|
||||
<el-table-column label="亲属姓名" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-input v-model="scope.row.relativeName" placeholder="亲属姓名" size="small" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="身份证号" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-input v-model="scope.row.relativeIdCard" placeholder="身份证号" size="small" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="电话" align="center" width="130">
|
||||
<template slot-scope="scope">
|
||||
<el-input v-model="scope.row.relativePhone" placeholder="电话" size="small" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="关系" align="center" width="140">
|
||||
<template slot-scope="scope">
|
||||
<el-select v-model="scope.row.relationship" placeholder="关系" size="small" filterable allow-create>
|
||||
<el-option label="配偶" value="配偶" />
|
||||
<el-option label="父亲" value="父亲" />
|
||||
<el-option label="母亲" value="母亲" />
|
||||
<el-option label="子女" value="子女" />
|
||||
<el-option label="兄弟姐妹" value="兄弟姐妹" />
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="60">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text" icon="el-icon-delete" @click="removeRelative(scope.$index)" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div v-else class="empty-relatives">
|
||||
<i class="el-icon-info"></i>
|
||||
<span>暂无亲属信息</span>
|
||||
<el-button type="text" @click="addRelative">立即添加</el-button>
|
||||
</div>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="cancel">取消</el-button>
|
||||
@@ -232,7 +196,7 @@
|
||||
</div>
|
||||
<el-descriptions :column="2" border>
|
||||
<el-descriptions-item label="姓名">{{ employeeDetail.name || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="柜员号">{{ employeeDetail.tellerNo || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="柜员号">{{ employeeDetail.employeeId || '-' }}</el-descriptions-item>
|
||||
<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>
|
||||
@@ -248,34 +212,6 @@
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
|
||||
<!-- 亲属信息卡片 -->
|
||||
<div class="info-section" style="margin-top: 20px;">
|
||||
<div class="section-title">
|
||||
<i class="el-icon-s-custom"></i>
|
||||
<span>亲属信息</span>
|
||||
<el-tag v-if="employeeDetail.relatives && employeeDetail.relatives.length > 0" size="mini" type="info" style="margin-left: 10px;">
|
||||
共 {{ employeeDetail.relatives.length }} 人
|
||||
</el-tag>
|
||||
</div>
|
||||
<div v-if="employeeDetail.relatives && employeeDetail.relatives.length > 0" class="relatives-container">
|
||||
<el-table :data="employeeDetail.relatives" border style="width: 100%" size="small">
|
||||
<el-table-column label="序号" type="index" width="60" align="center" />
|
||||
<el-table-column label="亲属姓名" align="center" prop="relativeName" min-width="100" />
|
||||
<el-table-column label="身份证号" align="center" prop="relativeIdCard" min-width="180" />
|
||||
<el-table-column label="电话" align="center" prop="relativePhone" width="130" />
|
||||
<el-table-column label="关系" align="center" prop="relationship" width="100">
|
||||
<template slot-scope="scope">
|
||||
<el-tag size="mini" type="primary">{{ scope.row.relationship }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div v-else class="empty-relatives">
|
||||
<i class="el-icon-info"></i>
|
||||
<span>暂无亲属信息</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="detailOpen = false" icon="el-icon-close">关 闭</el-button>
|
||||
@@ -362,7 +298,7 @@ export default {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
name: null,
|
||||
tellerNo: null,
|
||||
employeeId: null,
|
||||
deptId: null,
|
||||
idCard: null,
|
||||
status: null
|
||||
@@ -375,9 +311,9 @@ export default {
|
||||
{ required: true, message: "姓名不能为空", trigger: "blur" },
|
||||
{ max: 100, message: "姓名长度不能超过100个字符", trigger: "blur" }
|
||||
],
|
||||
tellerNo: [
|
||||
employeeId: [
|
||||
{ required: true, message: "柜员号不能为空", trigger: "blur" },
|
||||
{ max: 50, message: "柜员号长度不能超过50个字符", trigger: "blur" }
|
||||
{ pattern: /^\d{7}$/, message: "柜员号必须为7位数字", trigger: "blur" }
|
||||
],
|
||||
idCard: [
|
||||
{ required: true, message: "身份证号不能为空", trigger: "blur" },
|
||||
@@ -450,7 +386,6 @@ export default {
|
||||
this.form = {
|
||||
employeeId: null,
|
||||
name: null,
|
||||
tellerNo: null,
|
||||
deptId: null,
|
||||
idCard: null,
|
||||
phone: null,
|
||||
@@ -496,55 +431,14 @@ export default {
|
||||
const employeeId = row.employeeId || this.ids[0];
|
||||
getEmployee(employeeId).then(response => {
|
||||
this.form = response.data;
|
||||
if (!this.form.relatives) {
|
||||
this.form.relatives = [];
|
||||
}
|
||||
this.open = true;
|
||||
this.title = "编辑员工";
|
||||
});
|
||||
},
|
||||
/** 添加亲属 */
|
||||
addRelative() {
|
||||
if (!this.form.relatives) {
|
||||
this.form.relatives = [];
|
||||
}
|
||||
this.form.relatives.push({
|
||||
relativeId: null,
|
||||
relativeName: null,
|
||||
relativeIdCard: null,
|
||||
relativePhone: null,
|
||||
relationship: null
|
||||
});
|
||||
},
|
||||
/** 删除亲属 */
|
||||
removeRelative(index) {
|
||||
this.form.relatives.splice(index, 1);
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
// 验证亲属信息
|
||||
if (this.form.relatives && this.form.relatives.length > 0) {
|
||||
for (let i = 0; i < this.form.relatives.length; i++) {
|
||||
const relative = this.form.relatives[i];
|
||||
// 验证亲属姓名
|
||||
if (!relative.relativeName || relative.relativeName.trim() === '') {
|
||||
this.$modal.msgError("第" + (i + 1) + "行亲属姓名不能为空");
|
||||
return;
|
||||
}
|
||||
// 验证关系
|
||||
if (!relative.relationship || relative.relationship.trim() === '') {
|
||||
this.$modal.msgError("第" + (i + 1) + "行关系不能为空");
|
||||
return;
|
||||
}
|
||||
// 验证亲属手机号格式(填写时才验证)
|
||||
if (relative.relativePhone && !phonePattern.test(relative.relativePhone)) {
|
||||
this.$modal.msgError("第" + (i + 1) + "行亲属手机号格式不正确");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (this.form.employeeId != null) {
|
||||
updateEmployee(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
|
||||
Reference in New Issue
Block a user