|
@@ -165,15 +165,17 @@
|
|
|
<span class="salary-summary">{{ salarySummary }}</span>
|
|
<span class="salary-summary">{{ salarySummary }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
<el-row :gutter="16">
|
|
<el-row :gutter="16">
|
|
|
|
|
+ <!-- 金额框一律 :controls="false":右侧 40px 的上下箭头会盖住输入区,
|
|
|
|
|
+ 点在箭头区不聚焦输入框(表现为「第一下点击没反应」);金额也不需要 ±500 步进 -->
|
|
|
<el-col :xs="24" :sm="8"><el-form-item label="薪资下限" prop="salaryMin"
|
|
<el-col :xs="24" :sm="8"><el-form-item label="薪资下限" prop="salaryMin"
|
|
|
data-field-anchor="field-salaryMin"><el-input-number v-model="form.salaryMin" :min="0"
|
|
data-field-anchor="field-salaryMin"><el-input-number v-model="form.salaryMin" :min="0"
|
|
|
- :step="500" controls-position="right" class="full-width"
|
|
|
|
|
|
|
+ :controls="false" :precision="0" class="full-width"
|
|
|
@change="syncSalaryMid" /></el-form-item></el-col>
|
|
@change="syncSalaryMid" /></el-form-item></el-col>
|
|
|
<el-col :xs="24" :sm="8"><el-form-item label="薪资中位值"><el-input-number v-model="form.salaryMid"
|
|
<el-col :xs="24" :sm="8"><el-form-item label="薪资中位值"><el-input-number v-model="form.salaryMid"
|
|
|
- :min="0" :step="500" controls-position="right" class="full-width" /></el-form-item></el-col>
|
|
|
|
|
|
|
+ :min="0" :controls="false" :precision="0" class="full-width" /></el-form-item></el-col>
|
|
|
<el-col :xs="24" :sm="8"><el-form-item label="薪资上限" prop="salaryMax"
|
|
<el-col :xs="24" :sm="8"><el-form-item label="薪资上限" prop="salaryMax"
|
|
|
data-field-anchor="field-salaryMax"><el-input-number v-model="form.salaryMax" :min="0"
|
|
data-field-anchor="field-salaryMax"><el-input-number v-model="form.salaryMax" :min="0"
|
|
|
- :step="500" controls-position="right" class="full-width"
|
|
|
|
|
|
|
+ :controls="false" :precision="0" class="full-width"
|
|
|
@change="syncSalaryMid" /></el-form-item></el-col>
|
|
@change="syncSalaryMid" /></el-form-item></el-col>
|
|
|
<el-col :xs="24" :sm="12"><el-form-item label="薪资模板"><el-select v-model="form.salaryTemplateId"
|
|
<el-col :xs="24" :sm="12"><el-form-item label="薪资模板"><el-select v-model="form.salaryTemplateId"
|
|
|
filterable allow-create default-first-option class="full-width"
|
|
filterable allow-create default-first-option class="full-width"
|
|
@@ -1048,7 +1050,11 @@ export default {
|
|
|
promote: this.normalizePromote(source.promote),
|
|
promote: this.normalizePromote(source.promote),
|
|
|
levels: [],
|
|
levels: [],
|
|
|
};
|
|
};
|
|
|
- this.dutyText = (this.form.duties || []).join("\n");
|
|
|
|
|
|
|
+ /* 优先用接口原始 dutyContent 回填(adaptPosition.dutyText):
|
|
|
|
|
+ 退回 duties.join("\n") 会丢掉行首序号、并把原文的「;」换成换行(2026-10-28) */
|
|
|
|
|
+ this.dutyText =
|
|
|
|
|
+ this.form.dutyText ||
|
|
|
|
|
+ (Array.isArray(this.form.duties) ? this.form.duties.join("\n") : "");
|
|
|
if (this.isUpdate) {
|
|
if (this.isUpdate) {
|
|
|
// 编辑:优先用接口返回的每层级配置,再按序列启用层级补齐缺失项
|
|
// 编辑:优先用接口返回的每层级配置,再按序列启用层级补齐缺失项
|
|
|
const seqLevels = this.fetchEnabledLevels(this.form.positionSequence);
|
|
const seqLevels = this.fetchEnabledLevels(this.form.positionSequence);
|
|
@@ -1559,7 +1565,11 @@ export default {
|
|
|
/* 所属部门:界面已下线该字段,历史数据这一列存的是「机构 id」(dept_id NOT NULL)。
|
|
/* 所属部门:界面已下线该字段,历史数据这一列存的是「机构 id」(dept_id NOT NULL)。
|
|
|
departments 由 index.vue 构建时主动剔除了机构节点,所以机构 id 在 departments 里必然找不到,
|
|
departments 由 index.vue 构建时主动剔除了机构节点,所以机构 id 在 departments 里必然找不到,
|
|
|
原逻辑会把「合法历史数据」判成非法并锁死保存。此处把机构节点本身也视为合法归属,
|
|
原逻辑会把「合法历史数据」判成非法并锁死保存。此处把机构节点本身也视为合法归属,
|
|
|
- 只有既不是部门、也不是任何机构 id 的野值才拦截。 */
|
|
|
|
|
|
|
+ 只有既不是部门、也不是任何机构 id 的野值才拦截。
|
|
|
|
|
+ ★ 2026-10-28 合并说明:本地分支曾整段删除该校验(理由是同字段已在模板注释下线),
|
|
|
|
|
+ 与上游这次「机构节点也算合法归属」的修法目标一致(都是避免把合法历史数据判死),
|
|
|
|
|
+ 这里保留上游版本——它多拦住了真正的野值,且 deptId 在 validate 前已由 normalizeDeptId()
|
|
|
|
|
+ 归一到当前机构 id,正常编辑不会被这条拦住。 */
|
|
|
const deptKey = String(this.form.deptId ?? "").trim();
|
|
const deptKey = String(this.form.deptId ?? "").trim();
|
|
|
const department = this.departments.find(
|
|
const department = this.departments.find(
|
|
|
(item) => String(item.id) === deptKey,
|
|
(item) => String(item.id) === deptKey,
|