16 changed files with 554 additions and 22 deletions
@ -1,8 +1,8 @@ |
|||
VUE_APP_NODE_ENV=development |
|||
VUE_APP_BASE_URL=http://101.201.226.163 |
|||
VUE_APP_API_URL=http://101.201.226.163/gateway |
|||
VUE_APP_MSG_URL=ws://www.tall.wiki/websocket/message/v4.0/ws |
|||
VUE_APP_PROJECT_PATH=http://101.201.226.163/carBasicTall |
|||
VUE_APP_QUESTION_PATH=http://101.201.226.163/carbasics |
|||
VUE_APP_BASE_URL=https://test.tall.wiki |
|||
VUE_APP_API_URL=https://test.tall.wiki/gateway-1 |
|||
VUE_APP_MSG_URL=wss://www.tall.wiki/websocket/message/v4.0/ws |
|||
VUE_APP_PROJECT_PATH=https://test.tall.wiki/carBasicTall |
|||
VUE_APP_QUESTION_PATH=https://test.tall.wiki/carbasics |
|||
VUE_APP_VERSION=v3.1.0 |
|||
VUE_APP_PUBLIC_PATH=/carBasicCalendar/ |
|||
|
@ -1,9 +1,22 @@ |
|||
# 0.1.0 (2022-03-07) |
|||
# 0.1.0 (2022-05-25) |
|||
|
|||
### 🐛 Bug 修复 |
|||
范围|描述|commitId |
|||
--|--|-- |
|||
- | 详情页内容迁移 | [2752bc9](https://101.201.226.163:50022/binbin0314/Typhoneye/commits/2752bc9) |
|||
- | ocr识别及答案存储 | [5301c60](https://101.201.226.163:50022/binbin0314/Typhoneye/commits/5301c60) |
|||
- | 病例列表,神内神外界面重构,ocr界面开发及逻辑处理 | [b45b67c](https://101.201.226.163:50022/binbin0314/Typhoneye/commits/b45b67c) |
|||
- | 暴风眼 | [cb74b8b](https://101.201.226.163:50022/binbin0314/Typhoneye/commits/cb74b8b) |
|||
- | bug修复 | [63940a6](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/63940a6) |
|||
|
|||
|
|||
范围|描述|commitId |
|||
--|--|-- |
|||
- | 2.0.4测试环境 | [0f84b7e](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/0f84b7e) |
|||
- | 2.0.2版本号与患者列表bug修改 | [9cdec00](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/9cdec00) |
|||
- | 暴风眼2.0.0上线bug测试及修改 | [6000be9](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/6000be9) |
|||
- | 2.0.0上线 | [5a6d721](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/5a6d721) |
|||
- | 静脉溶栓显示及判断bug修复 | [d5a5ca9](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/d5a5ca9) |
|||
- | bug修复 | [bb28e16](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/bb28e16) |
|||
- | 多选框等bug修改 | [acf511d](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/acf511d) |
|||
- | 详情页内容迁移 | [2752bc9](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/2752bc9) |
|||
- | ocr识别及答案存储 | [5301c60](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/5301c60) |
|||
- | 病例列表,神内神外界面重构,ocr界面开发及逻辑处理 | [b45b67c](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/b45b67c) |
|||
- | 暴风眼 | [cb74b8b](https://101.201.226.163:50022/ZhangBin/Typhoneye/commits/cb74b8b) |
|||
|
|||
|
@ -0,0 +1,134 @@ |
|||
<template> |
|||
<view class="flex flex-col items-center w-full"> |
|||
<!-- <a-spin tip="图片生成中..." :spinning="spinning" class="w-full"> --> |
|||
<view class="flex flex-col items-center w-full" ref="child"> |
|||
<view class="hb flex justify-center" ref="shareCode" id="code"> |
|||
<img src="@/components/Share/imgs/bg.png" mode="widthFix" class="w-full" /> |
|||
<view class="flex flex-col items-center hb-box"> |
|||
<img :src="url" alt="" class="hb-img" /> |
|||
<text class="text-xl font-bold">{{ hospitalName }}</text> |
|||
<text class="text-xl font-bold">{{ doctorName }}</text> |
|||
</view> |
|||
</view> |
|||
<!-- <ShareCode ref="shareCode" :url="url" :hospitalName="hospitalName" :doctorName="doctorName" /> --> |
|||
<view class="flex justify-center w-full" @click="downLoadImage"> |
|||
<img src="@/components/Share/imgs/btn.png" mode="aspectFit" class="btn" /> |
|||
</view> |
|||
</view> |
|||
<!-- </a-spin> --> |
|||
<!-- <a-modal v-model="visible" title="请长按图片保存到手机" @ok="visible = false" :footer="footer"> |
|||
<img class="w-full" :src="new_url" id="all_img" /> |
|||
</a-modal> --> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
import html2canvas from 'html2canvas'; |
|||
|
|||
export default { |
|||
props: {}, |
|||
data() { |
|||
return { |
|||
// url: require('./imgs/code.png'), |
|||
url: '', |
|||
hospitalName: '', |
|||
doctorName: '', |
|||
spinning: false, |
|||
visible: false, |
|||
cancelText: '', |
|||
new_url: '', |
|||
footer: [], |
|||
}; |
|||
}, |
|||
|
|||
computed: mapState('role', ['roleId']), |
|||
|
|||
created() { |
|||
this.getCode(); |
|||
}, |
|||
|
|||
mounted() { |
|||
setTimeout(() => { |
|||
console.log('ref', this.$refs); |
|||
}, 2000); |
|||
}, |
|||
|
|||
methods: { |
|||
async downLoadImage() { |
|||
// this.spinning = true; |
|||
console.log('code', wx.createSelectorQuery().select('code')); |
|||
let dom = wx.createSelectorQuery(); |
|||
console.log('dom: ', dom.select('#code')); |
|||
html2canvas(dom.select('#code'), { |
|||
// width: dom.clientWidth, |
|||
// height: dom.clientHeight, |
|||
// scrollX: 0, |
|||
// scrollY: 0, |
|||
useCORS: true, |
|||
}).then(canvas => { |
|||
console.log('canvas: ', canvas); |
|||
// 转成图片,生成图片地址 |
|||
// let imgUrl = canvas.toDataURL('image/png'); //可将 canvas 转为 base64 格式 |
|||
// console.log('imgUrl: ', imgUrl); |
|||
// this.save(imgUrl); |
|||
}); |
|||
}, |
|||
|
|||
save(src) { |
|||
this.spinning = false; |
|||
this.new_url = src; |
|||
this.visible = true; |
|||
|
|||
var a = document.createElement('a'); |
|||
a.href = src; |
|||
a.download = '分享'; |
|||
document.body.appendChild(a); |
|||
// 触发点击 |
|||
a.click(); |
|||
// 然后移除 |
|||
document.body.removeChild(a); |
|||
}, |
|||
|
|||
/** |
|||
* 分享问卷(生成分享二维码) |
|||
*/ |
|||
async getCode() { |
|||
try { |
|||
const params = { roleId: this.roleId, type: 1 }; |
|||
const data = await this.$u.api.shareScreening(params); |
|||
this.url = data.qrCode; |
|||
this.hospitalName = data.hospitalName; |
|||
this.doctorName = data.doctorName; |
|||
} catch (error) { |
|||
console.error('error: ', error); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.hb { |
|||
width: 90%; |
|||
margin: 18px auto; |
|||
position: relative; |
|||
|
|||
.hb-box { |
|||
position: absolute; |
|||
top: 38%; |
|||
} |
|||
|
|||
.hb-img { |
|||
width: 150px; |
|||
height: 150px; |
|||
margin-bottom: 24px; |
|||
} |
|||
} |
|||
|
|||
.btn { |
|||
width: 152px; |
|||
height: 42px; |
|||
margin-bottom: 50px; |
|||
} |
|||
</style> |
@ -0,0 +1,98 @@ |
|||
<template> |
|||
<view class="flex flex-col items-center w-full"> |
|||
<view class="flex flex-col items-center w-full" ref="child"> |
|||
<view class="hb flex justify-center" ref="shareCode" id="code"> |
|||
<img :src="url" mode="widthFix" class="w-full" /> |
|||
</view> |
|||
<view class="flex justify-center w-full" @click="downLoadImage(url)"> |
|||
<img src="@/components/Share/imgs/btn.png" mode="aspectFit" class="btn" /> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
|
|||
export default { |
|||
props: {}, |
|||
data() { |
|||
return { |
|||
url: require('./imgs/all.png'), |
|||
// url: '', |
|||
}; |
|||
}, |
|||
|
|||
computed: mapState('role', ['roleId']), |
|||
|
|||
created() { |
|||
this.getCode(); |
|||
}, |
|||
|
|||
methods: { |
|||
downLoadImage(url) { |
|||
uni.downloadFile({ |
|||
url, |
|||
success: res => { |
|||
if (res.statusCode === 200) { |
|||
uni.saveImageToPhotosAlbum({ |
|||
filePath: res.tempFilePath, |
|||
success: function () { |
|||
uni.showToast({ |
|||
title: '保存成功', |
|||
icon: 'none', |
|||
}); |
|||
}, |
|||
fail: function () { |
|||
uni.showToast({ |
|||
title: '保存失败', |
|||
icon: 'none', |
|||
}); |
|||
}, |
|||
}); |
|||
} |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
/** |
|||
* 分享问卷(生成分享二维码) |
|||
*/ |
|||
async getCode() { |
|||
try { |
|||
uni.$t.ui.showLoading('玩命加载中...'); |
|||
const params = { roleId: this.roleId, type: 1 }; |
|||
const data = await this.$u.api.shareScreening(params); |
|||
this.url = data.qrCode; |
|||
} catch (error) { |
|||
console.error('error: ', error); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.hb { |
|||
width: 90%; |
|||
margin: 18px auto; |
|||
position: relative; |
|||
|
|||
.hb-box { |
|||
position: absolute; |
|||
top: 38%; |
|||
} |
|||
|
|||
.hb-img { |
|||
width: 150px; |
|||
height: 150px; |
|||
margin-bottom: 24px; |
|||
} |
|||
} |
|||
|
|||
.btn { |
|||
width: 152px; |
|||
height: 42px; |
|||
margin-bottom: 50px; |
|||
} |
|||
</style> |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 61 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 33 KiB |
@ -0,0 +1,176 @@ |
|||
<template> |
|||
<view class="w-full"> |
|||
<view class="w-full flex flex-col"> |
|||
<view class="bg-white flex flex-col px-2"> |
|||
<view class="flex flex-nowrap"> |
|||
<view @click="changeType(0)" class="tags tag-all" :class="type === 0 ? 'all-checked' : ''">全部{{ tags.all }}</view> |
|||
<view @click="changeType(1)" class="tags tag-high" :class="type === 1 ? 'high-checked' : ''">高危{{ tags.high }}</view> |
|||
<view @click="changeType(2)" class="tags tag-middle" :class="type === 2 ? 'middle-checked' : ''">中危{{ tags.middle }}</view> |
|||
<view @click="changeType(3)" class="tags tag-low" :class="type === 3 ? 'low-checked' : ''">低危{{ tags.low }}</view> |
|||
</view> |
|||
<u-input |
|||
:border="true" |
|||
input-align="center" |
|||
border-color="#0096ff" |
|||
placeholder-style="font-size: 14px" |
|||
class="mt-1 mb-4" |
|||
v-model="name" |
|||
placeholder="姓名搜索" |
|||
@blur="getWorkload" |
|||
/> |
|||
</view> |
|||
<view class="rankings" v-if="lists.length"> |
|||
<view class="bg-white px-2 pb-4"> |
|||
<view class="box p-4 mb-2" v-for="(list, index) in lists" :key="index"> |
|||
<view class="sign sign-hign" v-if="list.type === 3">高危</view> |
|||
<view class="sign sign-middle" v-if="list.type === 2">中危</view> |
|||
<view class="sign sign-low" v-if="list.type === 1">低危</view> |
|||
<view class="text-base font-bold"> |
|||
<span>{{ list.name }}</span> |
|||
<span class="ml-4">{{ list.phone }}</span> |
|||
</view> |
|||
<view class="mt-3" style="color: #666"> |
|||
提交时间: |
|||
<span v-if="list.submitTime"> {{ $moment(+list.submitTime).format('YYYY-MM-DD HH:mm') }}</span> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
<u-line></u-line> |
|||
</view> |
|||
<u-empty v-else mode="list" class="mt-10"> </u-empty> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
|
|||
export default { |
|||
data() { |
|||
return { |
|||
tags: { |
|||
all: '0', |
|||
high: '0', |
|||
middle: '0', |
|||
low: '0', |
|||
}, |
|||
lists: [], |
|||
name: '', |
|||
type: 0, |
|||
clickAll: true, |
|||
clickHigh: false, |
|||
clickMiddle: false, |
|||
clickLow: false, |
|||
}; |
|||
}, |
|||
|
|||
computed: mapState('role', ['roleId']), |
|||
|
|||
async created() { |
|||
await this.getWorkload(); |
|||
}, |
|||
|
|||
methods: { |
|||
async changeType(type) { |
|||
this.type = type; |
|||
await this.getWorkload(); |
|||
}, |
|||
|
|||
/** |
|||
* 村医查看工作量 |
|||
* @param {String} name 患者名称 |
|||
* @param {Number} type 高危类型 0全部 1高危 2中危 3低危 默认为0 |
|||
*/ |
|||
async getWorkload() { |
|||
try { |
|||
uni.$t.ui.showLoading('玩命加载中...'); |
|||
const { name, type } = this; |
|||
const params = { name, type }; |
|||
const data = await this.$u.api.villageWorkload(params); |
|||
this.tags.all = data.totalNum; |
|||
this.tags.high = data.highNum > 99 ? '99+' : data.highNum; |
|||
this.tags.middle = data.middleNum > 99 ? '99+' : data.middleNum; |
|||
this.tags.low = data.lowNum > 99 ? '99+' : data.lowNum; |
|||
this.lists = data.workloadLists; |
|||
} catch (error) { |
|||
console.error('error: ', error); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped> |
|||
.tags { |
|||
padding: 0 14px; |
|||
height: 30px; |
|||
border-radius: 16px; |
|||
font-size: 12px; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: center; |
|||
margin: 16px 8px 7px 0; |
|||
} |
|||
.tag-all { |
|||
color: #5985c3; |
|||
background: rgba(89, 133, 195, 0.1); |
|||
} |
|||
.all-checked { |
|||
border: 1px solid #5985c3; |
|||
} |
|||
.tag-high { |
|||
color: #ff3131; |
|||
background: rgba(255, 49, 49, 0.1); |
|||
} |
|||
.high-checked { |
|||
border: 1px solid #ff3131; |
|||
} |
|||
.tag-middle { |
|||
color: #ff864b; |
|||
background: rgba(255, 134, 75, 0.1); |
|||
} |
|||
.middle-checked { |
|||
border: 1px solid #ff864b; |
|||
} |
|||
.tag-low { |
|||
color: #0096ff; |
|||
background: rgba(89, 133, 195, 0.1); |
|||
} |
|||
.low-checked { |
|||
border: 1px solid #0096ff; |
|||
} |
|||
|
|||
.rankings { |
|||
overflow-y: scroll; |
|||
} |
|||
|
|||
.box { |
|||
width: 100%; |
|||
background: #ffffff; |
|||
box-shadow: 0px 1px 5px rgba(0, 0, 0, 0.16); |
|||
border-radius: 6px; |
|||
position: relative; |
|||
} |
|||
|
|||
.sign { |
|||
width: 60px; |
|||
height: 28px; |
|||
line-height: 28px; |
|||
border-radius: 0px 6px 0px 6px; |
|||
font-size: 14px; |
|||
color: #ffffff; |
|||
text-align: center; |
|||
position: absolute; |
|||
right: 0; |
|||
top: 0; |
|||
} |
|||
.sign-hign { |
|||
background: #ff3131; |
|||
} |
|||
.sign-middle { |
|||
background: #ff864b; |
|||
} |
|||
.sign-low { |
|||
background: #0096ff; |
|||
} |
|||
</style> |
@ -0,0 +1,81 @@ |
|||
<template> |
|||
<view class="w-full"> |
|||
<view class="w-full flex flex-col"> |
|||
<view class="flex flex-nowrap bg-white mb-2 px-2" style="height: 48px; line-height: 48px"> |
|||
<view class="col1">排名</view> |
|||
<view class="col2">单位/个人</view> |
|||
<view class="col2">提交总数</view> |
|||
<view class="col2">高危人数</view> |
|||
</view> |
|||
<view class="rankings" v-if="lists.length"> |
|||
<view class="bg-white px-2"> |
|||
<view class="ranking flex flex-nowrap" v-for="(list, index) in lists" :key="index"> |
|||
<view class="col1"> |
|||
{{ index + 1 }} |
|||
</view> |
|||
<view class="col2 text-blue-500">{{ list.doctorName }}</view> |
|||
<view class="col2 font-bold"> |
|||
<span>{{ list.highNum }}</span> |
|||
</view> |
|||
<view class="col2 font-bold">{{ list.totalNum }}</view> |
|||
</view> |
|||
</view> |
|||
<u-line></u-line> |
|||
</view> |
|||
<u-empty v-else mode="list" class="mt-10"> </u-empty> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
|
|||
export default { |
|||
data() { |
|||
return { lists: [] }; |
|||
}, |
|||
|
|||
computed: mapState('role', ['roleId']), |
|||
|
|||
created() { |
|||
this.getData(); |
|||
}, |
|||
|
|||
methods: { |
|||
// 卫生院查看村医工作量 |
|||
async getData() { |
|||
try { |
|||
uni.$t.ui.showLoading('玩命加载中...'); |
|||
this.lists = []; |
|||
const params = { roleId: this.roleId }; |
|||
const data = await this.$u.api.centerWorkload(params); |
|||
this.lists = data; |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style> |
|||
.rankings { |
|||
overflow-y: scroll; |
|||
} |
|||
|
|||
.ranking { |
|||
height: 48px; |
|||
line-height: 48px; |
|||
border-bottom: 1px solid #f4f4f4; |
|||
} |
|||
|
|||
.col1 { |
|||
width: 16%; |
|||
text-align: center; |
|||
} |
|||
|
|||
.col2 { |
|||
width: 28%; |
|||
text-align: center; |
|||
} |
|||
</style> |
Loading…
Reference in new issue