订单、物料、员工绩效报工

This commit is contained in:
赵正易 2025-02-19 08:41:09 +08:00
parent 8ff3ff30a3
commit dd19571489
6 changed files with 401 additions and 8 deletions

View File

@ -0,0 +1,13 @@
import request from '@/utils/request'
/**
* 员工报工清单查询
* @param {查询条件} data
*/
export function listGroupReportList(query) {
return request({
url: 'mes/groupManagement/GroupShift/list',
method: 'get',
params: query
})
}

View File

@ -0,0 +1,12 @@
import request from '@/utils/request'
/**
* 订单进度分页查询
* @param {查询条件} data
*/
export function listOrderProgress(query) {
return request({
url: 'mes/deliveryManagement/OrderPurchase/list',
method: 'post',
data: query
})
}

View File

@ -7,8 +7,8 @@ import { downFile } from '@/utils/request'
export function listOrderPurchase(query) {
return request({
url: 'mes/orderManagement/OrderPurchase/list',
method: 'get',
params: query
method: 'post',
data: query
})
}

View File

@ -0,0 +1,132 @@
<template>
<!-- 员工报工清单 -->
<div>
<!-- 搜索表单 -->
<el-form :model="searchForm" label-width="100px">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="时间范围">
<el-date-picker v-model="searchForm.dateRange" type="datetimerange" range-separator=""
start-placeholder="开始日期" end-placeholder="结束日期" value-format="YYYY-MM-DD HH:mm:ss"
:default-value="[dayjs().startOf('day').add(8, 'hour'), dayjs().endOf('day').subtract(16, 'hour')]" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="员工名称">
<el-input v-model="searchForm.name" placeholder="请输入员工名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="工序号">
<el-select v-model="searchForm.process" placeholder="请选择工序号">
<el-option label="全部" value=""></el-option>
<el-option v-for="process in processOptions" :key="process" :label="process"
:value="process"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="班次选择">
<el-radio-group v-model="searchForm.shift">
<el-radio-button value="白班">白班</el-radio-button>
<el-radio-button value="晚班">晚班</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item>
<el-button type="primary" @click="handleSearch">搜索</el-button>
<el-button @click="resetForm">重置</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- 加载状态和错误信息 -->
<div v-if="loading">正在加载...</div>
<div v-if="error">{{ error }}</div>
<!-- VxeTable 表格 -->
<vxe-table :data="tableData">
<vxe-column field="员工姓名" title="员工姓名"></vxe-column>
<vxe-column field="物料领用" title="物料领用"></vxe-column>
<vxe-column field="机械加工" title="机械加工"></vxe-column>
<vxe-column field="中间检查" title="中间检查"></vxe-column>
<vxe-column field="手工研磨" title="手工研磨"></vxe-column>
<vxe-column field="机研磨" title="机研磨"></vxe-column>
<vxe-column field="精研磨" title="精研磨"></vxe-column>
<vxe-column field="入库检查" title="入库检查"></vxe-column>
<vxe-column field="出货" title="出货"></vxe-column>
</vxe-table>
</div>
</template>
<script setup>
import { ref, watch } from 'vue'
import dayjs from 'dayjs'
import { listGroupReportList } from '@/api/groupManagement/achievement.js'
//
const tableData = ref([
{ 员工姓名: "员工1", 物料领用: 300, 机械加工: 300, 中间检查: 300, 手工研磨: 300, 机研磨: 300, 精研磨: 300, 入库检查: 300, 出货: 300 },
// ...
])
//
const processOptions = ['物料领用', '机械加工', '中间检查', '手工研磨', '机研磨', '精研磨', '入库检查', '出货']
//
const searchForm = ref({
name: '',
dateRange: [dayjs().startOf('day').add(8, 'hour'), dayjs().endOf('day').subtract(16, 'hour')],
process: '', //
shift: '白班'
})
//
const loading = ref(false)
const error = ref(null)
//
watch(() => searchForm.value.shift, (newVal) => {
if (newVal === '白班') {
searchForm.value.dateRange = [dayjs().startOf('day').add(8, 'hour'), dayjs().endOf('day').subtract(16, 'hour')]
} else if (newVal === '晚班') {
searchForm.value.dateRange = [dayjs().startOf('day').add(20, 'hour'), dayjs().add(1, 'day').startOf('day').subtract(4, 'hour')]
}
}, { immediate: true })
//
async function handleSearch() {
try {
loading.value = true
error.value = null
const res = await listGroupReportList(searchForm.value)
if (res.code === 200) {
tableData.value = res.data
} else {
error.value = '获取数据失败,请稍后再试'
}
} catch (err) {
error.value = '请求出错,请稍后再试'
} finally {
loading.value = false
}
}
//
function resetForm() {
searchForm.value = {
name: '',
dateRange: [dayjs().startOf('day').add(8, 'hour'), dayjs().endOf('day').subtract(16, 'hour')],
process: '', //
shift: '白班'
}
}
</script>
<style scoped>
/* 样式可以根据需要自定义 */
</style>

View File

@ -0,0 +1,236 @@
<template>
<el-form :model="queryParams" ref="queryRef" :inline="true" label-width="100px">
<el-form-item label="订单扫描号">
<el-input v-model="queryParams.orderNoMes" placeholder="请输入订单扫描号" clearable />
</el-form-item>
<el-form-item label="采购订单号">
<el-input v-model="queryParams.purchaseOrderErp" placeholder="请输入采购订单号" clearable />
</el-form-item>
<el-form-item label="物料号">
<el-input v-model="queryParams.materialCode" placeholder="请输入物料号" clearable />
</el-form-item>
<el-form-item label="订单是否完成">
<el-select v-model="queryParams.orderindicator" placeholder="请选择" clearable>
<el-option v-for="option in boolOptions" :key="option.dictValue" :label="option.dictLabel" :value="option.dictValue" />
</el-select>
</el-form-item>
<el-form-item label="销售地区">
<el-input v-model="queryParams.salesArea" placeholder="请输入销售地区" clearable />
</el-form-item>
<el-form-item label="是否非标">
<el-select v-model="queryParams.specordindicator" placeholder="请选择" clearable>
<el-option v-for="option in boolOptions" :key="option.dictValue" :label="option.dictLabel" :value="option.dictValue" />
</el-select>
</el-form-item>
<el-form-item label="单据日期">
<el-date-picker
v-model="queryParams.importDate"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date(2000, 1, 1, 8, 0, 0), new Date(2000, 1, 1, 20, 0, 0)]"
:shortcuts="shortcuts"
value-format="YYYY-MM-DD HH:mm:ss"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">查询</el-button>
<el-button @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<vxe-table :data="dataList" v-loading="loading" height="600" border header-cell-class-name="el-table-header-cell"
highlight-current-row row-key="id">
<vxe-column type="expand">
<template #default="{ row }">
<div>
<vxe-table :data="row.children" height="300" border row-key="id">
<vxe-column type="seq" width="50" align="center" />
<vxe-column field="workorder" title="工单号" align="center" width="160" />
<vxe-column field="productionName" title="主体品名" />
<vxe-column field="productionCode" title="主体型号" />
<vxe-column field="stoveCode" title="炉号" />
<vxe-column field="planNum" align="center" title="计划数量" />
<vxe-column field="workorderDate" title="工单日期">
<template #default="{ row }">
<span v-if="row.workorderDate != '' && row.workorderDate != null">{{ proxy.dayjs(row.workorderDate).format('YYYY-MM-DD') }}</span>
</template>
</vxe-column>
<vxe-column field="priority" title="优先级" align="center">
<template #default="{ row }">
<dict-tag :options="options.priorityOptions" :value="row.priority" />
</template>
</vxe-column>
<vxe-column field="materialName" title="材料型号" />
<vxe-column field="materialCode" title="材料编码" />
<vxe-column field="materialtextureCode" title="材质" />
<vxe-column field="drawingCode" title="图号" />
<vxe-column field="version" title="版本" />
<vxe-column field="status" title="状态">
<template #default="{ row }">
<dict-tag :options="options.statusOptions" :value="row.status" />
</template>
</vxe-column>
<vxe-column field="workshopCode" title="车间" />
</vxe-table>
</div>
</template>
</vxe-column>
<vxe-column field="orderNoMes" title="订单扫描号" align="center" show-overflow min-width="150" />
<vxe-column field="purchaseOrderErp" title="采购订单号" align="center" show-overflow min-width="150" />
<vxe-column field="materialName" title="物料" align="center" show-overflow min-width="150" />
<vxe-column field="materialCode" title="物料号" align="center" show-overflow min-width="120" />
<vxe-column field="demandQuantity" title="需求数量" align="center" min-width="100" />
<vxe-column field="deliveryDate" title="交货日期" show-overflow min-width="120" />
<vxe-column field="startDate" title="基本开始日期" show-overflow min-width="120" />
<vxe-column field="endDate" title="基本结束日期" show-overflow min-width="120" />
<vxe-column field="deliveryQuantity" title="实际交货数量" align="center" min-width="120" />
<vxe-column field="orderindicator" title="订单是否完成" align="center" show-overflow min-width="120">
<template #default="{ row }">
<dict-tag :options="boolOptions" :value="row.orderindicator" />
</template>
</vxe-column>
<vxe-column field="routeCode" title="计划产线" align="center" show-overflow min-width="120" />
<vxe-column field="specordindicator" title="是否非标" align="center" show-overflow min-width="100">
<template #default="{ row }">
<dict-tag :options="boolOptions" :value="row.specordindicator" />
</template>
</vxe-column>
<vxe-column field="kdType" title="类型" align="center" min-width="100" />
<vxe-column field="documentDate" title="单据日期" show-overflow min-width="120" />
<vxe-column field="seller" title="售达方" align="center" show-overflow min-width="120" />
<vxe-column field="salesArea" title="销售地区" align="center" show-overflow min-width="120" />
<vxe-column field="remark" title="备注" align="center" show-overflow min-width="150" />
<vxe-column field="importDate" title="导入日期" show-overflow min-width="120" />
</vxe-table>
</template>
<script setup name="orderpurchase">
import { listOrderProgress } from '@/api/orderPurchaseManagement/orderProgress.js'
import { reactive, ref } from 'vue'
import dayjs from 'dayjs'
const queryParams = reactive({
pageNum: 1,
pageSize: 10,
sort: '',
sortType: 'asc',
importDate: [dayjs().startOf('day').hour(8).minute(0).second(0).toISOString(), dayjs().startOf('day').hour(20).minute(0).second(0).toISOString()],
orderNoMes: '',
purchaseOrderErp: '',
materialCode: '',
orderindicator: '',
salesArea: '',
specordindicator: '',
})
const dataList = ref([])
const queryRef = ref()
const loading = ref(false)
const showSearch = ref(true)
const shortcuts = [
{
text: '白班',
value: () => {
return [dayjs().startOf('day').hour(8).minute(0).second(0).toISOString(), dayjs().startOf('day').hour(20).minute(0).second(0).toISOString()]
},
},
{
text: '晚班',
value: () => {
return [dayjs().startOf('day').hour(20).minute(0).second(0).toISOString(), dayjs().add(1, 'day').startOf('day').hour(8).minute(0).second(0).toISOString()]
},
},
]
// eg:{ dictLabel: '', dictValue: '0'}
const statusOptions = [
{ dictLabel: '未开始', dictValue: 0, listClass: 'info' },
{ dictLabel: '物料领用', dictValue: 10, listClass: 'primary' },
{ dictLabel: '机械加工', dictValue: 20, listClass: 'primary' },
{ dictLabel: '中间检查', dictValue: 30, listClass: 'primary' },
{ dictLabel: '手工研磨', dictValue: 40, listClass: 'primary' },
{ dictLabel: '机研磨', dictValue: 50, listClass: 'primary' },
{ dictLabel: '精研磨', dictValue: 60, listClass: 'primary' },
{ dictLabel: '入库检查', dictValue: 70, listClass: 'primary' },
{ dictLabel: '出厂', dictValue: 80, listClass: 'primary' },
{ dictLabel: '出货', dictValue: 90, listClass: 'primary' }
]
//
const priorityOptions = [
{ dictLabel: '正常', dictValue: 1, listClass: 'primary' },
{ dictLabel: '插单', dictValue: 2, listClass: 'warning' },
{ dictLabel: '紧急', dictValue: 3, listClass: 'danger' }
]
//
const unitOptions = [
{ dictLabel: '只', dictValue: '只', listClass: 'info' },
{ dictLabel: '个', dictValue: '个', listClass: 'info' },
{ dictLabel: '件', dictValue: '件', listClass: 'info' }
]
// (1- 2-) eg:{ dictLabel: '', dictValue: '0'}
const isSufficientOptions = [
{ dictLabel: '足料', dictValue: '2', listClass: '' },
{ dictLabel: '缺料', dictValue: '1', listClass: '' },
{ dictLabel: '未确认', dictValue: '0', listClass: '' }
]
//
const isCarton = [
{ dictLabel: '是', dictValue: '1', listClass: 'success' },
{ dictLabel: '否', dictValue: '0', listClass: 'info' }
]
//
const boolOptions = [
{ dictLabel: '是', dictValue: 1, listClass: 'success' },
{ dictLabel: '否', dictValue: 0, listClass: 'info' }
]
const kdTypeOptions = [
// Add your kdType options here
]
function getList() {
loading.value = true
listOrderProgress(queryParams).then(res => {
if (res.code === 200) {
dataList.value = res.data
}
loading.value = false
})
}
function handleQuery() {
queryParams.pageNum = 1
getList()
}
function resetQuery() {
Object.assign(queryParams, {
importDate: [dayjs().startOf('day').hour(8).minute(0).second(0).toISOString(), dayjs().startOf('day').hour(20).minute(0).second(0).toISOString()],
orderNoMes: '',
purchaseOrderErp: '',
materialCode: '',
orderindicator: '',
salesArea: '',
specordindicator: '',
})
handleQuery()
}
function sortChange(column) {
queryParams.sort = column.prop || ''
queryParams.sortType = column.order || ''
handleQuery()
}
handleQuery()
</script>
<style scoped>
.el-upload__tip {
font-size: 12px;
color: #999;
}
</style>

View File

@ -2,8 +2,8 @@
<div>
<el-form :model="queryParams" label-position="right" inline ref="queryRef" v-show="showSearch">
<el-form-item label="单据日期区间">
<el-date-picker v-model="queryParams.dateRange" type="daterange" range-separator="-" start-placeholder="开始日期"
end-placeholder="结束日期" value-format="YYYY-MM-DD" />
<el-date-picker v-model="queryParams.importDate" type="daterange" range-separator="-" start-placeholder="开始日期"
end-placeholder="结束日期" :clearable="false" value-format="YYYY-MM-DD" />
</el-form-item>
<el-form-item label="订单扫描号">
<el-input v-model="queryParams.orderNoMes" placeholder="请输入订单扫描号" clearable @keyup.enter.native="handleQuery" />
@ -16,7 +16,7 @@
<el-input v-model="queryParams.materialCode" placeholder="请输入物料号" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="订单是否完成">
<el-select v-model="queryParams.orderindicator" placeholder="请选择" clearable style="width: 100%">
<el-select v-model="queryParams.orderindicator" placeholder="请选择" clearable>
<el-option label="是" value="是" />
<el-option label="否" value="否" />
</el-select>
@ -25,7 +25,7 @@
<el-input v-model="queryParams.salesArea" placeholder="请输入销售地区" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="是否非标">
<el-select v-model="queryParams.specordindicator" placeholder="请选择" clearable style="width: 100%">
<el-select v-model="queryParams.specordindicator" placeholder="请选择" clearable>
<el-option label="是" value="是" />
<el-option label="否" value="否" />
</el-select>
@ -312,7 +312,7 @@ const queryParams = reactive({
pageSize: 10,
sort: '',
sortType: 'asc',
dateRange: [],
importDate: [proxy.$dayjs().startOf('day'), proxy.$dayjs().endOf('day')],
orderNoMes: '',
purchaseOrderErp: '',
materialCode: '',
@ -391,7 +391,7 @@ function handleQuery() {
function resetQuery() {
proxy.resetForm("queryRef")
queryParams.dateRange = []
queryParams.importDate = [proxy.$dayjs().startOf('day'), proxy.$dayjs().endOf('day')]
queryParams.orderNoMes = ''
queryParams.purchaseOrderErp = ''
queryParams.materialCode = ''