zs
2025-05-16 7d410c1f0d4e36f8281ce2277f355c9abf1c231b
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Controllers/CallMaterialOrderQueryDrawer.tsx
@@ -1,293 +1,400 @@
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { CallMaterialOrderDrawer } from '../Models/CallMaterialOrderDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
export const useCallMaterialOrderQueryDrawer = (props: any, ctx?: any) => {
  const callMaterialOrderDrawer = injectModel<CallMaterialOrderDrawer>('CallMaterialOrderDrawer')
  /**
   * 用来对比的初始化数据
   */
  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: 'dataIdentifier',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入原料标识',
                },
                {
                   label: '原料型号',
                   prop: 'materialMode',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入原料型号',
                },
                {
                   label: '叫料状态',
                   prop: 'callMaterialStatus',
                   el: 'select',
                   clearable:true,
                   option: [],
                   //disabled: disabled,
                   placeholder: '请输入叫料状态',
                },
                {
                   label: '叫料数量',
                   prop: 'quantity',
                   el: (props: any, { attrs }: SetupContext) => {
                     return h(inputNumber, {
                       ...props,
                       clearable: true,
                       ...attrs,
                     })
                   },
                   width: '100%',
                   step: 1,
                   precision: 0,
                   //disabled: disabled,
                   placeholder: '请输入叫料数量',
                },
                {
                   label: 'WMS返回结果',
                   prop: 'wmsRetResult',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入WMS返回结果',
                },
                {
                   label: 'WMS任务号',
                   prop: 'wmsTaskNo',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入WMS任务号',
                },
                {
                   label: '创建时间',
                   prop: 'creationTime',
                   el: (props: any, { attrs }: SetupContext) => {
                     return h(dateTimePickerRange, {
                       ...props,
                       clearable: true,
                       ...attrs,
                     })
                   },
                   width: '100%',
                   //disabled: disabled,
                   placeholder: '请输入创建时间',
                },
                {
                   label: '修改时间',
                   prop: 'lastModificationTime',
                   el: (props: any, { attrs }: SetupContext) => {
                     return h(dateTimePickerRange, {
                       ...props,
                       clearable: true,
                       ...attrs,
                     })
                   },
                   width: '100%',
                   //disabled: disabled,
                   placeholder: '请输入修改时间',
                },
                {
                   label: '创建人',
                   prop: 'creatorName',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入创建人',
                },
                {
                   label: '修改人',
                   prop: 'lastModifierName',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入修改人',
                },
                {
                   label: '备注',
                   prop: 'remark',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入备注',
                },
  ])
  /**
   * 校验是否有数据变化
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const commonGetFormData=()=>{
    const data = {
      dataIdentifier: formData.value.dataIdentifier || '',
materialMode: formData.value.materialMode || '',
callMaterialStatus: formData.value.callMaterialStatus || '',
quantity: formData.value.quantity || '',
wmsRetResult: formData.value.wmsRetResult || '',
wmsTaskNo: formData.value.wmsTaskNo || '',
creationTime: formData.value.creationTime || '',
lastModificationTime: formData.value.lastModificationTime || '',
creatorName: formData.value.creatorName || '',
lastModifierName: formData.value.lastModifierName || '',
remark: formData.value.remark || '',
    }
    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.dataIdentifier = ''
formData.value.materialMode = ''
formData.value.callMaterialStatus = ''
formData.value.quantity = ''
formData.value.wmsRetResult = ''
formData.value.wmsTaskNo = ''
formData.value.deletionTime = ''
formData.value.operationRemark = ''
formData.value.deleteRemark = ''
formData.value.remark = ''
formData.value.extraField1 = ''
formData.value.extraField2 = ''
formData.value.extraField3 = ''
    //向父组件发送自定义事件
    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 callMaterialStatusEnumEnum = await callMaterialOrderDrawer.getWmsEnumData({
 EnumName: 'CallMaterialStatusEnum',
})
updateFormItemOptions('callMaterialStatus', callMaterialStatusEnumEnum)
  }
  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 { CallMaterialOrderDrawer } from '../Models/CallMaterialOrderDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
// 引入公共选项配置
import {
  FILTER_MODE_OPTIONS_STRING,
  FILTER_MODE_OPTIONS_NUM,
  FILTER_MODE_OPTIONS_BOOL,
} from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions'
import { BOOLEAN_OPTIONS } from '@/utils/commonOptionConstants'
export const useCallMaterialOrderQueryDrawer = (props: any, ctx?: any) => {
  const callMaterialOrderDrawer = injectModel<CallMaterialOrderDrawer>(
    'CallMaterialOrderDrawer'
  )
  /**
   * 用来对比的初始化数据
   */
  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: 'dataIdentifier',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入原料标识',
      highSelectAttrs: {
        prop: 'dataIdentifier_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '原料型号',
      prop: 'materialMode',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入原料型号',
      highSelectAttrs: {
        prop: 'materialMode_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '原料批次',
      prop: 'materialBatch',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入原料批次',
      highSelectAttrs: {
        prop: 'materialBatch_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '叫料状态',
      prop: 'callMaterialStatus',
      el: 'select',
      clearable: true,
      option: [],
      //disabled: disabled,
      placeholder: '请输入叫料状态',
      highSelectAttrs: {
        prop: 'callMaterialStatus_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_BOOL,
      },
    },
    {
      label: '叫料数量',
      prop: 'quantity',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入叫料数量',
      highSelectAttrs: {
        prop: 'quantity_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: 'WMS返回结果',
      prop: 'wmsRetResult',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入WMS返回结果',
      highSelectAttrs: {
        prop: 'wmsRetResult_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: 'WMS任务号',
      prop: 'wmsTaskNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入WMS任务号',
      highSelectAttrs: {
        prop: 'wmsTaskNo_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '创建时间',
      prop: 'creationTime',
      el: (props: any, { attrs }: SetupContext) => {
        return h(dateTimePickerRange, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      //disabled: disabled,
      placeholder: '请输入创建时间',
      isDateControl: true, // 显式标记为日期控件
    },
    {
      label: '修改时间',
      prop: 'lastModificationTime',
      el: (props: any, { attrs }: SetupContext) => {
        return h(dateTimePickerRange, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      //disabled: disabled,
      placeholder: '请输入修改时间',
      isDateControl: true, // 显式标记为日期控件
    },
    {
      label: '创建人',
      prop: 'creatorName',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入创建人',
      highSelectAttrs: {
        prop: 'creatorName_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '修改人',
      prop: 'lastModifierName',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入修改人',
      highSelectAttrs: {
        prop: 'lastModifierName_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '备注',
      prop: 'remark',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入备注',
      highSelectAttrs: {
        prop: 'remark_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
  ])
  /**
   * 校验是否有数据变化
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const commonGetFormData = () => {
    const data = {
      dataIdentifier: formData.value.dataIdentifier || '',
      dataIdentifier_FilterMode: formData.value.dataIdentifier_FilterMode || '',
      materialMode: formData.value.materialMode || '',
      materialMode_FilterMode: formData.value.materialMode_FilterMode || '',
      materialBatch: formData.value.materialBatch || '',
      materialBatch_FilterMode: formData.value.materialBatch_FilterMode || '',
      callMaterialStatus: formData.value.callMaterialStatus || '',
      callMaterialStatus_FilterMode:
        formData.value.callMaterialStatus_FilterMode || '',
      quantity: formData.value.quantity || '',
      quantity_FilterMode: formData.value.quantity_FilterMode || '',
      wmsRetResult: formData.value.wmsRetResult || '',
      wmsRetResult_FilterMode: formData.value.wmsRetResult_FilterMode || '',
      wmsTaskNo: formData.value.wmsTaskNo || '',
      wmsTaskNo_FilterMode: formData.value.wmsTaskNo_FilterMode || '',
      creationTime: formData.value.creationTime || '',
      lastModificationTime: formData.value.lastModificationTime || '',
      creatorName: formData.value.creatorName || '',
      creatorName_FilterMode: formData.value.creatorName_FilterMode || '',
      lastModifierName: formData.value.lastModifierName || '',
      lastModifierName_FilterMode:
        formData.value.lastModifierName_FilterMode || '',
      remark: formData.value.remark || '',
      remark_FilterMode: formData.value.remark_FilterMode || '',
    }
    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)
  }
  /**
   * 重置公共select查询
   */
  const onResetForHighSelect = async () => {
    formData.value.dataIdentifier_FilterMode = 1
    formData.value.materialMode_FilterMode = 1
    formData.value.materialBatch_FilterMode = 1
    formData.value.callMaterialStatus_FilterMode = 2
    formData.value.quantity_FilterMode = 2
    formData.value.wmsRetResult_FilterMode = 1
    formData.value.wmsTaskNo_FilterMode = 1
    formData.value.creatorName_FilterMode = 1
    formData.value.lastModifierName_FilterMode = 1
    formData.value.remark_FilterMode = 1
  }
  /**
   * 重置查询
   */
  const onReset = async () => {
    formData.value = {}
    onResetForHighSelect() //重置公共select查询
    formData.value.dataIdentifier = ''
    formData.value.materialMode = ''
    formData.value.materialBatch = ''
    formData.value.callMaterialStatus = ''
    formData.value.quantity = ''
    formData.value.wmsRetResult = ''
    formData.value.wmsTaskNo = ''
    formData.value.creationTime = ''
    formData.value.lastModificationTime = ''
    formData.value.creatorName = ''
    formData.value.lastModifierName = ''
    formData.value.remark = ''
    //向父组件发送自定义事件
    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 callMaterialStatusEnumEnum =
      await callMaterialOrderDrawer.getWmsEnumData({
        EnumName: 'CallMaterialStatusEnum',
      })
    updateFormItemOptions('callMaterialStatus', callMaterialStatusEnumEnum)
  }
  commonQueryEnumForFrom()
  onResetForHighSelect() //重置公共select查询
  /**
   * 弹窗打开获取详情
   */
  const onOpen = async () => {
    disabled.value = false
    updateCheckData()
  }
  watch(() => current.value, onOpen)
  return {
    formItems,
    formData,
    visible,
    formRef,
    onOpen,
    onClose,
    onConfirmQuery,
    onReset,
  }
}