|
@@ -0,0 +1,253 @@
|
|
|
|
+<template>
|
|
|
|
+ <div class="wrapper" v-show="visible">
|
|
|
|
+ <div class="model" v-show="model" @click="model = false">
|
|
|
|
+ <div class="model-show">
|
|
|
|
+ <img :src="modelSrc" alt="">
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="content">
|
|
|
|
+ <div class="show-info">
|
|
|
|
+ <div class="test" :style="'width:'+cwidth+'px;height:'+cheight+'px'">
|
|
|
|
+ <vueCropper ref="cropper" :img="cropper.img " :outputSize="cropper.size" :outputType="cropper.outputType" :info="cropper.info"
|
|
|
|
+ :canScale="cropper.canScale" :autoCrop="cropper.autoCrop" :autoCropWidth="cropper.autoCropWidth" :autoCropHeight="cropper.autoCropHeight"
|
|
|
|
+ :fixed="cropper.fixed" :fixedNumber="cropper.fixedNumber" :enlarge="4"></vueCropper>
|
|
|
|
+ </div>
|
|
|
|
+ <div style="margin-top: 10px;">
|
|
|
|
+ <button type="button" @click="cancel" class="mui-btn">取消</button>
|
|
|
|
+ <button type="button" @click="finish" class="mui-btn" style="float: right;">选取</button>
|
|
|
|
+ </div>
|
|
|
|
+ <div style="font-size: 14px;margin-top: 10px;line-height: 20px;color: red;">1.照片用于人脸识别设备,请上传清晰免冠登记照或肩部以上近照。</div>
|
|
|
|
+ <div style="font-size: 14px;margin-top: 10px;line-height: 20px;color: #888888;">2.可以拖动图片或双手指缩放图片,最好让照片填满马赛克边框。</div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script>
|
|
|
|
+ import {
|
|
|
|
+ VueCropper
|
|
|
|
+ } from 'vue-cropper'
|
|
|
|
+
|
|
|
|
+ export default {
|
|
|
|
+ name: 'TopHeader',
|
|
|
|
+ props: {
|
|
|
|
+ cropper: {
|
|
|
|
+ require: true,
|
|
|
|
+ type: Object,
|
|
|
|
+ default: () => ({
|
|
|
|
+ //img的路径自行修改
|
|
|
|
+ img: '',
|
|
|
|
+ info: true,
|
|
|
|
+ size: 0.8,
|
|
|
|
+ outputType: 'jpeg',
|
|
|
|
+ canScale: false,
|
|
|
|
+ autoCrop: true,
|
|
|
|
+ // 只有自动截图开启 宽度高度才生效
|
|
|
|
+ autoCropWidth: 250,
|
|
|
|
+ autoCropHeight: 350,
|
|
|
|
+ fixed: true,
|
|
|
|
+ // 真实的输出宽高
|
|
|
|
+ infoTrue: true,
|
|
|
|
+ fixedNumber: [5, 7]
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ visible: {
|
|
|
|
+ require: false,
|
|
|
|
+ default: false,
|
|
|
|
+ },
|
|
|
|
+ field: {
|
|
|
|
+ require: false,
|
|
|
|
+ default: 'pic'
|
|
|
|
+ },
|
|
|
|
+ cwidth: {
|
|
|
|
+ require: false,
|
|
|
|
+ default: 250
|
|
|
|
+ },
|
|
|
|
+ cheight: {
|
|
|
|
+ require: false,
|
|
|
|
+ default: 350
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ components: {
|
|
|
|
+ VueCropper,
|
|
|
|
+ },
|
|
|
|
+ created() {},
|
|
|
|
+ data() {
|
|
|
|
+ return {
|
|
|
|
+ model: false,
|
|
|
|
+ modelSrc: '',
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ methods: {
|
|
|
|
+ //点击裁剪,这一步是可以拿到处理后的地址
|
|
|
|
+ finish() {
|
|
|
|
+ this.$refs.cropper.goAutoCrop();
|
|
|
|
+ this.$refs.cropper.getCropData((data) => {
|
|
|
|
+ this.modelSrc = data
|
|
|
|
+ this.model = false;
|
|
|
|
+ //裁剪后的图片显示
|
|
|
|
+ this.cropper.img = this.modelSrc;
|
|
|
|
+ //console.log(data)
|
|
|
|
+ this.$emit('cropperFinish', {
|
|
|
|
+ field: this.field,
|
|
|
|
+ data: data
|
|
|
|
+ });
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ cancel() {
|
|
|
|
+ this.$emit('cropperCancel');
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ }
|
|
|
|
+</script>
|
|
|
|
+
|
|
|
|
+<style scoped>
|
|
|
|
+ /* * {
|
|
|
|
+ margin: 0;
|
|
|
|
+ padding: 0;
|
|
|
|
+ } */
|
|
|
|
+
|
|
|
|
+ .wrapper {
|
|
|
|
+ position: fixed;
|
|
|
|
+ width: 100%;
|
|
|
|
+ top: 0;
|
|
|
|
+ background: #f1f1f1;
|
|
|
|
+ z-index: 99;
|
|
|
|
+ height: 100%;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .content {
|
|
|
|
+ margin: auto;
|
|
|
|
+ max-width: 585px;
|
|
|
|
+ margin-bottom: 100px;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .test-button {
|
|
|
|
+ display: flex;
|
|
|
|
+ flex-wrap: wrap;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .btn {
|
|
|
|
+ display: inline-block;
|
|
|
|
+ line-height: 1;
|
|
|
|
+ white-space: nowrap;
|
|
|
|
+ cursor: pointer;
|
|
|
|
+ background: #fff;
|
|
|
|
+ border: 1px solid #c0ccda;
|
|
|
|
+ color: #1f2d3d;
|
|
|
|
+ text-align: center;
|
|
|
|
+ box-sizing: border-box;
|
|
|
|
+ outline: none;
|
|
|
|
+ margin: 20px 10px 0px 0px;
|
|
|
|
+ padding: 9px 15px;
|
|
|
|
+ font-size: 14px;
|
|
|
|
+ border-radius: 4px;
|
|
|
|
+ color: #fff;
|
|
|
|
+ background-color: #50bfff;
|
|
|
|
+ border-color: #50bfff;
|
|
|
|
+ transition: all .2s ease;
|
|
|
|
+ text-decoration: none;
|
|
|
|
+ user-select: none;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .des {
|
|
|
|
+ line-height: 30px;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ code.language-html {
|
|
|
|
+ padding: 10px 20px;
|
|
|
|
+ margin: 10px 0px;
|
|
|
|
+ display: block;
|
|
|
|
+ background-color: #333;
|
|
|
|
+ color: #fff;
|
|
|
|
+ overflow-x: auto;
|
|
|
|
+ font-family: Consolas, Monaco, Droid, Sans, Mono, Source, Code, Pro, Menlo, Lucida, Sans, Type, Writer, Ubuntu, Mono;
|
|
|
|
+ border-radius: 5px;
|
|
|
|
+ white-space: pre;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .show-info {
|
|
|
|
+ margin-bottom: 50px;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .show-info h2 {
|
|
|
|
+ line-height: 50px;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .title {
|
|
|
|
+ display: block;
|
|
|
|
+ text-decoration: none;
|
|
|
|
+ text-align: center;
|
|
|
|
+ line-height: 1.5;
|
|
|
|
+ margin: 20px 0px;
|
|
|
|
+ background-image: -webkit-linear-gradient(left, #3498db, #f47920 10%, #d71345 20%, #f7acbc 30%, #ffd400 40%, #3498db 50%, #f47920 60%, #d71345 70%, #f7acbc 80%, #ffd400 90%, #3498db);
|
|
|
|
+ color: transparent;
|
|
|
|
+ -webkit-background-clip: text;
|
|
|
|
+ background-size: 200% 100%;
|
|
|
|
+ animation: slide 5s infinite linear;
|
|
|
|
+ font-size: 40px;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .test {
|
|
|
|
+ height: 285px;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .model {
|
|
|
|
+ position: fixed;
|
|
|
|
+ z-index: 10;
|
|
|
|
+ width: 100vw;
|
|
|
|
+ height: 100vh;
|
|
|
|
+ overflow: auto;
|
|
|
|
+ top: 0;
|
|
|
|
+ left: 0;
|
|
|
|
+ background: rgba(0, 0, 0, 0.8);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .model-show {
|
|
|
|
+ display: flex;
|
|
|
|
+ justify-content: center;
|
|
|
|
+ align-items: center;
|
|
|
|
+ width: 100vw;
|
|
|
|
+ height: 100vh;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .model img {
|
|
|
|
+ display: block;
|
|
|
|
+ margin: auto;
|
|
|
|
+ max-width: 80%;
|
|
|
|
+ user-select: none;
|
|
|
|
+ background-position: 0px 0px, 10px 10px;
|
|
|
|
+ background-size: 20px 20px;
|
|
|
|
+ background-image: linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%, #eee 100%), linear-gradient(45deg, #eee 25%, white 25%, white 75%, #eee 75%, #eee 100%);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .c-item {
|
|
|
|
+ display: block;
|
|
|
|
+ padding: 10px 0;
|
|
|
|
+ user-select: none;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @keyframes slide {
|
|
|
|
+ 0% {
|
|
|
|
+ background-position: 0 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ 100% {
|
|
|
|
+ background-position: -100% 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @media screen and (max-width: 1000px) {
|
|
|
|
+ .content {
|
|
|
|
+ max-width: 90%;
|
|
|
|
+ margin: auto;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .test {
|
|
|
|
+ margin-top: 10%;
|
|
|
|
+ width: 250px;
|
|
|
|
+ height: 350px;
|
|
|
|
+ margin: 10% auto 0 auto;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+</style>
|