@ -1,23 +0,0 @@ |
|||||
node_modules |
|
||||
/dist |
|
||||
test.zip |
|
||||
api.zip |
|
||||
dist.zip |
|
||||
.DS_Store |
|
||||
|
|
||||
|
|
||||
# local env files |
|
||||
.env.local |
|
||||
.env.*.local |
|
||||
|
|
||||
# Log files |
|
||||
npm-debug.log* |
|
||||
|
|
||||
# Editor directories and files |
|
||||
.idea |
|
||||
.vscode |
|
||||
*.suo |
|
||||
*.ntvs* |
|
||||
*.njsproj |
|
||||
*.sln |
|
||||
*.sw? |
|
@ -1,36 +0,0 @@ |
|||||
# Bfy_Pad_v4 |
|
||||
|
|
||||
#### Description |
|
||||
{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**} |
|
||||
|
|
||||
#### Software Architecture |
|
||||
Software architecture description |
|
||||
|
|
||||
#### Installation |
|
||||
|
|
||||
1. xxxx |
|
||||
2. xxxx |
|
||||
3. xxxx |
|
||||
|
|
||||
#### Instructions |
|
||||
|
|
||||
1. xxxx |
|
||||
2. xxxx |
|
||||
3. xxxx |
|
||||
|
|
||||
#### Contribution |
|
||||
|
|
||||
1. Fork the repository |
|
||||
2. Create Feat_xxx branch |
|
||||
3. Commit your code |
|
||||
4. Create Pull Request |
|
||||
|
|
||||
|
|
||||
#### Gitee Feature |
|
||||
|
|
||||
1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md |
|
||||
2. Gitee blog [blog.gitee.com](https://blog.gitee.com) |
|
||||
3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) |
|
||||
4. The most valuable open source project [GVP](https://gitee.com/gvp) |
|
||||
5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) |
|
||||
6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) |
|
@ -1,19 +0,0 @@ |
|||||
# ht-ageing |
|
||||
|
|
||||
## Project setup |
|
||||
``` |
|
||||
npm install |
|
||||
``` |
|
||||
|
|
||||
### Compiles and hot-reloads for development |
|
||||
``` |
|
||||
npm run serve |
|
||||
``` |
|
||||
|
|
||||
### Compiles and minifies for production |
|
||||
``` |
|
||||
npm run build |
|
||||
``` |
|
||||
|
|
||||
### Customize configuration |
|
||||
See [Configuration Reference](https://cli.vuejs.org/config/). |
|
@ -1 +0,0 @@ |
|||||
CARBASICS2023-WEB-PAD |
|
@ -1,5 +0,0 @@ |
|||||
module.exports = { |
|
||||
presets: [ |
|
||||
'@vue/cli-plugin-babel/preset' |
|
||||
] |
|
||||
} |
|
@ -1,42 +0,0 @@ |
|||||
{ |
|
||||
"name": "storm-pad", |
|
||||
"version": "2.0.0", |
|
||||
"private": true, |
|
||||
"scripts": { |
|
||||
"serve": "vue-cli-service serve", |
|
||||
"test": "vue-cli-service build --mode test", |
|
||||
"build": "vue-cli-service build" |
|
||||
}, |
|
||||
"dependencies": { |
|
||||
"@nutui/nutui-jdl": "^1.0.5", |
|
||||
"ant-design-vue": "^1.7.2", |
|
||||
"axios": "^1.4.0", |
|
||||
"core-js": "^3.6.5", |
|
||||
"dayjs": "^1.11.9", |
|
||||
"echarts": "^5.6.0", |
|
||||
"install": "^0.13.0", |
|
||||
"npm": "^11.1.0", |
|
||||
"reqwest": "^2.0.5", |
|
||||
"scss": "^0.2.4", |
|
||||
"scss-loader": "^0.0.1", |
|
||||
"stylus-loader": "^3.0.2", |
|
||||
"vant": "^2.12.54", |
|
||||
"vue": "^2.6.11", |
|
||||
"vue-esign": "^1.1.4", |
|
||||
"vue-infinite-scroll": "^2.0.2", |
|
||||
"vue-quill-editor": "^3.0.6", |
|
||||
"vue-router": "^3.2.0", |
|
||||
"vuex": "^3.4.0", |
|
||||
"vuex-persistedstate": "^4.1.0" |
|
||||
}, |
|
||||
"devDependencies": { |
|
||||
"@vue/cli-plugin-babel": "~4.5.19", |
|
||||
"@vue/cli-plugin-router": "~4.5.19", |
|
||||
"@vue/cli-plugin-vuex": "~4.5.19", |
|
||||
"@vue/cli-service": "~4.5.19", |
|
||||
"less": "^3.0.4", |
|
||||
"less-loader": "^5.0.0", |
|
||||
"postcss-px-to-viewport": "^1.1.1", |
|
||||
"vue-template-compiler": "^2.6.11" |
|
||||
} |
|
||||
} |
|
@ -1,22 +0,0 @@ |
|||||
module.exports = { |
|
||||
plugins: { |
|
||||
'postcss-px-to-viewport': { |
|
||||
// options
|
|
||||
unitToConvert: 'px', |
|
||||
viewportWidth: 1100, |
|
||||
unitPrecision: 2, |
|
||||
propList: ['*'], |
|
||||
viewportUnit: 'vw', |
|
||||
fontViewportUnit: 'vw', |
|
||||
selectorBlackList: [], |
|
||||
minPixelValue: 1, |
|
||||
mediaQuery: false, |
|
||||
replace: true, |
|
||||
exclude: undefined, |
|
||||
include: undefined, |
|
||||
landscape: false, |
|
||||
landscapeUnit: 'vw', |
|
||||
landscapeWidth: 700 |
|
||||
} |
|
||||
} |
|
||||
} |
|
@ -1,30 +0,0 @@ |
|||||
<!DOCTYPE html> |
|
||||
<html lang=""> |
|
||||
|
|
||||
<head> |
|
||||
<meta charset="utf-8"> |
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> |
|
||||
<meta name="viewport" |
|
||||
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> |
|
||||
<link rel="icon" href="<%= BASE_URL %>logo.jpg"> |
|
||||
<title>绿道质控</title> |
|
||||
<meta http-equiv="Pragma" content="no-cache"> |
|
||||
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"> |
|
||||
<meta http-equiv="Expires" content="0"> |
|
||||
</head> |
|
||||
|
|
||||
<body> |
|
||||
<noscript> |
|
||||
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. |
|
||||
Please enable it to continue.</strong> |
|
||||
</noscript> |
|
||||
<div id="app"></div> |
|
||||
<!-- built files will be auto injected --> |
|
||||
<!-- <script type="text/javascript" src="./vconsole.js"></script> --> |
|
||||
<script type="text/javascript" src="./uni.webview.1.5.4.js"></script> |
|
||||
<script> |
|
||||
// var vConsole = new VConsole() |
|
||||
</script> |
|
||||
</body> |
|
||||
|
|
||||
</html> |
|
Before Width: | Height: | Size: 9.9 KiB |
@ -1,368 +0,0 @@ |
|||||
<!-- |
|
||||
* @Author: gaowenya |
|
||||
* @email: gaowenya_a@163.com |
|
||||
* @Date: 2023-06-19 09:38:10 |
|
||||
* @LastEditors: |
|
||||
* @LastEditTime: |
|
||||
--> |
|
||||
<template> |
|
||||
<a-config-provider :locale="locale"> |
|
||||
<div id="app" class="storm"> |
|
||||
<a-spin tip="正在请求..." class="zhezhao" :spinning="spinning"> |
|
||||
<div class="storm-container"> |
|
||||
<!-- <Nav /> --> |
|
||||
<div class="storm-content"> |
|
||||
<router-view /> |
|
||||
</div> |
|
||||
</div> |
|
||||
</a-spin> |
|
||||
<!-- 全局计时 $route.name !== 'PatientList' && --> |
|
||||
<Dragger v-if="getCount" ref="timer" class="count-container"> |
|
||||
<div class="count-name">静脉溶栓</div> |
|
||||
<!-- <van-count-down :time="getCount" format="mm:ss" /> --> |
|
||||
<Count /> |
|
||||
</Dragger> |
|
||||
<!-- 测评提示信息弹窗 --> |
|
||||
<a-modal class="patient-create patient-form" :width="518" :maskClosable="false" :closable="false" |
|
||||
:destroyOnClose="true" v-model="tip.visible" title="提示" @ok="tipConfirm" okText="去测评" cancelText="忽略"> |
|
||||
<div class="modal-content"> |
|
||||
{{ tip.content }} |
|
||||
</div> |
|
||||
</a-modal> |
|
||||
<!-- --> |
|
||||
<a-modal class="patient-create patient-form" :width="518" :maskClosable="false" :closable="false" |
|
||||
:destroyOnClose="true" v-model="tip.Lnspect" title="提示" @ok="LnspectConfirm" @cancel="LnspectCancel" |
|
||||
okText="查看" cancelText="忽略"> |
|
||||
<div class="modal-content">检验结果已完成, 请前往查看</div> |
|
||||
</a-modal> |
|
||||
</div> |
|
||||
</a-config-provider> |
|
||||
</template> |
|
||||
<script> |
|
||||
import zhCN from 'ant-design-vue/es/locale/zh_CN'; // 引入中文语言包 |
|
||||
import Dragger from './components/dragger.vue'; |
|
||||
import Count from './components/count.vue'; |
|
||||
import { |
|
||||
messageQuery |
|
||||
} from 'api'; |
|
||||
import { |
|
||||
mapMutations, |
|
||||
mapState |
|
||||
} from 'vuex'; |
|
||||
import Nav from 'components/Nav.vue'; |
|
||||
export default { |
|
||||
components: { |
|
||||
Nav, |
|
||||
Dragger, |
|
||||
Count, |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
locale: zhCN, // 设置为中文 |
|
||||
routeName: '', |
|
||||
tip: { |
|
||||
// 提示信息 |
|
||||
visible: false, //测评 |
|
||||
Lnspect: false, //检验 |
|
||||
content: '', |
|
||||
k: null, |
|
||||
}, |
|
||||
request: 0, |
|
||||
pushRouter: { |
|
||||
0: 'Inspect', |
|
||||
1: 'Image', |
|
||||
2: 'Min', |
|
||||
}, |
|
||||
titleForm: { |
|
||||
'0min': 'JMRS-Q-NIHSS', |
|
||||
'15min': 'JMRS-15-NIHSS', |
|
||||
'30min': 'JMRS-30-NIHSS', |
|
||||
'45min': 'JMRS-45-NIHSS', |
|
||||
'60min': 'JMRS-60-NIHSS', |
|
||||
}, |
|
||||
}; |
|
||||
}, |
|
||||
computed: { |
|
||||
...mapState('storm', ['spinning', 'showNav']), |
|
||||
...mapState('patient', ['patientData', 'timerData', 'overviewType']), |
|
||||
getCount() { |
|
||||
const { |
|
||||
timerData, |
|
||||
patientData |
|
||||
} = this; |
|
||||
if (!timerData && !patientData) return null; |
|
||||
if (timerData.firstAidId !== patientData.firstAidId) return null; |
|
||||
const { |
|
||||
countdown |
|
||||
} = timerData; |
|
||||
if (!countdown) return null; |
|
||||
// const totalSeconds = countdown; |
|
||||
// // ?️ 获取完整分钟数 |
|
||||
// const minutes = Math.floor(totalSeconds / 60); |
|
||||
// // ?️ 获得剩余的秒数 |
|
||||
// const seconds = totalSeconds % 60; |
|
||||
// // ✅ 格式化为 MM:SS |
|
||||
// const result = `${this.padTo2Digits(minutes)}:${this.padTo2Digits(seconds)}`; |
|
||||
// console.log(result); // ?️ "09:25" |
|
||||
return parseInt(countdown) * 1000; |
|
||||
}, |
|
||||
}, |
|
||||
watch: { |
|
||||
overviewType: { |
|
||||
deep: true, |
|
||||
handler(n, o) { |
|
||||
if (n === 'overview' || n === 'info') { |
|
||||
this.queryMessage(); |
|
||||
} |
|
||||
}, |
|
||||
}, |
|
||||
$route: { |
|
||||
deep: true, |
|
||||
handler(n, o) { |
|
||||
if (n.name === 'PatientList') { |
|
||||
this.setTimerData({}); |
|
||||
} |
|
||||
if (n.name === 'PatientDetails') { |
|
||||
// this.request = 0; |
|
||||
} |
|
||||
if ( |
|
||||
n.path !== '/' && |
|
||||
n.name !== 'PatientList' && |
|
||||
n.name !== 'Min' |
|
||||
) { |
|
||||
this.init(); |
|
||||
} |
|
||||
}, |
|
||||
}, |
|
||||
}, |
|
||||
methods: { |
|
||||
...mapMutations('patient', ['setTimerData']), |
|
||||
padTo2Digits(num) { |
|
||||
return num.toString().padStart(2, '0'); |
|
||||
}, |
|
||||
async init() { |
|
||||
const { |
|
||||
firstAidId |
|
||||
} = this.patientData; |
|
||||
if (!firstAidId) return; |
|
||||
// this.queryMessage(); |
|
||||
await this.handMessageQuery(); |
|
||||
console.log('init', this.$route.name); |
|
||||
this.request = 0; |
|
||||
this.utils.AnimationFrame.create( |
|
||||
'timerTask', |
|
||||
10000, |
|
||||
true, |
|
||||
(min) => { |
|
||||
this.getMessageQuery(min); |
|
||||
} |
|
||||
); |
|
||||
}, |
|
||||
async queryMessage() { |
|
||||
const { |
|
||||
firstAidId |
|
||||
} = this.patientData; |
|
||||
const res = await messageQuery(firstAidId); |
|
||||
const { |
|
||||
code, |
|
||||
msg |
|
||||
} = res; |
|
||||
if (code === 200) { |
|
||||
this.setTimerData(res.data); |
|
||||
} |
|
||||
}, |
|
||||
// 测评确认 |
|
||||
tipConfirm() { |
|
||||
this.tip.visible = false; |
|
||||
const name = this.pushRouter[this.tip.k]; |
|
||||
console.log('name: ', name); |
|
||||
this.$router.push({ |
|
||||
name, |
|
||||
}); |
|
||||
}, |
|
||||
// 检验调取确认 |
|
||||
LnspectConfirm() { |
|
||||
this.LnspectCancel(); |
|
||||
this.$router.push({ |
|
||||
name: 'Inspect', |
|
||||
}); |
|
||||
}, |
|
||||
LnspectCancel() { |
|
||||
this.tip.Lnspect = false; |
|
||||
this.$forceUpdate(); |
|
||||
}, |
|
||||
// 消息提示 |
|
||||
async handMessageQuery() { |
|
||||
// 异步 |
|
||||
const { |
|
||||
firstAidId |
|
||||
} = this.patientData; |
|
||||
if (firstAidId) { |
|
||||
const res = await messageQuery(firstAidId); |
|
||||
const { |
|
||||
code, |
|
||||
msg |
|
||||
} = res; |
|
||||
if (code === 200) { |
|
||||
this.setTimerData(res.data); |
|
||||
const { |
|
||||
map, |
|
||||
haveFlagInspect |
|
||||
} = res.data; |
|
||||
console.log('firstAidInspectDataDtos: ', haveFlagInspect); |
|
||||
for (let k in map) { |
|
||||
if (map[k]) { |
|
||||
this.taskList = { |
|
||||
text: map[k], |
|
||||
status: false, |
|
||||
}; |
|
||||
} |
|
||||
if (map[k] && this.taskList.status === false) { |
|
||||
// 记录不重复弹窗 |
|
||||
if (this.taskList.text === map[k]) { |
|
||||
this.taskList.status = true; |
|
||||
} |
|
||||
if ( |
|
||||
this.$route.name !== 'Min' && |
|
||||
this.$route.name !== 'PatientList' |
|
||||
) { |
|
||||
this.tip = { |
|
||||
visible: true, |
|
||||
k, |
|
||||
content: map[k], |
|
||||
}; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
// 检验调取 判断是否有急诊号 1 弹窗, 0 不弹窗 |
|
||||
if (haveFlagInspect) { |
|
||||
if ( |
|
||||
this.$route.name !== 'Inspect' && |
|
||||
this.$route.name !== 'PatientList' |
|
||||
) { |
|
||||
this.tip.Lnspect = true; |
|
||||
} |
|
||||
} |
|
||||
} else { |
|
||||
this.$message.error(msg); |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
async getMessageQuery(min, firstAidId) { |
|
||||
const n = min; |
|
||||
if (this.request === n) { |
|
||||
// 符合轮训条件 |
|
||||
console.log('十秒'); |
|
||||
this.request = n + 1; |
|
||||
await this.handMessageQuery(); |
|
||||
} |
|
||||
}, |
|
||||
}, |
|
||||
}; |
|
||||
</script> |
|
||||
<style lang="less"> |
|
||||
.zhezhao { |
|
||||
position: fixed; |
|
||||
left: 0; |
|
||||
top: 0; |
|
||||
width: 100vw; |
|
||||
height: 100vh; |
|
||||
z-index: 999; |
|
||||
} |
|
||||
|
|
||||
#app { |
|
||||
font-family: Avenir, Helvetica, Arial, sans-serif; |
|
||||
-webkit-font-smoothing: antialiased; |
|
||||
-moz-osx-font-smoothing: grayscale; |
|
||||
// text-align: center; |
|
||||
color: #2c3e50; |
|
||||
background: #f6f8fa; |
|
||||
height: 100%; |
|
||||
position: relative; |
|
||||
|
|
||||
::-webkit-scrollbar { |
|
||||
display: none; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
// .count-container { |
|
||||
// width: 200px; |
|
||||
// background: rgba(255, 255, 255, 0.1); |
|
||||
// border: 1px solid #ffffff; |
|
||||
// box-shadow: 0px 6px 10px 0px rgba(0, 59, 172, 0.2); |
|
||||
// border-radius: 4px; |
|
||||
// overflow: hidden; |
|
||||
// backdrop-filter: blur(4px); |
|
||||
// text-align: center; |
|
||||
// display: flex; |
|
||||
// flex-direction: column; |
|
||||
// align-items: center; |
|
||||
// padding: 16px 0; |
|
||||
// z-index: 999; |
|
||||
|
|
||||
// .count-name { |
|
||||
// font-size: 26px; |
|
||||
// font-family: Source Han Sans CN, Source Han Sans CN-Bold; |
|
||||
// font-weight: 700; |
|
||||
// color: #393d4e; |
|
||||
// line-height: 26px; |
|
||||
// padding-bottom: 7px; |
|
||||
// } |
|
||||
|
|
||||
// .van-count-down { |
|
||||
// font-size: 44px; |
|
||||
// font-family: Source Han Sans CN, Source Han Sans CN-Bold; |
|
||||
// font-weight: 700; |
|
||||
// color: #393d4e; |
|
||||
// line-height: 44px; |
|
||||
// } |
|
||||
// } |
|
||||
</style> |
|
||||
<style lang="stylus"> |
|
||||
// @import './assets/portrait.styl'; |
|
||||
@import './assets/less/common.less'; |
|
||||
|
|
||||
html { |
|
||||
overflow: hidden !important; |
|
||||
} |
|
||||
|
|
||||
html, |
|
||||
body, |
|
||||
#app { |
|
||||
width: 100%; |
|
||||
height: 100%; |
|
||||
font-size: 1.2rem |
|
||||
} |
|
||||
|
|
||||
.zhezhao .ant-spin-container { |
|
||||
height: 100% |
|
||||
} |
|
||||
|
|
||||
.ant-modal div[aria-hidden="true"] { |
|
||||
display: none !important; |
|
||||
} |
|
||||
|
|
||||
.storm { |
|
||||
display: flex; |
|
||||
flex: 1; |
|
||||
|
|
||||
.storm-container { |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
height: 100%; |
|
||||
background: linear-gradient(180deg, #dbeaff, #fbfdff); |
|
||||
|
|
||||
.header { |
|
||||
// height: 88px; |
|
||||
} |
|
||||
|
|
||||
.storm-content { |
|
||||
flex: 1; |
|
||||
width: 100%; |
|
||||
height: 100%; |
|
||||
overflow-y: auto; |
|
||||
display: flex; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
@ -1,333 +0,0 @@ |
|||||
import axios from 'axios'; |
|
||||
let { |
|
||||
proxyUrl |
|
||||
} = require('@/config/setting'); |
|
||||
let proxyUrl1 = proxyUrl + '/workstation'; |
|
||||
//查询民族列表
|
|
||||
export const getNation = () => axios.post(`${proxyUrl1}/sys/nation/list`); |
|
||||
// 查询菜单
|
|
||||
export const getRouters = (params) => |
|
||||
axios.get(`${proxyUrl1}/getRouters`, params); |
|
||||
|
|
||||
// 查询平车、平板设备列表
|
|
||||
export const selectList = (params) => |
|
||||
axios.post(`${proxyUrl1}/remoteDevice/selectList `, params); |
|
||||
|
|
||||
// 查询患者列表
|
|
||||
export const getList = (params) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/list`, params); |
|
||||
|
|
||||
// 查询分诊患者列表
|
|
||||
export const queryTriageList = (params) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/queryTriageList`, params); |
|
||||
|
|
||||
// 创建患者
|
|
||||
export const create = (params) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/create`, params); |
|
||||
|
|
||||
|
|
||||
//根据id,查询患者信息,回写患者信息
|
|
||||
export const queryById = (params) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/queryById`, params); |
|
||||
|
|
||||
// 编辑患者
|
|
||||
|
|
||||
export const eduitPatient = (params) => |
|
||||
axios.post(`${proxyUrl1}//firstAid/eduitPatient`, params); |
|
||||
|
|
||||
|
|
||||
// 查病历数据
|
|
||||
export const queryAidRecord = (firstAidId, codeList) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/queryAidRecord`, { |
|
||||
param: { |
|
||||
firstAidId, |
|
||||
codeList |
|
||||
}, |
|
||||
}); |
|
||||
|
|
||||
// 更新急救code信息
|
|
||||
export const saveAidRecord = (param) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/saveAidRecord`, { |
|
||||
param |
|
||||
}); |
|
||||
|
|
||||
// 更新急救基本信息
|
|
||||
export const updateAidBase = (param) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/update`, { |
|
||||
param |
|
||||
}); |
|
||||
|
|
||||
//溶栓记录
|
|
||||
export const queryLog = (param) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/queryLog`, { |
|
||||
param |
|
||||
}); |
|
||||
|
|
||||
//医嘱查询
|
|
||||
export const adviceQuery = (param) => |
|
||||
axios.post(`${proxyUrl1}/advice/query`, { |
|
||||
param |
|
||||
}); |
|
||||
|
|
||||
//下发医嘱
|
|
||||
export const adviceAdd = (params) => |
|
||||
axios.post(`${proxyUrl1}/advice/add`, { |
|
||||
...params |
|
||||
}); |
|
||||
|
|
||||
//推送结果
|
|
||||
export const messageQuery = (firstAidId) => |
|
||||
axios.post(`${proxyUrl1}/message/query`, { |
|
||||
firstAidId |
|
||||
}); |
|
||||
|
|
||||
export function uploadIdcard(data) { |
|
||||
return axios({ |
|
||||
url: `${proxyUrl1}/sys/ocr/idcardInfo`, |
|
||||
method: 'POST', |
|
||||
data: data, |
|
||||
headers: { |
|
||||
'Content-Type': 'multipart/form-data', |
|
||||
}, |
|
||||
}); |
|
||||
} |
|
||||
export const idcardInfo = `${proxyUrl1}/sys/ocr/idcardInfo`; |
|
||||
|
|
||||
// 创建急救身份证扫描
|
|
||||
|
|
||||
export const idcardInfoBase64 = (picBase64) => |
|
||||
axios.post(`${proxyUrl1}/sys/ocr/idcardInfoBase64`, { |
|
||||
picBase64 |
|
||||
}); |
|
||||
|
|
||||
//知情同意新增
|
|
||||
export const saveInformedConsent = (params) => |
|
||||
axios.post(`${proxyUrl1}/informed/saveInformedConsent`, { |
|
||||
...params |
|
||||
}); |
|
||||
|
|
||||
// 查询是否有进行中的急救
|
|
||||
export const queryFree = (params) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/queryFree`, { |
|
||||
...params |
|
||||
}); |
|
||||
|
|
||||
export const endFirstAid = (params) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/endFirstAid `, {}); |
|
||||
//知情同意查询
|
|
||||
export const queryConsentResult = (params) => |
|
||||
axios.post(`${proxyUrl1}/informed/queryConsentResult`, { |
|
||||
param: { |
|
||||
...params |
|
||||
}, |
|
||||
}); |
|
||||
|
|
||||
//查看知情同意时添加谈话时间
|
|
||||
export const thTime = (params) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/thTime`, { |
|
||||
...params |
|
||||
}); |
|
||||
|
|
||||
// 上传文件
|
|
||||
export function uploadfile(data) { |
|
||||
return axios({ |
|
||||
url: `${proxyUrl}/file/upload`, |
|
||||
method: 'POST', |
|
||||
data: data, |
|
||||
headers: { |
|
||||
'Content-Type': 'multipart/form-data', |
|
||||
}, |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
// 上传文件
|
|
||||
export function uploadBase64(data) { |
|
||||
return axios({ |
|
||||
url: `${proxyUrl}/file/uploadBase64`, |
|
||||
method: 'POST', |
|
||||
data: data, |
|
||||
headers: { |
|
||||
'Content-Type': 'multipart/form-data', |
|
||||
}, |
|
||||
}); |
|
||||
} |
|
||||
// 查询平车状态
|
|
||||
export const queryByPadNo = (params) => |
|
||||
axios.post(`${proxyUrl1}/car/queryByPadNo`, { |
|
||||
param: { |
|
||||
...params |
|
||||
} |
|
||||
}); |
|
||||
// 血样报告
|
|
||||
export const queryFirstAidInspectData = (params) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/queryFirstAidInspectData`, { |
|
||||
...params, |
|
||||
}); |
|
||||
// 查询下一个节点
|
|
||||
export const getNextNode = (params) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/next`, { |
|
||||
param: { |
|
||||
...params |
|
||||
} |
|
||||
}); |
|
||||
|
|
||||
//导出急救记录
|
|
||||
export const exportFirstAid = (params) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/export`, { |
|
||||
param: { |
|
||||
...params |
|
||||
} |
|
||||
}); |
|
||||
|
|
||||
// 溶栓介入视频
|
|
||||
export const queryVideo = (param) => |
|
||||
axios.post(`${proxyUrl1}/video/query`, { |
|
||||
param: { |
|
||||
...param |
|
||||
} |
|
||||
}); |
|
||||
|
|
||||
// 溶栓介入视频
|
|
||||
export const queryBook = (param) => |
|
||||
axios.post(`${proxyUrl1}/informed/queryConsentTemplate`, { |
|
||||
param: { |
|
||||
...param |
|
||||
}, |
|
||||
}); |
|
||||
|
|
||||
// 溶栓介入视频
|
|
||||
export const queryWeight = (firstAidId) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/weight`, { |
|
||||
firstAidId: firstAidId, |
|
||||
}); |
|
||||
|
|
||||
// 修改急救信息
|
|
||||
export const updateFirstAid = (params) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/update`, { |
|
||||
param: { |
|
||||
...params |
|
||||
} |
|
||||
}); |
|
||||
|
|
||||
// ------------平车相关操作------------
|
|
||||
// 授权
|
|
||||
export const remoteAuth = (params) => |
|
||||
axios.post(`${proxyUrl1}/mqtt/remoteAuth`, { |
|
||||
...params |
|
||||
}); |
|
||||
|
|
||||
// 电池容量
|
|
||||
export const remoteKljCapacity = (params) => |
|
||||
axios.post(`${proxyUrl1}/mqtt/remoteKljCapacity`, { |
|
||||
...params |
|
||||
}); |
|
||||
// 设备重启
|
|
||||
export const remoteReboot = (params) => |
|
||||
axios.post( |
|
||||
`${proxyUrl1}/mqtt/remoteReboot
|
|
||||
`, {
|
|
||||
...params |
|
||||
} |
|
||||
); |
|
||||
// 发送远程rfid消息
|
|
||||
export const remoteRfid = (params) => |
|
||||
axios.post( |
|
||||
`${proxyUrl1}/mqtt/remoteRfid
|
|
||||
`, {
|
|
||||
...params |
|
||||
} |
|
||||
); |
|
||||
// 发送远程设备心跳(校时)消息
|
|
||||
export const remoteTime = (params) => |
|
||||
axios.post( |
|
||||
`${proxyUrl1}/mqtt/remoteTime
|
|
||||
`, {
|
|
||||
...params |
|
||||
} |
|
||||
); |
|
||||
// 称重校准
|
|
||||
export const remoteWeightCalibration = (params) => |
|
||||
axios.post( |
|
||||
`${proxyUrl1}/mqtt/remoteWeightCalibration
|
|
||||
`, {
|
|
||||
...params |
|
||||
} |
|
||||
); |
|
||||
|
|
||||
// 病例统计
|
|
||||
export const getCtInfoPath = (params) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/getCtInfoPath`, { |
|
||||
...params |
|
||||
}); |
|
||||
|
|
||||
|
|
||||
// 我的
|
|
||||
export const loginInfo = (params) => |
|
||||
axios.post(`${proxyUrl1}/home/loginInfo`, { |
|
||||
...params |
|
||||
}); |
|
||||
|
|
||||
// RPT统计
|
|
||||
export const queryRptResult = (params) => |
|
||||
axios.post(`${proxyUrl1}/home/queryRptResult`, { |
|
||||
...params |
|
||||
}); |
|
||||
// DPT统计 / 血管内治疗率
|
|
||||
export const queryDptResult = (params) => |
|
||||
axios.post(`${proxyUrl1}/home/queryDptResult`, { |
|
||||
...params |
|
||||
}); |
|
||||
// 血管内治疗数据对比
|
|
||||
export const selectXgzl = (params) => |
|
||||
axios.post(`${proxyUrl1}/home/selectXgzl`, { |
|
||||
...params |
|
||||
}); |
|
||||
// SICH发生率
|
|
||||
export const querySichResult = (params) => |
|
||||
axios.post(`${proxyUrl1}/home/querySichResult`, { |
|
||||
...params |
|
||||
}); |
|
||||
// SICHDNT分布
|
|
||||
export const queryDntResult = (params) => |
|
||||
axios.post(`${proxyUrl1}/home/queryDntResult`, { |
|
||||
...params |
|
||||
}); |
|
||||
// 静脉溶栓数据对比 / 静脉溶栓率
|
|
||||
export const queryJmrs = (params) => |
|
||||
axios.post(`${proxyUrl1}/home/queryJmrs`, { |
|
||||
...params |
|
||||
}); |
|
||||
// 病例统计数据分析
|
|
||||
export const queryByDatePatient = (params) => |
|
||||
axios.post(`${proxyUrl1}/home/queryByDatePatient`, { |
|
||||
...params |
|
||||
}); |
|
||||
// 病例统计
|
|
||||
export const queryPatient = (params) => |
|
||||
axios.post(`${proxyUrl1}/home/queryPatient`, { |
|
||||
...params |
|
||||
}); |
|
||||
// 介入手术记录/总报告/DNT时间表
|
|
||||
export const operationLog = (params) => |
|
||||
axios.post(`${proxyUrl1}/interfere/operationLog`, { |
|
||||
...params |
|
||||
}); |
|
||||
|
|
||||
// 介入手术记录/总报告/DNT时间表
|
|
||||
export const operationLogEx = (params) => |
|
||||
axios.post(`${proxyUrl1}//export/operationLog`, { |
|
||||
...params |
|
||||
}); |
|
||||
// 创建急救
|
|
||||
export const createFirstAid = (params) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/createFirstAid`, { |
|
||||
...params |
|
||||
}); |
|
||||
export const createPatient = (params) => |
|
||||
axios.post(`${proxyUrl1}/firstAid/createPatient`, { |
|
||||
...params |
|
||||
}); |
|
||||
// export const eduitPatient = (params) =>
|
|
||||
// axios.post(`${proxyUrl1}/firstAid/eduitPatient`, {
|
|
||||
// ...params
|
|
||||
// });
|
|
@ -1,14 +0,0 @@ |
|||||
import axios from 'axios'; |
|
||||
let { |
|
||||
proxyUrl |
|
||||
} = require('@/config/setting'); |
|
||||
let proxyUrl1 = proxyUrl + '/workstation'; |
|
||||
// 登录
|
|
||||
export const Login = (params) => |
|
||||
axios.post(`${proxyUrl}/auth/pad/login`, params); |
|
||||
|
|
||||
export const Loginnew = (params) => |
|
||||
axios.post(`${proxyUrl}/auth/login`, params); |
|
||||
// 登录
|
|
||||
export const queryUser = (params) => |
|
||||
axios.post(`${proxyUrl1}/sys/queryUsername`, params); |
|
Before Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 90 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 99 KiB |
Before Width: | Height: | Size: 200 KiB |
Before Width: | Height: | Size: 673 KiB |
Before Width: | Height: | Size: 888 KiB |
Before Width: | Height: | Size: 9.9 KiB |
Before Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 446 B |
Before Width: | Height: | Size: 512 B |
Before Width: | Height: | Size: 551 B |
Before Width: | Height: | Size: 360 B |
Before Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 894 B |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 198 KiB |
Before Width: | Height: | Size: 230 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 978 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 145 B |
Before Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 746 B |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 567 B |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 580 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 655 B |
Before Width: | Height: | Size: 482 B |
Before Width: | Height: | Size: 524 B |
Before Width: | Height: | Size: 631 B |
Before Width: | Height: | Size: 613 B |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 978 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 5.8 KiB |
@ -1,315 +0,0 @@ |
|||||
.border-b { |
|
||||
border-bottom: 1px solid #ccc; |
|
||||
} |
|
||||
|
|
||||
.relative { |
|
||||
position: relative; |
|
||||
} |
|
||||
|
|
||||
.absolute { |
|
||||
position: absolute; |
|
||||
} |
|
||||
|
|
||||
.d-flex { |
|
||||
display: flex; |
|
||||
} |
|
||||
|
|
||||
.flex-wrap { |
|
||||
flex-wrap: wrap; |
|
||||
} |
|
||||
|
|
||||
.flex-nowrap { |
|
||||
flex-wrap: nowrap; |
|
||||
} |
|
||||
|
|
||||
.flex-column { |
|
||||
flex-direction: column; |
|
||||
} |
|
||||
|
|
||||
.flex-column-reverse { |
|
||||
flex-direction: column-reverse; |
|
||||
} |
|
||||
|
|
||||
.flex-row { |
|
||||
flex-direction: row; |
|
||||
} |
|
||||
|
|
||||
.flex-row-reverse { |
|
||||
flex-direction: row-reverse; |
|
||||
} |
|
||||
|
|
||||
.justify-center { |
|
||||
justify-content: center; |
|
||||
} |
|
||||
|
|
||||
.justify-space-between { |
|
||||
justify-content: space-between; |
|
||||
} |
|
||||
|
|
||||
.align-center { |
|
||||
align-items: center; |
|
||||
} |
|
||||
|
|
||||
.flex-1 { |
|
||||
display: flex; |
|
||||
flex: 1; |
|
||||
} |
|
||||
|
|
||||
.flex-2 { |
|
||||
display: flex; |
|
||||
flex: 2; |
|
||||
} |
|
||||
|
|
||||
.flex-3 { |
|
||||
display: flex; |
|
||||
flex: 3; |
|
||||
} |
|
||||
|
|
||||
.pointer { |
|
||||
cursor: pointer; |
|
||||
} |
|
||||
|
|
||||
.ellipsis-2 { |
|
||||
overflow: hidden; |
|
||||
text-overflow: ellipsis; |
|
||||
display: -webkit-box; |
|
||||
-webkit-line-clamp: 2; |
|
||||
-webkit-box-orient: vertical; |
|
||||
} |
|
||||
|
|
||||
.ellipsis-3 { |
|
||||
overflow: hidden; |
|
||||
text-overflow: ellipsis; |
|
||||
display: -webkit-box; |
|
||||
-webkit-line-clamp: 3; |
|
||||
-webkit-box-orient: vertical; |
|
||||
} |
|
||||
|
|
||||
.fz22 { |
|
||||
font-size: 30px; |
|
||||
} |
|
||||
|
|
||||
.border-bottom { |
|
||||
border-bottom: 1px solid #dfe6ec; |
|
||||
} |
|
||||
|
|
||||
.borderNone { |
|
||||
border-bottom: none; |
|
||||
} |
|
||||
|
|
||||
.common-picker { |
|
||||
position: absolute; |
|
||||
bottom: 0; |
|
||||
left: 0; |
|
||||
right: 0; |
|
||||
z-index: 999; |
|
||||
} |
|
||||
|
|
||||
.common-button { |
|
||||
width: 200px; |
|
||||
margin: 0 auto; |
|
||||
margin-bottom: 20px; |
|
||||
} |
|
||||
|
|
||||
.common-slider { |
|
||||
width: 90%; |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
flex-direction: column; |
|
||||
position: relative; |
|
||||
margin: 40px 0 20px; |
|
||||
} |
|
||||
|
|
||||
.common-slider .van-stepper--round { |
|
||||
width: 100%; |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
justify-content: space-between; |
|
||||
position: relative; |
|
||||
} |
|
||||
|
|
||||
.common-slider .van-stepper--round .van-stepper__minus { |
|
||||
width: 30px; |
|
||||
height: 30px; |
|
||||
color: #7690e5; |
|
||||
border-color: #7690e5; |
|
||||
} |
|
||||
|
|
||||
.common-slider .van-stepper--round .van-stepper__plus { |
|
||||
width: 30px; |
|
||||
height: 30px; |
|
||||
background-color: #7690e5; |
|
||||
} |
|
||||
|
|
||||
.common-slider .van-stepper--round .van-stepper__input { |
|
||||
position: absolute; |
|
||||
left: 50%; |
|
||||
right: 50%; |
|
||||
transform: translate(-50%, -50%); |
|
||||
bottom: 5px; |
|
||||
background: #7690e5; |
|
||||
border-radius: 6px; |
|
||||
font-size: 24px; |
|
||||
font-family: OPPOSans, OPPOSans-Bold; |
|
||||
font-weight: 700; |
|
||||
text-align: center; |
|
||||
color: #ffffff; |
|
||||
padding: 10px 0; |
|
||||
width: 100px; |
|
||||
margin-bottom: 10px; |
|
||||
display: none; |
|
||||
} |
|
||||
|
|
||||
.common-slider .common-slider-slider { |
|
||||
width: 80%; |
|
||||
position: absolute; |
|
||||
bottom: 6px; |
|
||||
height: 16px; |
|
||||
background: #e4edff; |
|
||||
border-radius: 8px; |
|
||||
} |
|
||||
|
|
||||
.common-slider .common-slider-slider .van-slider__button-wrapper { |
|
||||
width: 30px; |
|
||||
height: 30px; |
|
||||
background: #7690e5; |
|
||||
border-radius: 50%; |
|
||||
box-shadow: 0 2px 0 rgba(0, 0, 0, 0.1); |
|
||||
} |
|
||||
|
|
||||
.common-slider .common-slider-slider .ant-input-number { |
|
||||
position: absolute; |
|
||||
left: 50%; |
|
||||
right: 50%; |
|
||||
bottom: 20px; |
|
||||
transform: translate(-50%, -50%); |
|
||||
font-size: 24px; |
|
||||
font-family: OPPOSans, OPPOSans-Bold; |
|
||||
font-weight: 700; |
|
||||
height: auto; |
|
||||
padding: 4px 0; |
|
||||
text-align: center; |
|
||||
background: #7690e5; |
|
||||
border-radius: 6px; |
|
||||
color: #fff; |
|
||||
} |
|
||||
|
|
||||
.common-slider .common-slider-slider .ant-input-number .ant-input-number-input { |
|
||||
text-align: center; |
|
||||
} |
|
||||
|
|
||||
.common-slider .common-slider-slider .ant-input-number .ant-input-number-handler-wrap { |
|
||||
display: none; |
|
||||
} |
|
||||
|
|
||||
.common-slider .common-slider-slider .slider-icon { |
|
||||
position: absolute; |
|
||||
top: -23px; |
|
||||
left: 2px; |
|
||||
color: #7690e5; |
|
||||
font-size: 26px; |
|
||||
} |
|
||||
|
|
||||
.ant-form .ant-form-item-label { |
|
||||
text-align: left; |
|
||||
} |
|
||||
|
|
||||
.ant-form label { |
|
||||
font-size: 26px !important; |
|
||||
font-weight: 500; |
|
||||
color: #565e6f; |
|
||||
} |
|
||||
|
|
||||
.ant-form .ant-form-item { |
|
||||
margin-bottom: 18px !important; |
|
||||
box-sizing: border-box; |
|
||||
} |
|
||||
|
|
||||
.ant-form .ant-form-item:not(:last-child) { |
|
||||
border-bottom: 1px solid #dfe6ec; |
|
||||
padding-bottom: 18px; |
|
||||
} |
|
||||
|
|
||||
.ant-form .dose-item { |
|
||||
margin-bottom: 40px !important; |
|
||||
} |
|
||||
|
|
||||
.ant-form .mb0 { |
|
||||
margin-bottom: 0px !important; |
|
||||
} |
|
||||
|
|
||||
.ant-form .borderNone { |
|
||||
border-bottom: none !important; |
|
||||
} |
|
||||
|
|
||||
.ant-form .ant-radio-button-wrapper { |
|
||||
padding: 0 18px; |
|
||||
height: 40px; |
|
||||
line-height: 40px; |
|
||||
font-size: 18px !important; |
|
||||
margin-right: 20px; |
|
||||
margin-bottom: 10px; |
|
||||
background: #f8f8f9; |
|
||||
border: 0.5px solid #a3acbf; |
|
||||
border-radius: 6px; |
|
||||
vertical-align: middle; |
|
||||
} |
|
||||
|
|
||||
.ant-form .ant-radio-button-wrapper:before, |
|
||||
.ant-form .ant-radio-button-wrapper .ant-radio-button-wrapper-checked:before { |
|
||||
display: none !important; |
|
||||
} |
|
||||
|
|
||||
.ant-form .ant-radio-button-wrapper:first-child, |
|
||||
.ant-form .ant-radio-button-wrapper:last-child { |
|
||||
border-radius: 6px !important; |
|
||||
} |
|
||||
|
|
||||
.ant-form .ant-radio-button-wrapper:last-child { |
|
||||
margin-right: 0; |
|
||||
} |
|
||||
|
|
||||
.ant-form .ant-form-item-control { |
|
||||
text-align: left; |
|
||||
margin-left: 10px; |
|
||||
} |
|
||||
|
|
||||
.solid .ant-checkbox-wrapper { |
|
||||
background: #f8f8f9; |
|
||||
border: 0.5px solid #a3acbf; |
|
||||
border-radius: 6px; |
|
||||
vertical-align: middle; |
|
||||
margin-right: 20px; |
|
||||
margin-bottom: 10px; |
|
||||
font-size: 1.2vw !important; |
|
||||
line-height: 40px; |
|
||||
padding: 0 18px; |
|
||||
height: 40px; |
|
||||
} |
|
||||
|
|
||||
.solid .ant-checkbox-wrapper.ant-checkbox-wrapper-checked { |
|
||||
background: #7690e5; |
|
||||
color: #fff; |
|
||||
} |
|
||||
|
|
||||
.solid .ant-checkbox-wrapper .ant-checkbox { |
|
||||
display: none; |
|
||||
} |
|
||||
|
|
||||
.ant-tabs-nav-container .ant-tabs-tab { |
|
||||
font-size: 20px; |
|
||||
font-family: Source Han Sans CN, Source Han Sans CN-Medium; |
|
||||
font-weight: 500; |
|
||||
text-align: left; |
|
||||
color: #70798c; |
|
||||
} |
|
||||
|
|
||||
.ant-tabs-nav-container .ant-tabs-tab-active { |
|
||||
font-weight: 700; |
|
||||
font-family: Source Han Sans CN, Source Han Sans CN-Bold; |
|
||||
color: #393d4e !important; |
|
||||
} |
|
||||
|
|
||||
.ant-tabs-nav-container .ant-tabs-ink-bar { |
|
||||
background: #7690e5 !important; |
|
||||
} |
|
@ -1,819 +0,0 @@ |
|||||
.border-b { |
|
||||
border-bottom: 1px solid #ccc; |
|
||||
} |
|
||||
|
|
||||
// position |
|
||||
.relative { |
|
||||
position: relative; |
|
||||
} |
|
||||
.absolute { |
|
||||
position: absolute; |
|
||||
} |
|
||||
|
|
||||
// flex |
|
||||
.d-flex{ |
|
||||
display: flex; |
|
||||
} |
|
||||
|
|
||||
.flex-wrap{ |
|
||||
flex-wrap: wrap; |
|
||||
} |
|
||||
|
|
||||
.flex-nowrap{ |
|
||||
flex-wrap: nowrap; |
|
||||
} |
|
||||
|
|
||||
.flex-column{ |
|
||||
flex-direction: column; |
|
||||
} |
|
||||
|
|
||||
.flex-column-reverse{ |
|
||||
flex-direction: column-reverse; |
|
||||
} |
|
||||
|
|
||||
.flex-row{ |
|
||||
flex-direction: row; |
|
||||
} |
|
||||
|
|
||||
.flex-row-reverse{ |
|
||||
flex-direction: row-reverse; |
|
||||
} |
|
||||
|
|
||||
.justify-center{ |
|
||||
justify-content: center; |
|
||||
} |
|
||||
|
|
||||
.justify-space-between{ |
|
||||
justify-content: space-between; |
|
||||
} |
|
||||
|
|
||||
.align-center{ |
|
||||
align-items: center; |
|
||||
} |
|
||||
|
|
||||
.flex-1{ |
|
||||
display: flex; |
|
||||
flex: 1; |
|
||||
} |
|
||||
|
|
||||
.flex-2{ |
|
||||
display: flex; |
|
||||
flex: 2; |
|
||||
} |
|
||||
.flex-3{ |
|
||||
display: flex; |
|
||||
flex: 3; |
|
||||
} |
|
||||
|
|
||||
// other |
|
||||
.pointer{ |
|
||||
cursor:pointer; |
|
||||
} |
|
||||
.ellipsis-2 { |
|
||||
overflow: hidden; |
|
||||
text-overflow: ellipsis; |
|
||||
display: -webkit-box; |
|
||||
-webkit-line-clamp: 2; |
|
||||
-webkit-box-orient: vertical; |
|
||||
} |
|
||||
.ellipsis-3 { |
|
||||
overflow: hidden; |
|
||||
text-overflow: ellipsis; |
|
||||
display: -webkit-box; |
|
||||
-webkit-line-clamp: 3; |
|
||||
-webkit-box-orient: vertical; |
|
||||
} |
|
||||
.font-bold{ |
|
||||
font: bold; |
|
||||
} |
|
||||
.text-left{ |
|
||||
text-align: left; |
|
||||
} |
|
||||
.text-right{ |
|
||||
text-align: right; |
|
||||
} |
|
||||
.text-center{ |
|
||||
text-align: center; |
|
||||
} |
|
||||
.fz20{ |
|
||||
font-size: 20px; |
|
||||
} |
|
||||
.fz22{ |
|
||||
font-size: 30px; |
|
||||
} |
|
||||
.fz24{ |
|
||||
font-size: 24px; |
|
||||
} |
|
||||
.border-bottom{ |
|
||||
border-bottom: 1px solid #dfe6ec; |
|
||||
} |
|
||||
.borderNone{ |
|
||||
border-bottom: none; |
|
||||
} |
|
||||
|
|
||||
.common-picker{ |
|
||||
position: absolute; |
|
||||
bottom: 0; |
|
||||
left: 0; |
|
||||
right: 0; |
|
||||
z-index: 999; |
|
||||
} |
|
||||
.common-button { |
|
||||
width: 200px; |
|
||||
margin: 0 auto; |
|
||||
margin-bottom: 12px; |
|
||||
border-radius: 20px; |
|
||||
} |
|
||||
.common-slider{ |
|
||||
width: 100%; |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
flex-direction: column; |
|
||||
position: relative; |
|
||||
margin: 80px 0 20px; |
|
||||
.van-stepper--round{ |
|
||||
width: 90%; |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
justify-content: space-between; |
|
||||
position: relative; |
|
||||
.van-stepper__input{ |
|
||||
position: absolute; |
|
||||
left: 50%; |
|
||||
right: 50%; |
|
||||
transform: translate(-50%, -50%); |
|
||||
bottom: 5px; |
|
||||
background: #007AFF; |
|
||||
border-radius: 6px; |
|
||||
font-size: 24px; |
|
||||
font-family: OPPOSans, OPPOSans-Bold; |
|
||||
font-weight: 700; |
|
||||
text-align: center; |
|
||||
color: #ffffff; |
|
||||
padding: 10px 0; |
|
||||
width: 100px; |
|
||||
margin-bottom: 10px; |
|
||||
display: none; |
|
||||
} |
|
||||
.van-stepper__minus{ |
|
||||
width: 30px; |
|
||||
height: 30px; |
|
||||
color: #fff; |
|
||||
color: #007AFF; |
|
||||
border-color: #007AFF; |
|
||||
} |
|
||||
.van-stepper__plus{ |
|
||||
width: 30px; |
|
||||
height: 30px; |
|
||||
background-color: #007AFF; |
|
||||
} |
|
||||
&.one{ |
|
||||
.van-stepper__minus{ |
|
||||
position: absolute; |
|
||||
bottom: 0; |
|
||||
left: 40px; |
|
||||
width: 30px; |
|
||||
height: 30px; |
|
||||
color: #fff; |
|
||||
border-color: #007AFF; |
|
||||
// background-color: #007AFF; |
|
||||
background: linear-gradient(to right, rgba(82, 165, 255, 1), rgba(0, 122, 255, 1)); |
|
||||
} |
|
||||
.van-stepper__plus{ |
|
||||
position: absolute; |
|
||||
bottom: 0; |
|
||||
right: 40px; |
|
||||
width: 30px; |
|
||||
height: 30px; |
|
||||
// background-color: #007AFF; |
|
||||
background: linear-gradient(to right, rgba(82, 165, 255, 1), rgba(0, 122, 255, 1)); |
|
||||
} |
|
||||
} |
|
||||
&.five{ |
|
||||
.van-stepper__minus{ |
|
||||
width: 30px; |
|
||||
height: 30px; |
|
||||
color: #fff; |
|
||||
border-color: #007AFF; |
|
||||
// background-color: #007AFF; |
|
||||
background: linear-gradient(to right, rgba(82, 165, 255, 1), rgba(0, 122, 255, 1)); |
|
||||
&::before{ |
|
||||
content: '-5'; |
|
||||
font-size: 14px; |
|
||||
font-weight: bold; |
|
||||
position: absolute; |
|
||||
top: 4px; |
|
||||
left: 13px; |
|
||||
height: 0; |
|
||||
} |
|
||||
} |
|
||||
.van-stepper__plus{ |
|
||||
width: 30px; |
|
||||
height: 30px; |
|
||||
color: #fff; |
|
||||
border-color: #007AFF; |
|
||||
// background-color: #007AFF; |
|
||||
background: linear-gradient(to right, rgba(82, 165, 255, 1), rgba(0, 122, 255, 1)); |
|
||||
position: relative; |
|
||||
&::before{ |
|
||||
content: '+5'; |
|
||||
font-size: 14px; |
|
||||
font-weight: bold; |
|
||||
position: absolute; |
|
||||
top: 4px; |
|
||||
left: 13px; |
|
||||
height: 0; |
|
||||
// letter-spacing: -1px; |
|
||||
} |
|
||||
&::after{ |
|
||||
display: none; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
&.ten{ |
|
||||
.van-stepper__minus{ |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
left: -35px; |
|
||||
width: 30px; |
|
||||
height: 30px; |
|
||||
color: #fff; |
|
||||
border-color: #007AFF; |
|
||||
// background-color: #007AFF; |
|
||||
background: linear-gradient(to right, rgba(82, 165, 255, 1), rgba(0, 122, 255, 1)); |
|
||||
&::before{ |
|
||||
content: '-10'; |
|
||||
font-size: 14px; |
|
||||
font-weight: bold; |
|
||||
position: absolute; |
|
||||
top: 4px; |
|
||||
left: 11px; |
|
||||
height: 0; |
|
||||
// letter-spacing: -1px; |
|
||||
} |
|
||||
} |
|
||||
.van-stepper__plus{ |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
right: -35px; |
|
||||
width: 30px; |
|
||||
height: 30px; |
|
||||
color: #fff; |
|
||||
// background-color: #52A5FF; |
|
||||
background: linear-gradient(to right, rgba(82, 165, 255, 1), rgba(0, 122, 255, 1)); |
|
||||
&::before{ |
|
||||
content: '+10'; |
|
||||
font-size: 14px; |
|
||||
font-weight: bold; |
|
||||
position: absolute; |
|
||||
top: 4px; |
|
||||
left: 11px; |
|
||||
height: 0; |
|
||||
// letter-spacing: -1px; |
|
||||
} |
|
||||
&::after{ |
|
||||
display: none; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
} |
|
||||
.common-slider-slider{ |
|
||||
width: 68%; |
|
||||
position: absolute; |
|
||||
bottom: 6px; |
|
||||
height: 16px; |
|
||||
// background: #e4edff; |
|
||||
background: linear-gradient(to right, #007AFF, #52A5FF); |
|
||||
border-radius: 8px; |
|
||||
.van-slider__button-wrapper{ |
|
||||
width: 30px; |
|
||||
height: 30px; |
|
||||
background-color: #007AFF; |
|
||||
border-radius: 50%; |
|
||||
box-shadow: 0 2px 0 rgba(0, 0, 0, 0.1); |
|
||||
|
|
||||
.inner-circle{ |
|
||||
width: 15px; |
|
||||
height: 15px; |
|
||||
border-radius: 50%; /* 圆形 */ |
|
||||
background-color: white; /* 白色背景 */ |
|
||||
position: absolute; /* 绝对定位 */ |
|
||||
top: 50%; |
|
||||
left: 50%; |
|
||||
transform: translate(-50%, -50%); /* 居中 */ |
|
||||
} |
|
||||
} |
|
||||
.ant-input-number{ |
|
||||
position: absolute; |
|
||||
left: 50%; |
|
||||
right: 50%; |
|
||||
bottom: 18px; |
|
||||
transform: translate(-50%, -50%); |
|
||||
font-size: 24px; |
|
||||
font-family: OPPOSans, OPPOSans-Bold; |
|
||||
font-weight: 700; |
|
||||
height: auto; |
|
||||
padding: 4px 0; |
|
||||
text-align: center; |
|
||||
// background: #7690e5; |
|
||||
background: linear-gradient(to right, rgba(0, 122, 255, 0.7), rgba(0, 122, 255, 1)); |
|
||||
border-radius: 6px; |
|
||||
color: #fff; |
|
||||
.ant-input-number-input{ |
|
||||
text-align: center; |
|
||||
} |
|
||||
.ant-input-number-handler-wrap{ |
|
||||
display: none; |
|
||||
} |
|
||||
} |
|
||||
.van-slider__bar{ |
|
||||
background: linear-gradient(to right, #007AFF, #52A5FF); |
|
||||
// background: linear-gradient(to right, rgba(0, 122, 255, 0.7), rgba(0, 122, 255, 1)); |
|
||||
} |
|
||||
.slider-icon{ |
|
||||
position: absolute; |
|
||||
top: -20px; |
|
||||
left: 2px; |
|
||||
color: #007AFF; |
|
||||
font-size: 26px; |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
} |
|
||||
.ant-form { |
|
||||
.ant-form-item-label{ |
|
||||
text-align: left; |
|
||||
} |
|
||||
label{ |
|
||||
font-size: 26px ; |
|
||||
font-weight: 500; |
|
||||
color: #565e6f; |
|
||||
} |
|
||||
.ant-form-item{ |
|
||||
&:not(:last-child) { |
|
||||
border-bottom: 1px solid #dfe6ec; |
|
||||
} |
|
||||
box-sizing: border-box; |
|
||||
} |
|
||||
.dose-item{ |
|
||||
margin-bottom: 40px!important; |
|
||||
} |
|
||||
.mb0{ |
|
||||
margin-bottom: 10px!important; |
|
||||
} |
|
||||
.borderNone{ |
|
||||
border-bottom: none!important; |
|
||||
} |
|
||||
.ant-radio-button-wrapper{ |
|
||||
padding: 0 18px; |
|
||||
height: 40px; |
|
||||
line-height: 40px; |
|
||||
font-size: 18px!important; |
|
||||
margin-right: 20px; |
|
||||
margin-bottom: 10px; |
|
||||
background: #f9f9f9; |
|
||||
border: 0.5px solid #a3acbf; |
|
||||
border-radius: 6px; |
|
||||
vertical-align: middle; |
|
||||
&:before, .ant-radio-button-wrapper-checked:before{ |
|
||||
display: none!important; |
|
||||
} |
|
||||
&:first-child, &:last-child{ |
|
||||
border-radius: 6px!important; |
|
||||
} |
|
||||
&:last-child{ |
|
||||
margin-right: 0; |
|
||||
} |
|
||||
} |
|
||||
.ant-form-item-control{ |
|
||||
text-align: left; |
|
||||
margin-left: 10px; |
|
||||
} |
|
||||
} |
|
||||
// .solid{ |
|
||||
// .ant-checkbox-wrapper { |
|
||||
// background: #f9f9f9; |
|
||||
// border: 0.5px solid #a3acbf; |
|
||||
// border-radius: 6px; |
|
||||
// vertical-align: middle; |
|
||||
// margin-right: 20px; |
|
||||
// margin-bottom: 10px; |
|
||||
// font-size: 18px!important; |
|
||||
// line-height: 40px; |
|
||||
// padding: 0 18px; |
|
||||
// height: 40px; |
|
||||
// min-width: 0!important; |
|
||||
// &.ant-checkbox-wrapper-checked{ |
|
||||
// background: #7690e5; |
|
||||
// color: #fff; |
|
||||
// } |
|
||||
// .ant-checkbox{ |
|
||||
// display: none; |
|
||||
// } |
|
||||
// } |
|
||||
// } |
|
||||
.ant-tabs-nav-container{ |
|
||||
.ant-tabs-tab{ |
|
||||
// font-size: 20px; |
|
||||
// font-family: Source Han Sans CN, Source Han Sans CN-Medium; |
|
||||
// font-weight: 500; |
|
||||
// text-align: left; |
|
||||
// color: #70798c; |
|
||||
} |
|
||||
.ant-tabs-tab-active{ |
|
||||
// // font-weight: 700; |
|
||||
// font-family: Source Han Sans CN, Source Han Sans CN-Bold; |
|
||||
// color: #393d4e!important; |
|
||||
} |
|
||||
.ant-tabs-ink-bar{ |
|
||||
// background: #7690e5 !important; |
|
||||
border-bottom: 3px solid transparent; /* 设置透明的底部边框 */ |
|
||||
border-image: linear-gradient(to right, #fff, #007AFF) 1; /* 使用渐变色填充边框 */ |
|
||||
border-radius: 10px; /* 设置圆角 */ |
|
||||
} |
|
||||
} |
|
||||
.ant-modal-wrap { |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
align-items: center; |
|
||||
.ant-modal{ |
|
||||
top: 0; |
|
||||
padding-bottom: 0; |
|
||||
.ant-modal-body { |
|
||||
padding: 26px 26px 20px !important; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.container-left-header { |
|
||||
display: flex; |
|
||||
margin-top: 20px; |
|
||||
margin-bottom: 20px; |
|
||||
span { |
|
||||
width: 12px; |
|
||||
height: 32px; |
|
||||
display: inline-block; |
|
||||
border-radius: 12px; |
|
||||
background: #8FB3FB; |
|
||||
margin-right: 16px; |
|
||||
} |
|
||||
|
|
||||
p { |
|
||||
line-height: 32px; |
|
||||
font-size: 32px; |
|
||||
font-weight: 600; |
|
||||
margin: 0; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
//急诊溶栓记录 |
|
||||
.basic-btn { |
|
||||
height: 72px; |
|
||||
background: linear-gradient(180deg, #b1caff, #83aafa); |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
justify-content: center; |
|
||||
border-radius: 36px; |
|
||||
margin: 60px 20px 0 20px; |
|
||||
|
|
||||
.basic-ico { |
|
||||
margin-right: 10px; |
|
||||
} |
|
||||
|
|
||||
p { |
|
||||
line-height: 72px; |
|
||||
font-weight: 600; |
|
||||
color: #fff; |
|
||||
font-size: 24px; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.container-left-basic { |
|
||||
min-height: 80px; |
|
||||
background: #7690E5; |
|
||||
border-radius: 12px; |
|
||||
margin-bottom: 24px; |
|
||||
color: #70798c; |
|
||||
// 下一节点 |
|
||||
.container-basic-node { |
|
||||
display: flex; |
|
||||
justify-content: space-between; |
|
||||
padding: 0 24px; |
|
||||
|
|
||||
.basic-p { |
|
||||
font-size: 24px; |
|
||||
color: #fff; |
|
||||
font-weight: 600; |
|
||||
text-align: left; |
|
||||
line-height: 62px; |
|
||||
margin: 0; |
|
||||
max-width: 74%; |
|
||||
white-space: nowrap; |
|
||||
overflow: hidden; |
|
||||
text-overflow: ellipsis; |
|
||||
} |
|
||||
|
|
||||
// 节点倒计时 |
|
||||
.basic-node-time { |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
|
|
||||
p { |
|
||||
margin: 0; |
|
||||
background: #fff; |
|
||||
padding: 2px 6px; |
|
||||
color: #758FE4; |
|
||||
font-weight: 600; |
|
||||
font-size: 18px; |
|
||||
border-radius: 6px; |
|
||||
|
|
||||
} |
|
||||
|
|
||||
span { |
|
||||
font-weight: 600; |
|
||||
font-size: 30px; |
|
||||
color: #fff; |
|
||||
margin: 0 8px; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.leftbasic-centbox { |
|
||||
height: 80px; |
|
||||
background: #fff; |
|
||||
margin-left: 6px; |
|
||||
border-radius: 12px; |
|
||||
display: flex; |
|
||||
justify-content: space-between; |
|
||||
padding: 0 16px; |
|
||||
} |
|
||||
|
|
||||
.leftbasic-centbox-title { |
|
||||
font-size: 24px; |
|
||||
font-weight: 600; |
|
||||
line-height: 80px; |
|
||||
} |
|
||||
|
|
||||
.leftbasic-centbox-ico { |
|
||||
margin-top: 32px; |
|
||||
} |
|
||||
&.active{ |
|
||||
background: #fff; |
|
||||
.leftbasic-centbox{ |
|
||||
background: #7690E5; |
|
||||
color: #fff; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
.container-left-header { |
|
||||
display: flex; |
|
||||
span { |
|
||||
width: 12px; |
|
||||
height: 32px; |
|
||||
display: inline-block; |
|
||||
border-radius: 12px; |
|
||||
background: #8FB3FB; |
|
||||
margin-right: 16px; |
|
||||
} |
|
||||
|
|
||||
p { |
|
||||
line-height: 32px; |
|
||||
font-size: 32px; |
|
||||
font-weight: 600; |
|
||||
margin: 0; |
|
||||
} |
|
||||
} |
|
||||
.basicr-back { |
|
||||
border-radius: 12px; |
|
||||
background: #fff; |
|
||||
padding: 0 28px; |
|
||||
box-shadow: 0 2px 12px 0 rgba(52, 52, 52, .1); |
|
||||
} |
|
||||
.container { |
|
||||
flex: 1; |
|
||||
display: flex; |
|
||||
justify-content: space-between; |
|
||||
|
|
||||
.container-left { |
|
||||
flex: 1; |
|
||||
padding-left: 20px; |
|
||||
margin-top: 24px; |
|
||||
} |
|
||||
.container-right{ |
|
||||
flex: 2; |
|
||||
overflow-y: auto; |
|
||||
display: flex; |
|
||||
padding-right: 20px; |
|
||||
border-left: 1px solid #C9D1DF; |
|
||||
padding-left: 20px; |
|
||||
margin-left: 20px; |
|
||||
margin-top: 24px; |
|
||||
margin-bottom: 24px; |
|
||||
} |
|
||||
} |
|
||||
.ant-select-dropdown{ |
|
||||
.ant-select-dropdown-menu-item{ |
|
||||
font-size: 16px; |
|
||||
} |
|
||||
} |
|
||||
.detail-form { |
|
||||
.detail-form-control{ |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
} |
|
||||
.ant-form-item { |
|
||||
display: flex; |
|
||||
justify-content: space-between; |
|
||||
align-items: center; |
|
||||
padding: 12px 0 !important; |
|
||||
margin-bottom: 0 !important; |
|
||||
|
|
||||
.ant-form-item-label { |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
|
|
||||
label { |
|
||||
font-size: 24px !important; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.ant-radio-wrapper { |
|
||||
height: 30px !important; |
|
||||
font-size: 20px !important; |
|
||||
} |
|
||||
} |
|
||||
.ant-select{ |
|
||||
min-width: 300px; |
|
||||
display: flex; |
|
||||
justify-content: flex-end; |
|
||||
} |
|
||||
.ant-select-selection-selected-value{ |
|
||||
padding-right: 10px; |
|
||||
} |
|
||||
.ant-select-selection__rendered{ |
|
||||
line-height: 40px; |
|
||||
max-width: 300px; |
|
||||
} |
|
||||
.ant-form-item-control-wrapper { |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
justify-content: flex-end; |
|
||||
text-align: right; |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
.Overviewbasicr { |
|
||||
flex: 1; |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
margin-bottom: 20px; |
|
||||
} |
|
||||
// 复选框 |
|
||||
.ant-checkbox-group{ |
|
||||
display: flex!important; |
|
||||
flex-wrap: wrap; |
|
||||
.ant-checkbox-wrapper{ |
|
||||
min-width: 30%; |
|
||||
} |
|
||||
.ant-checkbox-checked{ |
|
||||
.ant-checkbox-inner{ |
|
||||
background-color: #7690e5!important; |
|
||||
border-color: #7690e5!important; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
// 详情form-item |
|
||||
.jmrs-form-item { |
|
||||
.jmrs-form-item-con { |
|
||||
|
|
||||
&.checkbox { |
|
||||
flex-direction: column; |
|
||||
.content-right{ |
|
||||
margin-top: 10px; |
|
||||
|
|
||||
} |
|
||||
} |
|
||||
.content-right{ |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
} |
|
||||
.operate { |
|
||||
font-size: 24px; |
|
||||
color: #000000; |
|
||||
padding-right: 12px; |
|
||||
} |
|
||||
.label-info{ |
|
||||
color: #000000; |
|
||||
font-size: 20px; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
// 折叠面板 |
|
||||
// .collapse-content{ |
|
||||
// display: flex; |
|
||||
// justify-content: space-between; |
|
||||
// padding: 5px 0; |
|
||||
// } |
|
||||
// .ant-collapse-arrow, .ant-select-arrow{ |
|
||||
// font-size: 20px!important; |
|
||||
// color: #70798C!important; |
|
||||
// } |
|
||||
|
|
||||
// 知情同意 |
|
||||
.Informed-container { |
|
||||
// padding: 0 0 30px; |
|
||||
|
|
||||
.mt2 { |
|
||||
margin-top: 20px; |
|
||||
} |
|
||||
|
|
||||
.informed-info { |
|
||||
font-size: 1.2rem; |
|
||||
font-weight: bold; |
|
||||
text-align: left; |
|
||||
line-height: 36px; |
|
||||
&.indent { |
|
||||
text-indent: 2em; |
|
||||
} |
|
||||
&.pl{ |
|
||||
padding-left: 20px; |
|
||||
} |
|
||||
|
|
||||
&.informed-info-sky{ |
|
||||
color: #007AFF; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.informed-list { |
|
||||
display: flex; |
|
||||
// flex-wrap: wrap; |
|
||||
justify-content: space-between; |
|
||||
align-items: center; |
|
||||
margin-top: 20px; |
|
||||
|
|
||||
.informed-item { |
|
||||
flex: 1; |
|
||||
display: flex; |
|
||||
// justify-content: space-between; |
|
||||
align-items: center; |
|
||||
margin-bottom: 15px; |
|
||||
margin-right: 10px; |
|
||||
|
|
||||
// margin: 0 10px 20px; |
|
||||
>span { |
|
||||
font-size: 16px; |
|
||||
} |
|
||||
|
|
||||
.item-input { |
|
||||
width: 45%; |
|
||||
} |
|
||||
|
|
||||
.item-sign { |
|
||||
width: 50%; |
|
||||
} |
|
||||
|
|
||||
.item-btn { |
|
||||
color: #7690e5; |
|
||||
border: 1px solid #7690e5; |
|
||||
box-sizing: border-box; |
|
||||
} |
|
||||
|
|
||||
.item-img { |
|
||||
min-width: 120px; |
|
||||
// flex: 1; |
|
||||
height: 40px; |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
justify-content: center; |
|
||||
box-sizing: border-box; |
|
||||
margin: 0 5px; |
|
||||
img { |
|
||||
width: 100%; |
|
||||
height: 100%; |
|
||||
} |
|
||||
&.item-img-black{ |
|
||||
background-color: black; |
|
||||
color: #fff; |
|
||||
} |
|
||||
} |
|
||||
.item-img-non { |
|
||||
|
|
||||
} |
|
||||
} |
|
||||
.informed-item1{ |
|
||||
width: 40%; |
|
||||
display: flex; |
|
||||
justify-content: space-between; |
|
||||
align-items: center; |
|
||||
margin-bottom: 15px; |
|
||||
|
|
||||
.item-input { |
|
||||
width: 60%; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
|
|
@ -1,274 +0,0 @@ |
|||||
.white--text{ |
|
||||
color: #fff; |
|
||||
} |
|
||||
|
|
||||
.text-left { |
|
||||
text-align: left !important; |
|
||||
} |
|
||||
|
|
||||
// padding |
|
||||
.pa-3 { |
|
||||
padding: 12px; |
|
||||
} |
|
||||
|
|
||||
.px-2{ |
|
||||
padding-left: 8px; |
|
||||
padding-right: 8px; |
|
||||
} |
|
||||
|
|
||||
.px-3{ |
|
||||
padding-left: 12px; |
|
||||
padding-right: 12px; |
|
||||
} |
|
||||
|
|
||||
.px-10{ |
|
||||
padding-left: 30px; |
|
||||
padding-right: 30px; |
|
||||
} |
|
||||
|
|
||||
.pb-2 { |
|
||||
padding-bottom: 8px; |
|
||||
} |
|
||||
|
|
||||
.pb-3 { |
|
||||
padding-bottom: 12px; |
|
||||
} |
|
||||
|
|
||||
.pb-4 { |
|
||||
padding-bottom: 16px; |
|
||||
} |
|
||||
|
|
||||
.pb-5 { |
|
||||
padding-bottom: 20px; |
|
||||
} |
|
||||
|
|
||||
.pb-10 { |
|
||||
padding-bottom: 40px; |
|
||||
} |
|
||||
.pr-1 { |
|
||||
padding-right: 4px; |
|
||||
} |
|
||||
.pr-2 { |
|
||||
padding-right: 8px; |
|
||||
} |
|
||||
.pr-3 { |
|
||||
padding-right: 12px; |
|
||||
} |
|
||||
.pr-4 { |
|
||||
padding-right: 18px; |
|
||||
} |
|
||||
.pr-5 { |
|
||||
padding-right: 20px; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
// margin |
|
||||
.ma-2 { |
|
||||
margin: 8px; |
|
||||
} |
|
||||
|
|
||||
.ma-3 { |
|
||||
margin: 12px; |
|
||||
} |
|
||||
|
|
||||
.mx-2{ |
|
||||
margin-left: 8px; |
|
||||
margin-right: 8px; |
|
||||
} |
|
||||
|
|
||||
.my-2{ |
|
||||
margin-top: 8px; |
|
||||
margin-bottom: 8px; |
|
||||
} |
|
||||
|
|
||||
.my-3{ |
|
||||
margin-top: 12px; |
|
||||
margin-bottom: 12px; |
|
||||
} |
|
||||
|
|
||||
.my-4{ |
|
||||
margin-top: 16px; |
|
||||
margin-bottom: 16px; |
|
||||
} |
|
||||
|
|
||||
.my-6{ |
|
||||
margin-top: 24px; |
|
||||
margin-bottom: 24px; |
|
||||
} |
|
||||
|
|
||||
.mt-1{ |
|
||||
margin-top: 4px; |
|
||||
} |
|
||||
|
|
||||
.mt-2{ |
|
||||
margin-top: 8px; |
|
||||
} |
|
||||
|
|
||||
.mt-3{ |
|
||||
margin-top: 12px; |
|
||||
} |
|
||||
|
|
||||
.mt-4{ |
|
||||
margin-top: 16px; |
|
||||
} |
|
||||
|
|
||||
.mb-1{ |
|
||||
margin-bottom: 4px; |
|
||||
} |
|
||||
|
|
||||
.mb-2{ |
|
||||
margin-bottom: 8px; |
|
||||
} |
|
||||
|
|
||||
.mb-3{ |
|
||||
margin-bottom: 12px; |
|
||||
} |
|
||||
|
|
||||
.mb-4{ |
|
||||
margin-bottom: 16px; |
|
||||
} |
|
||||
|
|
||||
.mb-5{ |
|
||||
margin-bottom: 20px; |
|
||||
} |
|
||||
|
|
||||
.mb-6{ |
|
||||
margin-bottom: 24px; |
|
||||
} |
|
||||
|
|
||||
.ml-2{ |
|
||||
margin-left: 8px; |
|
||||
} |
|
||||
|
|
||||
.ml-3{ |
|
||||
margin-left: 12px; |
|
||||
} |
|
||||
|
|
||||
.ml-4{ |
|
||||
margin-left: 16px; |
|
||||
} |
|
||||
|
|
||||
.ml-5{ |
|
||||
margin-left: 20px; |
|
||||
} |
|
||||
|
|
||||
.ml-6{ |
|
||||
margin-left: 24px; |
|
||||
} |
|
||||
|
|
||||
.ml-7{ |
|
||||
margin-left: 28px; |
|
||||
} |
|
||||
|
|
||||
.ml-8{ |
|
||||
margin-left: 32px; |
|
||||
} |
|
||||
|
|
||||
.mr-1{ |
|
||||
margin-right: 4px; |
|
||||
} |
|
||||
|
|
||||
.mr-2{ |
|
||||
margin-right: 8px; |
|
||||
} |
|
||||
|
|
||||
.mr-3{ |
|
||||
margin-right: 12px; |
|
||||
} |
|
||||
|
|
||||
.mr-4{ |
|
||||
margin-right: 16px; |
|
||||
} |
|
||||
|
|
||||
.mr-5{ |
|
||||
margin-right: 20px; |
|
||||
} |
|
||||
|
|
||||
.mr-6{ |
|
||||
margin-right: 24px; |
|
||||
} |
|
||||
|
|
||||
// background |
|
||||
.white { |
|
||||
background: white; |
|
||||
} |
|
||||
|
|
||||
// font |
|
||||
.font-bold-24{ |
|
||||
font-size: 24px; |
|
||||
font-weight: bold; |
|
||||
} |
|
||||
|
|
||||
.font-24{ |
|
||||
font-size: 24px; |
|
||||
} |
|
||||
|
|
||||
.font-bold-16{ |
|
||||
font-size: 16px; |
|
||||
font-weight: bold; |
|
||||
} |
|
||||
|
|
||||
.font-16{ |
|
||||
font-size: 16px; |
|
||||
} |
|
||||
|
|
||||
.font-bold-14{ |
|
||||
font-size: 14px; |
|
||||
font-weight: bold; |
|
||||
} |
|
||||
|
|
||||
.font-14{ |
|
||||
font-size: 14px; |
|
||||
} |
|
||||
|
|
||||
.font-18{ |
|
||||
font-size: 18px; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
.icon-size{ |
|
||||
font-size: 20px; |
|
||||
} |
|
||||
|
|
||||
h2{ |
|
||||
font-size: 24px; |
|
||||
font-weight: bold; |
|
||||
color: rgba(0,0,0,.85) |
|
||||
} |
|
||||
|
|
||||
.textColor{ |
|
||||
color: rgba(0,0,0,.65) |
|
||||
} |
|
||||
|
|
||||
.baseColor{ |
|
||||
color: #7690e5 |
|
||||
} |
|
||||
|
|
||||
.bg{ |
|
||||
background: #F5F5F5 |
|
||||
} |
|
||||
|
|
||||
.ant-btn-primary, .ant-radio-button-wrapper-checked{ |
|
||||
background-color: #017aff!important; |
|
||||
border-color: #017aff!important; |
|
||||
} |
|
||||
.ant-radio-checked{ |
|
||||
border-color: #7690e5!important; |
|
||||
} |
|
||||
.ant-radio-inner{ |
|
||||
border-color: #7690e5!important; |
|
||||
} |
|
||||
.ant-radio-inner:after{ |
|
||||
background-color: #7690e5!important; |
|
||||
} |
|
||||
.ant-btn-link:hover, .ant-btn-link:focus{ |
|
||||
color: #7690e5!important; |
|
||||
} |
|
||||
|
|
||||
.fill-width{ |
|
||||
width:100%; |
|
||||
} |
|
||||
|
|
||||
.fill-height{ |
|
||||
height:100%; |
|
||||
} |
|
@ -1,161 +0,0 @@ |
|||||
<!-- |
|
||||
* @desc: 导航 |
|
||||
* @Author: gaowenya |
|
||||
* @Date: 2023-06-21 11:00 |
|
||||
* @LastEditors: |
|
||||
* @LastEditTime: |
|
||||
--> |
|
||||
<template> |
|
||||
<header class="header" :class="getPatient === false ? 'mt' : ''"> |
|
||||
<div class="header-content" v-if="getChangeText.title || getPatient"> |
|
||||
<div class="header-back" v-if="isBack" @click="toBack"> |
|
||||
<a-icon type="left" />返回 |
|
||||
</div> |
|
||||
<div class="header-title"> |
|
||||
<span v-if="getChangeText.title"> |
|
||||
{{ getChangeText.title }} |
|
||||
</span> |
|
||||
<p v-else class="caret-top"> |
|
||||
姓名: |
|
||||
<span> {{ patientData.patientName || '暂无' }} </span> |
|
||||
性别: |
|
||||
<span> |
|
||||
{{ sex[patientData.patientGender] || '暂无' }} |
|
||||
</span> |
|
||||
年龄: |
|
||||
<span> {{ patientData.patientAge || '暂无' }} </span> |
|
||||
证件号: |
|
||||
<span> {{ patientData.jzh || '暂无' }} </span> |
|
||||
急诊号: |
|
||||
<span> 暂无 </span> |
|
||||
</p> |
|
||||
</div> |
|
||||
<div class="header-right" v-if="isMore" @click="changeOverviewType"> |
|
||||
{{ getChangeText.text }}<a-icon type="swap" /> |
|
||||
</div> |
|
||||
</div> |
|
||||
</header> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import { mapMutations, mapState } from 'vuex'; |
|
||||
export default { |
|
||||
data() { |
|
||||
return { |
|
||||
sex: { |
|
||||
0: '男', |
|
||||
1: '女', |
|
||||
}, |
|
||||
overview: { |
|
||||
title: '', |
|
||||
text: '', |
|
||||
}, |
|
||||
}; |
|
||||
}, |
|
||||
computed: { |
|
||||
...mapState('patient', ['patientData', 'overviewType']), |
|
||||
...mapState('storm', ['isBack', 'isMore']), |
|
||||
getChangeText() { |
|
||||
if (this.overviewType === 'info') { |
|
||||
return { |
|
||||
title: '患者信息', |
|
||||
text: '切换至概览', |
|
||||
}; |
|
||||
} else if (this.overviewType === 'overview') { |
|
||||
return { |
|
||||
title: '患者概览', |
|
||||
text: '切换至详情', |
|
||||
}; |
|
||||
} |
|
||||
return { |
|
||||
title: '', |
|
||||
text: '', |
|
||||
}; |
|
||||
}, |
|
||||
getPatient() { |
|
||||
if (!this.patientData) return false; |
|
||||
const { patientName, patientGender, patientAge, patientIdCardNo } = |
|
||||
this.patientData; |
|
||||
console.log(' this.patientData: ', this.patientData); |
|
||||
let sex = { |
|
||||
0: '男', |
|
||||
1: '女', |
|
||||
}; |
|
||||
if (!patientName) return false; |
|
||||
return `姓名: ${patientName} 性别: ${sex[patientGender]} 年龄: ${ |
|
||||
patientAge || '' |
|
||||
} 证件号: ${patientIdCardNo} 急诊号: 暂无`; |
|
||||
}, |
|
||||
}, |
|
||||
methods: { |
|
||||
...mapMutations('patient', ['setOverviewType']), |
|
||||
toBack() { |
|
||||
window.history.go(-1); |
|
||||
}, |
|
||||
changeOverviewType() { |
|
||||
if (this.overviewType === 'info') { |
|
||||
this.overview = { |
|
||||
title: '患者概览', |
|
||||
text: '切换至概览', |
|
||||
}; |
|
||||
this.setOverviewType('overview'); |
|
||||
} else if (this.overviewType === 'overview') { |
|
||||
this.overview = { |
|
||||
title: '患者信息', |
|
||||
text: '切换至详情', |
|
||||
}; |
|
||||
this.setOverviewType('info'); |
|
||||
} |
|
||||
}, |
|
||||
}, |
|
||||
}; |
|
||||
</script> |
|
||||
|
|
||||
<style scoped lang="less"> |
|
||||
.header { |
|
||||
width: 100%; |
|
||||
display: flex; |
|
||||
background: linear-gradient(180deg, #dbeaff, #fbfdff 50%); |
|
||||
box-shadow: 0px 0.25px 0px 0px rgba(0, 0, 0, 0.2); |
|
||||
.caret-top { |
|
||||
margin: 0; |
|
||||
span { |
|
||||
color: #70798c; |
|
||||
margin-right: 5px; |
|
||||
} |
|
||||
} |
|
||||
&.mt { |
|
||||
margin-top: 10px; |
|
||||
} |
|
||||
.header-content { |
|
||||
flex: 1; |
|
||||
height: 60px; |
|
||||
display: flex; |
|
||||
position: relative; |
|
||||
align-items: center; |
|
||||
} |
|
||||
.header-back { |
|
||||
position: absolute; |
|
||||
top: 16px; |
|
||||
left: 24px; |
|
||||
font-size: 24px; |
|
||||
} |
|
||||
.header-right { |
|
||||
position: absolute; |
|
||||
top: 16px; |
|
||||
right: 24px; |
|
||||
font-size: 24px; |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
justify-content: center; |
|
||||
} |
|
||||
|
|
||||
.header-title { |
|
||||
flex: 1; |
|
||||
font-size: 24px; |
|
||||
font-family: Source Han Sans CN, Source Han Sans CN-Bold; |
|
||||
font-weight: 700; |
|
||||
text-align: center; |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
@ -1,115 +0,0 @@ |
|||||
<template> |
|
||||
<div class="count">{{ time }}{{ markerList.runTime }}</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import { mapState } from 'vuex'; |
|
||||
export default { |
|
||||
data() { |
|
||||
return { |
|
||||
markerList: { |
|
||||
runTotal: '3600', |
|
||||
runTime: '00:00', |
|
||||
}, |
|
||||
minute: 0, |
|
||||
second: 0, |
|
||||
requestCount: 0, |
|
||||
lastTime: 0, |
|
||||
currentTime: 0, |
|
||||
}; |
|
||||
}, |
|
||||
computed: { |
|
||||
...mapState('patient', ['patientData', 'timerData']), |
|
||||
time() { |
|
||||
const { timerData, patientData } = this; |
|
||||
if (!timerData && !patientData) return null; |
|
||||
if (timerData.firstAidId !== patientData.firstAidId) return null; |
|
||||
const { countdown } = timerData; |
|
||||
if (countdown === null && !countdown) return null; |
|
||||
const totalSeconds = countdown; |
|
||||
// ?️ 获取完整分钟数 |
|
||||
const minutes = Math.floor(totalSeconds / 60); |
|
||||
this.minute = minutes; |
|
||||
// ?️ 获得剩余的秒数 |
|
||||
const seconds = totalSeconds % 60; |
|
||||
this.second = seconds; |
|
||||
// ✅ 格式化为 MM:SS |
|
||||
const result = `${this.padTo2Digits(minutes)}:${this.padTo2Digits( |
|
||||
seconds |
|
||||
)}`; |
|
||||
this.markerList.runTime = result; |
|
||||
if (this.markerList.runTotal === countdown) { |
|
||||
this.utils.AnimationFrame.done('countTask'); |
|
||||
} else { |
|
||||
this.utils.AnimationFrame.create( |
|
||||
'countTask', |
|
||||
1000, |
|
||||
true, |
|
||||
(min) => { |
|
||||
this.runStart(min); |
|
||||
} |
|
||||
); |
|
||||
} |
|
||||
}, |
|
||||
}, |
|
||||
methods: { |
|
||||
padTo2Digits(num) { |
|
||||
return num.toString().padStart(2, '0'); |
|
||||
}, |
|
||||
runStart(min) { |
|
||||
// 改版 防抖 |
|
||||
// 当前定时器一直在执行,并非隔一秒才执行, 而是每隔一秒1 |
|
||||
// 通过防抖来限制该函数一秒内只执行一次 |
|
||||
this.currentTime = new Date().getTime(); |
|
||||
if (this.currentTime - this.lastTime > 1000) { |
|
||||
this.lastTime = this.currentTime; |
|
||||
// //开始计时 |
|
||||
this.second = this.second + 1; |
|
||||
if (this.second >= 60) { |
|
||||
this.second = 0; |
|
||||
this.minute = this.minute + 1; |
|
||||
} |
|
||||
// console.log(this.minute) |
|
||||
if (this.minute >= 60) { |
|
||||
this.minute = 60; |
|
||||
this.second = 0; |
|
||||
} |
|
||||
this.markerList.runTime = |
|
||||
this.Zero(this.minute) + ':' + this.Zero(this.second); |
|
||||
} |
|
||||
// 窗口小化定时器校验无法进入, requestCount 的值停留在了窗口小化那一瞬间 |
|
||||
// if (this.requestCount === n) { |
|
||||
// console.log('countTask::', n); |
|
||||
// this.requestCount = n + 1; |
|
||||
// //开始计时 |
|
||||
// this.second = this.second + 1; |
|
||||
// if (this.second >= 60) { |
|
||||
// this.second = 0; |
|
||||
// this.minute = this.minute + 1; |
|
||||
// } |
|
||||
// // console.log(this.minute) |
|
||||
// if (this.minute >= 60) { |
|
||||
// this.minute = 60; |
|
||||
// this.second = 0; |
|
||||
// } |
|
||||
// this.markerList.runTime = |
|
||||
// this.Zero(this.minute) + ':' + this.Zero(this.second); |
|
||||
// } |
|
||||
}, |
|
||||
//补零 |
|
||||
Zero(n) { |
|
||||
return n < 10 ? '0' + n : '' + n; |
|
||||
}, |
|
||||
}, |
|
||||
}; |
|
||||
</script> |
|
||||
|
|
||||
<style lang="less" scoped> |
|
||||
.count { |
|
||||
font-size: 44px; |
|
||||
font-family: Source Han Sans CN, Source Han Sans CN-Bold; |
|
||||
font-weight: 700; |
|
||||
color: #393d4e; |
|
||||
line-height: 44px; |
|
||||
} |
|
||||
</style> |
|
@ -1,80 +0,0 @@ |
|||||
<!-- |
|
||||
* @desc: 拖拽 |
|
||||
* @Author: gaowenya |
|
||||
* @Date: 2023-07-06 11:00 |
|
||||
* @LastEditors: |
|
||||
* @LastEditTime: |
|
||||
--> |
|
||||
<template> |
|
||||
<div |
|
||||
@touchstart="onTouchStart" |
|
||||
@touchmove="onTouchMove" |
|
||||
@touchend="onTouchEnd" |
|
||||
ref="floatWindow" |
|
||||
:style="{ right: right + 'px', top: top + 'px' }" |
|
||||
class="dragger" |
|
||||
> |
|
||||
<slot> </slot> |
|
||||
</div> |
|
||||
</template> |
|
||||
<script> |
|
||||
import { mapState } from 'vuex'; |
|
||||
export default { |
|
||||
props: {}, |
|
||||
data() { |
|
||||
return { |
|
||||
startX: 0, |
|
||||
startY: 0, |
|
||||
offsetX: 0, |
|
||||
offsetY: 0, |
|
||||
right: 0, |
|
||||
top: 300, |
|
||||
isScrolling: false, |
|
||||
}; |
|
||||
}, |
|
||||
computed: {}, |
|
||||
methods: { |
|
||||
onTouchStart(e) { |
|
||||
this.startX = e.touches[0].clientX; |
|
||||
this.startY = e.touches[0].clientY; |
|
||||
this.offsetX = this.right; |
|
||||
this.offsetY = this.top; |
|
||||
this.isScrolling = false; |
|
||||
}, |
|
||||
onTouchMove(e) { |
|
||||
const x = this.startX - e.touches[0].clientX + this.offsetX; |
|
||||
const y = e.touches[0].clientY - this.startY + this.offsetY; |
|
||||
const maxX = window.innerWidth - this.$refs.floatWindow.offsetWidth; |
|
||||
const maxY = |
|
||||
window.innerHeight - this.$refs.floatWindow.offsetHeight; |
|
||||
this.right = x < 0 ? 0 : x > maxX ? maxX : x; |
|
||||
this.top = y < 0 ? 0 : y > maxY ? maxY : y; |
|
||||
if ( |
|
||||
Math.abs(this.startX - e.touches[0].clientX) > 5 || |
|
||||
Math.abs(e.touches[0].clientY - this.startY) > 5 |
|
||||
) { |
|
||||
this.isScrolling = true; |
|
||||
} |
|
||||
}, |
|
||||
onTouchEnd(e) { |
|
||||
if (!this.isScrolling) { |
|
||||
if (e.changedTouches[0].clientX > window.innerWidth / 2) { |
|
||||
this.right = 0; |
|
||||
} else { |
|
||||
this.right = |
|
||||
window.innerWidth - this.$refs.floatWindow.offsetWidth; |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
}, |
|
||||
}; |
|
||||
</script> |
|
||||
<style scoped lang="less"> |
|
||||
.dragger { |
|
||||
position: fixed; |
|
||||
right: 0; |
|
||||
top: 0; |
|
||||
transform: translate3d(0, 0, 0); |
|
||||
transition: right 0.3s ease-out; |
|
||||
} |
|
||||
</style> |
|
@ -1,546 +0,0 @@ |
|||||
<template> |
|
||||
<div class="myKeyboard" @click.stop="handleFocus" @blur="handleBlur" tabindex="0"> |
|
||||
<div class="input-container"> |
|
||||
<div class="input-top"> |
|
||||
<div class="input-label" :style="labelStyle" :class="labelClass"> |
|
||||
{{ inputLabel }} |
|
||||
</div> |
|
||||
<div class="inputText" id="inputText" :style="inputStyle" :class="inputClass"> |
|
||||
<span class="cursor"> |
|
||||
<span class="holder showWhite">|</span> |
|
||||
</span> |
|
||||
<span class="place-holder">{{ placeHolder }}</span> |
|
||||
<span class="right-space" :style="{ color: zcolor }" @click="moveCursor"> </span> |
|
||||
<span class="right-btn"> |
|
||||
<a-icon class="clear" v-if="clearShow" type="close-circle" @click="handleClear" /> |
|
||||
<slot></slot> |
|
||||
</span> |
|
||||
</div> |
|
||||
</div> |
|
||||
|
|
||||
<div class="error" :style="errorStyle" v-if="errorShow"> |
|
||||
{{ errorMessage }} |
|
||||
</div> |
|
||||
<div class="errorSpace" v-else></div> |
|
||||
</div> |
|
||||
<div class="number hidden" :class="numberClass" :style="numberStyle"> |
|
||||
<div class="mybtn" @click.stop="handleBlur"> |
|
||||
<a-icon type="down" /> |
|
||||
</div> |
|
||||
<div class="mynum"> |
|
||||
<div class="num" @click="handleNum('1')">1</div> |
|
||||
<div class="num" @click="handleNum('2')">2</div> |
|
||||
<div class="num" @click="handleNum('3')">3</div> |
|
||||
<div class="num" @click="handleNum('4')">4</div> |
|
||||
<div class="num" @click="handleNum('5')">5</div> |
|
||||
<div class="num" @click="handleNum('6')">6</div> |
|
||||
<div class="num" @click="handleNum('7')">7</div> |
|
||||
<div class="num" @click="handleNum('8')">8</div> |
|
||||
<div class="num" @click="handleNum('9')">9</div> |
|
||||
<div class="num" @click="handleNum('0')">0</div> |
|
||||
<div v-if="keyboard == 'card'" class="num" @click="handleNum('X')"> |
|
||||
X |
|
||||
</div> |
|
||||
<div v-if="keyboard == 'tel'" class="num" @click="handleNum('0')"> |
|
||||
0 |
|
||||
</div> |
|
||||
<div class="num" @click.stop="handleDelete" @touchstart="gtouchstart" @touchend="gtouchend" |
|
||||
@touchmove="gtouchmove"> |
|
||||
<a-icon type="close-circle" /> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
props: { |
|
||||
// inputS: { |
|
||||
// type: String, |
|
||||
// default: '', |
|
||||
// }, |
|
||||
// inputH: { |
|
||||
// type: String, |
|
||||
// default: '2.5rem', |
|
||||
// }, |
|
||||
// inputB: { |
|
||||
// type: String, |
|
||||
// default: 'none', |
|
||||
// }, |
|
||||
// inputW: { |
|
||||
// type: String, |
|
||||
// default: '', |
|
||||
// }, |
|
||||
// inputBgc: { |
|
||||
// type: String, |
|
||||
// default: '#fff', |
|
||||
// }, |
|
||||
// labelS: { |
|
||||
// type: String, |
|
||||
// default: '', |
|
||||
// }, |
|
||||
// labelC: { |
|
||||
// type: String, |
|
||||
// default: '', |
|
||||
// }, |
|
||||
// labelW: { |
|
||||
// type: String, |
|
||||
// default: '', |
|
||||
// }, |
|
||||
// 输入框索引(必填字段) |
|
||||
indexNum: { |
|
||||
type: Number, |
|
||||
default: 0, |
|
||||
}, |
|
||||
// 是否聚焦(true:不聚焦,false:聚焦) |
|
||||
numberDis: { |
|
||||
type: Boolean, |
|
||||
default: false, |
|
||||
}, |
|
||||
// 是否必填(true:出现红星,false:不出现) |
|
||||
required: { |
|
||||
type: Boolean, |
|
||||
default: false, |
|
||||
}, |
|
||||
// 键盘类型(card:身份证,tel:数字) |
|
||||
keyboard: { |
|
||||
type: String, |
|
||||
default: 'card', |
|
||||
}, |
|
||||
// 父组件存的值 |
|
||||
oldValue: { |
|
||||
type: String, |
|
||||
default: '', |
|
||||
}, |
|
||||
// 占位符颜色(建议设置和输入框背景同色) |
|
||||
zcolor: { |
|
||||
type: String, |
|
||||
default: 'transparent', |
|
||||
}, |
|
||||
// label文字 |
|
||||
inputLabel: { |
|
||||
type: String, |
|
||||
default: '', |
|
||||
}, |
|
||||
// 当输入框内无文字时显示 |
|
||||
placeHolder: { |
|
||||
type: String, |
|
||||
default: '请输入', |
|
||||
}, |
|
||||
// 错误提示信息 |
|
||||
errorMessage: { |
|
||||
type: String, |
|
||||
default: '请输入正确的信息', |
|
||||
}, |
|
||||
// 是否显示错误提示信息 |
|
||||
errorShow: { |
|
||||
type: Boolean, |
|
||||
default: false, |
|
||||
}, |
|
||||
// 错误提示信息样式 |
|
||||
errorStyle: { |
|
||||
type: Object, |
|
||||
default: function() { |
|
||||
return {} |
|
||||
}, |
|
||||
}, |
|
||||
// 是否显示清除键 |
|
||||
clearShow: { |
|
||||
type: Boolean, |
|
||||
default: false, |
|
||||
}, |
|
||||
// label动态类名 |
|
||||
labelClass: { |
|
||||
type: String, |
|
||||
default: '', |
|
||||
}, |
|
||||
// label样式 |
|
||||
labelStyle: { |
|
||||
type: Object, |
|
||||
default: function() { |
|
||||
return {} |
|
||||
}, |
|
||||
}, |
|
||||
// input动态类名 |
|
||||
inputClass: { |
|
||||
type: String, |
|
||||
default: '', |
|
||||
}, |
|
||||
// input样式 |
|
||||
inputStyle: { |
|
||||
type: Object, |
|
||||
default: function() { |
|
||||
return {} |
|
||||
}, |
|
||||
}, |
|
||||
// number类名 |
|
||||
numberClass: { |
|
||||
type: String, |
|
||||
default: '', |
|
||||
}, |
|
||||
// number样式 |
|
||||
numberStyle: { |
|
||||
type: Object, |
|
||||
default: function() { |
|
||||
return {} |
|
||||
}, |
|
||||
}, |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
inputArea: '', |
|
||||
stop: false, |
|
||||
clickNum: false, |
|
||||
show: false, |
|
||||
value: '', |
|
||||
inputValue: '', |
|
||||
} |
|
||||
}, |
|
||||
watch: { |
|
||||
oldValue(val) { |
|
||||
if (val != this.inputValue) { |
|
||||
this.handleClear() |
|
||||
this.handleOld() |
|
||||
} |
|
||||
}, |
|
||||
required(val) { |
|
||||
this.handleRequired(val) |
|
||||
}, |
|
||||
}, |
|
||||
created() { |
|
||||
this.$toast.clear() |
|
||||
}, |
|
||||
mounted() { |
|
||||
this.handleRequired(this.required) |
|
||||
this.handleOld() |
|
||||
}, |
|
||||
methods: { |
|
||||
// 是否必填 |
|
||||
handleRequired(val) { |
|
||||
const inputLabel = |
|
||||
document.getElementsByClassName('input-label')[this.indexNum] |
|
||||
if (val) { |
|
||||
inputLabel.className = 'input-label required' |
|
||||
} else { |
|
||||
inputLabel.className = 'input-label' |
|
||||
} |
|
||||
}, |
|
||||
// 父组件改变值 |
|
||||
handleOld() { |
|
||||
// 获取父组件存的值后画数字 |
|
||||
if (this.oldValue != '') { |
|
||||
for (const item of this.oldValue) { |
|
||||
const span = document.createElement('span') //创建包含值的元素 |
|
||||
span.className = 'val' |
|
||||
span.innerText = item |
|
||||
const space = document.createElement('span') |
|
||||
space.className = 'space' |
|
||||
space.innerText = '' |
|
||||
span.addEventListener('click', this.moveCursor) |
|
||||
const cursor = |
|
||||
document.getElementsByClassName('cursor')[this.indexNum] |
|
||||
const inputArea = |
|
||||
document.getElementsByClassName('inputText')[this.indexNum] |
|
||||
inputArea.insertBefore(space, cursor) //插入空列 |
|
||||
inputArea.insertBefore(span, cursor) //插入值 |
|
||||
} |
|
||||
} |
|
||||
const placeHolder = |
|
||||
document.getElementsByClassName('place-holder')[this.indexNum] |
|
||||
|
|
||||
if (this.oldValue == '') { |
|
||||
placeHolder.className = 'place-holder' |
|
||||
} else { |
|
||||
placeHolder.className = 'place-holder hidden' |
|
||||
} |
|
||||
this.inputValue = this.oldValue |
|
||||
this.$emit('keyboard-input', this.inputValue) |
|
||||
}, |
|
||||
// 聚焦 |
|
||||
handleFocus(event) { |
|
||||
if (!this.numberDis) { |
|
||||
this.$emit('indexNum', this.indexNum) |
|
||||
const number = document.getElementsByClassName('number')[this.indexNum] |
|
||||
number.className = 'number' |
|
||||
this.setCursorFlash() |
|
||||
this.handleValue() |
|
||||
} |
|
||||
}, |
|
||||
//字符插入,在光标前插入字符 |
|
||||
handleNum(value) { |
|
||||
const number = document.getElementsByClassName('number')[this.indexNum] |
|
||||
number.className = 'number' |
|
||||
const span = document.createElement('span') //创建包含值的元素 |
|
||||
span.className = 'val' |
|
||||
span.innerText = value |
|
||||
|
|
||||
const space = document.createElement('span') |
|
||||
space.className = 'space' |
|
||||
space.innerText = '' |
|
||||
span.addEventListener('click', this.moveCursor) |
|
||||
const cursor = document.getElementsByClassName('cursor')[this.indexNum] |
|
||||
const inputArea = |
|
||||
document.getElementsByClassName('inputText')[this.indexNum] |
|
||||
inputArea.insertBefore(space, cursor) //插入空列 |
|
||||
inputArea.insertBefore(span, cursor) //插入值 |
|
||||
this.handleValue() |
|
||||
}, |
|
||||
// 失焦 |
|
||||
handleBlur(e) { |
|
||||
clearInterval(this.intervalId) |
|
||||
const placeHolder = |
|
||||
document.getElementsByClassName('holder')[this.indexNum] |
|
||||
placeHolder.className = 'holder showWhite' |
|
||||
const number = document.getElementsByClassName('number')[this.indexNum] |
|
||||
number.className = 'number hidden' |
|
||||
const inputText = |
|
||||
document.getElementsByClassName('inputText')[this.indexNum] |
|
||||
inputText.className = 'inputText' |
|
||||
this.handleValue() |
|
||||
const inputArea = |
|
||||
document.getElementsByClassName('inputText')[this.indexNum] |
|
||||
const reset = |
|
||||
document.getElementsByClassName('place-holder')[this.indexNum] |
|
||||
const cursor = document.getElementsByClassName('cursor')[this.indexNum] //获取光标 |
|
||||
const ele = inputArea.replaceChild(reset.previousSibling, cursor) |
|
||||
inputArea.insertBefore(ele, reset) |
|
||||
}, |
|
||||
// 移动光标位置 |
|
||||
moveCursor(event) { |
|
||||
const inputArea = |
|
||||
document.getElementsByClassName('inputText')[this.indexNum] |
|
||||
const cursor = document.getElementsByClassName('cursor')[this.indexNum] //获取光标 |
|
||||
if (event.currentTarget.className == 'right-space') { |
|
||||
const ele = inputArea.replaceChild( |
|
||||
event.currentTarget.previousSibling.previousSibling, |
|
||||
cursor, |
|
||||
) |
|
||||
inputArea.insertBefore(ele, event.currentTarget.previousSibling) |
|
||||
} else { |
|
||||
const tempEle = event.currentTarget |
|
||||
const nodeName = event.currentTarget.nextSibling.nodeName |
|
||||
const temp = event.currentTarget.previousSibling |
|
||||
const ele = inputArea.replaceChild(temp, cursor) //把光标替换成当前元素 |
|
||||
inputArea.insertBefore(ele, event.currentTarget) |
|
||||
} |
|
||||
}, |
|
||||
// 删除 |
|
||||
handleDelete() { |
|
||||
const inputArea = |
|
||||
document.getElementsByClassName('inputText')[this.indexNum] |
|
||||
// this.setCursorFlash() |
|
||||
const cursor = document.getElementsByClassName('cursor')[this.indexNum] |
|
||||
let n = 2 //两个删除动作 |
|
||||
while (cursor.previousSibling && n > 0) { |
|
||||
inputArea.removeChild(cursor.previousSibling) |
|
||||
n-- |
|
||||
} |
|
||||
this.handleValue() |
|
||||
}, |
|
||||
//开始按 |
|
||||
gtouchstart(e) { |
|
||||
this.timeOutEvent = setTimeout(() => { |
|
||||
this.longPress() |
|
||||
}, 500) |
|
||||
return false |
|
||||
}, |
|
||||
gtouchend() { |
|
||||
clearTimeout(this.timeOutEvent) |
|
||||
clearInterval(this.press) |
|
||||
if (this.timeOutEvent != 0) { |
|
||||
// alert('你这是点击,不是长按') |
|
||||
} |
|
||||
return false |
|
||||
}, |
|
||||
gtouchmove() { |
|
||||
clearTimeout(this.timeOutEvent) |
|
||||
clearInterval(this.press) |
|
||||
this.timeOutEvent = 0 |
|
||||
}, |
|
||||
longPress() { |
|
||||
this.timeOutEvent = 0 |
|
||||
this.press = setInterval(() => { |
|
||||
this.handleDelete() |
|
||||
}, 300) |
|
||||
}, |
|
||||
//设置光标定时任务 |
|
||||
setCursorFlash() { |
|
||||
const placeHolder = |
|
||||
document.getElementsByClassName('holder')[this.indexNum] |
|
||||
let isShowCursor = false |
|
||||
if (this.intervalId) { |
|
||||
clearInterval(this.intervalId) |
|
||||
} |
|
||||
this.intervalId = setInterval(function() { |
|
||||
isShowCursor = !isShowCursor |
|
||||
if (isShowCursor) { |
|
||||
placeHolder.className = 'holder' |
|
||||
} else { |
|
||||
placeHolder.className = 'holder showWhite' |
|
||||
} |
|
||||
}, 500) |
|
||||
}, |
|
||||
// 全清 |
|
||||
handleClear() { |
|
||||
const father = document.getElementsByClassName('inputText')[this.indexNum] |
|
||||
const child = |
|
||||
document.getElementsByClassName('inputText')[this.indexNum].childNodes |
|
||||
for (let i = child.length - 1; i >= 0; i--) { |
|
||||
if (child[i].className == 'val' || child[i].className == 'space') { |
|
||||
father.removeChild(child[i]) |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
// 获取值 |
|
||||
handleValue() { |
|
||||
const val = document |
|
||||
.getElementsByClassName('inputText')[this.indexNum].querySelectorAll('.val') |
|
||||
const arr = [] |
|
||||
arr[this.indexNum] = [] |
|
||||
for (let i = 0; i < val.length; i++) { |
|
||||
arr[this.indexNum].push(val[i].innerHTML) |
|
||||
} |
|
||||
this.inputValue = arr[this.indexNum].toString() |
|
||||
this.inputValue = this.inputValue.split(',').join('') |
|
||||
this.$emit('keyboard-input', this.inputValue) |
|
||||
const placeHolder = |
|
||||
document.getElementsByClassName('place-holder')[this.indexNum] |
|
||||
|
|
||||
if (this.inputValue == '') { |
|
||||
placeHolder.className = 'place-holder' |
|
||||
} else { |
|
||||
placeHolder.className = 'place-holder hidden' |
|
||||
} |
|
||||
}, |
|
||||
}, |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped lang="less"> |
|
||||
.myKeyboard{ |
|
||||
padding-top: 0.15vw; |
|
||||
} |
|
||||
.myKeyboard:focus { |
|
||||
outline: none; |
|
||||
} |
|
||||
|
|
||||
.input-container { |
|
||||
display: flex; |
|
||||
// align-items: center; |
|
||||
flex-direction: column; |
|
||||
box-sizing: border-box; |
|
||||
width: 100%; |
|
||||
font-size: 1rem; |
|
||||
border: 1px solid #d9d9d9; |
|
||||
background: #f9f9f9; |
|
||||
padding-left: 12px; |
|
||||
border-radius: .3rem; |
|
||||
box-sizing: border-box; |
|
||||
.acitve { |
|
||||
border: 1px solid #2e8fff !important; |
|
||||
} |
|
||||
|
|
||||
.input-top { |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
box-sizing: border-box; |
|
||||
width: 100%; |
|
||||
} |
|
||||
|
|
||||
.error { |
|
||||
color: #ee0a24; |
|
||||
font-size: 18px; |
|
||||
} |
|
||||
|
|
||||
.errorSpace {} |
|
||||
|
|
||||
.required::before { |
|
||||
position: absolute; |
|
||||
left: 6px; |
|
||||
color: #ee0a24; |
|
||||
content: '*'; |
|
||||
font-size: 22px; |
|
||||
} |
|
||||
|
|
||||
.inputText { |
|
||||
position: relative; |
|
||||
flex: 1; |
|
||||
width: 80%; |
|
||||
border: none; |
|
||||
height: 2.91vw; |
|
||||
} |
|
||||
|
|
||||
.right-btn { |
|
||||
position: absolute; |
|
||||
right: 2%; |
|
||||
|
|
||||
.clear { |
|
||||
width: 1.5rem; |
|
||||
} |
|
||||
|
|
||||
// :nth-child(1) { |
|
||||
// width: 1.5rem; |
|
||||
// } |
|
||||
:nth-child(2) {} |
|
||||
} |
|
||||
|
|
||||
.right-space { |
|
||||
// color: #fff; |
|
||||
} |
|
||||
|
|
||||
.place-holder { |
|
||||
color: #c8c8c8; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.number { |
|
||||
position: fixed; |
|
||||
left: 0; |
|
||||
right: 0; |
|
||||
bottom: 0; |
|
||||
z-index: 999999; |
|
||||
width: 100%; |
|
||||
background-color: #f0f0f0; |
|
||||
font-size: 24px; |
|
||||
|
|
||||
.mybtn { |
|
||||
padding: 5px 0; |
|
||||
text-align: center; |
|
||||
line-height: 24px; |
|
||||
|
|
||||
img { |
|
||||
height: 100%; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.mynum { |
|
||||
display: flex; |
|
||||
flex-wrap: wrap; |
|
||||
padding-bottom: 10px; |
|
||||
.num { |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
flex: 1 0 25%; |
|
||||
justify-content: center; |
|
||||
padding: 5px 0; |
|
||||
border-top: 1px solid #eee; |
|
||||
border-left: 1px solid #eee; |
|
||||
background-color: #fff; |
|
||||
text-align: center; |
|
||||
|
|
||||
&:active { |
|
||||
background-color: rgb(202, 202, 202); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.hidden { |
|
||||
display: none; |
|
||||
} |
|
||||
|
|
||||
.showWhite { |
|
||||
color: transparent; |
|
||||
} |
|
||||
</style> |
|
@ -1,4 +0,0 @@ |
|||||
@font-face { |
|
||||
font-family: SONG; |
|
||||
src: url(./仿宋字体.ttf); |
|
||||
} |
|
@ -1,104 +0,0 @@ |
|||||
<template> |
|
||||
<div class="canvaspanel-conntainer"> |
|
||||
<div class="canvaspanel"> |
|
||||
<div class="canvasborder"> |
|
||||
<vue-esign |
|
||||
ref="esign" |
|
||||
:width="width" |
|
||||
:height="300" |
|
||||
:isCrop="isCrop" |
|
||||
:lineWidth="lineWidth" |
|
||||
:lineColor="lineColor" |
|
||||
:bgColor.sync="bgColor" |
|
||||
style="width: 100% !important" |
|
||||
/> |
|
||||
</div> |
|
||||
<div class="buttongroup"> |
|
||||
<a-button type="gray" size="large" @click="handleReset" icon="delete"> 清除 </a-button> |
|
||||
<a-button type="link" size="large" @click="handleGenerate" icon="check-circle"> 保存 </a-button> |
|
||||
</div> |
|
||||
</div> |
|
||||
<img :src="resultImg" alt="" v-show="false" /> |
|
||||
</div> |
|
||||
</template> |
|
||||
<script> |
|
||||
export default { |
|
||||
name: 'esign', |
|
||||
components: {}, |
|
||||
data() { |
|
||||
return { |
|
||||
title: '手写签名', |
|
||||
width: 0, |
|
||||
lineWidth: 10, |
|
||||
lineColor: '#000000', |
|
||||
bgColor: '', |
|
||||
resultImg: '', |
|
||||
isCrop: false, |
|
||||
}; |
|
||||
}, |
|
||||
created() { |
|
||||
this.width = window.innerWidth - 16*2 - 16*2; |
|
||||
}, |
|
||||
methods: { |
|
||||
handleReset() { |
|
||||
this.$refs['esign'].reset(); //清空画布 |
|
||||
this.$emit('reset'); |
|
||||
}, |
|
||||
handleGenerate() { |
|
||||
this.$refs['esign'] |
|
||||
.generate() |
|
||||
.then(res => { |
|
||||
this.resultImg = res; // 得到了签字生成的base64图片 |
|
||||
this.base64ImgtoFile(this.resultImg); |
|
||||
let data = this.base64ImgtoFile(this.resultImg); |
|
||||
//调用接口 |
|
||||
this.$emit('close', data); |
|
||||
}) |
|
||||
.catch(err => { |
|
||||
this.$message.error('请签名后再保存'); |
|
||||
}); |
|
||||
}, |
|
||||
// 将base64,转换成图片 |
|
||||
base64ImgtoFile(dataurl, filename = 'file') { |
|
||||
const arr = dataurl.split(','); |
|
||||
const mime = arr[0].match(/:(.*?);/)[1]; |
|
||||
const suffix = mime.split('/')[1]; |
|
||||
const bstr = atob(arr[1]); |
|
||||
let n = bstr.length; |
|
||||
const u8arr = new Uint8Array(n); |
|
||||
while (n--) { |
|
||||
u8arr[n] = bstr.charCodeAt(n); |
|
||||
} |
|
||||
return new File([u8arr], `${filename}.${suffix}`, { |
|
||||
type: mime, |
|
||||
}); |
|
||||
}, |
|
||||
}, |
|
||||
}; |
|
||||
</script> |
|
||||
<style lang="less" scope> |
|
||||
.canvasborder { |
|
||||
background: #efefef; |
|
||||
border-radius: 8px; |
|
||||
width: 100%; |
|
||||
|
|
||||
} |
|
||||
.canvaspanel { |
|
||||
display: flex; |
|
||||
position: relative; |
|
||||
margin: 16px 0; |
|
||||
} |
|
||||
|
|
||||
.buttongroup { |
|
||||
position: absolute; |
|
||||
right: 16px; |
|
||||
bottom: 16px; |
|
||||
} |
|
||||
|
|
||||
.autograph { |
|
||||
margin-left: 20px; |
|
||||
} |
|
||||
.clos { |
|
||||
width: 88px; |
|
||||
} |
|
||||
</style> |
|
@ -1,288 +0,0 @@ |
|||||
<template> |
|
||||
<div style="width: 100%; height: 100%"> |
|
||||
<div id="dicomImage"></div> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
// 加载相关库文件 |
|
||||
import cornerstone from './dist/cornerstone.js'; |
|
||||
import cornerstoneTools from './dist/cornerstoneTools'; |
|
||||
import cornerstoneWADOImageLoader from './dist/cornerstoneWADOImageLoader.bundle.min'; |
|
||||
import Hammer from './dist/hammer'; |
|
||||
import dicomParser from './dist/dicomParser.min'; |
|
||||
import cornerstoneMath from './dist/cornerstoneMath.min'; |
|
||||
|
|
||||
export default { |
|
||||
name: 'dcmview', |
|
||||
props: { |
|
||||
currentDcm: { |
|
||||
type: Array, |
|
||||
default: [], |
|
||||
}, |
|
||||
imgurl: { |
|
||||
type: String, |
|
||||
default: '', |
|
||||
}, |
|
||||
toolType: { |
|
||||
type: String, |
|
||||
default: '', |
|
||||
}, |
|
||||
width: { |
|
||||
type: String, |
|
||||
default: '750rpx', |
|
||||
}, |
|
||||
height: { |
|
||||
type: String, |
|
||||
default: '1000rpx', |
|
||||
}, |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
imageIds: [], |
|
||||
}; |
|
||||
}, |
|
||||
watch: { |
|
||||
toolType: { |
|
||||
handler(newVal, lodVal) { |
|
||||
console.log(newVal, lodVal); |
|
||||
this.viewDcm1(); |
|
||||
}, |
|
||||
}, |
|
||||
currentDcm: { |
|
||||
handler(newVal, lodVal) { |
|
||||
console.log('newVal', newVal); |
|
||||
this.handleDcm(newVal); |
|
||||
}, |
|
||||
}, |
|
||||
}, |
|
||||
mounted() { |
|
||||
console.log(11111111, '1212'); |
|
||||
this.handleDcm(this.currentDcm); |
|
||||
console.log(11111111, this.currentDcm); |
|
||||
}, |
|
||||
|
|
||||
methods: { |
|
||||
// 处理获取图像数组 |
|
||||
async handleDcm(_Arr) { |
|
||||
let that = this; |
|
||||
this.imageIds = []; |
|
||||
await _Arr.forEach((item) => { |
|
||||
this.imageIds.push('dicomweb:' + item.dcmPath); |
|
||||
}); |
|
||||
this.viewDcm(); |
|
||||
}, |
|
||||
// 显示dcm图片函数 |
|
||||
viewDcm() { |
|
||||
cornerstoneTools.external.cornerstone = cornerstone; |
|
||||
cornerstoneTools.external.cornerstoneMath = cornerstoneMath; |
|
||||
cornerstoneTools.external.Hammer = Hammer; |
|
||||
cornerstoneWADOImageLoader.external.dicomParser = dicomParser; |
|
||||
cornerstoneWADOImageLoader.external.cornerstone = cornerstone; |
|
||||
cornerstoneWADOImageLoader.webWorkerManager.initialize({ |
|
||||
maxWebWorkers: navigator.hardwareConcurrency || 1, |
|
||||
startWebWorkersOnDemand: true, |
|
||||
taskConfiguration: { |
|
||||
decodeTask: { |
|
||||
initializeCodecsOnStartup: false, |
|
||||
}, |
|
||||
}, |
|
||||
webWorkerPath: './dist/cornerstoneWADOImageLoader.bundleCopy.min.js', |
|
||||
}); |
|
||||
cornerstoneTools.init({ |
|
||||
mouseEnabled: true, //触摸 |
|
||||
touchEnabled: true, //鼠标 |
|
||||
showSVGCursors: true, |
|
||||
autoResizeViewports: true, |
|
||||
}); |
|
||||
const element = document.getElementById('dicomImage'); |
|
||||
|
|
||||
cornerstone.enable(element); |
|
||||
|
|
||||
// const PanTool = cornerstoneTools.PanTool; |
|
||||
|
|
||||
const StackScrollTool = cornerstoneTools.StackScrollTool; |
|
||||
const StackScrollMouseWheelTool = |
|
||||
cornerstoneTools.StackScrollMouseWheelTool; |
|
||||
const imageIds = this.imageIds; |
|
||||
const stack = { |
|
||||
currentImageIdIndex: 0, |
|
||||
imageIds: imageIds, |
|
||||
}; |
|
||||
console.log('imageIds', imageIds); |
|
||||
element.addEventListener('cornerstonenewimage', (event) => { |
|
||||
console.log('event: ', event); |
|
||||
// console.log(event.detail.oldImage, stack.currentImageIdIndex, 'event') |
|
||||
this.hanldeByValue(stack.currentImageIdIndex); |
|
||||
}); |
|
||||
element.addEventListener('cornerstonetap', (event) => { |
|
||||
console.log('cornerstonetap: ', cornerstonetap); |
|
||||
const direction = event.detail.direction; |
|
||||
if (direction === 'LEFT') { |
|
||||
// 向左划动 |
|
||||
stack.currentImageIdIndex++; |
|
||||
} else if (direction === 'RIGHT') { |
|
||||
// 向右划动 |
|
||||
stack.currentImageIdIndex--; |
|
||||
} |
|
||||
|
|
||||
// 更新堆栈中的当前图像 |
|
||||
const imageIds = stack.imageIds; |
|
||||
const newImageIdIndex = stack.currentImageIdIndex; |
|
||||
const newImageId = imageIds[newImageIdIndex]; |
|
||||
cornerstone |
|
||||
.loadAndCacheImage(newImageId) |
|
||||
.then((loadedImage) => { |
|
||||
cornerstone.displayImage(element, loadedImage); |
|
||||
}); |
|
||||
}); |
|
||||
console.log('imageIds,', imageIds) |
|
||||
cornerstone.loadImage(imageIds[0]).then((image) => { |
|
||||
console.log(image, 'image'); |
|
||||
cornerstone.displayImage(element, image); |
|
||||
cornerstoneTools.addStackStateManager(element, ['stack']); |
|
||||
cornerstoneTools.addToolState(element, 'stack', stack); |
|
||||
// cornerstoneTools.addTool(PanTool); |
|
||||
cornerstoneTools.addTool(StackScrollTool, { |
|
||||
configuration: { |
|
||||
loop: true, |
|
||||
allowSkipping: true, |
|
||||
}, |
|
||||
}); |
|
||||
cornerstoneTools.addTool(StackScrollMouseWheelTool, { |
|
||||
configuration: { |
|
||||
loop: true, |
|
||||
allowSkipping: true, |
|
||||
invert: false, |
|
||||
}, |
|
||||
}); |
|
||||
// cornerstoneTools.setToolActive('Pan', { mouseButtonMask: 1 }); |
|
||||
cornerstoneTools.setToolActive('StackScroll', { |
|
||||
mouseButtonMask: 1, |
|
||||
}); |
|
||||
cornerstoneTools.setToolActive('StackScrollMouseWheel', { |
|
||||
mouseButtonMask: 4, |
|
||||
}); |
|
||||
}); |
|
||||
}, |
|
||||
// 显示dcm图片函数 |
|
||||
viewDcm1() { |
|
||||
var element = document.getElementById('dicomImage'); |
|
||||
//激活获取到的用于图片加载的区域 |
|
||||
console.log('this.toolType: ', this.toolType); |
|
||||
switch (this.toolType) { |
|
||||
case 'ScrollTool': |
|
||||
const StackScrollTool = cornerstoneTools.StackScrollTool; |
|
||||
const StackScrollMouseWheelTool = |
|
||||
cornerstoneTools.StackScrollMouseWheelTool; |
|
||||
cornerstoneTools.addTool(StackScrollTool, { |
|
||||
configuration: { |
|
||||
loop: true, |
|
||||
allowSkipping: true, |
|
||||
}, |
|
||||
}); |
|
||||
cornerstoneTools.addTool(StackScrollMouseWheelTool, { |
|
||||
configuration: { |
|
||||
loop: true, |
|
||||
allowSkipping: true, |
|
||||
invert: false, |
|
||||
}, |
|
||||
}); |
|
||||
// cornerstoneTools.setToolActive('Pan', { mouseButtonMask: 1 }); |
|
||||
cornerstoneTools.setToolActive('StackScroll', { |
|
||||
mouseButtonMask: 1, |
|
||||
}); |
|
||||
cornerstoneTools.setToolActive('StackScrollMouseWheel', { |
|
||||
mouseButtonMask: 4, |
|
||||
}); |
|
||||
break; |
|
||||
case 'Wwwc': |
|
||||
// 从cornerstoneTools库中获取窗宽,窗高工具 |
|
||||
const WwwcTool = cornerstoneTools.WwwcTool; |
|
||||
//添加WwwcTool窗宽,窗高工具 |
|
||||
cornerstoneTools.addTool(WwwcTool); |
|
||||
// 绑定工具操作功能到鼠标左键 |
|
||||
cornerstoneTools.setToolActive('Wwwc', { |
|
||||
mouseButtonMask: 1, |
|
||||
}); |
|
||||
break; |
|
||||
case 'Angle': |
|
||||
// 角度工具 |
|
||||
const AngleTool = cornerstoneTools.AngleTool; |
|
||||
cornerstoneTools.addTool(AngleTool); |
|
||||
cornerstoneTools.setToolActive('Angle', { |
|
||||
mouseButtonMask: 1, |
|
||||
}); |
|
||||
break; |
|
||||
case 'RectangleRoi': |
|
||||
// 矩形Roi工具 |
|
||||
const RectangleRoiTool = cornerstoneTools.RectangleRoiTool; |
|
||||
cornerstoneTools.addTool(RectangleRoiTool); |
|
||||
cornerstoneTools.setToolActive('RectangleRoi', { |
|
||||
mouseButtonMask: 1, |
|
||||
}); |
|
||||
break; |
|
||||
case 'DragProbe': |
|
||||
// 拖动探针工具 |
|
||||
const DragProbeTool = cornerstoneTools.DragProbeTool; |
|
||||
cornerstoneTools.addTool(DragProbeTool); |
|
||||
cornerstoneTools.setToolActive('DragProbe', { |
|
||||
mouseButtonMask: 1, |
|
||||
}); |
|
||||
break; |
|
||||
case 'Length': |
|
||||
// 长度工具 |
|
||||
const LengthTool = cornerstoneTools.LengthTool; |
|
||||
cornerstoneTools.addTool(LengthTool); |
|
||||
cornerstoneTools.setToolActive('Length', { |
|
||||
mouseButtonMask: 1, |
|
||||
}); |
|
||||
break; |
|
||||
case 'Zoom': |
|
||||
// 放大缩小 |
|
||||
const ZoomMouseWheelTool = |
|
||||
cornerstoneTools.ZoomMouseWheelTool; |
|
||||
cornerstoneTools.addTool(ZoomMouseWheelTool); |
|
||||
cornerstoneTools.setToolActive('ZoomMouseWheel', { |
|
||||
mouseButtonMask: 1, |
|
||||
}); |
|
||||
break; |
|
||||
case 'eliminate': |
|
||||
// 清空效果 |
|
||||
cornerstoneTools.clearToolState(element, 'Length'); |
|
||||
break; |
|
||||
default: |
|
||||
throw new Error('工具参数错误'); |
|
||||
break; |
|
||||
} |
|
||||
}, |
|
||||
clearAllTool() { |
|
||||
for (let k in this.name) { |
|
||||
cornerstoneTools.clearToolState(this.element, this.name[k]); |
|
||||
} |
|
||||
// 写了他才能让界面也更新清除了tool的视图 |
|
||||
cornerstone.updateImage(this.element); |
|
||||
// reset viewport将视图重置位置 |
|
||||
cornerstone.reset(this.element); |
|
||||
}, |
|
||||
// 给父组件传值 |
|
||||
hanldeByValue(_index) { |
|
||||
this.$emit('byValue', _index); |
|
||||
}, |
|
||||
}, |
|
||||
}; |
|
||||
</script> |
|
||||
|
|
||||
<style> |
|
||||
/* 定义图片显示区域div大小 */ |
|
||||
#dicomImage { |
|
||||
width: 100%; |
|
||||
height: 100%; |
|
||||
} |
|
||||
|
|
||||
.btn { |
|
||||
display: flex; |
|
||||
justify-content: space-between; |
|
||||
flex-wrap: wrap; |
|
||||
} |
|
||||
</style> |
|
@ -1,3 +0,0 @@ |
|||||
/*! cornerstone-web-image-loader - 2.1.1 - 2018-12-05 | (c) 2016 Chris Hafey | https://github.com/cornerstonejs/cornerstoneWebImageLoader */ |
|
||||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("cornerstoneWebImageLoader",[],t):"object"==typeof exports?exports.cornerstoneWebImageLoader=t():e.cornerstoneWebImageLoader=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=5)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.external=void 0;var r,o=n(4),a=(r=o)&&r.__esModule?r:{default:r};var u=void 0,i={set cornerstone(e){u=e,(0,a.default)(u)},get cornerstone(){return u}};t.external=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.loadImage=function(e){var t=r.external.cornerstone,n=new XMLHttpRequest;return n.open("GET",e,!0),n.responseType="arraybuffer",i.beforeSend(n),n.onprogress=function(n){if(n.lengthComputable){var r=n.loaded,o=n.total,a=Math.round(r/o*100),u={imageId:e,loaded:r,total:o,percentComplete:a};t.triggerEvent(t.events,"cornerstoneimageloadprogress",u)}},{promise:new Promise(function(t,r){n.onload=function(){(0,o.default)(this.response).then(function(n){var r=(0,a.default)(n,e);t(r)},r)},n.send()}),cancelFn:function(){n.abort()}}},t.configure=function(e){i=e};var r=n(0),o=u(n(3)),a=u(n(2));function u(e){return e&&e.__esModule?e:{default:e}}var i={beforeSend:function(){}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=e.naturalHeight,u=e.naturalWidth;return{imageId:t,minPixelValue:0,maxPixelValue:255,slope:1,intercept:0,windowCenter:128,windowWidth:255,render:r.external.cornerstone.renderWebImage,getPixelData:function(){return(n=void 0,a===t?n=o.getContext("2d"):(o.height=e.naturalHeight,o.width=e.naturalWidth,(n=o.getContext("2d")).drawImage(e,0,0),a=t),n.getImageData(0,0,e.naturalWidth,e.naturalHeight)).data;var n},getCanvas:function(){return a===t?o:(o.height=e.naturalHeight,o.width=e.naturalWidth,o.getContext("2d").drawImage(e,0,0),a=t,o)},getImage:function(){return e},rows:n,columns:u,height:n,width:u,color:!0,rgba:!1,columnPixelSpacing:void 0,rowPixelSpacing:void 0,invert:!1,sizeInBytes:n*u*4}};var r=n(0),o=document.createElement("canvas"),a=void 0},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return new Promise(function(t,n){var r=new Image,o=new Uint8Array(e),a=new Blob([o]),u=window.URL||window.webkitURL,i=u.createObjectURL(a);r.src=i,r.onload=function(){t(r),u.revokeObjectURL(i)},r.onerror=function(e){u.revokeObjectURL(i),n(e)}})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){e.registerImageLoader("http",r.loadImage),e.registerImageLoader("https",r.loadImage)};var r=n(1)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.external=t.configure=t.loadImage=t.createImage=t.arrayBufferToImage=void 0;var r=i(n(3)),o=i(n(2)),a=n(1),u=n(0);function i(e){return e&&e.__esModule?e:{default:e}}var d={arrayBufferToImage:r.default,createImage:o.default,loadImage:a.loadImage,configure:a.configure,external:u.external};t.arrayBufferToImage=r.default,t.createImage=o.default,t.loadImage=a.loadImage,t.configure=a.configure,t.external=u.external,t.default=d}])}); |
|
||||
//# sourceMappingURL=cornerstoneWebImageLoader.min.js.map
|
|