初始化仓库

This commit is contained in:
tao
2025-12-18 14:11:48 +08:00
parent e96f277a68
commit 54ec472bd4
1107 changed files with 158756 additions and 0 deletions

791
pages/index - 副本.vue Normal file
View File

@@ -0,0 +1,791 @@
<template>
<view class="content">
<scroll-view class="data_body" scroll-y style="height:100%">
<view class="view_item">
<view class="progress_circle">
<view v-for="(item,index) in CircleData" :key="index" :class="['progress_block','block_'+index]">
<view class="name">{{item.series[0].name}}</view>
<!-- <view class="value">{{item.series[0].value}}</view> -->
<view class="charts-box arcbar" style="height: 180rpx;width: 60%;">
<qiun-data-charts type="arcbar" :chartData="item" :canvas2d="canvas2d"
:canvasId="'four_a_'+index" :resshow="delayload"
:opts="{title:{name:item.series[0].precent,color:item.series[0].color,fontSize:15},subtitle:{name:'',color:'#666666',fontSize:12},extra:{arcbar:{backgroundColor:item.series[0].backgroundColor}}}" />
</view>
<view class="planet">
<view class="planet_shadow"></view>
<view class="crater1"></view>
<view class="crater2"></view>
<view class="crater3"></view>
<view class="crater4"></view>
</view>
<view class="star" :class="['star'+index]"></view>
<view class="star pink" :class="['star'+index]"></view>
<view class="star blue" :class="['star'+index]"></view>
<view class="star yellow" :class="['star'+index]"></view>
</view>
</view>
</view>
<view class="split_line"></view>
<view class="friend_operate">
<view class="title">工单状态分布
</view>
<view v-if="delayload" class="charts-box" style="">
<qiun-data-charts type="ring" canvasId="four_b" :canvas2d="canvas2d" :resshow="delayload"
:opts="{legend:{position: 'bottom'},title:{name: '',},subtitle: {name: ''},extra:{ring:{customRadius:'55'}}}"
:chartData="ProductRateData" style="height: 350px;" />
</view>
</view>
<view class="split_line"></view>
<!--概览-->
<view class="friend_operate">
<text-block :content="CardData"></text-block>
</view>
<view class="friend_operate">
<view class="title">本周报工产量</view>
<view v-if="delayload" class="charts-box" style="height: 300px;">
<qiun-data-charts type="line" canvasId="four_c" :canvas2d="canvas2d" :resshow="delayload"
:chartData="TrendData" />
</view>
</view>
</scroll-view>
</view>
</template>
<script>
import CircleData from "./json/user-server/1.json"
import {
listPwo,
listPo,
listReport,
reportRate
} from '@/api/mes/pwoDraw.js'
import {
getWeekReport,
getPwoStatus,
getProduceReport,
} from '@/api/mes/jobIn.js'
export default {
mounted() {
uni.showLoading();
//获取饼图数据
this.getStatus();
this.getReport();
this.getNum();
this.getRate();
setTimeout(() => {
this.delayload = true;
uni.hideLoading();
}, 1000)
},
data() {
return {
value: new Date(),
CircleData: CircleData,
ProductRateData: {},
TrendData: [],
CardData: [],
isRank: true,
canvas2d: this.$config.ISCANVAS2D,
delayload: false, //延时加载图表,否则会出现图表加载完后定位错乱
//饼图数据
status1: 0,
status2: 0,
status3: 0,
status4: 0,
status5: 0,
status6: 0,
status7: 0,
status8: 0,
status9: 0,
status10: 0,
status11: 0,
status12: 0,
status13: 0,
//卡片数据
dayAddedPo: 0,
dayAddedPwo: 0,
dayAddedReport: 0,
dayAvgQltyRate: 0,
//折线图数据
data: [
0, 0, 0, 0, 0, 0, 0,
],
finishValue: 0,
defectValue: 0,
}
},
methods: {
reset() {
this.status1 = 0;
this.status2 = 0;
this.status3 = 0;
this.status4 = 0;
this.status5 = 0;
this.status6 = 0;
this.status7 = 0;
this.status8 = 0;
this.status9 = 0;
this.status10 = 0;
this.status11 = 0;
this.status12 = 0;
this.status13 = 0;
this.dayAddedPo = 0;
this.dayAddedPwo = 0;
this.dayAddedReport = 0;
this.data = [0, 0, 0, 0, 0, 0, 0];
},
getTime() {
var year = this.value.getFullYear() // 年
var month = this.value.getMonth() + 1 < 10 ? "0" + (this.value.getMonth() + 1) : this.value.getMonth() + 1;
var day = this.value.getDate() < 10 ? "0" + this.value.getDate() : this.value.getDate();
var currentTime = year + '-' + month + '-' + day;
return currentTime;
},
async getStatus() {
this.reset();
await getPwoStatus().then((resp) => {
let data = resp.data;
this.status1 = data.status1 ? data.status1 : 0;
this.status2 = data.status2 ? data.status2 : 0;
this.status3 = data.status3 ? data.status3 : 0;
this.status4 = data.status4 ? data.status4 : 0;
this.status5 = data.status5 ? data.status5 : 0;
this.status6 = data.status6 ? data.status6 : 0;
this.status7 = data.status7 ? data.status7 : 0;
this.status8 = data.status8 ? data.status8 : 0;
this.status9 = data.status9 ? data.status9 : 0;
this.status10 = data.status10 ? data.status10 : 0;
this.status11 = data.status11 ? data.status11 : 0;
this.status12 = data.status12 ? data.status12 : 0;
this.status13 = data.status13 ? data.status13 : 0;
});
this.getBarData();
},
getBarData() {
this.ProductRateData = {
"series": [{
"name": "计划中",
"data": this.status1,
"color": "#2fc25b"
},
{
"name": "已生成作业",
"data": this.status2,
"color": "#facc14"
},
{
"name": "已投料",
"data": this.status3,
"color": "#f04864"
},
{
"name": "已领料",
"data": this.status4,
"color": "#8543e0"
},
{
"name": "已开工",
"data": this.status5,
"color": "#51c2d5"
},
{
"name": "暂停",
"data": this.status6,
"color": "#C8AB7E"
}, {
"name": "已完成",
"data": this.status7,
"color": "#81A1C6"
}, {
"name": "已领料",
"data": this.status8,
"color": "#C185BB"
}, {
"name": "结案",
"data": this.status9,
"color": "#4BA2FB"
}, {
"name": "取消",
"data": this.status1,
"color": "#98AFA7"
}, {
"name": "待入库",
"data": this.status10,
"color": "#9DD86E"
}, {
"name": "待转出",
"data": this.status11,
"color": "#DE68C4"
}, {
"name": "已转出",
"data": this.status12,
"color": "#BF2A39"
}, {
"name": "其他",
"data": this.status13,
"color": "#266186"
},
]
}
console.log(this.ProductRateData)
},
async getReport() {
await getWeekReport().then(async res => {
var now = new Date();
var today = now.getDay();
//获取当前时间所在的周一的日期
const startOfWeek = new Date(
now.getFullYear(),
now.getMonth(),
now.getDate() - (today === 0 ? 6 : today - 1)
);
// 当前周的结束日
const endOfWeek = new Date(
startOfWeek.getTime() + 7 * 24 * 60 * 60 * 1000
);
//将所有属于当前周的数据都存入新的数组里
const dataThisWeek = res.data
.filter((item) => {
const date = new Date(item.createTime);
return date >= startOfWeek && date < endOfWeek;
})
.map((item) => {
// 获取星期几,值为 0周日到 6周六
const dayOfWeek = new Date(item.createTime).getDay();
// 将数字转换为中文星期表示
const dayOfWeekStr = [0, 1, 2, 3, 4, 5, 6][dayOfWeek];
// 将星期几加入原始数据中
return {
...item,
dayOfWeek: dayOfWeekStr
};
});
for (var i = 0; i < dataThisWeek.length; i++) {
switch (dataThisWeek[i].dayOfWeek) {
case 0:
this.data[6] += dataThisWeek[i].reportNumber;
break;
case 1:
this.data[0] += dataThisWeek[i].reportNumber;
break;
case 2:
this.data[1] += dataThisWeek[i].reportNumber;
break;
case 3:
this.data[2] += dataThisWeek[i].reportNumber;
break;
case 4:
this.data[3] += dataThisWeek[i].reportNumber;
break;
case 5:
this.data[4] += dataThisWeek[i].reportNumber;
break;
case 6:
this.data[5] += dataThisWeek[i].reportNumber;
break;
default:
this.reset();
break;
}
}
});
this.getLineData();
},
getLineData() {
// 获取坐标轴刻度最大值
const maxVal = Number(Math.max(...this.data));
this.TrendData = {
"categories": [
"周一",
"周二",
"周三",
"周四",
"周五",
"周六",
"周日"
],
"series": [{
"name": "报工产量",
"data": this.data,
"type": "line",
"style": "curve",
"addPoint": true,
"color": "#DF297D",
"unit": ""
}],
"yAxis": {
"calibration": true,
"position": "left",
"min": 0,
"max": maxVal,
"title": "产量",
"titleFontSize": 12,
"unit": "",
"tofix": 0
},
"targetAdd": "9%"
}
},
async getNum() {
this.reset();
getProduceReport().then((resp) => {
let data = resp.data;
this.dayAddedPo = data.todayAddedPo;
this.dayAddedPwo = data.todayAddedPwo;
this.dayAddedReport = data.todayAddedReport;
});
const currentDate = new Date();
let endTime = this.getTime(currentDate);
//获取过去30天
const oldDate = new Date();
oldDate.setDate(currentDate.getDate() - 30);
let startTime = this.getTime(oldDate);
await reportRate({
mesPwoReportType: '2',
queryStartTime: startTime,
queryEndTime: endTime,
}).then((result) => {
console.log(result);
this.dayAvgQltyRate = result.data;
});
// //列出订单数量
// listPo().then(res => {
// for (var i = 0; i < res.rows.length; i++) {
// if (this.getTime() == (res.rows[i].createTime === undefined ? '' : res.rows[i]
// .createTime.slice(0, 10))) {
// this.dayAddedPo++;
// }
// }
// });
// //列出报工数量
// listReport().then(res => {
// for (var i = 0; i < res.rows.length; i++) {
// if (this.getTime() == (res.rows[i].createTime === undefined ? '' : res.rows[i]
// .createTime.slice(0, 10))) {
// this.dayAddedReport++;
// }
// }
// });
this.getCardData();
},
getCardData() {
//卡片赋值
this.CardData = [{
"kind": 4,
"background": ["#0081ff", "#1cbbb4"],
"content": [{
"text": "当日新增生产订单",
"value": "",
"colortext": "#fff",
"colorvalue": "",
"size": "24rpx"
},
{
"text": "",
"value": this.dayAddedPo,
"colortext": "",
"colorvalue": "#fff",
"size": "44rpx"
},
]
},
{
"kind": 4,
"background": ["#0081ff", "#1cbbb4"],
"content": [{
"text": "当日新增生产工单",
"value": "",
"colortext": "#fff",
"colorvalue": "",
"size": "24rpx"
},
{
"text": "",
"value": this.dayAddedPwo,
"colortext": "",
"colorvalue": "#fff",
"size": "44rpx"
},
]
},
{
"kind": 4,
"background": ["#0081ff", "#1cbbb4"],
"content": [{
"text": "当日报工次数",
"value": "",
"colortext": "#fff",
"colorvalue": "",
"size": "24rpx"
},
{
"text": "",
"value": this.dayAddedReport,
"colortext": "",
"colorvalue": "#fff",
"size": "44rpx"
},
]
}, {
"kind": 4,
"background": ["#0081ff", "#1cbbb4"],
"content": [{
"text": "当日平均质量合格率",
"value": "",
"colortext": "#fff",
"colorvalue": "",
"size": "24rpx"
},
{
"text": "",
"value": this.dayAvgQltyRate,
"colortext": "",
"colorvalue": "#fff",
"size": "44rpx"
},
]
}
]
},
async getRate() {
this.finishValue = 0;
this.defectValue = 0;
//当前日期
// const currentDate = this.getTime();
let endTime = this.getTime();
const oldDate = this.value;
oldDate.setDate(this.value.getDate() - 30);
const year = oldDate.getFullYear();
const month = String(oldDate.getMonth() + 1).padStart(2, '0');
const day = String(oldDate.getDate()).padStart(2, '0');
let startTime = `${year}-${month}-${day}`;
await reportRate({
mesPwoReportType: '3',
queryStartTime: startTime,
queryEndTime: endTime,
}).then((result) => {
this.finishValue = result.data;
});
await reportRate({
mesPwoReportType: '2',
queryStartTime: startTime,
queryEndTime: endTime,
}).then((result) => {
this.defectValue = result.data;
});
this.getCircleData();
},
getCircleData() {
const data1 = this.finishValue.toFixed(0) * 0.01;
const data2 = this.defectValue.toFixed(0) * 0.01;
this.CircleData = [{
"series": [{
"color": "#fff",
"data": data1,
"precent": this.finishValue.toFixed(0) + "%",
"index": 0,
"legendShape": "circle",
"name": "工单完成率",
"pointShape": "circle",
"show": true,
"type": "arcbar",
// "value": "12786",
"backgroundColor": "#00AEF9"
}]
},
{
"series": [{
"color": "#fff",
"data": data2,
"precent": this.defectValue.toFixed(0) + "%",
"index": 0,
"legendShape": "circle",
"name": "工单良品率",
"pointShape": "circle",
"show": true,
"type": "arcbar",
// "value": "1096",
"backgroundColor": "#F55676"
}]
}
]
console.log(this.CircleData)
}
}
}
</script>
<style scoped lang="scss">
.content {
padding-top: 10rpx;
}
.data_body {
height: 100%;
text-align: center;
color: #333333;
background-repeat: repeat;
background-color: #ffffff;
.friend_operate {
padding: 30rpx 20rpx;
.title {
text-align: left;
margin-bottom: 30rpx;
font-size: 40rpx;
}
}
.view_item {
padding: 30rpx 20rpx;
padding-top: 30px;
.title {
text-align: left;
margin-bottom: 30rpx;
font-size: 40rpx;
}
}
.progress_circle {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
align-items: center;
// height: 450rpx;
.progress_block {
width: 45%;
border-radius: 20rpx;
height: 180rpx;
position: relative;
overflow: hidden;
.name {
color: #fff;
font-size: 24rpx;
position: absolute;
top: 20rpx;
left: 10rpx;
max-width: 144rpx;
}
.value {
color: #fff;
font-size: 40rpx;
position: absolute;
top: 64rpx;
left: 10rpx;
max-width: 144rpx;
}
.circle {
position: absolute;
right: 8rpx;
top: 16rpx;
}
.arcbar {
position: absolute;
right: -4rpx;
top: 8rpx;
}
}
.block_0 {
background-color: #0FC3FF;
}
.block_1 {
background-color: #FF6B8B;
}
.block_2 {
background-color: #FFCB1D;
}
.block_3 {
background-color: #3BDCAA;
}
}
}
.planet {
width: 60px;
height: 60px;
border-radius: 50%;
background: #333;
position: absolute;
left: -13px;
bottom: -26px;
overflow: hidden;
opacity: 0.5;
z-index: 0;
}
.planet_shadow {
position: absolute;
border-radius: 50%;
height: 100%;
width: 100%;
top: -40%;
right: -10%;
border: 35px solid rgba(0, 0, 0, .15);
}
.crater1,
.crater2,
.crater3,
.crater4 {
position: absolute;
border-radius: 50%;
background: rgba(0, 0, 0, .3);
box-shadow: inset 3px 3px 0 rgba(0, 0, 0, .2);
}
.crater1 {
width: 20px;
height: 20px;
left: 25%;
top: 20%;
}
.crater2 {
width: 10px;
height: 10px;
left: 50%;
top: 60%;
}
.crater3 {
width: 15px;
height: 15px;
left: 30%;
top: 65%;
}
.crater4 {
width: 15px;
height: 15px;
left: 60%;
top: 35%;
}
.star {
display: block;
width: 5px;
height: 5px;
border-radius: 50%;
background: #FFF;
top: 10px;
left: 50px;
position: relative;
transform-origin: 100% 0;
box-shadow: 0 0 5px 5px rgba(255, 255, 255, .3);
opacity: 0;
z-index: 2;
}
.star0 {
animation: star-ani 4s infinite ease-out;
}
.star1 {
animation: star-ani 5s infinite ease-out;
}
.star2 {
animation: star-ani 6s infinite ease-out;
}
.star3 {
animation: star-ani 7s infinite ease-out;
}
.star:after {
content: '';
display: block;
top: 20px;
left: 60px;
border: 0px solid #fff;
border-width: 0px 90px 2px 90px;
border-color: transparent transparent transparent rgba(255, 255, 255, .3);
transform: rotate(-45deg) translate3d(1px, 3px, 0);
box-shadow: 0 0 1px 0 rgba(255, 255, 255, .1);
transform-origin: 0% 100%;
animation: shooting-ani 100s infinite ease-out;
}
.pink {
top: 10px;
left: 60px;
background: #ff5a99;
animation-delay: 5s;
-webkit-animation-delay: 5s;
-moz-animation-delay: 5s;
}
.pink:after {
border-color: transparent transparent transparent #ff5a99;
animation-delay: 5s;
-webkit-animation-delay: 5s;
-moz-animation-delay: 5s;
}
.blue {
top: 15px;
left: 70px;
background: cyan;
animation-delay: 7s;
-webkit-animation-delay: 7s;
-moz-animation-delay: 7s;
}
.blue:after {
border-color: 'transpareanimation-delay: 12s';
-webkit-animation-delay: 7s;
-moz-animation-delay: 7s;
animation-delay: 7s;
}
.yellow {
top: 0px;
left: 80px;
background: #ffcd5c;
animation-delay: 5.8s;
}
.yellow:after {
border-color: transparent transparent transparent #ffcd5c;
animation-delay: 5.8s;
}
@keyframes star-ani {
0% {
opacity: 0;
transform: scale(0) rotate(0) translate3d(0, 0, 0);
-webkit-transform: scale(0) rotate(0) translate3d(0, 0, 0);
-moz-transform: scale(0) rotate(0) translate3d(0, 0, 0);
}
50% {
opacity: 0.5;
transform: scale(1) rotate(0) translate3d(-20px, 20px, 0);
-webkit-transform: scale(1) rotate(0) translate3d(-20px, 20px, 0);
-moz-transform: scale(1) rotate(0) translate3d(-20px, 20px, 0);
}
100% {
opacity: 0;
transform: scale(1) rotate(0) translate3d(-30px, 30px, 0);
-webkit-transform: scale(1) rotate(0) translate3d(-30px, 30px, 0);
-moz-transform: scale(1) rotate(0) translate3d(-30px, 30px, 0);
}
}
</style>