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