Browse Source

信息登录页面

master
邓宏 2 years ago
parent
commit
9027088826
  1. 2
      package.json
  2. 8
      pnpm-lock.yaml
  3. BIN
      src/assets/img/home/content_title_icon.png
  4. BIN
      src/assets/img/home/head_bg.png
  5. BIN
      src/assets/img/home/head_title_icon.png
  6. BIN
      src/assets/img/logo.png
  7. 2
      src/assets/svg/set.svg
  8. 53
      src/components/container_web.vue
  9. 75
      src/components/dvLoading.vue
  10. 4
      src/components/index.js
  11. 9
      src/main.js
  12. 4
      src/router/index.js
  13. 19
      src/store/modules/data.js
  14. 103
      src/views/home.vue
  15. 63
      src/views/info.vue

2
package.json

@ -8,7 +8,7 @@
"build": "vite build"
},
"dependencies": {
"element-plus": "^2.2.26",
"element-plus": "^2.2.27",
"vite-plugin-require-transform": "^1.0.4",
"vue": "^3.2.45",
"vue-router": "^4.1.6",

8
pnpm-lock.yaml

@ -4,7 +4,7 @@ specifiers:
'@vitejs/plugin-vue': ^2.3.3
'@vitejs/plugin-vue-jsx': ^1.3.10
black-knight: 1.3.25
element-plus: ^2.2.26
element-plus: ^2.2.27
less: ^4.1.3
less-loader: ~7.3.0
sass-resources-loader: ^2.2.5
@ -16,7 +16,7 @@ specifiers:
vuex: ^4.1.0
dependencies:
element-plus: 2.2.26_vue@3.2.45
element-plus: 2.2.27_vue@3.2.45
vite-plugin-require-transform: 1.0.4
vue: 3.2.45
vue-router: 4.1.6_vue@3.2.45
@ -887,8 +887,8 @@ packages:
resolution: {integrity: sha512-uxMa/Dt7PQsLBVXwH+t6JvpHJnrsYBaxWKi/J6HE+/nBtoHENhwBoNkgkm226/Kfxeg0z1eMQLBRPPKcDH8xWA==}
dev: true
/element-plus/2.2.26_vue@3.2.45:
resolution: {integrity: sha512-O/rdY5m9DkclpVg8r3GynyqCunm7MxSR142xSsjrZA77bi7bcwA3SIy6SPEDqHi5R4KqgkGYgKSp4Q4e3irbYg==}
/element-plus/2.2.27_vue@3.2.45:
resolution: {integrity: sha512-P04HDOZBYDdvlYuleuCZRULzAc5xJVOBfLDK9xWxVo0vyo8ntdaXS5sTU+/76vrNzuO3FhLn9kvrsbiJEVa1jg==}
peerDependencies:
vue: ^3.2.0
dependencies:

BIN
src/assets/img/home/content_title_icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
src/assets/img/home/head_bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 KiB

BIN
src/assets/img/home/head_title_icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
src/assets/img/logo.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

2
src/assets/svg/set.svg

@ -1,2 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1650529154141" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1010" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
</style></defs><path d="M539.16672 406.15936c-55.52128 0-100.6592 45.14304-100.6592 100.6592 0 55.52128 45.13792 100.66432 100.6592 100.66432s100.66432-45.14304 100.66432-100.66432c0-55.51616-45.14304-100.6592-100.66432-100.6592z" p-id="1011"></path><path d="M872.05888 444.9024c-2.41152-14.12096-14.12096-27.40224-27.76064-31.62112-13.63968-4.34688-55.52128-21.36576-68.19328-43.33056-12.672-21.96992-6.51776-66.74432-3.3792-80.62976 3.26144-14.3616-3.01568-31.2576-14.848-40.06912l-102.8352-59.62752-2.05312-0.96768c-13.63968-6.03648-31.38048-3.01568-42.24512 7.12192-10.37824 9.65632-45.98272 37.41696-71.57248 37.41696-25.344 0-61.07136-27.76064-71.57248-37.41696-10.85952-10.1376-28.60544-13.1584-42.24-7.12192L322.51392 248.04352l-1.93024 1.32608c-11.95008 8.81152-18.10432 25.58464-14.84288 40.06912 3.26144 13.88032 9.41568 58.54208-3.3792 80.62976-12.672 22.08768-54.5536 39.10656-68.19328 43.33056-13.63968 4.224-25.344 17.50016-27.76064 31.62112-0.24064 1.57184-6.15424 36.33152-6.15424 61.91616 0 25.58976 5.9136 60.47232 6.15424 61.92128 2.41664 14.12096 14.12096 27.39712 27.76064 31.62112 13.63968 4.34688 55.52128 21.36576 68.19328 43.33056 12.67712 21.96992 6.51776 66.74432 3.3792 80.62464-3.26144 14.36672 3.01568 31.26272 14.84288 40.07424l102.8352 59.62752 2.05312 0.96768c13.63968 6.03648 31.38048 3.0208 42.24512-7.12192 10.38336-9.65632 45.98784-37.41696 71.57248-37.41696 25.34912 0 61.07648 27.76064 71.57248 37.41696 7.12192 6.51776 17.14176 10.14272 27.03872 10.14272a41.0624 41.0624 0 0 0 15.2064-3.0208l102.8352-59.38176 1.93024-1.32608c11.95008-8.81152 18.10432-25.70752 14.848-40.07424-3.25632-13.88032-9.41568-58.53696 3.3792-80.62464 12.672-22.08768 54.5536-39.10656 68.19328-43.33056 13.63968-4.224 25.34912-17.50016 27.76064-31.62112 0.24064-1.57184 6.15936-36.33152 6.15936-61.92128 0-25.58976-5.9136-60.47232-6.15424-61.92128z m-332.89216 204.46208c-78.57152 0-142.42304-63.9744-142.42304-142.54592 0-78.57152 63.9744-142.54592 142.54592-142.54592 78.57664 0 142.42304 63.9744 142.42304 142.54592 0 78.57664-63.96928 142.54592-142.54592 142.54592z" p-id="1012"></path></svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

53
src/components/container_web.vue

@ -0,0 +1,53 @@
<style lang="less" scoped>
.dv-loading{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0,0,0,0.7);
z-index: 99999;
}
.el-scrollbar.container:deep{
transform-origin: left top;
transform:scale(var(--p,1));
height:calc(100%/var(--p,1));
width:calc((100%)/var(--p,1));
background:#fff;
&>.el-scrollbar__wrap{
&>.el-scrollbar__view{
min-width:max-content;
max-width: 1920px;
margin: auto;
min-height:100%;
background:#f2f5fc;
}
}
&>.el-scrollbar__bar.is-vertical{
width:10px;
}
}
</style>
<template>
<el-scrollbar class="container" viewClass="d-content" :style="{'--p':multiple}" ref="scroll">
<dv-loading v-if="loading" style="color:#fff;">加载中...</dv-loading>
<slot/>
</el-scrollbar>
</template>
<script setup>
import { computed, inject, ref, watch, watchEffect } from 'vue'
var {getters}=inject("store")
function log(e){
console.log(e,'----e--------')
}
var scroll=ref()
var multiple=ref(Math.min(1920,screen.availWidth)/1920)
var loading=computed(()=>getters['data/loading'])
defineExpose({
scroll
})
</script>

75
src/components/dvLoading.vue

@ -0,0 +1,75 @@
<style lang="less" scoped>
.dv-loading {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.dv-loading .loading-tip {
font-size: 15px;
}
</style>
<template>
<div class="dv-loading">
<svg width="50px" height="50px">
<circle
cx="25"
cy="25"
r="20"
fill="transparent"
stroke-width="3"
stroke-dasharray="31.415, 31.415"
stroke="#02bcfe"
stroke-linecap="round"
>
<animateTransform
attributeName="transform"
type="rotate"
values="0, 25 25;360, 25 25"
dur="1.5s"
repeatCount="indefinite"
/>
<animate
attributeName="stroke"
values="#02bcfe;#3be6cb;#02bcfe"
dur="3s"
repeatCount="indefinite"
/>
</circle>
<circle
cx="25"
cy="25"
r="10"
fill="transparent"
stroke-width="3"
stroke-dasharray="15.7, 15.7"
stroke="#3be6cb"
stroke-linecap="round"
>
<animateTransform
attributeName="transform"
type="rotate"
values="360, 25 25;0, 25 25"
dur="1.5s"
repeatCount="indefinite"
/>
<animate
attributeName="stroke"
values="#3be6cb;#02bcfe;#3be6cb"
dur="3s"
repeatCount="indefinite"
/>
</circle>
</svg>
<div class="loading-tip">
<slot />
</div>
</div>
</template>
<script setup>
</script>

4
src/components/index.js

@ -1,7 +1,11 @@
import svgIcon from './svg-icon.vue'
import containerWeb from './container_web.vue'
import dvLoading from './dvLoading.vue'
const components={
svgIcon,
containerWeb,
dvLoading,
}
export default{

9
src/main.js

@ -6,9 +6,8 @@ import regComponents from '@/components'
import {defineObj} from 'black-knight/lib/config/custom'
import {provise} from 'black-knight/lib/config/tools'
import ElementPlus from 'element-plus'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
import "element-plus/dist/index.css"
console.log(import.meta.env,'--------------import------')
console.log(defineObj,'----defineObj---')
import "@/assets/style/index.less"
import vue3VideoPlay from 'vue3-video-play'
@ -18,9 +17,7 @@ var app=createApp(App)
app.use(router)
.use(store)
.use(regComponents)
.use(ElementPlus)
.use(ElementPlus,{locale:zhCn})
.use(vue3VideoPlay)
.provide('event',new provise())
.mount('#app')
app.config.globalProperties.foo='===foo====' // 全局配置属性
.mount('#app')

4
src/router/index.js

@ -6,7 +6,9 @@ export const menu = [
{
path:"/",
component:()=>import("@/views/home.vue"),
children:[]
children:[
{path:"/info", component:()=>import("@/views/info.vue")}
]
},
];
const router = createRouter({

19
src/store/modules/data.js

@ -1,16 +1,25 @@
var loadNum = 0
export default {
namespaced:true,
state:{
menu:{},
loading:false,
},
getters:{
menuName:state=>Object.values(state.menu).map(v=>v.name)
loading: state=>state.loading,
},
mutations:{
setMenu(state, val){
state.menu[val.key]=val.item
}
setLoading(){
if(val){
loadNum++;
state.loading = true
} else {
--loadNum;
if(loadNum<=0){
state.loading = false
}
}
},
},
actions:{

103
src/views/home.vue

@ -1,8 +1,107 @@
<style lang="less" scoped>
.container:deep{
.d-content{
display: flex;
flex-direction: column;
}
}
.head{
height:628px;
background-image:url(@/assets/img/home/head_bg.png);
background-size:cover;
background-position:center;
width:calc(100% + 1px);
transform: translate(-1px,0px);
&>.title{
background:linear-gradient(rgba(5, 25, 73, 0.3),rgba(0, 23, 63, 0.3));
width:100%;
&>div{
margin:auto;
height:80px;
display: flex;
max-width:1200px+100px;
align-items: center;
img{
width:40px;
height:40px;
}
.name{
font-weight: bold;
color:#fff;
font-size:36px;
}
.btns{
margin-left:auto;
display: flex;
align-items: center;
span{
color:#fff;
font-size:18px;
padding:10px 10px;
min-width:100px;
cursor: pointer;
&:hover{
opacity: 0.7;
}
}
}
}
}
&>div.content{
max-width:1200px+100px;
margin:auto;
&>.btn{
display: inline-block;
height:60px;
line-height: 60px;
text-align: center;
width:280px;
background:#0169D2;
border-radius: 5px;
color:#fff;
font-size:22px;
margin-top:82px;
}
}
}
.foot{
margin-top:auto;
height:120px;
background:#010D2B;
display: flex;
align-items: center;
justify-content: center;
span{
color:#fff;
}
}
</style>
<template>
<container-web>
<div class="head">
<div class="title">
<div>
<img src="@/assets/img/home/head_title_icon.png"/>
<span class="name">细胞功能优选分析系统</span>
<div class="btns">
<span>评价指标</span>
<span>细胞种类</span>
<span>分析结果</span>
<span>CN</span>
</div>
</div>
</div>
<div class="content">
<div style="margin:84px 0 74px 0;font-weight: bold;color: #fff;font-size: 72px;text-shadow: 5px 5px rgb(0,25,67,0.5);">细胞优选功能数据分析系统</div>
<div style="color: #fff;font-size: 20px;width: 665px;line-height: 30px;">欢迎使用细胞优选功能数据分析系统该系统可基于多维度指标对细胞增殖能力再生修复能力免疫调控能力进行综合评估目前支持针对多种干细胞及免疫细胞进行分析快来试试吧</div>
<span class="btn">立即使用>></span>
</div>
</div>
<router-view />
<div class="foot">
<span>若有任何疑问请随时联系本课题组<span style="color:#0169D2;">E-mai</span>l us.<span style="width:44px;display: inline-block;"/>版权所有 © 昆明市延安医院 · 中心实验室</span>
</div>
</container-web>
</template>
<script setup>
import { inject, onMounted, onUnmounted, ref } from 'vue'

63
src/views/info.vue

@ -0,0 +1,63 @@
<style lang="less" scoped>
.title{
justify-content: center;
display: flex;
align-items: center;
color:#333;
font-weight: bold;
font-size:30px;
margin:30px 0;
img{
width:26px;
height:26px;
margin-right:10px;
}
}
.card{
background:#fff;
width:1200px;
padding:30px;
border-radius: 8px;
margin:auto auto 100px auto;
}
</style>
<template>
<div class="title"><img src="@/assets/img/home/content_title_icon.png"/>细胞基础信息登记</div>
<div class="card">
<el-form label-width="130px" label-position="right">
<el-row>
<el-col :span="24">
<el-form-item label="细胞编号">
<el-input placeholder="请输入"/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="物种(Speices)">
<el-select placeholder="请选择" style="width:100%;"></el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="细胞类型(cell type)">
<el-select placeholder="请选择" style="width:100%;"></el-select>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item label-width="10px">
<el-select placeholder="请选择" style="width:100%;"></el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注">
<el-input type="textarea" style="width:100%;" v-model="demo" placeholder="请输入备注内容" :rows="3"/>
</el-form-item>
</el-col>
</el-row>
<el-button color="#0169D2" style="margin:auto;display:flex;">录入参数</el-button>
</el-form>
</div>
</template>
<script setup>
import { ref } from "vue";
var demo=ref('')
</script>
Loading…
Cancel
Save