diff --git a/src/api/mes/baseMaterialInfo/types.ts b/src/api/mes/baseMaterialInfo/types.ts index 55cfd45..b4bd84d 100644 --- a/src/api/mes/baseMaterialInfo/types.ts +++ b/src/api/mes/baseMaterialInfo/types.ts @@ -530,6 +530,14 @@ export interface BaseMaterialInfoForm extends BaseEntity { */ remark?: string; + minParkingDays?: number; + minParkingHours?: number; + minParkingMinutes?: number; + + maxParkingDays?: number; + maxParkingHours?: number; + maxParkingMinutes?: number; + } export interface BaseMaterialInfoQuery extends PageQuery { diff --git a/src/views/mes/baseMaterialInfo/index.vue b/src/views/mes/baseMaterialInfo/index.vue index c289328..557829d 100644 --- a/src/views/mes/baseMaterialInfo/index.vue +++ b/src/views/mes/baseMaterialInfo/index.vue @@ -338,8 +338,19 @@ - - + + + + + + + + + @@ -618,10 +629,28 @@ - + + +  天  + +  小时  + +  分钟  - + + +  天  + +  小时  + +  分钟  @@ -811,6 +840,13 @@ const initFormData: BaseMaterialInfoForm = { innerTubeFlag: undefined, saleType: undefined, remark: undefined, + minParkingDays:0, + minParkingHours:0, + minParkingMinutes:0, + maxParkingDays:0, + maxParkingHours:0, + maxParkingMinutes:0, + } const data = reactive>({ form: {...initFormData}, @@ -955,6 +991,7 @@ const handleUpdate = async (row?: BaseMaterialInfoVO) => { const _materialId = row?.materialId || ids.value[0] const res = await getBaseMaterialInfo(_materialId); Object.assign(form.value, res.data); + convertToTime(); dialog.visible = true; dialog.title = "修改物料信息"; } @@ -964,6 +1001,7 @@ const submitForm = () => { baseMaterialInfoFormRef.value?.validate(async (valid: boolean) => { if (valid) { buttonLoading.value = true; + convertToSeconds(); if (form.value.materialId) { await updateBaseMaterialInfo(form.value).finally(() => buttonLoading.value = false); } else { @@ -1016,6 +1054,7 @@ const getMaterialType = async () => { materialTypeList.value = res.data; } + //左侧物料类型树 let InfoOptions = ref([]); const getInfoOptions = async () => { @@ -1029,24 +1068,91 @@ const handleTreeNodeClick = async (data: any) => { handleQuery(); } +/** + * 过滤节点函数 + * 用于筛选或显示数据节点,基于提供的值和数据对象 + * + * @param {string} value - 用户输入的过滤值如果为空,则显示所有节点 + * @param {any} data - 当前数据节点对象,包含需要过滤的属性 + * @returns {boolean} - 返回一个布尔值,决定节点是否应该显示 + */ const filterNode = (value: string, data: any) => { + // 当没有输入值时,显示所有节点 if (!value) return true; + // 检查数据节点的类型名称是否包含输入值,不区分大小写 return data.matrialTypeName.toLowerCase().includes(value.toLowerCase()); } + +/** + * 树形组件过滤功能相关逻辑 + * + * @var filterBoxName 用于绑定过滤关键词的响应式字符串,控制树节点过滤条件 + * @var props 树形组件配置对象,包含字段映射配置: + * @property {string} children 子节点字段名(默认:'children') + * @property {string} label 节点显示文本字段名(默认:'matrialTypeName') + * @property {string} value 节点值字段名(默认:'matrialTypeId') + */ const filterBoxName = ref(''); const props = reactive({ children: 'children', label: 'matrialTypeName', value: 'matrialTypeId' }); + +/** + * 树形组件实例引用,用于调用组件方法 + */ const tree = ref(); + +/** + * 监听过滤关键词变化,实时执行树节点过滤 + * @param newVal 新的过滤关键词,将传递给树组件的filter方法 + */ watch(filterBoxName, (newVal) => { if (tree.value) { tree.value.filter(newVal); } }); + +/** 天小时分钟转换为秒 */ +const convertToSeconds = () => { + const maxDaysInSeconds = form.value.maxParkingDays * 24 * 60 * 60; + const maxHoursInSeconds = form.value.maxParkingHours * 60 * 60; + const maxMinutesInSeconds = form.value.maxParkingMinutes * 60; + form.value.maxParkingTime = maxDaysInSeconds + maxHoursInSeconds + maxMinutesInSeconds; + + const minDaysInSeconds = form.value.minParkingDays * 24 * 60 * 60; + const minHoursInSeconds = form.value.minParkingHours * 60 * 60; + const minMinutesInSeconds = form.value.minParkingMinutes * 60; + form.value.minParkingTime = minDaysInSeconds + minHoursInSeconds + minMinutesInSeconds; + +} + +/** 秒转换为天小时分钟 */ +const convertToTime = () => { + const maxTotalSeconds = form.value.maxParkingTime; + const maxDays = Math.floor(totalSeconds / (24 * 60 * 60)); + const maxHours = Math.floor((totalSeconds % (24 * 60 * 60)) / 3600); + const maxMinutes = Math.floor((totalSeconds % 3600) / 60); + // 更新到表单中 + form.value.maxParkingDays = maxDays; + form.value.maxParkingHours = maxHours; + form.value.maxParkingMinutes = maxMinutes; + + + const minTotalSeconds = form.value.minParkingTime; + const minDays = Math.floor(totalSeconds / (24 * 60 * 60)); + const minHours = Math.floor((totalSeconds % (24 * 60 * 60)) / 3600); + const minMinutes = Math.floor((totalSeconds % 3600) / 60); + form.value.minParkingDays = minDays; + form.value.minParkingHours = minHours; + form.value.minParkingMinutes = minMinutes; +} + + + onMounted(() => { getInfoOptions(); getList();