钉钉审批功能完善、混炼示方新增是否附加料

This commit is contained in:
geht
2026-06-10 15:41:02 +08:00
parent de48bd2324
commit 39a9bd83f1
37 changed files with 2461 additions and 166 deletions

View File

@@ -694,11 +694,32 @@ export const downStepColumns: JVxeColumn[] = [...stepColumns];
//update-begin---author:cursor ---date:20260522 for【XSLMES-20260522-A19】TCU温度条件表列宽可调且表头换行-----------
/** TCU 温度条件明细列宽偏好 localStorage 键 */
export const MIXING_TCU_COLUMN_WIDTH_CACHE_KEY = 'mes_xsl_mixing_spec_tcu_column_widths_v2';
export const MIXING_TCU_COLUMN_WIDTH_CACHE_KEY = 'mes_xsl_mixing_spec_tcu_column_widths_v3';
/** TCU 温度条件明细列可缩小到的最小宽度 */
export const MIXING_TCU_MIN_COLUMN_WIDTH = 48;
/** TCU 是否附加:否 */
export const MIXING_TCU_ATTACH_NO = '0';
/** TCU 是否附加:是 */
export const MIXING_TCU_ATTACH_YES = '1';
/** 判断 TCU 行是否允许维护附加重量 */
export function isMixingTcuAttachEnabled(value: unknown): boolean {
return value === 1 || value === '1' || value === true;
}
/** 规范化 TCU 行是否附加/重量联动 */
export function normalizeMixingTcuAttachRow(row: Recordable) {
if (row.isAttach == null || row.isAttach === '') {
row.isAttach = MIXING_TCU_ATTACH_NO;
}
if (!isMixingTcuAttachEnabled(row.isAttach)) {
row.attachWeight = undefined;
}
}
export const tcuColumns: JVxeColumn[] = [
//update-begin---author:cursor ---date:20260522 for【XSLMES-20260522-A33】TCU区分固定上/下密炼机-----------
{ title: '区分', key: 'sectionType', type: JVxeTypes.select, dictCode: 'xslmes_mixing_tcu_section', disabled: true, width: 96, minWidth: MIXING_TCU_MIN_COLUMN_WIDTH, align: 'center' },
@@ -709,6 +730,29 @@ export const tcuColumns: JVxeColumn[] = [
{ title: '后混炼室温度', key: 'rearChamberTemp', type: JVxeTypes.inputNumber, width: 76, minWidth: MIXING_TCU_MIN_COLUMN_WIDTH, align: 'center' },
{ title: '上下顶栓温度', key: 'topPlugTemp', type: JVxeTypes.inputNumber, width: 76, minWidth: MIXING_TCU_MIN_COLUMN_WIDTH, align: 'center' },
{ title: '药品称量位置', key: 'drugWeighPos', type: JVxeTypes.select, dictCode: 'xslmes_mixing_drug_weigh_pos', width: 76, minWidth: MIXING_TCU_MIN_COLUMN_WIDTH, align: 'center' },
//update-begin---author:GHT ---date:2026-06-10 for【混炼示方】TCU温度条件新增是否附加/重量-----------
{
title: '是否附加',
key: 'isAttach',
type: JVxeTypes.select,
dictCode: 'yn',
defaultValue: MIXING_TCU_ATTACH_NO,
width: 76,
minWidth: MIXING_TCU_MIN_COLUMN_WIDTH,
align: 'center',
},
{
title: '重量',
key: 'attachWeight',
type: JVxeTypes.inputNumber,
width: 76,
minWidth: MIXING_TCU_MIN_COLUMN_WIDTH,
align: 'center',
props: {
isDisabledCell: ({ row }: { row?: Recordable }) => !isMixingTcuAttachEnabled(row?.isAttach),
},
},
//update-end---author:GHT ---date:2026-06-10 for【混炼示方】TCU温度条件新增是否附加/重量-----------
];
/** 读取已保存的 TCU 温度条件明细列宽 */
@@ -1012,11 +1056,15 @@ export const MIXING_TCU_UP_MIXER_DRUG_WEIGH_POS = 'drug_scale';
export function buildDefaultMixingTcuRows(rows: Recordable[] = []): Recordable[] {
const up =
rows.find((r) => r.sectionType === 'up_mixer') ||
({ sectionType: 'up_mixer', drugWeighPos: MIXING_TCU_UP_MIXER_DRUG_WEIGH_POS } as Recordable);
({ sectionType: 'up_mixer', drugWeighPos: MIXING_TCU_UP_MIXER_DRUG_WEIGH_POS, isAttach: MIXING_TCU_ATTACH_NO } as Recordable);
if (up.sectionType === 'up_mixer' && !up.drugWeighPos) {
up.drugWeighPos = MIXING_TCU_UP_MIXER_DRUG_WEIGH_POS;
}
const down = rows.find((r) => r.sectionType === 'down_mixer') || ({ sectionType: 'down_mixer', drugWeighPos: undefined } as Recordable);
const down =
rows.find((r) => r.sectionType === 'down_mixer') ||
({ sectionType: 'down_mixer', drugWeighPos: undefined, isAttach: MIXING_TCU_ATTACH_NO } as Recordable);
normalizeMixingTcuAttachRow(up);
normalizeMixingTcuAttachRow(down);
return [up, down];
}
//update-end---author:cursor ---date:20260522 for【XSLMES-20260522-A33】TCU默认两行及上密炼机药品称默认值-----------

View File

@@ -510,6 +510,8 @@ import {
DEFAULT_MIXING_STEP_ROW_COUNT,
DEFAULT_MIXING_DOWN_STEP_ROW_COUNT,
buildDefaultMixingTcuRows,
isMixingTcuAttachEnabled,
MIXING_TCU_ATTACH_NO,
applyMixingMaterialFromSelection,
fillMixingMaterialAccumWeight,
calcMixingMaterialUnitWeightTotal,
@@ -534,6 +536,8 @@ import {
MIXING_STEP_MIN_COLUMN_WIDTH,
} from '../MesXslMixingSpec.data';
import { saveOrUpdate, queryById } from '../MesXslMixingSpec.api';
import { resolveFormulaSpecUserDisplayName } from '/@/views/xslmes/mesXslFormulaSpec/MesXslFormulaSpec.data';
import { MIXING_SPEC_BIZ_TABLE, loadRecordWithTrace } from '/@/views/xslmes/approval/integration/traceRecordHelper';
import MesXslMixingMaterialColumnSetting from './MesXslMixingMaterialColumnSetting.vue';
import MesXslMixingTableRowHeightSetting from './MesXslMixingTableRowHeightSetting.vue';
import MesXslMixingStepSelectCell from './MesXslMixingStepSelectCell.vue';
@@ -949,15 +953,23 @@ function formatSignDate(value?: string) {
}
function refreshSignDisplay(row: Recordable = {}) {
signDisplay.draftBy = row.draftBy || row.createBy_dictText || row.createBy || '';
const userInfo = userStore.getUserInfo || {};
//update-begin---author:GHT ---date:2026-06-10 for【混炼示方】页脚起草人/变更人展示姓名-----------
signDisplay.draftBy = resolveFormulaSpecUserDisplayName(
row.draftBy || row.createBy,
row.draftBy_dictText || row.createBy_dictText,
userInfo,
);
signDisplay.changeBy = resolveFormulaSpecUserDisplayName(row.updateBy, row.updateBy_dictText, userInfo);
//update-end---author:GHT ---date:2026-06-10 for【混炼示方】页脚起草人/变更人展示姓名-----------
signDisplay.draftTime = formatSignDateTime(row.draftTime || row.createTime);
signDisplay.proofreadBy = row.proofreadBy || row.proofreadBy_dictText || '';
signDisplay.proofreadTime = formatSignDateTime(row.proofreadTime);
signDisplay.auditBy = row.auditBy || row.auditBy_dictText || '';
signDisplay.auditTime = formatSignDateTime(row.auditTime);
signDisplay.approveBy = row.approveBy || row.approveBy_dictText || '';
signDisplay.approveTime = formatSignDateTime(row.approveTime);
signDisplay.changeBy = row.updateBy_dictText || row.updateBy || '';
// 校对/审核/批准:优先展示痕迹表注入字段
signDisplay.proofreadBy = row.traceProofreadBy || '';
signDisplay.proofreadTime = formatSignDateTime(row.traceProofreadTime);
signDisplay.auditBy = row.traceAuditBy || '';
signDisplay.auditTime = formatSignDateTime(row.traceAuditTime);
signDisplay.approveBy = row.traceApproveBy || '';
signDisplay.approveTime = formatSignDateTime(row.traceApproveTime);
signDisplay.changeDate = formatSignDate(row.changeDate || row.updateTime);
}
//update-end---author:cursor ---date:20260522 for【XSLMES-20260522-A17】页脚签章区只读展示-----------
@@ -1057,8 +1069,7 @@ async function onSpecPickerEdit(payload: Recordable | null) {
return;
}
try {
const raw = await queryById({ id: payload.mixingSpecId });
const row = (raw as Recordable)?.specName != null ? raw : (raw as Recordable)?.result;
const row = await loadRecordWithTrace(payload.mixingSpecId, MIXING_SPEC_BIZ_TABLE, queryById);
if (!row?.id) {
createMessage.warning('未找到混炼示方数据');
return;
@@ -1159,17 +1170,25 @@ function ensureTcuDefaultRows(rows: Recordable[] = []) {
}
function handleTcuValueChange(event) {
//update-begin---author:cursor ---date:20260522 for【XSLMES-20260522-A17】下密炼机禁用药品称量位置-----------
const row = event?.row;
const key = event?.column?.key;
if (!row || key !== 'drugWeighPos') {
if (!row || !key) {
return;
}
if (row.sectionType === 'down_mixer') {
row.drugWeighPos = undefined;
createMessage.warning('下密炼机不允许选择药品称量位置');
//update-begin---author:cursor ---date:20260522 for【XSLMES-20260522-A17】下密炼机禁用药品称量位置-----------
if (key === 'drugWeighPos') {
if (row.sectionType === 'down_mixer') {
row.drugWeighPos = undefined;
createMessage.warning('下密炼机不允许选择药品称量位置');
}
return;
}
//update-end---author:cursor ---date:20260522 for【XSLMES-20260522-A17】下密炼机禁用药品称量位置-----------
//update-begin---author:GHT ---date:2026-06-10 for【混炼示方】TCU是否附加为否时清空重量-----------
if (key === 'isAttach' && !isMixingTcuAttachEnabled(row.isAttach)) {
row.attachWeight = undefined;
}
//update-end---author:GHT ---date:2026-06-10 for【混炼示方】TCU是否附加为否时清空重量-----------
}
function resetSheetForm() {
@@ -1231,8 +1250,7 @@ const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data
await setProps({ disabled: !showFooter.value });
setModalProps({ showOkBtn: showFooter.value, showCancelBtn: showFooter.value, confirmLoading: false });
if (isUpdate.value && data?.record?.id) {
const raw = await queryById({ id: data.record.id });
const row = raw?.result || raw;
const row = await loadRecordWithTrace(data.record.id, MIXING_SPEC_BIZ_TABLE, queryById, data.record);
await applyMixingSpecPageData(row, 'edit');
} else {
const userInfo = userStore.getUserInfo || {};
@@ -1271,7 +1289,9 @@ async function handleSubmit() {
downStepList: cleanRows(downStepList),
tcuList: tcuList.map((row) => ({
...row,
isAttach: row.isAttach ?? MIXING_TCU_ATTACH_NO,
drugWeighPos: row.sectionType === 'down_mixer' ? undefined : row.drugWeighPos,
attachWeight: isMixingTcuAttachEnabled(row.isAttach) ? row.attachWeight : undefined,
})),
};
setModalProps({ confirmLoading: true });