|
|
@@ -96,7 +96,8 @@
|
|
|
★ 2026-10-28 编辑态回显改成接口 deptName 文本:原来按 deptId 去部门树里找节点显示名称,
|
|
|
节点匹配不到或撞上机构根节点时就会显示成机构名字(用户实拍:主所属部门显示成机构名)。
|
|
|
名称只认详情接口 deptName,取不到就留空提示,不拿机构名 / 隶属部门拼串顶替。 -->
|
|
|
- <el-form-item label="主所属部门" :prop="isEdit ? undefined : 'primaryDeptId'">
|
|
|
+ <!-- required:编辑态 prop 置空不参与校验,但星号要一直展示(2026-10-29 用户要求) -->
|
|
|
+ <el-form-item label="主所属部门" required :prop="isEdit ? undefined : 'primaryDeptId'">
|
|
|
<el-input v-if="isEdit" :value="primaryDeptName" disabled
|
|
|
:placeholder="primaryDeptName ? '' : '接口未返回部门名称(deptName),请后端补充'" />
|
|
|
<el-cascader v-else :key="`primary-dept-${form.groupId || 'none'}`" v-model="form.primaryDeptId"
|
|
|
@@ -113,9 +114,22 @@
|
|
|
class="full-width dept-multi-cascader" :disabled="isEdit || !form.groupId"
|
|
|
:placeholder="deptCascaderPlaceholder"
|
|
|
@change="handleOrganizationChange" /></el-form-item>
|
|
|
+ <!-- 所属工厂:与所属机构级联(2026-10-29 用户要求),只能选当前机构下的工厂;
|
|
|
+ 未选机构时禁用。编辑态仍整体只读(与其它字段口径一致)。 -->
|
|
|
+ <el-form-item label="所属工厂">
|
|
|
+ <el-select v-model="form.factoryId" filterable clearable class="full-width"
|
|
|
+ :loading="factoryLoading" :disabled="isEdit || !form.groupId"
|
|
|
+ :placeholder="form.groupId ? '请选择所属工厂' : '请先选择所属机构'" @change="handleFactoryChange">
|
|
|
+ <el-option v-for="item in factoryOptions" :key="String(item.id)" :label="item.name"
|
|
|
+ :value="item.id" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <!-- 岗位链路级联来源 = 主所属部门(2026-10-29 用户确认:主所属部门 → 岗位序列 → 岗位 → 性质/层级)。
|
|
|
+ 编辑态:已有值保持只读;空白时放开编辑,允许补选(2026-10-29 用户要求)。 -->
|
|
|
<el-form-item label="岗位序列" prop="positionSequenceId">
|
|
|
<el-select v-model="form.positionSequenceId" filterable clearable class="full-width"
|
|
|
- :loading="sequenceLoading" :disabled="isEdit || !hasDept" :placeholder="hasDept ? '请选择岗位序列' : '请先选择隶属部门'"
|
|
|
+ :loading="sequenceLoading" :disabled="(isEdit && hasPositionSequence) || !hasPrimaryDept"
|
|
|
+ :placeholder="hasPrimaryDept ? '请选择岗位序列' : '请先选择主所属部门'"
|
|
|
@change="handlePositionSequenceChange">
|
|
|
<el-option v-for="item in sequenceOptions" :key="`seq-${String(item.id)}`" :label="item.name"
|
|
|
:value="String(item.id)" />
|
|
|
@@ -123,7 +137,8 @@
|
|
|
</el-form-item>
|
|
|
<el-form-item label="岗位" prop="positionId">
|
|
|
<el-select :key="`position-select-${positionSelectKey}`" v-model="form.positionId" filterable
|
|
|
- clearable class="full-width" :loading="positionLoading" :disabled="isEdit || !hasPositionSequence"
|
|
|
+ clearable class="full-width" :loading="positionLoading"
|
|
|
+ :disabled="(isEdit && Boolean(form.positionId)) || !hasPositionSequence"
|
|
|
:placeholder="hasPositionSequence ? '请选择岗位' : '请先选择岗位序列'" @change="handlePositionChange">
|
|
|
<el-option v-for="item in positionOptions" :key="`pos-${String(item.id)}`"
|
|
|
:label="positionOptionLabel(item)" :value="String(item.id)" />
|
|
|
@@ -131,25 +146,21 @@
|
|
|
</el-form-item>
|
|
|
<el-form-item label="岗位性质" prop="employmentType"><el-select
|
|
|
v-model="form.employmentType" filterable
|
|
|
- clearable class="full-width" :disabled="isEdit" :placeholder="form.positionId ? '请选择岗位性质' : '请先选择岗位'"
|
|
|
+ clearable class="full-width" :disabled="isEdit && Boolean(form.employmentType)"
|
|
|
+ :placeholder="form.positionId ? '请选择岗位性质' : '请先选择岗位'"
|
|
|
@change="syncEmploymentTypeName">
|
|
|
<el-option v-for="item in employmentOptions" :key="item.key || item.value" :label="item.label"
|
|
|
:value="item.value" />
|
|
|
</el-select></el-form-item>
|
|
|
<el-form-item label="岗位层级" prop="staffingLevel"><el-select
|
|
|
v-model="form.staffingLevel"
|
|
|
- class="full-width" :disabled="isEdit || !staffingLevelOptions.length"
|
|
|
+ class="full-width"
|
|
|
+ :disabled="(isEdit && Boolean(form.staffingLevel)) || !staffingLevelOptions.length"
|
|
|
:placeholder="form.positionId ? '请选择岗位层级' : '请先选择岗位'" @change="handleStaffingLevelChange">
|
|
|
<el-option v-for="item in staffingLevelOptions" :key="item" :label="item"
|
|
|
:value="item" /></el-select></el-form-item>
|
|
|
- <!-- 是否启用:2026-10-28 用户要求放到左列末尾(岗位层级之下),与右列时间/状态区分开 -->
|
|
|
- <el-form-item label="是否启用">
|
|
|
- <div class="enable-field"><el-switch v-model="form.enabled" active-color="#18a875" /><span>{{
|
|
|
- form.enabled ? '启用' :
|
|
|
- '待岗' }}</span></div>
|
|
|
- </el-form-item>
|
|
|
</el-col>
|
|
|
- <!-- 右列:账号、工厂、直属上级与时间状态 -->
|
|
|
+ <!-- 右列:账号、直属上级与时间状态(所属工厂 2026-10-29 移到左列隶属部门之下) -->
|
|
|
<el-col :xs="24" :sm="12">
|
|
|
<el-form-item label="用户账号"><el-input v-model.trim="form.account"
|
|
|
maxlength="30" placeholder="系统登录账号,支持自动生成、手动修改"><template
|
|
|
@@ -158,13 +169,6 @@
|
|
|
v-model.trim="form.employeeNo" maxlength="20" placeholder="集团全局唯一" disabled><el-button
|
|
|
v-if="!isEdit" slot="append"
|
|
|
@click="generateEmployeeNo">生成</el-button></el-input></el-form-item>
|
|
|
- <el-form-item label="所属工厂">
|
|
|
- <el-select v-model="form.factoryId" filterable clearable class="full-width"
|
|
|
- :loading="factoryLoading" :disabled="isEdit" placeholder="请选择所属工厂" @change="handleFactoryChange">
|
|
|
- <el-option v-for="item in factoryOptions" :key="String(item.id)" :label="item.name"
|
|
|
- :value="item.id" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
<el-form-item label="直属上级">
|
|
|
<el-select v-model="form.managerId" filterable remote clearable class="full-width"
|
|
|
:loading="managerLoading" :disabled="isEdit" :remote-method="searchManagers" placeholder="输入姓名/工号搜索全员"
|
|
|
@@ -182,6 +186,12 @@
|
|
|
<el-form-item label="员工状态" prop="status"><el-select v-model="form.status"
|
|
|
class="full-width" :disabled="isEdit"><el-option v-for="item in statusOptions" :key="item.value" :label="item.label"
|
|
|
:value="item.value" /></el-select></el-form-item>
|
|
|
+ <!-- 是否启用:2026-10-29 用户要求放到右列末尾(员工状态之下) -->
|
|
|
+ <el-form-item label="是否启用">
|
|
|
+ <div class="enable-field"><el-switch v-model="form.enabled" active-color="#18a875" /><span>{{
|
|
|
+ form.enabled ? '启用' :
|
|
|
+ '待岗' }}</span></div>
|
|
|
+ </el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
|
|
|
@@ -809,14 +819,10 @@ export default {
|
|
|
},
|
|
|
trigger: 'change',
|
|
|
}],
|
|
|
+ /* 隶属部门:非必填(2026-10-29 用户要求),保留校验器仅为占位口径统一,空值直接放行 */
|
|
|
deptIds: [{
|
|
|
- required: true,
|
|
|
validator: (rule, value, callback) => {
|
|
|
if (this._skipFormValidate) return callback();
|
|
|
- if (!this.normalizeDeptIds(value).length) {
|
|
|
- callback(new Error('请选择隶属部门'));
|
|
|
- return;
|
|
|
- }
|
|
|
callback();
|
|
|
},
|
|
|
trigger: 'change',
|
|
|
@@ -1047,15 +1053,17 @@ export default {
|
|
|
});
|
|
|
return mark(this.deptOptions);
|
|
|
},
|
|
|
- hasDept() {
|
|
|
- return this.normalizeDeptIds(this.form.deptIds).length > 0;
|
|
|
+ /* 岗位链路级联开关:只看主所属部门(2026-10-29 用户确认级联来源改为主所属部门) */
|
|
|
+ hasPrimaryDept() {
|
|
|
+ return this.form.primaryDeptId != null && this.form.primaryDeptId !== '';
|
|
|
},
|
|
|
hasPositionSequence() {
|
|
|
return Boolean(this.form.positionSequenceId);
|
|
|
},
|
|
|
requiredProgress() {
|
|
|
- // 与 form rules 一一对应(含主所属部门 / 身份证 / 隶属部门 / 岗位序列 / 岗位性质 / 岗位层级),保证「必填 x/y」口径准确
|
|
|
- const keys = ['name', 'employeeNo', 'gender', 'idCard', 'groupId', 'primaryDeptId', 'deptIds', 'status', 'hireDate', 'positionSequenceId', 'positionId', 'employmentType', 'staffingLevel', 'phone'];
|
|
|
+ // 与 form rules 一一对应(含主所属部门 / 身份证 / 岗位序列 / 岗位性质 / 岗位层级),保证「必填 x/y」口径准确
|
|
|
+ // 隶属部门 deptIds 已改非必填(2026-10-29),不进必填计数(仍留在 sectionProgress 完整度统计里)
|
|
|
+ const keys = ['name', 'employeeNo', 'gender', 'idCard', 'groupId', 'primaryDeptId', 'status', 'hireDate', 'positionSequenceId', 'positionId', 'employmentType', 'staffingLevel', 'phone'];
|
|
|
return { base: `${keys.filter((key) => { const value = this.form[key]; return Array.isArray(value) ? value.length : Boolean(value); }).length}/${keys.length}` };
|
|
|
},
|
|
|
sectionProgress() {
|
|
|
@@ -1293,9 +1301,9 @@ export default {
|
|
|
/* 新增员工默认带出所属机构(登录机构列表第一个) */
|
|
|
this.applyDefaultLegalEntity();
|
|
|
this.normalizeDeptAgainstOptions();
|
|
|
+ /* 工厂与机构级联(2026-10-29 用户要求):等机构(含新增默认带出)就绪后再按机构拉工厂 */
|
|
|
+ this.loadFactories().then(() => this.syncFactoryDisplay());
|
|
|
});
|
|
|
- /* 所属工厂与机构、部门互不关联:并行加载,不等机构 */
|
|
|
- this.loadFactories().then(() => this.syncFactoryDisplay());
|
|
|
this.syncAge();
|
|
|
if (!this.employee) this.generateEmployeeNo();
|
|
|
this.$nextTick(() => {
|
|
|
@@ -1841,7 +1849,9 @@ export default {
|
|
|
}
|
|
|
return null;
|
|
|
},
|
|
|
- applyDeptIds(ids, { resetDependents = false } = {}) {
|
|
|
+ /* 2026-10-29 岗位链路级联来源改为主所属部门,隶属部门变化不再影响岗位链路,
|
|
|
+ 因此不再有 resetDependents 重置逻辑 */
|
|
|
+ applyDeptIds(ids) {
|
|
|
const list = this.normalizeDeptIds(ids).filter(
|
|
|
(id) => String(id) !== String(this.form.groupId || ''),
|
|
|
);
|
|
|
@@ -1856,10 +1866,6 @@ export default {
|
|
|
.filter(Boolean)
|
|
|
.join('、');
|
|
|
}
|
|
|
- if (resetDependents) {
|
|
|
- /* 直属上级不再随部门联动,这里只重置岗位 */
|
|
|
- this.resetPositionsByDepartment();
|
|
|
- }
|
|
|
},
|
|
|
/** 新增员工默认带出所属机构:登录机构列表第一个(命中法人组织选项时才填充) */
|
|
|
applyDefaultLegalEntity() {
|
|
|
@@ -1875,7 +1881,7 @@ export default {
|
|
|
this.form.groupId = String(hit.id);
|
|
|
},
|
|
|
handleOrganizationChange(ids) {
|
|
|
- this.applyDeptIds(ids, { resetDependents: true });
|
|
|
+ this.applyDeptIds(ids);
|
|
|
this.$nextTick(() => this.$refs.form?.validateField('deptIds'));
|
|
|
},
|
|
|
/**
|
|
|
@@ -1892,18 +1898,22 @@ export default {
|
|
|
input.setAttribute('placeholder', want);
|
|
|
}
|
|
|
},
|
|
|
- /* 所属机构切换:只重置依赖机构的部门 / 岗位级联。
|
|
|
- 所属工厂与机构、部门互不关联(工厂列表是独立的平铺数据),这里保持已选工厂不动;
|
|
|
- 直属上级已改为全员搜索,与机构/部门解耦,同样保持已选直属上级不动 */
|
|
|
+ /* 所属机构切换:重置依赖机构的部门 / 岗位级联,并按新机构重拉工厂(清空已选工厂);
|
|
|
+ 直属上级已改为全员搜索,与机构/部门解耦,保持已选直属上级不动 */
|
|
|
handleLegalEntityChange() {
|
|
|
this.deptCascaderKey += 1;
|
|
|
/* 机构变了,机构下的部门树整棵换掉 → 已选主所属部门 / 隶属部门都失效,一并清空 */
|
|
|
this.form.primaryDeptId = '';
|
|
|
this.applyDeptIds([]);
|
|
|
this.resetPositionsByDepartment();
|
|
|
- },
|
|
|
- /* 主所属部门选中:把该部门从隶属部门里剔除(两者不允许重复,与参考项目 checkedKeys 一致) */
|
|
|
- handlePrimaryDeptChange(id) {
|
|
|
+ /* 工厂与机构级联(2026-10-29 用户要求):换机构后原工厂不再属于新机构,清空并按新机构重拉 */
|
|
|
+ this.form.factoryId = null;
|
|
|
+ this.form.factory = '';
|
|
|
+ this.loadFactories();
|
|
|
+ },
|
|
|
+ /* 主所属部门选中:把该部门从隶属部门里剔除(两者不允许重复,与参考项目 checkedKeys 一致);
|
|
|
+ 岗位链路(序列/岗位/性质/层级)级联来源 = 主所属部门 → 主部门变了整段重置重拉 */
|
|
|
+ async handlePrimaryDeptChange(id) {
|
|
|
const picked = id == null || id === '' ? '' : String(id);
|
|
|
if (!picked) return;
|
|
|
const current = this.normalizeDeptIds(this.form.deptIds);
|
|
|
@@ -1911,6 +1921,7 @@ export default {
|
|
|
if (rest.length !== current.length) {
|
|
|
this.applyDeptIds(rest);
|
|
|
}
|
|
|
+ await this.resetPositionsByDepartment();
|
|
|
},
|
|
|
/* 在组织树里按 id 找节点(主所属部门要拿机构节点做置灰根节点) */
|
|
|
findOrgNodeById(id, nodes = this.organizationTree.length ? this.organizationTree : this.organizations) {
|
|
|
@@ -2040,14 +2051,20 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
/**
|
|
|
- * 所属工厂:直接取工厂列表接口 /main/factoryarea/page(type=1 工厂)。
|
|
|
- * ★ 工厂与所属机构、隶属部门不层级关联:不按机构过滤、也不从组织树里捞,
|
|
|
- * 换机构不影响工厂下拉;接口失败直接报错,不做兜底。
|
|
|
+ * 所属工厂:取工厂列表接口 /main/factoryarea/page(type=1 工厂)。
|
|
|
+ * ★ 2026-10-29 用户要求:工厂与所属机构级联——只能选当前机构下的工厂。
|
|
|
+ * 服务端按 groupId 过滤(swagger /main/factoryarea/page 支持 groupId 参数);
|
|
|
+ * 未选机构时不发请求,下拉为空。
|
|
|
*/
|
|
|
async loadFactories() {
|
|
|
+ const groupId = this.form.groupId;
|
|
|
+ if (groupId == null || groupId === '') {
|
|
|
+ this.factoryOptions = [];
|
|
|
+ return;
|
|
|
+ }
|
|
|
this.factoryLoading = true;
|
|
|
try {
|
|
|
- const data = await getFactoryAreaPage();
|
|
|
+ const data = await getFactoryAreaPage({ groupId });
|
|
|
const list = Array.isArray(data?.list) ? data.list : Array.isArray(data) ? data : [];
|
|
|
this.factoryOptions = list
|
|
|
.map((item) => ({
|
|
|
@@ -2055,8 +2072,11 @@ export default {
|
|
|
name: item.name || item.factoryName || item.pathName || `工厂 ${item.id}`,
|
|
|
code: item.code || '',
|
|
|
enabled: item.enabled,
|
|
|
+ /* 行自带 groupId 时用于客户端复核(防止服务端过滤参数失效);没带就不过滤 */
|
|
|
+ groupId: item.groupId == null ? null : String(item.groupId),
|
|
|
}))
|
|
|
- .filter((item) => item.id && item.name);
|
|
|
+ .filter((item) => item.id && item.name)
|
|
|
+ .filter((item) => item.groupId == null || item.groupId === String(groupId));
|
|
|
} catch (error) {
|
|
|
this.factoryOptions = [];
|
|
|
this.$message.error(error.message || '工厂列表加载失败');
|
|
|
@@ -2339,7 +2359,7 @@ export default {
|
|
|
this.hrPositionIdSet = {};
|
|
|
this.positionLoading = false;
|
|
|
},
|
|
|
- /** 隶属部门变化:清空岗位序列及以下级联,并按新的部门并集重新拉序列 */
|
|
|
+ /** 主所属部门(或所属机构)变化:清空岗位序列及以下级联,并按主所属部门重新拉序列 */
|
|
|
async resetPositionsByDepartment() {
|
|
|
this.clearPositionCascade();
|
|
|
this.form.positionSequenceId = '';
|
|
|
@@ -2407,12 +2427,15 @@ export default {
|
|
|
return this.isNumericId(raw) ? String(raw).trim() : '';
|
|
|
},
|
|
|
/**
|
|
|
- * 隶属部门(可多选)→ 岗位序列下拉:逐部门取序列后并集去重
|
|
|
+ * 主所属部门 → 岗位序列下拉(2026-10-29 用户确认:级联来源从隶属部门改为主所属部门)
|
|
|
* GET /fm/tmaindepartmentposition/sequence/list
|
|
|
*/
|
|
|
async loadPositionSequences() {
|
|
|
- const deptIds = this.normalizeDeptIds(this.form.deptIds);
|
|
|
- if (!deptIds.length) {
|
|
|
+ const deptId =
|
|
|
+ this.form.primaryDeptId == null || this.form.primaryDeptId === ''
|
|
|
+ ? ''
|
|
|
+ : String(this.form.primaryDeptId);
|
|
|
+ if (!deptId) {
|
|
|
this.sequenceOptions = [];
|
|
|
this.sequenceLoading = false;
|
|
|
return;
|
|
|
@@ -2420,22 +2443,16 @@ export default {
|
|
|
this.sequenceLoading = true;
|
|
|
let requestFailed = false;
|
|
|
try {
|
|
|
- const groups = await Promise.all(
|
|
|
- deptIds.map((deptId) =>
|
|
|
- getDepartmentPositionSequences(deptId).catch(() => {
|
|
|
- requestFailed = true;
|
|
|
- return [];
|
|
|
- }),
|
|
|
- ),
|
|
|
- );
|
|
|
+ const data = await getDepartmentPositionSequences(deptId).catch(() => {
|
|
|
+ requestFailed = true;
|
|
|
+ return [];
|
|
|
+ });
|
|
|
const map = new Map();
|
|
|
- groups
|
|
|
- .flatMap((data) => this.toOptionList(data))
|
|
|
- .forEach((item) => {
|
|
|
- if (!item || item.positionSequenceId == null || item.positionSequenceId === '') return;
|
|
|
- const id = String(item.positionSequenceId);
|
|
|
- if (!map.has(id)) map.set(id, { id, name: item.positionSequence || '' });
|
|
|
- });
|
|
|
+ this.toOptionList(data).forEach((item) => {
|
|
|
+ if (!item || item.positionSequenceId == null || item.positionSequenceId === '') return;
|
|
|
+ const id = String(item.positionSequenceId);
|
|
|
+ if (!map.has(id)) map.set(id, { id, name: item.positionSequence || '' });
|
|
|
+ });
|
|
|
const list = Array.from(map.values());
|
|
|
const currentId = this.form.positionSequenceId ? String(this.form.positionSequenceId) : '';
|
|
|
if (currentId && !list.some((item) => item.id === currentId)) {
|
|
|
@@ -2446,8 +2463,8 @@ export default {
|
|
|
}
|
|
|
this.sequenceOptions = list;
|
|
|
if (!list.length && !requestFailed) {
|
|
|
- // 所选部门下没有维护任何岗位序列(接口异常时不误报):引导去组织机构的岗位信息里维护
|
|
|
- this.warnEmptySequences(deptIds);
|
|
|
+ // 主所属部门下没有维护任何岗位序列(接口异常时不误报):引导去组织机构的岗位信息里维护
|
|
|
+ this.warnEmptySequences([deptId]);
|
|
|
}
|
|
|
} catch (error) {
|
|
|
this.sequenceOptions = [];
|
|
|
@@ -2475,13 +2492,16 @@ export default {
|
|
|
});
|
|
|
},
|
|
|
/**
|
|
|
- * 隶属部门 + 岗位序列 → 岗位下拉(多部门并集,逐项记录来源部门用于带出性质)
|
|
|
+ * 主所属部门 + 岗位序列 → 岗位下拉(2026-10-29 级联来源改为主所属部门)
|
|
|
* GET /fm/tmaindepartmentposition/position/list
|
|
|
*/
|
|
|
async loadDepartmentPositions() {
|
|
|
- const deptIds = this.normalizeDeptIds(this.form.deptIds);
|
|
|
+ const deptId =
|
|
|
+ this.form.primaryDeptId == null || this.form.primaryDeptId === ''
|
|
|
+ ? ''
|
|
|
+ : String(this.form.primaryDeptId);
|
|
|
const positionSequenceId = this.form.positionSequenceId;
|
|
|
- if (!deptIds.length || !positionSequenceId) {
|
|
|
+ if (!deptId || !positionSequenceId) {
|
|
|
this.positionOptions = [];
|
|
|
this.hrPositionIdSet = {};
|
|
|
this.positionLoading = false;
|
|
|
@@ -2489,15 +2509,9 @@ export default {
|
|
|
}
|
|
|
this.positionLoading = true;
|
|
|
try {
|
|
|
- const groups = await Promise.all(
|
|
|
- deptIds.map(async (deptId) => {
|
|
|
- const data = await getDepartmentPositions({ deptId, positionSequenceId }).catch(() => []);
|
|
|
- return this.toOptionList(data).map((item) => ({ ...item, deptId }));
|
|
|
- }),
|
|
|
- );
|
|
|
+ const data = await getDepartmentPositions({ deptId, positionSequenceId }).catch(() => []);
|
|
|
const sequenceName = this.form.positionSequence || this.form.positionSequenceName || '';
|
|
|
- const list = groups
|
|
|
- .flat()
|
|
|
+ const list = this.toOptionList(data)
|
|
|
.filter((item) => item && item.positionId != null && String(item.positionName || '').trim())
|
|
|
.map((item) => {
|
|
|
const name = String(item.positionName || '').trim();
|
|
|
@@ -2506,7 +2520,7 @@ export default {
|
|
|
positionId: String(item.positionId),
|
|
|
positionName: name,
|
|
|
name,
|
|
|
- deptId: item.deptId,
|
|
|
+ deptId,
|
|
|
sequenceId: String(positionSequenceId),
|
|
|
positionSequenceId: String(positionSequenceId),
|
|
|
positionSequence: sequenceName,
|