| src/utils/productTree.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/procurementManagement/procurementLedger/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/productionPlan/productionPlan/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/utils/productTree.js
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,59 @@ /** * 产å大类æ ï¼/basic/product/listï¼å·¥å · * * 说æï¼äº§åæ ä¸çº§èç¹æ¯ãæå / åæå / åææãè¿ç±»æ ¹èç¹ï¼å ·ä½äº§å大类æå¨æ ¹èç¹ä¸ã * é¨åä¸å¡æ°å¢æ¶åªå è®¸éæ©æä¸ç±»äº§åï¼å¦éè´å°è´¦åªéåææãç产计ååªéæåï¼ï¼ç¼è¾æ¶è¦ä¿æå®æ´æ ã */ // æ ¹èç¹åç§°ï¼å ¼å®¹ãåææããåæã两ç§å»ºæ³ const RAW_MATERIAL_ROOT_NAMES = ["åææ", "åæ"]; const FINISHED_PRODUCT_ROOT_NAMES = ["æå"]; /** * åèç¹åç§°ï¼æ æ¥å£åæ¶è¿å label ä¸ productNameï¼ * @param {object} node æ èç¹ * @returns {string} èç¹åç§° */ const getNodeLabel = node => String(node?.label ?? node?.productName ?? "").trim(); /** * 夿èç¹åç§°æ¯å¦å½ä¸æå®çæ ¹èç¹åç§°ï¼å®å ¨ç¸åæä»¥è¯¥åç§°å¼å¤´ï¼ * @param {object} node æ èç¹ * @param {Array<string>} rootNames å è®¸çæ ¹èç¹åç§° * @returns {boolean} æ¯å¦å½ä¸ */ const isRootNodeNamed = (node, rootNames) => { const label = getNodeLabel(node); if (!label) { return false; } return rootNames.some(name => label === name || label.startsWith(name)); }; /** * åªä¿çæå®åç§°æ ¹èç¹ä¸çäº§åæ ï¼ç¨äºæ°å¢åºæ¯ * @param {Array} tree æ¥å£è¿åçäº§åæ * @param {Array<string>} rootNames å è®¸çæ ¹èç¹åç§° * @returns {Array} è¿æ»¤åçæ ï¼ä¸æ¹å¨åæ°æ®ï¼ç¼è¾åºæ¯ç´æ¥ä¼ åæ å³å¯ï¼ */ export const filterProductTreeByRoot = (tree, rootNames = []) => (Array.isArray(tree) ? tree : []).filter(node => isRootNodeNamed(node, rootNames) ); /** * åªä¿çãåææãæ ¹èç¹ä¸çäº§åæ * @param {Array} tree æ¥å£è¿åçäº§åæ * @returns {Array} è¿æ»¤åçæ */ export const filterRawMaterialTree = tree => filterProductTreeByRoot(tree, RAW_MATERIAL_ROOT_NAMES); /** * åªä¿çãæåãæ ¹èç¹ä¸çäº§åæ * @param {Array} tree æ¥å£è¿åçäº§åæ * @returns {Array} è¿æ»¤åçæ */ export const filterFinishedProductTree = tree => filterProductTreeByRoot(tree, FINISHED_PRODUCT_ROOT_NAMES); src/views/procurementManagement/procurementLedger/index.vue
@@ -547,7 +547,7 @@ filterable check-strictly @change="getModels" :data="productOptions" :data="productFormOptions" :render-after-expand="false" style="width: 100%" /> </el-form-item> @@ -705,6 +705,7 @@ onMounted, reactive, toRefs, computed, getCurrentInstance, nextTick, } from "vue"; @@ -762,6 +763,7 @@ import dayjs from "dayjs"; import FileUpload from "@/components/AttachmentUpload/file/index.vue"; import { roundHalfUp, trimZeros } from "@/utils/formatNumber.js"; import { filterRawMaterialTree } from "@/utils/productTree.js"; const userStore = useUserStore(); @@ -959,6 +961,12 @@ // 产å表åå¼¹æ¡æ°æ® const productFormVisible = ref(false); const productOperationType = ref(""); // æ°å¢äº§åæ¶äº§å大类åªå±ç¤ºãåææãï¼ç¼è¾æ¶ä¿æå®æ´äº§åæ const productFormOptions = computed(() => productOperationType.value === "add" ? filterRawMaterialTree(productOptions.value) : productOptions.value ); const productOperationIndex = ref(""); const currentId = ref(""); const productFormData = reactive({ src/views/productionPlan/productionPlan/index.vue
@@ -186,7 +186,7 @@ <el-tree-select v-model="form.productId" placeholder="è¯·éæ©" clearable :data="productOptions" :data="productTreeOptions" :render-after-expand="false" filterable @change="handleProductChange" @@ -283,6 +283,7 @@ exportProductionPlan, } from "@/api/productionPlan/productionPlan.js"; import { productTreeList, modelListPage } from "@/api/basicData/product.js"; import { filterFinishedProductTree } from "@/utils/productTree.js"; import PIMTable from "./components/PIMTable.vue"; import ImportDialog from "@/components/Dialog/ImportDialog.vue"; @@ -510,6 +511,12 @@ const dialogVisible = ref(false); const operationType = ref("add"); // add | edit const productOptions = ref([]); // æ°å¢çäº§è®¡åæ¶äº§ååç§°åªå±ç¤ºãæåãï¼ç¼è¾æ¶ä¿æå®æ´äº§åæ const productTreeOptions = computed(() => operationType.value === "add" ? filterFinishedProductTree(productOptions.value) : productOptions.value ); const specificationOptions = ref([]); const queryRef = ref(null); const formRef = ref(null);