From 89fd2cf7202c321512c2ea699a3a220a7138ed44 Mon Sep 17 00:00:00 2001
From: wujianwei <wjw@11.com>
Date: 星期四, 09 四月 2026 10:40:52 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/cwxt_master' into cwxt_master

---
 ui/admin-ui3/src/views/cwgl/payableFeeManagement/index.vue |  298 ++++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 233 insertions(+), 65 deletions(-)

diff --git a/ui/admin-ui3/src/views/cwgl/payableFeeManagement/index.vue b/ui/admin-ui3/src/views/cwgl/payableFeeManagement/index.vue
index 60af6d6..d9b6ea3 100644
--- a/ui/admin-ui3/src/views/cwgl/payableFeeManagement/index.vue
+++ b/ui/admin-ui3/src/views/cwgl/payableFeeManagement/index.vue
@@ -15,23 +15,26 @@
         <!-- <el-button type="danger" icon="Delete" :disabled="pageF.multiple" @click="handleDelete"
           v-hasPermi="['cwgl:payableFeeManagement:remove']">鍒犻櫎
         </el-button> -->
+        <el-button type="success" :disabled="selectDisplay" v-hasPermi="['cwgl:payableFeeManagement:edit']"
+          @click="handleBill">鐢熸垚搴斾粯璐﹀崟
+        </el-button>
         <el-button type="warning" plain icon="Download" @click="handleExport"
           v-hasPermi="['cwgl:payableFeeManagement:export']">瀵煎嚭
         </el-button>
-          <el-button type="warning" plain icon="Upload" @click="handleImport"
+        <!-- <el-button type="warning" plain icon="Upload" @click="handleImport"
           v-hasPermi="['cwgl:payableFeeManagement:import']">瀵煎叆
-        </el-button>
+        </el-button> -->
       </template>
 
       <template #menu="{ size, row, index }">
-        <!-- <el-link class="link-btn" type="primary" :underline="false" plain :size="size" icon="View"
-          @click="handleExamine(row)" v-hasPermi="['cwgl:receivableFeeManagement:view']"> 鏌ョ湅
-        </el-link> -->
-        <el-link class="link-btn" type="primary" :underline="false" plain :size="size" icon="el-icon-edit"
-          @click="handleEdit(row)" v-hasPermi="['cwgl:payableFeeManagement:edit']"> 缂栬緫
+        <el-link class="link-btn" type="primary" :underline="false" plain :size="size" icon="View"
+          @click="handleExamine(row)" v-hasPermi="['cwgl:payableFeeManagement:view']"> 鏌ョ湅
         </el-link>
-        <el-link class="link-btn" type="primary" :underline="false" plain :size="size" @click="handleCancellation(row)"
-          v-hasPermi="['cwgl:payableFeeManagement:invalid']"> 浣滃簾
+        <el-link class="link-btn" type="primary" v-if="row.status == 0" :underline="false" plain :size="size"
+          icon="el-icon-edit" @click="handleEdit(row)" v-hasPermi="['cwgl:payableFeeManagement:edit']"> 缂栬緫
+        </el-link>
+        <el-link class="link-btn" type="primary" v-if="row.status == 0" :underline="false" plain :size="size"
+          @click="handleCancellation(row)" v-hasPermi="['cwgl:payableFeeManagement:invalid']"> 浣滃簾
         </el-link>
         <el-button type="text" icon="View" @click="handleFlow(row)"
           v-hasPermi="['cwgl:payableFeeManagement:flow']">鏃ュ織</el-button>
@@ -40,23 +43,28 @@
   </basicContainer>
   <FeeDetailModal ref="modalRef" :type="currentType" @submit="handleSave" />
   <OperationLogModal ref="logModalRef" />
-
-    <XlsFileImport title="搴斾粯淇℃伅瀵煎叆" uploadUrl="/asset/management/importData" templateUrl="asset/management/importTemplate"
-      :open="pageF.importOpen" @submit="importSubmit" @cancel="pageF.importOpen = false" />
-
-
+  <GenerateBillDialog ref="billDialogRef" @confirm="onBillConfirm" />
+  <DetailModal ref="detailModalRef" />
+  <XlsFileImport title="搴旀敹淇℃伅瀵煎叆" uploadUrl="/asset/management/importData" templateUrl="asset/management/importTemplate"
+    :open="pageF.importOpen" @submit="importSubmit" @cancel="pageF.importOpen = false" />
 </template>
 
 <script setup name="payableFeeManagement" lang="ts">
-import { PayableFeeManagementI, addPayableFeeManagement, delPayableFeeManagement, exportPayableFeeManagement, getPayableFeeManagement, listPayableFeeManagement, updatePayableFeeManagement } from "@/api/cwgl/payableFeeManagement";
+import {
+  PayableFeeManagementI, addPayableFeeManagement, delPayableFeeManagement, exportPayableFeeManagement, getPayableFeeManagement, listPayableFeeManagement, updatePayableFeeManagement,
+  payableFeeManagementVoid, getPayableFeeManagementStatistics, addpayableFeeManagementCreateBill
+} from "@/api/cwgl/payableFeeManagement";
 import useCurrentInstance from "@/utils/useCurrentInstance";
 import { computed, reactive, ref, toRefs } from "vue";
 import { PagesInterface, PageQueryInterface } from "@/utils/globalInterface";
 import { usePagePlus } from "@/hooks/usePagePlus";
 import { hasPermission } from "@/utils/permissionUtils";
-import FeeDetailModal from '@/components/FeeDetailModal/index.vue';
-import OperationLogModal from '@/components/OperationLogModal/index.vue';
 
+import FeeDetailModal from '@/components/FeeDetailModal/index.vue';
+import GenerateBillDialog from '@/components/GenerateBillDialog/index.vue';
+import DetailModal from '@/components/DetailModal/index.vue';
+import OperationLogModal from '@/components/OperationLogModal/index.vue';
+import { listPayableFeeManagementLog } from "@/api/cwgl/payableFeeManagementLog";
 
 const { proxy } = useCurrentInstance();
 const crudRef = ref();
@@ -79,14 +87,19 @@
     currentPage: 1,
   },
   selectionList: [],
+  selectDisplay: true,
 })
-const { queryParams, form, page, selectionList } = toRefs(data);
+const { queryParams, form, page, selectionList, selectDisplay } = toRefs(data);
 const option = ref({
   pageKey: 'PayableFeeManagement',
   rowKey: 'id',
+  searchSpan: 5,
+  addBtn: false,
+  editBtn: false,
+  viewBtn: false,
+  delBtn: false,
   labelWidth: 150,
   searchLabelWidth: 120,
-  addBtn: false,
   column: {
     // id: {
     //   label: 'ID1',
@@ -149,6 +162,23 @@
         }
       ],
     },
+    payableAmountStr: {
+      label: '搴斾粯閲戦',
+      // label: '搴斾粯閲戦鎻忚堪',
+
+      minWidth: 150,
+      search: true,
+      formatter: (row) => {
+        if (!row.payableAmountStr) return '-';
+        // 灏嗙┖鏍兼浛鎹负鎹㈣绗︺�傚鏋滃悗绔繑鍥炵殑鏄� "0娓竵 2420浜烘皯甯�"
+        // 鎴戜滑灏嗗叾杞崲涓� "0娓竵\n2420浜烘皯甯�"
+        return row.payableAmountStr.replace(/\s+/g, '\n');
+      },
+      styles: {
+        whiteSpace: 'pre-wrap',
+        lineHeight: '1.5'
+      },
+    },
     documentNo: {
       label: '鍗曟嵁缂栧彿',
       search: true,
@@ -161,14 +191,16 @@
         }
       ],
     },
+
     isInternalSettlement: {
       label: '鏄惁鍐呴儴缁撶畻',
       search: true,
-      minWidth: 150,
+      minWidth: 120,
+      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_whether_type',
       rules: [
         {
           required: true,
-          message: "鏄惁鍐呴儴缁撶畻涓嶈兘涓虹┖", trigger: "blur"
+          message: "鍗曟嵁绫诲瀷涓嶈兘涓虹┖", trigger: "change"
         }
       ],
     },
@@ -207,6 +239,19 @@
         }
       ],
     },
+    businessTimeArray: {
+      label: '涓氬姟鍙戠敓鏃堕棿',
+      minWidth: 150,
+      search: true,
+      searchRange: true,
+      addDisplay: false,  // 鏂板鏃朵笉鏄剧ず
+      editDisplay: false, // 淇敼鏃朵笉鏄剧ず
+      type: 'daterange',
+      startPlaceholder: '寮�濮嬫棩鏈�',
+      endPlaceholder: '缁撴潫鏃ユ湡',
+      valueFormat: 'YYYY-MM-DD',
+      hide: true
+    },
     payableConfirmTime: {
       label: '搴斾粯纭鏃堕棿',
       minWidth: 150,
@@ -218,17 +263,30 @@
         }
       ],
     },
-    payableAmount: {
-      label: '搴斾粯閲戦',
+    payableConfirmTimeArray: {
+      label: '搴斾粯纭鏃堕棿',
       minWidth: 150,
-
-      rules: [
-        {
-          required: true,
-          message: "搴斾粯閲戦涓嶈兘涓虹┖", trigger: "blur"
-        }
-      ],
+      search: true,
+      searchRange: true,
+      addDisplay: false,  // 鏂板鏃朵笉鏄剧ず
+      editDisplay: false, // 淇敼鏃朵笉鏄剧ず
+      type: 'daterange',
+      startPlaceholder: '寮�濮嬫棩鏈�',
+      endPlaceholder: '缁撴潫鏃ユ湡',
+      valueFormat: 'YYYY-MM-DD',
+      hide: true
     },
+    // payableAmount: {
+    //   label: '搴斾粯閲戦',
+    //   minWidth: 150,
+
+    //   rules: [
+    //     {
+    //       required: true,
+    //       message: "搴斾粯閲戦涓嶈兘涓虹┖", trigger: "blur"
+    //     }
+    //   ],
+    // },
 
     // remark: {
     //   label: '澶囨敞',
@@ -243,6 +301,18 @@
       minWidth: 150,
 
     },
+    createdTimeArray: {
+      label: '鍒涘缓鏃堕棿',
+      search: true,
+      searchRange: true,
+      addDisplay: false,  // 鏂板鏃朵笉鏄剧ず
+      editDisplay: false, // 淇敼鏃朵笉鏄剧ず
+      type: 'daterange',
+      startPlaceholder: '寮�濮嬫棩鏈�',
+      endPlaceholder: '缁撴潫鏃ユ湡',
+      valueFormat: 'YYYY-MM-DD',
+      hide: true
+    },
     updateBy: {
       label: '鏇存柊浜�',
       minWidth: 150,
@@ -253,10 +323,24 @@
       minWidth: 150,
 
     },
+    updateTimeArray: {
+      label: '鏇存柊鏃堕棿',
+      search: true,
+      searchRange: true,
+      addDisplay: false,  // 鏂板鏃朵笉鏄剧ず
+      editDisplay: false, // 淇敼鏃朵笉鏄剧ず
+      type: 'daterange',
+      startPlaceholder: '寮�濮嬫棩鏈�',
+      endPlaceholder: '缁撴潫鏃ユ湡',
+      valueFormat: 'YYYY-MM-DD',
+      hide: true
+    },
     status: {
+      search: true,
       label: '鐘舵��',
-      minWidth: 150,
-
+      fixed: 'right',
+      minWidth: 120,
+      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_charge',
     },
     // deleted: {
     //   label: '鍒犻櫎鏍囪(0:姝e父;1:鍒犻櫎)',
@@ -280,9 +364,46 @@
     handleUpdateFunc: () => {
       crudRef.value.rowEdit(selectionList.value[0]);
     },
+
     handleSelectionChangeFunc: (selection: any) => {
+      // 鍋囪浣犺瀵规瘮鐨勫瓧娈靛悕鏄� customerFullName   isInternalSettlement internalSettlementUnit
+
+      // 1. 鏁扮粍闀垮害蹇呴』澶т簬 0
+      if (selection && selection.length > 0) {
+        // 鍙栧嚭绗竴椤逛綔涓哄姣斿熀鍑�
+        const firstItem = selection[0];
+
+        // 2. 妫�鏌ユ瘡涓�椤规槸鍚﹂兘涓庣涓�椤圭殑涓変釜鍏抽敭瀛楁瀹屽叏涓�鑷�
+        const isAllMatch = selection.every(item =>
+          item.internalSettlementUnit === firstItem.internalSettlementUnit &&
+          item.supplierName === firstItem.supplierName &&
+          item.status == 0
+        );
+        // 濡傛灉鍏ㄩ儴鍖归厤锛宻electDisplay 涓� false锛屽惁鍒欎负 true
+        selectDisplay.value = !isAllMatch;
+      } else {
+        // 3. 濡傛灉鏁扮粍涓虹┖锛屾牴鎹綘鐨勯�昏緫閫氬父杩斿洖 true (鍗充笉鏄剧ず鎴栫鐢�)
+        selectDisplay.value = true;
+      }
       selectionList.value = selection;
+    },
+    getBeginListFunc: (params = {}) => {
+      // 鍒涘缓鏂板弬鏁板璞�
+      let newParams = { ...params };
+      newParams = proxy.addDateRangeNew(newParams, newParams?.createdTimeArray, 'createTime') || [];
+      newParams = proxy.addDateRangeNew(newParams, newParams?.updateTimeArray, 'updateTime') || [];
+      newParams = proxy.addDateRangeNew(newParams, newParams?.businessTimeArray, 'businessTime') || [];
+      newParams = proxy.addDateRangeNew(newParams, newParams?.payableConfirmTimeArray, 'payableConfirmTime') || [];
+
+      delete newParams.createdTimeArray;
+      delete newParams.updateTimeArray;
+      delete newParams.businessTimeArray;
+      delete newParams.payableConfirmTimeArray;
+
+      queryParams.value = newParams;
+      return newParams;
     }
+
   })
 
 const modalRef = ref(null);
@@ -298,11 +419,11 @@
 const handleEdit = (row) => {
   currentType.value = 'payable';
   addIshorw.value = false;
-  // getReceivableFeeManagement(row.id).then((res) => {
-  //   if (res.code === 200) {
-  //     modalRef.value.open(res.data);
-  //   }
-  // });
+  getPayableFeeManagement(row.id).then((res) => {
+    if (res.code === 200) {
+      modalRef.value.open(res.data);
+    }
+  });
 
 };
 /* 鏂板缂栬緫 */
@@ -310,24 +431,24 @@
   if (addIshorw.value) {
     data.payableFeeDetailList = payableFeeDetailList;
     data.status = '0';
-    // addReceivableFeeManagement(data).then((res) => {
-    //   if (res.code === 200) {
-    //     proxy.$message.success(res.msg);
-    //     onLoad(page.value);
-    //     modalRef.value.canceleClick();
+    addPayableFeeManagement(data).then((res) => {
+      if (res.code === 200) {
+        proxy.$message.success(res.msg);
+        onLoad(page.value);
+        modalRef.value.canceleClick();
 
-    //   }
-    // })
+      }
+    })
   } else {
     data.payableFeeDetailList = payableFeeDetailList;
-    // updateReceivableFeeManagement(data).then((res) => {
-    //   if (res.code === 200) {
-    //     proxy.$message.success(res.msg);
-    //     onLoad(page.value);
-    //     modalRef.value.canceleClick();
+    updatePayableFeeManagement(data).then((res) => {
+      if (res.code === 200) {
+        proxy.$message.success(res.msg);
+        onLoad(page.value);
+        modalRef.value.canceleClick();
 
-    //   }
-    // })
+      }
+    })
   }
 };
 /* 瀵煎叆 */
@@ -346,24 +467,71 @@
     cancelButtonText: '鍙栨秷',
     type: 'warning'
   }).then(() => {
-    // delReceivableFeeManagement(row.id).then((res) => {
-    //   if (res.code === 200) {
-    //     proxy.$message.success(res.msg);
-    //     onLoad(page.value);
-    //   }
-    // });
+    payableFeeManagementVoid(row.id).then((res) => {
+      if (res.code === 200) {
+        proxy.$message.success(res.msg);
+        onLoad(page.value);
+      }
+    });
   })
+};
+const detailModalRef = ref(null);
+const handleExamine = (row) => {
+  getPayableFeeManagement(row.id).then((res) => {
+    if (res.code === 200) {
+      detailModalRef.value.open(res.data, 'payable');
+    }
+  });
+
 };
 /* 鏃ュ織 */
 const logModalRef = ref(null);
 const handleFlow = (row: any) => {
-// 杩欓噷鍙互浠� row 涓洿鎺ヨ幏鍙栨棩蹇楋紝鎴栬�呰皟鐢ㄥ悗绔帴鍙f煡璇�
-  // 绀轰緥妯℃嫙鏁版嵁
-  const mockLogs = [
-    { createBy: 'admin', createTime: '2025-12-19 10:00:00', type: 'add', description: '鍒涘缓搴旀敹鍗曟嵁' },
-    { createBy: '璐㈠姟涓撳憳01', createTime: '2025-12-19 14:30:00', type: 'edit', description: '淇敼搴旀敹閲戦涓� 1000.00' }
-  ];
-  
-  logModalRef.value.open(mockLogs);
+  listPayableFeeManagementLog({ payableFeeId: row.id }).then((res) => {
+    if (res.code == 200) {
+      logModalRef.value.open(res.rows, 'receivable');
+
+    }
+  });
 }
+/*  */
+const billDialogRef = ref(null);
+const handleBill = () => {
+  const ids = selectionList.value.map(item => item.id).join(',');
+  getPayableFeeManagementStatistics(ids).then((res) => {
+    if (res.code === 200) {
+      // 鎵撳紑寮圭獥骞朵紶鍏ユ暟鎹�
+      billDialogRef.value.open(res.data, selectionList.value, 'payable');
+    }
+  });
+
+};
+
+const onBillConfirm = (statisticsData, obj: any) => {
+  const payload = {
+    billType: obj.billType,
+    billName: obj.billName,
+    statisticsData: statisticsData,
+    customerName: selectionList.value[0].customerName,
+    isInternalSettlement: selectionList.value[0].isInternalSettlement,
+    internalSettlementUnit: selectionList.value[0].internalSettlementUnit,
+    supplierName: selectionList.value[0].supplierName,
+
+  };
+  addpayableFeeManagementCreateBill(payload).then((res) => {
+    if (res.code === 200) {
+      proxy.$message.success(res.msg);
+      billDialogRef.value.cancel();
+      onLoad(page.value);
+    }
+  });
+
+};
 </script>
+<style scoped>
+/* 纭繚 el-table 鑳藉璇嗗埆鎹㈣绗� */
+:deep(.el-table .cell) {
+  white-space: pre-wrap !important;
+  word-break: break-all;
+}
+</style>

--
Gitblit v1.8.0