main
kkk-ops 4 weeks ago
parent a22d95d134
commit 575122a223

@ -0,0 +1,43 @@
import request from '@/config/axios'
// 报工 VO
export interface BaogongRecordVO {
id: number // id
planId: number // 关联计划id
num: number // 派工数量
baogongTime: Date // 派工时间
}
// 报工 API
export const BaogongRecordApi = {
// 查询报工分页
getBaogongRecordPage: async (params: any) => {
return await request.get({ url: `/mes/baogong-record/page`, params })
},
// 查询报工详情
getBaogongRecord: async (id: number) => {
return await request.get({ url: `/mes/baogong-record/get?id=` + id })
},
// 新增报工
createBaogongRecord: async (data: BaogongRecordVO) => {
return await request.post({ url: `/mes/baogong-record/create`, data })
},
// 修改报工
updateBaogongRecord: async (data: BaogongRecordVO) => {
return await request.put({ url: `/mes/baogong-record/update`, data })
},
// 删除报工
deleteBaogongRecord: async (id: number) => {
return await request.delete({ url: `/mes/baogong-record/delete?id=` + id })
},
// 导出报工 Excel
exportBaogongRecord: async (params) => {
return await request.download({ url: `/mes/baogong-record/export-excel`, params })
},
}

@ -51,5 +51,10 @@ export const ItemRequisitionApi = {
// 获得领料明细列表
getItemRequisitionDetailListByItemRequisitionId: async (itemRequisitionId) => {
return await request.get({ url: `/mes/item-requisition/item-requisition-detail/list-by-item-requisition-id?itemRequisitionId=` + itemRequisitionId })
}
},
// 修改领料单状态
changeStatus: async (id) => {
return await request.get({ url: `/mes/item-requisition/changeStatus?&id=`+id})
}
}

@ -0,0 +1,107 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
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="派工数量" prop="num">
<el-input v-model="formData.num" placeholder="请输入派工数量" />
</el-form-item>
<el-form-item label="派工时间" prop="baogongTime">
<el-date-picker
v-model="formData.baogongTime"
type="date"
value-format="x"
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 { BaogongRecordApi, BaogongRecordVO } from '@/api/mes/baogongrecord'
/** 报工 表单 */
defineOptions({ name: 'BaogongRecordForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
planId: undefined,
num: undefined,
baogongTime: undefined,
})
const formRules = reactive({
planId: [{ required: true, message: '关联计划id不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await BaogongRecordApi.getBaogongRecord(id)
} finally {
formLoading.value = false
}
}
}
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 BaogongRecordVO
if (formType.value === 'create') {
await BaogongRecordApi.createBaogongRecord(data)
message.success(t('common.createSuccess'))
} else {
await BaogongRecordApi.updateBaogongRecord(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
planId: undefined,
num: undefined,
baogongTime: undefined,
}
formRef.value?.resetFields()
}
</script>

@ -0,0 +1,80 @@
<template>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="报工数量" prop="num" align="center"/>
<el-table-column
label="报工时间"
align="center"
prop="baogongTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="报工人" prop="creator" align="center"/>
<!-- <el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/> -->
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<BaogongRecordForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import { BaogongRecordApi, BaogongRecordVO } from '@/api/mes/baogongrecord'
/** 报工 列表 */
defineOptions({ name: 'BaogongRecordList' })
const props = defineProps<{
planId?: number // ID
}>()
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref<BaogongRecordVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
planId: props.planId,
num: undefined,
baogongTime: [],
createTime: [],
})
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await BaogongRecordApi.getBaogongRecordPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>

@ -0,0 +1,217 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="关联计划id" prop="planId">
<el-input
v-model="queryParams.planId"
placeholder="请输入关联计划id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="派工数量" prop="num">
<el-input
v-model="queryParams.num"
placeholder="请输入派工数量"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="派工时间" prop="baogongTime">
<el-date-picker
v-model="queryParams.baogongTime"
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-220px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
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-220px"
/>
</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>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['mes:baogong-record:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['mes:baogong-record:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="id" align="center" prop="id" />
<el-table-column label="关联计划id" align="center" prop="planId" />
<el-table-column label="派工数量" align="center" prop="num" />
<el-table-column
label="派工时间"
align="center"
prop="baogongTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" min-width="120px">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['mes:baogong-record:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['mes:baogong-record:delete']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<BaogongRecordForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { BaogongRecordApi, BaogongRecordVO } from '@/api/mes/baogongrecord'
import BaogongRecordForm from './BaogongRecordForm.vue'
/** 报工 列表 */
defineOptions({ name: 'BaogongRecord' })
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref<BaogongRecordVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
planId: undefined,
num: undefined,
baogongTime: [],
createTime: [],
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await BaogongRecordApi.getBaogongRecordPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await BaogongRecordApi.deleteBaogongRecord(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await BaogongRecordApi.exportBaogongRecord(queryParams)
download.excel(data, '报工.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>

@ -73,7 +73,7 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="ID" align="center" prop="id" />
<!-- <el-table-column label="ID" align="center" prop="id" /> -->
<el-table-column label="能耗类型编码" align="center" prop="code" />
<el-table-column label="能耗类型名称" align="center" prop="name" />
<el-table-column label="单位" align="center" prop="unit" />

@ -23,7 +23,7 @@
<el-form-item label="生产计划" prop="planId">
<el-select
v-model="formData.planId"
@change="handleQuery"
@change="handleQuery(formData.planId)"
clearable
filterable
placeholder="请选择"
@ -91,7 +91,71 @@
<!-- 子表的表单 -->
<el-tabs v-model="subTabsName" v-if="formData.feedingType=='org'">
<el-tab-pane label="投料明细" name="feedingRecordDetail">
<FeedingRecordDetailForm ref="feedingRecordDetailFormRef" :record-id="formData.id" />
<!-- <FeedingRecordDetailForm ref="feedingRecordDetailFormRef" :record-id="formData.id" /> -->
<el-form
ref="formRef"
:model="recordData"
v-loading="formLoading"
label-width="0px"
:inline-message="true"
>
<el-table :data="recordData" class="-mt-10px">
<el-table-column label="序号" type="index" width="100" />
<el-table-column label="原料" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.itemId`" class="mb-0px!">
<el-select
v-model="row.itemId"
clearable
filterable
placeholder="请选择原料"
>
<el-option
v-for="item in productList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="单位" min-width="80">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.unitId`" class="mb-0px!">
<el-select
v-model="row.unitId"
clearable
filterable
placeholder="请选择原料"
>
<el-option
v-for="item in unitList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="数量" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.weight`" class="mb-0px!">
<el-input-number v-model="row.weight" :min="0" :precision="2" class="!w-1/1" placeholder=""
/>
</el-form-item>
</template>
</el-table-column>
<!-- <el-table-column align="center" fixed="right" label="操作" width="60">
<template #default="{ $index }">
<el-button @click="handleDelete($index)" link type="danger">
<Icon icon="ep:delete" />
</el-button>
</template>
</el-table-column> -->
</el-table>
</el-form>
</el-tab-pane>
</el-tabs>
<template #footer>
@ -113,7 +177,7 @@ const planList = ref<PlanVO[]>([]) // 列表
/** 投料记录 表单 */
defineOptions({ name: 'FeedingRecordForm' })
import { ItemRequisitionApi } from '@/api/mes/itemrequisition'
const organizationTree = ref() //
const { t } = useI18n() //
const message = useMessage() //
@ -142,6 +206,10 @@ const formRules = reactive({
})
const formRef = ref() // Ref
const list = ref([]) //
const recordData = ref([])
/** 子表的表单 */
const subTabsName = ref('feedingRecordDetail')
const feedingRecordDetailFormRef = ref()
@ -235,4 +303,16 @@ const getOrganizationTree = async () => {
root.children = handleTree(data, 'id', 'parentId')
organizationTree.value.push(root)
}
const data = ref({
requisitionId : undefined
})
const handleQuery = async(planId : number) => {
data.value = await PlanApi.getPlan(planId)
console.log(data.value)
list.value = await ItemRequisitionApi.getItemRequisitionDetailListByItemRequisitionId(data.value.requisitionId)
if (data.value.requisitionId == 233) {
formData.id = 1
}
}
</script>

@ -124,13 +124,16 @@
sortable
/>
<el-table-column label="操作" align="center" fixed="right" width="350">
<el-button
<template #default="scope">
<el-button
link
type="primary"
v-hasPermi="['mes:item-requisition:update']"
@click="changeStatus(scope.row.id)"
>
领料
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
@ -242,9 +245,19 @@ onMounted(() => {
getList()
})
/** tab 切换 */
let activeName = ''
const handleTabClick = (tab: TabsPaneContext) => {
queryParams.status = tab.paneName
handleQuery()
// let activeName = ''
// const handleTabClick = (tab: TabsPaneContext) => {
// queryParams.status = tab.paneName
// handleQuery()
// }
const changeStatus = async (id: number) => {
try {
//
await message.confirm("确定领料吗?")
await ItemRequisitionApi.changeStatus(id)
message.success("领料成功!")
//
await getList()
} catch {}
}
</script>

@ -23,6 +23,7 @@
</template>
<script setup lang="ts">
import { BaogongRecordApi, BaogongRecordVO } from '@/api/mes/baogongrecord'
/** 生产领料 表单 */
defineOptions({ name: 'Baogong' })
@ -35,14 +36,30 @@ const dialogVisible = ref(false) // 弹窗的是否展示
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formData = ref({
id: undefined,
planId: undefined,
num: undefined
num: undefined,
baogongTime: undefined,
})
const formRules = reactive({
num: [{ required: true, message: '数量不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (planCode: string, planId: number) => {
dialogVisible.value = true
dialogTitle.value = "计划报工:"+planCode
resetForm()
formLoading.value = true
try {
formData.value.planId = planId
} finally {
formLoading.value = false
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
@ -53,6 +70,12 @@ const submitForm = async () => {
//
formLoading.value = true
try {
const data = formData.value as unknown as BaogongRecordVO
await BaogongRecordApi.createBaogongRecord(data)
message.success(t('common.createSuccess'))
dialogVisible.value = false
//
emit('success')
message.success("派工成功!")
dialogVisible.value = false
//
@ -62,19 +85,7 @@ const submitForm = async () => {
}
}
/** 打开弹窗 */
const open = async (planCode: string, planId: number) => {
dialogVisible.value = true
dialogTitle.value = "计划报工:"+planCode
resetForm()
formLoading.value = true
try {
formData.value.planId = planId
} finally {
formLoading.value = false
}
}
defineExpose({ open }) // open
/** 重置表单 */
const resetForm = () => {

@ -124,7 +124,7 @@
<!-- 投料进度子表的列表 -->
<el-table-column type="expand">
<template #default="scope">
<el-tabs v-if="scope.row.status > 0 && scope.row.status != 6" model-value="itemRequisitionDetail">
<el-tabs v-if="scope.row.status <= 1 && scope.row.status != 6" model-value="itemRequisitionDetail">
<el-tab-pane label="投料明细" name="itemRequisitionDetail" >
<ItemRequisitionDetailList :item-requisition-id="scope.row.requisitionId" />
</el-tab-pane>
@ -142,6 +142,14 @@
<ZjProductPreList :product-id="scope.row.productId"/>
</el-tab-pane>
</el-tabs>
<el-tabs v-if="scope.row.status >= 2 && scope.row.status != 6" model-value="itemRequisitionDetail">
<el-tab-pane label="投料明细" name="itemRequisitionDetail" >
<ItemRequisitionDetailList :item-requisition-id="scope.row.requisitionId" />
</el-tab-pane>
<el-tab-pane label="报工记录" name="baogongRecord">
<BaogongRecordList :plan-id="scope.row.id"/>
</el-tab-pane>
</el-tabs>
</template>
</el-table-column>
<el-table-column label="计划编码" align="center" prop="code" min-width="180px" />
@ -316,9 +324,10 @@ import {TaskApi, TaskVO} from "@/api/mes/task";
import ItemNeedIndex from "@/views/mes/bom/ItemNeedIndex.vue";
import Paigong from "./components/Paigong.vue";
import TypePaigong from "./components/TypePaigong.vue";
import Baogong from "./components/Baogong.vue";
import ItemRequisitionDetailList from "@/views/mes/itemrequisition/components/ItemRequisitionDetailList.vue";
import ZjProductPreList from "@/views/mes/zjproduct/components/ZjProductPreList.vue";
import BaogongRecordList from "@/views/mes/baogongrecord/components/BaogongRecordList.vue";
const productList = ref<ProductVO[]>([]) //
const taskList = ref<TaskVO[]>([]) //
@ -447,7 +456,7 @@ const openTypePaiForm = (planCode: string, planId: number) => {
typePaiFormRef.value.open(planCode, planId)
}
/** 工序派工 */
/** 工 */
const baogongFormRef = ref()
const openBaogongForm = (planCode: string, planId: number) => {
baogongFormRef.value.open(planCode, planId)

@ -35,15 +35,15 @@
>
物料
</el-button>
<el-button
<!-- <el-button
link
type="warning"
@click="addPlanForm(scope.row.taskId,scope.row.id, scope.row.productId, scope.row.number-scope.row.planNumber)"
v-hasPermi="['mes:plan:create']"
>
新增计划
</el-button>
<el-button
</el-button> -->
<!-- <el-button
v-if="props.taskStatus>1"
link
type="success"
@ -51,7 +51,7 @@
v-hasPermi="['mes:plan:create']"
>
排产
</el-button>
</el-button> -->
<el-button
link
type="primary"

@ -14,7 +14,7 @@
placeholder="请输入编码"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
class="!w-180px"
/>
</el-form-item>
<el-form-item label="下达" prop="orderDate">
@ -26,7 +26,7 @@
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
class="!w-180px"
/>
</el-form-item>
<el-form-item label="交货" prop="deliveryDate">
@ -38,7 +38,7 @@
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
class="!w-180px"
/>
</el-form-item>
@ -48,7 +48,7 @@
placeholder="请输入备注"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
class="!w-180px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">

Loading…
Cancel
Save