eoss-ui 0.8.41 → 0.8.42

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 (80) hide show
  1. package/lib/eoss-ui.common.js +191 -159
  2. package/lib/flow.js +128 -128
  3. package/lib/index.js +1 -1
  4. package/lib/main.js +5 -5
  5. package/lib/selector.js +52 -20
  6. package/package.json +1 -1
  7. package/packages/.DS_Store +0 -0
  8. package/packages/button-group/src/main.vue +346 -346
  9. package/packages/calogin/.DS_Store +0 -0
  10. package/packages/calogin/src/main.vue +412 -412
  11. package/packages/clients/src/main.vue +151 -151
  12. package/packages/date-picker/.DS_Store +0 -0
  13. package/packages/date-picker/src/.DS_Store +0 -0
  14. package/packages/dialog/.DS_Store +0 -0
  15. package/packages/flow/.DS_Store +0 -0
  16. package/packages/flow/src/.DS_Store +0 -0
  17. package/packages/flow/src/component/CustomPreset.vue +326 -326
  18. package/packages/flow/src/component/FileList.vue +97 -97
  19. package/packages/flow/src/component/SendMsg.vue +242 -242
  20. package/packages/flow/src/component/SortFlow.vue +110 -110
  21. package/packages/flow/src/form.vue +123 -123
  22. package/packages/flow/src/freeStartFlow.vue +2902 -2902
  23. package/packages/flow/src/processForm.vue +2032 -2032
  24. package/packages/flow/src/processReject.vue +323 -323
  25. package/packages/flow/src/table.vue +58 -58
  26. package/packages/flow-list/.DS_Store +0 -0
  27. package/packages/form/.DS_Store +0 -0
  28. package/packages/form/src/table.vue +1512 -1512
  29. package/packages/icon/.DS_Store +0 -0
  30. package/packages/icon/src/main.vue +104 -104
  31. package/packages/login/.DS_Store +0 -0
  32. package/packages/login/src/resetPassword.vue +557 -557
  33. package/packages/main/.DS_Store +0 -0
  34. package/packages/main/src/.DS_Store +0 -0
  35. package/packages/main/src/public/online.vue +89 -89
  36. package/packages/main/src/public/search.vue +464 -464
  37. package/packages/main/src/public/settings.vue +273 -273
  38. package/packages/main/src/simplicity/apps.vue +388 -388
  39. package/packages/main/src/simplicity/avatar.vue +82 -82
  40. package/packages/main/src/simplicity/handler.vue +158 -158
  41. package/packages/main/src/simplicity/menu-list.vue +135 -135
  42. package/packages/main/src/simplicity/message.vue +293 -293
  43. package/packages/main/src/simplicity/notice.vue +222 -222
  44. package/packages/main/src/simplicity/sub-menu.vue +276 -276
  45. package/packages/main/src/simplicity/user.vue +259 -259
  46. package/packages/main/src/simplicityTop/apps.vue +388 -388
  47. package/packages/main/src/simplicityTop/avatar.vue +82 -82
  48. package/packages/main/src/simplicityTop/handler.vue +215 -215
  49. package/packages/main/src/simplicityTop/lists.vue +84 -84
  50. package/packages/main/src/simplicityTop/menu-list.vue +135 -135
  51. package/packages/main/src/simplicityTop/message.vue +293 -293
  52. package/packages/main/src/simplicityTop/notice.vue +222 -222
  53. package/packages/main/src/simplicityTop/router-page.vue +45 -45
  54. package/packages/main/src/simplicityTop/sub-menu.vue +274 -274
  55. package/packages/main/src/simplicityTop/user.vue +259 -259
  56. package/packages/menu/.DS_Store +0 -0
  57. package/packages/nav/src/main.vue +351 -351
  58. package/packages/select/.DS_Store +0 -0
  59. package/packages/selector/.DS_Store +0 -0
  60. package/packages/selector/src/main.vue +36 -17
  61. package/packages/selector-panel/.DS_Store +0 -0
  62. package/packages/selector-panel/src/selection.vue +174 -174
  63. package/packages/switch/src/main.vue +170 -170
  64. package/packages/theme-chalk/src/.DS_Store +0 -0
  65. package/packages/theme-chalk/src/data-table.scss +297 -297
  66. package/packages/theme-chalk/src/handler.scss +148 -148
  67. package/packages/theme-chalk/src/icon.scss +3452 -3452
  68. package/packages/theme-chalk/src/login.scss +1006 -1006
  69. package/packages/theme-chalk/src/main.scss +664 -664
  70. package/packages/theme-chalk/src/menu.scss +224 -224
  71. package/packages/theme-chalk/src/simplicity-top.scss +1845 -1845
  72. package/packages/theme-chalk/src/simplicity.scss +1403 -1403
  73. package/packages/theme-chalk/src/upload.scss +172 -172
  74. package/packages/tips/src/main.vue +141 -141
  75. package/packages/upload/.DS_Store +0 -0
  76. package/packages/wujie/src/main.vue +146 -146
  77. package/src/.DS_Store +0 -0
  78. package/src/index.js +166 -166
  79. package/src/utils/.DS_Store +0 -0
  80. package/src/utils/rules.js +18 -18
@@ -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>