@mybricks/to-code-taro 1.0.3 → 1.0.4

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.
Files changed (106) hide show
  1. package/dist/cjs/core/comlib/_AesEncode.js +115 -0
  2. package/dist/cjs/core/comlib/_BackTo.js +80 -0
  3. package/dist/cjs/core/comlib/_CallPhone.js +58 -0
  4. package/dist/cjs/core/comlib/_ChooseFile.js +103 -0
  5. package/dist/cjs/core/comlib/_ChooseMedia.js +70 -0
  6. package/dist/cjs/core/comlib/_Connector.js +92 -0
  7. package/dist/cjs/core/comlib/_ConnectorGlobalHeaders.js +79 -0
  8. package/dist/cjs/core/comlib/_Format.js +123 -0
  9. package/dist/cjs/core/comlib/_GetLocation.js +60 -0
  10. package/dist/cjs/core/comlib/_GetStorage.js +68 -0
  11. package/dist/cjs/core/comlib/_GetSystemInfo.js +62 -0
  12. package/dist/cjs/core/comlib/_OpenCamera.js +73 -0
  13. package/dist/cjs/core/comlib/_OpenPetalMap.js +49 -0
  14. package/dist/cjs/core/comlib/_OpenUrl.js +62 -0
  15. package/dist/cjs/core/comlib/_RemoveStorage.js +68 -0
  16. package/dist/cjs/core/comlib/_Router.js +100 -0
  17. package/dist/cjs/core/comlib/_ScanQrcode.js +9 -10
  18. package/dist/cjs/core/comlib/_SetStorage.js +10 -19
  19. package/dist/cjs/core/comlib/_Share.js +58 -0
  20. package/dist/cjs/core/comlib/_ShowToast.js +23 -50
  21. package/dist/cjs/core/comlib/_TextToSpeech.js +120 -0
  22. package/dist/cjs/core/comlib/_TimerDebounce.js +72 -0
  23. package/dist/cjs/core/comlib/_TimerDelay.js +63 -0
  24. package/dist/cjs/core/comlib/_TimerThrottle.js +75 -0
  25. package/dist/cjs/core/comlib/_Vibrate.js +60 -0
  26. package/dist/cjs/core/comlib/index.js +68 -2
  27. package/dist/cjs/core/utils/ComContext.js +3 -3
  28. package/dist/cjs/core/utils/PopupRenderer.js +63 -0
  29. package/dist/cjs/core/utils/hooks.js +16 -10
  30. package/dist/cjs/core/utils/index.js +15 -3
  31. package/dist/cjs/core/utils/{page.js → pageRouter.js} +28 -14
  32. package/dist/cjs/core/utils/popupRouter.js +98 -0
  33. package/dist/cjs/core/utils/useContext.js +9 -1
  34. package/dist/cjs/core/utils/with.js +37 -13
  35. package/dist/cjs/generate/generateTaroProjectJson.js +30 -0
  36. package/dist/cjs/handleSlot.d.ts +2 -0
  37. package/dist/cjs/handleSlot.js +19 -5
  38. package/dist/cjs/processors/processComEvents.js +47 -5
  39. package/dist/cjs/processors/processScene.js +9 -5
  40. package/dist/cjs/processors/processSceneLogic.js +9 -5
  41. package/dist/cjs/shims-taro.d.ts +20 -0
  42. package/dist/cjs/taro-template.json +493 -351
  43. package/dist/cjs/toCodeTaro.d.ts +1 -1
  44. package/dist/cjs/toCodeTaro.js +13 -1
  45. package/dist/cjs/utils/builder/buildResult.d.ts +1 -0
  46. package/dist/cjs/utils/builder/buildResult.js +26 -0
  47. package/dist/cjs/utils/config/handlePageConfig.d.ts +2 -1
  48. package/dist/cjs/utils/config/handlePageConfig.js +3 -2
  49. package/dist/cjs/utils/context/createEventQueries.js +1 -1
  50. package/dist/cjs/utils/logic/handleProcess.js +26 -5
  51. package/dist/cjs/utils/templates/scene.d.ts +3 -1
  52. package/dist/cjs/utils/templates/scene.js +16 -4
  53. package/dist/esm/core/comlib/_AesEncode.js +85 -0
  54. package/dist/esm/core/comlib/_BackTo.js +66 -0
  55. package/dist/esm/core/comlib/_CallPhone.js +30 -0
  56. package/dist/esm/core/comlib/_ChooseFile.js +81 -0
  57. package/dist/esm/core/comlib/_ChooseMedia.js +38 -0
  58. package/dist/esm/core/comlib/_Connector.js +60 -0
  59. package/dist/esm/core/comlib/_ConnectorGlobalHeaders.js +56 -0
  60. package/dist/esm/core/comlib/_Format.js +102 -0
  61. package/dist/esm/core/comlib/_GetLocation.js +26 -0
  62. package/dist/esm/core/comlib/_GetStorage.js +44 -0
  63. package/dist/esm/core/comlib/_GetSystemInfo.js +32 -0
  64. package/dist/esm/core/comlib/_OpenCamera.js +44 -0
  65. package/dist/esm/core/comlib/_OpenPetalMap.js +28 -0
  66. package/dist/esm/core/comlib/_OpenUrl.js +36 -0
  67. package/dist/esm/core/comlib/_RemoveStorage.js +42 -0
  68. package/dist/esm/core/comlib/_Router.js +113 -0
  69. package/dist/esm/core/comlib/_ScanQrcode.js +10 -11
  70. package/dist/esm/core/comlib/_SetStorage.js +13 -25
  71. package/dist/esm/core/comlib/_Share.js +28 -0
  72. package/dist/esm/core/comlib/_ShowToast.js +32 -55
  73. package/dist/esm/core/comlib/_TextToSpeech.js +117 -0
  74. package/dist/esm/core/comlib/_TimerDebounce.js +66 -0
  75. package/dist/esm/core/comlib/_TimerDelay.js +47 -0
  76. package/dist/esm/core/comlib/_TimerThrottle.js +69 -0
  77. package/dist/esm/core/comlib/_Vibrate.js +34 -0
  78. package/dist/esm/core/comlib/index.js +35 -1
  79. package/dist/esm/core/utils/ComContext.js +1 -1
  80. package/dist/esm/core/utils/PopupRenderer.js +27 -0
  81. package/dist/esm/core/utils/hooks.js +22 -10
  82. package/dist/esm/core/utils/index.js +3 -1
  83. package/dist/esm/core/utils/pageRouter.js +69 -0
  84. package/dist/esm/core/utils/popupRouter.js +116 -0
  85. package/dist/esm/core/utils/useContext.js +14 -2
  86. package/dist/esm/core/utils/with.js +62 -19
  87. package/dist/esm/generate/generateTaroProjectJson.js +35 -1
  88. package/dist/esm/handleSlot.d.ts +2 -0
  89. package/dist/esm/handleSlot.js +20 -4
  90. package/dist/esm/processors/processComEvents.js +62 -5
  91. package/dist/esm/processors/processScene.js +11 -3
  92. package/dist/esm/processors/processSceneLogic.js +15 -5
  93. package/dist/esm/shims-taro.d.ts +20 -0
  94. package/dist/esm/taro-template.json +493 -351
  95. package/dist/esm/toCodeTaro.d.ts +1 -1
  96. package/dist/esm/toCodeTaro.js +16 -1
  97. package/dist/esm/utils/builder/buildResult.d.ts +1 -0
  98. package/dist/esm/utils/builder/buildResult.js +21 -0
  99. package/dist/esm/utils/config/handlePageConfig.d.ts +2 -1
  100. package/dist/esm/utils/config/handlePageConfig.js +5 -1
  101. package/dist/esm/utils/context/createEventQueries.js +2 -1
  102. package/dist/esm/utils/logic/handleProcess.js +31 -4
  103. package/dist/esm/utils/templates/scene.d.ts +3 -1
  104. package/dist/esm/utils/templates/scene.js +13 -5
  105. package/package.json +4 -2
  106. package/dist/esm/core/utils/page.js +0 -50
@@ -24,7 +24,7 @@ export interface ToTaroCodeConfig {
24
24
  callName?: string;
25
25
  };
26
26
  getComponentPackageName: (props?: any) => string;
27
- getUtilsPackageName: () => string;
27
+ getUtilsPackageName: (props?: any) => string;
28
28
  getPageId?: (id: string) => string;
29
29
  getBus?: (namespace: string) => {
30
30
  title: string;
@@ -91,8 +91,19 @@ var getCode = (params, config) => {
91
91
  const abstractEventTypeDefMap = {};
92
92
  const jsModulesCollector = (0, import_collectJSModules.createJSModulesCollector)();
93
93
  const pageConfigHandler = new import_handlePageConfig.HandlePageConfig();
94
+ const popupIds = /* @__PURE__ */ new Set();
95
+ tojson.scenes.forEach((s) => {
96
+ var _a;
97
+ if (s.type === "popup" || ((_a = s.deps) == null ? void 0 : _a.some((dep) => dep.namespace === "mybricks.taro.popup"))) {
98
+ popupIds.add(s.id);
99
+ }
100
+ });
94
101
  (0, import_processScene.processScenes)(scenes, {
95
- config,
102
+ config: {
103
+ ...config,
104
+ // @ts-ignore
105
+ hasPopups: popupIds.size > 0
106
+ },
96
107
  globalVarTypeDef,
97
108
  defaultFxsMap,
98
109
  abstractEventTypeDefMap,
@@ -123,6 +134,7 @@ var getCode = (params, config) => {
123
134
  jsModulesMap: jsModulesCollector.getMap(),
124
135
  globalTabBarConfig: pageConfigHandler.getTabBarConfig(),
125
136
  tabBarImageFiles: pageConfigHandler.getTabBarImageFiles(),
137
+ popupIds: Array.from(popupIds),
126
138
  config
127
139
  });
128
140
  files.push(...finalResultData.files);
@@ -9,6 +9,7 @@ interface BuildResultParams {
9
9
  jsModulesMap: JSModulesMap;
10
10
  globalTabBarConfig: string | null;
11
11
  tabBarImageFiles: any[];
12
+ popupIds: string[];
12
13
  config: ToTaroCodeConfig;
13
14
  }
14
15
  /**
@@ -41,6 +41,7 @@ var buildFinalResults = (params) => {
41
41
  jsModulesMap,
42
42
  globalTabBarConfig,
43
43
  tabBarImageFiles,
44
+ popupIds,
44
45
  config
45
46
  } = params;
46
47
  const files = [];
@@ -71,6 +72,31 @@ export { jsModules };
71
72
  name: "commonIndex"
72
73
  });
73
74
  }
75
+ if (popupIds.length > 0) {
76
+ let registryContent = "";
77
+ popupIds.forEach((id) => {
78
+ registryContent += `import Scene_${id} from '../popupComponents/${id}/index';
79
+ `;
80
+ });
81
+ registryContent += `
82
+ export const POPUP_MAP: Record<string, any> = {
83
+ `;
84
+ popupIds.forEach((id) => {
85
+ registryContent += ` '${id}': Scene_${id},
86
+ `;
87
+ });
88
+ registryContent += `};
89
+
90
+ `;
91
+ registryContent += `export const POPUP_IDS = ${JSON.stringify(popupIds)};
92
+ `;
93
+ files.push({
94
+ type: "popup",
95
+ content: registryContent,
96
+ importManager: new import_ImportManager.ImportManager(config),
97
+ name: "popup"
98
+ });
99
+ }
74
100
  if (globalTabBarConfig) {
75
101
  files.push({
76
102
  type: "tabBarConfig",
@@ -10,9 +10,10 @@ export declare class HandlePageConfig {
10
10
  /**
11
11
  * 处理页面配置(提取 systemPage 组件数据)
12
12
  * @param scene 场景数据
13
+ * @param isPopup 是否为弹窗场景
13
14
  * @returns 页面配置内容
14
15
  */
15
- handle(scene: ReturnType<typeof toCode>["scenes"][0]["scene"]): string | undefined;
16
+ handle(scene: ReturnType<typeof toCode>["scenes"][0]["scene"], isPopup?: boolean): string | undefined;
16
17
  /**
17
18
  * 获取全局 TabBar 配置
18
19
  */
@@ -31,9 +31,10 @@ var HandlePageConfig = class {
31
31
  /**
32
32
  * 处理页面配置(提取 systemPage 组件数据)
33
33
  * @param scene 场景数据
34
+ * @param isPopup 是否为弹窗场景
34
35
  * @returns 页面配置内容
35
36
  */
36
- handle(scene) {
37
+ handle(scene, isPopup = false) {
37
38
  var _a;
38
39
  let pageConfigContent;
39
40
  const systemPageCom = Object.values(scene.coms || {}).find((com) => {
@@ -41,7 +42,7 @@ var HandlePageConfig = class {
41
42
  return ((_a2 = com.def) == null ? void 0 : _a2.namespace) === "mybricks.taro.systemPage";
42
43
  });
43
44
  if ((_a = systemPageCom == null ? void 0 : systemPageCom.model) == null ? void 0 : _a.data) {
44
- const systemPageData = systemPageCom.model.data;
45
+ const systemPageData = { ...systemPageCom.model.data };
45
46
  pageConfigContent = (0, import_content.generatePageConfigContent)(systemPageData);
46
47
  if (!this.globalTabBarConfig && systemPageData.tabBar && Array.isArray(systemPageData.tabBar)) {
47
48
  const pageIdToPath = (pageId) => `pages/${pageId}/index`;
@@ -69,7 +69,7 @@ var createEventQueries = (events) => {
69
69
  getFxEvents: createGetFxEvents(events),
70
70
  getEffectEvent: createGetEffectEvent(events),
71
71
  getEventByDiagramId: (diagramId) => {
72
- return events.find((event) => event.diagramId === diagramId);
72
+ return events.find((event) => event.diagramId === diagramId || event.id === diagramId);
73
73
  },
74
74
  /** 获取场景/区块的输入项事件 */
75
75
  getFrameInputEvent: (pinId, frameId) => {
@@ -109,7 +109,7 @@ ${indent}}, appContext)
109
109
  `;
110
110
  });
111
111
  process.nodesInvocation.forEach((props) => {
112
- var _a, _b;
112
+ var _a, _b, _c, _d;
113
113
  const { componentType, category, runType } = props;
114
114
  let nextValue = getNextValue(props, config, event);
115
115
  const isSameScope = checkIsSameScope(event, props);
@@ -119,15 +119,36 @@ ${indent}}, appContext)
119
119
  }
120
120
  if (componentType === "js") {
121
121
  if (category === "scene") {
122
+ const _sceneId = props.meta.model.data._sceneId;
123
+ const targetScene = config.getSceneById(_sceneId);
124
+ const isPopup = (targetScene == null ? void 0 : targetScene.type) === "popup" || ((_a = targetScene == null ? void 0 : targetScene.deps) == null ? void 0 : _a.some((dep) => dep.namespace === "mybricks.taro.popup"));
125
+ const controllerName = isPopup ? "popupRouter" : "pageRouter";
122
126
  config.addParentDependencyImport({
123
127
  packageName: config.getComponentPackageName(),
124
- dependencyNames: ["page"],
128
+ dependencyNames: [controllerName],
125
129
  importType: "named"
126
130
  });
127
- const _sceneId = props.meta.model.data._sceneId;
128
131
  const operateName = props.meta.model.data.openType === "redirect" ? "replace" : "open";
129
132
  code += `${indent}/** 打开 ${props.meta.title} */
130
- ${indent}${nextCode}page.${operateName}("${((_a = config.getPageId) == null ? void 0 : _a.call(config, _sceneId)) || _sceneId}", ${nextValue})`;
133
+ ${indent}${nextCode}${controllerName}.${operateName}("${((_b = config.getPageId) == null ? void 0 : _b.call(config, _sceneId)) || _sceneId}", ${nextValue})`;
134
+ } else if (category === "frameOutput") {
135
+ const currentScene = config.getCurrentScene();
136
+ const pinProxy = (_c = currentScene == null ? void 0 : currentScene.pinProxies) == null ? void 0 : _c[`${props.meta.id}-${props.id}`];
137
+ if ((pinProxy == null ? void 0 : pinProxy.frameId) && (pinProxy == null ? void 0 : pinProxy.pinId)) {
138
+ const method = pinProxy.pinId;
139
+ const controllerName = config.isPopup ? "popupRouter" : "pageRouter";
140
+ config.addParentDependencyImport({
141
+ packageName: config.getComponentPackageName(),
142
+ dependencyNames: [controllerName],
143
+ importType: "named"
144
+ });
145
+ if (["commit", "cancel", "apply", "close"].includes(method)) {
146
+ const sceneId = pinProxy.frameId || (currentScene == null ? void 0 : currentScene.id);
147
+ const argCode = nextValue ? `, ${nextValue}` : "";
148
+ code += `${indent}/** ${props.meta.title} 输出 ${method} */
149
+ ${indent}${nextCode}${controllerName}.${method}("${sceneId}"${argCode})`;
150
+ }
151
+ }
131
152
  } else if (category === "normal") {
132
153
  let componentNameWithId = getComponentNameWithId(props, config, event);
133
154
  code += `${indent}/** 调用 ${props.meta.title} */
@@ -170,7 +191,7 @@ ${indent}${nextCode}this.${currentProvider.name}_Fxs.${props.meta.ioProxy.id}(${
170
191
  } else {
171
192
  const currentProvider = getCurrentProvider({ isSameScope, props }, config);
172
193
  currentProvider.controllers.add(props.meta.id);
173
- const componentController = ((_b = config.getComponentController) == null ? void 0 : _b.call(config, {
194
+ const componentController = ((_d = config.getComponentController) == null ? void 0 : _d.call(config, {
174
195
  com: props.meta,
175
196
  scene: config.getCurrentScene()
176
197
  })) || `controller_${props.meta.id}`;
@@ -7,13 +7,15 @@ export declare const genSlotDefineCode: (indent: string) => string;
7
7
  /** 生成控制器初始化代码 */
8
8
  export declare const genControllerInitCode: (indent: string, providerName: string) => string;
9
9
  /** 生成完整的函数组件模板 */
10
- export declare const genComponentTemplate: ({ componentName, combinedJsCode, uiResult, outputsConfig, scopeName, utilsPackageName, }: {
10
+ export declare const genComponentTemplate: ({ componentName, combinedJsCode, uiResult, outputsConfig, scopeName, utilsPackageName, isPopup, hasPopups, }: {
11
11
  componentName: string;
12
12
  combinedJsCode: string;
13
13
  uiResult: string;
14
14
  outputsConfig?: Record<string, Record<string, any>>;
15
15
  scopeName?: string;
16
16
  utilsPackageName?: string;
17
+ isPopup?: boolean;
18
+ hasPopups?: boolean;
17
19
  }) => string;
18
20
  /** 生成 useEffect 包装代码 */
19
21
  export declare const wrapInEffect: (indent: string, effectCode: string) => string;
@@ -53,16 +53,28 @@ var genComponentTemplate = ({
53
53
  uiResult,
54
54
  outputsConfig,
55
55
  scopeName,
56
- utilsPackageName
56
+ utilsPackageName,
57
+ isPopup = false,
58
+ hasPopups = false
57
59
  }) => {
58
- return `function ${componentName}() {
60
+ let code = `function ${componentName}() {
59
61
  ${combinedJsCode}
60
62
  return (
61
- ${uiResult.split("\n").map((line) => ` ${line}`).join("\n")}
63
+ <>
64
+ ${uiResult.split("\n").map((line) => ` ${line}`).join("\n")}
65
+ ` + (hasPopups ? ` <PopupRenderer popupMap={POPUP_MAP} />
66
+ ` : "") + ` </>
62
67
  );
63
68
  }
64
69
 
65
- export default WithWrapper(${componentName})`;
70
+ `;
71
+ if (isPopup) {
72
+ code += `(${componentName} as any).isPopup = true;
73
+
74
+ `;
75
+ }
76
+ code += `export default WithWrapper(${componentName})`;
77
+ return code;
66
78
  };
67
79
  var wrapInEffect = (indent, effectCode) => {
68
80
  return `
@@ -0,0 +1,85 @@
1
+ import CryptoJS from 'crypto-js';
2
+ export default (function (context) {
3
+ var _inputs$encrypt, _inputs$decrypt;
4
+ var data = context.data;
5
+ var inputs = context.inputs;
6
+ var outputs = context.outputs;
7
+
8
+ // 模式映射
9
+ var modeMap = {
10
+ CBC: CryptoJS.mode.CBC,
11
+ ECB: CryptoJS.mode.ECB,
12
+ CFB: CryptoJS.mode.CFB,
13
+ OFB: CryptoJS.mode.OFB,
14
+ CTR: CryptoJS.mode.CTR
15
+ };
16
+
17
+ // 填充方式映射
18
+ var paddingMap = {
19
+ Pkcs7: CryptoJS.pad.Pkcs7,
20
+ Iso97971: CryptoJS.pad.Iso97971,
21
+ AnsiX923: CryptoJS.pad.AnsiX923,
22
+ Iso10126: CryptoJS.pad.Iso10126,
23
+ ZeroPadding: CryptoJS.pad.ZeroPadding,
24
+ NoPadding: CryptoJS.pad.NoPadding
25
+ };
26
+ (_inputs$encrypt = inputs.encrypt) === null || _inputs$encrypt === void 0 || _inputs$encrypt.call(inputs, function (val) {
27
+ try {
28
+ var text = val.text || '';
29
+ var key = val.key || data.key || 'defaultKey1234567890123456';
30
+ var iv = val.iv || data.iv;
31
+ var mode = modeMap[val.mode || data.mode || 'CBC'];
32
+ var padding = paddingMap[val.padding || data.padding || 'Pkcs7'];
33
+ if (!text) {
34
+ outputs.onFail('待加密文本不能为空');
35
+ return;
36
+ }
37
+ var keyBytes = CryptoJS.enc.Utf8.parse(key);
38
+ var ivBytes = iv ? CryptoJS.enc.Utf8.parse(iv) : undefined;
39
+ var encrypted = CryptoJS.AES.encrypt(text, keyBytes, {
40
+ mode: mode,
41
+ padding: padding,
42
+ iv: ivBytes
43
+ });
44
+ outputs.onEncryptSuccess({
45
+ encryptedText: encrypted.toString(),
46
+ originalText: text
47
+ });
48
+ } catch (error) {
49
+ console.error('AES加密失败:', error);
50
+ outputs.onFail((error === null || error === void 0 ? void 0 : error.message) || 'AES加密失败');
51
+ }
52
+ });
53
+ (_inputs$decrypt = inputs.decrypt) === null || _inputs$decrypt === void 0 || _inputs$decrypt.call(inputs, function (val) {
54
+ try {
55
+ var encryptedText = val.encryptedText || '';
56
+ var key = val.key || data.key || 'defaultKey1234567890123456';
57
+ var iv = val.iv || data.iv;
58
+ var mode = modeMap[val.mode || data.mode || 'CBC'];
59
+ var padding = paddingMap[val.padding || data.padding || 'Pkcs7'];
60
+ if (!encryptedText) {
61
+ outputs.onFail('待解密文本不能为空');
62
+ return;
63
+ }
64
+ var keyBytes = CryptoJS.enc.Utf8.parse(key);
65
+ var ivBytes = iv ? CryptoJS.enc.Utf8.parse(iv) : undefined;
66
+ var decrypted = CryptoJS.AES.decrypt(encryptedText, keyBytes, {
67
+ mode: mode,
68
+ padding: padding,
69
+ iv: ivBytes
70
+ });
71
+ var decryptedText = decrypted.toString(CryptoJS.enc.Utf8);
72
+ if (!decryptedText) {
73
+ outputs.onFail('解密失败,可能密钥或参数不正确');
74
+ return;
75
+ }
76
+ outputs.onDecryptSuccess({
77
+ decryptedText: decryptedText,
78
+ encryptedText: encryptedText
79
+ });
80
+ } catch (error) {
81
+ console.error('AES解密失败:', error);
82
+ outputs.onFail((error === null || error === void 0 ? void 0 : error.message) || 'AES解密失败');
83
+ }
84
+ });
85
+ });
@@ -0,0 +1,66 @@
1
+ import Taro from '@tarojs/taro';
2
+ export default (function (context) {
3
+ var _inputs$back;
4
+ var data = context.data;
5
+ var inputs = context.inputs;
6
+ var outputs = context.outputs;
7
+ (_inputs$back = inputs.back) === null || _inputs$back === void 0 || _inputs$back.call(inputs, function (val) {
8
+ try {
9
+ var _ref, _val$delta, _data$animation;
10
+ var delta = (_ref = (_val$delta = val === null || val === void 0 ? void 0 : val.delta) !== null && _val$delta !== void 0 ? _val$delta : data.delta) !== null && _ref !== void 0 ? _ref : 1;
11
+ var animation = (val === null || val === void 0 ? void 0 : val.animation) !== undefined ? val.animation : (_data$animation = data.animation) !== null && _data$animation !== void 0 ? _data$animation : true;
12
+
13
+ // 获取当前页面栈信息
14
+ var pages = Taro.getCurrentPages();
15
+ var currentIndex = pages.length - 1;
16
+ if (currentIndex === 0) {
17
+ // 如果是首页,返回失败
18
+ outputs.onFail('已经是首页,无法返回');
19
+ return;
20
+ }
21
+ if (delta > currentIndex) {
22
+ // 如果返回层数超过页面栈深度,返回失败
23
+ outputs.onFail("\u9875\u9762\u6808\u6DF1\u5EA6\u4E0D\u8DB3\uFF0C\u65E0\u6CD5\u8FD4\u56DE".concat(delta, "\u5C42"));
24
+ return;
25
+ }
26
+ if (delta === 1) {
27
+ // 返回上一页
28
+ Taro.navigateBack({
29
+ delta: 1,
30
+ animation: animation,
31
+ success: function success() {
32
+ return outputs.onSuccess({
33
+ delta: 1
34
+ });
35
+ },
36
+ fail: function fail(err) {
37
+ return outputs.onFail(err.errMsg || '返回失败');
38
+ }
39
+ });
40
+ } else {
41
+ // 多层返回,需要先获取目标页面信息
42
+ var targetPage = pages[currentIndex - delta];
43
+ if (targetPage) {
44
+ Taro.navigateBack({
45
+ delta: delta,
46
+ animation: animation,
47
+ success: function success() {
48
+ return outputs.onSuccess({
49
+ delta: delta,
50
+ targetPage: targetPage.route
51
+ });
52
+ },
53
+ fail: function fail(err) {
54
+ return outputs.onFail(err.errMsg || '返回失败');
55
+ }
56
+ });
57
+ } else {
58
+ outputs.onFail('目标页面不存在');
59
+ }
60
+ }
61
+ } catch (error) {
62
+ console.error('返回操作失败:', error);
63
+ outputs.onFail((error === null || error === void 0 ? void 0 : error.message) || '返回操作失败');
64
+ }
65
+ });
66
+ });
@@ -0,0 +1,30 @@
1
+ import Taro from '@tarojs/taro';
2
+ export default (function (context) {
3
+ var _inputs$callPhone;
4
+ var data = context.data;
5
+ var inputs = context.inputs;
6
+ var outputs = context.outputs;
7
+ (_inputs$callPhone = inputs.callPhone) === null || _inputs$callPhone === void 0 || _inputs$callPhone.call(inputs, function (val) {
8
+ try {
9
+ var phoneNumber = typeof val === 'string' ? val : (val === null || val === void 0 ? void 0 : val.phoneNumber) || data.phoneNumber;
10
+ if (!phoneNumber) {
11
+ outputs.onFail('电话号码不能为空');
12
+ return;
13
+ }
14
+ Taro.makePhoneCall({
15
+ phoneNumber: phoneNumber,
16
+ success: function success() {
17
+ return outputs.onSuccess({
18
+ phoneNumber: phoneNumber
19
+ });
20
+ },
21
+ fail: function fail(err) {
22
+ return outputs.onFail(err.errMsg || '拨打电话失败');
23
+ }
24
+ });
25
+ } catch (error) {
26
+ console.error('拨打电话失败:', error);
27
+ outputs.onFail((error === null || error === void 0 ? void 0 : error.message) || '拨打电话失败');
28
+ }
29
+ });
30
+ });
@@ -0,0 +1,81 @@
1
+ import Taro from '@tarojs/taro';
2
+ export default (function (context) {
3
+ var _inputs$chooseFile;
4
+ var data = context.data;
5
+ var inputs = context.inputs;
6
+ var outputs = context.outputs;
7
+ (_inputs$chooseFile = inputs.chooseFile) === null || _inputs$chooseFile === void 0 || _inputs$chooseFile.call(inputs, function (val) {
8
+ try {
9
+ var _config$accept, _config$accept2, _config$accept3;
10
+ var _config = {
11
+ accept: (val === null || val === void 0 ? void 0 : val.accept) || data.accept || 'image/*',
12
+ multiple: (val === null || val === void 0 ? void 0 : val.multiple) !== undefined ? val.multiple : data.multiple || false,
13
+ capture: (val === null || val === void 0 ? void 0 : val.capture) || data.capture,
14
+ compressed: (val === null || val === void 0 ? void 0 : val.compressed) !== undefined ? val.compressed : data.compressed,
15
+ maxDuration: (val === null || val === void 0 ? void 0 : val.maxDuration) || data.maxDuration,
16
+ camera: (val === null || val === void 0 ? void 0 : val.camera) || data.camera
17
+ };
18
+
19
+ // 根据文件类型选择不同的API
20
+ if ((_config$accept = _config.accept) !== null && _config$accept !== void 0 && _config$accept.startsWith('image/')) {
21
+ // 选择图片
22
+ Taro.chooseImage({
23
+ count: _config.multiple ? 9 : 1,
24
+ sourceType: _config.capture === 'album' ? ['album'] : _config.capture === 'camera' ? ['camera'] : ['album', 'camera'],
25
+ success: function success(res) {
26
+ outputs.onSuccess({
27
+ type: 'image',
28
+ files: res.tempFiles,
29
+ tempFilePaths: res.tempFilePaths
30
+ });
31
+ },
32
+ fail: function fail(err) {
33
+ return outputs.onFail(err.errMsg || '选择图片失败');
34
+ }
35
+ });
36
+ } else if ((_config$accept2 = _config.accept) !== null && _config$accept2 !== void 0 && _config$accept2.startsWith('video/')) {
37
+ // 选择视频
38
+ Taro.chooseVideo({
39
+ sourceType: _config.capture === 'album' ? ['album'] : _config.capture === 'camera' ? ['camera'] : ['album', 'camera'],
40
+ compressed: _config.compressed,
41
+ maxDuration: _config.maxDuration,
42
+ camera: _config.camera,
43
+ success: function success(res) {
44
+ outputs.onSuccess({
45
+ type: 'video',
46
+ file: res
47
+ });
48
+ },
49
+ fail: function fail(err) {
50
+ return outputs.onFail(err.errMsg || '选择视频失败');
51
+ }
52
+ });
53
+ } else if ((_config$accept3 = _config.accept) !== null && _config$accept3 !== void 0 && _config$accept3.startsWith('audio/')) {
54
+ // 选择音频(小程序暂不支持直接选择音频文件,这里返回提示)
55
+ outputs.onFail('小程序暂不支持直接选择音频文件');
56
+ } else {
57
+ // 其他文件类型,使用文件选择器(如果支持)
58
+ if (Taro.chooseMessageFile) {
59
+ Taro.chooseMessageFile({
60
+ count: _config.multiple ? 10 : 1,
61
+ type: 'file',
62
+ success: function success(res) {
63
+ outputs.onSuccess({
64
+ type: 'file',
65
+ files: res.tempFiles
66
+ });
67
+ },
68
+ fail: function fail(err) {
69
+ return outputs.onFail(err.errMsg || '选择文件失败');
70
+ }
71
+ });
72
+ } else {
73
+ outputs.onFail('当前环境不支持文件选择');
74
+ }
75
+ }
76
+ } catch (error) {
77
+ console.error('文件选择失败:', error);
78
+ outputs.onFail((error === null || error === void 0 ? void 0 : error.message) || '文件选择失败');
79
+ }
80
+ });
81
+ });
@@ -0,0 +1,38 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ import Taro from '@tarojs/taro';
3
+ export default (function (context) {
4
+ var _inputs$chooseMedia;
5
+ var data = context.data;
6
+ var inputs = context.inputs;
7
+ var outputs = context.outputs;
8
+ (_inputs$chooseMedia = inputs.chooseMedia) === null || _inputs$chooseMedia === void 0 || _inputs$chooseMedia.call(inputs, function (val) {
9
+ try {
10
+ var _config = {
11
+ mediaType: (val === null || val === void 0 ? void 0 : val.mediaType) || data.mediaType || ['image', 'video'],
12
+ sourceType: (val === null || val === void 0 ? void 0 : val.sourceType) || data.sourceType || ['album', 'camera'],
13
+ count: (val === null || val === void 0 ? void 0 : val.count) || data.count || 9,
14
+ sizeType: (val === null || val === void 0 ? void 0 : val.sizeType) || data.sizeType || ['original', 'compressed'],
15
+ maxDuration: (val === null || val === void 0 ? void 0 : val.maxDuration) || data.maxDuration || 10,
16
+ camera: (val === null || val === void 0 ? void 0 : val.camera) || data.camera
17
+ };
18
+ Taro.chooseMedia(_objectSpread(_objectSpread({}, _config), {}, {
19
+ success: function success(res) {
20
+ var _res$tempFiles;
21
+ outputs.onSuccess({
22
+ type: res.type,
23
+ tempFiles: res.tempFiles,
24
+ tempFilePaths: res.tempFilePaths || ((_res$tempFiles = res.tempFiles) === null || _res$tempFiles === void 0 ? void 0 : _res$tempFiles.map(function (file) {
25
+ return file.tempFilePath;
26
+ }))
27
+ });
28
+ },
29
+ fail: function fail(err) {
30
+ outputs.onFail(err.errMsg || '选择媒体失败');
31
+ }
32
+ }));
33
+ } catch (error) {
34
+ console.error('选择媒体失败:', error);
35
+ outputs.onFail((error === null || error === void 0 ? void 0 : error.message) || '选择媒体失败');
36
+ }
37
+ });
38
+ });
@@ -0,0 +1,60 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ import Taro from '@tarojs/taro';
3
+ export default (function (context) {
4
+ var _inputs$request;
5
+ var data = context.data;
6
+ var inputs = context.inputs;
7
+ var outputs = context.outputs;
8
+ (_inputs$request = inputs.request) === null || _inputs$request === void 0 || _inputs$request.call(inputs, function (val) {
9
+ try {
10
+ var _config = {
11
+ method: (val === null || val === void 0 ? void 0 : val.method) || data.method || 'GET',
12
+ url: (val === null || val === void 0 ? void 0 : val.url) || data.url,
13
+ header: (val === null || val === void 0 ? void 0 : val.headers) || data.headers || {},
14
+ data: (val === null || val === void 0 ? void 0 : val.data) || data.data,
15
+ timeout: (val === null || val === void 0 ? void 0 : val.timeout) || data.timeout,
16
+ dataType: (val === null || val === void 0 ? void 0 : val.dataType) || data.dataType || 'json',
17
+ responseType: (val === null || val === void 0 ? void 0 : val.responseType) || data.responseType || 'text'
18
+ };
19
+ if (!_config.url) {
20
+ outputs.onFail('请求URL不能为空');
21
+ return;
22
+ }
23
+
24
+ // 检查URL格式
25
+ if (!/^https?:\/\//.test(_config.url)) {
26
+ outputs.onFail('URL格式不正确,请以http://或https://开头');
27
+ return;
28
+ }
29
+ Taro.request(_objectSpread(_objectSpread({}, _config), {}, {
30
+ success: function success(res) {
31
+ if (res.statusCode >= 200 && res.statusCode < 300) {
32
+ outputs.onSuccess({
33
+ data: res.data,
34
+ statusCode: res.statusCode,
35
+ header: res.header
36
+ });
37
+ } else {
38
+ outputs.onFail({
39
+ message: "\u8BF7\u6C42\u5931\u8D25: ".concat(res.statusCode),
40
+ statusCode: res.statusCode,
41
+ data: res.data
42
+ });
43
+ }
44
+ },
45
+ fail: function fail(err) {
46
+ outputs.onFail({
47
+ message: err.errMsg || '网络请求失败',
48
+ error: err
49
+ });
50
+ }
51
+ }));
52
+ } catch (error) {
53
+ console.error('网络请求失败:', error);
54
+ outputs.onFail({
55
+ message: (error === null || error === void 0 ? void 0 : error.message) || '网络请求失败',
56
+ error: error
57
+ });
58
+ }
59
+ });
60
+ });
@@ -0,0 +1,56 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ // 全局请求头存储
3
+ var globalHeaders = {};
4
+ export default (function (context) {
5
+ var _inputs$setGlobalHead, _inputs$getGlobalHead, _inputs$clearGlobalHe;
6
+ var data = context.data;
7
+ var inputs = context.inputs;
8
+ var outputs = context.outputs;
9
+ (_inputs$setGlobalHead = inputs.setGlobalHeaders) === null || _inputs$setGlobalHead === void 0 || _inputs$setGlobalHead.call(inputs, function (val) {
10
+ try {
11
+ var headers = (val === null || val === void 0 ? void 0 : val.headers) || data.headers || {};
12
+ if (Object.keys(headers).length === 0) {
13
+ outputs.onFail('请求头不能为空');
14
+ return;
15
+ }
16
+
17
+ // 合并到全局请求头
18
+ globalHeaders = _objectSpread(_objectSpread({}, globalHeaders), headers);
19
+ outputs.onSuccess({
20
+ globalHeaders: _objectSpread({}, globalHeaders),
21
+ addedHeaders: headers
22
+ });
23
+ } catch (error) {
24
+ console.error('设置全局请求头失败:', error);
25
+ outputs.onFail((error === null || error === void 0 ? void 0 : error.message) || '设置全局请求头失败');
26
+ }
27
+ });
28
+ (_inputs$getGlobalHead = inputs.getGlobalHeaders) === null || _inputs$getGlobalHead === void 0 || _inputs$getGlobalHead.call(inputs, function () {
29
+ try {
30
+ outputs.onSuccess({
31
+ globalHeaders: _objectSpread({}, globalHeaders)
32
+ });
33
+ } catch (error) {
34
+ console.error('获取全局请求头失败:', error);
35
+ outputs.onFail((error === null || error === void 0 ? void 0 : error.message) || '获取全局请求头失败');
36
+ }
37
+ });
38
+ (_inputs$clearGlobalHe = inputs.clearGlobalHeaders) === null || _inputs$clearGlobalHe === void 0 || _inputs$clearGlobalHe.call(inputs, function () {
39
+ try {
40
+ var oldHeaders = _objectSpread({}, globalHeaders);
41
+ globalHeaders = {};
42
+ outputs.onSuccess({
43
+ clearedHeaders: oldHeaders,
44
+ globalHeaders: {}
45
+ });
46
+ } catch (error) {
47
+ console.error('清除全局请求头失败:', error);
48
+ outputs.onFail((error === null || error === void 0 ? void 0 : error.message) || '清除全局请求头失败');
49
+ }
50
+ });
51
+ });
52
+
53
+ // 导出一个工具函数,用于在其他组件中获取全局请求头
54
+ export var getGlobalHeaders = function getGlobalHeaders() {
55
+ return _objectSpread({}, globalHeaders);
56
+ };