fix produce report

main
chenshuichuan 2 years ago
parent 5c9fa846bb
commit 101f800e1e

@ -4,6 +4,8 @@ import request from '@/config/axios'
export interface OrgWorkerVO {
id: number // id
orgId: number // 工位id
orgType: string
orgName: string
workDate: Date // 工作日期
groupType: number // 班别
workerId: number // 工人id
@ -46,4 +48,21 @@ export const OrgWorkerApi = {
getCreateWorker: async (params: any) => {
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) => {
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 // 报工日期
reportTime: string // 计件时间
reportStatus: number // 报工状态
groupType: number //班别
reportType: string
orgType: string
reportDateString: string
}
// 生产报工明细 API

@ -7,57 +7,144 @@
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="生产计划ID" prop="planId">
<el-input v-model="formData.planId" placeholder="请输入生产计划ID" />
</el-form-item>
<el-form-item label="产品ID" prop="productId">
<el-input v-model="formData.productId" placeholder="请输入产品ID" />
</el-form-item>
<el-form-item label="用户ID" prop="userId">
<el-input v-model="formData.userId" placeholder="请输入用户ID" />
</el-form-item>
<el-form-item label="组织ID" prop="orgId">
<el-input v-model="formData.orgId" placeholder="请输入组织ID" />
<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="YYYY-MM-DD HH:mm:ss"
placeholder="选择日期"
:default-value="new Date()"
@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-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 label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
<el-row>
<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 label="成品数量" prop="qualityNumber">
<el-input v-model="formData.qualityNumber" placeholder="请输入成品数量" />
</el-form-item>
<el-form-item label="废品数量" prop="wasteNumber">
<el-input v-model="formData.wasteNumber" placeholder="请输入废品数量" />
</el-form-item>
<el-form-item label="总数量" prop="totalNumber">
<el-input v-model="formData.totalNumber" placeholder="请输入总数量" />
</el-form-item>
<el-form-item label="成品率" prop="qualityRate">
<el-input v-model="formData.qualityRate" placeholder="请输入成品率" />
</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 v-model="formData.packageNumber" placeholder="请输入打包数量" />
</el-form-item>
<el-form-item label="总时长" prop="totalTime">
<el-input v-model="formData.totalTime" placeholder="请输入总时长" />
<el-input-number v-model="formData.packageNumber" :min="0" placeholder="请输入数量"/>
</el-form-item>
<el-form-item label="计件时间" prop="reportTime">
<el-input v-model="formData.reportTime" placeholder="请输入计件时间" />
</el-form-item>
<el-form-item label="报工状态" prop="reportStatus">
<el-radio-group v-model="formData.reportStatus">
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.MES_RECORD_STATUS)"
:key="dict.value"
:label="dict.value"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
<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>
@ -67,14 +154,24 @@
</Dialog>
</template>
<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 {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' })
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('') //
@ -87,6 +184,8 @@ const formData = ref({
productId: undefined,
userId: undefined,
orgId: undefined,
orgType: undefined,
groupType: undefined,
qualityRate: undefined,
wasteReason: undefined,
totalTime: undefined,
@ -99,21 +198,28 @@ const formData = ref({
reportDate: undefined,
reportTime: undefined,
reportStatus: undefined,
reportDateString: undefined,
})
const formRules = reactive({
planId: [{ required: true, message: '生产计划ID不能为空', trigger: 'blur' }],
productId: [{ required: true, message: '产品ID不能为空', trigger: 'blur' }],
userId: [{ required: true, message: '用户ID不能为空', trigger: 'blur' }],
orgId: [{ required: true, message: '组织ID不能为空', trigger: 'blur' }],
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
formData.value.orgType = 'zhijiang'
//
if (id) {
formLoading.value = true
@ -122,7 +228,27 @@ const open = async (type: string, id?: number) => {
} finally {
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
@ -134,8 +260,9 @@ const submitForm = async () => {
//
formLoading.value = true
try {
formData.value.reportDateString = formData.value.reportDate
const data = formData.value as unknown as ProduceReportDetailVO
if (formType.value === 'create') {
if (formType.value === 'create' || formType.value === 'replace') {
await ProduceReportDetailApi.createProduceReportDetail(data)
message.success(t('common.createSuccess'))
} else {
@ -159,19 +286,55 @@ const resetForm = () => {
productId: undefined,
userId: undefined,
orgId: undefined,
qualityRate: undefined,
qualityRate: 0,
wasteReason: undefined,
totalTime: undefined,
packageNumber: undefined,
totalTime: 0,
packageNumber: 0,
remark: undefined,
isEnable: undefined,
qualityNumber: undefined,
wasteNumber: undefined,
totalNumber: undefined,
qualityNumber: 0,
wasteNumber: 0,
totalNumber: 0,
reportDate: undefined,
reportTime: undefined,
reportTime: 0,
reportStatus: undefined,
}
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>

@ -8,58 +8,59 @@
:inline="true"
label-width="68px"
>
<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-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="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-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>
@ -72,10 +73,10 @@
<Icon icon="ep:plus" class="mr-5px" /> 报工
</el-button>
<el-button
type="primary"
type="warning"
plain
@click="openForm('create')"
v-hasPermi="['mes:produce-report-detail:create']"
@click="openForm('replace')"
v-hasPermi="['mes:produce-report-detail:replace']"
>
<Icon icon="ep:plus" class="mr-5px" /> 代报工
</el-button>
@ -101,9 +102,8 @@
<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="planId" />
<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="qualityNumber" />
<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="reportTime" />
<el-table-column label="计件时" align="center" prop="reportTime" />
<el-table-column label="状态" align="center" prop="reportStatus">
<template #default="scope">
<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 { ProduceReportDetailApi, ProduceReportDetailVO } from '@/api/mes/producereport'
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' })
const message = useMessage() //
const { t } = useI18n() //
const userList = ref<UserApi.UserVO[]>([]) //
const organizationTree = ref() //
const productList = ref<ProductVO[]>([]) //
const loading = ref(true) //
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(() => {
getList()
onMounted(async () => {
await getList()
await getOrganizationTree()
//
userList.value = await UserApi.getSimpleUserList()
//
productList.value = await ProductApi.getMesProductSimpleList()
})
/** tab 切换 */
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