feat:生产订单-任务单明细-新增/编辑-摆放规则、包装方案

main
黄伟杰 2 weeks ago
parent 31eaea90a6
commit a0fbce7b46

@ -39,6 +39,9 @@ export interface TaskDetailVO {
planNumber: number //已经计划的数量 planNumber: number //已经计划的数量
packageSize: number // 打包要求(每包/个) packageSize: number // 打包要求(每包/个)
projectName: string // 项目名称 projectName: string // 项目名称
placementRule: string // 摆放规则
packagingSchemeId: number // 包装方案 ID
packagingSchemeName: string // 包装方案名称
techRequirements: string // 技术要求 techRequirements: string // 技术要求
remark: string // 备注 remark: string // 备注
isEnable: boolean // 是否启用 isEnable: boolean // 是否启用

@ -4482,6 +4482,11 @@ export default {
detailDialogPackageSizePlaceholder: 'Please enter packing requirement', detailDialogPackageSizePlaceholder: 'Please enter packing requirement',
detailDialogPackageNumberLabel: 'Package Quantity', detailDialogPackageNumberLabel: 'Package Quantity',
detailDialogPackageNumberPlaceholder: 'Please enter quantity', detailDialogPackageNumberPlaceholder: 'Please enter quantity',
detailDialogPlacementRuleLabel: 'Placement Rule',
detailDialogPlacementRulePlaceholder: 'Please enter placement rule',
detailDialogPackagingSchemeLabel: 'Packaging Scheme',
detailDialogPackagingSchemeTitle: 'Select Packaging Scheme',
detailDialogPackagingSchemePlaceholder: 'Please select packaging scheme',
detailDialogTechRequirementsLabel: 'Technical Requirement', detailDialogTechRequirementsLabel: 'Technical Requirement',
detailDialogTechRequirementsPlaceholder: 'Please enter technical requirement', detailDialogTechRequirementsPlaceholder: 'Please enter technical requirement',
detailDialogFinishDateLabel: 'Factory Completion', detailDialogFinishDateLabel: 'Factory Completion',

@ -4335,6 +4335,11 @@ export default {
detailDialogPackageSizePlaceholder: '请输入打包要求', detailDialogPackageSizePlaceholder: '请输入打包要求',
detailDialogPackageNumberLabel: '打包数量', detailDialogPackageNumberLabel: '打包数量',
detailDialogPackageNumberPlaceholder: '请输入数量', detailDialogPackageNumberPlaceholder: '请输入数量',
detailDialogPlacementRuleLabel: '摆放规则',
detailDialogPlacementRulePlaceholder: '请输入摆放规则',
detailDialogPackagingSchemeLabel: '包装方案',
detailDialogPackagingSchemeTitle: '选择包装方案',
detailDialogPackagingSchemePlaceholder: '请选择包装方案',
detailDialogTechRequirementsLabel: '技术要求', detailDialogTechRequirementsLabel: '技术要求',
detailDialogTechRequirementsPlaceholder: '请输入技术要求', detailDialogTechRequirementsPlaceholder: '请输入技术要求',
detailDialogFinishDateLabel: '工厂完成', detailDialogFinishDateLabel: '工厂完成',

@ -43,35 +43,27 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row :gutter="20">
<el-col :span="8">
<el-form-item :label="t('ProductionPlan.Task.detailDialogProjectLabel')" prop="projectName">
<el-input v-model="formData.projectName" :placeholder="t('ProductionPlan.Task.detailDialogProjectPlaceholder')" />
</el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item :label="t('ProductionPlan.Task.detailDialogPackageSizeLabel')" prop="packageSize"> <el-form-item :label="t('ProductionPlan.Task.detailDialogPlacementRuleLabel')" prop="placementRule">
<el-input-number <el-input
v-model="formData.packageSize" v-model="formData.placementRule"
:min="0" :placeholder="t('ProductionPlan.Task.detailDialogPlacementRulePlaceholder')"
class="!w-1/1"
:placeholder="t('ProductionPlan.Task.detailDialogPackageSizePlaceholder')"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item :label="t('ProductionPlan.Task.detailDialogPackageNumberLabel')" prop="packageNumber"> <el-form-item :label="t('ProductionPlan.Task.detailDialogPackagingSchemeLabel')" prop="packagingSchemeId">
<el-input-number <el-input
v-model="formData.packageNumber" :model-value="displayPackagingSchemeName"
:min="0" readonly
disabled clearable
class="!w-1/1" :placeholder="t('ProductionPlan.Task.detailDialogPackagingSchemePlaceholder')"
:placeholder="t('ProductionPlan.Task.detailDialogPackageNumberPlaceholder')" @click="openPackagingSchemeDialog"
@clear="handlePackagingSchemeClear"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item :label="t('ProductionPlan.Task.detailFormDeliveryDateLabel')" prop="finishDate"> <el-form-item :label="t('ProductionPlan.Task.detailFormDeliveryDateLabel')" prop="finishDate">
<el-date-picker <el-date-picker
@ -83,26 +75,6 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- <el-col :span="8">
<el-form-item :label="t('ProductionPlan.Task.detailDialogBoxingDateLabel')" prop="boxingDate">
<el-date-picker
v-model="formData.boxingDate"
type="date"
value-format="x"
:placeholder="t('ProductionPlan.Task.detailDialogBoxingDatePlaceholder')"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item :label="t('ProductionPlan.Task.detailDialogArriveDateLabel')" prop="arriveDate">
<el-date-picker
v-model="formData.arriveDate"
type="date"
value-format="x"
:placeholder="t('ProductionPlan.Task.detailDialogArriveDatePlaceholder')"
/>
</el-form-item>
</el-col> -->
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
@ -118,6 +90,85 @@
</el-row> </el-row>
</el-form> </el-form>
<Dialog
:title="t('ProductionPlan.Task.detailDialogPackagingSchemeTitle')"
v-model="packagingSchemeDialogVisible"
:appendToBody="true"
width="1200px"
>
<el-form
ref="packagingSchemeQueryFormRef"
:model="packagingSchemeQueryParams"
:inline="true"
class="-mb-15px"
>
<el-form-item :label="t('ErpStock.PackagingScheme.code')" prop="code">
<el-input
v-model="packagingSchemeQueryParams.code"
:placeholder="t('ErpStock.PackagingScheme.placeholderCode')"
clearable
class="!w-220px"
@keyup.enter="handlePackagingSchemeQuery"
/>
</el-form-item>
<el-form-item :label="t('ErpStock.PackagingScheme.name')" prop="name">
<el-input
v-model="packagingSchemeQueryParams.name"
:placeholder="t('ErpStock.PackagingScheme.placeholderName')"
clearable
class="!w-220px"
@keyup.enter="handlePackagingSchemeQuery"
/>
</el-form-item>
<el-form-item>
<el-button @click="handlePackagingSchemeQuery">
<Icon icon="ep:search" class="mr-5px" /> {{ t('common.query') }}
</el-button>
<el-button @click="resetPackagingSchemeQuery">
<Icon icon="ep:refresh" class="mr-5px" /> {{ t('common.reset') }}
</el-button>
</el-form-item>
</el-form>
<el-table
ref="packagingSchemeTableRef"
v-loading="packagingSchemeLoading"
:data="packagingSchemeList"
:row-key="(row) => row.id"
:stripe="true"
:show-overflow-tooltip="true"
@row-click="handlePackagingSchemeRowClick"
@row-dblclick="confirmPackagingSchemeSelect"
>
<el-table-column width="55" align="center">
<template #default="{ row }">
<el-radio
v-model="packagingSchemeSelectedId"
:label="row.id"
@change="handlePackagingSchemeRadioChange(row)"
>
&nbsp;
</el-radio>
</template>
</el-table-column>
<el-table-column :label="t('ErpStock.PackagingScheme.code')" prop="code" minWidth="160" />
<el-table-column :label="t('ErpStock.PackagingScheme.name')" prop="name" minWidth="160" />
<el-table-column :label="t('ErpStock.PackagingScheme.packageQuantity')" prop="packageQuantity" minWidth="120" />
<el-table-column :label="t('ErpStock.PackagingScheme.palletPackageQuantity')" prop="palletPackageQuantity" minWidth="120" />
<el-table-column :label="t('ErpStock.PackagingScheme.palletTotalQuantity')" prop="palletTotalQuantity" minWidth="120" />
</el-table>
<div class="task-packaging-pagination flex justify-end mt-15px mb-10px">
<Pagination
:total="packagingSchemeTotal"
v-model:page="packagingSchemeQueryParams.pageNo"
v-model:limit="packagingSchemeQueryParams.pageSize"
@pagination="getPackagingSchemeList"
/>
</div>
<template #footer>
<el-button type="primary" @click="confirmPackagingSchemeSelect">{{ t('common.ok') }}</el-button>
<el-button @click="packagingSchemeDialogVisible = false">{{ t('common.cancel') }}</el-button>
</template>
</Dialog>
<template #footer> <template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading">{{ t('ProductionPlan.Task.detailDialogSubmitButtonText') }}</el-button> <el-button @click="submitForm" type="primary" :disabled="formLoading">{{ t('ProductionPlan.Task.detailDialogSubmitButtonText') }}</el-button>
@ -127,18 +178,17 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { TaskApi } from '@/api/mes/task' import { TaskApi } from '@/api/mes/task'
import { ProductUnitApi, ProductUnitVO } from '@/api/erp/product/unit'
import {ProductApi, ProductVO} from "@/api/erp/product/product"; import {ProductApi, ProductVO} from "@/api/erp/product/product";
import { PackagingSchemeApi, PackagingSchemeVO } from '@/api/erp/stock/packagingScheme'
const unitList = ref<ProductUnitVO[]>([]) // const productList = ref<ProductVO[]>([]) // product list
const productList = ref<ProductVO[]>([]) // const { t } = useI18n()
const { t } = useI18n() // const message = useMessage()
const message = useMessage() //
const dialogVisible = ref(false) // const dialogVisible = ref(false)
const dialogTitle = ref('') // const dialogTitle = ref('')
const formLoading = ref(false) // 12 const formLoading = ref(false)
const formType = ref('') // create - update - detail const formType = ref('')
const disabled = computed(() => formType.value === 'detail') const disabled = computed(() => formType.value === 'detail')
const formData = ref({ const formData = ref({
id: undefined, id: undefined,
@ -147,11 +197,11 @@ const formData = ref({
unitName: undefined, unitName: undefined,
taskId: undefined, taskId: undefined,
number: undefined, number: undefined,
packageSize: undefined, placementRule: undefined,
projectName: undefined, packagingSchemeId: undefined,
packagingSchemeName: undefined,
techRequirements: undefined, techRequirements: undefined,
remark: undefined, remark: undefined,
packageNumber: undefined,
finishDate: undefined, finishDate: undefined,
boxingDate: undefined, boxingDate: undefined,
arriveDate: undefined, arriveDate: undefined,
@ -177,19 +227,37 @@ const formRules = reactive({
unitId: [{ required: true, message: t('ProductionPlan.Task.validatorDetailUnitIdRequired'), trigger: 'blur' }], unitId: [{ required: true, message: t('ProductionPlan.Task.validatorDetailUnitIdRequired'), trigger: 'blur' }],
taskId: [{ required: true, message: t('ProductionPlan.Task.validatorDetailTaskIdRequired'), trigger: 'blur' }], taskId: [{ required: true, message: t('ProductionPlan.Task.validatorDetailTaskIdRequired'), trigger: 'blur' }],
number: [{ required: true, message: t('ProductionPlan.Task.validatorDetailNumberRequired'), trigger: 'blur' }], number: [{ required: true, message: t('ProductionPlan.Task.validatorDetailNumberRequired'), trigger: 'blur' }],
packageSize: [],
finishDate: [{ validator: validateFinishDate, trigger: ['change', 'blur'] }] finishDate: [{ validator: validateFinishDate, trigger: ['change', 'blur'] }]
}) })
const formRef = ref() // Ref const formRef = ref() // form Ref
const packagingSchemeDialogVisible = ref(false)
const packagingSchemeLoading = ref(false)
const packagingSchemeList = ref<PackagingSchemeVO[]>([])
const packagingSchemeTotal = ref(0)
const packagingSchemeSelectedId = ref<number>()
const packagingSchemeSelectedRow = ref<PackagingSchemeVO>()
const packagingSchemeTableRef = ref()
const packagingSchemeQueryFormRef = ref()
const packagingSchemeQueryParams = reactive({
pageNo: 1,
pageSize: 10,
code: undefined,
name: undefined,
status: 0
})
const displayPackagingSchemeName = computed(() => {
if (!formData.value.packagingSchemeId) return ''
const selected = packagingSchemeList.value.find((item) => item.id === formData.value.packagingSchemeId)
return selected?.name || formData.value.packagingSchemeName || ''
})
/** 打开弹窗 */
const open = async (type: string, id?: number, taskId: number) => { const open = async (type: string, id?: number, taskId: 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.taskId = taskId formData.value.taskId = taskId
//
if (id) { if (id) {
formLoading.value = true formLoading.value = true
try { try {
@ -201,28 +269,20 @@ const open = async (type: string, id?: number, taskId: number) => {
formLoading.value = false formLoading.value = false
} }
} }
//
//unitList.value = await ProductUnitApi.getProductUnitSimpleList()
// unitList.value= [
// {
// id: 5,
// name: '',
// },
// ]
// formData.value.unitId = 5
productList.value = await ProductApi.getMesProductSimpleList({ categoryType: 1 }) productList.value = await ProductApi.getMesProductSimpleList({ categoryType: 1 })
} }
defineExpose({ open }) // open defineExpose({ open })
/** 提交表单 */ const emit = defineEmits(['success'])
const emit = defineEmits(['success']) // success
const submitForm = async () => { const submitForm = async () => {
//
await formRef.value.validate() await formRef.value.validate()
//
formLoading.value = true formLoading.value = true
try { try {
const data = formData.value const data = { ...formData.value }
delete (data as any).packagingSchemeName
delete (data as any).projectName
delete (data as any).packageSize
delete (data as any).packageNumber
if (formType.value === 'create') { if (formType.value === 'create') {
await TaskApi.createTaskDetail(data) await TaskApi.createTaskDetail(data)
message.success(t('common.createSuccess')) message.success(t('common.createSuccess'))
@ -231,29 +291,12 @@ const submitForm = async () => {
message.success(t('common.updateSuccess')) message.success(t('common.updateSuccess'))
} }
dialogVisible.value = false dialogVisible.value = false
//
emit('success') emit('success')
} finally { } finally {
formLoading.value = false formLoading.value = false
} }
} }
/** 监听数量和每包数量变化,自动计算打包数量 */
watch(
() => [formData.value.number, formData.value.packageSize],
([number, packageSize]) => {
if (!number && number !== 0) {
formData.value.packageNumber = undefined
return
}
if (!packageSize || packageSize === 0) {
formData.value.packageNumber = number
} else {
formData.value.packageNumber = Math.ceil(number / packageSize)
}
}
)
/** 处理产品变更 */ /** 处理产品变更 */
const onChangeProduct = (productId) => { const onChangeProduct = (productId) => {
const product = productList.value.find((item) => item.id === productId) const product = productList.value.find((item) => item.id === productId)
@ -263,6 +306,70 @@ const onChangeProduct = (productId) => {
} }
} }
const getPackagingSchemeList = async () => {
packagingSchemeLoading.value = true
try {
const data = await PackagingSchemeApi.getPackagingSchemePage(packagingSchemeQueryParams)
packagingSchemeList.value = data.list || []
packagingSchemeTotal.value = data.total || 0
} finally {
packagingSchemeLoading.value = false
}
}
const openPackagingSchemeDialog = async () => {
packagingSchemeDialogVisible.value = true
packagingSchemeQueryParams.pageNo = 1
packagingSchemeQueryParams.code = undefined
packagingSchemeQueryParams.name = undefined
packagingSchemeSelectedId.value = formData.value.packagingSchemeId
packagingSchemeSelectedRow.value = undefined
await getPackagingSchemeList()
}
const handlePackagingSchemeQuery = () => {
packagingSchemeQueryParams.pageNo = 1
getPackagingSchemeList()
}
const resetPackagingSchemeQuery = () => {
packagingSchemeQueryFormRef.value?.resetFields()
handlePackagingSchemeQuery()
}
const handlePackagingSchemeRowClick = (row: PackagingSchemeVO) => {
packagingSchemeSelectedId.value = row.id
packagingSchemeSelectedRow.value = row
}
const handlePackagingSchemeRadioChange = (row: PackagingSchemeVO) => {
packagingSchemeSelectedRow.value = row
}
const confirmPackagingSchemeSelect = (row?: PackagingSchemeVO) => {
const scheme = row?.id
? row
: packagingSchemeSelectedRow.value || packagingSchemeList.value.find((item) => item.id === packagingSchemeSelectedId.value)
if (!scheme) {
message.warning(t('ProductionPlan.Task.detailDialogPackagingSchemePlaceholder'))
return
}
formData.value.packagingSchemeId = scheme.id
formData.value.packagingSchemeName = scheme.name
if (!packagingSchemeList.value.some((item) => item.id === scheme.id)) {
packagingSchemeList.value.push(scheme)
}
packagingSchemeDialogVisible.value = false
}
const handlePackagingSchemeClear = () => {
formData.value.packagingSchemeId = undefined
formData.value.packagingSchemeName = undefined
packagingSchemeSelectedId.value = undefined
packagingSchemeSelectedRow.value = undefined
}
/** ???? */
/** 重置表单 */ /** 重置表单 */
const resetForm = () => { const resetForm = () => {
formData.value = { formData.value = {
@ -271,11 +378,21 @@ const resetForm = () => {
unitId: undefined, unitId: undefined,
taskId: undefined, taskId: undefined,
number: undefined, number: undefined,
packageSize: undefined, placementRule: undefined,
projectName: undefined, packagingSchemeId: undefined,
packagingSchemeName: undefined,
techRequirements: undefined, techRequirements: undefined,
remark: undefined remark: undefined,
finishDate: undefined,
boxingDate: undefined,
arriveDate: undefined
} }
formRef.value?.resetFields() formRef.value?.resetFields()
} }
</script> </script>
<style scoped>
.task-packaging-pagination {
padding-bottom: 8px;
}
</style>

@ -148,9 +148,9 @@
<el-button v-if="scope.row.status==1" link type="primary" @click="changeStatus(t('ProductionPlan.Task.actionApproveLabel'),2, scope.row.id)" v-hasPermi="['mes:task:approve']"> <el-button v-if="scope.row.status==1" link type="primary" @click="changeStatus(t('ProductionPlan.Task.actionApproveLabel'),2, scope.row.id)" v-hasPermi="['mes:task:approve']">
{{ t('ProductionPlan.Task.actionApproveLabel') }} {{ t('ProductionPlan.Task.actionApproveLabel') }}
</el-button> </el-button>
<el-button link type="info" @click="openItemNeed(scope.row.code, scope.row.id)" v-hasPermi="['mes:task:update']"> <!-- <el-button link type="info" @click="openItemNeed(scope.row.code, scope.row.id)" v-hasPermi="['mes:task:update']">
{{ t('ProductionPlan.Task.actionMaterialLabel') }} {{ t('ProductionPlan.Task.actionMaterialLabel') }}
</el-button> </el-button> -->
<!-- 下达后不可更改--> <!-- 下达后不可更改-->
<!-- <el-button v-if="scope.row.status<2" link type="success" @click="openSaleForm(scope.row.id)" v-hasPermi="['mes:task:update']"> <!-- <el-button v-if="scope.row.status<2" link type="success" @click="openSaleForm(scope.row.id)" v-hasPermi="['mes:task:update']">
销售单 销售单

@ -17,7 +17,7 @@
</el-table-column> </el-table-column>
<el-table-column :label="t('ProductionPlan.TaskSummary.detailTableOperateColumn')" align="center" width="220px"> <el-table-column :label="t('ProductionPlan.TaskSummary.detailTableOperateColumn')" align="center" width="220px">
<template #default="scope"> <template #default="scope">
<el-button <!-- <el-button
link link
type="info" type="info"
@click="openItemNeed(scope.row.productName, scope.row.productId, @click="openItemNeed(scope.row.productName, scope.row.productId,
@ -25,7 +25,7 @@
v-hasPermi="['mes:task:query']" v-hasPermi="['mes:task:query']"
> >
{{ t('ProductionPlan.TaskSummary.detailActionMaterialLabel') }} {{ t('ProductionPlan.TaskSummary.detailActionMaterialLabel') }}
</el-button> </el-button> -->
<el-button <el-button
link link
type="primary" type="primary"

@ -1,41 +1,36 @@
<template> <template>
<ContentWrap> <ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form <el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="auto"
class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="auto"
label-position="left"> label-position="left">
<el-form-item :label="t('ProductionPlan.TaskSummary.searchCodeLabel')" prop="code"> <el-form-item :label="t('ProductionPlan.TaskSummary.searchCodeLabel')" prop="code">
<el-input <el-input v-model="queryParams.code" :placeholder="t('ProductionPlan.TaskSummary.searchCodePlaceholder')"
v-model="queryParams.code" :placeholder="t('ProductionPlan.TaskSummary.searchCodePlaceholder')"
clearable @keyup.enter="handleQuery" class="!w-240px" /> clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item> </el-form-item>
<el-form-item :label="t('ProductionPlan.TaskSummary.searchOrderLabel')" prop="orderDate"> <el-form-item :label="t('ProductionPlan.TaskSummary.searchOrderLabel')" prop="orderDate">
<el-date-picker <el-date-picker v-model="queryParams.orderDate" @change="handleQuery" value-format="YYYY-MM-DD HH:mm:ss"
v-model="queryParams.orderDate" @change="handleQuery" value-format="YYYY-MM-DD HH:mm:ss"
type="daterange" :start-placeholder="t('ProductionPlan.TaskSummary.searchOrderStartPlaceholder')" type="daterange" :start-placeholder="t('ProductionPlan.TaskSummary.searchOrderStartPlaceholder')"
:end-placeholder="t('ProductionPlan.TaskSummary.searchOrderEndPlaceholder')" :end-placeholder="t('ProductionPlan.TaskSummary.searchOrderEndPlaceholder')"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-240px" /> :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 :label="t('ProductionPlan.TaskSummary.searchDeliveryLabel')" prop="deliveryDate"> <el-form-item :label="t('ProductionPlan.TaskSummary.searchDeliveryLabel')" prop="deliveryDate">
<el-date-picker <el-date-picker v-model="queryParams.deliveryDate" value-format="YYYY-MM-DD HH:mm:ss" @change="handleQuery"
v-model="queryParams.deliveryDate" value-format="YYYY-MM-DD HH:mm:ss" @change="handleQuery"
type="daterange" :start-placeholder="t('ProductionPlan.TaskSummary.searchDeliveryStartPlaceholder')" type="daterange" :start-placeholder="t('ProductionPlan.TaskSummary.searchDeliveryStartPlaceholder')"
:end-placeholder="t('ProductionPlan.TaskSummary.searchDeliveryEndPlaceholder')" :end-placeholder="t('ProductionPlan.TaskSummary.searchDeliveryEndPlaceholder')"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-240px" /> :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 :label="t('ProductionPlan.TaskSummary.searchRemarkLabel')" prop="remark" v-show="showAllFilters"> <el-form-item :label="t('ProductionPlan.TaskSummary.searchRemarkLabel')" prop="remark" v-show="showAllFilters">
<el-input <el-input v-model="queryParams.remark" :placeholder="t('ProductionPlan.TaskSummary.searchRemarkPlaceholder')"
v-model="queryParams.remark" :placeholder="t('ProductionPlan.TaskSummary.searchRemarkPlaceholder')"
clearable @keyup.enter="handleQuery" class="!w-240px" /> clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item> </el-form-item>
<el-form-item :label="t('ProductionPlan.TaskSummary.searchCreateTimeLabel')" prop="createTime" v-show="showAllFilters"> <el-form-item :label="t('ProductionPlan.TaskSummary.searchCreateTimeLabel')" prop="createTime"
<el-date-picker v-show="showAllFilters">
v-model="queryParams.createTime" @change="handleQuery" value-format="YYYY-MM-DD HH:mm:ss" <el-date-picker v-model="queryParams.createTime" @change="handleQuery" value-format="YYYY-MM-DD HH:mm:ss"
type="daterange" :start-placeholder="t('ProductionPlan.TaskSummary.searchCreateTimeStartPlaceholder')" type="daterange" :start-placeholder="t('ProductionPlan.TaskSummary.searchCreateTimeStartPlaceholder')"
:end-placeholder="t('ProductionPlan.TaskSummary.searchCreateTimeEndPlaceholder')" :end-placeholder="t('ProductionPlan.TaskSummary.searchCreateTimeEndPlaceholder')"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-240px" /> :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 v-if="filterCount > 3"> <el-form-item v-if="filterCount > 3">
<el-button type="text" class="text-primary" @click="toggleFilters"> <el-button type="text" class="text-primary" @click="toggleFilters">
<Icon :icon="showAllFilters ? 'ep:arrow-up' : 'ep:arrow-down'" class="mr-5px" /> <Icon :icon="showAllFilters ? 'ep:arrow-up' : 'ep:arrow-down'" class="mr-5px" />
@ -43,7 +38,7 @@ v-model="queryParams.createTime" @change="handleQuery" value-format="YYYY-MM-DD
t('FactoryModeling.FactoryStructure.expandText') }} t('FactoryModeling.FactoryStructure.expandText') }}
</el-button> </el-button>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button @click="handleQuery"> <el-button @click="handleQuery">
<Icon icon="ep:search" class="mr-5px" /> {{ t('ProductionPlan.TaskSummary.buttonSearchText') }} <Icon icon="ep:search" class="mr-5px" /> {{ t('ProductionPlan.TaskSummary.buttonSearchText') }}
@ -72,17 +67,13 @@ v-model="queryParams.createTime" @change="handleQuery" value-format="YYYY-MM-DD
<el-tab-pane :label="t('ProductionPlan.TaskSummary.tabInProductionLabel')" name="9" /> <el-tab-pane :label="t('ProductionPlan.TaskSummary.tabInProductionLabel')" name="9" />
<el-tab-pane :label="t('ProductionPlan.TaskSummary.tabCompletedLabel')" name="10" /> <el-tab-pane :label="t('ProductionPlan.TaskSummary.tabCompletedLabel')" name="10" />
</el-tabs> </el-tabs>
<el-table <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" highlight-current-row
v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" highlight-current-row
@current-change="handleCurrentChange"> @current-change="handleCurrentChange">
<el-table-column <el-table-column :label="t('ProductionPlan.TaskSummary.tableTaskCodeColumn')" align="center" prop="code"
:label="t('ProductionPlan.TaskSummary.tableTaskCodeColumn')" align="center" prop="code"
width="200px" sortable /> width="200px" sortable />
<el-table-column <el-table-column :label="t('ProductionPlan.TaskSummary.tableOrderDateColumn')" align="center" prop="orderDate"
:label="t('ProductionPlan.TaskSummary.tableOrderDateColumn')" align="center" prop="orderDate"
:formatter="dateFormatter2" sortable /> :formatter="dateFormatter2" sortable />
<el-table-column <el-table-column :label="t('ProductionPlan.TaskSummary.tableDeliveryDateColumn')" align="center"
:label="t('ProductionPlan.TaskSummary.tableDeliveryDateColumn')" align="center"
prop="deliveryDate" :formatter="deliveryDateFormatter" sortable /> prop="deliveryDate" :formatter="deliveryDateFormatter" sortable />
<el-table-column :label="t('ProductionPlan.TaskSummary.tableStatusColumn')" align="center" prop="status" sortable> <el-table-column :label="t('ProductionPlan.TaskSummary.tableStatusColumn')" align="center" prop="status" sortable>
<template #default="scope"> <template #default="scope">
@ -94,18 +85,14 @@ v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" hi
<el-tag :type="scope.row.isScheduled ? 'success' : 'info'">{{ scope.row.isScheduled ? '是' : '否' }}</el-tag> <el-tag :type="scope.row.isScheduled ? 'success' : 'info'">{{ scope.row.isScheduled ? '是' : '否' }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('ProductionPlan.TaskSummary.tableProductionProgressColumn')" align="center" min-width="60px"> <el-table-column :label="t('ProductionPlan.TaskSummary.tableProductionProgressColumn')" align="center"
min-width="60px">
<template #default="scope"> <template #default="scope">
<div class="production-progress-cell"> <div class="production-progress-cell">
<el-progress <el-progress type="circle" :percentage="getProductionProgressPercent(scope.row)" :width="40"
type="circle" :stroke-width="4" :show-text="false"
:percentage="getProductionProgressPercent(scope.row)" :color="getProductionProgressPercent(scope.row) === 100 ? '#67c23a' : undefined" />
:width="40" <span class="production-progress-text">{{ getProductionProgressPercent(scope.row) }}%</span>
:stroke-width="4"
:show-text="false"
:color="getProductionProgressPercent(scope.row) === 100 ? '#67c23a' : undefined"
/>
<span class="production-progress-text">{{ getProductionProgressPercent(scope.row) }}%</span>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
@ -113,11 +100,10 @@ v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" hi
<el-table-column :label="t('ProductionPlan.TaskSummary.tableOperateColumn')" align="center" min-width="200px"> <el-table-column :label="t('ProductionPlan.TaskSummary.tableOperateColumn')" align="center" min-width="200px">
<template #default="scope"> <template #default="scope">
<el-button <!-- <el-button link type="info" @click="openItemNeed(scope.row.code, scope.row.id)"
link type="info" @click="openItemNeed(scope.row.code, scope.row.id)"
v-hasPermi="['mes:task:query']"> v-hasPermi="['mes:task:query']">
{{ t('ProductionPlan.TaskSummary.actionMaterialLabel') }} {{ t('ProductionPlan.TaskSummary.actionMaterialLabel') }}
</el-button> </el-button> -->
<el-button link type="primary" @click="openPlan(scope.row.id)" v-hasPermi="['mes:plan:query']"> <el-button link type="primary" @click="openPlan(scope.row.id)" v-hasPermi="['mes:plan:query']">
{{ t('ProductionPlan.TaskSummary.actionViewPlanLabel') }} {{ t('ProductionPlan.TaskSummary.actionViewPlanLabel') }}
</el-button> </el-button>
@ -128,8 +114,7 @@ link type="info" @click="openItemNeed(scope.row.code, scope.row.id)"
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 分页 --> <!-- 分页 -->
<Pagination <Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
:total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
@pagination="getList" /> @pagination="getList" />
</ContentWrap> </ContentWrap>

Loading…
Cancel
Save