From 60b5992752011494493d776b2fe6f2006e02a49d Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期三, 27 八月 2025 14:24:11 +0800
Subject: [PATCH] Merge branch 'feature/0826' into dev_JLMY

---
 src/views/procureMent/index.vue |  149 ++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 115 insertions(+), 34 deletions(-)

diff --git a/src/views/procureMent/index.vue b/src/views/procureMent/index.vue
index 2949e2b..55fd34f 100644
--- a/src/views/procureMent/index.vue
+++ b/src/views/procureMent/index.vue
@@ -16,13 +16,16 @@
     </el-form>
     <el-card>
       <!-- 鎿嶄綔鎸夐挳鍖� -->
-      <el-row :gutter="24" class="table-toolbar">
+      <el-row :gutter="24" class="table-toolbar" justify="space-between">
         <el-button type="primary" :icon="Plus" @click="handleAdd"
           >鏂板缓
         </el-button>
-        <el-button type="danger" :icon="Delete" @click="handleDelete"
-          >鍒犻櫎
+        <el-button type="primary" :icon="Plus" @click="handleAddPayable">
+          娣诲姞搴斾粯娆�
         </el-button>
+        <!-- <el-button type="danger" :icon="Delete" @click="handleDelete"
+          >鍒犻櫎
+        </el-button> -->
       </el-row>
       <!-- 琛ㄦ牸缁勪欢 -->
       <data-table
@@ -35,7 +38,11 @@
         @delete="handleDeleteSuccess"
         :show-selection="true"
         :border="true"
-        style="width: 100%;height: calc(100vh - 26em)"
+        style="width: 100%; height: calc(100vh - 26em)"
+        @viewRow="handleView"
+        :operations="['edit', 'viewRow']"
+        :operationsWidth="200"
+        :show-overflow-tooltip="false"
       />
       <pagination
         v-if="total > 0"
@@ -55,6 +62,14 @@
       @success="handleSuccess"
       ref="productionDialogs"
     />
+    <PayableDialog
+        v-model:dialogPayableFormVisible="dialogPayableFormVisible"
+        v-model:form="formPayable"
+        :title="title"
+        @submit="handleSubmit"
+        @success="payableHandleSuccess"
+        ref="productionDialogs">
+    </PayableDialog>>
   </div>
 </template>
 
@@ -65,17 +80,34 @@
 import DataTable from "@/components/Table/ETable.vue";
 import Pagination from "@/components/Pagination";
 import ProductionDialog from "./components/ProductionDialog.vue";
+import PayableDialog from "../payable/components/PayableDialog.vue";
+
 import {
   purchaseRegistration,
   getSupplyList,
   getCoalInfoList,
+  delPR
 } from "@/api/procureMent";
-
+import { useDelete } from "@/hooks/useDelete";
+const userStore = useUserStore();
+const dictStore = useDictStore()
 import useUserStore from "@/store/modules/user";
+import useDictStore from "@/store/modules/dict"
+
+let userList = ref([]);
+userStore.getUserList().then((res) => {
+  userList.value = res;
+});
+
 // 寮曞叆瀛楀吀鏁版嵁
+
 const { proxy } = getCurrentInstance();
 const dialogFormVisible = ref(false);
-const form = ref({});
+const dialogPayableFormVisible = ref(false);
+const form = ref({
+  taxRate: 13,
+  freight: 20,
+});
 const title = ref("");
 // 鐘舵�佸彉閲�
 const loading = ref(false);
@@ -84,6 +116,7 @@
 const pageSize = ref(10);
 const selectedRows = ref([]);
 const copyForm = ref({});
+const formPayable = ref({});
 // 鏌ヨ鍙傛暟
 const queryParams = reactive({
   searchAll: "",
@@ -100,10 +133,12 @@
 // 鏂规硶瀹氫箟
 const handleQuery = () => {
   loading.value = true;
+	current.value = 1;
+	pageSize.value = 10;
   // 杩欓噷娣诲姞瀹為檯鐨勬煡璇㈤�昏緫
   getList();
 };
-const userStore = useUserStore();
+
 // 鑾峰彇鐢ㄦ埛淇℃伅
 const userInfo = ref({});
 onMounted(async () => {
@@ -130,6 +165,14 @@
     },
   },
   {
+    prop: "type",
+    label: "鐓ゆ枡绫诲瀷",
+    minWidth: 120,
+    formatter: (row) => {
+      return row.type === 1 ? "鎴愬搧" : "鍘熸枡";
+    },
+  },
+  {
     prop: "coalId",
     label: "鐓ょ绫诲瀷",
     minWidth: 120,
@@ -140,9 +183,24 @@
   { prop: "purchaseQuantity", label: "閲囪喘鏁伴噺", minWidth: 100 },
   { prop: "priceIncludingTax", label: "鍗曚环锛堝惈绋庯級", minWidth: 150 },
   { prop: "totalPriceIncludingTax", label: "鎬讳环锛堝惈绋庯級", minWidth: 100 },
+  { prop: "freight", label: "杩愯垂", minWidth: 100 },
   { prop: "taxRate", label: "绋庣巼", minWidth: 100 },
   { prop: "priceExcludingTax", label: "涓嶅惈绋庡崟浠�", minWidth: 100 },
-  { prop: "registrantId", label: "鐧昏浜�", minWidth: 100 },
+  { prop: "registrantId", label: "鐧昏浜�", minWidth: 100,
+    formatter: (row) => {
+      // 鍖归厤鐢ㄦ埛淇℃伅
+      const user = userList.value.find((user) => user.userId === row.registrantId);
+      return user ? user.nickName : "鏈煡鐢ㄦ埛";
+    },
+  },
+  { prop: "purchaseType", label: "绫诲瀷", minWidth: 100 ,
+    formatter: (row) => {
+      if (row.purchaseType == null) {
+        return ""
+      }
+      const dictItem = dictStore.getDictDataByTypeAndValue("purchase_type", row.purchaseType);
+      return dictItem ? dictItem.label : "";    }
+  },
   { prop: "registrationDate", label: "鐧昏鏃ユ湡", minWidth: 100 },
 ]);
 
@@ -150,7 +208,7 @@
 const MatchQuery = (data, name) => {
   const list = name === "supplyRes" ? supplyRes.value.data : coalRes.value.data;
   const item = list.find((items) => items.id == data);
-  return item ? item.coal || item.supplierName  : "";
+  return item ? item.coal || item.supplierName : "";
 };
 // 鑾峰彇渚涘簲鍟嗗垪琛�
 const supplyRes = ref([]);
@@ -173,17 +231,39 @@
   addOrEdit.value = "add";
   handleAddEdit();
 };
+const handleAddPayable = () => {
+  // 鍙湁閫夋嫨涓�琛岀殑鏃跺�欒繘琛屾搷浣�
+
+  if (selectedRows.value.length !== 1) {
+    ElMessage.error("璇烽�変腑涓�琛岃繘琛屽~鍐�")
+    return
+  }
+
+  formPayable.value = {
+    purchaseRegistrationId: selectedRows.value[0].id,
+    registrantId: userInfo.value.userId,
+    ticketNo:"",
+    paymentAmount:"",
+    payableType:"",
+    attachUpload:"",
+    registrationDate: new Date().toISOString().split("T")[0],
+    fileList:[]
+  }
+  dialogPayableFormVisible.value = true
+
+};
+
 // 鏂板缂栬緫
 const productionDialogs = ref(null); // 娣诲姞ref澹版槑
 
 const handleAddEdit = () => {
-  addOrEdit.value == "add" ? (title.value = "鏂板") : (title.value = "缂栬緫");
+  addOrEdit.value == "add" ? (title.value = "鏂板") : addOrEdit.value == "viewRow" ? (title.value = "鏌ョ湅") : (title.value = "缂栬緫");
   title.value = title.value + "閲囪喘淇℃伅";
   openDialog();
 };
 // 鎵撳紑寮圭獥
 const openDialog = () => {
-  if (addOrEdit.value === "edit") {
+  if (addOrEdit.value === "edit" || addOrEdit.value === "viewRow") {
     // 纭繚澶嶅埗涓�浠芥暟鎹紝閬垮厤鐩存帴寮曠敤
     copyForm.value = JSON.parse(JSON.stringify(form.value));
     dialogFormVisible.value = true;
@@ -200,9 +280,11 @@
     totalPriceExcludingTax: "",
     priceIncludingTax: "",
     totalPriceIncludingTax: "",
-    taxRate: "",
-    registrantId: userInfo.value.userName,
+    taxRate: 13,
+    freight:20,
+    registrantId: userInfo.value.userId,
     registrationDate: new Date().toISOString().split("T")[0],
+    purchaseType: ""
   };
   // 鏂板缓鏃朵篃闇�瑕佽缃� copyForm 鐢ㄤ簬閲嶇疆鍔熻兘
   copyForm.value = JSON.parse(JSON.stringify(form.value));
@@ -229,30 +311,23 @@
   addOrEdit.value = "edit";
   handleAddEdit();
 };
-const handleDelete = () => {
-  if (selectedRows.value.length === 0) {
-    ElMessage.warning("璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁");
-    return;
-  }
-  ElMessageBox.confirm(`纭畾鍒犻櫎閫変腑鐨勬暟鎹悧锛焋, "鎻愮ず", {
-    confirmButtonText: "纭畾",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
-    .then(() => {
-      // 妯℃嫙鍒犻櫎鎿嶄綔
-      tableData.value = tableData.value.filter(
-        (item) => !selectedRows.value.includes(item)
-      );
-      total.value = tableData.value.length;
-      ElMessage.success("鍒犻櫎鎴愬姛");
-    })
-    .catch(() => {
-      ElMessage.info("宸插彇娑堝垹闄�");
-    });
+const handleView = (row) => {
+  form.value = JSON.parse(JSON.stringify(row));
+  addOrEdit.value = "viewRow";
+  handleAddEdit();
 };
+// 浣跨敤鍒犻櫎缁勫悎寮忓嚱鏁� - 绠�鍖栫増鏈�
+const { handleDeleteBatch: handleDelete } = useDelete({
+  deleteApi: delPR,
+  selectedRows,
+  tableData,
+  total,
+  confirmText: "纭畾鍒犻櫎閫変腑鐨勯噰璐褰曞悧锛�",
+  useLocalUpdate: true
+});
 const handleDeleteSuccess = (row) => {
   ElMessage.success("鍒犻櫎鎴愬姛锛�" + row.supplierName);
+	handleQuery()
 };
 // 鎴愬姛
 const handleSuccess = (val) => {
@@ -261,6 +336,12 @@
   total.value = tableData.value.length;
   ElMessage.success("鎿嶄綔鎴愬姛");
 };
+
+const payableHandleSuccess = (val) => {
+  ElMessage.success("鎿嶄綔鎴愬姛");
+  dialogPayableFormVisible.value = false;
+}
+
 const getList = async () => {
   loading.value = true;
   try {

--
Gitblit v1.9.3