unify-external-plugin-platform 0.0.2-70 → 0.0.2-72
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.
- package/dist/external-plugin.common.js +506 -540
- package/dist/external-plugin.umd.js +506 -540
- package/dist/external-plugin.umd.min.js +3 -4
- package/package.json +1 -1
- package/vue.config.js +8 -0
- package/dist/external-plugin.common.js.map +0 -1
- package/dist/external-plugin.umd.js.map +0 -1
- package/dist/external-plugin.umd.min.js.map +0 -1
@@ -82621,8 +82621,8 @@ zs_empty.install = Vue => {
|
|
82621
82621
|
Vue.component(zs_empty.name, zs_empty);
|
82622
82622
|
};
|
82623
82623
|
/* harmony default export */ var packages_zs_empty = (zs_empty);
|
82624
|
-
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-85.use[1]!./node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[4]!./node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/id-card-reader/id-card-reader-demo/src/id-card-reader-demo.vue?vue&type=template&id=
|
82625
|
-
var
|
82624
|
+
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-85.use[1]!./node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[4]!./node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/id-card-reader/id-card-reader-demo/src/id-card-reader-demo.vue?vue&type=template&id=3d89866c&scoped=true&
|
82625
|
+
var id_card_reader_demovue_type_template_id_3d89866c_scoped_true_render = function render() {
|
82626
82626
|
var _vm = this,
|
82627
82627
|
_c = _vm._self._c;
|
82628
82628
|
return _vm.tip ? _c('el-tooltip', {
|
@@ -82663,7 +82663,7 @@ var id_card_reader_demovue_type_template_id_e321b460_scoped_true_render = functi
|
|
82663
82663
|
return [_vm._v(_vm._s(_vm.label))];
|
82664
82664
|
})], 2);
|
82665
82665
|
};
|
82666
|
-
var
|
82666
|
+
var id_card_reader_demovue_type_template_id_3d89866c_scoped_true_staticRenderFns = [];
|
82667
82667
|
|
82668
82668
|
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.push.js
|
82669
82669
|
var es_array_push = __webpack_require__(7658);
|
@@ -82738,26 +82738,26 @@ var es_array_push = __webpack_require__(7658);
|
|
82738
82738
|
/** 身份证信息 */
|
82739
82739
|
info: {
|
82740
82740
|
/** 姓名 */
|
82741
|
-
name: '
|
82741
|
+
name: '',
|
82742
82742
|
/** 性别 */
|
82743
|
-
sex: '
|
82743
|
+
sex: '',
|
82744
82744
|
/** 民族 */
|
82745
|
-
nation: '
|
82745
|
+
nation: '',
|
82746
82746
|
/** 出生日期 */
|
82747
|
-
birthday: '
|
82747
|
+
birthday: '',
|
82748
82748
|
/** 地址 */
|
82749
|
-
address: '
|
82749
|
+
address: '',
|
82750
82750
|
/** 证件号码 */
|
82751
|
-
cardId: '
|
82751
|
+
cardId: '',
|
82752
82752
|
/** 签发机关 */
|
82753
|
-
police: '
|
82753
|
+
police: '',
|
82754
82754
|
/** 有效期开始 */
|
82755
|
-
validStart: '
|
82755
|
+
validStart: '',
|
82756
82756
|
/** 有效期结束 */
|
82757
|
-
validEnd: '
|
82757
|
+
validEnd: ''
|
82758
82758
|
},
|
82759
82759
|
/** 身份证照片 */
|
82760
|
-
headImage: 'data:image/jpeg;base64,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KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/9k='
|
82760
|
+
headImage: ''
|
82761
82761
|
};
|
82762
82762
|
this.$emit('click', readData);
|
82763
82763
|
}
|
@@ -82775,11 +82775,11 @@ var es_array_push = __webpack_require__(7658);
|
|
82775
82775
|
;
|
82776
82776
|
var id_card_reader_demo_component = normalizeComponent(
|
82777
82777
|
src_id_card_reader_demovue_type_script_lang_js_,
|
82778
|
-
|
82779
|
-
|
82778
|
+
id_card_reader_demovue_type_template_id_3d89866c_scoped_true_render,
|
82779
|
+
id_card_reader_demovue_type_template_id_3d89866c_scoped_true_staticRenderFns,
|
82780
82780
|
false,
|
82781
82781
|
null,
|
82782
|
-
"
|
82782
|
+
"3d89866c",
|
82783
82783
|
null
|
82784
82784
|
|
82785
82785
|
)
|
@@ -85004,50 +85004,45 @@ class UdsPluginSocketService {
|
|
85004
85004
|
_defineProperty(UdsPluginSocketService, "scannerCameraUrl", 'ws://127.0.0.1:8341');
|
85005
85005
|
_defineProperty(UdsPluginSocketService, "ws", void 0);
|
85006
85006
|
_defineProperty(UdsPluginSocketService, "requestStore", []);
|
85007
|
-
;// CONCATENATED MODULE: ./packages/service/external-plugins/
|
85007
|
+
;// CONCATENATED MODULE: ./packages/service/external-plugins/wei-rong-plugin-socket.service.ts
|
85008
85008
|
|
85009
85009
|
|
85010
|
-
/**
|
85011
|
-
* 沃斯德人证交互终端
|
85012
|
-
* E窗通WEBSOCKET服务
|
85013
|
-
*
|
85014
|
-
* */
|
85015
85010
|
|
85016
|
-
|
85017
|
-
|
85018
|
-
|
85019
|
-
|
85011
|
+
/**
|
85012
|
+
* @author: lvcy
|
85013
|
+
* @date: 2024-03-22
|
85014
|
+
* @description:国产客户端,硬件对接
|
85015
|
+
*/
|
85016
|
+
var WEIRONGMethodCode;
|
85017
|
+
(function (WEIRONGMethodCode) {
|
85018
|
+
/** 读卡 */
|
85019
|
+
WEIRONGMethodCode["ReadCard_Base64"] = "ReadCard_Base64";
|
85020
|
+
/** 开始签名*/
|
85021
|
+
WEIRONGMethodCode["StartSignName"] = "StartSignName";
|
85022
|
+
/** 获取签名状态*/
|
85023
|
+
WEIRONGMethodCode["GetSignNameStatus"] = "GetSignNameStatus";
|
85020
85024
|
/** 获取签名*/
|
85021
|
-
|
85022
|
-
/** 读取二代身份证 */
|
85023
|
-
EWindowPassMethodCode["ReadIDCard_Base64"] = "ReadIDCard_Base64";
|
85025
|
+
WEIRONGMethodCode["GetSignName_Base64"] = "GetSignName_Base64";
|
85024
85026
|
/** 人证比对 */
|
85025
|
-
|
85026
|
-
/**
|
85027
|
-
|
85028
|
-
|
85029
|
-
|
85030
|
-
|
85031
|
-
|
85032
|
-
[
|
85033
|
-
[
|
85034
|
-
[
|
85027
|
+
WEIRONGMethodCode["FaceValidateWithIdCard_Base64"] = "FaceValidateWithIdCard_Base64";
|
85028
|
+
/** 打开高拍仪器*/
|
85029
|
+
WEIRONGMethodCode["TurnOnTheCamera"] = "TurnOnTheCamera";
|
85030
|
+
/** 拍照*/
|
85031
|
+
WEIRONGMethodCode["ScannerCamera"] = "ScannerCamera";
|
85032
|
+
})(WEIRONGMethodCode || (WEIRONGMethodCode = {}));
|
85033
|
+
const WEIRONGMethodDesc = {
|
85034
|
+
[WEIRONGMethodCode.ReadCard_Base64]: '读卡',
|
85035
|
+
[WEIRONGMethodCode.GetSignName_Base64]: '获取签名',
|
85036
|
+
[WEIRONGMethodCode.FaceValidateWithIdCard_Base64]: '人证比对'
|
85035
85037
|
};
|
85036
|
-
class
|
85038
|
+
class WeiRongPluginService {
|
85037
85039
|
static startConnect(method) {
|
85038
|
-
|
85040
|
+
console.log('startConnect', method, this.ws?.readyState, WebSocket.CONNECTING);
|
85041
|
+
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
|
85039
85042
|
return this;
|
85040
85043
|
}
|
85041
|
-
|
85042
|
-
|
85043
|
-
case EWindowPassMethodCode.FingerPrint_Base64:
|
85044
|
-
webSocketUrl = this.fingerPrintBasWebSocketUrl;
|
85045
|
-
break;
|
85046
|
-
default:
|
85047
|
-
webSocketUrl = this.iReadCardBasWebSocketUrl;
|
85048
|
-
break;
|
85049
|
-
}
|
85050
|
-
const ws = new WebSocket(webSocketUrl);
|
85044
|
+
console.log('重新链接');
|
85045
|
+
const ws = new WebSocket(this.webSocketUrl);
|
85051
85046
|
let resolved;
|
85052
85047
|
const onConnect = new Promise(resolve => {
|
85053
85048
|
resolved = resolve;
|
@@ -85056,15 +85051,6 @@ class EWindowPassService {
|
|
85056
85051
|
resolved(true);
|
85057
85052
|
};
|
85058
85053
|
ws.onmessage = event => {
|
85059
|
-
if (method === EWindowPassMethodCode.FingerPrint_Base64) {
|
85060
|
-
// 指纹后端返回的是string
|
85061
|
-
event = {
|
85062
|
-
...event,
|
85063
|
-
data: JSON.stringify({
|
85064
|
-
fingerPrintInfo: event.data
|
85065
|
-
})
|
85066
|
-
};
|
85067
|
-
}
|
85068
85054
|
this.handleMessage(event);
|
85069
85055
|
};
|
85070
85056
|
ws.onclose = () => this.handleClose();
|
@@ -85080,7 +85066,7 @@ class EWindowPassService {
|
|
85080
85066
|
reject('handleError');
|
85081
85067
|
});
|
85082
85068
|
}
|
85083
|
-
throw Error('
|
85069
|
+
throw Error('设备功能加载失败');
|
85084
85070
|
}
|
85085
85071
|
static handleClose() {
|
85086
85072
|
for (const type in this.requestStore) {
|
@@ -85098,61 +85084,73 @@ class EWindowPassService {
|
|
85098
85084
|
} catch (e) {
|
85099
85085
|
data = '';
|
85100
85086
|
}
|
85101
|
-
|
85102
|
-
|
85103
|
-
|
85104
|
-
|
85105
|
-
|
85106
|
-
|
85107
|
-
|
85087
|
+
if (data.method === 'FaceScreenStream' || data.method === 'VideoStream') {
|
85088
|
+
const event = new ScannerCameraRefreshPhotoEvent(data.imgBase64);
|
85089
|
+
return window.dispatchEvent(event);
|
85090
|
+
} else {
|
85091
|
+
this.requestStore.forEach(({
|
85092
|
+
resolve
|
85093
|
+
}) => {
|
85094
|
+
resolve(data);
|
85095
|
+
});
|
85096
|
+
this.requestStore = [];
|
85097
|
+
}
|
85108
85098
|
}
|
85109
85099
|
static async read(method) {
|
85110
85100
|
await this.startConnect(method);
|
85111
|
-
const methodDesc =
|
85101
|
+
const methodDesc = WEIRONGMethodDesc[method];
|
85112
85102
|
if (this.ws.readyState === 1) {
|
85113
|
-
if (method !== EWindowPassMethodCode.FingerPrint_Base64) console.log(methodDesc + '连接成功');
|
85114
85103
|
let jsonString;
|
85115
|
-
// outTimes:超时时间(秒)
|
85116
85104
|
switch (method) {
|
85117
|
-
case
|
85118
|
-
// cardReader:0 读卡器-USB;1 读卡器-COM
|
85105
|
+
case WEIRONGMethodCode.ReadCard_Base64:
|
85119
85106
|
jsonString = JSON.stringify({
|
85120
|
-
method,
|
85107
|
+
method: 'ReadIDCard_Base64',
|
85121
85108
|
args: {
|
85122
85109
|
outTimes: 30,
|
85123
|
-
cardReader:
|
85110
|
+
cardReader: 0
|
85124
85111
|
}
|
85125
85112
|
});
|
85126
85113
|
break;
|
85127
|
-
case
|
85128
|
-
// cardReader:0 读卡器-USB;1 读卡器-COM
|
85114
|
+
case WEIRONGMethodCode.FaceValidateWithIdCard_Base64:
|
85129
85115
|
jsonString = JSON.stringify({
|
85130
|
-
method,
|
85116
|
+
method: 'FaceValidateWithIdCard_Base64',
|
85131
85117
|
args: {
|
85132
85118
|
outTimes: 30,
|
85133
|
-
|
85134
|
-
cameraType: 0
|
85119
|
+
score: 75
|
85135
85120
|
}
|
85136
85121
|
});
|
85137
85122
|
break;
|
85138
|
-
case
|
85139
|
-
// icType:1接触卡;2非接触卡;3自动(接触优先);4自动(非接优先)
|
85123
|
+
case WEIRONGMethodCode.StartSignName:
|
85140
85124
|
jsonString = JSON.stringify({
|
85141
|
-
method,
|
85125
|
+
method: 'SignNameScreen_Start',
|
85142
85126
|
args: {
|
85143
|
-
|
85127
|
+
outTimes: 30
|
85144
85128
|
}
|
85145
85129
|
});
|
85146
85130
|
break;
|
85147
|
-
case
|
85148
|
-
|
85149
|
-
|
85131
|
+
case WEIRONGMethodCode.GetSignNameStatus:
|
85132
|
+
jsonString = JSON.stringify({
|
85133
|
+
method: 'SignNameScreen_Status',
|
85134
|
+
args: {}
|
85135
|
+
});
|
85150
85136
|
break;
|
85151
|
-
|
85137
|
+
case WEIRONGMethodCode.GetSignName_Base64:
|
85152
85138
|
jsonString = JSON.stringify({
|
85153
|
-
method,
|
85139
|
+
method: 'SignNameScreen_Get',
|
85140
|
+
args: {}
|
85141
|
+
});
|
85142
|
+
break;
|
85143
|
+
case WEIRONGMethodCode.TurnOnTheCamera:
|
85144
|
+
jsonString = JSON.stringify({
|
85145
|
+
method: 'VideoStart',
|
85146
|
+
args: {}
|
85147
|
+
});
|
85148
|
+
break;
|
85149
|
+
case WEIRONGMethodCode.ScannerCamera:
|
85150
|
+
jsonString = JSON.stringify({
|
85151
|
+
method: 'GetCameraImage',
|
85154
85152
|
args: {
|
85155
|
-
|
85153
|
+
imagePath: ''
|
85156
85154
|
}
|
85157
85155
|
});
|
85158
85156
|
break;
|
@@ -85171,441 +85169,99 @@ class EWindowPassService {
|
|
85171
85169
|
throw Error(methodDesc + '未准备完成');
|
85172
85170
|
}
|
85173
85171
|
}
|
85174
|
-
/**
|
85175
|
-
|
85176
|
-
|
85177
|
-
static async idCardRead(method = EWindowPassMethodCode.ReadIDCard_Base64) {
|
85178
|
-
const readData = await EWindowPassService.read(EWindowPassMethodCode.ReadIDCard_Base64);
|
85179
|
-
console.log('读取二代身份证==>', readData);
|
85172
|
+
/** 读取身份证和永居证*/
|
85173
|
+
static async idCardRead() {
|
85174
|
+
const readData = await WeiRongPluginService.read(WEIRONGMethodCode.ReadCard_Base64);
|
85180
85175
|
if (!readData) {
|
85181
|
-
throw Error('
|
85176
|
+
throw Error('未匹配到可用的读取设备');
|
85182
85177
|
}
|
85183
85178
|
if (readData.retVal !== 0) {
|
85179
|
+
this.ws?.close();
|
85184
85180
|
throw Error("读取二代身份证失败,返回值:" + readData.retVal + ",错误信息:" + readData.errMsg);
|
85185
85181
|
}
|
85186
|
-
|
85187
|
-
|
85182
|
+
let idInfo = readData.idInfo;
|
85183
|
+
// name:姓名 "ENfullname":"英文姓名" sex:性别 nation:民族 number 身份证号码 birthday: 生日 address: 地址,
|
85184
|
+
// organs:签发机关 signdate:开始有效期 validterm: 结束有效期
|
85185
|
+
let {
|
85188
85186
|
name,
|
85187
|
+
ENfullname: englishName,
|
85188
|
+
Nationality,
|
85189
85189
|
sex,
|
85190
85190
|
birthday,
|
85191
85191
|
address,
|
85192
|
-
|
85193
|
-
|
85192
|
+
number,
|
85193
|
+
nation,
|
85194
|
+
organs: police,
|
85195
|
+
signdate: validStart,
|
85196
|
+
validterm: validEnd
|
85194
85197
|
} = idInfo;
|
85198
|
+
let chineseName = '',
|
85199
|
+
cardType = '1',
|
85200
|
+
nationality = '中国';
|
85201
|
+
// 外国人永居证
|
85202
|
+
if (readData.cardType == 1 || readData.cardType == 2) {
|
85203
|
+
cardType = '9'; // 永居证
|
85204
|
+
chineseName = name;
|
85205
|
+
name = name || englishName; // 姓名,先读中文名,没有时读英文名
|
85206
|
+
police = police || '中华人民共和国国家移民管理局'; // 发证机关,读不到,默认
|
85207
|
+
nationality = Nationality; // 永居证国籍放在名族里面的
|
85208
|
+
nation = '';
|
85209
|
+
} else {
|
85210
|
+
// 身份证
|
85211
|
+
cardType = '1'; // 身份证
|
85212
|
+
}
|
85213
|
+
|
85195
85214
|
const IDCardData = {
|
85196
85215
|
info: {
|
85216
|
+
cardType,
|
85217
|
+
nationality,
|
85197
85218
|
name,
|
85219
|
+
chineseName,
|
85220
|
+
englishName,
|
85198
85221
|
sex,
|
85199
85222
|
birthday: birthday.replace('-', '').replace('-', ''),
|
85200
85223
|
address,
|
85201
|
-
cardId:
|
85202
|
-
nation
|
85224
|
+
cardId: number,
|
85225
|
+
nation,
|
85226
|
+
police,
|
85227
|
+
validStart,
|
85228
|
+
validEnd
|
85203
85229
|
},
|
85204
|
-
headImage: readData.
|
85230
|
+
headImage: readData.idPhotoBase64
|
85205
85231
|
};
|
85206
|
-
|
85232
|
+
this.ws?.close();
|
85207
85233
|
return IDCardData;
|
85208
85234
|
}
|
85209
|
-
/**
|
85210
|
-
|
85211
|
-
|
85212
|
-
static async faceValidateWithIdCardRead() {
|
85213
|
-
const readData = await EWindowPassService.read(EWindowPassMethodCode.FaceValidateWithIdCard_Base64);
|
85214
|
-
console.log('人证比对==>', readData);
|
85235
|
+
/** 读取社保卡 */
|
85236
|
+
static async socialSecurityCardRead() {
|
85237
|
+
const readData = await WeiRongPluginService.read(WEIRONGMethodCode.ReadCard_Base64);
|
85215
85238
|
if (!readData) {
|
85216
|
-
throw Error('
|
85239
|
+
throw Error('未匹配可用的读取设备');
|
85217
85240
|
}
|
85218
85241
|
if (readData.retVal !== 0) {
|
85219
|
-
|
85242
|
+
this.ws?.close();
|
85243
|
+
throw Error("读取社保卡基本信息失败,返回值:" + readData.retVal + ",错误信息:" + readData.idInfo);
|
85220
85244
|
}
|
85221
|
-
|
85222
|
-
|
85245
|
+
// 返回数据:cardType 3 社保卡
|
85246
|
+
// idInfo: {
|
85247
|
+
// name:姓名
|
85248
|
+
// sex:性别
|
85249
|
+
// nation:民族
|
85250
|
+
// cardnumber:卡号
|
85251
|
+
// number:社会保障号码(身份证号)
|
85252
|
+
// birthday:出生日期"\
|
85253
|
+
// city:城市代码
|
85254
|
+
// signdate:开始有效期
|
85255
|
+
// validterm:结束有效期
|
85256
|
+
// cardveVrsion:社保卡版本
|
85257
|
+
// }
|
85258
|
+
const idInfo = readData.idInfo;
|
85259
|
+
let {
|
85223
85260
|
name,
|
85224
85261
|
sex,
|
85225
|
-
|
85226
|
-
|
85227
|
-
|
85228
|
-
nation
|
85229
|
-
} = idInfo;
|
85230
|
-
const IDCardData = {
|
85231
|
-
idCard: {
|
85232
|
-
info: {
|
85233
|
-
name,
|
85234
|
-
sex,
|
85235
|
-
birthday: birth.replace('-', '').replace('-', ''),
|
85236
|
-
address,
|
85237
|
-
cardId: idNo,
|
85238
|
-
nation
|
85239
|
-
},
|
85240
|
-
headImage: readData.idPhotoBase64
|
85241
|
-
},
|
85242
|
-
faceimg: readData.scenceBase64
|
85243
|
-
};
|
85244
|
-
console.log('人证比对结果==>', IDCardData);
|
85245
|
-
return IDCardData;
|
85246
|
-
}
|
85247
|
-
/** 读取社保卡 */
|
85248
|
-
static async socialSecurityCardRead() {
|
85249
|
-
const readData = await EWindowPassService.read(EWindowPassMethodCode.iReadCardBas);
|
85250
|
-
if (!readData) {
|
85251
|
-
throw Error('未匹配可用的E窗通读取设备');
|
85252
|
-
}
|
85253
|
-
if (readData.retVal !== 0) {
|
85254
|
-
throw Error("读取社保卡基本信息失败,返回值:" + readData.retVal + ",错误信息:" + readData.outInfo);
|
85255
|
-
}
|
85256
|
-
// 返回数据:330100|350781196403072943|W57681892|331100D10600000300657BCF88899F8E|张三|3B6D000000815444368660330100286BCF|1.00|2020-08-12|2030-08-12|1|SN00000000|(邮编|身份证号|卡号|社会保障号码|姓名|...不知道是什么信息了)
|
85257
|
-
const outInfo = readData.outInfo;
|
85258
|
-
const outInfoArray = outInfo.split('|');
|
85259
|
-
const cardId = outInfoArray[1];
|
85260
|
-
const birthday = IdCardCommonUtils.getBirthdayByIdNumber(cardId).replace('-', '').replace('-', '');
|
85261
|
-
const sex = IdCardCommonUtils.getGenderByIdNumber(cardId);
|
85262
|
-
const IDCardData = {
|
85263
|
-
info: {
|
85264
|
-
name: outInfoArray[4],
|
85265
|
-
sex,
|
85266
|
-
birthday,
|
85267
|
-
address: '',
|
85268
|
-
cardId
|
85269
|
-
},
|
85270
|
-
headImage: ''
|
85271
|
-
};
|
85272
|
-
console.log('读取社保卡==>', readData);
|
85273
|
-
return IDCardData;
|
85274
|
-
}
|
85275
|
-
/** 获取签名-base64 */
|
85276
|
-
static async signNameRead() {
|
85277
|
-
const readData = await EWindowPassService.read(EWindowPassMethodCode.GetSignName_Base64);
|
85278
|
-
if (!readData) {
|
85279
|
-
throw Error('未匹配可用的E窗通读取设备');
|
85280
|
-
}
|
85281
|
-
if (readData.retVal !== 0) {
|
85282
|
-
throw Error("读取签名失败,返回值:" + readData.retVal + ",错误信息:" + readData.errMsg);
|
85283
|
-
}
|
85284
|
-
console.log('获取签名==>', readData);
|
85285
|
-
return readData.signPicBase64;
|
85286
|
-
}
|
85287
|
-
/** 获取指纹*/
|
85288
|
-
static async fingerPrintRead() {
|
85289
|
-
let timeOver = 30;
|
85290
|
-
async function readFingerPrint() {
|
85291
|
-
const readData = await EWindowPassService.read(EWindowPassMethodCode.FingerPrint_Base64);
|
85292
|
-
if (!readData) {
|
85293
|
-
throw Error('未匹配可用的E窗通读取设备');
|
85294
|
-
}
|
85295
|
-
let list = readData.fingerPrintInfo.split("|");
|
85296
|
-
console.log(list);
|
85297
|
-
let ret = Number(list[1]);
|
85298
|
-
if (ret > 1) {
|
85299
|
-
if (timeOver > 0) {
|
85300
|
-
timeOver--;
|
85301
|
-
return await readFingerPrint();
|
85302
|
-
} else {
|
85303
|
-
return {
|
85304
|
-
status: 'error',
|
85305
|
-
data: '已超时,请重新操作,按压指纹'
|
85306
|
-
};
|
85307
|
-
}
|
85308
|
-
} else {
|
85309
|
-
return {
|
85310
|
-
status: 'success',
|
85311
|
-
data: readData.fingerPrintInfo
|
85312
|
-
};
|
85313
|
-
}
|
85314
|
-
}
|
85315
|
-
let {
|
85316
|
-
status,
|
85317
|
-
data
|
85318
|
-
} = await readFingerPrint();
|
85319
|
-
if (status === 'error') {
|
85320
|
-
throw Error(data);
|
85321
|
-
} else {
|
85322
|
-
let [method, result, quality, image, featureCode] = data.split('|');
|
85323
|
-
// getimgae|1|68|......|......
|
85324
|
-
// method:方法,result:返回的状态,quality:指纹图片质量,image:图片base64,featureCode:指纹特征码
|
85325
|
-
return {
|
85326
|
-
method,
|
85327
|
-
result,
|
85328
|
-
quality,
|
85329
|
-
image,
|
85330
|
-
featureCode
|
85331
|
-
};
|
85332
|
-
}
|
85333
|
-
}
|
85334
|
-
}
|
85335
|
-
_defineProperty(EWindowPassService, "iReadCardBasWebSocketUrl", 'ws://127.0.0.1:5847');
|
85336
|
-
_defineProperty(EWindowPassService, "fingerPrintBasWebSocketUrl", 'ws://127.0.0.1:9000');
|
85337
|
-
_defineProperty(EWindowPassService, "ws", void 0);
|
85338
|
-
_defineProperty(EWindowPassService, "requestStore", []);
|
85339
|
-
;// CONCATENATED MODULE: ./packages/service/external-plugins/wei-rong-plugin-socket.service.ts
|
85340
|
-
|
85341
|
-
|
85342
|
-
|
85343
|
-
|
85344
|
-
/**
|
85345
|
-
* @author: lvcy
|
85346
|
-
* @date: 2024-03-22
|
85347
|
-
* @description:国产客户端,硬件对接
|
85348
|
-
*/
|
85349
|
-
var WEIRONGMethodCode;
|
85350
|
-
(function (WEIRONGMethodCode) {
|
85351
|
-
/** 读卡 */
|
85352
|
-
WEIRONGMethodCode["ReadCard_Base64"] = "ReadCard_Base64";
|
85353
|
-
/** 开始签名*/
|
85354
|
-
WEIRONGMethodCode["StartSignName"] = "StartSignName";
|
85355
|
-
/** 获取签名状态*/
|
85356
|
-
WEIRONGMethodCode["GetSignNameStatus"] = "GetSignNameStatus";
|
85357
|
-
/** 获取签名*/
|
85358
|
-
WEIRONGMethodCode["GetSignName_Base64"] = "GetSignName_Base64";
|
85359
|
-
/** 人证比对 */
|
85360
|
-
WEIRONGMethodCode["FaceValidateWithIdCard_Base64"] = "FaceValidateWithIdCard_Base64";
|
85361
|
-
/** 打开高拍仪器*/
|
85362
|
-
WEIRONGMethodCode["TurnOnTheCamera"] = "TurnOnTheCamera";
|
85363
|
-
/** 拍照*/
|
85364
|
-
WEIRONGMethodCode["ScannerCamera"] = "ScannerCamera";
|
85365
|
-
})(WEIRONGMethodCode || (WEIRONGMethodCode = {}));
|
85366
|
-
const WEIRONGMethodDesc = {
|
85367
|
-
[WEIRONGMethodCode.ReadCard_Base64]: '读卡',
|
85368
|
-
[WEIRONGMethodCode.GetSignName_Base64]: '获取签名',
|
85369
|
-
[WEIRONGMethodCode.FaceValidateWithIdCard_Base64]: '人证比对'
|
85370
|
-
};
|
85371
|
-
class WeiRongPluginService {
|
85372
|
-
static startConnect(method) {
|
85373
|
-
console.log('startConnect', method, this.ws?.readyState, WebSocket.CONNECTING);
|
85374
|
-
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
|
85375
|
-
return this;
|
85376
|
-
}
|
85377
|
-
console.log('重新链接');
|
85378
|
-
const ws = new WebSocket(this.webSocketUrl);
|
85379
|
-
let resolved;
|
85380
|
-
const onConnect = new Promise(resolve => {
|
85381
|
-
resolved = resolve;
|
85382
|
-
});
|
85383
|
-
ws.onopen = () => {
|
85384
|
-
resolved(true);
|
85385
|
-
};
|
85386
|
-
ws.onmessage = event => {
|
85387
|
-
if (method === EWindowPassMethodCode.FingerPrint_Base64) {
|
85388
|
-
// 指纹后端返回的是string
|
85389
|
-
event = {
|
85390
|
-
...event,
|
85391
|
-
data: JSON.stringify({
|
85392
|
-
fingerPrintInfo: event.data
|
85393
|
-
})
|
85394
|
-
};
|
85395
|
-
}
|
85396
|
-
this.handleMessage(event);
|
85397
|
-
};
|
85398
|
-
ws.onclose = () => this.handleClose();
|
85399
|
-
ws.onerror = () => this.handleError();
|
85400
|
-
this.ws = ws;
|
85401
|
-
return onConnect;
|
85402
|
-
}
|
85403
|
-
static handleError() {
|
85404
|
-
for (const type in this.requestStore) {
|
85405
|
-
this.requestStore.forEach(({
|
85406
|
-
reject
|
85407
|
-
}) => {
|
85408
|
-
reject('handleError');
|
85409
|
-
});
|
85410
|
-
}
|
85411
|
-
throw Error('设备功能加载失败');
|
85412
|
-
}
|
85413
|
-
static handleClose() {
|
85414
|
-
for (const type in this.requestStore) {
|
85415
|
-
this.requestStore.forEach(({
|
85416
|
-
reject
|
85417
|
-
}) => {
|
85418
|
-
reject('close');
|
85419
|
-
});
|
85420
|
-
}
|
85421
|
-
}
|
85422
|
-
static handleMessage(msg) {
|
85423
|
-
let data = '';
|
85424
|
-
try {
|
85425
|
-
data = JSON.parse(msg.data);
|
85426
|
-
} catch (e) {
|
85427
|
-
data = '';
|
85428
|
-
}
|
85429
|
-
if (data.method === 'FaceScreenStream' || data.method === 'VideoStream') {
|
85430
|
-
const event = new ScannerCameraRefreshPhotoEvent(data.imgBase64);
|
85431
|
-
return window.dispatchEvent(event);
|
85432
|
-
} else {
|
85433
|
-
this.requestStore.forEach(({
|
85434
|
-
resolve
|
85435
|
-
}) => {
|
85436
|
-
resolve(data);
|
85437
|
-
});
|
85438
|
-
this.requestStore = [];
|
85439
|
-
}
|
85440
|
-
// this.ws.close();
|
85441
|
-
}
|
85442
|
-
|
85443
|
-
static async read(method) {
|
85444
|
-
await this.startConnect(method);
|
85445
|
-
const methodDesc = WEIRONGMethodDesc[method];
|
85446
|
-
if (this.ws.readyState === 1) {
|
85447
|
-
let jsonString;
|
85448
|
-
switch (method) {
|
85449
|
-
case WEIRONGMethodCode.ReadCard_Base64:
|
85450
|
-
jsonString = JSON.stringify({
|
85451
|
-
method: 'ReadIDCard_Base64',
|
85452
|
-
args: {
|
85453
|
-
outTimes: 30,
|
85454
|
-
cardReader: 0
|
85455
|
-
}
|
85456
|
-
});
|
85457
|
-
break;
|
85458
|
-
case WEIRONGMethodCode.FaceValidateWithIdCard_Base64:
|
85459
|
-
jsonString = JSON.stringify({
|
85460
|
-
method: 'FaceValidateWithIdCard_Base64',
|
85461
|
-
args: {
|
85462
|
-
outTimes: 30,
|
85463
|
-
score: 75
|
85464
|
-
}
|
85465
|
-
});
|
85466
|
-
break;
|
85467
|
-
case WEIRONGMethodCode.StartSignName:
|
85468
|
-
jsonString = JSON.stringify({
|
85469
|
-
method: 'SignNameScreen_Start',
|
85470
|
-
args: {
|
85471
|
-
outTimes: 30
|
85472
|
-
}
|
85473
|
-
});
|
85474
|
-
break;
|
85475
|
-
case WEIRONGMethodCode.GetSignNameStatus:
|
85476
|
-
jsonString = JSON.stringify({
|
85477
|
-
method: 'SignNameScreen_Status',
|
85478
|
-
args: {}
|
85479
|
-
});
|
85480
|
-
break;
|
85481
|
-
case WEIRONGMethodCode.GetSignName_Base64:
|
85482
|
-
jsonString = JSON.stringify({
|
85483
|
-
method: 'SignNameScreen_Get',
|
85484
|
-
args: {}
|
85485
|
-
});
|
85486
|
-
break;
|
85487
|
-
case WEIRONGMethodCode.TurnOnTheCamera:
|
85488
|
-
jsonString = JSON.stringify({
|
85489
|
-
method: 'VideoStart',
|
85490
|
-
args: {}
|
85491
|
-
});
|
85492
|
-
break;
|
85493
|
-
case WEIRONGMethodCode.ScannerCamera:
|
85494
|
-
jsonString = JSON.stringify({
|
85495
|
-
method: 'GetCameraImage',
|
85496
|
-
args: {
|
85497
|
-
imagePath: ''
|
85498
|
-
}
|
85499
|
-
});
|
85500
|
-
break;
|
85501
|
-
}
|
85502
|
-
this.ws.send(jsonString);
|
85503
|
-
return new Promise((resolve, reject) => {
|
85504
|
-
if (!this.requestStore) {
|
85505
|
-
this.requestStore = [];
|
85506
|
-
}
|
85507
|
-
this.requestStore.push({
|
85508
|
-
resolve,
|
85509
|
-
reject
|
85510
|
-
});
|
85511
|
-
});
|
85512
|
-
} else {
|
85513
|
-
throw Error(methodDesc + '未准备完成');
|
85514
|
-
}
|
85515
|
-
}
|
85516
|
-
/** 读取身份证和永居证*/
|
85517
|
-
static async idCardRead() {
|
85518
|
-
const readData = await WeiRongPluginService.read(WEIRONGMethodCode.ReadCard_Base64);
|
85519
|
-
if (!readData) {
|
85520
|
-
throw Error('未匹配到可用的读取设备');
|
85521
|
-
}
|
85522
|
-
if (readData.retVal !== 0) {
|
85523
|
-
this.ws?.close();
|
85524
|
-
throw Error("读取二代身份证失败,返回值:" + readData.retVal + ",错误信息:" + readData.errMsg);
|
85525
|
-
}
|
85526
|
-
let idInfo = readData.idInfo;
|
85527
|
-
// name:姓名 "ENfullname":"英文姓名" sex:性别 nation:民族 number 身份证号码 birthday: 生日 address: 地址,
|
85528
|
-
// organs:签发机关 signdate:开始有效期 validterm: 结束有效期
|
85529
|
-
let {
|
85530
|
-
name,
|
85531
|
-
ENfullname: englishName,
|
85532
|
-
Nationality,
|
85533
|
-
sex,
|
85534
|
-
birthday,
|
85535
|
-
address,
|
85536
|
-
number,
|
85537
|
-
nation,
|
85538
|
-
organs: police,
|
85539
|
-
signdate: validStart,
|
85540
|
-
validterm: validEnd
|
85541
|
-
} = idInfo;
|
85542
|
-
let chineseName = '',
|
85543
|
-
cardType = '1',
|
85544
|
-
nationality = '中国';
|
85545
|
-
// 外国人永居证
|
85546
|
-
if (readData.cardType == 1 || readData.cardType == 2) {
|
85547
|
-
cardType = '9'; // 永居证
|
85548
|
-
chineseName = name;
|
85549
|
-
name = name || englishName; // 姓名,先读中文名,没有时读英文名
|
85550
|
-
police = police || '中华人民共和国国家移民管理局'; // 发证机关,读不到,默认
|
85551
|
-
nationality = Nationality; // 永居证国籍放在名族里面的
|
85552
|
-
nation = '';
|
85553
|
-
} else {
|
85554
|
-
// 身份证
|
85555
|
-
cardType = '1'; // 身份证
|
85556
|
-
}
|
85557
|
-
|
85558
|
-
const IDCardData = {
|
85559
|
-
info: {
|
85560
|
-
cardType,
|
85561
|
-
nationality,
|
85562
|
-
name,
|
85563
|
-
chineseName,
|
85564
|
-
englishName,
|
85565
|
-
sex,
|
85566
|
-
birthday: birthday.replace('-', '').replace('-', ''),
|
85567
|
-
address,
|
85568
|
-
cardId: number,
|
85569
|
-
nation,
|
85570
|
-
police,
|
85571
|
-
validStart,
|
85572
|
-
validEnd
|
85573
|
-
},
|
85574
|
-
headImage: readData.idPhotoBase64
|
85575
|
-
};
|
85576
|
-
this.ws?.close();
|
85577
|
-
return IDCardData;
|
85578
|
-
}
|
85579
|
-
/** 读取社保卡 */
|
85580
|
-
static async socialSecurityCardRead() {
|
85581
|
-
const readData = await WeiRongPluginService.read(WEIRONGMethodCode.ReadCard_Base64);
|
85582
|
-
if (!readData) {
|
85583
|
-
throw Error('未匹配可用的读取设备');
|
85584
|
-
}
|
85585
|
-
if (readData.retVal !== 0) {
|
85586
|
-
this.ws?.close();
|
85587
|
-
throw Error("读取社保卡基本信息失败,返回值:" + readData.retVal + ",错误信息:" + readData.idInfo);
|
85588
|
-
}
|
85589
|
-
// 返回数据:cardType 3 社保卡
|
85590
|
-
// idInfo: {
|
85591
|
-
// name:姓名
|
85592
|
-
// sex:性别
|
85593
|
-
// nation:民族
|
85594
|
-
// cardnumber:卡号
|
85595
|
-
// number:社会保障号码(身份证号)
|
85596
|
-
// birthday:出生日期"\
|
85597
|
-
// city:城市代码
|
85598
|
-
// signdate:开始有效期
|
85599
|
-
// validterm:结束有效期
|
85600
|
-
// cardveVrsion:社保卡版本
|
85601
|
-
// }
|
85602
|
-
const idInfo = readData.idInfo;
|
85603
|
-
let {
|
85604
|
-
name,
|
85605
|
-
sex,
|
85606
|
-
birthday,
|
85607
|
-
number: cardId,
|
85608
|
-
cardnumber
|
85262
|
+
birthday,
|
85263
|
+
number: cardId,
|
85264
|
+
cardnumber
|
85609
85265
|
} = idInfo;
|
85610
85266
|
const IDCardData = {
|
85611
85267
|
info: {
|
@@ -85621,26 +85277,6 @@ class WeiRongPluginService {
|
|
85621
85277
|
this.ws?.close();
|
85622
85278
|
return IDCardData;
|
85623
85279
|
}
|
85624
|
-
// 港澳台居住证协议
|
85625
|
-
// {
|
85626
|
-
// "method": "ReadIDCard_Base64",
|
85627
|
-
// "retVal": 0,
|
85628
|
-
// "errMsg":"",
|
85629
|
-
// "cardType":"4",
|
85630
|
-
// "idInfo":{
|
85631
|
-
// "name":"中文姓名",
|
85632
|
-
// "sex":"性别",
|
85633
|
-
// "birthday":"出生日期",
|
85634
|
-
// "address":"(例:杭州市西湖区XXXX)",
|
85635
|
-
// "number":"证件号码",
|
85636
|
-
// "organs":"签发机关",
|
85637
|
-
// "signdate":"开始有效期",
|
85638
|
-
// "validterm":"结束有效期",
|
85639
|
-
// "signCount":"签证次数",
|
85640
|
-
// "passNu":"通行证号"
|
85641
|
-
// },
|
85642
|
-
// "idPhotoBase64":"小头像base64图片格式"
|
85643
|
-
// }
|
85644
85280
|
/**
|
85645
85281
|
* 人证比对
|
85646
85282
|
*/
|
@@ -86537,7 +86173,127 @@ class SignReadService {
|
|
86537
86173
|
ws.onopen = () => {
|
86538
86174
|
resolved(true);
|
86539
86175
|
};
|
86540
|
-
ws.onmessage = event => this.handleMessage(event);
|
86176
|
+
ws.onmessage = event => this.handleMessage(event);
|
86177
|
+
ws.onclose = () => this.handleClose();
|
86178
|
+
ws.onerror = () => this.handleError();
|
86179
|
+
this.ws = ws;
|
86180
|
+
return onConnect;
|
86181
|
+
}
|
86182
|
+
static handleError() {
|
86183
|
+
for (const type in this.requestStore) {
|
86184
|
+
this.requestStore.forEach(({
|
86185
|
+
reject
|
86186
|
+
}) => {
|
86187
|
+
reject('handleError');
|
86188
|
+
});
|
86189
|
+
}
|
86190
|
+
throw Error('签字板加载失败');
|
86191
|
+
}
|
86192
|
+
static handleClose() {
|
86193
|
+
for (const type in this.requestStore) {
|
86194
|
+
this.requestStore.forEach(({
|
86195
|
+
reject
|
86196
|
+
}) => {
|
86197
|
+
reject('close');
|
86198
|
+
});
|
86199
|
+
}
|
86200
|
+
}
|
86201
|
+
static handleMessage(msg) {
|
86202
|
+
let data = msg.data;
|
86203
|
+
this.requestStore.forEach(({
|
86204
|
+
resolve
|
86205
|
+
}) => {
|
86206
|
+
resolve(data);
|
86207
|
+
});
|
86208
|
+
this.requestStore = [];
|
86209
|
+
this.ws.close();
|
86210
|
+
}
|
86211
|
+
static async read(signMode = PluginApiType.ywSign) {
|
86212
|
+
await this.startConnect(signMode);
|
86213
|
+
if (this.ws.readyState === 1) {
|
86214
|
+
console.log('签字板连接成功');
|
86215
|
+
this.ws.send(signMode);
|
86216
|
+
return new Promise((resolve, reject) => {
|
86217
|
+
if (!this.requestStore) {
|
86218
|
+
this.requestStore = [];
|
86219
|
+
}
|
86220
|
+
this.requestStore.push({
|
86221
|
+
resolve,
|
86222
|
+
reject
|
86223
|
+
});
|
86224
|
+
});
|
86225
|
+
} else {
|
86226
|
+
throw Error('签字板未准备完成');
|
86227
|
+
}
|
86228
|
+
}
|
86229
|
+
}
|
86230
|
+
_defineProperty(SignReadService, "signWebSocketUrl", 'ws://127.0.0.1:8152/chromeManage');
|
86231
|
+
_defineProperty(SignReadService, "hwSignWebSocketUrl", 'ws://127.0.0.1:8152/HWSIGNManage');
|
86232
|
+
_defineProperty(SignReadService, "ws", void 0);
|
86233
|
+
_defineProperty(SignReadService, "requestStore", []);
|
86234
|
+
;// CONCATENATED MODULE: ./packages/service/external-plugins/ewp-plugin-socket.service.ts
|
86235
|
+
|
86236
|
+
|
86237
|
+
/**
|
86238
|
+
* 沃斯德人证交互终端
|
86239
|
+
* E窗通WEBSOCKET服务
|
86240
|
+
*
|
86241
|
+
* */
|
86242
|
+
|
86243
|
+
var EWindowPassMethodCode;
|
86244
|
+
(function (EWindowPassMethodCode) {
|
86245
|
+
/** 读取社保卡 */
|
86246
|
+
EWindowPassMethodCode["iReadCardBas"] = "iReadCardBas";
|
86247
|
+
/** 获取签名*/
|
86248
|
+
EWindowPassMethodCode["GetSignName_Base64"] = "GetSignName_Base64";
|
86249
|
+
/** 读取二代身份证 */
|
86250
|
+
EWindowPassMethodCode["ReadIDCard_Base64"] = "ReadIDCard_Base64";
|
86251
|
+
/** 人证比对 */
|
86252
|
+
EWindowPassMethodCode["FaceValidateWithIdCard_Base64"] = "FaceValidateWithIdCard_Base64";
|
86253
|
+
/** 获取指纹 */
|
86254
|
+
EWindowPassMethodCode["FingerPrint_Base64"] = "FingerPrint_Base64";
|
86255
|
+
})(EWindowPassMethodCode || (EWindowPassMethodCode = {}));
|
86256
|
+
const EWindowPassMethodDesc = {
|
86257
|
+
[EWindowPassMethodCode.iReadCardBas]: '读取社保卡',
|
86258
|
+
[EWindowPassMethodCode.GetSignName_Base64]: '获取签名',
|
86259
|
+
[EWindowPassMethodCode.ReadIDCard_Base64]: '读取二代身份证',
|
86260
|
+
[EWindowPassMethodCode.FaceValidateWithIdCard_Base64]: '人证比对',
|
86261
|
+
[EWindowPassMethodCode.FingerPrint_Base64]: '获取指纹'
|
86262
|
+
};
|
86263
|
+
class EWindowPassService {
|
86264
|
+
static startConnect(method) {
|
86265
|
+
if (this.ws && this.ws.readyState === WebSocket.CONNECTING) {
|
86266
|
+
return this;
|
86267
|
+
}
|
86268
|
+
let webSocketUrl = '';
|
86269
|
+
switch (method) {
|
86270
|
+
case EWindowPassMethodCode.FingerPrint_Base64:
|
86271
|
+
webSocketUrl = this.fingerPrintBasWebSocketUrl;
|
86272
|
+
break;
|
86273
|
+
default:
|
86274
|
+
webSocketUrl = this.iReadCardBasWebSocketUrl;
|
86275
|
+
break;
|
86276
|
+
}
|
86277
|
+
const ws = new WebSocket(webSocketUrl);
|
86278
|
+
let resolved;
|
86279
|
+
const onConnect = new Promise(resolve => {
|
86280
|
+
resolved = resolve;
|
86281
|
+
});
|
86282
|
+
ws.onopen = () => {
|
86283
|
+
resolved(true);
|
86284
|
+
};
|
86285
|
+
ws.onmessage = event => {
|
86286
|
+
if (method === EWindowPassMethodCode.FingerPrint_Base64) {
|
86287
|
+
// 指纹后端返回的是string
|
86288
|
+
event = {
|
86289
|
+
...event,
|
86290
|
+
data: JSON.stringify({
|
86291
|
+
fingerPrintInfo: event.data
|
86292
|
+
})
|
86293
|
+
};
|
86294
|
+
}
|
86295
|
+
this.handleMessage(event);
|
86296
|
+
};
|
86541
86297
|
ws.onclose = () => this.handleClose();
|
86542
86298
|
ws.onerror = () => this.handleError();
|
86543
86299
|
this.ws = ws;
|
@@ -86551,7 +86307,7 @@ class SignReadService {
|
|
86551
86307
|
reject('handleError');
|
86552
86308
|
});
|
86553
86309
|
}
|
86554
|
-
throw Error('
|
86310
|
+
throw Error('E窗通设备功能加载失败');
|
86555
86311
|
}
|
86556
86312
|
static handleClose() {
|
86557
86313
|
for (const type in this.requestStore) {
|
@@ -86563,7 +86319,12 @@ class SignReadService {
|
|
86563
86319
|
}
|
86564
86320
|
}
|
86565
86321
|
static handleMessage(msg) {
|
86566
|
-
let data =
|
86322
|
+
let data = '';
|
86323
|
+
try {
|
86324
|
+
data = JSON.parse(msg.data);
|
86325
|
+
} catch (e) {
|
86326
|
+
data = '';
|
86327
|
+
}
|
86567
86328
|
this.requestStore.forEach(({
|
86568
86329
|
resolve
|
86569
86330
|
}) => {
|
@@ -86572,11 +86333,58 @@ class SignReadService {
|
|
86572
86333
|
this.requestStore = [];
|
86573
86334
|
this.ws.close();
|
86574
86335
|
}
|
86575
|
-
static async read(
|
86576
|
-
await this.startConnect(
|
86336
|
+
static async read(method) {
|
86337
|
+
await this.startConnect(method);
|
86338
|
+
const methodDesc = EWindowPassMethodDesc[method];
|
86577
86339
|
if (this.ws.readyState === 1) {
|
86578
|
-
console.log('
|
86579
|
-
|
86340
|
+
if (method !== EWindowPassMethodCode.FingerPrint_Base64) console.log(methodDesc + '连接成功');
|
86341
|
+
let jsonString;
|
86342
|
+
// outTimes:超时时间(秒)
|
86343
|
+
switch (method) {
|
86344
|
+
case EWindowPassMethodCode.ReadIDCard_Base64:
|
86345
|
+
// cardReader:0 读卡器-USB;1 读卡器-COM
|
86346
|
+
jsonString = JSON.stringify({
|
86347
|
+
method,
|
86348
|
+
args: {
|
86349
|
+
outTimes: 30,
|
86350
|
+
cardReader: 1
|
86351
|
+
}
|
86352
|
+
});
|
86353
|
+
break;
|
86354
|
+
case EWindowPassMethodCode.FaceValidateWithIdCard_Base64:
|
86355
|
+
// cardReader:0 读卡器-USB;1 读卡器-COM
|
86356
|
+
jsonString = JSON.stringify({
|
86357
|
+
method,
|
86358
|
+
args: {
|
86359
|
+
outTimes: 30,
|
86360
|
+
cardReader: 1,
|
86361
|
+
cameraType: 0
|
86362
|
+
}
|
86363
|
+
});
|
86364
|
+
break;
|
86365
|
+
case EWindowPassMethodCode.iReadCardBas:
|
86366
|
+
// icType:1接触卡;2非接触卡;3自动(接触优先);4自动(非接优先)
|
86367
|
+
jsonString = JSON.stringify({
|
86368
|
+
method,
|
86369
|
+
args: {
|
86370
|
+
icType: '1'
|
86371
|
+
}
|
86372
|
+
});
|
86373
|
+
break;
|
86374
|
+
case EWindowPassMethodCode.FingerPrint_Base64:
|
86375
|
+
// 获取指纹:getimgae,颜色(0黑色 1红色), 质量(默认0), 图像大小(288,360),类型(0民用,1公安)
|
86376
|
+
jsonString = 'getimgae,1,0,288,0';
|
86377
|
+
break;
|
86378
|
+
default:
|
86379
|
+
jsonString = JSON.stringify({
|
86380
|
+
method,
|
86381
|
+
args: {
|
86382
|
+
outTimes: 30
|
86383
|
+
}
|
86384
|
+
});
|
86385
|
+
break;
|
86386
|
+
}
|
86387
|
+
this.ws.send(jsonString);
|
86580
86388
|
return new Promise((resolve, reject) => {
|
86581
86389
|
if (!this.requestStore) {
|
86582
86390
|
this.requestStore = [];
|
@@ -86587,14 +86395,174 @@ class SignReadService {
|
|
86587
86395
|
});
|
86588
86396
|
});
|
86589
86397
|
} else {
|
86590
|
-
throw Error('
|
86398
|
+
throw Error(methodDesc + '未准备完成');
|
86399
|
+
}
|
86400
|
+
}
|
86401
|
+
/**
|
86402
|
+
* 读取二代身份证
|
86403
|
+
* */
|
86404
|
+
static async idCardRead(method = EWindowPassMethodCode.ReadIDCard_Base64) {
|
86405
|
+
const readData = await EWindowPassService.read(EWindowPassMethodCode.ReadIDCard_Base64);
|
86406
|
+
console.log('读取二代身份证==>', readData);
|
86407
|
+
if (!readData) {
|
86408
|
+
throw Error('未匹配可用的E窗通读取设备');
|
86409
|
+
}
|
86410
|
+
if (readData.retVal !== 0) {
|
86411
|
+
throw Error("读取二代身份证失败,返回值:" + readData.retVal + ",错误信息:" + readData.errMsg);
|
86412
|
+
}
|
86413
|
+
const idInfo = readData.idInfo.data;
|
86414
|
+
const {
|
86415
|
+
name,
|
86416
|
+
sex,
|
86417
|
+
birthday,
|
86418
|
+
address,
|
86419
|
+
id_num,
|
86420
|
+
nations
|
86421
|
+
} = idInfo;
|
86422
|
+
const IDCardData = {
|
86423
|
+
info: {
|
86424
|
+
name,
|
86425
|
+
sex,
|
86426
|
+
birthday: birthday.replace('-', '').replace('-', ''),
|
86427
|
+
address,
|
86428
|
+
cardId: id_num,
|
86429
|
+
nation: nations
|
86430
|
+
},
|
86431
|
+
headImage: readData.idPhotoPicBase64
|
86432
|
+
};
|
86433
|
+
console.log('读取二代身份证结果==>', IDCardData);
|
86434
|
+
return IDCardData;
|
86435
|
+
}
|
86436
|
+
/**
|
86437
|
+
* 人证比对
|
86438
|
+
*/
|
86439
|
+
static async faceValidateWithIdCardRead() {
|
86440
|
+
const readData = await EWindowPassService.read(EWindowPassMethodCode.FaceValidateWithIdCard_Base64);
|
86441
|
+
console.log('人证比对==>', readData);
|
86442
|
+
if (!readData) {
|
86443
|
+
throw Error('未匹配可用的E窗通读取设备');
|
86444
|
+
}
|
86445
|
+
if (readData.retVal !== 0) {
|
86446
|
+
throw Error("人证比对失败,返回值:" + readData.retVal + ",错误信息:" + readData.errMsg);
|
86447
|
+
}
|
86448
|
+
const idInfo = readData.idInfo.data;
|
86449
|
+
const {
|
86450
|
+
name,
|
86451
|
+
sex,
|
86452
|
+
birth,
|
86453
|
+
address,
|
86454
|
+
idNo,
|
86455
|
+
nation
|
86456
|
+
} = idInfo;
|
86457
|
+
const IDCardData = {
|
86458
|
+
idCard: {
|
86459
|
+
info: {
|
86460
|
+
name,
|
86461
|
+
sex,
|
86462
|
+
birthday: birth.replace('-', '').replace('-', ''),
|
86463
|
+
address,
|
86464
|
+
cardId: idNo,
|
86465
|
+
nation
|
86466
|
+
},
|
86467
|
+
headImage: readData.idPhotoBase64
|
86468
|
+
},
|
86469
|
+
faceimg: readData.scenceBase64
|
86470
|
+
};
|
86471
|
+
console.log('人证比对结果==>', IDCardData);
|
86472
|
+
return IDCardData;
|
86473
|
+
}
|
86474
|
+
/** 读取社保卡 */
|
86475
|
+
static async socialSecurityCardRead() {
|
86476
|
+
const readData = await EWindowPassService.read(EWindowPassMethodCode.iReadCardBas);
|
86477
|
+
if (!readData) {
|
86478
|
+
throw Error('未匹配可用的E窗通读取设备');
|
86479
|
+
}
|
86480
|
+
if (readData.retVal !== 0) {
|
86481
|
+
throw Error("读取社保卡基本信息失败,返回值:" + readData.retVal + ",错误信息:" + readData.outInfo);
|
86482
|
+
}
|
86483
|
+
// 返回数据:330100|350781196403072943|W57681892|331100D10600000300657BCF88899F8E|张三|3B6D000000815444368660330100286BCF|1.00|2020-08-12|2030-08-12|1|SN00000000|(邮编|身份证号|卡号|社会保障号码|姓名|...不知道是什么信息了)
|
86484
|
+
const outInfo = readData.outInfo;
|
86485
|
+
const outInfoArray = outInfo.split('|');
|
86486
|
+
const cardId = outInfoArray[1];
|
86487
|
+
const birthday = IdCardCommonUtils.getBirthdayByIdNumber(cardId).replace('-', '').replace('-', '');
|
86488
|
+
const sex = IdCardCommonUtils.getGenderByIdNumber(cardId);
|
86489
|
+
const IDCardData = {
|
86490
|
+
info: {
|
86491
|
+
name: outInfoArray[4],
|
86492
|
+
sex,
|
86493
|
+
birthday,
|
86494
|
+
address: '',
|
86495
|
+
cardId
|
86496
|
+
},
|
86497
|
+
headImage: ''
|
86498
|
+
};
|
86499
|
+
console.log('读取社保卡==>', readData);
|
86500
|
+
return IDCardData;
|
86501
|
+
}
|
86502
|
+
/** 获取签名-base64 */
|
86503
|
+
static async signNameRead() {
|
86504
|
+
const readData = await EWindowPassService.read(EWindowPassMethodCode.GetSignName_Base64);
|
86505
|
+
if (!readData) {
|
86506
|
+
throw Error('未匹配可用的E窗通读取设备');
|
86507
|
+
}
|
86508
|
+
if (readData.retVal !== 0) {
|
86509
|
+
throw Error("读取签名失败,返回值:" + readData.retVal + ",错误信息:" + readData.errMsg);
|
86510
|
+
}
|
86511
|
+
console.log('获取签名==>', readData);
|
86512
|
+
return readData.signPicBase64;
|
86513
|
+
}
|
86514
|
+
/** 获取指纹*/
|
86515
|
+
static async fingerPrintRead() {
|
86516
|
+
let timeOver = 30;
|
86517
|
+
async function readFingerPrint() {
|
86518
|
+
const readData = await EWindowPassService.read(EWindowPassMethodCode.FingerPrint_Base64);
|
86519
|
+
if (!readData) {
|
86520
|
+
throw Error('未匹配可用的E窗通读取设备');
|
86521
|
+
}
|
86522
|
+
let list = readData.fingerPrintInfo.split("|");
|
86523
|
+
console.log(list);
|
86524
|
+
let ret = Number(list[1]);
|
86525
|
+
if (ret > 1) {
|
86526
|
+
if (timeOver > 0) {
|
86527
|
+
timeOver--;
|
86528
|
+
return await readFingerPrint();
|
86529
|
+
} else {
|
86530
|
+
return {
|
86531
|
+
status: 'error',
|
86532
|
+
data: '已超时,请重新操作,按压指纹'
|
86533
|
+
};
|
86534
|
+
}
|
86535
|
+
} else {
|
86536
|
+
return {
|
86537
|
+
status: 'success',
|
86538
|
+
data: readData.fingerPrintInfo
|
86539
|
+
};
|
86540
|
+
}
|
86541
|
+
}
|
86542
|
+
let {
|
86543
|
+
status,
|
86544
|
+
data
|
86545
|
+
} = await readFingerPrint();
|
86546
|
+
if (status === 'error') {
|
86547
|
+
throw Error(data);
|
86548
|
+
} else {
|
86549
|
+
let [method, result, quality, image, featureCode] = data.split('|');
|
86550
|
+
// getimgae|1|68|......|......
|
86551
|
+
// method:方法,result:返回的状态,quality:指纹图片质量,image:图片base64,featureCode:指纹特征码
|
86552
|
+
return {
|
86553
|
+
method,
|
86554
|
+
result,
|
86555
|
+
quality,
|
86556
|
+
image,
|
86557
|
+
featureCode
|
86558
|
+
};
|
86591
86559
|
}
|
86592
86560
|
}
|
86593
86561
|
}
|
86594
|
-
_defineProperty(
|
86595
|
-
_defineProperty(
|
86596
|
-
_defineProperty(
|
86597
|
-
_defineProperty(
|
86562
|
+
_defineProperty(EWindowPassService, "iReadCardBasWebSocketUrl", 'ws://127.0.0.1:5847');
|
86563
|
+
_defineProperty(EWindowPassService, "fingerPrintBasWebSocketUrl", 'ws://127.0.0.1:9000');
|
86564
|
+
_defineProperty(EWindowPassService, "ws", void 0);
|
86565
|
+
_defineProperty(EWindowPassService, "requestStore", []);
|
86598
86566
|
;// CONCATENATED MODULE: ./packages/service/external-plugins/huada-plugin-socket.service.ts
|
86599
86567
|
|
86600
86568
|
|
@@ -87756,8 +87724,8 @@ var default_take_photo_dialog_component = normalizeComponent(
|
|
87756
87724
|
)
|
87757
87725
|
|
87758
87726
|
/* harmony default export */ var default_take_photo_dialog = (default_take_photo_dialog_component.exports);
|
87759
|
-
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-85.use[1]!./node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[4]!./node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/id-card-reader/id-card-reader-button/src/dialog/wei-rong-face-auth-dialog.vue?vue&type=template&id=
|
87760
|
-
var
|
87727
|
+
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-85.use[1]!./node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[4]!./node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/id-card-reader/id-card-reader-button/src/dialog/wei-rong-face-auth-dialog.vue?vue&type=template&id=5bbb0afc&scoped=true&
|
87728
|
+
var wei_rong_face_auth_dialogvue_type_template_id_5bbb0afc_scoped_true_render = function render() {
|
87761
87729
|
var _vm = this,
|
87762
87730
|
_c = _vm._self._c;
|
87763
87731
|
return _vm.visibility ? _c('el-dialog', {
|
@@ -87787,7 +87755,7 @@ var wei_rong_face_auth_dialogvue_type_template_id_d49bc744_scoped_true_render =
|
|
87787
87755
|
}
|
87788
87756
|
})])]) : _vm._e();
|
87789
87757
|
};
|
87790
|
-
var
|
87758
|
+
var wei_rong_face_auth_dialogvue_type_template_id_5bbb0afc_scoped_true_staticRenderFns = [];
|
87791
87759
|
|
87792
87760
|
;// CONCATENATED MODULE: ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-85.use[1]!./node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./packages/id-card-reader/id-card-reader-button/src/dialog/wei-rong-face-auth-dialog.vue?vue&type=script&lang=js&
|
87793
87761
|
|
@@ -87802,7 +87770,6 @@ const wei_rong_face_auth_dialogvue_type_script_lang_js_BEGIN_DATA = 'data:image/
|
|
87802
87770
|
};
|
87803
87771
|
},
|
87804
87772
|
async created() {
|
87805
|
-
console.log();
|
87806
87773
|
window.addEventListener(SCANNER_CAMERA_REFRESH_PHOTO_EVENT, message => {
|
87807
87774
|
if (message.type === SCANNER_CAMERA_REFRESH_PHOTO_EVENT) {
|
87808
87775
|
this.viewFaceImage = `${wei_rong_face_auth_dialogvue_type_script_lang_js_BEGIN_DATA}${message.scannerResultUrl}`;
|
@@ -87827,11 +87794,11 @@ const wei_rong_face_auth_dialogvue_type_script_lang_js_BEGIN_DATA = 'data:image/
|
|
87827
87794
|
;
|
87828
87795
|
var wei_rong_face_auth_dialog_component = normalizeComponent(
|
87829
87796
|
dialog_wei_rong_face_auth_dialogvue_type_script_lang_js_,
|
87830
|
-
|
87831
|
-
|
87797
|
+
wei_rong_face_auth_dialogvue_type_template_id_5bbb0afc_scoped_true_render,
|
87798
|
+
wei_rong_face_auth_dialogvue_type_template_id_5bbb0afc_scoped_true_staticRenderFns,
|
87832
87799
|
false,
|
87833
87800
|
null,
|
87834
|
-
"
|
87801
|
+
"5bbb0afc",
|
87835
87802
|
null
|
87836
87803
|
|
87837
87804
|
)
|
@@ -88323,5 +88290,4 @@ if (typeof window !== 'undefined' && window.Vue) {
|
|
88323
88290
|
/******/ return __webpack_exports__;
|
88324
88291
|
/******/ })()
|
88325
88292
|
;
|
88326
|
-
});
|
88327
|
-
//# sourceMappingURL=external-plugin.umd.js.map
|
88293
|
+
});
|