@ -0,0 +1,29 @@ |
|||
import request from '/@/utils/request'; |
|||
|
|||
export function getList(api, data) { |
|||
return request({ |
|||
url: `/api/${api}/getList`, |
|||
method: 'post', |
|||
data, |
|||
}); |
|||
} |
|||
export function add(api, data) { |
|||
return request({ |
|||
url: `/api/${api}/add`, |
|||
method: 'post', |
|||
data, |
|||
}); |
|||
} |
|||
export function update(api, data) { |
|||
return request({ |
|||
url: `/api/${api}/update`, |
|||
method: 'post', |
|||
data, |
|||
}); |
|||
} |
|||
export function del(api, id) { |
|||
return request({ |
|||
url: `/api/${api}/delete/${id}`, |
|||
method: 'post', |
|||
}); |
|||
} |
@ -0,0 +1,28 @@ |
|||
import request from '/@/utils/request'; |
|||
// import type { ResultData } from './common';
|
|||
export function getDeviceInfo() { |
|||
return request({ |
|||
baseURL: 'http://39.108.191.53:8089', |
|||
url: '/api/v1/device?page=1&limit=20', |
|||
method: 'get', |
|||
}); |
|||
} |
|||
export function getEZUIKitToken(data) { |
|||
return request({ |
|||
baseURL: 'https://open.ys7.com', |
|||
url: '/api/lapp/token/get', |
|||
headers: { |
|||
'Content-Type': 'application/x-www-form-urlencoded', |
|||
}, |
|||
method: 'post', |
|||
data, |
|||
}); |
|||
} |
|||
// export function list(params: any) {
|
|||
// return request({
|
|||
// eslint-disable-next-line no-irregular-whitespace
|
|||
// url: "/list",
|
|||
// method: "get",
|
|||
// params,
|
|||
// });
|
|||
// }
|
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 670 KiB |
After Width: | Height: | Size: 918 KiB |
After Width: | Height: | Size: 302 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 2.4 MiB |
@ -0,0 +1,40 @@ |
|||
DS-Font's TrueType Fonts |
|||
Font name: DS-Digital (Normal, Bold, Italic, Bold Italic), Version 1.0 |
|||
Author: Dusit Supasawat |
|||
Web Site: http://ds-font.hypermart.net |
|||
Contact me: Dusit Supasawat, 325/38 Suksawat32 Ratburana Bangkok Thailand 10140 |
|||
Email address: dusit@mailcity.com |
|||
|
|||
Thanks for trying! We hope you really enjoy this my typeface. This font is |
|||
distributed as shareware. You can use this font for a long time as you want. |
|||
After all, when you think this font can be usefulness for you. You can send |
|||
me some money, that would be way cool. |
|||
|
|||
I'm only asking $20 US shareware fee per this typeface for personal use. |
|||
And $45 US is the usual amount per this typeface for commercial use. |
|||
|
|||
Distribution: You are free to distribute this archive so long as this text |
|||
file is distributed with the archive, the font file have not been modified, |
|||
and it is understood that the font's copyright remains with the original |
|||
author (Dusit Supasawat). |
|||
|
|||
To register send your payment to: |
|||
|
|||
Dusit Supasawat |
|||
325/38 Suksawat32 Ratburana |
|||
Bangkok Thailand 10140 |
|||
|
|||
And fill out something as this order form, and send it in with your payment. |
|||
|
|||
Font name:_________________________________________ |
|||
Your information |
|||
Name:______________________________________________ |
|||
Address:___________________________________________ |
|||
City, State : _____________________________________ |
|||
Zip Code:__________________________________________ |
|||
Country:___________________________________________ |
|||
E-MAIL address:____________________________________ |
|||
|
|||
|
|||
You will receive fonts which you order by Email after registration. These fonts |
|||
will be generated for you by specify your name in font information. |
Before Width: | Height: | Size: 444 KiB After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 268 KiB |
Before Width: | Height: | Size: 399 KiB After Width: | Height: | Size: 27 KiB |
@ -0,0 +1,154 @@ |
|||
<template> |
|||
<div class="sys-menu-container"> |
|||
<el-dialog v-model="state.isShowDialog" draggable :close-on-click-modal="false" width="500px"> |
|||
<template #header> |
|||
<div style="color: #fff"> |
|||
<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon> |
|||
<span> {{ props.title }} </span> |
|||
</div> |
|||
</template> |
|||
<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="auto"> |
|||
<el-row :gutter="35"> |
|||
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
|||
<el-form-item label="客户名称" prop="name" :rules="[{ required: true, message: '客户名称不能为空', trigger: 'blur' }]"> |
|||
<el-input v-model="state.ruleForm.name" placeholder="客户名称" clearable /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
|||
<el-form-item label="客户电话" prop="phone" :rules="[{ required: true, message: '客户电话不能为空', trigger: 'blur' }]"> |
|||
<el-input v-model="state.ruleForm.phone" placeholder="客户电话" clearable /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
|||
<el-form-item label="性别" prop="isMale" :rules="[{ required: true, message: '性别不能为空', trigger: 'blur' }]"> |
|||
<el-radio-group v-model="state.ruleForm.isMale"> |
|||
<el-radio :value="false">男</el-radio> |
|||
<el-radio :value="true">女</el-radio> |
|||
</el-radio-group> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
|||
<el-form-item label="身份证号"> |
|||
<el-input v-model="state.ruleForm.idCard" placeholder="身份证号" clearable /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
|||
<el-form-item label="备注"> |
|||
<el-input v-model="state.ruleForm.remark" placeholder="请输入备注内容" clearable type="textarea" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
|||
<el-form-item label="个人形象照"> |
|||
<el-upload |
|||
class="avatar-uploader" |
|||
:action="baseUrl+'/api/sysFile/uploadFile'" |
|||
:show-file-list="false" |
|||
:headers="{Authorization: `Bearer ${state.token}`}" |
|||
:on-success="handleAvatarSuccess" |
|||
> |
|||
<img v-if="state.ruleForm.imageUrl" :src="state.ruleForm.imageUrl" class="avatar" /> |
|||
<el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon> |
|||
</el-upload> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
|||
<el-form-item label="声音"> |
|||
<el-upload |
|||
v-model:file-list="fileList" |
|||
class="upload-demo" |
|||
:action="baseUrl+'/api/sysFile/uploadFile'" |
|||
multiple |
|||
:headers="{Authorization: `Bearer ${state.token}`}" |
|||
:on-success="handleSuccess" |
|||
:on-remove="handleRemove" |
|||
:limit="1" |
|||
> |
|||
<el-button type="primary">点击上传</el-button> |
|||
</el-upload> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
<template #footer> |
|||
<span class="dialog-footer"> |
|||
<el-button @click="cancel">取 消</el-button> |
|||
<el-button type="primary" @click="submit">确 定</el-button> |
|||
</span> |
|||
</template> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<script lang="ts" setup name="sysEdit"> |
|||
import { reactive, ref } from 'vue'; |
|||
import { add, update } from '/@/api/api'; |
|||
import type { UploadProps, UploadUserFile } from 'element-plus' |
|||
import { Plus } from '@element-plus/icons-vue' |
|||
import { Local } from '/@/utils/storage'; |
|||
|
|||
const props = defineProps({ |
|||
title: String, |
|||
}); |
|||
const baseUrl = window.__env__.VITE_API_URL |
|||
const fileList = ref<UploadUserFile[]>([]) |
|||
const emits = defineEmits(['handleQuery']); |
|||
const ruleFormRef = ref(); |
|||
const state = reactive({ |
|||
isShowDialog: false, |
|||
dialogUploadVisible: false, |
|||
ruleForm: {} as any, |
|||
token: Local.get('access-token') |
|||
}); |
|||
|
|||
// 打开弹窗 |
|||
const openDialog = (row: any) => { |
|||
state.ruleForm = JSON.parse(JSON.stringify(row)); |
|||
state.isShowDialog = true; |
|||
ruleFormRef.value?.resetFields(); |
|||
}; |
|||
const handleRemove: UploadProps['onRemove'] = (file, uploadFiles) => { |
|||
console.log(file, uploadFiles) |
|||
} |
|||
|
|||
const handleSuccess: UploadProps['onSuccess'] = (uploadFile) => { |
|||
// console.log(98, uploadFile) |
|||
state.ruleForm.voiceUrl = uploadFile?.result?.url; |
|||
} |
|||
// 关闭弹窗 |
|||
const closeDialog = () => { |
|||
emits('handleQuery'); |
|||
state.isShowDialog = false; |
|||
}; |
|||
const handleAvatarSuccess: UploadProps['onSuccess'] = ( |
|||
response |
|||
) => { |
|||
state.ruleForm.imageUrl = response?.result?.url; |
|||
} |
|||
// 取消 |
|||
const cancel = () => { |
|||
state.isShowDialog = false; |
|||
}; |
|||
|
|||
// 提交 |
|||
const submit = () => { |
|||
ruleFormRef.value.validate(async (valid: boolean) => { |
|||
if (!valid) return; |
|||
if (state.ruleForm.id != undefined && state.ruleForm.id > 0) { |
|||
await update('customer', state.ruleForm); |
|||
} else { |
|||
await add('customer', state.ruleForm); |
|||
} |
|||
closeDialog(); |
|||
}); |
|||
}; |
|||
|
|||
// 导出对象 |
|||
defineExpose({ openDialog }); |
|||
</script> |
|||
<style scoped> |
|||
.avatar-uploader .avatar { |
|||
width: 178px; |
|||
height: 178px; |
|||
display: block; |
|||
} |
|||
</style> |
@ -0,0 +1,216 @@ |
|||
<template> |
|||
<div class="customer-box"> |
|||
<el-card shadow="hover" :body-style="{ paddingBottom: '0' }"> |
|||
<el-form :model="state.queryParams" ref="queryForm" :inline="true"> |
|||
<el-form-item label="客户名称"> |
|||
<el-input v-model="state.queryParams.name" placeholder="客户名称" clearable /> |
|||
</el-form-item> |
|||
<el-form-item label="客户电话"> |
|||
<el-input v-model="state.queryParams.phone" placeholder="客户电话" clearable /> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button-group> |
|||
<el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'sysMenu:list'"> 查询 </el-button> |
|||
<el-button icon="ele-Refresh" @click="resetQuery"> 重置 </el-button> |
|||
</el-button-group> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="primary" icon="ele-Plus" @click="openAddMenu" v-auth="'sysMenu:add'"> 新增 </el-button> |
|||
<!-- <el-button type="primary" icon="ele-Plus" @click="openInfo({})" v-auth="'sysMenu:add'"> 新增 </el-button> --> |
|||
</el-form-item> |
|||
</el-form> |
|||
</el-card> |
|||
|
|||
<el-card class="full-table" shadow="hover" style="margin-top: 5px"> |
|||
<el-table :data="state.tableData" v-loading="state.loading" row-key="id" border> |
|||
<el-table-column prop="name" label="客户名称" align="center" show-overflow-tooltip /> |
|||
<el-table-column label="形象" width="150" align="center" show-overflow-tooltip> |
|||
<template #default="scope"> |
|||
<el-image style="width: 50px" v-if="scope.row.imageUrl" :src="scope.row.imageUrl" fit="contain" /> |
|||
<span v-else>--</span> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="phone" label="客户电话" align="center" show-overflow-tooltip /> |
|||
<el-table-column prop="idCard" label="身份证号" align="center" show-overflow-tooltip /> |
|||
<el-table-column label="性别" width="150" align="center" show-overflow-tooltip> |
|||
<template #default="scope"> |
|||
<el-tag type="success" v-if="scope.row.isMale">女</el-tag> |
|||
<el-tag type="primary" v-else>男</el-tag> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="修改记录" width="200" align="center" show-overflow-tooltip> |
|||
<template #default="scope"> |
|||
<el-popover placement="bottom" width="280" trigger="hover"> |
|||
<template #reference> |
|||
<el-text type="primary"> |
|||
<el-icon><ele-InfoFilled /></el-icon>详情 |
|||
</el-text> |
|||
</template> |
|||
<el-descriptions direction="vertical" :column="2" border> |
|||
<el-descriptions-item width="140"> |
|||
<template #label> |
|||
<el-text> |
|||
<el-icon><ele-UserFilled /></el-icon>创建者 |
|||
</el-text> |
|||
</template> |
|||
<el-tag>{{ scope.row.createUserName ?? '无' }}</el-tag> |
|||
</el-descriptions-item> |
|||
<el-descriptions-item> |
|||
<template #label> |
|||
<el-text> |
|||
<el-icon><ele-Calendar /></el-icon>创建时间 |
|||
</el-text> |
|||
</template> |
|||
<el-tag>{{ scope.row.createTime ?? '无' }}</el-tag> |
|||
</el-descriptions-item> |
|||
<el-descriptions-item> |
|||
<template #label> |
|||
<el-text> |
|||
<el-icon><ele-UserFilled /></el-icon>修改者 |
|||
</el-text> |
|||
</template> |
|||
<el-tag>{{ scope.row.updateUserName ?? '无' }}</el-tag> |
|||
</el-descriptions-item> |
|||
<el-descriptions-item> |
|||
<template #label> |
|||
<el-text> |
|||
<el-icon><ele-Calendar /></el-icon>修改时间 |
|||
</el-text> |
|||
</template> |
|||
<el-tag>{{ scope.row.updateTime ?? '无' }}</el-tag> |
|||
</el-descriptions-item> |
|||
<el-descriptions-item> |
|||
<template #label> |
|||
<el-text> |
|||
<el-icon><ele-Tickets /></el-icon>备注 |
|||
</el-text> |
|||
</template> |
|||
{{ scope.row.remark }} |
|||
</el-descriptions-item> |
|||
</el-descriptions> |
|||
</el-popover> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="操作" width="200" fixed="right" align="center" show-overflow-tooltip> |
|||
<template #default="scope"> |
|||
<el-button icon="ele-Edit" size="small" text type="primary" @click="openInfo(scope.row)" v-auth="'sysMenu:update'"> 详情 </el-button> |
|||
<el-button icon="ele-Edit" size="small" text type="primary" @click="openEditMenu(scope.row)" v-auth="'sysMenu:update'"> 编辑 </el-button> |
|||
<el-button icon="ele-Delete" size="small" text type="danger" @click="delMenu(scope.row)" v-auth="'sysMenu:delete'"> 删除 </el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<el-pagination |
|||
v-model:currentPage="state.tableParams.page" |
|||
v-model:page-size="state.tableParams.pageSize" |
|||
:total="state.tableParams.total" |
|||
:page-sizes="[10, 20, 50, 100]" |
|||
small |
|||
background |
|||
@size-change="handleSizeChange" |
|||
@current-change="handleCurrentChange" |
|||
layout="total, sizes, prev, pager, next, jumper" |
|||
/> |
|||
</el-card> |
|||
<EditCustomer ref="editRef" :title="state.editTitle" @handleQuery="handleQuery" /> |
|||
<CustomerInfo ref="infoRef" :title="state.infoTitle" @handleQuery="handleQuery" /> |
|||
</div> |
|||
</template> |
|||
|
|||
<script lang="ts" setup name="customer" > |
|||
import { onMounted, reactive, ref } from 'vue'; |
|||
import { ElMessageBox, ElMessage } from 'element-plus'; |
|||
import EditCustomer from './edit.vue'; |
|||
import CustomerInfo from './info.vue'; |
|||
import { SysMenu } from '/@/api-services/models'; |
|||
import { getList, del } from '../../api/api'; |
|||
import { storeToRefs } from 'pinia'; |
|||
import { useThemeConfig } from '/@/stores/themeConfig'; |
|||
const storesThemeConfig = useThemeConfig(); |
|||
const { themeConfig } = storeToRefs(storesThemeConfig); |
|||
|
|||
const editRef = ref(); |
|||
const infoRef = ref(); |
|||
const state = reactive({ |
|||
loading: false, |
|||
tableData: [] as Array<SysMenu>, |
|||
queryParams: { |
|||
name: undefined, |
|||
phone: undefined, |
|||
}, |
|||
tableParams: { |
|||
page: 1, |
|||
pageSize: 10, |
|||
total: 0 as any, |
|||
}, |
|||
editTitle: '', |
|||
infoTitle: '', |
|||
}); |
|||
|
|||
onMounted(async () => { |
|||
console.log(888, themeConfig.value.isIsDark) |
|||
themeConfig.value.isIsDark = false; |
|||
handleQuery(); |
|||
}); |
|||
|
|||
// 查询操作 |
|||
const handleQuery = async () => { |
|||
state.loading = true; |
|||
let params = Object.assign(state.queryParams, state.tableParams); |
|||
var res = await getList('customer', params); |
|||
state.tableData = res.data.result?.items ?? []; |
|||
state.tableParams.total = res.data.result?.total; |
|||
state.loading = false; |
|||
}; |
|||
|
|||
// 重置操作 |
|||
const resetQuery = () => { |
|||
state.queryParams.name = undefined; |
|||
state.queryParams.phone = undefined; |
|||
handleQuery(); |
|||
}; |
|||
|
|||
// 打开新增页面 |
|||
const openAddMenu = () => { |
|||
state.editTitle = '添加客户'; |
|||
editRef.value?.openDialog({ type: 2, isHide: false, isKeepAlive: true, isAffix: false, isIframe: false, status: 1, orderNo: 100 }); |
|||
}; |
|||
|
|||
// 打开编辑页面 |
|||
const openEditMenu = (row: any) => { |
|||
state.editTitle = '编辑客户'; |
|||
editRef.value?.openDialog(row); |
|||
}; |
|||
const openInfo = (row: any) => { |
|||
state.infoTitle = `${row.name} 的数字生命`; |
|||
infoRef.value?.openDrawer(row); |
|||
}; |
|||
|
|||
// 删除当前行 |
|||
const delMenu = (row: any) => { |
|||
ElMessageBox.confirm(`确定删除客户:【${row.name}】?`, '提示', { |
|||
confirmButtonText: '确定', |
|||
cancelButtonText: '取消', |
|||
type: 'warning', |
|||
}) |
|||
.then(async () => { |
|||
await del('customer', row.id ); |
|||
handleQuery(); |
|||
ElMessage.success('删除成功'); |
|||
}) |
|||
.catch(() => {}); |
|||
}; |
|||
// 改变页面容量 |
|||
const handleSizeChange = (val: number) => { |
|||
state.tableParams.pageSize = val; |
|||
handleQuery(); |
|||
}; |
|||
|
|||
// 改变页码序号 |
|||
const handleCurrentChange = (val: number) => { |
|||
state.tableParams.page = val; |
|||
handleQuery(); |
|||
}; |
|||
</script> |
|||
<style scoped lang="scss"> |
|||
$color: rgb(211, 130, 50); |
|||
</style> |
@ -0,0 +1,427 @@ |
|||
<template> |
|||
<el-drawer v-model="drawer" :direction="direction" class="cursor-info" size="100%"> |
|||
<template #default> |
|||
<div class="orido_tm_hero"> |
|||
<div class="close-box" @click="closeDrawer"> |
|||
<el-icon class="info-close"><CloseBold /></el-icon> |
|||
</div> |
|||
<div class="container"> |
|||
<div class="title-heading"> |
|||
<div class="alert"> |
|||
<span class="badge">Hot</span> |
|||
<span class="content">生命数据库</span> |
|||
</div> |
|||
<h1 class="heading">肖正的生命数据库</h1> |
|||
<p class="pera-title">Obviously I'm a Web Designer. Web Developer with over 3 years of experience. Experienced with all stages of the development</p> |
|||
<div class="hero-btn"> |
|||
<el-button type="primary" size="default">体检报告</el-button> |
|||
<el-button size="default">细胞储存信息</el-button> |
|||
</div> |
|||
</div> |
|||
<img src="/@/assets/customer/xiaozheng.png" class="author" alt=""> |
|||
<div class="video_button"> |
|||
<a class="popup-youtube" href="https://www.youtube.com/watch?v=7e90gBu4pas"> |
|||
<img class="anim_circle" src="/@/assets/customer/welcome.png" alt=""> |
|||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="25" viewBox="0 0 20 25" fill="none" class="svg replaced-svg"> |
|||
<path d="M0.693848 0.149658V24.7257L19.3059 12.4377L0.693848 0.149658Z" fill="white"></path> |
|||
</svg> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="section bg-light"> |
|||
<div class="container"> |
|||
<div class="container-title"> |
|||
<h2>体检报告</h2> |
|||
<p class="pera-title">体检时间:2024-07-31;体检机构:东莞松山湖基地</p> |
|||
</div> |
|||
<div class="content-box"> |
|||
<div class="content-item" v-for="(item, i) in 6" :key="i"> |
|||
<div class="feature-widget"> |
|||
<div style="margin-bottom: 16px;"> |
|||
<el-icon size="38" class="info-icon"><House /></el-icon> |
|||
</div> |
|||
<h3>肝癌</h3> |
|||
<p class="text-light-muted">中国人群肝癌平均遗传风险为 22.2,您的遗传风险值为 10 是平均遗传风险的0.45 倍;处于较低风险(2 级) 。</p> |
|||
<p>遗传相对风险指数:<span>0.8</span></p> |
|||
<p>遗传相对风险等级:<span>略低</span></p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="device-box"> |
|||
<div class="container"> |
|||
<el-carousel :interval="5000" height="600px" @change="changeImg" indicator-position="outside"> |
|||
<el-carousel-item v-for="(item,index) in state.images" :key="index"> |
|||
<el-row class="device-box-item"> |
|||
<el-col :span="9" class="cold-storage-content"> |
|||
<el-image |
|||
style="height:60%; margin-top: 30%" |
|||
:src="item.idView" |
|||
fit="fit"></el-image> |
|||
<div class="cold-storage-content-tips" style="top: 210px; left: 0;"> |
|||
<span class="cold-storage-content-tips-text">密封腔湿度{{ m9Msg.humidity }}</span> |
|||
<span class="cold-storage-content-tips-line blue" style="width: 20px;"></span> |
|||
</div> |
|||
<div class="cold-storage-content-tips" style="top: 270px; left: 0;"> |
|||
<span class="cold-storage-content-tips-text">液氮上限 195mm</span> |
|||
<span class="cold-storage-content-tips-line red"></span> |
|||
</div> |
|||
<div class="cold-storage-content-tips" style="top: 340px; left: 0"> |
|||
<span class="cold-storage-content-tips-text">液氮下限 125mm</span> |
|||
<span class="cold-storage-content-tips-line red"></span> |
|||
</div> |
|||
<div class="cold-storage-content-tips" style="top: 210px; right: -10%;"> |
|||
<span class="cold-storage-content-tips-line blue"></span> |
|||
<span class="cold-storage-content-tips-text">{{m9Msg.top}}</span> |
|||
</div> |
|||
<div class="cold-storage-content-tips" style="top: 270px; right: -10%;"> |
|||
<span class="cold-storage-content-tips-line blue"></span> |
|||
<span class="cold-storage-content-tips-text">{{m9Msg.center}}</span> |
|||
</div> |
|||
<div class="cold-storage-content-tips" style="top: 340px; right: -10%;"> |
|||
<span class="cold-storage-content-tips-line blue"></span> |
|||
<span class="cold-storage-content-tips-text">{{m9Msg.bottom}}</span> |
|||
</div> |
|||
<div> |
|||
<span>液氮高度:{{ item.height }} mm</span> |
|||
<span style="margin-left: 60px;" class="">转运区:<span :style="{color: item.status === 0?'red':'green'}">{{item.status === 0?'无桶':'有桶'}}</span></span> |
|||
</div> |
|||
</el-col> |
|||
<el-col :span="15" class="cta-full-img-box"> |
|||
<h4>造血干细胞</h4> |
|||
<p style="margin-bottom: 30px;" class="text-light-muted">广东省东莞市松山湖园区科技二路宏远新智汇1栋</p> |
|||
<p style="text-align: left;">操作记录</p> |
|||
<el-table :data="tableData" style="width: 100%" height="260" stripe> |
|||
<el-table-column type="index" label="序号" width="60" /> |
|||
<el-table-column prop="type" label="类型" /> |
|||
<el-table-column prop="operator" label="操作员" /> |
|||
<el-table-column prop="time" label="操作时间" /> |
|||
</el-table> |
|||
</el-col> |
|||
</el-row> |
|||
</el-carousel-item> |
|||
</el-carousel> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<!-- <template #footer> |
|||
<div style="flex: auto"> |
|||
<el-button @click="closeDrawer">cancel</el-button> |
|||
<el-button type="primary" @click="confirmClick">confirm</el-button> |
|||
</div> |
|||
</template> --> |
|||
</el-drawer> |
|||
</template> |
|||
<script lang="ts" setup name="customerInfo"> |
|||
import { ref, reactive, computed } from 'vue' |
|||
import { ElMessageBox, } from 'element-plus' |
|||
import { House, CloseBold } from '@element-plus/icons-vue' |
|||
import type { DrawerProps } from 'element-plus' |
|||
import imgUrl from '/@/assets/M9.png' |
|||
const props = defineProps({ |
|||
title: String, |
|||
}); |
|||
const tableData = [ |
|||
{type: '取出', operator: '黄志峰', time: '2024-07-22 15:30'}, |
|||
{type: '取出', operator: '黄志峰', time: '2024-07-22 15:30'}, |
|||
{type: '取出', operator: '黄志峰', time: '2024-07-22 15:30'}, |
|||
{type: '取出', operator: '黄志峰', time: '2024-07-22 15:30'}, |
|||
{type: '取出', operator: '黄志峰', time: '2024-07-22 15:30'}, |
|||
{type: '取出', operator: '黄志峰', time: '2024-07-22 15:30'}, |
|||
{type: '取出', operator: '黄志峰', time: '2024-07-22 15:30'}, |
|||
{type: '取出', operator: '黄志峰', time: '2024-07-22 15:30'}, |
|||
]; |
|||
const drawer = ref(false) |
|||
const direction = ref<DrawerProps['direction']>('rtl') |
|||
const radio1 = ref('Option 1') |
|||
const emits = defineEmits(['handleQuery']); |
|||
let random = ref(0); |
|||
const state = reactive({ |
|||
ruleForm: {} as any, |
|||
className: "", |
|||
images: [ |
|||
{id: 0, idView: imgUrl, top: '-180.1℃', center: '-192.2℃', bottom: '-195.1℃', shi: '1%',height: 162, status: 0}, |
|||
{id: 1, idView: imgUrl, top: '-181.6℃', center: '-190.6℃', bottom: '-195.3℃', shi: '1.3%',height: 166, status: 1}, |
|||
{id: 2, idView: imgUrl, top: '-182.4℃', center: '-192.4℃', bottom: '-195.5℃', shi: '2.1%',height: 162, status: 1}, |
|||
{id: 3, idView: imgUrl, top: '-183.1℃', center: '-191.5℃', bottom: '-195.6℃', shi: '1.7%',height: 168, status: 0}, |
|||
{id: 4, idView: imgUrl, top: '-180.9℃', center: '-190.2℃', bottom: '-195.3℃', shi: '3.1%',height: 166, status: 1}, |
|||
{id: 5, idView: imgUrl, top: '-182.2℃', center: '-192.9℃', bottom: '-195.4℃', shi: '2.3%',height: 169, status: 0}, |
|||
], |
|||
}); |
|||
const m9Msg = computed(() => { |
|||