fix produce report

liutao_branch
chenshuichuan 2 years ago
parent 5c9fa846bb
commit 101f800e1e

@ -4,6 +4,8 @@ import request from '@/config/axios'
export interface OrgWorkerVO { export interface OrgWorkerVO {
id: number // id id: number // id
orgId: number // 工位id orgId: number // 工位id
orgType: string
orgName: string
workDate: Date // 工作日期 workDate: Date // 工作日期
groupType: number // 班别 groupType: number // 班别
workerId: number // 工人id workerId: number // 工人id
@ -46,4 +48,21 @@ export const OrgWorkerApi = {
getCreateWorker: async (params: any) => { getCreateWorker: async (params: any) => {
return await request.get({ url: `/mes/org-worker/createWorker`, params }) return await request.get({ url: `/mes/org-worker/createWorker`, params })
}, },
// 获得当前用户排班工位
getOrgWorkerList1: async (params: any) => {
return await request.get({ url: `/mes/org-worker/getOrgWorkerRespVO` , params })
},
// 获得当前用户管理的工人排班工位
getOrgWorkerList2: async (params: any) => {
return await request.get({ url: `/mes/org-worker/getOtherOrgWorkerRespVO` , params })
},
// 获得当前用户列表
getPersonalUser: async () => {
return await request.get({ url: `/mes/org-worker/getPersonalUser` })
},
// 获得当前用户管理的用户列表
getOtherPersonalUser: async () => {
return await request.get({ url: `/mes/org-worker/getOtherPersonalUser` })
},
} }

@ -67,4 +67,8 @@ export const PlanApi = {
updatePlanStatus: async (data: PlanVO) => { updatePlanStatus: async (data: PlanVO) => {
return await request.put({ url: `/mes/plan/updateStatus`, data }) return await request.put({ url: `/mes/plan/updateStatus`, data })
}, },
// 查询正在开工和完工的计划的产品列表
getStartAndFinishPlanProduct: async () => {
return await request.get({ url: `/mes/plan/getProductByStatus` })
},
} }

@ -93,6 +93,10 @@ export interface ProduceReportDetailVO {
reportDate: Date // 报工日期 reportDate: Date // 报工日期
reportTime: string // 计件时间 reportTime: string // 计件时间
reportStatus: number // 报工状态 reportStatus: number // 报工状态
groupType: number //班别
reportType: string
orgType: string
reportDateString: string
} }
// 生产报工明细 API // 生产报工明细 API

@ -7,57 +7,144 @@
label-width="100px" label-width="100px"
v-loading="formLoading" v-loading="formLoading"
> >
<el-row>
<el-form-item label="生产计划ID" prop="planId"> <el-col :span="12">
<el-input v-model="formData.planId" placeholder="请输入生产计划ID" /> <el-form-item label="日期" prop="reportDate">
</el-form-item> <el-date-picker
<el-form-item label="产品ID" prop="productId"> :disabled="isDisableUpdate"
<el-input v-model="formData.productId" placeholder="请输入产品ID" /> v-model="formData.reportDate"
</el-form-item> type="date"
<el-form-item label="用户ID" prop="userId"> value-format="YYYY-MM-DD HH:mm:ss"
<el-input v-model="formData.userId" placeholder="请输入用户ID" /> placeholder="选择日期"
</el-form-item> :default-value="new Date()"
<el-form-item label="组织ID" prop="orgId"> @change="changeDate"
<el-input v-model="formData.orgId" placeholder="请输入组织ID" /> />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="班别" prop="groupType">
<el-radio-group v-model="formData.groupType">
<el-radio
:disabled="isDisableUpdate"
v-for="dict in getIntDictOptions(DICT_TYPE.MES_GROUP_TYPE)"
:key="dict.value"
:label="dict.value"
@change="changeDate"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="类型" prop="orgType">
<el-radio-group v-model="formData.orgType">
<el-radio
:disabled="isDisableUpdate"
v-for="dict in getStrDictOptions(DICT_TYPE.MES_ORG_TYPE)"
:key="dict.value"
:label="dict.value"
@change="changeDate"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-row>
<el-input v-model="formData.remark" placeholder="请输入备注" /> <el-col :span="12">
<el-form-item label="工人" prop="userId">
<el-select
:disabled="isDisable"
v-model="formData.userId"
clearable
filterable
@change="changeDate"
placeholder="请选择工人"
>
<el-option
v-for="item in userList"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工位" prop="orgId">
<el-select
:disabled="isDisable"
v-model="formData.orgId"
clearable
filterable
placeholder="请选择工位"
>
<el-option
v-for="item in orgWorkerList"
:key="item.orgId"
:label="item.orgName"
:value="item.orgId"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-divider />
<el-form-item label="产品" prop="productId">
<el-select v-model="formData.productId" clearable filterable placeholder="请选择" >
<el-option
v-for="item in productList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="成品数量" prop="qualityNumber"> <el-row>
<el-input v-model="formData.qualityNumber" placeholder="请输入成品数量" /> <el-col :span="12">
</el-form-item> <el-form-item label="成品数量" prop="qualityNumber">
<el-form-item label="废品数量" prop="wasteNumber"> <el-input-number v-model="formData.qualityNumber" :min="0" placeholder="请输入数量"/>
<el-input v-model="formData.wasteNumber" placeholder="请输入废品数量" /> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="总数量" prop="totalNumber"> <el-col :span="12">
<el-input v-model="formData.totalNumber" placeholder="请输入总数量" /> <el-form-item label="废品数量" prop="wasteNumber">
</el-form-item> <el-input-number v-model="formData.wasteNumber" :min="0" placeholder="请输入"/>
<el-form-item label="成品率" prop="qualityRate"> </el-form-item>
<el-input v-model="formData.qualityRate" placeholder="请输入成品率" /> </el-col>
</el-form-item> </el-row>
<el-row>
<el-col :span="12">
<el-form-item label="总数量" prop="totalNumber">
<el-input-number disabled v-model="formData.totalNumber" :min="0" placeholder="请输入数量"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="成品率" prop="qualityRate">
<el-input-number disabled v-model="formData.qualityRate" :min="0" :precision="2" placeholder="请输入数量"/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="废品原因" prop="wasteReason"> <el-form-item label="废品原因" prop="wasteReason">
<el-input v-model="formData.wasteReason" placeholder="请输入废品原因" /> <el-input v-model="formData.wasteReason" placeholder="请输入废品原因" />
</el-form-item> </el-form-item>
<el-form-item label="打包数量" prop="packageNumber"> <el-form-item label="打包数量" prop="packageNumber">
<el-input v-model="formData.packageNumber" placeholder="请输入打包数量" /> <el-input-number v-model="formData.packageNumber" :min="0" placeholder="请输入数量"/>
</el-form-item>
<el-form-item label="总时长" prop="totalTime">
<el-input v-model="formData.totalTime" placeholder="请输入总时长" />
</el-form-item> </el-form-item>
<el-form-item label="计件时间" prop="reportTime"> <el-row>
<el-input v-model="formData.reportTime" placeholder="请输入计件时间" /> <el-col :span="12">
</el-form-item> <el-form-item label="总时长/小时" prop="totalTime">
<el-form-item label="报工状态" prop="reportStatus"> <el-input-number v-model="formData.totalTime" :min="0" :precision="2" placeholder="请输入数量"/>
<el-radio-group v-model="formData.reportStatus"> </el-form-item>
<el-radio </el-col>
v-for="dict in getIntDictOptions(DICT_TYPE.MES_RECORD_STATUS)" <el-col :span="12">
:key="dict.value" <el-form-item label="计件时长" prop="reportTime">
:label="dict.value" <el-input-number v-model="formData.reportTime" :min="0" :precision="2" placeholder="请输入数量"/>
> </el-form-item>
{{ dict.label }} </el-col>
</el-radio> </el-row>
</el-radio-group> <el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@ -67,14 +154,24 @@
</Dialog> </Dialog>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import {getIntDictOptions, DICT_TYPE, getBoolDictOptions} from '@/utils/dict' import {getIntDictOptions, DICT_TYPE, getBoolDictOptions, getStrDictOptions} from '@/utils/dict'
import { ProduceReportDetailApi, ProduceReportDetailVO } from '@/api/mes/producereport' import { ProduceReportDetailApi, ProduceReportDetailVO } from '@/api/mes/producereport'
import {defaultProps, handleTree} from "@/utils/tree";
import {OrganizationApi, OrganizationVO} from "@/api/mes/organization";
import * as UserApi from "@/api/system/user";
import {ProductApi, ProductVO} from "@/api/erp/product/product";
import {OrgWorkerApi, OrgWorkerVO} from "@/api/mes/orgworker";
import {PlanApi} from "@/api/mes/plan";
/** 生产报工明细 表单 */ /** 生产报工明细 表单 */
defineOptions({ name: 'ProduceReportDetailForm' }) defineOptions({ name: 'ProduceReportDetailForm' })
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
const userList = ref<UserApi.UserVO[]>([]) //
const organizationTree = ref() //
const productList = ref<ProductVO[]>([]) //
const dialogVisible = ref(false) // const dialogVisible = ref(false) //
const dialogTitle = ref('') // const dialogTitle = ref('') //
@ -87,6 +184,8 @@ const formData = ref({
productId: undefined, productId: undefined,
userId: undefined, userId: undefined,
orgId: undefined, orgId: undefined,
orgType: undefined,
groupType: undefined,
qualityRate: undefined, qualityRate: undefined,
wasteReason: undefined, wasteReason: undefined,
totalTime: undefined, totalTime: undefined,
@ -99,21 +198,28 @@ const formData = ref({
reportDate: undefined, reportDate: undefined,
reportTime: undefined, reportTime: undefined,
reportStatus: undefined, reportStatus: undefined,
reportDateString: undefined,
}) })
const formRules = reactive({ const formRules = reactive({
planId: [{ required: true, message: '生产计划ID不能为空', trigger: 'blur' }], reportDate: [{ required: true, message: '日期不能为空', trigger: 'blur' }],
productId: [{ required: true, message: '产品ID不能为空', trigger: 'blur' }], groupType: [{ required: true, message: '班别不能为空', trigger: 'blur' }],
userId: [{ required: true, message: '用户ID不能为空', trigger: 'blur' }], productId: [{ required: true, message: '产品不能为空', trigger: 'blur' }],
orgId: [{ required: true, message: '组织ID不能为空', trigger: 'blur' }], userId: [{ required: true, message: '工人不能为空', trigger: 'blur' }],
orgId: [{ required: true, message: '工位不能为空', trigger: 'blur' }],
orgType: [{ required: true, message: '工序不能为空', trigger: 'blur' }],
}) })
const formRef = ref() // Ref const formRef = ref() // Ref
const isDisable = ref(false)
const isDisableUpdate = ref(false)
/** 打开弹窗 */ /** 打开弹窗 */
const open = async (type: string, id?: number) => { const open = async (type: string, id?: number) => {
dialogVisible.value = true dialogVisible.value = true
dialogTitle.value = t('action.' + type) dialogTitle.value = t('action.' + type)
formType.value = type formType.value = type
resetForm() resetForm()
formData.value.reportDate = getCurrentDate()
formData.value.groupType = 1
formData.value.orgType = 'zhijiang'
// //
if (id) { if (id) {
formLoading.value = true formLoading.value = true
@ -122,7 +228,27 @@ const open = async (type: string, id?: number) => {
} finally { } finally {
formLoading.value = false formLoading.value = false
} }
isDisableUpdate.value=true;
isDisable.value = true;
} }
await getOrganizationTree()
productList.value = await PlanApi.getStartAndFinishPlanProduct()
if(productList.value.length ==1)
formData.value.productId = productList.value[0].id
if(type === 'replace'){
dialogTitle.value = "代报工"
isDisable.value = false
userList.value = await OrgWorkerApi.getOtherPersonalUser()
orgWorkerList.value = await OrgWorkerApi.getOrgWorkerList2()
}
else if(type === 'create'){
userList.value = await OrgWorkerApi.getPersonalUser()
orgWorkerList.value = await OrgWorkerApi.getOrgWorkerList1()
}
else if(type === 'update'){
userList.value = await UserApi.getSimpleUserList()
}
} }
defineExpose({ open }) // open defineExpose({ open }) // open
@ -134,8 +260,9 @@ const submitForm = async () => {
// //
formLoading.value = true formLoading.value = true
try { try {
formData.value.reportDateString = formData.value.reportDate
const data = formData.value as unknown as ProduceReportDetailVO const data = formData.value as unknown as ProduceReportDetailVO
if (formType.value === 'create') { if (formType.value === 'create' || formType.value === 'replace') {
await ProduceReportDetailApi.createProduceReportDetail(data) await ProduceReportDetailApi.createProduceReportDetail(data)
message.success(t('common.createSuccess')) message.success(t('common.createSuccess'))
} else { } else {
@ -159,19 +286,55 @@ const resetForm = () => {
productId: undefined, productId: undefined,
userId: undefined, userId: undefined,
orgId: undefined, orgId: undefined,
qualityRate: undefined, qualityRate: 0,
wasteReason: undefined, wasteReason: undefined,
totalTime: undefined, totalTime: 0,
packageNumber: undefined, packageNumber: 0,
remark: undefined, remark: undefined,
isEnable: undefined, isEnable: undefined,
qualityNumber: undefined, qualityNumber: 0,
wasteNumber: undefined, wasteNumber: 0,
totalNumber: undefined, totalNumber: 0,
reportDate: undefined, reportDate: undefined,
reportTime: undefined, reportTime: 0,
reportStatus: undefined, reportStatus: undefined,
} }
formRef.value?.resetFields() formRef.value?.resetFields()
} }
const getCurrentDate = () =>{
let now = new Date();
let year = now.getFullYear();
let month = now.getMonth() + 1;
if(month<10){month = '0'+month}
let day = now.getDate();
if(day<10)day = '0'+day;
return year + "-" + month + "-" + day +" 00:00:00";
}
/** 获得产线工位树 */
const getOrganizationTree = async () => {
organizationTree.value = []
const data = await OrganizationApi.getOrganizationList()
const root: Tree = { id: 0, name: 'ALL', children: [] }
root.children = handleTree(data, 'id', 'parentId')
organizationTree.value.push(root)
}
const orgWorkerList = ref<OrgWorkerVO[]>([]) //
//
const changeDate = async () =>{
if(formData.value.reportDate && formData.value.groupType && formData.value.orgType){
if(formType.value=='replace'){
orgWorkerList.value = await OrgWorkerApi.getOrgWorkerList2(formData.value)
}else{
orgWorkerList.value = await OrgWorkerApi.getOrgWorkerList1(formData.value)
}
if(orgWorkerList.value && orgWorkerList.value.length>0){
//formData.value.orgType = orgWorkerList.value[0].orgType
formData.value.orgId = orgWorkerList.value[0].orgId
}
else{
formData.value.orgId = undefined
message.error('未查询到用户的工位安排信息!请联系组长或主管安排工位!')
}
}
}
</script> </script>

@ -8,58 +8,59 @@
:inline="true" :inline="true"
label-width="68px" label-width="68px"
> >
<el-row>
<el-col :span="6">
<el-form-item label="工位" prop="orgId">
<el-tree-select
v-model="queryParams.orgId"
:data="organizationTree"
:props="defaultProps"
check-strictly
default-expand-all
@change="handleQuery"
placeholder="请选择工位"
class="!w-240px"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="产品" prop="productId">
<el-select v-model="queryParams.productId" @change="handleQuery" clearable filterable placeholder="请选择" class="!w-180px">
<el-option
v-for="item in productList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="备注" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
clearable
@keyup.enter="handleQuery"
class="!w-180px"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="日期" prop="reportDate">
<el-date-picker
v-model="queryParams.reportDate"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="计划" prop="planId">
<el-input
v-model="queryParams.planId"
placeholder="请输入生产计划"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="产品" prop="productId">
<el-input
v-model="queryParams.productId"
placeholder="请输入产品"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="工位" prop="orgId">
<el-input
v-model="queryParams.orgId"
placeholder="请输入工位"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="日期" prop="reportDate">
<el-date-picker
v-model="queryParams.reportDate"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
/>
</el-form-item>
<el-form-item> <el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
@ -72,10 +73,10 @@
<Icon icon="ep:plus" class="mr-5px" /> 报工 <Icon icon="ep:plus" class="mr-5px" /> 报工
</el-button> </el-button>
<el-button <el-button
type="primary" type="warning"
plain plain
@click="openForm('create')" @click="openForm('replace')"
v-hasPermi="['mes:produce-report-detail:create']" v-hasPermi="['mes:produce-report-detail:replace']"
> >
<Icon icon="ep:plus" class="mr-5px" /> 代报工 <Icon icon="ep:plus" class="mr-5px" /> 代报工
</el-button> </el-button>
@ -101,9 +102,8 @@
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="报工单" align="center" prop="reportId" /> <el-table-column label="报工单" align="center" prop="reportId" />
<el-table-column label="生产计划" align="center" prop="planId" />
<el-table-column label="产品" align="center" prop="productId" /> <el-table-column label="产品" align="center" prop="productId" />
<el-table-column label="用户" align="center" prop="userId" /> <el-table-column label="工人" align="center" prop="userId" />
<el-table-column label="工位" align="center" prop="orgId" /> <el-table-column label="工位" align="center" prop="orgId" />
<el-table-column label="成品数量" align="center" prop="qualityNumber" /> <el-table-column label="成品数量" align="center" prop="qualityNumber" />
<el-table-column label="废品数量" align="center" prop="wasteNumber" /> <el-table-column label="废品数量" align="center" prop="wasteNumber" />
@ -126,7 +126,7 @@
/> />
<el-table-column label="总时长" align="center" prop="totalTime" /> <el-table-column label="总时长" align="center" prop="totalTime" />
<el-table-column label="计件时" align="center" prop="reportTime" /> <el-table-column label="计件时" align="center" prop="reportTime" />
<el-table-column label="状态" align="center" prop="reportStatus"> <el-table-column label="状态" align="center" prop="reportStatus">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.MES_RECORD_STATUS" :value="scope.row.reportStatus" /> <dict-tag :type="DICT_TYPE.MES_RECORD_STATUS" :value="scope.row.reportStatus" />
@ -174,12 +174,19 @@ import {dateFormatter, dateFormatter2} from '@/utils/formatTime'
import download from '@/utils/download' import download from '@/utils/download'
import { ProduceReportDetailApi, ProduceReportDetailVO } from '@/api/mes/producereport' import { ProduceReportDetailApi, ProduceReportDetailVO } from '@/api/mes/producereport'
import ProduceReportDetailForm from './ProduceReportDetailForm.vue' import ProduceReportDetailForm from './ProduceReportDetailForm.vue'
import {defaultProps, handleTree} from "@/utils/tree";
import * as UserApi from "@/api/system/user";
import {OrganizationApi} from "@/api/mes/organization";
import {ProductApi, ProductVO} from "@/api/erp/product/product";
/** 生产报工明细 列表 */ /** 生产报工明细 列表 */
defineOptions({ name: 'ProduceReportDetail' }) defineOptions({ name: 'ProduceReportDetail' })
const message = useMessage() // const message = useMessage() //
const { t } = useI18n() // const { t } = useI18n() //
const userList = ref<UserApi.UserVO[]>([]) //
const organizationTree = ref() //
const productList = ref<ProductVO[]>([]) //
const loading = ref(true) // const loading = ref(true) //
const list = ref<ProduceReportDetailVO[]>([]) // const list = ref<ProduceReportDetailVO[]>([]) //
@ -266,9 +273,22 @@ const handleExport = async () => {
} }
} }
/** 获得产线工位树 */
const getOrganizationTree = async () => {
organizationTree.value = []
const data = await OrganizationApi.getOrganizationList()
const root: Tree = { id: 0, name: 'ALL', children: [] }
root.children = handleTree(data, 'id', 'parentId')
organizationTree.value.push(root)
}
/** 初始化 **/ /** 初始化 **/
onMounted(() => { onMounted(async () => {
getList() await getList()
await getOrganizationTree()
//
userList.value = await UserApi.getSimpleUserList()
//
productList.value = await ProductApi.getMesProductSimpleList()
}) })
/** tab 切换 */ /** tab 切换 */
const handleTabClick = (tab: TabsPaneContext) => { const handleTabClick = (tab: TabsPaneContext) => {

@ -0,0 +1,321 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-row>
<el-col :span="12">
<el-form-item label="日期" prop="reportDate">
<el-date-picker
:disabled="isDisableUpdate"
v-model="formData.reportDate"
type="date"
value-format="x"
placeholder="选择日期"
@change="changeDate"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="班别" prop="groupType">
<el-radio-group v-model="formData.groupType">
<el-radio
:disabled="isDisableUpdate"
v-for="dict in getIntDictOptions(DICT_TYPE.MES_GROUP_TYPE)"
:key="dict.value"
:label="dict.value"
@change="changeDate"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="类型" prop="orgType">
<el-select v-model="formData.orgType" @change="changeDate" placeholder="请选择类型">
<el-option
:disabled="isDisableUpdate"
v-for="dict in getStrDictOptions(DICT_TYPE.MES_ORG_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="工人" prop="userId">
<el-select
:disabled="isDisable"
v-model="formData.userId"
clearable
filterable
placeholder="请选择工人"
>
<el-option
v-for="item in userList"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工位" prop="orgId">
<el-tree-select
:disabled="isDisableUpdate"
v-model="formData.orgId"
:data="organizationTree"
:props="defaultProps"
check-strictly
default-expand-all
placeholder="请选择工位"
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="产品" prop="productId">
<el-select v-model="formData.productId" clearable filterable placeholder="请选择" >
<el-option
v-for="item in productList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="成品数量" prop="qualityNumber">
<el-input-number v-model="formData.qualityNumber" :min="0" placeholder="请输入数量"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="废品数量" prop="wasteNumber">
<el-input-number v-model="formData.wasteNumber" :min="0" placeholder="请输入"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="总数量" prop="totalNumber">
<el-input-number disabled v-model="formData.totalNumber" :min="0" placeholder="请输入数量"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="成品率" prop="qualityRate">
<el-input-number disabled v-model="formData.qualityRate" :min="0" :precision="2" placeholder="请输入数量"/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="废品原因" prop="wasteReason">
<el-input v-model="formData.wasteReason" placeholder="请输入废品原因" />
</el-form-item>
<el-form-item label="打包数量" prop="packageNumber">
<el-input-number v-model="formData.packageNumber" :min="0" placeholder="请输入数量"/>
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="总时长/小时" prop="totalTime">
<el-input-number v-model="formData.totalTime" :min="0" :precision="2" placeholder="请输入数量"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="计件时长" prop="reportTime">
<el-input-number v-model="formData.reportTime" :min="0" :precision="2" placeholder="请输入数量"/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import {getIntDictOptions, DICT_TYPE, getBoolDictOptions, getStrDictOptions} from '@/utils/dict'
import { ProduceReportDetailApi, ProduceReportDetailVO } from '@/api/mes/producereport'
import {defaultProps, handleTree} from "@/utils/tree";
import {OrganizationApi, OrganizationVO} from "@/api/mes/organization";
import * as UserApi from "@/api/system/user";
import {ProductApi, ProductVO} from "@/api/erp/product/product";
import {OrgWorkerApi} from "@/api/mes/orgworker";
/** 生产报工明细 表单 */
defineOptions({ name: 'ProduceReportDetailForm' })
const { t } = useI18n() //
const message = useMessage() //
const userList = ref<UserApi.UserVO[]>([]) //
const organizationTree = ref() //
const productList = ref<ProductVO[]>([]) //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
reportId: undefined,
planId: undefined,
productId: undefined,
userId: undefined,
orgId: undefined,
orgType: undefined,
groupType: undefined,
qualityRate: undefined,
wasteReason: undefined,
totalTime: undefined,
packageNumber: undefined,
remark: undefined,
isEnable: undefined,
qualityNumber: undefined,
wasteNumber: undefined,
totalNumber: undefined,
reportDate: undefined,
reportTime: undefined,
reportStatus: undefined,
})
const formRules = reactive({
reportDate: [{ required: true, message: '日期不能为空', trigger: 'blur' }],
groupType: [{ required: true, message: '班别不能为空', trigger: 'blur' }],
productId: [{ required: true, message: '产品不能为空', trigger: 'blur' }],
userId: [{ required: true, message: '工人不能为空', trigger: 'blur' }],
orgId: [{ required: true, message: '工位不能为空', trigger: 'blur' }],
orgType: [{ required: true, message: '工序不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
const isDisable = ref(false)
const isDisableUpdate = ref(false)
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
formData.value.reportDate = getCurrentDate()
formData.value.groupType = 1
//
if (id) {
formLoading.value = true
try {
formData.value = await ProduceReportDetailApi.getProduceReportDetail(id)
} finally {
formLoading.value = false
}
isDisableUpdate.value=true;
isDisable.value = true;
}
await getOrganizationTree()
productList.value = await ProductApi.getItemSimpleList()
if(type == 'replace'){
isDisable.value = false
userList.value = await OrgWorkerApi.getPersonalUser()
}
if(type == 'create'){
userList.value = await OrgWorkerApi.getOtherPersonalUser()
}
//
console.log(userList.value)
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as ProduceReportDetailVO
if (formType.value === 'create') {
await ProduceReportDetailApi.createProduceReportDetail(data)
message.success(t('common.createSuccess'))
} else {
await ProduceReportDetailApi.updateProduceReportDetail(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
reportId: undefined,
planId: undefined,
productId: undefined,
userId: undefined,
orgId: undefined,
qualityRate: 0,
wasteReason: undefined,
totalTime: 0,
packageNumber: 0,
remark: undefined,
isEnable: undefined,
qualityNumber: 0,
wasteNumber: 0,
totalNumber: 0,
reportDate: undefined,
reportTime: 0,
reportStatus: undefined,
}
formRef.value?.resetFields()
}
/** 获得产线工位树 */
const getOrganizationTree = async () => {
organizationTree.value = []
const data = await OrganizationApi.getOrganizationList()
const root: Tree = { id: 0, name: 'ALL', children: [] }
root.children = handleTree(data, 'id', 'parentId')
organizationTree.value.push(root)
}
const getCurrentDate = () =>{
let now = new Date();
let year = now.getFullYear();
let month = now.getMonth() + 1;
if(month<10){month = '0'+month}
let day = now.getDate();
if(day<10)day = '0'+day;
return year + "-" + month + "-" + day +" 00:00:00";
}
const workOrgList = ref<OrganizationVO[]>([]) //
//
const changeDate = async () =>{
if(formData.value.reportDate && formData.value.groupType && formData.value.orgType){
if(formType.value=='replace'){
workOrgList.value = await OrgWorkerApi.getOrgWorkerList2(formData.value)
if(workOrgList.value && workOrgList.value.length>0){
formData.value.orgType = workOrgList.value[0].orgType
formData.value.orgId = workOrgList.value[0].id
}
else{
message.error('未查询到用户的工位安排信息!请联系组长或主管安排工位!')
}
}else{
}
}
}
</script>
Loading…
Cancel
Save