eoss-ui 0.8.42 → 0.8.44

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 (82) hide show
  1. package/lib/eoss-ui.common.js +195 -161
  2. package/lib/flow.js +164 -142
  3. package/lib/index.js +1 -1
  4. package/lib/main.js +5 -5
  5. package/lib/upload.js +18 -6
  6. package/package.json +2 -2
  7. package/packages/button-group/src/main.vue +346 -346
  8. package/packages/calogin/src/main.vue +412 -412
  9. package/packages/clients/src/main.vue +151 -151
  10. package/packages/flow/src/component/CustomPreset.vue +326 -326
  11. package/packages/flow/src/component/FileList.vue +97 -97
  12. package/packages/flow/src/component/SendMsg.vue +242 -242
  13. package/packages/flow/src/component/SortFlow.vue +110 -110
  14. package/packages/flow/src/flow.vue +4 -4
  15. package/packages/flow/src/form.vue +123 -123
  16. package/packages/flow/src/freeStartFlow.vue +2902 -2902
  17. package/packages/flow/src/main.vue +6 -5
  18. package/packages/flow/src/processForm.vue +2032 -2032
  19. package/packages/flow/src/processReject.vue +323 -323
  20. package/packages/flow/src/table.vue +58 -58
  21. package/packages/form/src/table.vue +1512 -1512
  22. package/packages/icon/src/main.vue +104 -104
  23. package/packages/login/src/resetPassword.vue +557 -557
  24. package/packages/main/src/public/online.vue +89 -89
  25. package/packages/main/src/public/search.vue +464 -464
  26. package/packages/main/src/public/settings.vue +273 -273
  27. package/packages/main/src/simplicity/apps.vue +388 -388
  28. package/packages/main/src/simplicity/avatar.vue +82 -82
  29. package/packages/main/src/simplicity/handler.vue +158 -158
  30. package/packages/main/src/simplicity/menu-list.vue +135 -135
  31. package/packages/main/src/simplicity/message.vue +293 -293
  32. package/packages/main/src/simplicity/notice.vue +222 -222
  33. package/packages/main/src/simplicity/sub-menu.vue +276 -276
  34. package/packages/main/src/simplicity/user.vue +259 -259
  35. package/packages/main/src/simplicityTop/apps.vue +388 -388
  36. package/packages/main/src/simplicityTop/avatar.vue +82 -82
  37. package/packages/main/src/simplicityTop/handler.vue +215 -215
  38. package/packages/main/src/simplicityTop/lists.vue +84 -84
  39. package/packages/main/src/simplicityTop/menu-list.vue +135 -135
  40. package/packages/main/src/simplicityTop/message.vue +293 -293
  41. package/packages/main/src/simplicityTop/notice.vue +222 -222
  42. package/packages/main/src/simplicityTop/router-page.vue +45 -45
  43. package/packages/main/src/simplicityTop/sub-menu.vue +274 -274
  44. package/packages/main/src/simplicityTop/user.vue +259 -259
  45. package/packages/nav/src/main.vue +351 -351
  46. package/packages/selector-panel/src/selection.vue +174 -174
  47. package/packages/switch/src/main.vue +170 -170
  48. package/packages/theme-chalk/src/data-table.scss +297 -297
  49. package/packages/theme-chalk/src/handler.scss +148 -148
  50. package/packages/theme-chalk/src/icon.scss +3452 -3452
  51. package/packages/theme-chalk/src/login.scss +1006 -1006
  52. package/packages/theme-chalk/src/main.scss +664 -664
  53. package/packages/theme-chalk/src/menu.scss +224 -224
  54. package/packages/theme-chalk/src/simplicity-top.scss +1845 -1845
  55. package/packages/theme-chalk/src/simplicity.scss +1403 -1403
  56. package/packages/theme-chalk/src/upload.scss +172 -172
  57. package/packages/tips/src/main.vue +141 -141
  58. package/packages/upload/src/main.vue +13 -1
  59. package/packages/wujie/src/main.vue +146 -146
  60. package/src/index.js +166 -166
  61. package/src/utils/rules.js +18 -18
  62. package/packages/.DS_Store +0 -0
  63. package/packages/calogin/.DS_Store +0 -0
  64. package/packages/date-picker/.DS_Store +0 -0
  65. package/packages/date-picker/src/.DS_Store +0 -0
  66. package/packages/dialog/.DS_Store +0 -0
  67. package/packages/flow/.DS_Store +0 -0
  68. package/packages/flow/src/.DS_Store +0 -0
  69. package/packages/flow-list/.DS_Store +0 -0
  70. package/packages/form/.DS_Store +0 -0
  71. package/packages/icon/.DS_Store +0 -0
  72. package/packages/login/.DS_Store +0 -0
  73. package/packages/main/.DS_Store +0 -0
  74. package/packages/main/src/.DS_Store +0 -0
  75. package/packages/menu/.DS_Store +0 -0
  76. package/packages/select/.DS_Store +0 -0
  77. package/packages/selector/.DS_Store +0 -0
  78. package/packages/selector-panel/.DS_Store +0 -0
  79. package/packages/theme-chalk/src/.DS_Store +0 -0
  80. package/packages/upload/.DS_Store +0 -0
  81. package/src/.DS_Store +0 -0
  82. package/src/utils/.DS_Store +0 -0
@@ -1,412 +1,412 @@
1
- <template>
2
- <span>
3
- <span @click="getCertificate">
4
- <slot></slot>
5
- </span>
6
- </span>
7
- </template>
8
-
9
- <script>
10
- import util from 'eoss-ui/src/utils/util';
11
- import caPlugin from './plugin.js';
12
-
13
- export default {
14
- name: 'EsCaLogin',
15
- props: {
16
- installPath: String,
17
- caModel: {
18
- type: String,
19
- required: true
20
- }, // CA登录方式,JIDA-吉大正元,SHU_GUANG-曙光,SICHUAN-四川
21
- identifyingId: {
22
- type: String,
23
- default() {
24
- return util.uuid(12);
25
- }
26
- },
27
- dllnames: {
28
- type: Array,
29
- default: () => [
30
- 'L3Vzci9saWI2NC9saWJTS0ZBUEkuc28=',
31
- 'bGliU0tGQVBJLWFybTY0LnNv',
32
- 'L3Vzci9saWIvYWFyY2g2NC1saW51eC1nbnUvbGliU0tGQVBJLWFybTY0LnNv',
33
- 'L3Vzci9saWIvbGliU0tGQVBJLnNv',
34
- 'U0tGQVBJMzAwOTIuZGxs',
35
- 'bGliU0tGQVBJLnNv',
36
- 'L29wdC9oYWl0YWkvbGliL2xpYlNLRkFQSS5zbw==',
37
- 'U0tGQVBJNDAwOTcuZGxs'
38
- ]
39
- },
40
- dllname: {
41
- type: Array,
42
- default: () => []
43
- },
44
- success: Function,
45
- // 是否显示证书选择框,默认为true
46
- showSelect: Boolean
47
- },
48
- data() {
49
- return {
50
- userList: [],
51
- signedData: '', //证书原文
52
- b64originData: '', //签名原文
53
- b64SignData: '', //签名结果
54
- idCard: '',
55
- certId: ''
56
- };
57
- },
58
- computed: {
59
- param() {
60
- // 生成不重复的 DLL 名称列表
61
- const dllnames = Array.from(new Set(this.dllnames.concat(this.dllname)));
62
-
63
- return `<?xml version="1.0" encoding="utf-8"?>
64
- <authinfo>
65
- <liblist>
66
- ${dllnames
67
- .map(
68
- (dllname) =>
69
- `<lib type="SKF" version="1.0" dllname="${dllname}"><algid val="SHA1" sm2_hashalg="SM3" /></lib>`
70
- )
71
- .join('')}
72
- </liblist>
73
- </authinfo>`;
74
- }
75
- },
76
- created() {
77
- this.init();
78
- },
79
- mounted() {},
80
- methods: {
81
- init() {
82
- if (!window.PNXClient) {
83
- // 创建 object 元素
84
- const pnxClientElement = document.createElement('object');
85
- pnxClientElement.classid = 'clsid:9DD991F7-6FB0-4004-95A4-0A55006A8C42';
86
- pnxClientElement.width = '0';
87
- pnxClientElement.height = '0';
88
- pnxClientElement.id = 'PNXClient';
89
- pnxClientElement.style.position = 'absolute';
90
- document.body.appendChild(pnxClientElement);
91
- }
92
- },
93
- getCertificate() {
94
- this.$emit('click');
95
- // 检查 PNXClient 是否存在
96
- if (!window.PNXClient) {
97
- this.$message.error('控件加载失败,请刷新页面重试!');
98
- this.$emit('error', { code: 0, msg: '控件加载失败,请刷新页面重试!' });
99
- return;
100
- }
101
- switch (this.caModel) {
102
- //吉大正元:
103
- case 'JIDA':
104
- try {
105
- caPlugin.getVersion();
106
- } catch (e) {
107
- if (this.installPath) {
108
- this.$confirm('未安装控件,请进行安装控件!', '控件下载', {
109
- confirmButtonText: '下载',
110
- cancelButtonText: '取消',
111
- type: 'warning'
112
- })
113
- .then(() => {
114
- util.downloadFile(this.installPath);
115
- })
116
- .catch(() => {});
117
- } else {
118
- this.$message.error('未安装控件,请进行安装控件!');
119
- }
120
- this.$emit('error', {
121
- type: 1,
122
- msg: '未安装控件,请进行安装控件!'
123
- });
124
- return;
125
- }
126
- try {
127
- // 清除之前的过滤器
128
- caPlugin.clearFilter();
129
- // 初始化vctk控件
130
- caPlugin.initialize('', this.param);
131
- // 控制证书为一个时,并且不显示选择框时,不弹出证书选择框
132
- !this.showSelect && caPlugin.setChooseSingleCert(1);
133
-
134
- // 生成签名信息
135
- this.signedData = caPlugin.p7SignString(
136
- this.identifyingId,
137
- true,
138
- true
139
- );
140
-
141
- //获取错误码
142
- const errorCode = Number(caPlugin.getLastError());
143
- if (errorCode !== 0) {
144
- if (errorCode === 3758096386 || errorCode === 2148532334) {
145
- this.$message.error('用户取消操作!');
146
- this.$emit('error', { code: 52, msg: '用户取消操作!' });
147
- return;
148
- } else if (errorCode === -536870815 || errorCode === 3758096481) {
149
- this.$message.error(
150
- '没有找到有效的证书,如果使用的是KEY,请确认已经插入key!'
151
- );
152
- this.$emit('error', {
153
- type: 2,
154
- msg: '没有找到有效的证书,如果使用的是KEY,请确认已经插入key!'
155
- });
156
- return;
157
- } else {
158
- const msg = caPlugin.getLastErrorMessage();
159
- this.$message.error(msg);
160
- this.$emit('error', { code: 3, msg });
161
- return;
162
- }
163
- }
164
- this.success && this.success(this.signedData);
165
- return this.signedData;
166
- } catch (error) {
167
- // 捕获其他可能的异常
168
- this.$message.error(`操作失败: ${error.message}`);
169
- this.$emit('error', { code: 4, msg: error.message });
170
- }
171
- break;
172
- //曙光:
173
- case 'SHU_GUANG':
174
- caPlugin
175
- .getMessage({ action: 'SOF_GetUserList' })
176
- .then((res) => {
177
- const { retCode, retMsg, retValue } = res;
178
- if (!retValue || retCode !== 0) {
179
- this.$message.error(
180
- retCode !== 0 ? retMsg : '未找到证书,请插入证书UKEY!'
181
- );
182
- this.$emit('error', {
183
- type: 2,
184
- msg: retCode !== 0 ? retMsg : '未找到证书,请插入证书UKEY!'
185
- });
186
- return;
187
- }
188
- const userList = retValue.split('&&&');
189
- if (userList.length === 1 && !this.showSelect) {
190
- //如果只有一个证书,并且不显示选择框时,直接获取证书信息
191
- this.certId = userList[0].split('||')[1];
192
- this.getCertInfo(this.certId);
193
- } else {
194
- // 如果有多个证书,弹出选择框
195
- this.userList = userList.map((item) => {
196
- const [name, certId] = item.split('||');
197
- return { label: name, value: certId };
198
- });
199
- this.$prompt('', '证书选择', {
200
- confirmButtonText: '确定',
201
- cancelButtonText: '取消',
202
- inputPattern: /^.+$/,
203
- inputErrorMessage: '请选择证书!',
204
- selectData: this.userList
205
- })
206
- .then((res) => {
207
- this.certId = res.value;
208
- this.getCertInfo(this.certId);
209
- })
210
- .catch(() => {
211
- this.$emit('error', { code: 52, msg: '用户取消操作!' });
212
- });
213
- }
214
- })
215
- .catch((err) => {
216
- if (this.installPath) {
217
- this.$confirm(
218
- '请检查是否安装并启用证书助手控件!',
219
- '控件下载',
220
- {
221
- confirmButtonText: '下载',
222
- cancelButtonText: '取消',
223
- type: 'warning'
224
- }
225
- )
226
- .then(() => {
227
- util.downloadFile(this.installPath);
228
- })
229
- .catch(() => {});
230
- } else {
231
- this.$message.error('请检查是否安装并启用证书助手控件!');
232
- }
233
- this.$emit('error', {
234
- type: 1,
235
- msg: '请检查是否安装并启用证书助手控件!'
236
- });
237
- });
238
- break;
239
- //四川:
240
- case 'SICHUAN':
241
- this.$message.warning('四川CA登录方式对接中!');
242
- this.$emit('error');
243
- break;
244
- }
245
- },
246
- getCertInfo(name) {
247
- caPlugin
248
- .getMessage({ action: 'SOF_ExportUserCert', params: [name] })
249
- .then((res) => {
250
- const { retCode, retMsg, retValue } = res;
251
- if (retCode !== 0) {
252
- this.$message.error(retMsg);
253
- this.$emit('error', { code: retCode, msg: retMsg });
254
- return;
255
- }
256
- //设置证书原文
257
- this.signedData = retValue
258
- .replace('-----BEGIN CERTIFICATE-----', '')
259
- .replace('-----END CERTIFICATE-----', '');
260
- caPlugin
261
- .getMessage({
262
- action: 'SOF_GetCertInfo',
263
- params: [retValue, 'SGD_CERT_SUBJECT_SN']
264
- })
265
- .then((res) => {
266
- const { retCode, retMsg, retValue } = res;
267
- if (retCode !== 0) {
268
- this.$message.error(retMsg);
269
- this.$emit('error', { code: retCode, msg: retMsg });
270
- return;
271
- }
272
- this.idCard = caPlugin.base64Decode(retValue);
273
- caPlugin
274
- .getMessage({
275
- action: 'SOF_GenRandom',
276
- params: [16]
277
- })
278
- .then((res) => {
279
- const { retCode, retMsg, retValue } = res;
280
- if (retCode !== 0) {
281
- this.$message.error(retMsg);
282
- this.$emit('error', { code: retCode, msg: retMsg });
283
- return;
284
- }
285
- this.b64originData = retValue + this.identifyingId;
286
- caPlugin
287
- .getMessage({
288
- action: 'SOF_SignData',
289
- params: [
290
- this.certId,
291
- caPlugin.base64Encode(this.b64originData)
292
- ]
293
- })
294
- .then((res) => {
295
- const { retCode, retMsg, retValue } = res;
296
- if (retCode !== 0) {
297
- if (retCode === 184550659) {
298
- this.cerLogin();
299
- } else {
300
- this.$message.error(retMsg);
301
- this.$emit('error', { code: retCode, msg: retMsg });
302
- }
303
- return;
304
- }
305
- this.b64SignData = retValue;
306
- this.success &&
307
- this.success({
308
- identifyingId: this.identifyingId,
309
- signedData: this.signedData, //证书原文
310
- b64originData: this.b64originData, //签名原文
311
- b64SignData: this.b64SignData, //签名结果
312
- idCard: this.idCard,
313
- certId: this.certId
314
- });
315
- })
316
- .catch((err) => {
317
- this.$emit('error', { code: 5, msg: err });
318
- });
319
- })
320
- .catch((err) => {
321
- this.$emit('error', { code: 6, msg: err });
322
- });
323
- })
324
- .catch((err) => {
325
- this.$emit('error', { code: 7, msg: err });
326
- });
327
- })
328
- .catch((err) => {
329
- this.$emit('error', { code: 8, msg: err });
330
- });
331
- },
332
- cerLogin(title = '提示') {
333
- this.$prompt('输入密码', title, {
334
- confirmButtonText: '确定',
335
- cancelButtonText: '取消',
336
- inputPattern: /^[[\x21-\x7E]{6,16}$/,
337
- inputErrorMessage: '请输入密码'
338
- })
339
- .then(({ value }) => {
340
- caPlugin
341
- .getMessage({
342
- action: 'SOF_Login',
343
- params: [this.certId, value]
344
- })
345
- .then((res) => {
346
- const { retCode, retMsg, retValue } = res;
347
- if (retCode !== 0 || retValue === false) {
348
- if (retValue === false) {
349
- caPlugin
350
- .getMessage({
351
- action: 'SOF_GetPinRetryCount',
352
- params: [this.certId]
353
- })
354
- .then((res) => {
355
- const { retValue } = res;
356
- this.cerLogin(
357
- `登录失败!剩余口令重试次数:${retValue}次`
358
- );
359
- });
360
- return;
361
- }
362
- this.$message.error(retMsg);
363
- this.$emit('error', { code: retCode, msg: retMsg });
364
- return;
365
- }
366
- caPlugin
367
- .getMessage({
368
- action: 'SOF_SignData',
369
- params: [
370
- this.certId,
371
- caPlugin.base64Encode(this.b64originData)
372
- ]
373
- })
374
- .then((res) => {
375
- const { retCode, retMsg, retValue } = res;
376
- if (retCode !== 0) {
377
- if (retCode === 184550659) {
378
- this.cerLogin();
379
- } else {
380
- this.$message.error(retMsg);
381
- this.$emit('error', { code: retCode, msg: retMsg });
382
- }
383
- return;
384
- }
385
- this.b64SignData = retValue;
386
- this.success &&
387
- this.success({
388
- identifyingId: this.identifyingId,
389
- signedData: this.signedData, //证书原文
390
- b64originData: this.b64originData, //签名原文
391
- b64SignData: this.b64SignData, //签名结果
392
- idCard: this.idCard,
393
- certId: this.certId
394
- });
395
- })
396
- .catch((err) => {
397
- this.$emit('error', { code: 9, msg: err });
398
- });
399
- })
400
- .catch(() => {
401
- this.$emit('error', { code: 10, msg: err });
402
- });
403
- })
404
- .catch(() => {
405
- this.$emit('error', { code: 11, msg: err });
406
- });
407
- }
408
- }
409
- };
410
- </script>
411
-
412
- <style scoped></style>
1
+ <template>
2
+ <span>
3
+ <span @click="getCertificate">
4
+ <slot></slot>
5
+ </span>
6
+ </span>
7
+ </template>
8
+
9
+ <script>
10
+ import util from 'eoss-ui/src/utils/util';
11
+ import caPlugin from './plugin.js';
12
+
13
+ export default {
14
+ name: 'EsCaLogin',
15
+ props: {
16
+ installPath: String,
17
+ caModel: {
18
+ type: String,
19
+ required: true
20
+ }, // CA登录方式,JIDA-吉大正元,SHU_GUANG-曙光,SICHUAN-四川
21
+ identifyingId: {
22
+ type: String,
23
+ default() {
24
+ return util.uuid(12);
25
+ }
26
+ },
27
+ dllnames: {
28
+ type: Array,
29
+ default: () => [
30
+ 'L3Vzci9saWI2NC9saWJTS0ZBUEkuc28=',
31
+ 'bGliU0tGQVBJLWFybTY0LnNv',
32
+ 'L3Vzci9saWIvYWFyY2g2NC1saW51eC1nbnUvbGliU0tGQVBJLWFybTY0LnNv',
33
+ 'L3Vzci9saWIvbGliU0tGQVBJLnNv',
34
+ 'U0tGQVBJMzAwOTIuZGxs',
35
+ 'bGliU0tGQVBJLnNv',
36
+ 'L29wdC9oYWl0YWkvbGliL2xpYlNLRkFQSS5zbw==',
37
+ 'U0tGQVBJNDAwOTcuZGxs'
38
+ ]
39
+ },
40
+ dllname: {
41
+ type: Array,
42
+ default: () => []
43
+ },
44
+ success: Function,
45
+ // 是否显示证书选择框,默认为true
46
+ showSelect: Boolean
47
+ },
48
+ data() {
49
+ return {
50
+ userList: [],
51
+ signedData: '', //证书原文
52
+ b64originData: '', //签名原文
53
+ b64SignData: '', //签名结果
54
+ idCard: '',
55
+ certId: ''
56
+ };
57
+ },
58
+ computed: {
59
+ param() {
60
+ // 生成不重复的 DLL 名称列表
61
+ const dllnames = Array.from(new Set(this.dllnames.concat(this.dllname)));
62
+
63
+ return `<?xml version="1.0" encoding="utf-8"?>
64
+ <authinfo>
65
+ <liblist>
66
+ ${dllnames
67
+ .map(
68
+ (dllname) =>
69
+ `<lib type="SKF" version="1.0" dllname="${dllname}"><algid val="SHA1" sm2_hashalg="SM3" /></lib>`
70
+ )
71
+ .join('')}
72
+ </liblist>
73
+ </authinfo>`;
74
+ }
75
+ },
76
+ created() {
77
+ this.init();
78
+ },
79
+ mounted() {},
80
+ methods: {
81
+ init() {
82
+ if (!window.PNXClient) {
83
+ // 创建 object 元素
84
+ const pnxClientElement = document.createElement('object');
85
+ pnxClientElement.classid = 'clsid:9DD991F7-6FB0-4004-95A4-0A55006A8C42';
86
+ pnxClientElement.width = '0';
87
+ pnxClientElement.height = '0';
88
+ pnxClientElement.id = 'PNXClient';
89
+ pnxClientElement.style.position = 'absolute';
90
+ document.body.appendChild(pnxClientElement);
91
+ }
92
+ },
93
+ getCertificate() {
94
+ this.$emit('click');
95
+ // 检查 PNXClient 是否存在
96
+ if (!window.PNXClient) {
97
+ this.$message.error('控件加载失败,请刷新页面重试!');
98
+ this.$emit('error', { code: 0, msg: '控件加载失败,请刷新页面重试!' });
99
+ return;
100
+ }
101
+ switch (this.caModel) {
102
+ //吉大正元:
103
+ case 'JIDA':
104
+ try {
105
+ caPlugin.getVersion();
106
+ } catch (e) {
107
+ if (this.installPath) {
108
+ this.$confirm('未安装控件,请进行安装控件!', '控件下载', {
109
+ confirmButtonText: '下载',
110
+ cancelButtonText: '取消',
111
+ type: 'warning'
112
+ })
113
+ .then(() => {
114
+ util.downloadFile(this.installPath);
115
+ })
116
+ .catch(() => {});
117
+ } else {
118
+ this.$message.error('未安装控件,请进行安装控件!');
119
+ }
120
+ this.$emit('error', {
121
+ type: 1,
122
+ msg: '未安装控件,请进行安装控件!'
123
+ });
124
+ return;
125
+ }
126
+ try {
127
+ // 清除之前的过滤器
128
+ caPlugin.clearFilter();
129
+ // 初始化vctk控件
130
+ caPlugin.initialize('', this.param);
131
+ // 控制证书为一个时,并且不显示选择框时,不弹出证书选择框
132
+ !this.showSelect && caPlugin.setChooseSingleCert(1);
133
+
134
+ // 生成签名信息
135
+ this.signedData = caPlugin.p7SignString(
136
+ this.identifyingId,
137
+ true,
138
+ true
139
+ );
140
+
141
+ //获取错误码
142
+ const errorCode = Number(caPlugin.getLastError());
143
+ if (errorCode !== 0) {
144
+ if (errorCode === 3758096386 || errorCode === 2148532334) {
145
+ this.$message.error('用户取消操作!');
146
+ this.$emit('error', { code: 52, msg: '用户取消操作!' });
147
+ return;
148
+ } else if (errorCode === -536870815 || errorCode === 3758096481) {
149
+ this.$message.error(
150
+ '没有找到有效的证书,如果使用的是KEY,请确认已经插入key!'
151
+ );
152
+ this.$emit('error', {
153
+ type: 2,
154
+ msg: '没有找到有效的证书,如果使用的是KEY,请确认已经插入key!'
155
+ });
156
+ return;
157
+ } else {
158
+ const msg = caPlugin.getLastErrorMessage();
159
+ this.$message.error(msg);
160
+ this.$emit('error', { code: 3, msg });
161
+ return;
162
+ }
163
+ }
164
+ this.success && this.success(this.signedData);
165
+ return this.signedData;
166
+ } catch (error) {
167
+ // 捕获其他可能的异常
168
+ this.$message.error(`操作失败: ${error.message}`);
169
+ this.$emit('error', { code: 4, msg: error.message });
170
+ }
171
+ break;
172
+ //曙光:
173
+ case 'SHU_GUANG':
174
+ caPlugin
175
+ .getMessage({ action: 'SOF_GetUserList' })
176
+ .then((res) => {
177
+ const { retCode, retMsg, retValue } = res;
178
+ if (!retValue || retCode !== 0) {
179
+ this.$message.error(
180
+ retCode !== 0 ? retMsg : '未找到证书,请插入证书UKEY!'
181
+ );
182
+ this.$emit('error', {
183
+ type: 2,
184
+ msg: retCode !== 0 ? retMsg : '未找到证书,请插入证书UKEY!'
185
+ });
186
+ return;
187
+ }
188
+ const userList = retValue.split('&&&');
189
+ if (userList.length === 1 && !this.showSelect) {
190
+ //如果只有一个证书,并且不显示选择框时,直接获取证书信息
191
+ this.certId = userList[0].split('||')[1];
192
+ this.getCertInfo(this.certId);
193
+ } else {
194
+ // 如果有多个证书,弹出选择框
195
+ this.userList = userList.map((item) => {
196
+ const [name, certId] = item.split('||');
197
+ return { label: name, value: certId };
198
+ });
199
+ this.$prompt('', '证书选择', {
200
+ confirmButtonText: '确定',
201
+ cancelButtonText: '取消',
202
+ inputPattern: /^.+$/,
203
+ inputErrorMessage: '请选择证书!',
204
+ selectData: this.userList
205
+ })
206
+ .then((res) => {
207
+ this.certId = res.value;
208
+ this.getCertInfo(this.certId);
209
+ })
210
+ .catch(() => {
211
+ this.$emit('error', { code: 52, msg: '用户取消操作!' });
212
+ });
213
+ }
214
+ })
215
+ .catch((err) => {
216
+ if (this.installPath) {
217
+ this.$confirm(
218
+ '请检查是否安装并启用证书助手控件!',
219
+ '控件下载',
220
+ {
221
+ confirmButtonText: '下载',
222
+ cancelButtonText: '取消',
223
+ type: 'warning'
224
+ }
225
+ )
226
+ .then(() => {
227
+ util.downloadFile(this.installPath);
228
+ })
229
+ .catch(() => {});
230
+ } else {
231
+ this.$message.error('请检查是否安装并启用证书助手控件!');
232
+ }
233
+ this.$emit('error', {
234
+ type: 1,
235
+ msg: '请检查是否安装并启用证书助手控件!'
236
+ });
237
+ });
238
+ break;
239
+ //四川:
240
+ case 'SICHUAN':
241
+ this.$message.warning('四川CA登录方式对接中!');
242
+ this.$emit('error');
243
+ break;
244
+ }
245
+ },
246
+ getCertInfo(name) {
247
+ caPlugin
248
+ .getMessage({ action: 'SOF_ExportUserCert', params: [name] })
249
+ .then((res) => {
250
+ const { retCode, retMsg, retValue } = res;
251
+ if (retCode !== 0) {
252
+ this.$message.error(retMsg);
253
+ this.$emit('error', { code: retCode, msg: retMsg });
254
+ return;
255
+ }
256
+ //设置证书原文
257
+ this.signedData = retValue
258
+ .replace('-----BEGIN CERTIFICATE-----', '')
259
+ .replace('-----END CERTIFICATE-----', '');
260
+ caPlugin
261
+ .getMessage({
262
+ action: 'SOF_GetCertInfo',
263
+ params: [retValue, 'SGD_CERT_SUBJECT_SN']
264
+ })
265
+ .then((res) => {
266
+ const { retCode, retMsg, retValue } = res;
267
+ if (retCode !== 0) {
268
+ this.$message.error(retMsg);
269
+ this.$emit('error', { code: retCode, msg: retMsg });
270
+ return;
271
+ }
272
+ this.idCard = caPlugin.base64Decode(retValue);
273
+ caPlugin
274
+ .getMessage({
275
+ action: 'SOF_GenRandom',
276
+ params: [16]
277
+ })
278
+ .then((res) => {
279
+ const { retCode, retMsg, retValue } = res;
280
+ if (retCode !== 0) {
281
+ this.$message.error(retMsg);
282
+ this.$emit('error', { code: retCode, msg: retMsg });
283
+ return;
284
+ }
285
+ this.b64originData = retValue + this.identifyingId;
286
+ caPlugin
287
+ .getMessage({
288
+ action: 'SOF_SignData',
289
+ params: [
290
+ this.certId,
291
+ caPlugin.base64Encode(this.b64originData)
292
+ ]
293
+ })
294
+ .then((res) => {
295
+ const { retCode, retMsg, retValue } = res;
296
+ if (retCode !== 0) {
297
+ if (retCode === 184550659) {
298
+ this.cerLogin();
299
+ } else {
300
+ this.$message.error(retMsg);
301
+ this.$emit('error', { code: retCode, msg: retMsg });
302
+ }
303
+ return;
304
+ }
305
+ this.b64SignData = retValue;
306
+ this.success &&
307
+ this.success({
308
+ identifyingId: this.identifyingId,
309
+ signedData: this.signedData, //证书原文
310
+ b64originData: this.b64originData, //签名原文
311
+ b64SignData: this.b64SignData, //签名结果
312
+ idCard: this.idCard,
313
+ certId: this.certId
314
+ });
315
+ })
316
+ .catch((err) => {
317
+ this.$emit('error', { code: 5, msg: err });
318
+ });
319
+ })
320
+ .catch((err) => {
321
+ this.$emit('error', { code: 6, msg: err });
322
+ });
323
+ })
324
+ .catch((err) => {
325
+ this.$emit('error', { code: 7, msg: err });
326
+ });
327
+ })
328
+ .catch((err) => {
329
+ this.$emit('error', { code: 8, msg: err });
330
+ });
331
+ },
332
+ cerLogin(title = '提示') {
333
+ this.$prompt('输入密码', title, {
334
+ confirmButtonText: '确定',
335
+ cancelButtonText: '取消',
336
+ inputPattern: /^[[\x21-\x7E]{6,16}$/,
337
+ inputErrorMessage: '请输入密码'
338
+ })
339
+ .then(({ value }) => {
340
+ caPlugin
341
+ .getMessage({
342
+ action: 'SOF_Login',
343
+ params: [this.certId, value]
344
+ })
345
+ .then((res) => {
346
+ const { retCode, retMsg, retValue } = res;
347
+ if (retCode !== 0 || retValue === false) {
348
+ if (retValue === false) {
349
+ caPlugin
350
+ .getMessage({
351
+ action: 'SOF_GetPinRetryCount',
352
+ params: [this.certId]
353
+ })
354
+ .then((res) => {
355
+ const { retValue } = res;
356
+ this.cerLogin(
357
+ `登录失败!剩余口令重试次数:${retValue}次`
358
+ );
359
+ });
360
+ return;
361
+ }
362
+ this.$message.error(retMsg);
363
+ this.$emit('error', { code: retCode, msg: retMsg });
364
+ return;
365
+ }
366
+ caPlugin
367
+ .getMessage({
368
+ action: 'SOF_SignData',
369
+ params: [
370
+ this.certId,
371
+ caPlugin.base64Encode(this.b64originData)
372
+ ]
373
+ })
374
+ .then((res) => {
375
+ const { retCode, retMsg, retValue } = res;
376
+ if (retCode !== 0) {
377
+ if (retCode === 184550659) {
378
+ this.cerLogin();
379
+ } else {
380
+ this.$message.error(retMsg);
381
+ this.$emit('error', { code: retCode, msg: retMsg });
382
+ }
383
+ return;
384
+ }
385
+ this.b64SignData = retValue;
386
+ this.success &&
387
+ this.success({
388
+ identifyingId: this.identifyingId,
389
+ signedData: this.signedData, //证书原文
390
+ b64originData: this.b64originData, //签名原文
391
+ b64SignData: this.b64SignData, //签名结果
392
+ idCard: this.idCard,
393
+ certId: this.certId
394
+ });
395
+ })
396
+ .catch((err) => {
397
+ this.$emit('error', { code: 9, msg: err });
398
+ });
399
+ })
400
+ .catch(() => {
401
+ this.$emit('error', { code: 10, msg: err });
402
+ });
403
+ })
404
+ .catch(() => {
405
+ this.$emit('error', { code: 11, msg: err });
406
+ });
407
+ }
408
+ }
409
+ };
410
+ </script>
411
+
412
+ <style scoped></style>