@gct-paas/word 0.1.63-beta.6 → 0.1.63-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,11 @@
1
1
  import { Doc } from '../../view/Doc';
2
2
  import { WidgetMeta } from '../../widget';
3
3
  import { DataEnricherRegistration } from '../types';
4
+ /**
5
+ * 用批次号调用 biz_judge_jump,判断是否可超链接。
6
+ * 不可链时返回 null;可链时返回非空字符串(供弹框/跳转使用)。
7
+ */
8
+ export declare function resolveHyperlinkHrefByMaterialNo(materialNo: unknown): Promise<string | null>;
4
9
  type HyperlinkEnricherOptions = Omit<DataEnricherRegistration, 'enrich'> & {
5
10
  doc: Doc;
6
11
  widgetMeta: WidgetMeta;
@@ -0,0 +1,7 @@
1
+ import { Doc } from '../../../../core';
2
+ import { DataEnricherRegistration } from '../../../../core/data';
3
+ import { BusinessSubTableType } from '../../types';
4
+ /**
5
+ * 按业务表类型,仅为该表内的「生产批次号」补全 _href_
6
+ */
7
+ export declare function createProductionContainerHyperlinkEnricher(doc: Doc, tableType: BusinessSubTableType): DataEnricherRegistration;
package/dist/index.es.js CHANGED
@@ -83937,6 +83937,10 @@ function getSelectStrategy(fieldType) {
83937
83937
  if (strategy) return strategy;
83938
83938
  return selectStrategyMap[FIELD_TYPE.REF];
83939
83939
  }
83940
+ const EXCLUDE_FROM_FIELD_TYPES = /* @__PURE__ */ new Set([FIELD_TYPE.BOOLEAN]);
83941
+ function isSelectableFromField(field) {
83942
+ return !EXCLUDE_FROM_FIELD_TYPES.has(field.type);
83943
+ }
83940
83944
  function buildFromFieldTree(currentField, refModelFieldList) {
83941
83945
  return [
83942
83946
  {
@@ -83945,7 +83949,7 @@ function buildFromFieldTree(currentField, refModelFieldList) {
83945
83949
  icon: currentField.icon,
83946
83950
  iconVersion: currentField.version,
83947
83951
  iconColor: "#026ac8",
83948
- children: refModelFieldList.map((item) => ({
83952
+ children: refModelFieldList.filter(isSelectableFromField).map((item) => ({
83949
83953
  label: item.name,
83950
83954
  value: item.key,
83951
83955
  icon: item.icon,
@@ -83976,8 +83980,22 @@ function isSubTableAutofillRule(rule) {
83976
83980
  function isAutofillSubTableTarget(rule, templatePath) {
83977
83981
  return isSubTableAutofillRule(rule) || parseValuePath(templatePath).isSubTable;
83978
83982
  }
83983
+ function resolveLegacyToSubFieldKey(rule, opts) {
83984
+ if (rule.toSubFieldKey) return rule.toSubFieldKey;
83985
+ if (!isSubTableAutofillRule(rule)) return void 0;
83986
+ if (opts?.sourceValuePath) {
83987
+ const parentFieldKey = parseValuePath(opts.sourceValuePath).parentFieldKey;
83988
+ if (parentFieldKey) return parentFieldKey;
83989
+ }
83990
+ return void 0;
83991
+ }
83992
+ function normalizeAutofillRule(rule, opts) {
83993
+ const toSubFieldKey = resolveLegacyToSubFieldKey(rule, opts);
83994
+ if (!toSubFieldKey || toSubFieldKey === rule.toSubFieldKey) return rule;
83995
+ return { ...rule, toSubFieldKey };
83996
+ }
83979
83997
  function buildAutofillTargetTemplatePath(rule) {
83980
- const { toField, toSubFieldKey, toSubModel } = rule;
83998
+ const { toField, toSubFieldKey } = rule;
83981
83999
  if (!toField) return void 0;
83982
84000
  if (isSubTableAutofillRule(rule) && !toSubFieldKey) return void 0;
83983
84001
  return generateValuePath(toField, isSubTableAutofillRule(rule) ? toSubFieldKey : "");
@@ -84022,10 +84040,15 @@ function applyAutofillRules(record, autofillRules, opts) {
84022
84040
  for (const ruleItem of autofillRules) {
84023
84041
  const { fromField } = ruleItem;
84024
84042
  if (!fromField) continue;
84025
- const templatePath = buildAutofillTargetTemplatePath(ruleItem);
84043
+ const normalizedRule = normalizeAutofillRule(ruleItem, opts);
84044
+ const templatePath = buildAutofillTargetTemplatePath(normalizedRule);
84026
84045
  if (!templatePath) continue;
84027
84046
  const value = resolveAutofillSourceValue(record, fromField);
84028
- for (const runtimeValuePath of resolveAutofillRuntimeValuePaths(templatePath, ruleItem, opts)) {
84047
+ for (const runtimeValuePath of resolveAutofillRuntimeValuePaths(
84048
+ templatePath,
84049
+ normalizedRule,
84050
+ opts
84051
+ )) {
84029
84052
  result[runtimeValuePath] = value;
84030
84053
  }
84031
84054
  }
@@ -84417,8 +84440,8 @@ function createCompanionEnricher(reg, config) {
84417
84440
  }
84418
84441
  };
84419
84442
  }
84420
- async function resolveHyperlinkHref(_path, value) {
84421
- if (value == null || value === "") return null;
84443
+ async function resolveHyperlinkHrefByMaterialNo(materialNo) {
84444
+ if (!isPresent(materialNo)) return null;
84422
84445
  try {
84423
84446
  const bool = await api.apaas.modelComprehensive.postBizServiceModelCategoryModelKeyBsKey(
84424
84447
  {
@@ -84426,10 +84449,10 @@ async function resolveHyperlinkHref(_path, value) {
84426
84449
  modelKey: "gct_edhr_instance",
84427
84450
  modelCategory: "entity"
84428
84451
  },
84429
- { materialNo: value },
84452
+ { materialNo },
84430
84453
  {}
84431
84454
  );
84432
- return bool ? String(value) : null;
84455
+ return bool ? String(materialNo) : null;
84433
84456
  } catch {
84434
84457
  return null;
84435
84458
  }
@@ -84440,7 +84463,7 @@ function createHyperlinkEnricher(reg) {
84440
84463
  defaultIdPrefix: "hyperlink:",
84441
84464
  getCompanionPath: getHrefPath,
84442
84465
  buildCacheKey: (path, value) => ({ path, value }),
84443
- resolveCompanion: (path, value) => resolveHyperlinkHref(path, value)
84466
+ resolveCompanion: (_path, value) => resolveHyperlinkHrefByMaterialNo(value)
84444
84467
  });
84445
84468
  }
84446
84469
  function resolveProductId(doc, path) {
@@ -89372,6 +89395,37 @@ const profile$1 = {
89372
89395
  labelBjColor: "rgba(33, 33, 213, 0.8)"
89373
89396
  }
89374
89397
  };
89398
+ const PRODUCTION_CONTAINER_FIELD_KEY = "production_container_id_";
89399
+ function createProductionContainerHyperlinkEnricher(doc, tableType) {
89400
+ const subFieldKeys = new Set(
89401
+ TableRuntimeContext.collectAll(doc).filter((ctx) => ctx.profile.type === tableType).map((ctx) => ctx.subFieldKey)
89402
+ );
89403
+ return createCompanionEnricher(
89404
+ {
89405
+ id: `hyperlink:${tableType}:production-container`,
89406
+ valuePathTemplate: `*.${PRODUCTION_CONTAINER_FIELD_KEY}`,
89407
+ match: (path) => {
89408
+ const parsed = parseSubtableFieldPath(path);
89409
+ if (!parsed || parsed.fieldKey !== PRODUCTION_CONTAINER_FIELD_KEY) return false;
89410
+ return subFieldKeys.has(parsed.subFieldKey);
89411
+ },
89412
+ doc
89413
+ },
89414
+ {
89415
+ cacheNamespace: "hyperlink_enrich_resolve",
89416
+ defaultIdPrefix: "hyperlink:",
89417
+ getCompanionPath: getHrefPath,
89418
+ buildCacheKey: (path, value, currentDoc) => ({
89419
+ path,
89420
+ value,
89421
+ // 生产批次号存的是 id,biz_judge_jump 需用展示批次号(_lb_)
89422
+ // 注意:不要用 dataManager.getLabel(无 _lb_ 时会回落到 id)
89423
+ materialNo: currentDoc.dataManager.get(getLabelPath(path))
89424
+ }),
89425
+ resolveCompanion: (path, _value, currentDoc) => resolveHyperlinkHrefByMaterialNo(currentDoc.dataManager.get(getLabelPath(path)))
89426
+ }
89427
+ );
89428
+ }
89375
89429
  function handleProductionContainerChange$1(doc, subFieldKey, rowIndex) {
89376
89430
  const ctx = getRowChangeCtx(doc, subFieldKey, rowIndex);
89377
89431
  if (!ctx) return;
@@ -89421,81 +89475,12 @@ function resolvePretreatmentListRemoteSync(records, ctx) {
89421
89475
  }
89422
89476
  };
89423
89477
  }
89478
+ registerStaticLabelEnricher((doc) => createProductionContainerHyperlinkEnricher(doc, TABLE_TYPE$1));
89424
89479
  registerRowHandler(TABLE_TYPE$1, "on-production-container-change", handleProductionContainerChange$1);
89425
89480
  registerRowHandler(TABLE_TYPE$1, "on-mfg-order-change", handleMfgOrderChange);
89426
89481
  registerRowHandler(TABLE_TYPE$1, "on-material-container-no-change", handleMaterialContainerNoChange);
89427
89482
  registerRowHandler(TABLE_TYPE$1, "on-product-change", handleProductChange);
89428
89483
  registerRemoteSyncApplyResolver(TABLE_TYPE$1, "remote-sync", resolvePretreatmentListRemoteSync);
89429
- async function openPretreatmentListScan(options) {
89430
- const { doc, subRenderer, subFieldKey } = options;
89431
- const regionProps = subRenderer.widgetMeta?.props;
89432
- await openScanWithParseRule({
89433
- regionId: subRenderer.id,
89434
- barcodeParsingRulesId: regionProps?.barcode_parsing_rules_id_,
89435
- modalEvent: "OPEN_PRETREATMENT_LIST_TABLE_SCAN_MODAL",
89436
- title: subRenderer.tableName || "操作",
89437
- onScan: async (scanInput, { parseRuleProps, scanRuleInfo }) => {
89438
- const ctx = TableRuntimeContext.find(doc, subFieldKey);
89439
- const remoteSync = ctx?.profile.remoteSync;
89440
- if (!ctx || !remoteSync) return;
89441
- const parsed = getParseRuleValue$1(scanInput.str, scanRuleInfo.rules_);
89442
- if (!parsed.lot) {
89443
- GctMessage.error("条码中未解析到批次号");
89444
- return;
89445
- }
89446
- const remoteSyncEngine = new RemoteSyncEngine(doc);
89447
- const requestBody = remoteSyncEngine.buildBody(
89448
- {
89449
- name_: parsed.lot
89450
- },
89451
- remoteSync
89452
- );
89453
- if (!requestBody) {
89454
- GctMessage.error("扫描的物料批次不存在");
89455
- return;
89456
- }
89457
- const { queryData: typeQueryData, exp: typeExp } = buildLikeQuery(
89458
- [],
89459
- "",
89460
- {
89461
- "production_identification_type_.eq": "MATERIAL",
89462
- "production_identification_type_.isNull": null
89463
- },
89464
- {
89465
- filterCombine: "or"
89466
- }
89467
- );
89468
- const queryData = {
89469
- ...typeQueryData,
89470
- ...requestBody
89471
- };
89472
- const nameKeys = Object.keys(requestBody);
89473
- const nameExp = nameKeys.length <= 1 ? nameKeys[0] ?? "" : `AND(${nameKeys.join(",")})`;
89474
- const exp = typeExp && nameExp ? `AND(${nameExp},${typeExp})` : nameExp || typeExp;
89475
- const result = await callBizService(remoteSync.api, {
89476
- query: queryData,
89477
- exp
89478
- });
89479
- const records = unwrapBizServiceList(result);
89480
- if (!records.length) {
89481
- GctMessage.error("扫描的物料批次不存在");
89482
- return;
89483
- }
89484
- const fillData = parseRuleProps?.fillMapArr?.length ? calcFillData(parsed, parseRuleProps.fillMapArr) : {};
89485
- const rows = doc.dataManager.getRawData()[subFieldKey] || [];
89486
- remoteSyncEngine.applySyncResult(ctx, rows.length, remoteSync, records, "", {
89487
- qty_: parsed.qty,
89488
- ...fillData
89489
- });
89490
- }
89491
- });
89492
- }
89493
- async function changePretreatmentListParseRule(options) {
89494
- return changeBarcodeParseRule({
89495
- ...options,
89496
- modalEvent: "OPEN_PRETREATMENT_LIST_TABLE_PARSE_RULE_MODAL"
89497
- });
89498
- }
89499
89484
  const F$1 = {
89500
89485
  /** 产品 */
89501
89486
  product: "product_id_",
@@ -89667,71 +89652,9 @@ function handleProductionContainerChange(doc, subFieldKey, rowIndex) {
89667
89652
  if (!isBlank(ctx.row[F$1.productionContainer])) return;
89668
89653
  applyRowClears(ctx, CLEAR_ON_PROD_CONTAINER_EMPTY);
89669
89654
  }
89655
+ registerStaticLabelEnricher((doc) => createProductionContainerHyperlinkEnricher(doc, TABLE_TYPE));
89670
89656
  registerRowHandler(TABLE_TYPE, "on-production-container-change", handleProductionContainerChange);
89671
89657
  registerRemoteSyncApplyResolver(TABLE_TYPE, "remote-sync", resolveEntrustSterilBatchListRemoteSync);
89672
- async function openEntrustSterilBatchListScan(options) {
89673
- const { doc, subRenderer, subFieldKey } = options;
89674
- const regionProps = subRenderer.widgetMeta?.props;
89675
- await openScanWithParseRule({
89676
- regionId: subRenderer.id,
89677
- barcodeParsingRulesId: regionProps?.barcode_parsing_rules_id_,
89678
- modalEvent: "OPEN_ENTRUST_STERIL_BATCH_LIST_TABLE_SCAN_MODAL",
89679
- title: subRenderer.tableName || "操作",
89680
- onScan: async (scanInput, { parseRuleProps, scanRuleInfo }) => {
89681
- const ctx = TableRuntimeContext.find(doc, subFieldKey);
89682
- const remoteSync = ctx?.profile.remoteSync;
89683
- if (!ctx || !remoteSync) return;
89684
- const parsed = getParseRuleValue$1(scanInput.str, scanRuleInfo.rules_);
89685
- if (!parsed.lot) {
89686
- GctMessage.error("条码中未解析到批次号");
89687
- return;
89688
- }
89689
- const remoteSyncEngine = new RemoteSyncEngine(doc);
89690
- const requestBody = remoteSyncEngine.buildBody(
89691
- {
89692
- name_: parsed.lot
89693
- },
89694
- remoteSync
89695
- );
89696
- if (!requestBody) {
89697
- GctMessage.error("扫描的物料批次不存在");
89698
- return;
89699
- }
89700
- const { queryData: typeQueryData, exp: typeExp } = buildLikeQuery([], "", {
89701
- "production_identification_type_.in": ["LOT", "SN"],
89702
- is_rework_: 0
89703
- });
89704
- const queryData = {
89705
- ...typeQueryData,
89706
- ...requestBody
89707
- };
89708
- const nameKeys = Object.keys(requestBody);
89709
- const nameExp = nameKeys.length <= 1 ? nameKeys[0] ?? "" : `AND(${nameKeys.join(",")})`;
89710
- const exp = typeExp && nameExp ? `AND(${nameExp},${typeExp})` : nameExp || typeExp;
89711
- const result = await callBizService(remoteSync.api, {
89712
- query: queryData,
89713
- exp
89714
- });
89715
- const records = unwrapBizServiceList(result);
89716
- if (!records.length) {
89717
- GctMessage.error("扫描的物料批次不存在");
89718
- return;
89719
- }
89720
- const fillData = parseRuleProps?.fillMapArr?.length ? calcFillData(parsed, parseRuleProps.fillMapArr) : {};
89721
- const rows = doc.dataManager.getRawData()[subFieldKey] || [];
89722
- remoteSyncEngine.applySyncResult(ctx, rows.length, remoteSync, records, "", {
89723
- qty_: parsed.qty,
89724
- ...fillData
89725
- });
89726
- }
89727
- });
89728
- }
89729
- async function changeEntrustSterilBatchListParseRule(options) {
89730
- return changeBarcodeParseRule({
89731
- ...options,
89732
- modalEvent: "OPEN_ENTRUST_STERIL_BATCH_LIST_TABLE_PARSE_RULE_MODAL"
89733
- });
89734
- }
89735
89658
  const ALL_TABLE_PROFILES = [
89736
89659
  profile$a,
89737
89660
  profile$9,
@@ -91821,6 +91744,7 @@ class WsecPr extends ModelNode {
91821
91744
  * 从原始 XML JSON 转换为 WsecPr 实例
91822
91745
  */
91823
91746
  static fromXmlJson(json) {
91747
+ const { paperSize } = json;
91824
91748
  const pgSzRaw = pickElement(json, "w:pgSz");
91825
91749
  const pageSize = pgSzRaw ? {
91826
91750
  width: pgSzRaw["@attrs"]?.["w:w"] ? parseInt(pgSzRaw["@attrs"]["w:w"]) : void 0,
@@ -91849,6 +91773,7 @@ class WsecPr extends ModelNode {
91849
91773
  const titlePg = pickElement(json, "w:titlePg");
91850
91774
  return new WsecPr({
91851
91775
  attrs: json["@attrs"],
91776
+ paperSize,
91852
91777
  pageSize,
91853
91778
  margins,
91854
91779
  columns: columns2,
@@ -102527,9 +102452,9 @@ class Section {
102527
102452
  return { ...res, paperSize };
102528
102453
  }
102529
102454
  getPaperSize() {
102530
- const ps = this.wsecPr?.pageSize;
102531
- const mmWidth = UnitConverter.twipToMm(ps.width);
102532
- const mmHeight = UnitConverter.twipToMm(ps.height);
102455
+ const twipPageSize = this.wsecPr?.pageSize;
102456
+ const mmWidth = UnitConverter.twipToMm(twipPageSize.width);
102457
+ const mmHeight = UnitConverter.twipToMm(twipPageSize.height);
102533
102458
  const w2 = Math.min(mmWidth, mmHeight);
102534
102459
  const h2 = Math.max(mmWidth, mmHeight);
102535
102460
  const tolerance = 3;
@@ -102766,6 +102691,10 @@ class LayoutManager {
102766
102691
  while (remainingTable) {
102767
102692
  const page = this.pageContext.page;
102768
102693
  const pageRemainingSize = page.getRemainingSize();
102694
+ const firstRowHeight = remainingTable?.children?.[0]?._height;
102695
+ if (firstRowHeight && firstRowHeight > pageRemainingSize) {
102696
+ break;
102697
+ }
102769
102698
  const { cur, next } = splitTableByHeight(remainingTable, pageRemainingSize);
102770
102699
  const newRowIds = [];
102771
102700
  const trModelIds = cur?.getChildren().map((item) => item.modelRef?.id) || [];
@@ -108073,6 +108002,34 @@ const DefaultDocxJson = {
108073
108002
  fontTable,
108074
108003
  footers
108075
108004
  };
108005
+ const updatePgSzElInfo = (pgSz, paperSize, options) => {
108006
+ const direction = options?.direction ?? "portrait";
108007
+ let width = 11906;
108008
+ let height = 16838;
108009
+ switch (paperSize) {
108010
+ case PaperSizeConst.A3:
108011
+ width = 16838;
108012
+ height = 23811;
108013
+ break;
108014
+ case PaperSizeConst.A5:
108015
+ width = 8391;
108016
+ height = 11906;
108017
+ break;
108018
+ case PaperSizeConst.CUSTOM:
108019
+ width = Number(UnitConverter.mmToTwip(options.width));
108020
+ height = Number(UnitConverter.mmToTwip(options.height));
108021
+ break;
108022
+ default:
108023
+ width = 11906;
108024
+ height = 16838;
108025
+ break;
108026
+ }
108027
+ if (direction === "landscape") {
108028
+ [width, height] = [height, width];
108029
+ }
108030
+ pgSz["@attrs"]["w:w"] = String(width);
108031
+ pgSz["@attrs"]["w:h"] = String(height);
108032
+ };
108076
108033
  class RuntimeJsonBuilder {
108077
108034
  json;
108078
108035
  constructor(base) {
@@ -108097,32 +108054,7 @@ class RuntimeJsonBuilder {
108097
108054
  setPageSize(paperSize, options) {
108098
108055
  const pgSz = this.findNode(this.json.document, "w:pgSz");
108099
108056
  if (!pgSz) return this;
108100
- const direction = options?.direction ?? "portrait";
108101
- let width = 11906;
108102
- let height = 16838;
108103
- switch (paperSize) {
108104
- case PaperSizeConst.A3:
108105
- width = 16838;
108106
- height = 23811;
108107
- break;
108108
- case PaperSizeConst.A5:
108109
- width = 8391;
108110
- height = 11906;
108111
- break;
108112
- case PaperSizeConst.CUSTOM:
108113
- width = Number(UnitConverter.mmToTwip(options.width));
108114
- height = Number(UnitConverter.mmToTwip(options.height));
108115
- break;
108116
- default:
108117
- width = 11906;
108118
- height = 16838;
108119
- break;
108120
- }
108121
- if (direction === "landscape") {
108122
- [width, height] = [height, width];
108123
- }
108124
- pgSz["@attrs"]["w:w"] = String(width);
108125
- pgSz["@attrs"]["w:h"] = String(height);
108057
+ updatePgSzElInfo(pgSz, paperSize, options);
108126
108058
  return this;
108127
108059
  }
108128
108060
  /**
@@ -108841,7 +108773,17 @@ class MCDataUtil {
108841
108773
  * @param rowPath $.f_sub[n] n 必须为数字
108842
108774
  */
108843
108775
  static updateConfirmableFieldsDisablement(option) {
108844
- const fields2 = ["product_id_", "material_no_", "qty_", "routing_operation_id_"];
108776
+ const fields2 = [
108777
+ "product_id_",
108778
+ "material_no_",
108779
+ "qty_",
108780
+ "routing_operation_id_",
108781
+ "qty_required_uom_id_",
108782
+ "qty_uom_id_",
108783
+ "qty_transfer_",
108784
+ "qty_transfer_uom_id_",
108785
+ "transfer_formula_"
108786
+ ];
108845
108787
  this._updateDisablement({ ...option, fields: fields2 });
108846
108788
  }
108847
108789
  /**
@@ -109738,6 +109680,27 @@ class SingleTemplateStrategy extends DocRequestStrategy {
109738
109680
  direction: requestInfo.direction
109739
109681
  }).build();
109740
109682
  requestInfo.runtimeJson = JSON.stringify(json);
109683
+ } else {
109684
+ const jsonObj = JSON.parse(requestInfo.runtimeJson);
109685
+ const wSec = jsonObj.document.elements[0]?.elements?.find((el) => el.name === "w:sectPr");
109686
+ if (wSec) {
109687
+ wSec.paperSize = requestInfo.paperSize;
109688
+ const pgSzEl = wSec.elements?.find((el) => el.name === "w:pgSz");
109689
+ if (pgSzEl) {
109690
+ const { paperSize, width: w2, height: h2, direction } = requestInfo;
109691
+ const [width, height] = [w2, h2].sort();
109692
+ updatePgSzElInfo(
109693
+ pgSzEl,
109694
+ paperSize,
109695
+ {
109696
+ width,
109697
+ height,
109698
+ direction
109699
+ }
109700
+ );
109701
+ }
109702
+ requestInfo.runtimeJson = JSON.stringify(jsonObj);
109703
+ }
109741
109704
  }
109742
109705
  return {
109743
109706
  id,
@@ -114136,6 +114099,43 @@ async function openESopViewModal(doc, widgetMeta, runtimeValuePath) {
114136
114099
  if (!options) return;
114137
114100
  await triggerUtil.handle("OPEN_E_SOP_VIEW_MODAL", options);
114138
114101
  }
114102
+ function resolveFieldKey(widgetMeta, runtimeValuePath) {
114103
+ const sub = parseSubtableFieldPath(runtimeValuePath);
114104
+ if (sub?.fieldKey) return sub.fieldKey;
114105
+ const fromPath = parseValuePath(runtimeValuePath).fieldKey;
114106
+ if (fromPath) return fromPath;
114107
+ return getLastSegment(widgetMeta.field?.fieldLink) || "";
114108
+ }
114109
+ function resolveOpenFieldHyperlinkModalOptions(doc, widgetMeta, runtimeValuePath) {
114110
+ const raw = doc.dataManager.getLabel(runtimeValuePath);
114111
+ const sub = parseSubtableFieldPath(runtimeValuePath);
114112
+ const subFieldKey = sub?.subFieldKey || widgetMeta.field?.subFieldKey;
114113
+ const tableType = subFieldKey ? TableRuntimeContext.find(doc, subFieldKey)?.profile.type : void 0;
114114
+ console.log("TJ::", {
114115
+ materialNo: getValue$1(raw, false),
114116
+ fieldType: widgetMeta.field?.fieldType,
114117
+ href: doc.dataManager.getHref(runtimeValuePath) ?? void 0,
114118
+ fieldKey: resolveFieldKey(widgetMeta, runtimeValuePath) || void 0,
114119
+ tableType,
114120
+ subFieldKey: subFieldKey || void 0,
114121
+ rowIndex: sub?.rowIndex,
114122
+ valuePath: runtimeValuePath
114123
+ });
114124
+ return {
114125
+ materialNo: getValue$1(raw, false),
114126
+ fieldType: widgetMeta.field?.fieldType,
114127
+ href: doc.dataManager.getHref(runtimeValuePath) ?? void 0,
114128
+ fieldKey: resolveFieldKey(widgetMeta, runtimeValuePath) || void 0,
114129
+ tableType,
114130
+ subFieldKey: subFieldKey || void 0,
114131
+ rowIndex: sub?.rowIndex,
114132
+ valuePath: runtimeValuePath
114133
+ };
114134
+ }
114135
+ async function openFieldHyperlinkModal(doc, widgetMeta, runtimeValuePath) {
114136
+ const options = resolveOpenFieldHyperlinkModalOptions(doc, widgetMeta, runtimeValuePath);
114137
+ await triggerUtil.handle("OPEN_FIELD_HYPERLINK_MODAL", options);
114138
+ }
114139
114139
  const _sfc_main$38 = /* @__PURE__ */ defineComponent({
114140
114140
  __name: "index",
114141
114141
  props: {
@@ -114274,11 +114274,7 @@ const _sfc_main$38 = /* @__PURE__ */ defineComponent({
114274
114274
  void openESopViewModal(props.doc, w2.widgetMeta, runtimeValuePath);
114275
114275
  return;
114276
114276
  }
114277
- const raw = props.doc.dataManager.getLabel(runtimeValuePath);
114278
- void triggerUtil.handle("OPEN_FIELD_HYPERLINK_MODAL", {
114279
- materialNo: getValue$1(raw, false),
114280
- fieldType: w2.widgetMeta?.field?.fieldType
114281
- });
114277
+ void openFieldHyperlinkModal(props.doc, w2.widgetMeta, runtimeValuePath);
114282
114278
  return;
114283
114279
  }
114284
114280
  const isShowMark = interCtx.annotationIds && interCtx.annotationIds.length !== 0 && interCtx.annotationIds.includes(runtimeValuePath);
@@ -116314,31 +116310,19 @@ const _hoisted_8$e = {
116314
116310
  };
116315
116311
  const _hoisted_9$a = { class: "item-icon" };
116316
116312
  const _hoisted_10$8 = { class: "item-icon scale-large" };
116317
- const _hoisted_11$6 = {
116318
- key: 2,
116319
- class: "action-menu"
116320
- };
116313
+ const _hoisted_11$6 = { class: "action-menu" };
116321
116314
  const _hoisted_12$5 = { class: "item-icon" };
116322
- const _hoisted_13$4 = { class: "item-icon scale-large" };
116323
- const _hoisted_14$3 = {
116324
- key: 3,
116325
- class: "action-menu"
116326
- };
116327
- const _hoisted_15$2 = { class: "item-icon" };
116315
+ const _hoisted_13$4 = { class: "item-icon" };
116316
+ const _hoisted_14$3 = { class: "item-icon scale-large" };
116317
+ const _hoisted_15$2 = { class: "item-label flex-between-center" };
116328
116318
  const _hoisted_16$1 = { class: "item-icon scale-large" };
116329
- const _hoisted_17 = { class: "action-menu" };
116330
- const _hoisted_18 = { class: "item-icon" };
116331
- const _hoisted_19 = { class: "item-icon" };
116332
- const _hoisted_20 = { class: "item-icon scale-large" };
116333
- const _hoisted_21 = { class: "item-label flex-between-center" };
116334
- const _hoisted_22 = { class: "item-icon scale-large" };
116335
- const _hoisted_23 = { class: "item-label flex-between-center" };
116336
- const _hoisted_24 = {
116337
- key: 4,
116319
+ const _hoisted_17 = { class: "item-label flex-between-center" };
116320
+ const _hoisted_18 = {
116321
+ key: 2,
116338
116322
  class: "action-menu"
116339
116323
  };
116340
- const _hoisted_25 = { class: "item-icon" };
116341
- const _hoisted_26 = { class: "more-btn" };
116324
+ const _hoisted_19 = { class: "item-icon" };
116325
+ const _hoisted_20 = { class: "more-btn" };
116342
116326
  const _sfc_main$2T = /* @__PURE__ */ defineComponent({
116343
116327
  __name: "sub-table-action",
116344
116328
  props: {
@@ -116468,30 +116452,6 @@ const _sfc_main$2T = /* @__PURE__ */ defineComponent({
116468
116452
  await changeWarehouseInventoryParseRule({ doc, subRenderer, subModelKey });
116469
116453
  }
116470
116454
  };
116471
- const handleEntrustSterilBatchListAction = async (val) => {
116472
- const { doc } = props;
116473
- const { subRenderer, valuePath, subFieldKey, subModelKey } = getCtx();
116474
- if (!valuePath || !subFieldKey) return;
116475
- if (val === "scan") {
116476
- checkTargetRowThen(() => {
116477
- openEntrustSterilBatchListScan({ doc, subRenderer, subFieldKey });
116478
- });
116479
- } else if (val === "change-rule") {
116480
- await changeEntrustSterilBatchListParseRule({ doc, subRenderer, subModelKey });
116481
- }
116482
- };
116483
- const handlePretreatmentListAction = async (val) => {
116484
- const { doc } = props;
116485
- const { subRenderer, valuePath, subFieldKey, subModelKey } = getCtx();
116486
- if (!valuePath || !subFieldKey) return;
116487
- if (val === "scan") {
116488
- checkTargetRowThen(() => {
116489
- openPretreatmentListScan({ doc, subRenderer, subFieldKey });
116490
- });
116491
- } else if (val === "change-rule") {
116492
- await changePretreatmentListParseRule({ doc, subRenderer, subModelKey });
116493
- }
116494
- };
116495
116455
  const getIsAddable = () => {
116496
116456
  if (subTableType.value.isMaterialConsume) {
116497
116457
  const { subFieldKey } = getCtx();
@@ -116585,7 +116545,7 @@ const _sfc_main$2T = /* @__PURE__ */ defineComponent({
116585
116545
  popper: withCtx(() => [
116586
116546
  createElementVNode("div", _hoisted_2$1e, [
116587
116547
  subTableType.value.isMaterialConsume ? (openBlock(), createElementBlock("div", _hoisted_3$V, [
116588
- _cache[24] || (_cache[24] = createElementVNode("div", { class: "menu-title" }, "业务操作", -1)),
116548
+ _cache[20] || (_cache[20] = createElementVNode("div", { class: "menu-title" }, "业务操作", -1)),
116589
116549
  actionInfo.value.canEdit ? (openBlock(), createElementBlock("div", {
116590
116550
  key: 0,
116591
116551
  class: "menu-item",
@@ -116594,7 +116554,7 @@ const _sfc_main$2T = /* @__PURE__ */ defineComponent({
116594
116554
  createElementVNode("div", _hoisted_4$I, [
116595
116555
  createVNode(unref(GctIcon), { icon: "icon-bianji" })
116596
116556
  ]),
116597
- _cache[20] || (_cache[20] = createElementVNode("div", { class: "item-label" }, "编辑行", -1))
116557
+ _cache[16] || (_cache[16] = createElementVNode("div", { class: "item-label" }, "编辑行", -1))
116598
116558
  ])) : createCommentVNode("", true),
116599
116559
  __props.isLastRow ? (openBlock(), createElementBlock("div", {
116600
116560
  key: 1,
@@ -116604,7 +116564,7 @@ const _sfc_main$2T = /* @__PURE__ */ defineComponent({
116604
116564
  createElementVNode("div", _hoisted_5$y, [
116605
116565
  createVNode(unref(GctIcon), { icon: "icon-saoyisao" })
116606
116566
  ]),
116607
- _cache[21] || (_cache[21] = createElementVNode("div", { class: "item-label" }, "条码扫描", -1))
116567
+ _cache[17] || (_cache[17] = createElementVNode("div", { class: "item-label" }, "条码扫描", -1))
116608
116568
  ])) : createCommentVNode("", true),
116609
116569
  __props.isLastRow ? (openBlock(), createElementBlock("div", {
116610
116570
  key: 2,
@@ -116614,7 +116574,7 @@ const _sfc_main$2T = /* @__PURE__ */ defineComponent({
116614
116574
  createElementVNode("div", _hoisted_6$m, [
116615
116575
  createVNode(unref(GctIcon), { icon: "icon-a-bom11" })
116616
116576
  ]),
116617
- _cache[22] || (_cache[22] = createElementVNode("div", { class: "item-label" }, "BOM", -1))
116577
+ _cache[18] || (_cache[18] = createElementVNode("div", { class: "item-label" }, "BOM", -1))
116618
116578
  ])) : createCommentVNode("", true),
116619
116579
  __props.isLastRow ? (openBlock(), createElementBlock("div", {
116620
116580
  key: 3,
@@ -116624,11 +116584,11 @@ const _sfc_main$2T = /* @__PURE__ */ defineComponent({
116624
116584
  createElementVNode("div", _hoisted_7$h, [
116625
116585
  createVNode(unref(GctIcon), { icon: "icon-tiaomajiexi" })
116626
116586
  ]),
116627
- _cache[23] || (_cache[23] = createElementVNode("div", { class: "item-label" }, "条码解析规则变更", -1))
116587
+ _cache[19] || (_cache[19] = createElementVNode("div", { class: "item-label" }, "条码解析规则变更", -1))
116628
116588
  ])) : createCommentVNode("", true)
116629
116589
  ])) : createCommentVNode("", true),
116630
116590
  subTableType.value.isWarehouseInventory ? (openBlock(), createElementBlock("div", _hoisted_8$e, [
116631
- _cache[27] || (_cache[27] = createElementVNode("div", { class: "menu-title" }, "业务操作", -1)),
116591
+ _cache[23] || (_cache[23] = createElementVNode("div", { class: "menu-title" }, "业务操作", -1)),
116632
116592
  createElementVNode("div", {
116633
116593
  class: "menu-item",
116634
116594
  onClick: _cache[4] || (_cache[4] = ($event) => handleWarehouseInventoryAction("scan"))
@@ -116636,7 +116596,7 @@ const _sfc_main$2T = /* @__PURE__ */ defineComponent({
116636
116596
  createElementVNode("div", _hoisted_9$a, [
116637
116597
  createVNode(unref(GctIcon), { icon: "icon-saoyisao" })
116638
116598
  ]),
116639
- _cache[25] || (_cache[25] = createElementVNode("div", { class: "item-label" }, " 条码扫描 ", -1))
116599
+ _cache[21] || (_cache[21] = createElementVNode("div", { class: "item-label" }, " 条码扫描 ", -1))
116640
116600
  ]),
116641
116601
  createElementVNode("div", {
116642
116602
  class: "menu-item",
@@ -116645,89 +116605,47 @@ const _sfc_main$2T = /* @__PURE__ */ defineComponent({
116645
116605
  createElementVNode("div", _hoisted_10$8, [
116646
116606
  createVNode(unref(GctIcon), { icon: "icon-tiaomajiexi" })
116647
116607
  ]),
116648
- _cache[26] || (_cache[26] = createElementVNode("div", { class: "item-label" }, " 条码解析规则变更 ", -1))
116608
+ _cache[22] || (_cache[22] = createElementVNode("div", { class: "item-label" }, " 条码解析规则变更 ", -1))
116649
116609
  ])
116650
116610
  ])) : createCommentVNode("", true),
116651
- subTableType.value.isEntrustSterilBatchList ? (openBlock(), createElementBlock("div", _hoisted_11$6, [
116652
- _cache[30] || (_cache[30] = createElementVNode("div", { class: "menu-title" }, "业务操作", -1)),
116611
+ createElementVNode("div", _hoisted_11$6, [
116612
+ _cache[28] || (_cache[28] = createElementVNode("div", { class: "menu-title" }, "行编辑", -1)),
116653
116613
  createElementVNode("div", {
116654
116614
  class: "menu-item",
116655
- onClick: _cache[6] || (_cache[6] = ($event) => handleEntrustSterilBatchListAction("scan"))
116615
+ onClick: _cache[6] || (_cache[6] = ($event) => handleAction("insertRowAfter"))
116656
116616
  }, [
116657
116617
  createElementVNode("div", _hoisted_12$5, [
116658
- createVNode(unref(GctIcon), { icon: "icon-saoyisao" })
116659
- ]),
116660
- _cache[28] || (_cache[28] = createElementVNode("div", { class: "item-label" }, " 条码扫描 ", -1))
116661
- ]),
116662
- createElementVNode("div", {
116663
- class: "menu-item",
116664
- onClick: _cache[7] || (_cache[7] = ($event) => handleEntrustSterilBatchListAction("change-rule"))
116665
- }, [
116666
- createElementVNode("div", _hoisted_13$4, [
116667
- createVNode(unref(GctIcon), { icon: "icon-tiaomajiexi" })
116668
- ]),
116669
- _cache[29] || (_cache[29] = createElementVNode("div", { class: "item-label" }, " 条码解析规则变更 ", -1))
116670
- ])
116671
- ])) : createCommentVNode("", true),
116672
- subTableType.value.isPretreatmentList ? (openBlock(), createElementBlock("div", _hoisted_14$3, [
116673
- _cache[33] || (_cache[33] = createElementVNode("div", { class: "menu-title" }, "业务操作", -1)),
116674
- createElementVNode("div", {
116675
- class: "menu-item",
116676
- onClick: _cache[8] || (_cache[8] = ($event) => handlePretreatmentListAction("scan"))
116677
- }, [
116678
- createElementVNode("div", _hoisted_15$2, [
116679
- createVNode(unref(GctIcon), { icon: "icon-saoyisao" })
116680
- ]),
116681
- _cache[31] || (_cache[31] = createElementVNode("div", { class: "item-label" }, " 条码扫描 ", -1))
116682
- ]),
116683
- createElementVNode("div", {
116684
- class: "menu-item",
116685
- onClick: _cache[9] || (_cache[9] = ($event) => handlePretreatmentListAction("change-rule"))
116686
- }, [
116687
- createElementVNode("div", _hoisted_16$1, [
116688
- createVNode(unref(GctIcon), { icon: "icon-tiaomajiexi" })
116689
- ]),
116690
- _cache[32] || (_cache[32] = createElementVNode("div", { class: "item-label" }, " 条码解析规则变更 ", -1))
116691
- ])
116692
- ])) : createCommentVNode("", true),
116693
- createElementVNode("div", _hoisted_17, [
116694
- _cache[38] || (_cache[38] = createElementVNode("div", { class: "menu-title" }, "行编辑", -1)),
116695
- createElementVNode("div", {
116696
- class: "menu-item",
116697
- onClick: _cache[10] || (_cache[10] = ($event) => handleAction("insertRowAfter"))
116698
- }, [
116699
- createElementVNode("div", _hoisted_18, [
116700
116618
  createVNode(unref(GctIcon), { icon: "icon-tianjia" })
116701
116619
  ]),
116702
- _cache[34] || (_cache[34] = createElementVNode("div", { class: "item-label" }, " 加一行 ", -1))
116620
+ _cache[24] || (_cache[24] = createElementVNode("div", { class: "item-label" }, " 加一行 ", -1))
116703
116621
  ]),
116704
116622
  actionInfo.value.canCopy ? (openBlock(), createElementBlock("div", {
116705
116623
  key: 0,
116706
116624
  class: "menu-item",
116707
- onClick: _cache[11] || (_cache[11] = ($event) => handleAction("copyCurrentRow"))
116625
+ onClick: _cache[7] || (_cache[7] = ($event) => handleAction("copyCurrentRow"))
116708
116626
  }, [
116709
- createElementVNode("div", _hoisted_19, [
116627
+ createElementVNode("div", _hoisted_13$4, [
116710
116628
  createVNode(unref(GctIcon), { icon: "icon-fuzhihang" })
116711
116629
  ]),
116712
- _cache[35] || (_cache[35] = createElementVNode("div", { class: "item-label" }, " 复制行 ", -1))
116630
+ _cache[25] || (_cache[25] = createElementVNode("div", { class: "item-label" }, " 复制行 ", -1))
116713
116631
  ])) : createCommentVNode("", true),
116714
116632
  actionInfo.value.canInsertMulti ? (openBlock(), createElementBlock("div", {
116715
116633
  key: 1,
116716
116634
  class: "menu-item",
116717
- onClick: _cache[14] || (_cache[14] = ($event) => handleAction("insertRowBeforeMore"))
116635
+ onClick: _cache[10] || (_cache[10] = ($event) => handleAction("insertRowBeforeMore"))
116718
116636
  }, [
116719
- createElementVNode("div", _hoisted_20, [
116637
+ createElementVNode("div", _hoisted_14$3, [
116720
116638
  createVNode(unref(GctIcon), { icon: "icon-shangfangcharuhang" })
116721
116639
  ]),
116722
- createElementVNode("div", _hoisted_21, [
116723
- _cache[36] || (_cache[36] = createElementVNode("div", null, " 在上方插入行 ", -1)),
116640
+ createElementVNode("div", _hoisted_15$2, [
116641
+ _cache[26] || (_cache[26] = createElementVNode("div", null, " 在上方插入行 ", -1)),
116724
116642
  createVNode(unref(GctInputNumber), {
116725
116643
  modelValue: formState.upRowNum,
116726
- "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => formState.upRowNum = $event),
116644
+ "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => formState.upRowNum = $event),
116727
116645
  min: 1,
116728
116646
  integer: "",
116729
116647
  style: { "width": "68px" },
116730
- onClick: _cache[13] || (_cache[13] = withModifiers(() => {
116648
+ onClick: _cache[9] || (_cache[9] = withModifiers(() => {
116731
116649
  }, ["stop"]))
116732
116650
  }, null, 8, ["modelValue"])
116733
116651
  ])
@@ -116735,40 +116653,40 @@ const _sfc_main$2T = /* @__PURE__ */ defineComponent({
116735
116653
  actionInfo.value.canInsertMulti ? (openBlock(), createElementBlock("div", {
116736
116654
  key: 2,
116737
116655
  class: "menu-item",
116738
- onClick: _cache[17] || (_cache[17] = ($event) => handleAction("insertRowAfterMore"))
116656
+ onClick: _cache[13] || (_cache[13] = ($event) => handleAction("insertRowAfterMore"))
116739
116657
  }, [
116740
- createElementVNode("div", _hoisted_22, [
116658
+ createElementVNode("div", _hoisted_16$1, [
116741
116659
  createVNode(unref(GctIcon), { icon: "icon-xiafangcharuhang" })
116742
116660
  ]),
116743
- createElementVNode("div", _hoisted_23, [
116744
- _cache[37] || (_cache[37] = createElementVNode("div", null, " 在下方插入行 ", -1)),
116661
+ createElementVNode("div", _hoisted_17, [
116662
+ _cache[27] || (_cache[27] = createElementVNode("div", null, " 在下方插入行 ", -1)),
116745
116663
  createVNode(unref(GctInputNumber), {
116746
116664
  modelValue: formState.downRowNum,
116747
- "onUpdate:modelValue": _cache[15] || (_cache[15] = ($event) => formState.downRowNum = $event),
116665
+ "onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => formState.downRowNum = $event),
116748
116666
  min: 1,
116749
116667
  integer: "",
116750
116668
  style: { "width": "68px" },
116751
- onClick: _cache[16] || (_cache[16] = withModifiers(() => {
116669
+ onClick: _cache[12] || (_cache[12] = withModifiers(() => {
116752
116670
  }, ["stop"]))
116753
116671
  }, null, 8, ["modelValue"])
116754
116672
  ])
116755
116673
  ])) : createCommentVNode("", true)
116756
116674
  ]),
116757
- actionInfo.value.canDelete ? (openBlock(), createElementBlock("div", _hoisted_24, [
116675
+ actionInfo.value.canDelete ? (openBlock(), createElementBlock("div", _hoisted_18, [
116758
116676
  createElementVNode("div", {
116759
116677
  class: "menu-item",
116760
- onClick: _cache[18] || (_cache[18] = ($event) => handleAction("deleteRowCurrent"))
116678
+ onClick: _cache[14] || (_cache[14] = ($event) => handleAction("deleteRowCurrent"))
116761
116679
  }, [
116762
- createElementVNode("div", _hoisted_25, [
116680
+ createElementVNode("div", _hoisted_19, [
116763
116681
  createVNode(unref(GctIcon), { icon: "icon-shanchu1" })
116764
116682
  ]),
116765
- _cache[39] || (_cache[39] = createElementVNode("div", { class: "item-label" }, " 删除行 ", -1))
116683
+ _cache[29] || (_cache[29] = createElementVNode("div", { class: "item-label" }, " 删除行 ", -1))
116766
116684
  ])
116767
116685
  ])) : createCommentVNode("", true)
116768
116686
  ])
116769
116687
  ]),
116770
116688
  default: withCtx(() => [
116771
- createElementVNode("div", _hoisted_26, [
116689
+ createElementVNode("div", _hoisted_20, [
116772
116690
  createVNode(unref(GctIcon), {
116773
116691
  icon: "icon-gengduo1",
116774
116692
  color: "#fff"
@@ -116780,7 +116698,7 @@ const _sfc_main$2T = /* @__PURE__ */ defineComponent({
116780
116698
  subTableType.value.isMaterialConsume && __props.isLastRow && actionInfo.value.canConfirm ? (openBlock(), createElementBlock("div", {
116781
116699
  key: 2,
116782
116700
  class: "confirm-btn",
116783
- onClick: _cache[19] || (_cache[19] = ($event) => handleMaterialConsumeAction("confirm"))
116701
+ onClick: _cache[15] || (_cache[15] = ($event) => handleMaterialConsumeAction("confirm"))
116784
116702
  }, [
116785
116703
  createVNode(unref(GctIcon), {
116786
116704
  icon: "icon-tijiao1",
@@ -116793,7 +116711,7 @@ const _sfc_main$2T = /* @__PURE__ */ defineComponent({
116793
116711
  };
116794
116712
  }
116795
116713
  });
116796
- const SubTableAction = /* @__PURE__ */ _export_sfc(_sfc_main$2T, [["__scopeId", "data-v-527a94cf"]]);
116714
+ const SubTableAction = /* @__PURE__ */ _export_sfc(_sfc_main$2T, [["__scopeId", "data-v-ce0d6ea2"]]);
116797
116715
  const _sfc_main$2S = /* @__PURE__ */ defineComponent({
116798
116716
  __name: "index",
116799
116717
  props: {
@@ -117383,21 +117301,28 @@ const TABLE_VALIDATION_RULES = [
117383
117301
  invalid: (region) => !region.widgetMeta.props.barcode_parsing_rules_id_,
117384
117302
  code: "barcode-parsing-rules-required",
117385
117303
  message: "请给库存盘点表设置条码解析规则"
117386
- },
117387
- {
117388
- hasTable: (tbl) => tbl.hasRepeating && tbl.repeating.some((r) => r.layoutType === "entrust-steril-batch-list-table"),
117389
- getRegions: (tbl) => tbl.repeating.filter((r) => r.layoutType === "entrust-steril-batch-list-table"),
117390
- invalid: (region) => !region.widgetMeta.props.barcode_parsing_rules_id_,
117391
- code: "barcode-parsing-rules-required",
117392
- message: "请给委托灭菌生产批次表设置条码解析规则"
117393
- },
117394
- {
117395
- hasTable: (tbl) => tbl.hasRepeating && tbl.repeating.some((r) => r.layoutType === "pretreatment-list-table"),
117396
- getRegions: (tbl) => tbl.repeating.filter((r) => r.layoutType === "pretreatment-list-table"),
117397
- invalid: (region) => !region.widgetMeta.props.barcode_parsing_rules_id_,
117398
- code: "barcode-parsing-rules-required",
117399
- message: "请给预处理表设置条码解析规则"
117400
117304
  }
117305
+ // {
117306
+ // hasTable: (tbl: Wtbl) =>
117307
+ // tbl.hasRepeating &&
117308
+ // tbl.repeating.some((r) => r.layoutType === 'entrust-steril-batch-list-table'),
117309
+ // getRegions: (tbl: Wtbl) =>
117310
+ // tbl.repeating.filter((r) => r.layoutType === 'entrust-steril-batch-list-table'),
117311
+ // invalid: (region: Wtbl['repeating'][number]) =>
117312
+ // !(region.widgetMeta.props as WarehouseInventoryTableProps).barcode_parsing_rules_id_,
117313
+ // code: 'barcode-parsing-rules-required' as const,
117314
+ // message: '请给委托灭菌生产批次表设置条码解析规则',
117315
+ // },
117316
+ // {
117317
+ // hasTable: (tbl: Wtbl) =>
117318
+ // tbl.hasRepeating && tbl.repeating.some((r) => r.layoutType === 'pretreatment-list-table'),
117319
+ // getRegions: (tbl: Wtbl) =>
117320
+ // tbl.repeating.filter((r) => r.layoutType === 'pretreatment-list-table'),
117321
+ // invalid: (region: Wtbl['repeating'][number]) =>
117322
+ // !(region.widgetMeta.props as WarehouseInventoryTableProps).barcode_parsing_rules_id_,
117323
+ // code: 'barcode-parsing-rules-required' as const,
117324
+ // message: '请给预处理表设置条码解析规则',
117325
+ // },
117401
117326
  ];
117402
117327
  function validateDocDesigner(doc) {
117403
117328
  if (!doc?.model) {
@@ -128549,8 +128474,8 @@ const _sfc_main$1N = /* @__PURE__ */ defineComponent({
128549
128474
  const showQuickFill = computed(() => !NO_QUICK_FILL_TYPES.includes(layoutType.value));
128550
128475
  const showBarcodeParsingRules = computed(
128551
128476
  () => [
128552
- "pretreatment-list-table",
128553
- "entrust-steril-batch-list-table",
128477
+ // 'pretreatment-list-table',
128478
+ // 'entrust-steril-batch-list-table',
128554
128479
  "warehouse-inventory-table"
128555
128480
  ].includes(layoutType.value)
128556
128481
  );
@@ -128655,7 +128580,7 @@ const _sfc_main$1N = /* @__PURE__ */ defineComponent({
128655
128580
  };
128656
128581
  }
128657
128582
  });
128658
- const RepeatingSubTablePanel = /* @__PURE__ */ _export_sfc(_sfc_main$1N, [["__scopeId", "data-v-afa04296"]]);
128583
+ const RepeatingSubTablePanel = /* @__PURE__ */ _export_sfc(_sfc_main$1N, [["__scopeId", "data-v-b48fc893"]]);
128659
128584
  function createTablePanelSchema(schemaKey, render2, title) {
128660
128585
  const layoutType = schemaKey.replace(/\.basic$/, "");
128661
128586
  return {
@@ -132376,7 +132301,7 @@ function isModelAssociationField(field) {
132376
132301
  const manifestType = resolveFieldManifestType(field);
132377
132302
  return MODEL_ASSOCIATION_TYPES.has(storageType) || MODEL_ASSOCIATION_TYPES.has(manifestType);
132378
132303
  }
132379
- function matchAutofillTargetField(fromMeta, toMeta, options) {
132304
+ function matchAutofillTargetField(fromMeta, toMeta) {
132380
132305
  if (isModelAssociationField(fromMeta)) {
132381
132306
  return isModelAssociationField(toMeta) && fromMeta.bindInfo === toMeta.bindInfo;
132382
132307
  }
@@ -132388,9 +132313,6 @@ function matchAutofillTargetField(fromMeta, toMeta, options) {
132388
132313
  matched = false;
132389
132314
  }
132390
132315
  }
132391
- if (options?.isSubTable && !matched && isModelAssociationField(toMeta)) {
132392
- matched = true;
132393
- }
132394
132316
  return matched;
132395
132317
  }
132396
132318
  function encodeToFieldValue(meta) {
@@ -132461,8 +132383,7 @@ function filterToFieldTreeBySource(nodes, fromMeta) {
132461
132383
  return nodes.reduce((acc, node) => {
132462
132384
  const children = (node.children ?? []).filter((child) => {
132463
132385
  const field = child._targetMeta?.field;
132464
- const isSubTable = child._targetMeta?.subModel === 1;
132465
- return field ? matchAutofillTargetField(fromMeta, field, { isSubTable }) : false;
132386
+ return field ? matchAutofillTargetField(fromMeta, field) : false;
132466
132387
  });
132467
132388
  if (children.length) {
132468
132389
  acc.push({ ...node, children });
@@ -132623,9 +132544,7 @@ function resolveParamFieldTree(doc) {
132623
132544
  const mainModelKey = doc.mainModelKey;
132624
132545
  const mainModel = doc.fieldModelQuery.getModel(mainModelKey);
132625
132546
  const mainFields = doc.fieldModelQuery.getFieldList(mainModelKey).filter(
132626
- (field) => field.createType !== "SYSTEM" && [FIELD_TYPE.TEXT, FIELD_TYPE.DOUBLE, FIELD_TYPE.INTEGER, FIELD_TYPE.DECIMAL].includes(
132627
- field.type
132628
- )
132547
+ (field) => field.createType !== "SYSTEM" && [FIELD_TYPE.DOUBLE, FIELD_TYPE.INTEGER, FIELD_TYPE.DECIMAL].includes(field.type)
132629
132548
  );
132630
132549
  const nodes = [];
132631
132550
  if (mainFields.length) {
@@ -132648,9 +132567,7 @@ function resolveParamFieldTree(doc) {
132648
132567
  const modelKey = sub.bindInfo;
132649
132568
  const modelName = doc.fieldModelQuery.getModel(modelKey)?.modelName ?? sub.name;
132650
132569
  const fields2 = doc.fieldModelQuery.getFieldList(modelKey).filter(
132651
- (field) => field.createType !== "SYSTEM" && [FIELD_TYPE.TEXT, FIELD_TYPE.DOUBLE, FIELD_TYPE.INTEGER, FIELD_TYPE.DECIMAL].includes(
132652
- field.type
132653
- )
132570
+ (field) => field.createType !== "SYSTEM" && [FIELD_TYPE.DOUBLE, FIELD_TYPE.INTEGER, FIELD_TYPE.DECIMAL].includes(field.type)
132654
132571
  );
132655
132572
  if (!fields2.length) continue;
132656
132573
  nodes.push({
@@ -135392,23 +135309,56 @@ const _sfc_main$V = /* @__PURE__ */ defineComponent({
135392
135309
  );
135393
135310
  return contexts.filter((ctx) => ctx.fields.length > 0);
135394
135311
  }
135395
- async function openFilterModal() {
135312
+ async function loadCurrentSubTableContext(subFieldKey) {
135396
135313
  const mainModelKey = docInst.value?.mainModelKey ?? modelKey.value;
135397
- const isSubTableSource = Boolean(props.subFieldKey);
135398
- const toModelKey = isSubTableSource ? mainModelKey : modelKey.value;
135399
- const [refRes, mainFieldList, toModelInfo] = await Promise.all([
135400
- loadFieldList(refModelKey.value),
135401
- loadFieldList(toModelKey),
135402
- loadModelInfo(toModelKey)
135314
+ const [subFieldList, subModelInfo, mainFieldList, mainModelInfo] = await Promise.all([
135315
+ loadFieldList(modelKey.value),
135316
+ loadModelInfo(modelKey.value),
135317
+ loadFieldList(mainModelKey),
135318
+ loadModelInfo(mainModelKey)
135403
135319
  ]);
135404
- const toSubTables = await loadSubTableContexts(mainFieldList || []);
135320
+ const subFieldMeta = (mainFieldList || []).find((field) => field.key === subFieldKey);
135321
+ return {
135322
+ toModelInfo: mainModelInfo,
135323
+ toSubTables: [
135324
+ {
135325
+ subFieldKey,
135326
+ subFieldName: subFieldMeta?.name ?? subModelInfo?.modelName ?? subFieldKey,
135327
+ subModelKey: modelKey.value,
135328
+ subModelName: subModelInfo?.modelName ?? subFieldMeta?.name ?? subFieldKey,
135329
+ fields: filterNonSystemFields(subFieldList || [])
135330
+ }
135331
+ ]
135332
+ };
135333
+ }
135334
+ async function openFilterModal() {
135335
+ const isSubTableSource = Boolean(props.subFieldKey);
135336
+ const refRes = await loadFieldList(refModelKey.value);
135337
+ let toFieldList = [];
135338
+ let toSubTables = [];
135339
+ let toModelInfo;
135340
+ if (isSubTableSource) {
135341
+ const subFieldKey = props.subFieldKey.replace(/^\$\./, "");
135342
+ const currentSub = await loadCurrentSubTableContext(subFieldKey);
135343
+ toModelInfo = currentSub.toModelInfo;
135344
+ toSubTables = currentSub.toSubTables;
135345
+ toFieldList = [];
135346
+ } else {
135347
+ const [mainFieldList, modelInfo] = await Promise.all([
135348
+ loadFieldList(modelKey.value),
135349
+ loadModelInfo(modelKey.value)
135350
+ ]);
135351
+ toModelInfo = modelInfo;
135352
+ toFieldList = filterNonSystemFields(mainFieldList || []);
135353
+ toSubTables = await loadSubTableContexts(mainFieldList || []);
135354
+ }
135405
135355
  GctModal.open({
135406
135356
  title: "添加规则",
135407
135357
  body: AutofillRulesModel,
135408
135358
  bodyProps: {
135409
135359
  currentField: props.currentField,
135410
135360
  refModelFieldList: filterNonSystemFields(refRes || []),
135411
- toFieldList: filterNonSystemFields(mainFieldList || []),
135361
+ toFieldList,
135412
135362
  toSubTables,
135413
135363
  toModelInfo,
135414
135364
  rules: _autofillRules.value
@@ -135449,7 +135399,7 @@ const _sfc_main$V = /* @__PURE__ */ defineComponent({
135449
135399
  };
135450
135400
  }
135451
135401
  });
135452
- const RefAutofillEditor = /* @__PURE__ */ _export_sfc(_sfc_main$V, [["__scopeId", "data-v-0f198b3d"]]);
135402
+ const RefAutofillEditor = /* @__PURE__ */ _export_sfc(_sfc_main$V, [["__scopeId", "data-v-449fd707"]]);
135453
135403
  const ONLINE_FORM_TMPL_MODULE_TYPE = "online_form_module";
135454
135404
  function buildFormTmplRefId(item) {
135455
135405
  if (!item.id) return "";
@@ -21,7 +21,7 @@ export interface UpdateRowOption {
21
21
  * - [需求数量、已消耗数量] 始终只读
22
22
  * - [有效期、唯一标识、自定义字段] 始终可填(不做控制)
23
23
  * - 选择的物料类型是[查看物料]时 [批次、上料数量、工序] 只读
24
- * - 单行校验通过后(包括暂存后再次编辑)[物料、批次、上料数量、工序] 只读
24
+ * - 单行校验通过后(包括暂存后再次编辑)[物料、批次、上料数量、工序、需求数量单位、数量单位、转换后数量、转换数量单位ID、单位转化公式] 只读
25
25
  */
26
26
  export declare class MCDataUtil {
27
27
  /**
@@ -0,0 +1,24 @@
1
+ import { Doc, WidgetMeta } from '../../../../core';
2
+ import { BusinessSubTableType } from '../../../../domain/table/types';
3
+ /** 填报只读超链接字段点击 → 宿主打开追溯弹框 */
4
+ interface OpenFieldHyperlinkModalOptions {
5
+ /** 展示值(批次号等) */
6
+ materialNo?: string;
7
+ /** 字段 manifest 类型(如 material_no);同类型可能对应不同业务弹框,需配合 fieldKey/tableType */
8
+ fieldType?: string;
9
+ /** enrich 写入的 _href_(可能为空,如 newHrefSuffix 静态链) */
10
+ href?: string | null;
11
+ /** 业务字段 key,如 production_container_id_ / material_container_no_ */
12
+ fieldKey?: string;
13
+ /** 业务表类型,如 pretreatment-list;主表字段为空 */
14
+ tableType?: BusinessSubTableType;
15
+ /** 子表字段 key(子模型挂载点) */
16
+ subFieldKey?: string;
17
+ /** 子表行号 */
18
+ rowIndex?: number;
19
+ /** 运行时 valuePath */
20
+ valuePath?: string;
21
+ }
22
+ export declare function resolveOpenFieldHyperlinkModalOptions(doc: Doc, widgetMeta: WidgetMeta, runtimeValuePath: string): OpenFieldHyperlinkModalOptions;
23
+ export declare function openFieldHyperlinkModal(doc: Doc, widgetMeta: WidgetMeta, runtimeValuePath: string): Promise<void>;
24
+ export {};
@@ -1,4 +1,10 @@
1
1
  import { PaperSize } from '../../../core/constants';
2
+ interface IPageSizeOptions {
3
+ width: number;
4
+ height: number;
5
+ direction?: 'portrait' | 'landscape';
6
+ }
7
+ export declare const updatePgSzElInfo: (pgSz: any, paperSize: PaperSize, options: IPageSizeOptions) => void;
2
8
  export declare class RuntimeJsonBuilder {
3
9
  private json;
4
10
  constructor(base: any);
@@ -6,13 +12,10 @@ export declare class RuntimeJsonBuilder {
6
12
  /**
7
13
  * 页面设置
8
14
  */
9
- setPageSize(paperSize: PaperSize, options: {
10
- width: number;
11
- height: number;
12
- direction?: 'portrait' | 'landscape';
13
- }): this;
15
+ setPageSize(paperSize: PaperSize, options: IPageSizeOptions): this;
14
16
  /**
15
17
  * 构建
16
18
  */
17
19
  build(): any;
18
20
  }
21
+ export {};
package/dist/word.css CHANGED
@@ -9124,20 +9124,20 @@ textarea[data-v-2de31883]::placeholder {
9124
9124
  .table-action .row-headers .row-header:last-child .row-add-btn[data-v-c40eef9f] .gct-icon.bottom {
9125
9125
  transform: translateY(-100%);
9126
9126
  }
9127
- .sub-table-action-container[data-v-527a94cf] {
9127
+ .sub-table-action-container[data-v-ce0d6ea2] {
9128
9128
  position: absolute;
9129
9129
  z-index: 999;
9130
9130
  }
9131
- .sub-table-action-bar[data-v-527a94cf],
9132
- .sub-table-action-popper[data-v-527a94cf] {
9131
+ .sub-table-action-bar[data-v-ce0d6ea2],
9132
+ .sub-table-action-popper[data-v-ce0d6ea2] {
9133
9133
  pointer-events: auto;
9134
9134
  user-select: none;
9135
9135
  }
9136
- .sub-table-action-bar[data-v-527a94cf] {
9136
+ .sub-table-action-bar[data-v-ce0d6ea2] {
9137
9137
  display: flex;
9138
9138
  }
9139
- .sub-table-action-bar .more-btn[data-v-527a94cf],
9140
- .sub-table-action-bar .confirm-btn[data-v-527a94cf] {
9139
+ .sub-table-action-bar .more-btn[data-v-ce0d6ea2],
9140
+ .sub-table-action-bar .confirm-btn[data-v-ce0d6ea2] {
9141
9141
  display: flex;
9142
9142
  justify-content: center;
9143
9143
  align-items: center;
@@ -9146,44 +9146,44 @@ textarea[data-v-2de31883]::placeholder {
9146
9146
  cursor: pointer;
9147
9147
  box-sizing: border-box;
9148
9148
  }
9149
- .sub-table-action-bar .more-btn[data-v-527a94cf] {
9149
+ .sub-table-action-bar .more-btn[data-v-ce0d6ea2] {
9150
9150
  width: 10px;
9151
9151
  background: #026ac8;
9152
9152
  border-radius: 0 4px 4px 0;
9153
9153
  }
9154
- .sub-table-action-bar .confirm-btn[data-v-527a94cf] {
9154
+ .sub-table-action-bar .confirm-btn[data-v-ce0d6ea2] {
9155
9155
  margin-left: 4px;
9156
9156
  border-radius: 4px;
9157
9157
  border: 1px solid #4ec262;
9158
9158
  }
9159
- .sub-table-action-popper[data-v-527a94cf] {
9159
+ .sub-table-action-popper[data-v-ce0d6ea2] {
9160
9160
  padding: 2px 8px;
9161
9161
  }
9162
- .sub-table-action-popper .action-menu[data-v-527a94cf] {
9162
+ .sub-table-action-popper .action-menu[data-v-ce0d6ea2] {
9163
9163
  padding: 4px 0;
9164
9164
  width: 220px;
9165
9165
  user-select: none;
9166
9166
  }
9167
- .sub-table-action-popper .action-menu + .action-menu[data-v-527a94cf] {
9167
+ .sub-table-action-popper .action-menu + .action-menu[data-v-ce0d6ea2] {
9168
9168
  margin-top: 4px;
9169
9169
  padding-top: 4px;
9170
9170
  border-top: 1px solid #efefef;
9171
9171
  }
9172
- .sub-table-action-popper .action-menu .menu-title[data-v-527a94cf] {
9172
+ .sub-table-action-popper .action-menu .menu-title[data-v-ce0d6ea2] {
9173
9173
  color: #bcbcbc;
9174
9174
  margin: 4px 0;
9175
9175
  }
9176
- .sub-table-action-popper .action-menu .menu-item[data-v-527a94cf] {
9176
+ .sub-table-action-popper .action-menu .menu-item[data-v-ce0d6ea2] {
9177
9177
  display: flex;
9178
9178
  align-items: center;
9179
9179
  padding: 8px 10px;
9180
9180
  border-radius: 4px;
9181
9181
  }
9182
- .sub-table-action-popper .action-menu .menu-item[data-v-527a94cf]:hover {
9182
+ .sub-table-action-popper .action-menu .menu-item[data-v-ce0d6ea2]:hover {
9183
9183
  cursor: pointer;
9184
9184
  background-color: #f2f5f8;
9185
9185
  }
9186
- .sub-table-action-popper .action-menu .menu-item .item-icon[data-v-527a94cf] {
9186
+ .sub-table-action-popper .action-menu .menu-item .item-icon[data-v-ce0d6ea2] {
9187
9187
  display: flex;
9188
9188
  align-items: center;
9189
9189
  justify-content: start;
@@ -9191,14 +9191,14 @@ textarea[data-v-2de31883]::placeholder {
9191
9191
  width: 20px;
9192
9192
  height: 20px;
9193
9193
  }
9194
- .sub-table-action-popper .action-menu .menu-item .item-icon.scale-large[data-v-527a94cf] {
9194
+ .sub-table-action-popper .action-menu .menu-item .item-icon.scale-large[data-v-ce0d6ea2] {
9195
9195
  transform: scale(1.5);
9196
9196
  }
9197
- .sub-table-action-popper .action-menu .menu-item .item-label[data-v-527a94cf] {
9197
+ .sub-table-action-popper .action-menu .menu-item .item-label[data-v-ce0d6ea2] {
9198
9198
  flex-grow: 1;
9199
9199
  margin-left: 8px;
9200
9200
  }
9201
- .sub-table-action-popper .action-menu .menu-item .item-label.flex-between-center[data-v-527a94cf] {
9201
+ .sub-table-action-popper .action-menu .menu-item .item-label.flex-between-center[data-v-ce0d6ea2] {
9202
9202
  display: flex;
9203
9203
  justify-content: space-between;
9204
9204
  align-items: center;
@@ -10675,22 +10675,22 @@ svg.portrait-icon[data-v-8bdb451e] {
10675
10675
  .sub-table-basic-info .delete-title[data-v-5a638f72]:hover {
10676
10676
  opacity: 0.7;
10677
10677
  }
10678
- .panel-repeating-sub-table[data-v-afa04296] {
10678
+ .panel-repeating-sub-table[data-v-b48fc893] {
10679
10679
  position: relative;
10680
10680
  }
10681
- .panel-repeating-sub-table .container[data-v-afa04296] {
10681
+ .panel-repeating-sub-table .container[data-v-b48fc893] {
10682
10682
  padding: 16px;
10683
10683
  }
10684
- .panel-repeating-sub-table .form-custom-label[data-v-afa04296] {
10684
+ .panel-repeating-sub-table .form-custom-label[data-v-b48fc893] {
10685
10685
  display: inline-flex;
10686
10686
  align-items: center;
10687
10687
  gap: 4px;
10688
10688
  }
10689
- .panel-repeating-sub-table .form-custom-label .icon[data-v-afa04296] {
10689
+ .panel-repeating-sub-table .form-custom-label .icon[data-v-b48fc893] {
10690
10690
  cursor: pointer;
10691
10691
  vertical-align: text-top;
10692
10692
  }
10693
- .panel-repeating-sub-table .content[data-v-afa04296] {
10693
+ .panel-repeating-sub-table .content[data-v-b48fc893] {
10694
10694
  display: flex;
10695
10695
  align-items: center;
10696
10696
  justify-content: flex-end;
@@ -12246,14 +12246,14 @@ svg.portrait-icon[data-v-8bdb451e] {
12246
12246
  line-height: 20px;
12247
12247
  margin-top: 4px;
12248
12248
  }
12249
- .form-item.default.ref-autofill-editor.is-content-hidden[data-v-0f198b3d] .form-item__label {
12249
+ .form-item.default.ref-autofill-editor.is-content-hidden[data-v-449fd707] .form-item__label {
12250
12250
  margin-bottom: 0 !important ;
12251
12251
  }
12252
- .ref-autofill-editor__extra[data-v-0f198b3d] {
12252
+ .ref-autofill-editor__extra[data-v-449fd707] {
12253
12253
  display: inline-flex;
12254
12254
  align-items: center;
12255
12255
  }
12256
- .data-filter-button[data-v-0f198b3d] {
12256
+ .data-filter-button[data-v-449fd707] {
12257
12257
  height: 32px;
12258
12258
  border: 1px solid #d9d9d9;
12259
12259
  color: #333;
@@ -12264,11 +12264,11 @@ svg.portrait-icon[data-v-8bdb451e] {
12264
12264
  cursor: pointer;
12265
12265
  box-sizing: border-box;
12266
12266
  }
12267
- .data-filter-button[data-v-0f198b3d]:hover {
12267
+ .data-filter-button[data-v-449fd707]:hover {
12268
12268
  border-color: #026ac8;
12269
12269
  color: #026ac8;
12270
12270
  }
12271
- .data-filter-button.primary[data-v-0f198b3d] {
12271
+ .data-filter-button.primary[data-v-449fd707] {
12272
12272
  border-color: #026ac8;
12273
12273
  background-color: #026ac8;
12274
12274
  color: #fff;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gct-paas/word",
3
- "version": "0.1.63-beta.6",
3
+ "version": "0.1.63-beta.8",
4
4
  "description": "GCT 在线 word",
5
5
  "keywords": [
6
6
  "vue",