111
schangxiang@126.com
2025-05-06 5e38906b578004f5a7441329cd25e85e50a29020
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Weben_CMS_TemplateDemo/web/src/widgets/HIAWms/Controllers/WmsMaterialQueryDrawer.tsx
@@ -1,318 +1,366 @@
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsMaterialQueryDrawer } from '../Models/WmsMaterialQueryDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
export const useWmsMaterialQueryDrawer = (props: any, ctx?: any) => {
  const WmsMaterialQueryDrawer = injectModel<WmsMaterialQueryDrawer>('WmsMaterialQueryDrawer')
  /**
   * ç”¨æ¥å¯¹æ¯”的初始化数据
   */
  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: 'materialCode',
      el: 'input',
      disabled: disabled,
      placeholder: '请输入物料编码',
    },
    {
      label: '物料名称',
      prop: 'materialName',
      el: 'input',
      placeholder: '请输入物料名称',
      rules: [{ required: true, message: '物料名称不能为空', trigger: 'blur' }],
    },
    {
      label: '采购类型',
      prop: 'purchaseType',
      el: 'select',
      placeholder: '请选择采购类型',
      options: [],
      rules: [{ required: true, message: '请选择采购类型', trigger: 'change' }],
    },
    {
      label: '物料类型',
      prop: 'materialType',
      el: 'select',
      placeholder: '请选择物料类型',
      options: [],
      rules: [{ required: true, message: '请选择物料类型', trigger: 'change' }],
    },
    {
      label: '主单位',
      prop: 'primaryUnit',
      el: 'input',
      placeholder: '请输入主单位(如: kg, m, ä¸ª)',
    },
    {
      label: '规格/标准',
      prop: 'standard',
      el: 'input',
      placeholder: '请输入规格/标准(如: GB/T 8163-2018)',
    },
    {
      label: '外径(mm)',
      prop: 'outerDiameter',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      placeholder: '请输入外径',
      step: 0.01,
      precision: 2,
    },
    {
      label: '壁厚(mm)',
      prop: 'wallThickness',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      placeholder: '请输入壁厚',
      step: 0.01,
      precision: 2,
    },
    {
      label: '材质',
      prop: 'materialQuality',
      el: 'input',
      placeholder: '请输入材质(如: 304不锈钢)',
    },
    {
      label: '长度(m)',
      prop: 'length',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      placeholder: '请输入长度',
      step: 0.1,
      precision: 2,
    },
    {
      label: '是否主支管',
      prop: 'isMainBranch',
      el: 'select',
      options: [],
    },
    {
      label: '生产工厂',
      prop: 'factory',
      el: 'input',
      placeholder: '请输入生产工厂',
    },
    {
      label: '证书编号',
      prop: 'certification',
      el: 'input',
      placeholder: '请输入证书编号',
    },
    {
      label: '备注',
      prop: 'remark',
      el: 'input',
      type: 'textarea',
      placeholder: '请输入备注',
    },
  ])
  /**
   * æ ¡éªŒæ˜¯å¦æœ‰æ•°æ®å˜åŒ–
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const onClose = (done: () => void) => {
    if (visible.value) {
      if (checkIsEqualObject()) {
        visible.value = false
        done && done()
      } else {
        ConfirmBox('是否保存设置?')
          .then(() => {
            onConfirmQuery()
          })
          .catch(() => {
            visible.value = false
            done && done()
          })
      }
    }
  }
  /**
   * ç¡®è®¤æŸ¥è¯¢
   */
  const onConfirmQuery = async () => {
    ElMessage.success('点击了查询按钮')
    await formRef.value?.validate()
    const data = {
      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,
    }
    if (!current.value) {
      await WmsMaterialQueryDrawer.addWmsMaterial(data)
    } else {
      const id = current.value.id
      await WmsMaterialQueryDrawer.updateWmsMaterial(id, data)
    }
    ElMessage.success('保存成功')
    ctx.emit('confirmQuery')
  }
  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 materialTypeEnum = await WmsMaterialQueryDrawer.getWmsEnumData({
      EnumName: 'MaterialTypeEnum',
    })
    updateFormItemOptions('materialType', materialTypeEnum)
    const purchaseTypeEnum = await WmsMaterialQueryDrawer.getWmsEnumData({
      EnumName: 'PurchaseTypeEnum',
    })
    updateFormItemOptions('purchaseType', purchaseTypeEnum)
    const yesOrNoTypeEnum = await WmsMaterialQueryDrawer.getWmsEnumData({
      EnumName: 'YesNoEnum',
    })
    updateFormItemOptions('isMainBranch', yesOrNoTypeEnum)
  }
  commonQueryEnumForFrom();
  /**
   * å¼¹çª—打开获取详情
   */
  const onOpen = async () => {
    if (current.value) {
      const res = await WmsMaterialQueryDrawer.getWmsMaterialDetail(current.value)
      formData.value = {
        materialCode: res.materialCode,
        materialName: res.materialName,
        purchaseType: res.purchaseType,
        materialType: res.materialType,
        primaryUnit: res.primaryUnit,
        standard: res.standard,
        outerDiameter: res.outerDiameter,
        wallThickness: res.wallThickness,
        materialQuality: res.materialQuality,
        length: res.length,
        isMainBranch: res.isMainBranch,
        factory: res.factory,
        certification: res.certification,
        remark: res.remark,
        id: res.id,
      }
      disabled.value = true
      updateCheckData()
    } else {
      formData.value = {}
      disabled.value = false
      updateCheckData()
    }
  }
  watch(() => current.value, onOpen)
  return {
    formItems,
    formData,
    visible,
    formRef,
    onOpen,
    onClose,
    onConfirmQuery,
  }
}
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { WmsMaterialDrawer } from '../Models/WmsMaterialDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
export const useWmsMaterialQueryDrawer = (props: any, ctx?: any) => {
  const wmsMaterialDrawer = injectModel<WmsMaterialDrawer>('WmsMaterialDrawer')
  /**
   * ç”¨æ¥å¯¹æ¯”的初始化数据
   */
  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: 'materialCode',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入物料编码(唯一标识)',
                },
                {
                   label: '物料名称',
                   prop: 'materialName',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入物料名称',
                },
                {
                   label: '采购类型(枚举值)',
                   prop: 'purchaseType',
                   el: 'select',
                   //disabled: disabled,
                   placeholder: '请输入采购类型(枚举值)',
                },
                {
                   label: '物料类型(枚举值)',
                   prop: 'materialType',
                   el: 'select',
                   //disabled: disabled,
                   placeholder: '请输入物料类型(枚举值)',
                },
                {
                   label: '主单位(如:kg、m、个)',
                   prop: 'primaryUnit',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入主单位(如:kg、m、个)',
                },
                {
                   label: '规格/标准(如:GB/T 8163-2018)',
                   prop: 'standard',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入规格/标准(如:GB/T 8163-2018)',
                },
                {
                   label: '外径(单位:mm)',
                   prop: 'outerDiameter',
                   el: (props: any, { attrs }: SetupContext) => {
                     return h(inputNumber, {
                       ...props,
                       clearable: true,
                       ...attrs,
                     })
                   },
                   step: 0.01,
                   precision: 2,
                   //disabled: disabled,
                   placeholder: '请输入外径(单位:mm)',
                },
                {
                   label: '壁厚(单位:mm)',
                   prop: 'wallThickness',
                   el: (props: any, { attrs }: SetupContext) => {
                     return h(inputNumber, {
                       ...props,
                       clearable: true,
                       ...attrs,
                     })
                   },
                   step: 0.01,
                   precision: 2,
                   //disabled: disabled,
                   placeholder: '请输入壁厚(单位:mm)',
                },
                {
                   label: '材质(如:304不锈钢)',
                   prop: 'materialQuality',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入材质(如:304不锈钢)',
                },
                {
                   label: '长度(单位:m)',
                   prop: 'length',
                   el: (props: any, { attrs }: SetupContext) => {
                     return h(inputNumber, {
                       ...props,
                       clearable: true,
                       ...attrs,
                     })
                   },
                   step: 0.01,
                   precision: 2,
                   //disabled: disabled,
                   placeholder: '请输入长度(单位:m)',
                },
                {
                   label: '是否为主支管',
                   prop: 'isMainBranch',
                   el: 'select',
                   //disabled: disabled,
                   placeholder: '请输入是否为主支管',
                },
                {
                   label: '生产工厂',
                   prop: 'factory',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入生产工厂',
                },
                {
                   label: '证书编号',
                   prop: 'certification',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入证书编号',
                },
                {
                   label: '冗余字段1 - é¢„留扩展用途',
                   prop: 'redundantField1',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入冗余字段1 - é¢„留扩展用途',
                },
                {
                   label: '冗余字段2 - é¢„留扩展用途',
                   prop: 'redundantField2',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入冗余字段2 - é¢„留扩展用途',
                },
                {
                   label: '冗余字段3 - é¢„留扩展用途',
                   prop: 'redundantField3',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入冗余字段3 - é¢„留扩展用途',
                },
                {
                   label: '备注',
                   prop: 'remark',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入备注',
                },
                {
                   label: '是否禁用',
                   prop: 'isDisabled',
                   el: 'select',
                   //disabled: disabled,
                   placeholder: '请输入是否禁用',
                },
  ])
  /**
   * æ ¡éªŒæ˜¯å¦æœ‰æ•°æ®å˜åŒ–
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const commonGetFormData=()=>{
    const data = {
      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,
RedundantField1: formData.value.RedundantField1,
RedundantField2: formData.value.RedundantField2,
RedundantField3: formData.value.RedundantField3,
Remark: formData.value.Remark,
IsDisabled: formData.value.IsDisabled,
      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.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.RedundantField1 = ''
formData.value.RedundantField2 = ''
formData.value.RedundantField3 = ''
formData.value.Remark = ''
formData.value.IsDisabled = ''
    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 purchaseTypeEnumEnum = await wmsMaterialDrawer.getWmsEnumData({
 EnumName: 'PurchaseTypeEnum',
})
updateFormItemOptions('purchaseType', purchaseTypeEnumEnum)
const materialTypeEnumEnum = await wmsMaterialDrawer.getWmsEnumData({
 EnumName: 'MaterialTypeEnum',
})
updateFormItemOptions('materialType', materialTypeEnumEnum)
const yesNoEnumEnum = await wmsMaterialDrawer.getWmsEnumData({
 EnumName: 'YesNoEnum',
})
updateFormItemOptions('isMainBranch', yesNoEnumEnum)
  }
  commonQueryEnumForFrom()
  /**
   * å¼¹çª—打开获取详情
   */
  const onOpen = async () => {
    disabled.value = false
    updateCheckData()
  }
  watch(() => current.value, onOpen)
  return {
    formItems,
    formData,
    visible,
    formRef,
    onOpen,
    onClose,
    onConfirmQuery,
    onReset,
  }
}