@@ -79,6 +79,13 @@
|
||||
/>
|
||||
</el-select>
|
||||
</template>
|
||||
<template #kingdeeCompanyCode-form>
|
||||
<el-input
|
||||
v-model="form.kingdeeCompanyCode"
|
||||
disabled
|
||||
placeholder="关联组织中配置的平台公司金蝶代码"
|
||||
/>
|
||||
</template>
|
||||
</avue-crud>
|
||||
</basic-container>
|
||||
</template>
|
||||
@@ -185,8 +192,11 @@ export default {
|
||||
prop: 'kingdeeCompanyCode',
|
||||
minWidth: 140,
|
||||
span: 12,
|
||||
maxlength: 64,
|
||||
rules: [{ required: true, message: '请输入金蝶公司代码', trigger: 'blur' }],
|
||||
formslot: true,
|
||||
addDisplay: true,
|
||||
editDisplay: true,
|
||||
// 列表展示,维护入口在组织管理的平台公司
|
||||
hide: false,
|
||||
},
|
||||
{
|
||||
label: '初始流水号',
|
||||
@@ -197,6 +207,7 @@ export default {
|
||||
minRows: 1,
|
||||
maxRows: 999,
|
||||
controls: false,
|
||||
clearable: true,
|
||||
slot: true,
|
||||
placeholder: '如果系统已有相同流水号,则跳过这个流水号',
|
||||
},
|
||||
@@ -250,6 +261,14 @@ export default {
|
||||
};
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
// Avue number 清空后可能回写成 -1,统一清成空,避免未填却落库 -1
|
||||
'form.initialSerial'(value) {
|
||||
if (value === -1 || value === '-1') {
|
||||
this.form.initialSerial = undefined;
|
||||
}
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.loadSelectOptions();
|
||||
},
|
||||
@@ -270,65 +289,94 @@ export default {
|
||||
return (list || []).map(item => ({
|
||||
label: item.deptName || item.fullName || String(item.id),
|
||||
value: String(item.id),
|
||||
kingdeeDeptCode: item.kingdeeDeptCode || '',
|
||||
}));
|
||||
},
|
||||
formatSerial(value) {
|
||||
if (value === null || value === undefined || value === '') return '-';
|
||||
// Avue number 空值常落成 -1,历史脏数据也按空展示
|
||||
if (value === null || value === undefined || value === '' || value === -1 || value === '-1') {
|
||||
return '';
|
||||
}
|
||||
const number = Number(value);
|
||||
if (!Number.isInteger(number) || number < 1) return String(value);
|
||||
if (!Number.isInteger(number) || number < 1) return '';
|
||||
return String(number).padStart(3, '0');
|
||||
},
|
||||
/** 初始流水号空值归一:未填 / -1 都按空处理,禁止自动落库 -1 */
|
||||
normalizeInitialSerial(value) {
|
||||
if (value === '' || value === undefined || value === null || value === -1 || value === '-1') {
|
||||
return null;
|
||||
}
|
||||
const number = Number(value);
|
||||
return Number.isFinite(number) ? number : null;
|
||||
},
|
||||
handlePlatformCompanyChange(value) {
|
||||
const matched = this.platformCompanyOptions.find(item => String(item.value) === String(value));
|
||||
this.form.platformCompanyName = matched ? matched.label : '';
|
||||
// 只读回填组织中平台公司的金蝶公司代码
|
||||
this.form.kingdeeCompanyCode = matched ? matched.kingdeeDeptCode || '' : '';
|
||||
},
|
||||
handleBusinessDeptChange(value) {
|
||||
const matched = this.businessDeptOptions.find(item => String(item.value) === String(value));
|
||||
this.form.businessDeptName = matched ? matched.label : '';
|
||||
},
|
||||
beforeOpen(done, type) {
|
||||
this.loadSelectOptions();
|
||||
const loadOptions = Promise.all([getPlatformCompanySelect(), getBusinessDeptSelect()]).then(
|
||||
([platformRes, businessRes]) => {
|
||||
this.platformCompanyOptions = this.normalizeDeptOptions(platformRes?.data?.data);
|
||||
this.businessDeptOptions = this.normalizeDeptOptions(businessRes?.data?.data);
|
||||
const platformColumn = this.findColumn(this.option.column, 'platformCompanyId');
|
||||
if (platformColumn) platformColumn.dicData = this.platformCompanyOptions;
|
||||
const businessColumn = this.findColumn(this.option.column, 'businessDeptId');
|
||||
if (businessColumn) businessColumn.dicData = this.businessDeptOptions;
|
||||
}
|
||||
);
|
||||
if (['edit', 'view'].includes(type) && this.form.id) {
|
||||
getDetail(this.form.id).then(res => {
|
||||
const detail = res.data?.data || {};
|
||||
Promise.all([loadOptions, getDetail(this.form.id)]).then(([, detailRes]) => {
|
||||
const detail = detailRes.data?.data || {};
|
||||
const platformCompanyId = detail.platformCompanyId ? String(detail.platformCompanyId) : '';
|
||||
const platformMatched = this.platformCompanyOptions.find(
|
||||
item => String(item.value) === platformCompanyId
|
||||
);
|
||||
this.form = {
|
||||
...detail,
|
||||
platformCompanyId: detail.platformCompanyId ? String(detail.platformCompanyId) : '',
|
||||
platformCompanyId,
|
||||
businessDeptId: detail.businessDeptId ? String(detail.businessDeptId) : '',
|
||||
// 展示以组织当前配置为准,避免配置表镜像滞后
|
||||
kingdeeCompanyCode: platformMatched?.kingdeeDeptCode || detail.kingdeeCompanyCode || '',
|
||||
// 历史 -1 / 无效值在表单中显示为空,避免 Avue number 回显 -1
|
||||
initialSerial: this.normalizeInitialSerial(detail.initialSerial) ?? undefined,
|
||||
};
|
||||
done();
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (type === 'add') {
|
||||
this.form = {
|
||||
platformCompanyId: '',
|
||||
platformCompanyName: '',
|
||||
businessDeptId: '',
|
||||
businessDeptName: '',
|
||||
contractCodePrefix: '',
|
||||
initialSerial: undefined,
|
||||
kingdeeCompanyCode: '',
|
||||
kingdeeDeptCode: '',
|
||||
remark: '',
|
||||
};
|
||||
}
|
||||
done();
|
||||
loadOptions.finally(() => {
|
||||
if (type === 'add') {
|
||||
this.form = {
|
||||
platformCompanyId: '',
|
||||
platformCompanyName: '',
|
||||
businessDeptId: '',
|
||||
businessDeptName: '',
|
||||
contractCodePrefix: '',
|
||||
initialSerial: undefined,
|
||||
kingdeeCompanyCode: '',
|
||||
kingdeeDeptCode: '',
|
||||
remark: '',
|
||||
};
|
||||
}
|
||||
done();
|
||||
});
|
||||
},
|
||||
normalizeSubmitRow(row) {
|
||||
const initialSerial =
|
||||
row.initialSerial === '' || row.initialSerial === undefined || row.initialSerial === null
|
||||
? null
|
||||
: Number(row.initialSerial);
|
||||
return {
|
||||
...row,
|
||||
platformCompanyId: row.platformCompanyId || null,
|
||||
businessDeptId: row.businessDeptId || null,
|
||||
contractCodePrefix: String(row.contractCodePrefix || '').trim(),
|
||||
kingdeeCompanyCode: String(row.kingdeeCompanyCode || '').trim(),
|
||||
// 金蝶公司代码由后端按平台公司组织配置覆盖,前端仅展示
|
||||
kingdeeDeptCode: String(row.kingdeeDeptCode || '').trim(),
|
||||
remark: String(row.remark || '').trim(),
|
||||
initialSerial: Number.isFinite(initialSerial) ? initialSerial : null,
|
||||
initialSerial: this.normalizeInitialSerial(row.initialSerial),
|
||||
};
|
||||
},
|
||||
rowSave(row, done, loading) {
|
||||
|
||||
@@ -408,6 +408,7 @@ export default {
|
||||
searchOrder: 2,
|
||||
searchPlaceholder: '请选择是否平台公司',
|
||||
formatter: row => (Number(row.isPlatformCompany) === 1 ? '是' : '否'),
|
||||
change: ({ value }) => this.handlePlatformCompanyChange(value),
|
||||
rules: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
@@ -421,6 +422,37 @@ export default {
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: '金蝶公司代码',
|
||||
prop: 'kingdeeDeptCode',
|
||||
minWidth: 140,
|
||||
order: 35,
|
||||
maxlength: 64,
|
||||
showWordLimit: true,
|
||||
// 仅平台公司维护/展示金蝶公司代码;非平台公司列表留空
|
||||
addDisplay: false,
|
||||
editDisplay: false,
|
||||
viewDisplay: false,
|
||||
formatter: row =>
|
||||
Number(row.isPlatformCompany) === 1 ? String(row.kingdeeDeptCode || '').trim() : '',
|
||||
rules: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
const code = String(value || '').trim();
|
||||
if (!code) {
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
if (code.length > 64) {
|
||||
callback(new Error('金蝶公司代码不能超过64个字符'));
|
||||
return;
|
||||
}
|
||||
callback();
|
||||
},
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: '是否业务部门',
|
||||
prop: 'isBusinessDept',
|
||||
@@ -961,6 +993,21 @@ export default {
|
||||
normalizeYesNoFlag(value) {
|
||||
return Number(value) === 1 ? 1 : 0;
|
||||
},
|
||||
handlePlatformCompanyChange(value) {
|
||||
const isPlatform = Number(value) === 1;
|
||||
this.syncKingdeeCompanyCodeDisplay(isPlatform);
|
||||
if (!isPlatform && this.form) {
|
||||
this.form.kingdeeDeptCode = '';
|
||||
}
|
||||
},
|
||||
syncKingdeeCompanyCodeDisplay(isPlatformCompany) {
|
||||
const column = this.findColumn(this.option.column, 'kingdeeDeptCode');
|
||||
if (!column) return;
|
||||
const visible = Number(isPlatformCompany) === 1;
|
||||
column.addDisplay = visible;
|
||||
column.editDisplay = visible;
|
||||
column.viewDisplay = visible;
|
||||
},
|
||||
resolveDeptCategoryValue(value) {
|
||||
if (value === null || value === undefined || value === '') {
|
||||
this.$message.warning('请选择组织类型');
|
||||
@@ -1261,6 +1308,9 @@ export default {
|
||||
rowSave(row, done, loading) {
|
||||
row.tenantId = row.tenantId || this.userInfo.tenantId || website.tenantId;
|
||||
row.deptCode = String(row.deptCode || '').trim();
|
||||
// 金蝶公司代码仅平台公司维护
|
||||
row.kingdeeDeptCode =
|
||||
Number(row.isPlatformCompany) === 1 ? String(row.kingdeeDeptCode || '').trim() : '';
|
||||
row.leaderId = func.join(row.leaderId);
|
||||
this.normalizeTopParent(row);
|
||||
if (!this.prepareDeptSubmitRow(row)) {
|
||||
@@ -1306,6 +1356,9 @@ export default {
|
||||
rowUpdate(row, index, done, loading) {
|
||||
row.tenantId = row.tenantId || this.userInfo.tenantId || website.tenantId;
|
||||
row.deptCode = String(row.deptCode || '').trim();
|
||||
// 金蝶公司代码仅平台公司维护
|
||||
row.kingdeeDeptCode =
|
||||
Number(row.isPlatformCompany) === 1 ? String(row.kingdeeDeptCode || '').trim() : '';
|
||||
row.leaderId = func.join(row.leaderId);
|
||||
this.normalizeTopParent(row);
|
||||
if (!this.prepareDeptSubmitRow(row)) {
|
||||
@@ -1414,6 +1467,7 @@ export default {
|
||||
this.form.tenantId = this.form.tenantId || this.userInfo.tenantId || website.tenantId;
|
||||
this.form.isPlatformCompany = this.normalizeYesNoFlag(this.form.isPlatformCompany);
|
||||
this.form.isBusinessDept = this.normalizeYesNoFlag(this.form.isBusinessDept);
|
||||
this.syncKingdeeCompanyCodeDisplay(this.form.isPlatformCompany);
|
||||
this.initData(this.form.tenantId);
|
||||
this.loadParentDeptCode(this.form.parentId);
|
||||
done();
|
||||
@@ -1435,6 +1489,7 @@ export default {
|
||||
if (this.form.parentId === '0') {
|
||||
this.form.parentId = '';
|
||||
}
|
||||
this.syncKingdeeCompanyCodeDisplay(this.form.isPlatformCompany);
|
||||
this.loadParentDeptCode(this.form.parentId);
|
||||
if (Object.prototype.hasOwnProperty.call(this.form, 'leaderId')) {
|
||||
const splitResult = func.split(this.form.leaderId);
|
||||
|
||||
Reference in New Issue
Block a user