|
|
@ -1,14 +1,19 @@ |
|
|
|
<template> |
|
|
|
<div class="camera"> |
|
|
|
<camera device-position="back" flash="auto" @error="error" style="width: 100%; height: 500upx"> |
|
|
|
<camera device-position="back" flash="auto" @error="error" style="width: 100%; height: 60%"> |
|
|
|
<!-- <cover-image src="../../static/scan-frame/scan-img.png" class="scan-img"></cover-image> --> |
|
|
|
</camera> |
|
|
|
<view class="scan-text">支持将“住院病案首页”“医嘱单”拍照进行文字识别</view> |
|
|
|
<button type="primary" @click="takePhoto">拍照</button> |
|
|
|
<scroll-view :scroll-x="true"> |
|
|
|
<image class="photos-box" v-for="item in srcList" :key="item" :src="item" /> |
|
|
|
<button class="take-btn" @click="takePhoto"></button> |
|
|
|
<scroll-view class="scroll-box" :scroll-x="true"> |
|
|
|
<div class="flex flex-nowrap"> |
|
|
|
<div class="photos-case" v-for="(item, index) in srcList" :key="item"> |
|
|
|
<image class="photos-box" :src="item" /> |
|
|
|
<u-icon color="#aaa" size="50rpx" class="photos-icon" name="close-circle-fill" @click="delPhotos(index)"></u-icon> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</scroll-view> |
|
|
|
<button type="primary" @click="submitSrc">确定</button> |
|
|
|
<button class="submit-btn flex items-center justify-center flex-nowrap" @click="submitSrc">确定({{ srcList.length }})</button> |
|
|
|
<u-toast ref="uToast" /> |
|
|
|
</div> |
|
|
|
</template> |
|
|
@ -19,7 +24,7 @@ import { mapState, mapMutations } from 'vuex'; |
|
|
|
export default { |
|
|
|
components: {}, |
|
|
|
data: () => ({ |
|
|
|
srcList: ['http://101.201.226.163/filedeal/uploads/upload/20220117/5544a104844c448d8fbe339563580008.jpg'], |
|
|
|
srcList: ['http://101.201.226.163/filedeal/uploads/upload/20220118/23f05a3dde9a4323bc95b1b061379cb5.jpeg'], |
|
|
|
action: '', |
|
|
|
}), |
|
|
|
computed: { |
|
|
@ -31,7 +36,7 @@ export default { |
|
|
|
// this.srcList = []; |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
...mapMutations('carbasics', ['setIsRefresh']), |
|
|
|
...mapMutations('carbasics', ['setIsRefresh', 'setBasicData']), |
|
|
|
// 拍张并且上传给后台 |
|
|
|
takePhoto() { |
|
|
|
const ctx = uni.createCameraContext(); |
|
|
@ -65,18 +70,27 @@ export default { |
|
|
|
// 点击确定提交图片路径数组进行试题提交 |
|
|
|
async submitSrc() { |
|
|
|
try { |
|
|
|
if (!this.srcList.length) { |
|
|
|
this.$refs.uToast.show({ |
|
|
|
title: '没有选择图片,无法识别', |
|
|
|
type: 'warning', |
|
|
|
}); |
|
|
|
return; |
|
|
|
} |
|
|
|
const param = { |
|
|
|
fileList: this.srcList, |
|
|
|
projectId: this.firstAidId, |
|
|
|
}; |
|
|
|
const data = await this.$u.api.generalBasic(param); |
|
|
|
console.log('data: ', data); |
|
|
|
this.saveAnswer(data); |
|
|
|
this.$refs.uToast.show({ |
|
|
|
title: '上传成功', |
|
|
|
type: 'success', |
|
|
|
}); |
|
|
|
this.setIsRefresh(); |
|
|
|
uni.navigateBack(); |
|
|
|
setTimeout(() => { |
|
|
|
uni.navigateBack(); |
|
|
|
}, 500); |
|
|
|
} catch (error) { |
|
|
|
this.$refs.uToast.show({ |
|
|
|
title: '上传失败,请稍后重试', |
|
|
@ -84,6 +98,40 @@ export default { |
|
|
|
}); |
|
|
|
} |
|
|
|
}, |
|
|
|
// 删除要识别的图片 |
|
|
|
delPhotos(index) { |
|
|
|
let { srcList } = this; |
|
|
|
srcList.splice(index, 1); |
|
|
|
this.srcList = [...srcList]; |
|
|
|
this.$refs.uToast.show({ |
|
|
|
title: '删除成功', |
|
|
|
type: 'success', |
|
|
|
}); |
|
|
|
}, |
|
|
|
// 图片识别成功后,将识别到的答案存储到后台 |
|
|
|
saveAnswer(data) { |
|
|
|
const codeAndAnswerList = []; |
|
|
|
for (let key in data) { |
|
|
|
let obj = { |
|
|
|
questionCode: key, |
|
|
|
answer: [], |
|
|
|
}; |
|
|
|
if (key) { |
|
|
|
for (var i = 0; i < data[key].length; i++) { |
|
|
|
obj.answer.push(data[key][i].answer); |
|
|
|
} |
|
|
|
codeAndAnswerList.push(obj); |
|
|
|
} |
|
|
|
} |
|
|
|
if (!codeAndAnswerList.length) { |
|
|
|
console.log('没有答案,无法存储'); |
|
|
|
return; |
|
|
|
} |
|
|
|
// 准备存储读取到的答案,然后返回录入界面,在录入界面用model显示 |
|
|
|
// 试题为多选显示,勾选代表确定提交识别到的答案,不勾选代表不提交 |
|
|
|
// 所有试题只能 勾选/取消勾选 无法修改答案 |
|
|
|
this.setBasicData(codeAndAnswerList); |
|
|
|
}, |
|
|
|
}, |
|
|
|
watch: {}, |
|
|
|
|
|
|
@ -111,9 +159,52 @@ export default { |
|
|
|
</script> |
|
|
|
|
|
|
|
<style> |
|
|
|
.scan-text { |
|
|
|
color: #aaa; |
|
|
|
font-size: 14px; |
|
|
|
margin: 10rpx; |
|
|
|
} |
|
|
|
.scroll-box { |
|
|
|
white-space: nowrap; |
|
|
|
} |
|
|
|
.photos-case { |
|
|
|
position: relative; |
|
|
|
} |
|
|
|
.photos-icon { |
|
|
|
position: absolute; |
|
|
|
font-size: 20px; |
|
|
|
right: 0px; |
|
|
|
top: 0px; |
|
|
|
} |
|
|
|
.camera { |
|
|
|
height: 100vh; |
|
|
|
width: 100%; |
|
|
|
background-color: #000; |
|
|
|
position: relative; |
|
|
|
} |
|
|
|
.photos-box { |
|
|
|
display: inline-block; |
|
|
|
width: 130rpx; |
|
|
|
height: 130rpx !important; |
|
|
|
margin: 10rpx; |
|
|
|
margin: 20rpx; |
|
|
|
} |
|
|
|
.take-btn { |
|
|
|
background-color: #fff; |
|
|
|
height: 100rpx; |
|
|
|
width: 100rpx; |
|
|
|
position: absolute; |
|
|
|
bottom: 60rpx; |
|
|
|
left: 325rpx; |
|
|
|
border-radius: 50%; |
|
|
|
box-shadow: 0 0 20px rgb(255, 255, 255); |
|
|
|
} |
|
|
|
.submit-btn { |
|
|
|
height: 50rpx; |
|
|
|
position: absolute; |
|
|
|
bottom: 60rpx; |
|
|
|
right: 40rpx; |
|
|
|
font-size: 14px; |
|
|
|
background-color: #40a9ff; |
|
|
|
color: #fff; |
|
|
|
} |
|
|
|
</style> |
|
|
|