jy-safe-app/pages/performance/index1.vue
2025-10-14 15:17:30 +08:00

1127 lines
27 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view>
<u-sticky>
<HeaderNav title="绩效"></HeaderNav>
</u-sticky>
<view class="per-title" @click="changeOpen" style="margin-top: 10px;">
<view class="personal-choose">
<view class="personal-big">个人绩效</view>
<view class="personal-small">近6个月</view>
</view>
<view>
<view v-if="openPerson===false">
<u-icon name="arrow-up"></u-icon>
</view>
<view v-if="openPerson===true">
<u-icon name="arrow-down"></u-icon>
</view>
</view>
<!-- <view :class="chooseIndex === false?'tissue-choose':'tissue'" @click="changeTisIndex">组织绩效</view> -->
</view>
<!-- </u-sticky> -->
<view class="performance" v-if="openPerson===true">
<view>
<view class="task-num">
<!-- <view style="font-size: 20px;font-weight: bold;margin-bottom: 20px;">
我的数据
</view> -->
<view class="data-content">
<view class="data-wrap">
<view class="data-title">
<!-- <view class="data-badge" style="background-color: #000000E6"></view> -->
<text class="data-text">总任务数</text>
</view>
<view class="data-num">{{chartData.TotalCount || 0}}</view>
</view>
<view class="data-wrap">
<view class="data-title">
<!-- <view class="data-badge" style="background-color: #91CB74"></view> -->
<text class="data-text">待办数</text>
</view>
<view class="data-num" style="color: #91CB74">{{chartData.unfinishCount || 0}}</view>
</view>
<view class="data-wrap">
<view class="data-title">
<!-- <view class="data-badge" style="background-color: #FAC858"></view> -->
<text class="data-text">超时待办数</text>
</view>
<view class="data-num" style="color: #FAC858">{{chartData.timeOverWaitCount || 0}}</view>
</view>
<view class="data-wrap">
<view class="data-title">
<!-- <view class="data-badge" style="background-color: #EE6666"></view> -->
<text class="data-text">已办事项</text>
</view>
<view class="data-num" style="color: #EE6666">{{
(chartData.doneCount || 0) + (chartData.timeOverCount || 0)
}}</view>
</view>
<view class="data-wrap">
<view class="data-title">
<!-- <view class="data-badge" style="background-color: #73C0DE"></view> -->
<text class="data-text">完成率</text>
</view>
<view style="display: flex;flex-direction: row;align-items: flex-end;">
<view class="data-num" style="color: #73C0DE">{{allFinishRate}}</view>
<view style="font-size: 12px;margin-bottom: 3px;margin-left: 2px;">%</view>
</view>
</view>
<view class="data-wrap">
<view class="data-title">
<!-- <view class="data-badge" style="background-color: #3CA272"></view> -->
<text class="data-text">及时完成率</text>
</view>
<view style="display: flex;flex-direction: row;align-items: flex-end;">
<view class="data-num" style="color: #3CA272">{{finishRate}}</view>
<view style="font-size: 12px;margin-bottom: 3px;margin-left: 2px;">%</view>
</view>
</view>
<view class="data-wrap">
<view class="data-title">
<!-- <view class="data-badge" style="background-color: #3CA272"></view> -->
<text class="data-text">个人学时</text>
</view>
<view style="display: flex;flex-direction: row;align-items: flex-end;">
<view class="data-num" style="color: #3CA272">{{trainHours}}</view>
<view style="font-size: 12px;margin-bottom: 3px;margin-left: 2px;"></view>
</view>
</view>
</view>
</view>
<view class="line-chart">
<view class="line-chart-title">
<i class="iconfont icon-zhexiantu1" style="font-size: 16px;margin-right: 5px;"></i>
任务及时完成率
</view>
<view class="charts-view">
<qiun-data-charts type="line" :opts="lineOpts" :chartData="lineChartData" />
</view>
</view>
<!-- <view style="font-size: 20px;font-weight: bold;margin: 20px 0px;">
数据分析
</view> -->
<view class="table">
<uni-table style="width: 100%;border-radius: 8px;" border stripe emptyText="暂无更多数据">
<!-- 表头行 -->
<uni-tr style="background-color: #e6f8ff;">
<uni-th width="100" align="center">月份</uni-th>
<uni-th width="60" align="center">任务数</uni-th>
<uni-th width="60" align="center">完成率</uni-th>
<uni-th width="90" align="center">及时完成率</uni-th>
</uni-tr>
<!-- 表格数据行 -->
<uni-tr v-for="(item, key) in tableData" :key="key">
<uni-td align="center">{{item.MONTHStr}}</uni-td>
<uni-td align="center">{{item.TOTAL_QTY}}</uni-td>
<uni-td align="center">{{item.FINISH_RATE}}%</uni-td>
<uni-td align="center">{{item.NORMAL_FINISH_RATE}}%</uni-td>
</uni-tr>
</uni-table>
</view>
</view>
</view>
<view v-if="this.localMintype.length !== 0">
<view class="per-title">
<!-- <view :class="chooseIndex === true? 'personal-choose':'personal'" @click="changePerIndex">个人绩效</view> -->
<view class="tissue-choose">组织绩效</view>
<view class="tissue-pro" @click="changePicker">
<view>
<view class="production" v-if="MineType === '10'">生产单元:选矿厂</view>
<view class="production" v-if="MineType === '20'">生产单元:尾矿库</view>
<view class="production" v-if="MineType === '30'">生产单元:露天矿</view>
</view>
<view class="production" v-if="MineType==null">生产单元:{{columns[0][0]}}</view>
<u-icon name="arrow-down" size="12"></u-icon>
</view>
</view>
<view class="performance">
<view>
<view class="standard-content">
<view class="standard-wrap">
<view class="standard-left">
<view>标准化得分</view>
<view v-if="MineType === '10'">选矿厂</view>
<view v-if="MineType === '20'">尾矿库</view>
<view v-if="MineType === '30'">露天矿</view>
</view>
<view class="standard-right">
<view>{{standardScore}}</view>
</view>
</view>
</view>
<view class="line-chart">
<view class="line-chart-title">
<i class="iconfont icon-bingtu" style="font-size: 16px;margin-right: 5px;"></i>
风险等级占比
</view>
<view class="charts-view">
<qiun-data-charts type="ring" :opts="riskOpts" :chartData="riskChartData" />
</view>
</view>
<view class="line-chart">
<view class="line-chart-title">
<i class="iconfont icon-zhuzhuangtu" style="font-size: 16px;margin-right: 5px;"></i>
班组活动完成率
</view>
<view class="charts-view" :style="{'height':cHeight}">
<qiun-data-charts type="bar" :opts="classOpts" :chartData="classChartData" />
</view>
</view>
<view class="line-chart">
<view class="line-chart-title">
<i class="iconfont icon-zhuzhuangtu" style="font-size: 16px;margin-right: 5px;"></i>
工作票完成数
</view>
<view class="charts-view" :style="{'height':wHeight}">
<qiun-data-charts type="bar" :opts="workOpts" :chartData="workChartData" />
</view>
</view>
<view class="line-chart">
<view class="line-chart-title">
<i class="iconfont icon-zhuzhuangtu" style="font-size: 16px;margin-right: 5px;"></i>
安全检查次数统计
</view>
<view class="charts-view">
<qiun-data-charts type="column" :opts="safeOpts" :chartData="safeChartData" />
</view>
</view>
<view class="line-chart-bottom">
<view class="line-chart-title">
<i class="iconfont icon-zhuzhuangtu" style="font-size: 16px;margin-right: 5px;"></i>
月度隐患整改情况
</view>
<view class="charts-view">
<qiun-data-charts type="column" :opts="dangerOpts" :chartData="dangerChartData" />
</view>
</view>
</view>
</view>
</view>
<u-picker :show="modalShow" :columns="columns" @confirm="confirm" @change="changeHandler" @cancel="cancel"></u-picker>
</view>
</template>
<script>
import {
getChartData,
getStandardScore,
getRiskLevel,
getClassActive,
getWorkTicket,
getDangerTotal,
getTrainHours
} from '../../services/app'
import {
initFilter,
extendOrder,
extendRule
} from '../../utils/common'
import HeaderNav from '@/components/custom/head-nav.vue';
let uChartsInstance = {}
export default {
components: {
HeaderNav
},
data() {
return {
trainHours: '',
chooseIndex: true,
modalShow: false,
columns: [],
chartData: {},
tableData: [],
lineChartData: {},
wordChartData: {},
wordOpts: {
color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
"#ea7ccc"
],
padding: undefined,
enableScroll: false,
extra: {
word: {
type: "normal",
autoColors: false
}
}
},
lineOpts: {
color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
"#ea7ccc"
],
padding: [35, 10, 0, 10],
enableScroll: false,
legend: {},
xAxis: {
disableGrid: true
},
yAxis: {
gridType: "dash",
dashLength: 2,
unit: '%'
},
extra: {
line: {
type: "curve",
width: 2,
activeType: "hollow"
}
}
},
MineType: '',
MineCurrentType: '',
localMintype: [],
standardScore: 0,
openPerson: true,
allNum: 0,
riskChartData: {},
classChartData: {},
riskColor: [],
riskOpts: {
},
classOpts: {
// height:300,
color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
"#ea7ccc"
],
padding: [25, 60, 25, 5],
enableScroll: false,
legend: {
show: false
},
xAxis: {
disabled: true,
boundaryGap: "justify",
disableGrid: true,
min: 0,
axisLine: false,
max: 40,
},
yAxis: {
axisLine: false,
disableGrid: true,
gridColor: '#fff',
},
extra: {
bar: {
// type: "group",
type: "group",
width: 10,
meterBorde: 1,
meterFillColor: "#FFFFFF",
activeBgColor: "#000000",
activeBgOpacity: 0.08,
// linearType: "custom",
barBorderCircle: true,
// seriesGap: 2,
categoryGap: 2
}
}
},
workChartData: {},
workOpts: {
color: ["#1890FF", "#f6841a", "#cc0404"],
padding: [25, 40, 25, 5],
enableScroll: false,
legend: {
show: false
},
xAxis: {
disabled: true,
boundaryGap: "justify",
disableGrid: true,
min: 0,
axisLine: false,
max: 40,
},
yAxis: {
axisLine: false,
disableGrid: true,
gridColor: '#fff',
},
extra: {
bar: {
type: "group",
width: 10,
meterBorde: 1,
meterFillColor: "#FFFFFF",
activeBgColor: "#000000",
activeBgOpacity: 0.08,
// linearType: "custom",
barBorderCircle: true,
// seriesGap: 2,
categoryGap: 2
}
}
},
safeChartData: {},
safeOpts: {
color: ["#4285F4", "#72b85b", "#c92a2a", "#ffa94d"],
dataLabel: false,
padding: [25, 15, 0, 15],
enableScroll: false,
legend: {
float: 'left',
lineHeight: 20,
},
xAxis: {
disableGrid: true,
},
yAxis: {
disabled: false,
disableGrid: false,
splitNumber: 5,
gridType: "dash",
dashLength: 4,
gridColor: "#CCCCCC",
padding: 10,
showTitle: false,
},
extra: {
column: {
type: "stack",
width: 20,
activeBgColor: "#000000",
activeBgOpacity: 0.08,
labelPosition: "center"
}
}
},
dangerChartData: {},
dangerOpts: {
color: ["#72b85b", "#f6841a", "#cc0404"],
padding: [25, 15, 0, 15],
enableScroll: false,
legend: {
float: 'left',
lineHeight: 20,
},
xAxis: {
disableGrid: true,
// title: "单位:年"
},
yAxis: {
disabled: false,
disableGrid: false,
splitNumber: 5,
gridType: "dash",
dashLength: 4,
gridColor: "#CCCCCC",
padding: 10,
showTitle: false,
},
extra: {
column: {
type: "group",
width: 10,
activeBgColor: "#000000",
activeBgOpacity: 0.08,
seriesGap: 4,
}
}
},
cHeight: '',
wHeight: '',
}
},
onReady() {
// this.getLineServerData();
// this.getWordServerData();
},
async onShow() {
this.getTrainHours()
this.MineType = uni.getStorageSync('MineType')
// this.MineCurrentType =uni.getStorageSync('MineType')
const orgId = uni.getStorageSync('orgId')
const {
User
} = uni.getStorageSync('appInfo')
let newarr = [];
if (User.MineType) {
this.localMintype = User.MineType.split(",");
if (this.localMintype.length !== 0) {
if (uni.getStorageSync('MineType') == '') {
uni.setStorageSync('MineType', this.localMintype[0])
this.MineType = this.localMintype[0]
// this.MineType = this.localMintype[0]
}
if (User.MineType.split(",").indexOf("10") > -1) {
newarr.push('选矿厂')
this.columns = [newarr]
}
if (User.MineType.split(",").indexOf("20") > -1) {
newarr.push('尾矿库')
this.columns = [newarr]
}
if (User.MineType.split(",").indexOf("30") > -1) {
newarr.push('露天矿')
this.columns = [newarr]
}
if (this.MineType === '10' || this.MineType === '20') {
this.MineCurrentType = '10'
} else {
this.MineCurrentType = '30'
}
}
}
const curDate = new Date()
const curYear = curDate.getFullYear()
const curMonth = curDate.getMonth()
let y, m, d;
if (curMonth > 5) {
y = curYear
m = curMonth - 5
} else {
y = curYear - 1
m = 12 + (curMonth - 5)
}
d = curDate.getDate()
const startTime = uni.$u.timeFormat(new Date(y, m, d), 'yyyy-mm-dd')
const endTime = uni.$u.timeFormat(new Date(), 'yyyy-mm-dd')
let json = initFilter(orgId, User.NAME, "", "", "", startTime, endTime);
const res = await getChartData(json)
if (res.IsSuccessful) {
this.chartData = res.Data
const preLineChartData = (res.Data?.groupDataLine || []).splice(-6, 6)
const lineChartConfig = {
categories: preLineChartData.map(i => i.MONTHStr.split('年')[1]),
series: [{
name: "完成率",
data: preLineChartData.map(i => i.FINISH_RATE)
},
{
name: "及时完成率",
data: preLineChartData.map(i => i.NORMAL_FINISH_RATE)
}
]
}
this.lineChartData = JSON.parse(JSON.stringify(lineChartConfig));
this.tableData = res.Data?.groupData || []
}
this.getStandard()
this.getRiskLevel()
this.getClassActive()
this.getWorkTicket()
this.getDangerTotal()
},
methods: {
changePicker() {
this.modalShow = true
},
changeOpen() {
this.openPerson = !this.openPerson
},
confirm(e) {
this.modalShow = false
if (e.value[0] === '选矿厂') {
uni.setStorageSync('MineType', '10')
uni.reLaunch({
url: '/pages/performance/index1'
})
}
if (e.value[0] === '尾矿库') {
uni.setStorageSync('MineType', '20')
uni.reLaunch({
url: '/pages/performance/index1'
})
}
if (e.value[0] === '露天矿') {
uni.setStorageSync('MineType', '30')
uni.reLaunch({
url: '/pages/performance/index1'
})
}
},
cancel() {
this.modalShow = false
},
changeHandler(e) {
console.log(e, 'eeeee')
},
async getTrainHours() {
let json = initFilter();
const res = await getTrainHours(json)
if (res.IsSuccessful) {
let nums = res.Data.TOTAL_HOURS
this.trainHours = nums.toFixed(2)
}
},
async getStandard() {
const orgId = uni.getStorageSync('orgId')
let json = initFilter(orgId, this.MineCurrentType);
const res = await getStandardScore(json)
if (res.IsSuccessful) {
this.standardScore = (Number(res.Data.RESULT_TOTAL / res.Data.STAND_TOTAL) * 100).toFixed(2);
}
},
async getRiskLevel() {
const orgId = uni.getStorageSync('orgId')
let json = initFilter(orgId);
extendOrder(json, "CREATE_TIME", 0);
extendRule(json, "COLOR", 1, this.MineCurrentType);
const res = await getRiskLevel(json)
if (res.IsSuccessful) {
let riskLevel = [];
let showData = [];
let color = [];
res.Data.forEach((item) => {
riskLevel.push(item.RISK_LEVEL);
// color.push(item.COLOR);
showData.push({
value: item.COUNT,
name: item.RISK_LEVEL,
// labelShow:false
});
});
showData.map((item) => {
this.allNum = Number(this.allNum + item.value)
})
setTimeout(() => {
let riskLevelConfig = {
series: [{
data: showData,
}],
};
this.riskOpts = {
rotate: false,
rotateLock: false,
color: ['#c92a2a', '#ffa94d', '#ffe066', '#4285F4'],
padding: [5, 5, 5, 5],
dataLabel: true,
enableScroll: false,
legend: {
show: true,
position: "bottom",
lineHeight: 25,
formatter: function(val) {
return val + '000000'
}
},
title: {
name: "",
fontSize: 15,
color: "#666666"
},
subtitle: {
name: this.allNum,
fontSize: 25,
color: "#666666"
},
extra: {
ring: {
ringWidth: 20,
activeOpacity: 0.5,
activeRadius: 10,
offsetAngle: 0,
labelWidth: 15,
border: true,
borderWidth: 3,
borderColor: "#FFFFFF"
}
}
},
this.riskChartData = JSON.parse(JSON.stringify(riskLevelConfig));
}, 500)
}
},
async getClassActive() {
const orgId = uni.getStorageSync('orgId')
let json = initFilter(
orgId,
this.MineCurrentType,
"NUM",
"desc",
undefined,
10
);
const res = await getClassActive(json)
if (res.IsSuccessful) {
this.cHeight = res.Data.length * 30 + 20 + 'px'
let teamName = [];
let finishQty = [];
res.Data.forEach((item) => {
teamName.push(item.TEAM_NAME);
let finishData = Number(item.CALC * 100).toFixed(2);
finishQty.push(finishData);
});
setTimeout(() => {
let classActiveConfig = {
categories: teamName,
series: [{
name: "完成率",
data: finishQty,
}],
};
this.classChartData = JSON.parse(JSON.stringify(classActiveConfig));
}, 500)
}
},
async getWorkTicket() {
const orgId = uni.getStorageSync('orgId')
let json = initFilter(
orgId,
this.MineCurrentType,
"NUM",
"desc",
);
const res = await getWorkTicket(json)
if (res.IsSuccessful) {
this.wHeight = res.Data.length * 30 + 20 + 'px'
let teamName = [];
let wattingQty = [];
let finishQty = [];
let overFinishQty = [];
let totalQty = [];
res.Data.forEach((item) => {
teamName.push(item.TEAM_NAME);
wattingQty.push(item.WAITTING_COUNT);
finishQty.push(item.FINISH_COUNT);
overFinishQty.push(item.OVER_FINISH_COUNT);
totalQty.push(item.TOTAL_COUNT);
});
setTimeout(() => {
let workTicketConfig = {
categories: teamName,
series: [{
name: "正常已办",
data: finishQty,
}],
};
this.workChartData = JSON.parse(JSON.stringify(workTicketConfig));
}, 500)
}
},
async getDangerTotal() {
const orgId = uni.getStorageSync('orgId')
let json = initFilter(
orgId,
this.MineCurrentType,
"NUM",
);
const res = await getDangerTotal(json)
if (res.IsSuccessful) {
let xData = [];
let data1 = [];
let data2 = [];
let data3 = [];
let seriesName = [];
if (res.Data.ListSafeCheckYearMonth) {
let ListSafeCheckYearMonth = res.Data.ListSafeCheckYearMonth.slice(-6)
ListSafeCheckYearMonth.forEach((item) => {
xData.push(item.MONTH + '月')
seriesName = item.listSOURCENAME
data1.push(item.listListCount);
});
for (var i = 0; i < ListSafeCheckYearMonth[0].listListCount.length; i++) {
for (var j = 0; j < ListSafeCheckYearMonth.length; j++) {
data2.push(data1[j][i]);
}
}
for (var i = 0; i < data2.length; i += ListSafeCheckYearMonth.length) {
data3.push(data2.slice(i, i + ListSafeCheckYearMonth.length))
}
setTimeout(() => {
let safeCheckConfig = {
categories: xData,
series: [{
name: seriesName[0],
data: data3[0],
}, {
name: seriesName[1],
data: data3[1],
}, {
name: seriesName[2],
data: data3[2],
}, {
name: seriesName[3],
data: data3[3],
}],
};
this.safeChartData = JSON.parse(JSON.stringify(safeCheckConfig));
}, 500);
}
let xName = [];
let yName = [];
let legendName = [];
res.Data.ListC.forEach((item) => {
let name = item.NAME.split(",");
xName.push(name);
legendName.push(item.SOURCENAME);
let valu = item.Val.split(",");
yName.push(valu);
});
let month = xName[0].map((item) => {
return item.replace("月", "");
});
setTimeout(() => {
let monthDangerConfig = {
categories: xName[0],
series: [{
name: legendName[0],
// index: 1,
type: "column",
data: yName[0]
},
{
name: legendName[1],
// index: 1,
type: "column",
data: yName[1]
},
{
name: legendName[2],
// index: 1,
type: "column",
data: yName[2]
},
],
};
this.dangerChartData = JSON.parse(JSON.stringify(monthDangerConfig));
}, 500)
}
}
},
computed: {
allFinishRate() {
const {
TotalCount,
timeOverCount,
doneCount
} = this.chartData
if (TotalCount) {
return ((doneCount + timeOverCount) / TotalCount * 100).toFixed(1)
}
return 0
},
finishRate() {
const {
TotalCount,
doneCount
} = this.chartData
if (TotalCount) {
return (doneCount / TotalCount * 100).toFixed(1)
}
return 0
},
}
}
</script>
<style scoped>
.performance {
padding: 16px;
}
.per-title {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
padding: 10px 30px;
background-color: #fff;
/* box-shadow: 0px 0px 10px #dddddd; */
}
.personal-choose {
font-size: 20px;
color: #333;
/* margin-right: 15px; */
/* font-weight: bold; */
display: flex;
flex-direction: row;
align-items: flex-end;
}
.personal-big {
font-size: 20px;
font-weight: bold;
}
.personal-small {
font-size: 12px;
/* font-weight: bold; */
}
.tissue-choose {
font-size: 20px;
color: #333;
/* margin-left: 15px; */
font-weight: bold;
}
.task-num {
display: flex;
flex-direction: column;
padding-bottom: 20px;
border-bottom: 1px solid #e5e5e5;
}
.data-content {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
/* background-color: #f6faf8; */
/* border: 1px solid #e5e5e5; */
}
.data-wrap {
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
padding: 8px 10px;
/* background-color: #f6faf8; */
margin: 5px;
border-radius: 5px;
border: 1px solid #e5e5e5;
}
.data-title {
display: flex;
flex-direction: row;
align-items: center;
}
.data-badge {
width: 2px;
height: 8px;
/* background-color: #91CB74; */
margin-right: 4px;
}
.data-num {
font-size: 24px;
/* margin-left: 4px; */
margin-top: 5px;
font-weight: bold;
}
.data-text {
font-size: 14px;
}
.word-chart {
border: 1px solid #e5e5e5;
padding: 10px;
margin-bottom: 16px;
}
.line-chart {
margin-top: 26px;
margin-bottom: 26px;
width: 100%;
padding-bottom: 40px;
border-bottom: 1px solid #e5e5e5;
/* border: 1px solid #e5e5e5;
border-radius: 10px; */
}
.line-chart-bottom {
margin-top: 26px;
margin-bottom: 26px;
width: 100%;
padding-bottom: 20px;
/* border-bottom: 1px solid #e5e5e5; */
/* border: 1px solid #e5e5e5;
border-radius: 10px; */
}
.charts-view {
border: 1px solid #e5e5e5;
border-radius: 10px;
/* height: 500px; */
}
.charts-view-work {
border: 1px solid #e5e5e5;
border-radius: 10px;
height: 500px;
}
.charts-view-class {
border: 1px solid #e5e5e5;
border-radius: 10px;
}
.line-chart-title {
font-weight: bold;
font-size: 16px;
/* text-align: center; */
margin-bottom: 16px;
margin-left: 14px;
color: #333;
}
.grid-card {
margin-bottom: 26px;
border: 1px solid #e5e5e5;
border-radius: 8px;
padding: 8px;
}
.grid-item-box {
flex: 1;
// position: relative;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: column;
align-items: center;
justify-content: center;
padding: 15px 0;
}
.grid-item-box-row {
flex: 1;
// position: relative;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: row;
align-items: center;
justify-content: center;
padding: 15px 0;
}
.grid-item-box .num {
font-size: 30px;
font-weight: bold;
}
.grid-item-box .text {
color: rgba(0, 0, 0, .65);
font-size: 14px;
}
.table {
padding-bottom: 40px;
border-bottom: 1px solid #e5e5e5;
}
.tissue-pro {
display: flex;
flex-direction: row;
align-items: center;
}
.production {
font-size: 14px;
margin-right: 15px;
color: #999;
}
.open {
font-size: 14px;
/* margin-right: 15px; */
color: #999;
font-weight: bold;
/* border: 1px solid #e5e5e5; */
padding: 3px 15px;
border-radius: 10px;
background-color: #e5e5e5;
}
.standard-content {
padding-bottom: 40px;
border-bottom: 1px solid #e5e5e5;
}
.standard-wrap {
display: flex;
flex-direction: row;
/* justify-content: center; */
width: 100%;
height: 100px;
border: 1px solid #e5e5e5;
border-radius: 15px;
/* background-color: #386AF6; */
/* box-shadow: 1px 1px 10px #386AF6; */
/* padding-bottom: 40px;
border-bottom: 1px solid #e5e5e5; */
}
.standard-left {
/* border: 1px solid #e5e5e5; */
padding: 20px 0px;
border-radius: 20px;
width: 45%;
display: flex;
align-items: center;
flex-direction: column;
justify-content: space-between;
color: #333333;
font-size: 14px;
font-weight: bold;
}
.standard-right {
/* border: 1px solid #e5e5e5; */
/* padding: 20px 40px; */
/* border-radius: 20px; */
width: 55%;
color: #eb0404;
display: flex;
align-items: center;
justify-content: center;
font-size: 40px;
border-left: 1px dashed #e5e5e5;
border-left-width: 2px;
/* height: 300px; */
}
</style>