hoeditor-web 3.3.7-beta.0 → 3.3.7-beta.2

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.
package/lib/hoeditor.mjs CHANGED
@@ -1,12 +1,13 @@
1
1
  import "vue";
2
- import { H as i, d as r, b as e, a as l, e as t, T as H, f as d, i as f } from "./index-BMBgyj0h.mjs";
2
+ import { B as e, H as i, d as r, b as t, a as l, e as H, T as d, f as n, i as B } from "./index-bO7fevfh.mjs";
3
3
  export {
4
+ e as BusinessDataKeys,
4
5
  i as HoDocs,
5
6
  r as HoEditorProvide,
6
- e as HoMedicalExpression,
7
+ t as HoMedicalExpression,
7
8
  l as HoRightMenu,
8
- t as HoToolBar,
9
- H as ToolBar,
10
- d as default,
11
- f as install
9
+ H as HoToolBar,
10
+ d as ToolBar,
11
+ n as default,
12
+ B as install
12
13
  };
@@ -23031,7 +23031,7 @@ WebPDecoder.prototype.getData = function() {
23031
23031
  (function(a) {
23032
23032
  function t() {
23033
23033
  return function() {
23034
- return globalObject.canvg ? Promise.resolve(globalObject.canvg) : import("./index.es-BcdwwgwB.mjs");
23034
+ return globalObject.canvg ? Promise.resolve(globalObject.canvg) : import("./index.es-DHit0CXU.mjs");
23035
23035
  }().catch(function(r) {
23036
23036
  return Promise.reject(new Error("Could not load canvg: " + r));
23037
23037
  }).then(function(r) {
@@ -24626,7 +24626,7 @@ class DrawSignNode extends DrawCombineNode {
24626
24626
  }
24627
24627
  }
24628
24628
  }
24629
- const version = "3.3.7-beta.0";
24629
+ const version = "3.3.7-beta.2";
24630
24630
  var FingerPosition = /* @__PURE__ */ ((a) => (a[a.left = 0] = "left", a[a.center = 1] = "center", a[a.right = 2] = "right", a))(FingerPosition || {});
24631
24631
  class SignNode extends BaseNode {
24632
24632
  constructor(hoEditorFactoryID, rootNodes, pNode, nodeType, number, type, name, signType, signFormat, signor, signTime, signTimeFormat, imgSrc, imgWidth, imgHeight, customProperty, isTemplate, styleIndex, connectMode, isFront, allowEditSignTime, fingerPrintSrc, fingerPosition, attribute, connectChar, otherProperties, dataId, associatedElement, associatedPatientElement, isTemp, innerIdentifier) {
@@ -52116,7 +52116,7 @@ class HTMLconverter2 {
52116
52116
  }
52117
52117
  const f = (g) => {
52118
52118
  let y = 0, w = g.style.width;
52119
- return (w == "0px" || w == "0pt" || w == "0") && (w = "30px"), w && (w.indexOf("pt") >= 0 ? (y = parseFloat(w.substring(0, w.indexOf("pt"))), y = n.unitConvert.fontPt2Pix(y)) : w.indexOf("px") >= 0 ? y = parseFloat(w.substring(0, w.indexOf("px"))) : y = parseFloat(w)), y;
52119
+ return (w == "0px" || w == "0pt" || w == "0") && (w = "30px"), w && (w.indexOf("%") >= 0 ? y = Math.round(parseFloat(w) / 100 * o.getParentWidth()) : w.indexOf("pt") >= 0 ? (y = parseFloat(w.substring(0, w.indexOf("pt"))), y = n.unitConvert.fontPt2Pix(y)) : w.indexOf("px") >= 0 ? y = parseFloat(w.substring(0, w.indexOf("px"))) : y = parseFloat(w)), y;
52120
52120
  };
52121
52121
  for (let g = 0; g < r[u].length; g++) {
52122
52122
  let y = 0;
@@ -58898,7 +58898,7 @@ class TOHTMLConverter {
58898
58898
  } else if (t.nodeType == NodeType$1[NodeType$1.ntCell]) {
58899
58899
  r += "margin: 0;";
58900
58900
  let l = 0;
58901
- if (o.colWidth && n.unitConvert.pxToPt(o.colWidth), r += o.colWidth ? `width:${l}pt;` : "", o.crossLineType)
58901
+ if (o.colWidth && (l = n.unitConvert.pxToPt(o.colWidth)), r += o.colWidth ? `width:${l}pt;` : "", o.crossLineType)
58902
58902
  switch (o.crossLineType) {
58903
58903
  case CrossLineType[CrossLineType.ct02]: {
58904
58904
  r += "mso-diagonal-down: 0.5pt solid windowtext;";
@@ -60297,6 +60297,28 @@ class VueController {
60297
60297
  commonParamList.set(o, r[o]);
60298
60298
  });
60299
60299
  }
60300
+ /**
60301
+ * 取业务数据(通用入口)
60302
+ * 编辑器不直接调接口,由宿主通过 setHoEditorFactoryParams 注入 onFetchBusinessData,按 key 分发
60303
+ * 未注入、超时、异常 一律返回 null,由调用方按「无数据」处理
60304
+ * @param key 业务数据标识,见 src/businessDataKeys.ts
60305
+ * @param params 透传给宿主的附加参数
60306
+ * @param timeout 超时时间(ms),防止宿主回调不 resolve 导致调用方一直等待
60307
+ */
60308
+ async getBusinessData(t, r, o = 5e3) {
60309
+ const n = HOEditorFactorys.instance().getFactory(this._hoEditorFactoryID), s = n == null ? void 0 : n.onFetchBusinessData;
60310
+ if (typeof s != "function") return null;
60311
+ try {
60312
+ return await Promise.race([
60313
+ Promise.resolve(s(t, r)),
60314
+ new Promise((l, c) => {
60315
+ setTimeout(() => c(new Error(`onFetchBusinessData timeout: ${t}`)), o);
60316
+ })
60317
+ ]);
60318
+ } catch {
60319
+ return null;
60320
+ }
60321
+ }
60300
60322
  /**
60301
60323
  * 设置页面属性
60302
60324
  */
@@ -63784,7 +63806,7 @@ class VueController {
63784
63806
  const o = HOEditorFactorys.instance().getFactory(this._hoEditorFactoryID);
63785
63807
  let n = o.docTree.getNodeLastPath(t.previousLeaf());
63786
63808
  const s = t.getNodePath(), l = new NodeChangeEvent(this._hoEditorFactoryID, DocAction.daModifyStyle, n, s);
63787
- l.oldEndPath = s, l.afterChangePath = s, l.oldDrawLines = new SelectRange(this._hoEditorFactoryID).getRangeDrawLines(n, s, !0, !0), t.imageDataBase64String = r, t.isBackFilled = !0, t.node2DrawNode(), o.docTree.change(l);
63809
+ l.oldEndPath = s, l.afterChangePath = s, l.oldDrawLines = new SelectRange(this._hoEditorFactoryID).getRangeDrawLines(n, s, !0, !0), t.imageDataBase64String = r, t.isBackFilled = !0, t.node2DrawNode(), o.docTree.change(l), this.changeIsModify(!0);
63788
63810
  }
63789
63811
  /**
63790
63812
  * 恢复回填占位:删除已回填的真实图片,还原为空占位图
@@ -63795,7 +63817,7 @@ class VueController {
63795
63817
  const r = createBackFillPlaceholder(getBackFillText(t.backFillType), Number(t.width), Number(t.height)), o = HOEditorFactorys.instance().getFactory(this._hoEditorFactoryID);
63796
63818
  let n = o.docTree.getNodeLastPath(t.previousLeaf());
63797
63819
  const s = t.getNodePath(), l = new NodeChangeEvent(this._hoEditorFactoryID, DocAction.daModifyStyle, n, s);
63798
- l.oldEndPath = s, l.afterChangePath = s, l.oldDrawLines = new SelectRange(this._hoEditorFactoryID).getRangeDrawLines(n, s, !0, !0), t.imageDataBase64String = r, t.isBackFilled = !1, t.node2DrawNode(), o.docTree.change(l);
63820
+ l.oldEndPath = s, l.afterChangePath = s, l.oldDrawLines = new SelectRange(this._hoEditorFactoryID).getRangeDrawLines(n, s, !0, !0), t.imageDataBase64String = r, t.isBackFilled = !1, t.node2DrawNode(), o.docTree.change(l), this.changeIsModify(!0);
63799
63821
  }
63800
63822
  updateFigure(t, r, o, n, s, l = !1) {
63801
63823
  const c = HOEditorFactorys.instance().getFactory(this._hoEditorFactoryID);
@@ -73176,6 +73198,14 @@ class HOEditorFactory {
73176
73198
  // 绘制模式 1: Unicode 转义 2: 字形
73177
73199
  /** 编辑器指令回调:宿主可通过 setHoEditorFactoryParams 绑定,接收编辑器发出的指令及参数 */
73178
73200
  b(this, "onEditorCommand", null);
73201
+ /**
73202
+ * 业务数据取数回调:宿主可通过 setHoEditorFactoryParams 绑定
73203
+ * 编辑器不直接调接口,各处需要外部数据时统一走这里,用 key 区分取哪份数据
73204
+ * @param key 业务数据标识,见 src/businessDataKeys.ts
73205
+ * @param params 透传给宿主的附加参数
73206
+ * @returns 取到的数据;取数失败可直接抛错或返回空值,编辑器按「无数据」处理
73207
+ */
73208
+ b(this, "onFetchBusinessData", null);
73179
73209
  this._hoEditorFactoryId = t;
73180
73210
  }
73181
73211
  /**
@@ -74104,7 +74134,62 @@ const QrCode = __component__$16.exports, lBZ11 = "data:image/png;base64,iVBORw0K
74104
74134
  }, Symbol.toStringTag, { value: "Module" })), rTZ81 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE4AAACXCAYAAAC7m236AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAHOmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOS0wNS0wNlQxNTo0NDoxOSswODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wNS0wNlQxNTo0NjozMyswODowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTktMDUtMDZUMTU6NDY6MzMrMDg6MDAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6YjUzZTEzNjYtMDcyNC1iODQxLTg1ZDItNWZhNDA0ZjBmYzE5IiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6NTVjMjUzMTItNDZkNC03YjRhLWE1NmQtNTk0MWJkMWJiMjI1IiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ZjZkM2FmYWItZDdlZS05NjRiLWJhYTYtNTE0MWZhNzE3NTA4IiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpmNmQzYWZhYi1kN2VlLTk2NGItYmFhNi01MTQxZmE3MTc1MDgiIHN0RXZ0OndoZW49IjIwMTktMDUtMDZUMTU6NDQ6MTkrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjNmZjMzZjg2LTIyZDktYjk0NC1hYjc4LWZiZDA2M2EyZWVhMCIgc3RFdnQ6d2hlbj0iMjAxOS0wNS0wNlQxNTo0NDoxOSswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YjUzZTEzNjYtMDcyNC1iODQxLTg1ZDItNWZhNDA0ZjBmYzE5IiBzdEV2dDp3aGVuPSIyMDE5LTA1LTA2VDE1OjQ2OjMzKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT5ENjYwM0U3RTFGMERCQTY4RTQ1MUExQjFCQUVDQjY2Qzwv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", __vite_glob_0_31 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
74105
74135
  __proto__: null,
74106
74136
  default: rTZ81
74107
- }, Symbol.toStringTag, { value: "Module" })), ywtImages = /* @__PURE__ */ Object.assign({ "/src/assets/images/ywt/l-b-z-1-1.png": __vite_glob_0_0, "/src/assets/images/ywt/l-b-z-2-1.png": __vite_glob_0_1, "/src/assets/images/ywt/l-b-z-3-1.png": __vite_glob_0_2, "/src/assets/images/ywt/l-b-z-4-1.png": __vite_glob_0_3, "/src/assets/images/ywt/l-b-z-5-1.png": __vite_glob_0_4, "/src/assets/images/ywt/l-b-z-6-1.png": __vite_glob_0_5, "/src/assets/images/ywt/l-b-z-7-1.png": __vite_glob_0_6, "/src/assets/images/ywt/l-b-z-8-1.png": __vite_glob_0_7, "/src/assets/images/ywt/l-t-z-1-1.png": __vite_glob_0_8, "/src/assets/images/ywt/l-t-z-2-1.png": __vite_glob_0_9, "/src/assets/images/ywt/l-t-z-3-1.png": __vite_glob_0_10, "/src/assets/images/ywt/l-t-z-4-1.png": __vite_glob_0_11, "/src/assets/images/ywt/l-t-z-5-1.png": __vite_glob_0_12, "/src/assets/images/ywt/l-t-z-6-1.png": __vite_glob_0_13, "/src/assets/images/ywt/l-t-z-7-1.png": __vite_glob_0_14, "/src/assets/images/ywt/l-t-z-8-1.png": __vite_glob_0_15, "/src/assets/images/ywt/r-b-z-1-1.png": __vite_glob_0_16, "/src/assets/images/ywt/r-b-z-2-1.png": __vite_glob_0_17, "/src/assets/images/ywt/r-b-z-3-1.png": __vite_glob_0_18, "/src/assets/images/ywt/r-b-z-4-1.png": __vite_glob_0_19, "/src/assets/images/ywt/r-b-z-5-1.png": __vite_glob_0_20, "/src/assets/images/ywt/r-b-z-6-1.png": __vite_glob_0_21, "/src/assets/images/ywt/r-b-z-7-1.png": __vite_glob_0_22, "/src/assets/images/ywt/r-b-z-8-1.png": __vite_glob_0_23, "/src/assets/images/ywt/r-t-z-1-1.png": __vite_glob_0_24, "/src/assets/images/ywt/r-t-z-2-1.png": __vite_glob_0_25, "/src/assets/images/ywt/r-t-z-3-1.png": __vite_glob_0_26, "/src/assets/images/ywt/r-t-z-4-1.png": __vite_glob_0_27, "/src/assets/images/ywt/r-t-z-5-1.png": __vite_glob_0_28, "/src/assets/images/ywt/r-t-z-6-1.png": __vite_glob_0_29, "/src/assets/images/ywt/r-t-z-7-1.png": __vite_glob_0_30, "/src/assets/images/ywt/r-t-z-8-1.png": __vite_glob_0_31 }), _sfc_main$15 = defineComponent({
74137
+ }, Symbol.toStringTag, { value: "Module" })), PERMANENT_QUADRANT_TO_KEY = {
74138
+ 1: "topLeft",
74139
+ // 患者右上
74140
+ 2: "topRight",
74141
+ // 患者左上
74142
+ 3: "bottomRight",
74143
+ // 患者左下
74144
+ 4: "bottomLeft"
74145
+ // 患者右下
74146
+ }, PRIMARY_QUADRANT_TO_KEY = {
74147
+ 5: "topLeft",
74148
+ 6: "topRight",
74149
+ 7: "bottomRight",
74150
+ 8: "bottomLeft"
74151
+ }, PRIMARY_TOOTH_LETTERS = ["A", "B", "C", "D", "E"], PRIMARY_LETTER_TO_PERMANENT = {
74152
+ A: "1",
74153
+ B: "2",
74154
+ C: "3",
74155
+ D: "4",
74156
+ E: "5"
74157
+ };
74158
+ function convertFdiTeethToQuadrants(a) {
74159
+ if (!Array.isArray(a) || a.length === 0) return null;
74160
+ const t = {
74161
+ topLeft: [],
74162
+ topRight: [],
74163
+ bottomLeft: [],
74164
+ bottomRight: []
74165
+ };
74166
+ return a.forEach((r) => {
74167
+ const o = String((r == null ? void 0 : r.vfc09) ?? "").trim();
74168
+ if (!/^[1-8][1-8]$/.test(o)) return;
74169
+ const n = o[0], s = Number(o[1]), l = n in PERMANENT_QUADRANT_TO_KEY, c = l ? PERMANENT_QUADRANT_TO_KEY[n] : PRIMARY_QUADRANT_TO_KEY[n];
74170
+ if (!c) return;
74171
+ let d;
74172
+ if (l)
74173
+ d = o[1];
74174
+ else if (s >= 1 && s <= 5)
74175
+ d = PRIMARY_TOOTH_LETTERS[s - 1];
74176
+ else
74177
+ return;
74178
+ t[c].includes(d) || t[c].push(d);
74179
+ }), Object.keys(t).forEach((r) => {
74180
+ t[r] = t[r].filter((o) => {
74181
+ const n = PRIMARY_LETTER_TO_PERMANENT[o];
74182
+ return !n || !t[r].includes(n);
74183
+ });
74184
+ }), t;
74185
+ }
74186
+ const BusinessDataKeys = {
74187
+ /**
74188
+ * style10 牙位图:医生站牙位数据
74189
+ * 返回 FDI 两位编码的记录数组,每项取 vfc09 字段(如 "11" 右上中切牙、"52" 右上乳侧切牙)
74190
+ */
74191
+ teethMap: "teethMap"
74192
+ }, ywtImages = /* @__PURE__ */ Object.assign({ "/src/assets/images/ywt/l-b-z-1-1.png": __vite_glob_0_0, "/src/assets/images/ywt/l-b-z-2-1.png": __vite_glob_0_1, "/src/assets/images/ywt/l-b-z-3-1.png": __vite_glob_0_2, "/src/assets/images/ywt/l-b-z-4-1.png": __vite_glob_0_3, "/src/assets/images/ywt/l-b-z-5-1.png": __vite_glob_0_4, "/src/assets/images/ywt/l-b-z-6-1.png": __vite_glob_0_5, "/src/assets/images/ywt/l-b-z-7-1.png": __vite_glob_0_6, "/src/assets/images/ywt/l-b-z-8-1.png": __vite_glob_0_7, "/src/assets/images/ywt/l-t-z-1-1.png": __vite_glob_0_8, "/src/assets/images/ywt/l-t-z-2-1.png": __vite_glob_0_9, "/src/assets/images/ywt/l-t-z-3-1.png": __vite_glob_0_10, "/src/assets/images/ywt/l-t-z-4-1.png": __vite_glob_0_11, "/src/assets/images/ywt/l-t-z-5-1.png": __vite_glob_0_12, "/src/assets/images/ywt/l-t-z-6-1.png": __vite_glob_0_13, "/src/assets/images/ywt/l-t-z-7-1.png": __vite_glob_0_14, "/src/assets/images/ywt/l-t-z-8-1.png": __vite_glob_0_15, "/src/assets/images/ywt/r-b-z-1-1.png": __vite_glob_0_16, "/src/assets/images/ywt/r-b-z-2-1.png": __vite_glob_0_17, "/src/assets/images/ywt/r-b-z-3-1.png": __vite_glob_0_18, "/src/assets/images/ywt/r-b-z-4-1.png": __vite_glob_0_19, "/src/assets/images/ywt/r-b-z-5-1.png": __vite_glob_0_20, "/src/assets/images/ywt/r-b-z-6-1.png": __vite_glob_0_21, "/src/assets/images/ywt/r-b-z-7-1.png": __vite_glob_0_22, "/src/assets/images/ywt/r-b-z-8-1.png": __vite_glob_0_23, "/src/assets/images/ywt/r-t-z-1-1.png": __vite_glob_0_24, "/src/assets/images/ywt/r-t-z-2-1.png": __vite_glob_0_25, "/src/assets/images/ywt/r-t-z-3-1.png": __vite_glob_0_26, "/src/assets/images/ywt/r-t-z-4-1.png": __vite_glob_0_27, "/src/assets/images/ywt/r-t-z-5-1.png": __vite_glob_0_28, "/src/assets/images/ywt/r-t-z-6-1.png": __vite_glob_0_29, "/src/assets/images/ywt/r-t-z-7-1.png": __vite_glob_0_30, "/src/assets/images/ywt/r-t-z-8-1.png": __vite_glob_0_31 }), _sfc_main$15 = defineComponent({
74108
74193
  name: "ExpressionForm",
74109
74194
  data() {
74110
74195
  return {
@@ -74113,6 +74198,8 @@ const QrCode = __component__$16.exports, lBZ11 = "data:image/png;base64,iVBORw0K
74113
74198
  isUseDate: !1,
74114
74199
  useText: !1,
74115
74200
  useDateFormat: "yyyy-MM-DD",
74201
+ // style10 牙位图「同步牙位图数据」:弹窗初始化时取一次并缓存,只用于判断按钮是否置灰,不回填
74202
+ teethMapData: null,
74116
74203
  names: {
74117
74204
  style1: i18nHelper("04-001-009-EMR.3.3.550", null, "经期史"),
74118
74205
  style2: i18nHelper("04-001-009-EMR.3.3.550", null, "经期史"),
@@ -74448,6 +74535,10 @@ const QrCode = __component__$16.exports, lBZ11 = "data:image/png;base64,iVBORw0K
74448
74535
  expressStyle() {
74449
74536
  return this.hoEditorProvider.expressStyle;
74450
74537
  },
74538
+ /** 医生站数据是否有效:数组为空、接口超时/失败(取数返回 null)都算「无数据」,同步按钮置灰 */
74539
+ hasTeethMapData() {
74540
+ return Array.isArray(this.teethMapData) && this.teethMapData.length > 0;
74541
+ },
74451
74542
  menoPauseAgeText() {
74452
74543
  return this.expressStyle === "style1" ? this.showAgeUnit ? i18nHelper("04-001-009-EMR.3.3.551", null, "岁") : "" : i18nHelper("04-001-009-EMR.3.3.551", null, "岁");
74453
74544
  }
@@ -74498,12 +74589,11 @@ const QrCode = __component__$16.exports, lBZ11 = "data:image/png;base64,iVBORw0K
74498
74589
  this.style13.age = t ? t[1] : "";
74499
74590
  }
74500
74591
  }
74592
+ this.expressStyle === "style10" && this.loadTeethMapData();
74501
74593
  },
74502
74594
  methods: {
74503
74595
  getImageUrl(a) {
74504
- const t = Object.keys(ywtImages).find(
74505
- (r) => r.endsWith(`/ywt/${a}`)
74506
- );
74596
+ const t = Object.keys(ywtImages).find((r) => r.endsWith(`/ywt/${a}`));
74507
74597
  return t ? ywtImages[t].default : "";
74508
74598
  },
74509
74599
  useDateChange() {
@@ -74553,6 +74643,19 @@ const QrCode = __component__$16.exports, lBZ11 = "data:image/png;base64,iVBORw0K
74553
74643
  bottomRight: a ? [] : [...this.style8.bottomRight]
74554
74644
  };
74555
74645
  },
74646
+ /** 取医生站牙位数据并缓存:只用于判断「同步牙位图数据」按钮是否置灰,不回填 */
74647
+ async loadTeethMapData() {
74648
+ this.teethMapData = await this.vueController.getBusinessData(BusinessDataKeys.teethMap);
74649
+ },
74650
+ /**
74651
+ * 同步牙位图数据:用初始化时缓存的那份数据完全覆盖当前选择,并直接提交落库
74652
+ * 映射结果已按「恒牙优先」消解掉恒牙/乳牙的同位置互斥,可直接赋值;
74653
+ * 不能再走 handleStyle10Value,那个是依赖数据顺序的「后覆盖前」逻辑
74654
+ */
74655
+ syncFromClinicData() {
74656
+ const a = convertFdiTeethToQuadrants(this.teethMapData);
74657
+ a && (this.style89 = { ...this.style89, ...a }, this.sure());
74658
+ },
74556
74659
  /** 反选 */
74557
74660
  reverse() {
74558
74661
  this.reverseOrSort("reverse");
@@ -74858,7 +74961,7 @@ var _sfc_render$15 = function a() {
74858
74961
  t.$set(t.style89, "bottomRight", o);
74859
74962
  }, expression: "style89.bottomRight" } }, t._l(["I", "II", "III", "IV", "V"], function(o) {
74860
74963
  return r("a-checkbox", { key: o + "d", attrs: { value: o } }, [t._v(t._s(o))]);
74861
- }), 1)], 1)])] : t._e(), t.expressStyle === "style10" ? [r("div", { staticClass: "style89 style10", staticStyle: { position: "relative" } }, [r("div", { staticClass: "style10-half-select-wrap" }, [r("a-button", { staticClass: "style10-half-select", on: { click: t.toggleAllTop } }, [t._v("横向全选")]), r("a-button", { staticClass: "style10-half-select", on: { click: t.toggleAllBottom } }, [t._v("横向全选")])], 1), r("p", { staticStyle: { position: "absolute", width: "1px", height: "100%", background: "#ccc", left: "429px", "z-index": "11" } }), r("div", { staticClass: "ho-emr-checkbox-expression" }, [r("a-checkbox-group", { staticClass: "ho-emr-checkbox-button ho-emr-checkbox-button-right", attrs: { value: t.style89.topLeft, size: "small" }, on: { change: t.topLeftChange } }, [r("ul", { staticStyle: { "justify-content": "right" } }, t._l(t.style10Right, function(o) {
74964
+ }), 1)], 1)])] : t._e(), t.expressStyle === "style10" ? [r("div", { staticClass: "style89 style10", staticStyle: { position: "relative" } }, [r("div", { staticClass: "style10-half-select-wrap" }, [r("a-button", { staticClass: "style10-half-select", on: { click: t.toggleAllTop } }, [t._v("横向全选")]), r("a-button", { staticClass: "style10-half-select", on: { click: t.toggleAllBottom } }, [t._v("横向全选")])], 1), r("p", { staticStyle: { position: "absolute", width: "1px", height: "100%", background: "#ccc", left: "419px", "z-index": "11" } }), r("div", { staticClass: "ho-emr-checkbox-expression" }, [r("a-checkbox-group", { staticClass: "ho-emr-checkbox-button ho-emr-checkbox-button-right", attrs: { value: t.style89.topLeft, size: "small" }, on: { change: t.topLeftChange } }, [r("ul", { staticStyle: { "justify-content": "right" } }, t._l(t.style10Right, function(o) {
74862
74965
  return r("li", { key: o + "a", class: { selected: t.style89.topLeft.includes(o[0]) || t.style89.topLeft.includes(o[1]) }, on: { click: function(n) {
74863
74966
  return t.topLeftClick(o[0]);
74864
74967
  } } }, [r("div", { class: "img-box" }, [r("img", { attrs: { src: t.getImageUrl("r-t-z-" + o[0] + "-1.png"), alt: "" } })])]);
@@ -74922,7 +75025,7 @@ var _sfc_render$15 = function a() {
74922
75025
  t.$set(t.style13, "scr", o);
74923
75026
  }, expression: "style13.scr" } })], 1)], 1), r("a-col", { attrs: { span: 12 } }, [r("a-form-model-item", { attrs: { label: "AUC(可选)", prop: "auc" } }, [r("a-input", { staticStyle: { width: "100%" }, attrs: { placeholder: "AUC", suffix: "" }, model: { value: t.style13.auc, callback: function(o) {
74924
75027
  t.$set(t.style13, "auc", o);
74925
- }, expression: "style13.auc" } })], 1)], 1)], 1)], 1), r("div", { staticClass: "style12-card", staticStyle: { "margin-top": "6px" } }, [t._m(7), r("div", { staticClass: "style12-card-content" }, [t.style13.ccr ? r("p", [t._v("CCR(肌酐清除率) = " + t._s(t.style13.ccr) + " mL/min")]) : t._e(), t.style13.dose ? r("p", [t._v("Carboplatin(卡铂剂量) = " + t._s(t.style13.dose) + " mg")]) : t._e()])])], 1)] : t._e()], 2), r("footer", { staticClass: "dialog-footer" }, [r("a-button", { staticStyle: { margin: "0 20px 0 0" }, attrs: { type: "primary" }, on: { click: t.sure } }, [t._v(i18nHelper("04-001-009-EMR.3.3.347", null, "确定"))]), t.expressStyle === "style8" || t.expressStyle === "style9" || t.expressStyle === "style10" ? r("a-button", { staticStyle: { margin: "0 20px 0 0" }, on: { click: t.reset } }, [t._v(i18nHelper("04-001-009-EMR.3.3.203", null, "重置"))]) : t._e(), t.expressStyle === "style8" || t.expressStyle === "style9" ? r("a-button", { staticStyle: { margin: "0 20px 0 0" }, on: { click: t.reverse } }, [t._v(i18nHelper("04-001-009-EMR.3.3.202", null, "反选"))]) : t._e(), t.expressStyle === "style8" || t.expressStyle === "style9" || t.expressStyle === "style10" ? r("a-button", { staticStyle: { margin: "0 20px 0 0" }, on: { click: t.all } }, [t._v(i18nHelper("04-001-009-EMR.3.3.201", null, "全选"))]) : t._e(), r("a-button", { on: { click: t.cancel } }, [t._v(i18nHelper("04-001-009-EMR.3.3.346", null, "取消"))])], 1)]);
75028
+ }, expression: "style13.auc" } })], 1)], 1)], 1)], 1), r("div", { staticClass: "style12-card", staticStyle: { "margin-top": "6px" } }, [t._m(7), r("div", { staticClass: "style12-card-content" }, [t.style13.ccr ? r("p", [t._v("CCR(肌酐清除率) = " + t._s(t.style13.ccr) + " mL/min")]) : t._e(), t.style13.dose ? r("p", [t._v("Carboplatin(卡铂剂量) = " + t._s(t.style13.dose) + " mg")]) : t._e()])])], 1)] : t._e()], 2), r("footer", { staticClass: "dialog-footer" }, [r("a-button", { staticStyle: { margin: "0 20px 0 0" }, attrs: { type: "primary" }, on: { click: t.sure } }, [t._v(i18nHelper("04-001-009-EMR.3.3.347", null, "确定"))]), t.expressStyle === "style10" ? r("a-tooltip", { attrs: { placement: "top", title: "牙位图数据来自诊断/医嘱" } }, [r("span", { staticStyle: { display: "inline-block", margin: "0 20px 0 0" } }, [r("a-button", { attrs: { disabled: !t.hasTeethMapData }, on: { click: t.syncFromClinicData } }, [t._v("同步牙位图数据")])], 1)]) : t._e(), t.expressStyle === "style8" || t.expressStyle === "style9" || t.expressStyle === "style10" ? r("a-button", { staticStyle: { margin: "0 20px 0 0" }, on: { click: t.reset } }, [t._v(i18nHelper("04-001-009-EMR.3.3.203", null, "重置"))]) : t._e(), t.expressStyle === "style8" || t.expressStyle === "style9" ? r("a-button", { staticStyle: { margin: "0 20px 0 0" }, on: { click: t.reverse } }, [t._v(i18nHelper("04-001-009-EMR.3.3.202", null, "反选"))]) : t._e(), t.expressStyle === "style8" || t.expressStyle === "style9" || t.expressStyle === "style10" ? r("a-button", { staticStyle: { margin: "0 20px 0 0" }, on: { click: t.all } }, [t._v(i18nHelper("04-001-009-EMR.3.3.201", null, "全选"))]) : t._e(), r("a-button", { on: { click: t.cancel } }, [t._v(i18nHelper("04-001-009-EMR.3.3.346", null, "取消"))])], 1)]);
74926
75029
  }, _sfc_staticRenderFns$15 = [function() {
74927
75030
  var a = this, t = a._self._c;
74928
75031
  return a._self._setupProxy, t("ul", { staticClass: "titles" }, [t("li", [a._v(i18nHelper("04-001-009-EMR.3.3.215", null, "第三磨牙"))]), t("li", [a._v(i18nHelper("04-001-009-EMR.3.3.214", null, "第二磨牙"))]), t("li", [a._v(i18nHelper("04-001-009-EMR.3.3.213", null, "第一磨牙"))]), t("li", [a._v(i18nHelper("04-001-009-EMR.3.3.212", null, "第二前磨牙"))]), t("li", [a._v(i18nHelper("04-001-009-EMR.3.3.211", null, "第一前磨牙"))]), t("li", [a._v(i18nHelper("04-001-009-EMR.3.3.210", null, "尖牙"))]), t("li", [a._v(i18nHelper("04-001-009-EMR.3.3.209", null, "侧切牙"))]), t("li", [a._v(i18nHelper("04-001-009-EMR.3.3.208", null, "中切牙"))]), t("li", [a._v(i18nHelper("04-001-009-EMR.3.3.208", null, "中切牙"))]), t("li", [a._v(i18nHelper("04-001-009-EMR.3.3.209", null, "侧切牙"))]), t("li", [a._v(i18nHelper("04-001-009-EMR.3.3.210", null, "尖牙"))]), t("li", [a._v(i18nHelper("04-001-009-EMR.3.3.211", null, "第一前磨牙"))]), t("li", [a._v(i18nHelper("04-001-009-EMR.3.3.212", null, "第二前磨牙"))]), t("li", [a._v(i18nHelper("04-001-009-EMR.3.3.213", null, "第一磨牙"))]), t("li", [a._v(i18nHelper("04-001-009-EMR.3.3.214", null, "第二磨牙"))]), t("li", [a._v(i18nHelper("04-001-009-EMR.3.3.215", null, "第三磨牙"))])]);
@@ -88536,6 +88639,7 @@ const _default = {
88536
88639
  $Rarewords
88537
88640
  };
88538
88641
  export {
88642
+ BusinessDataKeys as B,
88539
88643
  HoDocs as H,
88540
88644
  ToolBar as T,
88541
88645
  _typeof$2 as _,
@@ -1,4 +1,4 @@
1
- import { c as Da, _ as Va, g as il } from "./index-BMBgyj0h.mjs";
1
+ import { c as Da, _ as Va, g as il } from "./index-bO7fevfh.mjs";
2
2
  var fn = {}, cn = {}, cr, vn;
3
3
  function Q() {
4
4
  if (vn) return cr;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hoeditor-web",
3
- "version": "3.3.7-beta.0",
3
+ "version": "3.3.7-beta.2",
4
4
  "private": false,
5
5
  "main": "lib/hoeditor.mjs",
6
6
  "typings": "types/index.d.ts",