zs
2025-05-07 4456f43c6c73185a9f7ce46cdcdf94ab2053f02e
HIAWms/web/src/widgets/WmsInOutStockRecord/Controllers/WmsInOutStockRecordQueryDrawer.tsx
@@ -1,281 +1,308 @@
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsInOutStockRecordDrawer } from '../Models/WmsInOutStockRecordDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
export const useWmsInOutStockRecordQueryDrawer = (props: any, ctx?: any) => {
  const wmsInOutStockRecordDrawer = injectModel<WmsInOutStockRecordDrawer>(
    'WmsInOutStockRecordDrawer'
  )
  /**
   * 用来对比的初始化数据
   */
  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: 'orderNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入单据编号',
    },
    {
      label: '物料名称',
      prop: 'materialName',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入物料名称',
    },
    {
      label: '物料件号',
      prop: 'materialNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入物料件号',
    },
    {
      label: '操作类型',
      prop: 'stockType',
      el: 'select',
      //disabled: disabled,
      placeholder: '请输入操作类型',
    },
    {
      label: '容器编号',
      prop: 'containerNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入容器编号',
    },
    {
      label: '机型',
      prop: 'materialModel',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入机型',
    },
    {
      label: '操作时间',
      prop: 'operateTime',
      type: 'datetimerange',
      el: 'date-picker',
      //disabled: disabled,
      placeholder: '请输入操作时间',
    },
    {
      label: '备注',
      prop: 'remark',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入备注',
    },
    {
      label: '物料ID',
      prop: 'materialId',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入物料ID',
    },
    {
      label: '任务号',
      prop: 'taskNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入任务号',
    },
    {
      label: '起始库位',
      prop: 'sourcePlace',
      el: 'input',
      //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 = {
      OrderNo: formData.value.OrderNo,
      MaterialName: formData.value.MaterialName,
      MaterialNo: formData.value.MaterialNo,
      StockType: formData.value.StockType,
      ContainerNo: formData.value.ContainerNo,
      MaterialModel: formData.value.MaterialModel,
      OperateTime: formData.value.OperateTime,
      Remark: formData.value.Remark,
      MaterialId: formData.value.MaterialId,
      TaskNo: formData.value.TaskNo,
      SourcePlace: formData.value.SourcePlace,
      ToPlace: formData.value.ToPlace,
      materialCode: formData.value.materialCode,
      materialName: formData.value.materialName,
      purchaseType: formData.value.purchaseType,
      materialType: formData.value.materialType,
      primaryUnit: formData.value.primaryUnit,
      standard: formData.value.standard,
      outerDiameter: formData.value.outerDiameter,
      wallThickness: formData.value.wallThickness,
      materialQuality: formData.value.materialQuality,
      length: formData.value.length,
      isMainBranch: formData.value.isMainBranch,
      factory: formData.value.factory,
      certification: formData.value.certification,
      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.OrderNo = ''
    formData.value.MaterialName = ''
    formData.value.MaterialNo = ''
    formData.value.StockType = ''
    formData.value.ContainerNo = ''
    formData.value.MaterialModel = ''
    formData.value.OperateTime = ''
    formData.value.Remark = ''
    formData.value.MaterialId = ''
    formData.value.TaskNo = ''
    formData.value.SourcePlace = ''
    formData.value.ToPlace = ''
    formData.value.materialCode = ''
    formData.value.materialName = ''
    formData.value.purchaseType = ''
    formData.value.materialType = ''
    formData.value.primaryUnit = ''
    formData.value.standard = ''
    formData.value.outerDiameter = ''
    formData.value.wallThickness = ''
    formData.value.materialQuality = ''
    formData.value.length = ''
    formData.value.isMainBranch = ''
    formData.value.factory = ''
    formData.value.certification = ''
    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 stockTypeEnumEnum = await wmsInOutStockRecordDrawer.getWmsEnumData({
      EnumName: 'StockTypeEnum',
    })
    updateFormItemOptions('stockType', stockTypeEnumEnum)
  }
  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 { WmsInOutStockRecordDrawer } from '../Models/WmsInOutStockRecordDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
export const useWmsInOutStockRecordQueryDrawer = (props: any, ctx?: any) => {
  const wmsInOutStockRecordDrawer = injectModel<WmsInOutStockRecordDrawer>('WmsInOutStockRecordDrawer')
  /**
   * 用来对比的初始化数据
   */
  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: 'orderNo',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入单据编号',
                },
                {
                   label: '物料名称',
                   prop: 'materialName',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入物料名称',
                },
                {
                   label: '物料件号',
                   prop: 'materialNo',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入物料件号',
                },
                {
                   label: '操作类型',
                   prop: 'stockType',
                   el: 'select',
                   //disabled: disabled,
                   placeholder: '请输入操作类型',
                },
                {
                   label: '容器编号',
                   prop: 'containerNo',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入容器编号',
                },
                {
                   label: '机型',
                   prop: 'materialModel',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入机型',
                },
                {
                   label: '操作时间',
                   prop: 'operateTime',
                   el: (props: any, { attrs }: SetupContext) => {
                     return h(dateTimePickerRange, {
                       ...props,
                       clearable: true,
                       ...attrs,
                     })
                   },
                   width: '100%',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入操作时间',
                },
                {
                   label: '备注',
                   prop: 'remark',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入备注',
                },
                {
                   label: '物料ID',
                   prop: 'materialId',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入物料ID',
                },
                {
                   label: '任务号',
                   prop: 'taskNo',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入任务号',
                },
                {
                   label: '起始库位',
                   prop: 'sourcePlace',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入起始库位',
                },
                {
                   label: '目标库位',
                   prop: 'toPlace',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入目标库位',
                },
                {
                   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%',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入',
                },
  ])
  /**
   * 校验是否有数据变化
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const commonGetFormData=()=>{
    const data = {
      orderNo: formData.value.orderNo || '',
materialName: formData.value.materialName || '',
materialNo: formData.value.materialNo || '',
stockType: formData.value.stockType || '',
containerNo: formData.value.containerNo || '',
materialModel: formData.value.materialModel || '',
operateTime: formData.value.operateTime || '',
remark: formData.value.remark || '',
materialId: formData.value.materialId || '',
taskNo: formData.value.taskNo || '',
sourcePlace: formData.value.sourcePlace || '',
toPlace: formData.value.toPlace || '',
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.OrderNo = ''
formData.value.MaterialName = ''
formData.value.MaterialNo = ''
formData.value.StockType = ''
formData.value.ContainerNo = ''
formData.value.MaterialModel = ''
formData.value.OperateTime = ''
formData.value.Remark = ''
formData.value.MaterialId = ''
formData.value.TaskNo = ''
formData.value.SourcePlace = ''
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 stockTypeEnumEnum = await wmsInOutStockRecordDrawer.getWmsEnumData({
 EnumName: 'StockTypeEnum',
})
updateFormItemOptions('stockType', stockTypeEnumEnum)
  }
  commonQueryEnumForFrom()
  /**
   * 弹窗打开获取详情
   */
  const onOpen = async () => {
    disabled.value = false
    updateCheckData()
  }
  watch(() => current.value, onOpen)
  return {
    formItems,
    formData,
    visible,
    formRef,
    onOpen,
    onClose,
    onConfirmQuery,
    onReset,
  }
}