mix-public 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -15,10 +15,8 @@
15
15
  // pnpm
16
16
  pnpm i mix-public
17
17
  ```
18
- ### 调用方式
19
-
18
+ ### 初始化方式
20
19
  ```javascript
21
-
22
20
  // 布局使用(入口文件)
23
21
  import mixRender from "mix-public"
24
22
 
@@ -32,7 +30,7 @@
32
30
  import 'mix-public/mixRender.css'; // 引入web端app基础样式
33
31
  mixPublicLib // 为原生基础调用方法,可在页面使用
34
32
 
35
- // 方法使用
33
+ // 单独方法使用
36
34
  import mixRender from "mix-public"
37
35
  const PublicLib = mixRender({
38
36
  mixJustMethod: true,
@@ -40,6 +38,34 @@
40
38
  });
41
39
  ```
42
40
 
41
+ ### 生命周期
42
+ ```javascript
43
+ // 页面加载时
44
+ OnloadPage((op)=>{
45
+ // op为页面参数,包含上一个页面参数
46
+ })
47
+
48
+ //页面退回
49
+ //immediate:是否立即执行
50
+ OnStartLoad(()=>{
51
+ // 添加当前方法,在页面退回时执行
52
+ },{immediate:false})
53
+ ```
54
+
55
+ ### 方法使用方式
56
+ ```javascript
57
+
58
+ // 调用类型
59
+ //1.直接调用类
60
+ mixPublicLib.putCookieInfo('key','value')
61
+ //2.同步返回类
62
+ const result = mixPublicLib. getCookieInfo('key')
63
+ //1.异步返回类
64
+ mixPublicLib.UploadPhoto({PhotoCount:1, isCut:true, Quality:1}).then(file=>{
65
+ console.log(file)
66
+ })
67
+ ```
68
+
43
69
 
44
70
  ### 更新记录
45
71
  - v1.0.0 项目初始化
@@ -52,4 +78,6 @@
52
78
  - v1.0.7 整体依赖调用方式调整/优化目录结构
53
79
  - v1.0.8 依赖引用调整
54
80
  - v1.0.9 依赖引用调整
55
- - v1.1.0 获取页面路径参数修复/扫码方法修复
81
+ - v1.1.0 方法包调用方式整体调整
82
+ - v1.1.1 添加OnloadPage生命周期/调整 goto 方法参数
83
+ - v1.1.2 修复方法环境变量/添加 a 标签捕获自定义站内跳转
@@ -0,0 +1,60 @@
1
+ export default (op) => {
2
+ var indexedDB =
3
+ window.indexedDB ||
4
+ window.mozIndexedDB ||
5
+ window.webkitIndexedDB ||
6
+ window.msIndexedDB
7
+ var dataBase = null
8
+ dataBase = indexedDB.open("MIXAPPCachePicture", 1)
9
+ dataBase.onupgradeneeded = function (e) {
10
+ var active = dataBase.result
11
+ var objectDb = active.createObjectStore("seasidecity", {
12
+ keyPath: "id",
13
+ })
14
+ objectDb.createIndex("index_base64", "base64", {
15
+ unique: false,
16
+ })
17
+ }
18
+ dataBase.onsuccess = function (e) {
19
+ var transaction = dataBase.result.transaction(["seasidecity"])
20
+ var objectStore = transaction.objectStore("seasidecity")
21
+ var request = objectStore.get(md5(op.Picurl))
22
+ request.onerror = function (event) {}
23
+ request.onsuccess = function (event) {
24
+ if (request.result) {
25
+ setTimeout(function () {
26
+ if (document.getElementById(op.Domid))
27
+ document.getElementById(op.Domid).src = request.result.base64
28
+ }, 300)
29
+ } else {
30
+ setTimeout(function () {
31
+ if (document.getElementById(op.Domid))
32
+ document.getElementById(op.Domid).src = op.Picurl
33
+ }, 300)
34
+ var img = document.createElement("img")
35
+ img.setAttribute("crossOrigin", "anonymous")
36
+ img.src = op.Picurl
37
+ img.onload = function () {
38
+ var canvas = document.createElement("canvas")
39
+ canvas.width = img.width
40
+ canvas.height = img.height
41
+ var ctx = canvas.getContext("2d")
42
+ ctx.drawImage(img, 0, 0, img.width, img.height)
43
+ var dataURL = canvas.toDataURL("image/png")
44
+
45
+ var active = dataBase.result
46
+ var data = active.transaction(["seasidecity"], "readwrite")
47
+ var objectDb = data.objectStore("seasidecity")
48
+ var request = objectDb.put({
49
+ id: md5(op.Picurl),
50
+ base64: dataURL,
51
+ })
52
+ request.onerror = function (e) {}
53
+
54
+ data.oncomplete = function (e) {}
55
+ }
56
+ }
57
+ }
58
+ }
59
+ dataBase.onerror = function (e) {}
60
+ }
@@ -0,0 +1,14 @@
1
+ export default (str)=>{
2
+ return str ? str.startsWith("#") ? str : "#" + str : ""
3
+ }
4
+
5
+ export const togglePageGrayscale = (enable = false) => {
6
+ const body = document.querySelector('body');
7
+ if (body) {
8
+ if (enable) {
9
+ body.classList.add('grayscale-mode');
10
+ } else {
11
+ body.classList.remove('grayscale-mode');
12
+ }
13
+ }
14
+ };
@@ -164,7 +164,9 @@ export async function formatImage(imgPath, formatConfig){
164
164
  })
165
165
  }else{
166
166
  compressImage(imgPath, formatConfig.Quality).then(blob=>{
167
- resolve(new File([blob], "mix_app_image.png", { type: blob.type }))
167
+ resolve(new File([blob], "mix_app_image.png", { type: blob.type }))
168
+ }).catch(err=>{
169
+ reject(err)
168
170
  })
169
171
  }
170
172
  })
@@ -0,0 +1,12 @@
1
+ /* 获取url上的query参数以对象的方式返回 */
2
+ function getUrlQuery(url) {
3
+ const urlSearch = url.replace(/^[^?=]*\?/g, "")
4
+ const obj = {}
5
+ const searchURL = new URLSearchParams(urlSearch)
6
+ searchURL.forEach((value, key) => {
7
+ obj[key] = value
8
+ })
9
+ return obj
10
+ }
11
+
12
+ export { getUrlQuery }
@@ -1,32 +1,57 @@
1
- export const returnMethod = (op) => {
2
- var isWeb = op.isWeb || false;
3
- var isAndroid = op.isAndroid || false;
4
- var isIOS = op.isIOS || false;
1
+ export function mixJsonParse(str) {
2
+ try {
3
+ return JSON.parse(str)
4
+ } catch (e) {
5
+ return str
6
+ }
7
+ }
8
+ export function mixJsonStringify(val) {
9
+ try {
10
+ return JSON.stringify(val)
11
+ } catch (e) {
12
+ return str
13
+ }
14
+ }
15
+ export function isPromise(obj) {
16
+ return obj && Object.prototype.toString.call(obj) === '[object Promise]';
17
+ }
18
+ export const asyncReturnMethod = (op) => {
19
+ var environment = {
20
+ isWeb: op?.environment?.isWeb || false,
21
+ isHarmony: op?.environment?.isHarmony || false,
22
+ isAndroid: op?.environment?.isAndroid || false,
23
+ isIOS: op?.environment?.isIOS || false
24
+ }
5
25
  var webMethod = op.webMethod || false;
26
+ var androidMethod = op.androidMethod || false;
27
+ var iosMethod = op.iosMethod || false;
6
28
  var callBackMethod = op.callBackMethod || false;
7
29
  var params = op.params || {};
8
30
  var methodName = op.methodName || "";
9
31
  var callBackMethodName = "MIX_APP_" + methodName
10
32
  params.MethodName = callBackMethodName
11
33
  callMethod({
12
- isWeb,
13
- isAndroid,
14
- isIOS,
34
+ environment,
15
35
  methodName,
16
- webMethod: ()=>{webMethod().then(data=>{window[callBackMethodName](data)})},
36
+ androidMethod: ()=>{androidMethod().then(data=>{window[callBackMethodName](data)}).catch(err=>{window[callBackMethodName](err)})},
37
+ iosMethod: ()=>{iosMethod().then(data=>{window[callBackMethodName](data)}).catch(err=>{window[callBackMethodName](err)})},
38
+ webMethod: ()=>{webMethod().then(data=>{window[callBackMethodName](data)}).catch(err=>{window[callBackMethodName](err)})},
17
39
  params
18
40
  })
19
41
  return new Promise((resolve, reject) => {
20
42
  window[callBackMethodName] = (data)=>{
21
- callBackMethod && data ? callBackMethod(data,resolve) : resolve()
43
+ callBackMethod && data ? callBackMethod(data).then(formatData=>{resolve(formatData)}).catch(err=>{reject(err)}) : resolve(data)
22
44
  }
23
45
  });
24
46
  };
25
47
  export const callMethod = (op) => {
26
- var isWeb = op.isWeb;
27
- var isAndroid = op.isAndroid;
28
- var isIOS = op.isIOS;
29
- var webMethod = op.webMethod;
48
+ var isWeb = op?.environment?.isWeb || false;
49
+ var isHarmony = op?.environment?.isHarmony || false;
50
+ var isAndroid = op?.environment?.isAndroid || false;
51
+ var isIOS = op?.environment?.isIOS || false;
52
+ var webMethod = op.webMethod || false;
53
+ var androidMethod = op.androidMethod || false;
54
+ var iosMethod = op.iosMethod || false;
30
55
  var params = op.params || {};
31
56
  var methodName = op.methodName;
32
57
  for (var key in params) {
@@ -36,12 +61,80 @@ export const callMethod = (op) => {
36
61
  if (isWeb) {
37
62
  webMethod && webMethod();
38
63
  } else {
39
- if (isAndroid) {
40
- Func[methodName](JSON.stringify(row));
64
+ if (isAndroid || isHarmony) {
65
+ androidMethod ? androidMethod() : Func[methodName](mixJsonStringify(params));
41
66
  } else if (isIOS) {
42
- window.webkit.messageHandlers[methodName].postMessage(
43
- JSON.stringify(row)
67
+ iosMethod ? iosMethod() : window.webkit.messageHandlers[methodName].postMessage(
68
+ mixJsonStringify(params)
44
69
  );
45
70
  }
46
71
  }
47
72
  };
73
+ export const syncReturnMethod = (op) => {
74
+ var isWeb = op?.environment?.isWeb || false;
75
+ var isHarmony = op?.environment?.isHarmony || false;
76
+ var isAndroid = op?.environment?.isAndroid || false;
77
+ var isIOS = op?.environment?.isIOS || false;
78
+ var webMethod = op.webMethod || false;
79
+ var asyncReturn = op.asyncReturn || false;
80
+ var androidMethod = op.androidMethod || false;
81
+ var iosMethod = op.iosMethod || false;
82
+ var params = op.params || {};
83
+ var methodName = op.methodName;
84
+ var singleField = op.singleField || false;
85
+ var singleParam = ""
86
+ for (var key in params) {
87
+ if (!Object.hasOwn(params, key)) continue;
88
+ params[key] = params[key].toString();
89
+ if(singleField){
90
+ singleParam = params[key];
91
+ }
92
+ }
93
+ var result = "";
94
+ if (isWeb) {
95
+ webMethod && (result = webMethod());
96
+ } else {
97
+ if (isAndroid || isHarmony) {
98
+ if(asyncReturn){
99
+ result = new Promise((resolve, reject) => {
100
+ try {
101
+ params.MethodName = "MIX_APP_" + methodName
102
+ window["MIX_APP_" + methodName] = (data)=>{
103
+ resolve(data)
104
+ }
105
+ androidMethod ? resolve(androidMethod()) : Func[methodName](mixJsonStringify(params))
106
+ } catch (error) {
107
+ reject(error)
108
+ }
109
+ })
110
+ }else{
111
+ result = androidMethod ? androidMethod() : Func[methodName](mixJsonStringify(params));
112
+ }
113
+ } else if (isIOS) {
114
+ if(asyncReturn){
115
+ result = new Promise((resolve, reject) => {
116
+ try {
117
+ params.MethodName = "MIX_APP_" + methodName
118
+ window["MIX_APP_" + methodName] = (data)=>{
119
+ resolve(data)
120
+ }
121
+ if(singleField){
122
+ result = iosMethod ? resolve(iosMethod()) : decodeURIComponent(window.prompt(methodName, singleParam))
123
+ }else{
124
+ result = iosMethod ? resolve(iosMethod()) : decodeURIComponent(window.prompt(methodName, mixJsonStringify(params)))
125
+ }
126
+ } catch (error) {
127
+ reject(error)
128
+ }
129
+ })
130
+ }else{
131
+ if(singleField){
132
+ result = iosMethod ? iosMethod() : decodeURIComponent(window.prompt(methodName, singleParam))
133
+ }else{
134
+ result = iosMethod ? iosMethod() : decodeURIComponent(window.prompt(methodName, mixJsonStringify(params)))
135
+ }
136
+ }
137
+ }
138
+ }
139
+ return mixJsonParse(result);
140
+ };