From bfdfceb60b41a541d9d9087323079bc64c144209 Mon Sep 17 00:00:00 2001
From: chenrui <1187576398@qq.com>
Date: 星期四, 29 五月 2025 13:18:18 +0800
Subject: [PATCH] 客户/供应商修改

---
 src/views/salesManagement/salesLedger/index.vue |  131 ++++++++++++++++++++++++++++++++++++-------
 1 files changed, 110 insertions(+), 21 deletions(-)

diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index 3493cd0..78779b7 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -53,7 +53,7 @@
         <el-table-column label="涓氬姟鍛�" prop="salesman" show-overflow-tooltip/>
         <el-table-column label="椤圭洰鍚嶇О" prop="projectName" show-overflow-tooltip/>
         <el-table-column label="鍚堝悓閲戦(鍏�)" prop="contractAmount" show-overflow-tooltip/>
-        <el-table-column label="褰曞叆浜�" prop="entryPerson" show-overflow-tooltip/>
+        <el-table-column label="褰曞叆浜�" prop="entryPersonName" show-overflow-tooltip/>
         <el-table-column label="褰曞叆鏃ユ湡" prop="entryDate" show-overflow-tooltip/>
         <el-table-column fixed="right" label="鎿嶄綔" min-width="60" align="center">
           <template #default="scope">
@@ -104,7 +104,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="褰曞叆浜猴細" prop="entryPerson">
-              <el-select v-model="form.entryPerson" placeholder="璇烽�夋嫨" clearable>
+              <el-select v-model="form.entryPerson" placeholder="璇烽�夋嫨" clearable @change="changs" disabled>
                 <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId"/>
               </el-select>
             </el-form-item>
@@ -121,6 +121,7 @@
                   type="date"
                   placeholder="璇烽�夋嫨"
                   clearable
+                  disabled
               />
             </el-form-item>
           </el-col>
@@ -193,17 +194,27 @@
         <el-row :gutter="30">
           <el-col :span="24">
             <el-form-item label="浜у搧澶х被锛�" prop="productCategory">
-              <el-select v-model="productForm.productCategory" placeholder="璇烽�夋嫨" clearable>
+              <!-- <el-select v-model="productForm.productCategory" placeholder="璇烽�夋嫨" clearable>
                 <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName"/>
-              </el-select>
+              </el-select> -->
+              <el-tree-select
+                  v-model="productForm.productCategory"
+                  placeholder="璇烽�夋嫨" clearable
+                  check-strictly
+                  @change="getModels"
+                  :data="productOptions"
+                  :render-after-expand="false"
+                  style="width: 100%"
+              />
+
             </el-form-item>
           </el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="24">
-            <el-form-item label="瑙勬牸鍨嬪彿锛�" prop="specificationModel">
-              <el-select v-model="productForm.specificationModel" placeholder="璇烽�夋嫨" clearable>
-                <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName"/>
+            <el-form-item label="瑙勬牸鍨嬪彿锛�" prop="productModelId">
+              <el-select v-model="productForm.productModelId" placeholder="璇烽�夋嫨" clearable @change="getProductModel">
+                <el-option v-for="item in modelOptions" :key="item.id" :label="item.model" :value="item.id"/>
               </el-select>
             </el-form-item>
           </el-col>
@@ -273,8 +284,8 @@
 import { getToken } from "@/utils/auth"
 import pagination from '@/components/PIMTable/Pagination.vue'
 import { ref } from 'vue'
-import {Search} from "@element-plus/icons-vue";
 import {ElMessageBox } from "element-plus";
+import useUserStore from '@/store/modules/user'
 import {userListNoPage} from "@/api/system/user.js";
 import {
   ledgerList,
@@ -283,6 +294,8 @@
   addOrUpdateSalesLedger,
   getSalesLedgerWithProducts, delLedger, addOrUpdateSalesLedgerProduct, delProduct, delLedgerFile
 } from "@/api/salesManagement/salesLedger.js";
+import {modelList, productTreeList} from "@/api/basicData/product.js";
+const userStore = useUserStore()
 const { proxy } = getCurrentInstance()
 const tableData = ref([])
 const productData = ref([])
@@ -290,6 +303,8 @@
 const productSelectedRows = ref([])
 const userList = ref([])
 const customerOption = ref([])
+const productOptions = ref([])
+const modelOptions = ref([])
 const tableLoading = ref(false)
 const page = reactive({
   current: 1,
@@ -382,11 +397,65 @@
       item.children = []
     })
     total.value = res.total
+  }).catch(() => {
+    tableLoading.value = false
   })
+}
+// 鑾峰彇浜у搧澶х被tree鏁版嵁
+const getProductOptions = () => {
+  productTreeList().then(res => {
+    productOptions.value = convertIdToValue(res)
+  })
+}
+// 鑾峰彇tree瀛愭暟鎹�
+const getModels =(value) => {
+  productForm.value.productCategory = findNodeById(productOptions.value, value)
+  modelList({id: value}).then(res => {
+    modelOptions.value = res
+  })
+}
+const getProductModel =(value) => {
+  const index = modelOptions.value.findIndex(item => item.id === value);
+  if (index !== -1) {
+    productForm.value.specificationModel = modelOptions.value[index].model;
+  } else {
+    productForm.value.specificationModel = null;
+  }
+}
+const findNodeById = (nodes, productId) => {
+  for (let i = 0; i < nodes.length; i++) {
+    if (nodes[i].value === productId) {
+      return nodes[i].label; // 鎵惧埌鑺傜偣锛岃繑鍥炶鑺傜偣
+    }
+    if (nodes[i].children && nodes[i].children.length > 0) {
+      const foundNode = findNodeById(nodes[i].children, productId);
+      if (foundNode) {
+        return foundNode.label; // 鍦ㄥ瓙鑺傜偣涓壘鍒帮紝杩斿洖璇ヨ妭鐐�
+      }
+    }
+  }
+  return null; // 娌℃湁鎵惧埌鑺傜偣锛岃繑鍥瀗ull
+};
+function convertIdToValue(data) {
+  return data.map(item => {
+    const { id, children, ...rest } = item;
+    const newItem = {
+      ...rest,
+      value: id // 灏� id 鏀逛负 value
+    };
+    if (children && children.length > 0) {
+      newItem.children = convertIdToValue(children);
+    }
+
+    return newItem;
+  });
 }
 // 琛ㄦ牸閫夋嫨鏁版嵁
 const handleSelectionChange = (selection) => {
-  selectedRows.value = selection
+
+  // 杩囨护鎺夊瓙鏁版嵁
+  selectedRows.value = selection.filter(item => item.children !== undefined);
+  console.log('selection',selectedRows.value)
 }
 const productSelected = (selectedRows) => {
   productSelectedRows.value = selectedRows
@@ -400,7 +469,7 @@
       productList({salesLedgerId: row.id, type: 1}).then(res => {
       const index = tableData.value.findIndex(item => item.id === row.id);
       if (index > -1) {
-        tableData.value[index].children = res.rows;
+        tableData.value[index].children = res;
       }
       expandedRowKeys.value.push(row.id)
     })
@@ -458,16 +527,16 @@
   return sums;
 }
 // 鎵撳紑寮规
-const openForm = (type, row) => {
+const openForm = async (type, row) => {
   operationType.value = type
   form.value = {}
   productData.value = []
-  userListNoPage().then(res => {
-    userList.value = res.data
-  })
+  let userLists = await userListNoPage()
+  userList.value = userLists.data
   customerList().then(res => {
     customerOption.value = res
   })
+  form.value.entryPerson = userStore.id
   if (type === 'edit') {
     currentId.value = row.id;
     getSalesLedgerWithProducts({id: row.id, type: 1}).then(res => {
@@ -476,12 +545,22 @@
       fileList.value = form.value.salesLedgerFiles
     })
   }
+  let userAll = await userStore.getInfo()
+  userList.value.forEach(element => {
+    if(userAll.user.nickName === element.nickName && userAll.user.userName === element.userName) {
+      form.value.entryPerson = userAll.user.userId // 璁剧疆榛樿涓氬姟鍛樹负褰撳墠鐢ㄦ埛
+    }
+  });
+  form.value.entryDate = getCurrentDate() // 璁剧疆榛樿褰曞叆鏃ユ湡涓哄綋鍓嶆棩鏈�
   dialogFormVisible.value = true
+}
+function changs(val){
+  console.log(val);
 }
 // 涓婁紶鍓嶆牎妫�
 function handleBeforeUpload(file) {
   // 鏍℃鏂囦欢澶у皬
-  if (file.size > 1024 * 1024) {
+  if (file.size > 1024 * 1024 * 10) {
     proxy.$modal.msgError('涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃10MB!')
     return false
   }
@@ -506,8 +585,6 @@
 }
 // 绉婚櫎鏂囦欢
 function handleRemove (file) {
-  console.log('handleRemove', file)
-  console.log('operationType.value', operationType.value)
   if (operationType.value === 'edit') {
     let ids = []
     ids.push(file.id)
@@ -554,6 +631,7 @@
     productForm.value = {...row}
   }
   productFormVisible.value = true
+  getProductOptions()
 }
 // 鎻愪氦浜у搧琛ㄥ崟
 const submitProduct = () => {
@@ -573,7 +651,7 @@
   addOrUpdateSalesLedgerProduct(productForm.value).then(res => {
     proxy.$modal.msgSuccess("鎻愪氦鎴愬姛")
     closeProductDia()
-    getSalesLedgerWithProducts({id: currentId.value}).then(res => {
+    getSalesLedgerWithProducts({id: currentId.value, type: 1}).then(res => {
       productData.value = res.productData
     })
   })
@@ -607,14 +685,14 @@
       delProduct(ids).then(res => {
         proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛")
         closeProductDia()
-        getSalesLedgerWithProducts({id: currentId.value}).then(res => {
+        getSalesLedgerWithProducts({id: currentId.value, type: 1}).then(res => {
           productData.value = res.productData
         })
       })
     }).catch(() => {
       proxy.$modal.msg("宸插彇娑�")
     })
-    
+
   }
 }
 // 鍏抽棴浜у搧寮规
@@ -662,9 +740,20 @@
     proxy.$modal.msg("宸插彇娑�")
   })
 }
+// 鑾峰彇褰撳墠鏃ユ湡骞舵牸寮忓寲涓� YYYY-MM-DD
+function getCurrentDate() {
+  const today = new Date();
+  const year = today.getFullYear();
+  const month = String(today.getMonth() + 1).padStart(2, '0'); // 鏈堜唤浠�0寮�濮�
+  const day = String(today.getDate()).padStart(2, '0');
+  return `${year}-${month}-${day}`;
+}
+const mathNum = (val) => {
+  productForm.value.taxExclusiveTotalPrice = proxy.calculateTaxExclusiveTotalPrice(val, productForm.value.taxRate)
+}
 getList()
 </script>
 
 <style scoped lang="scss">
 
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.3