diff --git a/src/ssl/cert.csr b/src/ssl/cert.csr new file mode 100644 index 0000000..c199efa --- /dev/null +++ b/src/ssl/cert.csr @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIC1jCCAb4CAQAwgZAxCzAJBgNVBAYTAkNOMQ4wDAYDVQQIDAVIdWJlaTEOMAwG +A1UEBwwFV3VoYW4xETAPBgNVBAoMCE15VnVlRGV2MQwwCgYDVQQLDANEZXYxHzAd +BgNVBAMMFmh0dHBzOi8vMTkyLjE2OC45OS4xMTgxHzAdBgkqhkiG9w0BCQEWEDY2 +NDEzMTU4NkBxcS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC +JGkxYiVn83vjgfNMNWoVXhprZnpTD+4EAVnXI8L9c+ij+N+IFu6Q1wgY84y6BKTU +8RBVHpxBDp3MNe7POkJ3BVBf+r3fyqkpmoJQV6ZK8bokrxUnXyUsMgXgmshkcqAX +IcRB3QTrHwMDWHi5yv5VIw/jvEYycNclm9fMr78ra4UVR3rGv1gGnDag6+865uAk +YSGYjGrX1cXdfeha8FIYNp930Zn+hiIOfHTAGPwMLbgFARUj10F2bGojfc4vOU4p +T4nEb9evKvIXY0igjNrTXiLoXGnw7HiiX3rjVrEqF5/UiZrotLUKAyXie9uGQi/u +EoUmQB1a+0wI7PqDBsyVAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAO4xQJy/u +BV8pXI9NP3YOWGgIpswGJYmxId8AzmfxHoFJC7lMlEbXWdwXcZyCp9DKv+g6JoZA +lB+zSQGRvZXJTflvaZRCgRox5ChMIc0dWKb6amXwnSNLUJ1NYA2bErunKGiWnjQR +xFoE0VpYBafTDbPDNDP/W4871u+TYZ8kWQkWnE1ncEEGZ9EfzObwYVoMBdiTR+wI +CK8D7ixPC4mFhvtx4u5+RYtJGXfckhZEc7pPHK/YRkFCJHd4W1BnHpP6/mVlVdX/ +i3sH5p8pahmgwLzozU0dY0E0WsaXZ0aJY26Qg3Nrj23rutG8Ekzqd2WBRZopsi6p +CXWurQLVXlLX+g== +-----END CERTIFICATE REQUEST----- diff --git a/src/ssl/cert.pem b/src/ssl/cert.pem new file mode 100644 index 0000000..6be7b2c --- /dev/null +++ b/src/ssl/cert.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDqTCCApECFBXLkKuse7kIi5EkiIaa5BNwiiDeMA0GCSqGSIb3DQEBCwUAMIGQ +MQswCQYDVQQGEwJDTjEOMAwGA1UECAwFSHViZWkxDjAMBgNVBAcMBVd1aGFuMREw +DwYDVQQKDAhNeVZ1ZURldjEMMAoGA1UECwwDRGV2MR8wHQYDVQQDDBZodHRwczov +LzE5Mi4xNjguOTkuMTE4MR8wHQYJKoZIhvcNAQkBFhA2NjQxMzE1ODZAcXEuY29t +MB4XDTI1MDkyMzA0MTkwOVoXDTI2MDkyMzA0MTkwOVowgZAxCzAJBgNVBAYTAkNO +MQ4wDAYDVQQIDAVIdWJlaTEOMAwGA1UEBwwFV3VoYW4xETAPBgNVBAoMCE15VnVl +RGV2MQwwCgYDVQQLDANEZXYxHzAdBgNVBAMMFmh0dHBzOi8vMTkyLjE2OC45OS4x +MTgxHzAdBgkqhkiG9w0BCQEWEDY2NDEzMTU4NkBxcS5jb20wggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDCJGkxYiVn83vjgfNMNWoVXhprZnpTD+4EAVnX +I8L9c+ij+N+IFu6Q1wgY84y6BKTU8RBVHpxBDp3MNe7POkJ3BVBf+r3fyqkpmoJQ +V6ZK8bokrxUnXyUsMgXgmshkcqAXIcRB3QTrHwMDWHi5yv5VIw/jvEYycNclm9fM +r78ra4UVR3rGv1gGnDag6+865uAkYSGYjGrX1cXdfeha8FIYNp930Zn+hiIOfHTA +GPwMLbgFARUj10F2bGojfc4vOU4pT4nEb9evKvIXY0igjNrTXiLoXGnw7HiiX3rj +VrEqF5/UiZrotLUKAyXie9uGQi/uEoUmQB1a+0wI7PqDBsyVAgMBAAEwDQYJKoZI +hvcNAQELBQADggEBALnQ6DKc2FcUizEa8sOlhEtvLPOuQ89+D6qKLrb5wiLE6CIP +9qwZ0GoyDJN0bRkgbN1rcOd2EkSSf7ecV18xAGrKMg9JTLzsW77hHN8/v1F5xAw6 +wQsiP21KN1RGXbjJ1qXjO1ME5Znt8AgVJ4v0wiB9ZEcLVioYYdWXMCbxAuuZdkTm +cQWjpzoxynFPp5FYeRAdsomuSx3dnIalPwE7m6HQYIQ1RP+AVgFcJpPn1UcUhkxr +XMzvZx4AeUmE0Yh1VMhytQzzjE4xpqMFzhkpHHC9hquwga13WluajQApVpoGcQWg +5c+SaX4WZl8O8ud20yD1RfedjZyy2JYCELce8b4= +-----END CERTIFICATE----- diff --git a/src/ssl/key.pem b/src/ssl/key.pem new file mode 100644 index 0000000..c973dba --- /dev/null +++ b/src/ssl/key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDCJGkxYiVn83vj +gfNMNWoVXhprZnpTD+4EAVnXI8L9c+ij+N+IFu6Q1wgY84y6BKTU8RBVHpxBDp3M +Ne7POkJ3BVBf+r3fyqkpmoJQV6ZK8bokrxUnXyUsMgXgmshkcqAXIcRB3QTrHwMD +WHi5yv5VIw/jvEYycNclm9fMr78ra4UVR3rGv1gGnDag6+865uAkYSGYjGrX1cXd +feha8FIYNp930Zn+hiIOfHTAGPwMLbgFARUj10F2bGojfc4vOU4pT4nEb9evKvIX +Y0igjNrTXiLoXGnw7HiiX3rjVrEqF5/UiZrotLUKAyXie9uGQi/uEoUmQB1a+0wI +7PqDBsyVAgMBAAECggEAAMyhhRx3+GQg0r1UwTiIwhVDoqR1fOiL08B0MpW5tyMR +8DB9D7MOeMQnPfiD7WNy3usE8/Z2J1AqRFJBUqI/crLlCJ/t5o2zh6DnELMNHFNm +ky3lhIgjcihPxbA+81uAdmay+47ufoLXguf1v8xsX2zQd+D+cnikrdwCOTHTWtt8 +JBaXO38kpy3ePQbO0eLNxHmOqLVoOFzRnVWIGsjx14762gTZzxc1XJGIFCor9AuO +qiyK9vpbwi/IEbjm2o80aA/9iGFf0/hE8an96J3XK/nyM7Ne3PGBbg3+BThK6zoc +0qeycUxi7xMJmbznoFOjezyhN6NuNRA6FKg4y4uT2QKBgQDkYllG6QGIwU/FVNiB +TRQdaoOVw79YtEsRiBW+QLcN1Uz81RBu0hHc9UFDsHae52C/6NSyNMdWT4mjMI/Y +rvIwaCX6z544RkAqpXEra97VePlHrtFZa4cMY0ThVoGfhyWfLPJhkkJQ+tKtddB9 +QGCNNvTBEBsJf8qeWTXeIqoLuQKBgQDZnhmTevFDyoryrGV0h+oj7XGmarGZ5ZzC +jmB1u4d15dMj1jtmfhjBPWqb5noF+gFfS0Wueo92iTz+RvKbPF9E0SjRHbn541C4 +dyHW33W0OcGJuVgBgYE5m/bXvWUUaGNEneIveQtwPbRGNdChVCNuxiRqE6QLSYrX +AHfaR2HNvQKBgFoyiWXbAlMbXcDmiHdQlMAlYACXBYwn8HnlEAlKj8Ez26sDDvFl +n85vQi5UlBSf9vL0JoSXGZ753LcJp9YBCf+aMl3C/47kF9V/75khiikvFOx9m4rA +T97RmdOREbKKco5R9wwX8n7/AJOnMwc0lK1Q5gsVrEftI320Z/TqJdRpAoGBAM0T +cIbLFRINjWOjkvh+HOg+mxt48GVXPKMcCUrprn4sVw0ulkvACRQSDKVeTR/UufZT +uRbz6L6MFi6KLZadDiqL8SsgGGKlFSzBF+KmMwXkZ76iK40/vcfMcpJcqSTSOrov +DzgtmdnsTDbd//4IjFuX3jkYyT7Zzz1N86SAIGsBAoGAViLtO30m8+kbT3hWccuG +7egU7EknB6TROhU/pnKwrfxjRC1xDqd9TxZK9NZoecZ2Hg7uk0IYNM+9nyfD4xzU +xbEfww95RSEebrruexxPWSSlgP7knrw4cj2TyAHziHIcsPMwli6DCLL98WejahQO +We0zuk12n28A5JSJTgjQO2A= +-----END PRIVATE KEY----- diff --git a/src/views/faceRecognition/module/camera.vue b/src/views/faceRecognition/module/camera.vue index dde4335..2d48658 100644 --- a/src/views/faceRecognition/module/camera.vue +++ b/src/views/faceRecognition/module/camera.vue @@ -1,13 +1,13 @@ @@ -145,15 +153,16 @@ import pagination from '@crud/Pagination' import FaceSearch from './module/faceSearch' import SelfRegister from './module/selfRegister' import BatchImport from './module/batchImport' +import Camera from './module/camera' // import { exportFile } from '@/utils/index' // import qs from 'qs' import { mapGetters } from 'vuex' -import { upload } from '@/utils/upload' +import { upload, uploadFaceImgBase64 } from '@/utils/upload' const defaultForm = { personId: null, libcode: null, barcode: null, personName: null, personPhotoUrl: null, idCard: null, phone: null, personSex: 1, personType: 0, personPhotoBase64: null } export default { name: 'PersonInfoManage', - components: { pagination, crudOperation, rrOperation, FaceSearch, SelfRegister, BatchImport }, + components: { pagination, crudOperation, rrOperation, FaceSearch, SelfRegister, BatchImport, Camera }, cruds() { return CRUD({ title: '人员信息', idField: 'personId', url: 'api/person/initPersonInfo', crudMethod: { ...crudFace }, optShow: { add: true, @@ -196,7 +205,8 @@ export default { filePath: '', imageUrl: null, selfRegisterVisible: false, - faceSearchVisible: false + faceSearchVisible: false, + cameraVisible: false } }, computed: { @@ -224,6 +234,12 @@ export default { }, // 新增前 [CRUD.HOOK.beforeToAdd](crud, form) { + this.imageUrl = null + Object.keys(crud.form).forEach(key => { + this.$set(crud.form, key, null) + }) + this.crud.form.personSex = 1 + this.crud.form.personType = 0 }, // 编辑前 [CRUD.HOOK.beforeToEdit](crud, form) { @@ -233,8 +249,6 @@ export default { } FetchPersonInfoById(params).then(res => { if (res) { - // crud.form = { ...crud.form, ...res } - Object.keys(crud.form).forEach(key => { this.$set(crud.form, key, null) }) @@ -272,10 +286,9 @@ export default { this.fileNames = this.file.name const fileBase64 = await this.getBase64(this.file) - this.imageUrl = fileBase64 upload(this.baseApi + '/api/fileRelevant/uploadFaceImg', this.file).then(res => { - console.log(res) if (res.data.code === 200) { + this.imageUrl = fileBase64 this.form.personPhotoUrl = res.data.data } }) @@ -284,11 +297,30 @@ export default { this.imageUrl = null } }, + showCamera() { + this.cameraVisible = true + this.$nextTick(() => { + this.$refs.cameraRefs.checkBrowserSupport() + this.$refs.cameraRefs.enumerateDevices() + }) + }, + handleCamera() { + if (this.$refs.cameraRefs && this.$refs.cameraRefs.imgValue) { + uploadFaceImgBase64(this.baseApi, this.$refs.cameraRefs.imgValue).then(res => { + if (res.data.code === 200) { + this.form.personPhotoUrl = res.data.data + this.imageUrl = this.$refs.cameraRefs.imgValue + this.handleClose() + } + }) + } else { + this.form.personPhotoUrl = null + this.imageUrl = null + this.handleClose() + } + }, handleFaceSearch() { this.faceSearchVisible = true - // this.$nextTick(() => { - // this.$refs.faceSearchRefs - // }) }, handleSelfRegister() { this.selfRegisterVisible = true @@ -361,18 +393,6 @@ export default { } }) }, - // 获取图片的分辨率 - getImgPx(img) { - const image = new Image() - image.src = img - return new Promise((resolve) => { - image.onload = () => { - const width = image.width - const height = image.height - resolve({ width, height }) - } - }) - }, clickRowHandler(row) { this.$refs.table.clearSelection() this.$refs.table.toggleRowSelection(row) @@ -384,6 +404,13 @@ export default { this.$refs.faceSearchRefs.searchPerson = {} this.$refs.faceSearchRefs.btnLoading = false } + this.cameraVisible = false + if (this.$refs.cameraRefs) { + this.$refs.cameraRefs.stopStream() + this.$refs.cameraRefs.imgValue = '' + this.$refs.cameraRefs.errorMessage = '' + this.$refs.cameraRefs.showVideo = false + } } } } diff --git a/vue.config.js b/vue.config.js index dd6bc37..5b8a69b 100644 --- a/vue.config.js +++ b/vue.config.js @@ -27,6 +27,12 @@ module.exports = { lintOnSave: process.env.NODE_ENV === 'development', productionSourceMap: false, devServer: { + // https: { + // // 读取私钥文件 + // key: require('fs').readFileSync(path.resolve(__dirname, './src/ssl/key.pem')), + // // 读取证书文件 + // cert: require('fs').readFileSync(path.resolve(__dirname, './src/ssl/cert.pem')) + // }, port: port, open: true, overlay: {