¶Ô±ÈÐÂÎļþ |
| | |
| | | import { ref, onMounted, reactive, computed, Ref, watch } 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 useWmsMaterialDrawer = (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 current = computed(() => { |
| | | return props.row || null |
| | | }) |
| | | const visible = computed({ |
| | | get() { |
| | | return props.modelValue |
| | | }, |
| | | set(val) { |
| | | ctx.emit('update:modelValue', val) |
| | | }, |
| | | }) |
| | | /** |
| | | * æ·»å çformåæ®µ |
| | | */ |
| | | const formItems = reactive([ |
| | | { |
| | | label: 'ç©æç¼ç ', |
| | | prop: 'materialCode', |
| | | el: 'input', |
| | | placeholder: '请è¾å
¥ç©æç¼ç ', |
| | | rules: [{ required: true, message: 'ç©æç¼ç ä¸è½ä¸ºç©º', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: 'ç©æåç§°', |
| | | prop: 'materialName', |
| | | el: 'input', |
| | | placeholder: '请è¾å
¥ç©æåç§°', |
| | | rules: [{ required: true, message: 'ç©æåç§°ä¸è½ä¸ºç©º', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: 'éè´ç±»å', |
| | | prop: 'purchaseType', |
| | | el: 'select', |
| | | placeholder: 'è¯·éæ©éè´ç±»å', |
| | | options: [ |
| | | { label: 'ç±»å1', value: 1 }, |
| | | { label: 'ç±»å2', value: 2 }, |
| | | // Add all enum values |
| | | ], |
| | | rules: [{ required: true, message: 'è¯·éæ©éè´ç±»å', trigger: 'change' }], |
| | | }, |
| | | { |
| | | label: 'ç©æç±»å', |
| | | prop: 'materialType', |
| | | el: 'select', |
| | | placeholder: 'è¯·éæ©ç©æç±»å', |
| | | options: [ |
| | | { label: 'ç±»åA', value: 1 }, |
| | | { label: 'ç±»åB', value: 2 }, |
| | | // Add all enum values |
| | | ], |
| | | 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: 'input-number', |
| | | placeholder: '请è¾å
¥å¤å¾', |
| | | step: 0.01, |
| | | precision: 2, |
| | | }, |
| | | { |
| | | label: 'å£å(mm)', |
| | | prop: 'wallThickness', |
| | | el: 'input-number', |
| | | placeholder: '请è¾å
¥å£å', |
| | | step: 0.01, |
| | | precision: 2, |
| | | }, |
| | | { |
| | | label: 'æè´¨', |
| | | prop: 'materialQuality', |
| | | el: 'input', |
| | | placeholder: '请è¾å
¥æè´¨(å¦: 304ä¸éé¢)', |
| | | }, |
| | | { |
| | | label: 'é¿åº¦(m)', |
| | | prop: 'length', |
| | | el: 'input-number', |
| | | placeholder: '请è¾å
¥é¿åº¦', |
| | | step: 0.1, |
| | | precision: 2, |
| | | }, |
| | | { |
| | | label: 'æ¯å¦ä¸»æ¯ç®¡', |
| | | prop: 'isMainBranch', |
| | | el: 'select', |
| | | options: [ |
| | | { label: 'æ¯', value: 1 }, |
| | | { label: 'å¦', value: 2 }, |
| | | ], |
| | | }, |
| | | { |
| | | 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(() => { |
| | | onConfirm() |
| | | }) |
| | | .catch(() => { |
| | | visible.value = false |
| | | done && done() |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | /** |
| | | * ä¿å |
| | | */ |
| | | const onConfirm = async () => { |
| | | 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 === 1, |
| | | factory: formData.value.factory, |
| | | certification: formData.value.certification, |
| | | remark: formData.value.remark, |
| | | } |
| | | if (!current.value) { |
| | | await wmsMaterialDrawer.addWmsMaterial(data) |
| | | } else { |
| | | const id = current.value.id |
| | | await wmsMaterialDrawer.updateWmsMaterial(id, data) |
| | | } |
| | | ElMessage.success('ä¿åæå') |
| | | ctx.emit('confirm') |
| | | } |
| | | |
| | | const updateCheckData = () => { |
| | | initiateData.value = { |
| | | formData: { |
| | | ...formData.value, |
| | | }, |
| | | } |
| | | } |
| | | /** |
| | | * å¼¹çªæå¼è·å详æ
|
| | | */ |
| | | const onOpen = async () => { |
| | | if (current.value) { |
| | | const res = await wmsMaterialDrawer.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 ? 1 : 2, |
| | | factory: res.factory, |
| | | certification: res.certification, |
| | | remark: res.remark, |
| | | id: res.id, |
| | | } |
| | | updateCheckData() |
| | | } else { |
| | | formData.value = {} |
| | | updateCheckData() |
| | | } |
| | | } |
| | | |
| | | watch(() => current.value, onOpen) |
| | | |
| | | return { |
| | | formItems, |
| | | formData, |
| | | visible, |
| | | formRef, |
| | | onOpen, |
| | | onClose, |
| | | onConfirm, |
| | | } |
| | | } |