add item nedd

main
chenshuichuan 2 years ago
parent 73153ffad9
commit e15cfec38b

@ -11,7 +11,16 @@ export interface TaskVO {
remark: string // 备注
isEnable: boolean // 是否启用
}
// 物料 VO
export interface ItemRequisitionAndStockVO {
itemId: number // ID
itemName: string // 编码
unitId: number // ID
unitName: string // 编码
number: number // ID
stockNumber: number // 编码
stockWorkshopNumber: number // 编码
}
// 生产任务单 API
export const TaskApi = {
// 查询生产任务单分页
@ -92,4 +101,21 @@ export const TaskApi = {
getPlanTaskList: async (i) => {
return await request.get({ url: `/mes/task/getPlanTaskList`})
},
// 获得订单物料需求
getOderItemNeedList: async (orderId) => {
return await request.get({ url: `/mes/task/item-need/order?orderId=` + orderId})
},
// 获得生产任务单物料需求
getTaskItemNeedList: async (taskId) => {
return await request.get({ url: `/mes/task/item-need/task?taskId=` + taskId})
},
// 获得生产任务物料需求
getPlanItemNeedList: async (planId) => {
return await request.get({ url: `/mes/task/item-need/plan?planId=` + planId})
},
// 获得产品物料需求
getProductItemNeedList: async (productId, number) => {
return await request.get({ url: `/mes/task/item-need/product?productId=` + productId +`&number=`+number})
},
}

@ -573,6 +573,27 @@ const remainingRouter: AppRouteRecordRaw[] = [
component: () => import('@/views/crm/product/detail/index.vue')
}
]
},
{
path: '/mymes',
component: Layout,
name: 'mymes',
meta: {
hidden: true
},
children: [
{
path: 'task/plan/:taskId',
name: 'TaskToPlan',
meta: {
title: '生产计划',
noCache: true,
hidden: true,
activeMenu: '/mes/plan'
},
component: () => import('@/views/mes/plan/index.vue')
}
]
}
]

@ -216,7 +216,7 @@
<dict-tag :type="DICT_TYPE.ERP_AUDIT_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" width="220">
<el-table-column label="操作" align="center" fixed="right" min-width="260">
<template #default="scope">
<el-button
link
@ -234,6 +234,13 @@
>
编辑
</el-button>
<el-button
link
@click="openItemNeed(scope.row.no, scope.row.id)"
v-hasPermi="['erp:sale-order:query']"
>
物料
</el-button>
<el-button
link
type="primary"
@ -274,6 +281,8 @@
<!-- 表单弹窗添加/修改 -->
<SaleOrderForm ref="formRef" @success="getList" />
<!-- 物料列表 -->
<ItemNeedIndex ref="itemFormRef" @success="getList" />
</template>
<script setup lang="ts">
@ -287,6 +296,7 @@ import { UserVO } from '@/api/system/user'
import * as UserApi from '@/api/system/user'
import { erpCountTableColumnFormatter, erpPriceTableColumnFormatter } from '@/utils'
import { CustomerApi, CustomerVO } from '@/api/erp/sale/customer'
import ItemNeedIndex from "@/views/mes/bom/ItemNeedIndex.vue";
/** ERP 销售订单列表 */
defineOptions({ name: 'ErpSaleOrder' })
@ -404,4 +414,10 @@ onMounted(async () => {
})
// TODO
// TODO
/** 物料需求 */
const itemFormRef = ref()
const openItemNeed = (orderCode:string, orderId: number) => {
itemFormRef.value.open("order","订单-"+orderCode, orderId)
}
</script>

@ -0,0 +1,73 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="1000px">
<!-- 列表 -->
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="原料" align="center" prop="itemName" />
<el-table-column label="单位" align="center" prop="unitName" />
<el-table-column label="需求量" align="center" prop="number" />
<el-table-column label="库存" align="center" prop="stockNumber" />
<el-table-column label="车间仓库存" align="center" prop="stockWorkshopNumber" />
</el-table>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="loading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import {TaskApi} from "@/api/mes/task";
const props = defineProps<{
orderId?: number
taskId?: number
planId?: number
productId?: number
number?: number
}>()
const loading = ref(false) //
const list = ref([]) //
/**表单 */
defineOptions({ name: 'ItemNeedIndex' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
/** 打开弹窗 */
const open = async (type: string, title: string, id: number, number?:number) => {
dialogVisible.value = true
dialogTitle.value = '物料需求:'+title
loading.value = true
console.log(type, title, id)
try {
if (type === 'order') {
list.value = await TaskApi.getOderItemNeedList(id)
}
else if (type === 'task') {
list.value = await TaskApi.getTaskItemNeedList(id)
}
else if (type === 'plan') {
list.value = await TaskApi.getPlanItemNeedList(id)
}
else if (type === 'product') {
list.value = await TaskApi.getProductItemNeedList(id, number)
}
else message.error("无法识别的物料分析类型!")
} finally {
loading.value = false
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
}
</script>

@ -187,6 +187,14 @@
>
编辑
</el-button>
<el-button
link
type="info"
@click="openItemNeed(scope.row.code, scope.row.id)"
v-hasPermi="['mes:task:query']"
>
物料
</el-button>
<el-button
link
type="primary"
@ -233,6 +241,8 @@
<!-- 表单弹窗添加/修改 -->
<PlanForm ref="formRef" @success="getList" />
<!-- 物料列表 -->
<ItemNeedIndex ref="itemFormRef" @success="getList" />
</template>
<script setup lang="ts">
@ -243,6 +253,7 @@ import { PlanApi, PlanVO } from '@/api/mes/plan'
import PlanForm from './PlanForm.vue'
import {ProductApi, ProductVO} from "@/api/erp/product/product";
import {TaskApi, TaskVO} from "@/api/mes/task";
import ItemNeedIndex from "@/views/mes/bom/ItemNeedIndex.vue";
const productList = ref<ProductVO[]>([]) //
const taskList = ref<TaskVO[]>([]) //
@ -349,5 +360,9 @@ onMounted(async () => {
await getList()
})
/** 物料需求 */
const itemFormRef = ref()
const openItemNeed = (planCode:string, planId: number) => {
itemFormRef.value.open("plan","计划-"+planCode, planId)
}
</script>

@ -28,13 +28,6 @@
/>
<el-table-column label="操作" align="center" width="150px">
<template #default="scope">
<el-button
link
type="success"
v-hasPermi="['mes:task:update']"
>
物料
</el-button>
<el-button
link
type="primary"

@ -136,7 +136,8 @@
</el-button>
<el-button
link
type="success"
type="info"
@click="openItemNeed(scope.row.code, scope.row.id)"
v-hasPermi="['mes:task:update']"
>
物料
@ -190,6 +191,8 @@
</el-tab-pane>
</el-tabs>
</ContentWrap>
<!-- 物料列表 -->
<ItemNeedIndex ref="itemFormRef" @success="getList" />
</template>
<script setup lang="ts">
@ -200,6 +203,7 @@ import { TaskApi, TaskVO } from '@/api/mes/task'
import TaskForm from './TaskForm.vue'
import TaskAddSaleForm from './TaskAddSaleForm.vue'
import TaskDetailList from './components/TaskDetailList.vue'
import ItemNeedIndex from "@/views/mes/bom/ItemNeedIndex.vue";
/** 生产任务单 列表 */
defineOptions({ name: 'Task' })
@ -296,4 +300,10 @@ const handleCurrentChange = (row) => {
onMounted(() => {
getList()
})
/** 物料需求 */
const itemFormRef = ref()
const openItemNeed = (taskCode:string, taskId: number) => {
itemFormRef.value.open("task","任务单-"+taskCode, taskId)
}
</script>

@ -1,210 +0,0 @@
<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="产品" 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="unitId">
<el-select
v-model="formData.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>
<el-form-item label="数量" prop="number">
<el-input-number
v-model="formData.number"
:min="0"
class="!w-1/1"
placeholder="请输入数量"
/>
</el-form-item>
<el-form-item label="每包/个" prop="packageSize">
<el-input-number
v-model="formData.packageSize"
:min="0"
class="!w-1/1"
placeholder="请输入打包要求(每包/个)"
/>
</el-form-item>
<el-form-item label="项目名称" prop="projectName">
<el-input v-model="formData.projectName" placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="技术要求" prop="techRequirements">
<el-input v-model="formData.techRequirements" placeholder="请输入技术要求" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item label="打包数量/包" prop="packageNumber">
<el-input-number
v-model="formData.packageNumber"
:min="0"
class="!w-1/1"
placeholder="请输入数量"
/>
</el-form-item>
<el-form-item label="条码" prop="barCode">
<el-input v-model="formData.barCode" placeholder="请输入条码" />
</el-form-item>
<el-form-item label="附件" prop="attachment">
<UploadFile v-model="formData.attachment" :limit="1"/>
</el-form-item>
<el-form-item label="工厂完成" prop="finishDate">
<el-date-picker
v-model="formData.finishDate"
type="date"
value-format="x"
placeholder="选择工厂完成日期"
/>
</el-form-item>
<el-form-item label="装柜日期" prop="boxingDate">
<el-date-picker
v-model="formData.boxingDate"
type="date"
value-format="x"
placeholder="选择装柜日期"
/>
</el-form-item>
<el-form-item label="到达日期" prop="arriveDate">
<el-date-picker
v-model="formData.arriveDate"
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 { TaskApi } from '@/api/mes/task'
import { ProductUnitApi, ProductUnitVO } from '@/api/erp/product/unit'
import {ProductApi, ProductVO} from "@/api/erp/product/product";
const unitList = ref<ProductUnitVO[]>([]) //
const productList = ref<ProductVO[]>([]) //
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,
productId: undefined,
unitId: undefined,
taskId: undefined,
number: undefined,
packageSize: undefined,
projectName: undefined,
techRequirements: undefined,
remark: undefined,
packageNumber: undefined,
finishDate: undefined,
boxingDate: undefined,
arriveDate: undefined,
})
const formRules = reactive({
productId: [{ required: true, message: '产品ID不能为空', trigger: 'blur' }],
unitId: [{ required: true, message: '单位ID不能为空', trigger: 'blur' }],
taskId: [{ required: true, message: 'task ID不能为空', trigger: 'blur' }],
number: [{ required: true, message: '数量不能为空', trigger: 'blur' }],
packageSize: [{ required: true, message: '打包要求(每包/个)不能为空', trigger: 'blur' }]
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number, taskId: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
formData.value.taskId = taskId
//
if (id) {
formLoading.value = true
try {
formData.value = await TaskApi.getTaskDetail(id)
} finally {
formLoading.value = false
}
}
//
unitList.value = await ProductUnitApi.getProductUnitSimpleList()
productList.value = await ProductApi.getMesProductSimpleList()
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value
if (formType.value === 'create') {
await TaskApi.createTaskDetail(data)
message.success(t('common.createSuccess'))
} else {
await TaskApi.updateTaskDetail(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
productId: undefined,
unitId: undefined,
taskId: undefined,
number: undefined,
packageSize: undefined,
projectName: undefined,
techRequirements: undefined,
remark: undefined
}
formRef.value?.resetFields()
}
</script>

@ -6,8 +6,16 @@
<el-table-column label="产品" align="center" prop="productName" />
<el-table-column label="任务总数" align="center" prop="totalNumber" />
<el-table-column label="已计划数" align="center" prop="planNumber" />
<el-table-column label="操作" align="center" width="180px">
<el-table-column label="操作" align="center" width="220px">
<template #default="scope">
<el-button
link
type="info"
@click="openItemNeed(scope.row.productName, scope.row.productId, scope.row.totalNumber-scope.row.planNumber)"
v-hasPermi="['mes:task:query']"
>
物料
</el-button>
<el-button
link
type="primary"
@ -31,11 +39,13 @@
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<PlanForm ref="formRef" @success="getList" />
<!-- 物料列表 -->
<ItemNeedIndex ref="itemFormRef" @success="getList" />
</template>
<script setup lang="ts">
import { TaskApi } from '@/api/mes/task'
import PlanForm from "@/views/mes/plan/PlanForm.vue";
import ItemNeedIndex from "@/views/mes/bom/ItemNeedIndex.vue";
const { t } = useI18n() //
const message = useMessage() //
@ -95,4 +105,10 @@ const openPlan = (taskId: number, productId: number) => {
push('/mes/plan?taskId=' + taskId + '&productId=' + productId)
}
/** 物料需求 */
const itemFormRef = ref()
const openItemNeed = (productName:string, productId: number, number:number) => {
itemFormRef.value.open("product",productName, productId, number)
}
</script>

@ -124,8 +124,9 @@
<el-button
link
type="success"
v-hasPermi="['mes:task:update']"
type="info"
@click="openItemNeed(scope.row.code, scope.row.id)"
v-hasPermi="['mes:task:query']"
>
物料
</el-button>
@ -158,6 +159,8 @@
</el-tab-pane>
</el-tabs>
</ContentWrap>
<!-- 物料列表 -->
<ItemNeedIndex ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
@ -166,9 +169,11 @@ import { dateFormatter, dateFormatter2 } from '@/utils/formatTime'
import download from '@/utils/download'
import { TaskApi, TaskVO } from '@/api/mes/task'
import TaskDetailList from './components/TaskDetailList.vue'
import PlanForm from "@/views/mes/plan/PlanForm.vue";
import ItemNeedIndex from "@/views/mes/bom/ItemNeedIndex.vue";
/** 生产任务单 列表 */
defineOptions({ name: 'Task' })
defineOptions({ name: 'TaskSummary' })
const message = useMessage() //
const { t } = useI18n() //
@ -255,7 +260,13 @@ onMounted(() => {
/** 跳转生产计划页面**/
const openPlan = (taskId: number) => {
// 使 `query`
//const productId = null;
//push({ name: 'TaskToPlan', params: { taskId, productId} })
push('/mes/plan?taskId=' + taskId)
}
/** 物料需求 */
const formRef = ref()
const openItemNeed = (taskCode:string, taskId: number) => {
formRef.value.open("task","任务单-"+taskCode, taskId)
}
</script>

Loading…
Cancel
Save