From fb1f8c8bc14bf113645a9558218930bdd0109903 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 24 四月 2026 09:51:56 +0800
Subject: [PATCH] 进销存new 1.协同审批管理不再需要选择审批人 2.审批管理添加审批流联调 3.销售发货、采购台账、销售报价不再需要选择审批人

---
 src/views/salesManagement/salesQuotation/index.vue |  226 ++++++--------------------------------------------------
 1 files changed, 24 insertions(+), 202 deletions(-)

diff --git a/src/views/salesManagement/salesQuotation/index.vue b/src/views/salesManagement/salesQuotation/index.vue
index 01174d7..ee93e46 100644
--- a/src/views/salesManagement/salesQuotation/index.vue
+++ b/src/views/salesManagement/salesQuotation/index.vue
@@ -155,63 +155,6 @@
           </div>
         </el-card>
 
-        <!-- 瀹℃壒浜轰俊鎭� -->
-        <el-card class="form-card" shadow="hover">
-          <template #header>
-            <div class="card-header-wrapper">
-              <el-icon class="card-icon"><UserFilled /></el-icon>
-              <span class="card-title">瀹℃壒浜洪�夋嫨</span>
-              <el-button type="primary" size="small" @click="addApproverNode" class="header-btn">
-                <el-icon><Plus /></el-icon>
-                鏂板鑺傜偣
-              </el-button>
-            </div>
-          </template>
-          <div class="form-content">
-            <el-row>
-              <el-col :span="24">
-                <el-form-item>
-                  <div class="approver-nodes-container">
-                    <div
-                      v-for="(node, index) in approverNodes"
-                      :key="node.id"
-                      class="approver-node-item"
-                    >
-                      <div class="approver-node-label">
-                        <span class="node-step">{{ index + 1 }}</span>
-                        <span class="node-text">瀹℃壒浜�</span>
-                        <el-icon class="arrow-icon"><ArrowRight /></el-icon>
-                      </div>
-                      <el-select
-                        v-model="node.userId"
-                        placeholder="閫夋嫨浜哄憳"
-                        class="approver-select"
-												filterable
-                        clearable
-                      >
-                        <el-option
-                          v-for="user in userList"
-                          :key="user.userId"
-                          :label="user.nickName"
-                          :value="user.userId"
-                        />
-                      </el-select>
-                      <el-button
-                        type="danger"
-                        size="small"
-                        :icon="Delete"
-                        @click="removeApproverNode(index)"
-                        v-if="approverNodes.length > 1"
-                        class="remove-btn"
-                      >鍒犻櫎</el-button>
-                    </div>
-                  </div>
-                </el-form-item>
-              </el-col>
-            </el-row>
-          </div>
-        </el-card>
-
         <!-- 浜у搧淇℃伅 -->
         <el-card class="form-card" shadow="hover">
           <template #header>
@@ -353,14 +296,14 @@
 <script setup>
 import { ref, reactive, computed, onMounted, markRaw, shallowRef } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
-import { Search, Document, UserFilled, Box, EditPen, Plus, ArrowRight, Delete } from '@element-plus/icons-vue'
+import { Search, Document, Box, EditPen, Plus } from '@element-plus/icons-vue'
 import Pagination from '@/components/PIMTable/Pagination.vue'
 import FormDialog from '@/components/Dialog/FormDialog.vue'
 import {getQuotationList,addQuotation,updateQuotation,deleteQuotation} from '@/api/salesManagement/salesQuotation.js'
-import {userListNoPage} from "@/api/system/user.js";
 import {customerList} from "@/api/salesManagement/salesLedger.js";
 import {modelList, productTreeList} from "@/api/basicData/product.js";
 import {listCustomerPrivatePool} from "@/api/basicData/customerFile.js";
+import { userListNoPage } from "@/api/system/user.js";
 
 // 鍝嶅簲寮忔暟鎹�
 const loading = ref(false)
@@ -371,6 +314,7 @@
 })
 
 const quotationList = ref([])
+const userList = ref([])
 const productOptions = ref([]);
 const modelOptions = ref([]);
 const pagination = reactive({
@@ -424,29 +368,12 @@
   })
   return r
 })
-const userList = ref([]);
 const customerOption = ref([]);
-
-// 瀹℃壒浜鸿妭鐐圭浉鍏�
-const approverNodes = ref([
-  { id: 1, userId: null }
-])
-let nextApproverId = 2
 
 const isEdit = ref(false)
 const editId = ref(null)
 const currentQuotation = ref({})
 const formRef = ref()
-
-// 娣诲姞瀹℃壒浜鸿妭鐐�
-function addApproverNode() {
-  approverNodes.value.push({ id: nextApproverId++, userId: null })
-}
-
-// 鍒犻櫎瀹℃壒浜鸿妭鐐�
-function removeApproverNode(index) {
-  approverNodes.value.splice(index, 1)
-}
 
 // 璁$畻灞炴��
 const filteredList = computed(() => {
@@ -478,21 +405,11 @@
   dialogTitle.value = '鏂板鎶ヤ环'
   isEdit.value = false
   resetForm()
-  // 閲嶇疆瀹℃壒浜鸿妭鐐�
-  approverNodes.value = [{ id: 1, userId: null }]
-  nextApproverId = 2
   dialogVisible.value = true
-	let userLists = await userListNoPage();
-	// 鍙鍒堕渶瑕佺殑瀛楁锛岄伩鍏嶅皢缁勪欢寮曠敤鏀惧叆鍝嶅簲寮忓璞�
-	userList.value = (userLists.data || []).map(item => ({
-    userId: item.userId,
-    nickName: item.nickName || '',
-    userName: item.userName || ''
-  }));
-	getProductOptions();
-	listCustomerPrivatePool({current: -1,size:-1}).then((res) => {
-		customerOption.value = res.data.records;
-	});
+  getProductOptions();
+  listCustomerPrivatePool({current: -1,size:-1}).then((res) => {
+    customerOption.value = res.data.records;
+  });
 }
 const getProductOptions = () => {
 	// 杩斿洖 Promise锛屼究浜庣紪杈戞椂 await 纭繚鑳藉弽鏄�
@@ -676,28 +593,7 @@
   form.discountRate = row.discountRate || 0
   form.discountAmount = row.discountAmount || 0
   form.totalAmount = row.totalAmount || 0
-  
-  // 鍙嶆樉瀹℃壒浜�
-  if (row.approveUserIds) {
-    const userIds = row.approveUserIds.split(',')
-    approverNodes.value = userIds.map((userId, idx) => ({
-      id: idx + 1,
-      userId: parseInt(userId.trim())
-    }))
-    nextApproverId = userIds.length + 1
-  } else {
-    approverNodes.value = [{ id: 1, userId: null }]
-    nextApproverId = 2
-  }
-  
-  // 鍔犺浇鐢ㄦ埛鍒楄〃
-  let userLists = await userListNoPage();
-  userList.value = (userLists.data || []).map(item => ({
-    userId: item.userId,
-    nickName: item.nickName || '',
-    userName: item.userName || ''
-  }));
-  
+
   dialogVisible.value = true
 }
 
@@ -784,22 +680,12 @@
         return
       }
 
-      // 瀹℃壒浜哄繀濉牎楠�
-      const hasEmptyApprover = approverNodes.value.some(node => !node.userId)
-      if (hasEmptyApprover) {
-        ElMessage.error('璇蜂负鎵�鏈夊鎵硅妭鐐归�夋嫨瀹℃壒浜猴紒')
-        return
-      }
-      
-      // 鏀堕泦鎵�鏈夎妭鐐圭殑瀹℃壒浜篿d
-      form.approveUserIds = approverNodes.value.map(node => node.userId).join(',')
-      
       // 璁$畻鎵�鏈変骇鍝佺殑鍗曚环鎬诲拰
       form.totalAmount = form.products.reduce((sum, product) => {
         const price = Number(product.unitPrice) || 0
         return sum + price
       }, 0)
-      
+
       if (isEdit.value) {
         // 缂栬緫
         const index = quotationList.value.findIndex(item => item.id === editId.value)
@@ -823,7 +709,7 @@
           }
         })
       }
-      
+
     }
   })
 }
@@ -877,12 +763,23 @@
       pagination.total = res.data.total
     }
   })
-	customerList().then((res) => {
-		customerOption.value = res;
-	});
+	// customerList().then((res) => {
+	// 	customerOption.value = res;
+	// });
+}
+
+const getUserList = async () => {
+  try {
+    const res = await userListNoPage()
+    userList.value = Array.isArray(res?.data) ? res.data : []
+  } catch (error) {
+    userList.value = []
+    ElMessage.error('鍔犺浇涓氬姟鍛樺垪琛ㄥけ璐�')
+  }
 }
 
 onMounted(()=>{
+  getUserList()
   handleSearch()
 })
 </script>
@@ -975,71 +872,6 @@
   }
 }
 
-.approver-nodes-container {
-  display: flex;
-  flex-wrap: wrap;
-  gap: 24px;
-  padding: 12px 0;
-}
-
-.approver-node-item {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  gap: 12px;
-  padding: 16px;
-  background: #f8f9fa;
-  border-radius: 8px;
-  border: 1px solid #e4e7ed;
-  transition: all 0.3s ease;
-  min-width: 180px;
-  
-  &:hover {
-    border-color: #409eff;
-    background: #f0f7ff;
-    box-shadow: 0 2px 8px rgba(64, 158, 255, 0.1);
-  }
-}
-
-.approver-node-label {
-  display: flex;
-  align-items: center;
-  gap: 8px;
-  font-size: 14px;
-  color: #606266;
-  
-  .node-step {
-    display: inline-flex;
-    align-items: center;
-    justify-content: center;
-    width: 24px;
-    height: 24px;
-    background: #409eff;
-    color: #fff;
-    border-radius: 50%;
-    font-size: 12px;
-    font-weight: 600;
-  }
-  
-  .node-text {
-    font-weight: 500;
-  }
-  
-  .arrow-icon {
-    color: #909399;
-    font-size: 14px;
-  }
-}
-
-.approver-select {
-  width: 100%;
-  min-width: 150px;
-}
-
-.remove-btn {
-  margin-top: 4px;
-}
-
 .product-table {
   :deep(.el-table__header) {
     background-color: #f5f7fa;
@@ -1066,14 +898,4 @@
   text-align: right;
 }
 
-// 鍝嶅簲寮忎紭鍖�
-@media (max-width: 1200px) {
-  .approver-nodes-container {
-    gap: 16px;
-  }
-  
-  .approver-node-item {
-    min-width: 160px;
-  }
-}
 </style>

--
Gitblit v1.9.3