@cloudbase/lowcode-builder 0.1.25 → 1.0.1

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 (86) hide show
  1. package/lib/builder/core/index.d.ts +1 -3
  2. package/lib/builder/core/index.js +42 -52
  3. package/lib/builder/h5/compile.d.ts +1 -1
  4. package/lib/builder/h5/compile.js +59 -20
  5. package/lib/builder/h5/copy.js +2 -4
  6. package/lib/builder/h5/generate.js +3 -3
  7. package/lib/builder/h5/index.d.ts +5 -4
  8. package/lib/builder/h5/index.js +25 -14
  9. package/lib/builder/h5/material.js +6 -11
  10. package/lib/builder/h5/npm.js +6 -5
  11. package/lib/builder/mp/index.js +38 -49
  12. package/lib/builder/mp/materials.js +25 -18
  13. package/lib/builder/mp/mixMode.js +7 -10
  14. package/lib/builder/mp/mp_config.js +2 -3
  15. package/lib/builder/mp/wxml.js +1 -1
  16. package/lib/builder/service/webpack.d.ts +7 -1
  17. package/lib/builder/service/webpack.js +97 -24
  18. package/lib/builder/types/common.d.ts +1 -1
  19. package/lib/builder/types/common.js +2 -1
  20. package/lib/builder/util/common.js +1 -4
  21. package/lib/builder/util/generateFiles.js +12 -10
  22. package/lib/builder/util/mp.js +2 -8
  23. package/lib/builder.web.js +71 -0
  24. package/lib/index.d.ts +4 -0
  25. package/lib/index.js +6 -0
  26. package/lib/types.d.ts +1 -0
  27. package/lib/types.js +11 -0
  28. package/package.json +3 -8
  29. package/template/html/index.html.ejs +59 -29
  30. package/template/mp/app.js +2 -1
  31. package/template/mp/common/weapp-page.js +23 -1
  32. package/template/mp/common/weapp-sdk.js +35 -0
  33. package/template/mp/package.json +1 -1
  34. package/template/mp/page/index.js +2 -1
  35. package/template/package.json +5 -2
  36. package/template/webpack/getCSSModuleLocalIdent.js +28 -0
  37. package/template/webpack/web.prod.js +112 -103
  38. package/template/src/app/common.js +0 -13
  39. package/template/src/app/global-api.js +0 -99
  40. package/template/src/app/handlers.js +0 -13
  41. package/template/src/app/material-actions.js +0 -16
  42. package/template/src/app/mountAppApis.js +0 -25
  43. package/template/src/app/mountMpApis.js +0 -4
  44. package/template/src/datasources/config.js.tpl +0 -23
  45. package/template/src/datasources/dataset-profiles.js.tpl +0 -5
  46. package/template/src/datasources/datasource-profiles.js.tpl +0 -4
  47. package/template/src/datasources/index.js +0 -31
  48. package/template/src/handlers/FieldMiddleware/renderer.jsx +0 -331
  49. package/template/src/handlers/HotAreas.js +0 -36
  50. package/template/src/handlers/PositionHandler.jsx +0 -8
  51. package/template/src/handlers/actionHandler/utils.js +0 -149
  52. package/template/src/handlers/componentEventActionEmitter.js +0 -29
  53. package/template/src/handlers/componentNodeMap.js +0 -24
  54. package/template/src/handlers/controller.js +0 -5
  55. package/template/src/handlers/emitComponentEvent.js +0 -8
  56. package/template/src/handlers/eventListener/componentEventListener.js +0 -15
  57. package/template/src/handlers/eventListener/hotAreaEventListener.js +0 -32
  58. package/template/src/handlers/eventListener/index.js +0 -29
  59. package/template/src/handlers/eventListener/pageEventListener.js +0 -11
  60. package/template/src/handlers/eventListener/types.js +0 -32
  61. package/template/src/handlers/hooks/index.js +0 -14
  62. package/template/src/handlers/initWebEnv.js +0 -4
  63. package/template/src/handlers/injectStyle.js +0 -14
  64. package/template/src/handlers/instanceMap.js +0 -39
  65. package/template/src/handlers/lifecycle.js +0 -232
  66. package/template/src/handlers/render.jsx +0 -131
  67. package/template/src/handlers/utils/common.js +0 -151
  68. package/template/src/handlers/utils/eventProxy.js +0 -64
  69. package/template/src/handlers/utils/events.js +0 -8
  70. package/template/src/handlers/utils/index.js +0 -4
  71. package/template/src/handlers/utils/widgets.js +0 -320
  72. package/template/src/index.jsx +0 -142
  73. package/template/src/index.less +0 -119
  74. package/template/src/libraries/default-lib/wx_yypt_report_v2.js +0 -441
  75. package/template/src/pages/app.tpl +0 -124
  76. package/template/src/router/index.tpl +0 -28
  77. package/template/src/store/computed.js +0 -11
  78. package/template/src/store/index.js +0 -40
  79. package/template/src/utils/ScanCodeComponent.js +0 -396
  80. package/template/src/utils/date.js +0 -324
  81. package/template/src/utils/history.js +0 -72
  82. package/template/src/utils/index.js +0 -67
  83. package/template/src/utils/kbone.js +0 -18
  84. package/template/src/utils/monitor-jssdk.min.js +0 -763
  85. package/template/src/utils/request.js +0 -5
  86. package/template/src/utils/scan-code-action.js +0 -27
@@ -1,396 +0,0 @@
1
- import React, {
2
- useRef,
3
- useEffect,
4
- useImperativeHandle,
5
- useState,
6
- useCallback,
7
- useMemo,
8
- } from 'react';
9
- import ReactDOM from 'react-dom';
10
-
11
- import {
12
- BrowserMultiFormatReader,
13
- NotFoundException,
14
- BarcodeFormat,
15
- DecodeHintType,
16
- } from '@zxing/library';
17
-
18
- export const FORMAT = {
19
- 0: { scanType: 'AZTEC', wxtype: null },
20
- 1: { scanType: 'CODABAR', wxtype: 'barCode' },
21
- 2: { scanType: 'CODE_39', wxtype: 'barCode' },
22
- 3: { scanType: 'CODE_93', wxtype: 'barCode' },
23
- 4: { scanType: 'CODE_128', wxtype: 'barCode' },
24
- 5: { scanType: 'DATA_MATRIX', wxtype: 'qrCode' },
25
- 6: { scanType: 'EAN_8', wxtype: 'barCode' },
26
- 7: { scanType: 'EAN_13', wxtype: 'barCode' },
27
- 8: { scanType: 'ITF', wxtype: 'barCode' },
28
- 9: { scanType: 'MAXICODE', wxtype: null },
29
- 10: { scanType: 'PDF_417', wxtype: 'qrCode' },
30
- 11: { scanType: 'QR_CODE', wxtype: 'qrCode' },
31
- 12: { scanType: 'RSS_14', wxtype: 'barCode' },
32
- 13: { scanType: 'RSS_EXPANDED', wxtype: 'barCode' },
33
- 14: { scanType: 'UPC_A', wxtype: 'barCode' },
34
- 15: { scanType: 'UPC_E', wxtype: 'barCode' },
35
- 16: { scanType: 'UPC_EAN_EXTENSION', wxtype: 'barCode' },
36
- };
37
-
38
- const hints = new Map();
39
- const formats = [
40
- BarcodeFormat.QR_CODE,
41
- BarcodeFormat.UPC_A,
42
- BarcodeFormat.UPC_E,
43
- BarcodeFormat.EAN_8,
44
- BarcodeFormat.EAN_13,
45
- BarcodeFormat.CODE_39,
46
- BarcodeFormat.CODE_93,
47
- BarcodeFormat.CODE_128,
48
- BarcodeFormat.DATA_MATRIX,
49
- BarcodeFormat.PDF_417,
50
- ];
51
- hints.set(DecodeHintType.POSSIBLE_FORMATS, formats);
52
-
53
- const Codescanner = React.forwardRef(
54
- ({ events = {}, closeScanCode, scanType, onInit }, fref) => {
55
- const ref = useRef();
56
- const { fail = () => {}, success = () => {}, complete = () => {} } = events;
57
-
58
- const inited = useRef(false);
59
- const codeReader = new BrowserMultiFormatReader(hints);
60
- const start = async () => {
61
- setTimeout(() => {
62
- // try harder after 5 sceonds
63
- hints.set(DecodeHintType.TRY_HARDER, true);
64
- codeReader.timeBetweenDecodingAttempts = 1500;
65
- codeReader.hints = hints;
66
- }, 5000);
67
- const devices = await codeReader.listVideoInputDevices();
68
-
69
- if (devices.length) {
70
- try {
71
- await codeReader.decodeFromConstraints(
72
- { video: { facingMode: 'environment' } },
73
- ref.current,
74
- (result, err) => {
75
- if (!inited.current) {
76
- inited.current = true;
77
- onInit();
78
- }
79
- if (result) {
80
- if (scanType.includes(FORMAT[result.format].wxtype)) {
81
- success(wechatLikeResult(result));
82
- complete();
83
- closeScanCode();
84
- }
85
- }
86
-
87
- if (err && !err instanceof NotFoundException) {
88
- fail(err);
89
- complete();
90
- }
91
- }
92
- );
93
- } catch (err) {
94
- fail(err);
95
- complete();
96
- }
97
- } else {
98
- fail(new Error('No camera detect'));
99
- complete();
100
- }
101
- };
102
-
103
- const stop = () => {
104
- codeReader.reset();
105
- };
106
-
107
- useImperativeHandle(fref, () => ({
108
- start,
109
- stop,
110
- }));
111
-
112
- useEffect(() => {
113
- start().catch(fail);
114
- return () => {
115
- stop();
116
- };
117
- }, []);
118
- return (
119
- <>
120
- <video autoPlay ref={ref} id="weapp-scancode-video"></video>
121
- </>
122
- );
123
- }
124
- );
125
-
126
- function fileToImage(file) {
127
- return new Promise((resolve, reject) => {
128
- const reader = new FileReader();
129
- reader.readAsDataURL(file);
130
- reader.onload = async (ev) => {
131
- const img = new Image();
132
- img.src = ev.target.result;
133
- resolve(img);
134
- };
135
- reader.onerror = reject;
136
- });
137
- }
138
-
139
- const SCAN_CODE_STATE = 'scan-code-modal';
140
- export default function ScanCode({ root, options }) {
141
- const {
142
- onlyFromCamera,
143
- scanType,
144
- success: successCallback,
145
- fail,
146
- complete,
147
- enableDefaultBehavior,
148
- } = options;
149
- useEffect(() => {
150
- // 覆盖一次返回按键为关闭
151
- if (history.state?.SCANCODE !== SCAN_CODE_STATE) {
152
- history.pushState({ SCANCODE: SCAN_CODE_STATE }, null);
153
- }
154
- const onPopState = () => {
155
- closeScanCode();
156
- };
157
- window.addEventListener('popstate', onPopState);
158
- return () => {
159
- if (history.state?.SCANCODE === SCAN_CODE_STATE) {
160
- history.back();
161
- }
162
- window.removeEventListener('popstate', onPopState);
163
- };
164
- }, [closeScanCode]);
165
- const ref = useRef();
166
- const closeScanCode = () => {
167
- ref.current?.stop?.();
168
- ReactDOM.render(null, root);
169
- };
170
- const success = useCallback((res) => {
171
- const { result } = res;
172
- if (enableDefaultBehavior) {
173
- if (/^https?:\/\//.test(result)) {
174
- window.open(result);
175
- } else {
176
- const { app } = getApp();
177
- app.showModal({
178
- title: '扫描到以下内容',
179
- content: result,
180
- showCancel: false,
181
- confirmColor: '#006eff',
182
- });
183
- }
184
- }
185
- successCallback(res);
186
- });
187
- const [isCameraInit, setIscameraInit] = useState(false);
188
- const onInitCamera = () => {
189
- setIscameraInit(true);
190
- };
191
- const [modalErrMessage, setModalErrMessage] = useState('');
192
- const handleModalClick = () => {
193
- setModalErrMessage('');
194
- };
195
- const fileChanged = async (ev) => {
196
- const { files } = ev.target;
197
- if (files.length <= 0) return;
198
- const file = files[0];
199
- const img = await fileToImage(file);
200
- hints.set(DecodeHintType.TRY_HARDER, true);
201
- const codeReader = new BrowserMultiFormatReader(hints);
202
- try {
203
- const result = await codeReader.decodeFromImage(img);
204
- success(wechatLikeResult(result));
205
- closeScanCode();
206
- } catch (err) {
207
- onScanFail(err);
208
- }
209
- };
210
- const scanTypeText = useMemo(
211
- () =>
212
- scanType
213
- .map((type) => {
214
- switch (type) {
215
- case 'qrCode':
216
- return '二维码';
217
- case 'barCode':
218
- return '条码';
219
- default:
220
- return type;
221
- }
222
- })
223
- .join(' / '),
224
- [scanType]
225
- );
226
- const onScanFail = (err) => {
227
- if (err instanceof NotFoundException) {
228
- setModalErrMessage(`未发现${scanTypeText}`);
229
- setIscameraInit(false);
230
- } else if (err.message === 'Permission denied') {
231
- setModalErrMessage('请打开相机权限以获取扫码功能');
232
- } else if (err.message === 'No camera detect') {
233
- setModalErrMessage('未能检测到相机设备');
234
- } else {
235
- setModalErrMessage(err.message);
236
- }
237
- setIscameraInit(false);
238
- fail(err);
239
- };
240
- if (modalErrMessage) {
241
- return (
242
- <div className="weapp-scancode-modal" onClick={handleModalClick}>
243
- <div className="weapp-scancode-modal-main">
244
- <div className="weapp-scancode-scan-wrapper">
245
- <p className="weapp-scancode-scan-not-found">{modalErrMessage}</p>
246
- <p>点击重新扫码</p>
247
- </div>
248
- <CloseButton onClick={closeScanCode} />
249
- </div>
250
- </div>
251
- );
252
- }
253
- return (
254
- <div className="weapp-scancode-modal">
255
- <div className="weapp-scancode-modal-main">
256
- <Codescanner
257
- events={{ fail: onScanFail, success, complete }}
258
- ref={ref}
259
- closeScanCode={closeScanCode}
260
- scanType={scanType}
261
- onInit={onInitCamera}
262
- />
263
-
264
- {isCameraInit && (
265
- <>
266
- <CloseButton onClick={closeScanCode} />
267
- <div className="weapp-scancode-scan-wrapper">
268
- <div className="weapp-scancode-scan-square">
269
- <div className="weapp-scancode-scan-bar"></div>
270
- </div>
271
- <p className="weapp-scancode-scan-tip">{scanTypeText}</p>
272
- </div>
273
- </>
274
- )}
275
- {!onlyFromCamera && isCameraInit && (
276
- <div className="weapp-scancode-img-selector">
277
- <input
278
- onChange={fileChanged}
279
- type="file"
280
- id="weapp-scancode-img-picker-input"
281
- accept="image/*"
282
- style={{ display: 'none' }}
283
- />
284
- <label
285
- htmlFor="weapp-scancode-img-picker-input"
286
- className="weapp-scancode-img-picker"
287
- >
288
- <span>
289
- <svg
290
- width="24px"
291
- height="24px"
292
- viewBox="0 0 24 24"
293
- version="1.1"
294
- xmlns="http://www.w3.org/2000/svg"
295
- >
296
- <title>icon/album</title>
297
- <g
298
- id="icon/album"
299
- stroke="none"
300
- strokeWidth="1"
301
- fill="none"
302
- fillRule="evenodd"
303
- >
304
- <rect id="矩形" x="0" y="0" width="24" height="24"></rect>
305
- <path
306
- d="M21,4 C21.5522847,4 22,4.44771525 22,5 L22,19 C22,19.5522847 21.5522847,20 21,20 L3,20 C2.44771525,20 2,19.5522847 2,19 L2,5 C2,4.44771525 2.44771525,4 3,4 L21,4 Z M20.5,5.5 L3.5,5.5 L3.5,13.932 L8.34720227,9.89314397 C8.69729746,9.60139798 9.19512095,9.58601647 9.56028418,9.84165631 L9.65637439,9.91809179 L14.036,13.86 L16.8907001,11.8207928 C17.2650251,11.5533999 17.7734822,11.5758744 18.1227552,11.8752513 L18.1227552,11.8752513 L20.5,13.913 L20.5,5.5 Z"
307
- id="形状结合"
308
- fill="#FFFFFF"
309
- fillRule="nonzero"
310
- ></path>
311
- </g>
312
- </svg>
313
- </span>
314
- </label>
315
- </div>
316
- )}
317
- </div>
318
- </div>
319
- );
320
- }
321
-
322
- function CloseButton({ onClick }) {
323
- return (
324
- <a
325
- className="weapp-scancode-close-button"
326
- aria-label="close modal"
327
- onClick={onClick}
328
- >
329
- <svg
330
- width="12px"
331
- height="12px"
332
- viewBox="0 0 16 16"
333
- fill="none"
334
- xmlns="http://www.w3.org/2000/svg"
335
- >
336
- <path
337
- fillRule="evenodd"
338
- clipRule="evenodd"
339
- d="M12.5348 2.04999L7.9998 6.58499L3.4638 2.04999L2.0498 3.46499L6.5858 8.00099L2.0498 12.536L3.4638 13.95L7.9998 9.41499L12.5348 13.95L13.9498 12.536L9.4138 8.00099L13.9498 3.46499L12.5348 2.04999Z"
340
- fill="currentColor"
341
- />
342
- </svg>
343
- </a>
344
- );
345
- }
346
-
347
- function wechatLikeResult(zxingResult) {
348
- const wechatResult = {
349
- result: zxingResult.text || zxingResult.result,
350
- scanType: FORMAT[zxingResult.format].wxtype,
351
- };
352
- return wechatResult;
353
- }
354
-
355
- // https://github.com/AlloyTeam/AlloyImage/blob/master/src/module/filter/toGray.js
356
- function toGray(imgData) {
357
- const { data } = imgData;
358
-
359
- for (let i = 0, n = data.length; i < n; i += 4) {
360
- const gray = parseInt(
361
- 0.299 * data[i] + 0.578 * data[i + 1] + 0.114 * data[i + 2],
362
- 10
363
- );
364
- // eslint-disable-next-line no-multi-assign
365
- data[i + 2] = data[i + 1] = data[i] = gray;
366
- }
367
-
368
- imgData.data.set(data);
369
-
370
- return imgData;
371
- }
372
-
373
- // https://github.com/AlloyTeam/AlloyImage/blob/master/src/module/filter/sharp.js
374
- function sharp(imgData, arg = []) {
375
- const lamta = arg[0] || 0.6;
376
- const { data } = imgData;
377
- const { width } = imgData;
378
-
379
- for (let i = 0, n = data.length; i < n; i += 4) {
380
- const ii = i / 4;
381
- const row = parseInt(ii / width, 10);
382
- const col = ii % width;
383
- if (row === 0 || col === 0) continue;
384
-
385
- const A = ((row - 1) * width + (col - 1)) * 4;
386
- const B = ((row - 1) * width + col) * 4;
387
- const E = (ii - 1) * 4;
388
-
389
- for (let j = 0; j < 3; j++) {
390
- const delta = data[i + j] - (data[B + j] + data[E + j] + data[A + j]) / 3;
391
- data[i + j] += delta * lamta;
392
- }
393
- }
394
-
395
- return imgData;
396
- }