Sfoglia il codice sorgente

feat: 添加bom类型,修改细节

jiaxing.liao 3 settimane fa
parent
commit
82cf48ae66

+ 33 - 6
src/components/mindmap/Mindmap.vue

@@ -39,6 +39,8 @@ const props = withDefaults(
   defineProps<{
     data?: any;
     readonly?: boolean;
+    // 1工程bom 2制造bom
+    type?: string;
   }>(),
   {
     readonly: false,
@@ -110,7 +112,8 @@ onMounted(() => {
         render() {
           return (
             <div class="text-#666 flex items-center">
-              {data?.type === "M" ? (
+              {/* M节点 */}
+              {data?.type === "M" && (
                 <ElTooltip
                   placement="top"
                   v-slots={{
@@ -133,7 +136,9 @@ onMounted(() => {
                     </span>
                   </div>
                 </ElTooltip>
-              ) : ["P", "C"].includes(data?.type) ? (
+              ) }
+              {/* P/C节点 */}
+              { ["P", "C"].includes(data?.type) && (
                 <ElTooltip
                   placement="top"
                   v-slots={{
@@ -161,7 +166,26 @@ onMounted(() => {
                     )}
                   </div>
                 </ElTooltip>
-              ) : (
+              ) }
+              {/* P/C节点 */}
+              { !node?.isRoot && !data?.type && (
+                <ElTooltip
+                  placement="top"
+                  v-slots={{
+                    content: (
+                      <>
+                        <div>标准用量:{data?.qty}</div>
+                      </>
+                    ),
+                  }}
+                >
+                  <div class="flex">
+                    <span class="mr-4px">{data?.name}</span>
+                  </div>
+                </ElTooltip>
+              ) }
+              {/* 根节点 */}
+              { node?.isRoot &&  (
                 <div class="text-#fff">{data?.name}</div>
               )}
               {/* 删除标识 */}
@@ -185,9 +209,12 @@ onMounted(() => {
       return div;
     },
   } as any);
-
-  // @ts-ignore TODO 临时隐藏Tab新增功能
-  //instance.keyCommand.removeShortcut("Tab");
+  // 制造bom因此新增
+  if(props.type == '2') {
+    // @ts-ignore TODO 临时隐藏Tab新增功能
+    instance.keyCommand.removeShortcut("Tab");
+  }
+  
   // @ts-ignore TODO 临时隐藏Del删除功能
   instance.keyCommand.removeShortcut("Del");
 

+ 76 - 66
src/pages/excel/ConfigDrawer.vue

@@ -16,7 +16,11 @@
         <!-- 层级号 -->
         <el-col :span="12">
           <el-form-item label="级号" prop="lever_number">
-            <el-input placeholder="请输入" readonly v-model="formData.lever_number" />
+            <el-input
+              placeholder="请输入"
+              readonly
+              v-model="formData.lever_number"
+            />
           </el-form-item>
         </el-col>
 
@@ -59,10 +63,7 @@
 
         <!-- 产品类别 -->
         <el-col :span="12">
-          <el-form-item
-            label="产品类别"
-            name="product_category"
-          >
+          <el-form-item label="产品类别" name="product_category">
             <el-select
               :disabled="!!originFormData?.erp_code"
               v-model="formData.product_category"
@@ -83,38 +84,11 @@
 
         <!-- 制造工艺 -->
         <el-col :span="12">
-          <el-form-item
-            label="制造工艺"
-            name="process"
-          >
+          <el-form-item label="制造工艺" name="process">
             <el-input placeholder="请输入" v-model="formData.process" />
           </el-form-item>
         </el-col>
 
-        <!-- 零件属性 -->
-        <el-col :span="12">
-          <el-form-item
-            label="零件属性"
-            name="part_attribute"
-          >
-            <el-select
-              :disabled="!!originFormData?.erp_code"
-              v-model="formData.part_attribute"
-              placeholder="请选择"
-            >
-              <el-option
-                v-for="item in partAttributeOptions.map((item) => ({
-                  label: item,
-                  value: item,
-                }))"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-
         <!-- 材料牌号 -->
         <el-col :span="12">
           <el-form-item label="材料牌号" name="material_grade">
@@ -163,10 +137,7 @@
 
         <!-- 制造单元 -->
         <el-col :span="12" v-if="type == '2'">
-          <el-form-item
-            label="制造单元"
-            prop="manufacture_report"
-          >
+          <el-form-item label="制造单元" prop="manufacture_report">
             <el-select
               :disabled="!!originFormData?.erp_code"
               v-model="formData.manufacture_report"
@@ -194,10 +165,7 @@
 
         <!-- NK零件号 -->
         <el-col :span="12">
-          <el-form-item
-            label="NK零件号"
-            name="erp_code"
-          >
+          <el-form-item label="NK零件号" name="erp_code">
             <div class="flex gap-8px">
               <el-input
                 placeholder="推荐或生成..."
@@ -225,14 +193,12 @@
 
         <!-- 自制/外购/支给(M/P/C) -->
         <el-col :span="12">
-          <el-form-item
-            label="自制/外购/支给(M/P/C)"
-            prop="part_type"
-          >
+          <el-form-item label="自制/外购/支给(M/P/C)" prop="part_type">
             <el-select
               :disabled="!!originFormData?.erp_code"
               v-model="formData.part_type"
               placeholder="请选择"
+              @change="handlePartTypeChange"
             >
               <el-option
                 v-for="item in options"
@@ -244,6 +210,27 @@
           </el-form-item>
         </el-col>
 
+        <!-- 零件属性 -->
+        <el-col :span="12">
+          <el-form-item label="零件属性" name="part_attribute">
+            <el-select
+              :disabled="!!originFormData?.erp_code"
+              v-model="formData.part_attribute"
+              placeholder="请先选择M/P/C类型"
+            >
+              <el-option
+                v-for="item in partAttributeOptions.map((item) => ({
+                  label: item,
+                  value: item,
+                }))"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+
         <!-- 辆份配置 -->
         <el-col :span="12" v-if="type == '1'">
           <el-form-item label="辆份配置" name="unit_config">
@@ -309,7 +296,7 @@
         </el-col>
 
         <!-- 工艺消耗 -->
-        <el-col :span="12" v-if="type == '2'" >
+        <el-col :span="12" v-if="type == '2'">
           <el-form-item label="工艺消耗" name="technology_consume">
             <el-input-number
               class="inline-block w-full!"
@@ -482,31 +469,46 @@
           <!-- 备用字段1 -->
           <el-col :span="12">
             <el-form-item label="制造BOM备用字段1" name="manufacture_var1">
-              <el-input placeholder="请输入" v-model="formData.manufacture_var1" />
+              <el-input
+                placeholder="请输入"
+                v-model="formData.manufacture_var1"
+              />
             </el-form-item>
           </el-col>
           <!-- 备用字段2 -->
           <el-col :span="12">
             <el-form-item label="制造BOM备用字段2" name="manufacture_var2">
-              <el-input placeholder="请输入" v-model="formData.manufacture_var2" />
+              <el-input
+                placeholder="请输入"
+                v-model="formData.manufacture_var2"
+              />
             </el-form-item>
           </el-col>
           <!-- 备用字段3 -->
           <el-col :span="12">
             <el-form-item label="制造BOM备用字段3" name="manufacture_var3">
-              <el-input placeholder="请输入" v-model="formData.manufacture_var3" />
+              <el-input
+                placeholder="请输入"
+                v-model="formData.manufacture_var3"
+              />
             </el-form-item>
           </el-col>
           <!-- 备用字段4 -->
           <el-col :span="12">
             <el-form-item label="制造BOM备用字段4" name="manufacture_var4">
-              <el-input placeholder="请输入" v-model="formData.manufacture_var4" />
+              <el-input
+                placeholder="请输入"
+                v-model="formData.manufacture_var4"
+              />
             </el-form-item>
           </el-col>
           <!-- 备用字段5 -->
           <el-col :span="12">
             <el-form-item label="制造BOM备用字段5" name="manufacture_var5">
-              <el-input placeholder="请输入" v-model="formData.manufacture_var5" />
+              <el-input
+                placeholder="请输入"
+                v-model="formData.manufacture_var5"
+              />
             </el-form-item>
           </el-col>
         </template>
@@ -529,7 +531,7 @@
 </template>
 
 <script setup lang="ts">
-import { ref, defineExpose, defineEmits } from "vue";
+import { ref, defineExpose, defineEmits, computed } from "vue";
 import { ElMessage, type FormInstance } from "element-plus";
 import { cloneDeep } from "lodash-es";
 import { CirclePlus } from "@element-plus/icons-vue";
@@ -538,7 +540,7 @@ import type { IRecomend } from "./TableModal.vue";
 import { useRoute } from "vue-router";
 
 const route = useRoute();
-const type = route.query?.type as string ?? '1'; // 1工程bom 2制造bom
+const type = (route.query?.type as string) ?? "1"; // 1工程bom 2制造bom
 
 const keyMap = {
   gridorders: "序号",
@@ -601,18 +603,18 @@ const options = [
 ];
 
 // 零件属性
-const partAttributeOptions = [
-  "完成品",
-  "半成品",
-  "树脂",
-  "膜片",
-  "碳纤维片",
-  "木皮",
-  "铝片",
-  "涂料",
-  "油墨",
-  "部件",
-];
+const partAttributeOptions = computed(() => {
+  if (formData.value.part_type == "M") {
+    return ["完成品", "半成品"];
+  }
+  if (formData.value.part_type == "P") {
+    return ["树脂", "膜片", "碳纤维片", "木皮", "铝片", "涂料", "油墨", "部件"];
+  }
+  if (formData.value.part_type == "C") {
+    return ["树脂", "膜片", "碳纤维片", "木皮", "铝片", "涂料", "油墨", "部件"];
+  }
+  return [];
+});
 
 // 制造单元
 const manufatureUnitOptions = [
@@ -733,9 +735,17 @@ const open = (node: any, type?: "add" | "edit", layer?: number) => {
   }
 };
 
+// 零件类型改变
+// 属性值不在选项中时,清空
+const handlePartTypeChange = () => {
+  if (!partAttributeOptions.value.includes(formData.value.part_attribute)) {
+    formData.value.part_attribute = undefined;
+  }
+};
+
 // 打开推荐
 const openRecomendModal = () => {
-  recomendRef.value?.open(formData.value?.part_name, formData.value?.part_Type);
+  recomendRef.value?.open(formData.value?.part_name, formData.value?.part_type);
 };
 
 // 添加推荐

+ 4 - 3
src/pages/excel/MindmapModal.vue

@@ -46,7 +46,7 @@
         <el-button type="primary" link @click="handleSave" class="mr-8px"
           ><img class="w-1em mr-4px" :src="saveImg" alt="" />保存</el-button
         >
-        <el-tooltip content="添加">
+        <el-tooltip content="添加" v-if="type == '1'">
           <el-button
             type="default"
             circle
@@ -54,7 +54,7 @@
             @click="addNode"
           />
         </el-tooltip>
-        <el-tooltip content="删除">
+        <el-tooltip content="删除" v-if="type == '1'">
           <el-button
             type="default"
             circle
@@ -100,6 +100,7 @@
       <Mindmap
         v-model:data="data"
         ref="mindmapRef"
+        :type="type"
         @node-dbl-click="handleNodeDbClick"
         @data-change="handleDataChange"
       />
@@ -455,7 +456,7 @@ defineExpose({
 
 const handlePressDel = (e: KeyboardEvent) => {
   // 删除节点
-  if (e.key === 'Delete' && visible.value) {
+  if (e.key === 'Delete' && visible.value && props.type == '1') {
     e.preventDefault();
     removeNode();
   }

+ 1 - 0
src/pages/excel/TableModal.vue

@@ -134,6 +134,7 @@ defineExpose({
     open.value = true;
     part_name.value = partName;
     part_type.value = partType;
+    console.log('partName', partName, partType);
     getData();
   },
 });

+ 3 - 0
src/pages/excel/index.vue

@@ -2,6 +2,7 @@
   <div class="page-container">
     <div class="custom-menu-container">
       <div>
+        <span class="text-12px mr-12px font-bold text-#f56c6c">{{ type == '1' ? '工程BOM' : '制造BOM'}}编辑</span>
         <span class="text-12px text-yellow mr-12px">当前版本号:{{ version || '-'}}</span>
         <el-button link @click="handleSave" class="mr-8px"
           ><img class="w-1em mr-4px" :src="saveImg" />保存</el-button
@@ -48,6 +49,7 @@ const editBomStore = useEditBomStore();
 const route = useRoute();
 const workbook = ref<any>();
 const version = route.query?.version as string;
+const type = route.query?.type as string ?? '1';
 
 const onSheetCreated = (univer: Univer, univerApi: FUniver) => {
   editBomStore.univer = univer;
@@ -75,6 +77,7 @@ const handleSave = () => {
         model: {
           ...workbook,
           bom_id: route.query?.id,
+          version
         },
       },
       (res: any) => {

File diff suppressed because it is too large
+ 1 - 1
stats.html