From 6a415a072a98d64d2f95d16eef73b6d7270b8d56 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期六, 30 五月 2026 15:14:25 +0800
Subject: [PATCH] 新疆马铃薯 1.首页问题:挪新系统ui,需要确认一下页面数据完整。 2.协同办公:挪新系统 3.营销管理:客户往来取消回款金额字段,改为点击左侧客户时显示与该客户的所有订单信息,以及发货情况。销售可以选好对应的采购订单方便质量追溯。 4.采购管理:供应商往来同上逻辑,显示是否收货,也加上采购退货和采购报表功能。 5.采购加上设备备件选项,设备备件入库到备件库存。设备,仓储不足时做采购提醒。 6.仓储物流:得区分成品库和原料库(不存在半成品,成品只有一个产品,很好确认),原材料需要有批号,采集原料库需要做好仓库字段,让他们可以区分哪个仓库,然后把数采设备信息做一个实时的显示。总库存显示好当前存在的批次信息。 7.质量:只有不通过才需要填写对应的数据信息。在外侧做好选择通过不通过。过程,出厂检验无法对应到生产订单,那就对应到销售订单。 8.决策分析:基础数据分析和进销存分析,质量数据分析需要重新设计

---
 src/views/officeProcessAutomation/ApproveManage/approve-shared/approvalTemplateBindingUtils.js |   91 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 91 insertions(+), 0 deletions(-)

diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-shared/approvalTemplateBindingUtils.js b/src/views/officeProcessAutomation/ApproveManage/approve-shared/approvalTemplateBindingUtils.js
new file mode 100644
index 0000000..d68016f
--- /dev/null
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-shared/approvalTemplateBindingUtils.js
@@ -0,0 +1,91 @@
+import {
+  mapAttachmentsFromApi,
+  mapTemplateFromApi,
+  unwrapTemplateDetail,
+} from "../approve-template/approveTemplateConstants.js";
+import { buildSubmitTemplateFromRow } from "../approve-template/formConfigUtils.js";
+import {
+  createEmptySubmitForm,
+  validateSubmitFlowNodes,
+} from "../approve-list/approveListConstants.js";
+
+export function attachmentDisplayName(file) {
+  return (
+    file?.fileName ||
+    file?.originalFilename ||
+    file?.name ||
+    file?.blobName ||
+    "闄勪欢"
+  );
+}
+
+/** 鎺ュ彛璇︽儏 鈫� 鎻愪氦缁戝畾蹇収锛堝惈娴佺▼銆侀檮浠躲�佸~鎶ラ」锛� */
+export function buildTemplateBindingFromDetail(detailRow) {
+  const mapped = mapTemplateFromApi(unwrapTemplateDetail(detailRow));
+  const templateAttachments = mapAttachmentsFromApi(mapped);
+  const tpl = {
+    ...buildSubmitTemplateFromRow(mapped),
+    templateId: mapped.id,
+    businessType: mapped.businessType,
+    storageBlobDTOs: templateAttachments,
+  };
+  const base = createEmptySubmitForm(String(mapped.id ?? ""), tpl, mapped.flowNodes);
+  return {
+    templateId: mapped.id,
+    templateName: mapped.templateName || tpl.label || "",
+    businessType: mapped.businessType ?? "",
+    templateSnapshot: tpl,
+    formFieldDefs: tpl.fields || [],
+    formPayload: base.formPayload,
+    flowNodes: base.flowNodes,
+    templateAttachments: JSON.parse(JSON.stringify(templateAttachments)),
+    storageBlobDTOs: [],
+  };
+}
+
+/** 鏍规嵁妯℃澘 fields 鐢熸垚 el-form rules锛坧rop 涓� formPayload.xxx锛� */
+export function buildFormPayloadRules(fields = []) {
+  const rules = {};
+  (fields || []).forEach((f) => {
+    if (!f.required || !f.key) return;
+    const prop = `formPayload.${f.key}`;
+    if (f.type === "number") {
+      rules[prop] = [{ required: true, message: `璇峰~鍐�${f.label}`, trigger: "blur" }];
+    } else if (f.type === "datetimerange" || f.type === "date" || f.type === "select") {
+      rules[prop] = [{ required: true, message: `璇烽�夋嫨${f.label}`, trigger: "change" }];
+    } else {
+      rules[prop] = [{ required: true, message: `璇峰~鍐�${f.label}`, trigger: "blur" }];
+    }
+  });
+  return rules;
+}
+
+/** 鏍¢獙妯℃澘缁戝畾锛氬鎵规祦绋嬶紙闄勪欢閫夊~锛岀敱鐢ㄦ埛鑷涓婁紶锛� */
+export function validateTemplateBinding({ flowNodes }) {
+  const flowCheck = validateSubmitFlowNodes(flowNodes);
+  if (!flowCheck.ok) return flowCheck;
+  return { ok: true, nodes: flowCheck.nodes };
+}
+
+/** 鍚堝苟缁戝畾缁撴灉鍒颁笟鍔¤〃鍗曞璞★紙瀛楁鍚嶅彲鎸変笟鍔¤鐩栵級 */
+export function applyBindingToForm(target, binding, fieldMap = {}) {
+  if (!target || !binding) return target;
+  const map = {
+    templateId: "templateId",
+    templateName: "templateName",
+    businessType: "businessType",
+    templateSnapshot: "templateSnapshot",
+    formFieldDefs: "formFieldDefs",
+    formPayload: "formPayload",
+    flowNodes: "flowNodes",
+    templateAttachments: "templateAttachments",
+    storageBlobDTOs: "storageBlobDTOs",
+    ...fieldMap,
+  };
+  Object.entries(map).forEach(([srcKey, destKey]) => {
+    if (binding[srcKey] !== undefined) {
+      target[destKey] = binding[srcKey];
+    }
+  });
+  return target;
+}

--
Gitblit v1.9.3