@mybricks/to-code-taro 1.0.0
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/dist/cjs/abstractEventTypeDef.d.ts +11 -0
- package/dist/cjs/abstractEventTypeDef.js +93 -0
- package/dist/cjs/core/comlib/Index.js +45 -0
- package/dist/cjs/core/comlib/_ScanQrcode.js +60 -0
- package/dist/cjs/core/comlib/_SetStorage.js +76 -0
- package/dist/cjs/core/comlib/_ShowToast.js +96 -0
- package/dist/cjs/core/mybricks/MyBricksDescriptor.js +213 -0
- package/dist/cjs/core/mybricks/Subject.js +115 -0
- package/dist/cjs/core/mybricks/constant.js +70 -0
- package/dist/cjs/core/mybricks/context.js +33 -0
- package/dist/cjs/core/mybricks/createEnv.js +39 -0
- package/dist/cjs/core/mybricks/createJSHandle.js +150 -0
- package/dist/cjs/core/mybricks/createModuleEventsHandle.js +49 -0
- package/dist/cjs/core/mybricks/createReactiveInputHandler.js +63 -0
- package/dist/cjs/core/mybricks/event.js +70 -0
- package/dist/cjs/core/mybricks/index.js +871 -0
- package/dist/cjs/core/mybricks/log.js +38 -0
- package/dist/cjs/core/mybricks/utils.js +69 -0
- package/dist/cjs/core/mybricks/variables.js +217 -0
- package/dist/cjs/core/utils/ComContext.js +39 -0
- package/dist/cjs/core/utils/index.js +88 -0
- package/dist/cjs/core/utils/useContext.js +53 -0
- package/dist/cjs/core/utils/with.js +84 -0
- package/dist/cjs/generate/generateTaroProjectJson.d.ts +24 -0
- package/dist/cjs/generate/generateTaroProjectJson.js +101 -0
- package/dist/cjs/generate/generateTaroTempalteJson.d.ts +15 -0
- package/dist/cjs/generate/generateTaroTempalteJson.js +103 -0
- package/dist/cjs/generate/utils/appConfig.d.ts +21 -0
- package/dist/cjs/generate/utils/appConfig.js +47 -0
- package/dist/cjs/generate/utils/commonDir.d.ts +21 -0
- package/dist/cjs/generate/utils/commonDir.js +50 -0
- package/dist/cjs/generate/utils/fileNode.d.ts +17 -0
- package/dist/cjs/generate/utils/fileNode.js +57 -0
- package/dist/cjs/generate/utils/index.d.ts +7 -0
- package/dist/cjs/generate/utils/index.js +29 -0
- package/dist/cjs/generate/utils/tabBarImages.d.ts +14 -0
- package/dist/cjs/generate/utils/tabBarImages.js +36 -0
- package/dist/cjs/handleCom.d.ts +31 -0
- package/dist/cjs/handleCom.js +260 -0
- package/dist/cjs/handleDom.d.ts +19 -0
- package/dist/cjs/handleDom.js +86 -0
- package/dist/cjs/handleExtension.d.ts +10 -0
- package/dist/cjs/handleExtension.js +300 -0
- package/dist/cjs/handleGlobal.d.ts +21 -0
- package/dist/cjs/handleGlobal.js +155 -0
- package/dist/cjs/handleModule.d.ts +15 -0
- package/dist/cjs/handleModule.js +108 -0
- package/dist/cjs/handleSlot.d.ts +27 -0
- package/dist/cjs/handleSlot.js +197 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.js +44 -0
- package/dist/cjs/taro-template.json +5370 -0
- package/dist/cjs/toCodeTaro.d.ts +130 -0
- package/dist/cjs/toCodeTaro.js +427 -0
- package/dist/cjs/utils/code/component.d.ts +19 -0
- package/dist/cjs/utils/code/component.js +85 -0
- package/dist/cjs/utils/code/index.d.ts +18 -0
- package/dist/cjs/utils/code/index.js +71 -0
- package/dist/cjs/utils/code/renderManager.d.ts +22 -0
- package/dist/cjs/utils/code/renderManager.js +80 -0
- package/dist/cjs/utils/code/scene.d.ts +19 -0
- package/dist/cjs/utils/code/scene.js +82 -0
- package/dist/cjs/utils/convertNamespace.d.ts +11 -0
- package/dist/cjs/utils/convertNamespace.js +43 -0
- package/dist/cjs/utils/genJSModules.d.ts +12 -0
- package/dist/cjs/utils/genJSModules.js +116 -0
- package/dist/cjs/utils/getComponentClassName.d.ts +16 -0
- package/dist/cjs/utils/getComponentClassName.js +47 -0
- package/dist/cjs/utils/handlePageConfig.d.ts +24 -0
- package/dist/cjs/utils/handlePageConfig.js +73 -0
- package/dist/cjs/utils/handleProcess.d.ts +9 -0
- package/dist/cjs/utils/handleProcess.js +370 -0
- package/dist/cjs/utils/index.d.ts +62 -0
- package/dist/cjs/utils/index.js +321 -0
- package/dist/cjs/utils/pageConfig/converter.d.ts +17 -0
- package/dist/cjs/utils/pageConfig/converter.js +83 -0
- package/dist/cjs/utils/pageConfig/index.d.ts +10 -0
- package/dist/cjs/utils/pageConfig/index.js +33 -0
- package/dist/cjs/utils/pageConfig/pageConfig.d.ts +10 -0
- package/dist/cjs/utils/pageConfig/pageConfig.js +87 -0
- package/dist/cjs/utils/pageConfig/saveBase64Image.d.ts +14 -0
- package/dist/cjs/utils/pageConfig/saveBase64Image.js +81 -0
- package/dist/cjs/utils/pageConfig/tabBarConfig.d.ts +13 -0
- package/dist/cjs/utils/pageConfig/tabBarConfig.js +74 -0
- package/dist/cjs/utils/pageConfig/types.d.ts +68 -0
- package/dist/cjs/utils/pageConfig/types.js +17 -0
- package/dist/cjs/utils/pageConfig/validator.d.ts +13 -0
- package/dist/cjs/utils/pageConfig/validator.js +67 -0
- package/dist/cjs/utils/pxtransform.d.ts +28 -0
- package/dist/cjs/utils/pxtransform.js +102 -0
- package/dist/esm/abstractEventTypeDef.d.ts +11 -0
- package/dist/esm/abstractEventTypeDef.js +63 -0
- package/dist/esm/core/comlib/Index.js +3 -0
- package/dist/esm/core/comlib/_ScanQrcode.js +27 -0
- package/dist/esm/core/comlib/_SetStorage.js +52 -0
- package/dist/esm/core/comlib/_ShowToast.js +68 -0
- package/dist/esm/core/mybricks/MyBricksDescriptor.js +232 -0
- package/dist/esm/core/mybricks/Subject.js +143 -0
- package/dist/esm/core/mybricks/constant.js +18 -0
- package/dist/esm/core/mybricks/context.js +5 -0
- package/dist/esm/core/mybricks/createEnv.js +9 -0
- package/dist/esm/core/mybricks/createJSHandle.js +138 -0
- package/dist/esm/core/mybricks/createModuleEventsHandle.js +26 -0
- package/dist/esm/core/mybricks/createReactiveInputHandler.js +40 -0
- package/dist/esm/core/mybricks/event.js +44 -0
- package/dist/esm/core/mybricks/index.js +952 -0
- package/dist/esm/core/mybricks/log.js +12 -0
- package/dist/esm/core/mybricks/utils.js +41 -0
- package/dist/esm/core/mybricks/variables.js +190 -0
- package/dist/esm/core/utils/ComContext.js +10 -0
- package/dist/esm/core/utils/index.js +57 -0
- package/dist/esm/core/utils/useContext.js +24 -0
- package/dist/esm/core/utils/with.js +67 -0
- package/dist/esm/generate/generateTaroProjectJson.d.ts +24 -0
- package/dist/esm/generate/generateTaroProjectJson.js +102 -0
- package/dist/esm/generate/generateTaroTempalteJson.d.ts +15 -0
- package/dist/esm/generate/generateTaroTempalteJson.js +94 -0
- package/dist/esm/generate/utils/appConfig.d.ts +21 -0
- package/dist/esm/generate/utils/appConfig.js +30 -0
- package/dist/esm/generate/utils/commonDir.d.ts +21 -0
- package/dist/esm/generate/utils/commonDir.js +36 -0
- package/dist/esm/generate/utils/fileNode.d.ts +17 -0
- package/dist/esm/generate/utils/fileNode.js +49 -0
- package/dist/esm/generate/utils/index.d.ts +7 -0
- package/dist/esm/generate/utils/index.js +8 -0
- package/dist/esm/generate/utils/tabBarImages.d.ts +14 -0
- package/dist/esm/generate/utils/tabBarImages.js +15 -0
- package/dist/esm/handleCom.d.ts +31 -0
- package/dist/esm/handleCom.js +297 -0
- package/dist/esm/handleDom.d.ts +19 -0
- package/dist/esm/handleDom.js +63 -0
- package/dist/esm/handleExtension.d.ts +10 -0
- package/dist/esm/handleExtension.js +243 -0
- package/dist/esm/handleGlobal.d.ts +21 -0
- package/dist/esm/handleGlobal.js +117 -0
- package/dist/esm/handleModule.d.ts +15 -0
- package/dist/esm/handleModule.js +78 -0
- package/dist/esm/handleSlot.d.ts +27 -0
- package/dist/esm/handleSlot.js +205 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/taro-template.json +5370 -0
- package/dist/esm/toCodeTaro.d.ts +130 -0
- package/dist/esm/toCodeTaro.js +452 -0
- package/dist/esm/utils/code/component.d.ts +19 -0
- package/dist/esm/utils/code/component.js +54 -0
- package/dist/esm/utils/code/index.d.ts +18 -0
- package/dist/esm/utils/code/index.js +51 -0
- package/dist/esm/utils/code/renderManager.d.ts +22 -0
- package/dist/esm/utils/code/renderManager.js +62 -0
- package/dist/esm/utils/code/scene.d.ts +19 -0
- package/dist/esm/utils/code/scene.js +47 -0
- package/dist/esm/utils/convertNamespace.d.ts +11 -0
- package/dist/esm/utils/convertNamespace.js +27 -0
- package/dist/esm/utils/genJSModules.d.ts +12 -0
- package/dist/esm/utils/genJSModules.js +44 -0
- package/dist/esm/utils/getComponentClassName.d.ts +16 -0
- package/dist/esm/utils/getComponentClassName.js +37 -0
- package/dist/esm/utils/handlePageConfig.d.ts +24 -0
- package/dist/esm/utils/handlePageConfig.js +68 -0
- package/dist/esm/utils/handleProcess.d.ts +9 -0
- package/dist/esm/utils/handleProcess.js +379 -0
- package/dist/esm/utils/index.d.ts +62 -0
- package/dist/esm/utils/index.js +345 -0
- package/dist/esm/utils/pageConfig/converter.d.ts +17 -0
- package/dist/esm/utils/pageConfig/converter.js +105 -0
- package/dist/esm/utils/pageConfig/index.d.ts +10 -0
- package/dist/esm/utils/pageConfig/index.js +11 -0
- package/dist/esm/utils/pageConfig/pageConfig.d.ts +10 -0
- package/dist/esm/utils/pageConfig/pageConfig.js +60 -0
- package/dist/esm/utils/pageConfig/saveBase64Image.d.ts +14 -0
- package/dist/esm/utils/pageConfig/saveBase64Image.js +105 -0
- package/dist/esm/utils/pageConfig/tabBarConfig.d.ts +13 -0
- package/dist/esm/utils/pageConfig/tabBarConfig.js +82 -0
- package/dist/esm/utils/pageConfig/types.d.ts +68 -0
- package/dist/esm/utils/pageConfig/types.js +1 -0
- package/dist/esm/utils/pageConfig/validator.d.ts +13 -0
- package/dist/esm/utils/pageConfig/validator.js +64 -0
- package/dist/esm/utils/pxtransform.d.ts +28 -0
- package/dist/esm/utils/pxtransform.js +121 -0
- package/package.json +74 -0
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
|
+
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
4
|
+
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
5
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
6
|
+
import pxtransform from "./pxtransform";
|
|
7
|
+
|
|
8
|
+
// 临时类型定义,实际使用时应该从 code-next 导入
|
|
9
|
+
|
|
10
|
+
/** 导入依赖收集、解析 */
|
|
11
|
+
export var ImportManager = /*#__PURE__*/function () {
|
|
12
|
+
function ImportManager(_config) {
|
|
13
|
+
_classCallCheck(this, ImportManager);
|
|
14
|
+
_defineProperty(this, "_imports", {});
|
|
15
|
+
this._config = _config;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** 添加依赖 */
|
|
19
|
+
_createClass(ImportManager, [{
|
|
20
|
+
key: "addImport",
|
|
21
|
+
value: function addImport(_ref) {
|
|
22
|
+
var packageName = _ref.packageName,
|
|
23
|
+
dependencyNames = _ref.dependencyNames,
|
|
24
|
+
importType = _ref.importType;
|
|
25
|
+
if (!packageName) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
var _imports = this._imports;
|
|
29
|
+
if (!_imports[packageName]) {
|
|
30
|
+
_imports[packageName] = {};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// 对于 module 类型且 dependencyNames 为空的情况,使用特殊标记
|
|
34
|
+
if (importType === "module" && dependencyNames.length === 0) {
|
|
35
|
+
_imports[packageName]["__module__"] = {
|
|
36
|
+
importType: "module"
|
|
37
|
+
};
|
|
38
|
+
} else {
|
|
39
|
+
dependencyNames.forEach(function (dependencyName) {
|
|
40
|
+
_imports[packageName][dependencyName] = {
|
|
41
|
+
importType: importType
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** 依赖解析为code */
|
|
48
|
+
}, {
|
|
49
|
+
key: "toCode",
|
|
50
|
+
value: function toCode() {
|
|
51
|
+
var indent = indentation(this._config.codeStyle.indent);
|
|
52
|
+
return Object.entries(this._imports).reduce(function (pre, _ref2) {
|
|
53
|
+
var _dependencies$__modul;
|
|
54
|
+
var _ref3 = _slicedToArray(_ref2, 2),
|
|
55
|
+
packageName = _ref3[0],
|
|
56
|
+
dependencies = _ref3[1];
|
|
57
|
+
var defaultDependency = "";
|
|
58
|
+
var namedDependencies = "";
|
|
59
|
+
var moduleDependency = "";
|
|
60
|
+
var dependencyEntries = Object.entries(dependencies);
|
|
61
|
+
|
|
62
|
+
// 检查是否有 module 类型的导入(如 import './index.less')
|
|
63
|
+
// 通过检查 __module__ 标记或依赖项中的 module 类型
|
|
64
|
+
var hasModuleType = ((_dependencies$__modul = dependencies["__module__"]) === null || _dependencies$__modul === void 0 ? void 0 : _dependencies$__modul.importType) === "module" || dependencyEntries.some(function (_ref4) {
|
|
65
|
+
var _ref5 = _slicedToArray(_ref4, 2),
|
|
66
|
+
importType = _ref5[1].importType;
|
|
67
|
+
return importType === "module";
|
|
68
|
+
});
|
|
69
|
+
if (hasModuleType) {
|
|
70
|
+
// module 类型:直接生成 import 'packageName',不再处理其他依赖
|
|
71
|
+
return pre + "import '".concat(packageName, "';\n");
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** 超过三项换行 */
|
|
75
|
+
// 排除 __module__ 标记
|
|
76
|
+
var validEntries = dependencyEntries.filter(function (_ref6) {
|
|
77
|
+
var _ref7 = _slicedToArray(_ref6, 1),
|
|
78
|
+
key = _ref7[0];
|
|
79
|
+
return key !== "__module__";
|
|
80
|
+
});
|
|
81
|
+
var wrap = validEntries.length > 3;
|
|
82
|
+
validEntries.forEach(function (_ref8, index) {
|
|
83
|
+
var _ref9 = _slicedToArray(_ref8, 2),
|
|
84
|
+
dependencyName = _ref9[0],
|
|
85
|
+
importType = _ref9[1].importType;
|
|
86
|
+
if (importType === "default") {
|
|
87
|
+
defaultDependency = dependencyName;
|
|
88
|
+
} else if (importType === "named") {
|
|
89
|
+
if (wrap) {
|
|
90
|
+
namedDependencies += "".concat(indent).concat(dependencyName, ",\n");
|
|
91
|
+
} else {
|
|
92
|
+
namedDependencies += "".concat(index ? ", " : "").concat(dependencyName);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
if (namedDependencies) {
|
|
97
|
+
if (wrap) {
|
|
98
|
+
namedDependencies = "{\n".concat(namedDependencies, "}");
|
|
99
|
+
} else {
|
|
100
|
+
namedDependencies = "{ ".concat(namedDependencies, " }");
|
|
101
|
+
}
|
|
102
|
+
if (defaultDependency) {
|
|
103
|
+
defaultDependency += ", ";
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return pre + "import ".concat(defaultDependency).concat(namedDependencies, " from '").concat(packageName, "';\n");
|
|
107
|
+
}, "");
|
|
108
|
+
}
|
|
109
|
+
}]);
|
|
110
|
+
return ImportManager;
|
|
111
|
+
}();
|
|
112
|
+
|
|
113
|
+
/** 将第一个字符转大写 */
|
|
114
|
+
export var firstCharToUpperCase = function firstCharToUpperCase(str) {
|
|
115
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
/** 将第一个字符转小写 */
|
|
119
|
+
export var firstCharToLowerCase = function firstCharToLowerCase(str) {
|
|
120
|
+
return str.charAt(0).toLowerCase() + str.slice(1);
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/** 缩进 */
|
|
124
|
+
export var indentation = function indentation(level) {
|
|
125
|
+
return " ".repeat(level);
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
/** 驼峰转中划线 */
|
|
129
|
+
export var camelToKebab = function camelToKebab(str) {
|
|
130
|
+
return str.replace(/([A-Z])/g, "-$1").toLowerCase();
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
/** 中划线转驼峰 */
|
|
134
|
+
export var kebabToCamel = function kebabToCamel(str) {
|
|
135
|
+
return str.replace(/-([a-z])/g, function (_, char) {
|
|
136
|
+
return char.toUpperCase();
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
/** 转换根节点样式 */
|
|
141
|
+
export var convertRootStyle = function convertRootStyle(style) {
|
|
142
|
+
var rootStyle = {};
|
|
143
|
+
Object.entries(style || {}).forEach(function (_ref10) {
|
|
144
|
+
var _ref11 = _slicedToArray(_ref10, 2),
|
|
145
|
+
key = _ref11[0],
|
|
146
|
+
value = _ref11[1];
|
|
147
|
+
// 忽略一些不需要的属性
|
|
148
|
+
if (key === "_new" || key === "themesId" || key === "visibility" || key === "styleAry") {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (key === "layout") {
|
|
152
|
+
if (_typeof(value) === "object" && value !== null) {
|
|
153
|
+
// 处理 layout 对象,动态转换所有属性
|
|
154
|
+
var layoutObj = value;
|
|
155
|
+
Object.entries(layoutObj).forEach(function (_ref12) {
|
|
156
|
+
var _ref13 = _slicedToArray(_ref12, 2),
|
|
157
|
+
lKey = _ref13[0],
|
|
158
|
+
lValue = _ref13[1];
|
|
159
|
+
if (lKey === "position") {
|
|
160
|
+
if (lValue === "smart") {
|
|
161
|
+
rootStyle["position"] = "absolute";
|
|
162
|
+
} else if (lValue !== "inherit") {
|
|
163
|
+
rootStyle["position"] = lValue;
|
|
164
|
+
}
|
|
165
|
+
} else {
|
|
166
|
+
// 所有布局属性转为小驼峰(React 行内样式使用 camelCase)
|
|
167
|
+
var camelLayoutKey = kebabToCamel(lKey);
|
|
168
|
+
rootStyle[camelLayoutKey] = pxtransform(lValue);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
} else if (value === "flex-row") {
|
|
172
|
+
rootStyle["display"] = "flex";
|
|
173
|
+
rootStyle["flexDirection"] = "row";
|
|
174
|
+
} else if (value === "flex-column") {
|
|
175
|
+
rootStyle["display"] = "flex";
|
|
176
|
+
rootStyle["flexDirection"] = "column";
|
|
177
|
+
} else if (value === "smart") {
|
|
178
|
+
// 处理 layout: 'smart'
|
|
179
|
+
rootStyle["position"] = "relative";
|
|
180
|
+
}
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// 根样式转换,统一转为小驼峰(React 行内样式使用 camelCase)
|
|
185
|
+
// 如果 key 已经是 kebab-case,转换为 camelCase;如果已经是 camelCase,保持不变
|
|
186
|
+
var camelKey = key.includes('-') ? kebabToCamel(key) : key;
|
|
187
|
+
if (typeof value === "string" || typeof value === "number") {
|
|
188
|
+
rootStyle[camelKey] = pxtransform(value);
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
return rootStyle;
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
/** 转换组件样式为 Taro/React 样式 */
|
|
195
|
+
export var convertComponentStyle = function convertComponentStyle(style) {
|
|
196
|
+
var resultStyle = {};
|
|
197
|
+
var rootStyle = convertRootStyle(style);
|
|
198
|
+
if (style.styleAry) {
|
|
199
|
+
// 处理样式数组
|
|
200
|
+
style.styleAry.forEach(function (_ref14) {
|
|
201
|
+
var css = _ref14.css,
|
|
202
|
+
selector = _ref14.selector;
|
|
203
|
+
var transformedCss = {};
|
|
204
|
+
Object.entries(css).forEach(function (_ref15) {
|
|
205
|
+
var _ref16 = _slicedToArray(_ref15, 2),
|
|
206
|
+
cssKey = _ref16[0],
|
|
207
|
+
cssValue = _ref16[1];
|
|
208
|
+
if (cssKey === "layout") {
|
|
209
|
+
if (_typeof(cssValue) === "object" && cssValue !== null) {
|
|
210
|
+
var layoutObj = cssValue;
|
|
211
|
+
Object.entries(layoutObj).forEach(function (_ref17) {
|
|
212
|
+
var _ref18 = _slicedToArray(_ref17, 2),
|
|
213
|
+
lKey = _ref18[0],
|
|
214
|
+
lValue = _ref18[1];
|
|
215
|
+
if (lKey === "position") {
|
|
216
|
+
if (lValue === "smart") {
|
|
217
|
+
transformedCss["position"] = "absolute";
|
|
218
|
+
} else if (lValue !== "inherit") {
|
|
219
|
+
transformedCss["position"] = lValue;
|
|
220
|
+
}
|
|
221
|
+
} else {
|
|
222
|
+
// 布局属性转为小驼峰(React 行内样式使用 camelCase)
|
|
223
|
+
transformedCss[kebabToCamel(lKey)] = lValue;
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
} else if (cssValue === "flex-row") {
|
|
227
|
+
transformedCss["display"] = "flex";
|
|
228
|
+
transformedCss["flexDirection"] = "row";
|
|
229
|
+
} else if (cssValue === "flex-column") {
|
|
230
|
+
transformedCss["display"] = "flex";
|
|
231
|
+
transformedCss["flexDirection"] = "column";
|
|
232
|
+
} else if (cssValue === "smart") {
|
|
233
|
+
transformedCss["position"] = "relative";
|
|
234
|
+
}
|
|
235
|
+
} else {
|
|
236
|
+
// CSS 属性转为小驼峰(React 行内样式使用 camelCase)
|
|
237
|
+
// 如果 cssKey 已经是 kebab-case,转换为 camelCase;如果已经是 camelCase,保持不变
|
|
238
|
+
var camelKey = cssKey.includes('-') ? kebabToCamel(cssKey) : cssKey;
|
|
239
|
+
transformedCss[camelKey] = pxtransform(cssValue);
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
resultStyle[selector] = transformedCss;
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
resultStyle["root"] = rootStyle;
|
|
246
|
+
return resultStyle;
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
/** 转换 styleAry 为 CSS 字符串 */
|
|
250
|
+
export var convertStyleAryToCss = function convertStyleAryToCss(styleAry, parentSelector) {
|
|
251
|
+
if (!Array.isArray(styleAry)) return "";
|
|
252
|
+
var prefix = parentSelector ? ".".concat(parentSelector, " ") : "";
|
|
253
|
+
return styleAry.map(function (_ref19) {
|
|
254
|
+
var selector = _ref19.selector,
|
|
255
|
+
css = _ref19.css;
|
|
256
|
+
if (!selector || !css) return "";
|
|
257
|
+
|
|
258
|
+
// 处理选择器,如果是以 > 开头,处理空格
|
|
259
|
+
var finalSelector = selector;
|
|
260
|
+
if (finalSelector.startsWith(">")) {
|
|
261
|
+
finalSelector = "".concat(prefix).concat(finalSelector);
|
|
262
|
+
} else {
|
|
263
|
+
finalSelector = "".concat(prefix).concat(finalSelector);
|
|
264
|
+
}
|
|
265
|
+
var transformedCss = {};
|
|
266
|
+
Object.entries(css).forEach(function (_ref20) {
|
|
267
|
+
var _ref21 = _slicedToArray(_ref20, 2),
|
|
268
|
+
key = _ref21[0],
|
|
269
|
+
value = _ref21[1];
|
|
270
|
+
if (key === "layout") {
|
|
271
|
+
if (_typeof(value) === "object" && value !== null) {
|
|
272
|
+
var layoutObj = value;
|
|
273
|
+
Object.entries(layoutObj).forEach(function (_ref22) {
|
|
274
|
+
var _ref23 = _slicedToArray(_ref22, 2),
|
|
275
|
+
lKey = _ref23[0],
|
|
276
|
+
lValue = _ref23[1];
|
|
277
|
+
if (lKey === "position") {
|
|
278
|
+
if (lValue === "smart") {
|
|
279
|
+
transformedCss["position"] = "absolute";
|
|
280
|
+
} else if (lValue !== "inherit") {
|
|
281
|
+
transformedCss["position"] = lValue;
|
|
282
|
+
}
|
|
283
|
+
} else {
|
|
284
|
+
transformedCss[kebabToCamel(lKey)] = lValue;
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
} else if (value === "flex-row") {
|
|
288
|
+
transformedCss["display"] = "flex";
|
|
289
|
+
transformedCss["flexDirection"] = "row";
|
|
290
|
+
} else if (value === "flex-column") {
|
|
291
|
+
transformedCss["display"] = "flex";
|
|
292
|
+
transformedCss["flexDirection"] = "column";
|
|
293
|
+
} else if (value === "smart") {
|
|
294
|
+
transformedCss["position"] = "relative";
|
|
295
|
+
}
|
|
296
|
+
} else {
|
|
297
|
+
transformedCss[kebabToCamel(key)] = value;
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
var cssString = Object.entries(transformedCss).map(function (_ref24) {
|
|
301
|
+
var _ref25 = _slicedToArray(_ref24, 2),
|
|
302
|
+
key = _ref25[0],
|
|
303
|
+
value = _ref25[1];
|
|
304
|
+
// 使用通用工具转换驼峰为中划线
|
|
305
|
+
var kebabKey = camelToKebab(key);
|
|
306
|
+
var formattedValue = typeof value === "number" ? "".concat(value, "px") : value;
|
|
307
|
+
return " ".concat(kebabKey, ": ").concat(formattedValue, ";");
|
|
308
|
+
}).join("\n");
|
|
309
|
+
return "".concat(finalSelector, " {\n").concat(cssString, "\n}");
|
|
310
|
+
}).join("\n\n");
|
|
311
|
+
};
|
|
312
|
+
|
|
313
|
+
/** 生成对象代码 */
|
|
314
|
+
export var genObjectCode = function genObjectCode(object, config) {
|
|
315
|
+
var initialIndent = config.initialIndent,
|
|
316
|
+
indentSize = config.indentSize;
|
|
317
|
+
var keys = Object.keys(object);
|
|
318
|
+
if (keys.length === 0) return "{}";
|
|
319
|
+
var result = "{\n";
|
|
320
|
+
keys.forEach(function (key, idx) {
|
|
321
|
+
var value = object[key];
|
|
322
|
+
var formattedValue;
|
|
323
|
+
if (Array.isArray(value)) {
|
|
324
|
+
formattedValue = JSON.stringify(value);
|
|
325
|
+
} else if (value && _typeof(value) === "object") {
|
|
326
|
+
formattedValue = genObjectCode(value, {
|
|
327
|
+
initialIndent: initialIndent + indentSize,
|
|
328
|
+
indentSize: indentSize
|
|
329
|
+
});
|
|
330
|
+
} else if (typeof value === "string") {
|
|
331
|
+
formattedValue = JSON.stringify(value);
|
|
332
|
+
} else {
|
|
333
|
+
formattedValue = String(value);
|
|
334
|
+
}
|
|
335
|
+
result += indentation(initialIndent + indentSize) + "".concat(JSON.stringify(key), ": ").concat(formattedValue);
|
|
336
|
+
if (idx < keys.length - 1) result += ",";
|
|
337
|
+
result += "\n";
|
|
338
|
+
});
|
|
339
|
+
result += indentation(initialIndent) + "}";
|
|
340
|
+
return result;
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
// 导出 code 目录下的函数
|
|
344
|
+
export { getUiComponentCode } from "./code";
|
|
345
|
+
export { getRootComponentClassName } from "./getComponentClassName";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TabBarItemSource, TaroTabBarConfig } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* 将 TabBar 数据转换为 Taro 配置格式
|
|
4
|
+
* @param tabBar TabBar 项数组(来自 toJson.tabbar)
|
|
5
|
+
* @param pageIdToPath 页面 ID 到路径的映射函数,默认格式为 `pages/${pageId}/index`
|
|
6
|
+
* @param processIcon 处理图标的函数(可选,用于处理 base64 图片)
|
|
7
|
+
* @returns Taro TabBar 配置,如果验证失败则返回 null
|
|
8
|
+
*/
|
|
9
|
+
export declare function convertToTaroTabBarConfig(tabBar: TabBarItemSource[] | undefined | null, pageIdToPath?: (pageId: string) => string, processIcon?: (iconPath: string | undefined, index: number, type: 'normal' | 'selected') => string | undefined): TaroTabBarConfig | null;
|
|
10
|
+
/**
|
|
11
|
+
* 获取入口页面 ID
|
|
12
|
+
* 如果启用 TabBar,返回第一个 TabBar 项的页面 ID;否则返回 null
|
|
13
|
+
* @param tabBar TabBar 项数组
|
|
14
|
+
* @param defaultEntryPageId 默认入口页面 ID(当 TabBar 未启用时使用)
|
|
15
|
+
* @returns 入口页面 ID
|
|
16
|
+
*/
|
|
17
|
+
export declare function getEntryPageId(tabBar: TabBarItemSource[] | undefined | null, defaultEntryPageId?: string): string | null;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
2
|
+
import { validateTabBar } from "./validator";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* TabBar 数据转换器
|
|
6
|
+
* 负责将 toJson.tabbar 格式转换为 Taro 配置格式
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* 将单个 TabBar 项转换为 Taro 格式
|
|
11
|
+
* @param item TabBar 项
|
|
12
|
+
* @param pageIdToPath 页面 ID 到路径的映射函数
|
|
13
|
+
* @param index TabBar 项的索引(用于生成文件名)
|
|
14
|
+
* @param processIcon 处理图标的函数(可选,用于处理 base64 图片)
|
|
15
|
+
* @returns Taro TabBar 项
|
|
16
|
+
*/
|
|
17
|
+
function convertTabBarItem(item, pageIdToPath) {
|
|
18
|
+
var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
19
|
+
var processIcon = arguments.length > 3 ? arguments[3] : undefined;
|
|
20
|
+
var pagePath = pageIdToPath(item.scene.id);
|
|
21
|
+
var text = item.text || item.scene.title || '';
|
|
22
|
+
var taroItem = {
|
|
23
|
+
pagePath: pagePath,
|
|
24
|
+
text: text
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
// 添加图标路径(如果存在)
|
|
28
|
+
if (item.normalIconPath) {
|
|
29
|
+
taroItem.iconPath = processIcon ? processIcon(item.normalIconPath, index, 'normal') : item.normalIconPath;
|
|
30
|
+
}
|
|
31
|
+
if (item.selectedIconPath) {
|
|
32
|
+
taroItem.selectedIconPath = processIcon ? processIcon(item.selectedIconPath, index, 'selected') : item.selectedIconPath;
|
|
33
|
+
}
|
|
34
|
+
return taroItem;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* 从文本样式中提取颜色
|
|
39
|
+
* @param textStyle 文本样式对象
|
|
40
|
+
* @returns 颜色值(如果有)
|
|
41
|
+
*/
|
|
42
|
+
function extractColorFromTextStyle(textStyle) {
|
|
43
|
+
if (!textStyle || _typeof(textStyle) !== 'object') {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
return textStyle.color || textStyle.colorValue;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* 将 TabBar 数据转换为 Taro 配置格式
|
|
51
|
+
* @param tabBar TabBar 项数组(来自 toJson.tabbar)
|
|
52
|
+
* @param pageIdToPath 页面 ID 到路径的映射函数,默认格式为 `pages/${pageId}/index`
|
|
53
|
+
* @param processIcon 处理图标的函数(可选,用于处理 base64 图片)
|
|
54
|
+
* @returns Taro TabBar 配置,如果验证失败则返回 null
|
|
55
|
+
*/
|
|
56
|
+
export function convertToTaroTabBarConfig(tabBar) {
|
|
57
|
+
var pageIdToPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (pageId) {
|
|
58
|
+
return "pages/".concat(pageId, "/index");
|
|
59
|
+
};
|
|
60
|
+
var processIcon = arguments.length > 2 ? arguments[2] : undefined;
|
|
61
|
+
// 验证 TabBar 配置
|
|
62
|
+
var validation = validateTabBar(tabBar);
|
|
63
|
+
if (!validation.useTabBar) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// 转换 TabBar 项
|
|
68
|
+
var list = validation.validItems.map(function (item, index) {
|
|
69
|
+
return convertTabBarItem(item, pageIdToPath, index, processIcon);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// 构建 TabBar 配置
|
|
73
|
+
var config = {
|
|
74
|
+
list: list
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// 从第一个 TabBar 项的样式中提取颜色(如果存在)
|
|
78
|
+
var firstItem = validation.validItems[0];
|
|
79
|
+
if (firstItem) {
|
|
80
|
+
var normalColor = extractColorFromTextStyle(firstItem.normalTextStyle);
|
|
81
|
+
var selectedColor = extractColorFromTextStyle(firstItem.selectedTextStyle);
|
|
82
|
+
if (normalColor) {
|
|
83
|
+
config.color = normalColor;
|
|
84
|
+
}
|
|
85
|
+
if (selectedColor) {
|
|
86
|
+
config.selectedColor = selectedColor;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return config;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* 获取入口页面 ID
|
|
94
|
+
* 如果启用 TabBar,返回第一个 TabBar 项的页面 ID;否则返回 null
|
|
95
|
+
* @param tabBar TabBar 项数组
|
|
96
|
+
* @param defaultEntryPageId 默认入口页面 ID(当 TabBar 未启用时使用)
|
|
97
|
+
* @returns 入口页面 ID
|
|
98
|
+
*/
|
|
99
|
+
export function getEntryPageId(tabBar, defaultEntryPageId) {
|
|
100
|
+
var validation = validateTabBar(tabBar);
|
|
101
|
+
if (validation.useTabBar && validation.validItems.length > 0) {
|
|
102
|
+
return validation.validItems[0].scene.id;
|
|
103
|
+
}
|
|
104
|
+
return defaultEntryPageId || null;
|
|
105
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 页面配置工具
|
|
3
|
+
* 负责从 systemPage 组件数据生成 definePageConfig 配置字符串
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 从 systemPage 组件数据生成 definePageConfig 配置字符串
|
|
7
|
+
* @param systemPageData systemPage 组件的 model.data
|
|
8
|
+
* @returns definePageConfig 配置字符串
|
|
9
|
+
*/
|
|
10
|
+
export declare function generatePageConfigContent(systemPageData?: any): string;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
+
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
3
|
+
/**
|
|
4
|
+
* 页面配置工具
|
|
5
|
+
* 负责从 systemPage 组件数据生成 definePageConfig 配置字符串
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
var TARO_NAVIGATION_BAR_PROPERTIES = ['navigationBarBackgroundColor', 'navigationBarTextStyle', 'navigationBarTitleText', 'navigationStyle'];
|
|
9
|
+
var TARO_PAGE_CONFIG_TEMPLATE_PROPERTIES = ['navigationBarBackgroundColor', 'navigationBarTextStyle', 'navigationBarTitleText', 'navigationStyle', 'transparentTitle', 'backgroundColor', 'backgroundTextStyle', 'backgroundColorTop', 'backgroundColorBottom', 'enablePullDownRefresh', 'onReachBottomDistance', 'pageOrientation', 'disableScroll', 'disableSwipeBack', 'enableShareAppMessage', 'enableShareTimeline', 'usingComponents', 'renderer'];
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* 从 systemPage 组件数据生成 definePageConfig 配置字符串
|
|
13
|
+
* @param systemPageData systemPage 组件的 model.data
|
|
14
|
+
* @returns definePageConfig 配置字符串
|
|
15
|
+
*/
|
|
16
|
+
export function generatePageConfigContent(systemPageData) {
|
|
17
|
+
var pageConfig = {};
|
|
18
|
+
if (systemPageData) {
|
|
19
|
+
var useNavigationStyle = systemPageData.useNavigationStyle;
|
|
20
|
+
|
|
21
|
+
// 确定要使用的属性列表
|
|
22
|
+
var propertiesToUse = [];
|
|
23
|
+
if (useNavigationStyle === 'default') {
|
|
24
|
+
// 如果 useNavigationStyle 为 default,使用 TARO_NAVIGATION_BAR_PROPERTIES
|
|
25
|
+
propertiesToUse = TARO_NAVIGATION_BAR_PROPERTIES;
|
|
26
|
+
} else {
|
|
27
|
+
// 否则使用 TARO_PAGE_CONFIG_TEMPLATE_PROPERTIES
|
|
28
|
+
propertiesToUse = TARO_PAGE_CONFIG_TEMPLATE_PROPERTIES;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// 从 systemPageData 中提取配置属性
|
|
32
|
+
propertiesToUse.forEach(function (prop) {
|
|
33
|
+
if (systemPageData[prop] !== undefined && systemPageData[prop] !== null) {
|
|
34
|
+
var value = systemPageData[prop];
|
|
35
|
+
// 处理不同类型的值
|
|
36
|
+
if (typeof value === 'string') {
|
|
37
|
+
pageConfig[prop] = "'".concat(value, "'");
|
|
38
|
+
} else if (typeof value === 'boolean' || typeof value === 'number') {
|
|
39
|
+
pageConfig[prop] = value;
|
|
40
|
+
} else if (_typeof(value) === 'object') {
|
|
41
|
+
pageConfig[prop] = JSON.stringify(value);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// 如果没有找到任何配置,设置默认的 navigationBarTitleText
|
|
48
|
+
if (Object.keys(pageConfig).length === 0) {
|
|
49
|
+
pageConfig.navigationBarTitleText = "'\u9875\u9762'";
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// 生成配置字符串
|
|
53
|
+
var configLines = Object.entries(pageConfig).map(function (_ref) {
|
|
54
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
55
|
+
key = _ref2[0],
|
|
56
|
+
value = _ref2[1];
|
|
57
|
+
return " ".concat(key, ": ").concat(value);
|
|
58
|
+
});
|
|
59
|
+
return "export default definePageConfig({\n".concat(configLines.join(',\n'), "\n})");
|
|
60
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base64 图片处理工具
|
|
3
|
+
* 负责将 base64 图片保存为本地文件
|
|
4
|
+
*/
|
|
5
|
+
import type { ImageFileInfo } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* 处理 TabBar 图标,如果是 base64 则准备保存为文件
|
|
8
|
+
* @param iconPath 图标路径(可能是 base64 或普通路径)
|
|
9
|
+
* @param tabBarIndex TabBar 项的索引
|
|
10
|
+
* @param type 图标类型('normal' 或 'selected')
|
|
11
|
+
* @param imageFiles 用于收集需要保存的图片文件的数组(可选)
|
|
12
|
+
* @returns 处理后的图标路径(用于 app.config.ts),如果不是 base64 则返回原路径
|
|
13
|
+
*/
|
|
14
|
+
export declare function processTabBarIcon(iconPath: string | undefined, tabBarIndex: number, type: 'normal' | 'selected', imageFiles?: ImageFileInfo[]): string | undefined;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base64 图片处理工具
|
|
3
|
+
* 负责将 base64 图片保存为本地文件
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* MIME 类型到文件扩展名的映射
|
|
8
|
+
*/
|
|
9
|
+
var MIME_TO_EXT = {
|
|
10
|
+
png: 'png',
|
|
11
|
+
jpg: 'jpg',
|
|
12
|
+
jpeg: 'jpg',
|
|
13
|
+
gif: 'gif',
|
|
14
|
+
webp: 'webp',
|
|
15
|
+
svg: 'svg'
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Base64 图片解析结果
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* 从 base64 字符串中提取图片格式和 base64 数据
|
|
24
|
+
* @param base64Str base64 字符串
|
|
25
|
+
* @returns 解析结果或 null
|
|
26
|
+
*/
|
|
27
|
+
function parseBase64Image(base64Str) {
|
|
28
|
+
if (typeof base64Str !== 'string' || !base64Str.startsWith('data:image/')) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
var match = base64Str.match(/^data:image\/([^;]+);base64,(.+)$/);
|
|
32
|
+
if (!match) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
mimeType: match[1],
|
|
37
|
+
base64Data: match[2]
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* 根据 MIME 类型获取文件扩展名
|
|
43
|
+
* @param mimeType MIME 类型
|
|
44
|
+
* @returns 文件扩展名,默认为 'png'
|
|
45
|
+
*/
|
|
46
|
+
function getFileExtension(mimeType) {
|
|
47
|
+
return MIME_TO_EXT[mimeType.toLowerCase()] || 'png';
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* 生成唯一的文件名
|
|
52
|
+
* @param index TabBar 项的索引
|
|
53
|
+
* @param type 图标类型
|
|
54
|
+
* @param extension 文件扩展名
|
|
55
|
+
* @returns 文件名
|
|
56
|
+
*/
|
|
57
|
+
function generateFileName(index, type, extension) {
|
|
58
|
+
return "tabbar_".concat(index, "_").concat(type, ".").concat(extension);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* 处理 TabBar 图标,如果是 base64 则准备保存为文件
|
|
63
|
+
* @param iconPath 图标路径(可能是 base64 或普通路径)
|
|
64
|
+
* @param tabBarIndex TabBar 项的索引
|
|
65
|
+
* @param type 图标类型('normal' 或 'selected')
|
|
66
|
+
* @param imageFiles 用于收集需要保存的图片文件的数组(可选)
|
|
67
|
+
* @returns 处理后的图标路径(用于 app.config.ts),如果不是 base64 则返回原路径
|
|
68
|
+
*/
|
|
69
|
+
export function processTabBarIcon(iconPath, tabBarIndex, type, imageFiles) {
|
|
70
|
+
if (!iconPath) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// 解析 base64 图片
|
|
75
|
+
var parsed = parseBase64Image(iconPath);
|
|
76
|
+
if (!parsed) {
|
|
77
|
+
// 不是 base64 格式,直接返回原路径
|
|
78
|
+
return iconPath;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// 生成文件名和路径
|
|
82
|
+
var extension = getFileExtension(parsed.mimeType);
|
|
83
|
+
var fileName = generateFileName(tabBarIndex, type, extension);
|
|
84
|
+
var fileSystemPath = "src/assets/tabbar/".concat(fileName);
|
|
85
|
+
var configPath = "assets/tabbar/".concat(fileName);
|
|
86
|
+
|
|
87
|
+
// 如果需要收集图片文件
|
|
88
|
+
if (imageFiles) {
|
|
89
|
+
try {
|
|
90
|
+
// 将 base64 数据转换为 Buffer
|
|
91
|
+
var imageBuffer = Buffer.from(parsed.base64Data, 'base64');
|
|
92
|
+
imageFiles.push({
|
|
93
|
+
filePath: fileSystemPath,
|
|
94
|
+
fileContent: imageBuffer
|
|
95
|
+
});
|
|
96
|
+
} catch (error) {
|
|
97
|
+
console.error("\u5904\u7406 TabBar \u56FE\u6807\u5931\u8D25: ".concat(error));
|
|
98
|
+
// 转换失败时返回原路径
|
|
99
|
+
return iconPath;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// 返回配置路径(用于 app.config.ts)
|
|
104
|
+
return configPath;
|
|
105
|
+
}
|