From 8194a67f3b9248cc80137c78bd3e005949ec38dc Mon Sep 17 00:00:00 2001
From: wujianwei <wjw@11.com>
Date: 星期二, 23 十二月 2025 17:48:44 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/cwxt_master' into cwxt_master

---
 ui/admin-ui3/src/views/cwgl/receivableBillManagement/index.vue |  599 +++++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 377 insertions(+), 222 deletions(-)

diff --git a/ui/admin-ui3/src/views/cwgl/receivableBillManagement/index.vue b/ui/admin-ui3/src/views/cwgl/receivableBillManagement/index.vue
index 5a0b088..4cb4a1d 100644
--- a/ui/admin-ui3/src/views/cwgl/receivableBillManagement/index.vue
+++ b/ui/admin-ui3/src/views/cwgl/receivableBillManagement/index.vue
@@ -1,245 +1,400 @@
 <template>
-  <basicContainer >
-    <avue-crud
-        :option="option"
-        :table-loading="pageF.loading"
-        :data="tableData"
-        :page="page"
-        :permission="permissionList"
-        :before-open="beforeOpen"
-        v-model="form"
-        ref="crudRef"
-        @row-update="rowUpdate"
-        @row-save="rowSave"
-        @refresh-change="refreshChange"
-        @row-del="rowDel"
-        @search-change="searchChange"
-        @search-reset="searchReset"
-        @selection-change="selectionChange"
-        @current-change="currentChange"
-        @size-change="sizeChange"
-        @on-load="onLoad"
-    >
+  <basicContainer>
+    <avue-crud :option="option" :table-loading="pageF.loading" :data="tableData" :page="page"
+      :permission="permissionList" :before-open="beforeOpen" v-model="form" ref="crudRef" @row-update="rowUpdate"
+      @row-save="rowSave" @refresh-change="refreshChange" @row-del="rowDel" @search-change="searchChange"
+      @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
+      @size-change="sizeChange" @on-load="onLoad">
       <template #menu-left>
-        <el-button
-            type="success"
-            icon="Edit"
-            :disabled="pageF.single"
-            v-hasPermi="['cwgl:receivableBillManagement:edit']"
-            @click="handleUpdate">淇敼
+        <!-- <el-button type="success" icon="Edit" :disabled="pageF.single"
+          v-hasPermi="['cwgl:receivableBillManagement:edit']" @click="handleUpdate">淇敼
         </el-button>
-        <el-button
-            type="danger"
-            icon="Delete"
-            :disabled="pageF.multiple"
-            @click="handleDelete"
-            v-hasPermi="['cwgl:receivableBillManagement:remove']"
-        >鍒犻櫎
+        <el-button type="danger" icon="Delete" :disabled="pageF.multiple" @click="handleDelete"
+          v-hasPermi="['cwgl:receivableBillManagement:remove']">鍒犻櫎
+        </el-button> -->
+        <el-button type="warning" plain icon="Download" @click="handleExport"
+          v-hasPermi="['cwgl:receivableBillManagement:export']">瀵煎嚭
         </el-button>
-        <el-button
-            type="warning"
-            plain
-            icon="Download"
-            @click="handleExport"
-            v-hasPermi="['cwgl:receivableBillManagement:export']"
-        >瀵煎嚭
-        </el-button>
+      </template>
+      <template #menu="{ size, row, index }">
+        <el-link class="link-btn" type="primary" v-if="row.status == 0 || row.status == 1" :underline="false" plain :size="size" @click="handleSettle(row)"
+          v-hasPermi="['cwgl:receivableBillManagement:view']"> 缁撶畻
+        </el-link>
+        <el-link class="link-btn" type="primary" v-if="row.status == 0 || row.status == 1|| row.status == 3" :underline="false" plain :size="size" @click="handleViewHistory(row)"
+          v-hasPermi="['cwgl:receivableBillManagement:view']"> 缁撶畻鏄庣粏
+        </el-link>
+        <el-link class="link-btn" type="primary" :underline="false" plain :size="size" @click="handleViewFeeDetail(row)"
+          v-hasPermi="['cwgl:receivableBillManagement:view']"> 璇︽儏
+        </el-link>
+        <!-- <el-link class="link-btn" v-if="row.status == 0" type="primary" :underline="false" plain :size="size"
+          icon="el-icon-edit" @click="handleEdit(row)" v-hasPermi="['cwgl:receivableFeeManagement:edit']"> 缂栬緫
+        </el-link> -->
+        <el-link class="link-btn" v-if="row.status == 0" type="primary"
+        :underline="false"
+          plain @click="handleInvalid(row)" v-hasPermi="['cwgl:receivableBillManagement:invalid']"> 浣滃簾
+        </el-link>
+
+        <el-button type="text" icon="View" @click="handleFlow(row)"
+          v-hasPermi="['cwgl:receivableBillManagement:flow']">鏃ュ織</el-button>
+
       </template>
     </avue-crud>
   </basicContainer>
+
+  <SettlementDialog ref="settleDialogRef" :type="currentType" @success="handleRefresh" />
+  <BillSettlementHistory ref="historyRef" :type="activeType" />
+  <NestedDetailDialog ref="feeDetailRef" :type="activeType" />
+  <OperationLogModal ref="logModalRef" />
+
 </template>
 
 <script setup name="receivableBillManagement" lang="ts">
-  import {ReceivableBillManagementI,addReceivableBillManagement, delReceivableBillManagement, exportReceivableBillManagement, getReceivableBillManagement, listReceivableBillManagement, updateReceivableBillManagement} from "@/api/cwgl/receivableBillManagement";
-  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 { ReceivableBillManagementI, addReceivableBillManagement, delReceivableBillManagement, exportReceivableBillManagement, getReceivableBillManagement, listReceivableBillManagement, updateReceivableBillManagement,receivableBillManagementVoid } from "@/api/cwgl/receivableBillManagement";
+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 SettlementDialog from '@/components/SettlementDialog/index.vue';
+import BillSettlementHistory from '../../../components/BillSettlementHistory/index.vue';
+import NestedDetailDialog from '../../../components/NestedDetailDialog/index.vue';
+import OperationLogModal from '@/components/OperationLogModal/index.vue';
+  import { listReceivableBillManagementLog} from "@/api/cwgl/receivableBillManagementLog";
 
-  const { proxy } = useCurrentInstance();
-  const crudRef = ref();
+import { addReceivableBillSettlementDetail, } from "@/api/cwgl/receivableBillSettlementDetail";
+const { proxy } = useCurrentInstance();
+const crudRef = ref();
 
-  const permissionList = computed(()=>{
-    return {
-      addBtn: hasPermission(["cwgl:receivableBillManagement:add"]),
-      delBtn: hasPermission(["cwgl:receivableBillManagement:remove"]),
-      editBtn: hasPermission(["cwgl:receivableBillManagement:edit"]),
-      viewBtn: hasPermission(["cwgl:receivableBillManagement:query"]),
-    }
-  })
+const permissionList = computed(() => {
+  return {
+    addBtn: hasPermission(["cwgl:receivableBillManagement:add"]),
+    delBtn: hasPermission(["cwgl:receivableBillManagement:remove"]),
+    editBtn: hasPermission(["cwgl:receivableBillManagement:edit"]),
+    viewBtn: hasPermission(["cwgl:receivableBillManagement:query"]),
+  }
+})
 
-  const data = reactive({
-    form:<ReceivableBillManagementI>{},
-    queryParams:<ReceivableBillManagementI&PageQueryInterface>{},
-    page: <PagesInterface>{
-      pageSize: 10,
-      total: 0,
-      currentPage: 1,
+const data = reactive({
+  form: <ReceivableBillManagementI>{},
+  queryParams: <ReceivableBillManagementI & PageQueryInterface>{},
+  page: <PagesInterface>{
+    pageSize: 10,
+    total: 0,
+    currentPage: 1,
+  },
+  selectionList: [],
+})
+const { queryParams, form, page, selectionList } = toRefs(data);
+const option = ref({
+  pageKey: 'ReceivableBillManagement',
+  rowKey: 'id',
+  labelWidth: 150,
+  delBtn: false,
+  addBtn: false,
+  viewBtn: false,
+  editBtn: false,
+  searchLabelWidth: 120,
+  column: {
+    // id: {
+    //   label: 'ID',
+    // },
+    systemNo: {
+      label: '绯荤粺缂栧彿',
+      minWidth: 150,
+      search: true,
+
+      rules: [
+        {
+          required: true,
+          message: "绯荤粺缂栧彿涓嶈兘涓虹┖", trigger: "blur"
+        }
+      ],
     },
-    selectionList:[],
-  })
-  const {queryParams,form,page,selectionList} = toRefs(data);
-  const option = ref({
-    pageKey: 'ReceivableBillManagement',
-    rowKey: 'id',
-    column: {
-                                id: {
-          label: 'ID',
-                            },
-                                systemNo: {
-          label: '绯荤粺缂栧彿',
-                                rules: [
-              {
-                required: true,
-                message: "绯荤粺缂栧彿涓嶈兘涓虹┖", trigger: "blur" }
-            ],                  },
-                                billName: {
-          label: '璐﹀崟鍚嶇О',
-                                rules: [
-              {
-                required: true,
-                message: "璐﹀崟鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
-            ],                  },
-                                customerName: {
-          label: '瀹㈡埛鍚嶇О',
-                                rules: [
-              {
-                required: true,
-                message: "瀹㈡埛鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
-            ],                  },
-                                isInternalSettlement: {
-          label: '鏄惁鍐呴儴缁撶畻',
-                                rules: [
-              {
-                required: true,
-                message: "鏄惁鍐呴儴缁撶畻涓嶈兘涓虹┖", trigger: "blur" }
-            ],                  },
-                                internalSettlementUnit: {
-          label: '鍐呴儴缁撶畻鍗曚綅',
-                            },
-                                documentCount: {
-          label: '鍗曟嵁鏁伴噺',
-                            },
-                                totalAmount: {
-          label: '搴旂粨绠楅噾棰�',
-                            },
-                                currency: {
-          label: '甯佸埗',
-                            },
-                                discountAmount: {
-          label: '鍑忓厤閲戦',
-                            },
-                                receivedAmount: {
-          label: '宸叉敹閲戦',
-                            },
-                                pendingAmount: {
-          label: '寰呮敹閲戦',
-                            },
-                                exchangeRate: {
-          label: '姹囩巼',
-                            },
-                                cnyAmount: {
-          label: '浜烘皯甯侀噾棰�',
-                            },
-                                periodType: {
-          label: '鍛ㄦ湡绫诲瀷',
-                                rules: [
-              {
-                required: true,
-                message: "鍛ㄦ湡绫诲瀷涓嶈兘涓虹┖", trigger: "change"
-                 }
-            ],                  },
-                                businessStartDate: {
-          label: '涓氬姟鏈熼棿寮�濮嬫棩鏈�',
-                                rules: [
-              {
-                required: true,
-                message: "涓氬姟鏈熼棿寮�濮嬫棩鏈熶笉鑳戒负绌�", trigger: "blur" }
-            ],                  },
-                                businessEndDate: {
-          label: '涓氬姟鏈熼棿缁撴潫鏃ユ湡',
-                                rules: [
-              {
-                required: true,
-                message: "涓氬姟鏈熼棿缁撴潫鏃ユ湡涓嶈兘涓虹┖", trigger: "blur" }
-            ],                  },
-                                billingStartDate: {
-          label: '璐︽湡寮�濮嬫棩鏈�',
-                                rules: [
-              {
-                required: true,
-                message: "璐︽湡寮�濮嬫棩鏈熶笉鑳戒负绌�", trigger: "blur" }
-            ],                  },
-                                billingEndDate: {
-          label: '璐︽湡缁撴潫鏃ユ湡',
-                                rules: [
-              {
-                required: true,
-                message: "璐︽湡缁撴潫鏃ユ湡涓嶈兘涓虹┖", trigger: "blur" }
-            ],                  },
-                                billGenerateDate: {
-          label: '璐﹀崟鐢熸垚鏃ユ湡',
-                                rules: [
-              {
-                required: true,
-                message: "璐﹀崟鐢熸垚鏃ユ湡涓嶈兘涓虹┖", trigger: "blur" }
-            ],                  },
-                                billSendDate: {
-          label: '璐﹀崟鍙戦�佹棩鏈�',
-                            },
-                                billDueDate: {
-          label: '璐﹀崟鍒版湡鏃ユ湡',
-                                rules: [
-              {
-                required: true,
-                message: "璐﹀崟鍒版湡鏃ユ湡涓嶈兘涓虹┖", trigger: "blur" }
-            ],                  },
-                                status: {
-          label: '鐘舵��(draft:鑽夌;generated:宸茬敓鎴�;sent:宸插彂閫�;partial_paid:閮ㄥ垎鏀舵;paid:宸叉敹娆�;cancelled:宸插彇娑�)',
-                            },
-                                remark: {
-          label: '澶囨敞',
-                      type: 'textarea', minRows: 3, maxRows: 5,
-                            },
-                                createBy: {
-          label: '鍒涘缓浜�',
-                            },
-                                createTime: {
-          label: '鍒涘缓鏃堕棿',
-                            },
-                                updateBy: {
-          label: '鏇存柊浜�',
-                            },
-                                updateTime: {
-          label: '鏇存柊鏃堕棿',
-                            },
-                                deleted: {
-          label: '鍒犻櫎鏍囪(0:姝e父;1:鍒犻櫎)',
-                            },
-          }
-  })
+    billName: {
+      label: '璐﹀崟鍚嶇О',
+      minWidth: 150,
+      search: true,
 
-  const { tableData,pageF,rowSave,rowUpdate,rowDel,beforeOpen,searchChange,
-    searchReset,selectionChange,onLoad,currentChange,sizeChange,handleDelete,handleExport,handleUpdate,refreshChange} = usePagePlus({
-    form:form,
-    option:option,
-    queryParams:queryParams,
-    idKey:'id',
-    page:page.value,
-    getListApi:listReceivableBillManagement,
-    getDetailApi:getReceivableBillManagement,
-    exportApi:exportReceivableBillManagement,
-    deleteApi:delReceivableBillManagement,
-    addApi:addReceivableBillManagement,
-    updateApi:updateReceivableBillManagement,
-    handleUpdateFunc:()=>{
+
+      rules: [
+        {
+          required: true,
+          message: "璐﹀崟鍚嶇О涓嶈兘涓虹┖", trigger: "blur"
+        }
+      ],
+    },
+    customerName: {
+      label: '瀹㈡埛鍚嶇О',
+      minWidth: 150,
+      search: true,
+
+
+      rules: [
+        {
+          required: true,
+          message: "瀹㈡埛鍚嶇О涓嶈兘涓虹┖", trigger: "blur"
+        }
+      ],
+    },
+    // isInternalSettlement: {
+    //   label: '鏄惁鍐呴儴缁撶畻',
+    //   rules: [
+    //     {
+    //       required: true,
+    //       message: "鏄惁鍐呴儴缁撶畻涓嶈兘涓虹┖", trigger: "blur"
+    //     }
+    //   ],
+    // },
+    // internalSettlementUnit: {
+    //   label: '鍐呴儴缁撶畻鍗曚綅',
+    // },
+    documentCount: {
+      label: '鍗曟嵁鏁伴噺',
+      minWidth: 100,
+
+    },
+    totalAmount: {
+      label: '搴旂粨绠楅噾棰�',
+      minWidth: 100,
+
+    },
+    currency: {
+      label: '甯佸埗',
+      minWidth: 100,
+
+    },
+    discountAmount: {
+      label: '鍑忓厤閲戦',
+      minWidth: 100,
+
+    },
+    receivedAmount: {
+      label: '宸叉敹閲戦',
+      minWidth: 100,
+
+    },
+    pendingAmount: {
+      label: '寰呮敹閲戦',
+      minWidth: 100,
+
+    },
+    // exchangeRate: {
+    //   label: '姹囩巼',
+    // },
+    // cnyAmount: {
+    //   label: '浜烘皯甯侀噾棰�',
+    // },
+    // 鍦� option 鐨� column 涓慨鏀� periodType
+    periodType: {
+      label: '鍛ㄦ湡绫诲瀷',
+      minWidth: 200, // 澧炲姞瀹藉害浠ュ绾虫棩鏈熻寖鍥�
+
+    },
+    businessStartDateArray: {
+      label: '涓氬姟鏈熼棿',
+      formatter: (row) => {
+        if (row.businessEndDate && row.businessStartDate) {
+          return `${row.businessStartDate} 鑷� ${row.businessEndDate}`;
+        }
+        return row.periodType || '-';
+      }
+    },
+    businessDateArray: {
+      label: '璐﹀崟鍛ㄦ湡',
+      formatter: (row) => {
+        if (row.billingStartDate && row.billingEndDate) {
+          return `${row.billingStartDate} 鑷� ${row.billingEndDate}`;
+        }
+        return row.periodType || '-';
+      }
+    },
+    // businessEndDate: {
+    //   label: '涓氬姟鏈熼棿缁撴潫鏃ユ湡',
+    //   rules: [
+    //     {
+    //       required: true,
+    //       message: "涓氬姟鏈熼棿缁撴潫鏃ユ湡涓嶈兘涓虹┖", trigger: "blur"
+    //     }
+    //   ],
+    // },
+    // billingStartDate: {
+    //   label: '璐︽湡寮�濮嬫棩鏈�',
+    //   rules: [
+    //     {
+    //       required: true,
+    //       message: "璐︽湡寮�濮嬫棩鏈熶笉鑳戒负绌�", trigger: "blur"
+    //     }
+    //   ],
+    // },
+    // billingEndDate: {
+    //   label: '璐︽湡缁撴潫鏃ユ湡',
+    //   rules: [
+    //     {
+    //       required: true,
+    //       message: "璐︽湡缁撴潫鏃ユ湡涓嶈兘涓虹┖", trigger: "blur"
+    //     }
+    //   ],
+    // },
+    billGenerateDate: {
+      label: '璐﹀崟鐢熸垚鏃ユ湡',
+      minWidth: 150,
+
+      rules: [
+        {
+          required: true,
+          message: "璐﹀崟鐢熸垚鏃ユ湡涓嶈兘涓虹┖", trigger: "blur"
+        }
+      ],
+    },
+    billSendDate: {
+      label: '璐﹀崟鍙戦�佹棩鏈�',
+      minWidth: 150,
+
+    },
+    billDueDate: {
+      label: '璐﹀崟鍒版湡鏃ユ湡',
+      minWidth: 150,
+
+      rules: [
+        {
+          required: true,
+          message: "璐﹀崟鍒版湡鏃ユ湡涓嶈兘涓虹┖", trigger: "blur"
+        }
+      ],
+    },
+
+
+    // remark: {
+    //   label: '澶囨敞',
+    //   type: 'textarea', minRows: 3, maxRows: 5,
+    // },
+    createBy: {
+      label: '鍒涘缓浜�',
+      minWidth: 150,
+
+    },
+    createTime: {
+      label: '鍒涘缓鏃堕棿',
+      minWidth: 200,
+
+    },
+    updateBy: {
+      label: '鏇存柊浜�',
+      minWidth: 150,
+
+    },
+    updateTime: {
+      label: '鏇存柊鏃堕棿',
+      minWidth: 200,
+
+    },
+    status: {
+      label: '鐘舵��',
+      minWidth: 120,
+      fixed: 'right',
+      type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/sys_bill_status',
+      search: true,
+      rules: [
+        {
+          required: true,
+          message: "鐘舵�佷笉鑳戒负绌�", trigger: "blur"
+        }
+      ],
+    },
+    // deleted: {
+    //   label: '鍒犻櫎鏍囪(0:姝e父;1:鍒犻櫎)',
+    // },
+  }
+})
+
+const { tableData, pageF, rowSave, rowUpdate, rowDel, beforeOpen, searchChange,
+  searchReset, selectionChange, onLoad, currentChange, sizeChange, handleDelete, handleExport, handleUpdate, refreshChange } = usePagePlus({
+    form: form,
+    option: option,
+    queryParams: queryParams,
+    idKey: 'id',
+    page: page.value,
+    getListApi: listReceivableBillManagement,
+    getDetailApi: getReceivableBillManagement,
+    exportApi: exportReceivableBillManagement,
+    deleteApi: delReceivableBillManagement,
+    addApi: addReceivableBillManagement,
+    updateApi: updateReceivableBillManagement,
+    handleUpdateFunc: () => {
       crudRef.value.rowEdit(selectionList.value[0]);
     },
-    handleSelectionChangeFunc:(selection:any)=>{
+    handleSelectionChangeFunc: (selection: any) => {
       selectionList.value = selection;
     }
   })
 
+const settleDialogRef = ref()
+const currentType = ref<'receivable' | 'payable'>('receivable')
+const ids = ref('')
+const handleSettle = (row) => {
+  currentType.value = 'receivable'
+  ids.value = row.id
+  getReceivableBillManagement(row.id).then((res) => {
+    if (res.code === 200) {
+      settleDialogRef.value.open(res.data)
+    }
+  })
+
+}
+
+
+const handleRefresh = (data) => {
+  console.log(data);
+  // ids.value 
+  data.billId = ids.value
+  addReceivableBillSettlementDetail(data).then((res) => {
+    if (res.code == 200) {
+      settleDialogRef.value.openIshpw()
+      proxy.$modal.msgSuccess(res.msg);
+      onLoad(page.value)
+
+    }
+  })
+}
+// 缁撶畻鍘嗗彶寮圭獥寮曠敤
+const historyRef = ref();
+const activeType = ref('receivable');
+/** 鏌ョ湅缁撶畻璁板綍 */
+const handleViewHistory = (row: any) => {
+  // 鍋囪鐖剁粍浠堕�氳繃鏌愮鏂瑰紡鐭ラ亾褰撳墠鏄簲鏀惰繕鏄簲浠橀�昏緫
+  // 鎴栬�呯洿鎺ヤ粠 row 閲岀殑鏌愪釜瀛楁鍒ゆ柇
+  historyRef.value.open(row);
+};
+
+/* 鑾峰彇缁撶畻鍘嗗彶鏁版嵁 */
+// 2. 瀹氫箟寮曠敤鍜岀被鍨�
+const feeDetailRef = ref();
+
+/** 鏌ョ湅璐圭敤鏄庣粏鎸夐挳鐐瑰嚮浜嬩欢 */
+const handleViewFeeDetail = (row: any) => {
+  // 璁剧疆褰撳墠涓氬姟绫诲瀷锛堝簲鏀堕〉闈紶 'receivable'锛屽簲浠橀〉闈紶 'payable'锛�
+  activeType.value = 'receivable';
+  feeDetailRef.value.open(row);
+
+};
+const handleInvalid = (row: any) => {
+  proxy.$modal.confirm(`鏄惁浣滃簾璇ョ郴缁熺紪鍙� 锛�${row.systemNo}?`).then(function () {
+    return receivableBillManagementVoid(row.id);
+  }).then((res) => {
+    onLoad(page.value);
+    proxy.$modal.msgSuccess(res.msg);
+  })
+
+}
+const logModalRef = ref(null);
+const handleFlow = (row: any,) => {
+  // 杩欓噷鍙互浠� row 涓洿鎺ヨ幏鍙栨棩蹇楋紝鎴栬�呰皟鐢ㄥ悗绔帴鍙f煡璇�
+  listReceivableBillManagementLog({billId:row.id}).then((res) => {
+    if (res.code == 200) {
+     logModalRef.value.open(res.rows,'listReceivableBillManagementLog');
+
+    }
+  });
+}
 
 </script>

--
Gitblit v1.8.0