From fdec0acc238c0c69d3a3a003e4c675f44f0cd96d Mon Sep 17 00:00:00 2001
From: rjg <746338628@qq.com>
Date: Wed, 16 Apr 2025 17:57:32 +0800
Subject: [PATCH] Merge branch 'master' of http://139.196.74.78:10010/r/drone/drone-web-manage

---
 src/views/tickets/ticket.vue |   60 +++++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 47 insertions(+), 13 deletions(-)

diff --git a/src/views/tickets/ticket.vue b/src/views/tickets/ticket.vue
index 436d8c4..9ef2cc2 100644
--- a/src/views/tickets/ticket.vue
+++ b/src/views/tickets/ticket.vue
@@ -1,7 +1,7 @@
 <template>
   <basic-container>
     <el-tabs v-model="activeTab" @tab-click="handleTabChange">
-      <el-tab-pane v-for="tab in tabs" :key="tab.name" :label="`${tab.label} (${tab.count})`" :name="tab.name">
+      <el-tab-pane v-for="tab in filteredTabs" :key="tab.name" :label="`${tab.label} (${tab.count})`" :name="tab.name">
         <div class="tab-content">
           <!-- 查询条件筛选栏 -->
           <div class="filter-bar">
@@ -30,13 +30,13 @@
           <!-- 表格部分 -->
           <avue-crud ref="avueCrud" v-model="tableData" :option="option" :data="tableData" v-model:page="page"
             @size-change="sizeChange" @current-change="handleCurrentChange" :table-loading="loading"
-            @selection-change="handleSelectionChange">
+            @selection-change="handleSelectionChange" :permission="permissionList">
             <template #menu-left>
-              <el-button v-if="activeTab === 'all' || activeTab === 'myTickets'" type="primary" icon="el-icon-plus"
+              <el-button v-if="(activeTab === 'all' || activeTab === 'myTickets') && permissionList.addBtn" type="primary" icon="el-icon-plus"
                 @click="handleAdd">新建工单</el-button>
-              <el-button v-if="activeTab === 'pending'" type="success" icon="el-icon-check"
+              <el-button v-if="activeTab === 'pending' && permissionList.reviewBtn" type="success" icon="el-icon-check"
                 @click="openReviewDialog">批量审核</el-button>
-              <el-button type="success" plain icon="el-icon-download" @click="exportData">导出</el-button>
+              <el-button v-if="permissionList.exportBtn" type="success" plain icon="el-icon-download" @click="exportData">导出</el-button>
             </template>
             <template #menu="{ row }">
               <template v-if="row.status === -1">
@@ -445,14 +445,15 @@
   data() {
     return {
       activeTab: "all",
+      // tabs 只保留静态结构,不做权限判断
       tabs: [
-        { label: "全部工单", name: "all", value: null, count: 0, isShow: true },
-        { label: "待审核", name: "pending", value: 2, count: 0, isShow: true },
-        { label: "待处理", name: "processing", value: 0, count: 0, isShow: true },
-        { label: "处理中", name: "inProgress", value: 3, count: 0, isShow: true },
-        { label: "已完成", name: "completed", value: 4, count: 0, isShow: true },
-        { label: "已完结", name: "closed", value: 5, count: 0, isShow: false },
-        { label: "我发起的工单", name: "myTickets", value: null, count: 0, isShow: false },
+        { label: "全部工单", name: "all", value: null, count: 0 },
+        { label: "待审核", name: "pending", value: 2, count: 0 },
+        { label: "待处理", name: "processing", value: 0, count: 0 },
+        { label: "处理中", name: "inProgress", value: 3, count: 0 },
+        { label: "已完成", name: "completed", value: 4, count: 0 },
+        { label: "已完结", name: "closed", value: 5, count: 0 },
+        { label: "我发起的工单", name: "myTickets", value: null, count: 0 },
       ],
       filters: {
         keyword: "",
@@ -595,6 +596,8 @@
     this.loadAMapScripts();
     this.fetchDropdownData();
     this.fetchTabCounts(); // 新增:初始化时获取 tab 数据
+    console.log('permission', this.permission.tickets_tab_status);
+    console.log('permission', this.permission.tickets_tab_pending);
   },
   mounted() {
     this.fetchTableData();
@@ -711,7 +714,38 @@
       }
       return this.fixedStatuses; // 默认流程
     },
-    ...mapGetters(['userInfo']),
+    ...mapGetters(['userInfo', 'permission']),
+    // 动态过滤tabs,保证isShow为true/false
+    filteredTabs() {
+      // 统一处理权限,undefined视为false
+      const tabStatus = this.permission?.tickets_tab_status === true;
+      const tabPending = this.permission?.tickets_tab_pending === true;
+      const tabMyTickets = this.permission?.tickets_tab_mytickets === true;
+      return this.tabs.map(tab => {
+        if (tab.name === 'all') {
+          return { ...tab, isShow: true };
+        }
+        if (tab.name === 'pending') {
+          return { ...tab, isShow: tabPending };
+        }
+        if (['processing', 'inProgress', 'completed', 'closed'].includes(tab.name)) {
+          return { ...tab, isShow: tabStatus };
+        }
+        if (tab.name === 'myTickets') {
+          return { ...tab, isShow: tabMyTickets };
+        }
+        return { ...tab, isShow: false };
+      }).filter(tab => tab.isShow);
+    },
+    permissionList() {
+      // 可根据实际后端权限key调整
+      return {
+        addBtn: this.validData(this.permission.tickets_add , false),
+        delBtn: this.validData(this.permission.tickets_delete , false),
+        exportBtn: this.validData(this.permission.tickets_export , false,),
+        reviewBtn: this.validData(this.permission.tickets_review , false),
+      };
+    },
   },
   methods: {
     async loadAMapScripts() {

--
Gitblit v1.9.3