reset:重置页面

main
@0Melon0 1 year ago
parent b34677ad4d
commit ca45c2d5e8

@ -1,15 +1,17 @@
module.exports = { module.exports = {
root: true, root: true,
env: { env: {
node: true, node: true
}, },
extends: ['plugin:vue/essential', 'eslint:recommended'], 'extends': [
'plugin:vue/essential',
'eslint:recommended'
],
parserOptions: { parserOptions: {
parser: '@babel/eslint-parser', parser: '@babel/eslint-parser'
}, },
rules: { rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
'vue/multi-word-component-names': 'off', }
}, }
};

@ -1,5 +1,24 @@
# cockpit # cockpit
大屏数据展示基于 `Vue2 + dataV + Echart` ## Project setup
```
npm install
```
[`dataV`](http://datav.jiaminghi.com) ### Compiles and hot-reloads for development
```
npm run serve
```
### Compiles and minifies for production
```
npm run build
```
### Lints and fixes files
```
npm run lint
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).

@ -1,12 +1,5 @@
module.exports = { module.exports = {
presets: ['@vue/cli-plugin-babel/preset'], presets: [
plugins: [ '@vue/cli-plugin-babel/preset'
[ ]
'component', }
{
libraryName: 'element-ui',
styleLibraryName: 'theme-chalk',
},
],
],
};

2161
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -8,12 +8,7 @@
"lint": "vue-cli-service lint" "lint": "vue-cli-service lint"
}, },
"dependencies": { "dependencies": {
"@jiaminghi/charts": "^0.2.18",
"@jiaminghi/data-view": "^2.10.0",
"core-js": "^3.8.3", "core-js": "^3.8.3",
"dayjs": "^1.11.9",
"echarts": "^5.4.3",
"element-ui": "^2.15.14",
"vue": "^2.6.14", "vue": "^2.6.14",
"vue-router": "^3.5.1", "vue-router": "^3.5.1",
"vuex": "^3.6.2" "vuex": "^3.6.2"
@ -26,7 +21,6 @@
"@vue/cli-plugin-router": "~5.0.0", "@vue/cli-plugin-router": "~5.0.0",
"@vue/cli-plugin-vuex": "~5.0.0", "@vue/cli-plugin-vuex": "~5.0.0",
"@vue/cli-service": "~5.0.0", "@vue/cli-service": "~5.0.0",
"babel-plugin-component": "^1.1.1",
"eslint": "^7.32.0", "eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3", "eslint-plugin-vue": "^8.0.3",
"sass": "^1.32.7", "sass": "^1.32.7",

@ -1,27 +1,20 @@
<template> <template>
<dv-full-screen-container class="app"> <div id="app">
<dv-loading v-show="isLoding">Loading...</dv-loading>
<comHeader></comHeader> <comHeader></comHeader>
<main class="contentBox" @click="enterFullscreen"> <main class="contentBox" @click="enterFullscreen">
<router-view></router-view> <router-view></router-view>
</main> </main>
</dv-full-screen-container> </div>
</template> </template>
<script> <script>
import comHeader from '@/components/comHeader/index.vue'; import comHeader from '@/components/comHeader/comHeader.vue';
export default { export default {
data: () => { data: () => {
return { return {
isLoding: false, isLoding: false,
}; };
}, },
mounted() {
setTimeout(() => {
this.isLoding = false;
this.enterFullscreen();
}, 1000);
},
methods: { methods: {
enterFullscreen() { enterFullscreen() {
const element = document.documentElement; const element = document.documentElement;
@ -50,17 +43,14 @@ export default {
<style lang="scss"> <style lang="scss">
@font-face { @font-face {
font-family: 'DIN-Bold'; font-family: 'PanMen';
src: url('@/assets/fonts/DIN-Bold.otf') format('opentype'); src: url('@/assets/fonts/PanMen.ttf') format('opentype');
} }
@font-face { @font-face {
font-family: 'YouSheBiaoTiHei'; font-family: 'YouSheBiaoTiHei';
src: url('@/assets/fonts/YouSheBiaoTiHei.ttf') format('opentype'); src: url('@/assets/fonts/YouSheBiaoTiHei.ttf') format('opentype');
} }
.numFont {
font-family: 'DIN-Bold';
}
* { * {
margin: 0; margin: 0;
padding: 0; padding: 0;
@ -69,26 +59,10 @@ export default {
color: #fff; color: #fff;
font-family: 'YouSheBiaoTiHei', Microsoft YaHei; font-family: 'YouSheBiaoTiHei', Microsoft YaHei;
} }
.app { html,
body,
#app {
width: 100%; width: 100%;
height: 100%; height: 100%;
background-image: url('@/assets/img/bg.png');
background-size: cover;
background-repeat: no-repeat;
background-position: center;
.contentBox {
height: calc(100% - 100px);
display: flex;
box-sizing: border-box;
padding: 20px;
padding-top: 0px;
}
}
/* 定义渐变的样式 */
.gradientText {
background: linear-gradient(to top, #0592ff, #fff);
background-clip: text;
-webkit-background-clip: text;
color: transparent;
} }
</style> </style>

Binary file not shown.

Binary file not shown.

@ -1,17 +0,0 @@
@font-face {
font-family: "iconfont"; /* Project id */
src: url('iconfont.ttf?t=1701073554125') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-youjiantou:before {
content: "\e619";
}

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 750 KiB

@ -1,3 +0,0 @@
@function vw($px) {
@return $px/1920 * 100vw;
}

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="142" height="162" viewBox="0 0 142 162"><defs><linearGradient x1="0.5" y1="1" x2="0.5" y2="0" id="master_svg0_134_09601"><stop offset="0%" stop-color="#000000" stop-opacity="0.10196078568696976"/><stop offset="100%" stop-color="#23FFFC" stop-opacity="0.10196078568696976"/></linearGradient></defs><g><g transform="matrix(-1,0,0,1,282,0)"><path d="M141,161L273.473,161L281,152.695L281,1L195.1936,1L189.4229,7.36678L183.6523,13.7336L150.03226,13.7336L141,26.4671L141,161Z" fill="url(#master_svg0_134_09601)" fill-opacity="1"/><path d="M194.9719,0.5L189.0525,7.031L183.4307,13.2336L149.77391,13.2336L140.5,26.3078L140.5,161.5L273.695,161.5L281.5,152.888L281.5,0.5L194.9719,0.5ZM183.874,14.2336L189.7934,7.70256L195.4152,1.5L280.5,1.5L280.5,152.503L273.251,160.5L141.5,160.5L141.5,26.6265L150.29061,14.2336L183.874,14.2336Z" fill-rule="evenodd" fill="#094277" fill-opacity="1"/></g><g><g><path d="M97,1C97,1,102,1,102,1C102,1,109,8.15967,109,8.15967C109,8.15967,104,8.15967,104,8.15967C104,8.15967,97,1,97,1Z" fill="#0592FF" fill-opacity="1"/></g><g><path d="M106,1C106,1,111,1,111,1C111,1,118,8.15967,118,8.15967C118,8.15967,113,8.15967,113,8.15967C113,8.15967,106,1,106,1Z" fill="#0592FF" fill-opacity="1"/></g><g><path d="M115,1C115,1,120,1,120,1C120,1,127,8.15967,127,8.15967C127,8.15967,122,8.15967,122,8.15967" fill="#0592FF" fill-opacity="1"/></g></g><g><g><path d="M2,2L13,2L13,0L0,0L0,13L2,13L2,2Z" fill-rule="evenodd" fill="#0592FF" fill-opacity="1"/></g><g transform="matrix(-1,0,0,-1,282,322)"><path d="M142,162L153,162L153,160L140,160L140,173L142,173L142,162Z" fill-rule="evenodd" fill="#0592FF" fill-opacity="1"/></g><g><path d="M8.08579,162L16.5,162L16.5,160L8.91421,160L2,153.08579L2,145L0,145L0,153.91421L8.08579,162Z" fill-rule="evenodd" fill="#0592FF" fill-opacity="1"/></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="20" height="22" viewBox="0 0 20 22"><defs><linearGradient x1="0.02499999664723873" y1="0.04545453190803528" x2="0.9749999642372131" y2="0.9999999403953552" id="master_svg0_134_10672"><stop offset="0%" stop-color="#3C88E3" stop-opacity="1"/><stop offset="100%" stop-color="#9FDAF8" stop-opacity="1"/></linearGradient><linearGradient x1="0.02499999664723873" y1="0.04545453563332558" x2="0.875" y2="1" id="master_svg1_134_10669"><stop offset="0%" stop-color="#002F60" stop-opacity="1"/><stop offset="100%" stop-color="#62B3EE" stop-opacity="1"/></linearGradient></defs><g><g><path d="M0,0C0,0,20,11,20,11C20,11,7,11,7,11C7,11,0,0,0,0C0,0,0,0,0,0Z" fill="url(#master_svg0_134_10672)" fill-opacity="1"/></g><g transform="matrix(1,0,0,-1,0,44)"><path d="M0,22C0,22,20,33,20,33C20,33,7,33,7,33C7,33,0,22,0,22C0,22,0,22,0,22Z" fill="url(#master_svg1_134_10669)" fill-opacity="1"/></g></g></svg>

Before

Width:  |  Height:  |  Size: 1003 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.1 KiB

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="137" height="107" viewBox="0 0 137 107"><defs><filter id="master_svg0_134_13667" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB" x="0" y="0" width="136.002197265625" height="106"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feColorMatrix in="SourceAlpha" type="matrix" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset dy="0" dx="0"/><feGaussianBlur stdDeviation="10"/><feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/><feColorMatrix type="matrix" values="0 0 0 0 0.40392157435417175 0 0 0 0 0.7607843279838562 0 0 0 0 0.22745098173618317 0 0 0 1 0"/><feBlend mode="normal" in2="shape" result="effect1_innerShadow"/></filter><linearGradient x1="0.5" y1="-3.0616171314629196e-17" x2="0.5" y2="1" id="master_svg1_123_00043"><stop offset="0%" stop-color="#004880" stop-opacity="0"/><stop offset="99.98999834060669%" stop-color="#004A80" stop-opacity="0.3499999940395355"/><stop offset="100%" stop-color="#004A80" stop-opacity="0.3499999940395355"/></linearGradient><linearGradient x1="0.5" y1="-3.0616171314629196e-17" x2="0.5" y2="1" id="master_svg2_117_00562"><stop offset="0%" stop-color="#006DAB" stop-opacity="0.30000001192092896"/><stop offset="100%" stop-color="#00669F" stop-opacity="1"/></linearGradient><linearGradient x1="-2.032271242567371e-14" y1="0.9999873042106628" x2="0.9840425848960876" y2="0.9999790191650391" id="master_svg3_117_02771"><stop offset="0%" stop-color="#006DAB" stop-opacity="0"/><stop offset="51.5625%" stop-color="#006DAB" stop-opacity="1"/><stop offset="100%" stop-color="#006DAB" stop-opacity="0"/></linearGradient></defs><g><g filter="url(#master_svg0_134_13667)"><path d="M136.356,0.5C136.356,0.5,0.5,0.5,0.5,0.5C0.5,0.5,0.50219727,101.133,0.50219727,101.133C0.50219727,101.133,8.5022,106.5,8.5022,106.5C8.5022,106.5,17.482,106.5,17.482,106.5C17.482,106.5,34.4641,106.5,34.4641,106.5C34.4641,106.5,68.4282,106.5,68.4282,106.5C68.4282,106.5,102.392,106.5,102.392,106.5C102.392,106.5,119.374,106.5,119.374,106.5C119.374,106.5,127.502,106.5,127.502,106.5C127.502,106.5,136.502,101.133,136.502,101.133C136.502,101.133,136.356,0.5,136.356,0.5Z" fill="url(#master_svg1_123_00043)" fill-opacity="1"/><path d="M0.5,0.5L136.356,0.5L136.502,101.133L127.502,106.5L8.5022,106.5L0.50219727,101.133L0.5,2.5L0.5,0.5ZM134.359,2.5L134.501,99.998L126.951,104.5L9.11093,104.5L2.50217,100.0663L2.50004,2.5L134.359,2.5Z" fill-rule="evenodd" fill="url(#master_svg2_117_00562)" fill-opacity="1"/></g><g><g><path d="M1,1L8.5,1L8.5,0L0,0L0,8.5L1,8.5L1,1Z" fill-rule="evenodd" fill="#8FED60" fill-opacity="1"/></g><g transform="matrix(1,0,0,-1,0,213)"><path d="M9.65218,107L18.5,107L18.5,106L9.34782,106L0,112.27132L0,118.5759L1,118.5759L1,112.80463L5.27856,109.9342L9.65218,107Z" fill-rule="evenodd" fill="#8FED60" fill-opacity="1"/></g><g transform="matrix(-1,0,0,-1,273,213)"><path d="M145.65218,107L154.5,107L154.5,106L145.34782,106L136,112.27132L136,118.5759L137,118.5759L137,112.80463L141.27856,109.9342L145.65218,107Z" fill-rule="evenodd" fill="#8FED60" fill-opacity="1"/></g><g transform="matrix(-1,0,0,1,273,0)"><path d="M137,1L144.5,1L144.5,0L136,0L136,8.5L137,8.5L137,1Z" fill-rule="evenodd" fill="#8FED60" fill-opacity="1"/></g></g><g><g transform="matrix(0,1,-1,0,54,35)"><path d="M14,44.5L17.897109999999998,51.25L10.102886,51.25L14,44.5Z" fill="#388764" fill-opacity="1"/></g><g><rect x="4.5" y="48.5" width="128" height="1" rx="0" fill="url(#master_svg3_117_02771)" fill-opacity="1"/></g><g transform="matrix(0,1,1,0,83,-83)"><path d="M132,44.5L135.89711,51.25L128.102886,51.25L132,44.5Z" fill="#388764" fill-opacity="1"/></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 3.8 KiB

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="490" height="162" viewBox="0 0 490 162"><defs><linearGradient x1="0.5" y1="1" x2="0.5" y2="0" id="master_svg0_134_09601"><stop offset="0%" stop-color="#000000" stop-opacity="0.10196078568696976"/><stop offset="100%" stop-color="#23FFFC" stop-opacity="0.10196078568696976"/></linearGradient></defs><g><g transform="matrix(-1,0,0,1,978,0)"><path d="M489,161L969.4649999999999,161L977,153.474L977,1L553.0531,1L547.2766,6.7699L541.5,12.5398L498.04149,12.5398L489,24.0796L489,161Z" fill="url(#master_svg0_134_09601)" fill-opacity="1"/><path d="M552.8462,0.5L546.9233,6.41614L541.2931,12.0398L497.79805,12.0398L488.5,23.907L488.5,161.5L969.672,161.5L977.5,153.681L977.5,0.5L552.8462,0.5ZM541.7069,13.0398L547.63,7.12366L553.26,1.5L976.5,1.5L976.5,153.267L969.258,160.5L489.5,160.5L489.5,24.2521L498.28493,13.0398L541.7069,13.0398Z" fill-rule="evenodd" fill="#055843" fill-opacity="1"/></g><g><g><path d="M434,1C434,1,439,1,439,1C439,1,446,8.15967,446,8.15967C446,8.15967,441,8.15967,441,8.15967C441,8.15967,434,1,434,1Z" fill="#67C23A" fill-opacity="1"/></g><g><path d="M443,1C443,1,448,1,448,1C448,1,455,8.15967,455,8.15967C455,8.15967,450,8.15967,450,8.15967C450,8.15967,443,1,443,1Z" fill="#67C23A" fill-opacity="1"/></g><g><path d="M461,1C461,1,466,1,466,1C466,1,473,8.15967,473,8.15967C473,8.15967,468,8.15967,468,8.15967C468,8.15967,461,1,461,1Z" fill="#67C23A" fill-opacity="1"/></g><g><path d="M452,1C452,1,457,1,457,1C457,1,464,8.15967,464,8.15967C464,8.15967,459,8.15967,459,8.15967" fill="#67C23A" fill-opacity="1"/></g></g><g><g transform="matrix(-1,0,0,-1,978,322)"><path d="M490,162L501,162L501,160L488,160L488,173L490,173L490,162Z" fill-rule="evenodd" fill="#67C23A" fill-opacity="1"/></g><g><path d="M2,2L13,2L13,0L0,0L0,13L2,13L2,2Z" fill-rule="evenodd" fill="#67C23A" fill-opacity="1"/></g><g><path d="M8.08579,162L16.5,162L16.5,160L8.91421,160L2,153.08579L2,145L0,145L0,153.91421L8.08579,162Z" fill-rule="evenodd" fill="#67C23A" fill-opacity="1"/></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="17" height="20.5" viewBox="0 0 17 20.5"><defs><filter id="master_svg0_134_13328" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB" x="-4" y="-4" width="18" height="18"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur stdDeviation="1" result="effect1_foregroundBlur"/></filter><linearGradient x1="0.5" y1="-3.0616171314629196e-17" x2="0.5" y2="1" id="master_svg1_134_11765"><stop offset="0%" stop-color="#03F0B4" stop-opacity="1"/><stop offset="100%" stop-color="#6FB6FA" stop-opacity="0"/></linearGradient><filter id="master_svg2_134_13327" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB" x="-8" y="-4" width="21" height="21"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset dy="4" dx="0"/><feGaussianBlur stdDeviation="2"/><feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/><feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow"/><feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow" result="shape"/></filter></defs><g><g filter="url(#master_svg0_134_13328)"><ellipse cx="8.5" cy="8" rx="5" ry="5" fill="url(#master_svg1_134_11765)" fill-opacity="1"/></g><g filter="url(#master_svg2_134_13327)"><ellipse cx="8.5" cy="8" rx="2.5" ry="2.5" fill="#03F0B4" fill-opacity="1"/></g></g></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="20" height="22" viewBox="0 0 20 22"><defs><linearGradient x1="0.02499999664723873" y1="0.04545453190803528" x2="0.9749999642372131" y2="0.9999999403953552" id="master_svg0_134_12943"><stop offset="0%" stop-color="#42EABF" stop-opacity="1"/><stop offset="100%" stop-color="#9FF8EF" stop-opacity="1"/></linearGradient><linearGradient x1="0.02499999664723873" y1="0.04545453563332558" x2="0.875" y2="1" id="master_svg1_134_12937"><stop offset="0%" stop-color="#00694E" stop-opacity="1"/><stop offset="100%" stop-color="#62EEE9" stop-opacity="1"/></linearGradient></defs><g><g><path d="M0,0C0,0,20,11,20,11C20,11,7,11,7,11C7,11,0,0,0,0C0,0,0,0,0,0Z" fill="url(#master_svg0_134_12943)" fill-opacity="0.800000011920929"/></g><g transform="matrix(1,0,0,-1,0,44)"><path d="M0,22C0,22,20,33,20,33C20,33,7,33,7,33C7,33,0,22,0,22C0,22,0,22,0,22Z" fill="url(#master_svg1_134_12937)" fill-opacity="0.800000011920929"/></g></g></svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 12 KiB

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="137" height="107" viewBox="0 0 137 107"><defs><filter id="master_svg0_134_13483" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB" x="0" y="0" width="136.002197265625" height="106"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feColorMatrix in="SourceAlpha" type="matrix" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset dy="0" dx="0"/><feGaussianBlur stdDeviation="10"/><feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/><feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 0.5215686559677124 0 0 0 0 0.08235294371843338 0 0 0 1 0"/><feBlend mode="normal" in2="shape" result="effect1_innerShadow"/></filter><linearGradient x1="0.5" y1="-3.0616171314629196e-17" x2="0.5" y2="1" id="master_svg1_123_00043"><stop offset="0%" stop-color="#004880" stop-opacity="0"/><stop offset="99.98999834060669%" stop-color="#004A80" stop-opacity="0.3499999940395355"/><stop offset="100%" stop-color="#004A80" stop-opacity="0.3499999940395355"/></linearGradient><linearGradient x1="0.5" y1="-3.0616171314629196e-17" x2="0.5" y2="1" id="master_svg2_117_00562"><stop offset="0%" stop-color="#006DAB" stop-opacity="0.30000001192092896"/><stop offset="100%" stop-color="#00669F" stop-opacity="1"/></linearGradient><linearGradient x1="-2.032271242567371e-14" y1="0.9999873042106628" x2="0.9840425848960876" y2="0.9999790191650391" id="master_svg3_117_02771"><stop offset="0%" stop-color="#006DAB" stop-opacity="0"/><stop offset="51.5625%" stop-color="#006DAB" stop-opacity="1"/><stop offset="100%" stop-color="#006DAB" stop-opacity="0"/></linearGradient></defs><g><g filter="url(#master_svg0_134_13483)"><path d="M136.356,0.5C136.356,0.5,0.5,0.5,0.5,0.5C0.5,0.5,0.50219727,101.133,0.50219727,101.133C0.50219727,101.133,8.5022,106.5,8.5022,106.5C8.5022,106.5,17.482,106.5,17.482,106.5C17.482,106.5,34.4641,106.5,34.4641,106.5C34.4641,106.5,68.4282,106.5,68.4282,106.5C68.4282,106.5,102.392,106.5,102.392,106.5C102.392,106.5,119.374,106.5,119.374,106.5C119.374,106.5,127.502,106.5,127.502,106.5C127.502,106.5,136.502,101.133,136.502,101.133C136.502,101.133,136.356,0.5,136.356,0.5Z" fill="url(#master_svg1_123_00043)" fill-opacity="1"/><path d="M0.5,0.5L136.356,0.5L136.502,101.133L127.502,106.5L8.5022,106.5L0.50219727,101.133L0.5,2.5L0.5,0.5ZM134.359,2.5L134.501,99.998L126.951,104.5L9.11093,104.5L2.50217,100.0663L2.50004,2.5L134.359,2.5Z" fill-rule="evenodd" fill="url(#master_svg2_117_00562)" fill-opacity="1"/></g><g><g><path d="M1,1L8.5,1L8.5,0L0,0L0,8.5L1,8.5L1,1Z" fill-rule="evenodd" fill="#FF9A3D" fill-opacity="1"/></g><g transform="matrix(1,0,0,-1,0,213)"><path d="M9.65218,107L18.5,107L18.5,106L9.34782,106L0,112.27132L0,118.5759L1,118.5759L1,112.80463L5.27856,109.9342L9.65218,107Z" fill-rule="evenodd" fill="#FF9A3D" fill-opacity="1"/></g><g transform="matrix(-1,0,0,-1,273,213)"><path d="M145.65218,107L154.5,107L154.5,106L145.34782,106L136,112.27132L136,118.5759L137,118.5759L137,112.80463L141.27856,109.9342L145.65218,107Z" fill-rule="evenodd" fill="#FF9A3D" fill-opacity="1"/></g><g transform="matrix(-1,0,0,1,273,0)"><path d="M137,1L144.5,1L144.5,0L136,0L136,8.5L137,8.5L137,1Z" fill-rule="evenodd" fill="#FF9A3D" fill-opacity="1"/></g></g><g><g transform="matrix(0,1,-1,0,54,35)"><path d="M14,44.5L17.897109999999998,51.25L10.102886,51.25L14,44.5Z" fill="#A57447" fill-opacity="1"/></g><g><rect x="4.5" y="48.5" width="128" height="1" rx="0" fill="url(#master_svg3_117_02771)" fill-opacity="1"/></g><g transform="matrix(0,1,1,0,83,-83)"><path d="M132,44.5L135.89711,51.25L128.102886,51.25L132,44.5Z" fill="#A57447" fill-opacity="1"/></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 3.7 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.0 KiB

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="137" height="107" viewBox="0 0 137 107"><defs><filter id="master_svg0_134_13680" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB" x="0" y="0" width="136.002197265625" height="106"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feColorMatrix in="SourceAlpha" type="matrix" result="hardAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset dy="0" dx="0"/><feGaussianBlur stdDeviation="10"/><feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/><feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0.5686274766921997 0 0 0 0 0.9843137264251709 0 0 0 1 0"/><feBlend mode="normal" in2="shape" result="effect1_innerShadow"/></filter><linearGradient x1="0.5" y1="-3.0616171314629196e-17" x2="0.5" y2="1" id="master_svg1_123_00043"><stop offset="0%" stop-color="#004880" stop-opacity="0"/><stop offset="99.98999834060669%" stop-color="#004A80" stop-opacity="0.3499999940395355"/><stop offset="100%" stop-color="#004A80" stop-opacity="0.3499999940395355"/></linearGradient><linearGradient x1="0.5" y1="-3.0616171314629196e-17" x2="0.5" y2="1" id="master_svg2_117_00562"><stop offset="0%" stop-color="#006DAB" stop-opacity="0.30000001192092896"/><stop offset="100%" stop-color="#00669F" stop-opacity="1"/></linearGradient><linearGradient x1="-2.032271242567371e-14" y1="0.9999873042106628" x2="0.9840425848960876" y2="0.9999790191650391" id="master_svg3_117_02771"><stop offset="0%" stop-color="#006DAB" stop-opacity="0"/><stop offset="51.5625%" stop-color="#006DAB" stop-opacity="1"/><stop offset="100%" stop-color="#006DAB" stop-opacity="0"/></linearGradient></defs><g><g filter="url(#master_svg0_134_13680)"><path d="M136.356,0.5C136.356,0.5,0.5,0.5,0.5,0.5C0.5,0.5,0.50219727,101.133,0.50219727,101.133C0.50219727,101.133,8.5022,106.5,8.5022,106.5C8.5022,106.5,17.482,106.5,17.482,106.5C17.482,106.5,34.4641,106.5,34.4641,106.5C34.4641,106.5,68.4282,106.5,68.4282,106.5C68.4282,106.5,102.392,106.5,102.392,106.5C102.392,106.5,119.374,106.5,119.374,106.5C119.374,106.5,127.502,106.5,127.502,106.5C127.502,106.5,136.502,101.133,136.502,101.133C136.502,101.133,136.356,0.5,136.356,0.5Z" fill="url(#master_svg1_123_00043)" fill-opacity="1"/><path d="M0.5,0.5L136.356,0.5L136.502,101.133L127.502,106.5L8.5022,106.5L0.50219727,101.133L0.5,2.5L0.5,0.5ZM134.359,2.5L134.501,99.998L126.951,104.5L9.11093,104.5L2.50217,100.0663L2.50004,2.5L134.359,2.5Z" fill-rule="evenodd" fill="url(#master_svg2_117_00562)" fill-opacity="1"/></g><g><g><path d="M1,1L8.5,1L8.5,0L0,0L0,8.5L1,8.5L1,1Z" fill-rule="evenodd" fill="#49E4FA" fill-opacity="1"/></g><g transform="matrix(1,0,0,-1,0,213)"><path d="M9.65218,107L18.5,107L18.5,106L9.34782,106L0,112.27132L0,118.5759L1,118.5759L1,112.80463L5.27856,109.9342L9.65218,107Z" fill-rule="evenodd" fill="#49E4FA" fill-opacity="1"/></g><g transform="matrix(-1,0,0,-1,273,213)"><path d="M145.65218,107L154.5,107L154.5,106L145.34782,106L136,112.27132L136,118.5759L137,118.5759L137,112.80463L141.27856,109.9342L145.65218,107Z" fill-rule="evenodd" fill="#49E4FA" fill-opacity="1"/></g><g transform="matrix(-1,0,0,1,273,0)"><path d="M137,1L144.5,1L144.5,0L136,0L136,8.5L137,8.5L137,1Z" fill-rule="evenodd" fill="#49E4FA" fill-opacity="1"/></g></g><g><g transform="matrix(0,1,-1,0,54,35)"><path d="M14,44.5L17.897109999999998,51.25L10.102886,51.25L14,44.5Z" fill="#006DAB" fill-opacity="1"/></g><g><rect x="4.5" y="48.5" width="128" height="1" rx="0" fill="url(#master_svg3_117_02771)" fill-opacity="1"/></g><g transform="matrix(0,1,1,0,83,-83)"><path d="M132,44.5L135.89711,51.25L128.102886,51.25L132,44.5Z" fill="#006DAB" fill-opacity="1"/></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 3.7 KiB

@ -1,51 +0,0 @@
<template>
<dv-charts :option="option"></dv-charts>
</template>
<script>
export default {
data() {
return {
option: {
xAxis: {
type: 'category',
data: ['骨科', '心胸外科', '普通外科', '神经外科', '整形外科'],
axisLabel: {
style: {
stroke: '#fff',
fontSize: 14,
},
},
},
yAxis: {
type: 'value',
data: 'value',
max: '1%',
axisLabel: {
style: {
stroke: '#fff',
fontSize: 14,
},
},
},
series: [
{
type: 'bar',
data: [200, 150, 120, 80, 70],
label: {
show: true,
position: 'top',
style: {
stroke: '#fff',
fontSize: 14,
},
},
},
],
},
};
},
};
</script>
<style></style>

@ -1,116 +0,0 @@
<template>
<section ref="echartsContainer"></section>
</template>
<script>
import * as echarts from 'echarts';
export default {
props: {
title: String,
maxNum: {
type: Number,
default: 100,
},
nowNum: Number,
unit: {
type: String,
default: '%',
},
},
data() {
return {
chartOptions: {
series: [
{
type: 'gauge',
startAngle: 90,
endAngle: -270,
pointer: {
show: false,
},
max: this.maxNum,
radius: '100%',
center: ['50%', '50%'],
progress: {
show: true,
overlap: false,
roundCap: true,
clip: false,
itemStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0,
color: '#03c2fd',
},
{
offset: 0.5,
color: '#1ed3e5',
},
{
offset: 1,
color: '#2fded6',
},
],
global: false,
},
},
},
axisLine: {
lineStyle: {
color: [[1, '#4F518C']],
opacity: 0.7,
width: 30,
},
},
splitLine: {
show: false,
distance: 0,
length: 10,
},
axisTick: {
show: false,
},
axisLabel: {
show: false,
distance: 50,
},
data: [
{
value: this.nowNum,
name: this.title,
title: {
offsetCenter: ['0%', '20%'],
fontSize: 22,
fontFamily: 'Microsoft YaHei',
color: '#fff',
overflow: 'break',
lineHeight: 20,
},
detail: {
valueAnimation: true,
offsetCenter: ['0%', '-15%'],
fontSize: 40,
fontFamily: 'DIN-Bold,Microsoft YaHei',
color: '#03FFFF',
formatter: `{value}${this.unit}`,
},
},
],
},
],
},
};
},
mounted() {
const chartContainer = this.$refs.echartsContainer;
const chart = echarts.init(chartContainer);
chart.setOption(this.chartOptions);
},
};
</script>

@ -0,0 +1,9 @@
<template>
<div></div>
</template>
<script>
export default {};
</script>
<style></style>

@ -1,107 +0,0 @@
<template>
<Header>
<dv-decoration-8 class="left" />
<dv-decoration-5 class="center" />
<dv-decoration-8 class="right" :reverse="true" />
<div class="centerTitle gradientText">{{ $route.meta.title }}</div>
<dv-decoration-7 class="dateBox">
<span class="numFont">{{ curTime }}</span>
</dv-decoration-7>
</Header>
</template>
<script>
import dayjs from 'dayjs';
export default {
data() {
return {
curTime: '',
dayOfWeekText: '',
};
},
methods: {
//
getWeek() {
const dayOfWeek = dayjs().day();
switch (dayOfWeek) {
case 0:
this.dayOfWeekText = '星期日';
break;
case 1:
this.dayOfWeekText = '星期一';
break;
case 2:
this.dayOfWeekText = '星期二';
break;
case 3:
this.dayOfWeekText = '星期三';
break;
case 4:
this.dayOfWeekText = '星期四';
break;
case 5:
this.dayOfWeekText = '星期五';
break;
case 6:
this.dayOfWeekText = '星期六';
break;
}
},
//
updateTime() {
this.curTime = dayjs().format(`YYYY-MM-DD HH:mm:ss ${this.dayOfWeekText}`);
},
},
created() {
this.getWeek();
this.updateTime();
this.timer = setInterval(this.updateTime, 1000);
},
beforeDestroy() {
clearInterval(this.timer);
},
};
</script>
<style lang="scss" scoped>
Header {
display: flex;
justify-content: space-between;
flex-shrink: 0;
height: 8.6vh;
position: relative;
.left {
width: 25%;
height: 6vh;
}
.center {
width: 40%;
height: 6vh;
margin-top: 2.2vh;
}
.right {
width: 25%;
height: 6vh;
}
.centerTitle {
position: absolute;
font-size: 3.4vh;
font-weight: 700;
left: 50%;
top: 0.6vh;
transform: translateX(-50%);
}
.dateBox {
position: absolute;
width: 32vh;
height: 3vh;
font-size: 1.8vh;
font-weight: 400;
right: 17vh;
top: 4.2vh;
span {
margin: 0 8px;
}
}
}
</style>

@ -1,109 +0,0 @@
<template>
<div class="dv-bar-chart">
<div class="bar-chart-container" ref="bar-chart" />
</div>
</template>
<script>
import Charts from '@jiaminghi/charts';
import { deepMerge } from '@jiaminghi/charts/lib/util/index';
import { deepClone } from '@jiaminghi/c-render/lib/plugin/util';
export default {
name: 'DvBarChart',
props: {
config: {
type: Object,
default: () => ({}),
},
},
data() {
return {
defaultConfig: {},
mergedConfig: null,
chart: null,
};
},
methods: {
init() {
const { initChart, mergeConfig, setBarOption } = this;
initChart();
mergeConfig();
setBarOption();
},
initChart() {
// Echart
const { $refs } = this;
this.chart = new Charts($refs['bar-chart']);
},
mergeConfig() {
//
const { defaultConfig, config } = this;
this.mergedConfig = deepMerge(deepClone(defaultConfig, true), config || {});
},
setBarOption() {
const { getBarOption, chart } = this;
// Echart
const option = getBarOption();
chart.setOption(option, true);
},
getBarOption() {
//
// const { mergedConfig } = this;
return {
xAxis: [
{
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
axisTick: {
alignWithLabel: true,
},
},
],
yAxis: {
type: 'value',
data:[],
axisLabel: {
textStyle: {
color: '#333',
fontSize: 12,
},
},
splitLine: {
show: true,
lineStyle: {
color: '#ddd',
type: 'dashed',
},
},
axis: {
// axis
name: 'Y轴名称',
nameTextStyle: {
color: '#666',
fontSize: 14,
},
// axis ...
},
},
series: [
{
data: [120, 200, 150, 80, 70, 110, 130],
type: 'bar',
},
],
};
},
},
mounted() {
const { init } = this;
//
init();
},
};
</script>
<style lang="scss" scoped>
.bar-chart-container {
height: 100%;
}
</style>

@ -1,50 +1,12 @@
import Vue from 'vue'; import Vue from 'vue'
import App from './App.vue'; import App from './App.vue'
import router from './router'; import router from './router'
import store from './store'; import store from './store'
import { Vue.config.productionTip = false
fullScreenContainer,
loading,
digitalFlop,
activeRingChart,
capsuleChart,
scrollBoard,
charts,
decoration2,
decoration4,
decoration5,
decoration8,
decoration7,
borderBox1,
borderBox2,
borderBox7,
borderBox11,
borderBox13,
} from '@jiaminghi/data-view';
Vue.use(fullScreenContainer)
.use(loading)
.use(digitalFlop)
.use(activeRingChart)
.use(capsuleChart)
.use(scrollBoard)
.use(charts)
.use(decoration2)
.use(decoration4)
.use(decoration5)
.use(decoration8)
.use(decoration7)
.use(borderBox1)
.use(borderBox2)
.use(borderBox7)
.use(borderBox11)
.use(borderBox13);
Vue.config.productionTip = false;
new Vue({ new Vue({
router, router,
store, store,
render: h => h(App), render: h => h(App)
}).$mount('#app'); }).$mount('#app')

@ -13,31 +13,25 @@ const routes = [
path: '/monitor', path: '/monitor',
name: 'monitor', name: 'monitor',
meta: { title: '运营监控' }, meta: { title: '运营监控' },
component: () => import('@/views/pageMonitor/index.vue'), component: () => import('@/views/pageMonitor/MonitorIndex.vue'),
}, },
{ {
path: '/scheduling', path: '/scheduling',
name: 'scheduling', name: 'scheduling',
meta: { title: '护理人员排班' }, meta: { title: '护理人员排班' },
component: () => import('@/views/pageScheduling/index.vue'), component: () => import('@/views/pageScheduling/SchedulingIndex.vue'),
}, },
{ {
path: '/operation', path: '/operation',
name: 'operation', name: 'operation',
meta: { title: '首台率' }, meta: { title: '首台率' },
component: () => import('@/views/pageOperation/index.vue'), component: () => import('@/views/pageOperation/OperationIndex.vue'),
}, },
{ {
path: '/room', path: '/room',
name: 'room', name: 'room',
meta: { title: '手术间利用率' }, meta: { title: '手术间利用率' },
component: () => import('@/views/pageRoom/index.vue'), component: () => import('@/views/pageRoom/RoomIndex.vue'),
},
{
path: '/test',
name: 'test',
meta: { title: '手术间利用率' },
component: () => import('@/views/pageTest/index.vue'),
}, },
]; ];

@ -0,0 +1,9 @@
<template>
<div></div>
</template>
<script>
export default {};
</script>
<style></style>

@ -1,114 +0,0 @@
<template>
<div class="bottomLeft">
<dv-border-box-13>
<div class="chartsBox">
<div class="chartItem">
<p>手术等级</p>
<div class="echartsContainer" ref="echartsContainerLeft"></div>
</div>
<div class="chartItem">
<p>ASA分级</p>
<div class="echartsContainer" ref="echartsContainerRight"></div>
</div>
</div>
</dv-border-box-13>
</div>
</template>
<script>
import * as echarts from 'echarts';
export default {
data() {
return {
nowIndex: 0,
chartOptionsLeft: {
series: [
{
type: 'pie',
radius: ['32%', '50%'],
selectedMode: 'single',
data: [
{ name: '一级', value: 148, selected: true },
{ name: '二级', value: 87, selected: false },
{ name: '三级', value: 75, selected: false },
{ name: '四级', value: 40, selected: false },
],
label: {
formatter: '{b}{c}',
color: 'inherit',
},
},
],
},
chartOptionsRight: {
series: [
{
type: 'pie',
radius: ['32%', '50%'],
selectedMode: 'single',
data: [
{ name: 'I级', value: 137, selected: true },
{ name: 'II级', value: 105, selected: false },
{ name: 'III级', value: 58, selected: false },
{ name: 'IV级', value: 37, selected: false },
{ name: 'V级', value: 13, selected: false },
],
label: {
formatter: '{b}{c}',
color: 'inherit',
},
},
],
},
};
},
mounted() {
const echartsContainerLeft = this.$refs.echartsContainerLeft;
const chartLeft = echarts.init(echartsContainerLeft);
chartLeft.setOption(this.chartOptionsLeft);
const echartsContainerRight = this.$refs.echartsContainerRight;
const chartRight = echarts.init(echartsContainerRight);
chartRight.setOption(this.chartOptionsRight);
setInterval(() => {
let lastIndex = this.nowIndex++;
const leftData = this.chartOptionsLeft['series'][0]['data'];
leftData[lastIndex % 4]['selected'] = false;
leftData[this.nowIndex % 4]['selected'] = true;
chartLeft.setOption(this.chartOptionsLeft,true);
const rightData = this.chartOptionsRight['series'][0]['data'];
rightData[lastIndex % 5]['selected'] = false;
rightData[this.nowIndex % 5]['selected'] = true;
chartRight.setOption(this.chartOptionsRight,true);
}, 2000);
},
};
</script>
<style lang="scss" scoped>
.bottomLeft {
flex-basis: 38%;
.chartsBox {
width: 100%;
height: 100%;
display: flex;
position: relative;
padding-top: 10px;
box-sizing: border-box;
.chartItem {
width: 50%;
height: 100%;
flex-shrink: 0;
padding-top: 40px;
box-sizing: border-box;
p {
font-size: 24px;
text-align: center;
letter-spacing: 0.1vh;
}
.echartsContainer {
height: 90%;
}
}
}
}
</style>

@ -1,130 +0,0 @@
<template>
<div class="bottomMiddle">
<dv-border-box-13>
<div class="chartsBox">
<div class="chartItem">
<nav>
<p class="left">手术量统计</p>
<div class="right">
<p class="active"></p>
<p></p>
</div>
</nav>
<dv-charts :option="option"></dv-charts>
</div>
</div>
</dv-border-box-13>
</div>
</template>
<script>
export default {
data() {
return {
option: {
grid: {
left: '20%',
top: '6%',
},
xAxis: {
data: 'value',
max: '1%',
min: 0,
axisLabel: {
style: {
fontSize: 0,
},
},
axisLine: {
show: false,
},
},
yAxis: {
type: 'category',
data: ['无痛手术', '门诊手术', '日间手术', '急诊手术', '择期手术'],
axisLabel: {
style: {
stroke: '#fff',
fontSize: 14,
},
},
splitLine: { show: false },
axisLine: {
show: false,
},
},
series: [
{
type: 'bar',
data: [160, 238, 326, 352, 724],
barWidth: '40%',
label: {
show: true,
position: 'top',
offset: [16, 2],
style: {
stroke: '#fff',
fontSize: 14,
},
},
// gradient: {
// color: ['#83bff6', '#188df0', '#188df0'],
// },
backgroundBar: {
show: true,
},
independentColor: true,
},
],
},
};
},
};
</script>
<style lang="scss" scoped>
.bottomMiddle {
flex-basis: 30%;
.chartsBox {
width: 100%;
height: 100%;
display: flex;
position: relative;
padding-top: 1vh;
box-sizing: border-box;
.chartItem {
width: 100%;
height: 100%;
flex-shrink: 0;
padding: 2vh;
box-sizing: border-box;
nav {
display: flex;
justify-content: space-between;
align-items: center;
.right {
display: flex;
.active,
p:hover {
color: #87ceeb;
border: 1px solid #87ceeb;
}
p {
margin-right: 1.5vh;
cursor: pointer;
border: 1px solid #fff;
font-size: 1.6vh;
width: 2.6vh;
height: 2.6vh;
line-height: 2.6vh;
text-align: center;
}
}
p {
font-size: 2.4vh;
}
}
}
}
}
</style>

@ -1,122 +0,0 @@
<template>
<div class="bottomRight">
<dv-border-box-13>
<div class="chartsBox">
<div class="chartItem">
<nav>
<p class="left">科室手术量统计(前五)</p>
<div class="right">
<p class="active"></p>
<p></p>
</div>
</nav>
<dv-charts :option="option"></dv-charts>
</div>
</div>
</dv-border-box-13>
</div>
</template>
<script>
export default {
data() {
return {
option: {
xAxis: {
type: 'category',
data: ['骨科', '心胸外科', '普通外科', '神经外科', '整形外科'],
axisLabel: {
style: {
stroke: '#fff',
fontSize: 14,
fontWeight: 'normal',
fontFamily: 'Microsoft YaHei',
},
},
},
yAxis: {
type: 'value',
data: 'value',
max: '1%',
min: 0,
axisLabel: {
style: {
stroke: '#fff',
fontSize: 14,
fontWeight: 'normal',
fontFamily: 'Microsoft YaHei',
},
},
},
series: [
{
type: 'bar',
data: [180, 165, 155, 148, 137],
barWidth: '40%',
label: {
show: true,
position: 'top',
style: {
stroke: '#fff',
fontSize: 14,
fontWeight: 'normal',
fontFamily: 'Microsoft YaHei',
},
},
gradient: {
color: ['#83bff6', '#188df0', '#188df0'],
},
},
],
},
};
},
};
</script>
<style lang="scss" scoped>
.bottomRight {
flex-basis: 30%;
.chartsBox {
width: 100%;
height: 100%;
display: flex;
position: relative;
padding-top: 1vh;
box-sizing: border-box;
.chartItem {
width: 100%;
height: 100%;
flex-shrink: 0;
padding: 2vh;
box-sizing: border-box;
nav {
display: flex;
justify-content: space-between;
align-items: center;
.right {
display: flex;
.active,
p:hover {
color: #87ceeb;
border: 1px solid #87ceeb;
}
p {
margin-right: 1.5vh;
cursor: pointer;
border: 1px solid #fff;
font-size: 1.6vh;
width: 2.6vh;
height: 2.6vh;
line-height: 2.6vh;
text-align: center;
}
}
p {
font-size: 2.4vh;
}
}
}
}
}
</style>

@ -1,52 +0,0 @@
<template>
<dv-border-box-1>
<section class="monitor">
<div class="topBox">
<topLeft></topLeft>
<topRight></topRight>
</div>
<div class="bottomBox">
<bottomMiddle></bottomMiddle>
<bottomLeft></bottomLeft>
<bottomRight></bottomRight>
</div>
</section>
</dv-border-box-1>
</template>
<script>
import topLeft from './topLeft/index.vue';
import topRight from './topRight/index.vue';
import bottomLeft from './bottomLeft/index.vue';
import bottomMiddle from './bottomMiddle/index.vue';
import bottomRight from './bottomRight/index.vue';
export default {
components: {
topLeft,
topRight,
bottomLeft,
bottomMiddle,
bottomRight,
},
};
</script>
<style lang="scss" scoped>
.monitor {
width: 100%;
height: 100%;
> div {
height: 50%;
padding: 20px;
box-sizing: border-box;
}
.topBox {
display: flex;
justify-content: space-between;
}
.bottomBox {
display: flex;
justify-content: space-between;
}
}
</style>

@ -1,182 +0,0 @@
<template>
<div class="topLeft">
<dv-border-box-13>
<section>
<nav>
<div>
<img src="@/assets/svg/blueTriangle.svg" />
<p>首台准点率</p>
<p>80<span>%</span></p>
</div>
<div>
<img src="@/assets/svg/blueTriangle.svg" />
<p>手术间利用率</p>
<p>86<span>%</span></p>
</div>
<div>
<img src="@/assets/svg/blueTriangle.svg" />
<p>急诊患者</p>
<p>180<span></span></p>
</div>
</nav>
<div class="bottomBox">
<section>
<div class="leftBox">
<img src="@/assets/svg/greenTriangle.svg" />
<p>总人数</p>
</div>
<div class="rightBox">
<div>
<img src="@/assets/svg/greenPoint.svg" />
<p>进行中</p>
</div>
<p>50<span></span></p>
</div>
</section>
<section class="numBox">
<div class="leftBox">350</div>
<div class="rightBox">
<div>
<img src="@/assets/svg/greenPoint.svg" />
<p>待进行</p>
</div>
<p>300<span></span></p>
</div>
</section>
</div>
</section>
</dv-border-box-13>
</div>
</template>
<script>
export default {
data() {
return {};
},
};
</script>
<style lang="scss" scoped>
@import '@/assets/scss/pxtovh.scss';
.topLeft {
flex-basis: 30%;
section {
height: 100%;
padding: vh(46) vh(32);
box-sizing: border-box;
nav {
display: flex;
justify-content: space-between;
div {
width: vh(140);
height: vh(160);
background-image: url('@/assets/svg/blueBox.svg');
background-size: cover;
background-repeat: no-repeat;
background-position: center;
padding: vh(10) vh(16);
box-sizing: border-box;
img {
width: vh(20);
}
p:first-of-type {
margin-top: vh(12);
margin-bottom: vh(18);
font-size: vh(16);
color: #fff;
font-family: Source Han Sans;
letter-spacing: 3px;
font-weight: normal;
white-space: nowrap;
}
p:last-of-type {
font-size: vh(46);
line-height: vh(46);
color: #0592ff;
span {
font-size: vh(24);
color: #0592ff;
}
}
}
}
.bottomBox {
margin-top: vh(48);
height: vh(182);
background-image: url('@/assets/svg/greenBox.svg');
background-size: cover;
background-repeat: no-repeat;
background-position: center;
padding: vh(26) vh(32);
box-sizing: border-box;
section {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0;
height: auto;
margin-bottom: vh(20);
margin-top: vh(10);
.leftBox {
img {
width: vh(20);
vertical-align: middle;
}
p {
display: inline-block;
margin-left: vh(12);
font-size: vh(20);
color: rgba(255, 255, 255, 0.8);
vertical-align: middle;
font-weight: normal;
}
}
.rightBox {
width: vh(240);
height: vh(44);
padding: 0 vh(24);
display: flex;
justify-content: space-between;
align-content: space-between;
align-items: center;
background: linear-gradient(271deg, rgba(85, 255, 212, 0.075) 2%, rgba(35, 150, 121, 0.11) 99%);
border: 1.5px solid;
border-image: linear-gradient(159deg, #a9d5ff -8%, rgba(169, 213, 255, 0) 38%) 1.5;
div {
img {
width: vh(14);
vertical-align: bottom;
}
p {
display: inline-block;
margin-left: vh(8);
font-size: vh(16);
font-family: Source Han Sans;
vertical-align: middle;
letter-spacing: 1px;
}
}
> p {
color: #67c23a;
font-size: vh(26);
span {
font-family: Source Han Sans;
color: #fff;
font-size: vh(12);
margin-left: vh(4);
vertical-align: middle;
}
}
}
}
.numBox {
.leftBox {
font-size: vh(44);
color: #67c23a;
}
}
}
}
}
</style>

@ -1,150 +0,0 @@
<template>
<div class="topRight">
<dv-border-box-13>
<el-carousel direction="vertical" :autoplay="false" :interval="5000">
<el-carousel-item v-for="item in 3" :key="item">
<section>
<template v-for="(item1, index) in 24">
<div v-if="index % 3" class="item opreationRoom" :key="index">
<p>OR-{{ String(index + 1).padStart(3, '0') }}</p>
<div>
<img src="@/assets/svg/opreationIcon.svg" />
<span>手术中</span>
</div>
</div>
<div v-else-if="index % 5" class="item endRoom" :key="index">
<p>OR-{{ String(index + 1).padStart(3, '0') }}</p>
<div>
<img src="@/assets/svg/endIcon.svg" />
<span>麻醉结束</span>
</div>
</div>
<div v-else class="item waitRoom" :key="index">
<p>OR-{{ String(index + 1).padStart(3, '0') }}</p>
<div>
<img src="@/assets/svg/waitIcon.svg" />
<span>空置中</span>
</div>
</div>
</template>
</section>
</el-carousel-item>
</el-carousel>
</dv-border-box-13>
</div>
</template>
<script>
import { Carousel, CarouselItem } from 'element-ui';
export default {
components: {
'el-carousel': Carousel,
'el-carousel-item': CarouselItem,
},
};
</script>
<style lang="scss" scoped>
@import '@/assets/scss/pxtovh.scss';
.topRight {
flex-basis: 69%;
:deep(.el-carousel) {
height: 100%;
.el-carousel__container {
height: 100%;
}
.el-carousel__item {
height: 100%;
box-sizing: border-box;
display: flex;
flex-wrap: wrap;
justify-content: space-evenly;
align-content: space-evenly;
section {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 96%;
display: grid;
grid-template-columns: repeat(8, minmax(vh(136), 1fr));
gap: vh(20);
grid-row-gap: vh(40);
.item {
width: vh(136);
height: vh(106);
// display: inline-block;
// margin: vh(16) vh(22) vh(16) 0;
background-size: cover;
background-repeat: no-repeat;
background-position: center;
position: relative;
p {
width: vh(116);
margin: vh(8) auto 0;
text-align: center;
line-height: vh(30);
background: linear-gradient(
90deg,
rgba(0, 147, 255, 0) 0%,
rgba(0, 147, 255, 0.37) 44%,
rgba(0, 147, 255, 0) 99%
);
font-size: vh(20);
color: #fff;
position: relative;
&::after {
content: '';
display: block;
width: 100%;
height: 1px;
position: absolute;
bottom: 0;
left: 0;
background: linear-gradient(90deg, rgba(0, 147, 255, 0) 0%, #0093ff 49%, rgba(0, 147, 255, 0) 99%);
}
}
div {
position: absolute;
bottom: 15%;
left: 50%;
transform: translateX(-50%);
white-space: nowrap;
img {
width: vh(28);
vertical-align: middle;
}
span {
margin-left: vh(8);
font-size: vh(20);
vertical-align: middle;
white-space: nowrap;
}
}
}
.waitRoom {
background-image: url('@/assets/svg/waitRoom.svg');
span {
color: #0592ff;
}
}
.endRoom {
background-image: url('@/assets/svg/endRoom.svg');
span {
color: #67c23a;
}
}
.opreationRoom {
background-image: url('@/assets/svg/opreationRoom.svg');
span {
color: #ff8515;
}
}
.item:nth-child(8n) {
margin-right: 0;
}
}
}
}
}
</style>

@ -0,0 +1,9 @@
<template>
<div></div>
</template>
<script>
export default {};
</script>
<style></style>

@ -1,47 +0,0 @@
<template>
<dv-border-box-1>
<section class="operation">
<div class="leftBox">
<leftTop></leftTop>
<leftBottom></leftBottom>
</div>
<div class="rightBox">
<rightMiddle></rightMiddle>
</div>
</section>
</dv-border-box-1>
</template>
<script>
import leftTop from './leftTop/index.vue';
import leftBottom from './leftBottom/index.vue';
import rightMiddle from './rightMiddle/index.vue';
export default {
components: {
leftTop,
leftBottom,
rightMiddle,
},
};
</script>
<style lang="scss" scoped>
@import '@/assets/scss/pxtovw.scss';
.operation {
width: 100%;
height: 100%;
padding: vw(20);
box-sizing: border-box;
display: flex;
justify-content: space-between;
.leftBox {
flex-basis: vw(462);
display: flex;
flex-direction: column;
justify-content: space-between;
}
.rightBox {
flex-basis: vw(1326);
}
}
</style>

@ -1,90 +0,0 @@
<template>
<dv-border-box-13 class="leftBottom">
<div class="echartsContainer" ref="echartsContainer"></div>
</dv-border-box-13>
</template>
<script>
import * as echarts from 'echarts';
export default {
data() {
return {
chartOptions: {
grid: {
top: '13%',
left: '13%',
right: '10%',
bottom: '13%',
},
xAxis: {
type: 'category',
boundaryGap: false,
data: ['3月', '4月', '5月', '6月', '7月', '8月'],
axisLabel: {
color: '#fff',
fontFamily: 'DIN-Bold,Microsoft YaHei',
},
},
yAxis: {
type: 'value',
axisLabel: {
formatter: '{value}%',
color: '#fff',
fontFamily: 'DIN-Bold,Microsoft YaHei',
},
splitLine: {
lineStyle: {
color: 'rgba(0,142,114,0.3)',
width: 0.5,
},
},
},
series: [
{
data: [95, 97, 96, 98, 99, 96],
type: 'line',
itemStyle: {
color: '#30FDFF',
},
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0,
color: 'rgba(0, 128, 255, 0.7)', //
},
{
offset: 1,
color: 'rgba(200, 254, 255, 0)', //
},
],
},
},
},
],
},
};
},
mounted() {
const chartContainer = this.$refs.echartsContainer;
const chart = echarts.init(chartContainer);
chart.setOption(this.chartOptions);
},
};
</script>
<style lang="scss" scoped>
@import '@/assets/scss/pxtovw.scss';
.leftBottom {
height: vw(380);
background: #011343;
.echartsContainer {
height: 100%;
}
}
</style>

@ -1,95 +0,0 @@
<template>
<div class="leftTop">
<dv-border-box-13>
<comGauge class="echartsContainer" :title="'首台准点率'" :nowNum="86"></comGauge>
<section class="dataSection">
<div class="left">
<p>总人数</p>
<span class="numFont gradientText">350</span>
</div>
<div class="right">
<div>
<p>进行中</p>
<span class="numFont gradientText">50</span>
</div>
<div>
<p>待进行</p>
<span class="numFont gradientText">220</span>
</div>
</div>
</section>
</dv-border-box-13>
</div>
</template>
<script>
import comGauge from '@/components/comGauge';
export default {
components: {
comGauge,
},
};
</script>
<style lang="scss" scoped>
@import '@/assets/scss/pxtovw.scss';
.leftTop {
height: vw(500);
position: relative;
background-color: #011343;
:deep(.dv-border-box-13) {
padding: vw(40) vw(18);
box-sizing: border-box;
.border-box-content {
display: flex;
flex-direction: column;
justify-content: space-between;
.echartsContainer {
height: vw(252);
}
.dataSection {
height: vw(120);
display: flex;
justify-content: space-between;
align-items: center;
.left {
flex-basis: vw(210);
border: 1px solid #4f518c;
height: 100%;
box-sizing: border-box;
padding-left: vw(32);
padding-top: vw(16);
p {
font-size: vw(20);
margin-bottom: vw(4);
}
span {
font-size: vw(44);
}
}
.right {
flex-basis: vw(210);
div {
height: vw(58);
border: 1px solid #4f518c;
box-sizing: border-box;
padding: vw(16) vw(24);
display: flex;
justify-content: space-between;
align-items: center;
p {
font-size: vw(20);
}
span {
font-size: vw(24);
}
}
div:first-child {
margin-bottom: vw(4);
}
}
}
}
}
}
</style>

@ -1,259 +0,0 @@
<template>
<div class="rightMiddle">
<dv-border-box-13>
<dv-scroll-board :config="config" />
</dv-border-box-13>
</div>
</template>
<script>
import dayjs from 'dayjs';
const today = dayjs().format('YYYY-MM-DD');
export default {
data() {
return {
title: '白班 手术间78 护理人员135',
titleWidth: 380,
config: {
header: ['手术间', '手术名称', '申请类型', '入手术室时间', '麻醉开始时间', '手术开始时间', '是否准点'],
data: [
[
`<span class='numFont'>001</span>`,
`阑尾切除术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 07:45</span>`,
`<span class='numFont'>${today} 07:58</span>`,
`<span class='numFont'>${today} 08:00</span>`,
`<span class="colorBlue">准点</span>`,
],
[
`<span class='numFont'>002</span>`,
`膝关节置换术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 07:50</span>`,
`<span class='numFont'>${today} 07:59</span>`,
`<span class='numFont'>${today} 08:03</span>`,
`<span class="colorpurple">不准点</span>`,
],
[
`<span class='numFont'>003</span>`,
`白内障手术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 07:45</span>`,
`<span class='numFont'>${today} 07:55</span>`,
`<span class='numFont'>${today} 07:58</span>`,
`<span class="colorBlue">准点</span>`,
],
[
`<span class='numFont'>004</span>`,
`胆囊切除术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 07:30</span>`,
`<span class='numFont'>${today} 07:40</span>`,
`<span class='numFont'>${today} 07:45</span>`,
`<span class="colorBlue">准点</span>`,
],
[
`<span class='numFont'>005</span>`,
`阑尾切除术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 08:25</span>`,
`<span class='numFont'>${today} 08:40</span>`,
`<span class='numFont'>${today} 08:45</span>`,
`<span class="colorpurple">不准点</span>`,
],
[
`<span class='numFont'>006</span>`,
`膝关节置换术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 07:40</span>`,
`<span class='numFont'>${today} 07:49</span>`,
`<span class='numFont'>${today} 07:55</span>`,
`<span class="colorBlue">准点</span>`,
],
[
`<span class='numFont'>007</span>`,
`阑尾切除术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 07:45</span>`,
`<span class='numFont'>${today} 07:55</span>`,
`<span class='numFont'>${today} 07:58</span>`,
`<span class="colorBlue">准点</span>`,
],
[
`<span class='numFont'>008</span>`,
`白内障手术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 07:30</span>`,
`<span class='numFont'>${today} 07:42</span>`,
`<span class='numFont'>${today} 07:53</span>`,
`<span class="colorBlue">准点</span>`,
],
[
`<span class='numFont'>009</span>`,
`胆囊切除术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 08:25</span>`,
`<span class='numFont'>${today} 08:45</span>`,
`<span class='numFont'>${today} 09:00</span>`,
`<span class="colorpurple">不准点</span>`,
],
[
`<span class='numFont'>010</span>`,
`膝关节置换术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 07:15</span>`,
`<span class='numFont'>${today} 07:45</span>`,
`<span class='numFont'>${today} 07:30</span>`,
`<span class="colorBlue">准点</span>`,
],
[
`<span class='numFont'>011</span>`,
`阑尾切除术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 07:30</span>`,
`<span class='numFont'>${today} 07:38</span>`,
`<span class='numFont'>${today} 07:45</span>`,
`<span class="colorBlue">准点</span>`,
],
[
`<span class='numFont'>012</span>`,
`白内障手术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 07:42</span>`,
`<span class='numFont'>${today} 07:50</span>`,
`<span class='numFont'>${today} 07:54</span>`,
`<span class="colorBlue">准点</span>`,
],
[
`<span class='numFont'>013</span>`,
`胆囊切除术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 07:50</span>`,
`<span class='numFont'>${today} 07:53</span>`,
`<span class='numFont'>${today} 07:56</span>`,
`<span class="colorBlue">准点</span>`,
],
[
`<span class='numFont'>014</span>`,
`阑尾切除术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 07:30</span>`,
`<span class='numFont'>${today} 07:39</span>`,
`<span class='numFont'>${today} 07:45</span>`,
`<span class="colorBlue">准点</span>`,
],
[
`<span class='numFont'>015</span>`,
`膝关节置换术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 07:30</span>`,
`<span class='numFont'>${today} 07:00</span>`,
`<span class='numFont'>${today} 07:45</span>`,
`<span class="colorBlue">准点</span>`,
],
[
`<span class='numFont'>016</span>`,
`白内障手术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 07:40</span>`,
`<span class='numFont'>${today} 07:56</span>`,
`<span class='numFont'>${today} 07:58</span>`,
`<span class="colorBlue">准点</span>`,
],
[
`<span class='numFont'>017</span>`,
`胆囊切除术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 07:35</span>`,
`<span class='numFont'>${today} 07:45</span>`,
`<span class='numFont'>${today} 07:53</span>`,
`<span class="colorBlue">准点</span>`,
],
[
`<span class='numFont'>018</span>`,
`阑尾切除术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 07:42</span>`,
`<span class='numFont'>${today} 07:54</span>`,
`<span class='numFont'>${today} 07:59</span>`,
`<span class="colorBlue">准点</span>`,
],
[
`<span class='numFont'>019</span>`,
`膝关节置换术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 07:42</span>`,
`<span class='numFont'>${today} 07:58</span>`,
`<span class='numFont'>${today} 08:00</span>`,
`<span class="colorBlue">准点</span>`,
],
[
`<span class='numFont'>020</span>`,
`白内障手术`,
`<span class="otherDay">择期</span>`,
`<span class='numFont'>${today} 07:20</span>`,
`<span class='numFont'>${today} 07:39</span>`,
`<span class='numFont'>${today} 07:45</span>`,
`<span class="colorBlue">准点</span>`,
],
],
rowNum: 12,
waitTime: 5000,
carousel: 'page',
headerBGC: 'rgba(74, 78, 103, 0.4)',
oddRowBGC: 'rgba(74, 78, 103, 0.15)',
evenRowBGC: 'rgba(74, 78, 103, 0.15)',
headerHeight: '48',
align: ['center', 'center', 'center', 'center', 'center', 'center', 'center'],
columnWidth: [95, 220, 90],
},
};
},
};
</script>
<style lang="scss" scoped>
@import '@/assets/scss/pxtovw.scss';
.rightMiddle {
height: 100%;
background: #011343;
:deep(.dv-border-box-13) {
box-sizing: border-box;
padding: vw(20);
.dv-scroll-board {
height: 100%;
.header-item {
font-size: vw(16);
color: '#aaa';
}
.ceil {
border-bottom: vw(8) solid #011343;
font-size: vw(16);
white-space: nowrap;
}
.row-item {
.colorBlue {
color: #349afc !important;
}
.colorpurple {
color: #a53faf !important;
}
.emergent {
padding: vw(2) vw(10);
color: #03f0b4;
border: 1px solid #03f0b4;
border-radius: 4px;
}
.otherDay {
padding: vw(2) vw(10);
color: #f08503;
border: 1px solid #f08503;
border-radius: 4px;
}
}
}
}
}
</style>

@ -0,0 +1,9 @@
<template>
<div></div>
</template>
<script>
export default {};
</script>
<style></style>

@ -1,47 +0,0 @@
<template>
<dv-border-box-1>
<section class="operation">
<div class="leftBox">
<leftTop></leftTop>
<leftBottom></leftBottom>
</div>
<div class="rightBox">
<rightMiddle></rightMiddle>
</div>
</section>
</dv-border-box-1>
</template>
<script>
import leftTop from './leftTop/index.vue';
import leftBottom from './leftBottom/index.vue';
import rightMiddle from './rightMiddle/index.vue';
export default {
components: {
leftTop,
leftBottom,
rightMiddle,
},
};
</script>
<style lang="scss" scoped>
@import '@/assets/scss/pxtovw.scss';
.operation {
width: 100%;
height: 100%;
padding: vw(20);
box-sizing: border-box;
display: flex;
justify-content: space-between;
.leftBox {
flex-basis: vw(462);
display: flex;
flex-direction: column;
justify-content: space-between;
}
.rightBox {
flex-basis: vw(1326);
}
}
</style>

@ -1,132 +0,0 @@
<template>
<div class="leftBottom">
<dv-border-box-13 class="leftBottom">
<div class="echartsContainer" ref="echartsContainer"></div>
<section class="dataSection">
<span>平均接台时间</span>
</section>
</dv-border-box-13>
</div>
</template>
<script>
import * as echarts from 'echarts';
export default {
data() {
return {
chartOptions: {
series: [
{
type: 'gauge',
radius: '100%',
max: 120,
axisLabel: {
show: false,
},
axisLine: {
lineStyle: {
width: 20,
color: [[1, 'rgba(126, 130, 137, 0.3)']],
},
},
progress: {
show: true,
width: 20,
itemStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{ offset: 0, color: '#03c2fd' },
{ offset: 0.5, color: '#1ed3e5' },
{ offset: 1, color: '#2fded6' },
],
},
},
},
pointer: {
icon: 'rect',
width: 3,
offsetCenter: ['0%', '-40%'],
itemStyle: {
color: 'rgba(139, 230, 253, 1)',
},
},
data: [
{
name: 'itemA',
value: 45,
title: { show: false },
detail: {
offsetCenter: [0, '20%'],
formatter: function (value) {
return '{a|' + value + '}{b|min}';
},
rich: {
a: {
fontSize: 40,
color: '#4AC9FF',
fontFamily: 'DIN-Bold,Microsoft YaHei',
},
b: {
fontSize: 20,
color: '#4AC9FF',
fontFamily: 'DIN-Bold,Microsoft YaHei',
verticalAlign: 'bottom',
},
},
},
},
],
},
],
},
};
},
mounted() {
const chartContainer = this.$refs.echartsContainer;
const chart = echarts.init(chartContainer);
chart.setOption(this.chartOptions);
},
};
</script>
<style lang="scss" scoped>
@import '@/assets/scss/pxtovw.scss';
.leftBottom {
height: vw(380);
background: #011343;
:deep(.dv-border-box-13) {
padding: vw(50) 0;
box-sizing: border-box;
.border-box-content {
display: flex;
flex-direction: column;
justify-content: space-between;
.echartsContainer {
height: vw(252);
}
.dataSection {
width: vw(280);
height: vw(48);
line-height: vw(48);
text-align: center;
font-size: 0;
margin: 0 auto;
span {
display: inline-block;
height: 100%;
width: vw(280);
background-color: rgba(3, 47, 104, 0.6);
font-size: vw(18);
color: #fff;
border-radius: vw(8);
}
}
}
}
}
</style>

@ -1,57 +0,0 @@
<template>
<div class="leftTop">
<dv-border-box-13>
<comGauge class="echartsContainer" :title="'首台准点率'" :nowNum="86"></comGauge>
<section class="dataSection">
<p>手术间数</p>
<span class="numFont gradientText">100</span>
</section>
</dv-border-box-13>
</div>
</template>
<script>
import comGauge from '@/components/comGauge';
export default {
components: {
comGauge,
},
};
</script>
<style lang="scss" scoped>
@import '@/assets/scss/pxtovw.scss';
.leftTop {
height: vw(500);
position: relative;
background-color: #011343;
:deep(.dv-border-box-13) {
padding: vw(60) vw(32);
box-sizing: border-box;
.border-box-content {
display: flex;
flex-direction: column;
justify-content: space-between;
.echartsContainer {
height: vw(252);
}
.dataSection {
width: vw(280);
height: vw(60);
display: flex;
justify-content: space-between;
align-items: center;
background-color: rgba(3, 47, 104, 0.6);
padding: 0 vw(48);
box-sizing: border-box;
font-size: vw(20);
border-radius: vw(8);
margin: 0 auto;
span {
font-size: vw(32);
}
}
}
}
}
</style>

@ -1,255 +0,0 @@
<template>
<div class="rightMiddle">
<dv-border-box-13>
<dv-loading v-if="isLoding">Loading...</dv-loading>
<section v-else ref="echartsContainer"></section>
</dv-border-box-13>
</div>
</template>
<script>
import * as echarts from 'echarts';
import dayjs from 'dayjs';
export default {
data() {
return {
isLoding: false,
chartOptions: {
grid: {
width: '92%',
height: '88%',
left: '6%',
top: '10%',
},
legend: {
data: [
{
name: '入手术室',
icon: 'rect',
itemStyle: {
color: '#92CC76',
},
},
{
name: '开始手术',
icon: 'rect',
itemStyle: {
color: '#EF6666',
},
},
{
name: '手术结束',
icon: 'rect',
itemStyle: {
color: '#FAC858',
},
},
{
name: '出手术室',
icon: 'rect',
itemStyle: {
color: '#5470C6',
},
},
],
selectedMode: 'none',
top: 10,
right: 1,
textStyle: {
color: '#fff',
fontSize: 14,
fontFamily: 'DIN-Bold,Microsoft YaHei',
},
},
xAxis: {
type: 'time',
position: 'top',
splitNumber: 24,
axisLabel: {
color: '#B7BDBF',
fontSize: 12,
margin: 16,
formatter: function (value) {
var date = new Date(value);
var hours = date.getHours();
var minutes = date.getMinutes();
if (hours === 0 && minutes === 0) {
return '00:00';
} else {
return (hours < 10 ? '0' : '') + hours + ':' + (minutes < 10 ? '0' : '') + minutes;
}
},
},
},
yAxis: {
type: 'category',
data: [],
axisLabel: {
color: '#B7BDBF',
fontSize: 12,
margin: 16,
fontFamily: 'DIN-Bold,Microsoft YaHei',
},
},
series: [],
},
};
},
methods: {
initData() {
//
const currentDate = dayjs().format('YYYY-MM-DD');
const hours = new Date().getHours();
const detailMin = dayjs().subtract(1, 'minute').format('HH:mm:00');
const sevenMinutesAgo = dayjs().subtract(8, 'minute').format('HH:mm:00');
this.chartOptions.xAxis.min = `${currentDate} 08:00:00`;
this.chartOptions.xAxis.max = `${dayjs().add(1, 'day').format('YYYY-MM-DD')} 07:00:00`;
//
const num = 20;
//
const timeArr = [];
//
for (let index = num; index >= 1; index--) {
this.chartOptions.yAxis.data.push(`手术间${String(index).padStart(3, '0')}`);
const isUseArr = this.getUseTime();
for (let j = 1; j < isUseArr.length; j += 2) {
if (isUseArr[j] <= hours) {
timeArr.push({
startTime: `${currentDate} ${isUseArr[j - 1]}:00:00`,
endTime: `${currentDate} ${isUseArr[j]}:00:00`,
yValue: index - 1,
color: '#5470C6',
diff: dayjs(`${currentDate} ${isUseArr[j]}:00:00`).diff(
dayjs(`${currentDate} ${isUseArr[j - 1]}:00:00`),
'minute'
),
name: '出手术室',
});
} else if (isUseArr[j] > hours && isUseArr[j - 1] < hours) {
if (Math.random() > 0.5) {
timeArr.push({
startTime: `${currentDate} ${isUseArr[j - 1]}:00:00`,
endTime: `${currentDate} ${detailMin}`,
yValue: index - 1,
color: '#EF6666',
diff: dayjs(`${currentDate} ${detailMin}`).diff(
dayjs(`${currentDate} ${isUseArr[j - 1]}:00:00`),
'minute'
),
name: '开始手术',
});
} else {
timeArr.push({
startTime: `${currentDate} ${isUseArr[j - 1]}:00:00`,
endTime: `${currentDate} ${detailMin}`,
yValue: index - 1,
color: '#FAC858',
diff: dayjs(`${currentDate} ${detailMin}`).diff(
dayjs(`${currentDate} ${isUseArr[j - 1]}:00:00`),
'minute'
),
name: '手术结束',
});
}
} else if (isUseArr[j] > hours && isUseArr[j - 1] == hours) {
timeArr.push({
startTime: `${currentDate} ${sevenMinutesAgo}`,
endTime: `${currentDate} ${detailMin}`,
yValue: index - 1,
color: '#92CC76',
diff: '7',
name: '入手术室',
});
}
}
}
// series
this.chartOptions.series = this.seriesData(timeArr);
},
seriesData(data) {
// const obj = {};
const res = data.map(function (item) {
// obj[item.name] = item.color;
return {
type: 'custom',
name: item.name,
renderItem: function (params, api) {
var xStart = api.coord([item.startTime, item.yValue]);
var xEnd = api.coord([item.endTime, item.yValue]);
var textX = (xStart[0] + xEnd[0]) / 2;
var textY = xStart[1] - 20;
return {
type: 'group',
children: [
{
type: 'line',
shape: {
x1: xStart[0],
y1: xStart[1],
x2: xEnd[0],
y2: xEnd[1],
},
style: {
stroke: item.color,
lineWidth: 8,
},
},
{
type: 'text',
position: [textX, textY],
style: {
text: `${item.diff} min`,
fill: '#B7BDBF',
textSize: '12px',
textAlign: 'center',
},
},
],
};
},
data: [item],
};
});
// console.log(obj);
// console.log(JSON.stringify(res));
return res;
},
getUseTime() {
// 使
function getRandomUniqueValues(min, max, count) {
const values = new Set();
while (values.size < count) {
values.add(Math.floor(Math.random() * (max - min + 1)) + min);
}
return Array.from(values);
}
const numValues = Math.floor(Math.random() * 3) + 8;
const randomValues = getRandomUniqueValues(8, 24, numValues % 2 ? numValues + 1 : numValues);
return randomValues.sort((a, b) => {
return a - b;
});
},
},
mounted() {
const chartContainer = this.$refs.echartsContainer;
const chart = echarts.init(chartContainer);
this.initData();
chart.setOption(this.chartOptions);
},
};
</script>
<style lang="scss" scoped>
.rightMiddle {
height: 100%;
background-color: #011343;
:deep(.dv-border-box-13) {
padding: 2vh;
box-sizing: border-box;
section {
height: 100%;
}
}
}
</style>

@ -0,0 +1,9 @@
<template>
<div></div>
</template>
<script>
export default {};
</script>
<style></style>

@ -1,190 +0,0 @@
<template>
<section class="scheduling">
<dv-border-box-11 :title="title" :titleWidth="titleWidth">
<dv-scroll-board :config="config" />
</dv-border-box-11>
</section>
</template>
<script>
export default {
data() {
return {
title: '白班 手术间78 护理人员135',
titleWidth: 380,
config: {
data: [
[
`<span class='numFont'>001 陈宇、孙晨、邓一帆</span>`,
`<span class='numFont'>002 朱佳琪、邓一帆、唐芳华</span>`,
`<span class='numFont'>003 杨华、朱佳琪、唐芳华</span>`,
],
[
`<span class='numFont'>004 杨华、朱佳琪、唐芳华</span>`,
`<span class='numFont'>005 邓一帆、朱佳琪、孙晨</span>`,
`<span class='numFont'>006 杨华、唐芳华、孙晨</span>`,
],
[
`<span class='numFont'>007 邓一帆、陈宇、唐芳华</span>`,
`<span class='numFont'>008 杨华、邓一帆、孙晨</span>`,
`<span class='numFont'>009 朱佳琪、陈宇、孙晨</span>`,
],
[
`<span class='numFont'>010 邓一帆、朱佳琪、陈宇</span>`,
`<span class='numFont'>011 朱佳琪、邓一帆、孙晨</span>`,
`<span class='numFont'>012 朱佳琪、陈宇、邓一帆</span>`,
],
[
`<span class='numFont'>013 陈宇、孙晨、朱佳琪</span>`,
`<span class='numFont'>014 朱佳琪、陈宇、唐芳华</span>`,
`<span class='numFont'>015 邓一帆、唐芳华、孙晨</span>`,
],
[
`<span class='numFont'>016 杨华、唐芳华、陈宇</span>`,
`<span class='numFont'>017 朱佳琪、孙晨、唐芳华</span>`,
`<span class='numFont'>018 朱佳琪、唐芳华、孙晨</span>`,
],
[
`<span class='numFont'>019 邓一帆、朱佳琪、陈宇</span>`,
`<span class='numFont'>020 朱佳琪、孙晨、唐芳华</span>`,
`<span class='numFont'>021 陈宇、孙晨、朱佳琪</span>`,
],
[
`<span class='numFont'>022 邓一帆、朱佳琪、孙晨</span>`,
`<span class='numFont'>023 邓一帆、陈宇、孙晨</span>`,
`<span class='numFont'>024 邓一帆、唐芳华、孙晨</span>`,
],
[
`<span class='numFont'>025 杨华、朱佳琪、唐芳华</span>`,
`<span class='numFont'>026 邓一帆、孙晨、陈宇</span>`,
`<span class='numFont'>027 杨华、唐芳华、孙晨</span>`,
],
[
`<span class='numFont'>028 邓一帆、朱佳琪、孙晨</span>`,
`<span class='numFont'>029 朱佳琪、唐芳华、陈宇</span>`,
`<span class='numFont'>030 邓一帆、孙晨、朱佳琪</span>`,
],
[
`<span class='numFont'>031 朱佳琪、邓一帆、唐芳华</span>`,
`<span class='numFont'>032 陈宇、朱佳琪、邓一帆</span>`,
`<span class='numFont'>033 邓一帆、孙晨、唐芳华</span>`,
],
[
`<span class='numFont'>034 邓一帆、朱佳琪、孙晨</span>`,
`<span class='numFont'>035 杨华、朱佳琪、唐芳华</span>`,
`<span class='numFont'>036 邓一帆、孙晨、陈宇</span>`,
],
[
`<span class='numFont'>037 杨华、孙晨、邓一帆</span>`,
`<span class='numFont'>038 朱佳琪、陈宇、唐芳华</span>`,
`<span class='numFont'>039 邓一帆、唐芳华、孙晨</span>`,
],
[
`<span class='numFont'>040 邓一帆、孙晨、唐芳华</span>`,
`<span class='numFont'>041 邓一帆、朱佳琪、孙晨</span>`,
`<span class='numFont'>042 杨华、唐芳华、孙晨</span>`,
],
[
`<span class='numFont'>043 邓一帆、唐芳华、陈宇</span>`,
`<span class='numFont'>044 陈宇、朱佳琪、孙晨</span>`,
`<span class='numFont'>045 朱佳琪、陈宇、邓一帆</span>`,
],
[
`<span class='numFont'>046 邓一帆、孙晨、陈宇</span>`,
`<span class='numFont'>047 杨华、孙晨、朱佳琪</span>`,
`<span class='numFont'>048 陈宇、邓一帆、唐芳华</span>`,
],
[
`<span class='numFont'>049 陈宇、孙晨、朱佳琪</span>`,
`<span class='numFont'>050 陈宇、邓一帆、陈宇</span>`,
`<span class='numFont'>051 邓一帆、陈宇、孙晨</span>`,
],
[
`<span class='numFont'>052 朱佳琪、唐芳华、邓一帆</span>`,
`<span class='numFont'>053 邓一帆、朱佳琪、孙晨</span>`,
`<span class='numFont'>054 邓一帆、孙晨、唐芳华</span>`,
],
[
`<span class='numFont'>055 邓一帆、孙晨、朱佳琪</span>`,
`<span class='numFont'>056 邓一帆、唐芳华、朱佳琪</span>`,
`<span class='numFont'>057 邓一帆、孙晨、陈宇</span>`,
],
[
`<span class='numFont'>058 杨华、唐芳华、孙晨</span>`,
`<span class='numFont'>059 邓一帆、陈宇、孙晨</span>`,
`<span class='numFont'>060 邓一帆、朱佳琪、唐芳华</span>`,
],
[
`<span class='numFont'>061 杨华、唐芳华、朱佳琪</span>`,
`<span class='numFont'>062 朱佳琪、邓一帆、陈宇</span>`,
`<span class='numFont'>063 邓一帆、朱佳琪、孙晨</span>`,
],
[
`<span class='numFont'>064 陈宇、孙晨、邓一帆</span>`,
`<span class='numFont'>065 邓一帆、唐芳华、陈宇</span>`,
`<span class='numFont'>066 邓一帆、孙晨、唐芳华</span>`,
],
[
`<span class='numFont'>067 朱佳琪、唐芳华、孙晨</span>`,
`<span class='numFont'>068 陈宇、朱佳琪、唐芳华</span>`,
`<span class='numFont'>069 邓一帆、唐芳华、朱佳琪</span>`,
],
[
`<span class='numFont'>070 陈宇、孙晨、唐芳华</span>`,
`<span class='numFont'>071 杨华、孙晨、朱佳琪</span>`,
`<span class='numFont'>072 邓一帆、陈宇、朱佳琪</span>`,
],
[
`<span class='numFont'>073 朱佳琪、唐芳华、孙晨</span>`,
`<span class='numFont'>074 邓一帆、孙晨、唐芳华</span>`,
`<span class='numFont'>075 邓一帆、孙晨、朱佳琪</span>`,
],
[
`<span class='numFont'>076 邓一帆、唐芳华、朱佳琪</span>`,
`<span class='numFont'>077 陈宇、邓一帆、唐芳华</span>`,
`<span class='numFont'>078 陈宇、朱佳琪、朱佳琪</span>`,
],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
],
rowNum: 12,
waitTime: 5000,
carousel: 'page',
oddRowBGC: 'rgba(74, 78, 103, 0.15)',
evenRowBGC: 'rgba(74, 78, 103, 0.15)',
headerHeight: '48',
},
};
},
};
</script>
<style lang="scss" scoped>
@import '@/assets/scss/pxtovw.scss';
.scheduling {
width: 100%;
height: 100%;
background: #011343;
:deep(.dv-border-box-11) {
height: 100%;
.dv-scroll-board {
padding: 3% 1% 0;
box-sizing: border-box;
height: 92%;
.ceil {
border-bottom: vw(8) solid #011343;
font-size: vw(16);
white-space: nowrap;
}
}
}
}
</style>

@ -1,58 +0,0 @@
<template>
<div class="rightMiddle">
<dv-border-box-13>
<dv-loading v-if="isLoding">Loading...</dv-loading>
<section v-else ref="echartsContainer"></section>
</dv-border-box-13>
</div>
</template>
<script>
import * as echarts from 'echarts';
export default {
data() {
return {
isLoding: false,
chartOptions: {
legend: {},
tooltip: {},
dataset: {
source: [
['product', '2012', '2013', '2014', '2015'],
['Matcha Latte', 41.1, 30.4, 65.1, 53.3],
['Milk Tea', 86.5, 92.1, 85.7, 83.1],
['Cheese Cocoa', 24.1, 67.2, 79.5, 86.4],
],
},
xAxis: { type: 'category' },
yAxis: {},
series: [
{ type: 'bar', encode: { x: 'product', y: '2012' } },
{ type: 'bar', encode: { x: 'product', y: '2013' } },
{ type: 'bar', encode: { x: 'product', y: '2014' } },
{ type: 'bar', encode: { x: 'product', y: '2015' } },
],
},
};
},
mounted() {
const chartContainer = this.$refs.echartsContainer;
const chart = echarts.init(chartContainer);
chart.setOption(this.chartOptions);
},
};
</script>
<style lang="scss" scoped>
.rightMiddle {
width: 100%;
height: 100%;
:deep(.dv-border-box-13) {
padding: 2vh;
box-sizing: border-box;
section {
height: 100%;
}
}
}
</style>

@ -1,5 +1,4 @@
const { defineConfig } = require('@vue/cli-service'); const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({ module.exports = defineConfig({
transpileDependencies: true, transpileDependencies: true
publicPath: './', })
});

Loading…
Cancel
Save