@utogether/udp-core 2.0.0-beta.25 → 2.0.0-beta.27

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 (164) hide show
  1. package/dist/403-gdcH0-Bo.js +65 -0
  2. package/dist/404-Se2SF97M.js +65 -0
  3. package/dist/500-B6j9AqLo.js +67 -0
  4. package/dist/AuthorityInfo-CQ8ydZvr.js +4 -0
  5. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-C4NRvS8p.js +100 -0
  6. package/dist/AuthorityPanel-lVnZ5bce.js +4 -0
  7. package/dist/AuthorityPanel.vue_vue_type_style_index_0_lang-nsfhDlvV.js +113 -0
  8. package/dist/Company-BzSVBSC4.js +25 -0
  9. package/dist/CompanyPanel-DBjZB4aJ.js +204 -0
  10. package/dist/DataSet-iBHzs75s.js +147 -0
  11. package/dist/Department-BkgseHo8.js +25 -0
  12. package/dist/DepartmentPanel-Sen93_2M.js +249 -0
  13. package/dist/DesignPanel-pqDcwaFC.js +4 -0
  14. package/dist/DesignPanel.vue_vue_type_style_index_0_lang-BjtYyEw7.js +1013 -0
  15. package/dist/DictView-CJLG4LlE.js +110 -0
  16. package/dist/InvOrganization-D0Jq1IAa.js +74 -0
  17. package/dist/Org-CO_1WT39.js +39 -0
  18. package/dist/Preview-DLI4Bwel.js +48 -0
  19. package/dist/ReportDefine-Cw46OnJ_.js +10 -0
  20. package/dist/ReportDesign-D4sHTXT7.js +165 -0
  21. package/dist/ReportQuery-DtOCvQSN.js +74 -0
  22. package/dist/ReportQueryFrom-QjL-ETPq.js +4 -0
  23. package/dist/ReportQueryFrom.vue_vue_type_style_index_0_lang-Dj9ne87n.js +177 -0
  24. package/dist/ReportTemplate-BxAgc_Aj.js +161 -0
  25. package/dist/Role-Df77BBD-.js +25 -0
  26. package/dist/RoleAssign-BrunouML.js +26 -0
  27. package/dist/RolePanel-DSVwqhiD.js +4 -0
  28. package/dist/RolePanel-HLA7XBlN.js +4 -0
  29. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-CKlbqRa5.js +132 -0
  30. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-CN0rUxKz.js +152 -0
  31. package/dist/ScrollPanel.vue_vue_type_style_index_0_lang-D_FeSXKv.js +99 -0
  32. package/dist/Staff-BeL1xcRf.js +26 -0
  33. package/dist/StaffInfo-CIfnltyX.js +4 -0
  34. package/dist/StaffInfo.vue_vue_type_script_setup_true_lang-DbLFwWfG.js +107 -0
  35. package/dist/StaffPanel-BV2CHWac.js +4 -0
  36. package/dist/StaffPanel.vue_vue_type_script_setup_true_lang-CvT-Vp2G.js +153 -0
  37. package/dist/SysUser-DPfNvthk.js +15 -0
  38. package/dist/SysUserPanel-CoLKYlQE.js +4 -0
  39. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-lcO3Cjbq.js +353 -0
  40. package/dist/SystemMenu-sdj1dRDA.js +156 -0
  41. package/dist/UserInfo-CTX4hhFl.js +4 -0
  42. package/dist/UserInfo.vue_vue_type_style_index_0_lang-ClhCd_8z.js +160 -0
  43. package/dist/await-to-js.es5-Bv3Eu4mi.js +10 -0
  44. package/dist/childView-BDmWwJO5.js +4 -0
  45. package/dist/childView-Dx3ACtHa.js +4 -0
  46. package/dist/childView.vue_vue_type_style_index_0_lang-CfKq_0FN.js +183 -0
  47. package/dist/childView.vue_vue_type_style_index_0_lang-DxZNtkhd.js +143 -0
  48. package/dist/code-rule-cvN4gYC_.js +148 -0
  49. package/dist/core.es.js +24 -6
  50. package/dist/cron-task-B0TkxFdp.js +135 -0
  51. package/dist/flow-task-PoDnE_kE.js +10 -0
  52. package/dist/frameView-5cy5BSgS.js +43 -0
  53. package/dist/img/minicolors.png +0 -0
  54. package/dist/index-C5WRTwvI.js +3006 -0
  55. package/dist/layout-home-DrARg-3o.js +232 -0
  56. package/dist/layoutView-25v_ngk5.js +3191 -0
  57. package/dist/log-in-Bmz5Uhbt.js +116 -0
  58. package/dist/log-out-B-8m3oNj.js +130 -0
  59. package/dist/login-Cmp2RvvW.js +217 -0
  60. package/dist/login-log-CVvRgZSu.js +70 -0
  61. package/dist/lov-view-BATtzw2X.js +99 -0
  62. package/dist/menuInfo-BIvrE7nm.js +4 -0
  63. package/dist/menuInfo.vue_vue_type_style_index_0_lang-B6USomit.js +360 -0
  64. package/dist/pda-app-CzHVyeEa.js +707 -0
  65. package/dist/redirect-DTz8GSnv.js +15 -0
  66. package/dist/resource-Y5lGB38n.js +97 -0
  67. package/dist/su-welcome-CXA6OzBw.js +878 -0
  68. package/dist/sys-config-CqO03LeC.js +385 -0
  69. package/dist/udp-core.css +1 -2
  70. package/dist/useNav-C-rCgubt.js +84 -0
  71. package/dist/utogether-MlnyYtNS.js +4 -0
  72. package/dist/wecom-push-B75FLee5.js +70 -0
  73. package/index.ts +3 -2
  74. package/package.json +1 -1
  75. package/src/App.vue +79 -73
  76. package/src/api/index.ts +1 -1
  77. package/src/components/SuQrcode/src/index.tsx +231 -236
  78. package/src/components/udp/grid/index.vue +9 -11
  79. package/src/components/udp/utils.ts +420 -414
  80. package/src/layout/components/lay-panel/index.vue +2 -6
  81. package/src/layout/components/lay-search/components/SearchModal.vue +7 -3
  82. package/src/main.ts +111 -110
  83. package/src/router/index.ts +156 -187
  84. package/src/router/utils.ts +2 -3
  85. package/src/store/modules/system.ts +7 -0
  86. package/src/style/vxetable.scss +372 -364
  87. package/src/utils/authority/index.ts +46 -29
  88. package/src/utils/udp/http/index.ts +115 -64
  89. package/src/utils/udp/http/types.d.ts +15 -14
  90. package/src/views/login/login-view.vue +280 -301
  91. package/src/views/organization/department/DepartmentPanel.vue +3 -4
  92. package/src/views/system/sys/sys-config.vue +344 -344
  93. package/src/views/uhome/components/home-todo.vue +179 -178
  94. package/src/views/ulogin/login.vue +8 -41
  95. package/tsconfig.json +2 -3
  96. package/types/global.d.ts +234 -234
  97. package/vite.config.ts +2 -1
  98. package/dist/403-QwBKrRZE.js +0 -72
  99. package/dist/404-Cr7MbzNV.js +0 -72
  100. package/dist/500-B7kCOeIA.js +0 -77
  101. package/dist/AuthorityInfo-Dwml2K4S.js +0 -91
  102. package/dist/AuthorityPanel-DzPhsPpa.js +0 -98
  103. package/dist/Company-BhOlvl7Q.js +0 -21
  104. package/dist/CompanyPanel-ByhY5-Sq.js +0 -199
  105. package/dist/DataSet-CuGZcKC-.js +0 -141
  106. package/dist/Department-QvngN63N.js +0 -21
  107. package/dist/DepartmentPanel-BCXqC39J.js +0 -2
  108. package/dist/DepartmentPanel-DntGycxr.js +0 -242
  109. package/dist/DesignPanel-BMN4DZ0R.js +0 -1196
  110. package/dist/DictView-ERFqZ5VD.js +0 -100
  111. package/dist/File-WJXjGYxr.js +0 -89
  112. package/dist/InvOrganization-BwMmD8Ua.js +0 -76
  113. package/dist/Org-HgnOWubi.js +0 -76
  114. package/dist/Preview-CVZdnHB1.js +0 -45
  115. package/dist/ReIcon-DecitXmg.js +0 -413
  116. package/dist/ReportDefine-BgLM-Rjk.js +0 -10
  117. package/dist/ReportDesign-CjfTyyy_.js +0 -158
  118. package/dist/ReportQuery-CP-E0Puv.js +0 -101
  119. package/dist/ReportQueryFrom-D7SPPAps.js +0 -198
  120. package/dist/ReportTemplate-DE25zc1f.js +0 -162
  121. package/dist/Role-K7v_ZhFE.js +0 -21
  122. package/dist/RoleAssign-C16fjLaX.js +0 -22
  123. package/dist/RolePanel-CV-xPlYJ.js +0 -176
  124. package/dist/RolePanel-DPCe9k8f.js +0 -131
  125. package/dist/ScrollPanel-DW30pGz1.js +0 -88
  126. package/dist/Staff-w2ly4qd0.js +0 -22
  127. package/dist/StaffInfo-DPDRpz6F.js +0 -149
  128. package/dist/StaffPanel-DI1eTTp9.js +0 -143
  129. package/dist/SysUser-BMTX1cJM.js +0 -12
  130. package/dist/SysUserPanel-xwZdVjdp.js +0 -365
  131. package/dist/SystemMenu-TXhiQZVm.js +0 -154
  132. package/dist/UserInfo-JQqw8FMT.js +0 -194
  133. package/dist/_plugin-vue_export-helper-C6QCLu9I.js +0 -8
  134. package/dist/api-BFNxcxSN.js +0 -30
  135. package/dist/authority-Bi6BGB5B.js +0 -20
  136. package/dist/await-to-js.es5-DkWYmPXW.js +0 -10
  137. package/dist/childView-Bk8OD9bV.js +0 -181
  138. package/dist/childView-CyrcwshT.js +0 -184
  139. package/dist/code-rule-QFrhqFrW.js +0 -151
  140. package/dist/contant-Q77dU_V3.js +0 -4
  141. package/dist/cron-task-BpUDKEAU.js +0 -131
  142. package/dist/flow-task-DAc2NrDU.js +0 -11
  143. package/dist/frameView-Di0zJZUR.js +0 -39
  144. package/dist/layout-home-BVp7vYLR.js +0 -239
  145. package/dist/layoutView-DFUjrqAS.js +0 -2662
  146. package/dist/log-in-BrNB0mLz.js +0 -117
  147. package/dist/log-out-dYfqvzy6.js +0 -111
  148. package/dist/login-BdCDnuXL.js +0 -233
  149. package/dist/login-log-CJak-ANA.js +0 -79
  150. package/dist/lov-view-DkmG4K57.js +0 -95
  151. package/dist/menuInfo-kp2wNYOp.js +0 -346
  152. package/dist/mitt-CQgI7DYU.js +0 -27
  153. package/dist/pda-app-CA7YI37u.js +0 -589
  154. package/dist/redirect-N0k4tImU.js +0 -16
  155. package/dist/resource-CfQTHFcs.js +0 -94
  156. package/dist/router-CeluSGiD.js +0 -1531
  157. package/dist/su-welcome-JeiovGpe.js +0 -799
  158. package/dist/sys-config-Ddb3vBpK.js +0 -316
  159. package/dist/udp-core-Dhm-BlAs.js +0 -2032
  160. package/dist/useDataThemeChange-BCy8JBG7.js +0 -226
  161. package/dist/useNav-DY8FkltH.js +0 -106
  162. package/dist/utogether-l7JXs4Lv.js +0 -4
  163. package/dist/water-mark-WDQZ9YqB.js +0 -119
  164. package/dist/wecom-push-kWkAVRCj.js +0 -77
@@ -1,236 +1,231 @@
1
- import { ref, unref, watch, nextTick, computed, type PropType, defineComponent } from 'vue';
2
- import './index.scss';
3
- import { isString, clone } from 'xe-utils';
4
- import propTypes from '@/utils/propTypes';
5
- import { IconifyIconOffline } from '../../ReIcon';
6
- import QRCode, { type QRCodeRenderersOptions } from 'qrcode';
7
-
8
- interface QrcodeLogo {
9
- src?: string;
10
- logoSize?: number;
11
- bgColor?: string;
12
- borderSize?: number;
13
- crossOrigin?: string;
14
- borderRadius?: number;
15
- logoRadius?: number;
16
- }
17
-
18
- const props = {
19
- // img 或者 canvas,img不支持logo嵌套
20
- tag: propTypes.string.validate((v: string) => ['canvas', 'img'].includes(v)).def('canvas'),
21
- // 二维码内容
22
- text: {
23
- type: [String, Array] as PropType<string | Recordable[]>,
24
- default: null
25
- },
26
- // qrcode.js配置项
27
- options: {
28
- type: Object as PropType<QRCodeRenderersOptions>,
29
- default: (): QRCodeRenderersOptions => ({})
30
- },
31
- // 宽度
32
- width: propTypes.number.def(200),
33
- // logo
34
- logo: {
35
- type: [String, Object] as PropType<Partial<QrcodeLogo> | string>,
36
- default: (): QrcodeLogo | string => ''
37
- },
38
- // 是否过期
39
- disabled: propTypes.bool.def(false),
40
- // 过期提示内容
41
- disabledText: propTypes.string.def('')
42
- };
43
-
44
- export default defineComponent({
45
- name: 'SuQrcode',
46
- props,
47
- emits: ['done', 'click', 'disabled-click'],
48
- setup(props, { emit }) {
49
- const { toCanvas, toDataURL } = QRCode;
50
- const loading = ref(true);
51
- const wrapRef = ref<Nullable<HTMLCanvasElement | HTMLImageElement>>(null);
52
- const renderText = computed(() => String(props.text));
53
- const wrapStyle = computed(() => {
54
- return {
55
- width: props.width + 'px',
56
- height: props.width + 'px'
57
- };
58
- });
59
- const initQrcode = async () => {
60
- await nextTick();
61
- const options = clone(props.options || {}, true);
62
- if (props.tag === 'canvas') {
63
- // 容错率,默认对内容少的二维码采用高容错率,内容多的二维码采用低容错率
64
- options.errorCorrectionLevel =
65
- options.errorCorrectionLevel || getErrorCorrectionLevel(unref(renderText));
66
- const _width: number = await getOriginWidth(unref(renderText), options);
67
- options.scale = props.width === 0 ? undefined : (props.width / _width) * 4;
68
- const canvasRef: any = await toCanvas(
69
- unref(wrapRef) as HTMLCanvasElement,
70
- unref(renderText),
71
- options
72
- );
73
- if (props.logo) {
74
- const url = await createLogoCode(canvasRef);
75
- emit('done', url);
76
- loading.value = false;
77
- } else {
78
- emit('done', canvasRef.toDataURL());
79
- loading.value = false;
80
- }
81
- } else {
82
- const url = await toDataURL(renderText.value, {
83
- errorCorrectionLevel: 'H',
84
- width: props.width,
85
- ...options
86
- });
87
- (unref(wrapRef) as HTMLImageElement).src = url;
88
- emit('done', url);
89
- loading.value = false;
90
- }
91
- };
92
- watch(
93
- () => renderText.value,
94
- val => {
95
- if (!val) return;
96
- initQrcode();
97
- },
98
- {
99
- deep: true,
100
- immediate: true
101
- }
102
- );
103
- const createLogoCode = (canvasRef: HTMLCanvasElement) => {
104
- const canvasWidth = canvasRef.width;
105
- const logoOptions: QrcodeLogo = Object.assign(
106
- {
107
- logoSize: 0.15,
108
- bgColor: '#ffffff',
109
- borderSize: 0.05,
110
- crossOrigin: 'anonymous',
111
- borderRadius: 8,
112
- logoRadius: 0
113
- },
114
- isString(props.logo) ? {} : props.logo
115
- );
116
- const {
117
- logoSize = 0.15,
118
- bgColor = '#ffffff',
119
- borderSize = 0.05,
120
- crossOrigin = 'anonymous',
121
- borderRadius = 8,
122
- logoRadius = 0
123
- } = logoOptions;
124
- const logoSrc = isString(props.logo) ? props.logo : props.logo.src;
125
- const logoWidth = canvasWidth * logoSize;
126
- const logoXY = (canvasWidth * (1 - logoSize)) / 2;
127
- const logoBgWidth = canvasWidth * (logoSize + borderSize);
128
- const logoBgXY = (canvasWidth * (1 - logoSize - borderSize)) / 2;
129
- const ctx = canvasRef.getContext('2d');
130
- if (!ctx) return;
131
- // logo 底色
132
- canvasRoundRect(ctx)(logoBgXY, logoBgXY, logoBgWidth, logoBgWidth, borderRadius);
133
- ctx.fillStyle = bgColor;
134
- ctx.fill();
135
- // logo
136
- const image = new Image();
137
- if (crossOrigin || logoRadius) {
138
- image.setAttribute('crossOrigin', crossOrigin);
139
- }
140
- (image as any).src = logoSrc;
141
- // 使用image绘制可以避免某些跨域情况
142
- const drawLogoWithImage = (image: HTMLImageElement) => {
143
- ctx.drawImage(image, logoXY, logoXY, logoWidth, logoWidth);
144
- };
145
- // 使用canvas绘制以获得更多的功能
146
- const drawLogoWithCanvas = (image: HTMLImageElement) => {
147
- const canvasImage = document.createElement('canvas');
148
- canvasImage.width = logoXY + logoWidth;
149
- canvasImage.height = logoXY + logoWidth;
150
- const imageCanvas = canvasImage.getContext('2d');
151
- if (!imageCanvas || !ctx) return;
152
- imageCanvas.drawImage(image, logoXY, logoXY, logoWidth, logoWidth);
153
- canvasRoundRect(ctx)(logoXY, logoXY, logoWidth, logoWidth, logoRadius);
154
- if (!ctx) return;
155
- const fillStyle = ctx.createPattern(canvasImage, 'no-repeat');
156
- if (fillStyle) {
157
- ctx.fillStyle = fillStyle;
158
- ctx.fill();
159
- }
160
- };
161
- // 将 logo绘制到 canvas上
162
- return new Promise((resolve: any) => {
163
- image.onload = () => {
164
- logoRadius ? drawLogoWithCanvas(image) : drawLogoWithImage(image);
165
- resolve(canvasRef.toDataURL());
166
- };
167
- });
168
- };
169
- // 得到原QrCode的大小,以便缩放得到正确的QrCode大小
170
- const getOriginWidth = async (content: string, options: QRCodeRenderersOptions) => {
171
- const _canvas = document.createElement('canvas');
172
- await toCanvas(_canvas, content, options);
173
- return _canvas.width;
174
- };
175
- // 对于内容少的QrCode,增大容错率
176
- const getErrorCorrectionLevel = (content: string) => {
177
- if (content.length > 36) {
178
- return 'M';
179
- } else if (content.length > 16) {
180
- return 'Q';
181
- } else {
182
- return 'H';
183
- }
184
- };
185
- // 用于绘制圆角
186
- const canvasRoundRect = (ctx: CanvasRenderingContext2D) => {
187
- return (x: number, y: number, w: number, h: number, r: number) => {
188
- const minSize = Math.min(w, h);
189
- if (r > minSize / 2) {
190
- r = minSize / 2;
191
- }
192
- ctx.beginPath();
193
- ctx.moveTo(x + r, y);
194
- ctx.arcTo(x + w, y, x + w, y + h, r);
195
- ctx.arcTo(x + w, y + h, x, y + h, r);
196
- ctx.arcTo(x, y + h, x, y, r);
197
- ctx.arcTo(x, y, x + w, y, r);
198
- ctx.closePath();
199
- return ctx;
200
- };
201
- };
202
- const clickCode = () => {
203
- emit('click');
204
- };
205
- const disabledClick = () => {
206
- emit('disabled-click');
207
- };
208
- return () => (
209
- <>
210
- <div v-loading={unref(loading)} class="qrcode relative inline-block" style={unref(wrapStyle)}>
211
- {props.tag === 'canvas' ? (
212
- <canvas ref={wrapRef} onClick={clickCode}></canvas>
213
- ) : (
214
- <img ref={wrapRef} onClick={clickCode}></img>
215
- )}
216
- {props.disabled && (
217
- <div
218
- class="qrcode--disabled absolute top-0 left-0 flex w-full h-full items-center justify-center"
219
- onClick={disabledClick}
220
- >
221
- <div class="absolute top-[50%] left-[50%] font-bold">
222
- <IconifyIconOffline
223
- class="cursor-pointer"
224
- icon="refresh-right"
225
- width="30"
226
- color="var(--el-color-primary)"
227
- />
228
- <div>{props.disabledText}</div>
229
- </div>
230
- </div>
231
- )}
232
- </div>
233
- </>
234
- );
235
- }
236
- });
1
+ import { ref, unref, watch, nextTick, computed, type PropType, defineComponent } from 'vue';
2
+ import './index.scss';
3
+ import { isString, clone } from 'xe-utils';
4
+ import propTypes from '@/utils/propTypes';
5
+ import { IconifyIconOffline } from '../../ReIcon';
6
+ import QRCode, { type QRCodeRenderersOptions } from 'qrcode';
7
+
8
+ interface QrcodeLogo {
9
+ src?: string;
10
+ logoSize?: number;
11
+ bgColor?: string;
12
+ borderSize?: number;
13
+ crossOrigin?: string;
14
+ borderRadius?: number;
15
+ logoRadius?: number;
16
+ }
17
+
18
+ const props = {
19
+ // img 或者 canvas,img不支持logo嵌套
20
+ tag: propTypes.string.validate((v: string) => ['canvas', 'img'].includes(v)).def('canvas'),
21
+ // 二维码内容
22
+ text: {
23
+ type: [String, Array] as PropType<string | Recordable[]>,
24
+ default: null
25
+ },
26
+ // qrcode.js配置项
27
+ options: {
28
+ type: Object as PropType<QRCodeRenderersOptions>,
29
+ default: (): QRCodeRenderersOptions => ({})
30
+ },
31
+ // 宽度
32
+ width: propTypes.number.def(200),
33
+ // logo
34
+ logo: {
35
+ type: [String, Object] as PropType<Partial<QrcodeLogo> | string>,
36
+ default: (): QrcodeLogo | string => ''
37
+ },
38
+ // 是否过期
39
+ disabled: propTypes.bool.def(false),
40
+ // 过期提示内容
41
+ disabledText: propTypes.string.def('')
42
+ };
43
+
44
+ export default defineComponent({
45
+ name: 'SuQrcode',
46
+ props,
47
+ emits: ['done', 'click', 'disabled-click'],
48
+ setup(props, { emit }) {
49
+ const { toCanvas, toDataURL } = QRCode;
50
+ const loading = ref(true);
51
+ const wrapRef = ref<Nullable<HTMLCanvasElement | HTMLImageElement>>(null);
52
+ const renderText = computed(() => String(props.text));
53
+ const wrapStyle = computed(() => {
54
+ return {
55
+ width: props.width + 'px',
56
+ height: props.width + 'px'
57
+ };
58
+ });
59
+ const initQrcode = async () => {
60
+ await nextTick();
61
+ const options = clone(props.options || {}, true);
62
+ if (props.tag === 'canvas') {
63
+ // 容错率,默认对内容少的二维码采用高容错率,内容多的二维码采用低容错率
64
+ options.errorCorrectionLevel = options.errorCorrectionLevel || getErrorCorrectionLevel(unref(renderText));
65
+ const _width: number = await getOriginWidth(unref(renderText), options);
66
+ options.scale = props.width === 0 ? undefined : (props.width / _width) * 4;
67
+ const canvasRef: any = await toCanvas(unref(wrapRef) as HTMLCanvasElement, unref(renderText), options);
68
+ if (props.logo) {
69
+ const url = await createLogoCode(canvasRef);
70
+ emit('done', url);
71
+ loading.value = false;
72
+ } else {
73
+ emit('done', canvasRef.toDataURL());
74
+ loading.value = false;
75
+ }
76
+ } else {
77
+ const url = await toDataURL(renderText.value, {
78
+ errorCorrectionLevel: 'H',
79
+ width: props.width,
80
+ ...options
81
+ });
82
+ (unref(wrapRef) as HTMLImageElement).src = url;
83
+ emit('done', url);
84
+ loading.value = false;
85
+ }
86
+ };
87
+ watch(
88
+ () => renderText.value,
89
+ val => {
90
+ if (!val) return;
91
+ initQrcode();
92
+ },
93
+ {
94
+ deep: true,
95
+ immediate: true
96
+ }
97
+ );
98
+ const createLogoCode = (canvasRef: HTMLCanvasElement) => {
99
+ const canvasWidth = canvasRef.width;
100
+ const logoOptions: QrcodeLogo = Object.assign(
101
+ {
102
+ logoSize: 0.15,
103
+ bgColor: '#ffffff',
104
+ borderSize: 0.05,
105
+ crossOrigin: 'anonymous',
106
+ borderRadius: 8,
107
+ logoRadius: 0
108
+ },
109
+ isString(props.logo) ? {} : props.logo
110
+ );
111
+ const {
112
+ logoSize = 0.15,
113
+ bgColor = '#ffffff',
114
+ borderSize = 0.05,
115
+ crossOrigin = 'anonymous',
116
+ borderRadius = 8,
117
+ logoRadius = 0
118
+ } = logoOptions;
119
+ const logoSrc = isString(props.logo) ? props.logo : props.logo.src;
120
+ const logoWidth = canvasWidth * logoSize;
121
+ const logoXY = (canvasWidth * (1 - logoSize)) / 2;
122
+ const logoBgWidth = canvasWidth * (logoSize + borderSize);
123
+ const logoBgXY = (canvasWidth * (1 - logoSize - borderSize)) / 2;
124
+ const ctx = canvasRef.getContext('2d');
125
+ if (!ctx) return;
126
+ // logo 底色
127
+ canvasRoundRect(ctx)(logoBgXY, logoBgXY, logoBgWidth, logoBgWidth, borderRadius);
128
+ ctx.fillStyle = bgColor;
129
+ ctx.fill();
130
+ // logo
131
+ const image = new Image();
132
+ if (crossOrigin || logoRadius) {
133
+ image.setAttribute('crossOrigin', crossOrigin);
134
+ }
135
+ (image as any).src = logoSrc;
136
+ // 使用image绘制可以避免某些跨域情况
137
+ const drawLogoWithImage = (image: HTMLImageElement) => {
138
+ ctx.drawImage(image, logoXY, logoXY, logoWidth, logoWidth);
139
+ };
140
+ // 使用canvas绘制以获得更多的功能
141
+ const drawLogoWithCanvas = (image: HTMLImageElement) => {
142
+ const canvasImage = document.createElement('canvas');
143
+ canvasImage.width = logoXY + logoWidth;
144
+ canvasImage.height = logoXY + logoWidth;
145
+ const imageCanvas = canvasImage.getContext('2d');
146
+ if (!imageCanvas || !ctx) return;
147
+ imageCanvas.drawImage(image, logoXY, logoXY, logoWidth, logoWidth);
148
+ canvasRoundRect(ctx)(logoXY, logoXY, logoWidth, logoWidth, logoRadius);
149
+ if (!ctx) return;
150
+ const fillStyle = ctx.createPattern(canvasImage, 'no-repeat');
151
+ if (fillStyle) {
152
+ ctx.fillStyle = fillStyle;
153
+ ctx.fill();
154
+ }
155
+ };
156
+ // logo绘制到 canvas上
157
+ return new Promise((resolve: any) => {
158
+ image.onload = () => {
159
+ logoRadius ? drawLogoWithCanvas(image) : drawLogoWithImage(image);
160
+ resolve(canvasRef.toDataURL());
161
+ };
162
+ });
163
+ };
164
+ // 得到原QrCode的大小,以便缩放得到正确的QrCode大小
165
+ const getOriginWidth = async (content: string, options: QRCodeRenderersOptions) => {
166
+ const _canvas = document.createElement('canvas');
167
+ await toCanvas(_canvas, content, options);
168
+ return _canvas.width;
169
+ };
170
+ // 对于内容少的QrCode,增大容错率
171
+ const getErrorCorrectionLevel = (content: string) => {
172
+ if (content.length > 36) {
173
+ return 'M';
174
+ } else if (content.length > 16) {
175
+ return 'Q';
176
+ } else {
177
+ return 'H';
178
+ }
179
+ };
180
+ // 用于绘制圆角
181
+ const canvasRoundRect = (ctx: CanvasRenderingContext2D) => {
182
+ return (x: number, y: number, w: number, h: number, r: number) => {
183
+ const minSize = Math.min(w, h);
184
+ if (r > minSize / 2) {
185
+ r = minSize / 2;
186
+ }
187
+ ctx.beginPath();
188
+ ctx.moveTo(x + r, y);
189
+ ctx.arcTo(x + w, y, x + w, y + h, r);
190
+ ctx.arcTo(x + w, y + h, x, y + h, r);
191
+ ctx.arcTo(x, y + h, x, y, r);
192
+ ctx.arcTo(x, y, x + w, y, r);
193
+ ctx.closePath();
194
+ return ctx;
195
+ };
196
+ };
197
+ const clickCode = () => {
198
+ emit('click');
199
+ };
200
+ const disabledClick = () => {
201
+ emit('disabled-click');
202
+ };
203
+ return () => (
204
+ <>
205
+ <div v-loading={unref(loading)} class="qrcode relative inline-block" style={unref(wrapStyle)}>
206
+ {props.tag === 'canvas' ? (
207
+ <canvas ref={wrapRef} onClick={clickCode}></canvas>
208
+ ) : (
209
+ <img ref={wrapRef} onClick={clickCode}></img>
210
+ )}
211
+ {props.disabled && (
212
+ <div
213
+ class="qrcode--disabled absolute top-0 left-0 flex w-full h-full items-center justify-center"
214
+ onClick={disabledClick}
215
+ >
216
+ <div class="absolute top-[50%] left-[50%] font-bold">
217
+ <IconifyIconOffline
218
+ class="cursor-pointer"
219
+ icon="refresh-right"
220
+ width="30"
221
+ color="var(--el-color-primary)"
222
+ />
223
+ <div>{props.disabledText}</div>
224
+ </div>
225
+ </div>
226
+ )}
227
+ </div>
228
+ </>
229
+ );
230
+ }
231
+ });
@@ -2,7 +2,7 @@
2
2
  * @Author: wei.li
3
3
  * @Date: 2021-11-17 16:33:37
4
4
  * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2026-03-30 11:35:03
5
+ * @LastEditTime: 2026-04-16 10:09:53
6
6
  * @Description: file content
7
7
  -->
8
8
  <template>
@@ -78,7 +78,6 @@ const cacheColumns = {};
78
78
  // console.log(attrs);
79
79
  const instance = getCurrentInstance()!;
80
80
  const hasAuthority = instance.appContext.config.globalProperties.$hasAuthority;
81
- const debugModel = instance.appContext.config.globalProperties.$debugModel;
82
81
 
83
82
  const viewCode = instance.parent.type.name;
84
83
  const $mode = instance.appContext.config.globalProperties.$mode;
@@ -102,7 +101,7 @@ const { t } = useI18n();
102
101
  const xgrid = ref(null);
103
102
  const showModal = ref(false);
104
103
 
105
- const serviceApi = gerServiceURL();
104
+ const serviceApi = instance.appContext.config.globalProperties.$serviceApi;
106
105
 
107
106
  const favorite = {
108
107
  icon: 'vxe-icon-setting',
@@ -486,14 +485,13 @@ nextTick(() => {
486
485
  columnDrop();
487
486
  }, 500);
488
487
  });
489
- function gerServiceURL() {
490
- debugger;
491
- const whiteList = ['/uums/', '/upfm/', '/urpt/', '/usch/'];
492
- if (debugModel && props?.url && !whiteList.some(str => props.url.includes(str))) {
493
- return instance.appContext.config.globalProperties.$debuggerApi;
494
- }
495
- return instance.appContext.config.globalProperties.$serviceApi;
496
- }
488
+ // function gerServiceURL() {
489
+ // const whiteList = ['/uums/', '/upfm/', '/urpt/', '/usch/'];
490
+ // if (debugModel && props?.url && !whiteList.some(str => props.url.includes(str))) {
491
+ // return instance.appContext.config.globalProperties.$debuggerApi;
492
+ // }
493
+ // return instance.appContext.config.globalProperties.$serviceApi;
494
+ // }
497
495
  /**
498
496
  * @description Vue实例卸载
499
497
  */