zs
2025-05-07 58497c4d028c306e98249ccdff2bf86dd3b4ee87
HIAWms/web/src/widgets/WmsTask/Controllers/WmsTaskQueryDrawer.tsx
@@ -1,308 +1,421 @@
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsTaskDrawer } from '../Models/WmsTaskDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
export const useWmsTaskQueryDrawer = (props: any, ctx?: any) => {
  const wmsTaskDrawer = injectModel<WmsTaskDrawer>('WmsTaskDrawer')
  /**
   * 用来对比的初始化数据
   */
  const initiateData: Ref<Record<string, any>> = ref({})
  const formData = ref<Record<string, any>>({})
  // ref
  const formRef = ref()
  const disabled = ref(false)
  const current = computed(() => {
    return props.row || null
  })
  const inputNumber = (attrs) => {
    return (
      <el-input-number
        min="1"
        step="1"
        precision="0"
        {...attrs}
      ></el-input-number>
    )
  }
  const visible = computed({
    get() {
      return props.modelValue
    },
    set(val) {
      ctx.emit('update:modelValue', val)
    },
  })
  /**
   * 添加的form字段
   */
  const formItems = reactive([
                    {
                   label: '巷道',
                   prop: 'aisle',
                   //disabled: disabled,
                   placeholder: '请输入巷道',
                },
                {
                   label: '托盘编号',
                   prop: 'containerNo',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入托盘编号',
                },
                {
                   label: '堆垛机ID',
                   prop: 'dodeviceId',
                   //disabled: disabled,
                   placeholder: '请输入堆垛机ID',
                },
                {
                   label: '设备类型',
                   prop: 'dodevicetype',
                   //disabled: disabled,
                   placeholder: '请输入设备类型',
                },
                {
                   label: '下个任务是否生成成功',
                   prop: 'isNextTask',
                   //disabled: disabled,
                   placeholder: '请输入下个任务是否生成成功',
                },
                {
                   label: 'WCS是否可以读取',
                   prop: 'isRead',
                   el: 'select',
                   //disabled: disabled,
                   placeholder: '请输入WCS是否可以读取',
                },
                {
                   label: '可变变量1',
                   prop: 'mutableParam1',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入可变变量1',
                },
                {
                   label: '可变变量2',
                   prop: 'mutableParam2',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入可变变量2',
                },
                {
                   label: '可变变量3',
                   prop: 'mutableParam3',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入可变变量3',
                },
                {
                   label: '子任务类型',
                   prop: 'sonTaskType',
                   el: 'select',
                   //disabled: disabled,
                   placeholder: '请输入子任务类型',
                },
                {
                   label: '来源单据号',
                   prop: 'sourceOrderNo',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入来源单据号',
                },
                {
                   label: '起始库位',
                   prop: 'sourcePlace',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入起始库位',
                },
                {
                   label: '设备任务状态',
                   prop: 'taskDodeviceStatus',
                   //disabled: disabled,
                   placeholder: '请输入设备任务状态',
                },
                {
                   label: '任务等级',
                   prop: 'taskLevel',
                   //disabled: disabled,
                   placeholder: '请输入任务等级',
                },
                {
                   label: '任务号',
                   prop: 'taskNo',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入任务号',
                },
                {
                   label: '任务状态',
                   prop: 'taskStatus',
                   el: 'select',
                   //disabled: disabled,
                   placeholder: '请输入任务状态',
                },
                {
                   label: '任务类型',
                   prop: 'taskType',
                   el: 'select',
                   //disabled: disabled,
                   placeholder: '请输入任务类型',
                },
                {
                   label: '目标库位',
                   prop: 'toPlace',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入目标库位',
                },
  ])
  /**
   * 校验是否有数据变化
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const commonGetFormData=()=>{
    const data = {
      Aisle: formData.value.Aisle,
ContainerNo: formData.value.ContainerNo,
DodeviceId: formData.value.DodeviceId,
Dodevicetype: formData.value.Dodevicetype,
IsNextTask: formData.value.IsNextTask,
IsRead: formData.value.IsRead,
MutableParam1: formData.value.MutableParam1,
MutableParam2: formData.value.MutableParam2,
MutableParam3: formData.value.MutableParam3,
SonTaskType: formData.value.SonTaskType,
SourceOrderNo: formData.value.SourceOrderNo,
SourcePlace: formData.value.SourcePlace,
TaskDodeviceStatus: formData.value.TaskDodeviceStatus,
TaskLevel: formData.value.TaskLevel,
TaskNo: formData.value.TaskNo,
TaskStatus: formData.value.TaskStatus,
TaskType: formData.value.TaskType,
ToPlace: formData.value.ToPlace,
    }
    return data;
  }
  const onClose = (done: () => void) => {
    if (visible.value) {
      visible.value = false
      const data =commonGetFormData();
      ctx.emit('close', data)
    }
  }
  /**
   * 确认查询
   */
  const onConfirmQuery = async () => {
    const data =commonGetFormData();
    ctx.emit('confirmQuery', data)
  }
  /**
   * 重置查询
   */
  const onReset = async () => {
    formData.value = {}
    formData.value.Aisle = ''
formData.value.ContainerNo = ''
formData.value.DodeviceId = ''
formData.value.Dodevicetype = ''
formData.value.IsNextTask = ''
formData.value.IsRead = ''
formData.value.MutableParam1 = ''
formData.value.MutableParam2 = ''
formData.value.MutableParam3 = ''
formData.value.SonTaskType = ''
formData.value.SourceOrderNo = ''
formData.value.SourcePlace = ''
formData.value.TaskDodeviceStatus = ''
formData.value.TaskLevel = ''
formData.value.TaskNo = ''
formData.value.TaskStatus = ''
formData.value.TaskType = ''
formData.value.ToPlace = ''
    //向父组件发送自定义事件
    ctx.emit('restQuery');
  }
  const updateCheckData = () => {
    initiateData.value = {
      formData: {
        ...formData.value,
      },
    }
  }
  const updateFormItemOptions = (propName: string, enumData: any[]) => {
    const item = formItems.find((item) => item.prop === propName)
    if (item && enumData) {
      item.options = enumData.map((item) => ({
        label: item.description,
        value: item.value,
      }))
    }
  }
  /**
   * 通用查询枚举
   */
  const commonQueryEnumForFrom = async () => {
    const taskTypeEnumEnum = await wmsTaskDrawer.getWmsEnumData({
 EnumName: 'TaskTypeEnum',
})
updateFormItemOptions('taskType', taskTypeEnumEnum)
const wmsTaskStatusEnum = await wmsTaskDrawer.getWmsEnumData({
 EnumName: 'WmsTaskStatus',
})
updateFormItemOptions('taskStatus', wmsTaskStatusEnum)
const sonTaskTypeEnumEnum = await wmsTaskDrawer.getWmsEnumData({
 EnumName: 'SonTaskTypeEnum',
})
updateFormItemOptions('sonTaskType', sonTaskTypeEnumEnum)
  }
  commonQueryEnumForFrom()
  /**
   * 弹窗打开获取详情
   */
  const onOpen = async () => {
    disabled.value = false
    updateCheckData()
  }
  watch(() => current.value, onOpen)
  return {
    formItems,
    formData,
    visible,
    formRef,
    onOpen,
    onClose,
    onConfirmQuery,
    onReset,
  }
}
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsTaskDrawer } from '../Models/WmsTaskDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
export const useWmsTaskQueryDrawer = (props: any, ctx?: any) => {
  const wmsTaskDrawer = injectModel<WmsTaskDrawer>('WmsTaskDrawer')
  /**
   * 用来对比的初始化数据
   */
  const initiateData: Ref<Record<string, any>> = ref({})
  const formData = ref<Record<string, any>>({})
  // ref
  const formRef = ref()
  const disabled = ref(false)
  const current = computed(() => {
    return props.row || null
  })
  const inputNumber = (attrs) => {
    return (
      <el-input-number
        min="1"
        step="1"
        precision="0"
        {...attrs}
      ></el-input-number>
    )
  }
  const datePickerRange = (attrs) => {
    return (
      <el-date-picker
        type="daterange"
        value-format="YYYY-MM-DD HH:mm:ss"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        {...attrs}
      ></el-date-picker>
    )
  }
  const dateTimePickerRange = (attrs) => {
    return (
      <el-date-picker
        type="datetimerange"
        value-format="YYYY-MM-DD HH:mm:ss"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        {...attrs}
      ></el-date-picker>
    )
  }
  const visible = computed({
    get() {
      return props.modelValue
    },
    set(val) {
      ctx.emit('update:modelValue', val)
    },
  })
  /**
   * 添加的form字段
   */
  const formItems = reactive([
    {
      label: '任务号',
      prop: 'taskNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入任务号',
    },
    {
      label: '任务类型',
      prop: 'taskType',
      el: 'select',
      //disabled: disabled,
      placeholder: '请输入任务类型',
    },
    {
      label: '任务等级',
      prop: 'taskLevel',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入任务等级',
    },
    {
      label: '任务状态',
      prop: 'taskStatus',
      el: 'select',
      //disabled: disabled,
      placeholder: '请输入任务状态',
    },
    {
      label: '托盘编号',
      prop: 'containerNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入托盘编号',
    },
    {
      label: '起始库位',
      prop: 'sourcePlace',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入起始库位',
    },
    {
      label: '目标库位',
      prop: 'toPlace',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入目标库位',
    },
    {
      label: '巷道',
      prop: 'aisle',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入巷道',
    },
    {
      label: '堆垛机ID',
      prop: 'dodeviceId',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入堆垛机ID',
    },
    {
      label: '设备类型',
      prop: 'dodevicetype',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入设备类型',
    },
    {
      label: '设备任务状态',
      prop: 'taskDodeviceStatus',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入设备任务状态',
    },
    {
      label: 'WCS是否可以读取',
      prop: 'isRead',
      el: 'select',
      //disabled: disabled,
      placeholder: '请输入WCS是否可以读取',
      options: [
        { label: '是', value: 'true' },
        { label: '否', value: 'false' },
      ],
    },
    {
      label: '子任务类型',
      prop: 'sonTaskType',
      el: 'select',
      //disabled: disabled,
      placeholder: '请输入子任务类型',
    },
    {
      label: '来源单据号',
      prop: 'sourceOrderNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入来源单据号',
    },
    {
      label: '下个任务是否生成成功',
      prop: 'isNextTask',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入下个任务是否生成成功',
    },
    {
      label: '可变变量1',
      prop: 'mutableParam1',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入可变变量1',
    },
    {
      label: '可变变量2',
      prop: 'mutableParam2',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入可变变量2',
    },
    {
      label: '可变变量3',
      prop: 'mutableParam3',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入可变变量3',
    },
    {
      label: '是否禁用',
      prop: 'isDisabled',
      el: 'select',
      //disabled: disabled,
      placeholder: '请输入是否禁用',
      options: [
        { label: '是', value: 'true' },
        { label: '否', value: 'false' },
      ],
    },
    {
      label: '创建时间',
      prop: 'creationTime',
      el: (props: any, { attrs }: SetupContext) => {
        return h(dateTimePickerRange, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      //disabled: disabled,
      placeholder: '请输入',
    },
  ])
  /**
   * 校验是否有数据变化
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const commonGetFormData = () => {
    const data = {
      taskNo: formData.value.taskNo || '',
      taskType: formData.value.taskType || '',
      taskLevel: formData.value.taskLevel || '',
      taskStatus: formData.value.taskStatus || '',
      containerNo: formData.value.containerNo || '',
      sourcePlace: formData.value.sourcePlace || '',
      toPlace: formData.value.toPlace || '',
      aisle: formData.value.aisle || '',
      dodeviceId: formData.value.dodeviceId || '',
      dodevicetype: formData.value.dodevicetype || '',
      taskDodeviceStatus: formData.value.taskDodeviceStatus || '',
      isRead: formData.value.isRead || '',
      sonTaskType: formData.value.sonTaskType || '',
      sourceOrderNo: formData.value.sourceOrderNo || '',
      isNextTask: formData.value.isNextTask || '',
      mutableParam1: formData.value.mutableParam1 || '',
      mutableParam2: formData.value.mutableParam2 || '',
      mutableParam3: formData.value.mutableParam3 || '',
      isDisabled: formData.value.isDisabled || '',
      creationTime: formData.value.creationTime || '',
    }
    return data
  }
  const onClose = (done: () => void) => {
    if (visible.value) {
      visible.value = false
      const data = commonGetFormData()
      ctx.emit('close', data)
    }
  }
  /**
   * 确认查询
   */
  const onConfirmQuery = async () => {
    const data = commonGetFormData()
    ctx.emit('confirmQuery', data)
  }
  /**
   * 重置查询
   */
  const onReset = async () => {
    formData.value = {}
    formData.value.TaskNo = ''
    formData.value.TaskType = ''
    formData.value.TaskLevel = ''
    formData.value.TaskStatus = ''
    formData.value.ContainerNo = ''
    formData.value.SourcePlace = ''
    formData.value.ToPlace = ''
    formData.value.Aisle = ''
    formData.value.DodeviceId = ''
    formData.value.Dodevicetype = ''
    formData.value.TaskDodeviceStatus = ''
    formData.value.IsRead = ''
    formData.value.SonTaskType = ''
    formData.value.SourceOrderNo = ''
    formData.value.IsNextTask = ''
    formData.value.MutableParam1 = ''
    formData.value.MutableParam2 = ''
    formData.value.MutableParam3 = ''
    //向父组件发送自定义事件
    ctx.emit('restQuery')
  }
  const updateCheckData = () => {
    initiateData.value = {
      formData: {
        ...formData.value,
      },
    }
  }
  const updateFormItemOptions = (propName: string, enumData: any[]) => {
    const item = formItems.find((item) => item.prop === propName)
    if (item && enumData) {
      item.options = enumData.map((item) => ({
        label: item.description,
        value: item.value,
      }))
    }
  }
  /**
   * 通用查询枚举
   */
  const commonQueryEnumForFrom = async () => {
    const taskTypeEnumEnum = await wmsTaskDrawer.getWmsEnumData({
      EnumName: 'TaskTypeEnum',
    })
    updateFormItemOptions('taskType', taskTypeEnumEnum)
    const wmsTaskStatusEnum = await wmsTaskDrawer.getWmsEnumData({
      EnumName: 'WmsTaskStatus',
    })
    updateFormItemOptions('taskStatus', wmsTaskStatusEnum)
    const sonTaskTypeEnumEnum = await wmsTaskDrawer.getWmsEnumData({
      EnumName: 'SonTaskTypeEnum',
    })
    updateFormItemOptions('sonTaskType', sonTaskTypeEnumEnum)
  }
  commonQueryEnumForFrom()
  /**
   * 弹窗打开获取详情
   */
  const onOpen = async () => {
    disabled.value = false
    updateCheckData()
  }
  watch(() => current.value, onOpen)
  return {
    formItems,
    formData,
    visible,
    formRef,
    onOpen,
    onClose,
    onConfirmQuery,
    onReset,
  }
}