diff --git a/src/api/erp/product/product/index.ts b/src/api/erp/product/product/index.ts index e922d3d1..7270a803 100644 --- a/src/api/erp/product/product/index.ts +++ b/src/api/erp/product/product/index.ts @@ -20,6 +20,12 @@ export interface ProductVO { purchasePrice: number // 采购价格,单位:元 salePrice: number // 销售价格,单位:元 minPrice: number // 最低价格,单位:元 + deviceIds?: string // 关联设备ID列表 + moldIds?: string // 关联模具ID列表 + devices?: { id: number; name: string }[] // 关联设备列表 + molds?: { id: number; name: string }[] // 关联模具列表 + deviceList?: any[] + moldList?: any[] } // ERP 产品 API diff --git a/src/api/mes/task/index.ts b/src/api/mes/task/index.ts index 42eef4f8..3fd1b704 100644 --- a/src/api/mes/task/index.ts +++ b/src/api/mes/task/index.ts @@ -6,6 +6,7 @@ export interface TaskVO { code: string // 编码 orderDate: Date // 下达日期 deliveryDate: Date // 交货日期 + isUrgent: string // 是否急单0-否 1-是 status: number // 状态 processInstanceId: string // 流程实例的编号 remark: string // 备注 diff --git a/src/components/TableSelectDialog/TableSelectDialog.vue b/src/components/TableSelectDialog/TableSelectDialog.vue new file mode 100644 index 00000000..4e278809 --- /dev/null +++ b/src/components/TableSelectDialog/TableSelectDialog.vue @@ -0,0 +1,146 @@ + + + diff --git a/src/locales/en.ts b/src/locales/en.ts index a5e231c8..2a82872d 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -3215,6 +3215,7 @@ export default { tableOrderDateColumn: 'Order Date', tableDeliveryDateColumn: 'Delivery Date', tableTaskTypeColumn: 'Type', + tableIsUrgentColumn: 'Urgent', tableStatusColumn: 'Status', tableRemarkColumn: 'Remark', tableOperateColumn: 'Operate', @@ -3234,6 +3235,9 @@ export default { dialogDeliveryDatePlaceholder: 'Select delivery date', dialogTaskTypeLabel: 'Task Type', dialogTaskTypeTooltip: 'Source: Data Dictionary - Task Type', + dialogIsUrgentLabel: 'Urgent', + urgentNoLabel: 'No', + urgentYesLabel: 'Yes', dialogRemarkLabel: 'Remark', dialogRemarkPlaceholder: 'Please enter remark', dialogSubmitButtonText: 'Confirm', @@ -3241,6 +3245,7 @@ export default { validatorDeliveryDateRequired: 'Delivery date cannot be empty', validatorTaskTypeRequired: 'Task type cannot be empty', + validatorIsUrgentRequired: 'Urgent flag cannot be empty', saleDialogCodeLabel: 'Code', saleDialogCodePlaceholder: 'Please enter task code', @@ -3385,6 +3390,7 @@ export default { tableOrderDateColumn: 'Order Date', tableDeliveryDateColumn: 'Delivery Date', tableStatusColumn: 'Status', + tableScheduleCompletedColumn: 'Schedule Completed', tableRemarkColumn: 'Remark', tableOperateColumn: 'Operate', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 547ebe42..622deb0f 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -3055,6 +3055,7 @@ export default { tableOrderDateColumn: '下达日期', tableDeliveryDateColumn: '交货日期', tableTaskTypeColumn: '类型', + tableIsUrgentColumn: '是否急单', tableStatusColumn: '状态', tableRemarkColumn: '备注', tableOperateColumn: '操作', @@ -3074,6 +3075,9 @@ export default { dialogDeliveryDatePlaceholder: '选择交货日期', dialogTaskTypeLabel: '任务类型', dialogTaskTypeTooltip: '来源:数据字典-任务单类型', + dialogIsUrgentLabel: '是否急单', + urgentNoLabel: '否', + urgentYesLabel: '是', dialogRemarkLabel: '备注', dialogRemarkPlaceholder: '请输入备注', dialogSubmitButtonText: '确 定', @@ -3081,6 +3085,7 @@ export default { validatorDeliveryDateRequired: '交货日期不能为空', validatorTaskTypeRequired: '任务类型不能为空', + validatorIsUrgentRequired: '是否急单不能为空', saleDialogCodeLabel: '编码', saleDialogCodePlaceholder: '请输入任务单编码', @@ -3223,6 +3228,7 @@ export default { tableOrderDateColumn: '下达日期', tableDeliveryDateColumn: '交货日期', tableStatusColumn: '状态', + tableScheduleCompletedColumn: '是否完成排产', tableRemarkColumn: '备注', tableOperateColumn: '操作', diff --git a/src/views/erp/product/product/ProductForm.vue b/src/views/erp/product/product/ProductForm.vue index 51c85318..77918894 100644 --- a/src/views/erp/product/product/ProductForm.vue +++ b/src/views/erp/product/product/ProductForm.vue @@ -133,6 +133,26 @@ + + + + + + + + + + {{ t('common.cancel') }} + + diff --git a/src/views/iot/device/index.vue b/src/views/iot/device/index.vue index 221e45c9..2aad141e 100644 --- a/src/views/iot/device/index.vue +++ b/src/views/iot/device/index.vue @@ -333,7 +333,10 @@ -
+
+ + 新增产量 + {{ t('DataCollection.DeviceModel.ruleCreateButton') }} @@ -364,7 +367,7 @@ {{ t('DataCollection.DeviceModel.ruleEditRuleButton') }}
- + - +
-
- - - - - - -
+ @@ -537,7 +545,7 @@ - + @@ -551,7 +559,7 @@ - + { const id = (ruleForm.identifier || '').toString().toUpperCase() @@ -1114,6 +1128,13 @@ const isRuleDisabled = (value: string, selfRule?: string | number) => { } const ruleOperatorOptions = computed(() => getStrDictOptions('czsb_rules_conditions')) +const isCountIdentifier = computed(() => { + return (ruleForm.identifier || '').toString().toUpperCase() === 'COUNT' +}) +const currentRuleOperatorOptions = computed(() => { + if (isCountIdentifier.value) return countOperatorOptions + return ruleOperatorOptions.value +}) const isRunningIdentifier = computed(() => { return (ruleForm.identifier || '').toString().toUpperCase() === 'RUNNING' @@ -1224,8 +1245,10 @@ const handleRuleSubmit = async () => { fieldRule: ruleForm.fieldRule, defaultValue: ruleForm.defaultValue, deviceId: ruleForm.deviceId ?? attributeDeviceId.value, - alarmLevel: ruleForm.alarmLevel, pointRulesVOList, + } as any + if (!isCountIdentifier.value) { + payload.alarmLevel = ruleForm.alarmLevel } await request.put({ url: '/iot/device-point-rules/update', data: payload }) @@ -1282,6 +1305,13 @@ const createRuleForm = reactive({ defaultValue: '报警', alarmLevel: '', }) +const isCreateCountRule = computed(() => { + return createRuleForm.identifier.toString().toUpperCase() === 'COUNT' +}) +const createRuleDialogTitle = computed(() => { + if (isCreateCountRule.value) return '新增产量' + return t('DataCollection.DeviceModel.ruleCreateButton') +}) const openCreateRuleForm = () => { if (!attributeDeviceId.value) { @@ -1294,6 +1324,17 @@ const openCreateRuleForm = () => { createRuleForm.alarmLevel = '' createRuleDialogVisible.value = true } +const openCreateCountRuleForm = () => { + if (!attributeDeviceId.value) { + message.error('请先选择设备') + return + } + createRuleForm.identifier = 'COUNT' + createRuleForm.fieldName = '产能' + createRuleForm.defaultValue = '产能' + createRuleForm.alarmLevel = '' + createRuleDialogVisible.value = true +} const handleCreateRuleSubmit = async () => { if (!attributeDeviceId.value) return @@ -1307,8 +1348,10 @@ const handleCreateRuleSubmit = async () => { identifier: createRuleForm.identifier, fieldName: createRuleForm.fieldName, defaultValue: createRuleForm.defaultValue, - alarmLevel: createRuleForm.alarmLevel, deviceId: attributeDeviceId.value, + } as any + if (!isCreateCountRule.value) { + payload.alarmLevel = createRuleForm.alarmLevel } await request.post({ url: '/iot/device-point-rules/create', data: payload }) message.success('新增成功') diff --git a/src/views/mes/bom/BomForm.vue b/src/views/mes/bom/BomForm.vue index f753bb2a..4b1bccc3 100644 --- a/src/views/mes/bom/BomForm.vue +++ b/src/views/mes/bom/BomForm.vue @@ -184,7 +184,7 @@ const resetForm = () => { code: undefined, version: '1.0', productId: undefined, - unitId: 5, + unitId: undefined, yieldRate: 100, remark: undefined, isEnable: true diff --git a/src/views/mes/task/TaskForm.vue b/src/views/mes/task/TaskForm.vue index 16349481..8eafd6e8 100644 --- a/src/views/mes/task/TaskForm.vue +++ b/src/views/mes/task/TaskForm.vue @@ -62,6 +62,12 @@ + + + {{ t('ProductionPlan.Task.urgentNoLabel') }} + {{ t('ProductionPlan.Task.urgentYesLabel') }} + + @@ -95,6 +101,7 @@ const formData = ref({ deliveryDate: undefined, status: undefined, taskType: undefined, + isUrgent: undefined, processInstanceId: undefined, remark: undefined, isEnable: undefined, @@ -103,6 +110,7 @@ const formData = ref({ const formRules = reactive({ deliveryDate: [{ required: true, message: t('ProductionPlan.Task.validatorDeliveryDateRequired'), trigger: 'blur' }], taskType: [{ required: true, message: t('ProductionPlan.Task.validatorTaskTypeRequired'), trigger: 'blur' }], + isUrgent: [{ required: true, message: t('ProductionPlan.Task.validatorIsUrgentRequired'), trigger: 'change' }] }) const formRef = ref() // 表单 Ref @@ -116,7 +124,11 @@ const open = async (type: string, id?: number) => { if (id) { formLoading.value = true try { - formData.value = await TaskApi.getTask(id) + const taskData = await TaskApi.getTask(id) + formData.value = { + ...taskData, + isUrgent: String(taskData?.isUrgent ?? '0') + } } finally { formLoading.value = false } @@ -155,6 +167,7 @@ const resetForm = () => { code: undefined, orderDate: undefined, taskType: '订单任务', + isUrgent: '0', deliveryDate: undefined, status: undefined, processInstanceId: undefined, diff --git a/src/views/mes/task/index.vue b/src/views/mes/task/index.vue index 937cea2a..96913633 100644 --- a/src/views/mes/task/index.vue +++ b/src/views/mes/task/index.vue @@ -115,6 +115,13 @@ + + + @@ -64,6 +64,7 @@ const { push } = useRouter() const props = defineProps<{ taskId?: number // task ID(主表的关联字段) }>() +const emit = defineEmits(['success']) const loading = ref(false) // 列表的加载中 const list = ref([]) // 列表的数据 const queryParams = reactive({ @@ -111,6 +112,10 @@ const addPlanForm = (taskId: number, productId: number, number?: number, taskDet } formRef.value.open('create', undefined, taskId, productId, number,taskDetailIds) } +const handlePlanSuccess = () => { + getList() + emit('success') +} const route = useRoute() /** 跳转生产计划页面**/ const openPlan = (taskId: number, productId: number) => { diff --git a/src/views/mes/tasksummary/index.vue b/src/views/mes/tasksummary/index.vue index 2873c51f..0c1440a0 100644 --- a/src/views/mes/tasksummary/index.vue +++ b/src/views/mes/tasksummary/index.vue @@ -1,79 +1,43 @@