5 changed files with 764 additions and 336 deletions
			
			
		| @ -0,0 +1,296 @@ | |||||
|  | <template> | ||||
|  |   <el-dialog | ||||
|  |     title="图片编辑3" | ||||
|  |     top="1vh" | ||||
|  |     width="95%" | ||||
|  |     :visible.sync="visible" | ||||
|  |     fullscreen | ||||
|  |     append-to-body | ||||
|  |     class="img-editor" | ||||
|  |     @closed="closeDialog" | ||||
|  |   > | ||||
|  |     <i class="el-icon-picture-outline replace-picture" /> | ||||
|  |     <input id="inputFile" class="replace-picture" type="file" name="" accept="image/jpeg,image/jpg,image/png" @change="replaceHandle"> | ||||
|  |     <div class="dialog-container"> | ||||
|  |       <div id="tui-image-editor" /> | ||||
|  |     </div> | ||||
|  |     <template slot="footer"> | ||||
|  |       <el-button @click="visible = false">{{ $t('cancel') }}</el-button> | ||||
|  |       <el-button type="primary" @click="submit">{{ $t('confirm') }}</el-button> | ||||
|  |     </template> | ||||
|  |   </el-dialog> | ||||
|  | </template> | ||||
|  | 
 | ||||
|  | <script> | ||||
|  | import 'tui-image-editor/dist/tui-image-editor.css' | ||||
|  | import 'tui-color-picker/dist/tui-color-picker.css' | ||||
|  | import ImageEditor from 'tui-image-editor' | ||||
|  | // 汉化 | ||||
|  | const locale_zh = { | ||||
|  |   // override default English locale to your custom | ||||
|  |   Crop: '裁剪', | ||||
|  |   Resize: '调整大小', | ||||
|  |   ZoomIn: '放大', | ||||
|  |   Hand: '拖拽', | ||||
|  |   History: '历史记录', | ||||
|  |   ZoomOut: '缩小', | ||||
|  |   DeleteAll: '全部删除', | ||||
|  |   Delete: '删除', | ||||
|  |   Undo: '撤销', | ||||
|  |   Redo: '反撤销', | ||||
|  |   Reset: '重置', | ||||
|  |   Flip: '镜像', | ||||
|  |   Rotate: '旋转', | ||||
|  |   Draw: '画', | ||||
|  |   Shape: '形状标注', | ||||
|  |   Icon: '图标标注', | ||||
|  |   Text: '文字标注', | ||||
|  |   Mask: '遮罩', | ||||
|  |   Filter: '滤镜', | ||||
|  |   Bold: '加粗', | ||||
|  |   Italic: '斜体', | ||||
|  |   Underline: '下划线', | ||||
|  |   Left: '左对齐', | ||||
|  |   Center: '居中', | ||||
|  |   Right: '右对齐', | ||||
|  |   Color: '颜色', | ||||
|  |   'Text size': '字体大小', | ||||
|  |   Custom: '自定义', | ||||
|  |   Square: '正方形', | ||||
|  |   Apply: '应用', | ||||
|  |   Cancel: '取消', | ||||
|  |   'Flip X': 'X 轴', | ||||
|  |   'Flip Y': 'Y 轴', | ||||
|  |   Range: '区间', | ||||
|  |   Stroke: '描边', | ||||
|  |   Fill: '填充', | ||||
|  |   Circle: '圆', | ||||
|  |   Triangle: '三角', | ||||
|  |   Rectangle: '矩形', | ||||
|  |   Free: '曲线', | ||||
|  |   Straight: '直线', | ||||
|  |   Arrow: '箭头', | ||||
|  |   'Arrow-2': '箭头2', | ||||
|  |   'Arrow-3': '箭头3', | ||||
|  |   'Star-1': '星星1', | ||||
|  |   'Star-2': '星星2', | ||||
|  |   Polygon: '多边形', | ||||
|  |   Location: '定位', | ||||
|  |   Heart: '心形', | ||||
|  |   Bubble: '气泡', | ||||
|  |   'Custom icon': '自定义图标', | ||||
|  |   'Load Mask Image': '加载蒙层图片', | ||||
|  |   Grayscale: '灰度', | ||||
|  |   Blur: '模糊', | ||||
|  |   Sharpen: '锐化', | ||||
|  |   Emboss: '浮雕', | ||||
|  |   'Remove White': '除去白色', | ||||
|  |   Distance: '距离', | ||||
|  |   Brightness: '亮度', | ||||
|  |   Noise: '噪音', | ||||
|  |   'Color Filter': '彩色滤镜', | ||||
|  |   Sepia: '棕色', | ||||
|  |   Sepia2: '棕色2', | ||||
|  |   Invert: '负片', | ||||
|  |   Pixelate: '像素化', | ||||
|  |   Threshold: '阈值', | ||||
|  |   Tint: '色调', | ||||
|  |   Multiply: '正片叠底', | ||||
|  |   Blend: '混合色' | ||||
|  |   // etc... | ||||
|  | } | ||||
|  | // 去除不需要的右上角的Load和Download和左上角这个默认的logo | ||||
|  | const customTheme = { | ||||
|  |   // image 坐上角度图片 | ||||
|  |   'common.bi.image': '', // 在这里换上你喜欢的logo图片 | ||||
|  |   'common.bisize.width': '0px', | ||||
|  |   'common.bisize.height': '0px', | ||||
|  |   'common.backgroundImage': 'none', | ||||
|  |   'common.backgroundColor': '#f3f4f6', | ||||
|  |   'common.border': '1px solid #444', | ||||
|  | 
 | ||||
|  |   // header | ||||
|  |   'header.backgroundImage': 'none', | ||||
|  |   'header.backgroundColor': '#f3f4f6', | ||||
|  |   'header.border': '0px', | ||||
|  |   'header.display': 'none', | ||||
|  | 
 | ||||
|  |   // load button | ||||
|  |   'loadButton.backgroundColor': '#fff', | ||||
|  |   'loadButton.border': '1px solid #ddd', | ||||
|  |   'loadButton.color': '#222', | ||||
|  |   'loadButton.fontFamily': 'NotoSans, sans-serif', | ||||
|  |   'loadButton.fontSize': '12px', | ||||
|  |   'loadButton.display': 'none', // 可以直接隐藏掉 | ||||
|  | 
 | ||||
|  |   // download button | ||||
|  |   'downloadButton.backgroundColor': '#fdba3b', | ||||
|  |   'downloadButton.border': '1px solid #fdba3b', | ||||
|  |   'downloadButton.color': '#fff', | ||||
|  |   'downloadButton.fontFamily': 'NotoSans, sans-serif', | ||||
|  |   'downloadButton.fontSize': '12px', | ||||
|  |   'downloadButton.display': 'none', // 可以直接隐藏掉 | ||||
|  | 
 | ||||
|  |   // icons default | ||||
|  |   'menu.normalIcon.color': '#8a8a8a', | ||||
|  |   'menu.activeIcon.color': '#555555', | ||||
|  |   'menu.disabledIcon.color': '#434343', | ||||
|  |   'menu.hoverIcon.color': '#e9e9e9', | ||||
|  |   'submenu.normalIcon.color': '#8a8a8a', | ||||
|  |   'submenu.activeIcon.color': '#e9e9e9', | ||||
|  | 
 | ||||
|  |   'menu.iconSize.width': '24px', | ||||
|  |   'menu.iconSize.height': '24px', | ||||
|  |   'submenu.iconSize.width': '32px', | ||||
|  |   'submenu.iconSize.height': '32px', | ||||
|  | 
 | ||||
|  |   // submenu primary color | ||||
|  |   'submenu.backgroundColor': '#1e1e1e', | ||||
|  |   'submenu.partition.color': '#858585', | ||||
|  | 
 | ||||
|  |   // submenu labels | ||||
|  |   'submenu.normalLabel.color': '#858585', | ||||
|  |   'submenu.normalLabel.fontWeight': 'lighter', | ||||
|  |   'submenu.activeLabel.color': '#fff', | ||||
|  |   'submenu.activeLabel.fontWeight': 'lighter', | ||||
|  | 
 | ||||
|  |   // checkbox style | ||||
|  |   'checkbox.border': '1px solid #ccc', | ||||
|  |   'checkbox.backgroundColor': '#fff', | ||||
|  | 
 | ||||
|  |   // rango style | ||||
|  |   'range.pointer.color': '#fff', | ||||
|  |   'range.bar.color': '#666', | ||||
|  |   'range.subbar.color': '#d1d1d1', | ||||
|  | 
 | ||||
|  |   'range.disabledPointer.color': '#414141', | ||||
|  |   'range.disabledBar.color': '#282828', | ||||
|  |   'range.disabledSubbar.color': '#414141', | ||||
|  | 
 | ||||
|  |   'range.value.color': '#fff', | ||||
|  |   'range.value.fontWeight': 'lighter', | ||||
|  |   'range.value.fontSize': '11px', | ||||
|  |   'range.value.border': '1px solid #353535', | ||||
|  |   'range.value.backgroundColor': '#151515', | ||||
|  |   'range.title.color': '#fff', | ||||
|  |   'range.title.fontWeight': 'lighter', | ||||
|  | 
 | ||||
|  |   // colorpicker style | ||||
|  |   'colorpicker.button.border': '1px solid #1e1e1e', | ||||
|  |   'colorpicker.title.color': '#fff' | ||||
|  | } | ||||
|  | export default { | ||||
|  |   props: { | ||||
|  |     bodyStyleShow: { | ||||
|  |       type: Boolean, | ||||
|  |       default: false | ||||
|  |     }, | ||||
|  |     // 是否为病例模板 | ||||
|  |     title: { | ||||
|  |       type: String, | ||||
|  |       default: '' | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   data() { | ||||
|  |     return { | ||||
|  |       visible: false, | ||||
|  |       imgUrl: '', | ||||
|  |       imgAlt: '', | ||||
|  |       instance: null, | ||||
|  |       textOne: '', | ||||
|  |       textTwo: '', | ||||
|  |       textThree: '' | ||||
|  |     } | ||||
|  |   }, | ||||
|  |   mounted() { | ||||
|  |     // ImageEditor | ||||
|  | 
 | ||||
|  |   }, | ||||
|  |   methods: { | ||||
|  |     init(textOne, textTwo, textThree) { | ||||
|  |       textOne ? this.textOne = textOne : '' | ||||
|  |       textTwo ? this.textTwo = textTwo : '' | ||||
|  |       textThree ? this.textThree = textThree : '' | ||||
|  |       this.visible = true | ||||
|  |       this.$nextTick(() => { | ||||
|  |         // console.log(this.imgUrl) | ||||
|  |         this.instance = new ImageEditor( | ||||
|  |           document.querySelector('#tui-image-editor'), | ||||
|  |           { | ||||
|  |             includeUI: { | ||||
|  |               loadImage: { | ||||
|  |                 path: this.imgUrl, | ||||
|  |                 name: 'image' | ||||
|  |               }, | ||||
|  |               // menu: ['crop', 'rotate', 'draw', 'shape', 'icon', 'text', 'filter'], // 底部菜单按钮列表 隐藏镜像flip和遮罩mask | ||||
|  |               initMenu: 'draw', | ||||
|  |               selectionStyle: { | ||||
|  |                 lineWidth: 5, | ||||
|  |                 borderColor: '#000000' | ||||
|  |               }, | ||||
|  |               menuBarPosition: 'bottom', | ||||
|  |               locale: locale_zh, // 本地化语言为中文 | ||||
|  |               theme: customTheme // 自定义主题 | ||||
|  |             } | ||||
|  |           } | ||||
|  |         ) | ||||
|  |         // document.querySelector('.tie-btn-resize').style.display = 'none' // 隐藏顶部重置按钮 | ||||
|  |         document.querySelector('.tie-btn-mask').style.display = 'none' // 隐藏遮罩按钮 | ||||
|  |       }) | ||||
|  |     }, | ||||
|  |     submit() { | ||||
|  |       const base64String = this.instance.toDataURL() | ||||
|  |       // console.log(base64String) | ||||
|  |       this.$emit('fullImgBack', base64String, this.imgAlt, this.textOne, this.textTwo, this.textThree) | ||||
|  |       this.visible = false | ||||
|  |       // 掉后台接口存入后台 --- 暂时用不到 | ||||
|  |       // const data = window.atob(base64String.split(',')[1]) | ||||
|  |       // const ia = new Uint8Array(data.length) | ||||
|  |       // for (let i = 0; i < data.length; i++) { | ||||
|  |       //   ia[i] = data.charCodeAt(i) | ||||
|  |       // } | ||||
|  |       // const blob = new Blob([ia], { type: 'image/png' }) | ||||
|  |       // const fd = new FormData() | ||||
|  |       // fd.append('image', blob) | ||||
|  |       // upload fd | ||||
|  |     }, | ||||
|  |     // 替换图片 | ||||
|  |     replaceHandle(e) { | ||||
|  |       var file = e.target.files[0] | ||||
|  |       console.log(file) | ||||
|  |       var reader = new FileReader() | ||||
|  |       var that = this | ||||
|  |       reader.readAsDataURL(file) | ||||
|  |       console.log(reader) | ||||
|  |       reader.onload = function(e) { | ||||
|  |         that.imgUrl = reader.result | ||||
|  |         that.init() | ||||
|  |       } | ||||
|  |     }, | ||||
|  |     closeDialog() { | ||||
|  |       this.$emit('closeDialog') | ||||
|  |       this.visible = false | ||||
|  |     } | ||||
|  |   } | ||||
|  | } | ||||
|  | </script> | ||||
|  | <style lang="scss" scoped> | ||||
|  | .img-editor{ | ||||
|  |   .replace-picture { | ||||
|  |     z-index: 999; | ||||
|  |     position: fixed; | ||||
|  |     right:35px; | ||||
|  |     top: 73px; | ||||
|  |     cursor: pointer; | ||||
|  |   } | ||||
|  |   .dialog-container { | ||||
|  |     height: calc(100vh - 1vh - 54px - 70px); | ||||
|  |   } | ||||
|  |   #inputFile { | ||||
|  |     opacity: 0; | ||||
|  |   } | ||||
|  |   .el-icon-picture-outline { | ||||
|  |     font-size: 28px; | ||||
|  |   } | ||||
|  | } | ||||
|  | </style> | ||||
| @ -0,0 +1,32 @@ | |||||
|  | <template> | ||||
|  |   <div id="operation-record" style=" background: #fff; padding: 10px 20px 50px 20px;page-break-after:always"> | ||||
|  |     <div class="btnBox"> | ||||
|  |       <el-button v-print="'#laserFunc'" size="small">打印</el-button> | ||||
|  |       <el-button type="primary" size="small" @click="handleSaveTable">保存</el-button> | ||||
|  |     </div> | ||||
|  |     <div id="laserFunc"> | ||||
|  |       <p style="color:#000000;font-size:32px;margin:0 0 30px 0;text-align:center;"> | ||||
|  |         眼底血管造影知情同意书 | ||||
|  |       </p> | ||||
|  |     </div> | ||||
|  |   </div> | ||||
|  | </template> | ||||
|  | 
 | ||||
|  | <script> | ||||
|  | export default { | ||||
|  |   name: 'MraForm', | ||||
|  |   methods: { | ||||
|  |     handleSaveTable() { | ||||
|  |       const data = { | ||||
|  |         treat: this.treatData, | ||||
|  |         beforeTreat: this.beforeTreat | ||||
|  |       } | ||||
|  |       this.$emit('save', data) | ||||
|  |     } | ||||
|  |   } | ||||
|  | } | ||||
|  | </script> | ||||
|  | 
 | ||||
|  | <style scoped> | ||||
|  | 
 | ||||
|  | </style> | ||||
					Loading…
					
					
				
		Reference in new issue