初始化仓库
This commit is contained in:
488
pages/index.vue
Normal file
488
pages/index.vue
Normal file
@@ -0,0 +1,488 @@
|
||||
<template>
|
||||
<view class="container">
|
||||
<view class="status-bar"></view>
|
||||
<t-emp />
|
||||
|
||||
<uni-row class="dataStatics">
|
||||
<uni-col :span="24">
|
||||
<u-subsection :list="list" mode="button" :current="current" @change="handleChangeTab" />
|
||||
<uni-card class="statCard proStatics" margin="0" padding="8px 0" :border="true" v-show="current === 0">
|
||||
<uni-section title="生产统计" type="circle" titleFontSize="18px" titleColor="#1e5799">
|
||||
<uni-row>
|
||||
<uni-col :span="12" class="staticNumber">
|
||||
<u-count-to :endVal="today.repNum" bold separator="," use-easing />
|
||||
<text class="statLabel">当日报工</text>
|
||||
</uni-col>
|
||||
<uni-col :span="12" class="staticNumber">
|
||||
<u-count-to :endVal="month.repNum" bold separator="," use-easing />
|
||||
<text class="statLabel">当月报工</text>
|
||||
</uni-col>
|
||||
</uni-row>
|
||||
</uni-section>
|
||||
</uni-card>
|
||||
|
||||
<uni-card class="statCard quaStatics" margin="0" padding="8px 0" :border="true" v-show="current === 1">
|
||||
<uni-section title="质量统计" type="circle" titleFontSize="18px" titleColor="#1e5799">
|
||||
<template v-slot:right class="card-actions-item">
|
||||
<text class="card-actions-item-text" @click="toDetail('quality')">查看明细</text>
|
||||
<uni-icons type="right"></uni-icons>
|
||||
</template>
|
||||
<uni-row>
|
||||
<uni-col :span="12" class="staticNumber">
|
||||
<u-count-to :endVal="today.failedNum" bold separator="," use-easing />
|
||||
<text class="statLabel">当日不合格</text>
|
||||
</uni-col>
|
||||
<uni-col :span="12" class="staticNumber">
|
||||
<u-count-to :endVal="month.failedNum" bold separator="," use-easing />
|
||||
<text class="statLabel">当月不合格</text>
|
||||
</uni-col>
|
||||
</uni-row>
|
||||
</uni-section>
|
||||
</uni-card>
|
||||
|
||||
<uni-card class="statCard salStatics" margin="0" padding="8px 0" :border="true" v-show="current === 2">
|
||||
<uni-section title="工资统计" type="circle" titleFontSize="18px" titleColor="#1e5799">
|
||||
<template v-slot:right class="card-actions-item">
|
||||
<text class="card-actions-item-text" @click="toDetail('salary')">查看明细</text>
|
||||
<uni-icons type="right"></uni-icons>
|
||||
</template>
|
||||
<uni-row>
|
||||
<uni-col :span="12" class="staticNumber">
|
||||
<u-count-to :endVal="today.salary" bold separator="," use-easing />
|
||||
<text class="statLabel">当日工资</text>
|
||||
</uni-col>
|
||||
<uni-col :span="12" class="staticNumber">
|
||||
<u-count-to :endVal="month.salary" bold separator="," use-easing />
|
||||
<text class="statLabel">当月工资</text>
|
||||
</uni-col>
|
||||
</uni-row>
|
||||
</uni-section>
|
||||
</uni-card>
|
||||
</uni-col>
|
||||
</uni-row>
|
||||
|
||||
<uni-row class="jobInfo" :gutter="20">
|
||||
<uni-col :span="24">
|
||||
<uni-card class="eqpInfo" margin="0" padding="8px 0" :border="true">
|
||||
<uni-section title="所在设备" type="line" titleFontSize="20px" titleColor="#1e5799">
|
||||
<view class="eqpName">{{ eqpName }}</view>
|
||||
<view class="card-actions">
|
||||
<view class="card-actions-item" @click="eqpCheckIn">
|
||||
<uni-icons type="icon-qiandao" size="14" color="#9d9d9d" custom-prefix="iconfont"></uni-icons>
|
||||
<text class="card-actions-item-text">签到</text>
|
||||
</view>
|
||||
<view class="card-actions-item" @click="eqpCheckOut">
|
||||
<uni-icons type="icon-qiantui" size="14" color="#9d9d9d" custom-prefix="iconfont"></uni-icons>
|
||||
<text class="card-actions-item-text">签退</text>
|
||||
</view>
|
||||
</view>
|
||||
</uni-section>
|
||||
</uni-card>
|
||||
</uni-col>
|
||||
<uni-col :span="24">
|
||||
<uni-card class="staInfo" margin="0" padding="8px 0" :border="true">
|
||||
<uni-section title="所在工位" type="line" titleFontSize="20px" titleColor="#1e5799">
|
||||
<view class="staName">{{ stationTitle }}</view>
|
||||
<view class="card-actions">
|
||||
<view class="card-actions-item" @click="staCheckIn">
|
||||
<uni-icons type="icon-qiandao" size="14" color="#9d9d9d" custom-prefix="iconfont"></uni-icons>
|
||||
<text class="card-actions-item-text">签到</text>
|
||||
</view>
|
||||
<view class="card-actions-item" @click="staCheckOut">
|
||||
<uni-icons type="icon-qiantui" size="14" color="#9d9d9d" custom-prefix="iconfont"></uni-icons>
|
||||
<text class="card-actions-item-text">签退</text>
|
||||
</view>
|
||||
</view>
|
||||
</uni-section>
|
||||
</uni-card>
|
||||
</uni-col>
|
||||
</uni-row>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listEmpEqpHistory } from '@/api/basic/empEqpHistory.js';
|
||||
import { listEmployee } from '@/api/mes/jobIn.js';
|
||||
import { getInfo } from '@/api/login.js';
|
||||
import { getDepartment } from '@/api/basic/department.js';
|
||||
import { listReport } from '@/api/mes/pwoDraw.js';
|
||||
import { listStationEmpHistory } from '@/api/basic/empStaHistory.js';
|
||||
import { getBeijingTime } from '@/utils/judge.ts';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
userId: null,
|
||||
empCode: null,
|
||||
empName: this.$store.state.employee.empName,
|
||||
eqpId: null,
|
||||
eqpCode: null,
|
||||
eqpName: '/',
|
||||
deptId: null,
|
||||
deptName: this.$store.state.employee.deptName,
|
||||
stationTitle: '/',
|
||||
today: {
|
||||
repNum: 0,
|
||||
failedNum: 0,
|
||||
salary: 0,
|
||||
reportInfo: [],
|
||||
jobs: []
|
||||
},
|
||||
month: {
|
||||
repNum: 0,
|
||||
failedNum: 0,
|
||||
salary: 0,
|
||||
reportInfo: [],
|
||||
jobs: []
|
||||
},
|
||||
timeRange: [],
|
||||
list: ['生产统计', '质量统计', '工资统计'],
|
||||
current: 0
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
eqpCheckIn() {
|
||||
this.$tab.navigateTo(`/pages/basic/empEqpStart?userId=${this.userId}&empCode=${this.empCode}&empName=${this.empName}`);
|
||||
},
|
||||
eqpCheckOut() {
|
||||
this.$tab.navigateTo(`/pages/basic/empEqpEnd?userId=${this.userId}&empCode=${this.empCode}&empName=${this.empName}`);
|
||||
},
|
||||
staCheckIn() {
|
||||
this.$tab.navigateTo(`/pages/basic/empStaStart?userId=${this.userId}&empCode=${this.empCode}&empName=${this.empName}`);
|
||||
},
|
||||
staCheckOut() {
|
||||
this.$tab.navigateTo(`/pages/basic/empStaEnd?userId=${this.userId}&empCode=${this.empCode}&empName=${this.empName}`);
|
||||
},
|
||||
getEqpAndSta() {
|
||||
// 查询人员上机历史
|
||||
listEmpEqpHistory({
|
||||
empName: this.empName,
|
||||
empCode: this.empCode
|
||||
}).then((res) => {
|
||||
this.eqpCode = null;
|
||||
this.eqpName = '/';
|
||||
|
||||
if (res.rows.length > 0) {
|
||||
const item = res.rows.find((item) => !item.endTime);
|
||||
if (item) {
|
||||
this.eqpCode = item.equipmentCode;
|
||||
this.eqpName = item.equipmentTitle;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 查询工位签到历史
|
||||
listStationEmpHistory({
|
||||
empName: this.empName
|
||||
}).then((res) => {
|
||||
const filteredData = res.rows.filter((item) => item.endTime == null);
|
||||
console.log(filteredData);
|
||||
if (filteredData.length > 0) {
|
||||
this.stationTitle = filteredData[0].stationTitle;
|
||||
} else {
|
||||
this.stationTitle = '/';
|
||||
}
|
||||
});
|
||||
},
|
||||
async getUserInfo() {
|
||||
// 根据账号获取员工姓名和账号ID
|
||||
await getInfo()
|
||||
.then((res) => {
|
||||
this.empName = res.user.nickName;
|
||||
this.userId = res.user.userId;
|
||||
})
|
||||
.catch(() => {
|
||||
uni.showToast({
|
||||
title: '当前账号无对应人员资料',
|
||||
icon: 'none'
|
||||
});
|
||||
});
|
||||
// 根据昵称获取对应员工编号
|
||||
await listEmployee({
|
||||
empName: this.empName
|
||||
})
|
||||
.then((res) => {
|
||||
this.empCode = res.rows[0].empCode;
|
||||
this.deptId = res.rows[0].deptId;
|
||||
|
||||
// 根据部门id查询部门名称
|
||||
getDepartment(this.deptId)
|
||||
.then((res) => {
|
||||
this.deptName = res.data.departmentTitle;
|
||||
})
|
||||
.catch(() => {
|
||||
uni.showToast({
|
||||
title: '未查询到所属部门',
|
||||
icon: 'none'
|
||||
});
|
||||
});
|
||||
})
|
||||
.catch(() => {
|
||||
uni.showToast({
|
||||
title: '当前账号无对应人员资料',
|
||||
icon: 'none'
|
||||
});
|
||||
});
|
||||
},
|
||||
getTodayRange() {
|
||||
const now = new Date();
|
||||
// 获取日期
|
||||
const year = String(now.getFullYear());
|
||||
const month = String(now.getMonth() + 1).padStart(2, '0');
|
||||
const date = String(now.getDate()).padStart(2, '0');
|
||||
const nextDate = String(now.getDate() + 1).padStart(2, '0');
|
||||
this.timeRange = [];
|
||||
this.timeRange.push(`${year}-${month}-${date} 00:00:00`);
|
||||
this.timeRange.push(`${year}-${month}-${nextDate} 00:00:00`);
|
||||
},
|
||||
getMonthRange() {
|
||||
const now = new Date();
|
||||
// 获取日期
|
||||
const year = String(now.getFullYear());
|
||||
const month = String(now.getMonth() + 1).padStart(2, '0');
|
||||
const nextMonth = String(now.getMonth() + 2).padStart(2, '0');
|
||||
this.timeRange = [];
|
||||
this.timeRange.push(`${year}-${month}-01 00:00:00`);
|
||||
this.timeRange.push(`${year}-${nextMonth}-01 00:00:00`);
|
||||
},
|
||||
async getTodayInfo() {
|
||||
this.getTodayRange();
|
||||
await listReport({
|
||||
'timeRange[0]': this.timeRange[0],
|
||||
'timeRange[1]': this.timeRange[1],
|
||||
createByName: this.empName
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.rows.length !== 0) {
|
||||
for (var i in res.rows) {
|
||||
this.today.reportInfo.push({
|
||||
repNum: res.rows[i].reportNumber,
|
||||
type: res.rows[i].type,
|
||||
pwoJobCode: res.rows[i].pwoJobCode,
|
||||
ptNoTar: res.rows[i].ptNoTar,
|
||||
failedNum: 0
|
||||
// 数据未添加完毕,子页面还需要:工序、工序数量、计价单价
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
uni.showToast({
|
||||
title: '获取日报工信息失败',
|
||||
icon: 'none'
|
||||
});
|
||||
});
|
||||
for (const item of this.today.reportInfo) {
|
||||
// 当日报工数
|
||||
this.today.repNum += item.repNum;
|
||||
// 当日质量问题
|
||||
if (item.type !== '合格品') {
|
||||
this.today.failedNum++;
|
||||
}
|
||||
}
|
||||
this.today.reportInfo.failedNum = this.today.failedNum;
|
||||
},
|
||||
async getMonthInfo() {
|
||||
this.getMonthRange();
|
||||
await listReport({
|
||||
createByName: this.empName,
|
||||
'timeRange[0]': this.timeRange[0],
|
||||
'timeRange[1]': this.timeRange[1]
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.rows.length > 0) {
|
||||
for (var i in res.rows) {
|
||||
this.month.reportInfo.push({
|
||||
repNum: res.rows[i].reportNumber,
|
||||
type: res.rows[i].type,
|
||||
pwoJobCode: res.rows[i].pwoJobCode,
|
||||
ptNoTar: res.rows[i].ptNoTar,
|
||||
failedNum: 0
|
||||
// 数据未添加完毕,子页面还需要:工序、工序数量、计价单价
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
uni.showToast({
|
||||
title: '获取月报工信息失败',
|
||||
icon: 'none'
|
||||
});
|
||||
});
|
||||
for (const item of this.month.reportInfo) {
|
||||
// 当月报工数
|
||||
this.month.repNum += item.repNum;
|
||||
// 当月质量问题
|
||||
if (item.type !== '合格品') {
|
||||
this.month.failedNum++;
|
||||
}
|
||||
// 月工资
|
||||
}
|
||||
this.month.reportInfo.failedNum = this.month.failedNum;
|
||||
},
|
||||
// 计算薪资
|
||||
calSal() {},
|
||||
// 跳转到明细页面
|
||||
toDetail(type) {
|
||||
this.$modal.msg('功能开发中...');
|
||||
return;
|
||||
|
||||
const params = {
|
||||
today: {
|
||||
repNum: this.today.repNum,
|
||||
failedNum: this.today.failedNum,
|
||||
salary: this.today.salary
|
||||
},
|
||||
month: {
|
||||
repNum: this.month.repNum,
|
||||
failedNum: this.month.failedNum,
|
||||
salary: this.month.salary
|
||||
}
|
||||
};
|
||||
|
||||
uni.navigateTo({
|
||||
url: `/pages/detail/${type}Detail?data=${encodeURIComponent(JSON.stringify(params))}`
|
||||
});
|
||||
},
|
||||
handleChangeTab(tab) {
|
||||
this.current = tab;
|
||||
}
|
||||
},
|
||||
async onShow() {
|
||||
// await this.getUserInfo();
|
||||
await this.getEqpAndSta();
|
||||
await this.getTodayInfo();
|
||||
await this.getMonthInfo();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.status-bar {
|
||||
height: var(--status-bar-height);
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 100%;
|
||||
padding: 6px 12px;
|
||||
box-sizing: border-box;
|
||||
// display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
/* #ifdef H5 */
|
||||
height: calc(100vh - 44px);
|
||||
/* #endif */
|
||||
/* #ifndef H5 */
|
||||
height: 100vh;
|
||||
/* #endif */
|
||||
}
|
||||
|
||||
.jobInfo {
|
||||
margin: 0 !important;
|
||||
|
||||
.uni-col {
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
.uni-col + .uni-col {
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.eqpInfo,
|
||||
.staInfo {
|
||||
border-radius: 12px !important;
|
||||
|
||||
.eqpName,
|
||||
.staName {
|
||||
font-size: 22px !important;
|
||||
text-align: center;
|
||||
margin: 15px 0;
|
||||
font-weight: 500;
|
||||
color: #444;
|
||||
min-height: 30px;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.card-actions {
|
||||
border-top: 1px #d9d9d9 solid;
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
gap: 10px;
|
||||
padding-top: 10px;
|
||||
|
||||
.card-actions-item {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex: 1;
|
||||
}
|
||||
.card-actions-item + .card-actions-item {
|
||||
border-left: 2px solid #d9d9d9;
|
||||
}
|
||||
.card-actions-item-text {
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
margin-left: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.dataStatics {
|
||||
background: transparent !important;
|
||||
box-shadow: none !important;
|
||||
margin: 10px 0 15px !important;
|
||||
|
||||
.statCard {
|
||||
border-radius: 0 0 12px 12px !important;
|
||||
background: #fff !important;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin: 0 5px;
|
||||
|
||||
.staticNumber {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
|
||||
.u-count-num {
|
||||
font-size: 40px !important;
|
||||
margin: 10px 0;
|
||||
}
|
||||
}
|
||||
|
||||
.detailBtn {
|
||||
background: #409eff;
|
||||
color: white;
|
||||
border: none;
|
||||
height: 45px;
|
||||
font-size: 18px;
|
||||
border-radius: 8px;
|
||||
margin-top: 15px;
|
||||
line-height: 45px;
|
||||
transition: background 0.3s;
|
||||
|
||||
&:active {
|
||||
background: #3a8ee6;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.u-subsection--button {
|
||||
padding-left: 0 !important;
|
||||
padding-right: 0 !important;
|
||||
}
|
||||
|
||||
/* 全局uni-section标题加粗 */
|
||||
::v-deep .uni-section__content-title {
|
||||
font-weight: bold !important;
|
||||
}
|
||||
|
||||
::v-deep .uni-section-header__slot-right {
|
||||
display: flex;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user