1、医疗结构 重点品种 现场检查 预警信息 不良事件等菜单配置移动代码等

2、移动json文件过来
3、echarts版本配置
20245024-wz
qyt 9 months ago
parent 59cc6f1762
commit 6df86a9b32

@ -37,12 +37,16 @@
"url": "https://gitee.com/y_project/RuoYi-Vue.git"
},
"dependencies": {
"element-china-area-data": "^5.0.2",
"@antv/l7plot": "^0.5.11",
"@jiaminghi/data-view": "^2.10.0",
"@riophae/vue-treeselect": "0.4.0",
"@tinymce/tinymce-vue": "3.0.1",
"api": "^6.1.2",
"axios": "0.24.0",
"clipboard": "2.0.8",
"core-js": "3.19.1",
"echarts": "4.9.0",
"echarts": "^5.5.1",
"element-china-area-data": "^5.0.2",
"element-ui": "2.15.8",
"file-saver": "2.0.5",
"fuse.js": "6.4.3",
@ -56,16 +60,16 @@
"quill": "1.3.7",
"screenfull": "5.0.2",
"sortablejs": "1.10.2",
"tinymce": "^6.2.0",
"vue": "2.6.12",
"vue-count-to": "1.0.13",
"vue-cropper": "0.5.5",
"vue-meta": "2.4.0",
"vue-router": "3.4.9",
"vue-seamless-scroll": "^1.1.23",
"vue2-verify": "^1.1.5",
"vuedraggable": "2.24.3",
"vuex": "3.6.0",
"@tinymce/tinymce-vue": "3.0.1",
"tinymce": "^6.2.0"
"vuex": "3.6.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "4.4.6",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"adcode":710000,"name":"台湾省","center":[121.509062,25.044332],"centroid":[120.971485,23.749452],"childrenNum":0,"level":"province","acroutes":[100000],"parent":{"adcode":100000}},"geometry":{"type":"MultiPolygon","coordinates":[[[[120.443558,22.441245],[120.517584,22.408536],[120.569903,22.361728],[120.640505,22.241347],[120.659209,22.15432],[120.662001,22.066983],[120.651464,22.033165],[120.667691,21.983168],[120.70157,21.927065],[120.743246,21.915569],[120.78155,21.923957],[120.85468,21.883333],[120.87291,21.897387],[120.866482,21.98436],[120.907315,22.033208],[120.904154,22.119757],[120.914955,22.302718],[120.981658,22.528305],[121.015009,22.584168],[121.033292,22.650725],[121.078498,22.669656],[121.170544,22.723133],[121.210481,22.770665],[121.237931,22.836327],[121.324708,22.945666],[121.354687,23.01006],[121.370388,23.084347],[121.409535,23.102669],[121.430294,23.137196],[121.415015,23.195973],[121.440358,23.272096],[121.479558,23.3223],[121.497788,23.419789],[121.521497,23.483198],[121.523078,23.538708],[121.587778,23.76102],[121.621604,23.92075],[121.659381,24.006893],[121.639992,24.064276],[121.643838,24.097713],[121.678085,24.133906],[121.689044,24.174401],[121.809172,24.339055],[121.826717,24.423579],[121.867498,24.478978],[121.885464,24.529677],[121.892524,24.617912],[121.862598,24.671515],[121.837993,24.76015],[121.845053,24.836269],[121.932883,24.938645],[122.012178,25.001469],[121.980776,25.03079],[121.947425,25.031955],[121.917077,25.137908],[121.842155,25.135332],[121.782407,25.160425],[121.750531,25.160716],[121.707327,25.191493],[121.700319,25.226913],[121.655324,25.241859],[121.623026,25.294694],[121.584986,25.308926],[121.535038,25.307515],[121.444415,25.270624],[121.413487,25.238912],[121.371864,25.159885],[121.319281,25.140691],[121.209322,25.127104],[121.133135,25.078728],[121.102102,25.075153],[121.024704,25.040479],[121.009688,24.993649],[120.960899,24.940227],[120.908475,24.852012],[120.892299,24.767526],[120.823753,24.688321],[120.762371,24.658335],[120.688661,24.600678],[120.64277,24.490172],[120.589187,24.432354],[120.546299,24.370413],[120.521009,24.312038],[120.470534,24.24259],[120.451461,24.182691],[120.392029,24.11824],[120.316158,23.984881],[120.278276,23.927798],[120.245768,23.840553],[120.175377,23.807385],[120.102773,23.700981],[120.094817,23.587466],[120.121741,23.504664],[120.107831,23.341264],[120.081434,23.29191],[120.018947,23.073115],[120.029537,23.048623],[120.131382,23.002118],[120.149138,22.896715],[120.200403,22.721101],[120.274272,22.560181],[120.297191,22.531315],[120.443558,22.441245]]],[[[124.542984,25.903911],[124.586346,25.913777],[124.572805,25.93974],[124.541825,25.931031],[124.542984,25.903911]]],[[[123.445286,25.725966],[123.472104,25.713024],[123.508933,25.723237],[123.514834,25.751226],[123.483063,25.768587],[123.444496,25.746514],[123.445286,25.725966]]],[[[119.64597,23.55091],[119.701081,23.550657],[119.678057,23.600041],[119.610089,23.603953],[119.594388,23.577245],[119.566306,23.584732],[119.562565,23.530377],[119.573788,23.505885],[119.609141,23.503864],[119.64597,23.55091]]],[[[123.667207,25.914066],[123.707092,25.916873],[123.678008,25.938667],[123.667207,25.914066]]],[[[119.506031,23.625567],[119.505241,23.575814],[119.472416,23.557136],[119.523207,23.563699],[119.525578,23.624895],[119.506031,23.625567]]],[[[119.49739,23.386683],[119.495125,23.350156],[119.516885,23.349903],[119.49739,23.386683]]],[[[119.557454,23.666474],[119.604083,23.616989],[119.615516,23.660925],[119.586485,23.675974],[119.557454,23.666474]]],[[[121.46823,22.676644],[121.476502,22.64166],[121.513541,22.631833],[121.5147,22.67639],[121.46823,22.676644]]],[[[121.510538,22.087185],[121.507693,22.048523],[121.534089,22.022146],[121.594522,21.995382],[121.604586,22.022699],[121.575028,22.037122],[121.575607,22.084421],[121.510538,22.087185]]],[[[122.097533,25.500168],[122.093581,25.47183],[122.124825,25.475932],[122.097533,25.500168]]],[[[119.421467,23.216684],[119.421309,23.18935],[119.453396,23.217697],[119.421467,23.216684]]],[[[120.355042,22.327259],[120.395454,22.342287],[120.383072,22.355573],[120.355042,22.327259]]]]}}]}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

@ -149,6 +149,73 @@ export const constantRoutes = [
},
],
},
{
path: '/home10',
name: '重点品种',
redirect: '/index10',
component: Home,
children: [
{
path: '/index10',
name: 'index',
component: () => import(/* webpackChunkName: "LSD.bighome" */ '../views/daping/inout/index.vue'),
}
]
},
{
path: '/home12',
name: '医疗机构',
redirect: '/index12',
component: Home,
children: [
{
path: '/index12',
name: 'index',
component: () => import(/* webpackChunkName: "LSD.bighome" */ '../views/daping/hosp2/index.vue'),
}
]
},
{
path: '/home13',
name: '现场检查',
redirect: '/index13',
component: Home,
children: [
{
path: '/index13',
name: 'index',
component: () => import(/* webpackChunkName: "LSD.bighome" */ '../views/daping/product/traceIndex.vue'),
}
]
},
{
path: '/home14',
name: '预警信息',
redirect: '/index14',
component: Home,
children: [
{
path: '/index14',
name: 'index',
component: () => import(/* webpackChunkName: "LSD.bighome" */ '../views/daping/warn2/index.vue'),
}
]
},
{
path: '/home6',
name: '不良事件',
redirect: '/index6',
component: Home,
children: [
{
path: '/index6',
name: 'index',
// component: () => import(/* webpackChunkName: "LSD.bighome" */ '../views/trace/traceIndex.vue'),
component: () => import(/* webpackChunkName: "LSD.bighome" */ '../views/daping/trace/traceMap.vue'),
}
]
},
];
// 动态路由,基于用户权限动态去加载
@ -226,6 +293,7 @@ export const dynamicRoutes = [
},
],
},
];
// 防止连续点击多次路由报错

@ -177,6 +177,7 @@ export default {
if (this.isSouthChinaSea && name == "china") {
geoname = "chinaNanhai";
}
console.log('11', echarts.getMap(name))
//
let mapjson = echarts.getMap(name);
if (mapjson) {

@ -0,0 +1,122 @@
<template>
<div class="block">
<el-table v-loading="loading" :data="list" key="1" style="width: 100%;margin-top: -10px"
@row-click="intentDetail"
>
<el-table-column label="序号" type="index" width="55"></el-table-column>
<el-table-column label="公告时间" prop="eventTime" width="170" show-overflow-tooltip></el-table-column>
<el-table-column label="事件名称" prop="eventMsg" width="190" show-overflow-tooltip></el-table-column>
<el-table-column label="事件描述" prop="remark" width="300" show-overflow-tooltip></el-table-column>
<el-table-column label="操作" width="120">
<template slot-scope="scope">
<el-button
type="text"
size="small"
@click="intentDetail( scope.row)"
>选择
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:limit.sync="filterQuery.limit"
:page.sync="filterQuery.page"
@pagination="handleCurrentChange"
></pagination>
<!-- <el-pagination-->
<!-- style="float: right;margin-top: 15px"-->
<!-- :page-size="20"-->
<!-- :pager-count="1"-->
<!-- layout="prev, pager, next"-->
<!-- :total="2">-->
<!-- </el-pagination>-->
</div>
</template>
<script>
import {currentGET, currentPOST} from "@/api";
export default {
name: "dialogAdverseMsg",
data() {
return {
companyTypeMap: {
1: "生产企业",
2: "经营企业",
3: "医疗机构",
},
list: [],
total: 0,
filterQuery: {
page: 1,
limit: 10,
companyName: null,
companyIdFk: null,
},
regionCode: null,
};
},
props: {
editQuery: {
type: Object,
required: true,
},
closeDialog: {
type: Function,
required: true,
},
},
mounted() {
this.getList();
},
methods: {
getList() {
currentGET('adverseMsg', this.filterQuery
).then(res => {
if (res.code == 20000) {
this.list = res.data.list || [];
this.total = res.data.total || 0;
} else {
this.list = []
this.$Message({
text: res.msg,
type: 'warning'
})
}
})
},
handleCurrentChange() {
this.getList();
},
intentDetail() {
this.closeDialog();
},
},
}
</script>
<style scoped>
/*最外层透明*/
::v-deep .el-table,
::v-deep .el-table__expanded-cell {
background-color: transparent !important;
color: white;
}
/* 表格内背景颜色 */
::v-deep .el-table th,
::v-deep .el-table tr,
::v-deep .el-table td {
background-color: transparent !important;
color: white;
}
</style>

@ -0,0 +1,13 @@
<template>
</template>
<script>
export default {
name: "index"
}
</script>
<style scoped>
</style>

@ -0,0 +1,406 @@
<!--
* @Author: daidai
* @Date: 2022-03-04 09:23:59
* @LastEditors: Please set LastEditors
* @LastEditTime: 2022-05-07 11:05:02
* @FilePath: \web-pc\src\pages\big-screen\view\indexs\nmpa.vue
-->
<template>
<div class="contents">
<div class="contetn_left">
<el-card class="box-card">
<el-form :model="filterQuery" size="mini" label-width="125px" style="margin-top: 10px">
<el-row>
<el-col :span="17">
<el-form-item>
<span slot="label">
<span style="color: white">UDI码:</span>
</span>
<el-input v-model="filterQuery.udiCode"
clearable="true"
id="inputer"
@focus="getInputFocus($event)"
@keypress.enter.native="enterKey($event)"
ref='inputRef'
style="ime-mode:disabled"
type="tel"></el-input>
</el-form-item>
</el-col>
<el-col :span="6" style="margin-left: 15px">
<el-button type="primary" icon="el-icon-search" @click="searchList" size="mini"
>查询
</el-button
>
</el-col>
</el-row>
</el-form>
<ItemWrap class="contetn_lr-item" style="height: 270px" title="产品信息">
<div class="block">
<el-descriptions title="" :column="3" border class="el-descriptions">
<el-descriptions-item label="DI/产品编码">
{{ editQuery.nameCode }}
</el-descriptions-item>
<el-descriptions-item label="产品通用名称">{{ editQuery.cpmctymc }}</el-descriptions-item>
<el-descriptions-item label="产品类别">{{ editQuery.hchzsb }}</el-descriptions-item>
<el-descriptions-item label="分类编码">
{{ editQuery.flbm }}
</el-descriptions-item>
<el-descriptions-item label="医疗器械注册人">
{{ editQuery.ylqxzcrbarmc }}
</el-descriptions-item>
<el-descriptions-item label="注册证/备案号">
{{ editQuery.zczbhhzbapzbh }}
</el-descriptions-item>
<el-descriptions-item label="器械类别">
{{ editQuery.cplx }}
</el-descriptions-item>
<el-descriptions-item label="生产企业">
{{ editQuery.manufactory }}
</el-descriptions-item>
<el-descriptions-item label="商品条码">
{{ editQuery.sptm }}
</el-descriptions-item>
<el-descriptions-item label="医保编码">
{{ editQuery.ybbm }}
</el-descriptions-item>
<el-descriptions-item label="统一社会信用号">
{{ editQuery.tyshxydm }}
</el-descriptions-item>
<el-descriptions-item label="产品描述">
{{ editQuery.cpms }}
</el-descriptions-item>
</el-descriptions>
</div>
</ItemWrap>
<ItemWrap class=" contetn_lr-item2" style="margin-top: 15px;height: 550px" title="追溯信息">
<el-table v-loading="loading" :data="list"
style="width: 100%"
:cell-style="{ color: '#fff' }"
:header-cell-style="{ color: '#fff' }"
highlight-current-row
:row-class-name="tableRowClassName">
<el-table-column label="序号" type="index" width="55"></el-table-column>
<el-table-column label="上报企业" prop="companyName" width="180" show-overflow-tooltip></el-table-column>
<el-table-column label="单据号" prop="billNo" width="150" show-overflow-tooltip></el-table-column>
<el-table-column label="单据类型" prop="billType" width="100" show-overflow-tooltip></el-table-column>
<el-table-column label="单据日期" prop="billDate" width="150" show-overflow-tooltip></el-table-column>
<el-table-column label="发货企业" prop="fromCorp" width="220" show-overflow-tooltip></el-table-column>
<el-table-column label="收货企业" prop="toCorp" width="220" show-overflow-tooltip></el-table-column>
<el-table-column label="更新时间" prop="updateTime" width="150" show-overflow-tooltip></el-table-column>
<el-table-column label="备注" prop="remark" width="220"></el-table-column>
</el-table>
</ItemWrap>
</el-card>
</div>
<div class="contetn_right">
<ItemWrap class=" contetn_lr-item" style="height: 880px" title="报备企业实时统计">
<el-scrollbar>
<el-timeline>
<el-timeline-item timestamp="2023/12/1" placement="top">
<el-card>
<h1>入库信息上报</h1>
<p>片仔癀诊断 提交于 2023/12/1 20:46</p>
</el-card>
</el-timeline-item>
<el-timeline-item timestamp="2023/12/1" placement="top">
<el-card>
<h4>入库信息上报</h4>
<p>片仔癀诊断 提交于 2023/12/1 20:46</p>
</el-card>
</el-timeline-item>
<el-timeline-item timestamp="2023/12/1" placement="top">
<el-card>
<h4>入库信息上报</h4>
<p>片仔癀诊断 提交于 2023/12/1 20:46</p>
</el-card>
</el-timeline-item>
</el-timeline>
</el-scrollbar>
</ItemWrap>
</div>
</div>
</template>
<script>
import {currentGET} from "@/api";
export default {
components: {
// LeftTop,
// LeftCenter,
// LeftBottom,
// CenterMap,
// RightTop,
// RightCenter,
// RightBottom,
// CenterBottom,
},
data() {
return {
filterQuery: {
udiCode: '01069412732578591122090710F22096321F2209630035',
ylqxzcrbarmc: null,
cpmctymc: null,
ggxh: null,
nameCode: null,
batchNo: null,
companyName: "",
page: 1,
limit: 10,
traceType: 1,
},
recordCode: null,
udidlList: [],
editQuery: {},
};
},
filters: {
numsFilter(msg) {
return msg || 0;
},
},
created() {
},
mounted() {
this.$refs.inputRef.focus();
this.$refs.inputRef.select();
},
methods: {
searchList() {
this.filterQuery.page = 1;
this.getList();
},
getInputFocus(event) {
event.currentTarget.select();
},
enterKey() {
this.getList();
},
getList() {
this.$refs.inputRef.focus();
this.$refs.inputRef.select();
this.loading = true;
currentGET("udiTrace", this.filterQuery)
.then((response) => {
this.loading = false;
if (response.code === 20000) {
this.recordCode = response.data;
this.getRecordResult();
this.getProduct();
} else {
this.$message.error(res.message);
this.list = [];
this.total = 0;
}
})
.catch(() => {
this.loading = false;
this.udidlList = [];
this.total = 0;
});
},
getProduct() {
//
this.listCodeRel = null;
this.loading = true;
currentGET("product", this.filterQuery)
.then((res) => {
this.loading = false;
if (res.code === 20000) {
let data = [];
data = res.data.list || [];
if (data.length > 0) {
this.editQuery = data[0];
}
this.total = res.data.total || 0;
} else {
this.$message.error(res.message);
this.total = 0;
}
}).catch((error) => {
this.loading = false;
this.$message.error(error.message);
this.listOrder = [];
this.total = 0;
})
},
getRecordResult() {
//
this.listCodeRel = null;
this.loading = true;
let query = {
recordCode: this.recordCode,
traceType: 1,
}
currentGET("recordResult", query)
.then((res) => {
this.loading = false;
if (res.code === 20000) {
this.listOrder = res.data.traceManuOrderEntities || [];
this.list = res.data.traceOrderEntities || [];
this.total = res.data.total || 0;
} else {
this.$message.error(res.message);
this.listOrder = [];
this.total = 0;
}
}).catch((error) => {
this.loading = false;
this.$message.error(error.message);
this.listOrder = [];
this.total = 0;
})
},
tableRowClassName({row, rowIndex}) {
if (rowIndex === 1) {
return 'warning-row';
} else if (rowIndex === 3) {
return "success-row";
}
return '';
}
},
};
</script>
<style lang="scss" scoped>
//
.contents {
overflow: auto;
background-color: #131928;
.contetn_left,
.contetn_right {
overflow: auto;
width: 540px;
box-sizing: border-box;
// padding: 16px 0;
}
.contetn_center {
width: 720px;
}
//
.contetn_lr-item {
height: 360px;
}
.contetn_lr-item2 {
height: 400px;
}
.contetn_center_top {
width: 100%;
}
//
.contetn_center {
display: flex;
flex-direction: column;
justify-content: space-around;
}
.contetn_center-bottom {
height: 315px;
}
//
.contetn_left {
width: 75%;
display: flex;
flex-direction: column;
//justify-content: space-around;
position: relative;
overflow: auto;
}
.contetn_right {
width: 25%;
display: flex;
flex-direction: column;
//justify-content: space-around;
position: relative;
}
.box-card {
border-radius: 4px;
border: 1px solid #EBEEF5;
background-color: #00000000;
overflow: hidden;
color: #303133;
-webkit-transition: .3s;
transition: .3s
}
.margin-top {
margin: 0px auto 40px;
width: 85%;
}
.el-descriptions > li:nth-child(n) {
background-color: #00000000; /* 替换为你要的背景颜色 */
}
.el-descriptions {
background-color: #00000000; /* 替换为你要的背景颜色 */
}
}
/*最外层透明*/
::v-deep .el-table,
::v-deep .el-table__expanded-cell {
background-color: transparent !important;
.warning-row {
background: #e79b0c;
}
.success-row {
background: #549032;
}
}
/* 表格内背景颜色 */
::v-deep .el-table th,
::v-deep .el-table tr,
::v-deep .el-table td {
background-color: transparent !important;
}
@keyframes rotating {
0% {
-webkit-transform: rotate(0) scale(1);
transform: rotate(0) scale(1);
}
50% {
-webkit-transform: rotate(180deg) scale(1.1);
transform: rotate(180deg) scale(1.1);
}
100% {
-webkit-transform: rotate(360deg) scale(1);
transform: rotate(360deg) scale(1);
}
}
</style>

@ -0,0 +1,389 @@
<template>
<div>
<div id="container" style="margin-top: 15px; position: relative;z-index: 1;"/>
<div style="position: absolute;top: 0;left: 0;z-index: 2;">
<!-- <el-select-->
<!-- v-model="todayTarget"-->
<!-- placeholder=""-->
<!-- class="mySelect"-->
<!-- popper-class="mySelectPopper"-->
<!-- >-->
<!-- <el-option-->
<!-- v-for="item in todayTargetList"-->
<!-- :label="item.label"-->
<!-- :value="item.value"-->
<!-- ></el-option>-->
<!-- </el-select>-->
<li class="map_title"
style="width: 300px;height: 150px;margin-top: 170px;margin-left: 20px;text-align: center;padding-top: 15px">
<el-row>
<H1 style="color: white;font-weight: bold;margin-bottom: 15px">2023年1月23日不良事件(测试)</H1>
</el-row>
<el-row style="margin-top: 15px">
<span style="color: white;font-size: 14px;text-align: left">XXX医院发现过期的一次性无菌注射器,可吸收性外科缝线,一次性使用肝素帽等医疗器械</span>
</el-row>
<el-row>
<span></span>
</el-row>
</li>
<!-- <el-select v-model="badEvent" style="width: 100%;margin-top: 170px;margin-left: 20px"-->
<!-- popper-class="mySelectPopper"-->
<!-- class="mySelect"-->
<!-- >-->
<!-- <el-option label="2023年1月23日不良事件(测试)" :value=1></el-option>-->
<!-- &lt;!&ndash; <el-option label="否" :value=2></el-option>&ndash;&gt;-->
<!-- </el-select>-->
<!-- <div class="nav">-->
<!-- <ul>-->
<!-- <li class="map_nav" style="width: 300px">-->
<!-- <a href="#" v-on:click="categoryClick();">2023年1月23日不良事件(测试)</a>-->
<!-- </li>-->
<!-- <li class="map_nav" style="width: 300px">-->
<!-- <a href="#" v-on:click="companyClick();">2023年4月18日不良事件(测试)</a>-->
<!-- </li>-->
<!-- </ul>-->
<!-- </div>-->
</div>
<div style="position: absolute;bottom: 0;right: 0;z-index: 3;margin-bottom: 50px;margin-right: 60px">
<li class="map_nav"
style="width: 200px;height: 50px;margin-top: 170px;margin-left: 20px;text-align: center;padding-top: 15px">
<a href="#" v-on:click="popAverse(); " style="color: white">不良事件列表</a>
</li>
</div>
<el-dialog
title="查询不良事件"
:visible.sync="addDialogVisible"
:close-on-click-modal="false"
:close-on-press-escape="false"
v-if="addDialogVisible"
append-to-body
width="55%"
>
<dialogAdverseMsg
:editQuery="curCorp"
:closeDialog="closeDialog"
></dialogAdverseMsg>
</el-dialog>
</div>
</template>
<script type=" text
/javascript">
window._AMapSecurityConfig = {
securityJsCode: 'aa4657762e81008f99de042076c83384',
}
</script>
<script type="text/javascript"
src="https://webapi.amap.com/maps?v=1.4.15&key=5431bae8a043ee5d3ebdd7ddd4e58176"></script>
<script>
import {Flow} from '@antv/l7plot';
import {currentGET} from "@/api/modules";
import dialogAdverseMsg from "./dialogAdverseMsg.vue"
export default {
name: "l7Flow",
data() {
return {
badEvent: 1,
unionQuery: {
udiCode: null,
},
addDialogVisible: false,
filterQuery: {
udiCode: '0106943242398334112201101724011010JY110',
ylqxzcrbarmc: null,
cpmctymc: null,
ggxh: null,
nameCode: null,
batchNo: null,
companyName: "",
page: 1,
limit: 10,
traceType: 1,
},
curCorp: null,
udidlList: [],
editQuery: {},
};
},
methods: {
initMap(data) {
window._AMapSecurityConfig = {
securityJsCode: 'aa4657762e81008f99de042076c83384',
}
new Flow('container', {
map: {
type: 'amap',
style: 'dark',
center: [116.3956, 39.9392],
pitch: 0,
zoom: 10,
token: '5431bae8a043ee5d3ebdd7ddd4e58176',
viewMode: '3D',
},
source: {
data: data,
parser: {
type: 'json',
x: 'x1',
y: 'y1',
x1: 'x',
y1: 'y',
},
},
autoFit: true,
shape: 'arc',
size: 1.5,
color: {
field: 'count',
value: ['rgba(230,129,28,0.9)', 'rgba(229,25,97,0.9)', 'rgba(1,124,247,0.9)'],
scale: {type: 'quantize'},
},
style: {
opacity: 0.8,
segmentNumber: 60,
},
animate: {
interval: 2,
trailLength: 1,
duration: 2,
},
radiation: {
color: 'white',
size: 30,
},
label: {
visible: true,
field: 'count',
style: {
fill: '#000',
opacity: 0.8,
fontSize: 10,
stroke: '#fff',
strokeWidth: 2,
textAllowOverlap: false,
padding: [5, 5],
textOffset: [0, 35],
},
},
zoom: {
position: 'bottomright',
},
scale: {
position: 'bottomright',
},
layerMenu: {
position: 'topright',
},
legend: {
position: 'bottomleft',
},
});
},
getInputFocus(event) {
event.currentTarget.select();
},
enterKey() {
this.getData();
},
getData() {
this.pageflag = true;
currentGET("amapFlow").then((res) => {
this.pageflag = false;
if (res.code == 20000) {
this.initMap(res.data);
this.$refs.inputRef.focus();
this.$refs.inputRef.select();
} else {
this.pageflag = false;
this.$Message({
text: res.msg,
type: "warning",
});
}
});
},
closeDialog() {
this.addDialogVisible = false;
},
popAverse() {
this.addDialogVisible = true;
}
},
components: {
dialogAdverseMsg
},
created() {
this.getData();
},
}
</script>
<style scoped>
.box-card {
width: 100%;
border-radius: 4px;
border: 1px solid #EBEEF5;
background-color: #00000000;
overflow: hidden;
color: #303133;
-webkit-transition: .3s;
transition: .3s
}
.map_nav {
border-bottom: 4px solid #8d3562;
box-shadow: -10px 0px 10px #2875a0 inset, /*左边阴影*/ 0px -10px 10px #2875a0 inset, /*上边阴影*/ 10px 0px 15px #2875a0 inset, /*右边阴影*/ 0px 10px 15px #2875a0 inset;
box-sizing: border-box;
margin-left: 20px;
}
.chooseItem {
height: 60px;
line-height: 60px;
}
.el-select-dropdown .el-select-dropdown__item.hover {
background-color: #012049 !important;
}
.el-select-dropdown {
background: #00122a !important;
border: 1px solid #83929d !important;
}
.mySelect .el-input__inner {
font-size: 24px !important;
text-align: center;
background: rgba(80, 136, 151, 0.1) !important;
border: transparent !important;
border-radius: 12px !important;
color: #ffffff;
cursor: pointer;
height: 100% !important;
line-height: 100% !important;
}
.mySelect {
width: 180px;
height: 100%;
/*background: url("../../assets/img/") no-repeat;*/
/*background-color: #042237 !important;*/
height: 45px !important;
width: 100px;
border-radius: 4px;
border: 1px solid #05658c !important;
background-color: #042237 !important;
}
.mySelectPopper {
border: 1px solid #3062ff;
background-color: #00122a;
}
.mySelectPopper .el-select-dropdown__item.hover {
background-color: #14265d;
}
.mySelectPopper .el-select-dropdown__item.hover {
color: #ffffff;
}
.mySelectPopper .el-input__inner {
height: 40px;
line-height: 40px;
}
.mySelectPopper .el-select-dropdown__item {
color: #97bffc;
font-size: 24px !important;
height: 50px;
line-height: 50px;
}
.el-select-dropdown {
background: #1f3b53 !important;
border: 1px solid #83929d !important;
}
.mySelectPopper .popper__arrow::after {
border-bottom-color: #97bffc !important;
}
.mySelectPopper .popper__arrow {
border-bottom-color: #3062ff !important;
}
.el-select
.el-input
.el-select__caret.el-input__icon::before {
content: "\e790" !important;
color: #02bff4;
position: absolute;
width: 100%;
height: 100%;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.el-select .el-input .el-select__caret {
transform: rotateZ(0deg) !important;
}
.map_title {
/*box-shadow: -10px 0px 10px #2875a0 inset, !*左边阴影*! 0px -10px 10px #2875a0 inset, !*上边阴影*! 10px 0px 15px #2875a0 inset, !*右边阴影*! 0px 10px 15px #2875a0 inset;*/
box-sizing: border-box;
background-color: rgba(102, 131, 157, 0.65);
margin-left: -12px;
border-bottom: 4px solid #35788d;
}
#container {
width: 1880px;
height: 880px;
}
</style>

@ -0,0 +1,175 @@
<!--
* @Author: daidai
* @Date: 2022-03-01 15:51:43
* @LastEditors: Please set LastEditors
* @LastEditTime: 2022-09-29 15:12:46
* @FilePath: \web-pc\src\pages\big-screen\view\indexs\pinZhongItem.vue
-->
<template>
<div class="right_bottom">
<dv-capsule-chart :config="config" style="width:100%;height:260px"/>
</div>
</template>
<script>
import {currentGET} from '@/api/modules'
export default {
data() {
return {
gatewayno: '',
config: {
showValue: true,
unit: "个",
data: []
},
};
},
created() {
this.getData()
},
computed: {},
mounted() {
},
beforeDestroy() {
this.clearData()
},
methods: {
clearData() {
if (this.timer) {
clearInterval(this.timer)
this.timer = null
}
},
//
switper() {
if (this.timer) {
return
}
let looper = (a) => {
this.getData()
};
this.timer = setInterval(looper, this.$store.state.setting.echartsAutoTime);
},
getData() {
this.pageflag = true
// this.pageflag =false
currentGET('productCategory', {gatewayno: this.gatewayno}).then(res => {
if (!this.timer) {
console.log('企业维护产品数量', res);
}
if (res.code == 20000) {
const objectArray = res.data.map(item => { //
return {
value: item.nmapCount,
name: item.categoryName,
// ...
};
});
console.log('企业维护产品数量', objectArray);
this.config = {
...this.config,
data: objectArray
}
this.switper()
} else {
this.pageflag = false
this.srcList = []
this.$Message({
text: res.msg,
type: 'warning'
})
}
})
},
},
};
</script>
<style lang='scss' scoped>
.list_Wrap {
height: 100%;
overflow: hidden;
:deep(.kong) {
width: auto;
}
}
.sbtxSwiperclass {
.img_wrap {
overflow-x: auto;
}
}
.right_bottom {
box-sizing: border-box;
padding: 0 16px;
.searchform {
height: 80px;
display: flex;
align-items: center;
justify-content: center;
.searchform_item {
display: flex;
justify-content: center;
align-items: center;
label {
margin-right: 10px;
color: rgba(255, 255, 255, 0.8);
}
button {
margin-left: 30px;
}
input {
}
}
}
.img_wrap {
display: flex;
// justify-content: space-around;
box-sizing: border-box;
padding: 0 0 20px;
// overflow-x: auto;
li {
width: 105px;
height: 137px;
border-radius: 6px;
overflow: hidden;
cursor: pointer;
// background: #84ccc9;
// border: 1px solid #ffffff;
overflow: hidden;
flex-shrink: 0;
margin: 0 10px;
img {
flex-shrink: 0;
}
}
}
.noData {
width: 100%;
line-height: 100px;
text-align: center;
color: rgb(129, 128, 128);
}
}
</style>

@ -0,0 +1,230 @@
<!--
* @Author: daidai
* @Date: 2022-03-01 15:51:43
* @LastEditors: Please set LastEditors
* @LastEditTime: 2022-09-29 15:12:46
* @FilePath: \web-pc\src\pages\big-screen\view\indexs\pinZhongItem.vue
-->
<template>
<div>
<el-table v-loading="loading" :data="list"
style="width: 100%"
:cell-style="{ color: '#fff' }"
:header-cell-style="{ color: '#fff' }"
highlight-current-row
@row-click="intentDetail"
:row-class-name="tableRowClassName">
<el-table-column label="序号" type="index" width="55"></el-table-column>
<el-table-column label="时间" prop="updateTime" width="150" show-overflow-tooltip></el-table-column>
<el-table-column label="单位名称" prop="companyName" width="180" show-overflow-tooltip></el-table-column>
<el-table-column label="单位类型" prop="bussinessStatus" width="120" show-overflow-tooltip>
<template slot-scope="scope">
<span>{{ companyTypeMap[scope.row.bussinessStatus] }}</span>
</template>
</el-table-column>
<el-table-column label="产品通用名" prop="productName" width="150" show-overflow-tooltip></el-table-column>
<el-table-column label="规格型号" prop="ggxh" width="150" show-overflow-tooltip></el-table-column>
<el-table-column label="注册/备案号" prop="zczbhhzbapzbh" width="150" show-overflow-tooltip></el-table-column>
</el-table>
<el-pagination
style="float: right;margin-top: 15px"
:page-size="limit"
@current-change="handleChange"
layout="prev, pager, next"
:total="total"
:current-page="page"
></el-pagination>
<!-- <el-dialog-->
<!-- title="企业信息"-->
<!-- :visible.sync="addDialogVisible"-->
<!-- :close-on-click-modal="false"-->
<!-- :close-on-press-escape="false"-->
<!-- v-if="addDialogVisible"-->
<!-- append-to-body-->
<!-- width="60%"-->
<!-- >-->
<!-- <dialogCorpProduct-->
<!-- :editQuery="curCorp"-->
<!-- ></dialogCorpProduct>-->
<!-- </el-dialog>-->
<el-dialog
title="异常信息"
:visible.sync="addDialogVisible"
:close-on-click-modal="false"
:close-on-press-escape="false"
v-if="addDialogVisible"
append-to-body
width="75%"
>
<dialogWarnInfo
:editQuery="curCorp"
></dialogWarnInfo>
</el-dialog>
</div>
</template>
<script>
import {currentGET, currentPOST} from '@/api/modules'
import dialogWarnInfo from "../../../../../udi-cpt-bigvis/src/views/manu/dialogWarnInfo.vue";
export default {
data() {
return {
gatewayno: '',
config: {
showValue: true,
unit: "",
data: []
},
activeName: 'first',
list: [],
page: 1,
limit: 10,
total: 0,
addDialogVisible: false,
curCorp: {},
companyTypeMap: {
1: "生产企业",
2: "经营企业",
3: "医疗机构",
},
};
},
props: {
regionCode: {
type: Object,
required: true,
},
},
created() {
this.getData()
},
computed: {},
mounted() {
},
components: {dialogWarnInfo},
beforeDestroy() {
this.clearData()
},
methods: {
tableRowClassName({row, rowIndex}) {
if (rowIndex === 1) {
return 'warning-row';
} else if (rowIndex === 3) {
return 'success-row';
}
return '';
},
clearData() {
if (this.timer) {
clearInterval(this.timer)
this.timer = null
}
},
//
switper() {
if (this.timer) {
return
}
let looper = (a) => {
this.getData()
};
this.timer = setInterval(looper, this.$store.state.setting.echartsAutoTime);
},
intentDetail(row) {
this.curCorp = row;
this.addDialogVisible = true;
},
getData() {
currentGET('warnMsg', {page: this.page, limit: this.limit}).then(res => {
if (res.code == 20000) {
this.list = res.data.list
} else {
this.pageflag = false
this.srcList = []
this.$Message({
text: res.msg,
type: 'warning'
})
}
}
)
},
}
,
}
;
</script>
<style lang='scss' scoped>
.list_Wrap {
height: 100%;
overflow: hidden;
:deep(.kong) {
width: auto;
}
}
//.el-table .warning-row {
// background: oldlace;
//}
//
//.el-table .success-row {
// background: #f0f9eb;
//}
/*最外层透明*/
::v-deep .el-table,
::v-deep .el-table__expanded-cell {
background-color: transparent !important;
}
/* 表格内背景颜色 */
::v-deep .el-table th,
::v-deep .el-table tr,
::v-deep .el-table td {
.warning-row {
background-color: #e24419;
}
.success-row {
background-color: #57d213;
}
background-color: transparent !important;
}
::v-deep .el-table th {
background-color: #2f70be !important;
font-size: 16px;
font-weight: bold;
color: #fff;
}
::v-deep .el-tabs__item {
font-size: 14px; /* 调整字体大小 / / 调整字体颜色 */
color: #d2c4c4;
}
::v-deep .el-tabs__item.is-active {
font-size: 14px;
font-weight: bold;
color: white;
}
</style>

@ -0,0 +1,156 @@
<!--
* @Author: daidai
* @Date: 2022-02-28 16:16:42
* @LastEditors: Please set LastEditors
* @LastEditTime: 2022-10-25 09:18:22
* @FilePath: \web-pc\src\pages\big-screen\view\indexs\left-bottom.vue
-->
<template>
<Echart id="leftCenter" :options="options" class="left_center_inner" v-if="pageflag" ref="charts"/>
<Reacquire v-else @onclick="getData" style="line-height:200px">
重新获取
</Reacquire>
</template>
<script>
import {currentGET} from '@/api/modules'
export default {
data() {
return {
options: {},
countUserNumData: {
lockNum: 0,
onlineNum: 0,
offlineNum: 0,
totalNum: 0
},
pageflag: true,
timer: null
};
},
created() {
this.getData()
},
mounted() {
},
beforeDestroy() {
this.clearData()
},
methods: {
clearData() {
if (this.timer) {
clearInterval(this.timer)
this.timer = null
}
},
getData() {
this.pageflag = true
// this.pageflag =false
currentGET('big1').then(res => {
//
if (!this.timer) {
console.log("设备总览", res);
}
if (res.code == 20000) {
this.countUserNumData = res.data
this.$nextTick(() => {
this.init()
})
} else {
this.pageflag = false
this.$Message({
text: res.msg,
type: 'warning'
})
}
})
},
init() {
this.options = {
title: {
text: ["总数 0 "].join("\n"),
// subtext: 'Fake Data',
// left: 'center'
textStyle: {
color: "#ffffff",
lineHeight: 20,
}
},
color:
[
"#fc8452",
"#fac858",
"#73c0de",
"#3ba272",
"#5470c6",
"#5470c6",
"#91cc75",
"#ee6666",
"#9a60b4",
"#ea7ccc"
],
tooltip: {
trigger: 'item'
},
// legend: {
// orient: 'vertical',
// left: 'left'
// },
series: [
{
width: "100%",
height: "100%",
name: 'Access From',
type: 'pie',
radius: '50%',
data: [
{value: 0, name: '资质预警'},
{value: 0, name: '其他预警'},
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
},
label: {
formatter: " {b|{b}} \n {c|{c}个} {per|{d}%} ",
// position: "outside",
rich: {
b: {
color: "#fff",
fontSize: 12,
lineHeight: 26,
},
c: {
color: "#31ABE3",
fontSize: 14,
},
d: {
color: "#31ABE3",
fontSize: 14,
},
per: {
color: "#31ABE3",
fontSize: 14,
},
},
}
}
]
};
},
},
};
</script>
<style lang='scss' scoped>
</style>

@ -0,0 +1,154 @@
<!--
* @Author: daidai
* @Date: 2022-02-28 16:16:42
* @LastEditors: Please set LastEditors
* @LastEditTime: 2022-10-25 09:18:22
* @FilePath: \web-pc\src\pages\big-screen\view\indexs\left-bottom.vue
-->
<template>
<Echart id="leftCenter" :options="options" class="left_center_inner" v-if="pageflag" ref="charts"/>
<Reacquire v-else @onclick="getData" style="line-height:200px">
重新获取
</Reacquire>
</template>
<script>
import {currentGET} from '@/api/modules'
export default {
data() {
return {
options: {},
countUserNumData: {
lockNum: 0,
onlineNum: 0,
offlineNum: 0,
totalNum: 0
},
pageflag: true,
timer: null
};
},
created() {
this.getData()
},
mounted() {
},
beforeDestroy() {
this.clearData()
},
methods: {
clearData() {
if (this.timer) {
clearInterval(this.timer)
this.timer = null
}
},
getData() {
this.pageflag = true
// this.pageflag =false
currentGET('big1').then(res => {
//
if (!this.timer) {
console.log("设备总览", res);
}
if (res.code == 20000) {
this.countUserNumData = res.data
this.$nextTick(() => {
this.init()
})
} else {
this.pageflag = false
this.$Message({
text: res.msg,
type: 'warning'
})
}
})
},
init() {
this.options = {
title: {
text: ["总数 1 "].join("\n"),
// subtext: 'Fake Data',
// left: 'center'
textStyle: {
color: "#ffffff",
lineHeight: 20,
}
},
color:
[
"#fc8452",
"#fac858",
"#73c0de",
"#3ba272",
"#5470c6",
"#5470c6",
"#91cc75",
"#ee6666",
"#9a60b4",
"#ea7ccc"
],
tooltip: {
trigger: 'item'
},
// legend: {
// orient: 'vertical',
// left: 'left'
// },
series: [
{
width: "100%",
height: "100%",
name: 'Access From',
type: 'pie',
radius: '50%',
data: [
{value: 1, name: '产品预警'},
{value: 0, name: '资质预警'},
{value: 0, name: '其他预警'},
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
},
label: {
formatter: " {b|{b}} \n {c|{c}个} {per|{d}%} ",
// position: "outside",
rich: {
b: {
color: "#fff",
fontSize: 12,
lineHeight: 26,
},
c: {
color: "#31ABE3",
fontSize: 14,
},
d: {
color: "#31ABE3",
fontSize: 14,
},
per: {
color: "#31ABE3",
fontSize: 14,
},
},
}
}
]
};
},
},
};
</script>
<style lang='scss' scoped>
</style>

@ -0,0 +1,154 @@
<!--
* @Author: daidai
* @Date: 2022-02-28 16:16:42
* @LastEditors: Please set LastEditors
* @LastEditTime: 2022-10-25 09:18:22
* @FilePath: \web-pc\src\pages\big-screen\view\indexs\left-bottom.vue
-->
<template>
<Echart id="leftCenter" :options="options" class="left_center_inner" v-if="pageflag" ref="charts"/>
<Reacquire v-else @onclick="getData" style="line-height:200px">
重新获取
</Reacquire>
</template>
<script>
import {currentGET} from '@/api/modules'
export default {
data() {
return {
options: {},
countUserNumData: {
lockNum: 0,
onlineNum: 0,
offlineNum: 0,
totalNum: 0
},
pageflag: true,
timer: null
};
},
created() {
this.getData()
},
mounted() {
},
beforeDestroy() {
this.clearData()
},
methods: {
clearData() {
if (this.timer) {
clearInterval(this.timer)
this.timer = null
}
},
getData() {
this.pageflag = true
// this.pageflag =false
currentGET('big1').then(res => {
//
if (!this.timer) {
console.log("设备总览", res);
}
if (res.code == 20000) {
this.countUserNumData = res.data
this.$nextTick(() => {
this.init()
})
} else {
this.pageflag = false
this.$Message({
text: res.msg,
type: 'warning'
})
}
})
},
init() {
this.options = {
title: {
text: ["总数 1 "].join("\n"),
// subtext: 'Fake Data',
// left: 'center'
textStyle: {
color: "#ffffff",
lineHeight: 20,
}
},
color:
[
"#fc8452",
"#fac858",
"#73c0de",
"#3ba272",
"#5470c6",
"#5470c6",
"#91cc75",
"#ee6666",
"#9a60b4",
"#ea7ccc"
],
tooltip: {
trigger: 'item'
},
// legend: {
// orient: 'vertical',
// left: 'left'
// },
series: [
{
width: "100%",
height: "100%",
name: 'Access From',
type: 'pie',
radius: '50%',
data: [
{value: 0, name: '生产企业'},
{value: 0, name: '医疗机构'},
{value: 1, name: '经营企业'},
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
},
label: {
formatter: " {b|{b}} \n {c|{c}个} {per|{d}%} ",
// position: "outside",
rich: {
b: {
color: "#fff",
fontSize: 12,
lineHeight: 26,
},
c: {
color: "#31ABE3",
fontSize: 14,
},
d: {
color: "#31ABE3",
fontSize: 14,
},
per: {
color: "#31ABE3",
fontSize: 14,
},
},
}
}
]
};
},
},
};
</script>
<style lang='scss' scoped>
</style>

@ -0,0 +1,54 @@
<template>
<div class="block">
<el-descriptions title="" :column="2" border class="el-descriptions">
<el-descriptions-item label="企业名称">
{{ editQuery.companyName }}
</el-descriptions-item>
<el-descriptions-item label="统一社会信用代码">{{ editQuery.creditNum }}</el-descriptions-item>
<el-descriptions-item label="企业类别">{{ companyTypeMap[editQuery.bussinessStatus] }}</el-descriptions-item>
<el-descriptions-item label="法人名称">
{{ editQuery.legalPerson }}
</el-descriptions-item>
<el-descriptions-item label="联系电话">
{{ editQuery.fmobile }}
</el-descriptions-item>
<el-descriptions-item label="联系人">
{{ editQuery.name }}
</el-descriptions-item>
<el-descriptions-item label="邮箱">
{{ editQuery.xemail }}
</el-descriptions-item>
<el-descriptions-item label="注册时间">
{{ editQuery.registerTime }}
</el-descriptions-item>
<el-descriptions-item label="注册地址">
{{ editQuery.registerAddress }}
</el-descriptions-item>
</el-descriptions>
</div>
</template>
<script>
export default {
name: "dialogCorpInfo",
data() {
return {
companyTypeMap: {
1: "生产企业",
2: "经营企业",
3: "医疗机构",
},
};
},
props: {
editQuery: {
type: Object,
required: true,
},
},
}
</script>
<style scoped>
</style>

@ -0,0 +1,135 @@
<template>
<div class="block">
<el-descriptions title="" :column="2" border class="el-descriptions">
<el-descriptions-item label="企业名称">
{{ editQuery.companyName }}
</el-descriptions-item>
<el-descriptions-item label="统一社会信用代码">{{ editQuery.creditNum }}</el-descriptions-item>
<el-descriptions-item label="法人名称">
{{ editQuery.legalPerson }}
</el-descriptions-item>
<el-descriptions-item label="联系电话">
{{ editQuery.fmobile }}
</el-descriptions-item>
<el-descriptions-item label="负责人">
{{ editQuery.name }}
</el-descriptions-item>
<el-descriptions-item label="负责人电话">
{{ editQuery.fmobile }}
</el-descriptions-item>
<el-descriptions-item label="注册时间">
{{ editQuery.registerTime }}
</el-descriptions-item>
<el-descriptions-item label="注册地址">
{{ editQuery.registerAddress }}
</el-descriptions-item>
</el-descriptions>
<el-table v-loading="loading" :data="list" key="1" style="width: 100%;margin-top: 20px"
border>
<el-table-column label="序号" type="index" width="55"></el-table-column>
<el-table-column label="产品通用名称" prop="cpmctymc" width="180" show-overflow-tooltip></el-table-column>
<el-table-column label="规格型号" prop="ggxh" width="180" show-overflow-tooltip></el-table-column>
<el-table-column label="医疗器械注册人" prop="ylqxzcrbarmc" width="180" show-overflow-tooltip></el-table-column>
<el-table-column label="注册/备案号" prop="zczbhhzbapzbh" width="180" show-overflow-tooltip></el-table-column>
<el-table-column label="器械类别" prop="cplx" width="120" show-overflow-tooltip></el-table-column>
<el-table-column label="产品类别" prop="hchzsb" width="120" show-overflow-tooltip></el-table-column>
<el-table-column label="是否赋码" prop="" width="100" show-overflow-tooltip>
<template slot-scope="scope">
<span></span>
</template>
</el-table-column>
<el-table-column label="产品描述" prop="cpms" width="180" show-overflow-tooltip></el-table-column>
<el-table-column label="运输条件" prop="" width="180" show-overflow-tooltip></el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:limit.sync="filterQuery.limit"
:page.sync="filterQuery.page"
@pagination="handleCurrentChange"
></pagination>
</div>
</template>
<script>
import {currentGET, currentPOST} from "@/api";
export default {
name: "dialogCorpProduct",
data() {
return {
companyTypeMap: {
1: "生产企业",
2: "经营企业",
3: "医疗机构",
},
list: [],
total: 0,
filterQuery: {
page: 1,
limit: 10,
companyName: null,
companyIdFk: null,
},
regionCode: null,
};
},
props: {
editQuery: {
type: Object,
required: true,
},
},
mounted() {
this.getList();
},
methods: {
getList() {
this.filterQuery.regionCode = this.regionCode;
this.filterQuery.companyIdFk = this.editQuery.ucId;
currentGET('corpProductList', this.filterQuery
).then(res => {
if (res.code == 20000) {
this.list = res.data.list || [];
this.total = res.data.total || 0;
} else {
this.list = []
this.$Message({
text: res.msg,
type: 'warning'
})
}
})
},
handleCurrentChange() {
this.getList();
},
},
}
</script>
<style scoped>
/*最外层透明*/
::v-deep .el-table,
::v-deep .el-table__expanded-cell {
background-color: transparent !important;
color: white;
}
/* 表格内背景颜色 */
::v-deep .el-table th,
::v-deep .el-table tr,
::v-deep .el-table td {
background-color: transparent !important;
color: white;
}
</style>

@ -0,0 +1,290 @@
<!--
* @Author: daidai
* @Date: 2022-03-04 09:23:59
* @LastEditors: Please set LastEditors
* @LastEditTime: 2022-05-07 11:05:02
* @FilePath: \web-pc\src\pages\big-screen\view\indexs\nmpa.vue
-->
<template>
<div>
<div style="margin-top: 1px;margin-bottom: 1px">
<el-button type="warning" icon="search" @click="addManufacturerCert" style="text-align:right;margin-left: 15px">
按年度统计
</el-button>
<el-button type="warning" icon="search" @click="addManufacturerCert" style="text-align:right">按季度统计</el-button>
<el-button type="warning" icon="search" @click="addManufacturerCert" style="text-align:right">按月份统计</el-button>
<span class="demonstration" style="margin-left: 20px;color: yellow"></span>
<el-date-picker
v-model="value2"
type="daterange"
align="right"
style="margin-left: 20px;color: yellow;margin-left: 15px;font-weight: bold"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions">
</el-date-picker>
<el-button type="warning" icon="search" @click="addManufacturerCert" style="margin-left: 15px">自定义统计</el-button>
</div>
<div class="contents">
<div class="contetn_left">
<ItemWrap
class="contetn_lr-item"
title="单位预警情况"
>
<checkCorpItem/>
</ItemWrap>
<ItemWrap
class="contetn_lr-item"
title="产品预警情况"
>
<checkProductItem/>
</ItemWrap>
<ItemWrap
class="contetn_lr-item"
title="单位分类占比"
>
<corpTypeItem/>
</ItemWrap>
</div>
<div class="contetn_center">
<ItemWrap
class="contetn_lr-item"
title="异常信息列表"
style="padding: 0 10px 16px 10px;height: 570px">
<centerTop/>
</ItemWrap>
<div style="display: flex">
<ItemWrap
class="contetn_lr-item"
title="进口与非进口占比"
>
<jinKouItem/>
</ItemWrap>
<ItemWrap
class="contetn_lr-item"
title="医保与非医保占比"
>
<yiBaoItem/>
</ItemWrap>
</div>
</div>
<div class="contetn_right">
<ItemWrap
class="contetn_lr-item"
title="集采与非集采占比"
>
<jiCaiItem/>
</ItemWrap>
<ItemWrap
class="contetn_lr-item"
title="器械与体外诊断试剂占比"
>
<LeftBottom/>
</ItemWrap>
<ItemWrap class="contetn_lr-item" title="品种分类占比">
<RightBottom/>
</ItemWrap>
</div>
</div>
</div>
</template>
<script>
import LeftBottom from "./left-bottom.vue";
import LeftBottom2 from "./left-bottom2.vue";
import centerTop from "./center-top";
import RightBottom from "./right-bottom.vue";
import jiCaiItem from "./jiCaiItem.vue";
import yiBaoItem from "./yiBaoItem.vue";
import jinKouItem from "./jinKouItem.vue";
import corpTypeItem from "./corpTypeItem.vue";
import checkCorpItem from "./checkCorpItem.vue";
import checkProductItem from "./checkProductItem.vue";
export default {
components: {
LeftBottom,
RightBottom,
centerTop, LeftBottom2, jiCaiItem, yiBaoItem, jinKouItem, corpTypeItem
, checkCorpItem, checkProductItem
},
data() {
return {
histogramChart1: {},
};
},
filters: {
numsFilter(msg) {
return msg || 0;
},
},
created() {
this.init()
},
mounted() {
},
methods: {
init() {
this.histogramChart1 = {
color: ['#5bc0de'],
grid: {
left: '5%',
right: '5%',
bottom: '5%',
containLabel: true
},
tooltip: {
trigger: 'item',
formatter: "{a}<br/>{b}<br/>{c}"
},
calculable: true,
xAxis: [
{
type: 'category',
data: ['一类', '二类', '三类'],
axisLine: {
lineStyle: {
color: '#5bc0de'
},
},
axisLabel: {
interval: 0,
rotate: 0,
textStyle: {
color: '#fff'
}
}
}
],
yAxis: [
{
axisTick: {
show: false
},
type: 'value',
axisLine: {
lineStyle: {
color: '#5bc0de'
},
},
splitLine: {
"show": false
},
axisLabel: {
textStyle: {
color: '#fff'
},
formatter: function (value) {
return value + ""
},
},
}
],
series: [
{
name: '',
type: 'bar',
barWidth: 20,
data: [0, 1, 2],
label: {
normal: {
show: true,//
position: 'top',//
textStyle: { //
color: '#fff'
}
}
}
},
]
};
},
},
};
</script>
<style lang="scss" scoped>
//
.contents {
//background: #000d4a url(../../assets/img/other/bg.jpg) center top;
.contetn_left,
.contetn_right {
width: 24.5%;
box-sizing: border-box;
// padding: 16px 0;
}
//
.contetn_lr-item {
height: 282px;
margin-top: 10px;
}
.contetn_cr-item {
height: 380px;
margin-top: 15px;
}
.contetn_center_top {
width: 100%;
}
//
.contetn_center {
width: 50%;
display: flex;
flex-direction: column;
//justify-content: space-around;
}
.contetn_center-bottom {
height: 380px;
}
////
//.contetn_left,
//.contetn_right {
// display: flex;
// flex-direction: column;
// margin-top: 25px;
// //justify-content: space-around;
// position: relative;
//
//
//}
}
@keyframes rotating {
0% {
-webkit-transform: rotate(0) scale(1);
transform: rotate(0) scale(1);
}
50% {
-webkit-transform: rotate(180deg) scale(1.1);
transform: rotate(180deg) scale(1.1);
}
100% {
-webkit-transform: rotate(360deg) scale(1);
transform: rotate(360deg) scale(1);
}
}
</style>

@ -0,0 +1,223 @@
<!--
* @Author: daidai
* @Date: 2022-02-28 16:16:42
* @LastEditors: Please set LastEditors
* @LastEditTime: 2022-10-25 09:18:22
* @FilePath: \web-pc\src\pages\big-screen\view\indexs\left-bottom.vue
-->
<template>
<Echart id="leftCenter" :options="options" class="left_center_inner" v-if="pageflag" ref="charts"/>
<Reacquire v-else @onclick="getData" style="line-height:200px">
重新获取
</Reacquire>
</template>
<script>
import {currentGET} from '@/api/modules'
export default {
data() {
return {
options: {},
countUserNumData: {
lockNum: 0,
onlineNum: 0,
offlineNum: 0,
totalNum: 0
},
pageflag: true,
timer: null
};
},
created() {
this.getData()
},
mounted() {
},
beforeDestroy() {
this.clearData()
},
methods: {
clearData() {
if (this.timer) {
clearInterval(this.timer)
this.timer = null
}
},
getData() {
this.pageflag = true
// this.pageflag =false
currentGET('nmapCount').then(res => {
//
if (!this.timer) {
console.log("国家库产品标识分类", res);
}
if (res.code == 20000) {
this.countUserNumData = res.data
this.$nextTick(() => {
this.init()
})
} else {
this.pageflag = false
this.$Message({
text: res.msg,
type: 'warning'
})
}
})
},
//
switper() {
if (this.timer) {
return
}
let looper = (a) => {
this.getData()
};
this.timer = setInterval(looper, this.$store.state.setting.echartsAutoTime);
let myChart = this.$refs.charts.chart
myChart.on('mouseover', params => {
this.clearData()
});
myChart.on('mouseout', params => {
this.timer = setInterval(looper, this.$store.state.setting.echartsAutoTime);
});
},
init() {
let total = 1;
let colors = ["#ffca29", "#01c6fd"];
let piedata = {
name: "集采/非集采",
type: "pie",
radius: ["42%", "65%"],
avoidLabelOverlap: false,
itemStyle: {
borderRadius: 4,
borderColor: "rgba(0,0,0,0)",
borderWidth: 2,
},
color: colors,
data: [
{
value: 1,
name: "集采",
label: {
shadowColor: colors[0],
},
},
{
value: 0,
name: "非集采",
label: {
shadowColor: colors[2],
},
},
],
};
this.options = {
title: {
// zlevel: 0,
text: ["{value|" + total + "}", "{name|总数}"].join("\n"),
top: "center",
left: "center",
textStyle: {
rich: {
value: {
color: "#ffffff",
fontSize: 24,
fontWeight: "bold",
lineHeight: 20,
},
name: {
color: "#ffffff",
lineHeight: 20,
},
},
},
},
tooltip: {
trigger: "item",
backgroundColor: "rgba(0,0,0,.6)",
borderColor: "rgba(147, 235, 248, .8)",
textStyle: {
color: "#FFF",
},
},
legend: {
show: false,
top: "5%",
left: "center",
},
series: [
//
{
...piedata,
tooltip: {show: true},
label: {
formatter: " {b|{b}} \n {c|{c}个}",
// position: "outside",
rich: {
b: {
color: "#fff",
fontSize: 12,
lineHeight: 26,
},
c: {
color: "#31ABE3",
fontSize: 14,
},
per: {
color: "#31ABE3",
fontSize: 14,
},
},
},
labelLine: {
length: 20, // 线
length2: 36, // 线
show: true,
},
emphasis: {
show: true,
},
},
{
...piedata,
tooltip: {show: true},
itemStyle: {},
label: {
backgroundColor: "inherit", //auto
height: 0,
width: 0,
lineHeight: 0,
borderRadius: 2.5,
shadowBlur: 8,
shadowColor: "auto",
padding: [2.5, -2.5, 2.5, -2.5],
normal: {
show: true,
position: 'inner',
formatter: "{d}%",
color: "#fff",
},
},
labelLine: {
length: 20, // 线
length2: 36, // 线
show: false,
},
},
],
};
},
},
};
</script>
<style lang='scss' scoped>
</style>

@ -0,0 +1,223 @@
<!--
* @Author: daidai
* @Date: 2022-02-28 16:16:42
* @LastEditors: Please set LastEditors
* @LastEditTime: 2022-10-25 09:18:22
* @FilePath: \web-pc\src\pages\big-screen\view\indexs\left-bottom.vue
-->
<template>
<Echart id="leftCenter" :options="options" class="left_center_inner" v-if="pageflag" ref="charts"/>
<Reacquire v-else @onclick="getData" style="line-height:200px">
重新获取
</Reacquire>
</template>
<script>
import {currentGET} from '@/api/modules'
export default {
data() {
return {
options: {},
countUserNumData: {
lockNum: 0,
onlineNum: 0,
offlineNum: 0,
totalNum: 0
},
pageflag: true,
timer: null
};
},
created() {
this.getData()
},
mounted() {
},
beforeDestroy() {
this.clearData()
},
methods: {
clearData() {
if (this.timer) {
clearInterval(this.timer)
this.timer = null
}
},
getData() {
this.pageflag = true
// this.pageflag =false
currentGET('nmapCount').then(res => {
//
if (!this.timer) {
console.log("国家库产品标识分类", res);
}
if (res.code == 20000) {
this.countUserNumData = res.data
this.$nextTick(() => {
this.init()
})
} else {
this.pageflag = false
this.$Message({
text: res.msg,
type: 'warning'
})
}
})
},
//
switper() {
if (this.timer) {
return
}
let looper = (a) => {
this.getData()
};
this.timer = setInterval(looper, this.$store.state.setting.echartsAutoTime);
let myChart = this.$refs.charts.chart
myChart.on('mouseover', params => {
this.clearData()
});
myChart.on('mouseout', params => {
this.timer = setInterval(looper, this.$store.state.setting.echartsAutoTime);
});
},
init() {
let total = 1;
let colors = ["#ffca29", "#01c6fd"];
let piedata = {
name: "进口/非进口",
type: "pie",
radius: ["42%", "65%"],
avoidLabelOverlap: false,
itemStyle: {
borderRadius: 4,
borderColor: "rgba(0,0,0,0)",
borderWidth: 2,
},
color: colors,
data: [
{
value: 1,
name: "非进口",
label: {
shadowColor: colors[0],
},
},
{
value: 0,
name: "进口",
label: {
shadowColor: colors[2],
},
},
],
};
this.options = {
title: {
// zlevel: 0,
text: ["{value|" + total + "}", "{name|总数}"].join("\n"),
top: "center",
left: "center",
textStyle: {
rich: {
value: {
color: "#ffffff",
fontSize: 24,
fontWeight: "bold",
lineHeight: 20,
},
name: {
color: "#ffffff",
lineHeight: 20,
},
},
},
},
tooltip: {
trigger: "item",
backgroundColor: "rgba(0,0,0,.6)",
borderColor: "rgba(147, 235, 248, .8)",
textStyle: {
color: "#FFF",
},
},
legend: {
show: false,
top: "5%",
left: "center",
},
series: [
//
{
...piedata,
tooltip: {show: true},
label: {
formatter: " {b|{b}} \n {c|{c}个}",
// position: "outside",
rich: {
b: {
color: "#fff",
fontSize: 12,
lineHeight: 26,
},
c: {
color: "#31ABE3",
fontSize: 14,
},
per: {
color: "#31ABE3",
fontSize: 14,
},
},
},
labelLine: {
length: 20, // 线
length2: 36, // 线
show: true,
},
emphasis: {
show: true,
},
},
{
...piedata,
tooltip: {show: true},
itemStyle: {},
label: {
backgroundColor: "inherit", //auto
height: 0,
width: 0,
lineHeight: 0,
borderRadius: 2.5,
shadowBlur: 8,
shadowColor: "auto",
padding: [2.5, -2.5, 2.5, -2.5],
normal: {
show: true,
position: 'inner',
formatter: "{d}%",
color: "#fff",
},
},
labelLine: {
length: 20, // 线
length2: 36, // 线
show: false,
},
},
],
};
},
},
};
</script>
<style lang='scss' scoped>
</style>

@ -0,0 +1,223 @@
<!--
* @Author: daidai
* @Date: 2022-02-28 16:16:42
* @LastEditors: Please set LastEditors
* @LastEditTime: 2022-10-25 09:18:22
* @FilePath: \web-pc\src\pages\big-screen\view\indexs\left-bottom.vue
-->
<template>
<Echart id="leftCenter" :options="options" class="left_center_inner" v-if="pageflag" ref="charts"/>
<Reacquire v-else @onclick="getData" style="line-height:200px">
重新获取
</Reacquire>
</template>
<script>
import {currentGET} from '@/api/modules'
export default {
data() {
return {
options: {},
countUserNumData: {
lockNum: 0,
onlineNum: 0,
offlineNum: 0,
totalNum: 0
},
pageflag: true,
timer: null
};
},
created() {
this.getData()
},
mounted() {
},
beforeDestroy() {
this.clearData()
},
methods: {
clearData() {
if (this.timer) {
clearInterval(this.timer)
this.timer = null
}
},
getData() {
this.pageflag = true
// this.pageflag =false
currentGET('nmapCount').then(res => {
//
if (!this.timer) {
console.log("国家库产品标识分类", res);
}
if (res.code == 20000) {
this.countUserNumData = res.data
this.$nextTick(() => {
this.init()
})
} else {
this.pageflag = false
this.$Message({
text: res.msg,
type: 'warning'
})
}
})
},
//
switper() {
if (this.timer) {
return
}
let looper = (a) => {
this.getData()
};
this.timer = setInterval(looper, this.$store.state.setting.echartsAutoTime);
let myChart = this.$refs.charts.chart
myChart.on('mouseover', params => {
this.clearData()
});
myChart.on('mouseout', params => {
this.timer = setInterval(looper, this.$store.state.setting.echartsAutoTime);
});
},
init() {
let total = 1;
let colors = ["#ffca29", "#01c6fd"];
let piedata = {
name: "进口/非进口",
type: "pie",
radius: ["42%", "65%"],
avoidLabelOverlap: false,
itemStyle: {
borderRadius: 4,
borderColor: "rgba(0,0,0,0)",
borderWidth: 2,
},
color: colors,
data: [
{
value: 0,
name: "进口",
label: {
shadowColor: colors[0],
},
},
{
value: 1,
name: "非进口",
label: {
shadowColor: colors[2],
},
},
],
};
this.options = {
title: {
// zlevel: 0,
text: ["{value|" + total + "}", "{name|总数}"].join("\n"),
top: "center",
left: "center",
textStyle: {
rich: {
value: {
color: "#ffffff",
fontSize: 24,
fontWeight: "bold",
lineHeight: 20,
},
name: {
color: "#ffffff",
lineHeight: 20,
},
},
},
},
tooltip: {
trigger: "item",
backgroundColor: "rgba(0,0,0,.6)",
borderColor: "rgba(147, 235, 248, .8)",
textStyle: {
color: "#FFF",
},
},
legend: {
show: false,
top: "5%",
left: "center",
},
series: [
//
{
...piedata,
tooltip: {show: true},
label: {
formatter: " {b|{b}} \n {c|{c}个}",
// position: "outside",
rich: {
b: {
color: "#fff",
fontSize: 12,
lineHeight: 26,
},
c: {
color: "#31ABE3",
fontSize: 14,
},
per: {
color: "#31ABE3",
fontSize: 14,
},
},
},
labelLine: {
length: 20, // 线
length2: 36, // 线
show: true,
},
emphasis: {
show: true,
},
},
{
...piedata,
tooltip: {show: true},
itemStyle: {},
label: {
backgroundColor: "inherit", //auto
height: 0,
width: 0,
lineHeight: 0,
borderRadius: 2.5,
shadowBlur: 8,
shadowColor: "auto",
padding: [2.5, -2.5, 2.5, -2.5],
normal: {
show: true,
position: 'inner',
formatter: "{d}%",
color: "#fff",
},
},
labelLine: {
length: 20, // 线
length2: 36, // 线
show: false,
},
},
],
};
},
},
};
</script>
<style lang='scss' scoped>
</style>

@ -0,0 +1,238 @@
<!--
* @Author: daidai
* @Date: 2022-02-28 16:16:42
* @LastEditors: Please set LastEditors
* @LastEditTime: 2022-10-25 09:18:22
* @FilePath: \web-pc\src\pages\big-screen\view\indexs\left-bottom.vue
-->
<template>
<Echart id="leftCenter" :options="options" class="left_center_inner" v-if="pageflag" ref="charts"/>
<Reacquire v-else @onclick="getData" style="line-height:200px">
重新获取
</Reacquire>
</template>
<script>
import {currentGET} from '@/api/modules'
export default {
data() {
return {
options: {},
countUserNumData: {
lockNum: 0,
onlineNum: 0,
offlineNum: 0,
totalNum: 0
},
pageflag: true,
timer: null
};
},
created() {
this.getData()
},
mounted() {
},
beforeDestroy() {
this.clearData()
},
methods: {
clearData() {
if (this.timer) {
clearInterval(this.timer)
this.timer = null
}
},
getData() {
this.pageflag = true
// this.pageflag =false
currentGET('nmapCount').then(res => {
//
if (!this.timer) {
console.log("国家库产品标识分类", res);
}
if (res.code == 20000) {
this.countUserNumData = res.data
this.$nextTick(() => {
this.init()
})
} else {
this.pageflag = false
this.$Message({
text: res.msg,
type: 'warning'
})
}
})
},
//
switper() {
if (this.timer) {
return
}
let looper = (a) => {
this.getData()
};
this.timer = setInterval(looper, this.$store.state.setting.echartsAutoTime);
let myChart = this.$refs.charts.chart
myChart.on('mouseover', params => {
this.clearData()
});
myChart.on('mouseout', params => {
this.timer = setInterval(looper, this.$store.state.setting.echartsAutoTime);
});
},
init() {
let total = 1;
let colors = ["#ffca29", "#01c6fd", "#3cb879"];
let piedata = {
name: "已申报产品标识",
type: "pie",
radius: ["42%", "65%"],
avoidLabelOverlap: false,
itemStyle: {
borderRadius: 4,
borderColor: "rgba(0,0,0,0)",
borderWidth: 2,
},
color: colors,
data: [
// {
// value: 0,
// name: "",
// label: {
// shadowColor: colors[0],
// },
// },
{
value: 0,
name: "体外诊断试剂类",
label: {
shadowColor: colors[0],
},
},
{
value: 1,
name: "器械类",
label: {
shadowColor: colors[2],
},
},
// {
// value: this.countUserNumData.manuCount,
// name: "",
// label: {
// shadowColor: colors[1],
// },
// },
],
};
this.options = {
title: {
// zlevel: 0,
text: ["{value|" + total + "}", "{name|总数}"].join("\n"),
top: "center",
left: "center",
textStyle: {
rich: {
value: {
color: "#ffffff",
fontSize: 24,
fontWeight: "bold",
lineHeight: 20,
},
name: {
color: "#ffffff",
lineHeight: 20,
},
},
},
},
tooltip: {
trigger: "item",
backgroundColor: "rgba(0,0,0,.6)",
borderColor: "rgba(147, 235, 248, .8)",
textStyle: {
color: "#FFF",
},
},
legend: {
show: false,
top: "5%",
left: "center",
},
series: [
//
{
...piedata,
tooltip: {show: true},
label: {
formatter: " {b|{b}} \n {c|{c}个}",
// position: "outside",
rich: {
b: {
color: "#fff",
fontSize: 12,
lineHeight: 26,
},
c: {
color: "#31ABE3",
fontSize: 14,
},
per: {
color: "#31ABE3",
fontSize: 14,
},
},
},
labelLine: {
length: 20, // 线
length2: 36, // 线
show: true,
},
emphasis: {
show: true,
},
},
{
...piedata,
tooltip: {show: true},
itemStyle: {},
label: {
backgroundColor: "inherit", //auto
height: 0,
width: 0,
lineHeight: 0,
borderRadius: 2.5,
shadowBlur: 8,
shadowColor: "auto",
padding: [2.5, -2.5, 2.5, -2.5],
normal: {
show: true,
position: 'inner',
formatter: "{d}%",
color: "#fff",
},
},
labelLine: {
length: 20, // 线
length2: 36, // 线
show: false,
},
},
],
};
},
},
};
</script>
<style lang='scss' scoped>
</style>

@ -0,0 +1,150 @@
<template>
<Echart id="leftCenter" :options="options" style="width: 280px;height: 280px;margin-left: 120px;margin-top: 15px"
ref="charts"/>
</template>
<script>
export default {
name: "left-bottom2",
data() {
return {
options: {},
};
},
props: {},
mounted() {
this.init();
},
methods: {
init() {
let dataStyle = {
normal: {
label: {
show: false
},
labelLine: {
show: false
},
//shadowBlur: 40,
//shadowColor: 'rgba(40, 40, 40, 1)',
}
};
let placeHolderStyle = {
normal: {
color: 'rgba(255,255,255,.05)',
label: {show: false,},
labelLine: {show: false}
},
emphasis: {
color: 'rgba(0,0,0,0)'
}
};
this.options = {
color: ['#db2573', '#3ad60f', '#d69e0f', '#0fd6d6'],
tooltip: {
show: true,
formatter: "{a} : {c} "
},
legend: {
itemWidth: 10,
itemHeight: 10,
itemGap: 12,
bottom: '3%',
data: ['医保', '非医保', '集采', '非集采'],
textStyle: {
color: 'rgba(255,255,255,.6)',
}
},
series: [
{
name: '医保',
type: 'pie',
clockWise: false,
center: ['50%', '42%'],
radius: ['59%', '70%'],
itemStyle: dataStyle,
hoverAnimation: false,
data: [{
value: 80,
name: '01'
}, {
value: 20,
name: 'invisible',
tooltip: {show: false},
itemStyle: placeHolderStyle
}]
},
{
name: '非医保',
type: 'pie',
clockWise: false,
center: ['50%', '42%'],
radius: ['49%', '60%'],
itemStyle: dataStyle,
hoverAnimation: false,
data: [{
value: 90,
name: '02'
}, {
value: 30,
name: 'invisible',
tooltip: {show: false},
itemStyle: placeHolderStyle
}]
},
{
name: '集采',
type: 'pie',
clockWise: false,
hoverAnimation: false,
center: ['50%', '42%'],
radius: ['39%', '50%'],
itemStyle: dataStyle,
data: [{
value: 115,
name: '03'
}, {
value: 35,
name: 'invisible',
tooltip: {show: false},
itemStyle: placeHolderStyle
}]
},
{
name: '非集采',
type: 'pie',
clockWise: false,
hoverAnimation: false,
center: ['50%', '42%'],
radius: ['29%', '40%'],
itemStyle: dataStyle,
data: [{
value: 55,
name: '04'
}, {
value: 40,
name: 'invisible',
tooltip: {show: false},
itemStyle: placeHolderStyle
}]
},
]
};
// 使
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();
});
},
},
}
</script>
<style scoped>
</style>

@ -0,0 +1,107 @@
<template>
<div>
<div class="visual_con" style="font-size: 20px">
<!-- <span>国家局UDI</span>-->
<span style="font-size: 22px">国家局UDI数据库 </span>
<span>产品标识总填报数: </span>
<span style="color: #00EAFF;font-size: 22px">{{ data.productCount }}</span>
<span>福建省已填报数: </span>
<span style="color: #00fdfa;font-size: 22px">{{ data.fjProductCount }}</span>
<span>未填报数: </span>
<span style="color: #dd6161;font-size: 22px">0</span>
<!-- <div class="visual_conTop">-->
<!-- <div class="visual_conTop_box visual_conTop2"-->
<!-- style="width: 30%"-->
<!-- >-->
<!-- <div>-->
<!-- <h3>UDI数据库总填报数</h3>-->
<!-- <p>{{ data.productCount }}</p>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="visual_conTop_box visual_conTop2"-->
<!-- style="width: 30%"-->
<!-- >-->
<!-- <div>-->
<!-- <h3>福建省已填报数</h3>-->
<!-- <p style="color: yellow">{{ data.fjProductCount }}</p>-->
<!-- </div>-->
<!-- </div>-->
<!-- &lt;!&ndash; <div class="visual_conTop_box visual_conTop2">&ndash;&gt;-->
<!-- &lt;!&ndash; <div>&ndash;&gt;-->
<!-- &lt;!&ndash; <h3>已纳入监管平台标识数</h3>&ndash;&gt;-->
<!-- &lt;!&ndash; <p>{{ data.fjCorpCount }}</p>&ndash;&gt;-->
<!-- &lt;!&ndash; </div>&ndash;&gt;-->
<!-- &lt;!&ndash; </div>&ndash;&gt;-->
<!-- &lt;!&ndash; <div class="visual_conTop_box visual_conTop2">&ndash;&gt;-->
<!-- &lt;!&ndash; <div>&ndash;&gt;-->
<!-- &lt;!&ndash; <h3>当前警情数()</h3>&ndash;&gt;-->
<!-- &lt;!&ndash; <p>7421</p>&ndash;&gt;-->
<!-- &lt;!&ndash; </div>&ndash;&gt;-->
<!-- &lt;!&ndash; </div>&ndash;&gt;-->
<!-- <div class="visual_conTop_box visual_conTop2"-->
<!-- style="width: 30%">-->
<!-- <div>-->
<!-- <h3>未填报UDID数量</h3>-->
<!-- <p style="color: #dd6161">0</p>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="clear"></div>-->
<!-- </div>-->
<!-- <div class="visual_conTop">-->
<!--&lt;!&ndash; <div class="visual_conTop_box visual_conTop2"&ndash;&gt;-->
<!--&lt;!&ndash; style="width: 45%"&ndash;&gt;-->
<!--&lt;!&ndash; >&ndash;&gt;-->
<!--&lt;!&ndash; <div>&ndash;&gt;-->
<!--&lt;!&ndash; <h3>福建省申报标识数</h3>&ndash;&gt;-->
<!--&lt;!&ndash; <p>{{ data.fjProductCount }}</p>&ndash;&gt;-->
<!--&lt;!&ndash; </div>&ndash;&gt;-->
<!--&lt;!&ndash; </div>&ndash;&gt;-->
<!-- </div>-->
</div>
</div>
</template>
<script>
import {currentGET} from '@/api/modules'
export default {
name: "center-stat",
data() {
return {
pageflag: false,
data: {
productCount: 0,
fjProductCount: 0,
fjCorpCount: 0,
}
}
},
created() {
this.getData()
},
methods: {
getData() {
this.pageflag = true;
currentGET("nmapCount").then((res) => {
if (res.code == 20000) {
this.data = res.data;
} else {
this.pageflag = false;
this.$Message.warning(res.msg);
}
});
},
},
}
</script>
<style scoped>
</style>

@ -0,0 +1,145 @@
<template>
<div class="center_bottom">
<Echart
:options="options"
id="bottomLeftChart"
class="echarts_bottom"
></Echart>
</div>
</template>
<script>
import {currentGET} from '@/api/modules'
import {graphic} from "echarts";
export default {
data() {
return {
options: {},
};
},
props: {},
mounted() {
this.init();
},
methods: {
getData() {
this.pageflag = true;
currentGET("big6", {companyName: this.companyName}).then((res) => {
if (res.success) {
this.init(res.data);
} else {
this.pageflag = false;
this.$Message({
text: res.msg,
type: "warning",
});
}
});
},
init(newData) {
this.options = {
legend: {
x: 'right',
y: 'top',
textStyle: {
color: '#4ADEFE',
}
},
grid: {
x: 30,
y: 50,
x2: 0,
y2: 45
},
tooltip: {},
dataset: {
source: [
['product', '已赋码', '未赋码'],
['一类医疗器械', 0, 0],
['二类医疗器械', 2, 0],
['三类医疗器械', 120, 48],
]
},
xAxis: {
type: 'category',
axisLine: {
show: false,
lineStyle: {
color: "#4ADEFE",
},
},
axisTick: {
alignWithLabel: true
}
},
yAxis: {
axisLine: {
lineStyle: {
color: "#4ADEFE",
}
},
splitLine: {
lineStyle: {
color: '#4ADEFE'
}
}
},
series: [
{
type: 'bar',
barMaxWidth: '10',
itemStyle: {
normal: {
color: '#F3DB5C'
},
},
label: {
normal: {
show: true,//
position: 'top',//
textStyle: { //
color: '#fff'
}
}
}
},
{
type: 'bar',
barMaxWidth: '10',
itemStyle: {
normal: {
color: '#4ADEFE'
},
},
label: {
normal: {
show: true,//
position: 'top',//
textStyle: { //
color: '#fff'
}
}
}
}
]
};
},
},
};
</script>
<style lang="scss" scoped>
.center_bottom {
width: 100%;
height: 100%;
.echarts_bottom {
width: 100%;
height: 100%;
}
}
</style>

@ -0,0 +1,236 @@
<!--
* @Author: daidai
* @Date: 2022-02-28 16:16:42
* @LastEditors: Please set LastEditors
* @LastEditTime: 2022-10-25 09:18:22
* @FilePath: \web-pc\src\pages\big-screen\view\indexs\left-bottom.vue
-->
<template>
<Echart id="leftCenter" :options="options" class="left_center_inner" v-if="pageflag" ref="charts" />
<Reacquire v-else @onclick="getData" style="line-height:200px">
重新获取
</Reacquire>
</template>
<script>
import {currentGET} from '@/api/modules'
export default {
data() {
return {
options: {},
countUserNumData: {
lockNum: 0,
onlineNum: 0,
offlineNum: 0,
totalNum: 0
},
pageflag: true,
timer: null
};
},
created() {
this.getData()
},
mounted() {
},
beforeDestroy() {
this.clearData()
},
methods: {
clearData() {
if (this.timer) {
clearInterval(this.timer)
this.timer = null
}
},
getData() {
this.pageflag = true
// this.pageflag =false
currentGET('nmapCount').then(res => {
//
if (!this.timer) {
console.log("国家库产品标识分类", res);
}
if (res.code == 20000) {
this.countUserNumData = res.data
this.$nextTick(() => {
this.init()
})
} else {
this.pageflag = false
this.$Message({
text: res.msg,
type: 'warning'
})
}
})
},
//
switper() {
if (this.timer) {
return
}
let looper = (a) => {
this.getData()
};
this.timer = setInterval(looper, this.$store.state.setting.echartsAutoTime);
let myChart = this.$refs.charts.chart
myChart.on('mouseover', params => {
this.clearData()
});
myChart.on('mouseout', params => {
this.timer = setInterval(looper, this.$store.state.setting.echartsAutoTime);
});
},
init() {
let total = 1;
let colors = ["#ffca29", "#01c6fd", "#3cb879"];
let piedata = {
name: "上报产品品类统计",
type: "pie",
radius: ["42%", "65%"],
avoidLabelOverlap: false,
itemStyle: {
borderRadius: 4,
borderColor: "rgba(0,0,0,0)",
borderWidth: 2,
},
color: colors,
data: [
// {
// value: 0,
// name: "",
// label: {
// shadowColor: colors[0],
// },
// },
{
value: 0,
name: "一类医疗器械",
label: {
shadowColor: colors[0],
},
},
{
value: 0,
name: "二类医疗器械",
label: {
shadowColor: colors[2],
},
},
{
value: 1,
name: "三类医疗器械",
label: {
shadowColor: colors[2],
},
},
],
};
this.options = {
title: {
// zlevel: 0,
text: ["{value|" + total + "}", "{name|总数}"].join("\n"),
top: "center",
left: "center",
textStyle: {
rich: {
value: {
color: "#ffffff",
fontSize: 24,
fontWeight: "bold",
lineHeight: 20,
},
name: {
color: "#ffffff",
lineHeight: 20,
},
},
},
},
tooltip: {
trigger: "item",
backgroundColor: "rgba(0,0,0,.6)",
borderColor: "rgba(147, 235, 248, .8)",
textStyle: {
color: "#FFF",
},
},
legend: {
show: false,
top: "5%",
left: "center",
},
series: [
//
{
...piedata,
tooltip: { show: true },
label: {
formatter: " {b|{b}} \n {c|{c}个}",
// position: "outside",
rich: {
b: {
color: "#fff",
fontSize: 12,
lineHeight: 26,
},
c: {
color: "#31ABE3",
fontSize: 14,
},
per: {
color: "#31ABE3",
fontSize: 14,
},
},
},
labelLine: {
length: 20, // 线
length2: 36, // 线
show: true,
},
emphasis: {
show: true,
},
},
{
...piedata,
tooltip: { show: true },
itemStyle: {},
label: {
backgroundColor: "inherit", //auto
height: 0,
width: 0,
lineHeight: 0,
borderRadius: 2.5,
shadowBlur: 8,
shadowColor: "auto",
padding: [2.5, -2.5, 2.5, -2.5],
normal: {
show: true,
position: 'inner',
formatter: "{d}%",
color: "#fff",
},
},
labelLine: {
length: 20, // 线
length2: 36, // 线
show: false,
},
},
],
};
},
},
};
</script>
<style lang='scss' scoped>
</style>

@ -0,0 +1,230 @@
<!--
* @Author: daidai
* @Date: 2022-02-28 16:16:42
* @LastEditors: Please set LastEditors
* @LastEditTime: 2022-07-20 17:57:11
* @FilePath: \web-pc\src\pages\big-screen\view\indexs\left-bottom.vue
-->
<template>
<ul class="user_Overview flex" v-if="pageflag">
<li class="user_Overview-item" style="color: #00fdfa">
<div class="user_Overview_nums allnum ">
<dv-digital-flop :config="config" style="width:100%;height:100%;"/>
</div>
<p>资质总数</p>
</li>
<li class="user_Overview-item" style="color: #07f7a8">
<div class="user_Overview_nums online">
<dv-digital-flop :config="onlineconfig" style="width:100%;height:100%;"/>
</div>
<p>正常数</p>
</li>
<li class="user_Overview-item" style="color: #e3b337">
<div class="user_Overview_nums offline">
<dv-digital-flop :config="offlineconfig" style="width:100%;height:100%;"/>
</div>
<p>预警数</p>
</li>
<li class="user_Overview-item" style="color: #f5023d">
<div class="user_Overview_nums laramnum">
<dv-digital-flop :config="laramnumconfig" style="width:100%;height:100%;"/>
</div>
<p>异常数</p>
</li>
</ul>
<Reacquire v-else @onclick="getData" line-height="200px">
重新获取
</Reacquire>
</template>
<script>
import {currentGET} from '@/api/modules'
let style = {
fontSize: 24
}
export default {
data() {
return {
options: {},
userOverview: {
alarmNum: 0,
offlineNum: 0,
onlineNum: 0,
totalNum: 0,
},
pageflag: true,
timer: null,
config: {
number: [100],
content: '{nt}',
style: {
...style,
// stroke: "#00fdfa",
fill: "#00fdfa",
},
},
onlineconfig: {
number: [0],
content: '{nt}',
style: {
...style,
// stroke: "#07f7a8",
fill: "#07f7a8",
},
},
offlineconfig: {
number: [0],
content: '{nt}',
style: {
...style,
// stroke: "#e3b337",
fill: "#e3b337",
},
},
laramnumconfig: {
number: [0],
content: '{nt}',
style: {
...style,
// stroke: "#f5023d",
fill: "#f5023d",
},
}
};
},
filters: {
numsFilter(msg) {
return msg || 0;
},
},
created() {
this.getData()
},
mounted() {
},
beforeDestroy() {
this.clearData()
},
methods: {
clearData() {
if (this.timer) {
clearInterval(this.timer)
this.timer = null
}
},
getData() {
this.pageflag = true;
currentGET("big2").then((res) => {
if (!this.timer) {
console.log("报备企业总览", res);
}
if (res.code==20000) {
this.userOverview = res.data;
this.onlineconfig = {
...this.onlineconfig,
number: [res.data.onlineCount]
}
this.config = {
...this.config,
number: [res.data.totalCount]
}
this.offlineconfig = {
...this.offlineconfig,
number: [res.data.offlineCount]
}
this.laramnumconfig = {
...this.laramnumconfig,
number: [res.data.errCount]
}
this.switper()
} else {
this.pageflag = false;
this.$Message.warning(res.msg);
}
});
},
//
switper() {
if (this.timer) {
return
}
let looper = (a) => {
this.getData()
};
this.timer = setInterval(looper, this.$store.state.setting.echartsAutoTime);
},
},
};
</script>
<style lang='scss' scoped>
.user_Overview {
li {
flex: 1;
p {
text-align: center;
height: 16px;
font-size: 16px;
}
.user_Overview_nums {
width: 100px;
height: 100px;
text-align: center;
line-height: 100px;
font-size: 22px;
margin: 50px auto 30px;
background-size: cover;
background-position: center center;
position: relative;
&::before {
content: '';
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
}
&.bgdonghua::before {
animation: rotating 14s linear infinite;
}
}
.allnum {
// background-image: url("../../assets/img/left_top_lan.png");
&::before {
background-image: url("../../../../../udi-cpt-bigvis/src/assets/img/left_top_lan.png");
}
}
.online {
&::before {
background-image: url("../../../../../udi-cpt-bigvis/src/assets/img/left_top_lv.png");
}
}
.offline {
&::before {
background-image: url("../../../../../udi-cpt-bigvis/src/assets/img/left_top_huang.png");
}
}
.laramnum {
&::before {
background-image: url("../../../../../udi-cpt-bigvis/src/assets/img/left_top_hong.png");
}
}
}
}
</style>

@ -0,0 +1,223 @@
<!--
* @Author: daidai
* @Date: 2022-02-28 16:16:42
* @LastEditors: Please set LastEditors
* @LastEditTime: 2022-10-25 09:18:22
* @FilePath: \web-pc\src\pages\big-screen\view\indexs\left-bottom.vue
-->
<template>
<Echart id="leftCenter" :options="options" class="left_center_inner" v-if="pageflag" ref="charts"/>
<Reacquire v-else @onclick="getData" style="line-height:200px">
重新获取
</Reacquire>
</template>
<script>
import {currentGET} from '@/api/modules'
export default {
data() {
return {
options: {},
countUserNumData: {
lockNum: 0,
onlineNum: 0,
offlineNum: 0,
totalNum: 0
},
pageflag: true,
timer: null
};
},
created() {
this.getData()
},
mounted() {
},
beforeDestroy() {
this.clearData()
},
methods: {
clearData() {
if (this.timer) {
clearInterval(this.timer)
this.timer = null
}
},
getData() {
this.pageflag = true
// this.pageflag =false
currentGET('nmapCount').then(res => {
//
if (!this.timer) {
console.log("国家库产品标识分类", res);
}
if (res.code == 20000) {
this.countUserNumData = res.data
this.$nextTick(() => {
this.init()
})
} else {
this.pageflag = false
this.$Message({
text: res.msg,
type: 'warning'
})
}
})
},
//
switper() {
if (this.timer) {
return
}
let looper = (a) => {
this.getData()
};
this.timer = setInterval(looper, this.$store.state.setting.echartsAutoTime);
let myChart = this.$refs.charts.chart
myChart.on('mouseover', params => {
this.clearData()
});
myChart.on('mouseout', params => {
this.timer = setInterval(looper, this.$store.state.setting.echartsAutoTime);
});
},
init() {
let total = 1;
let colors = ["#ffca29", "#01c6fd"];
let piedata = {
name: "医保/非医保",
type: "pie",
radius: ["42%", "65%"],
avoidLabelOverlap: false,
itemStyle: {
borderRadius: 4,
borderColor: "rgba(0,0,0,0)",
borderWidth: 2,
},
color: colors,
data: [
{
value: 1,
name: "医保",
label: {
shadowColor: colors[0],
},
},
{
value: 0,
name: "非医保",
label: {
shadowColor: colors[2],
},
},
],
};
this.options = {
title: {
// zlevel: 0,
text: ["{value|" + total + "}", "{name|总数}"].join("\n"),
top: "center",
left: "center",
textStyle: {
rich: {
value: {
color: "#ffffff",
fontSize: 24,
fontWeight: "bold",
lineHeight: 20,
},
name: {
color: "#ffffff",
lineHeight: 20,
},
},
},
},
tooltip: {
trigger: "item",
backgroundColor: "rgba(0,0,0,.6)",
borderColor: "rgba(147, 235, 248, .8)",
textStyle: {
color: "#FFF",
},
},
legend: {
show: false,
top: "5%",
left: "center",
},
series: [
//
{
...piedata,
tooltip: {show: true},
label: {
formatter: " {b|{b}} \n {c|{c}个}",
// position: "outside",
rich: {
b: {
color: "#fff",
fontSize: 12,
lineHeight: 26,
},
c: {
color: "#31ABE3",
fontSize: 14,
},
per: {
color: "#31ABE3",
fontSize: 14,
},
},
},
labelLine: {
length: 20, // 线
length2: 36, // 线
show: true,
},
emphasis: {
show: true,
},
},
{
...piedata,
tooltip: {show: true},
itemStyle: {},
label: {
backgroundColor: "inherit", //auto
height: 0,
width: 0,
lineHeight: 0,
borderRadius: 2.5,
shadowBlur: 8,
shadowColor: "auto",
padding: [2.5, -2.5, 2.5, -2.5],
normal: {
show: true,
position: 'inner',
formatter: "{d}%",
color: "#fff",
},
},
labelLine: {
length: 20, // 线
length2: 36, // 线
show: false,
},
},
],
};
},
},
};
</script>
<style lang='scss' scoped>
</style>
Loading…
Cancel
Save