♻️ refactor(mes): 优化组件状态管理及注释说明

pull/871/MERGE
YunaiV 2026-04-04 10:54:11 +08:00
parent 7e0c226c24
commit 12566d6860
3 changed files with 36 additions and 38 deletions

View File

@ -117,9 +117,9 @@ const isEditable = computed(
const isConfirmed = computed(() => props.workOrder.status === MesProWorkOrderStatusEnum.CONFIRMED) // const isConfirmed = computed(() => props.workOrder.status === MesProWorkOrderStatusEnum.CONFIRMED) //
// ==================== BOM ==================== // ==================== BOM ====================
const loading = ref(false) const loading = ref(false) //
const bomList = ref<ProWorkOrderBomVO[]>([]) const bomList = ref<ProWorkOrderBomVO[]>([]) //
const bomTotal = ref(0) const bomTotal = ref(0) //
const bomQueryParams = reactive({ const bomQueryParams = reactive({
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
@ -155,12 +155,11 @@ const handleDelete = async (id: number) => {
} }
// ==================== BOM / ==================== // ==================== BOM / ====================
const dialogVisible = ref(false) const dialogVisible = ref(false) //
const dialogTitle = ref('') const formLoading = ref(false) //
const formLoading = ref(false) const bomFormType = ref('create') //
// TODO @AI create | update const dialogTitle = computed(() => bomFormType.value === 'create' ? '添加 BOM 物料' : '编辑 BOM 物料')
const bomFormType = ref<'create' | 'update'>('update') const formRef = ref() // Ref
const formRef = ref()
const formData = ref({ const formData = ref({
id: undefined as number | undefined, id: undefined as number | undefined,
workOrderId: undefined as number | undefined, workOrderId: undefined as number | undefined,
@ -190,17 +189,13 @@ const resetForm = () => {
} }
/** 打开 BOM 弹窗 */ /** 打开 BOM 弹窗 */
// TODO @AI create | update const openForm = (type: string, row?: any) => {
const openForm = (type: 'create' | 'update', row?: any) => {
resetForm() resetForm()
bomFormType.value = type bomFormType.value = type
dialogVisible.value = true dialogVisible.value = true
if (type === 'create') { if (type === 'create') {
// TODO @AIdialogTitle compute
dialogTitle.value = '添加 BOM 物料'
formData.value.workOrderId = props.workOrderId formData.value.workOrderId = props.workOrderId
} else { } else {
dialogTitle.value = '编辑 BOM 物料'
formData.value = { ...row } formData.value = { ...row }
} }
} }

View File

@ -95,7 +95,7 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8" v-if="formData.orderSourceType === MesProWorkOrderSourceTypeEnum.ORDER">
<el-form-item label="客户" prop="clientId"> <el-form-item label="客户" prop="clientId">
<MdClientSelect v-model="formData.clientId" :disabled="isHeaderReadonly" /> <MdClientSelect v-model="formData.clientId" :disabled="isHeaderReadonly" />
</el-form-item> </el-form-item>
@ -211,16 +211,16 @@ import {
defineOptions({ name: 'WorkOrderForm' }) defineOptions({ name: 'WorkOrderForm' })
const emit = defineEmits(['success']) const emit = defineEmits(['success'])
const message = useMessage() const message = useMessage() //
const dialogVisible = ref(false) const dialogVisible = ref(false) //
const formLoading = ref(false) const formLoading = ref(false) //
const formType = ref<string>('create') // create / update / confirm / finish / detail const formType = ref<string>('create') // 表单的类型:create / update / confirm / finish / detail
const isEditable = computed(() => ['create', 'update'].includes(formType.value)) const isEditable = computed(() => ['create', 'update'].includes(formType.value)) //
const isConfirm = computed(() => formType.value === 'confirm') const isConfirm = computed(() => formType.value === 'confirm') //
const isFinish = computed(() => formType.value === 'finish') const isFinish = computed(() => formType.value === 'finish') //
const isDetail = computed(() => ['detail', 'confirm', 'finish'].includes(formType.value)) const isDetail = computed(() => ['detail', 'confirm', 'finish'].includes(formType.value)) //
const isHeaderReadonly = computed(() => ['confirm', 'finish', 'detail'].includes(formType.value)) const isHeaderReadonly = computed(() => ['confirm', 'finish', 'detail'].includes(formType.value)) //
const dialogTitle = computed(() => { const dialogTitle = computed(() => {
if (['create', 'update'].includes(formType.value) && formData.value.parentId) { if (['create', 'update'].includes(formType.value) && formData.value.parentId) {
return formType.value === 'create' ? '新增子工单' : '编辑子工单' return formType.value === 'create' ? '新增子工单' : '编辑子工单'
@ -234,7 +234,7 @@ const dialogTitle = computed(() => {
} }
return titles[formType.value] || formType.value return titles[formType.value] || formType.value
}) })
const activeTab = ref('bom') const activeTab = ref('bom') // Tab
const formData = ref({ const formData = ref({
id: undefined as number | undefined, id: undefined as number | undefined,
parentId: undefined as number | undefined, parentId: undefined as number | undefined,
@ -261,7 +261,7 @@ const formRules = reactive({
quantity: [{ required: true, message: '工单数量不能为空', trigger: 'blur' }], quantity: [{ required: true, message: '工单数量不能为空', trigger: 'blur' }],
requestDate: [{ required: true, message: '需求日期不能为空', trigger: 'change' }] requestDate: [{ required: true, message: '需求日期不能为空', trigger: 'change' }]
}) })
const formRef = ref() const formRef = ref() // Ref
const originalFormData = ref<string>('') // const originalFormData = ref<string>('') //
/** 生成工单编码 */ /** 生成工单编码 */
@ -320,14 +320,14 @@ const handleGenerateWorkOrder = (bomRow: any) => {
message.info('已从 BOM 物料预填子工单,请补充工单编码等信息后保存') message.info('已从 BOM 物料预填子工单,请补充工单编码等信息后保存')
} }
defineExpose({ open })
/** 工单来源变更:非客户订单时清空来源单据编号 */ /** 工单来源变更:非客户订单时清空来源单据编号和客户 */
watch( watch(
() => formData.value.orderSourceType, () => formData.value.orderSourceType,
(val) => { (val) => {
if (val !== MesProWorkOrderSourceTypeEnum.ORDER) { if (val !== MesProWorkOrderSourceTypeEnum.ORDER) {
formData.value.orderSourceCode = undefined formData.value.orderSourceCode = undefined
formData.value.clientId = undefined
} }
} }
) )
@ -375,11 +375,12 @@ const handleConfirm = async () => {
try { try {
await message.confirm('确认要完成工单编制吗?确认后将不能更改。') await message.confirm('确认要完成工单编制吗?确认后将不能更改。')
formLoading.value = true formLoading.value = true
// // 1.
if (isEditable.value && JSON.stringify(formData.value) !== originalFormData.value) { if (isEditable.value && JSON.stringify(formData.value) !== originalFormData.value) {
const data = formData.value as unknown as ProWorkOrderVO const data = formData.value as unknown as ProWorkOrderVO
await ProWorkOrderApi.updateWorkOrder(data) await ProWorkOrderApi.updateWorkOrder(data)
} }
// 2.
await ProWorkOrderApi.confirmWorkOrder(formData.value.id!) await ProWorkOrderApi.confirmWorkOrder(formData.value.id!)
message.success('工单已确认') message.success('工单已确认')
dialogVisible.value = false dialogVisible.value = false
@ -426,4 +427,6 @@ const resetForm = () => {
} }
formRef.value?.resetFields() formRef.value?.resetFields()
} }
defineExpose({ open })
</script> </script>

View File

@ -253,13 +253,13 @@ import {
defineOptions({ name: 'MesProWorkOrder' }) defineOptions({ name: 'MesProWorkOrder' })
const message = useMessage() const message = useMessage() //
const { t } = useI18n() const { t } = useI18n() //
const loading = ref(true) const loading = ref(true) //
const list = ref<ProWorkOrderVO[]>([]) const list = ref<ProWorkOrderVO[]>([]) //
const total = ref(0) const total = ref(0) //
const exportLoading = ref(false) const exportLoading = ref(false) //
const queryParams = reactive({ const queryParams = reactive({
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
@ -271,8 +271,9 @@ const queryParams = reactive({
type: undefined, type: undefined,
requestDate: undefined requestDate: undefined
}) })
const queryFormRef = ref() const queryFormRef = ref() //
const formRef = ref() const formRef = ref() //
const barcodeDetailRef = ref() //
/** 查询列表(分页 + 前端 handleTree 拼接树) */ /** 查询列表(分页 + 前端 handleTree 拼接树) */
const getList = async () => { const getList = async () => {
@ -329,7 +330,6 @@ const handleDelete = async (id: number) => {
} }
/** 查看工单条码 */ /** 查看工单条码 */
const barcodeDetailRef = ref()
const handleBarcode = async (row: ProWorkOrderVO) => { const handleBarcode = async (row: ProWorkOrderVO) => {
await barcodeDetailRef.value.openByBusiness( await barcodeDetailRef.value.openByBusiness(
row.id, row.id,