From eaafc29bc72b22b59b95b54c27d1a3113b3e7871 Mon Sep 17 00:00:00 2001
From: CD配唱片 <CD配唱片>
Date: 星期三, 23 四月 2025 14:42:42 +0800
Subject: [PATCH] Merge branch 'dev' of http://192.168.50.149:8085/r/aps-kj-web into dev

---
 src/views/basicData/materialManagement/index.vue |    1 
 src/components/HxlhTable/index.vue               |   31 ++++-
 src/api/basicData/bom/bom.js                     |   44 ++++++++
 src/views/basicData/bom/index.vue                |  210 ++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 277 insertions(+), 9 deletions(-)

diff --git a/src/api/basicData/bom/bom.js b/src/api/basicData/bom/bom.js
new file mode 100644
index 0000000..958f630
--- /dev/null
+++ b/src/api/basicData/bom/bom.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨBOM鏁版嵁绠$悊鍒楄〃
+export function listApsBom(query) {
+  return request({
+    url: '/aps/ApsBom/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨBOM鏁版嵁绠$悊璇︾粏
+export function getApsBom(id) {
+  return request({
+    url: '/ApsBom/ApsBom/' + id,
+    method: 'get'
+  })
+}
+
+// 鏂板BOM鏁版嵁绠$悊
+export function addApsBom(data) {
+  return request({
+    url: '/ApsBom/ApsBom',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼BOM鏁版嵁绠$悊
+export function updateApsBom(data) {
+  return request({
+    url: '/ApsBom/ApsBom',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎BOM鏁版嵁绠$悊
+export function delApsBom(id) {
+  return request({
+    url: '/ApsBom/ApsBom/' + id,
+    method: 'delete'
+  })
+}
diff --git a/src/components/HxlhTable/index.vue b/src/components/HxlhTable/index.vue
index b0b86fa..dce06fe 100644
--- a/src/components/HxlhTable/index.vue
+++ b/src/components/HxlhTable/index.vue
@@ -27,6 +27,8 @@
             :scroll-x="{enabled: true}"
             :scroll-y="{enabled: true}"
             :expand-config="expandConfig"
+            :tree-config="treeConfig"
+            :row-style="rowStyle"
             @sort-change="sortChange"
             @page-change="pagerChange"
             @form-submit="findList"
@@ -142,17 +144,30 @@
     }
 },
 expandConfig: {
-  type: Object,
-  default: () => {
-    return {lazy: false}
-  }
+    type: Object,
+    default: () => {
+      return {lazy: false}
+    }
 },
 subGridOptions: {
-  type:Object,
-  default :()=>{
+    type:Object,
+    default :()=>{
+      return {}
+    }
+},
+treeConfig: {
+    type: Object,
+    default: () => {
     return {}
-  }
-}
+    }
+},
+rowStyle: {
+    type: Function,
+    default: () => {
+    return {}
+    }
+},
+
 })
 
 
diff --git a/src/views/basicData/bom/index.vue b/src/views/basicData/bom/index.vue
new file mode 100644
index 0000000..5f530bf
--- /dev/null
+++ b/src/views/basicData/bom/index.vue
@@ -0,0 +1,210 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :rules="rules" :inline="true" v-show="showSearch" label-width="68px">
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <el-form-item label="鏂欏彿" prop="itemCode">
+            <el-input
+              v-model="queryParams.itemCode"
+              placeholder="璇疯緭鍏ユ枡鍙�"
+              clearable
+              @keyup.enter="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="18" style="text-align: right;">
+          <el-form-item>
+              <el-button type="primary" icon="Search" @click="handleQuery">鎼滅储</el-button>
+              <el-button icon="Refresh" @click="resetQuery">閲嶇疆</el-button>
+            </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+
+    <HxlhTable
+        style="width: 100%"
+        :columns="columns"
+        :data="bomList"
+        :loading="loading"
+        :height="height"
+        :treeConfig="treeConfig"
+        :row-style="getRowStyle"
+    >
+    </HxlhTable>
+  </div>
+</template>
+
+<script setup name="ApsBom">
+import { listApsBom } from "@/api/basicData/bom/bom";
+import { listAll_plant } from "@/api/basicData/plant";
+import axios from 'axios';
+import HxlhTable from '@/components/HxlhTable'
+
+const { proxy } = getCurrentInstance();
+
+const bomList = ref([]);
+const open = ref(false);
+const loading = ref(false);
+const showSearch = ref(true);
+
+const treeConfig= {
+  transform: true,
+  rowField: 'bomId',
+  parentField: 'parentBomId'
+}
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    itemCode: null,
+  },
+  rules: {
+    itemCode: [
+      { required: true, message: "鏂欏彿涓嶈兘涓虹┖", trigger: "blur" }
+    ],
+  }
+});
+
+// 琛ㄦ牸閰嶇疆 
+const columns = ref([
+  {
+    title: 'bomId',
+    field: 'bomId',
+    minWidth: 20, treeNode: true
+  },
+  {
+    title: 'parentBomId',
+    field: 'parentBomId',
+  },
+  {
+    title: '鏂欏彿',
+    field: 'itemCode',
+  },
+  {
+    title: '鐗╂枡鎻忚堪',
+    field: 'itemName',
+  },
+  {
+    title: '鐢熸晥鏃ユ湡',
+    field: 'startDate',
+  },
+  {
+    title: '澶辨晥鏃ユ湡',
+    field: 'endDate',
+  },
+  {
+    title: '閫傜敤宸ュ巶',
+    field: 'orgCode',
+    formatter: (({ cellValue, row, column }) => {
+      if (cellValue) {
+        for(let i=0;i<plantList.value.length;i++){
+          if(cellValue===plantList.value[i].plantCode){
+            return plantList.value[i].plantName
+          }
+        }
+      }
+      return '';
+    })
+  },
+  {
+    title: '鍒涘缓鏃堕棿',
+    field: 'createTime',
+  },
+]);
+
+// 瀹氫箟涓�涓嚱鏁版潵鑾峰彇琛岀殑灞傜骇
+const getRowLevel = (row, dataMap) => {
+  let level = 0
+  let parentBomId = row.parentBomId
+  while (parentBomId!== null) {
+    const parentRow = dataMap.get(parentBomId)
+    if (parentRow) {
+      level++
+      parentBomId = parentRow.parentBomId
+    } else {
+      break
+    }
+  }
+  return level
+}
+
+// 瀹氫箟涓�涓嚱鏁版潵璁剧疆琛岀殑鏍峰紡
+const getRowStyle = (row, rowIndex) => {
+  if (!Array.isArray(bomList.value)) {
+    console.error('bomList 涓嶆槸涓�涓暟缁勭被鍨�');
+    return {};
+  }
+  const dataMap = new Map(bomList.value.map(item => [item.bomId, item]))
+  const level = getRowLevel(row.row, dataMap)
+  const colors = ['#f0f9ff', '#e6f7ff', '#bae7ff', '#91d5ff', '#69c0ff']
+  return {
+    backgroundColor: colors[level % colors.length]
+  }
+}
+
+const { queryParams, form, rules } = toRefs(data);
+
+const queryPlants = ref({status: 1});
+const plantList = ref([]);
+const height = ref(document.documentElement.clientHeight - 180 + "px;")
+
+/** 鏌ヨBOM鏁版嵁绠$悊鍒楄〃 */
+function getList() {
+  loading.value = true;
+  axios.all([
+      listAll_plant(queryPlants.value),
+      listApsBom(queryParams.value)
+    ])
+    .then(axios.spread((response1, response2) => {
+      plantList.value = response1.data;
+      bomList.value = response2.rows;
+      loading.value = false;
+    }))
+    .catch(error => {
+      console.error('璇锋眰鍑洪敊:', error);
+    });
+}
+
+// 鍙栨秷鎸夐挳
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+// 琛ㄥ崟閲嶇疆
+function reset() {
+  form.value = {
+    id: null,
+    bomId: null,
+    parentBomId: null,
+    itemCode: null,
+    itemName: null,
+    startDate: null,
+    endDate: null,
+    orgCode: null,
+    delFlag: null,
+    createBy: null,
+    createTime: null,
+    updateBy: null,
+    updateTime: null
+  };
+  proxy.resetForm("ApsBomRef");
+}
+
+/** 鎼滅储鎸夐挳鎿嶄綔 */
+function handleQuery() {
+  proxy.$refs["queryRef"].validate(valid => {
+    if (valid) {
+        getList();
+      }
+  });
+}
+
+/** 閲嶇疆鎸夐挳鎿嶄綔 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  bomList.value = null;
+}
+
+console.log("123");
+</script>
diff --git a/src/views/basicData/materialManagement/index.vue b/src/views/basicData/materialManagement/index.vue
index b3f78d3..e1dd58f 100644
--- a/src/views/basicData/materialManagement/index.vue
+++ b/src/views/basicData/materialManagement/index.vue
@@ -165,7 +165,6 @@
     width: 150,
     formatter: (({ cellValue, row, column }) => {
       if (cellValue) {
-        console.log(plantList.value);
         for(let i=0;i<plantList.value.length;i++){
           if(cellValue===plantList.value[i].plantCode){
             return plantList.value[i].plantName

--
Gitblit v1.9.3