@cniot/mdd-editor 0.3.6 → 0.3.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.
package/build/index.es.js CHANGED
@@ -26382,6 +26382,7 @@ function MddTableForm(props, ref) {
26382
26382
  const [_2, _update] = useState(0);
26383
26383
  const [sortUpdateFlag, setSortUpdateFlag] = useState({});
26384
26384
  const dataRef = useRef(data);
26385
+ const panelKeysRef = useRef([]);
26385
26386
  const CompSchemaMap = useMemo(
26386
26387
  () => penetrateType === PenetrateTypes.FORM ? { ...CompSchema, ...formItems } : CompSchema,
26387
26388
  []
@@ -26389,12 +26390,24 @@ function MddTableForm(props, ref) {
26389
26390
  const forceUpdate = () => {
26390
26391
  _update(Math.random());
26391
26392
  };
26393
+ const syncPanelKeys = (list) => {
26394
+ const currentKeys = panelKeysRef.current;
26395
+ panelKeysRef.current = list.map((_22, index2) => currentKeys[index2] || uuidv4());
26396
+ };
26397
+ const getPanelKey = (index2) => {
26398
+ if (!panelKeysRef.current[index2]) {
26399
+ panelKeysRef.current[index2] = uuidv4();
26400
+ }
26401
+ return panelKeysRef.current[index2];
26402
+ };
26392
26403
  const updateData = (newData) => {
26393
- dataRef.current = newData;
26404
+ dataRef.current = Array.isArray(newData) ? newData : [];
26405
+ syncPanelKeys(dataRef.current);
26394
26406
  forceUpdate();
26395
26407
  };
26396
26408
  useEffect(() => {
26397
26409
  dataRef.current = Array.isArray(data) ? data : [];
26410
+ syncPanelKeys(dataRef.current);
26398
26411
  forceUpdate();
26399
26412
  }, [data]);
26400
26413
  useImperativeHandle(
@@ -26407,6 +26420,7 @@ function MddTableForm(props, ref) {
26407
26420
  []
26408
26421
  );
26409
26422
  const onRemoveHandle = (idx) => {
26423
+ panelKeysRef.current.splice(idx, 1);
26410
26424
  onRemove(idx);
26411
26425
  forceUpdate();
26412
26426
  };
@@ -26419,6 +26433,8 @@ function MddTableForm(props, ref) {
26419
26433
  const min = Math.min(dragIndex, hoverIndex);
26420
26434
  const max = Math.max(dragIndex, hoverIndex);
26421
26435
  dataRef.current.splice(hoverIndex, 0, dataRef.current.splice(dragIndex, 1)[0]);
26436
+ const movedPanelKey = panelKeysRef.current.splice(dragIndex, 1)[0] || uuidv4();
26437
+ panelKeysRef.current.splice(hoverIndex, 0, movedPanelKey);
26422
26438
  onSort(dataRef.current);
26423
26439
  forceUpdate();
26424
26440
  for (let i = min; i <= max; i++) {
@@ -26449,9 +26465,8 @@ function MddTableForm(props, ref) {
26449
26465
  }, /* @__PURE__ */ React$1.createElement(MddDndProvider, null, /* @__PURE__ */ React$1.createElement(Collapse, {
26450
26466
  accordion: true
26451
26467
  }, dataRef.current.map((item, idx) => {
26452
- const compKey = item.name || item.dataIndex || `${title2}_${idx}`;
26453
26468
  return /* @__PURE__ */ React$1.createElement(Panel$3, {
26454
- key: `${compKey}_${item.type || "unknown"}_${idx}`,
26469
+ key: getPanelKey(idx),
26455
26470
  title: /* @__PURE__ */ React$1.createElement(TitleRender$2, {
26456
26471
  index: idx,
26457
26472
  draggable,
@@ -30237,6 +30252,7 @@ function normalizeBridgeConfig(config2) {
30237
30252
  };
30238
30253
  }
30239
30254
  return {
30255
+ ...config2 || {},
30240
30256
  enabled: (config2 == null ? void 0 : config2.enabled) !== false,
30241
30257
  baseURL: (config2 == null ? void 0 : config2.baseURL) || DEFAULT_BRIDGE_URL
30242
30258
  };
@@ -30617,10 +30633,372 @@ function PullDiffDetail({ diffSummary }) {
30617
30633
  className: "mdd-local-ai-diff-pre"
30618
30634
  }, diffText) : null));
30619
30635
  }
30620
- function LocalAIDrawer(props) {
30636
+ const L4_CODE_PATTERN = /L4:([a-zA-Z0-9_-]+)/g;
30637
+ const DEFAULT_LINKED_PAGE_DETAIL_URL = "/l4/api/v1/console/get-by-code";
30638
+ const LINKED_PAGE_LOG_PREFIX = "[MDD AI Bridge][L4]";
30639
+ const LOCAL_CHANGE_SKIP_REASON = "\u672C\u5730\u5DF2\u6709\u672A\u540C\u6B65\u4FEE\u6539";
30640
+ const normalizeText = (value) => {
30641
+ if (typeof value === "string")
30642
+ return value;
30643
+ if (value == null)
30644
+ return "";
30645
+ return JSON.stringify(value, null, 2);
30646
+ };
30647
+ const logLinkedPageDebug = (...args) => {
30648
+ if (typeof console !== "undefined" && typeof console.info === "function") {
30649
+ console.info(LINKED_PAGE_LOG_PREFIX, ...args);
30650
+ }
30651
+ };
30652
+ const collectL4ReferencesFromText = (text = "", source = "script", path = "$") => {
30653
+ const references = [];
30654
+ const pattern = new RegExp(L4_CODE_PATTERN);
30655
+ let match = pattern.exec(String(text));
30656
+ while (match) {
30657
+ references.push({
30658
+ code: match[1],
30659
+ source,
30660
+ paths: [path]
30661
+ });
30662
+ match = pattern.exec(String(text));
30663
+ }
30664
+ return references;
30665
+ };
30666
+ const collectL4ReferencesFromJSON = (value, path = "$", references = []) => {
30667
+ if (typeof value === "string") {
30668
+ references.push(...collectL4ReferencesFromText(value, "schema", path));
30669
+ return references;
30670
+ }
30671
+ if (Array.isArray(value)) {
30672
+ value.forEach((item, index2) => collectL4ReferencesFromJSON(item, `${path}[${index2}]`, references));
30673
+ return references;
30674
+ }
30675
+ if (value && typeof value === "object") {
30676
+ Object.keys(value).forEach((key) => {
30677
+ references.push(...collectL4ReferencesFromText(key, "schema-key", `${path}.${key}`));
30678
+ collectL4ReferencesFromJSON(value[key], `${path}.${key}`, references);
30679
+ });
30680
+ }
30681
+ return references;
30682
+ };
30683
+ const mergeL4References = (references = [], rootCode) => {
30684
+ const referenceMap = /* @__PURE__ */ new Map();
30685
+ references.forEach((reference) => {
30686
+ if (!(reference == null ? void 0 : reference.code) || reference.code === rootCode)
30687
+ return;
30688
+ const existing = referenceMap.get(reference.code) || {
30689
+ code: reference.code,
30690
+ source: reference.source,
30691
+ paths: []
30692
+ };
30693
+ existing.source = existing.source === reference.source ? existing.source : "mixed";
30694
+ existing.paths = [.../* @__PURE__ */ new Set([...existing.paths, ...reference.paths || []])];
30695
+ referenceMap.set(reference.code, existing);
30696
+ });
30697
+ return [...referenceMap.values()];
30698
+ };
30699
+ const collectLinkedPageReferences = ({ schemaJson, scriptInfo, rootCode, extraSources = [] }) => {
30700
+ const schemaReferences = collectL4ReferencesFromJSON(schemaJson);
30701
+ const scriptReferences = collectL4ReferencesFromText(scriptInfo, "script", "mdd.script.jsx");
30702
+ const extraReferences = extraSources.flatMap(
30703
+ (source) => collectL4ReferencesFromText((source == null ? void 0 : source.text) || "", (source == null ? void 0 : source.source) || "extra", (source == null ? void 0 : source.path) || "$")
30704
+ );
30705
+ return mergeL4References([...schemaReferences, ...scriptReferences, ...extraReferences], rootCode);
30706
+ };
30707
+ const createLinkedPageExtraSources = (data = {}, prefix = "payload") => {
30708
+ const sourceFields = [
30709
+ "schemaInfo",
30710
+ "schemaJson",
30711
+ "schema",
30712
+ "scriptInfo",
30713
+ "script",
30714
+ "style",
30715
+ "compileFile",
30716
+ "translateInfo",
30717
+ "serverDataHandle",
30718
+ "metaData",
30719
+ "sqlData",
30720
+ "sqlDataCount",
30721
+ "swaggerInfo",
30722
+ "dataPermissions",
30723
+ "pageMeta",
30724
+ "pageIR"
30725
+ ];
30726
+ return sourceFields.filter((fieldName) => data[fieldName] != null).map((fieldName) => ({
30727
+ source: fieldName,
30728
+ path: `${prefix}.${fieldName}`,
30729
+ text: normalizeText(data[fieldName])
30730
+ }));
30731
+ };
30732
+ const enqueueLinkedPageReferences = ({ queue, referenceMap, references, parentCode, depth, rootCode, visitedCodes }) => {
30733
+ references.forEach((reference) => {
30734
+ if (!(reference == null ? void 0 : reference.code) || reference.code === rootCode)
30735
+ return;
30736
+ const nextReference = {
30737
+ ...reference,
30738
+ parentCode,
30739
+ depth
30740
+ };
30741
+ const existing = referenceMap.get(reference.code);
30742
+ if (existing) {
30743
+ existing.source = existing.source === nextReference.source ? existing.source : "mixed";
30744
+ existing.paths = [.../* @__PURE__ */ new Set([...existing.paths || [], ...nextReference.paths || []])];
30745
+ existing.parents = [.../* @__PURE__ */ new Set([...existing.parents || [], parentCode])];
30746
+ existing.depth = Math.min(existing.depth || depth, depth);
30747
+ return;
30748
+ }
30749
+ referenceMap.set(reference.code, {
30750
+ ...nextReference,
30751
+ parents: [parentCode]
30752
+ });
30753
+ if (!visitedCodes.has(reference.code)) {
30754
+ queue.push(nextReference);
30755
+ }
30756
+ });
30757
+ };
30758
+ const fetchLinkedPageByCode = async (code, config2 = {}) => {
30621
30759
  var _a2;
30760
+ const detailUrl = config2.linkedPageDetailUrl || DEFAULT_LINKED_PAGE_DETAIL_URL;
30761
+ const separator = detailUrl.includes("?") ? "&" : "?";
30762
+ const url = `${detailUrl}${separator}code=${encodeURIComponent(code)}`;
30763
+ logLinkedPageDebug("fetch page detail", { code, url });
30764
+ const response = await fetch(url, {
30765
+ credentials: "include"
30766
+ });
30767
+ const text = await response.text();
30768
+ let result = null;
30769
+ try {
30770
+ result = text ? JSON.parse(text) : null;
30771
+ } catch (error) {
30772
+ throw new Error(`\u5173\u8054 L4 \u9875\u9762\u8BE6\u60C5\u63A5\u53E3\u8FD4\u56DE\u975E JSON\uFF1A${text || response.status}`);
30773
+ }
30774
+ if (!response.ok) {
30775
+ throw new Error((result == null ? void 0 : result.errorMessage) || (result == null ? void 0 : result.message) || `\u5173\u8054 L4 \u9875\u9762\u8BE6\u60C5\u63A5\u53E3\u8BF7\u6C42\u5931\u8D25\uFF1A${response.status}`);
30776
+ }
30777
+ if ((result == null ? void 0 : result.success) === false) {
30778
+ throw new Error((result == null ? void 0 : result.errorMessage) || (result == null ? void 0 : result.message) || (result == null ? void 0 : result.msg) || "\u5173\u8054 L4 \u9875\u9762\u8BE6\u60C5\u63A5\u53E3\u8FD4\u56DE\u5931\u8D25");
30779
+ }
30780
+ const pageData = (result == null ? void 0 : result.data) || result;
30781
+ logLinkedPageDebug("fetch page detail success", {
30782
+ code,
30783
+ name: (pageData == null ? void 0 : pageData.name) || ((_a2 = pageData == null ? void 0 : pageData.pageMeta) == null ? void 0 : _a2.name),
30784
+ hasSchemaInfo: Boolean(pageData == null ? void 0 : pageData.schemaInfo),
30785
+ hasScriptInfo: Boolean(pageData == null ? void 0 : pageData.scriptInfo),
30786
+ hasCompileFile: Boolean(pageData == null ? void 0 : pageData.compileFile)
30787
+ });
30788
+ return pageData;
30789
+ };
30790
+ const getLinkedPageResolver = (config2) => {
30791
+ if (typeof (config2 == null ? void 0 : config2.resolveLinkedPage) === "function")
30792
+ return config2.resolveLinkedPage;
30793
+ if (typeof window !== "undefined" && typeof window.__MDD_AI_BRIDGE_RESOLVE_L4_PAGE === "function") {
30794
+ return window.__MDD_AI_BRIDGE_RESOLVE_L4_PAGE;
30795
+ }
30796
+ return (code) => fetchLinkedPageByCode(code, config2);
30797
+ };
30798
+ const normalizeLinkedPagePayload = (reference, pageData) => {
30799
+ var _a2, _b2, _c2, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s;
30800
+ if (!pageData)
30801
+ return null;
30802
+ const schemaJson = parseSchema(pageData.schemaInfo || pageData.schemaJson || pageData.schema || "{}") || {};
30803
+ const rawPageMeta = pageData.pageMeta || pageData.meta || {};
30804
+ const pageMeta = {
30805
+ ...rawPageMeta,
30806
+ code: pageData.code || rawPageMeta.code || reference.code,
30807
+ name: (_a2 = pageData.name) != null ? _a2 : rawPageMeta.name,
30808
+ region: (_b2 = pageData.region) != null ? _b2 : rawPageMeta.region,
30809
+ module: (_c2 = pageData.module) != null ? _c2 : rawPageMeta.module,
30810
+ moduleName: (_d = pageData.moduleName) != null ? _d : rawPageMeta.moduleName,
30811
+ status: (_e = pageData.status) != null ? _e : rawPageMeta.status,
30812
+ grade: (_f = pageData.grade) != null ? _f : rawPageMeta.grade,
30813
+ mddTemplateType: (_g = pageData.mddTemplateType) != null ? _g : rawPageMeta.mddTemplateType,
30814
+ buildType: (_h = pageData.buildType) != null ? _h : rawPageMeta.buildType,
30815
+ operateType: (_i = pageData.operateType) != null ? _i : rawPageMeta.operateType,
30816
+ gmtModified: (_j = pageData.gmtModified) != null ? _j : rawPageMeta.gmtModified,
30817
+ modifierAccount: (_k = pageData.modifierAccount) != null ? _k : rawPageMeta.modifierAccount,
30818
+ modifierName: (_l = pageData.modifierName) != null ? _l : rawPageMeta.modifierName
30819
+ };
30820
+ const script = (_p = (_o = (_n = (_m = pageData.scriptInfo) == null ? void 0 : _m.script) != null ? _n : pageData.scriptInfo) != null ? _o : pageData.script) != null ? _p : "";
30821
+ const style2 = (_s = (_r = (_q = pageData.scriptInfo) == null ? void 0 : _q.style) != null ? _r : pageData.style) != null ? _s : "";
30822
+ const pageIR = pageData.pageIR || buildPageIR({
30823
+ schemaJson,
30824
+ script,
30825
+ style: style2,
30826
+ pageMeta
30827
+ });
30828
+ return {
30829
+ code: pageMeta.code,
30830
+ pageMeta,
30831
+ schemaInfo: normalizeText(pageData.schemaInfo || schemaJson),
30832
+ scriptInfo: script,
30833
+ style: style2,
30834
+ pageIR,
30835
+ extraSources: createLinkedPageExtraSources(
30836
+ {
30837
+ ...pageData,
30838
+ pageMeta,
30839
+ pageIR,
30840
+ style: style2
30841
+ },
30842
+ `linkedPage.${pageMeta.code}`
30843
+ ),
30844
+ linkedReference: reference
30845
+ };
30846
+ };
30847
+ const buildLinkedPagePayload = async (payload, config2) => {
30848
+ const rootSchemaJson = parseSchema(payload.schemaInfo) || {};
30849
+ const resolver = getLinkedPageResolver(config2);
30850
+ let rootPageData = null;
30851
+ try {
30852
+ logLinkedPageDebug("fetch root page detail for raw scan", { code: payload.code });
30853
+ rootPageData = await resolver(payload.code, {
30854
+ code: payload.code,
30855
+ source: "root",
30856
+ depth: 0,
30857
+ paths: ["root.get-by-code"]
30858
+ });
30859
+ } catch (error) {
30860
+ logLinkedPageDebug("fetch root page detail failed, fallback to editor payload only", {
30861
+ code: payload.code,
30862
+ reason: (error == null ? void 0 : error.message) || String(error)
30863
+ });
30864
+ }
30865
+ const directReferences = collectLinkedPageReferences({
30866
+ schemaJson: rootSchemaJson,
30867
+ scriptInfo: payload.scriptInfo,
30868
+ rootCode: payload.code,
30869
+ extraSources: [
30870
+ ...payload.extraSources || [],
30871
+ ...createLinkedPageExtraSources(rootPageData || {}, `rootApi.${payload.code}`)
30872
+ ]
30873
+ });
30874
+ logLinkedPageDebug("scan root page", {
30875
+ code: payload.code,
30876
+ source: rootPageData ? "editor payload + root get-by-code raw data" : "editor payload only",
30877
+ directReferences: directReferences.map((reference) => ({
30878
+ code: reference.code,
30879
+ source: reference.source,
30880
+ paths: reference.paths
30881
+ }))
30882
+ });
30883
+ const queue = [];
30884
+ const referenceMap = /* @__PURE__ */ new Map();
30885
+ const visitedCodes = /* @__PURE__ */ new Set([payload.code]);
30886
+ const linkedPages = [];
30887
+ const failedLinkedPages = [];
30888
+ enqueueLinkedPageReferences({
30889
+ queue,
30890
+ referenceMap,
30891
+ references: directReferences,
30892
+ parentCode: payload.code,
30893
+ depth: 1,
30894
+ rootCode: payload.code,
30895
+ visitedCodes
30896
+ });
30897
+ while (queue.length > 0) {
30898
+ const currentReference = queue.shift();
30899
+ if (!(currentReference == null ? void 0 : currentReference.code) || visitedCodes.has(currentReference.code))
30900
+ continue;
30901
+ visitedCodes.add(currentReference.code);
30902
+ const latestReference = referenceMap.get(currentReference.code) || currentReference;
30903
+ try {
30904
+ logLinkedPageDebug("resolve linked page", {
30905
+ code: currentReference.code,
30906
+ parentCode: latestReference.parentCode,
30907
+ depth: latestReference.depth,
30908
+ paths: latestReference.paths
30909
+ });
30910
+ const pageData = await resolver(currentReference.code, latestReference);
30911
+ const linkedPage = normalizeLinkedPagePayload(latestReference, pageData);
30912
+ if (!linkedPage) {
30913
+ failedLinkedPages.push({
30914
+ ...latestReference,
30915
+ reason: "\u5173\u8054 L4 \u9875\u9762\u8FD4\u56DE\u4E3A\u7A7A"
30916
+ });
30917
+ continue;
30918
+ }
30919
+ linkedPages.push(linkedPage);
30920
+ const linkedPageSchemaJson = parseSchema(linkedPage.schemaInfo) || {};
30921
+ const childReferences = collectLinkedPageReferences({
30922
+ schemaJson: linkedPageSchemaJson,
30923
+ scriptInfo: linkedPage.scriptInfo,
30924
+ rootCode: payload.code,
30925
+ extraSources: linkedPage.extraSources
30926
+ });
30927
+ logLinkedPageDebug("scan child page", {
30928
+ code: linkedPage.code,
30929
+ depth: latestReference.depth,
30930
+ childReferences: childReferences.map((reference) => ({
30931
+ code: reference.code,
30932
+ source: reference.source,
30933
+ paths: reference.paths
30934
+ }))
30935
+ });
30936
+ enqueueLinkedPageReferences({
30937
+ queue,
30938
+ referenceMap,
30939
+ references: childReferences,
30940
+ parentCode: linkedPage.code,
30941
+ depth: (latestReference.depth || 1) + 1,
30942
+ rootCode: payload.code,
30943
+ visitedCodes
30944
+ });
30945
+ } catch (error) {
30946
+ failedLinkedPages.push({
30947
+ ...latestReference,
30948
+ reason: (error == null ? void 0 : error.message) || "\u5173\u8054 L4 \u9875\u9762\u52A0\u8F7D\u5931\u8D25"
30949
+ });
30950
+ }
30951
+ }
30952
+ const linkedPageReferences = [...referenceMap.values()];
30953
+ const maxDepth = linkedPageReferences.reduce((depth, reference) => Math.max(depth, reference.depth || 1), 0);
30954
+ const mergedLinkedPages = linkedPages.map((linkedPage) => ({
30955
+ ...linkedPage,
30956
+ linkedReference: referenceMap.get(linkedPage.code) || linkedPage.linkedReference
30957
+ }));
30958
+ logLinkedPageDebug("scan complete", {
30959
+ code: payload.code,
30960
+ directCount: directReferences.length,
30961
+ totalCount: linkedPageReferences.length,
30962
+ syncedCount: mergedLinkedPages.length,
30963
+ failedCount: failedLinkedPages.length,
30964
+ references: linkedPageReferences.map((reference) => ({
30965
+ code: reference.code,
30966
+ source: reference.source,
30967
+ depth: reference.depth,
30968
+ paths: reference.paths,
30969
+ parents: reference.parents
30970
+ })),
30971
+ failed: failedLinkedPages
30972
+ });
30973
+ return {
30974
+ ...payload,
30975
+ linkedPageReferences,
30976
+ linkedPageScan: {
30977
+ directCount: directReferences.length,
30978
+ totalCount: linkedPageReferences.length,
30979
+ maxDepth
30980
+ },
30981
+ linkedPages: mergedLinkedPages,
30982
+ failedLinkedPages
30983
+ };
30984
+ };
30985
+ const isLocalChangeSkippedPage = (page) => String((page == null ? void 0 : page.reason) || "").includes(LOCAL_CHANGE_SKIP_REASON);
30986
+ const createLinkedPushSummary = (res, fallbackDir) => ({
30987
+ type: "push",
30988
+ dir: (res == null ? void 0 : res.dir) || fallbackDir,
30989
+ linkedPages: (res == null ? void 0 : res.linkedPages) || {}
30990
+ });
30991
+ const createLinkedPullSummary = (res) => {
30992
+ const changedPages = ((res == null ? void 0 : res.linkedPageDiffs) || []).filter((item) => item.changed);
30993
+ if (!changedPages.length)
30994
+ return "";
30995
+ const codes = changedPages.map((item) => item.code).join("\u3001");
30996
+ return `\u68C0\u6D4B\u5230\u5173\u8054 L4 \u9875\u9762\u4E5F\u5B58\u5728\u672C\u5730\u4FEE\u6539\uFF1A${codes}\u3002\u5F53\u524D\u53EA\u540C\u6B65\u4E86\u5F53\u524D\u9875\u9762\uFF0C\u8BF7\u5206\u522B\u6253\u5F00\u8FD9\u4E9B L4 \u9875\u9762\u6267\u884C\u201C\u540C\u6B65\u672C\u5730\u4FEE\u6539\u201D\u5E76\u4FDD\u5B58\u3002`;
30997
+ };
30998
+ function LocalAIDrawer(props) {
30999
+ var _a2, _b2, _c2, _d, _e, _f, _g, _h, _i;
30622
31000
  const { schema, scriptInfo, pageMeta = {}, bridgeConfig, onApply } = props;
30623
- const config2 = normalizeBridgeConfig(bridgeConfig);
31001
+ const config2 = React$1.useMemo(() => normalizeBridgeConfig(bridgeConfig), [bridgeConfig]);
30624
31002
  const [baseURL, setBaseURL] = React$1.useState(config2.baseURL || DEFAULT_BRIDGE_URL);
30625
31003
  const [status, setStatus] = React$1.useState("\u672A\u8FDE\u63A5");
30626
31004
  const [workspacePath, setWorkspacePath] = React$1.useState("");
@@ -30634,24 +31012,33 @@ function LocalAIDrawer(props) {
30634
31012
  const getPayload = React$1.useCallback(() => {
30635
31013
  var _a3;
30636
31014
  const nextSchemaJson = ((_a3 = schema == null ? void 0 : schema.getAllJSON) == null ? void 0 : _a3.call(schema)) || {};
31015
+ const nextPageMeta = {
31016
+ ...pageMeta,
31017
+ code: pageCode
31018
+ };
31019
+ const nextScriptInfo = (scriptInfo == null ? void 0 : scriptInfo.script) || "";
31020
+ const nextStyle = (scriptInfo == null ? void 0 : scriptInfo.style) || "";
31021
+ const nextPageIR = buildPageIR({
31022
+ schemaJson: nextSchemaJson,
31023
+ script: nextScriptInfo,
31024
+ style: nextStyle,
31025
+ pageMeta: nextPageMeta
31026
+ });
30637
31027
  return {
30638
31028
  code: pageCode,
30639
- pageMeta: {
30640
- ...pageMeta,
30641
- code: pageCode
30642
- },
31029
+ pageMeta: nextPageMeta,
30643
31030
  schemaInfo: JSON.stringify(nextSchemaJson, null, 2),
30644
- scriptInfo: (scriptInfo == null ? void 0 : scriptInfo.script) || "",
30645
- style: (scriptInfo == null ? void 0 : scriptInfo.style) || "",
30646
- pageIR: buildPageIR({
30647
- schemaJson: nextSchemaJson,
30648
- script: (scriptInfo == null ? void 0 : scriptInfo.script) || "",
30649
- style: (scriptInfo == null ? void 0 : scriptInfo.style) || "",
30650
- pageMeta: {
30651
- ...pageMeta,
30652
- code: pageCode
30653
- }
30654
- })
31031
+ scriptInfo: nextScriptInfo,
31032
+ style: nextStyle,
31033
+ pageIR: nextPageIR,
31034
+ extraSources: createLinkedPageExtraSources(
31035
+ {
31036
+ pageMeta: nextPageMeta,
31037
+ pageIR: nextPageIR,
31038
+ style: nextStyle
31039
+ },
31040
+ "editorPayload"
31041
+ )
30655
31042
  };
30656
31043
  }, [pageCode, pageMeta, schema, scriptInfo]);
30657
31044
  const expectedWorkspacePath = React$1.useMemo(() => {
@@ -30708,22 +31095,30 @@ function LocalAIDrawer(props) {
30708
31095
  }
30709
31096
  }, [baseURL]);
30710
31097
  const handlePush = async () => {
31098
+ var _a3;
30711
31099
  setLoadingAction("push");
30712
31100
  setPullError(null);
30713
31101
  setLastDiffSummary(null);
30714
31102
  try {
30715
- const res = await pushPage(baseURL, pageCode, getPayload());
31103
+ const payload = await buildLinkedPagePayload(getPayload(), config2);
31104
+ const res = await pushPage(baseURL, pageCode, payload);
30716
31105
  setWorkspacePath((res == null ? void 0 : res.dir) || "");
30717
31106
  setBridgeInfo((prev) => {
30718
- var _a3;
31107
+ var _a4;
30719
31108
  return {
30720
31109
  ...prev || {},
30721
- workspaceRoot: ((_a3 = res == null ? void 0 : res.context) == null ? void 0 : _a3.workspaceRoot) || (prev == null ? void 0 : prev.workspaceRoot)
31110
+ workspaceRoot: ((_a4 = res == null ? void 0 : res.context) == null ? void 0 : _a4.workspaceRoot) || (prev == null ? void 0 : prev.workspaceRoot)
30722
31111
  };
30723
31112
  });
30724
31113
  setStatus("\u5DF2\u540C\u6B65\u5230\u672C\u5730");
30725
- setLastSummary(`\u5DF2\u5199\u5165\u672C\u5730\u5DE5\u4F5C\u533A: ${(res == null ? void 0 : res.dir) || pageCode}`);
30726
- CnMessage.success("\u5DF2\u53D1\u9001\u5230\u672C\u5730 AI \u5DE5\u4F5C\u533A");
31114
+ setLastSummary(createLinkedPushSummary(res, pageCode));
31115
+ if (((_a3 = res == null ? void 0 : res.linkedPages) == null ? void 0 : _a3.totalReferences) > 0) {
31116
+ CnMessage.success(
31117
+ `\u5DF2\u53D1\u9001\u5230\u672C\u5730 AI \u5DE5\u4F5C\u533A\uFF0C\u626B\u63CF\u5230\u76F4\u63A5\u5B50 L4 \u9875\u9762 ${res.linkedPages.directCount || 0} \u4E2A\uFF0C\u9012\u5F52\u5171 ${res.linkedPages.totalReferences} \u4E2A`
31118
+ );
31119
+ } else {
31120
+ CnMessage.success("\u5DF2\u53D1\u9001\u5230\u672C\u5730 AI \u5DE5\u4F5C\u533A");
31121
+ }
30727
31122
  } catch (e) {
30728
31123
  CnMessage.error(e.message || "\u53D1\u9001\u5230\u672C\u5730 AI \u5DE5\u4F5C\u533A\u5931\u8D25");
30729
31124
  } finally {
@@ -30747,9 +31142,14 @@ function LocalAIDrawer(props) {
30747
31142
  scriptInfo: nextScriptInfo,
30748
31143
  raw: res
30749
31144
  });
30750
- setLastSummary((res == null ? void 0 : res.summary) || "\u5DF2\u4ECE\u672C\u5730\u5DE5\u4F5C\u533A\u540C\u6B65\u4FEE\u6539");
31145
+ const linkedPullSummary = createLinkedPullSummary(res);
31146
+ setLastSummary([(res == null ? void 0 : res.summary) || "\u5DF2\u4ECE\u672C\u5730\u5DE5\u4F5C\u533A\u540C\u6B65\u4FEE\u6539", linkedPullSummary].filter(Boolean).join("\uFF1B"));
30751
31147
  setLastDiffSummary((res == null ? void 0 : res.diffSummary) || null);
30752
- CnMessage.success("\u5DF2\u540C\u6B65\u672C\u5730 AI \u4FEE\u6539");
31148
+ if (linkedPullSummary) {
31149
+ CnMessage.warning("\u5DF2\u540C\u6B65\u5F53\u524D\u9875\u9762\uFF1B\u5173\u8054\u5B50 L4 \u9875\u9762\u4E5F\u6709\u672C\u5730\u4FEE\u6539\uFF0C\u8BF7\u5206\u522B\u6253\u5F00\u5BF9\u5E94 L4 \u9875\u9762\u540C\u6B65\u5E76\u4FDD\u5B58");
31150
+ } else {
31151
+ CnMessage.success("\u5DF2\u540C\u6B65\u5F53\u524D\u9875\u9762\u7684\u672C\u5730\u4FEE\u6539\uFF0C\u8BF7\u9884\u89C8\u786E\u8BA4\u540E\u70B9\u51FB\u9875\u9762\u4FDD\u5B58");
31152
+ }
30753
31153
  } catch (e) {
30754
31154
  const detail = getJsonErrorDetail(e);
30755
31155
  setPullError(detail);
@@ -30791,12 +31191,17 @@ function LocalAIDrawer(props) {
30791
31191
  }
30792
31192
  };
30793
31193
  const handleStatus = async () => {
31194
+ var _a3, _b3;
30794
31195
  setLoadingAction("status");
30795
31196
  try {
30796
31197
  const res = await getPageStatus(baseURL, pageCode);
30797
31198
  setWorkspacePath((res == null ? void 0 : res.dir) || "");
30798
31199
  setLastDiffSummary(null);
30799
- setLastSummary((res == null ? void 0 : res.exists) ? `\u672C\u5730\u5DE5\u4F5C\u533A\u5DF2\u5B58\u5728: ${res.dir}` : "\u672C\u5730\u8FD8\u6CA1\u6709\u8FD9\u4E2A\u9875\u9762\u7684\u5DE5\u4F5C\u533A");
31200
+ const linkedChangedCount = ((_a3 = res == null ? void 0 : res.linkedPages) == null ? void 0 : _a3.changedCount) || 0;
31201
+ const linkedStatusText = linkedChangedCount ? `\uFF1B\u5173\u8054 L4 \u9875\u9762\u4E2D\u6709 ${linkedChangedCount} \u4E2A\u5B58\u5728\u672C\u5730\u4FEE\u6539` : ((_b3 = res == null ? void 0 : res.linkedPages) == null ? void 0 : _b3.totalReferences) ? `\uFF1B\u5DF2\u8BB0\u5F55\u5173\u8054 L4 \u9875\u9762 ${res.linkedPages.totalReferences} \u4E2A` : "";
31202
+ setLastSummary(
31203
+ (res == null ? void 0 : res.exists) ? `\u672C\u5730\u5DE5\u4F5C\u533A\u5DF2\u5B58\u5728: ${res.dir}${linkedStatusText}` : "\u672C\u5730\u8FD8\u6CA1\u6709\u8FD9\u4E2A\u9875\u9762\u7684\u5DE5\u4F5C\u533A"
31204
+ );
30800
31205
  CnMessage.success((res == null ? void 0 : res.exists) ? "\u672C\u5730\u5DE5\u4F5C\u533A\u5DF2\u5B58\u5728" : "\u672C\u5730\u5DE5\u4F5C\u533A\u4E0D\u5B58\u5728");
30801
31206
  } catch (e) {
30802
31207
  CnMessage.error(e.message || "\u67E5\u8BE2\u672C\u5730\u5DE5\u4F5C\u533A\u5931\u8D25");
@@ -30887,7 +31292,9 @@ function LocalAIDrawer(props) {
30887
31292
  }, "\u6253\u5F00\u76EE\u5F55"), /* @__PURE__ */ React$1.createElement(CnButton, {
30888
31293
  loading: loadingAction === "rollback",
30889
31294
  onClick: handleRollback
30890
- }, "\u56DE\u6EDA\u4E0A\u6B21\u66F4\u6539"))), /* @__PURE__ */ React$1.createElement("div", {
31295
+ }, "\u56DE\u6EDA\u4E0A\u6B21\u66F4\u6539")), /* @__PURE__ */ React$1.createElement("div", {
31296
+ className: "mdd-local-ai-action-notice"
31297
+ }, "\u201C\u540C\u6B65\u672C\u5730\u4FEE\u6539\u201D\u53EA\u4F1A\u540C\u6B65\u5F53\u524D\u9875\u9762\u7684\u672C\u5730\u53D8\u66F4\uFF1B\u5982\u679C\u5173\u8054\u5B50 L4 \u9875\u9762\u4E5F\u5728\u672C\u5730\u6539\u8FC7\uFF0C\u8BF7\u6253\u5F00\u5BF9\u5E94\u5B50\u9875\u9762\u7684 L4 \u5730\u5740\uFF0C\u5206\u522B\u6267\u884C\u201C\u540C\u6B65\u672C\u5730\u4FEE\u6539\u201D\u5E76\u5728\u9875\u9762\u4E0A\u70B9\u51FB\u4FDD\u5B58\u3002")), /* @__PURE__ */ React$1.createElement("div", {
30891
31298
  className: "mdd-local-ai-section"
30892
31299
  }, /* @__PURE__ */ React$1.createElement("div", {
30893
31300
  className: "mdd-local-ai-section-title"
@@ -30902,7 +31309,63 @@ function LocalAIDrawer(props) {
30902
31309
  }, "\u590D\u5236\u5DE5\u4F5C\u533A\u8DEF\u5F84"), /* @__PURE__ */ React$1.createElement(CnButton, {
30903
31310
  size: "small",
30904
31311
  onClick: () => handleCopy(aiPrompt, "\u5DF2\u590D\u5236 AI \u63D0\u793A\u8BCD")
30905
- }, "\u590D\u5236 AI \u63D0\u793A\u8BCD"))), lastSummary ? /* @__PURE__ */ React$1.createElement("div", {
31312
+ }, "\u590D\u5236 AI \u63D0\u793A\u8BCD"))), lastSummary ? lastSummary.type === "push" ? /* @__PURE__ */ React$1.createElement("div", {
31313
+ className: "mdd-local-ai-push-result"
31314
+ }, /* @__PURE__ */ React$1.createElement("div", {
31315
+ className: "mdd-local-ai-push-result-head"
31316
+ }, /* @__PURE__ */ React$1.createElement("div", null, /* @__PURE__ */ React$1.createElement("div", {
31317
+ className: "mdd-local-ai-push-result-title"
31318
+ }, "\u5DF2\u5199\u5165\u672C\u5730\u5DE5\u4F5C\u533A"), /* @__PURE__ */ React$1.createElement("div", {
31319
+ className: "mdd-local-ai-push-result-path"
31320
+ }, lastSummary.dir)), /* @__PURE__ */ React$1.createElement("span", {
31321
+ className: "mdd-local-ai-push-result-badge"
31322
+ }, "\u5B8C\u6210")), /* @__PURE__ */ React$1.createElement("div", {
31323
+ className: "mdd-local-ai-push-stats"
31324
+ }, /* @__PURE__ */ React$1.createElement("div", {
31325
+ className: "mdd-local-ai-push-stat"
31326
+ }, /* @__PURE__ */ React$1.createElement("span", null, "\u76F4\u63A5\u5B50 L4"), /* @__PURE__ */ React$1.createElement("strong", null, ((_b2 = lastSummary.linkedPages) == null ? void 0 : _b2.directCount) || 0)), /* @__PURE__ */ React$1.createElement("div", {
31327
+ className: "mdd-local-ai-push-stat"
31328
+ }, /* @__PURE__ */ React$1.createElement("span", null, "\u9012\u5F52\u5173\u8054"), /* @__PURE__ */ React$1.createElement("strong", null, ((_c2 = lastSummary.linkedPages) == null ? void 0 : _c2.totalReferences) || 0)), /* @__PURE__ */ React$1.createElement("div", {
31329
+ className: "mdd-local-ai-push-stat is-success"
31330
+ }, /* @__PURE__ */ React$1.createElement("span", null, "\u5DF2\u540C\u6B65"), /* @__PURE__ */ React$1.createElement("strong", null, ((_d = lastSummary.linkedPages) == null ? void 0 : _d.syncedCount) || 0)), /* @__PURE__ */ React$1.createElement("div", {
31331
+ className: "mdd-local-ai-push-stat is-warning"
31332
+ }, /* @__PURE__ */ React$1.createElement("span", null, "\u9700\u5904\u7406"), /* @__PURE__ */ React$1.createElement("strong", null, ((_e = lastSummary.linkedPages) == null ? void 0 : _e.failedCount) || 0))), ((_g = (_f = lastSummary.linkedPages) == null ? void 0 : _f.pages) == null ? void 0 : _g.length) ? /* @__PURE__ */ React$1.createElement("div", {
31333
+ className: "mdd-local-ai-linked-section"
31334
+ }, /* @__PURE__ */ React$1.createElement("div", {
31335
+ className: "mdd-local-ai-linked-section-title"
31336
+ }, "\u5DF2\u4E00\u8D77\u540C\u6B65\u7684\u5173\u8054\u9875\u9762"), /* @__PURE__ */ React$1.createElement("div", {
31337
+ className: "mdd-local-ai-linked-tags"
31338
+ }, lastSummary.linkedPages.pages.map((page) => /* @__PURE__ */ React$1.createElement("span", {
31339
+ key: page.code,
31340
+ className: "mdd-local-ai-linked-tag is-success has-name"
31341
+ }, /* @__PURE__ */ React$1.createElement("span", {
31342
+ className: "mdd-local-ai-linked-name"
31343
+ }, page.name || "\u672A\u547D\u540D\u9875\u9762"), /* @__PURE__ */ React$1.createElement("span", {
31344
+ className: "mdd-local-ai-linked-code"
31345
+ }, page.code))))) : null, ((_i = (_h = lastSummary.linkedPages) == null ? void 0 : _h.failed) == null ? void 0 : _i.length) ? /* @__PURE__ */ React$1.createElement("div", {
31346
+ className: "mdd-local-ai-linked-section"
31347
+ }, /* @__PURE__ */ React$1.createElement("div", {
31348
+ className: "mdd-local-ai-linked-section-title"
31349
+ }, "\u9700\u8981\u7528\u6237\u5904\u7406\u7684\u5173\u8054\u9875\u9762"), lastSummary.linkedPages.failed.map((page) => {
31350
+ const isLocalChangeSkipped = isLocalChangeSkippedPage(page);
31351
+ return /* @__PURE__ */ React$1.createElement("div", {
31352
+ key: page.code,
31353
+ className: "mdd-local-ai-linked-warning"
31354
+ }, /* @__PURE__ */ React$1.createElement("div", {
31355
+ className: "mdd-local-ai-linked-warning-main"
31356
+ }, /* @__PURE__ */ React$1.createElement("span", {
31357
+ className: "mdd-local-ai-linked-tag is-warning has-name"
31358
+ }, /* @__PURE__ */ React$1.createElement("span", {
31359
+ className: "mdd-local-ai-linked-name"
31360
+ }, page.name || "\u672A\u547D\u540D\u9875\u9762"), /* @__PURE__ */ React$1.createElement("span", {
31361
+ className: "mdd-local-ai-linked-code"
31362
+ }, page.code)), /* @__PURE__ */ React$1.createElement("span", null, page.reason || "\u672A\u80FD\u81EA\u52A8\u540C\u6B65")), isLocalChangeSkipped ? /* @__PURE__ */ React$1.createElement("div", {
31363
+ className: "mdd-local-ai-linked-actions-tip"
31364
+ }, /* @__PURE__ */ React$1.createElement("div", null, "\u8FD9\u4E2A\u9875\u9762\u672C\u5730\u5DF2\u6709\u672A\u540C\u6B65\u4FEE\u6539\uFF0C\u4E3A\u907F\u514D\u8986\u76D6\uFF0C\u672C\u6B21\u6CA1\u6709\u91CD\u65B0\u4E0B\u53D1\u3002"), /* @__PURE__ */ React$1.createElement("div", null, "\u4F60\u53EF\u4EE5\u9009\u62E9\uFF1A1\uFF09\u6253\u5F00\u8BE5 L4 \u9875\u9762\u5148\u201C\u540C\u6B65\u672C\u5730\u4FEE\u6539\u201D\u5E76\u4FDD\u5B58\uFF1B2\uFF09\u786E\u8BA4\u653E\u5F03\u672C\u5730\u6539\u52A8\u540E\u5220\u9664\u672C\u5730\u76EE\u5F55\uFF0C\u518D\u4ECE\u7236\u9875\u9762\u91CD\u65B0\u4E0B\u53D1\u3002"), page.dir ? /* @__PURE__ */ React$1.createElement(CnButton, {
31365
+ size: "small",
31366
+ onClick: () => handleCopy(page.dir, "\u5DF2\u590D\u5236\u5173\u8054\u9875\u9762\u672C\u5730\u76EE\u5F55")
31367
+ }, "\u590D\u5236\u672C\u5730\u76EE\u5F55") : null) : null);
31368
+ })) : null) : /* @__PURE__ */ React$1.createElement("div", {
30906
31369
  className: "mdd-local-ai-summary"
30907
31370
  }, lastSummary) : null, /* @__PURE__ */ React$1.createElement(PullDiffDetail, {
30908
31371
  diffSummary: lastDiffSummary
@@ -31459,7 +31922,7 @@ function getDefaultIndexStyle() {
31459
31922
  `;
31460
31923
  }
31461
31924
  const name = "@cniot/mdd-editor";
31462
- const version = "0.3.6";
31925
+ const version = "0.3.8";
31463
31926
  const description = "\u6A21\u578B\u9A71\u52A8\u7F16\u8F91\u5668";
31464
31927
  const scripts = {
31465
31928
  build: "vite build"