@ibiz-template/vue3-util 0.7.38-alpha.33 → 0.7.38-alpha.45

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 (64) hide show
  1. package/dist/index.min.css +1 -1
  2. package/dist/index.system.min.js +1 -1
  3. package/es/common/code-list/code-list.mjs +1 -1
  4. package/es/common/control-base/control-base.css +1 -1
  5. package/es/common/control-base/control-base.d.ts.map +1 -1
  6. package/es/common/control-base/control-base.mjs +67 -2
  7. package/es/common/icon/icon.d.ts.map +1 -1
  8. package/es/common/icon/icon.mjs +5 -0
  9. package/es/common/view-shell/view-shell.d.ts.map +1 -1
  10. package/es/common/view-shell/view-shell.mjs +62 -62
  11. package/es/index.mjs +1 -0
  12. package/es/locale/en/index.d.ts +2 -0
  13. package/es/locale/en/index.d.ts.map +1 -1
  14. package/es/locale/en/index.mjs +3 -1
  15. package/es/locale/zh-CN/index.d.ts +2 -0
  16. package/es/locale/zh-CN/index.d.ts.map +1 -1
  17. package/es/locale/zh-CN/index.mjs +3 -1
  18. package/es/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.controller.d.ts +111 -0
  19. package/es/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.controller.d.ts.map +1 -0
  20. package/es/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.controller.mjs +176 -0
  21. package/es/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.css +1 -0
  22. package/es/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.d.ts +27 -0
  23. package/es/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.d.ts.map +1 -0
  24. package/es/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.mjs +54 -0
  25. package/es/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.provider.d.ts +15 -0
  26. package/es/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.provider.d.ts.map +1 -0
  27. package/es/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.provider.mjs +15 -0
  28. package/es/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.state.d.ts +54 -0
  29. package/es/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.state.d.ts.map +1 -0
  30. package/es/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.state.mjs +7 -0
  31. package/es/panel-component/auth-wxmp-qrcode/index.d.ts +24 -0
  32. package/es/panel-component/auth-wxmp-qrcode/index.d.ts.map +1 -0
  33. package/es/panel-component/auth-wxmp-qrcode/index.mjs +19 -0
  34. package/es/panel-component/index.d.ts +1 -0
  35. package/es/panel-component/index.d.ts.map +1 -1
  36. package/es/panel-component/index.mjs +1 -0
  37. package/es/panel-component/multi-data-container/multi-data-container.controller.d.ts +9 -0
  38. package/es/panel-component/multi-data-container/multi-data-container.controller.d.ts.map +1 -1
  39. package/es/panel-component/multi-data-container/multi-data-container.controller.mjs +15 -2
  40. package/es/panel-component/multi-data-container-raw/multi-data-container-raw.controller.d.ts +8 -0
  41. package/es/panel-component/multi-data-container-raw/multi-data-container-raw.controller.d.ts.map +1 -1
  42. package/es/panel-component/multi-data-container-raw/multi-data-container-raw.controller.mjs +14 -2
  43. package/es/panel-component/single-data-container/single-data-container.controller.d.ts +8 -0
  44. package/es/panel-component/single-data-container/single-data-container.controller.d.ts.map +1 -1
  45. package/es/panel-component/single-data-container/single-data-container.controller.mjs +14 -2
  46. package/lib/common/code-list/code-list.cjs +1 -1
  47. package/lib/common/control-base/control-base.cjs +66 -1
  48. package/lib/common/control-base/control-base.css +1 -1
  49. package/lib/common/icon/icon.cjs +5 -0
  50. package/lib/common/view-shell/view-shell.cjs +62 -62
  51. package/lib/index.cjs +25 -23
  52. package/lib/locale/en/index.cjs +3 -1
  53. package/lib/locale/zh-CN/index.cjs +3 -1
  54. package/lib/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.cjs +56 -0
  55. package/lib/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.controller.cjs +178 -0
  56. package/lib/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.css +1 -0
  57. package/lib/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.provider.cjs +17 -0
  58. package/lib/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.state.cjs +9 -0
  59. package/lib/panel-component/auth-wxmp-qrcode/index.cjs +24 -0
  60. package/lib/panel-component/index.cjs +2 -0
  61. package/lib/panel-component/multi-data-container/multi-data-container.controller.cjs +14 -1
  62. package/lib/panel-component/multi-data-container-raw/multi-data-container-raw.controller.cjs +13 -1
  63. package/lib/panel-component/single-data-container/single-data-container.controller.cjs +13 -1
  64. package/package.json +5 -5
@@ -1,4 +1,6 @@
1
- import { defineComponent, reactive, resolveComponent, h, createVNode } from 'vue';
1
+ import { defineComponent, reactive, createVNode, resolveComponent, computed, h } from 'vue';
2
+ import { ScriptFactory } from '@ibiz-template/runtime';
3
+ import { fixJsonString } from '@ibiz-template/core';
2
4
  import { isNil } from 'ramda';
3
5
  import '../../use/index.mjs';
4
6
  import { useNamespace } from '../../use/namespace/namespace.mjs';
@@ -43,6 +45,68 @@ const IBizControlBase = /* @__PURE__ */ defineComponent({
43
45
  }
44
46
  }
45
47
  }
48
+ const handleHtmlEvent = async (e, eventName) => {
49
+ e.stopPropagation();
50
+ const scriptCode = e.target.getAttribute(eventName);
51
+ const data = e.target.getAttribute("data");
52
+ const context = props.controller.context.clone();
53
+ const _context = e.target.getAttribute("context");
54
+ if (_context) {
55
+ Object.assign(context, fixJsonString(_context));
56
+ }
57
+ const params = {
58
+ ...props.controller.params
59
+ };
60
+ const _params = e.target.getAttribute("params");
61
+ if (_params) {
62
+ Object.assign(params, fixJsonString(_params));
63
+ }
64
+ if (scriptCode) {
65
+ await ScriptFactory.asyncExecScriptFn({
66
+ ...props.controller.getEventArgs(),
67
+ context,
68
+ params,
69
+ data: data ? fixJsonString(data) : null
70
+ }, scriptCode);
71
+ }
72
+ };
73
+ const getControlRender = (data) => {
74
+ var _a, _b;
75
+ const {
76
+ controlRenders
77
+ } = model;
78
+ if (!controlRenders || controlRenders.length === 0) {
79
+ return void 0;
80
+ }
81
+ const controlRender = controlRenders[0];
82
+ if (controlRender.renderType === "LAYOUTPANEL_MODEL" && controlRender.layoutPanelModel) {
83
+ const htmlCode = ScriptFactory.execScriptFn({
84
+ ...props.controller.getEventArgs(),
85
+ data
86
+ }, controlRender.layoutPanelModel, {
87
+ isAsync: false
88
+ });
89
+ return createVNode("div", {
90
+ "innerHTML": htmlCode,
91
+ "onClick": (e) => handleHtmlEvent(e, "click"),
92
+ "onDblclick": (e) => handleHtmlEvent(e, "dbclick"),
93
+ "class": [ns.e("control-render"), ns.e((_a = controlRender.renderName) == null ? void 0 : _a.toLowerCase())]
94
+ }, null);
95
+ }
96
+ if (controlRender.renderType === "LAYOUTPANEL" && controlRender.layoutPanel) {
97
+ return createVNode(resolveComponent("iBizControlShell"), {
98
+ "class": [ns.e("control-render"), ns.e((_b = controlRender.renderName) == null ? void 0 : _b.toLowerCase())],
99
+ "data": data,
100
+ "params": props.controller.params,
101
+ "context": props.controller.context,
102
+ "modelData": controlRender.layoutPanel
103
+ }, null);
104
+ }
105
+ };
106
+ const customRender = computed(() => {
107
+ const data = props.controller.data || props.controller.items;
108
+ return getControlRender(data);
109
+ });
46
110
  return {
47
111
  ns,
48
112
  typeClass,
@@ -50,6 +114,7 @@ const IBizControlBase = /* @__PURE__ */ defineComponent({
50
114
  inlineStyle,
51
115
  codeName,
52
116
  controls,
117
+ customRender,
53
118
  onLayoutPanelCreated
54
119
  };
55
120
  },
@@ -101,7 +166,7 @@ const IBizControlBase = /* @__PURE__ */ defineComponent({
101
166
  return createVNode("div", {
102
167
  "class": [this.ns.b(), this.ns.b(this.typeClass), this.ns.m(this.codeName), this.sysCssName],
103
168
  "style": this.inlineStyle
104
- }, [layoutPanel || ((_c = (_b = this.$slots).default) == null ? void 0 : _c.call(_b))]);
169
+ }, [layoutPanel || this.customRender || ((_c = (_b = this.$slots).default) == null ? void 0 : _c.call(_b))]);
105
170
  }
106
171
  });
107
172
 
@@ -1 +1 @@
1
- {"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../../src/common/icon/icon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmB,QAAQ,EAAE,KAAK,EAAY,MAAM,KAAK,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAQ/C,OAAO,aAAa,CAAC;AAErB,eAAO,MAAM,QAAQ;;;;;;;;;;;SAiFN,KAAK,GAAG,IAAI;;;;;;;;;;;;;MAEzB,CAAC"}
1
+ {"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../../src/common/icon/icon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmB,QAAQ,EAAE,KAAK,EAAY,MAAM,KAAK,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAQ/C,OAAO,aAAa,CAAC;AAErB,eAAO,MAAM,QAAQ;;;;;;;;;;;SAoFN,KAAK,GAAG,IAAI;;;;;;;;;;;;;MAEzB,CAAC"}
@@ -36,6 +36,11 @@ const IBizIcon = /* @__PURE__ */ defineComponent({
36
36
  "class": [ns.b(), icon.cssClass]
37
37
  }, null);
38
38
  }
39
+ if (icon.cssClass.indexOf("theme-icon") !== -1) {
40
+ return createVNode("i", {
41
+ "class": [ns.b(), icon.cssClass]
42
+ }, null);
43
+ }
39
44
  return createVNode("ion-icon", {
40
45
  "class": ns.b(),
41
46
  "name": icon.cssClass
@@ -1 +1 @@
1
- {"version":3,"file":"view-shell.d.ts","sourceRoot":"","sources":["../../../src/common/view-shell/view-shell.tsx"],"names":[],"mappings":"AAKA,OAAO,EAEL,aAAa,EAGb,eAAe,EAEhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAGL,QAAQ,EACR,GAAG,EAIJ,MAAM,KAAK,CAAC;AACb,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAK5C,OAAO,mBAAmB,CAAC;AAE3B,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;wBA4MW,eAAe,KAAG,QAAQ,IAAI,CAAC;;;;;;;;;;;;;;;;;YAiElE,CAAC"}
1
+ {"version":3,"file":"view-shell.d.ts","sourceRoot":"","sources":["../../../src/common/view-shell/view-shell.tsx"],"names":[],"mappings":"AAKA,OAAO,EAEL,aAAa,EAGb,eAAe,EAEhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAGL,QAAQ,EACR,GAAG,EAIJ,MAAM,KAAK,CAAC;AACb,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAK5C,OAAO,mBAAmB,CAAC;AAE3B,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;wBA6MW,eAAe,KAAG,QAAQ,IAAI,CAAC;;;;;;;;;;;;;;;;;YAiElE,CAAC"}
@@ -94,77 +94,77 @@ const IBizViewShell = /* @__PURE__ */ defineComponent({
94
94
  }
95
95
  };
96
96
  const init = async () => {
97
- await initViewModel();
98
- if (!viewModel) {
99
- throw new RuntimeError(ibiz.i18n.t("vue3Util.common.noFoundViewModel"));
100
- }
101
- hasAuthority.value = await checkViewAuthority(viewModel);
102
- if (!hasAuthority.value) {
103
- return;
104
- }
105
- if (viewModel.dynaSysMode === 1) {
106
- const appDataEntityId = viewModel.appDataEntityId;
107
- if (!appDataEntityId) {
108
- throw new RuntimeError(ibiz.i18n.t("vue3Util.common.noSupportLoadingDynamic", {
109
- codeName: viewModel.codeName
110
- }));
97
+ try {
98
+ await initViewModel();
99
+ if (!viewModel) {
100
+ throw new RuntimeError(ibiz.i18n.t("vue3Util.common.noFoundViewModel"));
111
101
  }
112
- const loadModelParams = await calcDynaSysParams(appDataEntityId, context.value, {
113
- viewParams: params.value,
114
- appId: viewModel.appId
115
- });
116
- if (params.value.srfdatatype) {
117
- loadModelParams.srfdatatype = params.value.srfdatatype;
102
+ hasAuthority.value = await checkViewAuthority(viewModel);
103
+ if (!hasAuthority.value) {
104
+ return;
118
105
  }
119
- if (params.value.srfwftag) {
120
- loadModelParams.srfwftag = params.value.srfwftag;
121
- } else if (appDataEntityId && viewModel.enableWF) {
122
- if (loadModelParams.srfkey) {
123
- const noSrfSessionId = isNil(context.value.srfsessionid) || isEmpty(context.value.srfsessionid);
124
- const id = createUUID();
125
- if (noSrfSessionId) {
126
- const domain = ibiz.uiDomainManager.create(id);
127
- context.value.srfsessionid = domain.id;
128
- }
129
- const app = ibiz.hub.getApp(viewModel.appId);
130
- const service = await app.deService.getService(context.value, appDataEntityId);
131
- const res = await service.get(context.value, params.value || {});
132
- if (res.ok && res.data) {
133
- const {
134
- srfwftag,
135
- processdefinitionkey,
136
- taskdefinitionkey
137
- } = res.data;
138
- if (srfwftag) {
139
- loadModelParams.srfwftag = srfwftag;
106
+ if (viewModel.dynaSysMode === 1) {
107
+ const appDataEntityId = viewModel.appDataEntityId;
108
+ if (!appDataEntityId) {
109
+ throw new RuntimeError(ibiz.i18n.t("vue3Util.common.noSupportLoadingDynamic", {
110
+ codeName: viewModel.codeName
111
+ }));
112
+ }
113
+ const loadModelParams = await calcDynaSysParams(appDataEntityId, context.value, {
114
+ viewParams: params.value,
115
+ appId: viewModel.appId
116
+ });
117
+ if (params.value.srfdatatype) {
118
+ loadModelParams.srfdatatype = params.value.srfdatatype;
119
+ }
120
+ if (params.value.srfwftag) {
121
+ loadModelParams.srfwftag = params.value.srfwftag;
122
+ } else if (appDataEntityId && viewModel.enableWF) {
123
+ if (loadModelParams.srfkey) {
124
+ const noSrfSessionId = isNil(context.value.srfsessionid) || isEmpty(context.value.srfsessionid);
125
+ const id = createUUID();
126
+ if (noSrfSessionId) {
127
+ const domain = ibiz.uiDomainManager.create(id);
128
+ context.value.srfsessionid = domain.id;
140
129
  }
141
- if (["DEWFDYNAEDITVIEW3", "DEWFDYNAEDITVIEW"].includes(viewModel.viewType)) {
142
- if (isNil(params.value.processDefinitionKey)) {
143
- params.value.processDefinitionKey = processdefinitionkey;
130
+ const app = ibiz.hub.getApp(viewModel.appId);
131
+ const service = await app.deService.getService(context.value, appDataEntityId);
132
+ const res = await service.get(context.value, params.value || {});
133
+ if (res.ok && res.data) {
134
+ const {
135
+ srfwftag,
136
+ processdefinitionkey,
137
+ taskdefinitionkey
138
+ } = res.data;
139
+ if (srfwftag) {
140
+ loadModelParams.srfwftag = srfwftag;
144
141
  }
145
- if (isNil(params.value.taskDefinitionKey)) {
146
- params.value.taskDefinitionKey = taskdefinitionkey;
142
+ if (["DEWFDYNAEDITVIEW3", "DEWFDYNAEDITVIEW"].includes(viewModel.viewType)) {
143
+ if (isNil(params.value.processDefinitionKey)) {
144
+ params.value.processDefinitionKey = processdefinitionkey;
145
+ }
146
+ if (isNil(params.value.taskDefinitionKey)) {
147
+ params.value.taskDefinitionKey = taskdefinitionkey;
148
+ }
147
149
  }
148
150
  }
149
- }
150
- if (noSrfSessionId) {
151
- ibiz.uiDomainManager.destroy(id);
151
+ if (noSrfSessionId) {
152
+ ibiz.uiDomainManager.destroy(id);
153
+ }
152
154
  }
153
155
  }
156
+ const curDynaViewCacheKey = getDynaViewCacheKey(loadModelParams);
157
+ if (curDynaViewCacheKey === dynaViewCacheKey) {
158
+ setTimeout(() => {
159
+ isComplete.value = true;
160
+ });
161
+ return;
162
+ }
163
+ viewModelData.value = await ibiz.hub.loadAppView(viewModel.appId, viewModel.id, loadModelParams);
164
+ dynaViewCacheKey = getDynaViewCacheKey(loadModelParams);
165
+ } else {
166
+ viewModelData.value = viewModel;
154
167
  }
155
- const curDynaViewCacheKey = getDynaViewCacheKey(loadModelParams);
156
- if (curDynaViewCacheKey === dynaViewCacheKey) {
157
- setTimeout(() => {
158
- isComplete.value = true;
159
- });
160
- return;
161
- }
162
- viewModelData.value = await ibiz.hub.loadAppView(viewModel.appId, viewModel.id, loadModelParams);
163
- dynaViewCacheKey = getDynaViewCacheKey(loadModelParams);
164
- } else {
165
- viewModelData.value = viewModel;
166
- }
167
- try {
168
168
  provider.value = await getViewProvider(viewModel);
169
169
  } catch (error) {
170
170
  ibiz.log.error(error);
package/es/index.mjs CHANGED
@@ -59,6 +59,7 @@ export { TeleportPlaceholderProvider } from './panel-component/teleport-placehol
59
59
  export { IBizTeleportPlaceholder } from './panel-component/teleport-placeholder/index.mjs';
60
60
  export { IBizPanelContainerTabs } from './panel-component/panel-container-tabs/index.mjs';
61
61
  export { IBizPanelCtrlViewPageCaption } from './panel-component/panel-ctrl-view-page-caption/index.mjs';
62
+ export { IBizAuthWxmpQrcode } from './panel-component/auth-wxmp-qrcode/index.mjs';
62
63
  export { AppRedirectView } from './view/app-redirect-view/app-redirect-view.mjs';
63
64
  export { IBizView } from './view/common/index.mjs';
64
65
  export { TodoRedirect } from './view/todo-redirect/todo-redirect.mjs';
@@ -25,6 +25,8 @@ export declare const en: {
25
25
  cannotEmpty: string;
26
26
  unadaptedLayout: string;
27
27
  placeholderIdentifier: string;
28
+ refresh: string;
29
+ wxQrcodeCaption: string;
28
30
  };
29
31
  plugin: {
30
32
  failureConfigurationLoad: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/locale/en/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsEd,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/locale/en/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwEd,CAAC"}
@@ -25,7 +25,9 @@ const en = {
25
25
  noProvidedSlot: "No {id} slot provided",
26
26
  cannotEmpty: "{caption} cannot be empty",
27
27
  unadaptedLayout: "Unadapted layout placeholder {layoutPos}",
28
- placeholderIdentifier: "The placeholder identifier for panel member {id} of view {viewCodeName} is:"
28
+ placeholderIdentifier: "The placeholder identifier for panel member {id} of view {viewCodeName} is:",
29
+ refresh: "Refresh",
30
+ wxQrcodeCaption: "Please use wechat to scan the QR code to log in"
29
31
  },
30
32
  plugin: {
31
33
  failureConfigurationLoad: "Configuration load failure",
@@ -25,6 +25,8 @@ export declare const zhCn: {
25
25
  cannotEmpty: string;
26
26
  unadaptedLayout: string;
27
27
  placeholderIdentifier: string;
28
+ refresh: string;
29
+ wxQrcodeCaption: string;
28
30
  };
29
31
  plugin: {
30
32
  failureConfigurationLoad: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/locale/zh-CN/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8DhB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/locale/zh-CN/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgEhB,CAAC"}
@@ -25,7 +25,9 @@ const zhCn = {
25
25
  noProvidedSlot: "\u672A\u63D0\u4F9B{id}\u63D2\u69FD",
26
26
  cannotEmpty: "{caption} \u4E0D\u80FD\u4E3A\u7A7A",
27
27
  unadaptedLayout: "\u672A\u9002\u914D\u7684\u5E03\u5C40\u5360\u4F4D{layoutPos}",
28
- placeholderIdentifier: "\u89C6\u56FE{viewCodeName}\u7684\u9762\u677F\u6210\u5458{id}\u7684\u5360\u4F4D\u6807\u8BC6\u662F\uFF1A"
28
+ placeholderIdentifier: "\u89C6\u56FE{viewCodeName}\u7684\u9762\u677F\u6210\u5458{id}\u7684\u5360\u4F4D\u6807\u8BC6\u662F\uFF1A",
29
+ refresh: "\u5237\u65B0",
30
+ wxQrcodeCaption: "\u8BF7\u4F7F\u7528\u5FAE\u4FE1\u626B\u63CF\u4E8C\u7EF4\u7801\u767B\u5F55"
29
31
  },
30
32
  plugin: {
31
33
  failureConfigurationLoad: "\u914D\u7F6E\u52A0\u8F7D\u5931\u8D25",
@@ -0,0 +1,111 @@
1
+ import { IPanelRawItem } from '@ibiz/model-core';
2
+ import { PanelItemController } from '@ibiz-template/runtime';
3
+ import { AuthWxmpQrcodeState } from './auth-wxmp-qrcode.state';
4
+ /**
5
+ * 微信公众号扫码登录控制器
6
+ *
7
+ * @export
8
+ * @class AuthWxmpQrcodeController
9
+ * @extends {PanelItemController<IPanelRawItem>}
10
+ */
11
+ export declare class AuthWxmpQrcodeController extends PanelItemController<IPanelRawItem> {
12
+ /**
13
+ * 微信公众号扫码登录UI状态对象
14
+ *
15
+ * @type {AuthWxmpQrcodeState}
16
+ * @memberof AuthWxmpQrcodeController
17
+ */
18
+ state: AuthWxmpQrcodeState;
19
+ /**
20
+ * 过期定时器
21
+ *
22
+ * @private
23
+ * @type {(NodeJS.Timeout | undefined)}
24
+ * @memberof AuthWxmpQrcodeController
25
+ */
26
+ private expirationTimer;
27
+ /**
28
+ * 轮询定时器
29
+ *
30
+ * @private
31
+ * @type {(NodeJS.Timeout | undefined)}
32
+ * @memberof AuthWxmpQrcodeController
33
+ */
34
+ private pollingTimer;
35
+ /**
36
+ * 轮询时间(秒)
37
+ * - 默认2秒
38
+ * @private
39
+ * @type {number}
40
+ * @memberof AuthWxmpQrcodeController
41
+ */
42
+ private pollingTime;
43
+ /**
44
+ * 自定义补充参数
45
+ *
46
+ * @type {IData}
47
+ * @memberof AuthWxmpQrcodeController
48
+ */
49
+ rawItemParams: IData;
50
+ /**
51
+ * 创建状态对象
52
+ *
53
+ * @protected
54
+ * @return {*} {AuthWxmpQrcodeState}
55
+ * @memberof AuthWxmpQrcodeController
56
+ */
57
+ protected createState(): AuthWxmpQrcodeState;
58
+ /**
59
+ * 初始化
60
+ *
61
+ * @protected
62
+ * @return {*} {Promise<void>}
63
+ * @memberof AuthWxmpQrcodeController
64
+ */
65
+ protected onInit(): Promise<void>;
66
+ /**
67
+ * 处理自定义补充参数
68
+ *
69
+ * @protected
70
+ * @memberof AuthWxmpQrcodeController
71
+ */
72
+ protected handleRawItemParams(): void;
73
+ /**
74
+ * 初始化参数
75
+ *
76
+ * @protected
77
+ * @memberof AuthWxmpQrcodeController
78
+ */
79
+ protected initParams(): void;
80
+ /**
81
+ * 加载二维码
82
+ *
83
+ * @protected
84
+ * @return {*} {Promise<void>}
85
+ * @memberof AuthWxmpQrcodeController
86
+ */
87
+ loadQrcode(): Promise<void>;
88
+ /**
89
+ * 设置定时器
90
+ *
91
+ * @protected
92
+ * @memberof AuthWxmpQrcodeController
93
+ */
94
+ protected setTimer(): void;
95
+ /**
96
+ * 轮询登录
97
+ *
98
+ * @protected
99
+ * @return {*} {Promise<void>}
100
+ * @memberof AuthWxmpQrcodeController
101
+ */
102
+ protected pollingLogin(): Promise<void>;
103
+ /**
104
+ * 销毁方法
105
+ *
106
+ * @return {*} {Promise<void>}
107
+ * @memberof AuthWxmpQrcodeController
108
+ */
109
+ destroy(): Promise<void>;
110
+ }
111
+ //# sourceMappingURL=auth-wxmp-qrcode.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-wxmp-qrcode.controller.d.ts","sourceRoot":"","sources":["../../../src/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAW,MAAM,0BAA0B,CAAC;AAExE;;;;;;GAMG;AACH,qBAAa,wBAAyB,SAAQ,mBAAmB,CAAC,aAAa,CAAC;IAC9E;;;;;OAKG;IACK,KAAK,EAAE,mBAAmB,CAAC;IAEnC;;;;;;OAMG;IACH,OAAO,CAAC,eAAe,CAA6B;IAEpD;;;;;;OAMG;IACH,OAAO,CAAC,YAAY,CAA6B;IAEjD;;;;;;OAMG;IACH,OAAO,CAAC,WAAW,CAAa;IAEhC;;;;;OAKG;IACH,aAAa,EAAE,KAAK,CAAM;IAE1B;;;;;;OAMG;IACH,SAAS,CAAC,WAAW,IAAI,mBAAmB;IAI5C;;;;;;OAMG;cACa,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAOvC;;;;;OAKG;IACH,SAAS,CAAC,mBAAmB,IAAI,IAAI;IAYrC;;;;;OAKG;IACH,SAAS,CAAC,UAAU,IAAI,IAAI;IAY5B;;;;;;OAMG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBjC;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,IAAI,IAAI;IAe1B;;;;;;OAMG;cACa,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC7C;;;;;OAKG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAW/B"}
@@ -0,0 +1,176 @@
1
+ import { CoreConst } from '@ibiz-template/core';
2
+ import { notNilEmpty, setCookie, clearCookie } from 'qx-util';
3
+ import { PanelItemController } from '@ibiz-template/runtime';
4
+ import { AuthWxmpQrcodeState } from './auth-wxmp-qrcode.state.mjs';
5
+
6
+ "use strict";
7
+ class AuthWxmpQrcodeController extends PanelItemController {
8
+ constructor() {
9
+ super(...arguments);
10
+ /**
11
+ * 轮询时间(秒)
12
+ * - 默认2秒
13
+ * @private
14
+ * @type {number}
15
+ * @memberof AuthWxmpQrcodeController
16
+ */
17
+ this.pollingTime = 2;
18
+ /**
19
+ * 自定义补充参数
20
+ *
21
+ * @type {IData}
22
+ * @memberof AuthWxmpQrcodeController
23
+ */
24
+ this.rawItemParams = {};
25
+ }
26
+ /**
27
+ * 创建状态对象
28
+ *
29
+ * @protected
30
+ * @return {*} {AuthWxmpQrcodeState}
31
+ * @memberof AuthWxmpQrcodeController
32
+ */
33
+ createState() {
34
+ var _a;
35
+ return new AuthWxmpQrcodeState((_a = this.parent) == null ? void 0 : _a.state);
36
+ }
37
+ /**
38
+ * 初始化
39
+ *
40
+ * @protected
41
+ * @return {*} {Promise<void>}
42
+ * @memberof AuthWxmpQrcodeController
43
+ */
44
+ async onInit() {
45
+ await super.onInit();
46
+ this.handleRawItemParams();
47
+ this.initParams();
48
+ await this.loadQrcode();
49
+ }
50
+ /**
51
+ * 处理自定义补充参数
52
+ *
53
+ * @protected
54
+ * @memberof AuthWxmpQrcodeController
55
+ */
56
+ handleRawItemParams() {
57
+ var _a;
58
+ let params = {};
59
+ const rawItemParams = (_a = this.model.rawItem) == null ? void 0 : _a.rawItemParams;
60
+ if (notNilEmpty(rawItemParams)) {
61
+ params = rawItemParams.reduce((param, item) => {
62
+ param[item.key.toLowerCase()] = item.value;
63
+ return param;
64
+ }, {});
65
+ }
66
+ Object.assign(this.rawItemParams, params);
67
+ }
68
+ /**
69
+ * 初始化参数
70
+ *
71
+ * @protected
72
+ * @memberof AuthWxmpQrcodeController
73
+ */
74
+ initParams() {
75
+ const isNumeric = (str) => {
76
+ return !!str && isFinite(Number(str));
77
+ };
78
+ this.pollingTime = isNumeric(this.rawItemParams.pollingtime) ? Number(this.rawItemParams.pollingtime) : 2;
79
+ this.state.tips = this.model.caption || ibiz.i18n.t("vue3Util.panelComponent.wxQrcodeCaption");
80
+ }
81
+ /**
82
+ * 加载二维码
83
+ *
84
+ * @protected
85
+ * @return {*} {Promise<void>}
86
+ * @memberof AuthWxmpQrcodeController
87
+ */
88
+ async loadQrcode() {
89
+ try {
90
+ const res = await ibiz.net.get(
91
+ "/uaa/open/wxmp/createqrcode",
92
+ {},
93
+ { srfdcsystem: ibiz.env.dcSystem }
94
+ );
95
+ if (res.ok && res.data) {
96
+ this.state.qrcode = res.data;
97
+ this.setTimer();
98
+ }
99
+ } catch (error) {
100
+ ibiz.log.error(error.message);
101
+ }
102
+ }
103
+ /**
104
+ * 设置定时器
105
+ *
106
+ * @protected
107
+ * @memberof AuthWxmpQrcodeController
108
+ */
109
+ setTimer() {
110
+ this.expirationTimer = setInterval(() => {
111
+ if (this.state.qrcode && this.state.qrcode.expirein > 0) {
112
+ this.state.qrcode.expirein -= 1;
113
+ } else {
114
+ clearInterval(this.expirationTimer);
115
+ }
116
+ }, 1e3);
117
+ this.pollingTimer = setInterval(async () => {
118
+ await this.pollingLogin();
119
+ }, this.pollingTime * 1e3);
120
+ }
121
+ /**
122
+ * 轮询登录
123
+ *
124
+ * @protected
125
+ * @return {*} {Promise<void>}
126
+ * @memberof AuthWxmpQrcodeController
127
+ */
128
+ async pollingLogin() {
129
+ try {
130
+ if (this.state.qrcode && this.state.qrcode.expirein > 0) {
131
+ const res = await ibiz.net.get(
132
+ "/uaa/open/wxmp/qrcode/".concat(this.state.qrcode.ticket),
133
+ {},
134
+ { srfdcsystem: ibiz.env.dcSystem }
135
+ );
136
+ const { data, ok } = res;
137
+ if (ok && (data == null ? void 0 : data.token)) {
138
+ clearInterval(this.pollingTimer);
139
+ setCookie(CoreConst.TOKEN, data.token, 0, true);
140
+ const expiredDate = (/* @__PURE__ */ new Date()).getTime() + (data.expirein || 7199) * 1e3;
141
+ setCookie(CoreConst.TOKEN_EXPIRES, "".concat(expiredDate), 0, true);
142
+ if (data.refresh_token) {
143
+ setCookie(CoreConst.REFRESH_TOKEN, data.refresh_token, 0, true);
144
+ }
145
+ clearCookie(CoreConst.IS_ANONYMOUS, true);
146
+ window.location.hash = "/";
147
+ window.history.pushState({}, "");
148
+ window.location.reload();
149
+ }
150
+ } else {
151
+ clearInterval(this.pollingTimer);
152
+ }
153
+ } catch (error) {
154
+ ibiz.log.error(error.message);
155
+ }
156
+ }
157
+ /**
158
+ * 销毁方法
159
+ *
160
+ * @return {*} {Promise<void>}
161
+ * @memberof AuthWxmpQrcodeController
162
+ */
163
+ async destroy() {
164
+ await super.destroy();
165
+ if (this.pollingTimer) {
166
+ clearInterval(this.pollingTimer);
167
+ this.pollingTimer = void 0;
168
+ }
169
+ if (this.expirationTimer) {
170
+ clearInterval(this.expirationTimer);
171
+ this.expirationTimer = void 0;
172
+ }
173
+ }
174
+ }
175
+
176
+ export { AuthWxmpQrcodeController };
@@ -0,0 +1 @@
1
+ .ibiz-auth-wxmp-qrcode{width:100%;height:100%}.ibiz-auth-wxmp-qrcode__content{position:relative;width:100%;height:100%}.ibiz-auth-wxmp-qrcode__qrcode{width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.ibiz-auth-wxmp-qrcode__caption{font-size:var(--ibiz-font-size-small);text-align:center}.ibiz-auth-wxmp-qrcode__mask{position:absolute;top:0;left:0;display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:var(--ibiz-color-primary);background-color:rgba(255,255,255,.9)}.ibiz-auth-wxmp-qrcode__mask--icon{font-size:var(--ibiz-font-size-header-1);cursor:pointer}.ibiz-auth-wxmp-qrcode__mask--icon:hover{color:var(--ibiz-color-primary-hover)}
@@ -0,0 +1,27 @@
1
+ import { PropType } from 'vue';
2
+ import { IPanelRawItem } from '@ibiz/model-core';
3
+ import { AuthWxmpQrcodeController } from './auth-wxmp-qrcode.controller';
4
+ import './auth-wxmp-qrcode.scss';
5
+ export declare const AuthWxmpQrcode: import("vue").DefineComponent<{
6
+ modelData: {
7
+ type: PropType<IPanelRawItem>;
8
+ required: true;
9
+ };
10
+ controller: {
11
+ type: PropType<AuthWxmpQrcodeController>;
12
+ required: true;
13
+ };
14
+ }, {
15
+ ns: import("@ibiz-template/core").Namespace;
16
+ refreshQrcode: () => Promise<void>;
17
+ }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
18
+ modelData: {
19
+ type: PropType<IPanelRawItem>;
20
+ required: true;
21
+ };
22
+ controller: {
23
+ type: PropType<AuthWxmpQrcodeController>;
24
+ required: true;
25
+ };
26
+ }>>, {}, {}>;
27
+ //# sourceMappingURL=auth-wxmp-qrcode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-wxmp-qrcode.d.ts","sourceRoot":"","sources":["../../../src/panel-component/auth-wxmp-qrcode/auth-wxmp-qrcode.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmB,QAAQ,EAAe,MAAM,KAAK,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,yBAAyB,CAAC;AAEjC,eAAO,MAAM,cAAc;;;;;;;;;;;yBAmBS,QAAQ,IAAI,CAAC;;;;;;;;;;YA6B/C,CAAC"}