From 27ba504441037666e787ded85b4af2f65be65c17 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周二, 29 4月 2025 18:06:07 +0800
Subject: [PATCH] Merge branch 'master' of http://222.71.245.114:9086/r/HIA24016N_PipeLineDemo

---
 HIAWms/web/src/widgets/HIAWms/Controllers/WmsMaterialDrawer.ts |  251 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 251 insertions(+), 0 deletions(-)

diff --git a/HIAWms/web/src/widgets/HIAWms/Controllers/WmsMaterialDrawer.ts b/HIAWms/web/src/widgets/HIAWms/Controllers/WmsMaterialDrawer.ts
new file mode 100644
index 0000000..377b8fb
--- /dev/null
+++ b/HIAWms/web/src/widgets/HIAWms/Controllers/WmsMaterialDrawer.ts
@@ -0,0 +1,251 @@
+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)
+    },
+  })
+  /**
+   * 娣诲姞鐨刦orm瀛楁
+   */
+  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,
+  }
+}

--
Gitblit v1.9.3