初始化仓库

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

488
pages/index.vue Normal file
View 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>